commit 73198f2211dde440cb170db691850d891167f7e2 Author: Madeline McWhorter Date: Wed Jun 17 10:12:19 2026 -0500 initial source code commit diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..4a9518a --- /dev/null +++ b/.classpath @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/libraries/asm_9_9.xml b/.idea/libraries/asm_9_9.xml new file mode 100644 index 0000000..900cbdb --- /dev/null +++ b/.idea/libraries/asm_9_9.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.idea/libraries/asm_commons_9_9.xml b/.idea/libraries/asm_commons_9_9.xml new file mode 100644 index 0000000..5c0f4a1 --- /dev/null +++ b/.idea/libraries/asm_commons_9_9.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.idea/libraries/asm_tree_9_9.xml b/.idea/libraries/asm_tree_9_9.xml new file mode 100644 index 0000000..4675564 --- /dev/null +++ b/.idea/libraries/asm_tree_9_9.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.idea/libraries/codecjorbis_20230120.xml b/.idea/libraries/codecjorbis_20230120.xml new file mode 100644 index 0000000..51fcfe9 --- /dev/null +++ b/.idea/libraries/codecjorbis_20230120.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/.idea/libraries/codecwav_20101023.xml b/.idea/libraries/codecwav_20101023.xml new file mode 100644 index 0000000..eda2e98 --- /dev/null +++ b/.idea/libraries/codecwav_20101023.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/.idea/libraries/deobfuscated.xml b/.idea/libraries/deobfuscated.xml new file mode 100644 index 0000000..c9821c8 --- /dev/null +++ b/.idea/libraries/deobfuscated.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/.idea/libraries/jinput_2_0_5.xml b/.idea/libraries/jinput_2_0_5.xml new file mode 100644 index 0000000..5aae7d7 --- /dev/null +++ b/.idea/libraries/jinput_2_0_5.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.idea/libraries/json_20230311.xml b/.idea/libraries/json_20230311.xml new file mode 100644 index 0000000..d0fe533 --- /dev/null +++ b/.idea/libraries/json_20230311.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.idea/libraries/jutils_1_0_0.xml b/.idea/libraries/jutils_1_0_0.xml new file mode 100644 index 0000000..54a5fe5 --- /dev/null +++ b/.idea/libraries/jutils_1_0_0.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.idea/libraries/launchwrapper_1_2_4.xml b/.idea/libraries/launchwrapper_1_2_4.xml new file mode 100644 index 0000000..7323a68 --- /dev/null +++ b/.idea/libraries/launchwrapper_1_2_4.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.idea/libraries/libraryjavasound_20101123.xml b/.idea/libraries/libraryjavasound_20101123.xml new file mode 100644 index 0000000..e56031c --- /dev/null +++ b/.idea/libraries/libraryjavasound_20101123.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/.idea/libraries/librarylwjglopenal_20100824.xml b/.idea/libraries/librarylwjglopenal_20100824.xml new file mode 100644 index 0000000..b9f6e34 --- /dev/null +++ b/.idea/libraries/librarylwjglopenal_20100824.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/.idea/libraries/lwjgl_2_9_4_nightly_20150209.xml b/.idea/libraries/lwjgl_2_9_4_nightly_20150209.xml new file mode 100644 index 0000000..d657a8b --- /dev/null +++ b/.idea/libraries/lwjgl_2_9_4_nightly_20150209.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.idea/libraries/lwjgl_platform_2_9_4_nightly_20150209.xml b/.idea/libraries/lwjgl_platform_2_9_4_nightly_20150209.xml new file mode 100644 index 0000000..844ba14 --- /dev/null +++ b/.idea/libraries/lwjgl_platform_2_9_4_nightly_20150209.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.idea/libraries/lwjgl_util_2_9_4_nightly_20150209.xml b/.idea/libraries/lwjgl_util_2_9_4_nightly_20150209.xml new file mode 100644 index 0000000..da73409 --- /dev/null +++ b/.idea/libraries/lwjgl_util_2_9_4_nightly_20150209.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/.idea/libraries/soundsystem_20120107.xml b/.idea/libraries/soundsystem_20120107.xml new file mode 100644 index 0000000..75bd7be --- /dev/null +++ b/.idea/libraries/soundsystem_20120107.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..676e679 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 0000000..0990767 --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..b08129d --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,14 @@ + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..f849f75 --- /dev/null +++ b/.project @@ -0,0 +1,26 @@ + + + Minecraft Client + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + + + libraries + 2 + $%7BPARENT-1-PROJECT_LOC%7D/libraries + + + + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..0fee6a9 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,15 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..9a0aee0 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1 @@ +{"configurations":[{"args":["--username","Player","--uuid","-","--session","-","--version","1.5.2","--gameDir",".","--assetsDir",".\\assets","--assetIndex","1.4","--accessToken","-","--userProperties","{}","--userType","legacy","--versionType","snapshot","--skinProxy","pre-1.8"],"request":"launch","mainClass":"org.mcphackers.launchwrapper.Launch","name":"Minecraft Client","type":"java","projectName":"Minecraft Client","vmArgs":"-Djava.library.path=${workspaceFolder}/../libraries/natives"}],"version":"0.2.0"} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..e86b7eb --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1 @@ +{"search.exclude":{"src_original/**":true,"output/**":true,"bin/**":true}} \ No newline at end of file diff --git a/Client.launch b/Client.launch new file mode 100644 index 0000000..48a5d1d --- /dev/null +++ b/Client.launch @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/bin/net/minecraft/client/ClientBrandRetriever.class b/bin/net/minecraft/client/ClientBrandRetriever.class new file mode 100644 index 0000000..af9500d Binary files /dev/null and b/bin/net/minecraft/client/ClientBrandRetriever.class differ diff --git a/bin/net/minecraft/client/Minecraft.class b/bin/net/minecraft/client/Minecraft.class new file mode 100644 index 0000000..e6276ca Binary files /dev/null and b/bin/net/minecraft/client/Minecraft.class differ diff --git a/bin/net/minecraft/client/MinecraftApplet.class b/bin/net/minecraft/client/MinecraftApplet.class new file mode 100644 index 0000000..f5a0dcf Binary files /dev/null and b/bin/net/minecraft/client/MinecraftApplet.class differ diff --git a/bin/net/minecraft/server/MinecraftServer.class b/bin/net/minecraft/server/MinecraftServer.class new file mode 100644 index 0000000..493dcf0 Binary files /dev/null and b/bin/net/minecraft/server/MinecraftServer.class differ diff --git a/bin/net/minecraft/src/AABBLocalPool.class b/bin/net/minecraft/src/AABBLocalPool.class new file mode 100644 index 0000000..97b624c Binary files /dev/null and b/bin/net/minecraft/src/AABBLocalPool.class differ diff --git a/bin/net/minecraft/src/AABBPool.class b/bin/net/minecraft/src/AABBPool.class new file mode 100644 index 0000000..567b980 Binary files /dev/null and b/bin/net/minecraft/src/AABBPool.class differ diff --git a/bin/net/minecraft/src/Achievement.class b/bin/net/minecraft/src/Achievement.class new file mode 100644 index 0000000..3ca9ec3 Binary files /dev/null and b/bin/net/minecraft/src/Achievement.class differ diff --git a/bin/net/minecraft/src/AchievementList.class b/bin/net/minecraft/src/AchievementList.class new file mode 100644 index 0000000..c67280b Binary files /dev/null and b/bin/net/minecraft/src/AchievementList.class differ diff --git a/bin/net/minecraft/src/AchievementMap.class b/bin/net/minecraft/src/AchievementMap.class new file mode 100644 index 0000000..0b5c262 Binary files /dev/null and b/bin/net/minecraft/src/AchievementMap.class differ diff --git a/bin/net/minecraft/src/ActiveRenderInfo.class b/bin/net/minecraft/src/ActiveRenderInfo.class new file mode 100644 index 0000000..a4ea2e8 Binary files /dev/null and b/bin/net/minecraft/src/ActiveRenderInfo.class differ diff --git a/bin/net/minecraft/src/AnvilChunkLoader.class b/bin/net/minecraft/src/AnvilChunkLoader.class new file mode 100644 index 0000000..389006d Binary files /dev/null and b/bin/net/minecraft/src/AnvilChunkLoader.class differ diff --git a/bin/net/minecraft/src/AnvilChunkLoaderPending.class b/bin/net/minecraft/src/AnvilChunkLoaderPending.class new file mode 100644 index 0000000..aad48db Binary files /dev/null and b/bin/net/minecraft/src/AnvilChunkLoaderPending.class differ diff --git a/bin/net/minecraft/src/AnvilConverterData.class b/bin/net/minecraft/src/AnvilConverterData.class new file mode 100644 index 0000000..d1a6bef Binary files /dev/null and b/bin/net/minecraft/src/AnvilConverterData.class differ diff --git a/bin/net/minecraft/src/AnvilConverterException.class b/bin/net/minecraft/src/AnvilConverterException.class new file mode 100644 index 0000000..6bee1b3 Binary files /dev/null and b/bin/net/minecraft/src/AnvilConverterException.class differ diff --git a/bin/net/minecraft/src/AnvilSaveConverter.class b/bin/net/minecraft/src/AnvilSaveConverter.class new file mode 100644 index 0000000..3785a44 Binary files /dev/null and b/bin/net/minecraft/src/AnvilSaveConverter.class differ diff --git a/bin/net/minecraft/src/AnvilSaveConverterFileFilter.class b/bin/net/minecraft/src/AnvilSaveConverterFileFilter.class new file mode 100644 index 0000000..3e627b0 Binary files /dev/null and b/bin/net/minecraft/src/AnvilSaveConverterFileFilter.class differ diff --git a/bin/net/minecraft/src/AnvilSaveHandler.class b/bin/net/minecraft/src/AnvilSaveHandler.class new file mode 100644 index 0000000..acfbd47 Binary files /dev/null and b/bin/net/minecraft/src/AnvilSaveHandler.class differ diff --git a/bin/net/minecraft/src/AxisAlignedBB.class b/bin/net/minecraft/src/AxisAlignedBB.class new file mode 100644 index 0000000..c164771 Binary files /dev/null and b/bin/net/minecraft/src/AxisAlignedBB.class differ diff --git a/bin/net/minecraft/src/BanEntry.class b/bin/net/minecraft/src/BanEntry.class new file mode 100644 index 0000000..37716bf Binary files /dev/null and b/bin/net/minecraft/src/BanEntry.class differ diff --git a/bin/net/minecraft/src/BanList.class b/bin/net/minecraft/src/BanList.class new file mode 100644 index 0000000..429be4c Binary files /dev/null and b/bin/net/minecraft/src/BanList.class differ diff --git a/bin/net/minecraft/src/BehaviorDefaultDispenseItem.class b/bin/net/minecraft/src/BehaviorDefaultDispenseItem.class new file mode 100644 index 0000000..9a21e06 Binary files /dev/null and b/bin/net/minecraft/src/BehaviorDefaultDispenseItem.class differ diff --git a/bin/net/minecraft/src/BehaviorDispenseArmor.class b/bin/net/minecraft/src/BehaviorDispenseArmor.class new file mode 100644 index 0000000..a7a9976 Binary files /dev/null and b/bin/net/minecraft/src/BehaviorDispenseArmor.class differ diff --git a/bin/net/minecraft/src/BehaviorDispenseItemProvider.class b/bin/net/minecraft/src/BehaviorDispenseItemProvider.class new file mode 100644 index 0000000..34d4936 Binary files /dev/null and b/bin/net/minecraft/src/BehaviorDispenseItemProvider.class differ diff --git a/bin/net/minecraft/src/BehaviorDispenseMinecart.class b/bin/net/minecraft/src/BehaviorDispenseMinecart.class new file mode 100644 index 0000000..92a0c90 Binary files /dev/null and b/bin/net/minecraft/src/BehaviorDispenseMinecart.class differ diff --git a/bin/net/minecraft/src/BehaviorProjectileDispense.class b/bin/net/minecraft/src/BehaviorProjectileDispense.class new file mode 100644 index 0000000..d07b284 Binary files /dev/null and b/bin/net/minecraft/src/BehaviorProjectileDispense.class differ diff --git a/bin/net/minecraft/src/BiomeCache.class b/bin/net/minecraft/src/BiomeCache.class new file mode 100644 index 0000000..20a2e26 Binary files /dev/null and b/bin/net/minecraft/src/BiomeCache.class differ diff --git a/bin/net/minecraft/src/BiomeCacheBlock.class b/bin/net/minecraft/src/BiomeCacheBlock.class new file mode 100644 index 0000000..e9172b1 Binary files /dev/null and b/bin/net/minecraft/src/BiomeCacheBlock.class differ diff --git a/bin/net/minecraft/src/BiomeDecorator.class b/bin/net/minecraft/src/BiomeDecorator.class new file mode 100644 index 0000000..f58f9f4 Binary files /dev/null and b/bin/net/minecraft/src/BiomeDecorator.class differ diff --git a/bin/net/minecraft/src/BiomeEndDecorator.class b/bin/net/minecraft/src/BiomeEndDecorator.class new file mode 100644 index 0000000..195e440 Binary files /dev/null and b/bin/net/minecraft/src/BiomeEndDecorator.class differ diff --git a/bin/net/minecraft/src/BiomeGenBase.class b/bin/net/minecraft/src/BiomeGenBase.class new file mode 100644 index 0000000..c8d16a1 Binary files /dev/null and b/bin/net/minecraft/src/BiomeGenBase.class differ diff --git a/bin/net/minecraft/src/BiomeGenBeach.class b/bin/net/minecraft/src/BiomeGenBeach.class new file mode 100644 index 0000000..946f11b Binary files /dev/null and b/bin/net/minecraft/src/BiomeGenBeach.class differ diff --git a/bin/net/minecraft/src/BiomeGenDesert.class b/bin/net/minecraft/src/BiomeGenDesert.class new file mode 100644 index 0000000..09e327b Binary files /dev/null and b/bin/net/minecraft/src/BiomeGenDesert.class differ diff --git a/bin/net/minecraft/src/BiomeGenEnd.class b/bin/net/minecraft/src/BiomeGenEnd.class new file mode 100644 index 0000000..bb2c7ba Binary files /dev/null and b/bin/net/minecraft/src/BiomeGenEnd.class differ diff --git a/bin/net/minecraft/src/BiomeGenForest.class b/bin/net/minecraft/src/BiomeGenForest.class new file mode 100644 index 0000000..3bdb048 Binary files /dev/null and b/bin/net/minecraft/src/BiomeGenForest.class differ diff --git a/bin/net/minecraft/src/BiomeGenHell.class b/bin/net/minecraft/src/BiomeGenHell.class new file mode 100644 index 0000000..b16fe5d Binary files /dev/null and b/bin/net/minecraft/src/BiomeGenHell.class differ diff --git a/bin/net/minecraft/src/BiomeGenHills.class b/bin/net/minecraft/src/BiomeGenHills.class new file mode 100644 index 0000000..b9b0af0 Binary files /dev/null and b/bin/net/minecraft/src/BiomeGenHills.class differ diff --git a/bin/net/minecraft/src/BiomeGenJungle.class b/bin/net/minecraft/src/BiomeGenJungle.class new file mode 100644 index 0000000..36bfe4d Binary files /dev/null and b/bin/net/minecraft/src/BiomeGenJungle.class differ diff --git a/bin/net/minecraft/src/BiomeGenMushroomIsland.class b/bin/net/minecraft/src/BiomeGenMushroomIsland.class new file mode 100644 index 0000000..57a7d56 Binary files /dev/null and b/bin/net/minecraft/src/BiomeGenMushroomIsland.class differ diff --git a/bin/net/minecraft/src/BiomeGenOcean.class b/bin/net/minecraft/src/BiomeGenOcean.class new file mode 100644 index 0000000..2d43220 Binary files /dev/null and b/bin/net/minecraft/src/BiomeGenOcean.class differ diff --git a/bin/net/minecraft/src/BiomeGenPlains.class b/bin/net/minecraft/src/BiomeGenPlains.class new file mode 100644 index 0000000..45d5558 Binary files /dev/null and b/bin/net/minecraft/src/BiomeGenPlains.class differ diff --git a/bin/net/minecraft/src/BiomeGenRiver.class b/bin/net/minecraft/src/BiomeGenRiver.class new file mode 100644 index 0000000..a84e6c0 Binary files /dev/null and b/bin/net/minecraft/src/BiomeGenRiver.class differ diff --git a/bin/net/minecraft/src/BiomeGenSnow.class b/bin/net/minecraft/src/BiomeGenSnow.class new file mode 100644 index 0000000..652e742 Binary files /dev/null and b/bin/net/minecraft/src/BiomeGenSnow.class differ diff --git a/bin/net/minecraft/src/BiomeGenSwamp.class b/bin/net/minecraft/src/BiomeGenSwamp.class new file mode 100644 index 0000000..a4fe6c4 Binary files /dev/null and b/bin/net/minecraft/src/BiomeGenSwamp.class differ diff --git a/bin/net/minecraft/src/BiomeGenTaiga.class b/bin/net/minecraft/src/BiomeGenTaiga.class new file mode 100644 index 0000000..8a6cf7f Binary files /dev/null and b/bin/net/minecraft/src/BiomeGenTaiga.class differ diff --git a/bin/net/minecraft/src/Block.class b/bin/net/minecraft/src/Block.class new file mode 100644 index 0000000..b8d5075 Binary files /dev/null and b/bin/net/minecraft/src/Block.class differ diff --git a/bin/net/minecraft/src/BlockAnvil.class b/bin/net/minecraft/src/BlockAnvil.class new file mode 100644 index 0000000..cbe83b2 Binary files /dev/null and b/bin/net/minecraft/src/BlockAnvil.class differ diff --git a/bin/net/minecraft/src/BlockBasePressurePlate.class b/bin/net/minecraft/src/BlockBasePressurePlate.class new file mode 100644 index 0000000..e485fc8 Binary files /dev/null and b/bin/net/minecraft/src/BlockBasePressurePlate.class differ diff --git a/bin/net/minecraft/src/BlockBaseRailLogic.class b/bin/net/minecraft/src/BlockBaseRailLogic.class new file mode 100644 index 0000000..f916a7c Binary files /dev/null and b/bin/net/minecraft/src/BlockBaseRailLogic.class differ diff --git a/bin/net/minecraft/src/BlockBeacon.class b/bin/net/minecraft/src/BlockBeacon.class new file mode 100644 index 0000000..3ab8fb2 Binary files /dev/null and b/bin/net/minecraft/src/BlockBeacon.class differ diff --git a/bin/net/minecraft/src/BlockBed.class b/bin/net/minecraft/src/BlockBed.class new file mode 100644 index 0000000..33e7aa1 Binary files /dev/null and b/bin/net/minecraft/src/BlockBed.class differ diff --git a/bin/net/minecraft/src/BlockBookshelf.class b/bin/net/minecraft/src/BlockBookshelf.class new file mode 100644 index 0000000..2db3c9b Binary files /dev/null and b/bin/net/minecraft/src/BlockBookshelf.class differ diff --git a/bin/net/minecraft/src/BlockBreakable.class b/bin/net/minecraft/src/BlockBreakable.class new file mode 100644 index 0000000..2327029 Binary files /dev/null and b/bin/net/minecraft/src/BlockBreakable.class differ diff --git a/bin/net/minecraft/src/BlockBrewingStand.class b/bin/net/minecraft/src/BlockBrewingStand.class new file mode 100644 index 0000000..313d1b2 Binary files /dev/null and b/bin/net/minecraft/src/BlockBrewingStand.class differ diff --git a/bin/net/minecraft/src/BlockButton.class b/bin/net/minecraft/src/BlockButton.class new file mode 100644 index 0000000..70b1e83 Binary files /dev/null and b/bin/net/minecraft/src/BlockButton.class differ diff --git a/bin/net/minecraft/src/BlockButtonStone.class b/bin/net/minecraft/src/BlockButtonStone.class new file mode 100644 index 0000000..7a9224f Binary files /dev/null and b/bin/net/minecraft/src/BlockButtonStone.class differ diff --git a/bin/net/minecraft/src/BlockButtonWood.class b/bin/net/minecraft/src/BlockButtonWood.class new file mode 100644 index 0000000..606673e Binary files /dev/null and b/bin/net/minecraft/src/BlockButtonWood.class differ diff --git a/bin/net/minecraft/src/BlockCactus.class b/bin/net/minecraft/src/BlockCactus.class new file mode 100644 index 0000000..35ecb59 Binary files /dev/null and b/bin/net/minecraft/src/BlockCactus.class differ diff --git a/bin/net/minecraft/src/BlockCake.class b/bin/net/minecraft/src/BlockCake.class new file mode 100644 index 0000000..052a4cf Binary files /dev/null and b/bin/net/minecraft/src/BlockCake.class differ diff --git a/bin/net/minecraft/src/BlockCarrot.class b/bin/net/minecraft/src/BlockCarrot.class new file mode 100644 index 0000000..7c4a9c8 Binary files /dev/null and b/bin/net/minecraft/src/BlockCarrot.class differ diff --git a/bin/net/minecraft/src/BlockCauldron.class b/bin/net/minecraft/src/BlockCauldron.class new file mode 100644 index 0000000..a986766 Binary files /dev/null and b/bin/net/minecraft/src/BlockCauldron.class differ diff --git a/bin/net/minecraft/src/BlockChest.class b/bin/net/minecraft/src/BlockChest.class new file mode 100644 index 0000000..b231bb1 Binary files /dev/null and b/bin/net/minecraft/src/BlockChest.class differ diff --git a/bin/net/minecraft/src/BlockClay.class b/bin/net/minecraft/src/BlockClay.class new file mode 100644 index 0000000..dd2bd6c Binary files /dev/null and b/bin/net/minecraft/src/BlockClay.class differ diff --git a/bin/net/minecraft/src/BlockCloth.class b/bin/net/minecraft/src/BlockCloth.class new file mode 100644 index 0000000..dcfce50 Binary files /dev/null and b/bin/net/minecraft/src/BlockCloth.class differ diff --git a/bin/net/minecraft/src/BlockCocoa.class b/bin/net/minecraft/src/BlockCocoa.class new file mode 100644 index 0000000..c7939dd Binary files /dev/null and b/bin/net/minecraft/src/BlockCocoa.class differ diff --git a/bin/net/minecraft/src/BlockCommandBlock.class b/bin/net/minecraft/src/BlockCommandBlock.class new file mode 100644 index 0000000..26e9a0b Binary files /dev/null and b/bin/net/minecraft/src/BlockCommandBlock.class differ diff --git a/bin/net/minecraft/src/BlockComparator.class b/bin/net/minecraft/src/BlockComparator.class new file mode 100644 index 0000000..ad7d148 Binary files /dev/null and b/bin/net/minecraft/src/BlockComparator.class differ diff --git a/bin/net/minecraft/src/BlockContainer.class b/bin/net/minecraft/src/BlockContainer.class new file mode 100644 index 0000000..587633f Binary files /dev/null and b/bin/net/minecraft/src/BlockContainer.class differ diff --git a/bin/net/minecraft/src/BlockCrops.class b/bin/net/minecraft/src/BlockCrops.class new file mode 100644 index 0000000..ef116e5 Binary files /dev/null and b/bin/net/minecraft/src/BlockCrops.class differ diff --git a/bin/net/minecraft/src/BlockDaylightDetector.class b/bin/net/minecraft/src/BlockDaylightDetector.class new file mode 100644 index 0000000..7d48596 Binary files /dev/null and b/bin/net/minecraft/src/BlockDaylightDetector.class differ diff --git a/bin/net/minecraft/src/BlockDeadBush.class b/bin/net/minecraft/src/BlockDeadBush.class new file mode 100644 index 0000000..7571b6f Binary files /dev/null and b/bin/net/minecraft/src/BlockDeadBush.class differ diff --git a/bin/net/minecraft/src/BlockDetectorRail.class b/bin/net/minecraft/src/BlockDetectorRail.class new file mode 100644 index 0000000..edebb0f Binary files /dev/null and b/bin/net/minecraft/src/BlockDetectorRail.class differ diff --git a/bin/net/minecraft/src/BlockDirectional.class b/bin/net/minecraft/src/BlockDirectional.class new file mode 100644 index 0000000..884efd4 Binary files /dev/null and b/bin/net/minecraft/src/BlockDirectional.class differ diff --git a/bin/net/minecraft/src/BlockDirt.class b/bin/net/minecraft/src/BlockDirt.class new file mode 100644 index 0000000..72f3707 Binary files /dev/null and b/bin/net/minecraft/src/BlockDirt.class differ diff --git a/bin/net/minecraft/src/BlockDispenser.class b/bin/net/minecraft/src/BlockDispenser.class new file mode 100644 index 0000000..5bb3dc9 Binary files /dev/null and b/bin/net/minecraft/src/BlockDispenser.class differ diff --git a/bin/net/minecraft/src/BlockDoor.class b/bin/net/minecraft/src/BlockDoor.class new file mode 100644 index 0000000..554526b Binary files /dev/null and b/bin/net/minecraft/src/BlockDoor.class differ diff --git a/bin/net/minecraft/src/BlockDragonEgg.class b/bin/net/minecraft/src/BlockDragonEgg.class new file mode 100644 index 0000000..73122a9 Binary files /dev/null and b/bin/net/minecraft/src/BlockDragonEgg.class differ diff --git a/bin/net/minecraft/src/BlockDropper.class b/bin/net/minecraft/src/BlockDropper.class new file mode 100644 index 0000000..5fa9ffb Binary files /dev/null and b/bin/net/minecraft/src/BlockDropper.class differ diff --git a/bin/net/minecraft/src/BlockEnchantmentTable.class b/bin/net/minecraft/src/BlockEnchantmentTable.class new file mode 100644 index 0000000..7ceb196 Binary files /dev/null and b/bin/net/minecraft/src/BlockEnchantmentTable.class differ diff --git a/bin/net/minecraft/src/BlockEndPortal.class b/bin/net/minecraft/src/BlockEndPortal.class new file mode 100644 index 0000000..c8bf6ad Binary files /dev/null and b/bin/net/minecraft/src/BlockEndPortal.class differ diff --git a/bin/net/minecraft/src/BlockEndPortalFrame.class b/bin/net/minecraft/src/BlockEndPortalFrame.class new file mode 100644 index 0000000..db7d443 Binary files /dev/null and b/bin/net/minecraft/src/BlockEndPortalFrame.class differ diff --git a/bin/net/minecraft/src/BlockEnderChest.class b/bin/net/minecraft/src/BlockEnderChest.class new file mode 100644 index 0000000..f211b79 Binary files /dev/null and b/bin/net/minecraft/src/BlockEnderChest.class differ diff --git a/bin/net/minecraft/src/BlockEventData.class b/bin/net/minecraft/src/BlockEventData.class new file mode 100644 index 0000000..dbc2669 Binary files /dev/null and b/bin/net/minecraft/src/BlockEventData.class differ diff --git a/bin/net/minecraft/src/BlockFarmland.class b/bin/net/minecraft/src/BlockFarmland.class new file mode 100644 index 0000000..540fc0b Binary files /dev/null and b/bin/net/minecraft/src/BlockFarmland.class differ diff --git a/bin/net/minecraft/src/BlockFence.class b/bin/net/minecraft/src/BlockFence.class new file mode 100644 index 0000000..92a96cc Binary files /dev/null and b/bin/net/minecraft/src/BlockFence.class differ diff --git a/bin/net/minecraft/src/BlockFenceGate.class b/bin/net/minecraft/src/BlockFenceGate.class new file mode 100644 index 0000000..aab335f Binary files /dev/null and b/bin/net/minecraft/src/BlockFenceGate.class differ diff --git a/bin/net/minecraft/src/BlockFire.class b/bin/net/minecraft/src/BlockFire.class new file mode 100644 index 0000000..2ab7add Binary files /dev/null and b/bin/net/minecraft/src/BlockFire.class differ diff --git a/bin/net/minecraft/src/BlockFlower.class b/bin/net/minecraft/src/BlockFlower.class new file mode 100644 index 0000000..44fad46 Binary files /dev/null and b/bin/net/minecraft/src/BlockFlower.class differ diff --git a/bin/net/minecraft/src/BlockFlowerPot.class b/bin/net/minecraft/src/BlockFlowerPot.class new file mode 100644 index 0000000..dbc08a3 Binary files /dev/null and b/bin/net/minecraft/src/BlockFlowerPot.class differ diff --git a/bin/net/minecraft/src/BlockFlowing.class b/bin/net/minecraft/src/BlockFlowing.class new file mode 100644 index 0000000..d8d280b Binary files /dev/null and b/bin/net/minecraft/src/BlockFlowing.class differ diff --git a/bin/net/minecraft/src/BlockFluid.class b/bin/net/minecraft/src/BlockFluid.class new file mode 100644 index 0000000..ec443a6 Binary files /dev/null and b/bin/net/minecraft/src/BlockFluid.class differ diff --git a/bin/net/minecraft/src/BlockFurnace.class b/bin/net/minecraft/src/BlockFurnace.class new file mode 100644 index 0000000..6aaf292 Binary files /dev/null and b/bin/net/minecraft/src/BlockFurnace.class differ diff --git a/bin/net/minecraft/src/BlockGlass.class b/bin/net/minecraft/src/BlockGlass.class new file mode 100644 index 0000000..2a7b727 Binary files /dev/null and b/bin/net/minecraft/src/BlockGlass.class differ diff --git a/bin/net/minecraft/src/BlockGlowStone.class b/bin/net/minecraft/src/BlockGlowStone.class new file mode 100644 index 0000000..ea51f89 Binary files /dev/null and b/bin/net/minecraft/src/BlockGlowStone.class differ diff --git a/bin/net/minecraft/src/BlockGrass.class b/bin/net/minecraft/src/BlockGrass.class new file mode 100644 index 0000000..7b77d19 Binary files /dev/null and b/bin/net/minecraft/src/BlockGrass.class differ diff --git a/bin/net/minecraft/src/BlockGravel.class b/bin/net/minecraft/src/BlockGravel.class new file mode 100644 index 0000000..fa3df52 Binary files /dev/null and b/bin/net/minecraft/src/BlockGravel.class differ diff --git a/bin/net/minecraft/src/BlockHalfSlab.class b/bin/net/minecraft/src/BlockHalfSlab.class new file mode 100644 index 0000000..0dccab9 Binary files /dev/null and b/bin/net/minecraft/src/BlockHalfSlab.class differ diff --git a/bin/net/minecraft/src/BlockHopper.class b/bin/net/minecraft/src/BlockHopper.class new file mode 100644 index 0000000..07e7db3 Binary files /dev/null and b/bin/net/minecraft/src/BlockHopper.class differ diff --git a/bin/net/minecraft/src/BlockIce.class b/bin/net/minecraft/src/BlockIce.class new file mode 100644 index 0000000..f46ab05 Binary files /dev/null and b/bin/net/minecraft/src/BlockIce.class differ diff --git a/bin/net/minecraft/src/BlockJukeBox.class b/bin/net/minecraft/src/BlockJukeBox.class new file mode 100644 index 0000000..2ee15b7 Binary files /dev/null and b/bin/net/minecraft/src/BlockJukeBox.class differ diff --git a/bin/net/minecraft/src/BlockLadder.class b/bin/net/minecraft/src/BlockLadder.class new file mode 100644 index 0000000..8f7dd34 Binary files /dev/null and b/bin/net/minecraft/src/BlockLadder.class differ diff --git a/bin/net/minecraft/src/BlockLeaves.class b/bin/net/minecraft/src/BlockLeaves.class new file mode 100644 index 0000000..2e986f7 Binary files /dev/null and b/bin/net/minecraft/src/BlockLeaves.class differ diff --git a/bin/net/minecraft/src/BlockLeavesBase.class b/bin/net/minecraft/src/BlockLeavesBase.class new file mode 100644 index 0000000..7c1b415 Binary files /dev/null and b/bin/net/minecraft/src/BlockLeavesBase.class differ diff --git a/bin/net/minecraft/src/BlockLever.class b/bin/net/minecraft/src/BlockLever.class new file mode 100644 index 0000000..5c72cb7 Binary files /dev/null and b/bin/net/minecraft/src/BlockLever.class differ diff --git a/bin/net/minecraft/src/BlockLilyPad.class b/bin/net/minecraft/src/BlockLilyPad.class new file mode 100644 index 0000000..aebd55b Binary files /dev/null and b/bin/net/minecraft/src/BlockLilyPad.class differ diff --git a/bin/net/minecraft/src/BlockLockedChest.class b/bin/net/minecraft/src/BlockLockedChest.class new file mode 100644 index 0000000..1968b9b Binary files /dev/null and b/bin/net/minecraft/src/BlockLockedChest.class differ diff --git a/bin/net/minecraft/src/BlockLog.class b/bin/net/minecraft/src/BlockLog.class new file mode 100644 index 0000000..a867440 Binary files /dev/null and b/bin/net/minecraft/src/BlockLog.class differ diff --git a/bin/net/minecraft/src/BlockMelon.class b/bin/net/minecraft/src/BlockMelon.class new file mode 100644 index 0000000..7e41f56 Binary files /dev/null and b/bin/net/minecraft/src/BlockMelon.class differ diff --git a/bin/net/minecraft/src/BlockMobSpawner.class b/bin/net/minecraft/src/BlockMobSpawner.class new file mode 100644 index 0000000..06f354f Binary files /dev/null and b/bin/net/minecraft/src/BlockMobSpawner.class differ diff --git a/bin/net/minecraft/src/BlockMushroom.class b/bin/net/minecraft/src/BlockMushroom.class new file mode 100644 index 0000000..17c8811 Binary files /dev/null and b/bin/net/minecraft/src/BlockMushroom.class differ diff --git a/bin/net/minecraft/src/BlockMushroomCap.class b/bin/net/minecraft/src/BlockMushroomCap.class new file mode 100644 index 0000000..0b4c67e Binary files /dev/null and b/bin/net/minecraft/src/BlockMushroomCap.class differ diff --git a/bin/net/minecraft/src/BlockMycelium.class b/bin/net/minecraft/src/BlockMycelium.class new file mode 100644 index 0000000..0401a23 Binary files /dev/null and b/bin/net/minecraft/src/BlockMycelium.class differ diff --git a/bin/net/minecraft/src/BlockNetherStalk.class b/bin/net/minecraft/src/BlockNetherStalk.class new file mode 100644 index 0000000..c9c8384 Binary files /dev/null and b/bin/net/minecraft/src/BlockNetherStalk.class differ diff --git a/bin/net/minecraft/src/BlockNetherrack.class b/bin/net/minecraft/src/BlockNetherrack.class new file mode 100644 index 0000000..17e85e0 Binary files /dev/null and b/bin/net/minecraft/src/BlockNetherrack.class differ diff --git a/bin/net/minecraft/src/BlockNote.class b/bin/net/minecraft/src/BlockNote.class new file mode 100644 index 0000000..7c6b4e0 Binary files /dev/null and b/bin/net/minecraft/src/BlockNote.class differ diff --git a/bin/net/minecraft/src/BlockObsidian.class b/bin/net/minecraft/src/BlockObsidian.class new file mode 100644 index 0000000..a6f50b8 Binary files /dev/null and b/bin/net/minecraft/src/BlockObsidian.class differ diff --git a/bin/net/minecraft/src/BlockOre.class b/bin/net/minecraft/src/BlockOre.class new file mode 100644 index 0000000..f87c71a Binary files /dev/null and b/bin/net/minecraft/src/BlockOre.class differ diff --git a/bin/net/minecraft/src/BlockOreStorage.class b/bin/net/minecraft/src/BlockOreStorage.class new file mode 100644 index 0000000..42d779a Binary files /dev/null and b/bin/net/minecraft/src/BlockOreStorage.class differ diff --git a/bin/net/minecraft/src/BlockPane.class b/bin/net/minecraft/src/BlockPane.class new file mode 100644 index 0000000..4bb8daa Binary files /dev/null and b/bin/net/minecraft/src/BlockPane.class differ diff --git a/bin/net/minecraft/src/BlockPistonBase.class b/bin/net/minecraft/src/BlockPistonBase.class new file mode 100644 index 0000000..df0fcab Binary files /dev/null and b/bin/net/minecraft/src/BlockPistonBase.class differ diff --git a/bin/net/minecraft/src/BlockPistonExtension.class b/bin/net/minecraft/src/BlockPistonExtension.class new file mode 100644 index 0000000..43b2239 Binary files /dev/null and b/bin/net/minecraft/src/BlockPistonExtension.class differ diff --git a/bin/net/minecraft/src/BlockPistonMoving.class b/bin/net/minecraft/src/BlockPistonMoving.class new file mode 100644 index 0000000..4eb5436 Binary files /dev/null and b/bin/net/minecraft/src/BlockPistonMoving.class differ diff --git a/bin/net/minecraft/src/BlockPortal.class b/bin/net/minecraft/src/BlockPortal.class new file mode 100644 index 0000000..9c7310e Binary files /dev/null and b/bin/net/minecraft/src/BlockPortal.class differ diff --git a/bin/net/minecraft/src/BlockPotato.class b/bin/net/minecraft/src/BlockPotato.class new file mode 100644 index 0000000..8807264 Binary files /dev/null and b/bin/net/minecraft/src/BlockPotato.class differ diff --git a/bin/net/minecraft/src/BlockPoweredOre.class b/bin/net/minecraft/src/BlockPoweredOre.class new file mode 100644 index 0000000..7934d09 Binary files /dev/null and b/bin/net/minecraft/src/BlockPoweredOre.class differ diff --git a/bin/net/minecraft/src/BlockPressurePlate.class b/bin/net/minecraft/src/BlockPressurePlate.class new file mode 100644 index 0000000..e064e7f Binary files /dev/null and b/bin/net/minecraft/src/BlockPressurePlate.class differ diff --git a/bin/net/minecraft/src/BlockPressurePlateWeighted.class b/bin/net/minecraft/src/BlockPressurePlateWeighted.class new file mode 100644 index 0000000..1c234a3 Binary files /dev/null and b/bin/net/minecraft/src/BlockPressurePlateWeighted.class differ diff --git a/bin/net/minecraft/src/BlockPumpkin.class b/bin/net/minecraft/src/BlockPumpkin.class new file mode 100644 index 0000000..e7f1296 Binary files /dev/null and b/bin/net/minecraft/src/BlockPumpkin.class differ diff --git a/bin/net/minecraft/src/BlockQuartz.class b/bin/net/minecraft/src/BlockQuartz.class new file mode 100644 index 0000000..b702bf2 Binary files /dev/null and b/bin/net/minecraft/src/BlockQuartz.class differ diff --git a/bin/net/minecraft/src/BlockRail.class b/bin/net/minecraft/src/BlockRail.class new file mode 100644 index 0000000..2e69614 Binary files /dev/null and b/bin/net/minecraft/src/BlockRail.class differ diff --git a/bin/net/minecraft/src/BlockRailBase.class b/bin/net/minecraft/src/BlockRailBase.class new file mode 100644 index 0000000..b2f3864 Binary files /dev/null and b/bin/net/minecraft/src/BlockRailBase.class differ diff --git a/bin/net/minecraft/src/BlockRailPowered.class b/bin/net/minecraft/src/BlockRailPowered.class new file mode 100644 index 0000000..145fc23 Binary files /dev/null and b/bin/net/minecraft/src/BlockRailPowered.class differ diff --git a/bin/net/minecraft/src/BlockRedstoneLight.class b/bin/net/minecraft/src/BlockRedstoneLight.class new file mode 100644 index 0000000..5c252a2 Binary files /dev/null and b/bin/net/minecraft/src/BlockRedstoneLight.class differ diff --git a/bin/net/minecraft/src/BlockRedstoneLogic.class b/bin/net/minecraft/src/BlockRedstoneLogic.class new file mode 100644 index 0000000..9ebe6e1 Binary files /dev/null and b/bin/net/minecraft/src/BlockRedstoneLogic.class differ diff --git a/bin/net/minecraft/src/BlockRedstoneOre.class b/bin/net/minecraft/src/BlockRedstoneOre.class new file mode 100644 index 0000000..8dee9f6 Binary files /dev/null and b/bin/net/minecraft/src/BlockRedstoneOre.class differ diff --git a/bin/net/minecraft/src/BlockRedstoneRepeater.class b/bin/net/minecraft/src/BlockRedstoneRepeater.class new file mode 100644 index 0000000..1f48440 Binary files /dev/null and b/bin/net/minecraft/src/BlockRedstoneRepeater.class differ diff --git a/bin/net/minecraft/src/BlockRedstoneTorch.class b/bin/net/minecraft/src/BlockRedstoneTorch.class new file mode 100644 index 0000000..be98605 Binary files /dev/null and b/bin/net/minecraft/src/BlockRedstoneTorch.class differ diff --git a/bin/net/minecraft/src/BlockRedstoneWire.class b/bin/net/minecraft/src/BlockRedstoneWire.class new file mode 100644 index 0000000..206d426 Binary files /dev/null and b/bin/net/minecraft/src/BlockRedstoneWire.class differ diff --git a/bin/net/minecraft/src/BlockReed.class b/bin/net/minecraft/src/BlockReed.class new file mode 100644 index 0000000..ce09bb6 Binary files /dev/null and b/bin/net/minecraft/src/BlockReed.class differ diff --git a/bin/net/minecraft/src/BlockSand.class b/bin/net/minecraft/src/BlockSand.class new file mode 100644 index 0000000..6410dcc Binary files /dev/null and b/bin/net/minecraft/src/BlockSand.class differ diff --git a/bin/net/minecraft/src/BlockSandStone.class b/bin/net/minecraft/src/BlockSandStone.class new file mode 100644 index 0000000..cab88ad Binary files /dev/null and b/bin/net/minecraft/src/BlockSandStone.class differ diff --git a/bin/net/minecraft/src/BlockSapling.class b/bin/net/minecraft/src/BlockSapling.class new file mode 100644 index 0000000..54195ff Binary files /dev/null and b/bin/net/minecraft/src/BlockSapling.class differ diff --git a/bin/net/minecraft/src/BlockSign.class b/bin/net/minecraft/src/BlockSign.class new file mode 100644 index 0000000..dcd57d0 Binary files /dev/null and b/bin/net/minecraft/src/BlockSign.class differ diff --git a/bin/net/minecraft/src/BlockSilverfish.class b/bin/net/minecraft/src/BlockSilverfish.class new file mode 100644 index 0000000..ea66072 Binary files /dev/null and b/bin/net/minecraft/src/BlockSilverfish.class differ diff --git a/bin/net/minecraft/src/BlockSkull.class b/bin/net/minecraft/src/BlockSkull.class new file mode 100644 index 0000000..3d41a6b Binary files /dev/null and b/bin/net/minecraft/src/BlockSkull.class differ diff --git a/bin/net/minecraft/src/BlockSnow.class b/bin/net/minecraft/src/BlockSnow.class new file mode 100644 index 0000000..596e73d Binary files /dev/null and b/bin/net/minecraft/src/BlockSnow.class differ diff --git a/bin/net/minecraft/src/BlockSnowBlock.class b/bin/net/minecraft/src/BlockSnowBlock.class new file mode 100644 index 0000000..c1f9318 Binary files /dev/null and b/bin/net/minecraft/src/BlockSnowBlock.class differ diff --git a/bin/net/minecraft/src/BlockSoulSand.class b/bin/net/minecraft/src/BlockSoulSand.class new file mode 100644 index 0000000..689133c Binary files /dev/null and b/bin/net/minecraft/src/BlockSoulSand.class differ diff --git a/bin/net/minecraft/src/BlockSourceImpl.class b/bin/net/minecraft/src/BlockSourceImpl.class new file mode 100644 index 0000000..04353c2 Binary files /dev/null and b/bin/net/minecraft/src/BlockSourceImpl.class differ diff --git a/bin/net/minecraft/src/BlockSponge.class b/bin/net/minecraft/src/BlockSponge.class new file mode 100644 index 0000000..0d44b8b Binary files /dev/null and b/bin/net/minecraft/src/BlockSponge.class differ diff --git a/bin/net/minecraft/src/BlockStairs.class b/bin/net/minecraft/src/BlockStairs.class new file mode 100644 index 0000000..77648ad Binary files /dev/null and b/bin/net/minecraft/src/BlockStairs.class differ diff --git a/bin/net/minecraft/src/BlockStationary.class b/bin/net/minecraft/src/BlockStationary.class new file mode 100644 index 0000000..1c55f10 Binary files /dev/null and b/bin/net/minecraft/src/BlockStationary.class differ diff --git a/bin/net/minecraft/src/BlockStem.class b/bin/net/minecraft/src/BlockStem.class new file mode 100644 index 0000000..a6f1952 Binary files /dev/null and b/bin/net/minecraft/src/BlockStem.class differ diff --git a/bin/net/minecraft/src/BlockStep.class b/bin/net/minecraft/src/BlockStep.class new file mode 100644 index 0000000..68a5ea1 Binary files /dev/null and b/bin/net/minecraft/src/BlockStep.class differ diff --git a/bin/net/minecraft/src/BlockStone.class b/bin/net/minecraft/src/BlockStone.class new file mode 100644 index 0000000..cc27776 Binary files /dev/null and b/bin/net/minecraft/src/BlockStone.class differ diff --git a/bin/net/minecraft/src/BlockStoneBrick.class b/bin/net/minecraft/src/BlockStoneBrick.class new file mode 100644 index 0000000..78c0e81 Binary files /dev/null and b/bin/net/minecraft/src/BlockStoneBrick.class differ diff --git a/bin/net/minecraft/src/BlockTNT.class b/bin/net/minecraft/src/BlockTNT.class new file mode 100644 index 0000000..dbb4b57 Binary files /dev/null and b/bin/net/minecraft/src/BlockTNT.class differ diff --git a/bin/net/minecraft/src/BlockTallGrass.class b/bin/net/minecraft/src/BlockTallGrass.class new file mode 100644 index 0000000..e506d1b Binary files /dev/null and b/bin/net/minecraft/src/BlockTallGrass.class differ diff --git a/bin/net/minecraft/src/BlockTorch.class b/bin/net/minecraft/src/BlockTorch.class new file mode 100644 index 0000000..5d80b74 Binary files /dev/null and b/bin/net/minecraft/src/BlockTorch.class differ diff --git a/bin/net/minecraft/src/BlockTrapDoor.class b/bin/net/minecraft/src/BlockTrapDoor.class new file mode 100644 index 0000000..de476b4 Binary files /dev/null and b/bin/net/minecraft/src/BlockTrapDoor.class differ diff --git a/bin/net/minecraft/src/BlockTripWire.class b/bin/net/minecraft/src/BlockTripWire.class new file mode 100644 index 0000000..5498ef8 Binary files /dev/null and b/bin/net/minecraft/src/BlockTripWire.class differ diff --git a/bin/net/minecraft/src/BlockTripWireSource.class b/bin/net/minecraft/src/BlockTripWireSource.class new file mode 100644 index 0000000..a7bd1ef Binary files /dev/null and b/bin/net/minecraft/src/BlockTripWireSource.class differ diff --git a/bin/net/minecraft/src/BlockVine.class b/bin/net/minecraft/src/BlockVine.class new file mode 100644 index 0000000..6aa66a5 Binary files /dev/null and b/bin/net/minecraft/src/BlockVine.class differ diff --git a/bin/net/minecraft/src/BlockWall.class b/bin/net/minecraft/src/BlockWall.class new file mode 100644 index 0000000..e9ed5cb Binary files /dev/null and b/bin/net/minecraft/src/BlockWall.class differ diff --git a/bin/net/minecraft/src/BlockWeb.class b/bin/net/minecraft/src/BlockWeb.class new file mode 100644 index 0000000..a8d44ef Binary files /dev/null and b/bin/net/minecraft/src/BlockWeb.class differ diff --git a/bin/net/minecraft/src/BlockWood.class b/bin/net/minecraft/src/BlockWood.class new file mode 100644 index 0000000..cef775b Binary files /dev/null and b/bin/net/minecraft/src/BlockWood.class differ diff --git a/bin/net/minecraft/src/BlockWoodSlab.class b/bin/net/minecraft/src/BlockWoodSlab.class new file mode 100644 index 0000000..7c9c259 Binary files /dev/null and b/bin/net/minecraft/src/BlockWoodSlab.class differ diff --git a/bin/net/minecraft/src/BlockWorkbench.class b/bin/net/minecraft/src/BlockWorkbench.class new file mode 100644 index 0000000..9766357 Binary files /dev/null and b/bin/net/minecraft/src/BlockWorkbench.class differ diff --git a/bin/net/minecraft/src/BossStatus.class b/bin/net/minecraft/src/BossStatus.class new file mode 100644 index 0000000..9acd517 Binary files /dev/null and b/bin/net/minecraft/src/BossStatus.class differ diff --git a/bin/net/minecraft/src/CallableBlockDataValue.class b/bin/net/minecraft/src/CallableBlockDataValue.class new file mode 100644 index 0000000..593a6bf Binary files /dev/null and b/bin/net/minecraft/src/CallableBlockDataValue.class differ diff --git a/bin/net/minecraft/src/CallableBlockLocation.class b/bin/net/minecraft/src/CallableBlockLocation.class new file mode 100644 index 0000000..80b810b Binary files /dev/null and b/bin/net/minecraft/src/CallableBlockLocation.class differ diff --git a/bin/net/minecraft/src/CallableBlockType.class b/bin/net/minecraft/src/CallableBlockType.class new file mode 100644 index 0000000..92ca6bf Binary files /dev/null and b/bin/net/minecraft/src/CallableBlockType.class differ diff --git a/bin/net/minecraft/src/CallableChunkPosHash.class b/bin/net/minecraft/src/CallableChunkPosHash.class new file mode 100644 index 0000000..045f3ca Binary files /dev/null and b/bin/net/minecraft/src/CallableChunkPosHash.class differ diff --git a/bin/net/minecraft/src/CallableClientMemoryStats.class b/bin/net/minecraft/src/CallableClientMemoryStats.class new file mode 100644 index 0000000..0e110e8 Binary files /dev/null and b/bin/net/minecraft/src/CallableClientMemoryStats.class differ diff --git a/bin/net/minecraft/src/CallableClientProfiler.class b/bin/net/minecraft/src/CallableClientProfiler.class new file mode 100644 index 0000000..4562094 Binary files /dev/null and b/bin/net/minecraft/src/CallableClientProfiler.class differ diff --git a/bin/net/minecraft/src/CallableCrashMemoryReport.class b/bin/net/minecraft/src/CallableCrashMemoryReport.class new file mode 100644 index 0000000..a8857ec Binary files /dev/null and b/bin/net/minecraft/src/CallableCrashMemoryReport.class differ diff --git a/bin/net/minecraft/src/CallableEffectAmplifier.class b/bin/net/minecraft/src/CallableEffectAmplifier.class new file mode 100644 index 0000000..a478cea Binary files /dev/null and b/bin/net/minecraft/src/CallableEffectAmplifier.class differ diff --git a/bin/net/minecraft/src/CallableEffectDuration.class b/bin/net/minecraft/src/CallableEffectDuration.class new file mode 100644 index 0000000..60d5b85 Binary files /dev/null and b/bin/net/minecraft/src/CallableEffectDuration.class differ diff --git a/bin/net/minecraft/src/CallableEffectID.class b/bin/net/minecraft/src/CallableEffectID.class new file mode 100644 index 0000000..ec94095 Binary files /dev/null and b/bin/net/minecraft/src/CallableEffectID.class differ diff --git a/bin/net/minecraft/src/CallableEffectIsAmbient.class b/bin/net/minecraft/src/CallableEffectIsAmbient.class new file mode 100644 index 0000000..b20ebdf Binary files /dev/null and b/bin/net/minecraft/src/CallableEffectIsAmbient.class differ diff --git a/bin/net/minecraft/src/CallableEffectIsSplash.class b/bin/net/minecraft/src/CallableEffectIsSplash.class new file mode 100644 index 0000000..c63ecc5 Binary files /dev/null and b/bin/net/minecraft/src/CallableEffectIsSplash.class differ diff --git a/bin/net/minecraft/src/CallableEffectName.class b/bin/net/minecraft/src/CallableEffectName.class new file mode 100644 index 0000000..5dc3647 Binary files /dev/null and b/bin/net/minecraft/src/CallableEffectName.class differ diff --git a/bin/net/minecraft/src/CallableEntityName.class b/bin/net/minecraft/src/CallableEntityName.class new file mode 100644 index 0000000..a781e03 Binary files /dev/null and b/bin/net/minecraft/src/CallableEntityName.class differ diff --git a/bin/net/minecraft/src/CallableEntityTracker.class b/bin/net/minecraft/src/CallableEntityTracker.class new file mode 100644 index 0000000..c5e58a0 Binary files /dev/null and b/bin/net/minecraft/src/CallableEntityTracker.class differ diff --git a/bin/net/minecraft/src/CallableEntityType.class b/bin/net/minecraft/src/CallableEntityType.class new file mode 100644 index 0000000..b9c43fb Binary files /dev/null and b/bin/net/minecraft/src/CallableEntityType.class differ diff --git a/bin/net/minecraft/src/CallableGLInfo.class b/bin/net/minecraft/src/CallableGLInfo.class new file mode 100644 index 0000000..eecbd12 Binary files /dev/null and b/bin/net/minecraft/src/CallableGLInfo.class differ diff --git a/bin/net/minecraft/src/CallableIntCache.class b/bin/net/minecraft/src/CallableIntCache.class new file mode 100644 index 0000000..65bf13d Binary files /dev/null and b/bin/net/minecraft/src/CallableIntCache.class differ diff --git a/bin/net/minecraft/src/CallableIsFeatureChunk.class b/bin/net/minecraft/src/CallableIsFeatureChunk.class new file mode 100644 index 0000000..fa8622e Binary files /dev/null and b/bin/net/minecraft/src/CallableIsFeatureChunk.class differ diff --git a/bin/net/minecraft/src/CallableIsModded.class b/bin/net/minecraft/src/CallableIsModded.class new file mode 100644 index 0000000..4922cb2 Binary files /dev/null and b/bin/net/minecraft/src/CallableIsModded.class differ diff --git a/bin/net/minecraft/src/CallableIsServerModded.class b/bin/net/minecraft/src/CallableIsServerModded.class new file mode 100644 index 0000000..1d75e3a Binary files /dev/null and b/bin/net/minecraft/src/CallableIsServerModded.class differ diff --git a/bin/net/minecraft/src/CallableItemName.class b/bin/net/minecraft/src/CallableItemName.class new file mode 100644 index 0000000..c993784 Binary files /dev/null and b/bin/net/minecraft/src/CallableItemName.class differ diff --git a/bin/net/minecraft/src/CallableJVMFlags.class b/bin/net/minecraft/src/CallableJVMFlags.class new file mode 100644 index 0000000..8fe982b Binary files /dev/null and b/bin/net/minecraft/src/CallableJVMFlags.class differ diff --git a/bin/net/minecraft/src/CallableJavaInfo.class b/bin/net/minecraft/src/CallableJavaInfo.class new file mode 100644 index 0000000..c316605 Binary files /dev/null and b/bin/net/minecraft/src/CallableJavaInfo.class differ diff --git a/bin/net/minecraft/src/CallableJavaInfo2.class b/bin/net/minecraft/src/CallableJavaInfo2.class new file mode 100644 index 0000000..b673585 Binary files /dev/null and b/bin/net/minecraft/src/CallableJavaInfo2.class differ diff --git a/bin/net/minecraft/src/CallableLWJGLVersion.class b/bin/net/minecraft/src/CallableLWJGLVersion.class new file mode 100644 index 0000000..a7fdfc7 Binary files /dev/null and b/bin/net/minecraft/src/CallableLWJGLVersion.class differ diff --git a/bin/net/minecraft/src/CallableLevelDimension.class b/bin/net/minecraft/src/CallableLevelDimension.class new file mode 100644 index 0000000..face5b9 Binary files /dev/null and b/bin/net/minecraft/src/CallableLevelDimension.class differ diff --git a/bin/net/minecraft/src/CallableLevelGamemode.class b/bin/net/minecraft/src/CallableLevelGamemode.class new file mode 100644 index 0000000..08720d6 Binary files /dev/null and b/bin/net/minecraft/src/CallableLevelGamemode.class differ diff --git a/bin/net/minecraft/src/CallableLevelGenerator.class b/bin/net/minecraft/src/CallableLevelGenerator.class new file mode 100644 index 0000000..99e716c Binary files /dev/null and b/bin/net/minecraft/src/CallableLevelGenerator.class differ diff --git a/bin/net/minecraft/src/CallableLevelGeneratorOptions.class b/bin/net/minecraft/src/CallableLevelGeneratorOptions.class new file mode 100644 index 0000000..6f952b6 Binary files /dev/null and b/bin/net/minecraft/src/CallableLevelGeneratorOptions.class differ diff --git a/bin/net/minecraft/src/CallableLevelSeed.class b/bin/net/minecraft/src/CallableLevelSeed.class new file mode 100644 index 0000000..1d9ea0d Binary files /dev/null and b/bin/net/minecraft/src/CallableLevelSeed.class differ diff --git a/bin/net/minecraft/src/CallableLevelSpawnLocation.class b/bin/net/minecraft/src/CallableLevelSpawnLocation.class new file mode 100644 index 0000000..ad90fe7 Binary files /dev/null and b/bin/net/minecraft/src/CallableLevelSpawnLocation.class differ diff --git a/bin/net/minecraft/src/CallableLevelStorageVersion.class b/bin/net/minecraft/src/CallableLevelStorageVersion.class new file mode 100644 index 0000000..8f0c01d Binary files /dev/null and b/bin/net/minecraft/src/CallableLevelStorageVersion.class differ diff --git a/bin/net/minecraft/src/CallableLevelTime.class b/bin/net/minecraft/src/CallableLevelTime.class new file mode 100644 index 0000000..7983917 Binary files /dev/null and b/bin/net/minecraft/src/CallableLevelTime.class differ diff --git a/bin/net/minecraft/src/CallableLevelWeather.class b/bin/net/minecraft/src/CallableLevelWeather.class new file mode 100644 index 0000000..02c6358 Binary files /dev/null and b/bin/net/minecraft/src/CallableLevelWeather.class differ diff --git a/bin/net/minecraft/src/CallableLvl1.class b/bin/net/minecraft/src/CallableLvl1.class new file mode 100644 index 0000000..d53df55 Binary files /dev/null and b/bin/net/minecraft/src/CallableLvl1.class differ diff --git a/bin/net/minecraft/src/CallableLvl2.class b/bin/net/minecraft/src/CallableLvl2.class new file mode 100644 index 0000000..d0d36e1 Binary files /dev/null and b/bin/net/minecraft/src/CallableLvl2.class differ diff --git a/bin/net/minecraft/src/CallableLvl3.class b/bin/net/minecraft/src/CallableLvl3.class new file mode 100644 index 0000000..7637ca1 Binary files /dev/null and b/bin/net/minecraft/src/CallableLvl3.class differ diff --git a/bin/net/minecraft/src/CallableMPL1.class b/bin/net/minecraft/src/CallableMPL1.class new file mode 100644 index 0000000..d2e1cee Binary files /dev/null and b/bin/net/minecraft/src/CallableMPL1.class differ diff --git a/bin/net/minecraft/src/CallableMPL2.class b/bin/net/minecraft/src/CallableMPL2.class new file mode 100644 index 0000000..17b022c Binary files /dev/null and b/bin/net/minecraft/src/CallableMPL2.class differ diff --git a/bin/net/minecraft/src/CallableMemoryInfo.class b/bin/net/minecraft/src/CallableMemoryInfo.class new file mode 100644 index 0000000..5d26587 Binary files /dev/null and b/bin/net/minecraft/src/CallableMemoryInfo.class differ diff --git a/bin/net/minecraft/src/CallableMinecraftVersion.class b/bin/net/minecraft/src/CallableMinecraftVersion.class new file mode 100644 index 0000000..baddb10 Binary files /dev/null and b/bin/net/minecraft/src/CallableMinecraftVersion.class differ diff --git a/bin/net/minecraft/src/CallableModded.class b/bin/net/minecraft/src/CallableModded.class new file mode 100644 index 0000000..4defd67 Binary files /dev/null and b/bin/net/minecraft/src/CallableModded.class differ diff --git a/bin/net/minecraft/src/CallableMouseLocation.class b/bin/net/minecraft/src/CallableMouseLocation.class new file mode 100644 index 0000000..db5b9ee Binary files /dev/null and b/bin/net/minecraft/src/CallableMouseLocation.class differ diff --git a/bin/net/minecraft/src/CallableOSInfo.class b/bin/net/minecraft/src/CallableOSInfo.class new file mode 100644 index 0000000..c41cb15 Binary files /dev/null and b/bin/net/minecraft/src/CallableOSInfo.class differ diff --git a/bin/net/minecraft/src/CallablePacketClass.class b/bin/net/minecraft/src/CallablePacketClass.class new file mode 100644 index 0000000..ae5847b Binary files /dev/null and b/bin/net/minecraft/src/CallablePacketClass.class differ diff --git a/bin/net/minecraft/src/CallablePacketID.class b/bin/net/minecraft/src/CallablePacketID.class new file mode 100644 index 0000000..8fdad6e Binary files /dev/null and b/bin/net/minecraft/src/CallablePacketID.class differ diff --git a/bin/net/minecraft/src/CallableParticlePositionInfo.class b/bin/net/minecraft/src/CallableParticlePositionInfo.class new file mode 100644 index 0000000..dceecf4 Binary files /dev/null and b/bin/net/minecraft/src/CallableParticlePositionInfo.class differ diff --git a/bin/net/minecraft/src/CallableParticleScreenName.class b/bin/net/minecraft/src/CallableParticleScreenName.class new file mode 100644 index 0000000..9016f0b Binary files /dev/null and b/bin/net/minecraft/src/CallableParticleScreenName.class differ diff --git a/bin/net/minecraft/src/CallableScreenName.class b/bin/net/minecraft/src/CallableScreenName.class new file mode 100644 index 0000000..54c7c6f Binary files /dev/null and b/bin/net/minecraft/src/CallableScreenName.class differ diff --git a/bin/net/minecraft/src/CallableScreenSize.class b/bin/net/minecraft/src/CallableScreenSize.class new file mode 100644 index 0000000..44b41d6 Binary files /dev/null and b/bin/net/minecraft/src/CallableScreenSize.class differ diff --git a/bin/net/minecraft/src/CallableServerMemoryStats.class b/bin/net/minecraft/src/CallableServerMemoryStats.class new file mode 100644 index 0000000..cf599ab Binary files /dev/null and b/bin/net/minecraft/src/CallableServerMemoryStats.class differ diff --git a/bin/net/minecraft/src/CallableServerProfiler.class b/bin/net/minecraft/src/CallableServerProfiler.class new file mode 100644 index 0000000..c39c360 Binary files /dev/null and b/bin/net/minecraft/src/CallableServerProfiler.class differ diff --git a/bin/net/minecraft/src/CallableServerType.class b/bin/net/minecraft/src/CallableServerType.class new file mode 100644 index 0000000..c688401 Binary files /dev/null and b/bin/net/minecraft/src/CallableServerType.class differ diff --git a/bin/net/minecraft/src/CallableStructureType.class b/bin/net/minecraft/src/CallableStructureType.class new file mode 100644 index 0000000..0aaf625 Binary files /dev/null and b/bin/net/minecraft/src/CallableStructureType.class differ diff --git a/bin/net/minecraft/src/CallableSuspiciousClasses.class b/bin/net/minecraft/src/CallableSuspiciousClasses.class new file mode 100644 index 0000000..9de29a6 Binary files /dev/null and b/bin/net/minecraft/src/CallableSuspiciousClasses.class differ diff --git a/bin/net/minecraft/src/CallableTagCompound1.class b/bin/net/minecraft/src/CallableTagCompound1.class new file mode 100644 index 0000000..1235568 Binary files /dev/null and b/bin/net/minecraft/src/CallableTagCompound1.class differ diff --git a/bin/net/minecraft/src/CallableTagCompound2.class b/bin/net/minecraft/src/CallableTagCompound2.class new file mode 100644 index 0000000..eaa3b50 Binary files /dev/null and b/bin/net/minecraft/src/CallableTagCompound2.class differ diff --git a/bin/net/minecraft/src/CallableTexturePack.class b/bin/net/minecraft/src/CallableTexturePack.class new file mode 100644 index 0000000..4ab519c Binary files /dev/null and b/bin/net/minecraft/src/CallableTexturePack.class differ diff --git a/bin/net/minecraft/src/CallableTickingScreenName.class b/bin/net/minecraft/src/CallableTickingScreenName.class new file mode 100644 index 0000000..7db3347 Binary files /dev/null and b/bin/net/minecraft/src/CallableTickingScreenName.class differ diff --git a/bin/net/minecraft/src/CallableTileEntityData.class b/bin/net/minecraft/src/CallableTileEntityData.class new file mode 100644 index 0000000..0b807e6 Binary files /dev/null and b/bin/net/minecraft/src/CallableTileEntityData.class differ diff --git a/bin/net/minecraft/src/CallableTileEntityID.class b/bin/net/minecraft/src/CallableTileEntityID.class new file mode 100644 index 0000000..523490b Binary files /dev/null and b/bin/net/minecraft/src/CallableTileEntityID.class differ diff --git a/bin/net/minecraft/src/CallableTileEntityName.class b/bin/net/minecraft/src/CallableTileEntityName.class new file mode 100644 index 0000000..ac1c438 Binary files /dev/null and b/bin/net/minecraft/src/CallableTileEntityName.class differ diff --git a/bin/net/minecraft/src/CallableType.class b/bin/net/minecraft/src/CallableType.class new file mode 100644 index 0000000..345339d Binary files /dev/null and b/bin/net/minecraft/src/CallableType.class differ diff --git a/bin/net/minecraft/src/CallableType2.class b/bin/net/minecraft/src/CallableType2.class new file mode 100644 index 0000000..345295d Binary files /dev/null and b/bin/net/minecraft/src/CallableType2.class differ diff --git a/bin/net/minecraft/src/CallableType3.class b/bin/net/minecraft/src/CallableType3.class new file mode 100644 index 0000000..77a9191 Binary files /dev/null and b/bin/net/minecraft/src/CallableType3.class differ diff --git a/bin/net/minecraft/src/CallableUpdatingScreenName.class b/bin/net/minecraft/src/CallableUpdatingScreenName.class new file mode 100644 index 0000000..df5539b Binary files /dev/null and b/bin/net/minecraft/src/CallableUpdatingScreenName.class differ diff --git a/bin/net/minecraft/src/CanvasCrashReport.class b/bin/net/minecraft/src/CanvasCrashReport.class new file mode 100644 index 0000000..08093eb Binary files /dev/null and b/bin/net/minecraft/src/CanvasCrashReport.class differ diff --git a/bin/net/minecraft/src/CanvasMinecraftApplet.class b/bin/net/minecraft/src/CanvasMinecraftApplet.class new file mode 100644 index 0000000..3736849 Binary files /dev/null and b/bin/net/minecraft/src/CanvasMinecraftApplet.class differ diff --git a/bin/net/minecraft/src/CanvasMojangLogo.class b/bin/net/minecraft/src/CanvasMojangLogo.class new file mode 100644 index 0000000..611e835 Binary files /dev/null and b/bin/net/minecraft/src/CanvasMojangLogo.class differ diff --git a/bin/net/minecraft/src/ChatAllowedCharacters.class b/bin/net/minecraft/src/ChatAllowedCharacters.class new file mode 100644 index 0000000..bf7d52d Binary files /dev/null and b/bin/net/minecraft/src/ChatAllowedCharacters.class differ diff --git a/bin/net/minecraft/src/ChatClickData.class b/bin/net/minecraft/src/ChatClickData.class new file mode 100644 index 0000000..1d3f4c4 Binary files /dev/null and b/bin/net/minecraft/src/ChatClickData.class differ diff --git a/bin/net/minecraft/src/ChatLine.class b/bin/net/minecraft/src/ChatLine.class new file mode 100644 index 0000000..e6a5a40 Binary files /dev/null and b/bin/net/minecraft/src/ChatLine.class differ diff --git a/bin/net/minecraft/src/ChestItemRenderHelper.class b/bin/net/minecraft/src/ChestItemRenderHelper.class new file mode 100644 index 0000000..ee0daea Binary files /dev/null and b/bin/net/minecraft/src/ChestItemRenderHelper.class differ diff --git a/bin/net/minecraft/src/Chunk.class b/bin/net/minecraft/src/Chunk.class new file mode 100644 index 0000000..4ebfd1f Binary files /dev/null and b/bin/net/minecraft/src/Chunk.class differ diff --git a/bin/net/minecraft/src/ChunkCache.class b/bin/net/minecraft/src/ChunkCache.class new file mode 100644 index 0000000..d0188f8 Binary files /dev/null and b/bin/net/minecraft/src/ChunkCache.class differ diff --git a/bin/net/minecraft/src/ChunkCoordIntPair.class b/bin/net/minecraft/src/ChunkCoordIntPair.class new file mode 100644 index 0000000..e3f9af5 Binary files /dev/null and b/bin/net/minecraft/src/ChunkCoordIntPair.class differ diff --git a/bin/net/minecraft/src/ChunkCoordinates.class b/bin/net/minecraft/src/ChunkCoordinates.class new file mode 100644 index 0000000..a6fc3b7 Binary files /dev/null and b/bin/net/minecraft/src/ChunkCoordinates.class differ diff --git a/bin/net/minecraft/src/ChunkLoader.class b/bin/net/minecraft/src/ChunkLoader.class new file mode 100644 index 0000000..014ec5e Binary files /dev/null and b/bin/net/minecraft/src/ChunkLoader.class differ diff --git a/bin/net/minecraft/src/ChunkPosition.class b/bin/net/minecraft/src/ChunkPosition.class new file mode 100644 index 0000000..137a280 Binary files /dev/null and b/bin/net/minecraft/src/ChunkPosition.class differ diff --git a/bin/net/minecraft/src/ChunkProviderClient.class b/bin/net/minecraft/src/ChunkProviderClient.class new file mode 100644 index 0000000..1c640b9 Binary files /dev/null and b/bin/net/minecraft/src/ChunkProviderClient.class differ diff --git a/bin/net/minecraft/src/ChunkProviderEnd.class b/bin/net/minecraft/src/ChunkProviderEnd.class new file mode 100644 index 0000000..79b77fb Binary files /dev/null and b/bin/net/minecraft/src/ChunkProviderEnd.class differ diff --git a/bin/net/minecraft/src/ChunkProviderFlat.class b/bin/net/minecraft/src/ChunkProviderFlat.class new file mode 100644 index 0000000..86bcd58 Binary files /dev/null and b/bin/net/minecraft/src/ChunkProviderFlat.class differ diff --git a/bin/net/minecraft/src/ChunkProviderGenerate.class b/bin/net/minecraft/src/ChunkProviderGenerate.class new file mode 100644 index 0000000..b507193 Binary files /dev/null and b/bin/net/minecraft/src/ChunkProviderGenerate.class differ diff --git a/bin/net/minecraft/src/ChunkProviderHell.class b/bin/net/minecraft/src/ChunkProviderHell.class new file mode 100644 index 0000000..5300108 Binary files /dev/null and b/bin/net/minecraft/src/ChunkProviderHell.class differ diff --git a/bin/net/minecraft/src/ChunkProviderServer.class b/bin/net/minecraft/src/ChunkProviderServer.class new file mode 100644 index 0000000..1771b85 Binary files /dev/null and b/bin/net/minecraft/src/ChunkProviderServer.class differ diff --git a/bin/net/minecraft/src/ClippingHelper.class b/bin/net/minecraft/src/ClippingHelper.class new file mode 100644 index 0000000..01bbc57 Binary files /dev/null and b/bin/net/minecraft/src/ClippingHelper.class differ diff --git a/bin/net/minecraft/src/ClippingHelperImpl.class b/bin/net/minecraft/src/ClippingHelperImpl.class new file mode 100644 index 0000000..2bf892a Binary files /dev/null and b/bin/net/minecraft/src/ClippingHelperImpl.class differ diff --git a/bin/net/minecraft/src/CodecMus.class b/bin/net/minecraft/src/CodecMus.class new file mode 100644 index 0000000..4496d7e Binary files /dev/null and b/bin/net/minecraft/src/CodecMus.class differ diff --git a/bin/net/minecraft/src/ColorizerFoliage.class b/bin/net/minecraft/src/ColorizerFoliage.class new file mode 100644 index 0000000..aafb30e Binary files /dev/null and b/bin/net/minecraft/src/ColorizerFoliage.class differ diff --git a/bin/net/minecraft/src/ColorizerGrass.class b/bin/net/minecraft/src/ColorizerGrass.class new file mode 100644 index 0000000..3469419 Binary files /dev/null and b/bin/net/minecraft/src/ColorizerGrass.class differ diff --git a/bin/net/minecraft/src/CombatEntry.class b/bin/net/minecraft/src/CombatEntry.class new file mode 100644 index 0000000..f373a49 Binary files /dev/null and b/bin/net/minecraft/src/CombatEntry.class differ diff --git a/bin/net/minecraft/src/CombatTracker.class b/bin/net/minecraft/src/CombatTracker.class new file mode 100644 index 0000000..a602f16 Binary files /dev/null and b/bin/net/minecraft/src/CombatTracker.class differ diff --git a/bin/net/minecraft/src/CommandBase.class b/bin/net/minecraft/src/CommandBase.class new file mode 100644 index 0000000..8375eb6 Binary files /dev/null and b/bin/net/minecraft/src/CommandBase.class differ diff --git a/bin/net/minecraft/src/CommandClearInventory.class b/bin/net/minecraft/src/CommandClearInventory.class new file mode 100644 index 0000000..70c1033 Binary files /dev/null and b/bin/net/minecraft/src/CommandClearInventory.class differ diff --git a/bin/net/minecraft/src/CommandDebug.class b/bin/net/minecraft/src/CommandDebug.class new file mode 100644 index 0000000..f1b1a4f Binary files /dev/null and b/bin/net/minecraft/src/CommandDebug.class differ diff --git a/bin/net/minecraft/src/CommandDefaultGameMode.class b/bin/net/minecraft/src/CommandDefaultGameMode.class new file mode 100644 index 0000000..c16febb Binary files /dev/null and b/bin/net/minecraft/src/CommandDefaultGameMode.class differ diff --git a/bin/net/minecraft/src/CommandDifficulty.class b/bin/net/minecraft/src/CommandDifficulty.class new file mode 100644 index 0000000..f3c3fc4 Binary files /dev/null and b/bin/net/minecraft/src/CommandDifficulty.class differ diff --git a/bin/net/minecraft/src/CommandEffect.class b/bin/net/minecraft/src/CommandEffect.class new file mode 100644 index 0000000..c5bee44 Binary files /dev/null and b/bin/net/minecraft/src/CommandEffect.class differ diff --git a/bin/net/minecraft/src/CommandEnchant.class b/bin/net/minecraft/src/CommandEnchant.class new file mode 100644 index 0000000..0511ae7 Binary files /dev/null and b/bin/net/minecraft/src/CommandEnchant.class differ diff --git a/bin/net/minecraft/src/CommandException.class b/bin/net/minecraft/src/CommandException.class new file mode 100644 index 0000000..1dd6d55 Binary files /dev/null and b/bin/net/minecraft/src/CommandException.class differ diff --git a/bin/net/minecraft/src/CommandGameMode.class b/bin/net/minecraft/src/CommandGameMode.class new file mode 100644 index 0000000..05b311c Binary files /dev/null and b/bin/net/minecraft/src/CommandGameMode.class differ diff --git a/bin/net/minecraft/src/CommandGameRule.class b/bin/net/minecraft/src/CommandGameRule.class new file mode 100644 index 0000000..fb324c1 Binary files /dev/null and b/bin/net/minecraft/src/CommandGameRule.class differ diff --git a/bin/net/minecraft/src/CommandGive.class b/bin/net/minecraft/src/CommandGive.class new file mode 100644 index 0000000..adcb6d9 Binary files /dev/null and b/bin/net/minecraft/src/CommandGive.class differ diff --git a/bin/net/minecraft/src/CommandHandler.class b/bin/net/minecraft/src/CommandHandler.class new file mode 100644 index 0000000..24b7029 Binary files /dev/null and b/bin/net/minecraft/src/CommandHandler.class differ diff --git a/bin/net/minecraft/src/CommandHelp.class b/bin/net/minecraft/src/CommandHelp.class new file mode 100644 index 0000000..d8c962f Binary files /dev/null and b/bin/net/minecraft/src/CommandHelp.class differ diff --git a/bin/net/minecraft/src/CommandKill.class b/bin/net/minecraft/src/CommandKill.class new file mode 100644 index 0000000..cb2e8c3 Binary files /dev/null and b/bin/net/minecraft/src/CommandKill.class differ diff --git a/bin/net/minecraft/src/CommandNotFoundException.class b/bin/net/minecraft/src/CommandNotFoundException.class new file mode 100644 index 0000000..ea8046b Binary files /dev/null and b/bin/net/minecraft/src/CommandNotFoundException.class differ diff --git a/bin/net/minecraft/src/CommandServerBan.class b/bin/net/minecraft/src/CommandServerBan.class new file mode 100644 index 0000000..40643ba Binary files /dev/null and b/bin/net/minecraft/src/CommandServerBan.class differ diff --git a/bin/net/minecraft/src/CommandServerBanIp.class b/bin/net/minecraft/src/CommandServerBanIp.class new file mode 100644 index 0000000..0f8ab94 Binary files /dev/null and b/bin/net/minecraft/src/CommandServerBanIp.class differ diff --git a/bin/net/minecraft/src/CommandServerBanlist.class b/bin/net/minecraft/src/CommandServerBanlist.class new file mode 100644 index 0000000..966a1e2 Binary files /dev/null and b/bin/net/minecraft/src/CommandServerBanlist.class differ diff --git a/bin/net/minecraft/src/CommandServerDeop.class b/bin/net/minecraft/src/CommandServerDeop.class new file mode 100644 index 0000000..2cfac58 Binary files /dev/null and b/bin/net/minecraft/src/CommandServerDeop.class differ diff --git a/bin/net/minecraft/src/CommandServerEmote.class b/bin/net/minecraft/src/CommandServerEmote.class new file mode 100644 index 0000000..e95f0bb Binary files /dev/null and b/bin/net/minecraft/src/CommandServerEmote.class differ diff --git a/bin/net/minecraft/src/CommandServerKick.class b/bin/net/minecraft/src/CommandServerKick.class new file mode 100644 index 0000000..82d814f Binary files /dev/null and b/bin/net/minecraft/src/CommandServerKick.class differ diff --git a/bin/net/minecraft/src/CommandServerList.class b/bin/net/minecraft/src/CommandServerList.class new file mode 100644 index 0000000..c9922ea Binary files /dev/null and b/bin/net/minecraft/src/CommandServerList.class differ diff --git a/bin/net/minecraft/src/CommandServerMessage.class b/bin/net/minecraft/src/CommandServerMessage.class new file mode 100644 index 0000000..d1d96f4 Binary files /dev/null and b/bin/net/minecraft/src/CommandServerMessage.class differ diff --git a/bin/net/minecraft/src/CommandServerOp.class b/bin/net/minecraft/src/CommandServerOp.class new file mode 100644 index 0000000..1a0249e Binary files /dev/null and b/bin/net/minecraft/src/CommandServerOp.class differ diff --git a/bin/net/minecraft/src/CommandServerPardon.class b/bin/net/minecraft/src/CommandServerPardon.class new file mode 100644 index 0000000..8f7e72f Binary files /dev/null and b/bin/net/minecraft/src/CommandServerPardon.class differ diff --git a/bin/net/minecraft/src/CommandServerPardonIp.class b/bin/net/minecraft/src/CommandServerPardonIp.class new file mode 100644 index 0000000..d62942c Binary files /dev/null and b/bin/net/minecraft/src/CommandServerPardonIp.class differ diff --git a/bin/net/minecraft/src/CommandServerPublishLocal.class b/bin/net/minecraft/src/CommandServerPublishLocal.class new file mode 100644 index 0000000..362ed31 Binary files /dev/null and b/bin/net/minecraft/src/CommandServerPublishLocal.class differ diff --git a/bin/net/minecraft/src/CommandServerSaveAll.class b/bin/net/minecraft/src/CommandServerSaveAll.class new file mode 100644 index 0000000..83522ec Binary files /dev/null and b/bin/net/minecraft/src/CommandServerSaveAll.class differ diff --git a/bin/net/minecraft/src/CommandServerSaveOff.class b/bin/net/minecraft/src/CommandServerSaveOff.class new file mode 100644 index 0000000..1f5c2d4 Binary files /dev/null and b/bin/net/minecraft/src/CommandServerSaveOff.class differ diff --git a/bin/net/minecraft/src/CommandServerSaveOn.class b/bin/net/minecraft/src/CommandServerSaveOn.class new file mode 100644 index 0000000..453f750 Binary files /dev/null and b/bin/net/minecraft/src/CommandServerSaveOn.class differ diff --git a/bin/net/minecraft/src/CommandServerSay.class b/bin/net/minecraft/src/CommandServerSay.class new file mode 100644 index 0000000..c7ab484 Binary files /dev/null and b/bin/net/minecraft/src/CommandServerSay.class differ diff --git a/bin/net/minecraft/src/CommandServerStop.class b/bin/net/minecraft/src/CommandServerStop.class new file mode 100644 index 0000000..9c045aa Binary files /dev/null and b/bin/net/minecraft/src/CommandServerStop.class differ diff --git a/bin/net/minecraft/src/CommandServerTp.class b/bin/net/minecraft/src/CommandServerTp.class new file mode 100644 index 0000000..36fee1b Binary files /dev/null and b/bin/net/minecraft/src/CommandServerTp.class differ diff --git a/bin/net/minecraft/src/CommandServerWhitelist.class b/bin/net/minecraft/src/CommandServerWhitelist.class new file mode 100644 index 0000000..00a21a3 Binary files /dev/null and b/bin/net/minecraft/src/CommandServerWhitelist.class differ diff --git a/bin/net/minecraft/src/CommandSetSpawnpoint.class b/bin/net/minecraft/src/CommandSetSpawnpoint.class new file mode 100644 index 0000000..a59a1b0 Binary files /dev/null and b/bin/net/minecraft/src/CommandSetSpawnpoint.class differ diff --git a/bin/net/minecraft/src/CommandShowSeed.class b/bin/net/minecraft/src/CommandShowSeed.class new file mode 100644 index 0000000..b0fa6a3 Binary files /dev/null and b/bin/net/minecraft/src/CommandShowSeed.class differ diff --git a/bin/net/minecraft/src/CommandTime.class b/bin/net/minecraft/src/CommandTime.class new file mode 100644 index 0000000..ad5d3e1 Binary files /dev/null and b/bin/net/minecraft/src/CommandTime.class differ diff --git a/bin/net/minecraft/src/CommandToggleDownfall.class b/bin/net/minecraft/src/CommandToggleDownfall.class new file mode 100644 index 0000000..cc87565 Binary files /dev/null and b/bin/net/minecraft/src/CommandToggleDownfall.class differ diff --git a/bin/net/minecraft/src/CommandWeather.class b/bin/net/minecraft/src/CommandWeather.class new file mode 100644 index 0000000..876750f Binary files /dev/null and b/bin/net/minecraft/src/CommandWeather.class differ diff --git a/bin/net/minecraft/src/CommandXP.class b/bin/net/minecraft/src/CommandXP.class new file mode 100644 index 0000000..333cbdd Binary files /dev/null and b/bin/net/minecraft/src/CommandXP.class differ diff --git a/bin/net/minecraft/src/ComparatorClassSorter.class b/bin/net/minecraft/src/ComparatorClassSorter.class new file mode 100644 index 0000000..1f23208 Binary files /dev/null and b/bin/net/minecraft/src/ComparatorClassSorter.class differ diff --git a/bin/net/minecraft/src/ComponentMineshaftCorridor.class b/bin/net/minecraft/src/ComponentMineshaftCorridor.class new file mode 100644 index 0000000..68920f0 Binary files /dev/null and b/bin/net/minecraft/src/ComponentMineshaftCorridor.class differ diff --git a/bin/net/minecraft/src/ComponentMineshaftCross.class b/bin/net/minecraft/src/ComponentMineshaftCross.class new file mode 100644 index 0000000..b52a61f Binary files /dev/null and b/bin/net/minecraft/src/ComponentMineshaftCross.class differ diff --git a/bin/net/minecraft/src/ComponentMineshaftRoom.class b/bin/net/minecraft/src/ComponentMineshaftRoom.class new file mode 100644 index 0000000..79c24ab Binary files /dev/null and b/bin/net/minecraft/src/ComponentMineshaftRoom.class differ diff --git a/bin/net/minecraft/src/ComponentMineshaftStairs.class b/bin/net/minecraft/src/ComponentMineshaftStairs.class new file mode 100644 index 0000000..e9a5aae Binary files /dev/null and b/bin/net/minecraft/src/ComponentMineshaftStairs.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgeCorridor.class b/bin/net/minecraft/src/ComponentNetherBridgeCorridor.class new file mode 100644 index 0000000..f5e727a Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgeCorridor.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgeCorridor2.class b/bin/net/minecraft/src/ComponentNetherBridgeCorridor2.class new file mode 100644 index 0000000..a9928ce Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgeCorridor2.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgeCorridor3.class b/bin/net/minecraft/src/ComponentNetherBridgeCorridor3.class new file mode 100644 index 0000000..3344d9d Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgeCorridor3.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgeCorridor4.class b/bin/net/minecraft/src/ComponentNetherBridgeCorridor4.class new file mode 100644 index 0000000..b83b150 Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgeCorridor4.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgeCorridor5.class b/bin/net/minecraft/src/ComponentNetherBridgeCorridor5.class new file mode 100644 index 0000000..8087316 Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgeCorridor5.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgeCrossing.class b/bin/net/minecraft/src/ComponentNetherBridgeCrossing.class new file mode 100644 index 0000000..0b4efa5 Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgeCrossing.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgeCrossing2.class b/bin/net/minecraft/src/ComponentNetherBridgeCrossing2.class new file mode 100644 index 0000000..ddf2a00 Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgeCrossing2.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgeCrossing3.class b/bin/net/minecraft/src/ComponentNetherBridgeCrossing3.class new file mode 100644 index 0000000..ec5b693 Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgeCrossing3.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgeEnd.class b/bin/net/minecraft/src/ComponentNetherBridgeEnd.class new file mode 100644 index 0000000..f5daef1 Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgeEnd.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgeEntrance.class b/bin/net/minecraft/src/ComponentNetherBridgeEntrance.class new file mode 100644 index 0000000..d1af53b Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgeEntrance.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgeNetherStalkRoom.class b/bin/net/minecraft/src/ComponentNetherBridgeNetherStalkRoom.class new file mode 100644 index 0000000..7d58868 Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgeNetherStalkRoom.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgePiece.class b/bin/net/minecraft/src/ComponentNetherBridgePiece.class new file mode 100644 index 0000000..d0be1ce Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgePiece.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgeStairs.class b/bin/net/minecraft/src/ComponentNetherBridgeStairs.class new file mode 100644 index 0000000..396683f Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgeStairs.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgeStartPiece.class b/bin/net/minecraft/src/ComponentNetherBridgeStartPiece.class new file mode 100644 index 0000000..a6350f9 Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgeStartPiece.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgeStraight.class b/bin/net/minecraft/src/ComponentNetherBridgeStraight.class new file mode 100644 index 0000000..e8d98b6 Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgeStraight.class differ diff --git a/bin/net/minecraft/src/ComponentNetherBridgeThrone.class b/bin/net/minecraft/src/ComponentNetherBridgeThrone.class new file mode 100644 index 0000000..78bff80 Binary files /dev/null and b/bin/net/minecraft/src/ComponentNetherBridgeThrone.class differ diff --git a/bin/net/minecraft/src/ComponentScatteredFeature.class b/bin/net/minecraft/src/ComponentScatteredFeature.class new file mode 100644 index 0000000..6428017 Binary files /dev/null and b/bin/net/minecraft/src/ComponentScatteredFeature.class differ diff --git a/bin/net/minecraft/src/ComponentScatteredFeatureDesertPyramid.class b/bin/net/minecraft/src/ComponentScatteredFeatureDesertPyramid.class new file mode 100644 index 0000000..36513c4 Binary files /dev/null and b/bin/net/minecraft/src/ComponentScatteredFeatureDesertPyramid.class differ diff --git a/bin/net/minecraft/src/ComponentScatteredFeatureJunglePyramid.class b/bin/net/minecraft/src/ComponentScatteredFeatureJunglePyramid.class new file mode 100644 index 0000000..52c7257 Binary files /dev/null and b/bin/net/minecraft/src/ComponentScatteredFeatureJunglePyramid.class differ diff --git a/bin/net/minecraft/src/ComponentScatteredFeaturePieces2.class b/bin/net/minecraft/src/ComponentScatteredFeaturePieces2.class new file mode 100644 index 0000000..74bc4e8 Binary files /dev/null and b/bin/net/minecraft/src/ComponentScatteredFeaturePieces2.class differ diff --git a/bin/net/minecraft/src/ComponentScatteredFeatureSwampHut.class b/bin/net/minecraft/src/ComponentScatteredFeatureSwampHut.class new file mode 100644 index 0000000..6d6fc77 Binary files /dev/null and b/bin/net/minecraft/src/ComponentScatteredFeatureSwampHut.class differ diff --git a/bin/net/minecraft/src/ComponentStronghold.class b/bin/net/minecraft/src/ComponentStronghold.class new file mode 100644 index 0000000..c337533 Binary files /dev/null and b/bin/net/minecraft/src/ComponentStronghold.class differ diff --git a/bin/net/minecraft/src/ComponentStrongholdChestCorridor.class b/bin/net/minecraft/src/ComponentStrongholdChestCorridor.class new file mode 100644 index 0000000..6908e69 Binary files /dev/null and b/bin/net/minecraft/src/ComponentStrongholdChestCorridor.class differ diff --git a/bin/net/minecraft/src/ComponentStrongholdCorridor.class b/bin/net/minecraft/src/ComponentStrongholdCorridor.class new file mode 100644 index 0000000..ed16196 Binary files /dev/null and b/bin/net/minecraft/src/ComponentStrongholdCorridor.class differ diff --git a/bin/net/minecraft/src/ComponentStrongholdCrossing.class b/bin/net/minecraft/src/ComponentStrongholdCrossing.class new file mode 100644 index 0000000..9fa8bb1 Binary files /dev/null and b/bin/net/minecraft/src/ComponentStrongholdCrossing.class differ diff --git a/bin/net/minecraft/src/ComponentStrongholdLeftTurn.class b/bin/net/minecraft/src/ComponentStrongholdLeftTurn.class new file mode 100644 index 0000000..e0c5e75 Binary files /dev/null and b/bin/net/minecraft/src/ComponentStrongholdLeftTurn.class differ diff --git a/bin/net/minecraft/src/ComponentStrongholdLibrary.class b/bin/net/minecraft/src/ComponentStrongholdLibrary.class new file mode 100644 index 0000000..04e7dbe Binary files /dev/null and b/bin/net/minecraft/src/ComponentStrongholdLibrary.class differ diff --git a/bin/net/minecraft/src/ComponentStrongholdPortalRoom.class b/bin/net/minecraft/src/ComponentStrongholdPortalRoom.class new file mode 100644 index 0000000..c4ba63d Binary files /dev/null and b/bin/net/minecraft/src/ComponentStrongholdPortalRoom.class differ diff --git a/bin/net/minecraft/src/ComponentStrongholdPrison.class b/bin/net/minecraft/src/ComponentStrongholdPrison.class new file mode 100644 index 0000000..7346886 Binary files /dev/null and b/bin/net/minecraft/src/ComponentStrongholdPrison.class differ diff --git a/bin/net/minecraft/src/ComponentStrongholdRightTurn.class b/bin/net/minecraft/src/ComponentStrongholdRightTurn.class new file mode 100644 index 0000000..3f32d7f Binary files /dev/null and b/bin/net/minecraft/src/ComponentStrongholdRightTurn.class differ diff --git a/bin/net/minecraft/src/ComponentStrongholdRoomCrossing.class b/bin/net/minecraft/src/ComponentStrongholdRoomCrossing.class new file mode 100644 index 0000000..4b2c86e Binary files /dev/null and b/bin/net/minecraft/src/ComponentStrongholdRoomCrossing.class differ diff --git a/bin/net/minecraft/src/ComponentStrongholdStairs.class b/bin/net/minecraft/src/ComponentStrongholdStairs.class new file mode 100644 index 0000000..de729b2 Binary files /dev/null and b/bin/net/minecraft/src/ComponentStrongholdStairs.class differ diff --git a/bin/net/minecraft/src/ComponentStrongholdStairs2.class b/bin/net/minecraft/src/ComponentStrongholdStairs2.class new file mode 100644 index 0000000..3c94506 Binary files /dev/null and b/bin/net/minecraft/src/ComponentStrongholdStairs2.class differ diff --git a/bin/net/minecraft/src/ComponentStrongholdStairsStraight.class b/bin/net/minecraft/src/ComponentStrongholdStairsStraight.class new file mode 100644 index 0000000..1764bc9 Binary files /dev/null and b/bin/net/minecraft/src/ComponentStrongholdStairsStraight.class differ diff --git a/bin/net/minecraft/src/ComponentStrongholdStraight.class b/bin/net/minecraft/src/ComponentStrongholdStraight.class new file mode 100644 index 0000000..9b9d4a4 Binary files /dev/null and b/bin/net/minecraft/src/ComponentStrongholdStraight.class differ diff --git a/bin/net/minecraft/src/ComponentVillage.class b/bin/net/minecraft/src/ComponentVillage.class new file mode 100644 index 0000000..2dbd8df Binary files /dev/null and b/bin/net/minecraft/src/ComponentVillage.class differ diff --git a/bin/net/minecraft/src/ComponentVillageChurch.class b/bin/net/minecraft/src/ComponentVillageChurch.class new file mode 100644 index 0000000..f156ee1 Binary files /dev/null and b/bin/net/minecraft/src/ComponentVillageChurch.class differ diff --git a/bin/net/minecraft/src/ComponentVillageField.class b/bin/net/minecraft/src/ComponentVillageField.class new file mode 100644 index 0000000..8a59fd1 Binary files /dev/null and b/bin/net/minecraft/src/ComponentVillageField.class differ diff --git a/bin/net/minecraft/src/ComponentVillageField2.class b/bin/net/minecraft/src/ComponentVillageField2.class new file mode 100644 index 0000000..31081ff Binary files /dev/null and b/bin/net/minecraft/src/ComponentVillageField2.class differ diff --git a/bin/net/minecraft/src/ComponentVillageHall.class b/bin/net/minecraft/src/ComponentVillageHall.class new file mode 100644 index 0000000..c1ef118 Binary files /dev/null and b/bin/net/minecraft/src/ComponentVillageHall.class differ diff --git a/bin/net/minecraft/src/ComponentVillageHouse1.class b/bin/net/minecraft/src/ComponentVillageHouse1.class new file mode 100644 index 0000000..cfcb3fc Binary files /dev/null and b/bin/net/minecraft/src/ComponentVillageHouse1.class differ diff --git a/bin/net/minecraft/src/ComponentVillageHouse2.class b/bin/net/minecraft/src/ComponentVillageHouse2.class new file mode 100644 index 0000000..d297434 Binary files /dev/null and b/bin/net/minecraft/src/ComponentVillageHouse2.class differ diff --git a/bin/net/minecraft/src/ComponentVillageHouse3.class b/bin/net/minecraft/src/ComponentVillageHouse3.class new file mode 100644 index 0000000..139cfdd Binary files /dev/null and b/bin/net/minecraft/src/ComponentVillageHouse3.class differ diff --git a/bin/net/minecraft/src/ComponentVillageHouse4_Garden.class b/bin/net/minecraft/src/ComponentVillageHouse4_Garden.class new file mode 100644 index 0000000..76d345d Binary files /dev/null and b/bin/net/minecraft/src/ComponentVillageHouse4_Garden.class differ diff --git a/bin/net/minecraft/src/ComponentVillagePathGen.class b/bin/net/minecraft/src/ComponentVillagePathGen.class new file mode 100644 index 0000000..fd6e497 Binary files /dev/null and b/bin/net/minecraft/src/ComponentVillagePathGen.class differ diff --git a/bin/net/minecraft/src/ComponentVillageRoadPiece.class b/bin/net/minecraft/src/ComponentVillageRoadPiece.class new file mode 100644 index 0000000..88e90ef Binary files /dev/null and b/bin/net/minecraft/src/ComponentVillageRoadPiece.class differ diff --git a/bin/net/minecraft/src/ComponentVillageStartPiece.class b/bin/net/minecraft/src/ComponentVillageStartPiece.class new file mode 100644 index 0000000..85fa5fe Binary files /dev/null and b/bin/net/minecraft/src/ComponentVillageStartPiece.class differ diff --git a/bin/net/minecraft/src/ComponentVillageTorch.class b/bin/net/minecraft/src/ComponentVillageTorch.class new file mode 100644 index 0000000..be494db Binary files /dev/null and b/bin/net/minecraft/src/ComponentVillageTorch.class differ diff --git a/bin/net/minecraft/src/ComponentVillageWell.class b/bin/net/minecraft/src/ComponentVillageWell.class new file mode 100644 index 0000000..01377e8 Binary files /dev/null and b/bin/net/minecraft/src/ComponentVillageWell.class differ diff --git a/bin/net/minecraft/src/ComponentVillageWoodHut.class b/bin/net/minecraft/src/ComponentVillageWoodHut.class new file mode 100644 index 0000000..c8edecf Binary files /dev/null and b/bin/net/minecraft/src/ComponentVillageWoodHut.class differ diff --git a/bin/net/minecraft/src/CompressedStreamTools.class b/bin/net/minecraft/src/CompressedStreamTools.class new file mode 100644 index 0000000..d5f63d2 Binary files /dev/null and b/bin/net/minecraft/src/CompressedStreamTools.class differ diff --git a/bin/net/minecraft/src/Container.class b/bin/net/minecraft/src/Container.class new file mode 100644 index 0000000..12e82ce Binary files /dev/null and b/bin/net/minecraft/src/Container.class differ diff --git a/bin/net/minecraft/src/ContainerBeacon.class b/bin/net/minecraft/src/ContainerBeacon.class new file mode 100644 index 0000000..517b4d1 Binary files /dev/null and b/bin/net/minecraft/src/ContainerBeacon.class differ diff --git a/bin/net/minecraft/src/ContainerBrewingStand.class b/bin/net/minecraft/src/ContainerBrewingStand.class new file mode 100644 index 0000000..636f0a8 Binary files /dev/null and b/bin/net/minecraft/src/ContainerBrewingStand.class differ diff --git a/bin/net/minecraft/src/ContainerChest.class b/bin/net/minecraft/src/ContainerChest.class new file mode 100644 index 0000000..64380ca Binary files /dev/null and b/bin/net/minecraft/src/ContainerChest.class differ diff --git a/bin/net/minecraft/src/ContainerCreative.class b/bin/net/minecraft/src/ContainerCreative.class new file mode 100644 index 0000000..2dd3a3d Binary files /dev/null and b/bin/net/minecraft/src/ContainerCreative.class differ diff --git a/bin/net/minecraft/src/ContainerDispenser.class b/bin/net/minecraft/src/ContainerDispenser.class new file mode 100644 index 0000000..2b5d50e Binary files /dev/null and b/bin/net/minecraft/src/ContainerDispenser.class differ diff --git a/bin/net/minecraft/src/ContainerEnchantment.class b/bin/net/minecraft/src/ContainerEnchantment.class new file mode 100644 index 0000000..7165afe Binary files /dev/null and b/bin/net/minecraft/src/ContainerEnchantment.class differ diff --git a/bin/net/minecraft/src/ContainerFurnace.class b/bin/net/minecraft/src/ContainerFurnace.class new file mode 100644 index 0000000..21ef865 Binary files /dev/null and b/bin/net/minecraft/src/ContainerFurnace.class differ diff --git a/bin/net/minecraft/src/ContainerHopper.class b/bin/net/minecraft/src/ContainerHopper.class new file mode 100644 index 0000000..741f5e5 Binary files /dev/null and b/bin/net/minecraft/src/ContainerHopper.class differ diff --git a/bin/net/minecraft/src/ContainerMerchant.class b/bin/net/minecraft/src/ContainerMerchant.class new file mode 100644 index 0000000..e0a86d4 Binary files /dev/null and b/bin/net/minecraft/src/ContainerMerchant.class differ diff --git a/bin/net/minecraft/src/ContainerPlayer.class b/bin/net/minecraft/src/ContainerPlayer.class new file mode 100644 index 0000000..7a1d075 Binary files /dev/null and b/bin/net/minecraft/src/ContainerPlayer.class differ diff --git a/bin/net/minecraft/src/ContainerRepair.class b/bin/net/minecraft/src/ContainerRepair.class new file mode 100644 index 0000000..c3e1c69 Binary files /dev/null and b/bin/net/minecraft/src/ContainerRepair.class differ diff --git a/bin/net/minecraft/src/ContainerSheep.class b/bin/net/minecraft/src/ContainerSheep.class new file mode 100644 index 0000000..d72a749 Binary files /dev/null and b/bin/net/minecraft/src/ContainerSheep.class differ diff --git a/bin/net/minecraft/src/ContainerWorkbench.class b/bin/net/minecraft/src/ContainerWorkbench.class new file mode 100644 index 0000000..531c61f Binary files /dev/null and b/bin/net/minecraft/src/ContainerWorkbench.class differ diff --git a/bin/net/minecraft/src/ConvertingProgressUpdate.class b/bin/net/minecraft/src/ConvertingProgressUpdate.class new file mode 100644 index 0000000..1b33570 Binary files /dev/null and b/bin/net/minecraft/src/ConvertingProgressUpdate.class differ diff --git a/bin/net/minecraft/src/CraftingManager.class b/bin/net/minecraft/src/CraftingManager.class new file mode 100644 index 0000000..29efde0 Binary files /dev/null and b/bin/net/minecraft/src/CraftingManager.class differ diff --git a/bin/net/minecraft/src/CrashReport.class b/bin/net/minecraft/src/CrashReport.class new file mode 100644 index 0000000..f154a7b Binary files /dev/null and b/bin/net/minecraft/src/CrashReport.class differ diff --git a/bin/net/minecraft/src/CrashReportCategory.class b/bin/net/minecraft/src/CrashReportCategory.class new file mode 100644 index 0000000..6e0cccd Binary files /dev/null and b/bin/net/minecraft/src/CrashReportCategory.class differ diff --git a/bin/net/minecraft/src/CrashReportCategoryEntry.class b/bin/net/minecraft/src/CrashReportCategoryEntry.class new file mode 100644 index 0000000..a302eac Binary files /dev/null and b/bin/net/minecraft/src/CrashReportCategoryEntry.class differ diff --git a/bin/net/minecraft/src/CreativeCrafting.class b/bin/net/minecraft/src/CreativeCrafting.class new file mode 100644 index 0000000..7d3d270 Binary files /dev/null and b/bin/net/minecraft/src/CreativeCrafting.class differ diff --git a/bin/net/minecraft/src/CreativeTabBlock.class b/bin/net/minecraft/src/CreativeTabBlock.class new file mode 100644 index 0000000..5f8521d Binary files /dev/null and b/bin/net/minecraft/src/CreativeTabBlock.class differ diff --git a/bin/net/minecraft/src/CreativeTabBrewing.class b/bin/net/minecraft/src/CreativeTabBrewing.class new file mode 100644 index 0000000..d50dda3 Binary files /dev/null and b/bin/net/minecraft/src/CreativeTabBrewing.class differ diff --git a/bin/net/minecraft/src/CreativeTabCombat.class b/bin/net/minecraft/src/CreativeTabCombat.class new file mode 100644 index 0000000..9e18b17 Binary files /dev/null and b/bin/net/minecraft/src/CreativeTabCombat.class differ diff --git a/bin/net/minecraft/src/CreativeTabDeco.class b/bin/net/minecraft/src/CreativeTabDeco.class new file mode 100644 index 0000000..0c4f8a3 Binary files /dev/null and b/bin/net/minecraft/src/CreativeTabDeco.class differ diff --git a/bin/net/minecraft/src/CreativeTabFood.class b/bin/net/minecraft/src/CreativeTabFood.class new file mode 100644 index 0000000..5ef120d Binary files /dev/null and b/bin/net/minecraft/src/CreativeTabFood.class differ diff --git a/bin/net/minecraft/src/CreativeTabInventory.class b/bin/net/minecraft/src/CreativeTabInventory.class new file mode 100644 index 0000000..9c791d4 Binary files /dev/null and b/bin/net/minecraft/src/CreativeTabInventory.class differ diff --git a/bin/net/minecraft/src/CreativeTabMaterial.class b/bin/net/minecraft/src/CreativeTabMaterial.class new file mode 100644 index 0000000..5d956fd Binary files /dev/null and b/bin/net/minecraft/src/CreativeTabMaterial.class differ diff --git a/bin/net/minecraft/src/CreativeTabMisc.class b/bin/net/minecraft/src/CreativeTabMisc.class new file mode 100644 index 0000000..24d4f8f Binary files /dev/null and b/bin/net/minecraft/src/CreativeTabMisc.class differ diff --git a/bin/net/minecraft/src/CreativeTabRedstone.class b/bin/net/minecraft/src/CreativeTabRedstone.class new file mode 100644 index 0000000..33bb2ea Binary files /dev/null and b/bin/net/minecraft/src/CreativeTabRedstone.class differ diff --git a/bin/net/minecraft/src/CreativeTabSearch.class b/bin/net/minecraft/src/CreativeTabSearch.class new file mode 100644 index 0000000..a8c008c Binary files /dev/null and b/bin/net/minecraft/src/CreativeTabSearch.class differ diff --git a/bin/net/minecraft/src/CreativeTabTools.class b/bin/net/minecraft/src/CreativeTabTools.class new file mode 100644 index 0000000..926e664 Binary files /dev/null and b/bin/net/minecraft/src/CreativeTabTools.class differ diff --git a/bin/net/minecraft/src/CreativeTabTransport.class b/bin/net/minecraft/src/CreativeTabTransport.class new file mode 100644 index 0000000..ef52df8 Binary files /dev/null and b/bin/net/minecraft/src/CreativeTabTransport.class differ diff --git a/bin/net/minecraft/src/CreativeTabs.class b/bin/net/minecraft/src/CreativeTabs.class new file mode 100644 index 0000000..c6e1b56 Binary files /dev/null and b/bin/net/minecraft/src/CreativeTabs.class differ diff --git a/bin/net/minecraft/src/CryptManager.class b/bin/net/minecraft/src/CryptManager.class new file mode 100644 index 0000000..5a6df38 Binary files /dev/null and b/bin/net/minecraft/src/CryptManager.class differ diff --git a/bin/net/minecraft/src/DamageSource.class b/bin/net/minecraft/src/DamageSource.class new file mode 100644 index 0000000..464dbb2 Binary files /dev/null and b/bin/net/minecraft/src/DamageSource.class differ diff --git a/bin/net/minecraft/src/DataWatcher.class b/bin/net/minecraft/src/DataWatcher.class new file mode 100644 index 0000000..3d9bd85 Binary files /dev/null and b/bin/net/minecraft/src/DataWatcher.class differ diff --git a/bin/net/minecraft/src/DedicatedPlayerList.class b/bin/net/minecraft/src/DedicatedPlayerList.class new file mode 100644 index 0000000..9541309 Binary files /dev/null and b/bin/net/minecraft/src/DedicatedPlayerList.class differ diff --git a/bin/net/minecraft/src/DedicatedServer.class b/bin/net/minecraft/src/DedicatedServer.class new file mode 100644 index 0000000..6fcc4ff Binary files /dev/null and b/bin/net/minecraft/src/DedicatedServer.class differ diff --git a/bin/net/minecraft/src/DedicatedServerCommandThread.class b/bin/net/minecraft/src/DedicatedServerCommandThread.class new file mode 100644 index 0000000..0b99e3f Binary files /dev/null and b/bin/net/minecraft/src/DedicatedServerCommandThread.class differ diff --git a/bin/net/minecraft/src/DedicatedServerListenThread.class b/bin/net/minecraft/src/DedicatedServerListenThread.class new file mode 100644 index 0000000..ffa2c06 Binary files /dev/null and b/bin/net/minecraft/src/DedicatedServerListenThread.class differ diff --git a/bin/net/minecraft/src/DedicatedServerSleepThread.class b/bin/net/minecraft/src/DedicatedServerSleepThread.class new file mode 100644 index 0000000..67d65b0 Binary files /dev/null and b/bin/net/minecraft/src/DedicatedServerSleepThread.class differ diff --git a/bin/net/minecraft/src/DemoWorldManager.class b/bin/net/minecraft/src/DemoWorldManager.class new file mode 100644 index 0000000..ace6962 Binary files /dev/null and b/bin/net/minecraft/src/DemoWorldManager.class differ diff --git a/bin/net/minecraft/src/DemoWorldServer.class b/bin/net/minecraft/src/DemoWorldServer.class new file mode 100644 index 0000000..91df257 Binary files /dev/null and b/bin/net/minecraft/src/DemoWorldServer.class differ diff --git a/bin/net/minecraft/src/DerivedWorldInfo.class b/bin/net/minecraft/src/DerivedWorldInfo.class new file mode 100644 index 0000000..b1697dc Binary files /dev/null and b/bin/net/minecraft/src/DerivedWorldInfo.class differ diff --git a/bin/net/minecraft/src/DestroyBlockProgress.class b/bin/net/minecraft/src/DestroyBlockProgress.class new file mode 100644 index 0000000..b683a09 Binary files /dev/null and b/bin/net/minecraft/src/DestroyBlockProgress.class differ diff --git a/bin/net/minecraft/src/Direction.class b/bin/net/minecraft/src/Direction.class new file mode 100644 index 0000000..923958e Binary files /dev/null and b/bin/net/minecraft/src/Direction.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviorArrow.class b/bin/net/minecraft/src/DispenserBehaviorArrow.class new file mode 100644 index 0000000..1490074 Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviorArrow.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviorBoat.class b/bin/net/minecraft/src/DispenserBehaviorBoat.class new file mode 100644 index 0000000..6d5f6c0 Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviorBoat.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviorDye.class b/bin/net/minecraft/src/DispenserBehaviorDye.class new file mode 100644 index 0000000..bcd4b39 Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviorDye.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviorEgg.class b/bin/net/minecraft/src/DispenserBehaviorEgg.class new file mode 100644 index 0000000..be8f99d Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviorEgg.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviorEmptyBucket.class b/bin/net/minecraft/src/DispenserBehaviorEmptyBucket.class new file mode 100644 index 0000000..ce0e9ca Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviorEmptyBucket.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviorExperience.class b/bin/net/minecraft/src/DispenserBehaviorExperience.class new file mode 100644 index 0000000..2c1be65 Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviorExperience.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviorFilledBucket.class b/bin/net/minecraft/src/DispenserBehaviorFilledBucket.class new file mode 100644 index 0000000..079a9d6 Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviorFilledBucket.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviorFire.class b/bin/net/minecraft/src/DispenserBehaviorFire.class new file mode 100644 index 0000000..73ec9c9 Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviorFire.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviorFireball.class b/bin/net/minecraft/src/DispenserBehaviorFireball.class new file mode 100644 index 0000000..4eac73c Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviorFireball.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviorFireworks.class b/bin/net/minecraft/src/DispenserBehaviorFireworks.class new file mode 100644 index 0000000..54ca084 Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviorFireworks.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviorMobEgg.class b/bin/net/minecraft/src/DispenserBehaviorMobEgg.class new file mode 100644 index 0000000..ef5ba6f Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviorMobEgg.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviorPotion.class b/bin/net/minecraft/src/DispenserBehaviorPotion.class new file mode 100644 index 0000000..34ddc8b Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviorPotion.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviorPotionProjectile.class b/bin/net/minecraft/src/DispenserBehaviorPotionProjectile.class new file mode 100644 index 0000000..ba6e419 Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviorPotionProjectile.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviorSnowball.class b/bin/net/minecraft/src/DispenserBehaviorSnowball.class new file mode 100644 index 0000000..93018cb Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviorSnowball.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviorTNT.class b/bin/net/minecraft/src/DispenserBehaviorTNT.class new file mode 100644 index 0000000..bfc33f2 Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviorTNT.class differ diff --git a/bin/net/minecraft/src/DispenserBehaviors.class b/bin/net/minecraft/src/DispenserBehaviors.class new file mode 100644 index 0000000..ff040cc Binary files /dev/null and b/bin/net/minecraft/src/DispenserBehaviors.class differ diff --git a/bin/net/minecraft/src/EffectRenderer.class b/bin/net/minecraft/src/EffectRenderer.class new file mode 100644 index 0000000..6029cd2 Binary files /dev/null and b/bin/net/minecraft/src/EffectRenderer.class differ diff --git a/bin/net/minecraft/src/Empty3.class b/bin/net/minecraft/src/Empty3.class new file mode 100644 index 0000000..0b95a31 Binary files /dev/null and b/bin/net/minecraft/src/Empty3.class differ diff --git a/bin/net/minecraft/src/EmptyChunk.class b/bin/net/minecraft/src/EmptyChunk.class new file mode 100644 index 0000000..7f33f49 Binary files /dev/null and b/bin/net/minecraft/src/EmptyChunk.class differ diff --git a/bin/net/minecraft/src/Enchantment.class b/bin/net/minecraft/src/Enchantment.class new file mode 100644 index 0000000..ca3fa16 Binary files /dev/null and b/bin/net/minecraft/src/Enchantment.class differ diff --git a/bin/net/minecraft/src/EnchantmentArrowDamage.class b/bin/net/minecraft/src/EnchantmentArrowDamage.class new file mode 100644 index 0000000..5bb81b5 Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentArrowDamage.class differ diff --git a/bin/net/minecraft/src/EnchantmentArrowFire.class b/bin/net/minecraft/src/EnchantmentArrowFire.class new file mode 100644 index 0000000..e0b63f2 Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentArrowFire.class differ diff --git a/bin/net/minecraft/src/EnchantmentArrowInfinite.class b/bin/net/minecraft/src/EnchantmentArrowInfinite.class new file mode 100644 index 0000000..5bd3eb9 Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentArrowInfinite.class differ diff --git a/bin/net/minecraft/src/EnchantmentArrowKnockback.class b/bin/net/minecraft/src/EnchantmentArrowKnockback.class new file mode 100644 index 0000000..d49fb0b Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentArrowKnockback.class differ diff --git a/bin/net/minecraft/src/EnchantmentDamage.class b/bin/net/minecraft/src/EnchantmentDamage.class new file mode 100644 index 0000000..6fa8859 Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentDamage.class differ diff --git a/bin/net/minecraft/src/EnchantmentData.class b/bin/net/minecraft/src/EnchantmentData.class new file mode 100644 index 0000000..6e45805 Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentData.class differ diff --git a/bin/net/minecraft/src/EnchantmentDigging.class b/bin/net/minecraft/src/EnchantmentDigging.class new file mode 100644 index 0000000..37e46f5 Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentDigging.class differ diff --git a/bin/net/minecraft/src/EnchantmentDurability.class b/bin/net/minecraft/src/EnchantmentDurability.class new file mode 100644 index 0000000..a50650b Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentDurability.class differ diff --git a/bin/net/minecraft/src/EnchantmentFireAspect.class b/bin/net/minecraft/src/EnchantmentFireAspect.class new file mode 100644 index 0000000..af08a38 Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentFireAspect.class differ diff --git a/bin/net/minecraft/src/EnchantmentHelper.class b/bin/net/minecraft/src/EnchantmentHelper.class new file mode 100644 index 0000000..b3345cc Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentHelper.class differ diff --git a/bin/net/minecraft/src/EnchantmentKnockback.class b/bin/net/minecraft/src/EnchantmentKnockback.class new file mode 100644 index 0000000..f636a07 Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentKnockback.class differ diff --git a/bin/net/minecraft/src/EnchantmentLootBonus.class b/bin/net/minecraft/src/EnchantmentLootBonus.class new file mode 100644 index 0000000..a81e393 Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentLootBonus.class differ diff --git a/bin/net/minecraft/src/EnchantmentModifierDamage.class b/bin/net/minecraft/src/EnchantmentModifierDamage.class new file mode 100644 index 0000000..ff59108 Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentModifierDamage.class differ diff --git a/bin/net/minecraft/src/EnchantmentModifierLiving.class b/bin/net/minecraft/src/EnchantmentModifierLiving.class new file mode 100644 index 0000000..1b1e4d9 Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentModifierLiving.class differ diff --git a/bin/net/minecraft/src/EnchantmentNameParts.class b/bin/net/minecraft/src/EnchantmentNameParts.class new file mode 100644 index 0000000..58db8f3 Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentNameParts.class differ diff --git a/bin/net/minecraft/src/EnchantmentOxygen.class b/bin/net/minecraft/src/EnchantmentOxygen.class new file mode 100644 index 0000000..3c995af Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentOxygen.class differ diff --git a/bin/net/minecraft/src/EnchantmentProtection.class b/bin/net/minecraft/src/EnchantmentProtection.class new file mode 100644 index 0000000..50ae3ec Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentProtection.class differ diff --git a/bin/net/minecraft/src/EnchantmentThorns.class b/bin/net/minecraft/src/EnchantmentThorns.class new file mode 100644 index 0000000..4ff7b68 Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentThorns.class differ diff --git a/bin/net/minecraft/src/EnchantmentUntouching.class b/bin/net/minecraft/src/EnchantmentUntouching.class new file mode 100644 index 0000000..7675e64 Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentUntouching.class differ diff --git a/bin/net/minecraft/src/EnchantmentWaterWorker.class b/bin/net/minecraft/src/EnchantmentWaterWorker.class new file mode 100644 index 0000000..573a777 Binary files /dev/null and b/bin/net/minecraft/src/EnchantmentWaterWorker.class differ diff --git a/bin/net/minecraft/src/Entity.class b/bin/net/minecraft/src/Entity.class new file mode 100644 index 0000000..d410c34 Binary files /dev/null and b/bin/net/minecraft/src/Entity.class differ diff --git a/bin/net/minecraft/src/EntityAIArrowAttack.class b/bin/net/minecraft/src/EntityAIArrowAttack.class new file mode 100644 index 0000000..5b89540 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIArrowAttack.class differ diff --git a/bin/net/minecraft/src/EntityAIAttackOnCollide.class b/bin/net/minecraft/src/EntityAIAttackOnCollide.class new file mode 100644 index 0000000..6564c28 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIAttackOnCollide.class differ diff --git a/bin/net/minecraft/src/EntityAIAvoidEntity.class b/bin/net/minecraft/src/EntityAIAvoidEntity.class new file mode 100644 index 0000000..39ff6b2 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIAvoidEntity.class differ diff --git a/bin/net/minecraft/src/EntityAIAvoidEntitySelector.class b/bin/net/minecraft/src/EntityAIAvoidEntitySelector.class new file mode 100644 index 0000000..68f6b06 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIAvoidEntitySelector.class differ diff --git a/bin/net/minecraft/src/EntityAIBase.class b/bin/net/minecraft/src/EntityAIBase.class new file mode 100644 index 0000000..18fe391 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIBase.class differ diff --git a/bin/net/minecraft/src/EntityAIBeg.class b/bin/net/minecraft/src/EntityAIBeg.class new file mode 100644 index 0000000..f2a9e0b Binary files /dev/null and b/bin/net/minecraft/src/EntityAIBeg.class differ diff --git a/bin/net/minecraft/src/EntityAIBreakDoor.class b/bin/net/minecraft/src/EntityAIBreakDoor.class new file mode 100644 index 0000000..c01d0a8 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIBreakDoor.class differ diff --git a/bin/net/minecraft/src/EntityAIControlledByPlayer.class b/bin/net/minecraft/src/EntityAIControlledByPlayer.class new file mode 100644 index 0000000..c3712fe Binary files /dev/null and b/bin/net/minecraft/src/EntityAIControlledByPlayer.class differ diff --git a/bin/net/minecraft/src/EntityAICreeperSwell.class b/bin/net/minecraft/src/EntityAICreeperSwell.class new file mode 100644 index 0000000..f49dc53 Binary files /dev/null and b/bin/net/minecraft/src/EntityAICreeperSwell.class differ diff --git a/bin/net/minecraft/src/EntityAIDefendVillage.class b/bin/net/minecraft/src/EntityAIDefendVillage.class new file mode 100644 index 0000000..e02ea18 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIDefendVillage.class differ diff --git a/bin/net/minecraft/src/EntityAIDoorInteract.class b/bin/net/minecraft/src/EntityAIDoorInteract.class new file mode 100644 index 0000000..f2d38ac Binary files /dev/null and b/bin/net/minecraft/src/EntityAIDoorInteract.class differ diff --git a/bin/net/minecraft/src/EntityAIEatGrass.class b/bin/net/minecraft/src/EntityAIEatGrass.class new file mode 100644 index 0000000..8757934 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIEatGrass.class differ diff --git a/bin/net/minecraft/src/EntityAIFleeSun.class b/bin/net/minecraft/src/EntityAIFleeSun.class new file mode 100644 index 0000000..0e68e87 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIFleeSun.class differ diff --git a/bin/net/minecraft/src/EntityAIFollowGolem.class b/bin/net/minecraft/src/EntityAIFollowGolem.class new file mode 100644 index 0000000..3a02c35 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIFollowGolem.class differ diff --git a/bin/net/minecraft/src/EntityAIFollowOwner.class b/bin/net/minecraft/src/EntityAIFollowOwner.class new file mode 100644 index 0000000..f04f564 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIFollowOwner.class differ diff --git a/bin/net/minecraft/src/EntityAIFollowParent.class b/bin/net/minecraft/src/EntityAIFollowParent.class new file mode 100644 index 0000000..4245368 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIFollowParent.class differ diff --git a/bin/net/minecraft/src/EntityAIHurtByTarget.class b/bin/net/minecraft/src/EntityAIHurtByTarget.class new file mode 100644 index 0000000..5f6bb66 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIHurtByTarget.class differ diff --git a/bin/net/minecraft/src/EntityAILeapAtTarget.class b/bin/net/minecraft/src/EntityAILeapAtTarget.class new file mode 100644 index 0000000..6181b46 Binary files /dev/null and b/bin/net/minecraft/src/EntityAILeapAtTarget.class differ diff --git a/bin/net/minecraft/src/EntityAILookAtTradePlayer.class b/bin/net/minecraft/src/EntityAILookAtTradePlayer.class new file mode 100644 index 0000000..5adcab1 Binary files /dev/null and b/bin/net/minecraft/src/EntityAILookAtTradePlayer.class differ diff --git a/bin/net/minecraft/src/EntityAILookAtVillager.class b/bin/net/minecraft/src/EntityAILookAtVillager.class new file mode 100644 index 0000000..3ff98fc Binary files /dev/null and b/bin/net/minecraft/src/EntityAILookAtVillager.class differ diff --git a/bin/net/minecraft/src/EntityAILookIdle.class b/bin/net/minecraft/src/EntityAILookIdle.class new file mode 100644 index 0000000..1c9c3e0 Binary files /dev/null and b/bin/net/minecraft/src/EntityAILookIdle.class differ diff --git a/bin/net/minecraft/src/EntityAIMate.class b/bin/net/minecraft/src/EntityAIMate.class new file mode 100644 index 0000000..c2e0411 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIMate.class differ diff --git a/bin/net/minecraft/src/EntityAIMoveIndoors.class b/bin/net/minecraft/src/EntityAIMoveIndoors.class new file mode 100644 index 0000000..6c7c810 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIMoveIndoors.class differ diff --git a/bin/net/minecraft/src/EntityAIMoveThroughVillage.class b/bin/net/minecraft/src/EntityAIMoveThroughVillage.class new file mode 100644 index 0000000..afbe098 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIMoveThroughVillage.class differ diff --git a/bin/net/minecraft/src/EntityAIMoveTowardsTarget.class b/bin/net/minecraft/src/EntityAIMoveTowardsTarget.class new file mode 100644 index 0000000..b6a654a Binary files /dev/null and b/bin/net/minecraft/src/EntityAIMoveTowardsTarget.class differ diff --git a/bin/net/minecraft/src/EntityAIMoveTwardsRestriction.class b/bin/net/minecraft/src/EntityAIMoveTwardsRestriction.class new file mode 100644 index 0000000..95364d1 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIMoveTwardsRestriction.class differ diff --git a/bin/net/minecraft/src/EntityAINearestAttackableTarget.class b/bin/net/minecraft/src/EntityAINearestAttackableTarget.class new file mode 100644 index 0000000..30bdf85 Binary files /dev/null and b/bin/net/minecraft/src/EntityAINearestAttackableTarget.class differ diff --git a/bin/net/minecraft/src/EntityAINearestAttackableTargetSorter.class b/bin/net/minecraft/src/EntityAINearestAttackableTargetSorter.class new file mode 100644 index 0000000..b46396c Binary files /dev/null and b/bin/net/minecraft/src/EntityAINearestAttackableTargetSorter.class differ diff --git a/bin/net/minecraft/src/EntityAIOcelotAttack.class b/bin/net/minecraft/src/EntityAIOcelotAttack.class new file mode 100644 index 0000000..9da9fd1 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIOcelotAttack.class differ diff --git a/bin/net/minecraft/src/EntityAIOcelotSit.class b/bin/net/minecraft/src/EntityAIOcelotSit.class new file mode 100644 index 0000000..d3ac050 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIOcelotSit.class differ diff --git a/bin/net/minecraft/src/EntityAIOpenDoor.class b/bin/net/minecraft/src/EntityAIOpenDoor.class new file mode 100644 index 0000000..6039c10 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIOpenDoor.class differ diff --git a/bin/net/minecraft/src/EntityAIOwnerHurtByTarget.class b/bin/net/minecraft/src/EntityAIOwnerHurtByTarget.class new file mode 100644 index 0000000..29aadd3 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIOwnerHurtByTarget.class differ diff --git a/bin/net/minecraft/src/EntityAIOwnerHurtTarget.class b/bin/net/minecraft/src/EntityAIOwnerHurtTarget.class new file mode 100644 index 0000000..7d9e0cf Binary files /dev/null and b/bin/net/minecraft/src/EntityAIOwnerHurtTarget.class differ diff --git a/bin/net/minecraft/src/EntityAIPanic.class b/bin/net/minecraft/src/EntityAIPanic.class new file mode 100644 index 0000000..30a1d73 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIPanic.class differ diff --git a/bin/net/minecraft/src/EntityAIPlay.class b/bin/net/minecraft/src/EntityAIPlay.class new file mode 100644 index 0000000..e478ac5 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIPlay.class differ diff --git a/bin/net/minecraft/src/EntityAIRestrictOpenDoor.class b/bin/net/minecraft/src/EntityAIRestrictOpenDoor.class new file mode 100644 index 0000000..4c9d332 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIRestrictOpenDoor.class differ diff --git a/bin/net/minecraft/src/EntityAIRestrictSun.class b/bin/net/minecraft/src/EntityAIRestrictSun.class new file mode 100644 index 0000000..76d2793 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIRestrictSun.class differ diff --git a/bin/net/minecraft/src/EntityAISit.class b/bin/net/minecraft/src/EntityAISit.class new file mode 100644 index 0000000..dcfe98a Binary files /dev/null and b/bin/net/minecraft/src/EntityAISit.class differ diff --git a/bin/net/minecraft/src/EntityAISwimming.class b/bin/net/minecraft/src/EntityAISwimming.class new file mode 100644 index 0000000..3655c27 Binary files /dev/null and b/bin/net/minecraft/src/EntityAISwimming.class differ diff --git a/bin/net/minecraft/src/EntityAITarget.class b/bin/net/minecraft/src/EntityAITarget.class new file mode 100644 index 0000000..0debbdb Binary files /dev/null and b/bin/net/minecraft/src/EntityAITarget.class differ diff --git a/bin/net/minecraft/src/EntityAITargetNonTamed.class b/bin/net/minecraft/src/EntityAITargetNonTamed.class new file mode 100644 index 0000000..ff99095 Binary files /dev/null and b/bin/net/minecraft/src/EntityAITargetNonTamed.class differ diff --git a/bin/net/minecraft/src/EntityAITaskEntry.class b/bin/net/minecraft/src/EntityAITaskEntry.class new file mode 100644 index 0000000..679ca2e Binary files /dev/null and b/bin/net/minecraft/src/EntityAITaskEntry.class differ diff --git a/bin/net/minecraft/src/EntityAITasks.class b/bin/net/minecraft/src/EntityAITasks.class new file mode 100644 index 0000000..03ffd1f Binary files /dev/null and b/bin/net/minecraft/src/EntityAITasks.class differ diff --git a/bin/net/minecraft/src/EntityAITempt.class b/bin/net/minecraft/src/EntityAITempt.class new file mode 100644 index 0000000..224becb Binary files /dev/null and b/bin/net/minecraft/src/EntityAITempt.class differ diff --git a/bin/net/minecraft/src/EntityAITradePlayer.class b/bin/net/minecraft/src/EntityAITradePlayer.class new file mode 100644 index 0000000..915e704 Binary files /dev/null and b/bin/net/minecraft/src/EntityAITradePlayer.class differ diff --git a/bin/net/minecraft/src/EntityAIVillagerMate.class b/bin/net/minecraft/src/EntityAIVillagerMate.class new file mode 100644 index 0000000..92abe34 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIVillagerMate.class differ diff --git a/bin/net/minecraft/src/EntityAIWander.class b/bin/net/minecraft/src/EntityAIWander.class new file mode 100644 index 0000000..e0b59f1 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIWander.class differ diff --git a/bin/net/minecraft/src/EntityAIWatchClosest.class b/bin/net/minecraft/src/EntityAIWatchClosest.class new file mode 100644 index 0000000..0fa3e57 Binary files /dev/null and b/bin/net/minecraft/src/EntityAIWatchClosest.class differ diff --git a/bin/net/minecraft/src/EntityAIWatchClosest2.class b/bin/net/minecraft/src/EntityAIWatchClosest2.class new file mode 100644 index 0000000..eb5deee Binary files /dev/null and b/bin/net/minecraft/src/EntityAIWatchClosest2.class differ diff --git a/bin/net/minecraft/src/EntityAgeable.class b/bin/net/minecraft/src/EntityAgeable.class new file mode 100644 index 0000000..282fde4 Binary files /dev/null and b/bin/net/minecraft/src/EntityAgeable.class differ diff --git a/bin/net/minecraft/src/EntityAmbientCreature.class b/bin/net/minecraft/src/EntityAmbientCreature.class new file mode 100644 index 0000000..4003e2d Binary files /dev/null and b/bin/net/minecraft/src/EntityAmbientCreature.class differ diff --git a/bin/net/minecraft/src/EntityAnimal.class b/bin/net/minecraft/src/EntityAnimal.class new file mode 100644 index 0000000..9390cb8 Binary files /dev/null and b/bin/net/minecraft/src/EntityAnimal.class differ diff --git a/bin/net/minecraft/src/EntityArrow.class b/bin/net/minecraft/src/EntityArrow.class new file mode 100644 index 0000000..56c0743 Binary files /dev/null and b/bin/net/minecraft/src/EntityArrow.class differ diff --git a/bin/net/minecraft/src/EntityAuraFX.class b/bin/net/minecraft/src/EntityAuraFX.class new file mode 100644 index 0000000..0a58738 Binary files /dev/null and b/bin/net/minecraft/src/EntityAuraFX.class differ diff --git a/bin/net/minecraft/src/EntityBat.class b/bin/net/minecraft/src/EntityBat.class new file mode 100644 index 0000000..c16f9c8 Binary files /dev/null and b/bin/net/minecraft/src/EntityBat.class differ diff --git a/bin/net/minecraft/src/EntityBlaze.class b/bin/net/minecraft/src/EntityBlaze.class new file mode 100644 index 0000000..d50dd26 Binary files /dev/null and b/bin/net/minecraft/src/EntityBlaze.class differ diff --git a/bin/net/minecraft/src/EntityBoat.class b/bin/net/minecraft/src/EntityBoat.class new file mode 100644 index 0000000..287ca05 Binary files /dev/null and b/bin/net/minecraft/src/EntityBoat.class differ diff --git a/bin/net/minecraft/src/EntityBodyHelper.class b/bin/net/minecraft/src/EntityBodyHelper.class new file mode 100644 index 0000000..8866334 Binary files /dev/null and b/bin/net/minecraft/src/EntityBodyHelper.class differ diff --git a/bin/net/minecraft/src/EntityBreakingFX.class b/bin/net/minecraft/src/EntityBreakingFX.class new file mode 100644 index 0000000..5af5af9 Binary files /dev/null and b/bin/net/minecraft/src/EntityBreakingFX.class differ diff --git a/bin/net/minecraft/src/EntityBubbleFX.class b/bin/net/minecraft/src/EntityBubbleFX.class new file mode 100644 index 0000000..5cc3e00 Binary files /dev/null and b/bin/net/minecraft/src/EntityBubbleFX.class differ diff --git a/bin/net/minecraft/src/EntityCaveSpider.class b/bin/net/minecraft/src/EntityCaveSpider.class new file mode 100644 index 0000000..f1b7c5d Binary files /dev/null and b/bin/net/minecraft/src/EntityCaveSpider.class differ diff --git a/bin/net/minecraft/src/EntityChicken.class b/bin/net/minecraft/src/EntityChicken.class new file mode 100644 index 0000000..4fc0c56 Binary files /dev/null and b/bin/net/minecraft/src/EntityChicken.class differ diff --git a/bin/net/minecraft/src/EntityClientPlayerMP.class b/bin/net/minecraft/src/EntityClientPlayerMP.class new file mode 100644 index 0000000..bc6f05c Binary files /dev/null and b/bin/net/minecraft/src/EntityClientPlayerMP.class differ diff --git a/bin/net/minecraft/src/EntityCloudFX.class b/bin/net/minecraft/src/EntityCloudFX.class new file mode 100644 index 0000000..4258408 Binary files /dev/null and b/bin/net/minecraft/src/EntityCloudFX.class differ diff --git a/bin/net/minecraft/src/EntityCow.class b/bin/net/minecraft/src/EntityCow.class new file mode 100644 index 0000000..aedb875 Binary files /dev/null and b/bin/net/minecraft/src/EntityCow.class differ diff --git a/bin/net/minecraft/src/EntityCreature.class b/bin/net/minecraft/src/EntityCreature.class new file mode 100644 index 0000000..2c3de91 Binary files /dev/null and b/bin/net/minecraft/src/EntityCreature.class differ diff --git a/bin/net/minecraft/src/EntityCreeper.class b/bin/net/minecraft/src/EntityCreeper.class new file mode 100644 index 0000000..5af851a Binary files /dev/null and b/bin/net/minecraft/src/EntityCreeper.class differ diff --git a/bin/net/minecraft/src/EntityCrit2FX.class b/bin/net/minecraft/src/EntityCrit2FX.class new file mode 100644 index 0000000..5c718f9 Binary files /dev/null and b/bin/net/minecraft/src/EntityCrit2FX.class differ diff --git a/bin/net/minecraft/src/EntityCritFX.class b/bin/net/minecraft/src/EntityCritFX.class new file mode 100644 index 0000000..56809d1 Binary files /dev/null and b/bin/net/minecraft/src/EntityCritFX.class differ diff --git a/bin/net/minecraft/src/EntityDamageSource.class b/bin/net/minecraft/src/EntityDamageSource.class new file mode 100644 index 0000000..c20266b Binary files /dev/null and b/bin/net/minecraft/src/EntityDamageSource.class differ diff --git a/bin/net/minecraft/src/EntityDamageSourceIndirect.class b/bin/net/minecraft/src/EntityDamageSourceIndirect.class new file mode 100644 index 0000000..a5dc264 Binary files /dev/null and b/bin/net/minecraft/src/EntityDamageSourceIndirect.class differ diff --git a/bin/net/minecraft/src/EntityDiggingFX.class b/bin/net/minecraft/src/EntityDiggingFX.class new file mode 100644 index 0000000..aea3619 Binary files /dev/null and b/bin/net/minecraft/src/EntityDiggingFX.class differ diff --git a/bin/net/minecraft/src/EntityDragon.class b/bin/net/minecraft/src/EntityDragon.class new file mode 100644 index 0000000..01f80ae Binary files /dev/null and b/bin/net/minecraft/src/EntityDragon.class differ diff --git a/bin/net/minecraft/src/EntityDragonPart.class b/bin/net/minecraft/src/EntityDragonPart.class new file mode 100644 index 0000000..4a51817 Binary files /dev/null and b/bin/net/minecraft/src/EntityDragonPart.class differ diff --git a/bin/net/minecraft/src/EntityDropParticleFX.class b/bin/net/minecraft/src/EntityDropParticleFX.class new file mode 100644 index 0000000..d34d405 Binary files /dev/null and b/bin/net/minecraft/src/EntityDropParticleFX.class differ diff --git a/bin/net/minecraft/src/EntityEgg.class b/bin/net/minecraft/src/EntityEgg.class new file mode 100644 index 0000000..d562f66 Binary files /dev/null and b/bin/net/minecraft/src/EntityEgg.class differ diff --git a/bin/net/minecraft/src/EntityEggInfo.class b/bin/net/minecraft/src/EntityEggInfo.class new file mode 100644 index 0000000..41fd31b Binary files /dev/null and b/bin/net/minecraft/src/EntityEggInfo.class differ diff --git a/bin/net/minecraft/src/EntityEnchantmentTableParticleFX.class b/bin/net/minecraft/src/EntityEnchantmentTableParticleFX.class new file mode 100644 index 0000000..e96d16b Binary files /dev/null and b/bin/net/minecraft/src/EntityEnchantmentTableParticleFX.class differ diff --git a/bin/net/minecraft/src/EntityEnderCrystal.class b/bin/net/minecraft/src/EntityEnderCrystal.class new file mode 100644 index 0000000..7effcbd Binary files /dev/null and b/bin/net/minecraft/src/EntityEnderCrystal.class differ diff --git a/bin/net/minecraft/src/EntityEnderEye.class b/bin/net/minecraft/src/EntityEnderEye.class new file mode 100644 index 0000000..9b3b15a Binary files /dev/null and b/bin/net/minecraft/src/EntityEnderEye.class differ diff --git a/bin/net/minecraft/src/EntityEnderPearl.class b/bin/net/minecraft/src/EntityEnderPearl.class new file mode 100644 index 0000000..65061aa Binary files /dev/null and b/bin/net/minecraft/src/EntityEnderPearl.class differ diff --git a/bin/net/minecraft/src/EntityEnderman.class b/bin/net/minecraft/src/EntityEnderman.class new file mode 100644 index 0000000..41c6e40 Binary files /dev/null and b/bin/net/minecraft/src/EntityEnderman.class differ diff --git a/bin/net/minecraft/src/EntityExpBottle.class b/bin/net/minecraft/src/EntityExpBottle.class new file mode 100644 index 0000000..414f67c Binary files /dev/null and b/bin/net/minecraft/src/EntityExpBottle.class differ diff --git a/bin/net/minecraft/src/EntityExplodeFX.class b/bin/net/minecraft/src/EntityExplodeFX.class new file mode 100644 index 0000000..a683047 Binary files /dev/null and b/bin/net/minecraft/src/EntityExplodeFX.class differ diff --git a/bin/net/minecraft/src/EntityFX.class b/bin/net/minecraft/src/EntityFX.class new file mode 100644 index 0000000..9ba610f Binary files /dev/null and b/bin/net/minecraft/src/EntityFX.class differ diff --git a/bin/net/minecraft/src/EntityFallingSand.class b/bin/net/minecraft/src/EntityFallingSand.class new file mode 100644 index 0000000..304f31f Binary files /dev/null and b/bin/net/minecraft/src/EntityFallingSand.class differ diff --git a/bin/net/minecraft/src/EntityFireball.class b/bin/net/minecraft/src/EntityFireball.class new file mode 100644 index 0000000..fd16ab7 Binary files /dev/null and b/bin/net/minecraft/src/EntityFireball.class differ diff --git a/bin/net/minecraft/src/EntityFireworkOverlayFX.class b/bin/net/minecraft/src/EntityFireworkOverlayFX.class new file mode 100644 index 0000000..601e251 Binary files /dev/null and b/bin/net/minecraft/src/EntityFireworkOverlayFX.class differ diff --git a/bin/net/minecraft/src/EntityFireworkRocket.class b/bin/net/minecraft/src/EntityFireworkRocket.class new file mode 100644 index 0000000..d0da37c Binary files /dev/null and b/bin/net/minecraft/src/EntityFireworkRocket.class differ diff --git a/bin/net/minecraft/src/EntityFireworkSparkFX.class b/bin/net/minecraft/src/EntityFireworkSparkFX.class new file mode 100644 index 0000000..6318869 Binary files /dev/null and b/bin/net/minecraft/src/EntityFireworkSparkFX.class differ diff --git a/bin/net/minecraft/src/EntityFireworkStarterFX.class b/bin/net/minecraft/src/EntityFireworkStarterFX.class new file mode 100644 index 0000000..7229f92 Binary files /dev/null and b/bin/net/minecraft/src/EntityFireworkStarterFX.class differ diff --git a/bin/net/minecraft/src/EntityFishHook.class b/bin/net/minecraft/src/EntityFishHook.class new file mode 100644 index 0000000..3217717 Binary files /dev/null and b/bin/net/minecraft/src/EntityFishHook.class differ diff --git a/bin/net/minecraft/src/EntityFlameFX.class b/bin/net/minecraft/src/EntityFlameFX.class new file mode 100644 index 0000000..eba1b8c Binary files /dev/null and b/bin/net/minecraft/src/EntityFlameFX.class differ diff --git a/bin/net/minecraft/src/EntityFlying.class b/bin/net/minecraft/src/EntityFlying.class new file mode 100644 index 0000000..fb7a718 Binary files /dev/null and b/bin/net/minecraft/src/EntityFlying.class differ diff --git a/bin/net/minecraft/src/EntityFootStepFX.class b/bin/net/minecraft/src/EntityFootStepFX.class new file mode 100644 index 0000000..16b6b94 Binary files /dev/null and b/bin/net/minecraft/src/EntityFootStepFX.class differ diff --git a/bin/net/minecraft/src/EntityGhast.class b/bin/net/minecraft/src/EntityGhast.class new file mode 100644 index 0000000..0a6c3c7 Binary files /dev/null and b/bin/net/minecraft/src/EntityGhast.class differ diff --git a/bin/net/minecraft/src/EntityGiantZombie.class b/bin/net/minecraft/src/EntityGiantZombie.class new file mode 100644 index 0000000..be95a86 Binary files /dev/null and b/bin/net/minecraft/src/EntityGiantZombie.class differ diff --git a/bin/net/minecraft/src/EntityGolem.class b/bin/net/minecraft/src/EntityGolem.class new file mode 100644 index 0000000..eff8070 Binary files /dev/null and b/bin/net/minecraft/src/EntityGolem.class differ diff --git a/bin/net/minecraft/src/EntityHanging.class b/bin/net/minecraft/src/EntityHanging.class new file mode 100644 index 0000000..4aeeeb4 Binary files /dev/null and b/bin/net/minecraft/src/EntityHanging.class differ diff --git a/bin/net/minecraft/src/EntityHeartFX.class b/bin/net/minecraft/src/EntityHeartFX.class new file mode 100644 index 0000000..dc15ff9 Binary files /dev/null and b/bin/net/minecraft/src/EntityHeartFX.class differ diff --git a/bin/net/minecraft/src/EntityHugeExplodeFX.class b/bin/net/minecraft/src/EntityHugeExplodeFX.class new file mode 100644 index 0000000..8b03519 Binary files /dev/null and b/bin/net/minecraft/src/EntityHugeExplodeFX.class differ diff --git a/bin/net/minecraft/src/EntityIronGolem.class b/bin/net/minecraft/src/EntityIronGolem.class new file mode 100644 index 0000000..9355a82 Binary files /dev/null and b/bin/net/minecraft/src/EntityIronGolem.class differ diff --git a/bin/net/minecraft/src/EntityItem.class b/bin/net/minecraft/src/EntityItem.class new file mode 100644 index 0000000..71003b4 Binary files /dev/null and b/bin/net/minecraft/src/EntityItem.class differ diff --git a/bin/net/minecraft/src/EntityItemFrame.class b/bin/net/minecraft/src/EntityItemFrame.class new file mode 100644 index 0000000..63ca3c1 Binary files /dev/null and b/bin/net/minecraft/src/EntityItemFrame.class differ diff --git a/bin/net/minecraft/src/EntityJumpHelper.class b/bin/net/minecraft/src/EntityJumpHelper.class new file mode 100644 index 0000000..c371ccc Binary files /dev/null and b/bin/net/minecraft/src/EntityJumpHelper.class differ diff --git a/bin/net/minecraft/src/EntityLargeExplodeFX.class b/bin/net/minecraft/src/EntityLargeExplodeFX.class new file mode 100644 index 0000000..d2d4610 Binary files /dev/null and b/bin/net/minecraft/src/EntityLargeExplodeFX.class differ diff --git a/bin/net/minecraft/src/EntityLargeFireball.class b/bin/net/minecraft/src/EntityLargeFireball.class new file mode 100644 index 0000000..b9bfc7c Binary files /dev/null and b/bin/net/minecraft/src/EntityLargeFireball.class differ diff --git a/bin/net/minecraft/src/EntityLavaFX.class b/bin/net/minecraft/src/EntityLavaFX.class new file mode 100644 index 0000000..2d7c00b Binary files /dev/null and b/bin/net/minecraft/src/EntityLavaFX.class differ diff --git a/bin/net/minecraft/src/EntityLightningBolt.class b/bin/net/minecraft/src/EntityLightningBolt.class new file mode 100644 index 0000000..656890a Binary files /dev/null and b/bin/net/minecraft/src/EntityLightningBolt.class differ diff --git a/bin/net/minecraft/src/EntityList.class b/bin/net/minecraft/src/EntityList.class new file mode 100644 index 0000000..bdc5c0f Binary files /dev/null and b/bin/net/minecraft/src/EntityList.class differ diff --git a/bin/net/minecraft/src/EntityLiving.class b/bin/net/minecraft/src/EntityLiving.class new file mode 100644 index 0000000..9d4d1af Binary files /dev/null and b/bin/net/minecraft/src/EntityLiving.class differ diff --git a/bin/net/minecraft/src/EntityLookHelper.class b/bin/net/minecraft/src/EntityLookHelper.class new file mode 100644 index 0000000..8d6fa6f Binary files /dev/null and b/bin/net/minecraft/src/EntityLookHelper.class differ diff --git a/bin/net/minecraft/src/EntityMagmaCube.class b/bin/net/minecraft/src/EntityMagmaCube.class new file mode 100644 index 0000000..9ad9084 Binary files /dev/null and b/bin/net/minecraft/src/EntityMagmaCube.class differ diff --git a/bin/net/minecraft/src/EntityMinecart.class b/bin/net/minecraft/src/EntityMinecart.class new file mode 100644 index 0000000..ef3a457 Binary files /dev/null and b/bin/net/minecraft/src/EntityMinecart.class differ diff --git a/bin/net/minecraft/src/EntityMinecartChest.class b/bin/net/minecraft/src/EntityMinecartChest.class new file mode 100644 index 0000000..0b18115 Binary files /dev/null and b/bin/net/minecraft/src/EntityMinecartChest.class differ diff --git a/bin/net/minecraft/src/EntityMinecartContainer.class b/bin/net/minecraft/src/EntityMinecartContainer.class new file mode 100644 index 0000000..b380110 Binary files /dev/null and b/bin/net/minecraft/src/EntityMinecartContainer.class differ diff --git a/bin/net/minecraft/src/EntityMinecartEmpty.class b/bin/net/minecraft/src/EntityMinecartEmpty.class new file mode 100644 index 0000000..16cee25 Binary files /dev/null and b/bin/net/minecraft/src/EntityMinecartEmpty.class differ diff --git a/bin/net/minecraft/src/EntityMinecartFurnace.class b/bin/net/minecraft/src/EntityMinecartFurnace.class new file mode 100644 index 0000000..511c20d Binary files /dev/null and b/bin/net/minecraft/src/EntityMinecartFurnace.class differ diff --git a/bin/net/minecraft/src/EntityMinecartHopper.class b/bin/net/minecraft/src/EntityMinecartHopper.class new file mode 100644 index 0000000..e18ab09 Binary files /dev/null and b/bin/net/minecraft/src/EntityMinecartHopper.class differ diff --git a/bin/net/minecraft/src/EntityMinecartMobSpawner.class b/bin/net/minecraft/src/EntityMinecartMobSpawner.class new file mode 100644 index 0000000..35de22e Binary files /dev/null and b/bin/net/minecraft/src/EntityMinecartMobSpawner.class differ diff --git a/bin/net/minecraft/src/EntityMinecartMobSpawnerLogic.class b/bin/net/minecraft/src/EntityMinecartMobSpawnerLogic.class new file mode 100644 index 0000000..158ea49 Binary files /dev/null and b/bin/net/minecraft/src/EntityMinecartMobSpawnerLogic.class differ diff --git a/bin/net/minecraft/src/EntityMinecartTNT.class b/bin/net/minecraft/src/EntityMinecartTNT.class new file mode 100644 index 0000000..724069b Binary files /dev/null and b/bin/net/minecraft/src/EntityMinecartTNT.class differ diff --git a/bin/net/minecraft/src/EntityMob.class b/bin/net/minecraft/src/EntityMob.class new file mode 100644 index 0000000..959e3de Binary files /dev/null and b/bin/net/minecraft/src/EntityMob.class differ diff --git a/bin/net/minecraft/src/EntityMooshroom.class b/bin/net/minecraft/src/EntityMooshroom.class new file mode 100644 index 0000000..8f08ca9 Binary files /dev/null and b/bin/net/minecraft/src/EntityMooshroom.class differ diff --git a/bin/net/minecraft/src/EntityMoveHelper.class b/bin/net/minecraft/src/EntityMoveHelper.class new file mode 100644 index 0000000..1debcfd Binary files /dev/null and b/bin/net/minecraft/src/EntityMoveHelper.class differ diff --git a/bin/net/minecraft/src/EntityNoteFX.class b/bin/net/minecraft/src/EntityNoteFX.class new file mode 100644 index 0000000..aa7e8c8 Binary files /dev/null and b/bin/net/minecraft/src/EntityNoteFX.class differ diff --git a/bin/net/minecraft/src/EntityOcelot.class b/bin/net/minecraft/src/EntityOcelot.class new file mode 100644 index 0000000..cc435d7 Binary files /dev/null and b/bin/net/minecraft/src/EntityOcelot.class differ diff --git a/bin/net/minecraft/src/EntityOtherPlayerMP.class b/bin/net/minecraft/src/EntityOtherPlayerMP.class new file mode 100644 index 0000000..272e18a Binary files /dev/null and b/bin/net/minecraft/src/EntityOtherPlayerMP.class differ diff --git a/bin/net/minecraft/src/EntityPainting.class b/bin/net/minecraft/src/EntityPainting.class new file mode 100644 index 0000000..79253f6 Binary files /dev/null and b/bin/net/minecraft/src/EntityPainting.class differ diff --git a/bin/net/minecraft/src/EntityPickupFX.class b/bin/net/minecraft/src/EntityPickupFX.class new file mode 100644 index 0000000..4f4b9f1 Binary files /dev/null and b/bin/net/minecraft/src/EntityPickupFX.class differ diff --git a/bin/net/minecraft/src/EntityPig.class b/bin/net/minecraft/src/EntityPig.class new file mode 100644 index 0000000..f6f56ea Binary files /dev/null and b/bin/net/minecraft/src/EntityPig.class differ diff --git a/bin/net/minecraft/src/EntityPigZombie.class b/bin/net/minecraft/src/EntityPigZombie.class new file mode 100644 index 0000000..7e9b76d Binary files /dev/null and b/bin/net/minecraft/src/EntityPigZombie.class differ diff --git a/bin/net/minecraft/src/EntityPlayer.class b/bin/net/minecraft/src/EntityPlayer.class new file mode 100644 index 0000000..8052984 Binary files /dev/null and b/bin/net/minecraft/src/EntityPlayer.class differ diff --git a/bin/net/minecraft/src/EntityPlayerMP.class b/bin/net/minecraft/src/EntityPlayerMP.class new file mode 100644 index 0000000..a5dfd0e Binary files /dev/null and b/bin/net/minecraft/src/EntityPlayerMP.class differ diff --git a/bin/net/minecraft/src/EntityPlayerSP.class b/bin/net/minecraft/src/EntityPlayerSP.class new file mode 100644 index 0000000..f6968ab Binary files /dev/null and b/bin/net/minecraft/src/EntityPlayerSP.class differ diff --git a/bin/net/minecraft/src/EntityPortalFX.class b/bin/net/minecraft/src/EntityPortalFX.class new file mode 100644 index 0000000..498df41 Binary files /dev/null and b/bin/net/minecraft/src/EntityPortalFX.class differ diff --git a/bin/net/minecraft/src/EntityPotion.class b/bin/net/minecraft/src/EntityPotion.class new file mode 100644 index 0000000..fce6018 Binary files /dev/null and b/bin/net/minecraft/src/EntityPotion.class differ diff --git a/bin/net/minecraft/src/EntityRainFX.class b/bin/net/minecraft/src/EntityRainFX.class new file mode 100644 index 0000000..62008ce Binary files /dev/null and b/bin/net/minecraft/src/EntityRainFX.class differ diff --git a/bin/net/minecraft/src/EntityReddustFX.class b/bin/net/minecraft/src/EntityReddustFX.class new file mode 100644 index 0000000..293df2d Binary files /dev/null and b/bin/net/minecraft/src/EntityReddustFX.class differ diff --git a/bin/net/minecraft/src/EntityRenderer.class b/bin/net/minecraft/src/EntityRenderer.class new file mode 100644 index 0000000..077ca3c Binary files /dev/null and b/bin/net/minecraft/src/EntityRenderer.class differ diff --git a/bin/net/minecraft/src/EntitySelectorAlive.class b/bin/net/minecraft/src/EntitySelectorAlive.class new file mode 100644 index 0000000..36b1a1a Binary files /dev/null and b/bin/net/minecraft/src/EntitySelectorAlive.class differ diff --git a/bin/net/minecraft/src/EntitySelectorArmoredMob.class b/bin/net/minecraft/src/EntitySelectorArmoredMob.class new file mode 100644 index 0000000..a9b0c6d Binary files /dev/null and b/bin/net/minecraft/src/EntitySelectorArmoredMob.class differ diff --git a/bin/net/minecraft/src/EntitySelectorInventory.class b/bin/net/minecraft/src/EntitySelectorInventory.class new file mode 100644 index 0000000..7192402 Binary files /dev/null and b/bin/net/minecraft/src/EntitySelectorInventory.class differ diff --git a/bin/net/minecraft/src/EntitySenses.class b/bin/net/minecraft/src/EntitySenses.class new file mode 100644 index 0000000..7105e7b Binary files /dev/null and b/bin/net/minecraft/src/EntitySenses.class differ diff --git a/bin/net/minecraft/src/EntitySheep.class b/bin/net/minecraft/src/EntitySheep.class new file mode 100644 index 0000000..36009da Binary files /dev/null and b/bin/net/minecraft/src/EntitySheep.class differ diff --git a/bin/net/minecraft/src/EntitySilverfish.class b/bin/net/minecraft/src/EntitySilverfish.class new file mode 100644 index 0000000..87f9093 Binary files /dev/null and b/bin/net/minecraft/src/EntitySilverfish.class differ diff --git a/bin/net/minecraft/src/EntitySkeleton.class b/bin/net/minecraft/src/EntitySkeleton.class new file mode 100644 index 0000000..e674e8e Binary files /dev/null and b/bin/net/minecraft/src/EntitySkeleton.class differ diff --git a/bin/net/minecraft/src/EntitySlime.class b/bin/net/minecraft/src/EntitySlime.class new file mode 100644 index 0000000..65a4fec Binary files /dev/null and b/bin/net/minecraft/src/EntitySlime.class differ diff --git a/bin/net/minecraft/src/EntitySmallFireball.class b/bin/net/minecraft/src/EntitySmallFireball.class new file mode 100644 index 0000000..4e7e7fd Binary files /dev/null and b/bin/net/minecraft/src/EntitySmallFireball.class differ diff --git a/bin/net/minecraft/src/EntitySmokeFX.class b/bin/net/minecraft/src/EntitySmokeFX.class new file mode 100644 index 0000000..633fe6b Binary files /dev/null and b/bin/net/minecraft/src/EntitySmokeFX.class differ diff --git a/bin/net/minecraft/src/EntitySnowShovelFX.class b/bin/net/minecraft/src/EntitySnowShovelFX.class new file mode 100644 index 0000000..17caea6 Binary files /dev/null and b/bin/net/minecraft/src/EntitySnowShovelFX.class differ diff --git a/bin/net/minecraft/src/EntitySnowball.class b/bin/net/minecraft/src/EntitySnowball.class new file mode 100644 index 0000000..4b8aef4 Binary files /dev/null and b/bin/net/minecraft/src/EntitySnowball.class differ diff --git a/bin/net/minecraft/src/EntitySnowman.class b/bin/net/minecraft/src/EntitySnowman.class new file mode 100644 index 0000000..fffe72f Binary files /dev/null and b/bin/net/minecraft/src/EntitySnowman.class differ diff --git a/bin/net/minecraft/src/EntitySorter.class b/bin/net/minecraft/src/EntitySorter.class new file mode 100644 index 0000000..0e72660 Binary files /dev/null and b/bin/net/minecraft/src/EntitySorter.class differ diff --git a/bin/net/minecraft/src/EntitySpellParticleFX.class b/bin/net/minecraft/src/EntitySpellParticleFX.class new file mode 100644 index 0000000..63e94c1 Binary files /dev/null and b/bin/net/minecraft/src/EntitySpellParticleFX.class differ diff --git a/bin/net/minecraft/src/EntitySpider.class b/bin/net/minecraft/src/EntitySpider.class new file mode 100644 index 0000000..276e93c Binary files /dev/null and b/bin/net/minecraft/src/EntitySpider.class differ diff --git a/bin/net/minecraft/src/EntitySplashFX.class b/bin/net/minecraft/src/EntitySplashFX.class new file mode 100644 index 0000000..7a8df5b Binary files /dev/null and b/bin/net/minecraft/src/EntitySplashFX.class differ diff --git a/bin/net/minecraft/src/EntitySquid.class b/bin/net/minecraft/src/EntitySquid.class new file mode 100644 index 0000000..81a19b5 Binary files /dev/null and b/bin/net/minecraft/src/EntitySquid.class differ diff --git a/bin/net/minecraft/src/EntitySuspendFX.class b/bin/net/minecraft/src/EntitySuspendFX.class new file mode 100644 index 0000000..b835af8 Binary files /dev/null and b/bin/net/minecraft/src/EntitySuspendFX.class differ diff --git a/bin/net/minecraft/src/EntityTNTPrimed.class b/bin/net/minecraft/src/EntityTNTPrimed.class new file mode 100644 index 0000000..41ff820 Binary files /dev/null and b/bin/net/minecraft/src/EntityTNTPrimed.class differ diff --git a/bin/net/minecraft/src/EntityTameable.class b/bin/net/minecraft/src/EntityTameable.class new file mode 100644 index 0000000..790b390 Binary files /dev/null and b/bin/net/minecraft/src/EntityTameable.class differ diff --git a/bin/net/minecraft/src/EntityThrowable.class b/bin/net/minecraft/src/EntityThrowable.class new file mode 100644 index 0000000..6412a98 Binary files /dev/null and b/bin/net/minecraft/src/EntityThrowable.class differ diff --git a/bin/net/minecraft/src/EntityTracker.class b/bin/net/minecraft/src/EntityTracker.class new file mode 100644 index 0000000..125b710 Binary files /dev/null and b/bin/net/minecraft/src/EntityTracker.class differ diff --git a/bin/net/minecraft/src/EntityTrackerEntry.class b/bin/net/minecraft/src/EntityTrackerEntry.class new file mode 100644 index 0000000..ac74f39 Binary files /dev/null and b/bin/net/minecraft/src/EntityTrackerEntry.class differ diff --git a/bin/net/minecraft/src/EntityVillager.class b/bin/net/minecraft/src/EntityVillager.class new file mode 100644 index 0000000..9d0bd64 Binary files /dev/null and b/bin/net/minecraft/src/EntityVillager.class differ diff --git a/bin/net/minecraft/src/EntityWaterMob.class b/bin/net/minecraft/src/EntityWaterMob.class new file mode 100644 index 0000000..08ee6af Binary files /dev/null and b/bin/net/minecraft/src/EntityWaterMob.class differ diff --git a/bin/net/minecraft/src/EntityWeatherEffect.class b/bin/net/minecraft/src/EntityWeatherEffect.class new file mode 100644 index 0000000..0217892 Binary files /dev/null and b/bin/net/minecraft/src/EntityWeatherEffect.class differ diff --git a/bin/net/minecraft/src/EntityWitch.class b/bin/net/minecraft/src/EntityWitch.class new file mode 100644 index 0000000..95b7198 Binary files /dev/null and b/bin/net/minecraft/src/EntityWitch.class differ diff --git a/bin/net/minecraft/src/EntityWither.class b/bin/net/minecraft/src/EntityWither.class new file mode 100644 index 0000000..1a168e8 Binary files /dev/null and b/bin/net/minecraft/src/EntityWither.class differ diff --git a/bin/net/minecraft/src/EntityWitherAttackFilter.class b/bin/net/minecraft/src/EntityWitherAttackFilter.class new file mode 100644 index 0000000..ee9f7be Binary files /dev/null and b/bin/net/minecraft/src/EntityWitherAttackFilter.class differ diff --git a/bin/net/minecraft/src/EntityWitherSkull.class b/bin/net/minecraft/src/EntityWitherSkull.class new file mode 100644 index 0000000..0aee707 Binary files /dev/null and b/bin/net/minecraft/src/EntityWitherSkull.class differ diff --git a/bin/net/minecraft/src/EntityWolf.class b/bin/net/minecraft/src/EntityWolf.class new file mode 100644 index 0000000..748e575 Binary files /dev/null and b/bin/net/minecraft/src/EntityWolf.class differ diff --git a/bin/net/minecraft/src/EntityXPOrb.class b/bin/net/minecraft/src/EntityXPOrb.class new file mode 100644 index 0000000..8c13f85 Binary files /dev/null and b/bin/net/minecraft/src/EntityXPOrb.class differ diff --git a/bin/net/minecraft/src/EntityZombie.class b/bin/net/minecraft/src/EntityZombie.class new file mode 100644 index 0000000..8921f05 Binary files /dev/null and b/bin/net/minecraft/src/EntityZombie.class differ diff --git a/bin/net/minecraft/src/EnumAction.class b/bin/net/minecraft/src/EnumAction.class new file mode 100644 index 0000000..1138c6d Binary files /dev/null and b/bin/net/minecraft/src/EnumAction.class differ diff --git a/bin/net/minecraft/src/EnumArmorMaterial.class b/bin/net/minecraft/src/EnumArmorMaterial.class new file mode 100644 index 0000000..3013612 Binary files /dev/null and b/bin/net/minecraft/src/EnumArmorMaterial.class differ diff --git a/bin/net/minecraft/src/EnumArt.class b/bin/net/minecraft/src/EnumArt.class new file mode 100644 index 0000000..8d1c888 Binary files /dev/null and b/bin/net/minecraft/src/EnumArt.class differ diff --git a/bin/net/minecraft/src/EnumChatFormatting.class b/bin/net/minecraft/src/EnumChatFormatting.class new file mode 100644 index 0000000..5ef40a2 Binary files /dev/null and b/bin/net/minecraft/src/EnumChatFormatting.class differ diff --git a/bin/net/minecraft/src/EnumCreatureAttribute.class b/bin/net/minecraft/src/EnumCreatureAttribute.class new file mode 100644 index 0000000..bc1462f Binary files /dev/null and b/bin/net/minecraft/src/EnumCreatureAttribute.class differ diff --git a/bin/net/minecraft/src/EnumCreatureType.class b/bin/net/minecraft/src/EnumCreatureType.class new file mode 100644 index 0000000..72ee9dc Binary files /dev/null and b/bin/net/minecraft/src/EnumCreatureType.class differ diff --git a/bin/net/minecraft/src/EnumDoor.class b/bin/net/minecraft/src/EnumDoor.class new file mode 100644 index 0000000..e03eaa1 Binary files /dev/null and b/bin/net/minecraft/src/EnumDoor.class differ diff --git a/bin/net/minecraft/src/EnumDoorHelper.class b/bin/net/minecraft/src/EnumDoorHelper.class new file mode 100644 index 0000000..af00cae Binary files /dev/null and b/bin/net/minecraft/src/EnumDoorHelper.class differ diff --git a/bin/net/minecraft/src/EnumEnchantmentType.class b/bin/net/minecraft/src/EnumEnchantmentType.class new file mode 100644 index 0000000..40f9d04 Binary files /dev/null and b/bin/net/minecraft/src/EnumEnchantmentType.class differ diff --git a/bin/net/minecraft/src/EnumEntitySize.class b/bin/net/minecraft/src/EnumEntitySize.class new file mode 100644 index 0000000..7777779 Binary files /dev/null and b/bin/net/minecraft/src/EnumEntitySize.class differ diff --git a/bin/net/minecraft/src/EnumEntitySizeHelper.class b/bin/net/minecraft/src/EnumEntitySizeHelper.class new file mode 100644 index 0000000..d56b152 Binary files /dev/null and b/bin/net/minecraft/src/EnumEntitySizeHelper.class differ diff --git a/bin/net/minecraft/src/EnumFacing.class b/bin/net/minecraft/src/EnumFacing.class new file mode 100644 index 0000000..219e0f6 Binary files /dev/null and b/bin/net/minecraft/src/EnumFacing.class differ diff --git a/bin/net/minecraft/src/EnumGameType.class b/bin/net/minecraft/src/EnumGameType.class new file mode 100644 index 0000000..05890a1 Binary files /dev/null and b/bin/net/minecraft/src/EnumGameType.class differ diff --git a/bin/net/minecraft/src/EnumMobType.class b/bin/net/minecraft/src/EnumMobType.class new file mode 100644 index 0000000..7801edc Binary files /dev/null and b/bin/net/minecraft/src/EnumMobType.class differ diff --git a/bin/net/minecraft/src/EnumMovingObjectType.class b/bin/net/minecraft/src/EnumMovingObjectType.class new file mode 100644 index 0000000..8dd5df7 Binary files /dev/null and b/bin/net/minecraft/src/EnumMovingObjectType.class differ diff --git a/bin/net/minecraft/src/EnumOS.class b/bin/net/minecraft/src/EnumOS.class new file mode 100644 index 0000000..15facf4 Binary files /dev/null and b/bin/net/minecraft/src/EnumOS.class differ diff --git a/bin/net/minecraft/src/EnumOSHelper.class b/bin/net/minecraft/src/EnumOSHelper.class new file mode 100644 index 0000000..14503aa Binary files /dev/null and b/bin/net/minecraft/src/EnumOSHelper.class differ diff --git a/bin/net/minecraft/src/EnumOptions.class b/bin/net/minecraft/src/EnumOptions.class new file mode 100644 index 0000000..ca39272 Binary files /dev/null and b/bin/net/minecraft/src/EnumOptions.class differ diff --git a/bin/net/minecraft/src/EnumOptionsHelper.class b/bin/net/minecraft/src/EnumOptionsHelper.class new file mode 100644 index 0000000..954c380 Binary files /dev/null and b/bin/net/minecraft/src/EnumOptionsHelper.class differ diff --git a/bin/net/minecraft/src/EnumRarity.class b/bin/net/minecraft/src/EnumRarity.class new file mode 100644 index 0000000..4bbbb02 Binary files /dev/null and b/bin/net/minecraft/src/EnumRarity.class differ diff --git a/bin/net/minecraft/src/EnumSkyBlock.class b/bin/net/minecraft/src/EnumSkyBlock.class new file mode 100644 index 0000000..00840c7 Binary files /dev/null and b/bin/net/minecraft/src/EnumSkyBlock.class differ diff --git a/bin/net/minecraft/src/EnumStatus.class b/bin/net/minecraft/src/EnumStatus.class new file mode 100644 index 0000000..0ef449e Binary files /dev/null and b/bin/net/minecraft/src/EnumStatus.class differ diff --git a/bin/net/minecraft/src/EnumToolMaterial.class b/bin/net/minecraft/src/EnumToolMaterial.class new file mode 100644 index 0000000..144643f Binary files /dev/null and b/bin/net/minecraft/src/EnumToolMaterial.class differ diff --git a/bin/net/minecraft/src/ExceptionMcoHttp.class b/bin/net/minecraft/src/ExceptionMcoHttp.class new file mode 100644 index 0000000..0ad6835 Binary files /dev/null and b/bin/net/minecraft/src/ExceptionMcoHttp.class differ diff --git a/bin/net/minecraft/src/ExceptionMcoService.class b/bin/net/minecraft/src/ExceptionMcoService.class new file mode 100644 index 0000000..2820232 Binary files /dev/null and b/bin/net/minecraft/src/ExceptionMcoService.class differ diff --git a/bin/net/minecraft/src/ExceptionRetryCall.class b/bin/net/minecraft/src/ExceptionRetryCall.class new file mode 100644 index 0000000..e8b1b2c Binary files /dev/null and b/bin/net/minecraft/src/ExceptionRetryCall.class differ diff --git a/bin/net/minecraft/src/Explosion.class b/bin/net/minecraft/src/Explosion.class new file mode 100644 index 0000000..1fa62e8 Binary files /dev/null and b/bin/net/minecraft/src/Explosion.class differ diff --git a/bin/net/minecraft/src/ExtendedBlockStorage.class b/bin/net/minecraft/src/ExtendedBlockStorage.class new file mode 100644 index 0000000..df4a509 Binary files /dev/null and b/bin/net/minecraft/src/ExtendedBlockStorage.class differ diff --git a/bin/net/minecraft/src/Facing.class b/bin/net/minecraft/src/Facing.class new file mode 100644 index 0000000..769309d Binary files /dev/null and b/bin/net/minecraft/src/Facing.class differ diff --git a/bin/net/minecraft/src/FilterIMob.class b/bin/net/minecraft/src/FilterIMob.class new file mode 100644 index 0000000..3cedad6 Binary files /dev/null and b/bin/net/minecraft/src/FilterIMob.class differ diff --git a/bin/net/minecraft/src/FlatGeneratorInfo.class b/bin/net/minecraft/src/FlatGeneratorInfo.class new file mode 100644 index 0000000..9670e7b Binary files /dev/null and b/bin/net/minecraft/src/FlatGeneratorInfo.class differ diff --git a/bin/net/minecraft/src/FlatLayerInfo.class b/bin/net/minecraft/src/FlatLayerInfo.class new file mode 100644 index 0000000..58058a5 Binary files /dev/null and b/bin/net/minecraft/src/FlatLayerInfo.class differ diff --git a/bin/net/minecraft/src/FontRenderer.class b/bin/net/minecraft/src/FontRenderer.class new file mode 100644 index 0000000..8266959 Binary files /dev/null and b/bin/net/minecraft/src/FontRenderer.class differ diff --git a/bin/net/minecraft/src/FoodStats.class b/bin/net/minecraft/src/FoodStats.class new file mode 100644 index 0000000..6be7f38 Binary files /dev/null and b/bin/net/minecraft/src/FoodStats.class differ diff --git a/bin/net/minecraft/src/Frustrum.class b/bin/net/minecraft/src/Frustrum.class new file mode 100644 index 0000000..efd3729 Binary files /dev/null and b/bin/net/minecraft/src/Frustrum.class differ diff --git a/bin/net/minecraft/src/FurnaceRecipes.class b/bin/net/minecraft/src/FurnaceRecipes.class new file mode 100644 index 0000000..528d647 Binary files /dev/null and b/bin/net/minecraft/src/FurnaceRecipes.class differ diff --git a/bin/net/minecraft/src/GLAllocation.class b/bin/net/minecraft/src/GLAllocation.class new file mode 100644 index 0000000..2585ded Binary files /dev/null and b/bin/net/minecraft/src/GLAllocation.class differ diff --git a/bin/net/minecraft/src/GameRuleValue.class b/bin/net/minecraft/src/GameRuleValue.class new file mode 100644 index 0000000..46609b7 Binary files /dev/null and b/bin/net/minecraft/src/GameRuleValue.class differ diff --git a/bin/net/minecraft/src/GameRules.class b/bin/net/minecraft/src/GameRules.class new file mode 100644 index 0000000..9b78fdc Binary files /dev/null and b/bin/net/minecraft/src/GameRules.class differ diff --git a/bin/net/minecraft/src/GameSettings.class b/bin/net/minecraft/src/GameSettings.class new file mode 100644 index 0000000..dd93537 Binary files /dev/null and b/bin/net/minecraft/src/GameSettings.class differ diff --git a/bin/net/minecraft/src/GameWindowListener.class b/bin/net/minecraft/src/GameWindowListener.class new file mode 100644 index 0000000..319cc88 Binary files /dev/null and b/bin/net/minecraft/src/GameWindowListener.class differ diff --git a/bin/net/minecraft/src/GenLayer.class b/bin/net/minecraft/src/GenLayer.class new file mode 100644 index 0000000..26a740f Binary files /dev/null and b/bin/net/minecraft/src/GenLayer.class differ diff --git a/bin/net/minecraft/src/GenLayerAddIsland.class b/bin/net/minecraft/src/GenLayerAddIsland.class new file mode 100644 index 0000000..c2cde6d Binary files /dev/null and b/bin/net/minecraft/src/GenLayerAddIsland.class differ diff --git a/bin/net/minecraft/src/GenLayerAddMushroomIsland.class b/bin/net/minecraft/src/GenLayerAddMushroomIsland.class new file mode 100644 index 0000000..39e160e Binary files /dev/null and b/bin/net/minecraft/src/GenLayerAddMushroomIsland.class differ diff --git a/bin/net/minecraft/src/GenLayerAddSnow.class b/bin/net/minecraft/src/GenLayerAddSnow.class new file mode 100644 index 0000000..77ef0d2 Binary files /dev/null and b/bin/net/minecraft/src/GenLayerAddSnow.class differ diff --git a/bin/net/minecraft/src/GenLayerBiome.class b/bin/net/minecraft/src/GenLayerBiome.class new file mode 100644 index 0000000..7ea1e9f Binary files /dev/null and b/bin/net/minecraft/src/GenLayerBiome.class differ diff --git a/bin/net/minecraft/src/GenLayerFuzzyZoom.class b/bin/net/minecraft/src/GenLayerFuzzyZoom.class new file mode 100644 index 0000000..c88b7fe Binary files /dev/null and b/bin/net/minecraft/src/GenLayerFuzzyZoom.class differ diff --git a/bin/net/minecraft/src/GenLayerHills.class b/bin/net/minecraft/src/GenLayerHills.class new file mode 100644 index 0000000..678b84c Binary files /dev/null and b/bin/net/minecraft/src/GenLayerHills.class differ diff --git a/bin/net/minecraft/src/GenLayerIsland.class b/bin/net/minecraft/src/GenLayerIsland.class new file mode 100644 index 0000000..6ef2475 Binary files /dev/null and b/bin/net/minecraft/src/GenLayerIsland.class differ diff --git a/bin/net/minecraft/src/GenLayerRiver.class b/bin/net/minecraft/src/GenLayerRiver.class new file mode 100644 index 0000000..ada085c Binary files /dev/null and b/bin/net/minecraft/src/GenLayerRiver.class differ diff --git a/bin/net/minecraft/src/GenLayerRiverInit.class b/bin/net/minecraft/src/GenLayerRiverInit.class new file mode 100644 index 0000000..a81634d Binary files /dev/null and b/bin/net/minecraft/src/GenLayerRiverInit.class differ diff --git a/bin/net/minecraft/src/GenLayerRiverMix.class b/bin/net/minecraft/src/GenLayerRiverMix.class new file mode 100644 index 0000000..a15c89c Binary files /dev/null and b/bin/net/minecraft/src/GenLayerRiverMix.class differ diff --git a/bin/net/minecraft/src/GenLayerShore.class b/bin/net/minecraft/src/GenLayerShore.class new file mode 100644 index 0000000..74f2422 Binary files /dev/null and b/bin/net/minecraft/src/GenLayerShore.class differ diff --git a/bin/net/minecraft/src/GenLayerSmooth.class b/bin/net/minecraft/src/GenLayerSmooth.class new file mode 100644 index 0000000..c034fa7 Binary files /dev/null and b/bin/net/minecraft/src/GenLayerSmooth.class differ diff --git a/bin/net/minecraft/src/GenLayerSwampRivers.class b/bin/net/minecraft/src/GenLayerSwampRivers.class new file mode 100644 index 0000000..8e8dc8c Binary files /dev/null and b/bin/net/minecraft/src/GenLayerSwampRivers.class differ diff --git a/bin/net/minecraft/src/GenLayerVoronoiZoom.class b/bin/net/minecraft/src/GenLayerVoronoiZoom.class new file mode 100644 index 0000000..f1c95f5 Binary files /dev/null and b/bin/net/minecraft/src/GenLayerVoronoiZoom.class differ diff --git a/bin/net/minecraft/src/GenLayerZoom.class b/bin/net/minecraft/src/GenLayerZoom.class new file mode 100644 index 0000000..48bd293 Binary files /dev/null and b/bin/net/minecraft/src/GenLayerZoom.class differ diff --git a/bin/net/minecraft/src/Gui.class b/bin/net/minecraft/src/Gui.class new file mode 100644 index 0000000..8e5efa9 Binary files /dev/null and b/bin/net/minecraft/src/Gui.class differ diff --git a/bin/net/minecraft/src/GuiAchievement.class b/bin/net/minecraft/src/GuiAchievement.class new file mode 100644 index 0000000..219ad67 Binary files /dev/null and b/bin/net/minecraft/src/GuiAchievement.class differ diff --git a/bin/net/minecraft/src/GuiAchievements.class b/bin/net/minecraft/src/GuiAchievements.class new file mode 100644 index 0000000..c3d48c2 Binary files /dev/null and b/bin/net/minecraft/src/GuiAchievements.class differ diff --git a/bin/net/minecraft/src/GuiBeacon.class b/bin/net/minecraft/src/GuiBeacon.class new file mode 100644 index 0000000..dbb2102 Binary files /dev/null and b/bin/net/minecraft/src/GuiBeacon.class differ diff --git a/bin/net/minecraft/src/GuiBeaconButton.class b/bin/net/minecraft/src/GuiBeaconButton.class new file mode 100644 index 0000000..28ecd0e Binary files /dev/null and b/bin/net/minecraft/src/GuiBeaconButton.class differ diff --git a/bin/net/minecraft/src/GuiBeaconButtonCancel.class b/bin/net/minecraft/src/GuiBeaconButtonCancel.class new file mode 100644 index 0000000..9164104 Binary files /dev/null and b/bin/net/minecraft/src/GuiBeaconButtonCancel.class differ diff --git a/bin/net/minecraft/src/GuiBeaconButtonConfirm.class b/bin/net/minecraft/src/GuiBeaconButtonConfirm.class new file mode 100644 index 0000000..d6c581a Binary files /dev/null and b/bin/net/minecraft/src/GuiBeaconButtonConfirm.class differ diff --git a/bin/net/minecraft/src/GuiBeaconButtonPower.class b/bin/net/minecraft/src/GuiBeaconButtonPower.class new file mode 100644 index 0000000..10b4e91 Binary files /dev/null and b/bin/net/minecraft/src/GuiBeaconButtonPower.class differ diff --git a/bin/net/minecraft/src/GuiBrewingStand.class b/bin/net/minecraft/src/GuiBrewingStand.class new file mode 100644 index 0000000..02247e4 Binary files /dev/null and b/bin/net/minecraft/src/GuiBrewingStand.class differ diff --git a/bin/net/minecraft/src/GuiButton.class b/bin/net/minecraft/src/GuiButton.class new file mode 100644 index 0000000..d2222ec Binary files /dev/null and b/bin/net/minecraft/src/GuiButton.class differ diff --git a/bin/net/minecraft/src/GuiButtonLanguage.class b/bin/net/minecraft/src/GuiButtonLanguage.class new file mode 100644 index 0000000..71b229d Binary files /dev/null and b/bin/net/minecraft/src/GuiButtonLanguage.class differ diff --git a/bin/net/minecraft/src/GuiButtonLink.class b/bin/net/minecraft/src/GuiButtonLink.class new file mode 100644 index 0000000..5d63b56 Binary files /dev/null and b/bin/net/minecraft/src/GuiButtonLink.class differ diff --git a/bin/net/minecraft/src/GuiButtonMerchant.class b/bin/net/minecraft/src/GuiButtonMerchant.class new file mode 100644 index 0000000..7a9bc54 Binary files /dev/null and b/bin/net/minecraft/src/GuiButtonMerchant.class differ diff --git a/bin/net/minecraft/src/GuiButtonNextPage.class b/bin/net/minecraft/src/GuiButtonNextPage.class new file mode 100644 index 0000000..e0da1e5 Binary files /dev/null and b/bin/net/minecraft/src/GuiButtonNextPage.class differ diff --git a/bin/net/minecraft/src/GuiChat.class b/bin/net/minecraft/src/GuiChat.class new file mode 100644 index 0000000..820b0e6 Binary files /dev/null and b/bin/net/minecraft/src/GuiChat.class differ diff --git a/bin/net/minecraft/src/GuiChest.class b/bin/net/minecraft/src/GuiChest.class new file mode 100644 index 0000000..d02c5e6 Binary files /dev/null and b/bin/net/minecraft/src/GuiChest.class differ diff --git a/bin/net/minecraft/src/GuiCommandBlock.class b/bin/net/minecraft/src/GuiCommandBlock.class new file mode 100644 index 0000000..2988a9b Binary files /dev/null and b/bin/net/minecraft/src/GuiCommandBlock.class differ diff --git a/bin/net/minecraft/src/GuiConfirmOpenLink.class b/bin/net/minecraft/src/GuiConfirmOpenLink.class new file mode 100644 index 0000000..31c64c6 Binary files /dev/null and b/bin/net/minecraft/src/GuiConfirmOpenLink.class differ diff --git a/bin/net/minecraft/src/GuiConnecting.class b/bin/net/minecraft/src/GuiConnecting.class new file mode 100644 index 0000000..aa3d7b4 Binary files /dev/null and b/bin/net/minecraft/src/GuiConnecting.class differ diff --git a/bin/net/minecraft/src/GuiContainer.class b/bin/net/minecraft/src/GuiContainer.class new file mode 100644 index 0000000..6726b60 Binary files /dev/null and b/bin/net/minecraft/src/GuiContainer.class differ diff --git a/bin/net/minecraft/src/GuiContainerCreative.class b/bin/net/minecraft/src/GuiContainerCreative.class new file mode 100644 index 0000000..04eae5f Binary files /dev/null and b/bin/net/minecraft/src/GuiContainerCreative.class differ diff --git a/bin/net/minecraft/src/GuiControls.class b/bin/net/minecraft/src/GuiControls.class new file mode 100644 index 0000000..e8cfc56 Binary files /dev/null and b/bin/net/minecraft/src/GuiControls.class differ diff --git a/bin/net/minecraft/src/GuiCrafting.class b/bin/net/minecraft/src/GuiCrafting.class new file mode 100644 index 0000000..0ff2e45 Binary files /dev/null and b/bin/net/minecraft/src/GuiCrafting.class differ diff --git a/bin/net/minecraft/src/GuiCreateFlatWorld.class b/bin/net/minecraft/src/GuiCreateFlatWorld.class new file mode 100644 index 0000000..257169d Binary files /dev/null and b/bin/net/minecraft/src/GuiCreateFlatWorld.class differ diff --git a/bin/net/minecraft/src/GuiCreateFlatWorldListSlot.class b/bin/net/minecraft/src/GuiCreateFlatWorldListSlot.class new file mode 100644 index 0000000..34ba0ae Binary files /dev/null and b/bin/net/minecraft/src/GuiCreateFlatWorldListSlot.class differ diff --git a/bin/net/minecraft/src/GuiCreateWorld.class b/bin/net/minecraft/src/GuiCreateWorld.class new file mode 100644 index 0000000..80a352d Binary files /dev/null and b/bin/net/minecraft/src/GuiCreateWorld.class differ diff --git a/bin/net/minecraft/src/GuiDisconnected.class b/bin/net/minecraft/src/GuiDisconnected.class new file mode 100644 index 0000000..e1286e4 Binary files /dev/null and b/bin/net/minecraft/src/GuiDisconnected.class differ diff --git a/bin/net/minecraft/src/GuiDispenser.class b/bin/net/minecraft/src/GuiDispenser.class new file mode 100644 index 0000000..00339f1 Binary files /dev/null and b/bin/net/minecraft/src/GuiDispenser.class differ diff --git a/bin/net/minecraft/src/GuiDownloadTerrain.class b/bin/net/minecraft/src/GuiDownloadTerrain.class new file mode 100644 index 0000000..777fa40 Binary files /dev/null and b/bin/net/minecraft/src/GuiDownloadTerrain.class differ diff --git a/bin/net/minecraft/src/GuiEditSign.class b/bin/net/minecraft/src/GuiEditSign.class new file mode 100644 index 0000000..99e74de Binary files /dev/null and b/bin/net/minecraft/src/GuiEditSign.class differ diff --git a/bin/net/minecraft/src/GuiEnchantment.class b/bin/net/minecraft/src/GuiEnchantment.class new file mode 100644 index 0000000..e35ff49 Binary files /dev/null and b/bin/net/minecraft/src/GuiEnchantment.class differ diff --git a/bin/net/minecraft/src/GuiErrorScreen.class b/bin/net/minecraft/src/GuiErrorScreen.class new file mode 100644 index 0000000..752658b Binary files /dev/null and b/bin/net/minecraft/src/GuiErrorScreen.class differ diff --git a/bin/net/minecraft/src/GuiFlatPresets.class b/bin/net/minecraft/src/GuiFlatPresets.class new file mode 100644 index 0000000..8e62389 Binary files /dev/null and b/bin/net/minecraft/src/GuiFlatPresets.class differ diff --git a/bin/net/minecraft/src/GuiFlatPresetsItem.class b/bin/net/minecraft/src/GuiFlatPresetsItem.class new file mode 100644 index 0000000..f937598 Binary files /dev/null and b/bin/net/minecraft/src/GuiFlatPresetsItem.class differ diff --git a/bin/net/minecraft/src/GuiFlatPresetsListSlot.class b/bin/net/minecraft/src/GuiFlatPresetsListSlot.class new file mode 100644 index 0000000..874dab3 Binary files /dev/null and b/bin/net/minecraft/src/GuiFlatPresetsListSlot.class differ diff --git a/bin/net/minecraft/src/GuiFurnace.class b/bin/net/minecraft/src/GuiFurnace.class new file mode 100644 index 0000000..3f09ad6 Binary files /dev/null and b/bin/net/minecraft/src/GuiFurnace.class differ diff --git a/bin/net/minecraft/src/GuiGameOver.class b/bin/net/minecraft/src/GuiGameOver.class new file mode 100644 index 0000000..fa06c37 Binary files /dev/null and b/bin/net/minecraft/src/GuiGameOver.class differ diff --git a/bin/net/minecraft/src/GuiHopper.class b/bin/net/minecraft/src/GuiHopper.class new file mode 100644 index 0000000..f8dd3c4 Binary files /dev/null and b/bin/net/minecraft/src/GuiHopper.class differ diff --git a/bin/net/minecraft/src/GuiIngame.class b/bin/net/minecraft/src/GuiIngame.class new file mode 100644 index 0000000..7e4d16d Binary files /dev/null and b/bin/net/minecraft/src/GuiIngame.class differ diff --git a/bin/net/minecraft/src/GuiIngameMenu.class b/bin/net/minecraft/src/GuiIngameMenu.class new file mode 100644 index 0000000..b100475 Binary files /dev/null and b/bin/net/minecraft/src/GuiIngameMenu.class differ diff --git a/bin/net/minecraft/src/GuiInventory.class b/bin/net/minecraft/src/GuiInventory.class new file mode 100644 index 0000000..846461d Binary files /dev/null and b/bin/net/minecraft/src/GuiInventory.class differ diff --git a/bin/net/minecraft/src/GuiLanguage.class b/bin/net/minecraft/src/GuiLanguage.class new file mode 100644 index 0000000..f5c3a1a Binary files /dev/null and b/bin/net/minecraft/src/GuiLanguage.class differ diff --git a/bin/net/minecraft/src/GuiMainMenu.class b/bin/net/minecraft/src/GuiMainMenu.class new file mode 100644 index 0000000..2106578 Binary files /dev/null and b/bin/net/minecraft/src/GuiMainMenu.class differ diff --git a/bin/net/minecraft/src/GuiMemoryErrorScreen.class b/bin/net/minecraft/src/GuiMemoryErrorScreen.class new file mode 100644 index 0000000..56d2be7 Binary files /dev/null and b/bin/net/minecraft/src/GuiMemoryErrorScreen.class differ diff --git a/bin/net/minecraft/src/GuiMerchant.class b/bin/net/minecraft/src/GuiMerchant.class new file mode 100644 index 0000000..095b13a Binary files /dev/null and b/bin/net/minecraft/src/GuiMerchant.class differ diff --git a/bin/net/minecraft/src/GuiMultiplayer.class b/bin/net/minecraft/src/GuiMultiplayer.class new file mode 100644 index 0000000..a2c7199 Binary files /dev/null and b/bin/net/minecraft/src/GuiMultiplayer.class differ diff --git a/bin/net/minecraft/src/GuiNewChat.class b/bin/net/minecraft/src/GuiNewChat.class new file mode 100644 index 0000000..fad094a Binary files /dev/null and b/bin/net/minecraft/src/GuiNewChat.class differ diff --git a/bin/net/minecraft/src/GuiOptions.class b/bin/net/minecraft/src/GuiOptions.class new file mode 100644 index 0000000..3ccfb20 Binary files /dev/null and b/bin/net/minecraft/src/GuiOptions.class differ diff --git a/bin/net/minecraft/src/GuiParticle.class b/bin/net/minecraft/src/GuiParticle.class new file mode 100644 index 0000000..b39089b Binary files /dev/null and b/bin/net/minecraft/src/GuiParticle.class differ diff --git a/bin/net/minecraft/src/GuiPlayerInfo.class b/bin/net/minecraft/src/GuiPlayerInfo.class new file mode 100644 index 0000000..4853de4 Binary files /dev/null and b/bin/net/minecraft/src/GuiPlayerInfo.class differ diff --git a/bin/net/minecraft/src/GuiProgress.class b/bin/net/minecraft/src/GuiProgress.class new file mode 100644 index 0000000..52e5e1a Binary files /dev/null and b/bin/net/minecraft/src/GuiProgress.class differ diff --git a/bin/net/minecraft/src/GuiRenameWorld.class b/bin/net/minecraft/src/GuiRenameWorld.class new file mode 100644 index 0000000..6a9d44e Binary files /dev/null and b/bin/net/minecraft/src/GuiRenameWorld.class differ diff --git a/bin/net/minecraft/src/GuiRepair.class b/bin/net/minecraft/src/GuiRepair.class new file mode 100644 index 0000000..bd9cb4f Binary files /dev/null and b/bin/net/minecraft/src/GuiRepair.class differ diff --git a/bin/net/minecraft/src/GuiScreen.class b/bin/net/minecraft/src/GuiScreen.class new file mode 100644 index 0000000..c4e12f0 Binary files /dev/null and b/bin/net/minecraft/src/GuiScreen.class differ diff --git a/bin/net/minecraft/src/GuiScreenAddServer.class b/bin/net/minecraft/src/GuiScreenAddServer.class new file mode 100644 index 0000000..ee072c9 Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenAddServer.class differ diff --git a/bin/net/minecraft/src/GuiScreenBook.class b/bin/net/minecraft/src/GuiScreenBook.class new file mode 100644 index 0000000..2f8d4ca Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenBook.class differ diff --git a/bin/net/minecraft/src/GuiScreenConfigureWorld.class b/bin/net/minecraft/src/GuiScreenConfigureWorld.class new file mode 100644 index 0000000..ae510bc Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenConfigureWorld.class differ diff --git a/bin/net/minecraft/src/GuiScreenConfirmation.class b/bin/net/minecraft/src/GuiScreenConfirmation.class new file mode 100644 index 0000000..eca038f Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenConfirmation.class differ diff --git a/bin/net/minecraft/src/GuiScreenCreateOnlineWorld.class b/bin/net/minecraft/src/GuiScreenCreateOnlineWorld.class new file mode 100644 index 0000000..0ac6b75 Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenCreateOnlineWorld.class differ diff --git a/bin/net/minecraft/src/GuiScreenDemo.class b/bin/net/minecraft/src/GuiScreenDemo.class new file mode 100644 index 0000000..8539f25 Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenDemo.class differ diff --git a/bin/net/minecraft/src/GuiScreenDisconnectedOnline.class b/bin/net/minecraft/src/GuiScreenDisconnectedOnline.class new file mode 100644 index 0000000..2e51d89 Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenDisconnectedOnline.class differ diff --git a/bin/net/minecraft/src/GuiScreenEditOnlineWorld.class b/bin/net/minecraft/src/GuiScreenEditOnlineWorld.class new file mode 100644 index 0000000..67d41a6 Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenEditOnlineWorld.class differ diff --git a/bin/net/minecraft/src/GuiScreenInvite.class b/bin/net/minecraft/src/GuiScreenInvite.class new file mode 100644 index 0000000..ee26ea2 Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenInvite.class differ diff --git a/bin/net/minecraft/src/GuiScreenLongRunningTask.class b/bin/net/minecraft/src/GuiScreenLongRunningTask.class new file mode 100644 index 0000000..99026a8 Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenLongRunningTask.class differ diff --git a/bin/net/minecraft/src/GuiScreenOnlineServers.class b/bin/net/minecraft/src/GuiScreenOnlineServers.class new file mode 100644 index 0000000..6f4244f Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenOnlineServers.class differ diff --git a/bin/net/minecraft/src/GuiScreenOnlineServersSubscreen.class b/bin/net/minecraft/src/GuiScreenOnlineServersSubscreen.class new file mode 100644 index 0000000..bbd8054 Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenOnlineServersSubscreen.class differ diff --git a/bin/net/minecraft/src/GuiScreenResetWorld.class b/bin/net/minecraft/src/GuiScreenResetWorld.class new file mode 100644 index 0000000..84e1129 Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenResetWorld.class differ diff --git a/bin/net/minecraft/src/GuiScreenSelectLocation.class b/bin/net/minecraft/src/GuiScreenSelectLocation.class new file mode 100644 index 0000000..ea1be3b Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenSelectLocation.class differ diff --git a/bin/net/minecraft/src/GuiScreenServerList.class b/bin/net/minecraft/src/GuiScreenServerList.class new file mode 100644 index 0000000..e00cfae Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenServerList.class differ diff --git a/bin/net/minecraft/src/GuiScreenSubscription.class b/bin/net/minecraft/src/GuiScreenSubscription.class new file mode 100644 index 0000000..72245d1 Binary files /dev/null and b/bin/net/minecraft/src/GuiScreenSubscription.class differ diff --git a/bin/net/minecraft/src/GuiSelectWorld.class b/bin/net/minecraft/src/GuiSelectWorld.class new file mode 100644 index 0000000..d41e150 Binary files /dev/null and b/bin/net/minecraft/src/GuiSelectWorld.class differ diff --git a/bin/net/minecraft/src/GuiShareToLan.class b/bin/net/minecraft/src/GuiShareToLan.class new file mode 100644 index 0000000..d0e0e6e Binary files /dev/null and b/bin/net/minecraft/src/GuiShareToLan.class differ diff --git a/bin/net/minecraft/src/GuiSleepMP.class b/bin/net/minecraft/src/GuiSleepMP.class new file mode 100644 index 0000000..8b05235 Binary files /dev/null and b/bin/net/minecraft/src/GuiSleepMP.class differ diff --git a/bin/net/minecraft/src/GuiSlider.class b/bin/net/minecraft/src/GuiSlider.class new file mode 100644 index 0000000..803a8ee Binary files /dev/null and b/bin/net/minecraft/src/GuiSlider.class differ diff --git a/bin/net/minecraft/src/GuiSlot.class b/bin/net/minecraft/src/GuiSlot.class new file mode 100644 index 0000000..d7a1a0f Binary files /dev/null and b/bin/net/minecraft/src/GuiSlot.class differ diff --git a/bin/net/minecraft/src/GuiSlotLanguage.class b/bin/net/minecraft/src/GuiSlotLanguage.class new file mode 100644 index 0000000..b48e8bf Binary files /dev/null and b/bin/net/minecraft/src/GuiSlotLanguage.class differ diff --git a/bin/net/minecraft/src/GuiSlotOnlineServerList.class b/bin/net/minecraft/src/GuiSlotOnlineServerList.class new file mode 100644 index 0000000..d5182ff Binary files /dev/null and b/bin/net/minecraft/src/GuiSlotOnlineServerList.class differ diff --git a/bin/net/minecraft/src/GuiSlotServer.class b/bin/net/minecraft/src/GuiSlotServer.class new file mode 100644 index 0000000..7addaff Binary files /dev/null and b/bin/net/minecraft/src/GuiSlotServer.class differ diff --git a/bin/net/minecraft/src/GuiSlotStats.class b/bin/net/minecraft/src/GuiSlotStats.class new file mode 100644 index 0000000..7d6c9e1 Binary files /dev/null and b/bin/net/minecraft/src/GuiSlotStats.class differ diff --git a/bin/net/minecraft/src/GuiSlotStatsBlock.class b/bin/net/minecraft/src/GuiSlotStatsBlock.class new file mode 100644 index 0000000..019b381 Binary files /dev/null and b/bin/net/minecraft/src/GuiSlotStatsBlock.class differ diff --git a/bin/net/minecraft/src/GuiSlotStatsGeneral.class b/bin/net/minecraft/src/GuiSlotStatsGeneral.class new file mode 100644 index 0000000..bcaaa76 Binary files /dev/null and b/bin/net/minecraft/src/GuiSlotStatsGeneral.class differ diff --git a/bin/net/minecraft/src/GuiSlotStatsItem.class b/bin/net/minecraft/src/GuiSlotStatsItem.class new file mode 100644 index 0000000..6d9a776 Binary files /dev/null and b/bin/net/minecraft/src/GuiSlotStatsItem.class differ diff --git a/bin/net/minecraft/src/GuiSmallButton.class b/bin/net/minecraft/src/GuiSmallButton.class new file mode 100644 index 0000000..e6617de Binary files /dev/null and b/bin/net/minecraft/src/GuiSmallButton.class differ diff --git a/bin/net/minecraft/src/GuiSnooper.class b/bin/net/minecraft/src/GuiSnooper.class new file mode 100644 index 0000000..debcc0c Binary files /dev/null and b/bin/net/minecraft/src/GuiSnooper.class differ diff --git a/bin/net/minecraft/src/GuiSnooperList.class b/bin/net/minecraft/src/GuiSnooperList.class new file mode 100644 index 0000000..9436a92 Binary files /dev/null and b/bin/net/minecraft/src/GuiSnooperList.class differ diff --git a/bin/net/minecraft/src/GuiStats.class b/bin/net/minecraft/src/GuiStats.class new file mode 100644 index 0000000..5420f77 Binary files /dev/null and b/bin/net/minecraft/src/GuiStats.class differ diff --git a/bin/net/minecraft/src/GuiTextField.class b/bin/net/minecraft/src/GuiTextField.class new file mode 100644 index 0000000..b4b6eca Binary files /dev/null and b/bin/net/minecraft/src/GuiTextField.class differ diff --git a/bin/net/minecraft/src/GuiTexturePackSlot.class b/bin/net/minecraft/src/GuiTexturePackSlot.class new file mode 100644 index 0000000..d7407b7 Binary files /dev/null and b/bin/net/minecraft/src/GuiTexturePackSlot.class differ diff --git a/bin/net/minecraft/src/GuiTexturePacks.class b/bin/net/minecraft/src/GuiTexturePacks.class new file mode 100644 index 0000000..b721ca8 Binary files /dev/null and b/bin/net/minecraft/src/GuiTexturePacks.class differ diff --git a/bin/net/minecraft/src/GuiVideoSettings.class b/bin/net/minecraft/src/GuiVideoSettings.class new file mode 100644 index 0000000..a0d0585 Binary files /dev/null and b/bin/net/minecraft/src/GuiVideoSettings.class differ diff --git a/bin/net/minecraft/src/GuiWinGame.class b/bin/net/minecraft/src/GuiWinGame.class new file mode 100644 index 0000000..5b1026d Binary files /dev/null and b/bin/net/minecraft/src/GuiWinGame.class differ diff --git a/bin/net/minecraft/src/GuiWorldSlot.class b/bin/net/minecraft/src/GuiWorldSlot.class new file mode 100644 index 0000000..25b7f6f Binary files /dev/null and b/bin/net/minecraft/src/GuiWorldSlot.class differ diff --git a/bin/net/minecraft/src/GuiYesNo.class b/bin/net/minecraft/src/GuiYesNo.class new file mode 100644 index 0000000..9986449 Binary files /dev/null and b/bin/net/minecraft/src/GuiYesNo.class differ diff --git a/bin/net/minecraft/src/Hopper.class b/bin/net/minecraft/src/Hopper.class new file mode 100644 index 0000000..3a50d25 Binary files /dev/null and b/bin/net/minecraft/src/Hopper.class differ diff --git a/bin/net/minecraft/src/HttpUtil.class b/bin/net/minecraft/src/HttpUtil.class new file mode 100644 index 0000000..f0f8c55 Binary files /dev/null and b/bin/net/minecraft/src/HttpUtil.class differ diff --git a/bin/net/minecraft/src/HttpUtilRunnable.class b/bin/net/minecraft/src/HttpUtilRunnable.class new file mode 100644 index 0000000..9a128ca Binary files /dev/null and b/bin/net/minecraft/src/HttpUtilRunnable.class differ diff --git a/bin/net/minecraft/src/IAdminCommand.class b/bin/net/minecraft/src/IAdminCommand.class new file mode 100644 index 0000000..6f27833 Binary files /dev/null and b/bin/net/minecraft/src/IAdminCommand.class differ diff --git a/bin/net/minecraft/src/IAnimals.class b/bin/net/minecraft/src/IAnimals.class new file mode 100644 index 0000000..a9009b9 Binary files /dev/null and b/bin/net/minecraft/src/IAnimals.class differ diff --git a/bin/net/minecraft/src/IBehaviorDispenseItem.class b/bin/net/minecraft/src/IBehaviorDispenseItem.class new file mode 100644 index 0000000..d1dd17e Binary files /dev/null and b/bin/net/minecraft/src/IBehaviorDispenseItem.class differ diff --git a/bin/net/minecraft/src/IBlockAccess.class b/bin/net/minecraft/src/IBlockAccess.class new file mode 100644 index 0000000..be329b3 Binary files /dev/null and b/bin/net/minecraft/src/IBlockAccess.class differ diff --git a/bin/net/minecraft/src/IBlockSource.class b/bin/net/minecraft/src/IBlockSource.class new file mode 100644 index 0000000..b16f33f Binary files /dev/null and b/bin/net/minecraft/src/IBlockSource.class differ diff --git a/bin/net/minecraft/src/IBossDisplayData.class b/bin/net/minecraft/src/IBossDisplayData.class new file mode 100644 index 0000000..a4f2def Binary files /dev/null and b/bin/net/minecraft/src/IBossDisplayData.class differ diff --git a/bin/net/minecraft/src/ICamera.class b/bin/net/minecraft/src/ICamera.class new file mode 100644 index 0000000..8c4139d Binary files /dev/null and b/bin/net/minecraft/src/ICamera.class differ diff --git a/bin/net/minecraft/src/IChunkLoader.class b/bin/net/minecraft/src/IChunkLoader.class new file mode 100644 index 0000000..d2a78aa Binary files /dev/null and b/bin/net/minecraft/src/IChunkLoader.class differ diff --git a/bin/net/minecraft/src/IChunkProvider.class b/bin/net/minecraft/src/IChunkProvider.class new file mode 100644 index 0000000..e362b15 Binary files /dev/null and b/bin/net/minecraft/src/IChunkProvider.class differ diff --git a/bin/net/minecraft/src/ICommand.class b/bin/net/minecraft/src/ICommand.class new file mode 100644 index 0000000..0118199 Binary files /dev/null and b/bin/net/minecraft/src/ICommand.class differ diff --git a/bin/net/minecraft/src/ICommandManager.class b/bin/net/minecraft/src/ICommandManager.class new file mode 100644 index 0000000..e57ddb2 Binary files /dev/null and b/bin/net/minecraft/src/ICommandManager.class differ diff --git a/bin/net/minecraft/src/ICommandSender.class b/bin/net/minecraft/src/ICommandSender.class new file mode 100644 index 0000000..e002be1 Binary files /dev/null and b/bin/net/minecraft/src/ICommandSender.class differ diff --git a/bin/net/minecraft/src/ICrafting.class b/bin/net/minecraft/src/ICrafting.class new file mode 100644 index 0000000..d5b387b Binary files /dev/null and b/bin/net/minecraft/src/ICrafting.class differ diff --git a/bin/net/minecraft/src/IDownloadSuccess.class b/bin/net/minecraft/src/IDownloadSuccess.class new file mode 100644 index 0000000..f8bb7ed Binary files /dev/null and b/bin/net/minecraft/src/IDownloadSuccess.class differ diff --git a/bin/net/minecraft/src/IEnchantmentModifier.class b/bin/net/minecraft/src/IEnchantmentModifier.class new file mode 100644 index 0000000..c74c4a1 Binary files /dev/null and b/bin/net/minecraft/src/IEnchantmentModifier.class differ diff --git a/bin/net/minecraft/src/IEntityMultiPart.class b/bin/net/minecraft/src/IEntityMultiPart.class new file mode 100644 index 0000000..c3a6643 Binary files /dev/null and b/bin/net/minecraft/src/IEntityMultiPart.class differ diff --git a/bin/net/minecraft/src/IEntitySelector.class b/bin/net/minecraft/src/IEntitySelector.class new file mode 100644 index 0000000..47ca652 Binary files /dev/null and b/bin/net/minecraft/src/IEntitySelector.class differ diff --git a/bin/net/minecraft/src/IImageBuffer.class b/bin/net/minecraft/src/IImageBuffer.class new file mode 100644 index 0000000..daff74d Binary files /dev/null and b/bin/net/minecraft/src/IImageBuffer.class differ diff --git a/bin/net/minecraft/src/IInvBasic.class b/bin/net/minecraft/src/IInvBasic.class new file mode 100644 index 0000000..b8253fe Binary files /dev/null and b/bin/net/minecraft/src/IInvBasic.class differ diff --git a/bin/net/minecraft/src/IInventory.class b/bin/net/minecraft/src/IInventory.class new file mode 100644 index 0000000..1c1a697 Binary files /dev/null and b/bin/net/minecraft/src/IInventory.class differ diff --git a/bin/net/minecraft/src/ILocatableSource.class b/bin/net/minecraft/src/ILocatableSource.class new file mode 100644 index 0000000..05a9123 Binary files /dev/null and b/bin/net/minecraft/src/ILocatableSource.class differ diff --git a/bin/net/minecraft/src/ILocation.class b/bin/net/minecraft/src/ILocation.class new file mode 100644 index 0000000..11db868 Binary files /dev/null and b/bin/net/minecraft/src/ILocation.class differ diff --git a/bin/net/minecraft/src/ILogAgent.class b/bin/net/minecraft/src/ILogAgent.class new file mode 100644 index 0000000..0cf3c69 Binary files /dev/null and b/bin/net/minecraft/src/ILogAgent.class differ diff --git a/bin/net/minecraft/src/IMerchant.class b/bin/net/minecraft/src/IMerchant.class new file mode 100644 index 0000000..b31b7ef Binary files /dev/null and b/bin/net/minecraft/src/IMerchant.class differ diff --git a/bin/net/minecraft/src/IMob.class b/bin/net/minecraft/src/IMob.class new file mode 100644 index 0000000..71ee455 Binary files /dev/null and b/bin/net/minecraft/src/IMob.class differ diff --git a/bin/net/minecraft/src/INetworkManager.class b/bin/net/minecraft/src/INetworkManager.class new file mode 100644 index 0000000..7f7353e Binary files /dev/null and b/bin/net/minecraft/src/INetworkManager.class differ diff --git a/bin/net/minecraft/src/INpc.class b/bin/net/minecraft/src/INpc.class new file mode 100644 index 0000000..91b9e31 Binary files /dev/null and b/bin/net/minecraft/src/INpc.class differ diff --git a/bin/net/minecraft/src/IPlayerFileData.class b/bin/net/minecraft/src/IPlayerFileData.class new file mode 100644 index 0000000..19abf29 Binary files /dev/null and b/bin/net/minecraft/src/IPlayerFileData.class differ diff --git a/bin/net/minecraft/src/IPlayerUsage.class b/bin/net/minecraft/src/IPlayerUsage.class new file mode 100644 index 0000000..88975aa Binary files /dev/null and b/bin/net/minecraft/src/IPlayerUsage.class differ diff --git a/bin/net/minecraft/src/IPosition.class b/bin/net/minecraft/src/IPosition.class new file mode 100644 index 0000000..73ee15c Binary files /dev/null and b/bin/net/minecraft/src/IPosition.class differ diff --git a/bin/net/minecraft/src/IProgressUpdate.class b/bin/net/minecraft/src/IProgressUpdate.class new file mode 100644 index 0000000..1ac6a3c Binary files /dev/null and b/bin/net/minecraft/src/IProgressUpdate.class differ diff --git a/bin/net/minecraft/src/IProjectile.class b/bin/net/minecraft/src/IProjectile.class new file mode 100644 index 0000000..efa9701 Binary files /dev/null and b/bin/net/minecraft/src/IProjectile.class differ diff --git a/bin/net/minecraft/src/IRangedAttackMob.class b/bin/net/minecraft/src/IRangedAttackMob.class new file mode 100644 index 0000000..c8d213d Binary files /dev/null and b/bin/net/minecraft/src/IRangedAttackMob.class differ diff --git a/bin/net/minecraft/src/IRecipe.class b/bin/net/minecraft/src/IRecipe.class new file mode 100644 index 0000000..c15d520 Binary files /dev/null and b/bin/net/minecraft/src/IRecipe.class differ diff --git a/bin/net/minecraft/src/IRegistry.class b/bin/net/minecraft/src/IRegistry.class new file mode 100644 index 0000000..f5c9acc Binary files /dev/null and b/bin/net/minecraft/src/IRegistry.class differ diff --git a/bin/net/minecraft/src/ISaveFormat.class b/bin/net/minecraft/src/ISaveFormat.class new file mode 100644 index 0000000..40e39b5 Binary files /dev/null and b/bin/net/minecraft/src/ISaveFormat.class differ diff --git a/bin/net/minecraft/src/ISaveHandler.class b/bin/net/minecraft/src/ISaveHandler.class new file mode 100644 index 0000000..7bb5c8c Binary files /dev/null and b/bin/net/minecraft/src/ISaveHandler.class differ diff --git a/bin/net/minecraft/src/IServer.class b/bin/net/minecraft/src/IServer.class new file mode 100644 index 0000000..efa7663 Binary files /dev/null and b/bin/net/minecraft/src/IServer.class differ diff --git a/bin/net/minecraft/src/ISidedInventory.class b/bin/net/minecraft/src/ISidedInventory.class new file mode 100644 index 0000000..66936c8 Binary files /dev/null and b/bin/net/minecraft/src/ISidedInventory.class differ diff --git a/bin/net/minecraft/src/IStatStringFormat.class b/bin/net/minecraft/src/IStatStringFormat.class new file mode 100644 index 0000000..3a28d6f Binary files /dev/null and b/bin/net/minecraft/src/IStatStringFormat.class differ diff --git a/bin/net/minecraft/src/IStatType.class b/bin/net/minecraft/src/IStatType.class new file mode 100644 index 0000000..3ffd167 Binary files /dev/null and b/bin/net/minecraft/src/IStatType.class differ diff --git a/bin/net/minecraft/src/ITexturePack.class b/bin/net/minecraft/src/ITexturePack.class new file mode 100644 index 0000000..f4d3051 Binary files /dev/null and b/bin/net/minecraft/src/ITexturePack.class differ diff --git a/bin/net/minecraft/src/IThreadedFileIO.class b/bin/net/minecraft/src/IThreadedFileIO.class new file mode 100644 index 0000000..2d4c1e7 Binary files /dev/null and b/bin/net/minecraft/src/IThreadedFileIO.class differ diff --git a/bin/net/minecraft/src/ITileEntityProvider.class b/bin/net/minecraft/src/ITileEntityProvider.class new file mode 100644 index 0000000..389a1ef Binary files /dev/null and b/bin/net/minecraft/src/ITileEntityProvider.class differ diff --git a/bin/net/minecraft/src/IUpdatePlayerListBox.class b/bin/net/minecraft/src/IUpdatePlayerListBox.class new file mode 100644 index 0000000..9a0cc7f Binary files /dev/null and b/bin/net/minecraft/src/IUpdatePlayerListBox.class differ diff --git a/bin/net/minecraft/src/IWorldAccess.class b/bin/net/minecraft/src/IWorldAccess.class new file mode 100644 index 0000000..6d5fd52 Binary files /dev/null and b/bin/net/minecraft/src/IWorldAccess.class differ diff --git a/bin/net/minecraft/src/Icon.class b/bin/net/minecraft/src/Icon.class new file mode 100644 index 0000000..e6dccf0 Binary files /dev/null and b/bin/net/minecraft/src/Icon.class differ diff --git a/bin/net/minecraft/src/IconFlipped.class b/bin/net/minecraft/src/IconFlipped.class new file mode 100644 index 0000000..3f85039 Binary files /dev/null and b/bin/net/minecraft/src/IconFlipped.class differ diff --git a/bin/net/minecraft/src/IconRegister.class b/bin/net/minecraft/src/IconRegister.class new file mode 100644 index 0000000..e1c46c3 Binary files /dev/null and b/bin/net/minecraft/src/IconRegister.class differ diff --git a/bin/net/minecraft/src/ImageBufferDownload.class b/bin/net/minecraft/src/ImageBufferDownload.class new file mode 100644 index 0000000..8bee04c Binary files /dev/null and b/bin/net/minecraft/src/ImageBufferDownload.class differ diff --git a/bin/net/minecraft/src/IntCache.class b/bin/net/minecraft/src/IntCache.class new file mode 100644 index 0000000..89eb96b Binary files /dev/null and b/bin/net/minecraft/src/IntCache.class differ diff --git a/bin/net/minecraft/src/IntHashMap.class b/bin/net/minecraft/src/IntHashMap.class new file mode 100644 index 0000000..d50bc9a Binary files /dev/null and b/bin/net/minecraft/src/IntHashMap.class differ diff --git a/bin/net/minecraft/src/IntHashMapEntry.class b/bin/net/minecraft/src/IntHashMapEntry.class new file mode 100644 index 0000000..04c4faa Binary files /dev/null and b/bin/net/minecraft/src/IntHashMapEntry.class differ diff --git a/bin/net/minecraft/src/IntegratedPlayerList.class b/bin/net/minecraft/src/IntegratedPlayerList.class new file mode 100644 index 0000000..b2409fd Binary files /dev/null and b/bin/net/minecraft/src/IntegratedPlayerList.class differ diff --git a/bin/net/minecraft/src/IntegratedServer.class b/bin/net/minecraft/src/IntegratedServer.class new file mode 100644 index 0000000..2da3e02 Binary files /dev/null and b/bin/net/minecraft/src/IntegratedServer.class differ diff --git a/bin/net/minecraft/src/IntegratedServerListenThread.class b/bin/net/minecraft/src/IntegratedServerListenThread.class new file mode 100644 index 0000000..ffb6522 Binary files /dev/null and b/bin/net/minecraft/src/IntegratedServerListenThread.class differ diff --git a/bin/net/minecraft/src/InventoryBasic.class b/bin/net/minecraft/src/InventoryBasic.class new file mode 100644 index 0000000..d799e06 Binary files /dev/null and b/bin/net/minecraft/src/InventoryBasic.class differ diff --git a/bin/net/minecraft/src/InventoryCraftResult.class b/bin/net/minecraft/src/InventoryCraftResult.class new file mode 100644 index 0000000..1def244 Binary files /dev/null and b/bin/net/minecraft/src/InventoryCraftResult.class differ diff --git a/bin/net/minecraft/src/InventoryCrafting.class b/bin/net/minecraft/src/InventoryCrafting.class new file mode 100644 index 0000000..7dd985e Binary files /dev/null and b/bin/net/minecraft/src/InventoryCrafting.class differ diff --git a/bin/net/minecraft/src/InventoryEffectRenderer.class b/bin/net/minecraft/src/InventoryEffectRenderer.class new file mode 100644 index 0000000..288504a Binary files /dev/null and b/bin/net/minecraft/src/InventoryEffectRenderer.class differ diff --git a/bin/net/minecraft/src/InventoryEnderChest.class b/bin/net/minecraft/src/InventoryEnderChest.class new file mode 100644 index 0000000..1877329 Binary files /dev/null and b/bin/net/minecraft/src/InventoryEnderChest.class differ diff --git a/bin/net/minecraft/src/InventoryLargeChest.class b/bin/net/minecraft/src/InventoryLargeChest.class new file mode 100644 index 0000000..fad18d8 Binary files /dev/null and b/bin/net/minecraft/src/InventoryLargeChest.class differ diff --git a/bin/net/minecraft/src/InventoryMerchant.class b/bin/net/minecraft/src/InventoryMerchant.class new file mode 100644 index 0000000..25f5d0c Binary files /dev/null and b/bin/net/minecraft/src/InventoryMerchant.class differ diff --git a/bin/net/minecraft/src/InventoryPlayer.class b/bin/net/minecraft/src/InventoryPlayer.class new file mode 100644 index 0000000..536e7c8 Binary files /dev/null and b/bin/net/minecraft/src/InventoryPlayer.class differ diff --git a/bin/net/minecraft/src/InventoryRepair.class b/bin/net/minecraft/src/InventoryRepair.class new file mode 100644 index 0000000..99d1f92 Binary files /dev/null and b/bin/net/minecraft/src/InventoryRepair.class differ diff --git a/bin/net/minecraft/src/Item.class b/bin/net/minecraft/src/Item.class new file mode 100644 index 0000000..2129d13 Binary files /dev/null and b/bin/net/minecraft/src/Item.class differ diff --git a/bin/net/minecraft/src/ItemAnvilBlock.class b/bin/net/minecraft/src/ItemAnvilBlock.class new file mode 100644 index 0000000..a165ca3 Binary files /dev/null and b/bin/net/minecraft/src/ItemAnvilBlock.class differ diff --git a/bin/net/minecraft/src/ItemAppleGold.class b/bin/net/minecraft/src/ItemAppleGold.class new file mode 100644 index 0000000..391b109 Binary files /dev/null and b/bin/net/minecraft/src/ItemAppleGold.class differ diff --git a/bin/net/minecraft/src/ItemArmor.class b/bin/net/minecraft/src/ItemArmor.class new file mode 100644 index 0000000..fd8c32c Binary files /dev/null and b/bin/net/minecraft/src/ItemArmor.class differ diff --git a/bin/net/minecraft/src/ItemAxe.class b/bin/net/minecraft/src/ItemAxe.class new file mode 100644 index 0000000..a07974d Binary files /dev/null and b/bin/net/minecraft/src/ItemAxe.class differ diff --git a/bin/net/minecraft/src/ItemBed.class b/bin/net/minecraft/src/ItemBed.class new file mode 100644 index 0000000..07ec0ce Binary files /dev/null and b/bin/net/minecraft/src/ItemBed.class differ diff --git a/bin/net/minecraft/src/ItemBlock.class b/bin/net/minecraft/src/ItemBlock.class new file mode 100644 index 0000000..8d93e29 Binary files /dev/null and b/bin/net/minecraft/src/ItemBlock.class differ diff --git a/bin/net/minecraft/src/ItemBlockWithMetadata.class b/bin/net/minecraft/src/ItemBlockWithMetadata.class new file mode 100644 index 0000000..8539261 Binary files /dev/null and b/bin/net/minecraft/src/ItemBlockWithMetadata.class differ diff --git a/bin/net/minecraft/src/ItemBoat.class b/bin/net/minecraft/src/ItemBoat.class new file mode 100644 index 0000000..5c85b41 Binary files /dev/null and b/bin/net/minecraft/src/ItemBoat.class differ diff --git a/bin/net/minecraft/src/ItemBook.class b/bin/net/minecraft/src/ItemBook.class new file mode 100644 index 0000000..9afa280 Binary files /dev/null and b/bin/net/minecraft/src/ItemBook.class differ diff --git a/bin/net/minecraft/src/ItemBow.class b/bin/net/minecraft/src/ItemBow.class new file mode 100644 index 0000000..4da3b09 Binary files /dev/null and b/bin/net/minecraft/src/ItemBow.class differ diff --git a/bin/net/minecraft/src/ItemBucket.class b/bin/net/minecraft/src/ItemBucket.class new file mode 100644 index 0000000..ce74e9c Binary files /dev/null and b/bin/net/minecraft/src/ItemBucket.class differ diff --git a/bin/net/minecraft/src/ItemBucketMilk.class b/bin/net/minecraft/src/ItemBucketMilk.class new file mode 100644 index 0000000..eb083bf Binary files /dev/null and b/bin/net/minecraft/src/ItemBucketMilk.class differ diff --git a/bin/net/minecraft/src/ItemCarrotOnAStick.class b/bin/net/minecraft/src/ItemCarrotOnAStick.class new file mode 100644 index 0000000..2dd27a5 Binary files /dev/null and b/bin/net/minecraft/src/ItemCarrotOnAStick.class differ diff --git a/bin/net/minecraft/src/ItemCloth.class b/bin/net/minecraft/src/ItemCloth.class new file mode 100644 index 0000000..c7e6f8b Binary files /dev/null and b/bin/net/minecraft/src/ItemCloth.class differ diff --git a/bin/net/minecraft/src/ItemCoal.class b/bin/net/minecraft/src/ItemCoal.class new file mode 100644 index 0000000..a1e1db6 Binary files /dev/null and b/bin/net/minecraft/src/ItemCoal.class differ diff --git a/bin/net/minecraft/src/ItemColored.class b/bin/net/minecraft/src/ItemColored.class new file mode 100644 index 0000000..f1690b4 Binary files /dev/null and b/bin/net/minecraft/src/ItemColored.class differ diff --git a/bin/net/minecraft/src/ItemDoor.class b/bin/net/minecraft/src/ItemDoor.class new file mode 100644 index 0000000..cd381d1 Binary files /dev/null and b/bin/net/minecraft/src/ItemDoor.class differ diff --git a/bin/net/minecraft/src/ItemDye.class b/bin/net/minecraft/src/ItemDye.class new file mode 100644 index 0000000..8bf43f6 Binary files /dev/null and b/bin/net/minecraft/src/ItemDye.class differ diff --git a/bin/net/minecraft/src/ItemEditableBook.class b/bin/net/minecraft/src/ItemEditableBook.class new file mode 100644 index 0000000..903587f Binary files /dev/null and b/bin/net/minecraft/src/ItemEditableBook.class differ diff --git a/bin/net/minecraft/src/ItemEgg.class b/bin/net/minecraft/src/ItemEgg.class new file mode 100644 index 0000000..3467e36 Binary files /dev/null and b/bin/net/minecraft/src/ItemEgg.class differ diff --git a/bin/net/minecraft/src/ItemEmptyMap.class b/bin/net/minecraft/src/ItemEmptyMap.class new file mode 100644 index 0000000..231bf11 Binary files /dev/null and b/bin/net/minecraft/src/ItemEmptyMap.class differ diff --git a/bin/net/minecraft/src/ItemEnchantedBook.class b/bin/net/minecraft/src/ItemEnchantedBook.class new file mode 100644 index 0000000..5a5d12a Binary files /dev/null and b/bin/net/minecraft/src/ItemEnchantedBook.class differ diff --git a/bin/net/minecraft/src/ItemEnderEye.class b/bin/net/minecraft/src/ItemEnderEye.class new file mode 100644 index 0000000..fe861e9 Binary files /dev/null and b/bin/net/minecraft/src/ItemEnderEye.class differ diff --git a/bin/net/minecraft/src/ItemEnderPearl.class b/bin/net/minecraft/src/ItemEnderPearl.class new file mode 100644 index 0000000..f784066 Binary files /dev/null and b/bin/net/minecraft/src/ItemEnderPearl.class differ diff --git a/bin/net/minecraft/src/ItemExpBottle.class b/bin/net/minecraft/src/ItemExpBottle.class new file mode 100644 index 0000000..956dcf8 Binary files /dev/null and b/bin/net/minecraft/src/ItemExpBottle.class differ diff --git a/bin/net/minecraft/src/ItemFireball.class b/bin/net/minecraft/src/ItemFireball.class new file mode 100644 index 0000000..cf7ee13 Binary files /dev/null and b/bin/net/minecraft/src/ItemFireball.class differ diff --git a/bin/net/minecraft/src/ItemFirework.class b/bin/net/minecraft/src/ItemFirework.class new file mode 100644 index 0000000..c1dce4e Binary files /dev/null and b/bin/net/minecraft/src/ItemFirework.class differ diff --git a/bin/net/minecraft/src/ItemFireworkCharge.class b/bin/net/minecraft/src/ItemFireworkCharge.class new file mode 100644 index 0000000..42240ba Binary files /dev/null and b/bin/net/minecraft/src/ItemFireworkCharge.class differ diff --git a/bin/net/minecraft/src/ItemFishingRod.class b/bin/net/minecraft/src/ItemFishingRod.class new file mode 100644 index 0000000..b013fdf Binary files /dev/null and b/bin/net/minecraft/src/ItemFishingRod.class differ diff --git a/bin/net/minecraft/src/ItemFlintAndSteel.class b/bin/net/minecraft/src/ItemFlintAndSteel.class new file mode 100644 index 0000000..cb2212e Binary files /dev/null and b/bin/net/minecraft/src/ItemFlintAndSteel.class differ diff --git a/bin/net/minecraft/src/ItemFood.class b/bin/net/minecraft/src/ItemFood.class new file mode 100644 index 0000000..b04afbd Binary files /dev/null and b/bin/net/minecraft/src/ItemFood.class differ diff --git a/bin/net/minecraft/src/ItemGlassBottle.class b/bin/net/minecraft/src/ItemGlassBottle.class new file mode 100644 index 0000000..b314ad7 Binary files /dev/null and b/bin/net/minecraft/src/ItemGlassBottle.class differ diff --git a/bin/net/minecraft/src/ItemHangingEntity.class b/bin/net/minecraft/src/ItemHangingEntity.class new file mode 100644 index 0000000..24255cb Binary files /dev/null and b/bin/net/minecraft/src/ItemHangingEntity.class differ diff --git a/bin/net/minecraft/src/ItemHoe.class b/bin/net/minecraft/src/ItemHoe.class new file mode 100644 index 0000000..daac776 Binary files /dev/null and b/bin/net/minecraft/src/ItemHoe.class differ diff --git a/bin/net/minecraft/src/ItemInWorldManager.class b/bin/net/minecraft/src/ItemInWorldManager.class new file mode 100644 index 0000000..c7a11c0 Binary files /dev/null and b/bin/net/minecraft/src/ItemInWorldManager.class differ diff --git a/bin/net/minecraft/src/ItemLeaves.class b/bin/net/minecraft/src/ItemLeaves.class new file mode 100644 index 0000000..64db2ef Binary files /dev/null and b/bin/net/minecraft/src/ItemLeaves.class differ diff --git a/bin/net/minecraft/src/ItemLilyPad.class b/bin/net/minecraft/src/ItemLilyPad.class new file mode 100644 index 0000000..103054c Binary files /dev/null and b/bin/net/minecraft/src/ItemLilyPad.class differ diff --git a/bin/net/minecraft/src/ItemMap.class b/bin/net/minecraft/src/ItemMap.class new file mode 100644 index 0000000..6af552d Binary files /dev/null and b/bin/net/minecraft/src/ItemMap.class differ diff --git a/bin/net/minecraft/src/ItemMapBase.class b/bin/net/minecraft/src/ItemMapBase.class new file mode 100644 index 0000000..74ec2bb Binary files /dev/null and b/bin/net/minecraft/src/ItemMapBase.class differ diff --git a/bin/net/minecraft/src/ItemMinecart.class b/bin/net/minecraft/src/ItemMinecart.class new file mode 100644 index 0000000..141b1ff Binary files /dev/null and b/bin/net/minecraft/src/ItemMinecart.class differ diff --git a/bin/net/minecraft/src/ItemMonsterPlacer.class b/bin/net/minecraft/src/ItemMonsterPlacer.class new file mode 100644 index 0000000..bcd2a4d Binary files /dev/null and b/bin/net/minecraft/src/ItemMonsterPlacer.class differ diff --git a/bin/net/minecraft/src/ItemMultiTextureTile.class b/bin/net/minecraft/src/ItemMultiTextureTile.class new file mode 100644 index 0000000..ea738ab Binary files /dev/null and b/bin/net/minecraft/src/ItemMultiTextureTile.class differ diff --git a/bin/net/minecraft/src/ItemPickaxe.class b/bin/net/minecraft/src/ItemPickaxe.class new file mode 100644 index 0000000..810cd88 Binary files /dev/null and b/bin/net/minecraft/src/ItemPickaxe.class differ diff --git a/bin/net/minecraft/src/ItemPiston.class b/bin/net/minecraft/src/ItemPiston.class new file mode 100644 index 0000000..4ddf9a3 Binary files /dev/null and b/bin/net/minecraft/src/ItemPiston.class differ diff --git a/bin/net/minecraft/src/ItemPotion.class b/bin/net/minecraft/src/ItemPotion.class new file mode 100644 index 0000000..66580e4 Binary files /dev/null and b/bin/net/minecraft/src/ItemPotion.class differ diff --git a/bin/net/minecraft/src/ItemRecord.class b/bin/net/minecraft/src/ItemRecord.class new file mode 100644 index 0000000..08e8e9c Binary files /dev/null and b/bin/net/minecraft/src/ItemRecord.class differ diff --git a/bin/net/minecraft/src/ItemRedstone.class b/bin/net/minecraft/src/ItemRedstone.class new file mode 100644 index 0000000..4d52373 Binary files /dev/null and b/bin/net/minecraft/src/ItemRedstone.class differ diff --git a/bin/net/minecraft/src/ItemReed.class b/bin/net/minecraft/src/ItemReed.class new file mode 100644 index 0000000..a96b196 Binary files /dev/null and b/bin/net/minecraft/src/ItemReed.class differ diff --git a/bin/net/minecraft/src/ItemRenderer.class b/bin/net/minecraft/src/ItemRenderer.class new file mode 100644 index 0000000..c5c470d Binary files /dev/null and b/bin/net/minecraft/src/ItemRenderer.class differ diff --git a/bin/net/minecraft/src/ItemSaddle.class b/bin/net/minecraft/src/ItemSaddle.class new file mode 100644 index 0000000..a9c34ab Binary files /dev/null and b/bin/net/minecraft/src/ItemSaddle.class differ diff --git a/bin/net/minecraft/src/ItemSeedFood.class b/bin/net/minecraft/src/ItemSeedFood.class new file mode 100644 index 0000000..884d921 Binary files /dev/null and b/bin/net/minecraft/src/ItemSeedFood.class differ diff --git a/bin/net/minecraft/src/ItemSeeds.class b/bin/net/minecraft/src/ItemSeeds.class new file mode 100644 index 0000000..a78ec35 Binary files /dev/null and b/bin/net/minecraft/src/ItemSeeds.class differ diff --git a/bin/net/minecraft/src/ItemShears.class b/bin/net/minecraft/src/ItemShears.class new file mode 100644 index 0000000..32a16d3 Binary files /dev/null and b/bin/net/minecraft/src/ItemShears.class differ diff --git a/bin/net/minecraft/src/ItemSign.class b/bin/net/minecraft/src/ItemSign.class new file mode 100644 index 0000000..49bdef5 Binary files /dev/null and b/bin/net/minecraft/src/ItemSign.class differ diff --git a/bin/net/minecraft/src/ItemSimpleFoiled.class b/bin/net/minecraft/src/ItemSimpleFoiled.class new file mode 100644 index 0000000..b8e383c Binary files /dev/null and b/bin/net/minecraft/src/ItemSimpleFoiled.class differ diff --git a/bin/net/minecraft/src/ItemSkull.class b/bin/net/minecraft/src/ItemSkull.class new file mode 100644 index 0000000..eadf376 Binary files /dev/null and b/bin/net/minecraft/src/ItemSkull.class differ diff --git a/bin/net/minecraft/src/ItemSlab.class b/bin/net/minecraft/src/ItemSlab.class new file mode 100644 index 0000000..1f52614 Binary files /dev/null and b/bin/net/minecraft/src/ItemSlab.class differ diff --git a/bin/net/minecraft/src/ItemSnow.class b/bin/net/minecraft/src/ItemSnow.class new file mode 100644 index 0000000..5bd0d07 Binary files /dev/null and b/bin/net/minecraft/src/ItemSnow.class differ diff --git a/bin/net/minecraft/src/ItemSnowball.class b/bin/net/minecraft/src/ItemSnowball.class new file mode 100644 index 0000000..2355da7 Binary files /dev/null and b/bin/net/minecraft/src/ItemSnowball.class differ diff --git a/bin/net/minecraft/src/ItemSoup.class b/bin/net/minecraft/src/ItemSoup.class new file mode 100644 index 0000000..4923554 Binary files /dev/null and b/bin/net/minecraft/src/ItemSoup.class differ diff --git a/bin/net/minecraft/src/ItemSpade.class b/bin/net/minecraft/src/ItemSpade.class new file mode 100644 index 0000000..af9c36f Binary files /dev/null and b/bin/net/minecraft/src/ItemSpade.class differ diff --git a/bin/net/minecraft/src/ItemStack.class b/bin/net/minecraft/src/ItemStack.class new file mode 100644 index 0000000..d2f8257 Binary files /dev/null and b/bin/net/minecraft/src/ItemStack.class differ diff --git a/bin/net/minecraft/src/ItemSword.class b/bin/net/minecraft/src/ItemSword.class new file mode 100644 index 0000000..3e183ac Binary files /dev/null and b/bin/net/minecraft/src/ItemSword.class differ diff --git a/bin/net/minecraft/src/ItemTool.class b/bin/net/minecraft/src/ItemTool.class new file mode 100644 index 0000000..af25812 Binary files /dev/null and b/bin/net/minecraft/src/ItemTool.class differ diff --git a/bin/net/minecraft/src/ItemWritableBook.class b/bin/net/minecraft/src/ItemWritableBook.class new file mode 100644 index 0000000..9aae37c Binary files /dev/null and b/bin/net/minecraft/src/ItemWritableBook.class differ diff --git a/bin/net/minecraft/src/KeyBinding.class b/bin/net/minecraft/src/KeyBinding.class new file mode 100644 index 0000000..d481811 Binary files /dev/null and b/bin/net/minecraft/src/KeyBinding.class differ diff --git a/bin/net/minecraft/src/LanServer.class b/bin/net/minecraft/src/LanServer.class new file mode 100644 index 0000000..0bb8ffe Binary files /dev/null and b/bin/net/minecraft/src/LanServer.class differ diff --git a/bin/net/minecraft/src/LanServerList.class b/bin/net/minecraft/src/LanServerList.class new file mode 100644 index 0000000..ea8c78b Binary files /dev/null and b/bin/net/minecraft/src/LanServerList.class differ diff --git a/bin/net/minecraft/src/LoadingScreenRenderer.class b/bin/net/minecraft/src/LoadingScreenRenderer.class new file mode 100644 index 0000000..b73d7f6 Binary files /dev/null and b/bin/net/minecraft/src/LoadingScreenRenderer.class differ diff --git a/bin/net/minecraft/src/LogAgent.class b/bin/net/minecraft/src/LogAgent.class new file mode 100644 index 0000000..c0a9631 Binary files /dev/null and b/bin/net/minecraft/src/LogAgent.class differ diff --git a/bin/net/minecraft/src/LogAgentINNER1.class b/bin/net/minecraft/src/LogAgentINNER1.class new file mode 100644 index 0000000..17b438d Binary files /dev/null and b/bin/net/minecraft/src/LogAgentINNER1.class differ diff --git a/bin/net/minecraft/src/LogFormatter.class b/bin/net/minecraft/src/LogFormatter.class new file mode 100644 index 0000000..2d6a2dd Binary files /dev/null and b/bin/net/minecraft/src/LogFormatter.class differ diff --git a/bin/net/minecraft/src/LongHashMap.class b/bin/net/minecraft/src/LongHashMap.class new file mode 100644 index 0000000..df27e85 Binary files /dev/null and b/bin/net/minecraft/src/LongHashMap.class differ diff --git a/bin/net/minecraft/src/LongHashMapEntry.class b/bin/net/minecraft/src/LongHashMapEntry.class new file mode 100644 index 0000000..766fc84 Binary files /dev/null and b/bin/net/minecraft/src/LongHashMapEntry.class differ diff --git a/bin/net/minecraft/src/LowerStringMap.class b/bin/net/minecraft/src/LowerStringMap.class new file mode 100644 index 0000000..bad64f0 Binary files /dev/null and b/bin/net/minecraft/src/LowerStringMap.class differ diff --git a/bin/net/minecraft/src/MD5String.class b/bin/net/minecraft/src/MD5String.class new file mode 100644 index 0000000..d3e0d02 Binary files /dev/null and b/bin/net/minecraft/src/MD5String.class differ diff --git a/bin/net/minecraft/src/MapColor.class b/bin/net/minecraft/src/MapColor.class new file mode 100644 index 0000000..c5141bc Binary files /dev/null and b/bin/net/minecraft/src/MapColor.class differ diff --git a/bin/net/minecraft/src/MapCoord.class b/bin/net/minecraft/src/MapCoord.class new file mode 100644 index 0000000..a35a8af Binary files /dev/null and b/bin/net/minecraft/src/MapCoord.class differ diff --git a/bin/net/minecraft/src/MapData.class b/bin/net/minecraft/src/MapData.class new file mode 100644 index 0000000..c363303 Binary files /dev/null and b/bin/net/minecraft/src/MapData.class differ diff --git a/bin/net/minecraft/src/MapGenBase.class b/bin/net/minecraft/src/MapGenBase.class new file mode 100644 index 0000000..c3b54b6 Binary files /dev/null and b/bin/net/minecraft/src/MapGenBase.class differ diff --git a/bin/net/minecraft/src/MapGenCaves.class b/bin/net/minecraft/src/MapGenCaves.class new file mode 100644 index 0000000..0377278 Binary files /dev/null and b/bin/net/minecraft/src/MapGenCaves.class differ diff --git a/bin/net/minecraft/src/MapGenCavesHell.class b/bin/net/minecraft/src/MapGenCavesHell.class new file mode 100644 index 0000000..238be77 Binary files /dev/null and b/bin/net/minecraft/src/MapGenCavesHell.class differ diff --git a/bin/net/minecraft/src/MapGenMineshaft.class b/bin/net/minecraft/src/MapGenMineshaft.class new file mode 100644 index 0000000..b5df5da Binary files /dev/null and b/bin/net/minecraft/src/MapGenMineshaft.class differ diff --git a/bin/net/minecraft/src/MapGenNetherBridge.class b/bin/net/minecraft/src/MapGenNetherBridge.class new file mode 100644 index 0000000..50084e4 Binary files /dev/null and b/bin/net/minecraft/src/MapGenNetherBridge.class differ diff --git a/bin/net/minecraft/src/MapGenRavine.class b/bin/net/minecraft/src/MapGenRavine.class new file mode 100644 index 0000000..ba1c2ca Binary files /dev/null and b/bin/net/minecraft/src/MapGenRavine.class differ diff --git a/bin/net/minecraft/src/MapGenScatteredFeature.class b/bin/net/minecraft/src/MapGenScatteredFeature.class new file mode 100644 index 0000000..98c850c Binary files /dev/null and b/bin/net/minecraft/src/MapGenScatteredFeature.class differ diff --git a/bin/net/minecraft/src/MapGenStronghold.class b/bin/net/minecraft/src/MapGenStronghold.class new file mode 100644 index 0000000..cdb0287 Binary files /dev/null and b/bin/net/minecraft/src/MapGenStronghold.class differ diff --git a/bin/net/minecraft/src/MapGenStructure.class b/bin/net/minecraft/src/MapGenStructure.class new file mode 100644 index 0000000..9929bb9 Binary files /dev/null and b/bin/net/minecraft/src/MapGenStructure.class differ diff --git a/bin/net/minecraft/src/MapGenVillage.class b/bin/net/minecraft/src/MapGenVillage.class new file mode 100644 index 0000000..b80a9a1 Binary files /dev/null and b/bin/net/minecraft/src/MapGenVillage.class differ diff --git a/bin/net/minecraft/src/MapInfo.class b/bin/net/minecraft/src/MapInfo.class new file mode 100644 index 0000000..134ff64 Binary files /dev/null and b/bin/net/minecraft/src/MapInfo.class differ diff --git a/bin/net/minecraft/src/MapItemRenderer.class b/bin/net/minecraft/src/MapItemRenderer.class new file mode 100644 index 0000000..1d17495 Binary files /dev/null and b/bin/net/minecraft/src/MapItemRenderer.class differ diff --git a/bin/net/minecraft/src/MapStorage.class b/bin/net/minecraft/src/MapStorage.class new file mode 100644 index 0000000..82edb49 Binary files /dev/null and b/bin/net/minecraft/src/MapStorage.class differ diff --git a/bin/net/minecraft/src/Material.class b/bin/net/minecraft/src/Material.class new file mode 100644 index 0000000..c37863b Binary files /dev/null and b/bin/net/minecraft/src/Material.class differ diff --git a/bin/net/minecraft/src/MaterialLiquid.class b/bin/net/minecraft/src/MaterialLiquid.class new file mode 100644 index 0000000..60dc751 Binary files /dev/null and b/bin/net/minecraft/src/MaterialLiquid.class differ diff --git a/bin/net/minecraft/src/MaterialLogic.class b/bin/net/minecraft/src/MaterialLogic.class new file mode 100644 index 0000000..a283c96 Binary files /dev/null and b/bin/net/minecraft/src/MaterialLogic.class differ diff --git a/bin/net/minecraft/src/MaterialPortal.class b/bin/net/minecraft/src/MaterialPortal.class new file mode 100644 index 0000000..d65d729 Binary files /dev/null and b/bin/net/minecraft/src/MaterialPortal.class differ diff --git a/bin/net/minecraft/src/MaterialTransparent.class b/bin/net/minecraft/src/MaterialTransparent.class new file mode 100644 index 0000000..cbf1cdc Binary files /dev/null and b/bin/net/minecraft/src/MaterialTransparent.class differ diff --git a/bin/net/minecraft/src/MaterialWeb.class b/bin/net/minecraft/src/MaterialWeb.class new file mode 100644 index 0000000..45e57f9 Binary files /dev/null and b/bin/net/minecraft/src/MaterialWeb.class differ diff --git a/bin/net/minecraft/src/MathHelper.class b/bin/net/minecraft/src/MathHelper.class new file mode 100644 index 0000000..a5297bd Binary files /dev/null and b/bin/net/minecraft/src/MathHelper.class differ diff --git a/bin/net/minecraft/src/McoClient.class b/bin/net/minecraft/src/McoClient.class new file mode 100644 index 0000000..369914d Binary files /dev/null and b/bin/net/minecraft/src/McoClient.class differ diff --git a/bin/net/minecraft/src/McoOption.class b/bin/net/minecraft/src/McoOption.class new file mode 100644 index 0000000..e7f9272 Binary files /dev/null and b/bin/net/minecraft/src/McoOption.class differ diff --git a/bin/net/minecraft/src/McoOptionNone.class b/bin/net/minecraft/src/McoOptionNone.class new file mode 100644 index 0000000..dabe401 Binary files /dev/null and b/bin/net/minecraft/src/McoOptionNone.class differ diff --git a/bin/net/minecraft/src/McoOptionSome.class b/bin/net/minecraft/src/McoOptionSome.class new file mode 100644 index 0000000..9ee7560 Binary files /dev/null and b/bin/net/minecraft/src/McoOptionSome.class differ diff --git a/bin/net/minecraft/src/McoPair.class b/bin/net/minecraft/src/McoPair.class new file mode 100644 index 0000000..e19b082 Binary files /dev/null and b/bin/net/minecraft/src/McoPair.class differ diff --git a/bin/net/minecraft/src/McoServer.class b/bin/net/minecraft/src/McoServer.class new file mode 100644 index 0000000..5c481e9 Binary files /dev/null and b/bin/net/minecraft/src/McoServer.class differ diff --git a/bin/net/minecraft/src/McoServerAddress.class b/bin/net/minecraft/src/McoServerAddress.class new file mode 100644 index 0000000..9c620ce Binary files /dev/null and b/bin/net/minecraft/src/McoServerAddress.class differ diff --git a/bin/net/minecraft/src/McoServerList.class b/bin/net/minecraft/src/McoServerList.class new file mode 100644 index 0000000..18c952a Binary files /dev/null and b/bin/net/minecraft/src/McoServerList.class differ diff --git a/bin/net/minecraft/src/McoServerListINNER1.class b/bin/net/minecraft/src/McoServerListINNER1.class new file mode 100644 index 0000000..8766fb0 Binary files /dev/null and b/bin/net/minecraft/src/McoServerListINNER1.class differ diff --git a/bin/net/minecraft/src/MemoryConnection.class b/bin/net/minecraft/src/MemoryConnection.class new file mode 100644 index 0000000..7fab7a4 Binary files /dev/null and b/bin/net/minecraft/src/MemoryConnection.class differ diff --git a/bin/net/minecraft/src/MerchantRecipe.class b/bin/net/minecraft/src/MerchantRecipe.class new file mode 100644 index 0000000..d4d7303 Binary files /dev/null and b/bin/net/minecraft/src/MerchantRecipe.class differ diff --git a/bin/net/minecraft/src/MerchantRecipeList.class b/bin/net/minecraft/src/MerchantRecipeList.class new file mode 100644 index 0000000..483824d Binary files /dev/null and b/bin/net/minecraft/src/MerchantRecipeList.class differ diff --git a/bin/net/minecraft/src/MinecraftAppletImpl.class b/bin/net/minecraft/src/MinecraftAppletImpl.class new file mode 100644 index 0000000..e9943f1 Binary files /dev/null and b/bin/net/minecraft/src/MinecraftAppletImpl.class differ diff --git a/bin/net/minecraft/src/MinecraftError.class b/bin/net/minecraft/src/MinecraftError.class new file mode 100644 index 0000000..5c76a95 Binary files /dev/null and b/bin/net/minecraft/src/MinecraftError.class differ diff --git a/bin/net/minecraft/src/MinecraftException.class b/bin/net/minecraft/src/MinecraftException.class new file mode 100644 index 0000000..55c2048 Binary files /dev/null and b/bin/net/minecraft/src/MinecraftException.class differ diff --git a/bin/net/minecraft/src/MinecraftFakeLauncher.class b/bin/net/minecraft/src/MinecraftFakeLauncher.class new file mode 100644 index 0000000..990672e Binary files /dev/null and b/bin/net/minecraft/src/MinecraftFakeLauncher.class differ diff --git a/bin/net/minecraft/src/MobSpawnerBaseLogic.class b/bin/net/minecraft/src/MobSpawnerBaseLogic.class new file mode 100644 index 0000000..bdaf528 Binary files /dev/null and b/bin/net/minecraft/src/MobSpawnerBaseLogic.class differ diff --git a/bin/net/minecraft/src/ModelBase.class b/bin/net/minecraft/src/ModelBase.class new file mode 100644 index 0000000..f66c131 Binary files /dev/null and b/bin/net/minecraft/src/ModelBase.class differ diff --git a/bin/net/minecraft/src/ModelBat.class b/bin/net/minecraft/src/ModelBat.class new file mode 100644 index 0000000..9d4dc24 Binary files /dev/null and b/bin/net/minecraft/src/ModelBat.class differ diff --git a/bin/net/minecraft/src/ModelBiped.class b/bin/net/minecraft/src/ModelBiped.class new file mode 100644 index 0000000..0895a19 Binary files /dev/null and b/bin/net/minecraft/src/ModelBiped.class differ diff --git a/bin/net/minecraft/src/ModelBlaze.class b/bin/net/minecraft/src/ModelBlaze.class new file mode 100644 index 0000000..39e6cd4 Binary files /dev/null and b/bin/net/minecraft/src/ModelBlaze.class differ diff --git a/bin/net/minecraft/src/ModelBoat.class b/bin/net/minecraft/src/ModelBoat.class new file mode 100644 index 0000000..5d4f7d5 Binary files /dev/null and b/bin/net/minecraft/src/ModelBoat.class differ diff --git a/bin/net/minecraft/src/ModelBook.class b/bin/net/minecraft/src/ModelBook.class new file mode 100644 index 0000000..8641c00 Binary files /dev/null and b/bin/net/minecraft/src/ModelBook.class differ diff --git a/bin/net/minecraft/src/ModelBox.class b/bin/net/minecraft/src/ModelBox.class new file mode 100644 index 0000000..f46b26a Binary files /dev/null and b/bin/net/minecraft/src/ModelBox.class differ diff --git a/bin/net/minecraft/src/ModelChest.class b/bin/net/minecraft/src/ModelChest.class new file mode 100644 index 0000000..4f41740 Binary files /dev/null and b/bin/net/minecraft/src/ModelChest.class differ diff --git a/bin/net/minecraft/src/ModelChicken.class b/bin/net/minecraft/src/ModelChicken.class new file mode 100644 index 0000000..2904c24 Binary files /dev/null and b/bin/net/minecraft/src/ModelChicken.class differ diff --git a/bin/net/minecraft/src/ModelCow.class b/bin/net/minecraft/src/ModelCow.class new file mode 100644 index 0000000..e80b958 Binary files /dev/null and b/bin/net/minecraft/src/ModelCow.class differ diff --git a/bin/net/minecraft/src/ModelCreeper.class b/bin/net/minecraft/src/ModelCreeper.class new file mode 100644 index 0000000..79f355a Binary files /dev/null and b/bin/net/minecraft/src/ModelCreeper.class differ diff --git a/bin/net/minecraft/src/ModelDragon.class b/bin/net/minecraft/src/ModelDragon.class new file mode 100644 index 0000000..e8c79a8 Binary files /dev/null and b/bin/net/minecraft/src/ModelDragon.class differ diff --git a/bin/net/minecraft/src/ModelEnderCrystal.class b/bin/net/minecraft/src/ModelEnderCrystal.class new file mode 100644 index 0000000..f6269a5 Binary files /dev/null and b/bin/net/minecraft/src/ModelEnderCrystal.class differ diff --git a/bin/net/minecraft/src/ModelEnderman.class b/bin/net/minecraft/src/ModelEnderman.class new file mode 100644 index 0000000..21e7c98 Binary files /dev/null and b/bin/net/minecraft/src/ModelEnderman.class differ diff --git a/bin/net/minecraft/src/ModelGhast.class b/bin/net/minecraft/src/ModelGhast.class new file mode 100644 index 0000000..73e0be6 Binary files /dev/null and b/bin/net/minecraft/src/ModelGhast.class differ diff --git a/bin/net/minecraft/src/ModelIronGolem.class b/bin/net/minecraft/src/ModelIronGolem.class new file mode 100644 index 0000000..7a755b9 Binary files /dev/null and b/bin/net/minecraft/src/ModelIronGolem.class differ diff --git a/bin/net/minecraft/src/ModelLargeChest.class b/bin/net/minecraft/src/ModelLargeChest.class new file mode 100644 index 0000000..50932a8 Binary files /dev/null and b/bin/net/minecraft/src/ModelLargeChest.class differ diff --git a/bin/net/minecraft/src/ModelMagmaCube.class b/bin/net/minecraft/src/ModelMagmaCube.class new file mode 100644 index 0000000..2160d36 Binary files /dev/null and b/bin/net/minecraft/src/ModelMagmaCube.class differ diff --git a/bin/net/minecraft/src/ModelMinecart.class b/bin/net/minecraft/src/ModelMinecart.class new file mode 100644 index 0000000..d8cf1ae Binary files /dev/null and b/bin/net/minecraft/src/ModelMinecart.class differ diff --git a/bin/net/minecraft/src/ModelOcelot.class b/bin/net/minecraft/src/ModelOcelot.class new file mode 100644 index 0000000..9d0b45b Binary files /dev/null and b/bin/net/minecraft/src/ModelOcelot.class differ diff --git a/bin/net/minecraft/src/ModelPig.class b/bin/net/minecraft/src/ModelPig.class new file mode 100644 index 0000000..8f22ad1 Binary files /dev/null and b/bin/net/minecraft/src/ModelPig.class differ diff --git a/bin/net/minecraft/src/ModelQuadruped.class b/bin/net/minecraft/src/ModelQuadruped.class new file mode 100644 index 0000000..3317458 Binary files /dev/null and b/bin/net/minecraft/src/ModelQuadruped.class differ diff --git a/bin/net/minecraft/src/ModelRenderer.class b/bin/net/minecraft/src/ModelRenderer.class new file mode 100644 index 0000000..ce73783 Binary files /dev/null and b/bin/net/minecraft/src/ModelRenderer.class differ diff --git a/bin/net/minecraft/src/ModelSheep1.class b/bin/net/minecraft/src/ModelSheep1.class new file mode 100644 index 0000000..3daa319 Binary files /dev/null and b/bin/net/minecraft/src/ModelSheep1.class differ diff --git a/bin/net/minecraft/src/ModelSheep2.class b/bin/net/minecraft/src/ModelSheep2.class new file mode 100644 index 0000000..eef5c92 Binary files /dev/null and b/bin/net/minecraft/src/ModelSheep2.class differ diff --git a/bin/net/minecraft/src/ModelSign.class b/bin/net/minecraft/src/ModelSign.class new file mode 100644 index 0000000..e40dffb Binary files /dev/null and b/bin/net/minecraft/src/ModelSign.class differ diff --git a/bin/net/minecraft/src/ModelSilverfish.class b/bin/net/minecraft/src/ModelSilverfish.class new file mode 100644 index 0000000..4bfce89 Binary files /dev/null and b/bin/net/minecraft/src/ModelSilverfish.class differ diff --git a/bin/net/minecraft/src/ModelSkeleton.class b/bin/net/minecraft/src/ModelSkeleton.class new file mode 100644 index 0000000..f518ef8 Binary files /dev/null and b/bin/net/minecraft/src/ModelSkeleton.class differ diff --git a/bin/net/minecraft/src/ModelSkeletonHead.class b/bin/net/minecraft/src/ModelSkeletonHead.class new file mode 100644 index 0000000..e532935 Binary files /dev/null and b/bin/net/minecraft/src/ModelSkeletonHead.class differ diff --git a/bin/net/minecraft/src/ModelSlime.class b/bin/net/minecraft/src/ModelSlime.class new file mode 100644 index 0000000..bcc00ee Binary files /dev/null and b/bin/net/minecraft/src/ModelSlime.class differ diff --git a/bin/net/minecraft/src/ModelSnowMan.class b/bin/net/minecraft/src/ModelSnowMan.class new file mode 100644 index 0000000..b72cd01 Binary files /dev/null and b/bin/net/minecraft/src/ModelSnowMan.class differ diff --git a/bin/net/minecraft/src/ModelSpider.class b/bin/net/minecraft/src/ModelSpider.class new file mode 100644 index 0000000..ceeeb7c Binary files /dev/null and b/bin/net/minecraft/src/ModelSpider.class differ diff --git a/bin/net/minecraft/src/ModelSquid.class b/bin/net/minecraft/src/ModelSquid.class new file mode 100644 index 0000000..94381b7 Binary files /dev/null and b/bin/net/minecraft/src/ModelSquid.class differ diff --git a/bin/net/minecraft/src/ModelVillager.class b/bin/net/minecraft/src/ModelVillager.class new file mode 100644 index 0000000..e69b65c Binary files /dev/null and b/bin/net/minecraft/src/ModelVillager.class differ diff --git a/bin/net/minecraft/src/ModelWitch.class b/bin/net/minecraft/src/ModelWitch.class new file mode 100644 index 0000000..179a477 Binary files /dev/null and b/bin/net/minecraft/src/ModelWitch.class differ diff --git a/bin/net/minecraft/src/ModelWither.class b/bin/net/minecraft/src/ModelWither.class new file mode 100644 index 0000000..a14ed02 Binary files /dev/null and b/bin/net/minecraft/src/ModelWither.class differ diff --git a/bin/net/minecraft/src/ModelWolf.class b/bin/net/minecraft/src/ModelWolf.class new file mode 100644 index 0000000..c9f4ffc Binary files /dev/null and b/bin/net/minecraft/src/ModelWolf.class differ diff --git a/bin/net/minecraft/src/ModelZombie.class b/bin/net/minecraft/src/ModelZombie.class new file mode 100644 index 0000000..9caab60 Binary files /dev/null and b/bin/net/minecraft/src/ModelZombie.class differ diff --git a/bin/net/minecraft/src/ModelZombieVillager.class b/bin/net/minecraft/src/ModelZombieVillager.class new file mode 100644 index 0000000..9128ccb Binary files /dev/null and b/bin/net/minecraft/src/ModelZombieVillager.class differ diff --git a/bin/net/minecraft/src/MouseFilter.class b/bin/net/minecraft/src/MouseFilter.class new file mode 100644 index 0000000..670bc10 Binary files /dev/null and b/bin/net/minecraft/src/MouseFilter.class differ diff --git a/bin/net/minecraft/src/MouseHelper.class b/bin/net/minecraft/src/MouseHelper.class new file mode 100644 index 0000000..8d06829 Binary files /dev/null and b/bin/net/minecraft/src/MouseHelper.class differ diff --git a/bin/net/minecraft/src/MovementInput.class b/bin/net/minecraft/src/MovementInput.class new file mode 100644 index 0000000..ccb8a54 Binary files /dev/null and b/bin/net/minecraft/src/MovementInput.class differ diff --git a/bin/net/minecraft/src/MovementInputFromOptions.class b/bin/net/minecraft/src/MovementInputFromOptions.class new file mode 100644 index 0000000..1cc53fa Binary files /dev/null and b/bin/net/minecraft/src/MovementInputFromOptions.class differ diff --git a/bin/net/minecraft/src/MovingObjectPosition.class b/bin/net/minecraft/src/MovingObjectPosition.class new file mode 100644 index 0000000..289e618 Binary files /dev/null and b/bin/net/minecraft/src/MovingObjectPosition.class differ diff --git a/bin/net/minecraft/src/MusInputStream.class b/bin/net/minecraft/src/MusInputStream.class new file mode 100644 index 0000000..33e17d7 Binary files /dev/null and b/bin/net/minecraft/src/MusInputStream.class differ diff --git a/bin/net/minecraft/src/NBTBase.class b/bin/net/minecraft/src/NBTBase.class new file mode 100644 index 0000000..73163f2 Binary files /dev/null and b/bin/net/minecraft/src/NBTBase.class differ diff --git a/bin/net/minecraft/src/NBTTagByte.class b/bin/net/minecraft/src/NBTTagByte.class new file mode 100644 index 0000000..7ebee5b Binary files /dev/null and b/bin/net/minecraft/src/NBTTagByte.class differ diff --git a/bin/net/minecraft/src/NBTTagByteArray.class b/bin/net/minecraft/src/NBTTagByteArray.class new file mode 100644 index 0000000..37c68df Binary files /dev/null and b/bin/net/minecraft/src/NBTTagByteArray.class differ diff --git a/bin/net/minecraft/src/NBTTagCompound.class b/bin/net/minecraft/src/NBTTagCompound.class new file mode 100644 index 0000000..3cf0394 Binary files /dev/null and b/bin/net/minecraft/src/NBTTagCompound.class differ diff --git a/bin/net/minecraft/src/NBTTagDouble.class b/bin/net/minecraft/src/NBTTagDouble.class new file mode 100644 index 0000000..032694a Binary files /dev/null and b/bin/net/minecraft/src/NBTTagDouble.class differ diff --git a/bin/net/minecraft/src/NBTTagEnd.class b/bin/net/minecraft/src/NBTTagEnd.class new file mode 100644 index 0000000..194fa56 Binary files /dev/null and b/bin/net/minecraft/src/NBTTagEnd.class differ diff --git a/bin/net/minecraft/src/NBTTagFloat.class b/bin/net/minecraft/src/NBTTagFloat.class new file mode 100644 index 0000000..8fdb87c Binary files /dev/null and b/bin/net/minecraft/src/NBTTagFloat.class differ diff --git a/bin/net/minecraft/src/NBTTagInt.class b/bin/net/minecraft/src/NBTTagInt.class new file mode 100644 index 0000000..7193321 Binary files /dev/null and b/bin/net/minecraft/src/NBTTagInt.class differ diff --git a/bin/net/minecraft/src/NBTTagIntArray.class b/bin/net/minecraft/src/NBTTagIntArray.class new file mode 100644 index 0000000..518c522 Binary files /dev/null and b/bin/net/minecraft/src/NBTTagIntArray.class differ diff --git a/bin/net/minecraft/src/NBTTagList.class b/bin/net/minecraft/src/NBTTagList.class new file mode 100644 index 0000000..1525647 Binary files /dev/null and b/bin/net/minecraft/src/NBTTagList.class differ diff --git a/bin/net/minecraft/src/NBTTagLong.class b/bin/net/minecraft/src/NBTTagLong.class new file mode 100644 index 0000000..2887abb Binary files /dev/null and b/bin/net/minecraft/src/NBTTagLong.class differ diff --git a/bin/net/minecraft/src/NBTTagShort.class b/bin/net/minecraft/src/NBTTagShort.class new file mode 100644 index 0000000..8c1a617 Binary files /dev/null and b/bin/net/minecraft/src/NBTTagShort.class differ diff --git a/bin/net/minecraft/src/NBTTagString.class b/bin/net/minecraft/src/NBTTagString.class new file mode 100644 index 0000000..2cbd1c2 Binary files /dev/null and b/bin/net/minecraft/src/NBTTagString.class differ diff --git a/bin/net/minecraft/src/NetClientHandler.class b/bin/net/minecraft/src/NetClientHandler.class new file mode 100644 index 0000000..85f8d86 Binary files /dev/null and b/bin/net/minecraft/src/NetClientHandler.class differ diff --git a/bin/net/minecraft/src/NetClientWebTextures.class b/bin/net/minecraft/src/NetClientWebTextures.class new file mode 100644 index 0000000..dca3297 Binary files /dev/null and b/bin/net/minecraft/src/NetClientWebTextures.class differ diff --git a/bin/net/minecraft/src/NetHandler.class b/bin/net/minecraft/src/NetHandler.class new file mode 100644 index 0000000..6da0a63 Binary files /dev/null and b/bin/net/minecraft/src/NetHandler.class differ diff --git a/bin/net/minecraft/src/NetLoginHandler.class b/bin/net/minecraft/src/NetLoginHandler.class new file mode 100644 index 0000000..a5eb3c8 Binary files /dev/null and b/bin/net/minecraft/src/NetLoginHandler.class differ diff --git a/bin/net/minecraft/src/NetServerHandler.class b/bin/net/minecraft/src/NetServerHandler.class new file mode 100644 index 0000000..16f2981 Binary files /dev/null and b/bin/net/minecraft/src/NetServerHandler.class differ diff --git a/bin/net/minecraft/src/NetworkListenThread.class b/bin/net/minecraft/src/NetworkListenThread.class new file mode 100644 index 0000000..8a10137 Binary files /dev/null and b/bin/net/minecraft/src/NetworkListenThread.class differ diff --git a/bin/net/minecraft/src/NextTickListEntry.class b/bin/net/minecraft/src/NextTickListEntry.class new file mode 100644 index 0000000..c3f1fcf Binary files /dev/null and b/bin/net/minecraft/src/NextTickListEntry.class differ diff --git a/bin/net/minecraft/src/NibbleArray.class b/bin/net/minecraft/src/NibbleArray.class new file mode 100644 index 0000000..e265c95 Binary files /dev/null and b/bin/net/minecraft/src/NibbleArray.class differ diff --git a/bin/net/minecraft/src/NibbleArrayReader.class b/bin/net/minecraft/src/NibbleArrayReader.class new file mode 100644 index 0000000..c38dacd Binary files /dev/null and b/bin/net/minecraft/src/NibbleArrayReader.class differ diff --git a/bin/net/minecraft/src/NoiseGenerator.class b/bin/net/minecraft/src/NoiseGenerator.class new file mode 100644 index 0000000..142168b Binary files /dev/null and b/bin/net/minecraft/src/NoiseGenerator.class differ diff --git a/bin/net/minecraft/src/NoiseGeneratorOctaves.class b/bin/net/minecraft/src/NoiseGeneratorOctaves.class new file mode 100644 index 0000000..18a442d Binary files /dev/null and b/bin/net/minecraft/src/NoiseGeneratorOctaves.class differ diff --git a/bin/net/minecraft/src/NoiseGeneratorPerlin.class b/bin/net/minecraft/src/NoiseGeneratorPerlin.class new file mode 100644 index 0000000..1d9f210 Binary files /dev/null and b/bin/net/minecraft/src/NoiseGeneratorPerlin.class differ diff --git a/bin/net/minecraft/src/NpcMerchant.class b/bin/net/minecraft/src/NpcMerchant.class new file mode 100644 index 0000000..3942883 Binary files /dev/null and b/bin/net/minecraft/src/NpcMerchant.class differ diff --git a/bin/net/minecraft/src/NumberInvalidException.class b/bin/net/minecraft/src/NumberInvalidException.class new file mode 100644 index 0000000..765c410 Binary files /dev/null and b/bin/net/minecraft/src/NumberInvalidException.class differ diff --git a/bin/net/minecraft/src/OpenGlCapsChecker.class b/bin/net/minecraft/src/OpenGlCapsChecker.class new file mode 100644 index 0000000..a942ab7 Binary files /dev/null and b/bin/net/minecraft/src/OpenGlCapsChecker.class differ diff --git a/bin/net/minecraft/src/OpenGlHelper.class b/bin/net/minecraft/src/OpenGlHelper.class new file mode 100644 index 0000000..b9c4794 Binary files /dev/null and b/bin/net/minecraft/src/OpenGlHelper.class differ diff --git a/bin/net/minecraft/src/Packet.class b/bin/net/minecraft/src/Packet.class new file mode 100644 index 0000000..3001414 Binary files /dev/null and b/bin/net/minecraft/src/Packet.class differ diff --git a/bin/net/minecraft/src/Packet0KeepAlive.class b/bin/net/minecraft/src/Packet0KeepAlive.class new file mode 100644 index 0000000..072cc46 Binary files /dev/null and b/bin/net/minecraft/src/Packet0KeepAlive.class differ diff --git a/bin/net/minecraft/src/Packet100OpenWindow.class b/bin/net/minecraft/src/Packet100OpenWindow.class new file mode 100644 index 0000000..b93f64a Binary files /dev/null and b/bin/net/minecraft/src/Packet100OpenWindow.class differ diff --git a/bin/net/minecraft/src/Packet101CloseWindow.class b/bin/net/minecraft/src/Packet101CloseWindow.class new file mode 100644 index 0000000..6b734a6 Binary files /dev/null and b/bin/net/minecraft/src/Packet101CloseWindow.class differ diff --git a/bin/net/minecraft/src/Packet102WindowClick.class b/bin/net/minecraft/src/Packet102WindowClick.class new file mode 100644 index 0000000..2cdc2e6 Binary files /dev/null and b/bin/net/minecraft/src/Packet102WindowClick.class differ diff --git a/bin/net/minecraft/src/Packet103SetSlot.class b/bin/net/minecraft/src/Packet103SetSlot.class new file mode 100644 index 0000000..0fc181c Binary files /dev/null and b/bin/net/minecraft/src/Packet103SetSlot.class differ diff --git a/bin/net/minecraft/src/Packet104WindowItems.class b/bin/net/minecraft/src/Packet104WindowItems.class new file mode 100644 index 0000000..7c90e8a Binary files /dev/null and b/bin/net/minecraft/src/Packet104WindowItems.class differ diff --git a/bin/net/minecraft/src/Packet105UpdateProgressbar.class b/bin/net/minecraft/src/Packet105UpdateProgressbar.class new file mode 100644 index 0000000..4231a98 Binary files /dev/null and b/bin/net/minecraft/src/Packet105UpdateProgressbar.class differ diff --git a/bin/net/minecraft/src/Packet106Transaction.class b/bin/net/minecraft/src/Packet106Transaction.class new file mode 100644 index 0000000..d40092d Binary files /dev/null and b/bin/net/minecraft/src/Packet106Transaction.class differ diff --git a/bin/net/minecraft/src/Packet107CreativeSetSlot.class b/bin/net/minecraft/src/Packet107CreativeSetSlot.class new file mode 100644 index 0000000..3d83ddc Binary files /dev/null and b/bin/net/minecraft/src/Packet107CreativeSetSlot.class differ diff --git a/bin/net/minecraft/src/Packet108EnchantItem.class b/bin/net/minecraft/src/Packet108EnchantItem.class new file mode 100644 index 0000000..804e8d3 Binary files /dev/null and b/bin/net/minecraft/src/Packet108EnchantItem.class differ diff --git a/bin/net/minecraft/src/Packet10Flying.class b/bin/net/minecraft/src/Packet10Flying.class new file mode 100644 index 0000000..1c79d0f Binary files /dev/null and b/bin/net/minecraft/src/Packet10Flying.class differ diff --git a/bin/net/minecraft/src/Packet11PlayerPosition.class b/bin/net/minecraft/src/Packet11PlayerPosition.class new file mode 100644 index 0000000..9917765 Binary files /dev/null and b/bin/net/minecraft/src/Packet11PlayerPosition.class differ diff --git a/bin/net/minecraft/src/Packet12PlayerLook.class b/bin/net/minecraft/src/Packet12PlayerLook.class new file mode 100644 index 0000000..0e4def2 Binary files /dev/null and b/bin/net/minecraft/src/Packet12PlayerLook.class differ diff --git a/bin/net/minecraft/src/Packet130UpdateSign.class b/bin/net/minecraft/src/Packet130UpdateSign.class new file mode 100644 index 0000000..4e6c5df Binary files /dev/null and b/bin/net/minecraft/src/Packet130UpdateSign.class differ diff --git a/bin/net/minecraft/src/Packet131MapData.class b/bin/net/minecraft/src/Packet131MapData.class new file mode 100644 index 0000000..4c9ea96 Binary files /dev/null and b/bin/net/minecraft/src/Packet131MapData.class differ diff --git a/bin/net/minecraft/src/Packet132TileEntityData.class b/bin/net/minecraft/src/Packet132TileEntityData.class new file mode 100644 index 0000000..aa547cb Binary files /dev/null and b/bin/net/minecraft/src/Packet132TileEntityData.class differ diff --git a/bin/net/minecraft/src/Packet13PlayerLookMove.class b/bin/net/minecraft/src/Packet13PlayerLookMove.class new file mode 100644 index 0000000..a43d385 Binary files /dev/null and b/bin/net/minecraft/src/Packet13PlayerLookMove.class differ diff --git a/bin/net/minecraft/src/Packet14BlockDig.class b/bin/net/minecraft/src/Packet14BlockDig.class new file mode 100644 index 0000000..447fd6a Binary files /dev/null and b/bin/net/minecraft/src/Packet14BlockDig.class differ diff --git a/bin/net/minecraft/src/Packet15Place.class b/bin/net/minecraft/src/Packet15Place.class new file mode 100644 index 0000000..2c3868a Binary files /dev/null and b/bin/net/minecraft/src/Packet15Place.class differ diff --git a/bin/net/minecraft/src/Packet16BlockItemSwitch.class b/bin/net/minecraft/src/Packet16BlockItemSwitch.class new file mode 100644 index 0000000..8d2fc49 Binary files /dev/null and b/bin/net/minecraft/src/Packet16BlockItemSwitch.class differ diff --git a/bin/net/minecraft/src/Packet17Sleep.class b/bin/net/minecraft/src/Packet17Sleep.class new file mode 100644 index 0000000..bd54f0f Binary files /dev/null and b/bin/net/minecraft/src/Packet17Sleep.class differ diff --git a/bin/net/minecraft/src/Packet18Animation.class b/bin/net/minecraft/src/Packet18Animation.class new file mode 100644 index 0000000..419e4b2 Binary files /dev/null and b/bin/net/minecraft/src/Packet18Animation.class differ diff --git a/bin/net/minecraft/src/Packet19EntityAction.class b/bin/net/minecraft/src/Packet19EntityAction.class new file mode 100644 index 0000000..fc4b7f4 Binary files /dev/null and b/bin/net/minecraft/src/Packet19EntityAction.class differ diff --git a/bin/net/minecraft/src/Packet1Login.class b/bin/net/minecraft/src/Packet1Login.class new file mode 100644 index 0000000..7291872 Binary files /dev/null and b/bin/net/minecraft/src/Packet1Login.class differ diff --git a/bin/net/minecraft/src/Packet200Statistic.class b/bin/net/minecraft/src/Packet200Statistic.class new file mode 100644 index 0000000..557959d Binary files /dev/null and b/bin/net/minecraft/src/Packet200Statistic.class differ diff --git a/bin/net/minecraft/src/Packet201PlayerInfo.class b/bin/net/minecraft/src/Packet201PlayerInfo.class new file mode 100644 index 0000000..a74601e Binary files /dev/null and b/bin/net/minecraft/src/Packet201PlayerInfo.class differ diff --git a/bin/net/minecraft/src/Packet202PlayerAbilities.class b/bin/net/minecraft/src/Packet202PlayerAbilities.class new file mode 100644 index 0000000..28fbada Binary files /dev/null and b/bin/net/minecraft/src/Packet202PlayerAbilities.class differ diff --git a/bin/net/minecraft/src/Packet203AutoComplete.class b/bin/net/minecraft/src/Packet203AutoComplete.class new file mode 100644 index 0000000..6466e70 Binary files /dev/null and b/bin/net/minecraft/src/Packet203AutoComplete.class differ diff --git a/bin/net/minecraft/src/Packet204ClientInfo.class b/bin/net/minecraft/src/Packet204ClientInfo.class new file mode 100644 index 0000000..3d66039 Binary files /dev/null and b/bin/net/minecraft/src/Packet204ClientInfo.class differ diff --git a/bin/net/minecraft/src/Packet205ClientCommand.class b/bin/net/minecraft/src/Packet205ClientCommand.class new file mode 100644 index 0000000..8595c4e Binary files /dev/null and b/bin/net/minecraft/src/Packet205ClientCommand.class differ diff --git a/bin/net/minecraft/src/Packet206SetObjective.class b/bin/net/minecraft/src/Packet206SetObjective.class new file mode 100644 index 0000000..9400b63 Binary files /dev/null and b/bin/net/minecraft/src/Packet206SetObjective.class differ diff --git a/bin/net/minecraft/src/Packet207SetScore.class b/bin/net/minecraft/src/Packet207SetScore.class new file mode 100644 index 0000000..69804ea Binary files /dev/null and b/bin/net/minecraft/src/Packet207SetScore.class differ diff --git a/bin/net/minecraft/src/Packet208SetDisplayObjective.class b/bin/net/minecraft/src/Packet208SetDisplayObjective.class new file mode 100644 index 0000000..de1d2c0 Binary files /dev/null and b/bin/net/minecraft/src/Packet208SetDisplayObjective.class differ diff --git a/bin/net/minecraft/src/Packet209SetPlayerTeam.class b/bin/net/minecraft/src/Packet209SetPlayerTeam.class new file mode 100644 index 0000000..6696749 Binary files /dev/null and b/bin/net/minecraft/src/Packet209SetPlayerTeam.class differ diff --git a/bin/net/minecraft/src/Packet20NamedEntitySpawn.class b/bin/net/minecraft/src/Packet20NamedEntitySpawn.class new file mode 100644 index 0000000..494f652 Binary files /dev/null and b/bin/net/minecraft/src/Packet20NamedEntitySpawn.class differ diff --git a/bin/net/minecraft/src/Packet22Collect.class b/bin/net/minecraft/src/Packet22Collect.class new file mode 100644 index 0000000..f366a88 Binary files /dev/null and b/bin/net/minecraft/src/Packet22Collect.class differ diff --git a/bin/net/minecraft/src/Packet23VehicleSpawn.class b/bin/net/minecraft/src/Packet23VehicleSpawn.class new file mode 100644 index 0000000..2e6f848 Binary files /dev/null and b/bin/net/minecraft/src/Packet23VehicleSpawn.class differ diff --git a/bin/net/minecraft/src/Packet24MobSpawn.class b/bin/net/minecraft/src/Packet24MobSpawn.class new file mode 100644 index 0000000..882b664 Binary files /dev/null and b/bin/net/minecraft/src/Packet24MobSpawn.class differ diff --git a/bin/net/minecraft/src/Packet250CustomPayload.class b/bin/net/minecraft/src/Packet250CustomPayload.class new file mode 100644 index 0000000..54d6d41 Binary files /dev/null and b/bin/net/minecraft/src/Packet250CustomPayload.class differ diff --git a/bin/net/minecraft/src/Packet252SharedKey.class b/bin/net/minecraft/src/Packet252SharedKey.class new file mode 100644 index 0000000..67cf227 Binary files /dev/null and b/bin/net/minecraft/src/Packet252SharedKey.class differ diff --git a/bin/net/minecraft/src/Packet253ServerAuthData.class b/bin/net/minecraft/src/Packet253ServerAuthData.class new file mode 100644 index 0000000..5353445 Binary files /dev/null and b/bin/net/minecraft/src/Packet253ServerAuthData.class differ diff --git a/bin/net/minecraft/src/Packet254ServerPing.class b/bin/net/minecraft/src/Packet254ServerPing.class new file mode 100644 index 0000000..bf0f299 Binary files /dev/null and b/bin/net/minecraft/src/Packet254ServerPing.class differ diff --git a/bin/net/minecraft/src/Packet255KickDisconnect.class b/bin/net/minecraft/src/Packet255KickDisconnect.class new file mode 100644 index 0000000..fc43023 Binary files /dev/null and b/bin/net/minecraft/src/Packet255KickDisconnect.class differ diff --git a/bin/net/minecraft/src/Packet25EntityPainting.class b/bin/net/minecraft/src/Packet25EntityPainting.class new file mode 100644 index 0000000..3412d64 Binary files /dev/null and b/bin/net/minecraft/src/Packet25EntityPainting.class differ diff --git a/bin/net/minecraft/src/Packet26EntityExpOrb.class b/bin/net/minecraft/src/Packet26EntityExpOrb.class new file mode 100644 index 0000000..2645908 Binary files /dev/null and b/bin/net/minecraft/src/Packet26EntityExpOrb.class differ diff --git a/bin/net/minecraft/src/Packet28EntityVelocity.class b/bin/net/minecraft/src/Packet28EntityVelocity.class new file mode 100644 index 0000000..98b408a Binary files /dev/null and b/bin/net/minecraft/src/Packet28EntityVelocity.class differ diff --git a/bin/net/minecraft/src/Packet29DestroyEntity.class b/bin/net/minecraft/src/Packet29DestroyEntity.class new file mode 100644 index 0000000..a0f0c8a Binary files /dev/null and b/bin/net/minecraft/src/Packet29DestroyEntity.class differ diff --git a/bin/net/minecraft/src/Packet2ClientProtocol.class b/bin/net/minecraft/src/Packet2ClientProtocol.class new file mode 100644 index 0000000..08b77d9 Binary files /dev/null and b/bin/net/minecraft/src/Packet2ClientProtocol.class differ diff --git a/bin/net/minecraft/src/Packet30Entity.class b/bin/net/minecraft/src/Packet30Entity.class new file mode 100644 index 0000000..afa687f Binary files /dev/null and b/bin/net/minecraft/src/Packet30Entity.class differ diff --git a/bin/net/minecraft/src/Packet31RelEntityMove.class b/bin/net/minecraft/src/Packet31RelEntityMove.class new file mode 100644 index 0000000..3ec7570 Binary files /dev/null and b/bin/net/minecraft/src/Packet31RelEntityMove.class differ diff --git a/bin/net/minecraft/src/Packet32EntityLook.class b/bin/net/minecraft/src/Packet32EntityLook.class new file mode 100644 index 0000000..a33371d Binary files /dev/null and b/bin/net/minecraft/src/Packet32EntityLook.class differ diff --git a/bin/net/minecraft/src/Packet33RelEntityMoveLook.class b/bin/net/minecraft/src/Packet33RelEntityMoveLook.class new file mode 100644 index 0000000..bca2923 Binary files /dev/null and b/bin/net/minecraft/src/Packet33RelEntityMoveLook.class differ diff --git a/bin/net/minecraft/src/Packet34EntityTeleport.class b/bin/net/minecraft/src/Packet34EntityTeleport.class new file mode 100644 index 0000000..fbd7d81 Binary files /dev/null and b/bin/net/minecraft/src/Packet34EntityTeleport.class differ diff --git a/bin/net/minecraft/src/Packet35EntityHeadRotation.class b/bin/net/minecraft/src/Packet35EntityHeadRotation.class new file mode 100644 index 0000000..e11ab95 Binary files /dev/null and b/bin/net/minecraft/src/Packet35EntityHeadRotation.class differ diff --git a/bin/net/minecraft/src/Packet38EntityStatus.class b/bin/net/minecraft/src/Packet38EntityStatus.class new file mode 100644 index 0000000..b4bced0 Binary files /dev/null and b/bin/net/minecraft/src/Packet38EntityStatus.class differ diff --git a/bin/net/minecraft/src/Packet39AttachEntity.class b/bin/net/minecraft/src/Packet39AttachEntity.class new file mode 100644 index 0000000..b57599e Binary files /dev/null and b/bin/net/minecraft/src/Packet39AttachEntity.class differ diff --git a/bin/net/minecraft/src/Packet3Chat.class b/bin/net/minecraft/src/Packet3Chat.class new file mode 100644 index 0000000..604c3bd Binary files /dev/null and b/bin/net/minecraft/src/Packet3Chat.class differ diff --git a/bin/net/minecraft/src/Packet40EntityMetadata.class b/bin/net/minecraft/src/Packet40EntityMetadata.class new file mode 100644 index 0000000..3cadee2 Binary files /dev/null and b/bin/net/minecraft/src/Packet40EntityMetadata.class differ diff --git a/bin/net/minecraft/src/Packet41EntityEffect.class b/bin/net/minecraft/src/Packet41EntityEffect.class new file mode 100644 index 0000000..5a877ee Binary files /dev/null and b/bin/net/minecraft/src/Packet41EntityEffect.class differ diff --git a/bin/net/minecraft/src/Packet42RemoveEntityEffect.class b/bin/net/minecraft/src/Packet42RemoveEntityEffect.class new file mode 100644 index 0000000..7701fb9 Binary files /dev/null and b/bin/net/minecraft/src/Packet42RemoveEntityEffect.class differ diff --git a/bin/net/minecraft/src/Packet43Experience.class b/bin/net/minecraft/src/Packet43Experience.class new file mode 100644 index 0000000..c9b2410 Binary files /dev/null and b/bin/net/minecraft/src/Packet43Experience.class differ diff --git a/bin/net/minecraft/src/Packet4UpdateTime.class b/bin/net/minecraft/src/Packet4UpdateTime.class new file mode 100644 index 0000000..b947a51 Binary files /dev/null and b/bin/net/minecraft/src/Packet4UpdateTime.class differ diff --git a/bin/net/minecraft/src/Packet51MapChunk.class b/bin/net/minecraft/src/Packet51MapChunk.class new file mode 100644 index 0000000..12cf202 Binary files /dev/null and b/bin/net/minecraft/src/Packet51MapChunk.class differ diff --git a/bin/net/minecraft/src/Packet51MapChunkData.class b/bin/net/minecraft/src/Packet51MapChunkData.class new file mode 100644 index 0000000..f50c383 Binary files /dev/null and b/bin/net/minecraft/src/Packet51MapChunkData.class differ diff --git a/bin/net/minecraft/src/Packet52MultiBlockChange.class b/bin/net/minecraft/src/Packet52MultiBlockChange.class new file mode 100644 index 0000000..174a45a Binary files /dev/null and b/bin/net/minecraft/src/Packet52MultiBlockChange.class differ diff --git a/bin/net/minecraft/src/Packet53BlockChange.class b/bin/net/minecraft/src/Packet53BlockChange.class new file mode 100644 index 0000000..c8f7ad3 Binary files /dev/null and b/bin/net/minecraft/src/Packet53BlockChange.class differ diff --git a/bin/net/minecraft/src/Packet54PlayNoteBlock.class b/bin/net/minecraft/src/Packet54PlayNoteBlock.class new file mode 100644 index 0000000..16f6827 Binary files /dev/null and b/bin/net/minecraft/src/Packet54PlayNoteBlock.class differ diff --git a/bin/net/minecraft/src/Packet55BlockDestroy.class b/bin/net/minecraft/src/Packet55BlockDestroy.class new file mode 100644 index 0000000..e486678 Binary files /dev/null and b/bin/net/minecraft/src/Packet55BlockDestroy.class differ diff --git a/bin/net/minecraft/src/Packet56MapChunks.class b/bin/net/minecraft/src/Packet56MapChunks.class new file mode 100644 index 0000000..665d379 Binary files /dev/null and b/bin/net/minecraft/src/Packet56MapChunks.class differ diff --git a/bin/net/minecraft/src/Packet5PlayerInventory.class b/bin/net/minecraft/src/Packet5PlayerInventory.class new file mode 100644 index 0000000..061b92d Binary files /dev/null and b/bin/net/minecraft/src/Packet5PlayerInventory.class differ diff --git a/bin/net/minecraft/src/Packet60Explosion.class b/bin/net/minecraft/src/Packet60Explosion.class new file mode 100644 index 0000000..3414294 Binary files /dev/null and b/bin/net/minecraft/src/Packet60Explosion.class differ diff --git a/bin/net/minecraft/src/Packet61DoorChange.class b/bin/net/minecraft/src/Packet61DoorChange.class new file mode 100644 index 0000000..6ab9d53 Binary files /dev/null and b/bin/net/minecraft/src/Packet61DoorChange.class differ diff --git a/bin/net/minecraft/src/Packet62LevelSound.class b/bin/net/minecraft/src/Packet62LevelSound.class new file mode 100644 index 0000000..8180e97 Binary files /dev/null and b/bin/net/minecraft/src/Packet62LevelSound.class differ diff --git a/bin/net/minecraft/src/Packet63WorldParticles.class b/bin/net/minecraft/src/Packet63WorldParticles.class new file mode 100644 index 0000000..51531f1 Binary files /dev/null and b/bin/net/minecraft/src/Packet63WorldParticles.class differ diff --git a/bin/net/minecraft/src/Packet6SpawnPosition.class b/bin/net/minecraft/src/Packet6SpawnPosition.class new file mode 100644 index 0000000..396c186 Binary files /dev/null and b/bin/net/minecraft/src/Packet6SpawnPosition.class differ diff --git a/bin/net/minecraft/src/Packet70GameEvent.class b/bin/net/minecraft/src/Packet70GameEvent.class new file mode 100644 index 0000000..32681b7 Binary files /dev/null and b/bin/net/minecraft/src/Packet70GameEvent.class differ diff --git a/bin/net/minecraft/src/Packet71Weather.class b/bin/net/minecraft/src/Packet71Weather.class new file mode 100644 index 0000000..a7081c7 Binary files /dev/null and b/bin/net/minecraft/src/Packet71Weather.class differ diff --git a/bin/net/minecraft/src/Packet7UseEntity.class b/bin/net/minecraft/src/Packet7UseEntity.class new file mode 100644 index 0000000..12b1ee8 Binary files /dev/null and b/bin/net/minecraft/src/Packet7UseEntity.class differ diff --git a/bin/net/minecraft/src/Packet8UpdateHealth.class b/bin/net/minecraft/src/Packet8UpdateHealth.class new file mode 100644 index 0000000..f8b154f Binary files /dev/null and b/bin/net/minecraft/src/Packet8UpdateHealth.class differ diff --git a/bin/net/minecraft/src/Packet9Respawn.class b/bin/net/minecraft/src/Packet9Respawn.class new file mode 100644 index 0000000..627cf73 Binary files /dev/null and b/bin/net/minecraft/src/Packet9Respawn.class differ diff --git a/bin/net/minecraft/src/PacketCount.class b/bin/net/minecraft/src/PacketCount.class new file mode 100644 index 0000000..0d19211 Binary files /dev/null and b/bin/net/minecraft/src/PacketCount.class differ diff --git a/bin/net/minecraft/src/PanelCrashReport.class b/bin/net/minecraft/src/PanelCrashReport.class new file mode 100644 index 0000000..a493b95 Binary files /dev/null and b/bin/net/minecraft/src/PanelCrashReport.class differ diff --git a/bin/net/minecraft/src/Particle.class b/bin/net/minecraft/src/Particle.class new file mode 100644 index 0000000..e212e40 Binary files /dev/null and b/bin/net/minecraft/src/Particle.class differ diff --git a/bin/net/minecraft/src/Path.class b/bin/net/minecraft/src/Path.class new file mode 100644 index 0000000..35fb4a4 Binary files /dev/null and b/bin/net/minecraft/src/Path.class differ diff --git a/bin/net/minecraft/src/PathEntity.class b/bin/net/minecraft/src/PathEntity.class new file mode 100644 index 0000000..3c52add Binary files /dev/null and b/bin/net/minecraft/src/PathEntity.class differ diff --git a/bin/net/minecraft/src/PathFinder.class b/bin/net/minecraft/src/PathFinder.class new file mode 100644 index 0000000..92f7c7b Binary files /dev/null and b/bin/net/minecraft/src/PathFinder.class differ diff --git a/bin/net/minecraft/src/PathNavigate.class b/bin/net/minecraft/src/PathNavigate.class new file mode 100644 index 0000000..1ac6f18 Binary files /dev/null and b/bin/net/minecraft/src/PathNavigate.class differ diff --git a/bin/net/minecraft/src/PathPoint.class b/bin/net/minecraft/src/PathPoint.class new file mode 100644 index 0000000..d5064df Binary files /dev/null and b/bin/net/minecraft/src/PathPoint.class differ diff --git a/bin/net/minecraft/src/PlayerCapabilities.class b/bin/net/minecraft/src/PlayerCapabilities.class new file mode 100644 index 0000000..5527449 Binary files /dev/null and b/bin/net/minecraft/src/PlayerCapabilities.class differ diff --git a/bin/net/minecraft/src/PlayerControllerMP.class b/bin/net/minecraft/src/PlayerControllerMP.class new file mode 100644 index 0000000..16c370b Binary files /dev/null and b/bin/net/minecraft/src/PlayerControllerMP.class differ diff --git a/bin/net/minecraft/src/PlayerInstance.class b/bin/net/minecraft/src/PlayerInstance.class new file mode 100644 index 0000000..217e566 Binary files /dev/null and b/bin/net/minecraft/src/PlayerInstance.class differ diff --git a/bin/net/minecraft/src/PlayerManager.class b/bin/net/minecraft/src/PlayerManager.class new file mode 100644 index 0000000..ce6e6fa Binary files /dev/null and b/bin/net/minecraft/src/PlayerManager.class differ diff --git a/bin/net/minecraft/src/PlayerNotFoundException.class b/bin/net/minecraft/src/PlayerNotFoundException.class new file mode 100644 index 0000000..4fee441 Binary files /dev/null and b/bin/net/minecraft/src/PlayerNotFoundException.class differ diff --git a/bin/net/minecraft/src/PlayerPositionComparator.class b/bin/net/minecraft/src/PlayerPositionComparator.class new file mode 100644 index 0000000..20cc270 Binary files /dev/null and b/bin/net/minecraft/src/PlayerPositionComparator.class differ diff --git a/bin/net/minecraft/src/PlayerSelector.class b/bin/net/minecraft/src/PlayerSelector.class new file mode 100644 index 0000000..376f134 Binary files /dev/null and b/bin/net/minecraft/src/PlayerSelector.class differ diff --git a/bin/net/minecraft/src/PlayerUsageSnooper.class b/bin/net/minecraft/src/PlayerUsageSnooper.class new file mode 100644 index 0000000..571720e Binary files /dev/null and b/bin/net/minecraft/src/PlayerUsageSnooper.class differ diff --git a/bin/net/minecraft/src/PlayerUsageSnooperThread.class b/bin/net/minecraft/src/PlayerUsageSnooperThread.class new file mode 100644 index 0000000..1d91b6e Binary files /dev/null and b/bin/net/minecraft/src/PlayerUsageSnooperThread.class differ diff --git a/bin/net/minecraft/src/PortalPosition.class b/bin/net/minecraft/src/PortalPosition.class new file mode 100644 index 0000000..0e021c2 Binary files /dev/null and b/bin/net/minecraft/src/PortalPosition.class differ diff --git a/bin/net/minecraft/src/PositionImpl.class b/bin/net/minecraft/src/PositionImpl.class new file mode 100644 index 0000000..36e525e Binary files /dev/null and b/bin/net/minecraft/src/PositionImpl.class differ diff --git a/bin/net/minecraft/src/PositionTextureVertex.class b/bin/net/minecraft/src/PositionTextureVertex.class new file mode 100644 index 0000000..181a4c8 Binary files /dev/null and b/bin/net/minecraft/src/PositionTextureVertex.class differ diff --git a/bin/net/minecraft/src/Potion.class b/bin/net/minecraft/src/Potion.class new file mode 100644 index 0000000..809e4d7 Binary files /dev/null and b/bin/net/minecraft/src/Potion.class differ diff --git a/bin/net/minecraft/src/PotionEffect.class b/bin/net/minecraft/src/PotionEffect.class new file mode 100644 index 0000000..65f5a87 Binary files /dev/null and b/bin/net/minecraft/src/PotionEffect.class differ diff --git a/bin/net/minecraft/src/PotionHealth.class b/bin/net/minecraft/src/PotionHealth.class new file mode 100644 index 0000000..5320c44 Binary files /dev/null and b/bin/net/minecraft/src/PotionHealth.class differ diff --git a/bin/net/minecraft/src/PotionHelper.class b/bin/net/minecraft/src/PotionHelper.class new file mode 100644 index 0000000..ef45a92 Binary files /dev/null and b/bin/net/minecraft/src/PotionHelper.class differ diff --git a/bin/net/minecraft/src/Profiler.class b/bin/net/minecraft/src/Profiler.class new file mode 100644 index 0000000..f6a627c Binary files /dev/null and b/bin/net/minecraft/src/Profiler.class differ diff --git a/bin/net/minecraft/src/ProfilerResult.class b/bin/net/minecraft/src/ProfilerResult.class new file mode 100644 index 0000000..dcd613c Binary files /dev/null and b/bin/net/minecraft/src/ProfilerResult.class differ diff --git a/bin/net/minecraft/src/PropertyManager.class b/bin/net/minecraft/src/PropertyManager.class new file mode 100644 index 0000000..ebd2822 Binary files /dev/null and b/bin/net/minecraft/src/PropertyManager.class differ diff --git a/bin/net/minecraft/src/RConConsoleSource.class b/bin/net/minecraft/src/RConConsoleSource.class new file mode 100644 index 0000000..babc1d0 Binary files /dev/null and b/bin/net/minecraft/src/RConConsoleSource.class differ diff --git a/bin/net/minecraft/src/RConOutputStream.class b/bin/net/minecraft/src/RConOutputStream.class new file mode 100644 index 0000000..95d141d Binary files /dev/null and b/bin/net/minecraft/src/RConOutputStream.class differ diff --git a/bin/net/minecraft/src/RConThreadBase.class b/bin/net/minecraft/src/RConThreadBase.class new file mode 100644 index 0000000..00ae2c1 Binary files /dev/null and b/bin/net/minecraft/src/RConThreadBase.class differ diff --git a/bin/net/minecraft/src/RConThreadClient.class b/bin/net/minecraft/src/RConThreadClient.class new file mode 100644 index 0000000..d1c1577 Binary files /dev/null and b/bin/net/minecraft/src/RConThreadClient.class differ diff --git a/bin/net/minecraft/src/RConThreadMain.class b/bin/net/minecraft/src/RConThreadMain.class new file mode 100644 index 0000000..fcb9bca Binary files /dev/null and b/bin/net/minecraft/src/RConThreadMain.class differ diff --git a/bin/net/minecraft/src/RConThreadQuery.class b/bin/net/minecraft/src/RConThreadQuery.class new file mode 100644 index 0000000..d6bf399 Binary files /dev/null and b/bin/net/minecraft/src/RConThreadQuery.class differ diff --git a/bin/net/minecraft/src/RConThreadQueryAuth.class b/bin/net/minecraft/src/RConThreadQueryAuth.class new file mode 100644 index 0000000..6c10036 Binary files /dev/null and b/bin/net/minecraft/src/RConThreadQueryAuth.class differ diff --git a/bin/net/minecraft/src/RConUtils.class b/bin/net/minecraft/src/RConUtils.class new file mode 100644 index 0000000..b41bc22 Binary files /dev/null and b/bin/net/minecraft/src/RConUtils.class differ diff --git a/bin/net/minecraft/src/RandomPositionGenerator.class b/bin/net/minecraft/src/RandomPositionGenerator.class new file mode 100644 index 0000000..d314a9a Binary files /dev/null and b/bin/net/minecraft/src/RandomPositionGenerator.class differ diff --git a/bin/net/minecraft/src/RecipeFireworks.class b/bin/net/minecraft/src/RecipeFireworks.class new file mode 100644 index 0000000..208e7c1 Binary files /dev/null and b/bin/net/minecraft/src/RecipeFireworks.class differ diff --git a/bin/net/minecraft/src/RecipeSorter.class b/bin/net/minecraft/src/RecipeSorter.class new file mode 100644 index 0000000..4c9c13d Binary files /dev/null and b/bin/net/minecraft/src/RecipeSorter.class differ diff --git a/bin/net/minecraft/src/RecipesArmor.class b/bin/net/minecraft/src/RecipesArmor.class new file mode 100644 index 0000000..21484ca Binary files /dev/null and b/bin/net/minecraft/src/RecipesArmor.class differ diff --git a/bin/net/minecraft/src/RecipesArmorDyes.class b/bin/net/minecraft/src/RecipesArmorDyes.class new file mode 100644 index 0000000..e4d6721 Binary files /dev/null and b/bin/net/minecraft/src/RecipesArmorDyes.class differ diff --git a/bin/net/minecraft/src/RecipesCrafting.class b/bin/net/minecraft/src/RecipesCrafting.class new file mode 100644 index 0000000..7bde1d2 Binary files /dev/null and b/bin/net/minecraft/src/RecipesCrafting.class differ diff --git a/bin/net/minecraft/src/RecipesDyes.class b/bin/net/minecraft/src/RecipesDyes.class new file mode 100644 index 0000000..e0de8b8 Binary files /dev/null and b/bin/net/minecraft/src/RecipesDyes.class differ diff --git a/bin/net/minecraft/src/RecipesFood.class b/bin/net/minecraft/src/RecipesFood.class new file mode 100644 index 0000000..e8a7651 Binary files /dev/null and b/bin/net/minecraft/src/RecipesFood.class differ diff --git a/bin/net/minecraft/src/RecipesIngots.class b/bin/net/minecraft/src/RecipesIngots.class new file mode 100644 index 0000000..629cd67 Binary files /dev/null and b/bin/net/minecraft/src/RecipesIngots.class differ diff --git a/bin/net/minecraft/src/RecipesMapCloning.class b/bin/net/minecraft/src/RecipesMapCloning.class new file mode 100644 index 0000000..a097832 Binary files /dev/null and b/bin/net/minecraft/src/RecipesMapCloning.class differ diff --git a/bin/net/minecraft/src/RecipesMapExtending.class b/bin/net/minecraft/src/RecipesMapExtending.class new file mode 100644 index 0000000..2fcd574 Binary files /dev/null and b/bin/net/minecraft/src/RecipesMapExtending.class differ diff --git a/bin/net/minecraft/src/RecipesTools.class b/bin/net/minecraft/src/RecipesTools.class new file mode 100644 index 0000000..e82b2d4 Binary files /dev/null and b/bin/net/minecraft/src/RecipesTools.class differ diff --git a/bin/net/minecraft/src/RecipesWeapons.class b/bin/net/minecraft/src/RecipesWeapons.class new file mode 100644 index 0000000..9fe00fe Binary files /dev/null and b/bin/net/minecraft/src/RecipesWeapons.class differ diff --git a/bin/net/minecraft/src/Rect2i.class b/bin/net/minecraft/src/Rect2i.class new file mode 100644 index 0000000..ca3e1f1 Binary files /dev/null and b/bin/net/minecraft/src/Rect2i.class differ diff --git a/bin/net/minecraft/src/RedstoneUpdateInfo.class b/bin/net/minecraft/src/RedstoneUpdateInfo.class new file mode 100644 index 0000000..ea29462 Binary files /dev/null and b/bin/net/minecraft/src/RedstoneUpdateInfo.class differ diff --git a/bin/net/minecraft/src/RegionFile.class b/bin/net/minecraft/src/RegionFile.class new file mode 100644 index 0000000..e0ba76f Binary files /dev/null and b/bin/net/minecraft/src/RegionFile.class differ diff --git a/bin/net/minecraft/src/RegionFileCache.class b/bin/net/minecraft/src/RegionFileCache.class new file mode 100644 index 0000000..8e5299e Binary files /dev/null and b/bin/net/minecraft/src/RegionFileCache.class differ diff --git a/bin/net/minecraft/src/RegionFileChunkBuffer.class b/bin/net/minecraft/src/RegionFileChunkBuffer.class new file mode 100644 index 0000000..1bd39b9 Binary files /dev/null and b/bin/net/minecraft/src/RegionFileChunkBuffer.class differ diff --git a/bin/net/minecraft/src/RegistryDefaulted.class b/bin/net/minecraft/src/RegistryDefaulted.class new file mode 100644 index 0000000..9de280d Binary files /dev/null and b/bin/net/minecraft/src/RegistryDefaulted.class differ diff --git a/bin/net/minecraft/src/RegistrySimple.class b/bin/net/minecraft/src/RegistrySimple.class new file mode 100644 index 0000000..ce5a6dc Binary files /dev/null and b/bin/net/minecraft/src/RegistrySimple.class differ diff --git a/bin/net/minecraft/src/Render.class b/bin/net/minecraft/src/Render.class new file mode 100644 index 0000000..278ab97 Binary files /dev/null and b/bin/net/minecraft/src/Render.class differ diff --git a/bin/net/minecraft/src/RenderArrow.class b/bin/net/minecraft/src/RenderArrow.class new file mode 100644 index 0000000..a326a8d Binary files /dev/null and b/bin/net/minecraft/src/RenderArrow.class differ diff --git a/bin/net/minecraft/src/RenderBat.class b/bin/net/minecraft/src/RenderBat.class new file mode 100644 index 0000000..d85b692 Binary files /dev/null and b/bin/net/minecraft/src/RenderBat.class differ diff --git a/bin/net/minecraft/src/RenderBiped.class b/bin/net/minecraft/src/RenderBiped.class new file mode 100644 index 0000000..c50cdf5 Binary files /dev/null and b/bin/net/minecraft/src/RenderBiped.class differ diff --git a/bin/net/minecraft/src/RenderBlaze.class b/bin/net/minecraft/src/RenderBlaze.class new file mode 100644 index 0000000..4e861ed Binary files /dev/null and b/bin/net/minecraft/src/RenderBlaze.class differ diff --git a/bin/net/minecraft/src/RenderBlocks.class b/bin/net/minecraft/src/RenderBlocks.class new file mode 100644 index 0000000..dc13dd6 Binary files /dev/null and b/bin/net/minecraft/src/RenderBlocks.class differ diff --git a/bin/net/minecraft/src/RenderBoat.class b/bin/net/minecraft/src/RenderBoat.class new file mode 100644 index 0000000..b4298a1 Binary files /dev/null and b/bin/net/minecraft/src/RenderBoat.class differ diff --git a/bin/net/minecraft/src/RenderChicken.class b/bin/net/minecraft/src/RenderChicken.class new file mode 100644 index 0000000..a5b39aa Binary files /dev/null and b/bin/net/minecraft/src/RenderChicken.class differ diff --git a/bin/net/minecraft/src/RenderCow.class b/bin/net/minecraft/src/RenderCow.class new file mode 100644 index 0000000..c9aacc4 Binary files /dev/null and b/bin/net/minecraft/src/RenderCow.class differ diff --git a/bin/net/minecraft/src/RenderCreeper.class b/bin/net/minecraft/src/RenderCreeper.class new file mode 100644 index 0000000..0f111a3 Binary files /dev/null and b/bin/net/minecraft/src/RenderCreeper.class differ diff --git a/bin/net/minecraft/src/RenderDragon.class b/bin/net/minecraft/src/RenderDragon.class new file mode 100644 index 0000000..f4acb5d Binary files /dev/null and b/bin/net/minecraft/src/RenderDragon.class differ diff --git a/bin/net/minecraft/src/RenderEnchantmentTable.class b/bin/net/minecraft/src/RenderEnchantmentTable.class new file mode 100644 index 0000000..9eeaca0 Binary files /dev/null and b/bin/net/minecraft/src/RenderEnchantmentTable.class differ diff --git a/bin/net/minecraft/src/RenderEndPortal.class b/bin/net/minecraft/src/RenderEndPortal.class new file mode 100644 index 0000000..6b561f5 Binary files /dev/null and b/bin/net/minecraft/src/RenderEndPortal.class differ diff --git a/bin/net/minecraft/src/RenderEnderCrystal.class b/bin/net/minecraft/src/RenderEnderCrystal.class new file mode 100644 index 0000000..3d50413 Binary files /dev/null and b/bin/net/minecraft/src/RenderEnderCrystal.class differ diff --git a/bin/net/minecraft/src/RenderEnderman.class b/bin/net/minecraft/src/RenderEnderman.class new file mode 100644 index 0000000..39473d6 Binary files /dev/null and b/bin/net/minecraft/src/RenderEnderman.class differ diff --git a/bin/net/minecraft/src/RenderEngine.class b/bin/net/minecraft/src/RenderEngine.class new file mode 100644 index 0000000..1b24031 Binary files /dev/null and b/bin/net/minecraft/src/RenderEngine.class differ diff --git a/bin/net/minecraft/src/RenderEntity.class b/bin/net/minecraft/src/RenderEntity.class new file mode 100644 index 0000000..1ea117b Binary files /dev/null and b/bin/net/minecraft/src/RenderEntity.class differ diff --git a/bin/net/minecraft/src/RenderFallingSand.class b/bin/net/minecraft/src/RenderFallingSand.class new file mode 100644 index 0000000..84659c5 Binary files /dev/null and b/bin/net/minecraft/src/RenderFallingSand.class differ diff --git a/bin/net/minecraft/src/RenderFireball.class b/bin/net/minecraft/src/RenderFireball.class new file mode 100644 index 0000000..1678413 Binary files /dev/null and b/bin/net/minecraft/src/RenderFireball.class differ diff --git a/bin/net/minecraft/src/RenderFish.class b/bin/net/minecraft/src/RenderFish.class new file mode 100644 index 0000000..704d1bc Binary files /dev/null and b/bin/net/minecraft/src/RenderFish.class differ diff --git a/bin/net/minecraft/src/RenderGhast.class b/bin/net/minecraft/src/RenderGhast.class new file mode 100644 index 0000000..f8f7323 Binary files /dev/null and b/bin/net/minecraft/src/RenderGhast.class differ diff --git a/bin/net/minecraft/src/RenderGiantZombie.class b/bin/net/minecraft/src/RenderGiantZombie.class new file mode 100644 index 0000000..90134b9 Binary files /dev/null and b/bin/net/minecraft/src/RenderGiantZombie.class differ diff --git a/bin/net/minecraft/src/RenderGlobal.class b/bin/net/minecraft/src/RenderGlobal.class new file mode 100644 index 0000000..23f7b72 Binary files /dev/null and b/bin/net/minecraft/src/RenderGlobal.class differ diff --git a/bin/net/minecraft/src/RenderHelper.class b/bin/net/minecraft/src/RenderHelper.class new file mode 100644 index 0000000..b75dd79 Binary files /dev/null and b/bin/net/minecraft/src/RenderHelper.class differ diff --git a/bin/net/minecraft/src/RenderIronGolem.class b/bin/net/minecraft/src/RenderIronGolem.class new file mode 100644 index 0000000..a6a3dda Binary files /dev/null and b/bin/net/minecraft/src/RenderIronGolem.class differ diff --git a/bin/net/minecraft/src/RenderItem.class b/bin/net/minecraft/src/RenderItem.class new file mode 100644 index 0000000..0b61912 Binary files /dev/null and b/bin/net/minecraft/src/RenderItem.class differ diff --git a/bin/net/minecraft/src/RenderItemFrame.class b/bin/net/minecraft/src/RenderItemFrame.class new file mode 100644 index 0000000..4ba847a Binary files /dev/null and b/bin/net/minecraft/src/RenderItemFrame.class differ diff --git a/bin/net/minecraft/src/RenderLightningBolt.class b/bin/net/minecraft/src/RenderLightningBolt.class new file mode 100644 index 0000000..30a85c2 Binary files /dev/null and b/bin/net/minecraft/src/RenderLightningBolt.class differ diff --git a/bin/net/minecraft/src/RenderList.class b/bin/net/minecraft/src/RenderList.class new file mode 100644 index 0000000..1eae655 Binary files /dev/null and b/bin/net/minecraft/src/RenderList.class differ diff --git a/bin/net/minecraft/src/RenderLiving.class b/bin/net/minecraft/src/RenderLiving.class new file mode 100644 index 0000000..227da9d Binary files /dev/null and b/bin/net/minecraft/src/RenderLiving.class differ diff --git a/bin/net/minecraft/src/RenderMagmaCube.class b/bin/net/minecraft/src/RenderMagmaCube.class new file mode 100644 index 0000000..e2bc6df Binary files /dev/null and b/bin/net/minecraft/src/RenderMagmaCube.class differ diff --git a/bin/net/minecraft/src/RenderManager.class b/bin/net/minecraft/src/RenderManager.class new file mode 100644 index 0000000..ab5f6bd Binary files /dev/null and b/bin/net/minecraft/src/RenderManager.class differ diff --git a/bin/net/minecraft/src/RenderMinecart.class b/bin/net/minecraft/src/RenderMinecart.class new file mode 100644 index 0000000..6803954 Binary files /dev/null and b/bin/net/minecraft/src/RenderMinecart.class differ diff --git a/bin/net/minecraft/src/RenderMinecartMobSpawner.class b/bin/net/minecraft/src/RenderMinecartMobSpawner.class new file mode 100644 index 0000000..0a0279c Binary files /dev/null and b/bin/net/minecraft/src/RenderMinecartMobSpawner.class differ diff --git a/bin/net/minecraft/src/RenderMooshroom.class b/bin/net/minecraft/src/RenderMooshroom.class new file mode 100644 index 0000000..964293a Binary files /dev/null and b/bin/net/minecraft/src/RenderMooshroom.class differ diff --git a/bin/net/minecraft/src/RenderOcelot.class b/bin/net/minecraft/src/RenderOcelot.class new file mode 100644 index 0000000..74a0937 Binary files /dev/null and b/bin/net/minecraft/src/RenderOcelot.class differ diff --git a/bin/net/minecraft/src/RenderPainting.class b/bin/net/minecraft/src/RenderPainting.class new file mode 100644 index 0000000..52015fc Binary files /dev/null and b/bin/net/minecraft/src/RenderPainting.class differ diff --git a/bin/net/minecraft/src/RenderPig.class b/bin/net/minecraft/src/RenderPig.class new file mode 100644 index 0000000..578a455 Binary files /dev/null and b/bin/net/minecraft/src/RenderPig.class differ diff --git a/bin/net/minecraft/src/RenderPlayer.class b/bin/net/minecraft/src/RenderPlayer.class new file mode 100644 index 0000000..6dbfd04 Binary files /dev/null and b/bin/net/minecraft/src/RenderPlayer.class differ diff --git a/bin/net/minecraft/src/RenderSheep.class b/bin/net/minecraft/src/RenderSheep.class new file mode 100644 index 0000000..c0d5e46 Binary files /dev/null and b/bin/net/minecraft/src/RenderSheep.class differ diff --git a/bin/net/minecraft/src/RenderSilverfish.class b/bin/net/minecraft/src/RenderSilverfish.class new file mode 100644 index 0000000..89deb56 Binary files /dev/null and b/bin/net/minecraft/src/RenderSilverfish.class differ diff --git a/bin/net/minecraft/src/RenderSkeleton.class b/bin/net/minecraft/src/RenderSkeleton.class new file mode 100644 index 0000000..5a2d4e0 Binary files /dev/null and b/bin/net/minecraft/src/RenderSkeleton.class differ diff --git a/bin/net/minecraft/src/RenderSlime.class b/bin/net/minecraft/src/RenderSlime.class new file mode 100644 index 0000000..fa9e80c Binary files /dev/null and b/bin/net/minecraft/src/RenderSlime.class differ diff --git a/bin/net/minecraft/src/RenderSnowMan.class b/bin/net/minecraft/src/RenderSnowMan.class new file mode 100644 index 0000000..b1f8aad Binary files /dev/null and b/bin/net/minecraft/src/RenderSnowMan.class differ diff --git a/bin/net/minecraft/src/RenderSnowball.class b/bin/net/minecraft/src/RenderSnowball.class new file mode 100644 index 0000000..cb4a62b Binary files /dev/null and b/bin/net/minecraft/src/RenderSnowball.class differ diff --git a/bin/net/minecraft/src/RenderSorter.class b/bin/net/minecraft/src/RenderSorter.class new file mode 100644 index 0000000..46da14a Binary files /dev/null and b/bin/net/minecraft/src/RenderSorter.class differ diff --git a/bin/net/minecraft/src/RenderSpider.class b/bin/net/minecraft/src/RenderSpider.class new file mode 100644 index 0000000..3c282a2 Binary files /dev/null and b/bin/net/minecraft/src/RenderSpider.class differ diff --git a/bin/net/minecraft/src/RenderSquid.class b/bin/net/minecraft/src/RenderSquid.class new file mode 100644 index 0000000..4a0a94f Binary files /dev/null and b/bin/net/minecraft/src/RenderSquid.class differ diff --git a/bin/net/minecraft/src/RenderTNTPrimed.class b/bin/net/minecraft/src/RenderTNTPrimed.class new file mode 100644 index 0000000..a87f601 Binary files /dev/null and b/bin/net/minecraft/src/RenderTNTPrimed.class differ diff --git a/bin/net/minecraft/src/RenderTntMinecart.class b/bin/net/minecraft/src/RenderTntMinecart.class new file mode 100644 index 0000000..90becfc Binary files /dev/null and b/bin/net/minecraft/src/RenderTntMinecart.class differ diff --git a/bin/net/minecraft/src/RenderVillager.class b/bin/net/minecraft/src/RenderVillager.class new file mode 100644 index 0000000..7a78580 Binary files /dev/null and b/bin/net/minecraft/src/RenderVillager.class differ diff --git a/bin/net/minecraft/src/RenderWitch.class b/bin/net/minecraft/src/RenderWitch.class new file mode 100644 index 0000000..95cc9a5 Binary files /dev/null and b/bin/net/minecraft/src/RenderWitch.class differ diff --git a/bin/net/minecraft/src/RenderWither.class b/bin/net/minecraft/src/RenderWither.class new file mode 100644 index 0000000..1c45d9d Binary files /dev/null and b/bin/net/minecraft/src/RenderWither.class differ diff --git a/bin/net/minecraft/src/RenderWitherSkull.class b/bin/net/minecraft/src/RenderWitherSkull.class new file mode 100644 index 0000000..a2f094b Binary files /dev/null and b/bin/net/minecraft/src/RenderWitherSkull.class differ diff --git a/bin/net/minecraft/src/RenderWolf.class b/bin/net/minecraft/src/RenderWolf.class new file mode 100644 index 0000000..51ec9cc Binary files /dev/null and b/bin/net/minecraft/src/RenderWolf.class differ diff --git a/bin/net/minecraft/src/RenderXPOrb.class b/bin/net/minecraft/src/RenderXPOrb.class new file mode 100644 index 0000000..f3e9abb Binary files /dev/null and b/bin/net/minecraft/src/RenderXPOrb.class differ diff --git a/bin/net/minecraft/src/RenderZombie.class b/bin/net/minecraft/src/RenderZombie.class new file mode 100644 index 0000000..3896449 Binary files /dev/null and b/bin/net/minecraft/src/RenderZombie.class differ diff --git a/bin/net/minecraft/src/ReportedException.class b/bin/net/minecraft/src/ReportedException.class new file mode 100644 index 0000000..be06af1 Binary files /dev/null and b/bin/net/minecraft/src/ReportedException.class differ diff --git a/bin/net/minecraft/src/Request.class b/bin/net/minecraft/src/Request.class new file mode 100644 index 0000000..e3c07f8 Binary files /dev/null and b/bin/net/minecraft/src/Request.class differ diff --git a/bin/net/minecraft/src/RequestDelete.class b/bin/net/minecraft/src/RequestDelete.class new file mode 100644 index 0000000..a8a642d Binary files /dev/null and b/bin/net/minecraft/src/RequestDelete.class differ diff --git a/bin/net/minecraft/src/RequestGet.class b/bin/net/minecraft/src/RequestGet.class new file mode 100644 index 0000000..870cbbd Binary files /dev/null and b/bin/net/minecraft/src/RequestGet.class differ diff --git a/bin/net/minecraft/src/RequestPost.class b/bin/net/minecraft/src/RequestPost.class new file mode 100644 index 0000000..0249b13 Binary files /dev/null and b/bin/net/minecraft/src/RequestPost.class differ diff --git a/bin/net/minecraft/src/RequestPut.class b/bin/net/minecraft/src/RequestPut.class new file mode 100644 index 0000000..9bee7c3 Binary files /dev/null and b/bin/net/minecraft/src/RequestPut.class differ diff --git a/bin/net/minecraft/src/RunnableTitleScreen.class b/bin/net/minecraft/src/RunnableTitleScreen.class new file mode 100644 index 0000000..36e584d Binary files /dev/null and b/bin/net/minecraft/src/RunnableTitleScreen.class differ diff --git a/bin/net/minecraft/src/SaveFormatComparator.class b/bin/net/minecraft/src/SaveFormatComparator.class new file mode 100644 index 0000000..b94cbd8 Binary files /dev/null and b/bin/net/minecraft/src/SaveFormatComparator.class differ diff --git a/bin/net/minecraft/src/SaveFormatOld.class b/bin/net/minecraft/src/SaveFormatOld.class new file mode 100644 index 0000000..183b8ea Binary files /dev/null and b/bin/net/minecraft/src/SaveFormatOld.class differ diff --git a/bin/net/minecraft/src/SaveHandler.class b/bin/net/minecraft/src/SaveHandler.class new file mode 100644 index 0000000..c5cc382 Binary files /dev/null and b/bin/net/minecraft/src/SaveHandler.class differ diff --git a/bin/net/minecraft/src/SaveHandlerMP.class b/bin/net/minecraft/src/SaveHandlerMP.class new file mode 100644 index 0000000..938448f Binary files /dev/null and b/bin/net/minecraft/src/SaveHandlerMP.class differ diff --git a/bin/net/minecraft/src/ScaledResolution.class b/bin/net/minecraft/src/ScaledResolution.class new file mode 100644 index 0000000..7998311 Binary files /dev/null and b/bin/net/minecraft/src/ScaledResolution.class differ diff --git a/bin/net/minecraft/src/ScheduledSound.class b/bin/net/minecraft/src/ScheduledSound.class new file mode 100644 index 0000000..ea8895c Binary files /dev/null and b/bin/net/minecraft/src/ScheduledSound.class differ diff --git a/bin/net/minecraft/src/Score.class b/bin/net/minecraft/src/Score.class new file mode 100644 index 0000000..844f50b Binary files /dev/null and b/bin/net/minecraft/src/Score.class differ diff --git a/bin/net/minecraft/src/ScoreComparator.class b/bin/net/minecraft/src/ScoreComparator.class new file mode 100644 index 0000000..a1a0f8a Binary files /dev/null and b/bin/net/minecraft/src/ScoreComparator.class differ diff --git a/bin/net/minecraft/src/ScoreDummyCriteria.class b/bin/net/minecraft/src/ScoreDummyCriteria.class new file mode 100644 index 0000000..255482c Binary files /dev/null and b/bin/net/minecraft/src/ScoreDummyCriteria.class differ diff --git a/bin/net/minecraft/src/ScoreHealthCriteria.class b/bin/net/minecraft/src/ScoreHealthCriteria.class new file mode 100644 index 0000000..f7358d6 Binary files /dev/null and b/bin/net/minecraft/src/ScoreHealthCriteria.class differ diff --git a/bin/net/minecraft/src/ScoreObjective.class b/bin/net/minecraft/src/ScoreObjective.class new file mode 100644 index 0000000..d22f91d Binary files /dev/null and b/bin/net/minecraft/src/ScoreObjective.class differ diff --git a/bin/net/minecraft/src/ScoreObjectiveCriteria.class b/bin/net/minecraft/src/ScoreObjectiveCriteria.class new file mode 100644 index 0000000..62fdab4 Binary files /dev/null and b/bin/net/minecraft/src/ScoreObjectiveCriteria.class differ diff --git a/bin/net/minecraft/src/ScorePlayerTeam.class b/bin/net/minecraft/src/ScorePlayerTeam.class new file mode 100644 index 0000000..240354f Binary files /dev/null and b/bin/net/minecraft/src/ScorePlayerTeam.class differ diff --git a/bin/net/minecraft/src/Scoreboard.class b/bin/net/minecraft/src/Scoreboard.class new file mode 100644 index 0000000..0aa6e02 Binary files /dev/null and b/bin/net/minecraft/src/Scoreboard.class differ diff --git a/bin/net/minecraft/src/ScoreboardSaveData.class b/bin/net/minecraft/src/ScoreboardSaveData.class new file mode 100644 index 0000000..dcb5599 Binary files /dev/null and b/bin/net/minecraft/src/ScoreboardSaveData.class differ diff --git a/bin/net/minecraft/src/ScreenChatOptions.class b/bin/net/minecraft/src/ScreenChatOptions.class new file mode 100644 index 0000000..23d591d Binary files /dev/null and b/bin/net/minecraft/src/ScreenChatOptions.class differ diff --git a/bin/net/minecraft/src/ScreenShotHelper.class b/bin/net/minecraft/src/ScreenShotHelper.class new file mode 100644 index 0000000..e883903 Binary files /dev/null and b/bin/net/minecraft/src/ScreenShotHelper.class differ diff --git a/bin/net/minecraft/src/SelectionListBase.class b/bin/net/minecraft/src/SelectionListBase.class new file mode 100644 index 0000000..87ec8c7 Binary files /dev/null and b/bin/net/minecraft/src/SelectionListBase.class differ diff --git a/bin/net/minecraft/src/SelectionListInvited.class b/bin/net/minecraft/src/SelectionListInvited.class new file mode 100644 index 0000000..e91bd90 Binary files /dev/null and b/bin/net/minecraft/src/SelectionListInvited.class differ diff --git a/bin/net/minecraft/src/ServerAddress.class b/bin/net/minecraft/src/ServerAddress.class new file mode 100644 index 0000000..c284536 Binary files /dev/null and b/bin/net/minecraft/src/ServerAddress.class differ diff --git a/bin/net/minecraft/src/ServerBlockEvent.class b/bin/net/minecraft/src/ServerBlockEvent.class new file mode 100644 index 0000000..f0b2035 Binary files /dev/null and b/bin/net/minecraft/src/ServerBlockEvent.class differ diff --git a/bin/net/minecraft/src/ServerBlockEventList.class b/bin/net/minecraft/src/ServerBlockEventList.class new file mode 100644 index 0000000..8dcbe6e Binary files /dev/null and b/bin/net/minecraft/src/ServerBlockEventList.class differ diff --git a/bin/net/minecraft/src/ServerCommand.class b/bin/net/minecraft/src/ServerCommand.class new file mode 100644 index 0000000..aa03c3b Binary files /dev/null and b/bin/net/minecraft/src/ServerCommand.class differ diff --git a/bin/net/minecraft/src/ServerCommandManager.class b/bin/net/minecraft/src/ServerCommandManager.class new file mode 100644 index 0000000..2a74382 Binary files /dev/null and b/bin/net/minecraft/src/ServerCommandManager.class differ diff --git a/bin/net/minecraft/src/ServerCommandScoreboard.class b/bin/net/minecraft/src/ServerCommandScoreboard.class new file mode 100644 index 0000000..26272b8 Binary files /dev/null and b/bin/net/minecraft/src/ServerCommandScoreboard.class differ diff --git a/bin/net/minecraft/src/ServerCommandTestFor.class b/bin/net/minecraft/src/ServerCommandTestFor.class new file mode 100644 index 0000000..264dd72 Binary files /dev/null and b/bin/net/minecraft/src/ServerCommandTestFor.class differ diff --git a/bin/net/minecraft/src/ServerConfigurationManager.class b/bin/net/minecraft/src/ServerConfigurationManager.class new file mode 100644 index 0000000..94b6f2d Binary files /dev/null and b/bin/net/minecraft/src/ServerConfigurationManager.class differ diff --git a/bin/net/minecraft/src/ServerData.class b/bin/net/minecraft/src/ServerData.class new file mode 100644 index 0000000..2327c08 Binary files /dev/null and b/bin/net/minecraft/src/ServerData.class differ diff --git a/bin/net/minecraft/src/ServerList.class b/bin/net/minecraft/src/ServerList.class new file mode 100644 index 0000000..2f82095 Binary files /dev/null and b/bin/net/minecraft/src/ServerList.class differ diff --git a/bin/net/minecraft/src/ServerListenThread.class b/bin/net/minecraft/src/ServerListenThread.class new file mode 100644 index 0000000..031c595 Binary files /dev/null and b/bin/net/minecraft/src/ServerListenThread.class differ diff --git a/bin/net/minecraft/src/ServerScoreboard.class b/bin/net/minecraft/src/ServerScoreboard.class new file mode 100644 index 0000000..8a76533 Binary files /dev/null and b/bin/net/minecraft/src/ServerScoreboard.class differ diff --git a/bin/net/minecraft/src/Session.class b/bin/net/minecraft/src/Session.class new file mode 100644 index 0000000..4056a68 Binary files /dev/null and b/bin/net/minecraft/src/Session.class differ diff --git a/bin/net/minecraft/src/ShapedRecipes.class b/bin/net/minecraft/src/ShapedRecipes.class new file mode 100644 index 0000000..c8dc639 Binary files /dev/null and b/bin/net/minecraft/src/ShapedRecipes.class differ diff --git a/bin/net/minecraft/src/ShapelessRecipes.class b/bin/net/minecraft/src/ShapelessRecipes.class new file mode 100644 index 0000000..612cd21 Binary files /dev/null and b/bin/net/minecraft/src/ShapelessRecipes.class differ diff --git a/bin/net/minecraft/src/Slot.class b/bin/net/minecraft/src/Slot.class new file mode 100644 index 0000000..b0da9f8 Binary files /dev/null and b/bin/net/minecraft/src/Slot.class differ diff --git a/bin/net/minecraft/src/SlotArmor.class b/bin/net/minecraft/src/SlotArmor.class new file mode 100644 index 0000000..588387e Binary files /dev/null and b/bin/net/minecraft/src/SlotArmor.class differ diff --git a/bin/net/minecraft/src/SlotBeacon.class b/bin/net/minecraft/src/SlotBeacon.class new file mode 100644 index 0000000..36aee45 Binary files /dev/null and b/bin/net/minecraft/src/SlotBeacon.class differ diff --git a/bin/net/minecraft/src/SlotBrewingStandIngredient.class b/bin/net/minecraft/src/SlotBrewingStandIngredient.class new file mode 100644 index 0000000..681cebd Binary files /dev/null and b/bin/net/minecraft/src/SlotBrewingStandIngredient.class differ diff --git a/bin/net/minecraft/src/SlotBrewingStandPotion.class b/bin/net/minecraft/src/SlotBrewingStandPotion.class new file mode 100644 index 0000000..4f4d556 Binary files /dev/null and b/bin/net/minecraft/src/SlotBrewingStandPotion.class differ diff --git a/bin/net/minecraft/src/SlotCrafting.class b/bin/net/minecraft/src/SlotCrafting.class new file mode 100644 index 0000000..255abae Binary files /dev/null and b/bin/net/minecraft/src/SlotCrafting.class differ diff --git a/bin/net/minecraft/src/SlotCreativeInventory.class b/bin/net/minecraft/src/SlotCreativeInventory.class new file mode 100644 index 0000000..5c9a501 Binary files /dev/null and b/bin/net/minecraft/src/SlotCreativeInventory.class differ diff --git a/bin/net/minecraft/src/SlotEnchantment.class b/bin/net/minecraft/src/SlotEnchantment.class new file mode 100644 index 0000000..264b53f Binary files /dev/null and b/bin/net/minecraft/src/SlotEnchantment.class differ diff --git a/bin/net/minecraft/src/SlotEnchantmentTable.class b/bin/net/minecraft/src/SlotEnchantmentTable.class new file mode 100644 index 0000000..3c7c52e Binary files /dev/null and b/bin/net/minecraft/src/SlotEnchantmentTable.class differ diff --git a/bin/net/minecraft/src/SlotFurnace.class b/bin/net/minecraft/src/SlotFurnace.class new file mode 100644 index 0000000..b5a66f9 Binary files /dev/null and b/bin/net/minecraft/src/SlotFurnace.class differ diff --git a/bin/net/minecraft/src/SlotMerchantResult.class b/bin/net/minecraft/src/SlotMerchantResult.class new file mode 100644 index 0000000..0ee86af Binary files /dev/null and b/bin/net/minecraft/src/SlotMerchantResult.class differ diff --git a/bin/net/minecraft/src/SlotRepair.class b/bin/net/minecraft/src/SlotRepair.class new file mode 100644 index 0000000..0c08a5d Binary files /dev/null and b/bin/net/minecraft/src/SlotRepair.class differ diff --git a/bin/net/minecraft/src/SorterStatsBlock.class b/bin/net/minecraft/src/SorterStatsBlock.class new file mode 100644 index 0000000..22824cf Binary files /dev/null and b/bin/net/minecraft/src/SorterStatsBlock.class differ diff --git a/bin/net/minecraft/src/SorterStatsItem.class b/bin/net/minecraft/src/SorterStatsItem.class new file mode 100644 index 0000000..72e0e73 Binary files /dev/null and b/bin/net/minecraft/src/SorterStatsItem.class differ diff --git a/bin/net/minecraft/src/SoundManager.class b/bin/net/minecraft/src/SoundManager.class new file mode 100644 index 0000000..d48fcc6 Binary files /dev/null and b/bin/net/minecraft/src/SoundManager.class differ diff --git a/bin/net/minecraft/src/SoundPool.class b/bin/net/minecraft/src/SoundPool.class new file mode 100644 index 0000000..6fbf363 Binary files /dev/null and b/bin/net/minecraft/src/SoundPool.class differ diff --git a/bin/net/minecraft/src/SoundPoolEntry.class b/bin/net/minecraft/src/SoundPoolEntry.class new file mode 100644 index 0000000..923ba6d Binary files /dev/null and b/bin/net/minecraft/src/SoundPoolEntry.class differ diff --git a/bin/net/minecraft/src/SoundUpdaterMinecart.class b/bin/net/minecraft/src/SoundUpdaterMinecart.class new file mode 100644 index 0000000..1ca8ef4 Binary files /dev/null and b/bin/net/minecraft/src/SoundUpdaterMinecart.class differ diff --git a/bin/net/minecraft/src/SpawnListEntry.class b/bin/net/minecraft/src/SpawnListEntry.class new file mode 100644 index 0000000..4aaf4d1 Binary files /dev/null and b/bin/net/minecraft/src/SpawnListEntry.class differ diff --git a/bin/net/minecraft/src/SpawnerAnimals.class b/bin/net/minecraft/src/SpawnerAnimals.class new file mode 100644 index 0000000..da1ec81 Binary files /dev/null and b/bin/net/minecraft/src/SpawnerAnimals.class differ diff --git a/bin/net/minecraft/src/StatBase.class b/bin/net/minecraft/src/StatBase.class new file mode 100644 index 0000000..c8800ce Binary files /dev/null and b/bin/net/minecraft/src/StatBase.class differ diff --git a/bin/net/minecraft/src/StatBasic.class b/bin/net/minecraft/src/StatBasic.class new file mode 100644 index 0000000..74dc266 Binary files /dev/null and b/bin/net/minecraft/src/StatBasic.class differ diff --git a/bin/net/minecraft/src/StatCollector.class b/bin/net/minecraft/src/StatCollector.class new file mode 100644 index 0000000..f447cad Binary files /dev/null and b/bin/net/minecraft/src/StatCollector.class differ diff --git a/bin/net/minecraft/src/StatCrafting.class b/bin/net/minecraft/src/StatCrafting.class new file mode 100644 index 0000000..55258ab Binary files /dev/null and b/bin/net/minecraft/src/StatCrafting.class differ diff --git a/bin/net/minecraft/src/StatFileWriter.class b/bin/net/minecraft/src/StatFileWriter.class new file mode 100644 index 0000000..769a25b Binary files /dev/null and b/bin/net/minecraft/src/StatFileWriter.class differ diff --git a/bin/net/minecraft/src/StatList.class b/bin/net/minecraft/src/StatList.class new file mode 100644 index 0000000..b4f33c5 Binary files /dev/null and b/bin/net/minecraft/src/StatList.class differ diff --git a/bin/net/minecraft/src/StatPlaceholder.class b/bin/net/minecraft/src/StatPlaceholder.class new file mode 100644 index 0000000..476fc6f Binary files /dev/null and b/bin/net/minecraft/src/StatPlaceholder.class differ diff --git a/bin/net/minecraft/src/StatStringFormatKeyInv.class b/bin/net/minecraft/src/StatStringFormatKeyInv.class new file mode 100644 index 0000000..f2c9e54 Binary files /dev/null and b/bin/net/minecraft/src/StatStringFormatKeyInv.class differ diff --git a/bin/net/minecraft/src/StatTypeDistance.class b/bin/net/minecraft/src/StatTypeDistance.class new file mode 100644 index 0000000..652d334 Binary files /dev/null and b/bin/net/minecraft/src/StatTypeDistance.class differ diff --git a/bin/net/minecraft/src/StatTypeSimple.class b/bin/net/minecraft/src/StatTypeSimple.class new file mode 100644 index 0000000..31b343f Binary files /dev/null and b/bin/net/minecraft/src/StatTypeSimple.class differ diff --git a/bin/net/minecraft/src/StatTypeTime.class b/bin/net/minecraft/src/StatTypeTime.class new file mode 100644 index 0000000..c94feda Binary files /dev/null and b/bin/net/minecraft/src/StatTypeTime.class differ diff --git a/bin/net/minecraft/src/StatsSyncher.class b/bin/net/minecraft/src/StatsSyncher.class new file mode 100644 index 0000000..ff3fd6e Binary files /dev/null and b/bin/net/minecraft/src/StatsSyncher.class differ diff --git a/bin/net/minecraft/src/StepSound.class b/bin/net/minecraft/src/StepSound.class new file mode 100644 index 0000000..937ea12 Binary files /dev/null and b/bin/net/minecraft/src/StepSound.class differ diff --git a/bin/net/minecraft/src/StepSoundAnvil.class b/bin/net/minecraft/src/StepSoundAnvil.class new file mode 100644 index 0000000..222c886 Binary files /dev/null and b/bin/net/minecraft/src/StepSoundAnvil.class differ diff --git a/bin/net/minecraft/src/StepSoundSand.class b/bin/net/minecraft/src/StepSoundSand.class new file mode 100644 index 0000000..923b126 Binary files /dev/null and b/bin/net/minecraft/src/StepSoundSand.class differ diff --git a/bin/net/minecraft/src/StepSoundStone.class b/bin/net/minecraft/src/StepSoundStone.class new file mode 100644 index 0000000..a1e6b90 Binary files /dev/null and b/bin/net/minecraft/src/StepSoundStone.class differ diff --git a/bin/net/minecraft/src/StitchHolder.class b/bin/net/minecraft/src/StitchHolder.class new file mode 100644 index 0000000..c90860a Binary files /dev/null and b/bin/net/minecraft/src/StitchHolder.class differ diff --git a/bin/net/minecraft/src/StitchSlot.class b/bin/net/minecraft/src/StitchSlot.class new file mode 100644 index 0000000..39a0049 Binary files /dev/null and b/bin/net/minecraft/src/StitchSlot.class differ diff --git a/bin/net/minecraft/src/Stitcher.class b/bin/net/minecraft/src/Stitcher.class new file mode 100644 index 0000000..7781593 Binary files /dev/null and b/bin/net/minecraft/src/Stitcher.class differ diff --git a/bin/net/minecraft/src/StitcherException.class b/bin/net/minecraft/src/StitcherException.class new file mode 100644 index 0000000..454e5f9 Binary files /dev/null and b/bin/net/minecraft/src/StitcherException.class differ diff --git a/bin/net/minecraft/src/StringTranslate.class b/bin/net/minecraft/src/StringTranslate.class new file mode 100644 index 0000000..1d22529 Binary files /dev/null and b/bin/net/minecraft/src/StringTranslate.class differ diff --git a/bin/net/minecraft/src/StringUtils.class b/bin/net/minecraft/src/StringUtils.class new file mode 100644 index 0000000..eb591bb Binary files /dev/null and b/bin/net/minecraft/src/StringUtils.class differ diff --git a/bin/net/minecraft/src/StructureBoundingBox.class b/bin/net/minecraft/src/StructureBoundingBox.class new file mode 100644 index 0000000..3c1453f Binary files /dev/null and b/bin/net/minecraft/src/StructureBoundingBox.class differ diff --git a/bin/net/minecraft/src/StructureComponent.class b/bin/net/minecraft/src/StructureComponent.class new file mode 100644 index 0000000..ccfcef4 Binary files /dev/null and b/bin/net/minecraft/src/StructureComponent.class differ diff --git a/bin/net/minecraft/src/StructureMineshaftPieces.class b/bin/net/minecraft/src/StructureMineshaftPieces.class new file mode 100644 index 0000000..a0b2f93 Binary files /dev/null and b/bin/net/minecraft/src/StructureMineshaftPieces.class differ diff --git a/bin/net/minecraft/src/StructureMineshaftStart.class b/bin/net/minecraft/src/StructureMineshaftStart.class new file mode 100644 index 0000000..c5b7f3b Binary files /dev/null and b/bin/net/minecraft/src/StructureMineshaftStart.class differ diff --git a/bin/net/minecraft/src/StructureNetherBridgePieceWeight.class b/bin/net/minecraft/src/StructureNetherBridgePieceWeight.class new file mode 100644 index 0000000..451e60b Binary files /dev/null and b/bin/net/minecraft/src/StructureNetherBridgePieceWeight.class differ diff --git a/bin/net/minecraft/src/StructureNetherBridgePieces.class b/bin/net/minecraft/src/StructureNetherBridgePieces.class new file mode 100644 index 0000000..e821004 Binary files /dev/null and b/bin/net/minecraft/src/StructureNetherBridgePieces.class differ diff --git a/bin/net/minecraft/src/StructureNetherBridgeStart.class b/bin/net/minecraft/src/StructureNetherBridgeStart.class new file mode 100644 index 0000000..fa6bd0d Binary files /dev/null and b/bin/net/minecraft/src/StructureNetherBridgeStart.class differ diff --git a/bin/net/minecraft/src/StructurePieceBlockSelector.class b/bin/net/minecraft/src/StructurePieceBlockSelector.class new file mode 100644 index 0000000..1541338 Binary files /dev/null and b/bin/net/minecraft/src/StructurePieceBlockSelector.class differ diff --git a/bin/net/minecraft/src/StructureScatteredFeatureStart.class b/bin/net/minecraft/src/StructureScatteredFeatureStart.class new file mode 100644 index 0000000..0898d0b Binary files /dev/null and b/bin/net/minecraft/src/StructureScatteredFeatureStart.class differ diff --git a/bin/net/minecraft/src/StructureScatteredFeatureStones.class b/bin/net/minecraft/src/StructureScatteredFeatureStones.class new file mode 100644 index 0000000..049eece Binary files /dev/null and b/bin/net/minecraft/src/StructureScatteredFeatureStones.class differ diff --git a/bin/net/minecraft/src/StructureStart.class b/bin/net/minecraft/src/StructureStart.class new file mode 100644 index 0000000..208a036 Binary files /dev/null and b/bin/net/minecraft/src/StructureStart.class differ diff --git a/bin/net/minecraft/src/StructureStrongholdPieceWeight.class b/bin/net/minecraft/src/StructureStrongholdPieceWeight.class new file mode 100644 index 0000000..98c91a8 Binary files /dev/null and b/bin/net/minecraft/src/StructureStrongholdPieceWeight.class differ diff --git a/bin/net/minecraft/src/StructureStrongholdPieceWeight2.class b/bin/net/minecraft/src/StructureStrongholdPieceWeight2.class new file mode 100644 index 0000000..cde91c6 Binary files /dev/null and b/bin/net/minecraft/src/StructureStrongholdPieceWeight2.class differ diff --git a/bin/net/minecraft/src/StructureStrongholdPieceWeight3.class b/bin/net/minecraft/src/StructureStrongholdPieceWeight3.class new file mode 100644 index 0000000..fc2721d Binary files /dev/null and b/bin/net/minecraft/src/StructureStrongholdPieceWeight3.class differ diff --git a/bin/net/minecraft/src/StructureStrongholdPieces.class b/bin/net/minecraft/src/StructureStrongholdPieces.class new file mode 100644 index 0000000..9627c4a Binary files /dev/null and b/bin/net/minecraft/src/StructureStrongholdPieces.class differ diff --git a/bin/net/minecraft/src/StructureStrongholdStart.class b/bin/net/minecraft/src/StructureStrongholdStart.class new file mode 100644 index 0000000..66241fd Binary files /dev/null and b/bin/net/minecraft/src/StructureStrongholdStart.class differ diff --git a/bin/net/minecraft/src/StructureStrongholdStones.class b/bin/net/minecraft/src/StructureStrongholdStones.class new file mode 100644 index 0000000..f53b181 Binary files /dev/null and b/bin/net/minecraft/src/StructureStrongholdStones.class differ diff --git a/bin/net/minecraft/src/StructureVillagePieceWeight.class b/bin/net/minecraft/src/StructureVillagePieceWeight.class new file mode 100644 index 0000000..be5e766 Binary files /dev/null and b/bin/net/minecraft/src/StructureVillagePieceWeight.class differ diff --git a/bin/net/minecraft/src/StructureVillagePieces.class b/bin/net/minecraft/src/StructureVillagePieces.class new file mode 100644 index 0000000..674aeeb Binary files /dev/null and b/bin/net/minecraft/src/StructureVillagePieces.class differ diff --git a/bin/net/minecraft/src/StructureVillageStart.class b/bin/net/minecraft/src/StructureVillageStart.class new file mode 100644 index 0000000..1b05ec5 Binary files /dev/null and b/bin/net/minecraft/src/StructureVillageStart.class differ diff --git a/bin/net/minecraft/src/SyntaxErrorException.class b/bin/net/minecraft/src/SyntaxErrorException.class new file mode 100644 index 0000000..d7cf018 Binary files /dev/null and b/bin/net/minecraft/src/SyntaxErrorException.class differ diff --git a/bin/net/minecraft/src/TaskLongRunning.class b/bin/net/minecraft/src/TaskLongRunning.class new file mode 100644 index 0000000..a64dd50 Binary files /dev/null and b/bin/net/minecraft/src/TaskLongRunning.class differ diff --git a/bin/net/minecraft/src/TaskOnlineConnect.class b/bin/net/minecraft/src/TaskOnlineConnect.class new file mode 100644 index 0000000..f544cdd Binary files /dev/null and b/bin/net/minecraft/src/TaskOnlineConnect.class differ diff --git a/bin/net/minecraft/src/TaskResetWorld.class b/bin/net/minecraft/src/TaskResetWorld.class new file mode 100644 index 0000000..41dd711 Binary files /dev/null and b/bin/net/minecraft/src/TaskResetWorld.class differ diff --git a/bin/net/minecraft/src/TaskWorldCreation.class b/bin/net/minecraft/src/TaskWorldCreation.class new file mode 100644 index 0000000..ce5ad74 Binary files /dev/null and b/bin/net/minecraft/src/TaskWorldCreation.class differ diff --git a/bin/net/minecraft/src/TcpConnection.class b/bin/net/minecraft/src/TcpConnection.class new file mode 100644 index 0000000..b6d1b7f Binary files /dev/null and b/bin/net/minecraft/src/TcpConnection.class differ diff --git a/bin/net/minecraft/src/TcpMasterThread.class b/bin/net/minecraft/src/TcpMasterThread.class new file mode 100644 index 0000000..1a9f01d Binary files /dev/null and b/bin/net/minecraft/src/TcpMasterThread.class differ diff --git a/bin/net/minecraft/src/TcpMonitorThread.class b/bin/net/minecraft/src/TcpMonitorThread.class new file mode 100644 index 0000000..1ef5071 Binary files /dev/null and b/bin/net/minecraft/src/TcpMonitorThread.class differ diff --git a/bin/net/minecraft/src/TcpReaderThread.class b/bin/net/minecraft/src/TcpReaderThread.class new file mode 100644 index 0000000..b10a2fb Binary files /dev/null and b/bin/net/minecraft/src/TcpReaderThread.class differ diff --git a/bin/net/minecraft/src/TcpWriterThread.class b/bin/net/minecraft/src/TcpWriterThread.class new file mode 100644 index 0000000..40ab9fc Binary files /dev/null and b/bin/net/minecraft/src/TcpWriterThread.class differ diff --git a/bin/net/minecraft/src/Teleporter.class b/bin/net/minecraft/src/Teleporter.class new file mode 100644 index 0000000..a152751 Binary files /dev/null and b/bin/net/minecraft/src/Teleporter.class differ diff --git a/bin/net/minecraft/src/Tessellator.class b/bin/net/minecraft/src/Tessellator.class new file mode 100644 index 0000000..1e6cd0f Binary files /dev/null and b/bin/net/minecraft/src/Tessellator.class differ diff --git a/bin/net/minecraft/src/Texture.class b/bin/net/minecraft/src/Texture.class new file mode 100644 index 0000000..a01f228 Binary files /dev/null and b/bin/net/minecraft/src/Texture.class differ diff --git a/bin/net/minecraft/src/TextureClock.class b/bin/net/minecraft/src/TextureClock.class new file mode 100644 index 0000000..e59fabb Binary files /dev/null and b/bin/net/minecraft/src/TextureClock.class differ diff --git a/bin/net/minecraft/src/TextureCompass.class b/bin/net/minecraft/src/TextureCompass.class new file mode 100644 index 0000000..f00a434 Binary files /dev/null and b/bin/net/minecraft/src/TextureCompass.class differ diff --git a/bin/net/minecraft/src/TextureManager.class b/bin/net/minecraft/src/TextureManager.class new file mode 100644 index 0000000..03a9482 Binary files /dev/null and b/bin/net/minecraft/src/TextureManager.class differ diff --git a/bin/net/minecraft/src/TextureMap.class b/bin/net/minecraft/src/TextureMap.class new file mode 100644 index 0000000..12b305a Binary files /dev/null and b/bin/net/minecraft/src/TextureMap.class differ diff --git a/bin/net/minecraft/src/TextureOffset.class b/bin/net/minecraft/src/TextureOffset.class new file mode 100644 index 0000000..dd9bdf7 Binary files /dev/null and b/bin/net/minecraft/src/TextureOffset.class differ diff --git a/bin/net/minecraft/src/TexturePackCustom.class b/bin/net/minecraft/src/TexturePackCustom.class new file mode 100644 index 0000000..8a580ea Binary files /dev/null and b/bin/net/minecraft/src/TexturePackCustom.class differ diff --git a/bin/net/minecraft/src/TexturePackDefault.class b/bin/net/minecraft/src/TexturePackDefault.class new file mode 100644 index 0000000..d64998e Binary files /dev/null and b/bin/net/minecraft/src/TexturePackDefault.class differ diff --git a/bin/net/minecraft/src/TexturePackDownloadSuccess.class b/bin/net/minecraft/src/TexturePackDownloadSuccess.class new file mode 100644 index 0000000..2c9da70 Binary files /dev/null and b/bin/net/minecraft/src/TexturePackDownloadSuccess.class differ diff --git a/bin/net/minecraft/src/TexturePackFolder.class b/bin/net/minecraft/src/TexturePackFolder.class new file mode 100644 index 0000000..c0da07b Binary files /dev/null and b/bin/net/minecraft/src/TexturePackFolder.class differ diff --git a/bin/net/minecraft/src/TexturePackImplementation.class b/bin/net/minecraft/src/TexturePackImplementation.class new file mode 100644 index 0000000..48f84ff Binary files /dev/null and b/bin/net/minecraft/src/TexturePackImplementation.class differ diff --git a/bin/net/minecraft/src/TexturePackList.class b/bin/net/minecraft/src/TexturePackList.class new file mode 100644 index 0000000..642556a Binary files /dev/null and b/bin/net/minecraft/src/TexturePackList.class differ diff --git a/bin/net/minecraft/src/TextureStitched.class b/bin/net/minecraft/src/TextureStitched.class new file mode 100644 index 0000000..d68dbbe Binary files /dev/null and b/bin/net/minecraft/src/TextureStitched.class differ diff --git a/bin/net/minecraft/src/TexturedQuad.class b/bin/net/minecraft/src/TexturedQuad.class new file mode 100644 index 0000000..37dc5b2 Binary files /dev/null and b/bin/net/minecraft/src/TexturedQuad.class differ diff --git a/bin/net/minecraft/src/ThreadClientSleep.class b/bin/net/minecraft/src/ThreadClientSleep.class new file mode 100644 index 0000000..157e79b Binary files /dev/null and b/bin/net/minecraft/src/ThreadClientSleep.class differ diff --git a/bin/net/minecraft/src/ThreadConnectToOnlineServer.class b/bin/net/minecraft/src/ThreadConnectToOnlineServer.class new file mode 100644 index 0000000..07c26eb Binary files /dev/null and b/bin/net/minecraft/src/ThreadConnectToOnlineServer.class differ diff --git a/bin/net/minecraft/src/ThreadConnectToServer.class b/bin/net/minecraft/src/ThreadConnectToServer.class new file mode 100644 index 0000000..c78fe52 Binary files /dev/null and b/bin/net/minecraft/src/ThreadConnectToServer.class differ diff --git a/bin/net/minecraft/src/ThreadDownloadImage.class b/bin/net/minecraft/src/ThreadDownloadImage.class new file mode 100644 index 0000000..650eda0 Binary files /dev/null and b/bin/net/minecraft/src/ThreadDownloadImage.class differ diff --git a/bin/net/minecraft/src/ThreadDownloadImageData.class b/bin/net/minecraft/src/ThreadDownloadImageData.class new file mode 100644 index 0000000..aca13aa Binary files /dev/null and b/bin/net/minecraft/src/ThreadDownloadImageData.class differ diff --git a/bin/net/minecraft/src/ThreadDownloadResources.class b/bin/net/minecraft/src/ThreadDownloadResources.class new file mode 100644 index 0000000..0ebd058 Binary files /dev/null and b/bin/net/minecraft/src/ThreadDownloadResources.class differ diff --git a/bin/net/minecraft/src/ThreadLanServerFind.class b/bin/net/minecraft/src/ThreadLanServerFind.class new file mode 100644 index 0000000..05dc986 Binary files /dev/null and b/bin/net/minecraft/src/ThreadLanServerFind.class differ diff --git a/bin/net/minecraft/src/ThreadLanServerPing.class b/bin/net/minecraft/src/ThreadLanServerPing.class new file mode 100644 index 0000000..fd147a8 Binary files /dev/null and b/bin/net/minecraft/src/ThreadLanServerPing.class differ diff --git a/bin/net/minecraft/src/ThreadLoginVerifier.class b/bin/net/minecraft/src/ThreadLoginVerifier.class new file mode 100644 index 0000000..55e853c Binary files /dev/null and b/bin/net/minecraft/src/ThreadLoginVerifier.class differ diff --git a/bin/net/minecraft/src/ThreadMinecraftServer.class b/bin/net/minecraft/src/ThreadMinecraftServer.class new file mode 100644 index 0000000..dfe3893 Binary files /dev/null and b/bin/net/minecraft/src/ThreadMinecraftServer.class differ diff --git a/bin/net/minecraft/src/ThreadOnlineConnect.class b/bin/net/minecraft/src/ThreadOnlineConnect.class new file mode 100644 index 0000000..01ac6c0 Binary files /dev/null and b/bin/net/minecraft/src/ThreadOnlineConnect.class differ diff --git a/bin/net/minecraft/src/ThreadOnlineScreen.class b/bin/net/minecraft/src/ThreadOnlineScreen.class new file mode 100644 index 0000000..adc5564 Binary files /dev/null and b/bin/net/minecraft/src/ThreadOnlineScreen.class differ diff --git a/bin/net/minecraft/src/ThreadPollServers.class b/bin/net/minecraft/src/ThreadPollServers.class new file mode 100644 index 0000000..ade297c Binary files /dev/null and b/bin/net/minecraft/src/ThreadPollServers.class differ diff --git a/bin/net/minecraft/src/ThreadShutdown.class b/bin/net/minecraft/src/ThreadShutdown.class new file mode 100644 index 0000000..270511d Binary files /dev/null and b/bin/net/minecraft/src/ThreadShutdown.class differ diff --git a/bin/net/minecraft/src/ThreadStatSyncherReceive.class b/bin/net/minecraft/src/ThreadStatSyncherReceive.class new file mode 100644 index 0000000..4134b9c Binary files /dev/null and b/bin/net/minecraft/src/ThreadStatSyncherReceive.class differ diff --git a/bin/net/minecraft/src/ThreadStatSyncherSend.class b/bin/net/minecraft/src/ThreadStatSyncherSend.class new file mode 100644 index 0000000..1cf8d0a Binary files /dev/null and b/bin/net/minecraft/src/ThreadStatSyncherSend.class differ diff --git a/bin/net/minecraft/src/ThreadTitleScreen.class b/bin/net/minecraft/src/ThreadTitleScreen.class new file mode 100644 index 0000000..0a9d7e2 Binary files /dev/null and b/bin/net/minecraft/src/ThreadTitleScreen.class differ diff --git a/bin/net/minecraft/src/ThreadedFileIOBase.class b/bin/net/minecraft/src/ThreadedFileIOBase.class new file mode 100644 index 0000000..01230a8 Binary files /dev/null and b/bin/net/minecraft/src/ThreadedFileIOBase.class differ diff --git a/bin/net/minecraft/src/TileEntity.class b/bin/net/minecraft/src/TileEntity.class new file mode 100644 index 0000000..80732ea Binary files /dev/null and b/bin/net/minecraft/src/TileEntity.class differ diff --git a/bin/net/minecraft/src/TileEntityBeacon.class b/bin/net/minecraft/src/TileEntityBeacon.class new file mode 100644 index 0000000..50f2248 Binary files /dev/null and b/bin/net/minecraft/src/TileEntityBeacon.class differ diff --git a/bin/net/minecraft/src/TileEntityBeaconRenderer.class b/bin/net/minecraft/src/TileEntityBeaconRenderer.class new file mode 100644 index 0000000..2fdbfb6 Binary files /dev/null and b/bin/net/minecraft/src/TileEntityBeaconRenderer.class differ diff --git a/bin/net/minecraft/src/TileEntityBrewingStand.class b/bin/net/minecraft/src/TileEntityBrewingStand.class new file mode 100644 index 0000000..9cddd0b Binary files /dev/null and b/bin/net/minecraft/src/TileEntityBrewingStand.class differ diff --git a/bin/net/minecraft/src/TileEntityChest.class b/bin/net/minecraft/src/TileEntityChest.class new file mode 100644 index 0000000..b924484 Binary files /dev/null and b/bin/net/minecraft/src/TileEntityChest.class differ diff --git a/bin/net/minecraft/src/TileEntityChestRenderer.class b/bin/net/minecraft/src/TileEntityChestRenderer.class new file mode 100644 index 0000000..9549fbf Binary files /dev/null and b/bin/net/minecraft/src/TileEntityChestRenderer.class differ diff --git a/bin/net/minecraft/src/TileEntityCommandBlock.class b/bin/net/minecraft/src/TileEntityCommandBlock.class new file mode 100644 index 0000000..b179d4f Binary files /dev/null and b/bin/net/minecraft/src/TileEntityCommandBlock.class differ diff --git a/bin/net/minecraft/src/TileEntityComparator.class b/bin/net/minecraft/src/TileEntityComparator.class new file mode 100644 index 0000000..cc005b4 Binary files /dev/null and b/bin/net/minecraft/src/TileEntityComparator.class differ diff --git a/bin/net/minecraft/src/TileEntityDaylightDetector.class b/bin/net/minecraft/src/TileEntityDaylightDetector.class new file mode 100644 index 0000000..c9eff54 Binary files /dev/null and b/bin/net/minecraft/src/TileEntityDaylightDetector.class differ diff --git a/bin/net/minecraft/src/TileEntityDispenser.class b/bin/net/minecraft/src/TileEntityDispenser.class new file mode 100644 index 0000000..e302992 Binary files /dev/null and b/bin/net/minecraft/src/TileEntityDispenser.class differ diff --git a/bin/net/minecraft/src/TileEntityDropper.class b/bin/net/minecraft/src/TileEntityDropper.class new file mode 100644 index 0000000..452d62a Binary files /dev/null and b/bin/net/minecraft/src/TileEntityDropper.class differ diff --git a/bin/net/minecraft/src/TileEntityEnchantmentTable.class b/bin/net/minecraft/src/TileEntityEnchantmentTable.class new file mode 100644 index 0000000..135588f Binary files /dev/null and b/bin/net/minecraft/src/TileEntityEnchantmentTable.class differ diff --git a/bin/net/minecraft/src/TileEntityEndPortal.class b/bin/net/minecraft/src/TileEntityEndPortal.class new file mode 100644 index 0000000..0b7bdb2 Binary files /dev/null and b/bin/net/minecraft/src/TileEntityEndPortal.class differ diff --git a/bin/net/minecraft/src/TileEntityEnderChest.class b/bin/net/minecraft/src/TileEntityEnderChest.class new file mode 100644 index 0000000..584ee70 Binary files /dev/null and b/bin/net/minecraft/src/TileEntityEnderChest.class differ diff --git a/bin/net/minecraft/src/TileEntityEnderChestRenderer.class b/bin/net/minecraft/src/TileEntityEnderChestRenderer.class new file mode 100644 index 0000000..fe0ab30 Binary files /dev/null and b/bin/net/minecraft/src/TileEntityEnderChestRenderer.class differ diff --git a/bin/net/minecraft/src/TileEntityFurnace.class b/bin/net/minecraft/src/TileEntityFurnace.class new file mode 100644 index 0000000..166cddf Binary files /dev/null and b/bin/net/minecraft/src/TileEntityFurnace.class differ diff --git a/bin/net/minecraft/src/TileEntityHopper.class b/bin/net/minecraft/src/TileEntityHopper.class new file mode 100644 index 0000000..4ec61ae Binary files /dev/null and b/bin/net/minecraft/src/TileEntityHopper.class differ diff --git a/bin/net/minecraft/src/TileEntityMobSpawner.class b/bin/net/minecraft/src/TileEntityMobSpawner.class new file mode 100644 index 0000000..07cd6b0 Binary files /dev/null and b/bin/net/minecraft/src/TileEntityMobSpawner.class differ diff --git a/bin/net/minecraft/src/TileEntityMobSpawnerLogic.class b/bin/net/minecraft/src/TileEntityMobSpawnerLogic.class new file mode 100644 index 0000000..de1317c Binary files /dev/null and b/bin/net/minecraft/src/TileEntityMobSpawnerLogic.class differ diff --git a/bin/net/minecraft/src/TileEntityMobSpawnerRenderer.class b/bin/net/minecraft/src/TileEntityMobSpawnerRenderer.class new file mode 100644 index 0000000..d16ccfa Binary files /dev/null and b/bin/net/minecraft/src/TileEntityMobSpawnerRenderer.class differ diff --git a/bin/net/minecraft/src/TileEntityNote.class b/bin/net/minecraft/src/TileEntityNote.class new file mode 100644 index 0000000..a913226 Binary files /dev/null and b/bin/net/minecraft/src/TileEntityNote.class differ diff --git a/bin/net/minecraft/src/TileEntityPiston.class b/bin/net/minecraft/src/TileEntityPiston.class new file mode 100644 index 0000000..13d5428 Binary files /dev/null and b/bin/net/minecraft/src/TileEntityPiston.class differ diff --git a/bin/net/minecraft/src/TileEntityRecordPlayer.class b/bin/net/minecraft/src/TileEntityRecordPlayer.class new file mode 100644 index 0000000..6c6c038 Binary files /dev/null and b/bin/net/minecraft/src/TileEntityRecordPlayer.class differ diff --git a/bin/net/minecraft/src/TileEntityRenderer.class b/bin/net/minecraft/src/TileEntityRenderer.class new file mode 100644 index 0000000..16940bd Binary files /dev/null and b/bin/net/minecraft/src/TileEntityRenderer.class differ diff --git a/bin/net/minecraft/src/TileEntityRendererPiston.class b/bin/net/minecraft/src/TileEntityRendererPiston.class new file mode 100644 index 0000000..520a6bb Binary files /dev/null and b/bin/net/minecraft/src/TileEntityRendererPiston.class differ diff --git a/bin/net/minecraft/src/TileEntitySign.class b/bin/net/minecraft/src/TileEntitySign.class new file mode 100644 index 0000000..a186a1e Binary files /dev/null and b/bin/net/minecraft/src/TileEntitySign.class differ diff --git a/bin/net/minecraft/src/TileEntitySignRenderer.class b/bin/net/minecraft/src/TileEntitySignRenderer.class new file mode 100644 index 0000000..464c973 Binary files /dev/null and b/bin/net/minecraft/src/TileEntitySignRenderer.class differ diff --git a/bin/net/minecraft/src/TileEntitySkull.class b/bin/net/minecraft/src/TileEntitySkull.class new file mode 100644 index 0000000..2fee133 Binary files /dev/null and b/bin/net/minecraft/src/TileEntitySkull.class differ diff --git a/bin/net/minecraft/src/TileEntitySkullRenderer.class b/bin/net/minecraft/src/TileEntitySkullRenderer.class new file mode 100644 index 0000000..c65fc25 Binary files /dev/null and b/bin/net/minecraft/src/TileEntitySkullRenderer.class differ diff --git a/bin/net/minecraft/src/TileEntitySpecialRenderer.class b/bin/net/minecraft/src/TileEntitySpecialRenderer.class new file mode 100644 index 0000000..2a2738b Binary files /dev/null and b/bin/net/minecraft/src/TileEntitySpecialRenderer.class differ diff --git a/bin/net/minecraft/src/Timer.class b/bin/net/minecraft/src/Timer.class new file mode 100644 index 0000000..63d4173 Binary files /dev/null and b/bin/net/minecraft/src/Timer.class differ diff --git a/bin/net/minecraft/src/TimerTaskMcoServerListUpdate.class b/bin/net/minecraft/src/TimerTaskMcoServerListUpdate.class new file mode 100644 index 0000000..777f044 Binary files /dev/null and b/bin/net/minecraft/src/TimerTaskMcoServerListUpdate.class differ diff --git a/bin/net/minecraft/src/TimerTaskMcoServerListUpdateComparator.class b/bin/net/minecraft/src/TimerTaskMcoServerListUpdateComparator.class new file mode 100644 index 0000000..8cf4c5d Binary files /dev/null and b/bin/net/minecraft/src/TimerTaskMcoServerListUpdateComparator.class differ diff --git a/bin/net/minecraft/src/Tuple.class b/bin/net/minecraft/src/Tuple.class new file mode 100644 index 0000000..eceb879 Binary files /dev/null and b/bin/net/minecraft/src/Tuple.class differ diff --git a/bin/net/minecraft/src/ValueObject.class b/bin/net/minecraft/src/ValueObject.class new file mode 100644 index 0000000..1628aa5 Binary files /dev/null and b/bin/net/minecraft/src/ValueObject.class differ diff --git a/bin/net/minecraft/src/ValueObjectList.class b/bin/net/minecraft/src/ValueObjectList.class new file mode 100644 index 0000000..b39f60f Binary files /dev/null and b/bin/net/minecraft/src/ValueObjectList.class differ diff --git a/bin/net/minecraft/src/ValueObjectSubscription.class b/bin/net/minecraft/src/ValueObjectSubscription.class new file mode 100644 index 0000000..28670a3 Binary files /dev/null and b/bin/net/minecraft/src/ValueObjectSubscription.class differ diff --git a/bin/net/minecraft/src/Vec3.class b/bin/net/minecraft/src/Vec3.class new file mode 100644 index 0000000..e1ff1c0 Binary files /dev/null and b/bin/net/minecraft/src/Vec3.class differ diff --git a/bin/net/minecraft/src/Vec3Pool.class b/bin/net/minecraft/src/Vec3Pool.class new file mode 100644 index 0000000..00f21b4 Binary files /dev/null and b/bin/net/minecraft/src/Vec3Pool.class differ diff --git a/bin/net/minecraft/src/Village.class b/bin/net/minecraft/src/Village.class new file mode 100644 index 0000000..b21fd7f Binary files /dev/null and b/bin/net/minecraft/src/Village.class differ diff --git a/bin/net/minecraft/src/VillageAgressor.class b/bin/net/minecraft/src/VillageAgressor.class new file mode 100644 index 0000000..8b9df6c Binary files /dev/null and b/bin/net/minecraft/src/VillageAgressor.class differ diff --git a/bin/net/minecraft/src/VillageCollection.class b/bin/net/minecraft/src/VillageCollection.class new file mode 100644 index 0000000..c71cc4b Binary files /dev/null and b/bin/net/minecraft/src/VillageCollection.class differ diff --git a/bin/net/minecraft/src/VillageDoorInfo.class b/bin/net/minecraft/src/VillageDoorInfo.class new file mode 100644 index 0000000..120ae2e Binary files /dev/null and b/bin/net/minecraft/src/VillageDoorInfo.class differ diff --git a/bin/net/minecraft/src/VillageSiege.class b/bin/net/minecraft/src/VillageSiege.class new file mode 100644 index 0000000..5d80a8f Binary files /dev/null and b/bin/net/minecraft/src/VillageSiege.class differ diff --git a/bin/net/minecraft/src/WatchableObject.class b/bin/net/minecraft/src/WatchableObject.class new file mode 100644 index 0000000..5686ce8 Binary files /dev/null and b/bin/net/minecraft/src/WatchableObject.class differ diff --git a/bin/net/minecraft/src/WeightedRandom.class b/bin/net/minecraft/src/WeightedRandom.class new file mode 100644 index 0000000..925ff1b Binary files /dev/null and b/bin/net/minecraft/src/WeightedRandom.class differ diff --git a/bin/net/minecraft/src/WeightedRandomChestContent.class b/bin/net/minecraft/src/WeightedRandomChestContent.class new file mode 100644 index 0000000..a1cb9d0 Binary files /dev/null and b/bin/net/minecraft/src/WeightedRandomChestContent.class differ diff --git a/bin/net/minecraft/src/WeightedRandomItem.class b/bin/net/minecraft/src/WeightedRandomItem.class new file mode 100644 index 0000000..bae22b9 Binary files /dev/null and b/bin/net/minecraft/src/WeightedRandomItem.class differ diff --git a/bin/net/minecraft/src/WeightedRandomMinecart.class b/bin/net/minecraft/src/WeightedRandomMinecart.class new file mode 100644 index 0000000..089c797 Binary files /dev/null and b/bin/net/minecraft/src/WeightedRandomMinecart.class differ diff --git a/bin/net/minecraft/src/World.class b/bin/net/minecraft/src/World.class new file mode 100644 index 0000000..32477c6 Binary files /dev/null and b/bin/net/minecraft/src/World.class differ diff --git a/bin/net/minecraft/src/WorldChunkManager.class b/bin/net/minecraft/src/WorldChunkManager.class new file mode 100644 index 0000000..51c5206 Binary files /dev/null and b/bin/net/minecraft/src/WorldChunkManager.class differ diff --git a/bin/net/minecraft/src/WorldChunkManagerHell.class b/bin/net/minecraft/src/WorldChunkManagerHell.class new file mode 100644 index 0000000..2d299a0 Binary files /dev/null and b/bin/net/minecraft/src/WorldChunkManagerHell.class differ diff --git a/bin/net/minecraft/src/WorldClient.class b/bin/net/minecraft/src/WorldClient.class new file mode 100644 index 0000000..b91544d Binary files /dev/null and b/bin/net/minecraft/src/WorldClient.class differ diff --git a/bin/net/minecraft/src/WorldGenBigMushroom.class b/bin/net/minecraft/src/WorldGenBigMushroom.class new file mode 100644 index 0000000..79149b7 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenBigMushroom.class differ diff --git a/bin/net/minecraft/src/WorldGenBigTree.class b/bin/net/minecraft/src/WorldGenBigTree.class new file mode 100644 index 0000000..f8af71c Binary files /dev/null and b/bin/net/minecraft/src/WorldGenBigTree.class differ diff --git a/bin/net/minecraft/src/WorldGenCactus.class b/bin/net/minecraft/src/WorldGenCactus.class new file mode 100644 index 0000000..cfb4525 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenCactus.class differ diff --git a/bin/net/minecraft/src/WorldGenClay.class b/bin/net/minecraft/src/WorldGenClay.class new file mode 100644 index 0000000..d9c5700 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenClay.class differ diff --git a/bin/net/minecraft/src/WorldGenDeadBush.class b/bin/net/minecraft/src/WorldGenDeadBush.class new file mode 100644 index 0000000..65ea869 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenDeadBush.class differ diff --git a/bin/net/minecraft/src/WorldGenDesertWells.class b/bin/net/minecraft/src/WorldGenDesertWells.class new file mode 100644 index 0000000..64dc791 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenDesertWells.class differ diff --git a/bin/net/minecraft/src/WorldGenDungeons.class b/bin/net/minecraft/src/WorldGenDungeons.class new file mode 100644 index 0000000..9bd21f4 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenDungeons.class differ diff --git a/bin/net/minecraft/src/WorldGenFire.class b/bin/net/minecraft/src/WorldGenFire.class new file mode 100644 index 0000000..fb2d589 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenFire.class differ diff --git a/bin/net/minecraft/src/WorldGenFlowers.class b/bin/net/minecraft/src/WorldGenFlowers.class new file mode 100644 index 0000000..19272fa Binary files /dev/null and b/bin/net/minecraft/src/WorldGenFlowers.class differ diff --git a/bin/net/minecraft/src/WorldGenForest.class b/bin/net/minecraft/src/WorldGenForest.class new file mode 100644 index 0000000..4d72fc5 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenForest.class differ diff --git a/bin/net/minecraft/src/WorldGenGlowStone1.class b/bin/net/minecraft/src/WorldGenGlowStone1.class new file mode 100644 index 0000000..798b169 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenGlowStone1.class differ diff --git a/bin/net/minecraft/src/WorldGenGlowStone2.class b/bin/net/minecraft/src/WorldGenGlowStone2.class new file mode 100644 index 0000000..7644b80 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenGlowStone2.class differ diff --git a/bin/net/minecraft/src/WorldGenHellLava.class b/bin/net/minecraft/src/WorldGenHellLava.class new file mode 100644 index 0000000..78f388f Binary files /dev/null and b/bin/net/minecraft/src/WorldGenHellLava.class differ diff --git a/bin/net/minecraft/src/WorldGenHugeTrees.class b/bin/net/minecraft/src/WorldGenHugeTrees.class new file mode 100644 index 0000000..ee09c9b Binary files /dev/null and b/bin/net/minecraft/src/WorldGenHugeTrees.class differ diff --git a/bin/net/minecraft/src/WorldGenLakes.class b/bin/net/minecraft/src/WorldGenLakes.class new file mode 100644 index 0000000..30f72e1 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenLakes.class differ diff --git a/bin/net/minecraft/src/WorldGenLiquids.class b/bin/net/minecraft/src/WorldGenLiquids.class new file mode 100644 index 0000000..906148f Binary files /dev/null and b/bin/net/minecraft/src/WorldGenLiquids.class differ diff --git a/bin/net/minecraft/src/WorldGenMinable.class b/bin/net/minecraft/src/WorldGenMinable.class new file mode 100644 index 0000000..9aeca31 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenMinable.class differ diff --git a/bin/net/minecraft/src/WorldGenPumpkin.class b/bin/net/minecraft/src/WorldGenPumpkin.class new file mode 100644 index 0000000..46ce466 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenPumpkin.class differ diff --git a/bin/net/minecraft/src/WorldGenReed.class b/bin/net/minecraft/src/WorldGenReed.class new file mode 100644 index 0000000..68b294d Binary files /dev/null and b/bin/net/minecraft/src/WorldGenReed.class differ diff --git a/bin/net/minecraft/src/WorldGenSand.class b/bin/net/minecraft/src/WorldGenSand.class new file mode 100644 index 0000000..fceb6ae Binary files /dev/null and b/bin/net/minecraft/src/WorldGenSand.class differ diff --git a/bin/net/minecraft/src/WorldGenShrub.class b/bin/net/minecraft/src/WorldGenShrub.class new file mode 100644 index 0000000..9ab077c Binary files /dev/null and b/bin/net/minecraft/src/WorldGenShrub.class differ diff --git a/bin/net/minecraft/src/WorldGenSpikes.class b/bin/net/minecraft/src/WorldGenSpikes.class new file mode 100644 index 0000000..eeefbf7 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenSpikes.class differ diff --git a/bin/net/minecraft/src/WorldGenSwamp.class b/bin/net/minecraft/src/WorldGenSwamp.class new file mode 100644 index 0000000..1817933 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenSwamp.class differ diff --git a/bin/net/minecraft/src/WorldGenTaiga1.class b/bin/net/minecraft/src/WorldGenTaiga1.class new file mode 100644 index 0000000..384e720 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenTaiga1.class differ diff --git a/bin/net/minecraft/src/WorldGenTaiga2.class b/bin/net/minecraft/src/WorldGenTaiga2.class new file mode 100644 index 0000000..02abf9b Binary files /dev/null and b/bin/net/minecraft/src/WorldGenTaiga2.class differ diff --git a/bin/net/minecraft/src/WorldGenTallGrass.class b/bin/net/minecraft/src/WorldGenTallGrass.class new file mode 100644 index 0000000..33edc7b Binary files /dev/null and b/bin/net/minecraft/src/WorldGenTallGrass.class differ diff --git a/bin/net/minecraft/src/WorldGenTrees.class b/bin/net/minecraft/src/WorldGenTrees.class new file mode 100644 index 0000000..1c94cc3 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenTrees.class differ diff --git a/bin/net/minecraft/src/WorldGenVines.class b/bin/net/minecraft/src/WorldGenVines.class new file mode 100644 index 0000000..10b025e Binary files /dev/null and b/bin/net/minecraft/src/WorldGenVines.class differ diff --git a/bin/net/minecraft/src/WorldGenWaterlily.class b/bin/net/minecraft/src/WorldGenWaterlily.class new file mode 100644 index 0000000..ec552c8 Binary files /dev/null and b/bin/net/minecraft/src/WorldGenWaterlily.class differ diff --git a/bin/net/minecraft/src/WorldGenerator.class b/bin/net/minecraft/src/WorldGenerator.class new file mode 100644 index 0000000..45a6d9c Binary files /dev/null and b/bin/net/minecraft/src/WorldGenerator.class differ diff --git a/bin/net/minecraft/src/WorldGeneratorBonusChest.class b/bin/net/minecraft/src/WorldGeneratorBonusChest.class new file mode 100644 index 0000000..7a92b29 Binary files /dev/null and b/bin/net/minecraft/src/WorldGeneratorBonusChest.class differ diff --git a/bin/net/minecraft/src/WorldInfo.class b/bin/net/minecraft/src/WorldInfo.class new file mode 100644 index 0000000..cb0de9a Binary files /dev/null and b/bin/net/minecraft/src/WorldInfo.class differ diff --git a/bin/net/minecraft/src/WorldManager.class b/bin/net/minecraft/src/WorldManager.class new file mode 100644 index 0000000..991e976 Binary files /dev/null and b/bin/net/minecraft/src/WorldManager.class differ diff --git a/bin/net/minecraft/src/WorldProvider.class b/bin/net/minecraft/src/WorldProvider.class new file mode 100644 index 0000000..9459a4c Binary files /dev/null and b/bin/net/minecraft/src/WorldProvider.class differ diff --git a/bin/net/minecraft/src/WorldProviderEnd.class b/bin/net/minecraft/src/WorldProviderEnd.class new file mode 100644 index 0000000..7b15980 Binary files /dev/null and b/bin/net/minecraft/src/WorldProviderEnd.class differ diff --git a/bin/net/minecraft/src/WorldProviderHell.class b/bin/net/minecraft/src/WorldProviderHell.class new file mode 100644 index 0000000..4b35c93 Binary files /dev/null and b/bin/net/minecraft/src/WorldProviderHell.class differ diff --git a/bin/net/minecraft/src/WorldProviderSurface.class b/bin/net/minecraft/src/WorldProviderSurface.class new file mode 100644 index 0000000..fa2d84a Binary files /dev/null and b/bin/net/minecraft/src/WorldProviderSurface.class differ diff --git a/bin/net/minecraft/src/WorldRenderer.class b/bin/net/minecraft/src/WorldRenderer.class new file mode 100644 index 0000000..81e7219 Binary files /dev/null and b/bin/net/minecraft/src/WorldRenderer.class differ diff --git a/bin/net/minecraft/src/WorldSavedData.class b/bin/net/minecraft/src/WorldSavedData.class new file mode 100644 index 0000000..3ca8538 Binary files /dev/null and b/bin/net/minecraft/src/WorldSavedData.class differ diff --git a/bin/net/minecraft/src/WorldServer.class b/bin/net/minecraft/src/WorldServer.class new file mode 100644 index 0000000..33c479d Binary files /dev/null and b/bin/net/minecraft/src/WorldServer.class differ diff --git a/bin/net/minecraft/src/WorldServerMulti.class b/bin/net/minecraft/src/WorldServerMulti.class new file mode 100644 index 0000000..91d7a90 Binary files /dev/null and b/bin/net/minecraft/src/WorldServerMulti.class differ diff --git a/bin/net/minecraft/src/WorldSettings.class b/bin/net/minecraft/src/WorldSettings.class new file mode 100644 index 0000000..f8cd0ff Binary files /dev/null and b/bin/net/minecraft/src/WorldSettings.class differ diff --git a/bin/net/minecraft/src/WorldType.class b/bin/net/minecraft/src/WorldType.class new file mode 100644 index 0000000..d45f2ba Binary files /dev/null and b/bin/net/minecraft/src/WorldType.class differ diff --git a/bin/net/minecraft/src/WrongUsageException.class b/bin/net/minecraft/src/WrongUsageException.class new file mode 100644 index 0000000..6fb1062 Binary files /dev/null and b/bin/net/minecraft/src/WrongUsageException.class differ diff --git a/game/assets/indexes/1.4.json b/game/assets/indexes/1.4.json new file mode 100644 index 0000000..55f69ff --- /dev/null +++ b/game/assets/indexes/1.4.json @@ -0,0 +1 @@ +{"objects":{"newsound/random/splash.ogg":{"size":11333,"hash":"22a491f266f5c3cdd6e669a9493daaf40c9c8575"},"sound3/mob/skeleton/step3.ogg":{"size":8565,"hash":"000c82756fd54e40cb236199f2b479629d0aca2f"},"streaming/far.mus":{"size":1285938,"hash":"21c9b7c6b486247322051f90aa964f161edc78d8"},"sound3/ambient/cave/cave6.ogg":{"size":42176,"hash":"cf23204a9cca2ac7f9674168cc063cfb4dbe001f"},"sound3/mob/cat/purreow1.ogg":{"size":11787,"hash":"d00791807e913e57d58fd891cb4dd10186cfdf38"},"sound3/mob/magmacube/big2.ogg":{"size":7931,"hash":"4c4bcc6905430286f32a862ce69665c51bd9938f"},"sound3/random/successful_hit.ogg":{"size":7139,"hash":"e9833a1512b57bcf88ac4fdcc8df4e5a7e9d701d"},"newsound/step/sand4.ogg":{"size":5491,"hash":"37afa06f97d58767a1cd1382386db878be1532dd"},"newmusic/piano2.ogg":{"size":824333,"hash":"98a918eb2694defd19726436d4b9dca9e7dd6a65"},"newsound/mob/chickenplop.ogg":{"size":4680,"hash":"ab5a32b70ef1e7aafc550b20afdb7dc8c0d5d901"},"sound3/mob/slime/big1.ogg":{"size":10917,"hash":"b5eca1979e69271b2065ac67ba2c37b5afac0f98"},"newsound/liquid/lavapop.ogg":{"size":5609,"hash":"19a5aae31c3e0018a960b709a9f0240d8d47dda7"},"sound3/ambient/cave/cave10.ogg":{"size":22725,"hash":"79a5b53bf22cca182ddff2a670942c49867663ec"},"sound3/mob/zombie/wood2.ogg":{"size":7649,"hash":"dc86fbd59cf0e87cd35b22df2a2df899ab8c1f7f"},"newsound/mob/blaze/hit4.ogg":{"size":7383,"hash":"3f447f3e331b59ad014d9bd4a6536f98cf3a08c3"},"sound3/mob/spider/say1.ogg":{"size":9045,"hash":"65b49739d48ebc47879ca5528c8283329980b304"},"sound3/mob/wolf/hurt1.ogg":{"size":6164,"hash":"71b5fc7aa050892f8c9a9ed2713cc1ad8874742a"},"newsound/ambient/weather/thunder1.ogg":{"size":24468,"hash":"671ef0ae7b59014a2f637d7af6d781324ab6309f"},"sound3/portal/travel.ogg":{"size":54283,"hash":"43388701fac432a567fe9fec421521e6348ad780"},"newsound/mob/irongolem/hit2.ogg":{"size":9140,"hash":"bb92fd6971430a515f508a6734392511385826e1"},"sound3/mob/pig/step5.ogg":{"size":5493,"hash":"56d6fd65958fb25bf9b4033a87655b591e222005"},"sound3/mob/magmacube/small3.ogg":{"size":5314,"hash":"65a1a69845133187d6b8689e6ce9707da10f21a6"},"sound3/dig/stone2.ogg":{"size":6728,"hash":"9c92f697142ae320584bf64c0d54381d59703528"},"sound3/mob/skeleton/say2.ogg":{"size":8485,"hash":"529abcb09220f0ebeb595f32bb663d026a7e0ae5"},"newsound/mob/endermen/scream4.ogg":{"size":10411,"hash":"bcc73584d83225383aaa6affce905392c96afe86"},"newsound/mob/cat/hiss3.ogg":{"size":13708,"hash":"c7e424eb00712614a183adf5d17b949175ff00df"},"newsound/mob/ghast/moan5.ogg":{"size":14107,"hash":"48fc6c25d0f1c1f0edd4eaca2b6f934d4117f440"},"newsound/mob/ghast/scream2.ogg":{"size":11455,"hash":"57008a7f564443d563968fd040fc13ab226fc8d1"},"sound3/liquid/swim3.ogg":{"size":9868,"hash":"b5f9075a8bf6977e7dfd3d316a673eaaa5834a99"},"newsound/mob/magmacube/jump3.ogg":{"size":12258,"hash":"5a2449cc3d4a6ad36598847e501f956e5a3528bd"},"sound3/liquid/lava.ogg":{"size":65328,"hash":"9272aef9f27dfcc10b6e3879b7a2a67f8faa1a83"},"sound3/mob/ghast/affectionate scream.ogg":{"size":9367,"hash":"99cd73dda425ee03836c2274a0fcf331139773dc"},"newsound/step/grass2.ogg":{"size":7691,"hash":"86cb1bb0c45625b18e00a64098cd425a38f6d3f2"},"newsound/tile/piston/out.ogg":{"size":6059,"hash":"cb017131516de9359cb81fb991f5b3694044f8db"},"sound3/mob/ghast/moan1.ogg":{"size":7986,"hash":"882d092b05faef1cfa6af43d642b9e8843f22756"},"sound3/mob/wither/spawn.ogg":{"size":151896,"hash":"d8caaead680c20a4f51361587aeddd57a3357a72"},"sound3/random/breath.ogg":{"size":14331,"hash":"dd2f7209c2a58b0886beb34d49b0512b49adbb7e"},"streaming/cat.mus":{"size":1286636,"hash":"bea1c181fce1150f3aaea8f14a773394ccc253d2"},"sound3/mob/enderdragon/wings2.ogg":{"size":10481,"hash":"7d5b3b403a11b6dd4c3801c4f4c8bf7ce9a8c771"},"sound3/dig/gravel3.ogg":{"size":6905,"hash":"48f7e1bb098abd36b9760cca27b9d4391a23de26"},"sound3/random/bow.ogg":{"size":6658,"hash":"87edc11141fb5a045f2ed830b545aaa73f96ee99"},"sound3/mob/endermen/idle4.ogg":{"size":11208,"hash":"405e2f82caef7f79eb9e26886520711e446366ce"},"newsound/mob/cat/meow3.ogg":{"size":9526,"hash":"381f9e97a8a986ecab3e86431d6be6df5ff79c31"},"sound3/fireworks/largeBlast_far1.ogg":{"size":21914,"hash":"bfb0e14bf130de4ecda75d8e793260e8bbaca35b"},"newsound/mob/zombiepig/zpigangry4.ogg":{"size":9925,"hash":"c76dea473821e2ae9a1f006a4eddfdd0703eecdf"},"newsound/mob/magmacube/big4.ogg":{"size":9871,"hash":"a63fd7965328425a0a8111640de19428d841933e"},"sound3/mob/silverfish/step1.ogg":{"size":8382,"hash":"763cc79934a572b84c371cb49afad5912f29d2f1"},"sound3/step/wood3.ogg":{"size":9368,"hash":"27722125968ac60c0f191a961b17e406f1351c6e"},"sound3/random/explode4.ogg":{"size":25090,"hash":"f259be40364341edcaf88e339bc24ab01e49845a"},"sound3/random/click.ogg":{"size":7046,"hash":"2fe092579d9637e2d160319820ee08e60a237bb7"},"newsound/ambient/cave/cave8.ogg":{"size":49295,"hash":"9024de3f1dd4bc1e8f445c7c5b812f25c7e31bf6"},"newsound/random/glass3.ogg":{"size":7592,"hash":"ad7d770b7fff3b64121f75bd60cecfc4866d1cd6"},"sound3/mob/blaze/breathe3.ogg":{"size":21883,"hash":"24d643885f9b83d8f034f49e2c5e00e70d4f175a"},"sound3/step/gravel2.ogg":{"size":7921,"hash":"ac7a7c8d106e26abc775b1b46150c083825d8ddc"},"sound3/random/eat2.ogg":{"size":5677,"hash":"d26bde554d88f0ca156baf471c44ce2c0e68176c"},"newsound/mob/irongolem/walk2.ogg":{"size":6945,"hash":"356fdb6192cf96aa5d5d9c76413f412f6a4d66a4"},"newsound/mob/wolf/bark2.ogg":{"size":5447,"hash":"9f1708a6409d04370ec12d0add015b11abbd5371"},"sound3/step/grass6.ogg":{"size":7709,"hash":"b88cafe403394cdcd4de0e3aeb7b76f24170c6fe"},"sound3/liquid/splash2.ogg":{"size":36747,"hash":"857abbbfb58186c2f1b5510a4072630950e518f6"},"sound/step/stone4.ogg":{"size":6516,"hash":"363545a76277e5e47538b2dd3a0d6aa4f7a87d34"},"sound3/mob/zombie/say1.ogg":{"size":16877,"hash":"b5bc9775243437d87317ab3a66ec8a4d5b96c83d"},"sound3/random/glass3.ogg":{"size":7592,"hash":"ad7d770b7fff3b64121f75bd60cecfc4866d1cd6"},"sound3/mob/silverfish/say2.ogg":{"size":9782,"hash":"396b8b46e593cf55d843853b704dc054ef614e55"},"sound3/mob/wolf/growl2.ogg":{"size":10311,"hash":"f57577fe6915175f9e4576e8d73ad4077a381433"},"sound3/step/sand5.ogg":{"size":5182,"hash":"9fd6d2c633d276b952f2ff2aaa1fa7e5fb5efd2a"},"newsound/mob/wolf/whine.ogg":{"size":7846,"hash":"fcf4f90c452b7b511d50e3959ae05036d13a7cf8"},"sound3/note/bassattack.ogg":{"size":5574,"hash":"037b9fb7f74381f354739d015193dc4a6897f620"},"newsound/ambient/weather/rain3.ogg":{"size":13322,"hash":"4cdd8fc380e85409fd94b93abdcad077d75ec58f"},"newsound/step/stone4.ogg":{"size":6516,"hash":"363545a76277e5e47538b2dd3a0d6aa4f7a87d34"},"sound3/mob/creeper/say1.ogg":{"size":6647,"hash":"74771428c2aa2acbd30638c6706867053bad64d3"},"sound3/mob/wolf/bark3.ogg":{"size":5645,"hash":"1ddae4e8dfa605e27ec8278b3e312597b674437e"},"sound3/mob/zombie/step5.ogg":{"size":14377,"hash":"b88bd8618c05232a7287799ea9246ae12f5da9d5"},"sound3/random/chestclosed.ogg":{"size":7779,"hash":"056393a33a9633685c3dc3be2887f5cbd7dbc63f"},"sound3/random/burp.ogg":{"size":6337,"hash":"bdc648e04933df8ddcccc84b375d6556776d4331"},"sound3/mob/slime/attack2.ogg":{"size":7391,"hash":"f6e2067571631aae206000a501c9adebe862e32a"},"sound3/mob/magmacube/jump1.ogg":{"size":12540,"hash":"86a2a7206c769aaa9435aabba70be201cb3e3a6b"},"newsound/portal/trigger.ogg":{"size":24992,"hash":"301f32642b654addbd06a430768fead464fd24c4"},"sound3/mob/enderdragon/end.ogg":{"size":257102,"hash":"53cc1890ebea833d3964c7dd1c90676650e34404"},"sound3/mob/ghast/scream4.ogg":{"size":12220,"hash":"edbc9e9cb9dfeabef93207fc0bdee6ceee5df7bc"},"newsound/ambient/cave/cave1.ogg":{"size":33948,"hash":"29d4dccf3353334c7aa2a49cb6fed3780a51a1ba"},"newsound/mob/silverfish/say4.ogg":{"size":6394,"hash":"4fce41a2d0890418ae1efb03d1142ca74d00aa61"},"newsound/step/wood2.ogg":{"size":6294,"hash":"98102533e6085617a2962157b4f3658f59aea018"},"newsound/random/bowhit3.ogg":{"size":13252,"hash":"0369a1236a4b9ca219fd3ad7d19d0b5237510b1e"},"newsound/random/drr.ogg":{"size":12966,"hash":"40a5a4307c1a2a5a1b9f71254275689845374104"},"sound/step/grass3.ogg":{"size":7194,"hash":"f7d7e5c7089c9b45fa5d1b31542eb455fad995db"},"streaming/chirp.mus":{"size":1379756,"hash":"d639bf7f0516e5e363fe5db2aa150cedd38de19a"},"sound3/mob/cat/meow4.ogg":{"size":9560,"hash":"4bf7c7a08c1217de7b1f0faf82429665fbf18458"},"sound3/step/stone1.ogg":{"size":8012,"hash":"4a2e3795ffd4d3aab0834b7e41903af3a8f7d197"},"newsound/portal/portal.ogg":{"size":25153,"hash":"9a20be18fed05330f745a54eb8aeba11aac5403b"},"sound3/damage/fallsmall.ogg":{"size":5232,"hash":"09236e1a725cec0229b8c564f5b3e4fe05cd7a5f"},"streaming/wait.mus":{"size":1845255,"hash":"a96c409e8d54d95520cf6d2caa583b5667e2dc63"},"sound3/note/hat.ogg":{"size":3880,"hash":"fd2b6f745b05a2cf44a4e010f72631de2e5099f6"},"sound3/mob/zombiepig/zpig3.ogg":{"size":5916,"hash":"c9f7fa36ae48eca0a1f6ce024fde5d3472d30b4d"},"sound3/mob/slime/big2.ogg":{"size":7931,"hash":"00e06362a31ad7094e452c5bcea837b061825cb0"},"sound3/random/drink.ogg":{"size":7734,"hash":"857b75738992d25e338dee640ab191323bcbf798"},"newsound/random/wood click.ogg":{"size":4385,"hash":"b210a3c371441b77fe873133b2cb7b63e367b2f3"},"sound3/mob/magmacube/big1.ogg":{"size":10917,"hash":"430c65ac81151d873a27d611a9dff6c562e38c4f"},"sound3/mob/bat/takeoff.ogg":{"size":8821,"hash":"ee6079d3826ac2994f3f58e62370f3c8ff9328e9"},"newsound/mob/sheep3.ogg":{"size":9150,"hash":"c9ac72409cbe6093e84d72a2a5c719d9e4a0e6b2"},"newsound/ambient/cave/cave2.ogg":{"size":48741,"hash":"5680749048457f5772ec95a73d856ad792fa1717"},"sound3/mob/zombiepig/zpig4.ogg":{"size":7066,"hash":"e1187646b6256b92a1384f26ef2a7e56efcbe00d"},"sound3/step/wood4.ogg":{"size":9651,"hash":"29586f60bfe6f521dbc748919d4f0dc5b28beefd"},"sound3/dig/cloth2.ogg":{"size":4862,"hash":"56c1d0ac0de2265018b2c41cb571cc6631101484"},"newsound/mob/ghast/scream1.ogg":{"size":10828,"hash":"a0e62d86e5899405df4e796fe648e091d828691d"},"sound3/mob/skeleton/hurt4.ogg":{"size":7848,"hash":"a88e0436e38512171a3ef819249c3d1a2650540f"},"newsound/mob/magmacube/jump2.ogg":{"size":12973,"hash":"3285a993220dcea1fc37e98b9aa9219422c2c095"},"sound3/mob/skeleton/step4.ogg":{"size":8508,"hash":"a89bdd809baa83cacd329f0219bca1f612ccda5a"},"sound3/mob/spider/say2.ogg":{"size":7405,"hash":"501b40b97ee55cb7a97943ee620aa05131089fc2"},"sound3/mob/zombie/wood3.ogg":{"size":8090,"hash":"8184e851170619de93aa56244fb12c472a2ddd7d"},"newsound/mob/magmacube/small1.ogg":{"size":6269,"hash":"5c633c345fe4cb87c36ada2fe2b5da1b80601cf3"},"sound3/mob/cow/step4.ogg":{"size":7394,"hash":"03063be15a77cc3f6815ec98090e351178190b33"},"sound3/mob/magmacube/big3.ogg":{"size":9436,"hash":"d5c4316d30feef5213077e3ee24a7f52c5bf6735"},"sound3/mob/magmacube/jump2.ogg":{"size":12973,"hash":"3285a993220dcea1fc37e98b9aa9219422c2c095"},"newmusic/piano3.ogg":{"size":2665984,"hash":"9528b6a76e7bac64ca1145cc682e8a8448cc04e5"},"sound3/random/bowhit4.ogg":{"size":15430,"hash":"9e5e2369fc354a082c861494cfe8767d327813d4"},"newsound/random/bowhit4.ogg":{"size":15430,"hash":"9e5e2369fc354a082c861494cfe8767d327813d4"},"sound3/minecart/inside.ogg":{"size":57426,"hash":"6a83b514027c328b74f8428448dc6589d4b16388"},"sound3/mob/endermen/idle5.ogg":{"size":9108,"hash":"e746ec4574aaa047be3076729753c2c75fd34630"},"sound3/dig/gravel4.ogg":{"size":6728,"hash":"7bf3553a4fe41a0078f4988a13d6e1ed8663ef4c"},"sound3/mob/silverfish/say1.ogg":{"size":6584,"hash":"515dffc5d6dd216550d69e61b2eb9c3593b19a20"},"newsound/mob/cat/meow2.ogg":{"size":9349,"hash":"9853be18df1a5b2642e33ba05e71bfd5099f9f04"},"sound3/fire/fire.ogg":{"size":28689,"hash":"8b260108a73470c16cd244325242d4780cfb7d78"},"sound3/minecart/base.ogg":{"size":15354,"hash":"28f9973fcd8366ac9837dbe190b129a8fce15857"},"newsound/fire/fire.ogg":{"size":28689,"hash":"8b260108a73470c16cd244325242d4780cfb7d78"},"newsound/mob/ghast/moan4.ogg":{"size":9393,"hash":"935f1a575322bd0ec53a919fd061321216889104"},"streaming/11.mus":{"size":591997,"hash":"d5ce66b3787648036b29c504786bcc237cd316d3"},"newsound/mob/chickenhurt2.ogg":{"size":6177,"hash":"18752157f5d8718e2752805a657c74a73d2b88db"},"sound3/dig/sand1.ogg":{"size":5543,"hash":"9e59c3650c6c3fc0a475f1b753b2fcfef430bf81"},"newsound/mob/cat/hiss2.ogg":{"size":13451,"hash":"063bf0fce35c547eb59f086dbb56c5fe329cbcf4"},"newsound/mob/irongolem/hit1.ogg":{"size":9479,"hash":"942937fcad0fefd61e019678e3710f3f077757d4"},"sound3/mob/slime/small5.ogg":{"size":4826,"hash":"35f0b3c9c462a6c21ec213fbda2437a0e6427883"},"newsound/step/stone3.ogg":{"size":6627,"hash":"8f23c02475d388b23e5faa680eafe6b991d7a9d4"},"sound3/mob/skeleton/say1.ogg":{"size":8727,"hash":"199c9f150822950385b9bc1d840605a6a795bd27"},"sound3/mob/silverfish/step2.ogg":{"size":9498,"hash":"f1665747da14569c4de55e07884deeef18a40f62"},"sound3/dig/grass1.ogg":{"size":7468,"hash":"41cbf5dd08e951ad65883854e74d2e034929f572"},"sound3/mob/wither/idle1.ogg":{"size":19699,"hash":"22ed26394cb6f6b5eeb2ceb54fb50608798d19e8"},"newsound/step/snow1.ogg":{"size":6532,"hash":"e9bab7d3d15541f0aaa93fad31ad37fd07e03a6c"},"sound3/random/break.ogg":{"size":6551,"hash":"8bf3ecb0fe9a6a615f5995e3dd21b6c39adc21d5"},"sound3/mob/cow/hurt1.ogg":{"size":7302,"hash":"989c3b614f736aa77bb2800821ea56936e98ca68"},"newsound/mob/endermen/scream3.ogg":{"size":9843,"hash":"dbab0094299eacbce86ad427edcb34b8342861af"},"newsound/random/explode1.ogg":{"size":19732,"hash":"cd46e41023887558b134547e28327de6e7df189a"},"sound3/ambient/cave/cave5.ogg":{"size":67196,"hash":"18a992d93128bb2e2861930cff3140c6940c0127"},"sound3/mob/bat/idle4.ogg":{"size":5274,"hash":"a323a968296882e15c743ccdc8cb8057557ae712"},"sound3/mob/silverfish/hit3.ogg":{"size":7205,"hash":"5b1675279bbc245fc6bbb705de8ea09fb3f32b53"},"sound3/random/chestopen.ogg":{"size":8703,"hash":"186d5d9481d59cc99bc4be1b5fbb98d0ef877b8e"},"newsound/random/pop.ogg":{"size":4193,"hash":"8f45b5faf6dfae2065846d26612f7552b73640dd"},"newsound/mob/zombiepig/zpighurt1.ogg":{"size":6935,"hash":"a2cfbea288280419ec0c8fb75d8ee5395536ac02"},"newsound/step/snow2.ogg":{"size":6567,"hash":"5887d10234c4f244ec5468080412f3e6ef9522f3"},"sound3/mob/ghast/fireball4.ogg":{"size":8535,"hash":"eafa60d7ec34f86e8f07a001ddcdf5c4600bb174"},"newsound/mob/zombiepig/zpig4.ogg":{"size":7066,"hash":"e1187646b6256b92a1384f26ef2a7e56efcbe00d"},"newsound/random/breath.ogg":{"size":14331,"hash":"dd2f7209c2a58b0886beb34d49b0512b49adbb7e"},"sound3/mob/ghast/death.ogg":{"size":26853,"hash":"725e5179c72444c6d885e39c27e6b31ed83d58bc"},"sound3/mob/wolf/growl3.ogg":{"size":13663,"hash":"69ef2fe8d6a744689953fd692d0106b0b2d2a9ce"},"newsound/mob/skeletonhurt1.ogg":{"size":7180,"hash":"f7e8ae3a771d50ed827772b75c50958393b621e1"},"sound3/mob/chicken/step2.ogg":{"size":3838,"hash":"bf7fadaf64945f6b31c803d086ac6a652aabef9b"},"newsound/ambient/weather/rain4.ogg":{"size":13955,"hash":"08e555782cb2785b24e08a417a5e58aa08bd0695"},"newsound/mob/blaze/death.ogg":{"size":30155,"hash":"17491c8dd9511e9d848c92b4b7ae047aed164072"},"sound3/random/eat1.ogg":{"size":5678,"hash":"dfee39084c771182f6b9e7cfb8c8bc4e255747bc"},"sound3/liquid/swim2.ogg":{"size":9540,"hash":"827d71834e69954e0a7fd7748998332e0b619d29"},"sound3/mob/blaze/breathe2.ogg":{"size":22547,"hash":"c74368d2b978f570b4e7ce9645fd84b07f8f145c"},"sound3/step/gravel1.ogg":{"size":7757,"hash":"1d761cb3bcb45498719e4fba0751e1630e134f1a"},"sound3/mob/cat/hiss3.ogg":{"size":13708,"hash":"c7e424eb00712614a183adf5d17b949175ff00df"},"sound3/mob/enderdragon/wings3.ogg":{"size":10373,"hash":"eb58ef697b2cbaed218edc758e00412302c75962"},"newsound/liquid/splash.ogg":{"size":11333,"hash":"22a491f266f5c3cdd6e669a9493daaf40c9c8575"},"sound3/mob/wolf/whine.ogg":{"size":7846,"hash":"fcf4f90c452b7b511d50e3959ae05036d13a7cf8"},"sound3/step/sand4.ogg":{"size":5321,"hash":"a474236fb0c75bd65a6010e87dbc000d345fc185"},"sound3/mob/cat/meow3.ogg":{"size":9526,"hash":"381f9e97a8a986ecab3e86431d6be6df5ff79c31"},"newsound/step/wood1.ogg":{"size":6541,"hash":"9bc2a84d0aa98113fc52609976fae8fc88ea6333"},"newsound/step/grass1.ogg":{"size":7468,"hash":"41cbf5dd08e951ad65883854e74d2e034929f572"},"sound3/dig/cloth1.ogg":{"size":4832,"hash":"5fd568d724ba7d53911b6cccf5636f859d2662e8"},"sound3/mob/endermen/stare.ogg":{"size":127738,"hash":"5738d7f49ef30adcfc4f2ab13e0b1d74f09a1289"},"newsound/mob/blaze/hit3.ogg":{"size":7229,"hash":"97e09d51c82b78ab82fb3a4dbbb8cd701b2d0aeb"},"newsound/random/door_close.ogg":{"size":6510,"hash":"9ea8a9e105321891bda18b9007b383b40aa7c076"},"sound3/mob/sheep/step5.ogg":{"size":5185,"hash":"c289aa46fcbcfaf21c8080d57953fd45a4939294"},"sound3/mob/zombie/infect.ogg":{"size":20085,"hash":"c18fb5eacf0fdb33c05eb806bc41332cccee43d8"},"sound3/dig/stone3.ogg":{"size":6627,"hash":"8f23c02475d388b23e5faa680eafe6b991d7a9d4"},"newsound/ambient/cave/cave7.ogg":{"size":45278,"hash":"c8dd60f7e7087da52a431c1dbc0f397317b374fb"},"newsound/mob/irongolem/walk3.ogg":{"size":6883,"hash":"e0672d288b09996f7c7e1a0ca696de82b7a02d18"},"sound3/mob/ghast/scream3.ogg":{"size":9399,"hash":"8f23820fa28830dd031188c20acb35af044aedb5"},"sound3/liquid/splash.ogg":{"size":16702,"hash":"4c14c40542e249c902d0cac710ab4c6d6debba28"},"newsound/mob/wolf/bark1.ogg":{"size":5398,"hash":"2452c64a55eaef86bf1b668bb4d5f3b641cd8f25"},"sound/step/grass4.ogg":{"size":7163,"hash":"c7b1005d4926f6a2e2387a41ab1fb48a72f18e98"},"newsound/mob/irongolem/hit4.ogg":{"size":8686,"hash":"a2dbb90f23b0babe7c569ceca28db49d0c112714"},"sound3/step/snow4.ogg":{"size":6501,"hash":"e26fa3036cdab4c2264ceb19e1cd197a2a510227"},"newsound/note/hat.ogg":{"size":3880,"hash":"fd2b6f745b05a2cf44a4e010f72631de2e5099f6"},"newsound/mob/magmacube/jump1.ogg":{"size":12540,"hash":"86a2a7206c769aaa9435aabba70be201cb3e3a6b"},"sound3/mob/zombie/wood4.ogg":{"size":7608,"hash":"1028d0a373790e14c34786a925c4656bdaeb4c4d"},"newsound/ambient/cave/cave3.ogg":{"size":50958,"hash":"d4b06ccb8e331ece734f51d84a0a5fbc7164d8be"},"sound3/random/bowhit3.ogg":{"size":13252,"hash":"0369a1236a4b9ca219fd3ad7d19d0b5237510b1e"},"newsound/mob/endermen/scream2.ogg":{"size":11020,"hash":"c8cd465468a0fd41a1d5cc24cb499862b5ade2cb"},"sound3/mob/magmacube/jump3.ogg":{"size":12258,"hash":"5a2449cc3d4a6ad36598847e501f956e5a3528bd"},"newsound/mob/skeleton2.ogg":{"size":8485,"hash":"529abcb09220f0ebeb595f32bb663d026a7e0ae5"},"sound3/mob/cow/step3.ogg":{"size":7923,"hash":"482919bc631b317422ab44af3938259bea73fe83"},"newsound/random/bowhit1.ogg":{"size":11106,"hash":"78f034d58779fb4d22b00ea249015a0dbf4e7b3f"},"sound3/mob/ghast/moan3.ogg":{"size":8925,"hash":"dcec2d45fbc25f74a399ec9f8001e0ecd2d5d85e"},"newsound/mob/cow2.ogg":{"size":13372,"hash":"00b1a23c84bc7f7377de973040b2dd336670bb8f"},"newsound/mob/slime5.ogg":{"size":4854,"hash":"24bae598320bf757fd6937a93f135f5cdba206ba"},"sound3/mob/ghast/scream5.ogg":{"size":11650,"hash":"77a7b79d4f2ada27640866ece1020b631f5bdc54"},"sound3/step/grass1.ogg":{"size":7126,"hash":"227ab99bf7c6cf0b2002e0f7957d0ff7e5cb0c96"},"sound3/random/explode2.ogg":{"size":25246,"hash":"a116e396d95a0ee245000dd4cdcc333d38ea9e3b"},"sound3/dig/sand2.ogg":{"size":5553,"hash":"0fa4234797f336ada4e3735e013e44d1099afe57"},"newsound/mob/zombie2.ogg":{"size":15423,"hash":"bf5086623d5c6735271074b263116fb914ed79b5"},"newsound/random/chestopen.ogg":{"size":8703,"hash":"186d5d9481d59cc99bc4be1b5fbb98d0ef877b8e"},"sound3/step/wood5.ogg":{"size":11520,"hash":"85ff970401cb1ef2e812f943077ab96549315d0a"},"newsound/step/stone2.ogg":{"size":6728,"hash":"9c92f697142ae320584bf64c0d54381d59703528"},"sound3/mob/slime/small4.ogg":{"size":5387,"hash":"4dfe0b607c5de2e47f3b7950c56bbebbf3115957"},"sound3/mob/silverfish/kill.ogg":{"size":10410,"hash":"24cdac5a80fdad7ab31dc0695b57ece55aecb21a"},"sound3/mob/magmacube/big4.ogg":{"size":9871,"hash":"a63fd7965328425a0a8111640de19428d841933e"},"newsound/mob/endermen/idle1.ogg":{"size":6793,"hash":"281b87984ddf8e94324bc86911a36c971cb3d831"},"newsound/random/explode2.ogg":{"size":25246,"hash":"a116e396d95a0ee245000dd4cdcc333d38ea9e3b"},"sound3/mob/wither/idle2.ogg":{"size":19332,"hash":"6b2f86a35a3cd88320b55c029d77659915f83239"},"sound3/ambient/cave/cave4.ogg":{"size":49499,"hash":"48540d7788ce3d9e780cb448ce5676c53dbcfd23"},"sound3/mob/wolf/step4.ogg":{"size":4869,"hash":"d7d5be6092d00c2f7f68bdcbf10ea3ac3cfea30c"},"newsound/mob/magmacube/small2.ogg":{"size":5518,"hash":"18237686efcaa1bf9084173c99d11ce0d37d4fc5"},"newsound/random/levelup.ogg":{"size":32140,"hash":"9d52e43288d7f9e4d14199368a0f30ae3570d05a"},"sound3/mob/bat/idle3.ogg":{"size":4777,"hash":"e641dd3d6607db86b7574fe82781a34ad74f6c77"},"sound3/mob/enderdragon/growl3.ogg":{"size":27102,"hash":"ba35053358ede7c3bf33a4c344d66680f09008c9"},"sound3/mob/cow/say4.ogg":{"size":12300,"hash":"80ce8d4b8d361b69e42d8d147e42a09d3c85a115"},"sound3/mob/cat/hiss2.ogg":{"size":13451,"hash":"063bf0fce35c547eb59f086dbb56c5fe329cbcf4"},"sound3/fireworks/twinkle1.ogg":{"size":14328,"hash":"41b9c631e9c1c40800b3b02a0ac5855d6ad4846d"},"sound3/ambient/cave/cave12.ogg":{"size":21193,"hash":"a720e85e35be0dc3186d01cc599121b87e7ee9f7"},"sound3/mob/sheep/shear.ogg":{"size":6870,"hash":"5d9055cf25f126c47e18637aeef917fa1ef61a42"},"sound3/mob/irongolem/hit2.ogg":{"size":9140,"hash":"bb92fd6971430a515f508a6734392511385826e1"},"sound/step/wood4.ogg":{"size":6817,"hash":"dc66978374a46ab2b87db6472804185824868095"},"newsound/mob/chickenhurt1.ogg":{"size":7740,"hash":"31b52151bf2a6fa35d2d2aa72f832285d9e7d70d"},"sound3/mob/pig/step3.ogg":{"size":4722,"hash":"6226903c5dfd8ac388f9d64a5fa9968680ed3507"},"newsound/fire/ignite.ogg":{"size":7000,"hash":"19c729c3ceb753a824246b494bce5fa5c802f0f0"},"newsound/mob/ghast/death.ogg":{"size":26853,"hash":"725e5179c72444c6d885e39c27e6b31ed83d58bc"},"sound3/dig/wood4.ogg":{"size":6817,"hash":"dc66978374a46ab2b87db6472804185824868095"},"sound3/step/cloth2.ogg":{"size":4862,"hash":"56c1d0ac0de2265018b2c41cb571cc6631101484"},"sound3/liquid/swim1.ogg":{"size":9227,"hash":"6ea4e448fbc2a079acb0cf3564273083dadae165"},"sound3/ambient/weather/thunder2.ogg":{"size":25571,"hash":"a20cbf2ddce541eaed520d7ec55665fe97428be6"},"sound3/mob/zombie/hurt1.ogg":{"size":11047,"hash":"f35e14af35d1d12244dac9e655f4e31d4ef84e1b"},"sound3/mob/silverfish/say4.ogg":{"size":6394,"hash":"4fce41a2d0890418ae1efb03d1142ca74d00aa61"},"streaming/ward.mus":{"size":1987588,"hash":"b245effde68d07ffe32a033b61e96f1ed7e28783"},"sound3/dig/wood1.ogg":{"size":6541,"hash":"9bc2a84d0aa98113fc52609976fae8fc88ea6333"},"sound3/mob/cow/say1.ogg":{"size":9714,"hash":"e07a2da49011ef4cf9d6b1c80a91a06f808c1243"},"newsound/mob/silverfish/step4.ogg":{"size":8842,"hash":"a342f566600caf73464323b20b7770b5b9b7893a"},"sound3/mob/cow/hurt2.ogg":{"size":8430,"hash":"758d2a1c36abc84d2744d697b76d5414ea96d9f3"},"sound3/mob/slime/small1.ogg":{"size":6269,"hash":"5cde2500773323f7997d75062f8a26afcdf62b2e"},"newsound/mob/zombie/wood1.ogg":{"size":7761,"hash":"fa73977dd28020544f7fe2553e5604a6865ec1a6"},"newmusic/nuance2.ogg":{"size":219029,"hash":"78152dc42b036e0de7616e6e669ce5a81d17f82a"},"sound3/step/stone3.ogg":{"size":6631,"hash":"a533e7ae975e62592de868e0d0572778614bd587"},"sound3/step/ladder1.ogg":{"size":6021,"hash":"d6212a1d5feb88d76b9a83ce5a27ab4e6d4c20bb"},"newsound/step/snow3.ogg":{"size":6540,"hash":"a4bc069321a96236fde04a3820664cc23b2ea619"},"newsound/mob/cat/hiss1.ogg":{"size":14666,"hash":"9d2202fce7908dcc5b5c8758c5cd517d863d4dd3"},"newsound/ambient/cave/cave6.ogg":{"size":42176,"hash":"cf23204a9cca2ac7f9674168cc063cfb4dbe001f"},"sound3/mob/chicken/step1.ogg":{"size":3702,"hash":"e0f0ba416a5744036e11bb6a5fc5ac4b8c461873"},"newsound/mob/cat/purr3.ogg":{"size":34965,"hash":"eed7a9305f5879448bb94355f25279b4aac403b6"},"sound3/mob/irongolem/walk2.ogg":{"size":6945,"hash":"356fdb6192cf96aa5d5d9c76413f412f6a4d66a4"},"sound3/mob/zombiepig/zpighurt1.ogg":{"size":6935,"hash":"a2cfbea288280419ec0c8fb75d8ee5395536ac02"},"newsound/note/harp.ogg":{"size":6137,"hash":"46244605b8663a29cdce7bccc5b2d038241e32ee"},"sound3/damage/hit3.ogg":{"size":7660,"hash":"c73dcedde5031fcf242b08b3405f63098cd70641"},"newsound/mob/irongolem/walk4.ogg":{"size":7021,"hash":"88ae6c906f8f94add2fe904b59c94e844bbcef9a"},"newsound/mob/spider4.ogg":{"size":6343,"hash":"3cf3e8d3aab0a3092f6c6bf681ff156bc9653859"},"sound3/mob/bat/hurt4.ogg":{"size":5410,"hash":"0ba4a7830ea8852bf7844872d7e2d2a408fb77e4"},"sound3/mob/endermen/hit4.ogg":{"size":5573,"hash":"6e0f9074e049a6c30402d70cc75a5da99042e00c"},"sound3/mob/endermen/portal2.ogg":{"size":7442,"hash":"35461b6a4253db40973549e82d91f267c686be85"},"sound3/mob/cat/purr3.ogg":{"size":34965,"hash":"eed7a9305f5879448bb94355f25279b4aac403b6"},"sound3/mob/sheep/step4.ogg":{"size":5018,"hash":"6ff26a1439fb6f9f353c2bd623edeb936e760855"},"newsound/mob/pig2.ogg":{"size":6798,"hash":"ab615a912fb8ea06648836e0ec1cbeeefe117da6"},"sound3/step/snow1.ogg":{"size":6532,"hash":"e9bab7d3d15541f0aaa93fad31ad37fd07e03a6c"},"sound3/ambient/cave/cave1.ogg":{"size":33948,"hash":"29d4dccf3353334c7aa2a49cb6fed3780a51a1ba"},"sound3/random/pop.ogg":{"size":4193,"hash":"8f45b5faf6dfae2065846d26612f7552b73640dd"},"newsound/mob/creeper1.ogg":{"size":6647,"hash":"74771428c2aa2acbd30638c6706867053bad64d3"},"newsound/mob/zombiepig/zpig3.ogg":{"size":5916,"hash":"c9f7fa36ae48eca0a1f6ce024fde5d3472d30b4d"},"newsound/mob/wolf/panting.ogg":{"size":7380,"hash":"c2e4001d9ae8fc1f066a914170faad4c45a84e1e"},"sound3/dig/sand3.ogg":{"size":5552,"hash":"c75589cc0087069f387de127dd1499580498738e"},"sound3/mob/sheep/step3.ogg":{"size":4843,"hash":"101164ea1b442a8e1e8ca181d9cef833c57d7be3"},"newsound/mob/cat/meow4.ogg":{"size":9560,"hash":"4bf7c7a08c1217de7b1f0faf82429665fbf18458"},"sound3/mob/magmacube/jump4.ogg":{"size":12902,"hash":"500e2543034b4c026fb175d48c47196c5d013fe8"},"newsound/mob/cow3.ogg":{"size":16616,"hash":"f75617763129506ae7220ed16cdff7a8084eebb3"},"sound3/random/explode3.ogg":{"size":25298,"hash":"a94a69e56568f5789cab05382cfd81f601189fd1"},"sound3/mob/ghast/charge.ogg":{"size":13415,"hash":"6f1d403f47725af0f4c42a74cfec00ff59153160"},"sound3/mob/pig/step4.ogg":{"size":4483,"hash":"f5e1ba4ac271b4c2feee86a4d04e32279ea99c10"},"newsound/mob/creeperdeath.ogg":{"size":13005,"hash":"fbc1b2c89c5c781e30d702b2885be3f485105869"},"newsound/note/bd.ogg":{"size":3850,"hash":"1afefaa39a53606d2737bab9cb3409350cb2dc9f"},"sound3/dig/stone1.ogg":{"size":6695,"hash":"4e094ed8dfa98656d8fec52a7d20c5ee6098b6ad"},"sound3/step/wood6.ogg":{"size":9093,"hash":"944bc8b8e1e135340dc4afc6d3416a01222674a1"},"newsound/mob/irongolem/hit3.ogg":{"size":8947,"hash":"27c78cd09f7fd1770a41d78247ccf57c77dbc773"},"sound3/fireworks/launch1.ogg":{"size":15598,"hash":"b1715242916d56140486c612056ea4d6dd5a4404"},"sound3/step/snow3.ogg":{"size":6540,"hash":"a4bc069321a96236fde04a3820664cc23b2ea619"},"newsound/mob/silverfish/hit1.ogg":{"size":7371,"hash":"84c3b008dc1d5e0dd5e8ad85a06eca29f0591e48"},"sound3/mob/wither/idle3.ogg":{"size":19307,"hash":"79afbeabcdbb063cfa00d544dc00beac8543a581"},"newsound/mob/endermen/scream1.ogg":{"size":11231,"hash":"c4b5265bbafbe058347058a257abe33a0afb5ab7"},"sound3/mob/irongolem/walk1.ogg":{"size":7064,"hash":"4e3e9f37c1e0c12c2993d25c28b89e2f0797ba5a"},"sound3/note/bd.ogg":{"size":3850,"hash":"1afefaa39a53606d2737bab9cb3409350cb2dc9f"},"newsound/mob/skeleton1.ogg":{"size":8727,"hash":"199c9f150822950385b9bc1d840605a6a795bd27"},"newsound/random/explode3.ogg":{"size":25298,"hash":"a94a69e56568f5789cab05382cfd81f601189fd1"},"sound3/mob/ghast/moan2.ogg":{"size":8909,"hash":"02073c284f025653e55f9cde25a4a62723d395fa"},"newsound/mob/zombie/wood2.ogg":{"size":7649,"hash":"dc86fbd59cf0e87cd35b22df2a2df899ab8c1f7f"},"sound3/ambient/cave/cave11.ogg":{"size":36963,"hash":"e367d1dfa1ce07374e0aeaecbfb1526142a0dcc1"},"sound3/mob/zombie/woodbreak.ogg":{"size":10929,"hash":"4e94ed53b6059d150c3bb2322b4af9ca9514bae1"},"sound3/mob/irongolem/hit1.ogg":{"size":9479,"hash":"942937fcad0fefd61e019678e3710f3f077757d4"},"sound3/mob/cow/say3.ogg":{"size":13330,"hash":"05f429069e65d78f7e6609d070a3f294cc3128ab"},"newsound/mob/zombie1.ogg":{"size":16877,"hash":"b5bc9775243437d87317ab3a66ec8a4d5b96c83d"},"sound3/dig/wood3.ogg":{"size":6604,"hash":"45b2aef7b5049e81b39b58f8d631563fadcc778b"},"sound3/step/cloth1.ogg":{"size":4832,"hash":"5fd568d724ba7d53911b6cccf5636f859d2662e8"},"newsound/step/stone1.ogg":{"size":6695,"hash":"4e094ed8dfa98656d8fec52a7d20c5ee6098b6ad"},"streaming/13.mus":{"size":1071028,"hash":"c343dc04df647fb25bec35ee23dc973e7374dcf9"},"sound3/mob/blaze/breathe4.ogg":{"size":22054,"hash":"78d544a240d627005aaef6033fd646eafc66fe7a"},"sound3/mob/irongolem/death.ogg":{"size":17766,"hash":"770b3f1feb05b9b941d858eb72b9d04ffc5d52c9"},"newsound/ambient/cave/cave4.ogg":{"size":49499,"hash":"48540d7788ce3d9e780cb448ce5676c53dbcfd23"},"sound3/mob/wolf/howl1.ogg":{"size":16994,"hash":"84556bac99c01ad006552cf5d96494817e9b1700"},"sound3/mob/wolf/step5.ogg":{"size":5143,"hash":"3610feb2a1a575026cfa3ab44965d114e74ea583"},"newsound/mob/wolf/howl1.ogg":{"size":16994,"hash":"84556bac99c01ad006552cf5d96494817e9b1700"},"sound3/mob/endermen/portal.ogg":{"size":10010,"hash":"7b4b5323ef066caa1ae43cbe66fffd9dfce4ed32"},"newsound/mob/magmacube/small3.ogg":{"size":5314,"hash":"65a1a69845133187d6b8689e6ce9707da10f21a6"},"sound3/mob/enderdragon/growl4.ogg":{"size":25574,"hash":"c84b0cf222e7dcbedde8eb9deb98835032f4d402"},"sound3/mob/enderdragon/wings1.ogg":{"size":10617,"hash":"5a368ed32b3357e31629451ace57eb30d90e8874"},"sound3/mob/cow/step2.ogg":{"size":7885,"hash":"555d33de143e6dcef2aa80ebf9a8f8b1481d42d0"},"sound3/ambient/cave/cave2.ogg":{"size":48741,"hash":"5680749048457f5772ec95a73d856ad792fa1717"},"sound3/step/stone2.ogg":{"size":7086,"hash":"22a383d9c22342305a4f16fec0bb479a885f8da2"},"sound3/mob/cat/purr2.ogg":{"size":28974,"hash":"847ec719ee91e28d7bf58ab39a5d8d6bd5728314"},"newsound/mob/wolf/howl2.ogg":{"size":18136,"hash":"cdb0293c5e2bdbda21798af4e61a4c171c8b1ec0"},"newsound/mob/cat/purr2.ogg":{"size":28974,"hash":"847ec719ee91e28d7bf58ab39a5d8d6bd5728314"},"sound3/ambient/weather/thunder3.ogg":{"size":27653,"hash":"9ead5c928f9122e3c2f5fc4f6ce7fb4054a2b578"},"sound3/mob/blaze/hit4.ogg":{"size":7383,"hash":"3f447f3e331b59ad014d9bd4a6536f98cf3a08c3"},"sound3/mob/silverfish/say3.ogg":{"size":7060,"hash":"e7f0f24c2c9f4bf83286b17109580d3e845d19e3"},"sound3/mob/cow/say2.ogg":{"size":13553,"hash":"228bab6d9b09994dc407b9d022bebca791d81c16"},"sound3/dig/wood2.ogg":{"size":6294,"hash":"98102533e6085617a2962157b4f3658f59aea018"},"sound3/mob/slime/small2.ogg":{"size":5518,"hash":"5e2ef521293719bbe22bbb515bbcacf4c233a075"},"sound3/mob/bat/idle2.ogg":{"size":4767,"hash":"e9d023a54a6b514af496c8f253f5f3fa948fd4b6"},"sound3/mob/cow/hurt3.ogg":{"size":8934,"hash":"2a031f10c7dc24e75d5dc3a374ebe7f36fc3e143"},"sound3/random/door_close.ogg":{"size":6510,"hash":"9ea8a9e105321891bda18b9007b383b40aa7c076"},"newmusic/nuance1.ogg":{"size":156322,"hash":"cc1a80b6becfc6d6489c069f053d0a8adc71c339"},"sound3/mob/creeper/death.ogg":{"size":13005,"hash":"fbc1b2c89c5c781e30d702b2885be3f485105869"},"sound3/step/snow2.ogg":{"size":6567,"hash":"5887d10234c4f244ec5468080412f3e6ef9522f3"},"sound3/fireworks/blast1.ogg":{"size":11071,"hash":"d9d7511e8944da0c7ab4ed2d3e3d964f98dd6997"},"sound3/mob/endermen/death.ogg":{"size":16232,"hash":"d04dd6d1f050353ef9e3ba9c45f407f831903c69"},"sound3/random/door_open.ogg":{"size":7536,"hash":"5bb5a04e776d69ca12b1d7bc369975f9bf62e741"},"newsound/step/snow4.ogg":{"size":6501,"hash":"e26fa3036cdab4c2264ceb19e1cd197a2a510227"},"sound3/random/bowhit1.ogg":{"size":11106,"hash":"78f034d58779fb4d22b00ea249015a0dbf4e7b3f"},"newsound/mob/creeper2.ogg":{"size":6768,"hash":"c46c7d2a84749bfcbcf576aea0d66fd3deccba31"},"newsound/mob/zombiepig/zpig2.ogg":{"size":10038,"hash":"2cbbcdfb97939c469cd4ccaaac74504497c56695"},"newsound/mob/ghast/moan1.ogg":{"size":7986,"hash":"882d092b05faef1cfa6af43d642b9e8843f22756"},"sound3/damage/hit2.ogg":{"size":6227,"hash":"144867e8792415e2873293f06ecce85cd32bb4e8"},"sound3/fire/ignite.ogg":{"size":6418,"hash":"a0d1fbff7e938e92c10c1576339dda668f40e111"},"sound3/mob/zombiepig/zpighurt2.ogg":{"size":6245,"hash":"d1917b9be91d60a40dd0bf804580c1f494e9ae6d"},"newsound/mob/cow4.ogg":{"size":12233,"hash":"e0bba792682878ee208a54184df9e2e8044f2815"},"newsound/mob/silverfish/step3.ogg":{"size":9308,"hash":"47ad81223bcec870206484cd4d1a6202871df331"},"newsound/tile/piston/in.ogg":{"size":5900,"hash":"594be3eaea9a2b92095eeeb3b1e01e755dcb8ce2"},"newsound/mob/pig3.ogg":{"size":5602,"hash":"58efedf302e0203a6ff9e59a6535d300286c5594"},"newsound/random/bow.ogg":{"size":6658,"hash":"87edc11141fb5a045f2ed830b545aaa73f96ee99"},"newsound/random/bowhit2.ogg":{"size":10640,"hash":"c3cd0db760c980287b26ef9c0894f66c4250724e"},"sound3/mob/creeper/say4.ogg":{"size":7111,"hash":"85c860ea8c55984bf6cabb75354c78f3a603f98d"},"sound3/damage/hit1.ogg":{"size":6539,"hash":"8760ebb9d4b1fe9457ef272324ecd6b4329a593e"},"sound3/mob/pig/say1.ogg":{"size":5645,"hash":"a99bf88163bcb576e31e6e2275145afba6d1b4c7"},"sound3/tile/piston/out.ogg":{"size":6059,"hash":"cb017131516de9359cb81fb991f5b3694044f8db"},"sound3/mob/wither/hurt4.ogg":{"size":16699,"hash":"72a006be3bd693aa23cc2f8e9c9d13ea6f829aa1"},"newsound/mob/silverfish/hit2.ogg":{"size":6717,"hash":"38d4d36bbe40a48c3a8ef97735b59b37f013fd6e"},"newsound/note/bassattack.ogg":{"size":5574,"hash":"037b9fb7f74381f354739d015193dc4a6897f620"},"sound3/mob/wither/idle4.ogg":{"size":19355,"hash":"e3f90fb5afaf84475dd31dca6f65378a455d17f7"},"newsound/mob/chicken1.ogg":{"size":7956,"hash":"74e5422bd83bb2041a6f0d09644bc095c0e9e21a"},"sound3/mob/enderdragon/growl1.ogg":{"size":26384,"hash":"049a3049a5ac8631a6c5f367b7d824fc0d8de39b"},"newsound/random/eat1.ogg":{"size":5678,"hash":"dfee39084c771182f6b9e7cfb8c8bc4e255747bc"},"newsound/random/click.ogg":{"size":7046,"hash":"2fe092579d9637e2d160319820ee08e60a237bb7"},"sound3/mob/cat/hitt3.ogg":{"size":7371,"hash":"3d98b4b7c37a09101da00d8a3078e0acba6558f4"},"sound3/mob/chicken/plop.ogg":{"size":4680,"hash":"ab5a32b70ef1e7aafc550b20afdb7dc8c0d5d901"},"sound3/mob/sheep/step2.ogg":{"size":4819,"hash":"59034eb696e186d973dcea0b162f01e38f1b4f31"},"newsound/note/snare.ogg":{"size":3969,"hash":"6967f0af60f480e81d32f1f8e5f88ccafec3a40c"},"sound3/mob/zombie/step1.ogg":{"size":13871,"hash":"9680c9dcd637ddea8e10a0d73705aa155d04a132"},"newsound/mob/cat/hitt2.ogg":{"size":9180,"hash":"ce499da6ec5dd226d50843890ca09f16018aff9a"},"streaming/stal.mus":{"size":1180789,"hash":"a01e4caf7aaac61502a4a5e4f277b0de4795b802"},"sound3/step/sand1.ogg":{"size":5123,"hash":"9813c8185197f4a4296649f27a9d738c4a6dfc78"},"newsound/note/pling.ogg":{"size":6274,"hash":"20d06589bd5ab81a73989bdac8ca59ecd4d66932"},"sound3/dig/grass4.ogg":{"size":7163,"hash":"c7b1005d4926f6a2e2387a41ab1fb48a72f18e98"},"newsound/mob/skeletondeath.ogg":{"size":8264,"hash":"a795e9a7721927282befc085e4e397a6379e3004"},"newsound/random/break.ogg":{"size":6551,"hash":"8bf3ecb0fe9a6a615f5995e3dd21b6c39adc21d5"},"newsound/mob/spider3.ogg":{"size":7709,"hash":"f9f79162efa6667b753c1fbb46ff9888e8ce5f32"},"newsound/mob/cat/purreow2.ogg":{"size":12237,"hash":"08573a1f11058b09c5855122dff47ceb209f771e"},"newsound/mob/wolf/growl3.ogg":{"size":13663,"hash":"69ef2fe8d6a744689953fd692d0106b0b2d2a9ce"},"sound3/mob/enderdragon/hit3.ogg":{"size":11158,"hash":"e96237fdf5e5e1aca09496b9192243651525d0ac"},"newsound/damage/hurtflesh2.ogg":{"size":9818,"hash":"4e1651a728b394e054aaa24e3070e7dae849f14d"},"newsound/mob/zombiepig/zpig1.ogg":{"size":8536,"hash":"ec4b0396dd2fc2da8fab91ddc35218d3426349b3"},"sound3/mob/endermen/hit3.ogg":{"size":6564,"hash":"aaa8f1705c873ebc05da460657c8b83fa01ffd57"},"sound3/mob/cow/step1.ogg":{"size":7411,"hash":"fec7c7997f8eb6faaebd37f0eaed417118d3a498"},"sound/step/wood2.ogg":{"size":6294,"hash":"98102533e6085617a2962157b4f3658f59aea018"},"sound3/mob/wolf/howl2.ogg":{"size":18136,"hash":"cdb0293c5e2bdbda21798af4e61a4c171c8b1ec0"},"newsound/mob/zombiehurt1.ogg":{"size":11047,"hash":"f35e14af35d1d12244dac9e655f4e31d4ef84e1b"},"sound3/step/stone4.ogg":{"size":7520,"hash":"d5218034051a13322d7b5efc0b5a9af739615f04"},"newsound/ambient/cave/cave5.ogg":{"size":67196,"hash":"18a992d93128bb2e2861930cff3140c6940c0127"},"newsound/mob/blaze/breathe2.ogg":{"size":22547,"hash":"c74368d2b978f570b4e7ce9645fd84b07f8f145c"},"newsound/mob/cowhurt2.ogg":{"size":6542,"hash":"be0be76687eab152334a35fdb76e6ab4455bfaef"},"newmusic/hal2.ogg":{"size":1754429,"hash":"ceaaaa1d57dfdfbb0bd4da5ea39628b42897a687"},"newsound/mob/magmacube/small4.ogg":{"size":5387,"hash":"a485082ed0820eeeb9df13f84f26b14744ceeb2a"},"sound3/random/levelup.ogg":{"size":32140,"hash":"9d52e43288d7f9e4d14199368a0f30ae3570d05a"},"newsound/mob/zombie/metal1.ogg":{"size":8632,"hash":"d5b2d34e0c07a6c09c1adb17a15e50a626a88bc1"},"newsound/mob/zombie/wood3.ogg":{"size":8090,"hash":"8184e851170619de93aa56244fb12c472a2ddd7d"},"sound3/mob/skeleton/hurt1.ogg":{"size":9986,"hash":"4d03069c0e14794b463f563044da46433776da60"},"sound3/mob/pig/death.ogg":{"size":13694,"hash":"4bc87ab869e17732a20c7518a327136baf5b2c26"},"newsound/mob/irongolem/death.ogg":{"size":17766,"hash":"770b3f1feb05b9b941d858eb72b9d04ffc5d52c9"},"newsound/mob/ghast/moan2.ogg":{"size":8909,"hash":"02073c284f025653e55f9cde25a4a62723d395fa"},"newsound/mob/silverfish/kill.ogg":{"size":10410,"hash":"24cdac5a80fdad7ab31dc0695b57ece55aecb21a"},"sound3/mob/irongolem/walk4.ogg":{"size":7021,"hash":"88ae6c906f8f94add2fe904b59c94e844bbcef9a"},"sound3/mob/cat/hiss1.ogg":{"size":14666,"hash":"9d2202fce7908dcc5b5c8758c5cd517d863d4dd3"},"newsound/mob/ghast/scream5.ogg":{"size":11650,"hash":"77a7b79d4f2ada27640866ece1020b631f5bdc54"},"sound3/mob/blaze/hit3.ogg":{"size":7229,"hash":"97e09d51c82b78ab82fb3a4dbbb8cd701b2d0aeb"},"sound3/mob/cat/purr1.ogg":{"size":27911,"hash":"315512d6027033c2a279841badb40a26d74efc81"},"newsound/mob/cat/purr1.ogg":{"size":27911,"hash":"315512d6027033c2a279841badb40a26d74efc81"},"newsound/mob/slimeattack2.ogg":{"size":7391,"hash":"f6e2067571631aae206000a501c9adebe862e32a"},"sound3/mob/bat/idle1.ogg":{"size":5708,"hash":"c3c175d70372d8448c070d0716a8d88beec8b8b7"},"sound3/mob/irongolem/hit3.ogg":{"size":8947,"hash":"27c78cd09f7fd1770a41d78247ccf57c77dbc773"},"sound3/mob/slime/small3.ogg":{"size":5314,"hash":"3bc8225914b1be20db68fcdae202d5acee3234c2"},"sound3/ambient/cave/cave3.ogg":{"size":50958,"hash":"d4b06ccb8e331ece734f51d84a0a5fbc7164d8be"},"newsound/random/chestclosed.ogg":{"size":7779,"hash":"056393a33a9633685c3dc3be2887f5cbd7dbc63f"},"sound3/mob/wither/shoot.ogg":{"size":11481,"hash":"78ee5b46b6615191b7a16d259fcbda273762297e"},"newsound/mob/irongolem/throw.ogg":{"size":5316,"hash":"607d51883e137d5d423dde865232ab1ee78f2694"},"newsound/mob/magmacube/big1.ogg":{"size":10917,"hash":"430c65ac81151d873a27d611a9dff6c562e38c4f"},"sound3/ambient/cave/cave13.ogg":{"size":29512,"hash":"63bbe3921abd75b9f6cd1e20330360d164da169b"},"sound3/mob/wolf/step2.ogg":{"size":4766,"hash":"4ba55627b6b9ce64b4a48a00c990d5855b6064cf"},"sound3/step/cloth4.ogg":{"size":4844,"hash":"55da1856e77cfd31a7e8c3d358e1f856c5583198"},"newsound/mob/wolf/death.ogg":{"size":7474,"hash":"77a5d445ed9ee588846947ac3df63f84be6d569d"},"newsound/mob/creeper3.ogg":{"size":6787,"hash":"0979bf115d081d70a985f1cfcab1b9274d6be74e"},"sound3/ambient/weather/rain1.ogg":{"size":13185,"hash":"d68bae1949299ccd8297aaa423dd12e041e83773"},"newsound/mob/endermen/hit2.ogg":{"size":6491,"hash":"cf60aefd0b742c3fa15e808c1a0c33aebd534cc5"},"newsound/mob/zombiepig/zpigangry1.ogg":{"size":8946,"hash":"cadbc5c34979baab1a93f5cf68a50f9bd44ef5a8"},"sound3/mob/zombiepig/zpigangry4.ogg":{"size":9925,"hash":"c76dea473821e2ae9a1f006a4eddfdd0703eecdf"},"sound3/mob/sheep/say1.ogg":{"size":9784,"hash":"a3ffeaa0a75b8d2bdc949c181a6f8db78f8976ca"},"sound3/mob/chicken/say3.ogg":{"size":7080,"hash":"49874e07369c3bb0bc8a2fba4f2096d2e9a36c9a"},"newsound/mob/silverfish/step2.ogg":{"size":9498,"hash":"f1665747da14569c4de55e07884deeef18a40f62"},"newsound/mob/slime4.ogg":{"size":5408,"hash":"ca1b7de8bb9ce92f2f044c6a98c99d7bf92b7184"},"sound3/mob/chicken/hurt1.ogg":{"size":7740,"hash":"31b52151bf2a6fa35d2d2aa72f832285d9e7d70d"},"sound3/mob/zombie/remedy.ogg":{"size":38114,"hash":"8ed3945df8b9264c6451c153357475482d9f2066"},"newsound/random/explode4.ogg":{"size":25090,"hash":"f259be40364341edcaf88e339bc24ab01e49845a"},"sound3/step/ladder3.ogg":{"size":6281,"hash":"3fee58d7b2c99ddbce962618176637574ae8d67b"},"sound3/tile/piston/in.ogg":{"size":5900,"hash":"594be3eaea9a2b92095eeeb3b1e01e755dcb8ce2"},"sound3/mob/enderdragon/wings6.ogg":{"size":11150,"hash":"e7e8d393fc03a476227890e9ec9319dcc4b400ea"},"sound/step/gravel3.ogg":{"size":6905,"hash":"48f7e1bb098abd36b9760cca27b9d4391a23de26"},"sound3/mob/bat/hurt2.ogg":{"size":5530,"hash":"573e565b7fda2c34fc972edd21a82fd2e09200f8"},"sound3/dig/snow2.ogg":{"size":6567,"hash":"5887d10234c4f244ec5468080412f3e6ef9522f3"},"sound3/mob/ghast/moan5.ogg":{"size":14107,"hash":"48fc6c25d0f1c1f0edd4eaca2b6f934d4117f440"},"sound3/mob/zombie/death.ogg":{"size":9836,"hash":"6e0488ab07b9539fbaebc093f194bb6a95b2caec"},"sound3/random/bowhit2.ogg":{"size":10640,"hash":"c3cd0db760c980287b26ef9c0894f66c4250724e"},"newsound/mob/skeletonhurt4.ogg":{"size":7758,"hash":"0f3a7e5a20119853986d2cfae22ca3a46926ac76"},"sound3/dig/sand4.ogg":{"size":5491,"hash":"37afa06f97d58767a1cd1382386db878be1532dd"},"newsound/mob/wolf/growl2.ogg":{"size":10311,"hash":"f57577fe6915175f9e4576e8d73ad4077a381433"},"newsound/mob/silverfish/hit3.ogg":{"size":7205,"hash":"5b1675279bbc245fc6bbb705de8ea09fb3f32b53"},"newsound/random/burp.ogg":{"size":6337,"hash":"bdc648e04933df8ddcccc84b375d6556776d4331"},"sound3/mob/zombiepig/zpigdeath.ogg":{"size":10357,"hash":"40b8e244d03ae17483edd4571bd851e10a97050f"},"sound3/mob/ghast/moan4.ogg":{"size":9393,"hash":"935f1a575322bd0ec53a919fd061321216889104"},"sound3/step/grass2.ogg":{"size":8131,"hash":"5c971029d9284676dce1dda2c9d202f8c47163b2"},"sound3/mob/zombie/step2.ogg":{"size":12214,"hash":"e8dcca0e494a3f479f58f581c9a8e297cc92f4e7"},"newsound/mob/zombie/wood4.ogg":{"size":7608,"hash":"1028d0a373790e14c34786a925c4656bdaeb4c4d"},"sound/step/stone1.ogg":{"size":6695,"hash":"4e094ed8dfa98656d8fec52a7d20c5ee6098b6ad"},"sound3/mob/endermen/hit2.ogg":{"size":6491,"hash":"cf60aefd0b742c3fa15e808c1a0c33aebd534cc5"},"sound3/note/bass.ogg":{"size":5479,"hash":"e28d844995368de1d45c724a5d371c9952ae5ed4"},"sound3/random/anvil_use.ogg":{"size":13633,"hash":"88a792430dfff97582ab49b8dc9477cd9d4e5ebb"},"sound3/mob/enderdragon/hit4.ogg":{"size":10812,"hash":"d2c44730f6c93676d4e4316add92e424d0a71a33"},"newsound/damage/hurtflesh3.ogg":{"size":10390,"hash":"4b49dd9329b254e38f17166b7daa51a758a25f94"},"newsound/mob/cowhurt1.ogg":{"size":6616,"hash":"2c849f4b6ec1cf084ac84d57ec90779266b23ae8"},"sound3/mob/enderdragon/growl2.ogg":{"size":27101,"hash":"d859c9c5be04ffc41479b306814a933983eaa235"},"newsound/mob/zombie3.ogg":{"size":19806,"hash":"7eb3affa45f47f919e74523a55185e65c2081d12"},"newsound/random/fuse.ogg":{"size":29271,"hash":"a92ba2b8f6abc41aa8d679ad808a81d0aafa04b2"},"sound3/random/explode1.ogg":{"size":19732,"hash":"cd46e41023887558b134547e28327de6e7df189a"},"newsound/mob/silverfish/step1.ogg":{"size":8382,"hash":"763cc79934a572b84c371cb49afad5912f29d2f1"},"sound3/mob/endermen/scream4.ogg":{"size":10411,"hash":"bcc73584d83225383aaa6affce905392c96afe86"},"sound3/mob/endermen/idle1.ogg":{"size":6793,"hash":"281b87984ddf8e94324bc86911a36c971cb3d831"},"sound3/note/snare.ogg":{"size":3969,"hash":"6967f0af60f480e81d32f1f8e5f88ccafec3a40c"},"newsound/mob/pigdeath.ogg":{"size":13694,"hash":"4bc87ab869e17732a20c7518a327136baf5b2c26"},"sound3/mob/zombie/metal3.ogg":{"size":8843,"hash":"322374d89ed809e75005cdc4f6479c959e15aee2"},"sound3/random/fizz.ogg":{"size":17002,"hash":"c649e60ea9a99c97501a50d2dc4e579343e91ea8"},"newsound/mob/cat/hitt3.ogg":{"size":7371,"hash":"3d98b4b7c37a09101da00d8a3078e0acba6558f4"},"newsound/mob/cow1.ogg":{"size":13214,"hash":"1298f4526580c8f10812253e7d9130ce4afc3a1e"},"sound3/mob/pig/step2.ogg":{"size":4508,"hash":"a69a66bfda52a42ea8cf712eb1caa8830046c14f"},"sound3/mob/irongolem/throw.ogg":{"size":5316,"hash":"607d51883e137d5d423dde865232ab1ee78f2694"},"sound3/step/stone5.ogg":{"size":7752,"hash":"48dd05ab2e4626d74206c2b09a628a3d59ce15e9"},"sound3/mob/sheep/step1.ogg":{"size":4838,"hash":"5288cab96e26207edd31307c9c01b6902306e4f6"},"sound3/ambient/weather/rain2.ogg":{"size":13301,"hash":"ba58e1b6c8cc814a210db268d3e59a06b7ac62be"},"sound3/mob/blaze/death.ogg":{"size":30155,"hash":"17491c8dd9511e9d848c92b4b7ae047aed164072"},"sound3/step/cloth3.ogg":{"size":4897,"hash":"9c63f2a3681832dc32d206f6830360bfe94b5bfc"},"newsound/mob/spider2.ogg":{"size":7405,"hash":"501b40b97ee55cb7a97943ee620aa05131089fc2"},"sound3/mob/wither/hurt3.ogg":{"size":16731,"hash":"a4cf4ebe4c475cd6a4852d6b4228a4b64cf5cb00"},"sound/step/wood3.ogg":{"size":6604,"hash":"45b2aef7b5049e81b39b58f8d631563fadcc778b"},"newsound/mob/zombiehurt2.ogg":{"size":11005,"hash":"bc85d96a99e84a234cbe23841f87e84e71198be3"},"streaming/mellohi.mus":{"size":663709,"hash":"7c5b628070ce191762b972fc3a58d57bc10a628a"},"newsound/mob/endermen/idle2.ogg":{"size":8236,"hash":"9c7aaf49b3096a69a2d6ca62c1067400a2b70814"},"newsound/mob/zombiepig/zpigdeath.ogg":{"size":10357,"hash":"40b8e244d03ae17483edd4571bd851e10a97050f"},"newsound/mob/creeper4.ogg":{"size":7111,"hash":"85c860ea8c55984bf6cabb75354c78f3a603f98d"},"newsound/mob/pig1.ogg":{"size":5645,"hash":"a99bf88163bcb576e31e6e2275145afba6d1b4c7"},"sound3/step/ladder2.ogg":{"size":6125,"hash":"fd446ad40d24edfe4fb789a6065276e164ea4b61"},"sound3/portal/trigger.ogg":{"size":24992,"hash":"301f32642b654addbd06a430768fead464fd24c4"},"newsound/mob/silverfish/say1.ogg":{"size":6584,"hash":"515dffc5d6dd216550d69e61b2eb9c3593b19a20"},"sound3/mob/blaze/hit2.ogg":{"size":7356,"hash":"00b38fae5d28d99514a3e73a913af16359b12b7a"},"newsound/mob/endermen/death.ogg":{"size":16232,"hash":"d04dd6d1f050353ef9e3ba9c45f407f831903c69"},"streaming/blocks.mus":{"size":2587419,"hash":"eaf1d4879f3bf6f5f60ba01f475dc581c641b4ae"},"sound3/dig/snow1.ogg":{"size":6532,"hash":"e9bab7d3d15541f0aaa93fad31ad37fd07e03a6c"},"sound3/fireworks/largeBlast1.ogg":{"size":17306,"hash":"ef59205829f09ac4855c614a0e7046db820df18b"},"sound3/ambient/weather/thunder1.ogg":{"size":24468,"hash":"671ef0ae7b59014a2f637d7af6d781324ab6309f"},"sound/step/gravel4.ogg":{"size":6728,"hash":"7bf3553a4fe41a0078f4988a13d6e1ed8663ef4c"},"newsound/liquid/lava.ogg":{"size":45349,"hash":"17e66efe64256142c55ef6f35060f277f127bb44"},"newsound/mob/endermen/idle3.ogg":{"size":10073,"hash":"bc4c2e76d3b5a0e6f9d5837fe82ed26e808aa918"},"sound3/mob/pig/step1.ogg":{"size":5285,"hash":"05baaf5ed0cbdab08292b3962e1b1385e13b9dba"},"newsound/step/sand1.ogg":{"size":5543,"hash":"9e59c3650c6c3fc0a475f1b753b2fcfef430bf81"},"music/calm3.ogg":{"size":2232651,"hash":"14ae57a6bce3d4254daa8be2b098c2d99743cc3f"},"sound3/mob/zombiepig/zpigangry3.ogg":{"size":9061,"hash":"e0c88ca054666aae58b89abdcf377eae525aa13e"},"sound3/liquid/lavapop.ogg":{"size":5609,"hash":"19a5aae31c3e0018a960b709a9f0240d8d47dda7"},"newsound/mob/ghast/moan3.ogg":{"size":8925,"hash":"dcec2d45fbc25f74a399ec9f8001e0ecd2d5d85e"},"sound3/mob/wolf/step3.ogg":{"size":4745,"hash":"30e920526eb5855065b873e30d17b4d85bfbe570"},"newsound/mob/magmacube/small5.ogg":{"size":4826,"hash":"560dd97e6da8badbc8ac00b28c45312e60a525f2"},"sound3/note/pling.ogg":{"size":6274,"hash":"20d06589bd5ab81a73989bdac8ca59ecd4d66932"},"sound3/mob/irongolem/hit4.ogg":{"size":8686,"hash":"a2dbb90f23b0babe7c569ceca28db49d0c112714"},"newmusic/hal1.ogg":{"size":1972217,"hash":"df1ff11b79757432c5c3f279e5ecde7b63ceda64"},"streaming/strad.mus":{"size":1558180,"hash":"bcadae10578ff321236f5670934f0b287eb80fbc"},"sound3/mob/bat/hurt3.ogg":{"size":5249,"hash":"1599551814c141acd0c4a3c4a0ff83f4c4e3026d"},"sound3/mob/chicken/hurt2.ogg":{"size":6177,"hash":"18752157f5d8718e2752805a657c74a73d2b88db"},"sound3/mob/endermen/scream3.ogg":{"size":9843,"hash":"dbab0094299eacbce86ad427edcb34b8342861af"},"sound3/mob/zombie/metal2.ogg":{"size":8889,"hash":"6c5a03460012d7b76c16d0dbaa01c443a6ba094e"},"sound3/ambient/cave/cave9.ogg":{"size":27096,"hash":"b463fa47816fe9a5dfe508093150e647403e4db6"},"sound3/random/anvil_land.ogg":{"size":9210,"hash":"934b16e82b94d5790175615303594f0ec28da4a0"},"newsound/mob/cat/purreow1.ogg":{"size":11787,"hash":"d00791807e913e57d58fd891cb4dd10186cfdf38"},"newsound/mob/skeleton3.ogg":{"size":8161,"hash":"a11ac56ec61c17e99f4ee33d8712404edf442720"},"sound3/mob/magmacube/small1.ogg":{"size":6269,"hash":"5c633c345fe4cb87c36ada2fe2b5da1b80601cf3"},"sound3/mob/zombie/hurt2.ogg":{"size":11005,"hash":"bc85d96a99e84a234cbe23841f87e84e71198be3"},"newsound/mob/endermen/hit1.ogg":{"size":6883,"hash":"753a88c1d9b3b46210c18ff07974955463edd18b"},"newsound/mob/ghast/fireball4.ogg":{"size":8535,"hash":"eafa60d7ec34f86e8f07a001ddcdf5c4600bb174"},"newsound/mob/slime3.ogg":{"size":5335,"hash":"087e5fa84e7c961778397a0d938bde1e49dd3beb"},"sound3/mob/irongolem/walk3.ogg":{"size":6883,"hash":"e0672d288b09996f7c7e1a0ca696de82b7a02d18"},"newsound/note/bass.ogg":{"size":5479,"hash":"e28d844995368de1d45c724a5d371c9952ae5ed4"},"newsound/ambient/weather/thunder3.ogg":{"size":27653,"hash":"9ead5c928f9122e3c2f5fc4f6ce7fb4054a2b578"},"sound3/random/anvil_break.ogg":{"size":13741,"hash":"705a155201cc388a0c0c6f7435ddbc0fcc56b5f2"},"sound3/step/grass3.ogg":{"size":7013,"hash":"76de0a736928eac5003691d73bdc2eda92116198"},"sound3/dig/cloth3.ogg":{"size":4897,"hash":"9c63f2a3681832dc32d206f6830360bfe94b5bfc"},"sound3/mob/spider/say3.ogg":{"size":7709,"hash":"f9f79162efa6667b753c1fbb46ff9888e8ce5f32"},"sound3/mob/chicken/say1.ogg":{"size":7956,"hash":"74e5422bd83bb2041a6f0d09644bc095c0e9e21a"},"newsound/mob/ghast/moan7.ogg":{"size":9222,"hash":"cfb956ba9d26cbdacd16ef77d58764df783b2c7f"},"sound3/mob/zombie/step3.ogg":{"size":11734,"hash":"33acf13c25f65a432348e9476eda67d6a34831e3"},"newsound/step/grass4.ogg":{"size":7163,"hash":"c7b1005d4926f6a2e2387a41ab1fb48a72f18e98"},"sound3/mob/cat/hitt1.ogg":{"size":7595,"hash":"28409652d939d2489d8b5317d51abb873821f0f4"},"sound3/mob/endermen/idle2.ogg":{"size":8236,"hash":"9c7aaf49b3096a69a2d6ca62c1067400a2b70814"},"sound3/portal/portal.ogg":{"size":25153,"hash":"9a20be18fed05330f745a54eb8aeba11aac5403b"},"newmusic/hal4.ogg":{"size":2558252,"hash":"5e7d63e75c6e042f452bc5e151276911ef92fed8"},"newsound/mob/blaze/breathe4.ogg":{"size":22054,"hash":"78d544a240d627005aaef6033fd646eafc66fe7a"},"newsound/mob/chicken3.ogg":{"size":7080,"hash":"49874e07369c3bb0bc8a2fba4f2096d2e9a36c9a"},"newsound/step/cloth1.ogg":{"size":4832,"hash":"5fd568d724ba7d53911b6cccf5636f859d2662e8"},"sound3/ambient/cave/cave8.ogg":{"size":49295,"hash":"9024de3f1dd4bc1e8f445c7c5b812f25c7e31bf6"},"sound3/mob/skeleton/step1.ogg":{"size":8444,"hash":"68e0a58848bbdad12ad2b216d7244754459c9516"},"newsound/step/gravel4.ogg":{"size":6728,"hash":"7bf3553a4fe41a0078f4988a13d6e1ed8663ef4c"},"sound3/mob/zombiepig/zpig1.ogg":{"size":8536,"hash":"ec4b0396dd2fc2da8fab91ddc35218d3426349b3"},"sound3/dig/gravel1.ogg":{"size":6851,"hash":"e8b89f316f3e9989a87f6e6ff12db9abe0f8b09f"},"sound3/mob/pig/say3.ogg":{"size":5602,"hash":"58efedf302e0203a6ff9e59a6535d300286c5594"},"newsound/random/fizz.ogg":{"size":17002,"hash":"c649e60ea9a99c97501a50d2dc4e579343e91ea8"},"sound3/mob/sheep/say3.ogg":{"size":9150,"hash":"c9ac72409cbe6093e84d72a2a5c719d9e4a0e6b2"},"sound3/step/ladder5.ogg":{"size":6077,"hash":"e9a1caaddcde79cdac7aa8eabde50d4cfd1bc578"},"sound3/mob/silverfish/step3.ogg":{"size":9308,"hash":"47ad81223bcec870206484cd4d1a6202871df331"},"sound3/mob/skeleton/hurt3.ogg":{"size":8572,"hash":"acffab0bafe2c82ffc8723880aab5ec1682d4329"},"newsound/mob/wolf/shake.ogg":{"size":13502,"hash":"3d95ea49e91b4295859b193bb41b009b92250a44"},"sound3/mob/ghast/moan7.ogg":{"size":9222,"hash":"cfb956ba9d26cbdacd16ef77d58764df783b2c7f"},"sound3/mob/wither/hurt2.ogg":{"size":16744,"hash":"8072827813f0bffb9847e636245edebb5ddab198"},"sound3/dig/grass2.ogg":{"size":7691,"hash":"86cb1bb0c45625b18e00a64098cd425a38f6d3f2"},"sound3/mob/creeper/say2.ogg":{"size":6768,"hash":"c46c7d2a84749bfcbcf576aea0d66fd3deccba31"},"newsound/random/glass1.ogg":{"size":7443,"hash":"7274a2231ed4544a37e599b7b014e589e5377094"},"sound3/mob/spider/step4.ogg":{"size":9326,"hash":"7d801582e08be973d1a41469d1b92916278d1e88"},"newsound/step/sand2.ogg":{"size":5553,"hash":"0fa4234797f336ada4e3735e013e44d1099afe57"},"newsound/ambient/cave/cave13.ogg":{"size":29512,"hash":"63bbe3921abd75b9f6cd1e20330360d164da169b"},"newsound/mob/ghast/charge.ogg":{"size":13415,"hash":"6f1d403f47725af0f4c42a74cfec00ff59153160"},"newsound/mob/zombiepig/zpighurt2.ogg":{"size":6245,"hash":"d1917b9be91d60a40dd0bf804580c1f494e9ae6d"},"newsound/mob/sheep2.ogg":{"size":8875,"hash":"1cfd864cbda555477ed9523e640de0d234c18858"},"sound3/mob/spider/death.ogg":{"size":14380,"hash":"4c69a6edc25d973999aa0db2bb46b583a31da278"},"newsound/random/drink.ogg":{"size":7734,"hash":"857b75738992d25e338dee640ab191323bcbf798"},"sound3/random/fuse.ogg":{"size":29271,"hash":"a92ba2b8f6abc41aa8d679ad808a81d0aafa04b2"},"sound3/mob/skeleton/death.ogg":{"size":17073,"hash":"641e601132b4adb67951e0d49c1004cf1b86eff2"},"newsound/mob/ghast/scream4.ogg":{"size":12220,"hash":"edbc9e9cb9dfeabef93207fc0bdee6ceee5df7bc"},"sound3/mob/slime/big3.ogg":{"size":9436,"hash":"2c20816632caecf75f00bb968f51847e3a982e75"},"sound3/mob/wolf/hurt3.ogg":{"size":6381,"hash":"a5b3f3cdda4d6e13629ccd0e2a38e1f06baa491a"},"sound3/step/stone6.ogg":{"size":8178,"hash":"c4810a3de80cb57f9cdf8deaacfd36cb619cdf0b"},"sound3/mob/zombie/say3.ogg":{"size":19806,"hash":"7eb3affa45f47f919e74523a55185e65c2081d12"},"newsound/ambient/weather/rain1.ogg":{"size":13185,"hash":"d68bae1949299ccd8297aaa423dd12e041e83773"},"sound3/mob/enderdragon/hit1.ogg":{"size":11056,"hash":"aedeb53dd3315f964ff4d10d0003e4c5f41d1bb0"},"sound3/random/eat3.ogg":{"size":5813,"hash":"9f2c4bab5ed55f1714fffa223985c81babc8f6c0"},"sound3/ambient/weather/rain3.ogg":{"size":13322,"hash":"4cdd8fc380e85409fd94b93abdcad077d75ec58f"},"newsound/mob/wolf/growl1.ogg":{"size":12761,"hash":"0b29f5ce8c4c10fa4184e5d29244f3bc121468a0"},"sound3/mob/magmacube/small5.ogg":{"size":4826,"hash":"560dd97e6da8badbc8ac00b28c45312e60a525f2"},"sound3/mob/endermen/hit1.ogg":{"size":6883,"hash":"753a88c1d9b3b46210c18ff07974955463edd18b"},"newsound/mob/spider1.ogg":{"size":9045,"hash":"65b49739d48ebc47879ca5528c8283329980b304"},"newsound/mob/endermen/idle4.ogg":{"size":11208,"hash":"405e2f82caef7f79eb9e26886520711e446366ce"},"sound3/mob/ghast/scream2.ogg":{"size":11455,"hash":"57008a7f564443d563968fd040fc13ab226fc8d1"},"newsound/random/hurt.ogg":{"size":11499,"hash":"9d485556b89bf776042080774679c37300bc744b"},"newsound/mob/zombie/metal2.ogg":{"size":8889,"hash":"6c5a03460012d7b76c16d0dbaa01c443a6ba094e"},"newsound/mob/zombiedeath.ogg":{"size":9836,"hash":"6e0488ab07b9539fbaebc093f194bb6a95b2caec"},"newsound/mob/slime2.ogg":{"size":5506,"hash":"525700bc06b6f0f8afc3fb542977cef617196ccf"},"newsound/mob/endermen/portal.ogg":{"size":10010,"hash":"7b4b5323ef066caa1ae43cbe66fffd9dfce4ed32"},"newsound/damage/fallbig1.ogg":{"size":11207,"hash":"f76d4efd860b599200e96401b2485cc83c1ec21e"},"sound3/mob/zombiepig/zpigangry2.ogg":{"size":5789,"hash":"0349ce87fe856ddf8fdd94a559bb29061b002b6c"},"newsound/mob/magmacube/big3.ogg":{"size":9436,"hash":"d5c4316d30feef5213077e3ee24a7f52c5bf6735"},"newsound/mob/zombiepig/zpigangry3.ogg":{"size":9061,"hash":"e0c88ca054666aae58b89abdcf377eae525aa13e"},"sound3/mob/enderdragon/wings4.ogg":{"size":11702,"hash":"92488929c42221fb3f1dee397a32d2e4de615f3c"},"newsound/step/wood4.ogg":{"size":6817,"hash":"dc66978374a46ab2b87db6472804185824868095"},"sound3/mob/silverfish/hit2.ogg":{"size":6717,"hash":"38d4d36bbe40a48c3a8ef97735b59b37f013fd6e"},"newsound/mob/blaze/breathe1.ogg":{"size":22308,"hash":"4e398c518ae706ad4d90afd6914f748faf18a7b5"},"newsound/mob/silverfish/say2.ogg":{"size":9782,"hash":"396b8b46e593cf55d843853b704dc054ef614e55"},"newsound/mob/skeletonhurt2.ogg":{"size":7414,"hash":"a12f98ac001492ff596b5da9e6297b3be98f9149"},"sound3/mob/spider/step1.ogg":{"size":8826,"hash":"8f7ff84e460ca507f654168f1d24e82637517940"},"newsound/mob/wolf/hurt1.ogg":{"size":6164,"hash":"71b5fc7aa050892f8c9a9ed2713cc1ad8874742a"},"newsound/ambient/cave/cave10.ogg":{"size":22725,"hash":"79a5b53bf22cca182ddff2a670942c49867663ec"},"newsound/mob/cat/meow1.ogg":{"size":9820,"hash":"5fdf1bd80b204245af760042d2e546d87666e288"},"sound3/mob/cat/meow2.ogg":{"size":9349,"hash":"9853be18df1a5b2642e33ba05e71bfd5099f9f04"},"music/calm2.ogg":{"size":1976731,"hash":"74da65c99aa578486efa7b69983d3533e14c0d6e"},"newsound/step/gravel1.ogg":{"size":6851,"hash":"e8b89f316f3e9989a87f6e6ff12db9abe0f8b09f"},"sound3/mob/blaze/breathe1.ogg":{"size":22308,"hash":"4e398c518ae706ad4d90afd6914f748faf18a7b5"},"newsound/ambient/weather/thunder2.ogg":{"size":25571,"hash":"a20cbf2ddce541eaed520d7ec55665fe97428be6"},"newsound/step/cloth4.ogg":{"size":4844,"hash":"55da1856e77cfd31a7e8c3d358e1f856c5583198"},"sound3/note/harp.ogg":{"size":6137,"hash":"46244605b8663a29cdce7bccc5b2d038241e32ee"},"sound3/random/wood click.ogg":{"size":4385,"hash":"b210a3c371441b77fe873133b2cb7b63e367b2f3"},"sound3/step/grass4.ogg":{"size":7377,"hash":"bc28801224a0aa77fdc93bb7c6c94beacdf77331"},"sound3/mob/magmacube/small2.ogg":{"size":5518,"hash":"18237686efcaa1bf9084173c99d11ce0d37d4fc5"},"sound3/random/splash.ogg":{"size":11333,"hash":"22a491f266f5c3cdd6e669a9493daaf40c9c8575"},"newsound/mob/blaze/hit2.ogg":{"size":7356,"hash":"00b38fae5d28d99514a3e73a913af16359b12b7a"},"sound3/step/sand3.ogg":{"size":5144,"hash":"ab07279288fa49215bada5c17627e6a54ad0437c"},"sound3/mob/endermen/scream2.ogg":{"size":11020,"hash":"c8cd465468a0fd41a1d5cc24cb499862b5ade2cb"},"sound3/mob/blaze/hit1.ogg":{"size":7189,"hash":"cb1cf4b405d930ad27f09ea39d6a64f35fc13308"},"newsound/random/door_open.ogg":{"size":7536,"hash":"5bb5a04e776d69ca12b1d7bc369975f9bf62e741"},"sound3/mob/zombie/metal1.ogg":{"size":8632,"hash":"d5b2d34e0c07a6c09c1adb17a15e50a626a88bc1"},"streaming/mall.mus":{"size":1430016,"hash":"872d3d24452ff2155bb6be4a14c103e4451e6416"},"newsound/random/eat3.ogg":{"size":5813,"hash":"9f2c4bab5ed55f1714fffa223985c81babc8f6c0"},"sound3/step/gravel4.ogg":{"size":8075,"hash":"a47adece748059294c5f563c0fcac02fa0e4bab4"},"sound/step/stone2.ogg":{"size":6728,"hash":"9c92f697142ae320584bf64c0d54381d59703528"},"sound3/liquid/water.ogg":{"size":36329,"hash":"3483650440deb3934255e044ddabff5b01a65356"},"sound3/mob/wolf/bark1.ogg":{"size":5398,"hash":"2452c64a55eaef86bf1b668bb4d5f3b641cd8f25"},"sound3/dig/stone4.ogg":{"size":6516,"hash":"363545a76277e5e47538b2dd3a0d6aa4f7a87d34"},"sound3/random/orb.ogg":{"size":7139,"hash":"e9833a1512b57bcf88ac4fdcc8df4e5a7e9d701d"},"sound3/ambient/weather/rain4.ogg":{"size":13955,"hash":"08e555782cb2785b24e08a417a5e58aa08bd0695"},"sound3/ambient/cave/cave7.ogg":{"size":45278,"hash":"c8dd60f7e7087da52a431c1dbc0f397317b374fb"},"newsound/step/cloth2.ogg":{"size":4862,"hash":"56c1d0ac0de2265018b2c41cb571cc6631101484"},"sound3/mob/skeleton/step2.ogg":{"size":8333,"hash":"4609ec723b4e724f44c653b82de40ec159d2eea1"},"newsound/mob/cat/hitt1.ogg":{"size":7595,"hash":"28409652d939d2489d8b5317d51abb873821f0f4"},"sound3/mob/endermen/idle3.ogg":{"size":10073,"hash":"bc4c2e76d3b5a0e6f9d5837fe82ed26e808aa918"},"sound3/mob/magmacube/small4.ogg":{"size":5387,"hash":"a485082ed0820eeeb9df13f84f26b14744ceeb2a"},"sound3/mob/zombiepig/zpig2.ogg":{"size":10038,"hash":"2cbbcdfb97939c469cd4ccaaac74504497c56695"},"sound3/step/sand2.ogg":{"size":5114,"hash":"bd1750c016f6bab40934eff0b0fb64c41c86e44b"},"sound3/dig/cloth4.ogg":{"size":4844,"hash":"55da1856e77cfd31a7e8c3d358e1f856c5583198"},"sound3/dig/gravel2.ogg":{"size":7501,"hash":"c3b3797d04cb9640e1d3a72d5e96edb410388fa3"},"sound3/mob/enderdragon/hit2.ogg":{"size":10880,"hash":"46e5db05b1e91ce33c9c4c63260227fa629230f4"},"sound3/mob/pig/say2.ogg":{"size":6798,"hash":"ab615a912fb8ea06648836e0ec1cbeeefe117da6"},"sound3/mob/silverfish/step4.ogg":{"size":8842,"hash":"a342f566600caf73464323b20b7770b5b9b7893a"},"newsound/damage/hurtflesh1.ogg":{"size":8981,"hash":"e40695b47209c3b4bbdc3496b38959d097c6afbc"},"newsound/mob/endermen/stare.ogg":{"size":127738,"hash":"5738d7f49ef30adcfc4f2ab13e0b1d74f09a1289"},"newsound/step/gravel3.ogg":{"size":6905,"hash":"48f7e1bb098abd36b9760cca27b9d4391a23de26"},"sound3/mob/wolf/panting.ogg":{"size":7380,"hash":"c2e4001d9ae8fc1f066a914170faad4c45a84e1e"},"newsound/liquid/water.ogg":{"size":36329,"hash":"3483650440deb3934255e044ddabff5b01a65356"},"sound3/dig/snow4.ogg":{"size":6501,"hash":"e26fa3036cdab4c2264ceb19e1cd197a2a510227"},"sound3/fireworks/blast_far1.ogg":{"size":14727,"hash":"cd9062e9e81f7cd35164a99669e5db32891a5cb5"},"sound3/mob/slime/attack1.ogg":{"size":7806,"hash":"075e1ea92d5564d7bdf267ae975044315a41a686"},"sound/step/gravel1.ogg":{"size":6851,"hash":"e8b89f316f3e9989a87f6e6ff12db9abe0f8b09f"},"sound/step/wood1.ogg":{"size":6541,"hash":"9bc2a84d0aa98113fc52609976fae8fc88ea6333"},"sound3/dig/grass3.ogg":{"size":7194,"hash":"f7d7e5c7089c9b45fa5d1b31542eb455fad995db"},"sound3/mob/ghast/moan6.ogg":{"size":18305,"hash":"b3f91f243eceaa25cff7488ec2dac732e22cfec3"},"newsound/mob/endermen/hit4.ogg":{"size":5573,"hash":"6e0f9074e049a6c30402d70cc75a5da99042e00c"},"sound3/mob/wither/death.ogg":{"size":62674,"hash":"ae27c6817985a9acb0a0fdefab89ff5d82dbe009"},"newsound/mob/chicken2.ogg":{"size":9476,"hash":"3660e743db2bbbcff0866d3f1e606882f1aeb6ac"},"newmusic/piano1.ogg":{"size":542805,"hash":"0f374764aafba398f4ba90dba05a53a9e6166138"},"sound3/mob/wolf/hurt2.ogg":{"size":6082,"hash":"bc2f6a5a1b6646eac1681b7414b098089aedf3c6"},"sound3/mob/zombie/wood1.ogg":{"size":7761,"hash":"fa73977dd28020544f7fe2553e5604a6865ec1a6"},"newsound/random/old_explode.ogg":{"size":12808,"hash":"9e22b5aeec31de99410b682cc161a6096a1cd00a"},"sound3/random/glass1.ogg":{"size":7443,"hash":"7274a2231ed4544a37e599b7b014e589e5377094"},"sound3/mob/zombie/unfect.ogg":{"size":19917,"hash":"403c56cd190fb7587a26bcd1b7d2abac598c3ec0"},"sound3/mob/slime/big4.ogg":{"size":9871,"hash":"c906c18d26550ae15c75e23f2c5066e4fc678c89"},"newsound/mob/zombie/woodbreak.ogg":{"size":10929,"hash":"4e94ed53b6059d150c3bb2322b4af9ca9514bae1"},"sound3/step/wood2.ogg":{"size":9150,"hash":"1e82a43c30cf8fcbe05d0bc2760ecba5d2320314"},"sound/step/grass1.ogg":{"size":7468,"hash":"41cbf5dd08e951ad65883854e74d2e034929f572"},"sound3/liquid/swim4.ogg":{"size":7836,"hash":"6a908e7c7d61e01bc4223b4991820bfc56f84c5e"},"newsound/mob/sheep1.ogg":{"size":9784,"hash":"a3ffeaa0a75b8d2bdc949c181a6f8db78f8976ca"},"sound3/mob/skeleton/say3.ogg":{"size":8161,"hash":"a11ac56ec61c17e99f4ee33d8712404edf442720"},"sound3/mob/spider/say4.ogg":{"size":6343,"hash":"3cf3e8d3aab0a3092f6c6bf681ff156bc9653859"},"sound3/mob/skeleton/hurt2.ogg":{"size":7798,"hash":"d1ad2cbe6584d9cd9483483f8655966d25a251a0"},"newsound/ambient/cave/cave12.ogg":{"size":21193,"hash":"a720e85e35be0dc3186d01cc599121b87e7ee9f7"},"newsound/mob/magmacube/jump4.ogg":{"size":12902,"hash":"500e2543034b4c026fb175d48c47196c5d013fe8"},"newsound/step/grass3.ogg":{"size":7194,"hash":"f7d7e5c7089c9b45fa5d1b31542eb455fad995db"},"newsound/mob/ghast/moan6.ogg":{"size":18305,"hash":"b3f91f243eceaa25cff7488ec2dac732e22cfec3"},"newsound/mob/wolf/hurt3.ogg":{"size":6381,"hash":"a5b3f3cdda4d6e13629ccd0e2a38e1f06baa491a"},"newsound/step/sand3.ogg":{"size":5552,"hash":"c75589cc0087069f387de127dd1499580498738e"},"newmusic/hal3.ogg":{"size":1923269,"hash":"dd85fb564e96ee2dbd4754f711ae9deb08a169f9"},"newsound/mob/ghast/scream3.ogg":{"size":9399,"hash":"8f23820fa28830dd031188c20acb35af044aedb5"},"sound3/mob/cat/meow1.ogg":{"size":9820,"hash":"5fdf1bd80b204245af760042d2e546d87666e288"},"newsound/mob/cowhurt3.ogg":{"size":6739,"hash":"87eceaa08df660cd1d4dadf7d1c64a6f7125dacb"},"newsound/random/glass2.ogg":{"size":7532,"hash":"87c47bda3645c68f18a49e83cbf06e5302d087ff"},"sound3/mob/spider/step3.ogg":{"size":9237,"hash":"efa5acfa08b210ba3087b535c40549c0ed8916f0"},"sound3/mob/cat/hitt2.ogg":{"size":9180,"hash":"ce499da6ec5dd226d50843890ca09f16018aff9a"},"sound3/mob/cat/purreow2.ogg":{"size":12237,"hash":"08573a1f11058b09c5855122dff47ceb209f771e"},"newsound/portal/travel.ogg":{"size":54283,"hash":"43388701fac432a567fe9fec421521e6348ad780"},"sound3/mob/creeper/say3.ogg":{"size":6787,"hash":"0979bf115d081d70a985f1cfcab1b9274d6be74e"},"newsound/mob/blaze/breathe3.ogg":{"size":21883,"hash":"24d643885f9b83d8f034f49e2c5e00e70d4f175a"},"newsound/mob/spiderdeath.ogg":{"size":14380,"hash":"4c69a6edc25d973999aa0db2bb46b583a31da278"},"newsound/random/orb.ogg":{"size":7139,"hash":"e9833a1512b57bcf88ac4fdcc8df4e5a7e9d701d"},"sound3/mob/wolf/step1.ogg":{"size":4777,"hash":"b6a62224be809aa0c0747bee94499f0ee51ca2b6"},"newsound/mob/slimeattack1.ogg":{"size":7806,"hash":"075e1ea92d5564d7bdf267ae975044315a41a686"},"newsound/ambient/cave/cave11.ogg":{"size":36963,"hash":"e367d1dfa1ce07374e0aeaecbfb1526142a0dcc1"},"sound3/mob/enderdragon/wings5.ogg":{"size":11659,"hash":"fa6d89b586c5ca29efe85c8d373ff9ee19488d40"},"sound3/mob/wolf/death.ogg":{"size":7474,"hash":"77a5d445ed9ee588846947ac3df63f84be6d569d"},"sound3/mob/spider/step2.ogg":{"size":9695,"hash":"a8eb0b1ce4abb53334ab75be82dc465135c4a27a"},"newsound/mob/blaze/hit1.ogg":{"size":7189,"hash":"cb1cf4b405d930ad27f09ea39d6a64f35fc13308"},"newsound/mob/wolf/hurt2.ogg":{"size":6082,"hash":"bc2f6a5a1b6646eac1681b7414b098089aedf3c6"},"sound3/fireworks/twinkle_far1.ogg":{"size":23987,"hash":"c8053e3b083b08840276de9a728202551302f416"},"sound3/random/classic_hurt.ogg":{"size":11499,"hash":"9d485556b89bf776042080774679c37300bc744b"},"newsound/damage/fallsmall.ogg":{"size":7640,"hash":"6094b6620f2d1f2d19869a2e6498a52b1a265738"},"newsound/mob/irongolem/walk1.ogg":{"size":7064,"hash":"4e3e9f37c1e0c12c2993d25c28b89e2f0797ba5a"},"sound3/mob/zombie/say2.ogg":{"size":15423,"hash":"bf5086623d5c6735271074b263116fb914ed79b5"},"newsound/mob/ghast/affectionate scream.ogg":{"size":9367,"hash":"99cd73dda425ee03836c2274a0fcf331139773dc"},"sound3/mob/zombiepig/zpigangry1.ogg":{"size":8946,"hash":"cadbc5c34979baab1a93f5cf68a50f9bd44ef5a8"},"music/calm1.ogg":{"size":2530812,"hash":"50a59a4f56e4046701b758ddbb1c1587efa4cadf"},"sound3/step/gravel3.ogg":{"size":7488,"hash":"c109b985a7e6d5d3828c92e00aefa49deca0eb8c"},"newsound/ambient/cave/cave9.ogg":{"size":27096,"hash":"b463fa47816fe9a5dfe508093150e647403e4db6"},"newsound/ambient/weather/rain2.ogg":{"size":13301,"hash":"ba58e1b6c8cc814a210db268d3e59a06b7ac62be"},"newsound/mob/endermen/idle5.ogg":{"size":9108,"hash":"e746ec4574aaa047be3076729753c2c75fd34630"},"newsound/mob/slime1.ogg":{"size":6281,"hash":"d49ab3ceb3f6212d64580f0d906fa9880a674c6d"},"sound3/mob/wolf/shake.ogg":{"size":13502,"hash":"3d95ea49e91b4295859b193bb41b009b92250a44"},"newsound/mob/zombie/metal3.ogg":{"size":8843,"hash":"322374d89ed809e75005cdc4f6479c959e15aee2"},"sound3/mob/ghast/scream1.ogg":{"size":10828,"hash":"a0e62d86e5899405df4e796fe648e091d828691d"},"sound3/mob/wither/hurt1.ogg":{"size":16650,"hash":"550da80d936e05a7bfda43ca5d8af5b3779320f1"},"sound3/random/glass2.ogg":{"size":7532,"hash":"87c47bda3645c68f18a49e83cbf06e5302d087ff"},"sound3/damage/fallbig.ogg":{"size":6079,"hash":"1d183c36f596e85c4fb564ff2667332211e49659"},"newsound/mob/magmacube/big2.ogg":{"size":7931,"hash":"4c4bcc6905430286f32a862ce69665c51bd9938f"},"newsound/mob/zombiepig/zpigangry2.ogg":{"size":5789,"hash":"0349ce87fe856ddf8fdd94a559bb29061b002b6c"},"sound3/mob/bat/hurt1.ogg":{"size":4878,"hash":"fddba78b2426f8056be081c98fe82e8411a0a5cf"},"sound3/step/wood1.ogg":{"size":8985,"hash":"afb01196e2179e3b15b48f3373cea4c155d56b84"},"newsound/mob/wolf/bark3.ogg":{"size":5645,"hash":"1ddae4e8dfa605e27ec8278b3e312597b674437e"},"newsound/damage/fallbig2.ogg":{"size":8766,"hash":"c7c9e86e3ccc55ea2312a498aef861def771d8cf"},"sound3/mob/silverfish/hit1.ogg":{"size":7371,"hash":"84c3b008dc1d5e0dd5e8ad85a06eca29f0591e48"},"sound3/step/grass5.ogg":{"size":7801,"hash":"813ebd91b9c3fe1ac8f89f13c85d0755678f2165"},"sound3/mob/wolf/bark2.ogg":{"size":5447,"hash":"9f1708a6409d04370ec12d0add015b11abbd5371"},"streaming/cat.ogg":{"size":1286636,"hash":"d1eb3d2e39bf1f6289cfcbca44e1c9bb508b20f0"},"sound/step/grass2.ogg":{"size":7691,"hash":"86cb1bb0c45625b18e00a64098cd425a38f6d3f2"},"sound3/step/ladder4.ogg":{"size":6182,"hash":"f78ede81160002fc0561218c7ecd97e91cccab7c"},"newsound/random/eat2.ogg":{"size":5677,"hash":"d26bde554d88f0ca156baf471c44ce2c0e68176c"},"sound/step/gravel2.ogg":{"size":7501,"hash":"c3b3797d04cb9640e1d3a72d5e96edb410388fa3"},"sound3/dig/snow3.ogg":{"size":6540,"hash":"a4bc069321a96236fde04a3820664cc23b2ea619"},"newsound/mob/silverfish/say3.ogg":{"size":7060,"hash":"e7f0f24c2c9f4bf83286b17109580d3e845d19e3"},"sound3/mob/sheep/say2.ogg":{"size":8875,"hash":"1cfd864cbda555477ed9523e640de0d234c18858"},"sound/step/stone3.ogg":{"size":6627,"hash":"8f23c02475d388b23e5faa680eafe6b991d7a9d4"},"sound3/mob/wolf/growl1.ogg":{"size":12761,"hash":"0b29f5ce8c4c10fa4184e5d29244f3bc121468a0"},"sound3/mob/bat/death.ogg":{"size":8726,"hash":"6df3b2c2b951863fc5200edf3ff3396b105ed897"},"newsound/mob/endermen/hit3.ogg":{"size":6564,"hash":"aaa8f1705c873ebc05da460657c8b83fa01ffd57"},"newsound/mob/endermen/portal2.ogg":{"size":7442,"hash":"35461b6a4253db40973549e82d91f267c686be85"},"newsound/mob/skeletonhurt3.ogg":{"size":8046,"hash":"647c46f5704b3be0b7159961e1bc51721a33dfd5"},"sound3/mob/bat/loop.ogg":{"size":16510,"hash":"e260582909112ec3c255d1ec0375c7913df5f9f8"},"streaming/13.ogg":{"size":1071028,"hash":"9cbed0e40296f68c61090c9b81816061e068a0ec"},"sound3/mob/chicken/say2.ogg":{"size":9476,"hash":"3660e743db2bbbcff0866d3f1e606882f1aeb6ac"},"newsound/step/cloth3.ogg":{"size":4897,"hash":"9c63f2a3681832dc32d206f6830360bfe94b5bfc"},"sound3/mob/zombie/step4.ogg":{"size":9822,"hash":"69b6e589ec3d2c9063972545e83ed1f07e665094"},"newsound/step/wood3.ogg":{"size":6604,"hash":"45b2aef7b5049e81b39b58f8d631563fadcc778b"},"sound3/mob/endermen/scream1.ogg":{"size":11231,"hash":"c4b5265bbafbe058347058a257abe33a0afb5ab7"},"newsound/step/gravel2.ogg":{"size":7501,"hash":"c3b3797d04cb9640e1d3a72d5e96edb410388fa3"}}} \ No newline at end of file diff --git a/game/assets/objects/00/000c82756fd54e40cb236199f2b479629d0aca2f b/game/assets/objects/00/000c82756fd54e40cb236199f2b479629d0aca2f new file mode 100644 index 0000000..fc7e981 Binary files /dev/null and b/game/assets/objects/00/000c82756fd54e40cb236199f2b479629d0aca2f differ diff --git a/game/assets/objects/00/00b1a23c84bc7f7377de973040b2dd336670bb8f b/game/assets/objects/00/00b1a23c84bc7f7377de973040b2dd336670bb8f new file mode 100644 index 0000000..a252e75 Binary files /dev/null and b/game/assets/objects/00/00b1a23c84bc7f7377de973040b2dd336670bb8f differ diff --git a/game/assets/objects/00/00b38fae5d28d99514a3e73a913af16359b12b7a b/game/assets/objects/00/00b38fae5d28d99514a3e73a913af16359b12b7a new file mode 100644 index 0000000..c741e7c Binary files /dev/null and b/game/assets/objects/00/00b38fae5d28d99514a3e73a913af16359b12b7a differ diff --git a/game/assets/objects/00/00e06362a31ad7094e452c5bcea837b061825cb0 b/game/assets/objects/00/00e06362a31ad7094e452c5bcea837b061825cb0 new file mode 100644 index 0000000..4bd9b74 Binary files /dev/null and b/game/assets/objects/00/00e06362a31ad7094e452c5bcea837b061825cb0 differ diff --git a/game/assets/objects/02/02073c284f025653e55f9cde25a4a62723d395fa b/game/assets/objects/02/02073c284f025653e55f9cde25a4a62723d395fa new file mode 100644 index 0000000..c881055 Binary files /dev/null and b/game/assets/objects/02/02073c284f025653e55f9cde25a4a62723d395fa differ diff --git a/game/assets/objects/03/03063be15a77cc3f6815ec98090e351178190b33 b/game/assets/objects/03/03063be15a77cc3f6815ec98090e351178190b33 new file mode 100644 index 0000000..d03bb1b Binary files /dev/null and b/game/assets/objects/03/03063be15a77cc3f6815ec98090e351178190b33 differ diff --git a/game/assets/objects/03/0349ce87fe856ddf8fdd94a559bb29061b002b6c b/game/assets/objects/03/0349ce87fe856ddf8fdd94a559bb29061b002b6c new file mode 100644 index 0000000..79003db Binary files /dev/null and b/game/assets/objects/03/0349ce87fe856ddf8fdd94a559bb29061b002b6c differ diff --git a/game/assets/objects/03/0369a1236a4b9ca219fd3ad7d19d0b5237510b1e b/game/assets/objects/03/0369a1236a4b9ca219fd3ad7d19d0b5237510b1e new file mode 100644 index 0000000..3ff8234 Binary files /dev/null and b/game/assets/objects/03/0369a1236a4b9ca219fd3ad7d19d0b5237510b1e differ diff --git a/game/assets/objects/03/037b9fb7f74381f354739d015193dc4a6897f620 b/game/assets/objects/03/037b9fb7f74381f354739d015193dc4a6897f620 new file mode 100644 index 0000000..58acddf Binary files /dev/null and b/game/assets/objects/03/037b9fb7f74381f354739d015193dc4a6897f620 differ diff --git a/game/assets/objects/04/049a3049a5ac8631a6c5f367b7d824fc0d8de39b b/game/assets/objects/04/049a3049a5ac8631a6c5f367b7d824fc0d8de39b new file mode 100644 index 0000000..008afdb Binary files /dev/null and b/game/assets/objects/04/049a3049a5ac8631a6c5f367b7d824fc0d8de39b differ diff --git a/game/assets/objects/05/056393a33a9633685c3dc3be2887f5cbd7dbc63f b/game/assets/objects/05/056393a33a9633685c3dc3be2887f5cbd7dbc63f new file mode 100644 index 0000000..bab0652 Binary files /dev/null and b/game/assets/objects/05/056393a33a9633685c3dc3be2887f5cbd7dbc63f differ diff --git a/game/assets/objects/05/05baaf5ed0cbdab08292b3962e1b1385e13b9dba b/game/assets/objects/05/05baaf5ed0cbdab08292b3962e1b1385e13b9dba new file mode 100644 index 0000000..545f24a Binary files /dev/null and b/game/assets/objects/05/05baaf5ed0cbdab08292b3962e1b1385e13b9dba differ diff --git a/game/assets/objects/05/05f429069e65d78f7e6609d070a3f294cc3128ab b/game/assets/objects/05/05f429069e65d78f7e6609d070a3f294cc3128ab new file mode 100644 index 0000000..692b579 Binary files /dev/null and b/game/assets/objects/05/05f429069e65d78f7e6609d070a3f294cc3128ab differ diff --git a/game/assets/objects/06/063bf0fce35c547eb59f086dbb56c5fe329cbcf4 b/game/assets/objects/06/063bf0fce35c547eb59f086dbb56c5fe329cbcf4 new file mode 100644 index 0000000..6ea6a36 Binary files /dev/null and b/game/assets/objects/06/063bf0fce35c547eb59f086dbb56c5fe329cbcf4 differ diff --git a/game/assets/objects/07/075e1ea92d5564d7bdf267ae975044315a41a686 b/game/assets/objects/07/075e1ea92d5564d7bdf267ae975044315a41a686 new file mode 100644 index 0000000..070c7f2 Binary files /dev/null and b/game/assets/objects/07/075e1ea92d5564d7bdf267ae975044315a41a686 differ diff --git a/game/assets/objects/08/08573a1f11058b09c5855122dff47ceb209f771e b/game/assets/objects/08/08573a1f11058b09c5855122dff47ceb209f771e new file mode 100644 index 0000000..59a0b47 Binary files /dev/null and b/game/assets/objects/08/08573a1f11058b09c5855122dff47ceb209f771e differ diff --git a/game/assets/objects/08/087e5fa84e7c961778397a0d938bde1e49dd3beb b/game/assets/objects/08/087e5fa84e7c961778397a0d938bde1e49dd3beb new file mode 100644 index 0000000..aa31fdc Binary files /dev/null and b/game/assets/objects/08/087e5fa84e7c961778397a0d938bde1e49dd3beb differ diff --git a/game/assets/objects/08/08e555782cb2785b24e08a417a5e58aa08bd0695 b/game/assets/objects/08/08e555782cb2785b24e08a417a5e58aa08bd0695 new file mode 100644 index 0000000..44ce41f Binary files /dev/null and b/game/assets/objects/08/08e555782cb2785b24e08a417a5e58aa08bd0695 differ diff --git a/game/assets/objects/09/09236e1a725cec0229b8c564f5b3e4fe05cd7a5f b/game/assets/objects/09/09236e1a725cec0229b8c564f5b3e4fe05cd7a5f new file mode 100644 index 0000000..5fdca1a Binary files /dev/null and b/game/assets/objects/09/09236e1a725cec0229b8c564f5b3e4fe05cd7a5f differ diff --git a/game/assets/objects/09/0979bf115d081d70a985f1cfcab1b9274d6be74e b/game/assets/objects/09/0979bf115d081d70a985f1cfcab1b9274d6be74e new file mode 100644 index 0000000..c284dcc Binary files /dev/null and b/game/assets/objects/09/0979bf115d081d70a985f1cfcab1b9274d6be74e differ diff --git a/game/assets/objects/0b/0b29f5ce8c4c10fa4184e5d29244f3bc121468a0 b/game/assets/objects/0b/0b29f5ce8c4c10fa4184e5d29244f3bc121468a0 new file mode 100644 index 0000000..94266f3 Binary files /dev/null and b/game/assets/objects/0b/0b29f5ce8c4c10fa4184e5d29244f3bc121468a0 differ diff --git a/game/assets/objects/0b/0ba4a7830ea8852bf7844872d7e2d2a408fb77e4 b/game/assets/objects/0b/0ba4a7830ea8852bf7844872d7e2d2a408fb77e4 new file mode 100644 index 0000000..469b819 Binary files /dev/null and b/game/assets/objects/0b/0ba4a7830ea8852bf7844872d7e2d2a408fb77e4 differ diff --git a/game/assets/objects/0f/0f374764aafba398f4ba90dba05a53a9e6166138 b/game/assets/objects/0f/0f374764aafba398f4ba90dba05a53a9e6166138 new file mode 100644 index 0000000..4c72549 Binary files /dev/null and b/game/assets/objects/0f/0f374764aafba398f4ba90dba05a53a9e6166138 differ diff --git a/game/assets/objects/0f/0f3a7e5a20119853986d2cfae22ca3a46926ac76 b/game/assets/objects/0f/0f3a7e5a20119853986d2cfae22ca3a46926ac76 new file mode 100644 index 0000000..9307534 Binary files /dev/null and b/game/assets/objects/0f/0f3a7e5a20119853986d2cfae22ca3a46926ac76 differ diff --git a/game/assets/objects/0f/0fa4234797f336ada4e3735e013e44d1099afe57 b/game/assets/objects/0f/0fa4234797f336ada4e3735e013e44d1099afe57 new file mode 100644 index 0000000..ce2eeb0 Binary files /dev/null and b/game/assets/objects/0f/0fa4234797f336ada4e3735e013e44d1099afe57 differ diff --git a/game/assets/objects/10/101164ea1b442a8e1e8ca181d9cef833c57d7be3 b/game/assets/objects/10/101164ea1b442a8e1e8ca181d9cef833c57d7be3 new file mode 100644 index 0000000..edb3df3 Binary files /dev/null and b/game/assets/objects/10/101164ea1b442a8e1e8ca181d9cef833c57d7be3 differ diff --git a/game/assets/objects/10/1028d0a373790e14c34786a925c4656bdaeb4c4d b/game/assets/objects/10/1028d0a373790e14c34786a925c4656bdaeb4c4d new file mode 100644 index 0000000..abb8e87 Binary files /dev/null and b/game/assets/objects/10/1028d0a373790e14c34786a925c4656bdaeb4c4d differ diff --git a/game/assets/objects/12/1298f4526580c8f10812253e7d9130ce4afc3a1e b/game/assets/objects/12/1298f4526580c8f10812253e7d9130ce4afc3a1e new file mode 100644 index 0000000..5208de7 Binary files /dev/null and b/game/assets/objects/12/1298f4526580c8f10812253e7d9130ce4afc3a1e differ diff --git a/game/assets/objects/14/144867e8792415e2873293f06ecce85cd32bb4e8 b/game/assets/objects/14/144867e8792415e2873293f06ecce85cd32bb4e8 new file mode 100644 index 0000000..02c3264 Binary files /dev/null and b/game/assets/objects/14/144867e8792415e2873293f06ecce85cd32bb4e8 differ diff --git a/game/assets/objects/14/14ae57a6bce3d4254daa8be2b098c2d99743cc3f b/game/assets/objects/14/14ae57a6bce3d4254daa8be2b098c2d99743cc3f new file mode 100644 index 0000000..a4cfafe Binary files /dev/null and b/game/assets/objects/14/14ae57a6bce3d4254daa8be2b098c2d99743cc3f differ diff --git a/game/assets/objects/15/1599551814c141acd0c4a3c4a0ff83f4c4e3026d b/game/assets/objects/15/1599551814c141acd0c4a3c4a0ff83f4c4e3026d new file mode 100644 index 0000000..6b8dc78 Binary files /dev/null and b/game/assets/objects/15/1599551814c141acd0c4a3c4a0ff83f4c4e3026d differ diff --git a/game/assets/objects/17/17491c8dd9511e9d848c92b4b7ae047aed164072 b/game/assets/objects/17/17491c8dd9511e9d848c92b4b7ae047aed164072 new file mode 100644 index 0000000..6a882c5 Binary files /dev/null and b/game/assets/objects/17/17491c8dd9511e9d848c92b4b7ae047aed164072 differ diff --git a/game/assets/objects/17/17e66efe64256142c55ef6f35060f277f127bb44 b/game/assets/objects/17/17e66efe64256142c55ef6f35060f277f127bb44 new file mode 100644 index 0000000..a03b491 Binary files /dev/null and b/game/assets/objects/17/17e66efe64256142c55ef6f35060f277f127bb44 differ diff --git a/game/assets/objects/18/18237686efcaa1bf9084173c99d11ce0d37d4fc5 b/game/assets/objects/18/18237686efcaa1bf9084173c99d11ce0d37d4fc5 new file mode 100644 index 0000000..a4f4f14 Binary files /dev/null and b/game/assets/objects/18/18237686efcaa1bf9084173c99d11ce0d37d4fc5 differ diff --git a/game/assets/objects/18/186d5d9481d59cc99bc4be1b5fbb98d0ef877b8e b/game/assets/objects/18/186d5d9481d59cc99bc4be1b5fbb98d0ef877b8e new file mode 100644 index 0000000..ee5c91c Binary files /dev/null and b/game/assets/objects/18/186d5d9481d59cc99bc4be1b5fbb98d0ef877b8e differ diff --git a/game/assets/objects/18/18752157f5d8718e2752805a657c74a73d2b88db b/game/assets/objects/18/18752157f5d8718e2752805a657c74a73d2b88db new file mode 100644 index 0000000..06e65d2 Binary files /dev/null and b/game/assets/objects/18/18752157f5d8718e2752805a657c74a73d2b88db differ diff --git a/game/assets/objects/18/18a992d93128bb2e2861930cff3140c6940c0127 b/game/assets/objects/18/18a992d93128bb2e2861930cff3140c6940c0127 new file mode 100644 index 0000000..19cc275 Binary files /dev/null and b/game/assets/objects/18/18a992d93128bb2e2861930cff3140c6940c0127 differ diff --git a/game/assets/objects/19/199c9f150822950385b9bc1d840605a6a795bd27 b/game/assets/objects/19/199c9f150822950385b9bc1d840605a6a795bd27 new file mode 100644 index 0000000..e62217d Binary files /dev/null and b/game/assets/objects/19/199c9f150822950385b9bc1d840605a6a795bd27 differ diff --git a/game/assets/objects/19/19a5aae31c3e0018a960b709a9f0240d8d47dda7 b/game/assets/objects/19/19a5aae31c3e0018a960b709a9f0240d8d47dda7 new file mode 100644 index 0000000..0173bf9 Binary files /dev/null and b/game/assets/objects/19/19a5aae31c3e0018a960b709a9f0240d8d47dda7 differ diff --git a/game/assets/objects/19/19c729c3ceb753a824246b494bce5fa5c802f0f0 b/game/assets/objects/19/19c729c3ceb753a824246b494bce5fa5c802f0f0 new file mode 100644 index 0000000..9063eeb Binary files /dev/null and b/game/assets/objects/19/19c729c3ceb753a824246b494bce5fa5c802f0f0 differ diff --git a/game/assets/objects/1a/1afefaa39a53606d2737bab9cb3409350cb2dc9f b/game/assets/objects/1a/1afefaa39a53606d2737bab9cb3409350cb2dc9f new file mode 100644 index 0000000..c258277 Binary files /dev/null and b/game/assets/objects/1a/1afefaa39a53606d2737bab9cb3409350cb2dc9f differ diff --git a/game/assets/objects/1c/1cfd864cbda555477ed9523e640de0d234c18858 b/game/assets/objects/1c/1cfd864cbda555477ed9523e640de0d234c18858 new file mode 100644 index 0000000..d592dd2 Binary files /dev/null and b/game/assets/objects/1c/1cfd864cbda555477ed9523e640de0d234c18858 differ diff --git a/game/assets/objects/1d/1d183c36f596e85c4fb564ff2667332211e49659 b/game/assets/objects/1d/1d183c36f596e85c4fb564ff2667332211e49659 new file mode 100644 index 0000000..5a15d25 Binary files /dev/null and b/game/assets/objects/1d/1d183c36f596e85c4fb564ff2667332211e49659 differ diff --git a/game/assets/objects/1d/1d761cb3bcb45498719e4fba0751e1630e134f1a b/game/assets/objects/1d/1d761cb3bcb45498719e4fba0751e1630e134f1a new file mode 100644 index 0000000..0da5969 Binary files /dev/null and b/game/assets/objects/1d/1d761cb3bcb45498719e4fba0751e1630e134f1a differ diff --git a/game/assets/objects/1d/1ddae4e8dfa605e27ec8278b3e312597b674437e b/game/assets/objects/1d/1ddae4e8dfa605e27ec8278b3e312597b674437e new file mode 100644 index 0000000..b283aa4 Binary files /dev/null and b/game/assets/objects/1d/1ddae4e8dfa605e27ec8278b3e312597b674437e differ diff --git a/game/assets/objects/1e/1e82a43c30cf8fcbe05d0bc2760ecba5d2320314 b/game/assets/objects/1e/1e82a43c30cf8fcbe05d0bc2760ecba5d2320314 new file mode 100644 index 0000000..5b7c8ab Binary files /dev/null and b/game/assets/objects/1e/1e82a43c30cf8fcbe05d0bc2760ecba5d2320314 differ diff --git a/game/assets/objects/20/20d06589bd5ab81a73989bdac8ca59ecd4d66932 b/game/assets/objects/20/20d06589bd5ab81a73989bdac8ca59ecd4d66932 new file mode 100644 index 0000000..3013846 Binary files /dev/null and b/game/assets/objects/20/20d06589bd5ab81a73989bdac8ca59ecd4d66932 differ diff --git a/game/assets/objects/21/21c9b7c6b486247322051f90aa964f161edc78d8 b/game/assets/objects/21/21c9b7c6b486247322051f90aa964f161edc78d8 new file mode 100644 index 0000000..2f10061 Binary files /dev/null and b/game/assets/objects/21/21c9b7c6b486247322051f90aa964f161edc78d8 differ diff --git a/game/assets/objects/22/227ab99bf7c6cf0b2002e0f7957d0ff7e5cb0c96 b/game/assets/objects/22/227ab99bf7c6cf0b2002e0f7957d0ff7e5cb0c96 new file mode 100644 index 0000000..7a6f24a Binary files /dev/null and b/game/assets/objects/22/227ab99bf7c6cf0b2002e0f7957d0ff7e5cb0c96 differ diff --git a/game/assets/objects/22/228bab6d9b09994dc407b9d022bebca791d81c16 b/game/assets/objects/22/228bab6d9b09994dc407b9d022bebca791d81c16 new file mode 100644 index 0000000..bc6d9d2 Binary files /dev/null and b/game/assets/objects/22/228bab6d9b09994dc407b9d022bebca791d81c16 differ diff --git a/game/assets/objects/22/22a383d9c22342305a4f16fec0bb479a885f8da2 b/game/assets/objects/22/22a383d9c22342305a4f16fec0bb479a885f8da2 new file mode 100644 index 0000000..7cb1580 Binary files /dev/null and b/game/assets/objects/22/22a383d9c22342305a4f16fec0bb479a885f8da2 differ diff --git a/game/assets/objects/22/22a491f266f5c3cdd6e669a9493daaf40c9c8575 b/game/assets/objects/22/22a491f266f5c3cdd6e669a9493daaf40c9c8575 new file mode 100644 index 0000000..8d91a23 Binary files /dev/null and b/game/assets/objects/22/22a491f266f5c3cdd6e669a9493daaf40c9c8575 differ diff --git a/game/assets/objects/22/22ed26394cb6f6b5eeb2ceb54fb50608798d19e8 b/game/assets/objects/22/22ed26394cb6f6b5eeb2ceb54fb50608798d19e8 new file mode 100644 index 0000000..1f2891b Binary files /dev/null and b/game/assets/objects/22/22ed26394cb6f6b5eeb2ceb54fb50608798d19e8 differ diff --git a/game/assets/objects/24/2452c64a55eaef86bf1b668bb4d5f3b641cd8f25 b/game/assets/objects/24/2452c64a55eaef86bf1b668bb4d5f3b641cd8f25 new file mode 100644 index 0000000..f6784b1 Binary files /dev/null and b/game/assets/objects/24/2452c64a55eaef86bf1b668bb4d5f3b641cd8f25 differ diff --git a/game/assets/objects/24/24bae598320bf757fd6937a93f135f5cdba206ba b/game/assets/objects/24/24bae598320bf757fd6937a93f135f5cdba206ba new file mode 100644 index 0000000..eb5c74e Binary files /dev/null and b/game/assets/objects/24/24bae598320bf757fd6937a93f135f5cdba206ba differ diff --git a/game/assets/objects/24/24cdac5a80fdad7ab31dc0695b57ece55aecb21a b/game/assets/objects/24/24cdac5a80fdad7ab31dc0695b57ece55aecb21a new file mode 100644 index 0000000..d471fde Binary files /dev/null and b/game/assets/objects/24/24cdac5a80fdad7ab31dc0695b57ece55aecb21a differ diff --git a/game/assets/objects/24/24d643885f9b83d8f034f49e2c5e00e70d4f175a b/game/assets/objects/24/24d643885f9b83d8f034f49e2c5e00e70d4f175a new file mode 100644 index 0000000..a374f1f Binary files /dev/null and b/game/assets/objects/24/24d643885f9b83d8f034f49e2c5e00e70d4f175a differ diff --git a/game/assets/objects/27/27722125968ac60c0f191a961b17e406f1351c6e b/game/assets/objects/27/27722125968ac60c0f191a961b17e406f1351c6e new file mode 100644 index 0000000..94a46cc Binary files /dev/null and b/game/assets/objects/27/27722125968ac60c0f191a961b17e406f1351c6e differ diff --git a/game/assets/objects/27/27c78cd09f7fd1770a41d78247ccf57c77dbc773 b/game/assets/objects/27/27c78cd09f7fd1770a41d78247ccf57c77dbc773 new file mode 100644 index 0000000..6fd337a Binary files /dev/null and b/game/assets/objects/27/27c78cd09f7fd1770a41d78247ccf57c77dbc773 differ diff --git a/game/assets/objects/28/281b87984ddf8e94324bc86911a36c971cb3d831 b/game/assets/objects/28/281b87984ddf8e94324bc86911a36c971cb3d831 new file mode 100644 index 0000000..6f41121 Binary files /dev/null and b/game/assets/objects/28/281b87984ddf8e94324bc86911a36c971cb3d831 differ diff --git a/game/assets/objects/28/28409652d939d2489d8b5317d51abb873821f0f4 b/game/assets/objects/28/28409652d939d2489d8b5317d51abb873821f0f4 new file mode 100644 index 0000000..2fd3fa9 Binary files /dev/null and b/game/assets/objects/28/28409652d939d2489d8b5317d51abb873821f0f4 differ diff --git a/game/assets/objects/28/28f9973fcd8366ac9837dbe190b129a8fce15857 b/game/assets/objects/28/28f9973fcd8366ac9837dbe190b129a8fce15857 new file mode 100644 index 0000000..534618f Binary files /dev/null and b/game/assets/objects/28/28f9973fcd8366ac9837dbe190b129a8fce15857 differ diff --git a/game/assets/objects/29/29586f60bfe6f521dbc748919d4f0dc5b28beefd b/game/assets/objects/29/29586f60bfe6f521dbc748919d4f0dc5b28beefd new file mode 100644 index 0000000..89ced1a Binary files /dev/null and b/game/assets/objects/29/29586f60bfe6f521dbc748919d4f0dc5b28beefd differ diff --git a/game/assets/objects/29/29d4dccf3353334c7aa2a49cb6fed3780a51a1ba b/game/assets/objects/29/29d4dccf3353334c7aa2a49cb6fed3780a51a1ba new file mode 100644 index 0000000..4f41bb7 Binary files /dev/null and b/game/assets/objects/29/29d4dccf3353334c7aa2a49cb6fed3780a51a1ba differ diff --git a/game/assets/objects/2a/2a031f10c7dc24e75d5dc3a374ebe7f36fc3e143 b/game/assets/objects/2a/2a031f10c7dc24e75d5dc3a374ebe7f36fc3e143 new file mode 100644 index 0000000..465b6ae Binary files /dev/null and b/game/assets/objects/2a/2a031f10c7dc24e75d5dc3a374ebe7f36fc3e143 differ diff --git a/game/assets/objects/2c/2c20816632caecf75f00bb968f51847e3a982e75 b/game/assets/objects/2c/2c20816632caecf75f00bb968f51847e3a982e75 new file mode 100644 index 0000000..bef483c Binary files /dev/null and b/game/assets/objects/2c/2c20816632caecf75f00bb968f51847e3a982e75 differ diff --git a/game/assets/objects/2c/2c849f4b6ec1cf084ac84d57ec90779266b23ae8 b/game/assets/objects/2c/2c849f4b6ec1cf084ac84d57ec90779266b23ae8 new file mode 100644 index 0000000..c579de2 Binary files /dev/null and b/game/assets/objects/2c/2c849f4b6ec1cf084ac84d57ec90779266b23ae8 differ diff --git a/game/assets/objects/2c/2cbbcdfb97939c469cd4ccaaac74504497c56695 b/game/assets/objects/2c/2cbbcdfb97939c469cd4ccaaac74504497c56695 new file mode 100644 index 0000000..60a2739 Binary files /dev/null and b/game/assets/objects/2c/2cbbcdfb97939c469cd4ccaaac74504497c56695 differ diff --git a/game/assets/objects/2f/2fe092579d9637e2d160319820ee08e60a237bb7 b/game/assets/objects/2f/2fe092579d9637e2d160319820ee08e60a237bb7 new file mode 100644 index 0000000..b4889da Binary files /dev/null and b/game/assets/objects/2f/2fe092579d9637e2d160319820ee08e60a237bb7 differ diff --git a/game/assets/objects/30/301f32642b654addbd06a430768fead464fd24c4 b/game/assets/objects/30/301f32642b654addbd06a430768fead464fd24c4 new file mode 100644 index 0000000..8a4ca4b Binary files /dev/null and b/game/assets/objects/30/301f32642b654addbd06a430768fead464fd24c4 differ diff --git a/game/assets/objects/30/30e920526eb5855065b873e30d17b4d85bfbe570 b/game/assets/objects/30/30e920526eb5855065b873e30d17b4d85bfbe570 new file mode 100644 index 0000000..95adea4 Binary files /dev/null and b/game/assets/objects/30/30e920526eb5855065b873e30d17b4d85bfbe570 differ diff --git a/game/assets/objects/31/315512d6027033c2a279841badb40a26d74efc81 b/game/assets/objects/31/315512d6027033c2a279841badb40a26d74efc81 new file mode 100644 index 0000000..99b86b3 Binary files /dev/null and b/game/assets/objects/31/315512d6027033c2a279841badb40a26d74efc81 differ diff --git a/game/assets/objects/31/31b52151bf2a6fa35d2d2aa72f832285d9e7d70d b/game/assets/objects/31/31b52151bf2a6fa35d2d2aa72f832285d9e7d70d new file mode 100644 index 0000000..a56a08d Binary files /dev/null and b/game/assets/objects/31/31b52151bf2a6fa35d2d2aa72f832285d9e7d70d differ diff --git a/game/assets/objects/32/322374d89ed809e75005cdc4f6479c959e15aee2 b/game/assets/objects/32/322374d89ed809e75005cdc4f6479c959e15aee2 new file mode 100644 index 0000000..a532df6 Binary files /dev/null and b/game/assets/objects/32/322374d89ed809e75005cdc4f6479c959e15aee2 differ diff --git a/game/assets/objects/32/3285a993220dcea1fc37e98b9aa9219422c2c095 b/game/assets/objects/32/3285a993220dcea1fc37e98b9aa9219422c2c095 new file mode 100644 index 0000000..901921a Binary files /dev/null and b/game/assets/objects/32/3285a993220dcea1fc37e98b9aa9219422c2c095 differ diff --git a/game/assets/objects/33/33acf13c25f65a432348e9476eda67d6a34831e3 b/game/assets/objects/33/33acf13c25f65a432348e9476eda67d6a34831e3 new file mode 100644 index 0000000..054b966 Binary files /dev/null and b/game/assets/objects/33/33acf13c25f65a432348e9476eda67d6a34831e3 differ diff --git a/game/assets/objects/34/3483650440deb3934255e044ddabff5b01a65356 b/game/assets/objects/34/3483650440deb3934255e044ddabff5b01a65356 new file mode 100644 index 0000000..157491b Binary files /dev/null and b/game/assets/objects/34/3483650440deb3934255e044ddabff5b01a65356 differ diff --git a/game/assets/objects/35/35461b6a4253db40973549e82d91f267c686be85 b/game/assets/objects/35/35461b6a4253db40973549e82d91f267c686be85 new file mode 100644 index 0000000..b6057b0 Binary files /dev/null and b/game/assets/objects/35/35461b6a4253db40973549e82d91f267c686be85 differ diff --git a/game/assets/objects/35/356fdb6192cf96aa5d5d9c76413f412f6a4d66a4 b/game/assets/objects/35/356fdb6192cf96aa5d5d9c76413f412f6a4d66a4 new file mode 100644 index 0000000..1f73101 Binary files /dev/null and b/game/assets/objects/35/356fdb6192cf96aa5d5d9c76413f412f6a4d66a4 differ diff --git a/game/assets/objects/35/35f0b3c9c462a6c21ec213fbda2437a0e6427883 b/game/assets/objects/35/35f0b3c9c462a6c21ec213fbda2437a0e6427883 new file mode 100644 index 0000000..98092f8 Binary files /dev/null and b/game/assets/objects/35/35f0b3c9c462a6c21ec213fbda2437a0e6427883 differ diff --git a/game/assets/objects/36/3610feb2a1a575026cfa3ab44965d114e74ea583 b/game/assets/objects/36/3610feb2a1a575026cfa3ab44965d114e74ea583 new file mode 100644 index 0000000..bdd4cc9 Binary files /dev/null and b/game/assets/objects/36/3610feb2a1a575026cfa3ab44965d114e74ea583 differ diff --git a/game/assets/objects/36/363545a76277e5e47538b2dd3a0d6aa4f7a87d34 b/game/assets/objects/36/363545a76277e5e47538b2dd3a0d6aa4f7a87d34 new file mode 100644 index 0000000..d705cf3 Binary files /dev/null and b/game/assets/objects/36/363545a76277e5e47538b2dd3a0d6aa4f7a87d34 differ diff --git a/game/assets/objects/36/3660e743db2bbbcff0866d3f1e606882f1aeb6ac b/game/assets/objects/36/3660e743db2bbbcff0866d3f1e606882f1aeb6ac new file mode 100644 index 0000000..b181d8f Binary files /dev/null and b/game/assets/objects/36/3660e743db2bbbcff0866d3f1e606882f1aeb6ac differ diff --git a/game/assets/objects/37/37afa06f97d58767a1cd1382386db878be1532dd b/game/assets/objects/37/37afa06f97d58767a1cd1382386db878be1532dd new file mode 100644 index 0000000..ae2d818 Binary files /dev/null and b/game/assets/objects/37/37afa06f97d58767a1cd1382386db878be1532dd differ diff --git a/game/assets/objects/38/381f9e97a8a986ecab3e86431d6be6df5ff79c31 b/game/assets/objects/38/381f9e97a8a986ecab3e86431d6be6df5ff79c31 new file mode 100644 index 0000000..e886244 Binary files /dev/null and b/game/assets/objects/38/381f9e97a8a986ecab3e86431d6be6df5ff79c31 differ diff --git a/game/assets/objects/38/38d4d36bbe40a48c3a8ef97735b59b37f013fd6e b/game/assets/objects/38/38d4d36bbe40a48c3a8ef97735b59b37f013fd6e new file mode 100644 index 0000000..5b56161 Binary files /dev/null and b/game/assets/objects/38/38d4d36bbe40a48c3a8ef97735b59b37f013fd6e differ diff --git a/game/assets/objects/39/396b8b46e593cf55d843853b704dc054ef614e55 b/game/assets/objects/39/396b8b46e593cf55d843853b704dc054ef614e55 new file mode 100644 index 0000000..4aa77fb Binary files /dev/null and b/game/assets/objects/39/396b8b46e593cf55d843853b704dc054ef614e55 differ diff --git a/game/assets/objects/3b/3bc8225914b1be20db68fcdae202d5acee3234c2 b/game/assets/objects/3b/3bc8225914b1be20db68fcdae202d5acee3234c2 new file mode 100644 index 0000000..abe7e28 Binary files /dev/null and b/game/assets/objects/3b/3bc8225914b1be20db68fcdae202d5acee3234c2 differ diff --git a/game/assets/objects/3c/3cf3e8d3aab0a3092f6c6bf681ff156bc9653859 b/game/assets/objects/3c/3cf3e8d3aab0a3092f6c6bf681ff156bc9653859 new file mode 100644 index 0000000..4c09e8d Binary files /dev/null and b/game/assets/objects/3c/3cf3e8d3aab0a3092f6c6bf681ff156bc9653859 differ diff --git a/game/assets/objects/3d/3d95ea49e91b4295859b193bb41b009b92250a44 b/game/assets/objects/3d/3d95ea49e91b4295859b193bb41b009b92250a44 new file mode 100644 index 0000000..519b4cb Binary files /dev/null and b/game/assets/objects/3d/3d95ea49e91b4295859b193bb41b009b92250a44 differ diff --git a/game/assets/objects/3d/3d98b4b7c37a09101da00d8a3078e0acba6558f4 b/game/assets/objects/3d/3d98b4b7c37a09101da00d8a3078e0acba6558f4 new file mode 100644 index 0000000..025942d Binary files /dev/null and b/game/assets/objects/3d/3d98b4b7c37a09101da00d8a3078e0acba6558f4 differ diff --git a/game/assets/objects/3f/3f447f3e331b59ad014d9bd4a6536f98cf3a08c3 b/game/assets/objects/3f/3f447f3e331b59ad014d9bd4a6536f98cf3a08c3 new file mode 100644 index 0000000..ff31cd4 Binary files /dev/null and b/game/assets/objects/3f/3f447f3e331b59ad014d9bd4a6536f98cf3a08c3 differ diff --git a/game/assets/objects/3f/3fee58d7b2c99ddbce962618176637574ae8d67b b/game/assets/objects/3f/3fee58d7b2c99ddbce962618176637574ae8d67b new file mode 100644 index 0000000..5d51c91 Binary files /dev/null and b/game/assets/objects/3f/3fee58d7b2c99ddbce962618176637574ae8d67b differ diff --git a/game/assets/objects/40/403c56cd190fb7587a26bcd1b7d2abac598c3ec0 b/game/assets/objects/40/403c56cd190fb7587a26bcd1b7d2abac598c3ec0 new file mode 100644 index 0000000..157311b Binary files /dev/null and b/game/assets/objects/40/403c56cd190fb7587a26bcd1b7d2abac598c3ec0 differ diff --git a/game/assets/objects/40/405e2f82caef7f79eb9e26886520711e446366ce b/game/assets/objects/40/405e2f82caef7f79eb9e26886520711e446366ce new file mode 100644 index 0000000..a241930 Binary files /dev/null and b/game/assets/objects/40/405e2f82caef7f79eb9e26886520711e446366ce differ diff --git a/game/assets/objects/40/40a5a4307c1a2a5a1b9f71254275689845374104 b/game/assets/objects/40/40a5a4307c1a2a5a1b9f71254275689845374104 new file mode 100644 index 0000000..10923d9 Binary files /dev/null and b/game/assets/objects/40/40a5a4307c1a2a5a1b9f71254275689845374104 differ diff --git a/game/assets/objects/40/40b8e244d03ae17483edd4571bd851e10a97050f b/game/assets/objects/40/40b8e244d03ae17483edd4571bd851e10a97050f new file mode 100644 index 0000000..00d3f8d Binary files /dev/null and b/game/assets/objects/40/40b8e244d03ae17483edd4571bd851e10a97050f differ diff --git a/game/assets/objects/41/41b9c631e9c1c40800b3b02a0ac5855d6ad4846d b/game/assets/objects/41/41b9c631e9c1c40800b3b02a0ac5855d6ad4846d new file mode 100644 index 0000000..2404f14 Binary files /dev/null and b/game/assets/objects/41/41b9c631e9c1c40800b3b02a0ac5855d6ad4846d differ diff --git a/game/assets/objects/41/41cbf5dd08e951ad65883854e74d2e034929f572 b/game/assets/objects/41/41cbf5dd08e951ad65883854e74d2e034929f572 new file mode 100644 index 0000000..12f5751 Binary files /dev/null and b/game/assets/objects/41/41cbf5dd08e951ad65883854e74d2e034929f572 differ diff --git a/game/assets/objects/43/430c65ac81151d873a27d611a9dff6c562e38c4f b/game/assets/objects/43/430c65ac81151d873a27d611a9dff6c562e38c4f new file mode 100644 index 0000000..47cb7ea Binary files /dev/null and b/game/assets/objects/43/430c65ac81151d873a27d611a9dff6c562e38c4f differ diff --git a/game/assets/objects/43/43388701fac432a567fe9fec421521e6348ad780 b/game/assets/objects/43/43388701fac432a567fe9fec421521e6348ad780 new file mode 100644 index 0000000..3e61de2 Binary files /dev/null and b/game/assets/objects/43/43388701fac432a567fe9fec421521e6348ad780 differ diff --git a/game/assets/objects/45/45b2aef7b5049e81b39b58f8d631563fadcc778b b/game/assets/objects/45/45b2aef7b5049e81b39b58f8d631563fadcc778b new file mode 100644 index 0000000..61922ae Binary files /dev/null and b/game/assets/objects/45/45b2aef7b5049e81b39b58f8d631563fadcc778b differ diff --git a/game/assets/objects/46/4609ec723b4e724f44c653b82de40ec159d2eea1 b/game/assets/objects/46/4609ec723b4e724f44c653b82de40ec159d2eea1 new file mode 100644 index 0000000..b6293a1 Binary files /dev/null and b/game/assets/objects/46/4609ec723b4e724f44c653b82de40ec159d2eea1 differ diff --git a/game/assets/objects/46/46244605b8663a29cdce7bccc5b2d038241e32ee b/game/assets/objects/46/46244605b8663a29cdce7bccc5b2d038241e32ee new file mode 100644 index 0000000..fcfbc02 Binary files /dev/null and b/game/assets/objects/46/46244605b8663a29cdce7bccc5b2d038241e32ee differ diff --git a/game/assets/objects/46/46e5db05b1e91ce33c9c4c63260227fa629230f4 b/game/assets/objects/46/46e5db05b1e91ce33c9c4c63260227fa629230f4 new file mode 100644 index 0000000..6339305 Binary files /dev/null and b/game/assets/objects/46/46e5db05b1e91ce33c9c4c63260227fa629230f4 differ diff --git a/game/assets/objects/47/47ad81223bcec870206484cd4d1a6202871df331 b/game/assets/objects/47/47ad81223bcec870206484cd4d1a6202871df331 new file mode 100644 index 0000000..5554468 Binary files /dev/null and b/game/assets/objects/47/47ad81223bcec870206484cd4d1a6202871df331 differ diff --git a/game/assets/objects/48/482919bc631b317422ab44af3938259bea73fe83 b/game/assets/objects/48/482919bc631b317422ab44af3938259bea73fe83 new file mode 100644 index 0000000..becc7ba Binary files /dev/null and b/game/assets/objects/48/482919bc631b317422ab44af3938259bea73fe83 differ diff --git a/game/assets/objects/48/48540d7788ce3d9e780cb448ce5676c53dbcfd23 b/game/assets/objects/48/48540d7788ce3d9e780cb448ce5676c53dbcfd23 new file mode 100644 index 0000000..8d4ecdd Binary files /dev/null and b/game/assets/objects/48/48540d7788ce3d9e780cb448ce5676c53dbcfd23 differ diff --git a/game/assets/objects/48/48dd05ab2e4626d74206c2b09a628a3d59ce15e9 b/game/assets/objects/48/48dd05ab2e4626d74206c2b09a628a3d59ce15e9 new file mode 100644 index 0000000..2205b58 Binary files /dev/null and b/game/assets/objects/48/48dd05ab2e4626d74206c2b09a628a3d59ce15e9 differ diff --git a/game/assets/objects/48/48f7e1bb098abd36b9760cca27b9d4391a23de26 b/game/assets/objects/48/48f7e1bb098abd36b9760cca27b9d4391a23de26 new file mode 100644 index 0000000..1b8debd Binary files /dev/null and b/game/assets/objects/48/48f7e1bb098abd36b9760cca27b9d4391a23de26 differ diff --git a/game/assets/objects/48/48fc6c25d0f1c1f0edd4eaca2b6f934d4117f440 b/game/assets/objects/48/48fc6c25d0f1c1f0edd4eaca2b6f934d4117f440 new file mode 100644 index 0000000..a1dba01 Binary files /dev/null and b/game/assets/objects/48/48fc6c25d0f1c1f0edd4eaca2b6f934d4117f440 differ diff --git a/game/assets/objects/49/49874e07369c3bb0bc8a2fba4f2096d2e9a36c9a b/game/assets/objects/49/49874e07369c3bb0bc8a2fba4f2096d2e9a36c9a new file mode 100644 index 0000000..e217510 Binary files /dev/null and b/game/assets/objects/49/49874e07369c3bb0bc8a2fba4f2096d2e9a36c9a differ diff --git a/game/assets/objects/4a/4a2e3795ffd4d3aab0834b7e41903af3a8f7d197 b/game/assets/objects/4a/4a2e3795ffd4d3aab0834b7e41903af3a8f7d197 new file mode 100644 index 0000000..5dfc74d Binary files /dev/null and b/game/assets/objects/4a/4a2e3795ffd4d3aab0834b7e41903af3a8f7d197 differ diff --git a/game/assets/objects/4b/4b49dd9329b254e38f17166b7daa51a758a25f94 b/game/assets/objects/4b/4b49dd9329b254e38f17166b7daa51a758a25f94 new file mode 100644 index 0000000..b6ea95e Binary files /dev/null and b/game/assets/objects/4b/4b49dd9329b254e38f17166b7daa51a758a25f94 differ diff --git a/game/assets/objects/4b/4ba55627b6b9ce64b4a48a00c990d5855b6064cf b/game/assets/objects/4b/4ba55627b6b9ce64b4a48a00c990d5855b6064cf new file mode 100644 index 0000000..242b033 Binary files /dev/null and b/game/assets/objects/4b/4ba55627b6b9ce64b4a48a00c990d5855b6064cf differ diff --git a/game/assets/objects/4b/4bc87ab869e17732a20c7518a327136baf5b2c26 b/game/assets/objects/4b/4bc87ab869e17732a20c7518a327136baf5b2c26 new file mode 100644 index 0000000..959e98b Binary files /dev/null and b/game/assets/objects/4b/4bc87ab869e17732a20c7518a327136baf5b2c26 differ diff --git a/game/assets/objects/4b/4bf7c7a08c1217de7b1f0faf82429665fbf18458 b/game/assets/objects/4b/4bf7c7a08c1217de7b1f0faf82429665fbf18458 new file mode 100644 index 0000000..47830e3 Binary files /dev/null and b/game/assets/objects/4b/4bf7c7a08c1217de7b1f0faf82429665fbf18458 differ diff --git a/game/assets/objects/4c/4c14c40542e249c902d0cac710ab4c6d6debba28 b/game/assets/objects/4c/4c14c40542e249c902d0cac710ab4c6d6debba28 new file mode 100644 index 0000000..5646440 Binary files /dev/null and b/game/assets/objects/4c/4c14c40542e249c902d0cac710ab4c6d6debba28 differ diff --git a/game/assets/objects/4c/4c4bcc6905430286f32a862ce69665c51bd9938f b/game/assets/objects/4c/4c4bcc6905430286f32a862ce69665c51bd9938f new file mode 100644 index 0000000..0030737 Binary files /dev/null and b/game/assets/objects/4c/4c4bcc6905430286f32a862ce69665c51bd9938f differ diff --git a/game/assets/objects/4c/4c69a6edc25d973999aa0db2bb46b583a31da278 b/game/assets/objects/4c/4c69a6edc25d973999aa0db2bb46b583a31da278 new file mode 100644 index 0000000..220663e Binary files /dev/null and b/game/assets/objects/4c/4c69a6edc25d973999aa0db2bb46b583a31da278 differ diff --git a/game/assets/objects/4c/4cdd8fc380e85409fd94b93abdcad077d75ec58f b/game/assets/objects/4c/4cdd8fc380e85409fd94b93abdcad077d75ec58f new file mode 100644 index 0000000..5057d6b Binary files /dev/null and b/game/assets/objects/4c/4cdd8fc380e85409fd94b93abdcad077d75ec58f differ diff --git a/game/assets/objects/4d/4d03069c0e14794b463f563044da46433776da60 b/game/assets/objects/4d/4d03069c0e14794b463f563044da46433776da60 new file mode 100644 index 0000000..d9f1da1 Binary files /dev/null and b/game/assets/objects/4d/4d03069c0e14794b463f563044da46433776da60 differ diff --git a/game/assets/objects/4d/4dfe0b607c5de2e47f3b7950c56bbebbf3115957 b/game/assets/objects/4d/4dfe0b607c5de2e47f3b7950c56bbebbf3115957 new file mode 100644 index 0000000..3d1189b Binary files /dev/null and b/game/assets/objects/4d/4dfe0b607c5de2e47f3b7950c56bbebbf3115957 differ diff --git a/game/assets/objects/4e/4e094ed8dfa98656d8fec52a7d20c5ee6098b6ad b/game/assets/objects/4e/4e094ed8dfa98656d8fec52a7d20c5ee6098b6ad new file mode 100644 index 0000000..746d282 Binary files /dev/null and b/game/assets/objects/4e/4e094ed8dfa98656d8fec52a7d20c5ee6098b6ad differ diff --git a/game/assets/objects/4e/4e1651a728b394e054aaa24e3070e7dae849f14d b/game/assets/objects/4e/4e1651a728b394e054aaa24e3070e7dae849f14d new file mode 100644 index 0000000..aaff612 Binary files /dev/null and b/game/assets/objects/4e/4e1651a728b394e054aaa24e3070e7dae849f14d differ diff --git a/game/assets/objects/4e/4e398c518ae706ad4d90afd6914f748faf18a7b5 b/game/assets/objects/4e/4e398c518ae706ad4d90afd6914f748faf18a7b5 new file mode 100644 index 0000000..7c91486 Binary files /dev/null and b/game/assets/objects/4e/4e398c518ae706ad4d90afd6914f748faf18a7b5 differ diff --git a/game/assets/objects/4e/4e3e9f37c1e0c12c2993d25c28b89e2f0797ba5a b/game/assets/objects/4e/4e3e9f37c1e0c12c2993d25c28b89e2f0797ba5a new file mode 100644 index 0000000..2e819f4 Binary files /dev/null and b/game/assets/objects/4e/4e3e9f37c1e0c12c2993d25c28b89e2f0797ba5a differ diff --git a/game/assets/objects/4e/4e94ed53b6059d150c3bb2322b4af9ca9514bae1 b/game/assets/objects/4e/4e94ed53b6059d150c3bb2322b4af9ca9514bae1 new file mode 100644 index 0000000..bd05daf Binary files /dev/null and b/game/assets/objects/4e/4e94ed53b6059d150c3bb2322b4af9ca9514bae1 differ diff --git a/game/assets/objects/4f/4fce41a2d0890418ae1efb03d1142ca74d00aa61 b/game/assets/objects/4f/4fce41a2d0890418ae1efb03d1142ca74d00aa61 new file mode 100644 index 0000000..6c0e053 Binary files /dev/null and b/game/assets/objects/4f/4fce41a2d0890418ae1efb03d1142ca74d00aa61 differ diff --git a/game/assets/objects/50/500e2543034b4c026fb175d48c47196c5d013fe8 b/game/assets/objects/50/500e2543034b4c026fb175d48c47196c5d013fe8 new file mode 100644 index 0000000..5b62c4c Binary files /dev/null and b/game/assets/objects/50/500e2543034b4c026fb175d48c47196c5d013fe8 differ diff --git a/game/assets/objects/50/501b40b97ee55cb7a97943ee620aa05131089fc2 b/game/assets/objects/50/501b40b97ee55cb7a97943ee620aa05131089fc2 new file mode 100644 index 0000000..0d8d4d3 Binary files /dev/null and b/game/assets/objects/50/501b40b97ee55cb7a97943ee620aa05131089fc2 differ diff --git a/game/assets/objects/50/50a59a4f56e4046701b758ddbb1c1587efa4cadf b/game/assets/objects/50/50a59a4f56e4046701b758ddbb1c1587efa4cadf new file mode 100644 index 0000000..e76b317 Binary files /dev/null and b/game/assets/objects/50/50a59a4f56e4046701b758ddbb1c1587efa4cadf differ diff --git a/game/assets/objects/51/515dffc5d6dd216550d69e61b2eb9c3593b19a20 b/game/assets/objects/51/515dffc5d6dd216550d69e61b2eb9c3593b19a20 new file mode 100644 index 0000000..7891a05 Binary files /dev/null and b/game/assets/objects/51/515dffc5d6dd216550d69e61b2eb9c3593b19a20 differ diff --git a/game/assets/objects/52/525700bc06b6f0f8afc3fb542977cef617196ccf b/game/assets/objects/52/525700bc06b6f0f8afc3fb542977cef617196ccf new file mode 100644 index 0000000..6810b8d Binary files /dev/null and b/game/assets/objects/52/525700bc06b6f0f8afc3fb542977cef617196ccf differ diff --git a/game/assets/objects/52/5288cab96e26207edd31307c9c01b6902306e4f6 b/game/assets/objects/52/5288cab96e26207edd31307c9c01b6902306e4f6 new file mode 100644 index 0000000..179d081 Binary files /dev/null and b/game/assets/objects/52/5288cab96e26207edd31307c9c01b6902306e4f6 differ diff --git a/game/assets/objects/52/529abcb09220f0ebeb595f32bb663d026a7e0ae5 b/game/assets/objects/52/529abcb09220f0ebeb595f32bb663d026a7e0ae5 new file mode 100644 index 0000000..c2e609e Binary files /dev/null and b/game/assets/objects/52/529abcb09220f0ebeb595f32bb663d026a7e0ae5 differ diff --git a/game/assets/objects/53/53cc1890ebea833d3964c7dd1c90676650e34404 b/game/assets/objects/53/53cc1890ebea833d3964c7dd1c90676650e34404 new file mode 100644 index 0000000..1f6a9d2 Binary files /dev/null and b/game/assets/objects/53/53cc1890ebea833d3964c7dd1c90676650e34404 differ diff --git a/game/assets/objects/55/550da80d936e05a7bfda43ca5d8af5b3779320f1 b/game/assets/objects/55/550da80d936e05a7bfda43ca5d8af5b3779320f1 new file mode 100644 index 0000000..b071815 Binary files /dev/null and b/game/assets/objects/55/550da80d936e05a7bfda43ca5d8af5b3779320f1 differ diff --git a/game/assets/objects/55/555d33de143e6dcef2aa80ebf9a8f8b1481d42d0 b/game/assets/objects/55/555d33de143e6dcef2aa80ebf9a8f8b1481d42d0 new file mode 100644 index 0000000..16dc7fd Binary files /dev/null and b/game/assets/objects/55/555d33de143e6dcef2aa80ebf9a8f8b1481d42d0 differ diff --git a/game/assets/objects/55/55da1856e77cfd31a7e8c3d358e1f856c5583198 b/game/assets/objects/55/55da1856e77cfd31a7e8c3d358e1f856c5583198 new file mode 100644 index 0000000..b65ed79 Binary files /dev/null and b/game/assets/objects/55/55da1856e77cfd31a7e8c3d358e1f856c5583198 differ diff --git a/game/assets/objects/56/560dd97e6da8badbc8ac00b28c45312e60a525f2 b/game/assets/objects/56/560dd97e6da8badbc8ac00b28c45312e60a525f2 new file mode 100644 index 0000000..26d55f7 Binary files /dev/null and b/game/assets/objects/56/560dd97e6da8badbc8ac00b28c45312e60a525f2 differ diff --git a/game/assets/objects/56/5680749048457f5772ec95a73d856ad792fa1717 b/game/assets/objects/56/5680749048457f5772ec95a73d856ad792fa1717 new file mode 100644 index 0000000..3c5619f Binary files /dev/null and b/game/assets/objects/56/5680749048457f5772ec95a73d856ad792fa1717 differ diff --git a/game/assets/objects/56/56c1d0ac0de2265018b2c41cb571cc6631101484 b/game/assets/objects/56/56c1d0ac0de2265018b2c41cb571cc6631101484 new file mode 100644 index 0000000..a607a9e Binary files /dev/null and b/game/assets/objects/56/56c1d0ac0de2265018b2c41cb571cc6631101484 differ diff --git a/game/assets/objects/56/56d6fd65958fb25bf9b4033a87655b591e222005 b/game/assets/objects/56/56d6fd65958fb25bf9b4033a87655b591e222005 new file mode 100644 index 0000000..389490d Binary files /dev/null and b/game/assets/objects/56/56d6fd65958fb25bf9b4033a87655b591e222005 differ diff --git a/game/assets/objects/57/57008a7f564443d563968fd040fc13ab226fc8d1 b/game/assets/objects/57/57008a7f564443d563968fd040fc13ab226fc8d1 new file mode 100644 index 0000000..a037e90 Binary files /dev/null and b/game/assets/objects/57/57008a7f564443d563968fd040fc13ab226fc8d1 differ diff --git a/game/assets/objects/57/5738d7f49ef30adcfc4f2ab13e0b1d74f09a1289 b/game/assets/objects/57/5738d7f49ef30adcfc4f2ab13e0b1d74f09a1289 new file mode 100644 index 0000000..f7551c9 Binary files /dev/null and b/game/assets/objects/57/5738d7f49ef30adcfc4f2ab13e0b1d74f09a1289 differ diff --git a/game/assets/objects/57/573e565b7fda2c34fc972edd21a82fd2e09200f8 b/game/assets/objects/57/573e565b7fda2c34fc972edd21a82fd2e09200f8 new file mode 100644 index 0000000..d80d654 Binary files /dev/null and b/game/assets/objects/57/573e565b7fda2c34fc972edd21a82fd2e09200f8 differ diff --git a/game/assets/objects/58/5887d10234c4f244ec5468080412f3e6ef9522f3 b/game/assets/objects/58/5887d10234c4f244ec5468080412f3e6ef9522f3 new file mode 100644 index 0000000..b75843d Binary files /dev/null and b/game/assets/objects/58/5887d10234c4f244ec5468080412f3e6ef9522f3 differ diff --git a/game/assets/objects/58/58efedf302e0203a6ff9e59a6535d300286c5594 b/game/assets/objects/58/58efedf302e0203a6ff9e59a6535d300286c5594 new file mode 100644 index 0000000..3f45533 Binary files /dev/null and b/game/assets/objects/58/58efedf302e0203a6ff9e59a6535d300286c5594 differ diff --git a/game/assets/objects/59/59034eb696e186d973dcea0b162f01e38f1b4f31 b/game/assets/objects/59/59034eb696e186d973dcea0b162f01e38f1b4f31 new file mode 100644 index 0000000..bdf4fd0 Binary files /dev/null and b/game/assets/objects/59/59034eb696e186d973dcea0b162f01e38f1b4f31 differ diff --git a/game/assets/objects/59/594be3eaea9a2b92095eeeb3b1e01e755dcb8ce2 b/game/assets/objects/59/594be3eaea9a2b92095eeeb3b1e01e755dcb8ce2 new file mode 100644 index 0000000..9657848 Binary files /dev/null and b/game/assets/objects/59/594be3eaea9a2b92095eeeb3b1e01e755dcb8ce2 differ diff --git a/game/assets/objects/5a/5a2449cc3d4a6ad36598847e501f956e5a3528bd b/game/assets/objects/5a/5a2449cc3d4a6ad36598847e501f956e5a3528bd new file mode 100644 index 0000000..d62a21d Binary files /dev/null and b/game/assets/objects/5a/5a2449cc3d4a6ad36598847e501f956e5a3528bd differ diff --git a/game/assets/objects/5a/5a368ed32b3357e31629451ace57eb30d90e8874 b/game/assets/objects/5a/5a368ed32b3357e31629451ace57eb30d90e8874 new file mode 100644 index 0000000..fbb9da6 Binary files /dev/null and b/game/assets/objects/5a/5a368ed32b3357e31629451ace57eb30d90e8874 differ diff --git a/game/assets/objects/5b/5b1675279bbc245fc6bbb705de8ea09fb3f32b53 b/game/assets/objects/5b/5b1675279bbc245fc6bbb705de8ea09fb3f32b53 new file mode 100644 index 0000000..68cf0ab Binary files /dev/null and b/game/assets/objects/5b/5b1675279bbc245fc6bbb705de8ea09fb3f32b53 differ diff --git a/game/assets/objects/5b/5bb5a04e776d69ca12b1d7bc369975f9bf62e741 b/game/assets/objects/5b/5bb5a04e776d69ca12b1d7bc369975f9bf62e741 new file mode 100644 index 0000000..fb27d72 Binary files /dev/null and b/game/assets/objects/5b/5bb5a04e776d69ca12b1d7bc369975f9bf62e741 differ diff --git a/game/assets/objects/5c/5c633c345fe4cb87c36ada2fe2b5da1b80601cf3 b/game/assets/objects/5c/5c633c345fe4cb87c36ada2fe2b5da1b80601cf3 new file mode 100644 index 0000000..2a2b685 Binary files /dev/null and b/game/assets/objects/5c/5c633c345fe4cb87c36ada2fe2b5da1b80601cf3 differ diff --git a/game/assets/objects/5c/5c971029d9284676dce1dda2c9d202f8c47163b2 b/game/assets/objects/5c/5c971029d9284676dce1dda2c9d202f8c47163b2 new file mode 100644 index 0000000..285bc50 Binary files /dev/null and b/game/assets/objects/5c/5c971029d9284676dce1dda2c9d202f8c47163b2 differ diff --git a/game/assets/objects/5c/5cde2500773323f7997d75062f8a26afcdf62b2e b/game/assets/objects/5c/5cde2500773323f7997d75062f8a26afcdf62b2e new file mode 100644 index 0000000..2be6c1c Binary files /dev/null and b/game/assets/objects/5c/5cde2500773323f7997d75062f8a26afcdf62b2e differ diff --git a/game/assets/objects/5d/5d9055cf25f126c47e18637aeef917fa1ef61a42 b/game/assets/objects/5d/5d9055cf25f126c47e18637aeef917fa1ef61a42 new file mode 100644 index 0000000..031c828 Binary files /dev/null and b/game/assets/objects/5d/5d9055cf25f126c47e18637aeef917fa1ef61a42 differ diff --git a/game/assets/objects/5e/5e2ef521293719bbe22bbb515bbcacf4c233a075 b/game/assets/objects/5e/5e2ef521293719bbe22bbb515bbcacf4c233a075 new file mode 100644 index 0000000..9083a22 Binary files /dev/null and b/game/assets/objects/5e/5e2ef521293719bbe22bbb515bbcacf4c233a075 differ diff --git a/game/assets/objects/5e/5e7d63e75c6e042f452bc5e151276911ef92fed8 b/game/assets/objects/5e/5e7d63e75c6e042f452bc5e151276911ef92fed8 new file mode 100644 index 0000000..e3f8dbf Binary files /dev/null and b/game/assets/objects/5e/5e7d63e75c6e042f452bc5e151276911ef92fed8 differ diff --git a/game/assets/objects/5f/5fd568d724ba7d53911b6cccf5636f859d2662e8 b/game/assets/objects/5f/5fd568d724ba7d53911b6cccf5636f859d2662e8 new file mode 100644 index 0000000..0ea73f8 Binary files /dev/null and b/game/assets/objects/5f/5fd568d724ba7d53911b6cccf5636f859d2662e8 differ diff --git a/game/assets/objects/5f/5fdf1bd80b204245af760042d2e546d87666e288 b/game/assets/objects/5f/5fdf1bd80b204245af760042d2e546d87666e288 new file mode 100644 index 0000000..40864f9 Binary files /dev/null and b/game/assets/objects/5f/5fdf1bd80b204245af760042d2e546d87666e288 differ diff --git a/game/assets/objects/60/607d51883e137d5d423dde865232ab1ee78f2694 b/game/assets/objects/60/607d51883e137d5d423dde865232ab1ee78f2694 new file mode 100644 index 0000000..aa504d6 Binary files /dev/null and b/game/assets/objects/60/607d51883e137d5d423dde865232ab1ee78f2694 differ diff --git a/game/assets/objects/60/6094b6620f2d1f2d19869a2e6498a52b1a265738 b/game/assets/objects/60/6094b6620f2d1f2d19869a2e6498a52b1a265738 new file mode 100644 index 0000000..fc3009b Binary files /dev/null and b/game/assets/objects/60/6094b6620f2d1f2d19869a2e6498a52b1a265738 differ diff --git a/game/assets/objects/62/6226903c5dfd8ac388f9d64a5fa9968680ed3507 b/game/assets/objects/62/6226903c5dfd8ac388f9d64a5fa9968680ed3507 new file mode 100644 index 0000000..c61d8ee Binary files /dev/null and b/game/assets/objects/62/6226903c5dfd8ac388f9d64a5fa9968680ed3507 differ diff --git a/game/assets/objects/63/63bbe3921abd75b9f6cd1e20330360d164da169b b/game/assets/objects/63/63bbe3921abd75b9f6cd1e20330360d164da169b new file mode 100644 index 0000000..1490515 Binary files /dev/null and b/game/assets/objects/63/63bbe3921abd75b9f6cd1e20330360d164da169b differ diff --git a/game/assets/objects/64/641e601132b4adb67951e0d49c1004cf1b86eff2 b/game/assets/objects/64/641e601132b4adb67951e0d49c1004cf1b86eff2 new file mode 100644 index 0000000..f44992b Binary files /dev/null and b/game/assets/objects/64/641e601132b4adb67951e0d49c1004cf1b86eff2 differ diff --git a/game/assets/objects/64/647c46f5704b3be0b7159961e1bc51721a33dfd5 b/game/assets/objects/64/647c46f5704b3be0b7159961e1bc51721a33dfd5 new file mode 100644 index 0000000..ed5f268 Binary files /dev/null and b/game/assets/objects/64/647c46f5704b3be0b7159961e1bc51721a33dfd5 differ diff --git a/game/assets/objects/65/65a1a69845133187d6b8689e6ce9707da10f21a6 b/game/assets/objects/65/65a1a69845133187d6b8689e6ce9707da10f21a6 new file mode 100644 index 0000000..ccad91c Binary files /dev/null and b/game/assets/objects/65/65a1a69845133187d6b8689e6ce9707da10f21a6 differ diff --git a/game/assets/objects/65/65b49739d48ebc47879ca5528c8283329980b304 b/game/assets/objects/65/65b49739d48ebc47879ca5528c8283329980b304 new file mode 100644 index 0000000..a22d2a3 Binary files /dev/null and b/game/assets/objects/65/65b49739d48ebc47879ca5528c8283329980b304 differ diff --git a/game/assets/objects/67/671ef0ae7b59014a2f637d7af6d781324ab6309f b/game/assets/objects/67/671ef0ae7b59014a2f637d7af6d781324ab6309f new file mode 100644 index 0000000..59af558 Binary files /dev/null and b/game/assets/objects/67/671ef0ae7b59014a2f637d7af6d781324ab6309f differ diff --git a/game/assets/objects/68/68e0a58848bbdad12ad2b216d7244754459c9516 b/game/assets/objects/68/68e0a58848bbdad12ad2b216d7244754459c9516 new file mode 100644 index 0000000..3efb5c8 Binary files /dev/null and b/game/assets/objects/68/68e0a58848bbdad12ad2b216d7244754459c9516 differ diff --git a/game/assets/objects/69/6967f0af60f480e81d32f1f8e5f88ccafec3a40c b/game/assets/objects/69/6967f0af60f480e81d32f1f8e5f88ccafec3a40c new file mode 100644 index 0000000..4972ed5 Binary files /dev/null and b/game/assets/objects/69/6967f0af60f480e81d32f1f8e5f88ccafec3a40c differ diff --git a/game/assets/objects/69/69b6e589ec3d2c9063972545e83ed1f07e665094 b/game/assets/objects/69/69b6e589ec3d2c9063972545e83ed1f07e665094 new file mode 100644 index 0000000..41f299b Binary files /dev/null and b/game/assets/objects/69/69b6e589ec3d2c9063972545e83ed1f07e665094 differ diff --git a/game/assets/objects/69/69ef2fe8d6a744689953fd692d0106b0b2d2a9ce b/game/assets/objects/69/69ef2fe8d6a744689953fd692d0106b0b2d2a9ce new file mode 100644 index 0000000..41dd0c3 Binary files /dev/null and b/game/assets/objects/69/69ef2fe8d6a744689953fd692d0106b0b2d2a9ce differ diff --git a/game/assets/objects/6a/6a83b514027c328b74f8428448dc6589d4b16388 b/game/assets/objects/6a/6a83b514027c328b74f8428448dc6589d4b16388 new file mode 100644 index 0000000..92487c8 Binary files /dev/null and b/game/assets/objects/6a/6a83b514027c328b74f8428448dc6589d4b16388 differ diff --git a/game/assets/objects/6a/6a908e7c7d61e01bc4223b4991820bfc56f84c5e b/game/assets/objects/6a/6a908e7c7d61e01bc4223b4991820bfc56f84c5e new file mode 100644 index 0000000..34526c5 Binary files /dev/null and b/game/assets/objects/6a/6a908e7c7d61e01bc4223b4991820bfc56f84c5e differ diff --git a/game/assets/objects/6b/6b2f86a35a3cd88320b55c029d77659915f83239 b/game/assets/objects/6b/6b2f86a35a3cd88320b55c029d77659915f83239 new file mode 100644 index 0000000..10fe80c Binary files /dev/null and b/game/assets/objects/6b/6b2f86a35a3cd88320b55c029d77659915f83239 differ diff --git a/game/assets/objects/6c/6c5a03460012d7b76c16d0dbaa01c443a6ba094e b/game/assets/objects/6c/6c5a03460012d7b76c16d0dbaa01c443a6ba094e new file mode 100644 index 0000000..b8a25a7 Binary files /dev/null and b/game/assets/objects/6c/6c5a03460012d7b76c16d0dbaa01c443a6ba094e differ diff --git a/game/assets/objects/6d/6df3b2c2b951863fc5200edf3ff3396b105ed897 b/game/assets/objects/6d/6df3b2c2b951863fc5200edf3ff3396b105ed897 new file mode 100644 index 0000000..64ec227 Binary files /dev/null and b/game/assets/objects/6d/6df3b2c2b951863fc5200edf3ff3396b105ed897 differ diff --git a/game/assets/objects/6e/6e0488ab07b9539fbaebc093f194bb6a95b2caec b/game/assets/objects/6e/6e0488ab07b9539fbaebc093f194bb6a95b2caec new file mode 100644 index 0000000..7c010fd Binary files /dev/null and b/game/assets/objects/6e/6e0488ab07b9539fbaebc093f194bb6a95b2caec differ diff --git a/game/assets/objects/6e/6e0f9074e049a6c30402d70cc75a5da99042e00c b/game/assets/objects/6e/6e0f9074e049a6c30402d70cc75a5da99042e00c new file mode 100644 index 0000000..0a47fd8 Binary files /dev/null and b/game/assets/objects/6e/6e0f9074e049a6c30402d70cc75a5da99042e00c differ diff --git a/game/assets/objects/6e/6ea4e448fbc2a079acb0cf3564273083dadae165 b/game/assets/objects/6e/6ea4e448fbc2a079acb0cf3564273083dadae165 new file mode 100644 index 0000000..49837c6 Binary files /dev/null and b/game/assets/objects/6e/6ea4e448fbc2a079acb0cf3564273083dadae165 differ diff --git a/game/assets/objects/6f/6f1d403f47725af0f4c42a74cfec00ff59153160 b/game/assets/objects/6f/6f1d403f47725af0f4c42a74cfec00ff59153160 new file mode 100644 index 0000000..a1f7faa Binary files /dev/null and b/game/assets/objects/6f/6f1d403f47725af0f4c42a74cfec00ff59153160 differ diff --git a/game/assets/objects/6f/6ff26a1439fb6f9f353c2bd623edeb936e760855 b/game/assets/objects/6f/6ff26a1439fb6f9f353c2bd623edeb936e760855 new file mode 100644 index 0000000..c9b2d2b Binary files /dev/null and b/game/assets/objects/6f/6ff26a1439fb6f9f353c2bd623edeb936e760855 differ diff --git a/game/assets/objects/70/705a155201cc388a0c0c6f7435ddbc0fcc56b5f2 b/game/assets/objects/70/705a155201cc388a0c0c6f7435ddbc0fcc56b5f2 new file mode 100644 index 0000000..b64a841 Binary files /dev/null and b/game/assets/objects/70/705a155201cc388a0c0c6f7435ddbc0fcc56b5f2 differ diff --git a/game/assets/objects/71/71b5fc7aa050892f8c9a9ed2713cc1ad8874742a b/game/assets/objects/71/71b5fc7aa050892f8c9a9ed2713cc1ad8874742a new file mode 100644 index 0000000..0e1adcd Binary files /dev/null and b/game/assets/objects/71/71b5fc7aa050892f8c9a9ed2713cc1ad8874742a differ diff --git a/game/assets/objects/72/725e5179c72444c6d885e39c27e6b31ed83d58bc b/game/assets/objects/72/725e5179c72444c6d885e39c27e6b31ed83d58bc new file mode 100644 index 0000000..39eb418 Binary files /dev/null and b/game/assets/objects/72/725e5179c72444c6d885e39c27e6b31ed83d58bc differ diff --git a/game/assets/objects/72/7274a2231ed4544a37e599b7b014e589e5377094 b/game/assets/objects/72/7274a2231ed4544a37e599b7b014e589e5377094 new file mode 100644 index 0000000..a8dab85 Binary files /dev/null and b/game/assets/objects/72/7274a2231ed4544a37e599b7b014e589e5377094 differ diff --git a/game/assets/objects/72/72a006be3bd693aa23cc2f8e9c9d13ea6f829aa1 b/game/assets/objects/72/72a006be3bd693aa23cc2f8e9c9d13ea6f829aa1 new file mode 100644 index 0000000..afd7035 Binary files /dev/null and b/game/assets/objects/72/72a006be3bd693aa23cc2f8e9c9d13ea6f829aa1 differ diff --git a/game/assets/objects/74/74771428c2aa2acbd30638c6706867053bad64d3 b/game/assets/objects/74/74771428c2aa2acbd30638c6706867053bad64d3 new file mode 100644 index 0000000..ceec866 Binary files /dev/null and b/game/assets/objects/74/74771428c2aa2acbd30638c6706867053bad64d3 differ diff --git a/game/assets/objects/74/74da65c99aa578486efa7b69983d3533e14c0d6e b/game/assets/objects/74/74da65c99aa578486efa7b69983d3533e14c0d6e new file mode 100644 index 0000000..b02df7b Binary files /dev/null and b/game/assets/objects/74/74da65c99aa578486efa7b69983d3533e14c0d6e differ diff --git a/game/assets/objects/74/74e5422bd83bb2041a6f0d09644bc095c0e9e21a b/game/assets/objects/74/74e5422bd83bb2041a6f0d09644bc095c0e9e21a new file mode 100644 index 0000000..05f7aa8 Binary files /dev/null and b/game/assets/objects/74/74e5422bd83bb2041a6f0d09644bc095c0e9e21a differ diff --git a/game/assets/objects/75/753a88c1d9b3b46210c18ff07974955463edd18b b/game/assets/objects/75/753a88c1d9b3b46210c18ff07974955463edd18b new file mode 100644 index 0000000..d1b88ee Binary files /dev/null and b/game/assets/objects/75/753a88c1d9b3b46210c18ff07974955463edd18b differ diff --git a/game/assets/objects/75/758d2a1c36abc84d2744d697b76d5414ea96d9f3 b/game/assets/objects/75/758d2a1c36abc84d2744d697b76d5414ea96d9f3 new file mode 100644 index 0000000..77dcd4a Binary files /dev/null and b/game/assets/objects/75/758d2a1c36abc84d2744d697b76d5414ea96d9f3 differ diff --git a/game/assets/objects/76/763cc79934a572b84c371cb49afad5912f29d2f1 b/game/assets/objects/76/763cc79934a572b84c371cb49afad5912f29d2f1 new file mode 100644 index 0000000..193e08d Binary files /dev/null and b/game/assets/objects/76/763cc79934a572b84c371cb49afad5912f29d2f1 differ diff --git a/game/assets/objects/76/76de0a736928eac5003691d73bdc2eda92116198 b/game/assets/objects/76/76de0a736928eac5003691d73bdc2eda92116198 new file mode 100644 index 0000000..9c99fc8 Binary files /dev/null and b/game/assets/objects/76/76de0a736928eac5003691d73bdc2eda92116198 differ diff --git a/game/assets/objects/77/770b3f1feb05b9b941d858eb72b9d04ffc5d52c9 b/game/assets/objects/77/770b3f1feb05b9b941d858eb72b9d04ffc5d52c9 new file mode 100644 index 0000000..7bff573 Binary files /dev/null and b/game/assets/objects/77/770b3f1feb05b9b941d858eb72b9d04ffc5d52c9 differ diff --git a/game/assets/objects/77/77a5d445ed9ee588846947ac3df63f84be6d569d b/game/assets/objects/77/77a5d445ed9ee588846947ac3df63f84be6d569d new file mode 100644 index 0000000..a65af15 Binary files /dev/null and b/game/assets/objects/77/77a5d445ed9ee588846947ac3df63f84be6d569d differ diff --git a/game/assets/objects/77/77a7b79d4f2ada27640866ece1020b631f5bdc54 b/game/assets/objects/77/77a7b79d4f2ada27640866ece1020b631f5bdc54 new file mode 100644 index 0000000..9246cdd Binary files /dev/null and b/game/assets/objects/77/77a7b79d4f2ada27640866ece1020b631f5bdc54 differ diff --git a/game/assets/objects/78/78152dc42b036e0de7616e6e669ce5a81d17f82a b/game/assets/objects/78/78152dc42b036e0de7616e6e669ce5a81d17f82a new file mode 100644 index 0000000..d4942a1 Binary files /dev/null and b/game/assets/objects/78/78152dc42b036e0de7616e6e669ce5a81d17f82a differ diff --git a/game/assets/objects/78/78d544a240d627005aaef6033fd646eafc66fe7a b/game/assets/objects/78/78d544a240d627005aaef6033fd646eafc66fe7a new file mode 100644 index 0000000..bd8cb3e Binary files /dev/null and b/game/assets/objects/78/78d544a240d627005aaef6033fd646eafc66fe7a differ diff --git a/game/assets/objects/78/78ee5b46b6615191b7a16d259fcbda273762297e b/game/assets/objects/78/78ee5b46b6615191b7a16d259fcbda273762297e new file mode 100644 index 0000000..9461fec Binary files /dev/null and b/game/assets/objects/78/78ee5b46b6615191b7a16d259fcbda273762297e differ diff --git a/game/assets/objects/78/78f034d58779fb4d22b00ea249015a0dbf4e7b3f b/game/assets/objects/78/78f034d58779fb4d22b00ea249015a0dbf4e7b3f new file mode 100644 index 0000000..3b0d6a2 Binary files /dev/null and b/game/assets/objects/78/78f034d58779fb4d22b00ea249015a0dbf4e7b3f differ diff --git a/game/assets/objects/79/79a5b53bf22cca182ddff2a670942c49867663ec b/game/assets/objects/79/79a5b53bf22cca182ddff2a670942c49867663ec new file mode 100644 index 0000000..3e68563 Binary files /dev/null and b/game/assets/objects/79/79a5b53bf22cca182ddff2a670942c49867663ec differ diff --git a/game/assets/objects/79/79afbeabcdbb063cfa00d544dc00beac8543a581 b/game/assets/objects/79/79afbeabcdbb063cfa00d544dc00beac8543a581 new file mode 100644 index 0000000..4ae07d4 Binary files /dev/null and b/game/assets/objects/79/79afbeabcdbb063cfa00d544dc00beac8543a581 differ diff --git a/game/assets/objects/7b/7b4b5323ef066caa1ae43cbe66fffd9dfce4ed32 b/game/assets/objects/7b/7b4b5323ef066caa1ae43cbe66fffd9dfce4ed32 new file mode 100644 index 0000000..aa0eb71 Binary files /dev/null and b/game/assets/objects/7b/7b4b5323ef066caa1ae43cbe66fffd9dfce4ed32 differ diff --git a/game/assets/objects/7b/7bf3553a4fe41a0078f4988a13d6e1ed8663ef4c b/game/assets/objects/7b/7bf3553a4fe41a0078f4988a13d6e1ed8663ef4c new file mode 100644 index 0000000..94a0c1c Binary files /dev/null and b/game/assets/objects/7b/7bf3553a4fe41a0078f4988a13d6e1ed8663ef4c differ diff --git a/game/assets/objects/7c/7c5b628070ce191762b972fc3a58d57bc10a628a b/game/assets/objects/7c/7c5b628070ce191762b972fc3a58d57bc10a628a new file mode 100644 index 0000000..678210b Binary files /dev/null and b/game/assets/objects/7c/7c5b628070ce191762b972fc3a58d57bc10a628a differ diff --git a/game/assets/objects/7d/7d5b3b403a11b6dd4c3801c4f4c8bf7ce9a8c771 b/game/assets/objects/7d/7d5b3b403a11b6dd4c3801c4f4c8bf7ce9a8c771 new file mode 100644 index 0000000..6ab7773 Binary files /dev/null and b/game/assets/objects/7d/7d5b3b403a11b6dd4c3801c4f4c8bf7ce9a8c771 differ diff --git a/game/assets/objects/7d/7d801582e08be973d1a41469d1b92916278d1e88 b/game/assets/objects/7d/7d801582e08be973d1a41469d1b92916278d1e88 new file mode 100644 index 0000000..2a2e53e Binary files /dev/null and b/game/assets/objects/7d/7d801582e08be973d1a41469d1b92916278d1e88 differ diff --git a/game/assets/objects/7e/7eb3affa45f47f919e74523a55185e65c2081d12 b/game/assets/objects/7e/7eb3affa45f47f919e74523a55185e65c2081d12 new file mode 100644 index 0000000..c5d2f41 Binary files /dev/null and b/game/assets/objects/7e/7eb3affa45f47f919e74523a55185e65c2081d12 differ diff --git a/game/assets/objects/80/8072827813f0bffb9847e636245edebb5ddab198 b/game/assets/objects/80/8072827813f0bffb9847e636245edebb5ddab198 new file mode 100644 index 0000000..436651f Binary files /dev/null and b/game/assets/objects/80/8072827813f0bffb9847e636245edebb5ddab198 differ diff --git a/game/assets/objects/80/80ce8d4b8d361b69e42d8d147e42a09d3c85a115 b/game/assets/objects/80/80ce8d4b8d361b69e42d8d147e42a09d3c85a115 new file mode 100644 index 0000000..e7c9078 Binary files /dev/null and b/game/assets/objects/80/80ce8d4b8d361b69e42d8d147e42a09d3c85a115 differ diff --git a/game/assets/objects/81/813ebd91b9c3fe1ac8f89f13c85d0755678f2165 b/game/assets/objects/81/813ebd91b9c3fe1ac8f89f13c85d0755678f2165 new file mode 100644 index 0000000..e784441 Binary files /dev/null and b/game/assets/objects/81/813ebd91b9c3fe1ac8f89f13c85d0755678f2165 differ diff --git a/game/assets/objects/81/8184e851170619de93aa56244fb12c472a2ddd7d b/game/assets/objects/81/8184e851170619de93aa56244fb12c472a2ddd7d new file mode 100644 index 0000000..1e961d7 Binary files /dev/null and b/game/assets/objects/81/8184e851170619de93aa56244fb12c472a2ddd7d differ diff --git a/game/assets/objects/82/827d71834e69954e0a7fd7748998332e0b619d29 b/game/assets/objects/82/827d71834e69954e0a7fd7748998332e0b619d29 new file mode 100644 index 0000000..dcef757 Binary files /dev/null and b/game/assets/objects/82/827d71834e69954e0a7fd7748998332e0b619d29 differ diff --git a/game/assets/objects/84/84556bac99c01ad006552cf5d96494817e9b1700 b/game/assets/objects/84/84556bac99c01ad006552cf5d96494817e9b1700 new file mode 100644 index 0000000..6ddae3b Binary files /dev/null and b/game/assets/objects/84/84556bac99c01ad006552cf5d96494817e9b1700 differ diff --git a/game/assets/objects/84/847ec719ee91e28d7bf58ab39a5d8d6bd5728314 b/game/assets/objects/84/847ec719ee91e28d7bf58ab39a5d8d6bd5728314 new file mode 100644 index 0000000..b7d19d3 Binary files /dev/null and b/game/assets/objects/84/847ec719ee91e28d7bf58ab39a5d8d6bd5728314 differ diff --git a/game/assets/objects/84/84c3b008dc1d5e0dd5e8ad85a06eca29f0591e48 b/game/assets/objects/84/84c3b008dc1d5e0dd5e8ad85a06eca29f0591e48 new file mode 100644 index 0000000..4dd65ca Binary files /dev/null and b/game/assets/objects/84/84c3b008dc1d5e0dd5e8ad85a06eca29f0591e48 differ diff --git a/game/assets/objects/85/857abbbfb58186c2f1b5510a4072630950e518f6 b/game/assets/objects/85/857abbbfb58186c2f1b5510a4072630950e518f6 new file mode 100644 index 0000000..8f6d50f Binary files /dev/null and b/game/assets/objects/85/857abbbfb58186c2f1b5510a4072630950e518f6 differ diff --git a/game/assets/objects/85/857b75738992d25e338dee640ab191323bcbf798 b/game/assets/objects/85/857b75738992d25e338dee640ab191323bcbf798 new file mode 100644 index 0000000..069589a Binary files /dev/null and b/game/assets/objects/85/857b75738992d25e338dee640ab191323bcbf798 differ diff --git a/game/assets/objects/85/85c860ea8c55984bf6cabb75354c78f3a603f98d b/game/assets/objects/85/85c860ea8c55984bf6cabb75354c78f3a603f98d new file mode 100644 index 0000000..c115443 Binary files /dev/null and b/game/assets/objects/85/85c860ea8c55984bf6cabb75354c78f3a603f98d differ diff --git a/game/assets/objects/85/85ff970401cb1ef2e812f943077ab96549315d0a b/game/assets/objects/85/85ff970401cb1ef2e812f943077ab96549315d0a new file mode 100644 index 0000000..52b9785 Binary files /dev/null and b/game/assets/objects/85/85ff970401cb1ef2e812f943077ab96549315d0a differ diff --git a/game/assets/objects/86/86a2a7206c769aaa9435aabba70be201cb3e3a6b b/game/assets/objects/86/86a2a7206c769aaa9435aabba70be201cb3e3a6b new file mode 100644 index 0000000..019ed19 Binary files /dev/null and b/game/assets/objects/86/86a2a7206c769aaa9435aabba70be201cb3e3a6b differ diff --git a/game/assets/objects/86/86cb1bb0c45625b18e00a64098cd425a38f6d3f2 b/game/assets/objects/86/86cb1bb0c45625b18e00a64098cd425a38f6d3f2 new file mode 100644 index 0000000..05dff55 Binary files /dev/null and b/game/assets/objects/86/86cb1bb0c45625b18e00a64098cd425a38f6d3f2 differ diff --git a/game/assets/objects/87/872d3d24452ff2155bb6be4a14c103e4451e6416 b/game/assets/objects/87/872d3d24452ff2155bb6be4a14c103e4451e6416 new file mode 100644 index 0000000..26128e4 Binary files /dev/null and b/game/assets/objects/87/872d3d24452ff2155bb6be4a14c103e4451e6416 differ diff --git a/game/assets/objects/87/8760ebb9d4b1fe9457ef272324ecd6b4329a593e b/game/assets/objects/87/8760ebb9d4b1fe9457ef272324ecd6b4329a593e new file mode 100644 index 0000000..1e0c1a1 Binary files /dev/null and b/game/assets/objects/87/8760ebb9d4b1fe9457ef272324ecd6b4329a593e differ diff --git a/game/assets/objects/87/87c47bda3645c68f18a49e83cbf06e5302d087ff b/game/assets/objects/87/87c47bda3645c68f18a49e83cbf06e5302d087ff new file mode 100644 index 0000000..3bd462d Binary files /dev/null and b/game/assets/objects/87/87c47bda3645c68f18a49e83cbf06e5302d087ff differ diff --git a/game/assets/objects/87/87eceaa08df660cd1d4dadf7d1c64a6f7125dacb b/game/assets/objects/87/87eceaa08df660cd1d4dadf7d1c64a6f7125dacb new file mode 100644 index 0000000..8341bfa Binary files /dev/null and b/game/assets/objects/87/87eceaa08df660cd1d4dadf7d1c64a6f7125dacb differ diff --git a/game/assets/objects/87/87edc11141fb5a045f2ed830b545aaa73f96ee99 b/game/assets/objects/87/87edc11141fb5a045f2ed830b545aaa73f96ee99 new file mode 100644 index 0000000..8d1a195 Binary files /dev/null and b/game/assets/objects/87/87edc11141fb5a045f2ed830b545aaa73f96ee99 differ diff --git a/game/assets/objects/88/882d092b05faef1cfa6af43d642b9e8843f22756 b/game/assets/objects/88/882d092b05faef1cfa6af43d642b9e8843f22756 new file mode 100644 index 0000000..2faa7d5 Binary files /dev/null and b/game/assets/objects/88/882d092b05faef1cfa6af43d642b9e8843f22756 differ diff --git a/game/assets/objects/88/88a792430dfff97582ab49b8dc9477cd9d4e5ebb b/game/assets/objects/88/88a792430dfff97582ab49b8dc9477cd9d4e5ebb new file mode 100644 index 0000000..061bf27 Binary files /dev/null and b/game/assets/objects/88/88a792430dfff97582ab49b8dc9477cd9d4e5ebb differ diff --git a/game/assets/objects/88/88ae6c906f8f94add2fe904b59c94e844bbcef9a b/game/assets/objects/88/88ae6c906f8f94add2fe904b59c94e844bbcef9a new file mode 100644 index 0000000..4ee9378 Binary files /dev/null and b/game/assets/objects/88/88ae6c906f8f94add2fe904b59c94e844bbcef9a differ diff --git a/game/assets/objects/8b/8b260108a73470c16cd244325242d4780cfb7d78 b/game/assets/objects/8b/8b260108a73470c16cd244325242d4780cfb7d78 new file mode 100644 index 0000000..42758b9 Binary files /dev/null and b/game/assets/objects/8b/8b260108a73470c16cd244325242d4780cfb7d78 differ diff --git a/game/assets/objects/8b/8bf3ecb0fe9a6a615f5995e3dd21b6c39adc21d5 b/game/assets/objects/8b/8bf3ecb0fe9a6a615f5995e3dd21b6c39adc21d5 new file mode 100644 index 0000000..8e565af Binary files /dev/null and b/game/assets/objects/8b/8bf3ecb0fe9a6a615f5995e3dd21b6c39adc21d5 differ diff --git a/game/assets/objects/8e/8ed3945df8b9264c6451c153357475482d9f2066 b/game/assets/objects/8e/8ed3945df8b9264c6451c153357475482d9f2066 new file mode 100644 index 0000000..211fed6 Binary files /dev/null and b/game/assets/objects/8e/8ed3945df8b9264c6451c153357475482d9f2066 differ diff --git a/game/assets/objects/8f/8f23820fa28830dd031188c20acb35af044aedb5 b/game/assets/objects/8f/8f23820fa28830dd031188c20acb35af044aedb5 new file mode 100644 index 0000000..2eb69f5 Binary files /dev/null and b/game/assets/objects/8f/8f23820fa28830dd031188c20acb35af044aedb5 differ diff --git a/game/assets/objects/8f/8f23c02475d388b23e5faa680eafe6b991d7a9d4 b/game/assets/objects/8f/8f23c02475d388b23e5faa680eafe6b991d7a9d4 new file mode 100644 index 0000000..f8b629f Binary files /dev/null and b/game/assets/objects/8f/8f23c02475d388b23e5faa680eafe6b991d7a9d4 differ diff --git a/game/assets/objects/8f/8f45b5faf6dfae2065846d26612f7552b73640dd b/game/assets/objects/8f/8f45b5faf6dfae2065846d26612f7552b73640dd new file mode 100644 index 0000000..2890baf Binary files /dev/null and b/game/assets/objects/8f/8f45b5faf6dfae2065846d26612f7552b73640dd differ diff --git a/game/assets/objects/8f/8f7ff84e460ca507f654168f1d24e82637517940 b/game/assets/objects/8f/8f7ff84e460ca507f654168f1d24e82637517940 new file mode 100644 index 0000000..f2cb627 Binary files /dev/null and b/game/assets/objects/8f/8f7ff84e460ca507f654168f1d24e82637517940 differ diff --git a/game/assets/objects/90/9024de3f1dd4bc1e8f445c7c5b812f25c7e31bf6 b/game/assets/objects/90/9024de3f1dd4bc1e8f445c7c5b812f25c7e31bf6 new file mode 100644 index 0000000..55b3dde Binary files /dev/null and b/game/assets/objects/90/9024de3f1dd4bc1e8f445c7c5b812f25c7e31bf6 differ diff --git a/game/assets/objects/92/92488929c42221fb3f1dee397a32d2e4de615f3c b/game/assets/objects/92/92488929c42221fb3f1dee397a32d2e4de615f3c new file mode 100644 index 0000000..783adf5 Binary files /dev/null and b/game/assets/objects/92/92488929c42221fb3f1dee397a32d2e4de615f3c differ diff --git a/game/assets/objects/92/9272aef9f27dfcc10b6e3879b7a2a67f8faa1a83 b/game/assets/objects/92/9272aef9f27dfcc10b6e3879b7a2a67f8faa1a83 new file mode 100644 index 0000000..e442e7e Binary files /dev/null and b/game/assets/objects/92/9272aef9f27dfcc10b6e3879b7a2a67f8faa1a83 differ diff --git a/game/assets/objects/93/934b16e82b94d5790175615303594f0ec28da4a0 b/game/assets/objects/93/934b16e82b94d5790175615303594f0ec28da4a0 new file mode 100644 index 0000000..d7a09af Binary files /dev/null and b/game/assets/objects/93/934b16e82b94d5790175615303594f0ec28da4a0 differ diff --git a/game/assets/objects/93/935f1a575322bd0ec53a919fd061321216889104 b/game/assets/objects/93/935f1a575322bd0ec53a919fd061321216889104 new file mode 100644 index 0000000..da3a6cf Binary files /dev/null and b/game/assets/objects/93/935f1a575322bd0ec53a919fd061321216889104 differ diff --git a/game/assets/objects/94/942937fcad0fefd61e019678e3710f3f077757d4 b/game/assets/objects/94/942937fcad0fefd61e019678e3710f3f077757d4 new file mode 100644 index 0000000..e158a0b Binary files /dev/null and b/game/assets/objects/94/942937fcad0fefd61e019678e3710f3f077757d4 differ diff --git a/game/assets/objects/94/944bc8b8e1e135340dc4afc6d3416a01222674a1 b/game/assets/objects/94/944bc8b8e1e135340dc4afc6d3416a01222674a1 new file mode 100644 index 0000000..0632763 Binary files /dev/null and b/game/assets/objects/94/944bc8b8e1e135340dc4afc6d3416a01222674a1 differ diff --git a/game/assets/objects/95/9528b6a76e7bac64ca1145cc682e8a8448cc04e5 b/game/assets/objects/95/9528b6a76e7bac64ca1145cc682e8a8448cc04e5 new file mode 100644 index 0000000..0b91992 Binary files /dev/null and b/game/assets/objects/95/9528b6a76e7bac64ca1145cc682e8a8448cc04e5 differ diff --git a/game/assets/objects/96/9680c9dcd637ddea8e10a0d73705aa155d04a132 b/game/assets/objects/96/9680c9dcd637ddea8e10a0d73705aa155d04a132 new file mode 100644 index 0000000..09f08c2 Binary files /dev/null and b/game/assets/objects/96/9680c9dcd637ddea8e10a0d73705aa155d04a132 differ diff --git a/game/assets/objects/97/97e09d51c82b78ab82fb3a4dbbb8cd701b2d0aeb b/game/assets/objects/97/97e09d51c82b78ab82fb3a4dbbb8cd701b2d0aeb new file mode 100644 index 0000000..fdec114 Binary files /dev/null and b/game/assets/objects/97/97e09d51c82b78ab82fb3a4dbbb8cd701b2d0aeb differ diff --git a/game/assets/objects/98/98102533e6085617a2962157b4f3658f59aea018 b/game/assets/objects/98/98102533e6085617a2962157b4f3658f59aea018 new file mode 100644 index 0000000..b55d49b Binary files /dev/null and b/game/assets/objects/98/98102533e6085617a2962157b4f3658f59aea018 differ diff --git a/game/assets/objects/98/9813c8185197f4a4296649f27a9d738c4a6dfc78 b/game/assets/objects/98/9813c8185197f4a4296649f27a9d738c4a6dfc78 new file mode 100644 index 0000000..55441c9 Binary files /dev/null and b/game/assets/objects/98/9813c8185197f4a4296649f27a9d738c4a6dfc78 differ diff --git a/game/assets/objects/98/9853be18df1a5b2642e33ba05e71bfd5099f9f04 b/game/assets/objects/98/9853be18df1a5b2642e33ba05e71bfd5099f9f04 new file mode 100644 index 0000000..7b0b264 Binary files /dev/null and b/game/assets/objects/98/9853be18df1a5b2642e33ba05e71bfd5099f9f04 differ diff --git a/game/assets/objects/98/989c3b614f736aa77bb2800821ea56936e98ca68 b/game/assets/objects/98/989c3b614f736aa77bb2800821ea56936e98ca68 new file mode 100644 index 0000000..a45f97a Binary files /dev/null and b/game/assets/objects/98/989c3b614f736aa77bb2800821ea56936e98ca68 differ diff --git a/game/assets/objects/98/98a918eb2694defd19726436d4b9dca9e7dd6a65 b/game/assets/objects/98/98a918eb2694defd19726436d4b9dca9e7dd6a65 new file mode 100644 index 0000000..ce138e7 Binary files /dev/null and b/game/assets/objects/98/98a918eb2694defd19726436d4b9dca9e7dd6a65 differ diff --git a/game/assets/objects/99/99cd73dda425ee03836c2274a0fcf331139773dc b/game/assets/objects/99/99cd73dda425ee03836c2274a0fcf331139773dc new file mode 100644 index 0000000..2a773d6 Binary files /dev/null and b/game/assets/objects/99/99cd73dda425ee03836c2274a0fcf331139773dc differ diff --git a/game/assets/objects/9a/9a20be18fed05330f745a54eb8aeba11aac5403b b/game/assets/objects/9a/9a20be18fed05330f745a54eb8aeba11aac5403b new file mode 100644 index 0000000..2c02f55 Binary files /dev/null and b/game/assets/objects/9a/9a20be18fed05330f745a54eb8aeba11aac5403b differ diff --git a/game/assets/objects/9b/9bc2a84d0aa98113fc52609976fae8fc88ea6333 b/game/assets/objects/9b/9bc2a84d0aa98113fc52609976fae8fc88ea6333 new file mode 100644 index 0000000..f9a474a Binary files /dev/null and b/game/assets/objects/9b/9bc2a84d0aa98113fc52609976fae8fc88ea6333 differ diff --git a/game/assets/objects/9c/9c63f2a3681832dc32d206f6830360bfe94b5bfc b/game/assets/objects/9c/9c63f2a3681832dc32d206f6830360bfe94b5bfc new file mode 100644 index 0000000..64b5ef9 Binary files /dev/null and b/game/assets/objects/9c/9c63f2a3681832dc32d206f6830360bfe94b5bfc differ diff --git a/game/assets/objects/9c/9c7aaf49b3096a69a2d6ca62c1067400a2b70814 b/game/assets/objects/9c/9c7aaf49b3096a69a2d6ca62c1067400a2b70814 new file mode 100644 index 0000000..6094b49 Binary files /dev/null and b/game/assets/objects/9c/9c7aaf49b3096a69a2d6ca62c1067400a2b70814 differ diff --git a/game/assets/objects/9c/9c92f697142ae320584bf64c0d54381d59703528 b/game/assets/objects/9c/9c92f697142ae320584bf64c0d54381d59703528 new file mode 100644 index 0000000..333c970 Binary files /dev/null and b/game/assets/objects/9c/9c92f697142ae320584bf64c0d54381d59703528 differ diff --git a/game/assets/objects/9c/9cbed0e40296f68c61090c9b81816061e068a0ec b/game/assets/objects/9c/9cbed0e40296f68c61090c9b81816061e068a0ec new file mode 100644 index 0000000..f1c777c Binary files /dev/null and b/game/assets/objects/9c/9cbed0e40296f68c61090c9b81816061e068a0ec differ diff --git a/game/assets/objects/9d/9d2202fce7908dcc5b5c8758c5cd517d863d4dd3 b/game/assets/objects/9d/9d2202fce7908dcc5b5c8758c5cd517d863d4dd3 new file mode 100644 index 0000000..7083c00 Binary files /dev/null and b/game/assets/objects/9d/9d2202fce7908dcc5b5c8758c5cd517d863d4dd3 differ diff --git a/game/assets/objects/9d/9d485556b89bf776042080774679c37300bc744b b/game/assets/objects/9d/9d485556b89bf776042080774679c37300bc744b new file mode 100644 index 0000000..b4cbc12 Binary files /dev/null and b/game/assets/objects/9d/9d485556b89bf776042080774679c37300bc744b differ diff --git a/game/assets/objects/9d/9d52e43288d7f9e4d14199368a0f30ae3570d05a b/game/assets/objects/9d/9d52e43288d7f9e4d14199368a0f30ae3570d05a new file mode 100644 index 0000000..f18c203 Binary files /dev/null and b/game/assets/objects/9d/9d52e43288d7f9e4d14199368a0f30ae3570d05a differ diff --git a/game/assets/objects/9e/9e22b5aeec31de99410b682cc161a6096a1cd00a b/game/assets/objects/9e/9e22b5aeec31de99410b682cc161a6096a1cd00a new file mode 100644 index 0000000..a414ea0 Binary files /dev/null and b/game/assets/objects/9e/9e22b5aeec31de99410b682cc161a6096a1cd00a differ diff --git a/game/assets/objects/9e/9e59c3650c6c3fc0a475f1b753b2fcfef430bf81 b/game/assets/objects/9e/9e59c3650c6c3fc0a475f1b753b2fcfef430bf81 new file mode 100644 index 0000000..e9cb62d Binary files /dev/null and b/game/assets/objects/9e/9e59c3650c6c3fc0a475f1b753b2fcfef430bf81 differ diff --git a/game/assets/objects/9e/9e5e2369fc354a082c861494cfe8767d327813d4 b/game/assets/objects/9e/9e5e2369fc354a082c861494cfe8767d327813d4 new file mode 100644 index 0000000..82aa26f Binary files /dev/null and b/game/assets/objects/9e/9e5e2369fc354a082c861494cfe8767d327813d4 differ diff --git a/game/assets/objects/9e/9ea8a9e105321891bda18b9007b383b40aa7c076 b/game/assets/objects/9e/9ea8a9e105321891bda18b9007b383b40aa7c076 new file mode 100644 index 0000000..793a5e2 Binary files /dev/null and b/game/assets/objects/9e/9ea8a9e105321891bda18b9007b383b40aa7c076 differ diff --git a/game/assets/objects/9e/9ead5c928f9122e3c2f5fc4f6ce7fb4054a2b578 b/game/assets/objects/9e/9ead5c928f9122e3c2f5fc4f6ce7fb4054a2b578 new file mode 100644 index 0000000..abd3208 Binary files /dev/null and b/game/assets/objects/9e/9ead5c928f9122e3c2f5fc4f6ce7fb4054a2b578 differ diff --git a/game/assets/objects/9f/9f1708a6409d04370ec12d0add015b11abbd5371 b/game/assets/objects/9f/9f1708a6409d04370ec12d0add015b11abbd5371 new file mode 100644 index 0000000..5265e81 Binary files /dev/null and b/game/assets/objects/9f/9f1708a6409d04370ec12d0add015b11abbd5371 differ diff --git a/game/assets/objects/9f/9f2c4bab5ed55f1714fffa223985c81babc8f6c0 b/game/assets/objects/9f/9f2c4bab5ed55f1714fffa223985c81babc8f6c0 new file mode 100644 index 0000000..0aa6afc Binary files /dev/null and b/game/assets/objects/9f/9f2c4bab5ed55f1714fffa223985c81babc8f6c0 differ diff --git a/game/assets/objects/9f/9fd6d2c633d276b952f2ff2aaa1fa7e5fb5efd2a b/game/assets/objects/9f/9fd6d2c633d276b952f2ff2aaa1fa7e5fb5efd2a new file mode 100644 index 0000000..5a3be54 Binary files /dev/null and b/game/assets/objects/9f/9fd6d2c633d276b952f2ff2aaa1fa7e5fb5efd2a differ diff --git a/game/assets/objects/a0/a01e4caf7aaac61502a4a5e4f277b0de4795b802 b/game/assets/objects/a0/a01e4caf7aaac61502a4a5e4f277b0de4795b802 new file mode 100644 index 0000000..9a1fe51 Binary files /dev/null and b/game/assets/objects/a0/a01e4caf7aaac61502a4a5e4f277b0de4795b802 differ diff --git a/game/assets/objects/a0/a0d1fbff7e938e92c10c1576339dda668f40e111 b/game/assets/objects/a0/a0d1fbff7e938e92c10c1576339dda668f40e111 new file mode 100644 index 0000000..849071b Binary files /dev/null and b/game/assets/objects/a0/a0d1fbff7e938e92c10c1576339dda668f40e111 differ diff --git a/game/assets/objects/a0/a0e62d86e5899405df4e796fe648e091d828691d b/game/assets/objects/a0/a0e62d86e5899405df4e796fe648e091d828691d new file mode 100644 index 0000000..57addd3 Binary files /dev/null and b/game/assets/objects/a0/a0e62d86e5899405df4e796fe648e091d828691d differ diff --git a/game/assets/objects/a1/a116e396d95a0ee245000dd4cdcc333d38ea9e3b b/game/assets/objects/a1/a116e396d95a0ee245000dd4cdcc333d38ea9e3b new file mode 100644 index 0000000..99e7079 Binary files /dev/null and b/game/assets/objects/a1/a116e396d95a0ee245000dd4cdcc333d38ea9e3b differ diff --git a/game/assets/objects/a1/a11ac56ec61c17e99f4ee33d8712404edf442720 b/game/assets/objects/a1/a11ac56ec61c17e99f4ee33d8712404edf442720 new file mode 100644 index 0000000..eb926fc Binary files /dev/null and b/game/assets/objects/a1/a11ac56ec61c17e99f4ee33d8712404edf442720 differ diff --git a/game/assets/objects/a1/a12f98ac001492ff596b5da9e6297b3be98f9149 b/game/assets/objects/a1/a12f98ac001492ff596b5da9e6297b3be98f9149 new file mode 100644 index 0000000..5abba30 Binary files /dev/null and b/game/assets/objects/a1/a12f98ac001492ff596b5da9e6297b3be98f9149 differ diff --git a/game/assets/objects/a2/a20cbf2ddce541eaed520d7ec55665fe97428be6 b/game/assets/objects/a2/a20cbf2ddce541eaed520d7ec55665fe97428be6 new file mode 100644 index 0000000..2233dbf Binary files /dev/null and b/game/assets/objects/a2/a20cbf2ddce541eaed520d7ec55665fe97428be6 differ diff --git a/game/assets/objects/a2/a2cfbea288280419ec0c8fb75d8ee5395536ac02 b/game/assets/objects/a2/a2cfbea288280419ec0c8fb75d8ee5395536ac02 new file mode 100644 index 0000000..0fa041d Binary files /dev/null and b/game/assets/objects/a2/a2cfbea288280419ec0c8fb75d8ee5395536ac02 differ diff --git a/game/assets/objects/a2/a2dbb90f23b0babe7c569ceca28db49d0c112714 b/game/assets/objects/a2/a2dbb90f23b0babe7c569ceca28db49d0c112714 new file mode 100644 index 0000000..2fc372f Binary files /dev/null and b/game/assets/objects/a2/a2dbb90f23b0babe7c569ceca28db49d0c112714 differ diff --git a/game/assets/objects/a3/a323a968296882e15c743ccdc8cb8057557ae712 b/game/assets/objects/a3/a323a968296882e15c743ccdc8cb8057557ae712 new file mode 100644 index 0000000..027c32d Binary files /dev/null and b/game/assets/objects/a3/a323a968296882e15c743ccdc8cb8057557ae712 differ diff --git a/game/assets/objects/a3/a342f566600caf73464323b20b7770b5b9b7893a b/game/assets/objects/a3/a342f566600caf73464323b20b7770b5b9b7893a new file mode 100644 index 0000000..02e1b66 Binary files /dev/null and b/game/assets/objects/a3/a342f566600caf73464323b20b7770b5b9b7893a differ diff --git a/game/assets/objects/a3/a3ffeaa0a75b8d2bdc949c181a6f8db78f8976ca b/game/assets/objects/a3/a3ffeaa0a75b8d2bdc949c181a6f8db78f8976ca new file mode 100644 index 0000000..dbc3b4b Binary files /dev/null and b/game/assets/objects/a3/a3ffeaa0a75b8d2bdc949c181a6f8db78f8976ca differ diff --git a/game/assets/objects/a4/a474236fb0c75bd65a6010e87dbc000d345fc185 b/game/assets/objects/a4/a474236fb0c75bd65a6010e87dbc000d345fc185 new file mode 100644 index 0000000..edfbd32 Binary files /dev/null and b/game/assets/objects/a4/a474236fb0c75bd65a6010e87dbc000d345fc185 differ diff --git a/game/assets/objects/a4/a47adece748059294c5f563c0fcac02fa0e4bab4 b/game/assets/objects/a4/a47adece748059294c5f563c0fcac02fa0e4bab4 new file mode 100644 index 0000000..3e3eaee Binary files /dev/null and b/game/assets/objects/a4/a47adece748059294c5f563c0fcac02fa0e4bab4 differ diff --git a/game/assets/objects/a4/a485082ed0820eeeb9df13f84f26b14744ceeb2a b/game/assets/objects/a4/a485082ed0820eeeb9df13f84f26b14744ceeb2a new file mode 100644 index 0000000..3bf28d0 Binary files /dev/null and b/game/assets/objects/a4/a485082ed0820eeeb9df13f84f26b14744ceeb2a differ diff --git a/game/assets/objects/a4/a4bc069321a96236fde04a3820664cc23b2ea619 b/game/assets/objects/a4/a4bc069321a96236fde04a3820664cc23b2ea619 new file mode 100644 index 0000000..b739c4d Binary files /dev/null and b/game/assets/objects/a4/a4bc069321a96236fde04a3820664cc23b2ea619 differ diff --git a/game/assets/objects/a4/a4cf4ebe4c475cd6a4852d6b4228a4b64cf5cb00 b/game/assets/objects/a4/a4cf4ebe4c475cd6a4852d6b4228a4b64cf5cb00 new file mode 100644 index 0000000..3c4409f Binary files /dev/null and b/game/assets/objects/a4/a4cf4ebe4c475cd6a4852d6b4228a4b64cf5cb00 differ diff --git a/game/assets/objects/a5/a533e7ae975e62592de868e0d0572778614bd587 b/game/assets/objects/a5/a533e7ae975e62592de868e0d0572778614bd587 new file mode 100644 index 0000000..e14808a Binary files /dev/null and b/game/assets/objects/a5/a533e7ae975e62592de868e0d0572778614bd587 differ diff --git a/game/assets/objects/a5/a5b3f3cdda4d6e13629ccd0e2a38e1f06baa491a b/game/assets/objects/a5/a5b3f3cdda4d6e13629ccd0e2a38e1f06baa491a new file mode 100644 index 0000000..4faf16a Binary files /dev/null and b/game/assets/objects/a5/a5b3f3cdda4d6e13629ccd0e2a38e1f06baa491a differ diff --git a/game/assets/objects/a6/a63fd7965328425a0a8111640de19428d841933e b/game/assets/objects/a6/a63fd7965328425a0a8111640de19428d841933e new file mode 100644 index 0000000..37a27ae Binary files /dev/null and b/game/assets/objects/a6/a63fd7965328425a0a8111640de19428d841933e differ diff --git a/game/assets/objects/a6/a69a66bfda52a42ea8cf712eb1caa8830046c14f b/game/assets/objects/a6/a69a66bfda52a42ea8cf712eb1caa8830046c14f new file mode 100644 index 0000000..047359f Binary files /dev/null and b/game/assets/objects/a6/a69a66bfda52a42ea8cf712eb1caa8830046c14f differ diff --git a/game/assets/objects/a7/a720e85e35be0dc3186d01cc599121b87e7ee9f7 b/game/assets/objects/a7/a720e85e35be0dc3186d01cc599121b87e7ee9f7 new file mode 100644 index 0000000..4fe0b33 Binary files /dev/null and b/game/assets/objects/a7/a720e85e35be0dc3186d01cc599121b87e7ee9f7 differ diff --git a/game/assets/objects/a7/a795e9a7721927282befc085e4e397a6379e3004 b/game/assets/objects/a7/a795e9a7721927282befc085e4e397a6379e3004 new file mode 100644 index 0000000..82e9ef3 Binary files /dev/null and b/game/assets/objects/a7/a795e9a7721927282befc085e4e397a6379e3004 differ diff --git a/game/assets/objects/a8/a88e0436e38512171a3ef819249c3d1a2650540f b/game/assets/objects/a8/a88e0436e38512171a3ef819249c3d1a2650540f new file mode 100644 index 0000000..408598c Binary files /dev/null and b/game/assets/objects/a8/a88e0436e38512171a3ef819249c3d1a2650540f differ diff --git a/game/assets/objects/a8/a89bdd809baa83cacd329f0219bca1f612ccda5a b/game/assets/objects/a8/a89bdd809baa83cacd329f0219bca1f612ccda5a new file mode 100644 index 0000000..3bbb15f Binary files /dev/null and b/game/assets/objects/a8/a89bdd809baa83cacd329f0219bca1f612ccda5a differ diff --git a/game/assets/objects/a8/a8eb0b1ce4abb53334ab75be82dc465135c4a27a b/game/assets/objects/a8/a8eb0b1ce4abb53334ab75be82dc465135c4a27a new file mode 100644 index 0000000..6b9abba Binary files /dev/null and b/game/assets/objects/a8/a8eb0b1ce4abb53334ab75be82dc465135c4a27a differ diff --git a/game/assets/objects/a9/a92ba2b8f6abc41aa8d679ad808a81d0aafa04b2 b/game/assets/objects/a9/a92ba2b8f6abc41aa8d679ad808a81d0aafa04b2 new file mode 100644 index 0000000..199f206 Binary files /dev/null and b/game/assets/objects/a9/a92ba2b8f6abc41aa8d679ad808a81d0aafa04b2 differ diff --git a/game/assets/objects/a9/a94a69e56568f5789cab05382cfd81f601189fd1 b/game/assets/objects/a9/a94a69e56568f5789cab05382cfd81f601189fd1 new file mode 100644 index 0000000..c14c9ee Binary files /dev/null and b/game/assets/objects/a9/a94a69e56568f5789cab05382cfd81f601189fd1 differ diff --git a/game/assets/objects/a9/a96c409e8d54d95520cf6d2caa583b5667e2dc63 b/game/assets/objects/a9/a96c409e8d54d95520cf6d2caa583b5667e2dc63 new file mode 100644 index 0000000..0698b85 Binary files /dev/null and b/game/assets/objects/a9/a96c409e8d54d95520cf6d2caa583b5667e2dc63 differ diff --git a/game/assets/objects/a9/a99bf88163bcb576e31e6e2275145afba6d1b4c7 b/game/assets/objects/a9/a99bf88163bcb576e31e6e2275145afba6d1b4c7 new file mode 100644 index 0000000..8516b37 Binary files /dev/null and b/game/assets/objects/a9/a99bf88163bcb576e31e6e2275145afba6d1b4c7 differ diff --git a/game/assets/objects/aa/aaa8f1705c873ebc05da460657c8b83fa01ffd57 b/game/assets/objects/aa/aaa8f1705c873ebc05da460657c8b83fa01ffd57 new file mode 100644 index 0000000..8451b0a Binary files /dev/null and b/game/assets/objects/aa/aaa8f1705c873ebc05da460657c8b83fa01ffd57 differ diff --git a/game/assets/objects/ab/ab07279288fa49215bada5c17627e6a54ad0437c b/game/assets/objects/ab/ab07279288fa49215bada5c17627e6a54ad0437c new file mode 100644 index 0000000..31d339e Binary files /dev/null and b/game/assets/objects/ab/ab07279288fa49215bada5c17627e6a54ad0437c differ diff --git a/game/assets/objects/ab/ab5a32b70ef1e7aafc550b20afdb7dc8c0d5d901 b/game/assets/objects/ab/ab5a32b70ef1e7aafc550b20afdb7dc8c0d5d901 new file mode 100644 index 0000000..b609080 Binary files /dev/null and b/game/assets/objects/ab/ab5a32b70ef1e7aafc550b20afdb7dc8c0d5d901 differ diff --git a/game/assets/objects/ab/ab615a912fb8ea06648836e0ec1cbeeefe117da6 b/game/assets/objects/ab/ab615a912fb8ea06648836e0ec1cbeeefe117da6 new file mode 100644 index 0000000..bf67406 Binary files /dev/null and b/game/assets/objects/ab/ab615a912fb8ea06648836e0ec1cbeeefe117da6 differ diff --git a/game/assets/objects/ac/ac7a7c8d106e26abc775b1b46150c083825d8ddc b/game/assets/objects/ac/ac7a7c8d106e26abc775b1b46150c083825d8ddc new file mode 100644 index 0000000..fcb540b Binary files /dev/null and b/game/assets/objects/ac/ac7a7c8d106e26abc775b1b46150c083825d8ddc differ diff --git a/game/assets/objects/ac/acffab0bafe2c82ffc8723880aab5ec1682d4329 b/game/assets/objects/ac/acffab0bafe2c82ffc8723880aab5ec1682d4329 new file mode 100644 index 0000000..f997781 Binary files /dev/null and b/game/assets/objects/ac/acffab0bafe2c82ffc8723880aab5ec1682d4329 differ diff --git a/game/assets/objects/ad/ad7d770b7fff3b64121f75bd60cecfc4866d1cd6 b/game/assets/objects/ad/ad7d770b7fff3b64121f75bd60cecfc4866d1cd6 new file mode 100644 index 0000000..2577f40 Binary files /dev/null and b/game/assets/objects/ad/ad7d770b7fff3b64121f75bd60cecfc4866d1cd6 differ diff --git a/game/assets/objects/ae/ae27c6817985a9acb0a0fdefab89ff5d82dbe009 b/game/assets/objects/ae/ae27c6817985a9acb0a0fdefab89ff5d82dbe009 new file mode 100644 index 0000000..d2b606f Binary files /dev/null and b/game/assets/objects/ae/ae27c6817985a9acb0a0fdefab89ff5d82dbe009 differ diff --git a/game/assets/objects/ae/aedeb53dd3315f964ff4d10d0003e4c5f41d1bb0 b/game/assets/objects/ae/aedeb53dd3315f964ff4d10d0003e4c5f41d1bb0 new file mode 100644 index 0000000..9d4a9d6 Binary files /dev/null and b/game/assets/objects/ae/aedeb53dd3315f964ff4d10d0003e4c5f41d1bb0 differ diff --git a/game/assets/objects/af/afb01196e2179e3b15b48f3373cea4c155d56b84 b/game/assets/objects/af/afb01196e2179e3b15b48f3373cea4c155d56b84 new file mode 100644 index 0000000..f6d83f3 Binary files /dev/null and b/game/assets/objects/af/afb01196e2179e3b15b48f3373cea4c155d56b84 differ diff --git a/game/assets/objects/b1/b1715242916d56140486c612056ea4d6dd5a4404 b/game/assets/objects/b1/b1715242916d56140486c612056ea4d6dd5a4404 new file mode 100644 index 0000000..6501276 Binary files /dev/null and b/game/assets/objects/b1/b1715242916d56140486c612056ea4d6dd5a4404 differ diff --git a/game/assets/objects/b2/b210a3c371441b77fe873133b2cb7b63e367b2f3 b/game/assets/objects/b2/b210a3c371441b77fe873133b2cb7b63e367b2f3 new file mode 100644 index 0000000..2944f4c Binary files /dev/null and b/game/assets/objects/b2/b210a3c371441b77fe873133b2cb7b63e367b2f3 differ diff --git a/game/assets/objects/b2/b245effde68d07ffe32a033b61e96f1ed7e28783 b/game/assets/objects/b2/b245effde68d07ffe32a033b61e96f1ed7e28783 new file mode 100644 index 0000000..ef5569f Binary files /dev/null and b/game/assets/objects/b2/b245effde68d07ffe32a033b61e96f1ed7e28783 differ diff --git a/game/assets/objects/b3/b3f91f243eceaa25cff7488ec2dac732e22cfec3 b/game/assets/objects/b3/b3f91f243eceaa25cff7488ec2dac732e22cfec3 new file mode 100644 index 0000000..43522e8 Binary files /dev/null and b/game/assets/objects/b3/b3f91f243eceaa25cff7488ec2dac732e22cfec3 differ diff --git a/game/assets/objects/b4/b463fa47816fe9a5dfe508093150e647403e4db6 b/game/assets/objects/b4/b463fa47816fe9a5dfe508093150e647403e4db6 new file mode 100644 index 0000000..8238e75 Binary files /dev/null and b/game/assets/objects/b4/b463fa47816fe9a5dfe508093150e647403e4db6 differ diff --git a/game/assets/objects/b5/b5bc9775243437d87317ab3a66ec8a4d5b96c83d b/game/assets/objects/b5/b5bc9775243437d87317ab3a66ec8a4d5b96c83d new file mode 100644 index 0000000..6c57de1 Binary files /dev/null and b/game/assets/objects/b5/b5bc9775243437d87317ab3a66ec8a4d5b96c83d differ diff --git a/game/assets/objects/b5/b5eca1979e69271b2065ac67ba2c37b5afac0f98 b/game/assets/objects/b5/b5eca1979e69271b2065ac67ba2c37b5afac0f98 new file mode 100644 index 0000000..c1509d4 Binary files /dev/null and b/game/assets/objects/b5/b5eca1979e69271b2065ac67ba2c37b5afac0f98 differ diff --git a/game/assets/objects/b5/b5f9075a8bf6977e7dfd3d316a673eaaa5834a99 b/game/assets/objects/b5/b5f9075a8bf6977e7dfd3d316a673eaaa5834a99 new file mode 100644 index 0000000..697b2b9 Binary files /dev/null and b/game/assets/objects/b5/b5f9075a8bf6977e7dfd3d316a673eaaa5834a99 differ diff --git a/game/assets/objects/b6/b6a62224be809aa0c0747bee94499f0ee51ca2b6 b/game/assets/objects/b6/b6a62224be809aa0c0747bee94499f0ee51ca2b6 new file mode 100644 index 0000000..b9f08bd Binary files /dev/null and b/game/assets/objects/b6/b6a62224be809aa0c0747bee94499f0ee51ca2b6 differ diff --git a/game/assets/objects/b8/b88bd8618c05232a7287799ea9246ae12f5da9d5 b/game/assets/objects/b8/b88bd8618c05232a7287799ea9246ae12f5da9d5 new file mode 100644 index 0000000..8ec908d Binary files /dev/null and b/game/assets/objects/b8/b88bd8618c05232a7287799ea9246ae12f5da9d5 differ diff --git a/game/assets/objects/b8/b88cafe403394cdcd4de0e3aeb7b76f24170c6fe b/game/assets/objects/b8/b88cafe403394cdcd4de0e3aeb7b76f24170c6fe new file mode 100644 index 0000000..f677619 Binary files /dev/null and b/game/assets/objects/b8/b88cafe403394cdcd4de0e3aeb7b76f24170c6fe differ diff --git a/game/assets/objects/ba/ba35053358ede7c3bf33a4c344d66680f09008c9 b/game/assets/objects/ba/ba35053358ede7c3bf33a4c344d66680f09008c9 new file mode 100644 index 0000000..ae51f28 Binary files /dev/null and b/game/assets/objects/ba/ba35053358ede7c3bf33a4c344d66680f09008c9 differ diff --git a/game/assets/objects/ba/ba58e1b6c8cc814a210db268d3e59a06b7ac62be b/game/assets/objects/ba/ba58e1b6c8cc814a210db268d3e59a06b7ac62be new file mode 100644 index 0000000..598c30a Binary files /dev/null and b/game/assets/objects/ba/ba58e1b6c8cc814a210db268d3e59a06b7ac62be differ diff --git a/game/assets/objects/bb/bb92fd6971430a515f508a6734392511385826e1 b/game/assets/objects/bb/bb92fd6971430a515f508a6734392511385826e1 new file mode 100644 index 0000000..474ce5e Binary files /dev/null and b/game/assets/objects/bb/bb92fd6971430a515f508a6734392511385826e1 differ diff --git a/game/assets/objects/bc/bc28801224a0aa77fdc93bb7c6c94beacdf77331 b/game/assets/objects/bc/bc28801224a0aa77fdc93bb7c6c94beacdf77331 new file mode 100644 index 0000000..b6da5a5 Binary files /dev/null and b/game/assets/objects/bc/bc28801224a0aa77fdc93bb7c6c94beacdf77331 differ diff --git a/game/assets/objects/bc/bc2f6a5a1b6646eac1681b7414b098089aedf3c6 b/game/assets/objects/bc/bc2f6a5a1b6646eac1681b7414b098089aedf3c6 new file mode 100644 index 0000000..0af6c6b Binary files /dev/null and b/game/assets/objects/bc/bc2f6a5a1b6646eac1681b7414b098089aedf3c6 differ diff --git a/game/assets/objects/bc/bc4c2e76d3b5a0e6f9d5837fe82ed26e808aa918 b/game/assets/objects/bc/bc4c2e76d3b5a0e6f9d5837fe82ed26e808aa918 new file mode 100644 index 0000000..8748bf8 Binary files /dev/null and b/game/assets/objects/bc/bc4c2e76d3b5a0e6f9d5837fe82ed26e808aa918 differ diff --git a/game/assets/objects/bc/bc85d96a99e84a234cbe23841f87e84e71198be3 b/game/assets/objects/bc/bc85d96a99e84a234cbe23841f87e84e71198be3 new file mode 100644 index 0000000..122ff24 Binary files /dev/null and b/game/assets/objects/bc/bc85d96a99e84a234cbe23841f87e84e71198be3 differ diff --git a/game/assets/objects/bc/bcadae10578ff321236f5670934f0b287eb80fbc b/game/assets/objects/bc/bcadae10578ff321236f5670934f0b287eb80fbc new file mode 100644 index 0000000..05deabf Binary files /dev/null and b/game/assets/objects/bc/bcadae10578ff321236f5670934f0b287eb80fbc differ diff --git a/game/assets/objects/bc/bcc73584d83225383aaa6affce905392c96afe86 b/game/assets/objects/bc/bcc73584d83225383aaa6affce905392c96afe86 new file mode 100644 index 0000000..81f0bb1 Binary files /dev/null and b/game/assets/objects/bc/bcc73584d83225383aaa6affce905392c96afe86 differ diff --git a/game/assets/objects/bd/bd1750c016f6bab40934eff0b0fb64c41c86e44b b/game/assets/objects/bd/bd1750c016f6bab40934eff0b0fb64c41c86e44b new file mode 100644 index 0000000..9abbb96 Binary files /dev/null and b/game/assets/objects/bd/bd1750c016f6bab40934eff0b0fb64c41c86e44b differ diff --git a/game/assets/objects/bd/bdc648e04933df8ddcccc84b375d6556776d4331 b/game/assets/objects/bd/bdc648e04933df8ddcccc84b375d6556776d4331 new file mode 100644 index 0000000..5ad3f57 Binary files /dev/null and b/game/assets/objects/bd/bdc648e04933df8ddcccc84b375d6556776d4331 differ diff --git a/game/assets/objects/be/be0be76687eab152334a35fdb76e6ab4455bfaef b/game/assets/objects/be/be0be76687eab152334a35fdb76e6ab4455bfaef new file mode 100644 index 0000000..5e487a8 Binary files /dev/null and b/game/assets/objects/be/be0be76687eab152334a35fdb76e6ab4455bfaef differ diff --git a/game/assets/objects/be/bea1c181fce1150f3aaea8f14a773394ccc253d2 b/game/assets/objects/be/bea1c181fce1150f3aaea8f14a773394ccc253d2 new file mode 100644 index 0000000..9a78b09 Binary files /dev/null and b/game/assets/objects/be/bea1c181fce1150f3aaea8f14a773394ccc253d2 differ diff --git a/game/assets/objects/bf/bf5086623d5c6735271074b263116fb914ed79b5 b/game/assets/objects/bf/bf5086623d5c6735271074b263116fb914ed79b5 new file mode 100644 index 0000000..80e1918 Binary files /dev/null and b/game/assets/objects/bf/bf5086623d5c6735271074b263116fb914ed79b5 differ diff --git a/game/assets/objects/bf/bf7fadaf64945f6b31c803d086ac6a652aabef9b b/game/assets/objects/bf/bf7fadaf64945f6b31c803d086ac6a652aabef9b new file mode 100644 index 0000000..e9359dd Binary files /dev/null and b/game/assets/objects/bf/bf7fadaf64945f6b31c803d086ac6a652aabef9b differ diff --git a/game/assets/objects/bf/bfb0e14bf130de4ecda75d8e793260e8bbaca35b b/game/assets/objects/bf/bfb0e14bf130de4ecda75d8e793260e8bbaca35b new file mode 100644 index 0000000..a465e60 Binary files /dev/null and b/game/assets/objects/bf/bfb0e14bf130de4ecda75d8e793260e8bbaca35b differ diff --git a/game/assets/objects/c1/c109b985a7e6d5d3828c92e00aefa49deca0eb8c b/game/assets/objects/c1/c109b985a7e6d5d3828c92e00aefa49deca0eb8c new file mode 100644 index 0000000..aa0fea8 Binary files /dev/null and b/game/assets/objects/c1/c109b985a7e6d5d3828c92e00aefa49deca0eb8c differ diff --git a/game/assets/objects/c1/c18fb5eacf0fdb33c05eb806bc41332cccee43d8 b/game/assets/objects/c1/c18fb5eacf0fdb33c05eb806bc41332cccee43d8 new file mode 100644 index 0000000..768d296 Binary files /dev/null and b/game/assets/objects/c1/c18fb5eacf0fdb33c05eb806bc41332cccee43d8 differ diff --git a/game/assets/objects/c2/c289aa46fcbcfaf21c8080d57953fd45a4939294 b/game/assets/objects/c2/c289aa46fcbcfaf21c8080d57953fd45a4939294 new file mode 100644 index 0000000..ba22c18 Binary files /dev/null and b/game/assets/objects/c2/c289aa46fcbcfaf21c8080d57953fd45a4939294 differ diff --git a/game/assets/objects/c2/c2e4001d9ae8fc1f066a914170faad4c45a84e1e b/game/assets/objects/c2/c2e4001d9ae8fc1f066a914170faad4c45a84e1e new file mode 100644 index 0000000..5176147 Binary files /dev/null and b/game/assets/objects/c2/c2e4001d9ae8fc1f066a914170faad4c45a84e1e differ diff --git a/game/assets/objects/c3/c343dc04df647fb25bec35ee23dc973e7374dcf9 b/game/assets/objects/c3/c343dc04df647fb25bec35ee23dc973e7374dcf9 new file mode 100644 index 0000000..67f6510 Binary files /dev/null and b/game/assets/objects/c3/c343dc04df647fb25bec35ee23dc973e7374dcf9 differ diff --git a/game/assets/objects/c3/c3b3797d04cb9640e1d3a72d5e96edb410388fa3 b/game/assets/objects/c3/c3b3797d04cb9640e1d3a72d5e96edb410388fa3 new file mode 100644 index 0000000..5133141 Binary files /dev/null and b/game/assets/objects/c3/c3b3797d04cb9640e1d3a72d5e96edb410388fa3 differ diff --git a/game/assets/objects/c3/c3c175d70372d8448c070d0716a8d88beec8b8b7 b/game/assets/objects/c3/c3c175d70372d8448c070d0716a8d88beec8b8b7 new file mode 100644 index 0000000..16207a2 Binary files /dev/null and b/game/assets/objects/c3/c3c175d70372d8448c070d0716a8d88beec8b8b7 differ diff --git a/game/assets/objects/c3/c3cd0db760c980287b26ef9c0894f66c4250724e b/game/assets/objects/c3/c3cd0db760c980287b26ef9c0894f66c4250724e new file mode 100644 index 0000000..0ece9e9 Binary files /dev/null and b/game/assets/objects/c3/c3cd0db760c980287b26ef9c0894f66c4250724e differ diff --git a/game/assets/objects/c4/c46c7d2a84749bfcbcf576aea0d66fd3deccba31 b/game/assets/objects/c4/c46c7d2a84749bfcbcf576aea0d66fd3deccba31 new file mode 100644 index 0000000..6a84ac5 Binary files /dev/null and b/game/assets/objects/c4/c46c7d2a84749bfcbcf576aea0d66fd3deccba31 differ diff --git a/game/assets/objects/c4/c4810a3de80cb57f9cdf8deaacfd36cb619cdf0b b/game/assets/objects/c4/c4810a3de80cb57f9cdf8deaacfd36cb619cdf0b new file mode 100644 index 0000000..96ba689 Binary files /dev/null and b/game/assets/objects/c4/c4810a3de80cb57f9cdf8deaacfd36cb619cdf0b differ diff --git a/game/assets/objects/c4/c4b5265bbafbe058347058a257abe33a0afb5ab7 b/game/assets/objects/c4/c4b5265bbafbe058347058a257abe33a0afb5ab7 new file mode 100644 index 0000000..995ea33 Binary files /dev/null and b/game/assets/objects/c4/c4b5265bbafbe058347058a257abe33a0afb5ab7 differ diff --git a/game/assets/objects/c6/c649e60ea9a99c97501a50d2dc4e579343e91ea8 b/game/assets/objects/c6/c649e60ea9a99c97501a50d2dc4e579343e91ea8 new file mode 100644 index 0000000..4beea2e Binary files /dev/null and b/game/assets/objects/c6/c649e60ea9a99c97501a50d2dc4e579343e91ea8 differ diff --git a/game/assets/objects/c7/c73dcedde5031fcf242b08b3405f63098cd70641 b/game/assets/objects/c7/c73dcedde5031fcf242b08b3405f63098cd70641 new file mode 100644 index 0000000..5af4595 Binary files /dev/null and b/game/assets/objects/c7/c73dcedde5031fcf242b08b3405f63098cd70641 differ diff --git a/game/assets/objects/c7/c74368d2b978f570b4e7ce9645fd84b07f8f145c b/game/assets/objects/c7/c74368d2b978f570b4e7ce9645fd84b07f8f145c new file mode 100644 index 0000000..a296c87 Binary files /dev/null and b/game/assets/objects/c7/c74368d2b978f570b4e7ce9645fd84b07f8f145c differ diff --git a/game/assets/objects/c7/c75589cc0087069f387de127dd1499580498738e b/game/assets/objects/c7/c75589cc0087069f387de127dd1499580498738e new file mode 100644 index 0000000..c94fc1b Binary files /dev/null and b/game/assets/objects/c7/c75589cc0087069f387de127dd1499580498738e differ diff --git a/game/assets/objects/c7/c76dea473821e2ae9a1f006a4eddfdd0703eecdf b/game/assets/objects/c7/c76dea473821e2ae9a1f006a4eddfdd0703eecdf new file mode 100644 index 0000000..3ea06c5 Binary files /dev/null and b/game/assets/objects/c7/c76dea473821e2ae9a1f006a4eddfdd0703eecdf differ diff --git a/game/assets/objects/c7/c7b1005d4926f6a2e2387a41ab1fb48a72f18e98 b/game/assets/objects/c7/c7b1005d4926f6a2e2387a41ab1fb48a72f18e98 new file mode 100644 index 0000000..8421e6a Binary files /dev/null and b/game/assets/objects/c7/c7b1005d4926f6a2e2387a41ab1fb48a72f18e98 differ diff --git a/game/assets/objects/c7/c7c9e86e3ccc55ea2312a498aef861def771d8cf b/game/assets/objects/c7/c7c9e86e3ccc55ea2312a498aef861def771d8cf new file mode 100644 index 0000000..74707c0 Binary files /dev/null and b/game/assets/objects/c7/c7c9e86e3ccc55ea2312a498aef861def771d8cf differ diff --git a/game/assets/objects/c7/c7e424eb00712614a183adf5d17b949175ff00df b/game/assets/objects/c7/c7e424eb00712614a183adf5d17b949175ff00df new file mode 100644 index 0000000..0b75a43 Binary files /dev/null and b/game/assets/objects/c7/c7e424eb00712614a183adf5d17b949175ff00df differ diff --git a/game/assets/objects/c8/c8053e3b083b08840276de9a728202551302f416 b/game/assets/objects/c8/c8053e3b083b08840276de9a728202551302f416 new file mode 100644 index 0000000..091bc29 Binary files /dev/null and b/game/assets/objects/c8/c8053e3b083b08840276de9a728202551302f416 differ diff --git a/game/assets/objects/c8/c84b0cf222e7dcbedde8eb9deb98835032f4d402 b/game/assets/objects/c8/c84b0cf222e7dcbedde8eb9deb98835032f4d402 new file mode 100644 index 0000000..bab9dad Binary files /dev/null and b/game/assets/objects/c8/c84b0cf222e7dcbedde8eb9deb98835032f4d402 differ diff --git a/game/assets/objects/c8/c8cd465468a0fd41a1d5cc24cb499862b5ade2cb b/game/assets/objects/c8/c8cd465468a0fd41a1d5cc24cb499862b5ade2cb new file mode 100644 index 0000000..eb97f7f Binary files /dev/null and b/game/assets/objects/c8/c8cd465468a0fd41a1d5cc24cb499862b5ade2cb differ diff --git a/game/assets/objects/c8/c8dd60f7e7087da52a431c1dbc0f397317b374fb b/game/assets/objects/c8/c8dd60f7e7087da52a431c1dbc0f397317b374fb new file mode 100644 index 0000000..2657084 Binary files /dev/null and b/game/assets/objects/c8/c8dd60f7e7087da52a431c1dbc0f397317b374fb differ diff --git a/game/assets/objects/c9/c906c18d26550ae15c75e23f2c5066e4fc678c89 b/game/assets/objects/c9/c906c18d26550ae15c75e23f2c5066e4fc678c89 new file mode 100644 index 0000000..3433521 Binary files /dev/null and b/game/assets/objects/c9/c906c18d26550ae15c75e23f2c5066e4fc678c89 differ diff --git a/game/assets/objects/c9/c9ac72409cbe6093e84d72a2a5c719d9e4a0e6b2 b/game/assets/objects/c9/c9ac72409cbe6093e84d72a2a5c719d9e4a0e6b2 new file mode 100644 index 0000000..2d333f3 Binary files /dev/null and b/game/assets/objects/c9/c9ac72409cbe6093e84d72a2a5c719d9e4a0e6b2 differ diff --git a/game/assets/objects/c9/c9f7fa36ae48eca0a1f6ce024fde5d3472d30b4d b/game/assets/objects/c9/c9f7fa36ae48eca0a1f6ce024fde5d3472d30b4d new file mode 100644 index 0000000..6d37984 Binary files /dev/null and b/game/assets/objects/c9/c9f7fa36ae48eca0a1f6ce024fde5d3472d30b4d differ diff --git a/game/assets/objects/ca/ca1b7de8bb9ce92f2f044c6a98c99d7bf92b7184 b/game/assets/objects/ca/ca1b7de8bb9ce92f2f044c6a98c99d7bf92b7184 new file mode 100644 index 0000000..914e349 Binary files /dev/null and b/game/assets/objects/ca/ca1b7de8bb9ce92f2f044c6a98c99d7bf92b7184 differ diff --git a/game/assets/objects/ca/cadbc5c34979baab1a93f5cf68a50f9bd44ef5a8 b/game/assets/objects/ca/cadbc5c34979baab1a93f5cf68a50f9bd44ef5a8 new file mode 100644 index 0000000..a398129 Binary files /dev/null and b/game/assets/objects/ca/cadbc5c34979baab1a93f5cf68a50f9bd44ef5a8 differ diff --git a/game/assets/objects/cb/cb017131516de9359cb81fb991f5b3694044f8db b/game/assets/objects/cb/cb017131516de9359cb81fb991f5b3694044f8db new file mode 100644 index 0000000..b07587f Binary files /dev/null and b/game/assets/objects/cb/cb017131516de9359cb81fb991f5b3694044f8db differ diff --git a/game/assets/objects/cb/cb1cf4b405d930ad27f09ea39d6a64f35fc13308 b/game/assets/objects/cb/cb1cf4b405d930ad27f09ea39d6a64f35fc13308 new file mode 100644 index 0000000..7847586 Binary files /dev/null and b/game/assets/objects/cb/cb1cf4b405d930ad27f09ea39d6a64f35fc13308 differ diff --git a/game/assets/objects/cc/cc1a80b6becfc6d6489c069f053d0a8adc71c339 b/game/assets/objects/cc/cc1a80b6becfc6d6489c069f053d0a8adc71c339 new file mode 100644 index 0000000..853e890 Binary files /dev/null and b/game/assets/objects/cc/cc1a80b6becfc6d6489c069f053d0a8adc71c339 differ diff --git a/game/assets/objects/cd/cd46e41023887558b134547e28327de6e7df189a b/game/assets/objects/cd/cd46e41023887558b134547e28327de6e7df189a new file mode 100644 index 0000000..f2bd815 Binary files /dev/null and b/game/assets/objects/cd/cd46e41023887558b134547e28327de6e7df189a differ diff --git a/game/assets/objects/cd/cd9062e9e81f7cd35164a99669e5db32891a5cb5 b/game/assets/objects/cd/cd9062e9e81f7cd35164a99669e5db32891a5cb5 new file mode 100644 index 0000000..8b00882 Binary files /dev/null and b/game/assets/objects/cd/cd9062e9e81f7cd35164a99669e5db32891a5cb5 differ diff --git a/game/assets/objects/cd/cdb0293c5e2bdbda21798af4e61a4c171c8b1ec0 b/game/assets/objects/cd/cdb0293c5e2bdbda21798af4e61a4c171c8b1ec0 new file mode 100644 index 0000000..4f1b2c4 Binary files /dev/null and b/game/assets/objects/cd/cdb0293c5e2bdbda21798af4e61a4c171c8b1ec0 differ diff --git a/game/assets/objects/ce/ce499da6ec5dd226d50843890ca09f16018aff9a b/game/assets/objects/ce/ce499da6ec5dd226d50843890ca09f16018aff9a new file mode 100644 index 0000000..879761e Binary files /dev/null and b/game/assets/objects/ce/ce499da6ec5dd226d50843890ca09f16018aff9a differ diff --git a/game/assets/objects/ce/ceaaaa1d57dfdfbb0bd4da5ea39628b42897a687 b/game/assets/objects/ce/ceaaaa1d57dfdfbb0bd4da5ea39628b42897a687 new file mode 100644 index 0000000..3ea6b6f Binary files /dev/null and b/game/assets/objects/ce/ceaaaa1d57dfdfbb0bd4da5ea39628b42897a687 differ diff --git a/game/assets/objects/cf/cf23204a9cca2ac7f9674168cc063cfb4dbe001f b/game/assets/objects/cf/cf23204a9cca2ac7f9674168cc063cfb4dbe001f new file mode 100644 index 0000000..dd118c8 Binary files /dev/null and b/game/assets/objects/cf/cf23204a9cca2ac7f9674168cc063cfb4dbe001f differ diff --git a/game/assets/objects/cf/cf60aefd0b742c3fa15e808c1a0c33aebd534cc5 b/game/assets/objects/cf/cf60aefd0b742c3fa15e808c1a0c33aebd534cc5 new file mode 100644 index 0000000..85d3f01 Binary files /dev/null and b/game/assets/objects/cf/cf60aefd0b742c3fa15e808c1a0c33aebd534cc5 differ diff --git a/game/assets/objects/cf/cfb956ba9d26cbdacd16ef77d58764df783b2c7f b/game/assets/objects/cf/cfb956ba9d26cbdacd16ef77d58764df783b2c7f new file mode 100644 index 0000000..867ba35 Binary files /dev/null and b/game/assets/objects/cf/cfb956ba9d26cbdacd16ef77d58764df783b2c7f differ diff --git a/game/assets/objects/d0/d00791807e913e57d58fd891cb4dd10186cfdf38 b/game/assets/objects/d0/d00791807e913e57d58fd891cb4dd10186cfdf38 new file mode 100644 index 0000000..d2445c2 Binary files /dev/null and b/game/assets/objects/d0/d00791807e913e57d58fd891cb4dd10186cfdf38 differ diff --git a/game/assets/objects/d0/d04dd6d1f050353ef9e3ba9c45f407f831903c69 b/game/assets/objects/d0/d04dd6d1f050353ef9e3ba9c45f407f831903c69 new file mode 100644 index 0000000..322ac0d Binary files /dev/null and b/game/assets/objects/d0/d04dd6d1f050353ef9e3ba9c45f407f831903c69 differ diff --git a/game/assets/objects/d1/d1917b9be91d60a40dd0bf804580c1f494e9ae6d b/game/assets/objects/d1/d1917b9be91d60a40dd0bf804580c1f494e9ae6d new file mode 100644 index 0000000..fb740aa Binary files /dev/null and b/game/assets/objects/d1/d1917b9be91d60a40dd0bf804580c1f494e9ae6d differ diff --git a/game/assets/objects/d1/d1ad2cbe6584d9cd9483483f8655966d25a251a0 b/game/assets/objects/d1/d1ad2cbe6584d9cd9483483f8655966d25a251a0 new file mode 100644 index 0000000..21f675f Binary files /dev/null and b/game/assets/objects/d1/d1ad2cbe6584d9cd9483483f8655966d25a251a0 differ diff --git a/game/assets/objects/d1/d1eb3d2e39bf1f6289cfcbca44e1c9bb508b20f0 b/game/assets/objects/d1/d1eb3d2e39bf1f6289cfcbca44e1c9bb508b20f0 new file mode 100644 index 0000000..31dcd2b Binary files /dev/null and b/game/assets/objects/d1/d1eb3d2e39bf1f6289cfcbca44e1c9bb508b20f0 differ diff --git a/game/assets/objects/d2/d26bde554d88f0ca156baf471c44ce2c0e68176c b/game/assets/objects/d2/d26bde554d88f0ca156baf471c44ce2c0e68176c new file mode 100644 index 0000000..ccff5d9 Binary files /dev/null and b/game/assets/objects/d2/d26bde554d88f0ca156baf471c44ce2c0e68176c differ diff --git a/game/assets/objects/d2/d2c44730f6c93676d4e4316add92e424d0a71a33 b/game/assets/objects/d2/d2c44730f6c93676d4e4316add92e424d0a71a33 new file mode 100644 index 0000000..12f2463 Binary files /dev/null and b/game/assets/objects/d2/d2c44730f6c93676d4e4316add92e424d0a71a33 differ diff --git a/game/assets/objects/d4/d49ab3ceb3f6212d64580f0d906fa9880a674c6d b/game/assets/objects/d4/d49ab3ceb3f6212d64580f0d906fa9880a674c6d new file mode 100644 index 0000000..4236ac1 Binary files /dev/null and b/game/assets/objects/d4/d49ab3ceb3f6212d64580f0d906fa9880a674c6d differ diff --git a/game/assets/objects/d4/d4b06ccb8e331ece734f51d84a0a5fbc7164d8be b/game/assets/objects/d4/d4b06ccb8e331ece734f51d84a0a5fbc7164d8be new file mode 100644 index 0000000..2030ccb Binary files /dev/null and b/game/assets/objects/d4/d4b06ccb8e331ece734f51d84a0a5fbc7164d8be differ diff --git a/game/assets/objects/d5/d5218034051a13322d7b5efc0b5a9af739615f04 b/game/assets/objects/d5/d5218034051a13322d7b5efc0b5a9af739615f04 new file mode 100644 index 0000000..0592748 Binary files /dev/null and b/game/assets/objects/d5/d5218034051a13322d7b5efc0b5a9af739615f04 differ diff --git a/game/assets/objects/d5/d5b2d34e0c07a6c09c1adb17a15e50a626a88bc1 b/game/assets/objects/d5/d5b2d34e0c07a6c09c1adb17a15e50a626a88bc1 new file mode 100644 index 0000000..7afc804 Binary files /dev/null and b/game/assets/objects/d5/d5b2d34e0c07a6c09c1adb17a15e50a626a88bc1 differ diff --git a/game/assets/objects/d5/d5c4316d30feef5213077e3ee24a7f52c5bf6735 b/game/assets/objects/d5/d5c4316d30feef5213077e3ee24a7f52c5bf6735 new file mode 100644 index 0000000..e68f01b Binary files /dev/null and b/game/assets/objects/d5/d5c4316d30feef5213077e3ee24a7f52c5bf6735 differ diff --git a/game/assets/objects/d5/d5ce66b3787648036b29c504786bcc237cd316d3 b/game/assets/objects/d5/d5ce66b3787648036b29c504786bcc237cd316d3 new file mode 100644 index 0000000..d49680e Binary files /dev/null and b/game/assets/objects/d5/d5ce66b3787648036b29c504786bcc237cd316d3 differ diff --git a/game/assets/objects/d6/d6212a1d5feb88d76b9a83ce5a27ab4e6d4c20bb b/game/assets/objects/d6/d6212a1d5feb88d76b9a83ce5a27ab4e6d4c20bb new file mode 100644 index 0000000..6b1de14 Binary files /dev/null and b/game/assets/objects/d6/d6212a1d5feb88d76b9a83ce5a27ab4e6d4c20bb differ diff --git a/game/assets/objects/d6/d639bf7f0516e5e363fe5db2aa150cedd38de19a b/game/assets/objects/d6/d639bf7f0516e5e363fe5db2aa150cedd38de19a new file mode 100644 index 0000000..04268ac Binary files /dev/null and b/game/assets/objects/d6/d639bf7f0516e5e363fe5db2aa150cedd38de19a differ diff --git a/game/assets/objects/d6/d68bae1949299ccd8297aaa423dd12e041e83773 b/game/assets/objects/d6/d68bae1949299ccd8297aaa423dd12e041e83773 new file mode 100644 index 0000000..6246c9c Binary files /dev/null and b/game/assets/objects/d6/d68bae1949299ccd8297aaa423dd12e041e83773 differ diff --git a/game/assets/objects/d7/d7d5be6092d00c2f7f68bdcbf10ea3ac3cfea30c b/game/assets/objects/d7/d7d5be6092d00c2f7f68bdcbf10ea3ac3cfea30c new file mode 100644 index 0000000..d7dc578 Binary files /dev/null and b/game/assets/objects/d7/d7d5be6092d00c2f7f68bdcbf10ea3ac3cfea30c differ diff --git a/game/assets/objects/d8/d859c9c5be04ffc41479b306814a933983eaa235 b/game/assets/objects/d8/d859c9c5be04ffc41479b306814a933983eaa235 new file mode 100644 index 0000000..783e845 Binary files /dev/null and b/game/assets/objects/d8/d859c9c5be04ffc41479b306814a933983eaa235 differ diff --git a/game/assets/objects/d8/d8caaead680c20a4f51361587aeddd57a3357a72 b/game/assets/objects/d8/d8caaead680c20a4f51361587aeddd57a3357a72 new file mode 100644 index 0000000..2b653e7 Binary files /dev/null and b/game/assets/objects/d8/d8caaead680c20a4f51361587aeddd57a3357a72 differ diff --git a/game/assets/objects/d9/d9d7511e8944da0c7ab4ed2d3e3d964f98dd6997 b/game/assets/objects/d9/d9d7511e8944da0c7ab4ed2d3e3d964f98dd6997 new file mode 100644 index 0000000..47dedfa Binary files /dev/null and b/game/assets/objects/d9/d9d7511e8944da0c7ab4ed2d3e3d964f98dd6997 differ diff --git a/game/assets/objects/db/dbab0094299eacbce86ad427edcb34b8342861af b/game/assets/objects/db/dbab0094299eacbce86ad427edcb34b8342861af new file mode 100644 index 0000000..1bafb0d Binary files /dev/null and b/game/assets/objects/db/dbab0094299eacbce86ad427edcb34b8342861af differ diff --git a/game/assets/objects/dc/dc66978374a46ab2b87db6472804185824868095 b/game/assets/objects/dc/dc66978374a46ab2b87db6472804185824868095 new file mode 100644 index 0000000..f5a02c5 Binary files /dev/null and b/game/assets/objects/dc/dc66978374a46ab2b87db6472804185824868095 differ diff --git a/game/assets/objects/dc/dc86fbd59cf0e87cd35b22df2a2df899ab8c1f7f b/game/assets/objects/dc/dc86fbd59cf0e87cd35b22df2a2df899ab8c1f7f new file mode 100644 index 0000000..ee6c96c Binary files /dev/null and b/game/assets/objects/dc/dc86fbd59cf0e87cd35b22df2a2df899ab8c1f7f differ diff --git a/game/assets/objects/dc/dcec2d45fbc25f74a399ec9f8001e0ecd2d5d85e b/game/assets/objects/dc/dcec2d45fbc25f74a399ec9f8001e0ecd2d5d85e new file mode 100644 index 0000000..54dc592 Binary files /dev/null and b/game/assets/objects/dc/dcec2d45fbc25f74a399ec9f8001e0ecd2d5d85e differ diff --git a/game/assets/objects/dd/dd2f7209c2a58b0886beb34d49b0512b49adbb7e b/game/assets/objects/dd/dd2f7209c2a58b0886beb34d49b0512b49adbb7e new file mode 100644 index 0000000..a28fb4b Binary files /dev/null and b/game/assets/objects/dd/dd2f7209c2a58b0886beb34d49b0512b49adbb7e differ diff --git a/game/assets/objects/dd/dd85fb564e96ee2dbd4754f711ae9deb08a169f9 b/game/assets/objects/dd/dd85fb564e96ee2dbd4754f711ae9deb08a169f9 new file mode 100644 index 0000000..6f8984f Binary files /dev/null and b/game/assets/objects/dd/dd85fb564e96ee2dbd4754f711ae9deb08a169f9 differ diff --git a/game/assets/objects/df/df1ff11b79757432c5c3f279e5ecde7b63ceda64 b/game/assets/objects/df/df1ff11b79757432c5c3f279e5ecde7b63ceda64 new file mode 100644 index 0000000..bcbe583 Binary files /dev/null and b/game/assets/objects/df/df1ff11b79757432c5c3f279e5ecde7b63ceda64 differ diff --git a/game/assets/objects/df/dfee39084c771182f6b9e7cfb8c8bc4e255747bc b/game/assets/objects/df/dfee39084c771182f6b9e7cfb8c8bc4e255747bc new file mode 100644 index 0000000..1a568fa Binary files /dev/null and b/game/assets/objects/df/dfee39084c771182f6b9e7cfb8c8bc4e255747bc differ diff --git a/game/assets/objects/e0/e0672d288b09996f7c7e1a0ca696de82b7a02d18 b/game/assets/objects/e0/e0672d288b09996f7c7e1a0ca696de82b7a02d18 new file mode 100644 index 0000000..4de58b4 Binary files /dev/null and b/game/assets/objects/e0/e0672d288b09996f7c7e1a0ca696de82b7a02d18 differ diff --git a/game/assets/objects/e0/e07a2da49011ef4cf9d6b1c80a91a06f808c1243 b/game/assets/objects/e0/e07a2da49011ef4cf9d6b1c80a91a06f808c1243 new file mode 100644 index 0000000..4fdc93f Binary files /dev/null and b/game/assets/objects/e0/e07a2da49011ef4cf9d6b1c80a91a06f808c1243 differ diff --git a/game/assets/objects/e0/e0bba792682878ee208a54184df9e2e8044f2815 b/game/assets/objects/e0/e0bba792682878ee208a54184df9e2e8044f2815 new file mode 100644 index 0000000..80d5063 Binary files /dev/null and b/game/assets/objects/e0/e0bba792682878ee208a54184df9e2e8044f2815 differ diff --git a/game/assets/objects/e0/e0c88ca054666aae58b89abdcf377eae525aa13e b/game/assets/objects/e0/e0c88ca054666aae58b89abdcf377eae525aa13e new file mode 100644 index 0000000..23c530f Binary files /dev/null and b/game/assets/objects/e0/e0c88ca054666aae58b89abdcf377eae525aa13e differ diff --git a/game/assets/objects/e0/e0f0ba416a5744036e11bb6a5fc5ac4b8c461873 b/game/assets/objects/e0/e0f0ba416a5744036e11bb6a5fc5ac4b8c461873 new file mode 100644 index 0000000..2741912 Binary files /dev/null and b/game/assets/objects/e0/e0f0ba416a5744036e11bb6a5fc5ac4b8c461873 differ diff --git a/game/assets/objects/e1/e1187646b6256b92a1384f26ef2a7e56efcbe00d b/game/assets/objects/e1/e1187646b6256b92a1384f26ef2a7e56efcbe00d new file mode 100644 index 0000000..4f11239 Binary files /dev/null and b/game/assets/objects/e1/e1187646b6256b92a1384f26ef2a7e56efcbe00d differ diff --git a/game/assets/objects/e2/e260582909112ec3c255d1ec0375c7913df5f9f8 b/game/assets/objects/e2/e260582909112ec3c255d1ec0375c7913df5f9f8 new file mode 100644 index 0000000..ca4f9e6 Binary files /dev/null and b/game/assets/objects/e2/e260582909112ec3c255d1ec0375c7913df5f9f8 differ diff --git a/game/assets/objects/e2/e26fa3036cdab4c2264ceb19e1cd197a2a510227 b/game/assets/objects/e2/e26fa3036cdab4c2264ceb19e1cd197a2a510227 new file mode 100644 index 0000000..6290af2 Binary files /dev/null and b/game/assets/objects/e2/e26fa3036cdab4c2264ceb19e1cd197a2a510227 differ diff --git a/game/assets/objects/e2/e28d844995368de1d45c724a5d371c9952ae5ed4 b/game/assets/objects/e2/e28d844995368de1d45c724a5d371c9952ae5ed4 new file mode 100644 index 0000000..984341f Binary files /dev/null and b/game/assets/objects/e2/e28d844995368de1d45c724a5d371c9952ae5ed4 differ diff --git a/game/assets/objects/e3/e367d1dfa1ce07374e0aeaecbfb1526142a0dcc1 b/game/assets/objects/e3/e367d1dfa1ce07374e0aeaecbfb1526142a0dcc1 new file mode 100644 index 0000000..7e60f4e Binary files /dev/null and b/game/assets/objects/e3/e367d1dfa1ce07374e0aeaecbfb1526142a0dcc1 differ diff --git a/game/assets/objects/e3/e3f90fb5afaf84475dd31dca6f65378a455d17f7 b/game/assets/objects/e3/e3f90fb5afaf84475dd31dca6f65378a455d17f7 new file mode 100644 index 0000000..bb0e15a Binary files /dev/null and b/game/assets/objects/e3/e3f90fb5afaf84475dd31dca6f65378a455d17f7 differ diff --git a/game/assets/objects/e4/e40695b47209c3b4bbdc3496b38959d097c6afbc b/game/assets/objects/e4/e40695b47209c3b4bbdc3496b38959d097c6afbc new file mode 100644 index 0000000..3655599 Binary files /dev/null and b/game/assets/objects/e4/e40695b47209c3b4bbdc3496b38959d097c6afbc differ diff --git a/game/assets/objects/e6/e641dd3d6607db86b7574fe82781a34ad74f6c77 b/game/assets/objects/e6/e641dd3d6607db86b7574fe82781a34ad74f6c77 new file mode 100644 index 0000000..adc6f7d Binary files /dev/null and b/game/assets/objects/e6/e641dd3d6607db86b7574fe82781a34ad74f6c77 differ diff --git a/game/assets/objects/e7/e746ec4574aaa047be3076729753c2c75fd34630 b/game/assets/objects/e7/e746ec4574aaa047be3076729753c2c75fd34630 new file mode 100644 index 0000000..7dc0ca3 Binary files /dev/null and b/game/assets/objects/e7/e746ec4574aaa047be3076729753c2c75fd34630 differ diff --git a/game/assets/objects/e7/e7e8d393fc03a476227890e9ec9319dcc4b400ea b/game/assets/objects/e7/e7e8d393fc03a476227890e9ec9319dcc4b400ea new file mode 100644 index 0000000..b1a8555 Binary files /dev/null and b/game/assets/objects/e7/e7e8d393fc03a476227890e9ec9319dcc4b400ea differ diff --git a/game/assets/objects/e7/e7f0f24c2c9f4bf83286b17109580d3e845d19e3 b/game/assets/objects/e7/e7f0f24c2c9f4bf83286b17109580d3e845d19e3 new file mode 100644 index 0000000..3ed6d7a Binary files /dev/null and b/game/assets/objects/e7/e7f0f24c2c9f4bf83286b17109580d3e845d19e3 differ diff --git a/game/assets/objects/e8/e8b89f316f3e9989a87f6e6ff12db9abe0f8b09f b/game/assets/objects/e8/e8b89f316f3e9989a87f6e6ff12db9abe0f8b09f new file mode 100644 index 0000000..97ae71e Binary files /dev/null and b/game/assets/objects/e8/e8b89f316f3e9989a87f6e6ff12db9abe0f8b09f differ diff --git a/game/assets/objects/e8/e8dcca0e494a3f479f58f581c9a8e297cc92f4e7 b/game/assets/objects/e8/e8dcca0e494a3f479f58f581c9a8e297cc92f4e7 new file mode 100644 index 0000000..cadc543 Binary files /dev/null and b/game/assets/objects/e8/e8dcca0e494a3f479f58f581c9a8e297cc92f4e7 differ diff --git a/game/assets/objects/e9/e96237fdf5e5e1aca09496b9192243651525d0ac b/game/assets/objects/e9/e96237fdf5e5e1aca09496b9192243651525d0ac new file mode 100644 index 0000000..2f673d1 Binary files /dev/null and b/game/assets/objects/e9/e96237fdf5e5e1aca09496b9192243651525d0ac differ diff --git a/game/assets/objects/e9/e9833a1512b57bcf88ac4fdcc8df4e5a7e9d701d b/game/assets/objects/e9/e9833a1512b57bcf88ac4fdcc8df4e5a7e9d701d new file mode 100644 index 0000000..a38b2cc Binary files /dev/null and b/game/assets/objects/e9/e9833a1512b57bcf88ac4fdcc8df4e5a7e9d701d differ diff --git a/game/assets/objects/e9/e9a1caaddcde79cdac7aa8eabde50d4cfd1bc578 b/game/assets/objects/e9/e9a1caaddcde79cdac7aa8eabde50d4cfd1bc578 new file mode 100644 index 0000000..7fbd59d Binary files /dev/null and b/game/assets/objects/e9/e9a1caaddcde79cdac7aa8eabde50d4cfd1bc578 differ diff --git a/game/assets/objects/e9/e9bab7d3d15541f0aaa93fad31ad37fd07e03a6c b/game/assets/objects/e9/e9bab7d3d15541f0aaa93fad31ad37fd07e03a6c new file mode 100644 index 0000000..f8d92e9 Binary files /dev/null and b/game/assets/objects/e9/e9bab7d3d15541f0aaa93fad31ad37fd07e03a6c differ diff --git a/game/assets/objects/e9/e9d023a54a6b514af496c8f253f5f3fa948fd4b6 b/game/assets/objects/e9/e9d023a54a6b514af496c8f253f5f3fa948fd4b6 new file mode 100644 index 0000000..33c878a Binary files /dev/null and b/game/assets/objects/e9/e9d023a54a6b514af496c8f253f5f3fa948fd4b6 differ diff --git a/game/assets/objects/ea/eaf1d4879f3bf6f5f60ba01f475dc581c641b4ae b/game/assets/objects/ea/eaf1d4879f3bf6f5f60ba01f475dc581c641b4ae new file mode 100644 index 0000000..01f35b0 Binary files /dev/null and b/game/assets/objects/ea/eaf1d4879f3bf6f5f60ba01f475dc581c641b4ae differ diff --git a/game/assets/objects/ea/eafa60d7ec34f86e8f07a001ddcdf5c4600bb174 b/game/assets/objects/ea/eafa60d7ec34f86e8f07a001ddcdf5c4600bb174 new file mode 100644 index 0000000..a7c6ded Binary files /dev/null and b/game/assets/objects/ea/eafa60d7ec34f86e8f07a001ddcdf5c4600bb174 differ diff --git a/game/assets/objects/eb/eb58ef697b2cbaed218edc758e00412302c75962 b/game/assets/objects/eb/eb58ef697b2cbaed218edc758e00412302c75962 new file mode 100644 index 0000000..b8fbc7f Binary files /dev/null and b/game/assets/objects/eb/eb58ef697b2cbaed218edc758e00412302c75962 differ diff --git a/game/assets/objects/ec/ec4b0396dd2fc2da8fab91ddc35218d3426349b3 b/game/assets/objects/ec/ec4b0396dd2fc2da8fab91ddc35218d3426349b3 new file mode 100644 index 0000000..49f18ed Binary files /dev/null and b/game/assets/objects/ec/ec4b0396dd2fc2da8fab91ddc35218d3426349b3 differ diff --git a/game/assets/objects/ed/edbc9e9cb9dfeabef93207fc0bdee6ceee5df7bc b/game/assets/objects/ed/edbc9e9cb9dfeabef93207fc0bdee6ceee5df7bc new file mode 100644 index 0000000..684a418 Binary files /dev/null and b/game/assets/objects/ed/edbc9e9cb9dfeabef93207fc0bdee6ceee5df7bc differ diff --git a/game/assets/objects/ee/ee6079d3826ac2994f3f58e62370f3c8ff9328e9 b/game/assets/objects/ee/ee6079d3826ac2994f3f58e62370f3c8ff9328e9 new file mode 100644 index 0000000..3660d9d Binary files /dev/null and b/game/assets/objects/ee/ee6079d3826ac2994f3f58e62370f3c8ff9328e9 differ diff --git a/game/assets/objects/ee/eed7a9305f5879448bb94355f25279b4aac403b6 b/game/assets/objects/ee/eed7a9305f5879448bb94355f25279b4aac403b6 new file mode 100644 index 0000000..e1cc6bd Binary files /dev/null and b/game/assets/objects/ee/eed7a9305f5879448bb94355f25279b4aac403b6 differ diff --git a/game/assets/objects/ef/ef59205829f09ac4855c614a0e7046db820df18b b/game/assets/objects/ef/ef59205829f09ac4855c614a0e7046db820df18b new file mode 100644 index 0000000..5dde154 Binary files /dev/null and b/game/assets/objects/ef/ef59205829f09ac4855c614a0e7046db820df18b differ diff --git a/game/assets/objects/ef/efa5acfa08b210ba3087b535c40549c0ed8916f0 b/game/assets/objects/ef/efa5acfa08b210ba3087b535c40549c0ed8916f0 new file mode 100644 index 0000000..f45a9e1 Binary files /dev/null and b/game/assets/objects/ef/efa5acfa08b210ba3087b535c40549c0ed8916f0 differ diff --git a/game/assets/objects/f1/f1665747da14569c4de55e07884deeef18a40f62 b/game/assets/objects/f1/f1665747da14569c4de55e07884deeef18a40f62 new file mode 100644 index 0000000..5bdda89 Binary files /dev/null and b/game/assets/objects/f1/f1665747da14569c4de55e07884deeef18a40f62 differ diff --git a/game/assets/objects/f2/f259be40364341edcaf88e339bc24ab01e49845a b/game/assets/objects/f2/f259be40364341edcaf88e339bc24ab01e49845a new file mode 100644 index 0000000..ac2de2b Binary files /dev/null and b/game/assets/objects/f2/f259be40364341edcaf88e339bc24ab01e49845a differ diff --git a/game/assets/objects/f3/f35e14af35d1d12244dac9e655f4e31d4ef84e1b b/game/assets/objects/f3/f35e14af35d1d12244dac9e655f4e31d4ef84e1b new file mode 100644 index 0000000..ce3cbde Binary files /dev/null and b/game/assets/objects/f3/f35e14af35d1d12244dac9e655f4e31d4ef84e1b differ diff --git a/game/assets/objects/f5/f57577fe6915175f9e4576e8d73ad4077a381433 b/game/assets/objects/f5/f57577fe6915175f9e4576e8d73ad4077a381433 new file mode 100644 index 0000000..424b3bf Binary files /dev/null and b/game/assets/objects/f5/f57577fe6915175f9e4576e8d73ad4077a381433 differ diff --git a/game/assets/objects/f5/f5e1ba4ac271b4c2feee86a4d04e32279ea99c10 b/game/assets/objects/f5/f5e1ba4ac271b4c2feee86a4d04e32279ea99c10 new file mode 100644 index 0000000..39b9efa Binary files /dev/null and b/game/assets/objects/f5/f5e1ba4ac271b4c2feee86a4d04e32279ea99c10 differ diff --git a/game/assets/objects/f6/f6e2067571631aae206000a501c9adebe862e32a b/game/assets/objects/f6/f6e2067571631aae206000a501c9adebe862e32a new file mode 100644 index 0000000..760c16b Binary files /dev/null and b/game/assets/objects/f6/f6e2067571631aae206000a501c9adebe862e32a differ diff --git a/game/assets/objects/f7/f75617763129506ae7220ed16cdff7a8084eebb3 b/game/assets/objects/f7/f75617763129506ae7220ed16cdff7a8084eebb3 new file mode 100644 index 0000000..7345ab2 Binary files /dev/null and b/game/assets/objects/f7/f75617763129506ae7220ed16cdff7a8084eebb3 differ diff --git a/game/assets/objects/f7/f76d4efd860b599200e96401b2485cc83c1ec21e b/game/assets/objects/f7/f76d4efd860b599200e96401b2485cc83c1ec21e new file mode 100644 index 0000000..ae71b94 Binary files /dev/null and b/game/assets/objects/f7/f76d4efd860b599200e96401b2485cc83c1ec21e differ diff --git a/game/assets/objects/f7/f78ede81160002fc0561218c7ecd97e91cccab7c b/game/assets/objects/f7/f78ede81160002fc0561218c7ecd97e91cccab7c new file mode 100644 index 0000000..131c1cb Binary files /dev/null and b/game/assets/objects/f7/f78ede81160002fc0561218c7ecd97e91cccab7c differ diff --git a/game/assets/objects/f7/f7d7e5c7089c9b45fa5d1b31542eb455fad995db b/game/assets/objects/f7/f7d7e5c7089c9b45fa5d1b31542eb455fad995db new file mode 100644 index 0000000..e792b34 Binary files /dev/null and b/game/assets/objects/f7/f7d7e5c7089c9b45fa5d1b31542eb455fad995db differ diff --git a/game/assets/objects/f7/f7e8ae3a771d50ed827772b75c50958393b621e1 b/game/assets/objects/f7/f7e8ae3a771d50ed827772b75c50958393b621e1 new file mode 100644 index 0000000..533b35c Binary files /dev/null and b/game/assets/objects/f7/f7e8ae3a771d50ed827772b75c50958393b621e1 differ diff --git a/game/assets/objects/f9/f9f79162efa6667b753c1fbb46ff9888e8ce5f32 b/game/assets/objects/f9/f9f79162efa6667b753c1fbb46ff9888e8ce5f32 new file mode 100644 index 0000000..a208e1e Binary files /dev/null and b/game/assets/objects/f9/f9f79162efa6667b753c1fbb46ff9888e8ce5f32 differ diff --git a/game/assets/objects/fa/fa6d89b586c5ca29efe85c8d373ff9ee19488d40 b/game/assets/objects/fa/fa6d89b586c5ca29efe85c8d373ff9ee19488d40 new file mode 100644 index 0000000..c89b989 Binary files /dev/null and b/game/assets/objects/fa/fa6d89b586c5ca29efe85c8d373ff9ee19488d40 differ diff --git a/game/assets/objects/fa/fa73977dd28020544f7fe2553e5604a6865ec1a6 b/game/assets/objects/fa/fa73977dd28020544f7fe2553e5604a6865ec1a6 new file mode 100644 index 0000000..3ef9a67 Binary files /dev/null and b/game/assets/objects/fa/fa73977dd28020544f7fe2553e5604a6865ec1a6 differ diff --git a/game/assets/objects/fb/fbc1b2c89c5c781e30d702b2885be3f485105869 b/game/assets/objects/fb/fbc1b2c89c5c781e30d702b2885be3f485105869 new file mode 100644 index 0000000..9a14fc4 Binary files /dev/null and b/game/assets/objects/fb/fbc1b2c89c5c781e30d702b2885be3f485105869 differ diff --git a/game/assets/objects/fc/fcf4f90c452b7b511d50e3959ae05036d13a7cf8 b/game/assets/objects/fc/fcf4f90c452b7b511d50e3959ae05036d13a7cf8 new file mode 100644 index 0000000..2d2f825 Binary files /dev/null and b/game/assets/objects/fc/fcf4f90c452b7b511d50e3959ae05036d13a7cf8 differ diff --git a/game/assets/objects/fd/fd2b6f745b05a2cf44a4e010f72631de2e5099f6 b/game/assets/objects/fd/fd2b6f745b05a2cf44a4e010f72631de2e5099f6 new file mode 100644 index 0000000..9b3ca5b Binary files /dev/null and b/game/assets/objects/fd/fd2b6f745b05a2cf44a4e010f72631de2e5099f6 differ diff --git a/game/assets/objects/fd/fd446ad40d24edfe4fb789a6065276e164ea4b61 b/game/assets/objects/fd/fd446ad40d24edfe4fb789a6065276e164ea4b61 new file mode 100644 index 0000000..2e74680 Binary files /dev/null and b/game/assets/objects/fd/fd446ad40d24edfe4fb789a6065276e164ea4b61 differ diff --git a/game/assets/objects/fd/fddba78b2426f8056be081c98fe82e8411a0a5cf b/game/assets/objects/fd/fddba78b2426f8056be081c98fe82e8411a0a5cf new file mode 100644 index 0000000..22f8f42 Binary files /dev/null and b/game/assets/objects/fd/fddba78b2426f8056be081c98fe82e8411a0a5cf differ diff --git a/game/assets/objects/fe/fec7c7997f8eb6faaebd37f0eaed417118d3a498 b/game/assets/objects/fe/fec7c7997f8eb6faaebd37f0eaed417118d3a498 new file mode 100644 index 0000000..5490deb Binary files /dev/null and b/game/assets/objects/fe/fec7c7997f8eb6faaebd37f0eaed417118d3a498 differ diff --git a/jars/deobfuscated-source.jar b/jars/deobfuscated-source.jar new file mode 100644 index 0000000..10086c7 Binary files /dev/null and b/jars/deobfuscated-source.jar differ diff --git a/jars/deobfuscated.jar b/jars/deobfuscated.jar new file mode 100644 index 0000000..5d83366 Binary files /dev/null and b/jars/deobfuscated.jar differ diff --git a/md5/original.md5 b/md5/original.md5 new file mode 100644 index 0000000..e4fb616 --- /dev/null +++ b/md5/original.md5 @@ -0,0 +1,1464 @@ +net/minecraft/client/ClientBrandRetriever 424620c71089145dc127f22811ccc13c +net/minecraft/client/Minecraft 54d628bbe8e6f40a208c6c8592d6a50d +net/minecraft/client/MinecraftApplet 4ff22b1e4da6715b7df374d8925b870b +net/minecraft/server/MinecraftServer 8c9e38d5a57bbb93ac222fa6808a091c +net/minecraft/src/AABBLocalPool 2915101604f4f42f44b1354845a05bf4 +net/minecraft/src/AABBPool e2776da6c38ce4127ad762b9602bc577 +net/minecraft/src/Achievement a381b321f78a50839e7ce0b0337db519 +net/minecraft/src/AchievementList cf2cafa167677bb26669d2cfd52cf1c1 +net/minecraft/src/AchievementMap 0369874a511bb7780f1a88fdab25e9fc +net/minecraft/src/ActiveRenderInfo a67e6b45237f20949cb8ade61c451959 +net/minecraft/src/AnvilChunkLoader 0e6b5c560506102cd4254755219205cf +net/minecraft/src/AnvilChunkLoaderPending f1efdd259da470ec89eb6a919f1385e1 +net/minecraft/src/AnvilConverterData 002eb607cec2bc0cbc7a83c3dc9125a8 +net/minecraft/src/AnvilConverterException 00f177678bc989ff058644802777be6c +net/minecraft/src/AnvilSaveConverter 05db7199df04e8c3cfc397a7df0adabe +net/minecraft/src/AnvilSaveConverterFileFilter 338e9320f7877be581e18b19ce8428af +net/minecraft/src/AnvilSaveHandler ebe5f9412f6076a85350e1abd6afb47b +net/minecraft/src/AxisAlignedBB 5ccfc10d24d03980849de5b0855ed893 +net/minecraft/src/BanEntry 02db6ff1f24e187c68a5257434448d33 +net/minecraft/src/BanList d2a7cf56728337ae4db9218a370a9985 +net/minecraft/src/BehaviorDefaultDispenseItem 7852a50f7c206cf484156928f145ac40 +net/minecraft/src/BehaviorDispenseArmor 330f34b45e79a29c68aad163ddfcc2ac +net/minecraft/src/BehaviorDispenseItemProvider 40b59588281a720f47f702a047af68d3 +net/minecraft/src/BehaviorDispenseMinecart fafb86507fe5853d7f3233047c1eeead +net/minecraft/src/BehaviorProjectileDispense 06e99139037aa0ff3b269f2c1c7559d7 +net/minecraft/src/BiomeCache 30c7460f73edc134e7552e6392aaaee3 +net/minecraft/src/BiomeCacheBlock a33bf030053eec91b04b12227f501db0 +net/minecraft/src/BiomeDecorator 48e8fe023b30a905e912c535c8676bf3 +net/minecraft/src/BiomeEndDecorator b141bcdbda1de2b6759646c52ca985db +net/minecraft/src/BiomeGenBase 4d24c21474cbce798d059d6876c370dc +net/minecraft/src/BiomeGenBeach 8d663cf951bf0f66cb9b881089729e37 +net/minecraft/src/BiomeGenDesert 50110815770fac5bc26d0b127c8943d2 +net/minecraft/src/BiomeGenEnd 528211d4a1a75921fcddc3d78a8735ab +net/minecraft/src/BiomeGenForest b9423910c3250ea9943c14ab73e4c4ff +net/minecraft/src/BiomeGenHell d14042b1e9f73888f3e0b3bb587d6375 +net/minecraft/src/BiomeGenHills 4936d087a87b7f523739d96f66db7e4a +net/minecraft/src/BiomeGenJungle 359c14cbd133e7a4a6462c40bf589df9 +net/minecraft/src/BiomeGenMushroomIsland 1f5dae9f580c9f0b93b0b0be64715d94 +net/minecraft/src/BiomeGenOcean d8ee8ae2d51c67cdffa9ad78dc7485f7 +net/minecraft/src/BiomeGenPlains b40fec3b9db7e8beddabfb80c95daf1a +net/minecraft/src/BiomeGenRiver 8855d9382906947b3c3f65d9778e61d1 +net/minecraft/src/BiomeGenSnow 35bd61e1860632309606b3888c9a0231 +net/minecraft/src/BiomeGenSwamp e1bc39182c0650395d213ae518f178e5 +net/minecraft/src/BiomeGenTaiga f440a1471ce7f79df3ffae60ed298eaa +net/minecraft/src/Block 8a2f883f7c1d638d643edcfc6d6396d8 +net/minecraft/src/BlockAnvil 428a71e772bc9979d29f3f2b62f2682e +net/minecraft/src/BlockBasePressurePlate f60738fd6e971d77245a9b34b0f2d398 +net/minecraft/src/BlockBaseRailLogic 5eeee9e578e4207d9e438c014078978c +net/minecraft/src/BlockBeacon 117fdb63c8d8846e1f70d438d7ab8707 +net/minecraft/src/BlockBed d1160d6babbf58582b5db69d449dd19c +net/minecraft/src/BlockBookshelf 4c954e111e9a9bc9791d2649ae05bd18 +net/minecraft/src/BlockBreakable c00a8fb0fd6a5e7e566da1a26e071c76 +net/minecraft/src/BlockBrewingStand 37ec4d56adc0e0b3fcf1df9248b7e978 +net/minecraft/src/BlockButton 141f2f08b9972d2df354e539f582f197 +net/minecraft/src/BlockButtonStone ba38eaeca3a6519781aad2c8f3932cbf +net/minecraft/src/BlockButtonWood 4634d0cb8b57aeba372dc79588fcde5f +net/minecraft/src/BlockCactus c3891dab55afa6dbc48fb8947ff17431 +net/minecraft/src/BlockCake 1130975bb7b98bea79db468587cd8ff3 +net/minecraft/src/BlockCarrot 6de08f7a87f3a4655568939d6a116d53 +net/minecraft/src/BlockCauldron be63e5f4fbd0f0edd65addd9ac24f811 +net/minecraft/src/BlockChest 6bb7496312cf6aef99a2508b693f3834 +net/minecraft/src/BlockClay 00b8319d32370f5f7bef78160911b2b5 +net/minecraft/src/BlockCloth fcfeba6f21085d88d3d58544da5a73ec +net/minecraft/src/BlockCocoa b69939a8e040826eb87d86bac7b01767 +net/minecraft/src/BlockCommandBlock 05f259ca3e277e1365f7795b82d8d15f +net/minecraft/src/BlockComparator 9e30b070f5da3c700bb5ef78a4dba8a0 +net/minecraft/src/BlockContainer 39f01e1ab1267506aa5dd2cdfa097dee +net/minecraft/src/BlockCrops fe60a6303d9ee730c7978df6f603ab4d +net/minecraft/src/BlockDaylightDetector 9f0fa4b07aa4cb2cb62a1c30132a7c24 +net/minecraft/src/BlockDeadBush 8e39a07630368cfa4281762a8714e2fd +net/minecraft/src/BlockDetectorRail be26a66a7417a4e9578c383e1370c56e +net/minecraft/src/BlockDirectional 0f94073603ede8b348b42910dffa59d6 +net/minecraft/src/BlockDirt f0e90ba93242a480c3c4697c289b22b2 +net/minecraft/src/BlockDispenser 656a3b7c0db5dd0df95283171208230a +net/minecraft/src/BlockDoor 175204e9e19fcf8a81d4f71e1736d61e +net/minecraft/src/BlockDragonEgg 5826ab4fd4428410b15dd6598dc6ba4f +net/minecraft/src/BlockDropper a9f999c1404bf15a68982ef052e37d24 +net/minecraft/src/BlockEnchantmentTable 0202dc2290c702a92467b8fd9f572de2 +net/minecraft/src/BlockEnderChest 6c6f064f125427fddbd34186cb3155b3 +net/minecraft/src/BlockEndPortal 5dbe9e0dea0bcbf09e22363749711e3f +net/minecraft/src/BlockEndPortalFrame fa27fb13aa24c4b6e79c9bf1cf8a78e8 +net/minecraft/src/BlockEventData 9c9487aab39e68ab415aff7f0baefe99 +net/minecraft/src/BlockFarmland 6b8ac72534e9c5441b932ff764b952ac +net/minecraft/src/BlockFence f4d0c6275c180e62d983cab2a5a0160c +net/minecraft/src/BlockFenceGate c00cdfdaa2cd85e17921ddfad5ffa1f0 +net/minecraft/src/BlockFire 215cff4542248c6bef0e95eb07220501 +net/minecraft/src/BlockFlower 9b73ff69d9364f53683cdb83fddec108 +net/minecraft/src/BlockFlowerPot ddf3e40aabed10c76ba5fd7923ef8e8e +net/minecraft/src/BlockFlowing 79b659b00640e8c945f96c7008349d85 +net/minecraft/src/BlockFluid a813a31d68316b90a55c7ac0736258f1 +net/minecraft/src/BlockFurnace 16abb56fe3f8444a865451544db0965c +net/minecraft/src/BlockGlass ef1ad81e55856ed80d3c50fc3ff78c15 +net/minecraft/src/BlockGlowStone 22fa04d6ced5586a382ef401151df7dc +net/minecraft/src/BlockGrass 91afc9ef269c571898a603851a8bb268 +net/minecraft/src/BlockGravel c761564966f7ddafc3f9d8cd4eb02cb1 +net/minecraft/src/BlockHalfSlab afeceb254e637a49758c267244195a98 +net/minecraft/src/BlockHopper 74fe0f2e61c864745dd79d76671799cb +net/minecraft/src/BlockIce ff3970b416c9a4858c8c2047f27e4194 +net/minecraft/src/BlockJukeBox 199b19d27b13b967964306f70d5d1f64 +net/minecraft/src/BlockLadder f8a4c6ecddcfc3eb222e4fffa760c92e +net/minecraft/src/BlockLeaves 8db4438173eab2ba60516652c44a23b0 +net/minecraft/src/BlockLeavesBase b2fd03021c70eaae4b8c33409ee98cae +net/minecraft/src/BlockLever e9fb8e9ffd041f352719b12d362d0d78 +net/minecraft/src/BlockLilyPad 97a1f0a7f65ac54441653297ba7d40fb +net/minecraft/src/BlockLockedChest 3958230301448c76876de0a7dcf6f88b +net/minecraft/src/BlockLog b011f82622cfd927f28ef2553cccc66c +net/minecraft/src/BlockMelon c38413c743c5f4ff560066f99762b9b5 +net/minecraft/src/BlockMobSpawner e3d71634c78885bb51ae5b9032f6e323 +net/minecraft/src/BlockMushroom 9cd581e637be81aef1360af3a5260565 +net/minecraft/src/BlockMushroomCap bd3bf69b18ef0ae640d21c34d73eff40 +net/minecraft/src/BlockMycelium 45d37edf84a0bf2bdb3475855203f845 +net/minecraft/src/BlockNetherrack 6a8495fcfce39375e3bb361e18290874 +net/minecraft/src/BlockNetherStalk cdbafc67734414101042f4b7166f0d73 +net/minecraft/src/BlockNote ff23530aab29c54a98bf0a2bf68b6655 +net/minecraft/src/BlockObsidian 46a48f3e3b68060e37e2d43cfd58050b +net/minecraft/src/BlockOre 859666933cd5ba82073bd70ef8afb45e +net/minecraft/src/BlockOreStorage dfcdd8be03a3f35276cd2c5256a31b69 +net/minecraft/src/BlockPane 28b38ca986b748154a4b97c617c85d12 +net/minecraft/src/BlockPistonBase d8766838587b33a6ea11f45c89fb550a +net/minecraft/src/BlockPistonExtension 70af88155105ddbfa9c8d63db47b101c +net/minecraft/src/BlockPistonMoving c24bfe5a4d80e59732baefc83633962c +net/minecraft/src/BlockPortal 7b8c575d8b129f2995711df96a5d2c70 +net/minecraft/src/BlockPotato 7242910a8fc85d58a3b362d4a3f46680 +net/minecraft/src/BlockPoweredOre df0f0bdb59395b60a23528e49aabb203 +net/minecraft/src/BlockPressurePlate f520c22f3fb22d90c43af4f926ab06bf +net/minecraft/src/BlockPressurePlateWeighted a91ce76748736bda38c6d354a7ce153b +net/minecraft/src/BlockPumpkin 072588e212304c4a24de5664d53f5cd4 +net/minecraft/src/BlockQuartz d85562953e0731b89ccfcc5c4daaa8c1 +net/minecraft/src/BlockRail 298dd44edf33356a8c6385114b2bd01c +net/minecraft/src/BlockRailBase e04df99ce2bb0d0647cf6dd93d4d8aaf +net/minecraft/src/BlockRailPowered 8c731492dde7cfbc44885c2ff05c2046 +net/minecraft/src/BlockRedstoneLight cfd203661a517ffb12f83f9e7bbd7283 +net/minecraft/src/BlockRedstoneLogic 2289ebe8166dc2d347756b51804b5592 +net/minecraft/src/BlockRedstoneOre 9c318de7cc7de72416b36c551fc07b00 +net/minecraft/src/BlockRedstoneRepeater 005459b1071a8a4fc66405d0f09e202e +net/minecraft/src/BlockRedstoneTorch 2fe8fde4bf64af79a010b7c8ecfac7b8 +net/minecraft/src/BlockRedstoneWire 22e8a567cd6f45335c00ca244fcc65df +net/minecraft/src/BlockReed 87d641a3de5454927fbc4d058e5471a0 +net/minecraft/src/BlockSand 8883e1b82b87a8378714d8d16c6d2b45 +net/minecraft/src/BlockSandStone 2f1a8541af20b639a6b3c6cc06a487c4 +net/minecraft/src/BlockSapling 0a40dfbf05aa52bf4fb4f7da3a01bc83 +net/minecraft/src/BlockSign 52377fc899f49594a78bfb307296cc9b +net/minecraft/src/BlockSilverfish cf363d72a39199b4ec1aa61e2ca0c6a6 +net/minecraft/src/BlockSkull 4cb2a8969cb87bf987d192d450430893 +net/minecraft/src/BlockSnow 35837b622fa6856c9dd41f7cc08aee4b +net/minecraft/src/BlockSnowBlock 0ec9752b33d8271967f0cdc1cd4ffd5b +net/minecraft/src/BlockSoulSand 4d25f60e356f1c9eab03fc2df827c6f1 +net/minecraft/src/BlockSourceImpl 9741a8fe8c60c73c853c3b5fc906604d +net/minecraft/src/BlockSponge e89c6791c2bc8eb373abeb4f3146634f +net/minecraft/src/BlockStairs 4561580c3c29c480a5af7552cdfa63f9 +net/minecraft/src/BlockStationary a2b26468b50e3134e365f4a0b6c5879f +net/minecraft/src/BlockStem e4921060ea1d93ce0cc11b9a6c1a0232 +net/minecraft/src/BlockStep 1442edf3a6680179c35bcd153cffa907 +net/minecraft/src/BlockStone 8b9e44130e88f392aa254072596647a6 +net/minecraft/src/BlockStoneBrick af46ea67911ab51b75bccadd303b1019 +net/minecraft/src/BlockTallGrass 9c3fcfd9c89c7075420a4ea8d84e0cba +net/minecraft/src/BlockTNT f95e30dd4bbd0589ec6d465ec6c1f58d +net/minecraft/src/BlockTorch 4718b7dc0c54a5ee21cd7b1bf28f045e +net/minecraft/src/BlockTrapDoor 89bb9a9e5b8c0fe0fb881aca25291df3 +net/minecraft/src/BlockTripWire 85cc017485d739f3f323d70adfed7be6 +net/minecraft/src/BlockTripWireSource a63f834a5c8cba6dcbe82eabef89b725 +net/minecraft/src/BlockVine 51b8767a43eec38929fdb9510acf4014 +net/minecraft/src/BlockWall 4a46579d3c2205baf3f852138dec1a93 +net/minecraft/src/BlockWeb 0db36515ceae0e1df5d819d5859abc6a +net/minecraft/src/BlockWood 1f0b11826fffc7cd8390383741447341 +net/minecraft/src/BlockWoodSlab 382d481e0427ba091088459e54f05c78 +net/minecraft/src/BlockWorkbench 2a879b13e1fc480bb02193c8d5006a77 +net/minecraft/src/BossStatus 29268be0b5b6b8dfe94053e0de72af5b +net/minecraft/src/CallableBlockDataValue 20ebb026fd9127c38bf7ca0649ad2694 +net/minecraft/src/CallableBlockLocation e7c23a9450ef725daa28ecd672052a5b +net/minecraft/src/CallableBlockType 15df5685c515bda80adad9b036828820 +net/minecraft/src/CallableChunkPosHash 7c4a59890157df3bcd31039d68fc689a +net/minecraft/src/CallableClientMemoryStats 5354d1b260bb67d1bc3970535e7820cc +net/minecraft/src/CallableClientProfiler 22e6cc63f172003c0b3456426fa2c605 +net/minecraft/src/CallableCrashMemoryReport bb7d8d21d04e685c45a71d322ede2ddb +net/minecraft/src/CallableEffectAmplifier a3fd5fb811e47dcf9d5c7e01c80ff6f9 +net/minecraft/src/CallableEffectDuration 1c10962276e19fa21744d42721cc30f4 +net/minecraft/src/CallableEffectID 706450926cf538326f32b0cade754f97 +net/minecraft/src/CallableEffectIsAmbient 71462f0d0bdaf5a3ae570ec4abaa0df9 +net/minecraft/src/CallableEffectIsSplash 41ba8bd266c13bec0e237af3d9bdc3ba +net/minecraft/src/CallableEffectName cd824d648b38caf9a925d717ea829069 +net/minecraft/src/CallableEntityName bd960b81fdfc05024d52ec2560d96ae4 +net/minecraft/src/CallableEntityTracker 23046b1b7c3937d0dd2c6df6b334e6b5 +net/minecraft/src/CallableEntityType 6026001828d475dce8c05218a88b09c6 +net/minecraft/src/CallableGLInfo 216c45e6c2c385b69c919c5b49afe08a +net/minecraft/src/CallableIntCache 12f01fb230ea5a27ad0d54c347995f40 +net/minecraft/src/CallableIsFeatureChunk e9c06388b2767fcc2b65e439a4a9e54e +net/minecraft/src/CallableIsModded ba9905855ecafa2081bbfafb95b7599f +net/minecraft/src/CallableIsServerModded 7124d7ea8e537e962c200856754d7544 +net/minecraft/src/CallableItemName 6fd822efa73793f0320662087459625c +net/minecraft/src/CallableJavaInfo fe19199133f60d2cd28089ace13c7541 +net/minecraft/src/CallableJavaInfo2 e9b1f4cbc762141101108cd00816bdb0 +net/minecraft/src/CallableJVMFlags 9f58d5d1bc9bc8d35ed29c45225be0b8 +net/minecraft/src/CallableLevelDimension 23d44bbaa9797e8267de823b19bf477e +net/minecraft/src/CallableLevelGamemode 25f604f351ca060a337f93fc964ccdba +net/minecraft/src/CallableLevelGenerator 0b9a8e99f97148fd0fb4fca2c37e2b30 +net/minecraft/src/CallableLevelGeneratorOptions ce2243a85ef11988105e855c6459ffc1 +net/minecraft/src/CallableLevelSeed b126b01b97cc842fbd297faf12a7751f +net/minecraft/src/CallableLevelSpawnLocation cc3c36f1e9cbed2396b8faf68afd3d4e +net/minecraft/src/CallableLevelStorageVersion 165911f1d55f8b51d358725efacab970 +net/minecraft/src/CallableLevelTime afeb7271103f3c15292702b8a774cf98 +net/minecraft/src/CallableLevelWeather 871c9c22e062f433b54852c90e37feb0 +net/minecraft/src/CallableLvl1 bed47ba509de11f16fdcd84344c11e14 +net/minecraft/src/CallableLvl2 52b03314ee1fbf3cdc5a5a8f3287e128 +net/minecraft/src/CallableLvl3 7eecbb420f0c83250285f7786a98bbf2 +net/minecraft/src/CallableLWJGLVersion 1ffc4950957156436bf5e12cbe588a59 +net/minecraft/src/CallableMemoryInfo 648143cb9bc85688d62454ca03416454 +net/minecraft/src/CallableMinecraftVersion 7e35b3b9c2393d20f8987e96765fddc2 +net/minecraft/src/CallableModded d99fa4ca7ac155c04a6f9674fa8b2d48 +net/minecraft/src/CallableMouseLocation e2ba769f1ddb8835b49c77dda86a8b02 +net/minecraft/src/CallableMPL1 095dddcb522584aa6e3a8be5cbd6d26e +net/minecraft/src/CallableMPL2 494ca894a706187d54ed7583b2226384 +net/minecraft/src/CallableOSInfo 699ff8cee17b896202a06cf006b120be +net/minecraft/src/CallablePacketClass c6d4a47654b008dbb4a57cef0b9015ae +net/minecraft/src/CallablePacketID d324a3e8593200c12f013d78007129d9 +net/minecraft/src/CallableParticlePositionInfo 58b84cc9d235f0e709458ceb8a75338a +net/minecraft/src/CallableParticleScreenName 2fdbb9ab3649be3226ab01ad17684103 +net/minecraft/src/CallableScreenName 56dd2e5051b6b69aade3f91bb4f13976 +net/minecraft/src/CallableScreenSize b26092be49f265fab3d74452930b9aca +net/minecraft/src/CallableServerMemoryStats 30e6b9bc4583668ba2df1a8efd43fe7e +net/minecraft/src/CallableServerProfiler b6aaff18dfea72567e6d58fe4f34880f +net/minecraft/src/CallableServerType c3ea69f565ff8a4bd61b88447799281c +net/minecraft/src/CallableStructureType 555c1e3502d7bcfffb0a69caf6c4932f +net/minecraft/src/CallableSuspiciousClasses 655d9ee1594180fb333e168f1fae6c00 +net/minecraft/src/CallableTagCompound1 54187023fe8744f5d0a9f37e3321423e +net/minecraft/src/CallableTagCompound2 1a95702ffae30fd795ad50d22d4cd2e9 +net/minecraft/src/CallableTexturePack 92bf9a8c04dc772a5e01ddb4896efe65 +net/minecraft/src/CallableTickingScreenName 8c69fd13085668af02db61aa0162903d +net/minecraft/src/CallableTileEntityData 823b9f1260c71a069163ca693f973477 +net/minecraft/src/CallableTileEntityID 875bcf9c397607beef64c004629fedfc +net/minecraft/src/CallableTileEntityName d8a2dec9cd2657e903712a78a800a801 +net/minecraft/src/CallableType f304b36e567b322920468e2e3781fa3d +net/minecraft/src/CallableType2 9b51656327243d113583d782fd356ef7 +net/minecraft/src/CallableType3 930967cf76b5f6fd7b8f93042b97735e +net/minecraft/src/CallableUpdatingScreenName 6b3d3a43646576f9f6f47d6f7797b1b4 +net/minecraft/src/CanvasCrashReport 288c84ac8777de1f4a869d0459bd2ca4 +net/minecraft/src/CanvasMinecraftApplet 6db10999c4a0683cf37251ecc513c5c8 +net/minecraft/src/CanvasMojangLogo 11da5b3343d9a57cb8ab4c933632b6d1 +net/minecraft/src/ChatAllowedCharacters 7c382ffe70d1dad11b0c3e8087901fb2 +net/minecraft/src/ChatClickData b8676caac378957a992e82ebf4cd6b9d +net/minecraft/src/ChatLine d5b8ae846375d947b9d62fc130405ac2 +net/minecraft/src/ChestItemRenderHelper a9c6597e1d32a974cf02c1c3a4d5927c +net/minecraft/src/Chunk e472c3784333055a1248ec00aeae2a42 +net/minecraft/src/ChunkCache e29c2211f3051c5fc7e63b8cf110f264 +net/minecraft/src/ChunkCoordinates ba17fb4e3dec4b5045e0ca5c8060744f +net/minecraft/src/ChunkCoordIntPair 29f71382407684a527f21486af737e59 +net/minecraft/src/ChunkLoader c69ab281ccfc471965407d7587bfea85 +net/minecraft/src/ChunkPosition 624ec64e74e657fe20940f6273603953 +net/minecraft/src/ChunkProviderClient e92cdb4b9f49421ad40d04cf110e89d3 +net/minecraft/src/ChunkProviderEnd c01a12d698a9f63ca94c7cf3e20052b1 +net/minecraft/src/ChunkProviderFlat c0dd5af48a000924a744d0a429733b6b +net/minecraft/src/ChunkProviderGenerate 253e10f016838f5564cddb38525c0bbd +net/minecraft/src/ChunkProviderHell 1ae57dc5807aff58cd6b63d6fb47402f +net/minecraft/src/ChunkProviderServer 1954092dfc1efa47e505168184ff33dc +net/minecraft/src/ClippingHelper b5290916f94bf87bea48a0c60729abdd +net/minecraft/src/ClippingHelperImpl f2d3bb2b8d7a10ea8fff8b37c203fe2c +net/minecraft/src/CodecMus a7fade3a4832be2c0f8dcd992d390d4b +net/minecraft/src/ColorizerFoliage 42dc09fcf98ebca0ad205b9b5b0791dd +net/minecraft/src/ColorizerGrass 0987dc42344504a932c641f9e479dfd6 +net/minecraft/src/CombatEntry 4a5343e53ca91d873a07a39e77e55f5a +net/minecraft/src/CombatTracker e6fce9d23ac3d94813228829951ed2c8 +net/minecraft/src/CommandBase a61efa71d1c8311587434b70b311942b +net/minecraft/src/CommandClearInventory 7cab6dd34d8fd406b7f6ac0dea6aad75 +net/minecraft/src/CommandDebug b9a1553f2ecf2f33b07508d576ea310b +net/minecraft/src/CommandDefaultGameMode b7031e5f36fe8d9c2b10d7d3bd9aaefa +net/minecraft/src/CommandDifficulty b4d9826c3a46af17d14900a7b3a66499 +net/minecraft/src/CommandEffect 88beab620acdf95ef76f0b391caeae86 +net/minecraft/src/CommandEnchant a19e72f2a31824d6ae300586b83ebe90 +net/minecraft/src/CommandException 54b333b040197c6311f59f246c46aed2 +net/minecraft/src/CommandGameMode 5005021e8be31dee2f7586ec10418cf0 +net/minecraft/src/CommandGameRule 8af24af7be941c4622398fa45b619a12 +net/minecraft/src/CommandGive 0fc7cc8223624d21da186867f81259c2 +net/minecraft/src/CommandHandler 3d127ed1302430dc14cb183ac7d52f85 +net/minecraft/src/CommandHelp 6efbbd8549eab2851d588e46b6e23865 +net/minecraft/src/CommandKill 01b5a86286e1655f35a80c1a6afe16e5 +net/minecraft/src/CommandNotFoundException 78a550879f9f0be89825726caa9d38be +net/minecraft/src/CommandServerBan 211c675301c70c0c6499068e18af19eb +net/minecraft/src/CommandServerBanIp f71ac3d3fb8e27cb4c26579c49ad00ed +net/minecraft/src/CommandServerBanlist 6451cf166758f8ca36abe4d4ab85fcd3 +net/minecraft/src/CommandServerDeop 17bc26ba6b6a53130b381284cfdac9d1 +net/minecraft/src/CommandServerEmote a309f2d4d45c262add9e549e5ac8e20a +net/minecraft/src/CommandServerKick cd0a8e3fcf35c3b6df3b19af9172471c +net/minecraft/src/CommandServerList 07531bc7f2d33d8ce219577baa7a5112 +net/minecraft/src/CommandServerMessage 5684c3f2cd403fe7eeb6c00e24500ca4 +net/minecraft/src/CommandServerOp bb0f35ec50e4940593eea6d7618ad2cb +net/minecraft/src/CommandServerPardon 2700aa4c7e7329293039d9ea21c49218 +net/minecraft/src/CommandServerPardonIp 6746652e2908c47f2936c86dba57efb7 +net/minecraft/src/CommandServerPublishLocal 64bfd429e7e8b27b6fb3e82f3103f2fc +net/minecraft/src/CommandServerSaveAll 2bf3361525e0d7d2c4a40c5844543c3b +net/minecraft/src/CommandServerSaveOff 095f5d4db92c641a8cb8eaeb7101c84f +net/minecraft/src/CommandServerSaveOn ac58dd9249fdb51eee01af568a26ee7f +net/minecraft/src/CommandServerSay 498011ee122545ede523ce3656d05bf3 +net/minecraft/src/CommandServerStop eb7fab274a6e042d7e15e39b21ebeaec +net/minecraft/src/CommandServerTp b732ef5b6c672bc91a2cc8df913ca15e +net/minecraft/src/CommandServerWhitelist a53430b9bb2d9f434def67bc1c751d72 +net/minecraft/src/CommandSetSpawnpoint 3cd1ead3e85281791b37c0ae8b89e696 +net/minecraft/src/CommandShowSeed e6ce4e1a74903064293c9882d10de778 +net/minecraft/src/CommandTime 3be31df48be9a684b9edec7e65703280 +net/minecraft/src/CommandToggleDownfall 1add6fd4e96eaa4ebdffeaae67283852 +net/minecraft/src/CommandWeather 29cf5796a2d013b0607182d435b53238 +net/minecraft/src/CommandXP 32fd553ab7f1f6338ab02979438e72eb +net/minecraft/src/ComparatorClassSorter ad9778439436506a974f7e77e626745c +net/minecraft/src/ComponentMineshaftCorridor 1675a2dee5eb191668ca220620bda983 +net/minecraft/src/ComponentMineshaftCross 6b8eca36219a3aa0583b97ce989f2df8 +net/minecraft/src/ComponentMineshaftRoom 5da7a0abc38304e674075976591dc760 +net/minecraft/src/ComponentMineshaftStairs d150e60a397fe93b3251b3b3289f63a5 +net/minecraft/src/ComponentNetherBridgeCorridor 1bd4094eb7341fae3f03a7ce2155aa25 +net/minecraft/src/ComponentNetherBridgeCorridor2 97a8c097d143ca7f253e321c12678ede +net/minecraft/src/ComponentNetherBridgeCorridor3 139a69110f1a7b55dc6657c4fc6bac21 +net/minecraft/src/ComponentNetherBridgeCorridor4 71390adcc6dfa7df186a6fb5752cd20b +net/minecraft/src/ComponentNetherBridgeCorridor5 8e5b70be52bb160302468d3876611d3d +net/minecraft/src/ComponentNetherBridgeCrossing de8e97fe0832b126ba85b2a393463495 +net/minecraft/src/ComponentNetherBridgeCrossing2 68836e35a007c2a35250bdf22c63abf9 +net/minecraft/src/ComponentNetherBridgeCrossing3 ed9eb85ef2902a5579549b60229f02db +net/minecraft/src/ComponentNetherBridgeEnd 0060e6834b58e721aa04f2af48a98d92 +net/minecraft/src/ComponentNetherBridgeEntrance e211959bff9268bd50c52da443d31e48 +net/minecraft/src/ComponentNetherBridgeNetherStalkRoom 7a5ac8e11a5ec33cdaf2927b8c748e4b +net/minecraft/src/ComponentNetherBridgePiece 34b793d1f0260f4711e36304e78cb516 +net/minecraft/src/ComponentNetherBridgeStairs f4696f71bbfb3accfd19d50795f01f0d +net/minecraft/src/ComponentNetherBridgeStartPiece 86398e0f7edcb89ef36c7f19ee391291 +net/minecraft/src/ComponentNetherBridgeStraight 89906c75b2b8c28df66e5c2de5996748 +net/minecraft/src/ComponentNetherBridgeThrone d699b876a4ef5be41b56087901ff9855 +net/minecraft/src/ComponentScatteredFeature 9201fe23a441c4430c478ee95ceb31b7 +net/minecraft/src/ComponentScatteredFeatureDesertPyramid 3f7d76d4f5fc87ac9e4cd56521402ceb +net/minecraft/src/ComponentScatteredFeatureJunglePyramid e10eb044e073259b169734ff26fb642d +net/minecraft/src/ComponentScatteredFeaturePieces2 ee46f684f86bdd8ce56a89113784047d +net/minecraft/src/ComponentScatteredFeatureSwampHut 43d5837573f7a6a2fc0f908042dbd0d1 +net/minecraft/src/ComponentStronghold 09a657399cfbfdc62f8b746860199d5d +net/minecraft/src/ComponentStrongholdChestCorridor b9a6666980d04bdc68ba6a1df80be08b +net/minecraft/src/ComponentStrongholdCorridor 445592bd54466de2abbcfd3291a925f4 +net/minecraft/src/ComponentStrongholdCrossing 9c197557b20e30ceda12814a4c97e6f0 +net/minecraft/src/ComponentStrongholdLeftTurn b2b5d313788cd4411909b327ee84285d +net/minecraft/src/ComponentStrongholdLibrary fd9f62352bc6d31c7a8a7a070b4dceb7 +net/minecraft/src/ComponentStrongholdPortalRoom 6de1cc77e0613958d10727fed4fc2d04 +net/minecraft/src/ComponentStrongholdPrison 95edd46690aa714bb6b8a12d93004e71 +net/minecraft/src/ComponentStrongholdRightTurn c05fb482523ff48aa3fefd3b447587b2 +net/minecraft/src/ComponentStrongholdRoomCrossing c4405b136df6095a8abc452a3046728b +net/minecraft/src/ComponentStrongholdStairs 41a0d7566188cd97cb8e74141f4a0b9c +net/minecraft/src/ComponentStrongholdStairs2 67f9bc6411e00e48f1194f3c3bd87d71 +net/minecraft/src/ComponentStrongholdStairsStraight 88f79ec8b722a10f533da2e08f9ffc0e +net/minecraft/src/ComponentStrongholdStraight 79aa0431840156fced599ce31b217a25 +net/minecraft/src/ComponentVillage fade10907a69aeb254e6eeb4dee441fc +net/minecraft/src/ComponentVillageChurch 61af806d6bf19a5395e440fa9f771848 +net/minecraft/src/ComponentVillageField 389c82a3de43bc390bab1ccb1dd927bb +net/minecraft/src/ComponentVillageField2 8f0ccee31457f95786c121702d3df976 +net/minecraft/src/ComponentVillageHall d8d0589a3cf226b4192b0d37082713eb +net/minecraft/src/ComponentVillageHouse1 b50f779e4bd81892b27e9fabd247325f +net/minecraft/src/ComponentVillageHouse2 3f6b1e7fc3877f6a152fb5d16b61c5b0 +net/minecraft/src/ComponentVillageHouse3 5c0b0b8bec18fbe3cf6c3be258dd7892 +net/minecraft/src/ComponentVillageHouse4_Garden fb81ab8a2ea9a24cfb387c2d827c7e66 +net/minecraft/src/ComponentVillagePathGen 2d5e999530b57a217ce0ae581099decc +net/minecraft/src/ComponentVillageRoadPiece 2af33ff53fe38ea34a1409efc29517fa +net/minecraft/src/ComponentVillageStartPiece a5ec6fb3887f97b3a8aec981e68ac3ca +net/minecraft/src/ComponentVillageTorch d1f4354c6519555133aa0cf7e44f20ef +net/minecraft/src/ComponentVillageWell e3bc992a1f0f15979b758bd0716bec60 +net/minecraft/src/ComponentVillageWoodHut 5a2ed2c7f4f9f52d353810cb7d385c88 +net/minecraft/src/CompressedStreamTools 9c1467692ce2a3c418cdc8f066a5e5e9 +net/minecraft/src/Container 4a2d70d5a9730831ae778d043c292602 +net/minecraft/src/ContainerBeacon cffafc3a85014e69d18fb8b911e28ae7 +net/minecraft/src/ContainerBrewingStand 5db3f4e4a1d42647070f639f6a3f151c +net/minecraft/src/ContainerChest e28d53b898aa34a5dff3d452d470d9ce +net/minecraft/src/ContainerCreative dd68bfa46619111fa0e36c1249ef86d4 +net/minecraft/src/ContainerDispenser 0497e9a1d9a26fb22fb4c571d0c93044 +net/minecraft/src/ContainerEnchantment fd62afd24856f398511347e6d38d7423 +net/minecraft/src/ContainerFurnace 73c237fce725c852878a563f40bd91ce +net/minecraft/src/ContainerHopper 27a48b03675c7cf8605aa9ca78f5f37d +net/minecraft/src/ContainerMerchant 8d846aabd3fb98f6e9f7549035a1454f +net/minecraft/src/ContainerPlayer 018b357ae5a6ecbf97f56156b28f1c8b +net/minecraft/src/ContainerRepair e65f0e91d4dcf9d3685fa080c1653463 +net/minecraft/src/ContainerSheep fddc1855f50629b9eaee2110a30b5593 +net/minecraft/src/ContainerWorkbench bbf43904a51a339098f5df6d493375b3 +net/minecraft/src/ConvertingProgressUpdate f410b06ef4f8090d56ecd1305dbc3ba0 +net/minecraft/src/CraftingManager fa9c50e6c6410d7a1394d06895b66a4b +net/minecraft/src/CrashReport f06f69e44c5ab523d0b5889c77e1d8f7 +net/minecraft/src/CrashReportCategory 26a2a5ec523174229f2cc331fdda62a5 +net/minecraft/src/CrashReportCategoryEntry 0f2056824c24aa729b88d395d9cd15d2 +net/minecraft/src/CreativeCrafting be54dc02dc63ab15dd3fea0a89e9cc52 +net/minecraft/src/CreativeTabBlock 85aa470c098f7d5db3ec07f00e47edc0 +net/minecraft/src/CreativeTabBrewing 04f230c9ac4e79b6b3903822a62f6d21 +net/minecraft/src/CreativeTabCombat 9ed3eacf48da8ef796701850fffffa4a +net/minecraft/src/CreativeTabDeco 9828c38e864cf7d45b931c306568f29a +net/minecraft/src/CreativeTabFood 9c4d75ed5b72904dfb163ea5fc0b03c2 +net/minecraft/src/CreativeTabInventory 9beb99874da618bcf996431e767c0240 +net/minecraft/src/CreativeTabMaterial 9f638f85cb9a61a16cc7e5fb8408255b +net/minecraft/src/CreativeTabMisc e6454ac9a89f0eec36aeae1ecf1d9f9b +net/minecraft/src/CreativeTabRedstone c7d54d5524c3fd69bcf0403fe19ac721 +net/minecraft/src/CreativeTabs 77c1e7dc12411735be68cf1fae810099 +net/minecraft/src/CreativeTabSearch 3a1aadea8015141d051dd1aec888ab03 +net/minecraft/src/CreativeTabTools 65f2286869d0a324001892a801c656e5 +net/minecraft/src/CreativeTabTransport 15349ad1d035ac5236ae07a5a62eb4a6 +net/minecraft/src/CryptManager 1b98bf3bcba577e2b4cfdb3e940c54b9 +net/minecraft/src/DamageSource af70dc84e13a782270e2c9debaf72240 +net/minecraft/src/DataWatcher dd95b1c0138e8f4c4ffd84ff92e58775 +net/minecraft/src/DedicatedPlayerList 27bf46f8fa574385211d64dc776a65ea +net/minecraft/src/DedicatedServer 4efec70495a31c9d51a4c4af99dbba66 +net/minecraft/src/DedicatedServerCommandThread 7318afadbcc66b30882b016ca551709c +net/minecraft/src/DedicatedServerListenThread d2dabbad25c455d71a15f3877f2b87e0 +net/minecraft/src/DedicatedServerSleepThread a5cdb9205507008543852be9e84a325b +net/minecraft/src/DemoWorldManager 2fbf0eea639db9bbc3364fa15e150f86 +net/minecraft/src/DemoWorldServer ef59d4f358a9c1258de4e2169fb491c4 +net/minecraft/src/DerivedWorldInfo d9b338544ec7388e5a867fe25b44e921 +net/minecraft/src/DestroyBlockProgress 9867e306541d96a5804273139cb935c8 +net/minecraft/src/Direction cc71724f5fdb1c34a266c933faf2681b +net/minecraft/src/DispenserBehaviorArrow 92894788eafeaf6324bd41ff07095b4f +net/minecraft/src/DispenserBehaviorBoat b20be96afdd63ec4ef844b372fe097c9 +net/minecraft/src/DispenserBehaviorDye 59646b4513f0164ba334303991a19b37 +net/minecraft/src/DispenserBehaviorEgg bd11a88a52072e17c78245773b2f4960 +net/minecraft/src/DispenserBehaviorEmptyBucket a020734b1c941162e18a7c0f22231abb +net/minecraft/src/DispenserBehaviorExperience 8139f083e8f7495cfcb90e43ecb28070 +net/minecraft/src/DispenserBehaviorFilledBucket 2c2fafcf7861e187fc00a9f2e18a4018 +net/minecraft/src/DispenserBehaviorFire fd4507fbf6713d566876635d4ceb57c7 +net/minecraft/src/DispenserBehaviorFireball 1fbdfc3c10ab3213d3b8d7347529ff4e +net/minecraft/src/DispenserBehaviorFireworks 6a342f599e55f99d61f87fb8175323e4 +net/minecraft/src/DispenserBehaviorMobEgg 8493dfaccfe0af514287183ad26d0175 +net/minecraft/src/DispenserBehaviorPotion afd8a2d76367be6aa44f83be0bd032d7 +net/minecraft/src/DispenserBehaviorPotionProjectile f844fb1d17fefc2e4608b5b9ad1f4e42 +net/minecraft/src/DispenserBehaviors 5a218439e3b720cabd4018228ed15194 +net/minecraft/src/DispenserBehaviorSnowball 1bcbf3775cc05070af8222fd295cad93 +net/minecraft/src/DispenserBehaviorTNT a670bc94520b86395e7143bd16191f32 +net/minecraft/src/EffectRenderer f6a2bb540b653585446b16f3d3942eef +net/minecraft/src/Empty3 f61f5c918ce01df2d15991f81b2a40fa +net/minecraft/src/EmptyChunk f712aace8b48e8245572246f745141af +net/minecraft/src/Enchantment ccd938864fab768087eee59d7fa65fd6 +net/minecraft/src/EnchantmentArrowDamage 9975d5d6c8659e2982bae123f31ee27b +net/minecraft/src/EnchantmentArrowFire 47cb3064b09b641eb3ac45db86bd5b49 +net/minecraft/src/EnchantmentArrowInfinite 7c89f68e42c1840248821fe8402af228 +net/minecraft/src/EnchantmentArrowKnockback 7a5645f5c1a1a3efdf5ed8fd1e7afe89 +net/minecraft/src/EnchantmentDamage ab6c4da491caf49c32921385ed1b68c4 +net/minecraft/src/EnchantmentData 2542f4c2bced7de21d191818559a012a +net/minecraft/src/EnchantmentDigging 39ed6172e38f4c242bce0d094588c81d +net/minecraft/src/EnchantmentDurability 290e2b60a2514cd22f8e9b34f0b3f7a2 +net/minecraft/src/EnchantmentFireAspect ffe9e2dbf79ce19e0cc037fec0d49235 +net/minecraft/src/EnchantmentHelper 5db1a35517e21902206c840dd139890c +net/minecraft/src/EnchantmentKnockback ad9963b7f3e7260f801959ef8ff30a6a +net/minecraft/src/EnchantmentLootBonus f84fd2b9c8a34303ccb19c01989a9897 +net/minecraft/src/EnchantmentModifierDamage 3cd7b458c90261c35379c99b550c3e50 +net/minecraft/src/EnchantmentModifierLiving 225fdd40ec08299169e7a45303d9cd45 +net/minecraft/src/EnchantmentNameParts d30e55c53a7ac16d0530c53cb8d37ad7 +net/minecraft/src/EnchantmentOxygen c3a07c9ebd59c4ce758671c8248bf9ea +net/minecraft/src/EnchantmentProtection c6378283f77a26495a6e4eb9ede13b8a +net/minecraft/src/EnchantmentThorns 9de5eaca7a398c9ac71d4500865648b5 +net/minecraft/src/EnchantmentUntouching 8dd71f60f98619c52302cef0229521ec +net/minecraft/src/EnchantmentWaterWorker 897d07b54e447365f714358b04fb9a7d +net/minecraft/src/Entity fe90da6e411a42a09f10bd53c175c440 +net/minecraft/src/EntityAgeable 197332d4eb89551063f744de7666891c +net/minecraft/src/EntityAIArrowAttack 3539cf22ee499021c11a91f955202964 +net/minecraft/src/EntityAIAttackOnCollide 2fc969638e4335c35e1ff4771bf7166b +net/minecraft/src/EntityAIAvoidEntity 3fa1dbea500706eaf0dd227dd6ca5e78 +net/minecraft/src/EntityAIAvoidEntitySelector c190f233fa0cb2b23c81ce8753924914 +net/minecraft/src/EntityAIBase 94667f4169586d14332acf9a918eaecc +net/minecraft/src/EntityAIBeg 5fb7ce641d6b615e911332abd9788e5e +net/minecraft/src/EntityAIBreakDoor 2dc1796f1875c5dc4d47e0f08fa1a1e4 +net/minecraft/src/EntityAIControlledByPlayer bb788ee94b6cae9a95d97b539afe089a +net/minecraft/src/EntityAICreeperSwell 0c46b1d8b263e29e266a6251f7ee1b44 +net/minecraft/src/EntityAIDefendVillage 7dc6ded999e11e1f53698b40b4a95c7f +net/minecraft/src/EntityAIDoorInteract df4631af97b8a680af691de9e80b3019 +net/minecraft/src/EntityAIEatGrass cfb442d658d6e607d14d43454572fe04 +net/minecraft/src/EntityAIFleeSun ab7d97468507732bc790b0c8a04db937 +net/minecraft/src/EntityAIFollowGolem 5637c25350588bd5ae07b952f7d90c2c +net/minecraft/src/EntityAIFollowOwner 55ed5264963509483914cf4586cfd4e2 +net/minecraft/src/EntityAIFollowParent 6b273c36035eff7199ae324787f742ae +net/minecraft/src/EntityAIHurtByTarget e5322cf640739b929f4f0d88688b0be7 +net/minecraft/src/EntityAILeapAtTarget 4249b68fbb00ce644cb7fb4035376696 +net/minecraft/src/EntityAILookAtTradePlayer cf350eef80c496047a69af329944a5ca +net/minecraft/src/EntityAILookAtVillager 484da9150adea2b0ac37ca2f6ffbc018 +net/minecraft/src/EntityAILookIdle e8e5ddbf7d978838337912903ce523f0 +net/minecraft/src/EntityAIMate 516e978b099d0be9de3769fc44aadf11 +net/minecraft/src/EntityAIMoveIndoors 4257af59997417ec90ba8cd04f86b4c6 +net/minecraft/src/EntityAIMoveThroughVillage 0f5b6e9f709b444259a4f461f96626c3 +net/minecraft/src/EntityAIMoveTowardsTarget d551a45e5808b48d6714d494bc751453 +net/minecraft/src/EntityAIMoveTwardsRestriction a89cb1828f6477b187f3f66faa6d09f9 +net/minecraft/src/EntityAINearestAttackableTarget c1735fd8878b659ff6f03c172bc073e3 +net/minecraft/src/EntityAINearestAttackableTargetSorter 56e3f33f91e2668661b89b81c428aae4 +net/minecraft/src/EntityAIOcelotAttack b0c60a9fd467069835d3a03810c34bbf +net/minecraft/src/EntityAIOcelotSit 4158c3dfbda8215d776209060bdaf53b +net/minecraft/src/EntityAIOpenDoor 72473fc2e64c89b51a5f0eb6f6f3cbd5 +net/minecraft/src/EntityAIOwnerHurtByTarget 60ca8da97e8546099127a066e1922030 +net/minecraft/src/EntityAIOwnerHurtTarget 5bd6c7700808a826843ff94e0c02104e +net/minecraft/src/EntityAIPanic 2fa5186184b20f097129d22933b10678 +net/minecraft/src/EntityAIPlay 45ec9e9d6737758d151e2296d3dba900 +net/minecraft/src/EntityAIRestrictOpenDoor 333af0c9518873569afe0565830c3921 +net/minecraft/src/EntityAIRestrictSun 846d085a97801c7768f541776dffe94a +net/minecraft/src/EntityAISit f1c583ccacebba6004f335ae1b21a1d9 +net/minecraft/src/EntityAISwimming b7d1101b7918da7654c707c6ea6549f6 +net/minecraft/src/EntityAITarget 81c40c928c77bf2ac5d69b9dc75449fd +net/minecraft/src/EntityAITargetNonTamed 6ac32a5c41a06b90a7d8ca426fc4a9d4 +net/minecraft/src/EntityAITaskEntry 472ca63e4072fc21370c3650d9310beb +net/minecraft/src/EntityAITasks d531ffa57d91248f89e84fe8c5de688a +net/minecraft/src/EntityAITempt 742e4b47433fe04686a1acfece44f26b +net/minecraft/src/EntityAITradePlayer 10d462f6d5ef2ae6ade4f401ec03161f +net/minecraft/src/EntityAIVillagerMate 4fa16ad8f8a8b9712b303745993521b7 +net/minecraft/src/EntityAIWander fab4cd8086ebb6ce522ac2ca50ea68fa +net/minecraft/src/EntityAIWatchClosest 8cfef66b3e18d6c9375e722e8627489f +net/minecraft/src/EntityAIWatchClosest2 273cc4c2fcf602adbc23c6c421d028ce +net/minecraft/src/EntityAmbientCreature 5365565b9ca173f2f79ce3cfbb206ece +net/minecraft/src/EntityAnimal a8b4945e132f50f58d7bc0c8d1527a3d +net/minecraft/src/EntityArrow a32f0afca840a64338b1378842fd652c +net/minecraft/src/EntityAuraFX cc7701c8e0ecd9ab1f412f37c734f9e2 +net/minecraft/src/EntityBat 162556f52ac3e05498c5e37b2fd8eb5c +net/minecraft/src/EntityBlaze f8797f0ab57db72768d1658d00a9579a +net/minecraft/src/EntityBoat 988b5855b59475acd3fab66b24f1327d +net/minecraft/src/EntityBodyHelper e843742464d36a3d85993dce93010018 +net/minecraft/src/EntityBreakingFX 87a2674d96913fee31846952af688a75 +net/minecraft/src/EntityBubbleFX fb3903216335c8ba1c48d3402887179f +net/minecraft/src/EntityCaveSpider 715562b4ed7cd0f1bf69c5be1852616e +net/minecraft/src/EntityChicken bb97a9e41a7eb0f96247577524d8f99f +net/minecraft/src/EntityClientPlayerMP a2ecae5e27fc7a58f406d35f728751c6 +net/minecraft/src/EntityCloudFX 00c147539366a9c838cf8c68281f0721 +net/minecraft/src/EntityCow 26a37e070253721213d1c3d7261565cc +net/minecraft/src/EntityCreature dd2c48da76e972deb70ed2e7e4b799ff +net/minecraft/src/EntityCreeper 25e5c0dc019609ed5e54bf866b02fcb6 +net/minecraft/src/EntityCrit2FX cf08f56458b2296017bbaddd49194dee +net/minecraft/src/EntityCritFX b64cea4e69b13bcfb4f367cf60f54647 +net/minecraft/src/EntityDamageSource c06c37a555b67070fa1dcee9aac379e7 +net/minecraft/src/EntityDamageSourceIndirect 87397212aacd9c2afe99de1afe652fd4 +net/minecraft/src/EntityDiggingFX 0560767398630e2f8f8f8e917d99d967 +net/minecraft/src/EntityDragon 80922fb352e5cca5eb943bf8c26c9b4e +net/minecraft/src/EntityDragonPart d5d65159857b497620babb0bc9e8016f +net/minecraft/src/EntityDropParticleFX c354a4af5f2acb78b688e40435b3c356 +net/minecraft/src/EntityEgg 28f56fe4ef2aaf9a67ad027d80ed6fdc +net/minecraft/src/EntityEggInfo 2bf7ddef1bd07df8fea8cf740f8ee640 +net/minecraft/src/EntityEnchantmentTableParticleFX 6a3831e4d0399ff657c7c5192d5ba177 +net/minecraft/src/EntityEnderCrystal 37a2881a1d4aff9a0ca1d172656fa781 +net/minecraft/src/EntityEnderEye a51bafaea46070d8ef4a8f6015ca5500 +net/minecraft/src/EntityEnderman 18f5e6f3685049b76a6b97c2153d26ec +net/minecraft/src/EntityEnderPearl e08da30b1b81166759b65279a9200133 +net/minecraft/src/EntityExpBottle b1e83e912e60d522862b56626fe9e55b +net/minecraft/src/EntityExplodeFX bb2dc69792aa7c6c2412edfdb5070ea2 +net/minecraft/src/EntityFallingSand 91b0753c45c904a946f8db5f519f8f3e +net/minecraft/src/EntityFireball 25f81233ecca85040a6b93768ccdee66 +net/minecraft/src/EntityFireworkOverlayFX 9ea6397e20ba6abac4cf63a49da251a3 +net/minecraft/src/EntityFireworkRocket 070f491e9ec5a6cb6da45713e8b52d66 +net/minecraft/src/EntityFireworkSparkFX d9a896aef29e9d0f1f821fd751abfe6c +net/minecraft/src/EntityFireworkStarterFX facba28efe66748586d4e66a5ac8882d +net/minecraft/src/EntityFishHook 2c52235c31d98144076b5d0884c4df3d +net/minecraft/src/EntityFlameFX 7f703dc8d28459b616e7287c25cb3fcb +net/minecraft/src/EntityFlying 3ad01247f04d2594b8c91fdeb4c12b42 +net/minecraft/src/EntityFootStepFX a55767f4bf6ede1b5b4ec430de5834dd +net/minecraft/src/EntityFX 9d9ed10ea41ac6fbaae05362b4568aa1 +net/minecraft/src/EntityGhast f61e82bdcde98eec5321bed9d37d0051 +net/minecraft/src/EntityGiantZombie ae64ce511cb13c1ab36c2cb7b0e3da2e +net/minecraft/src/EntityGolem 0e5a557655517a3c0cbd6becc625f68b +net/minecraft/src/EntityHanging 985437e7db622aa7b830f3cd3eb82908 +net/minecraft/src/EntityHeartFX c5d2bf9987f4e33bc44cc5898de62876 +net/minecraft/src/EntityHugeExplodeFX 715ecdb1a6000013f9c97f6d49d3f7f3 +net/minecraft/src/EntityIronGolem a5eaa06915f113b91c20ec806a762ff4 +net/minecraft/src/EntityItem 1b473cc4a9da359ba1df7704ee50d40b +net/minecraft/src/EntityItemFrame bb9dada738d429ac83de205bfe905bf7 +net/minecraft/src/EntityJumpHelper 349ce3d7fd931cc465a6ddbcb4c168de +net/minecraft/src/EntityLargeExplodeFX c270eb383de661e932394de1e642707d +net/minecraft/src/EntityLargeFireball ee61adf3c47e3bf4e1ac1d37400b268e +net/minecraft/src/EntityLavaFX db283069b9dd8c8e4587520fed1d7993 +net/minecraft/src/EntityLightningBolt c61997ba673fe0f0f2546294c4e7790f +net/minecraft/src/EntityList 0bc020cbdcfb2ec26f998245ac7c5b82 +net/minecraft/src/EntityLiving 850836897730e3ddd338bd70949d4368 +net/minecraft/src/EntityLookHelper b3c93e5968f5768fc94e5d438dee7a7c +net/minecraft/src/EntityMagmaCube 9ae4d48130c132cb593ac9a31acc32c6 +net/minecraft/src/EntityMinecart 19735e8cab5d480161b412a4377994e5 +net/minecraft/src/EntityMinecartChest f209ba61f54fb0bef0801cce49907d79 +net/minecraft/src/EntityMinecartContainer 2a260bc631e4540c1663e9ab3499caee +net/minecraft/src/EntityMinecartEmpty f1d7c64beeec28201b2006b20033ef06 +net/minecraft/src/EntityMinecartFurnace d9f37c9d640156c924a0cb8fcf645733 +net/minecraft/src/EntityMinecartHopper a3099f6736ddf0604911cad08877bac5 +net/minecraft/src/EntityMinecartMobSpawner 7f11e408a4ba691cf58b3391a98be283 +net/minecraft/src/EntityMinecartMobSpawnerLogic b28c47053a78e40c1940a15ddb5fa84f +net/minecraft/src/EntityMinecartTNT 04eb10612057036dd38899bfe4ef8094 +net/minecraft/src/EntityMob ca15a29289912497ec55e31ffad3fb18 +net/minecraft/src/EntityMooshroom a4a3a712e9fc3828fbae74789c1fd9a2 +net/minecraft/src/EntityMoveHelper 230d602cec285c90c7e7d0a033e201b1 +net/minecraft/src/EntityNoteFX 981b3b73ff19de46c826e8883eaa741b +net/minecraft/src/EntityOcelot f35d44eaac6c50ceb0e2b2468050411c +net/minecraft/src/EntityOtherPlayerMP 3ce499645d500252788ad8cef5b9717d +net/minecraft/src/EntityPainting cdf5ed796b2208233503a66613019d43 +net/minecraft/src/EntityPickupFX d6876d353744a6b7fd844c31ef88fc51 +net/minecraft/src/EntityPig 8b14d0aa0492c777fc4c037075dc3bc0 +net/minecraft/src/EntityPigZombie 953539d46c609bf7bd4fec5c9a66769e +net/minecraft/src/EntityPlayer 8de16c3e7881d28962537d48488865db +net/minecraft/src/EntityPlayerMP 778446ccc60ab05a3b09de0a4c0e6b3f +net/minecraft/src/EntityPlayerSP 6553e424bbf9ce9edd3a59de1c48f4a5 +net/minecraft/src/EntityPortalFX 58b55482efe78c668aa019210153b7aa +net/minecraft/src/EntityPotion 4e96e3c3ed468de914a5aa7b6e59c10a +net/minecraft/src/EntityRainFX 5ce614d9b6f2fd3f739c0eab7b7bfd85 +net/minecraft/src/EntityReddustFX 24a7b5664adb0c8df180fc2c6023ad6d +net/minecraft/src/EntityRenderer 4879024ad7392bfafa3543617747671d +net/minecraft/src/EntitySelectorAlive c7bb9823dfb3206c07332a3e8d65bbf4 +net/minecraft/src/EntitySelectorArmoredMob ef1effa9891f786b3057c3e31fbdc940 +net/minecraft/src/EntitySelectorInventory 39e70d6b5cc8c2c3d87e6691be7d1ed9 +net/minecraft/src/EntitySenses d9542c5658c0e42457e25ba5d42995e1 +net/minecraft/src/EntitySheep 438f3edf68c492c96ace32229287259b +net/minecraft/src/EntitySilverfish 6375a0ed455d4e3546064c5c6b5d3ffa +net/minecraft/src/EntitySkeleton ae87c2b4c200383631cb9eadf7a5d778 +net/minecraft/src/EntitySlime 6de3c1b240ef0f5787d2f40090823de1 +net/minecraft/src/EntitySmallFireball a8b31a95caeeb66db762b91eeba23b95 +net/minecraft/src/EntitySmokeFX f3a4256cedc358c5038d99ea1dff1f73 +net/minecraft/src/EntitySnowball 48166d5cf3cb56d4fbb2059894b8b83c +net/minecraft/src/EntitySnowman 7414628c7dc021a4c64710aa9ba8dd76 +net/minecraft/src/EntitySnowShovelFX 2a3e6a96c574378418c213129774a583 +net/minecraft/src/EntitySorter 63e6992d894a8f204549db9570a0a4d7 +net/minecraft/src/EntitySpellParticleFX ebb099791869a5ed139ac415fb51f1ac +net/minecraft/src/EntitySpider f3a53296e398da0d8087b69ea582d4b2 +net/minecraft/src/EntitySplashFX dbd6f5d93dc1e758656056fdd31bd0c3 +net/minecraft/src/EntitySquid de803c8274d7ffac32514bd230c02b13 +net/minecraft/src/EntitySuspendFX c92c7897f19492d99b812c4c4e0f6abb +net/minecraft/src/EntityTameable 8f39ebd1a48cba47cd22b6fc78d640b5 +net/minecraft/src/EntityThrowable 468166e9a3d1566640c362bdbcf25134 +net/minecraft/src/EntityTNTPrimed bd91206248e886a7c948fa96d31ab44d +net/minecraft/src/EntityTracker 128fa109bc9dea2789f899cf8cec7b83 +net/minecraft/src/EntityTrackerEntry 4b4904f24062157a2a88c476334099c2 +net/minecraft/src/EntityVillager 3b800dab095a80d18c2c5241ff11eca4 +net/minecraft/src/EntityWaterMob 1f65eda25c259a2c0dee26c68a630e15 +net/minecraft/src/EntityWeatherEffect be46f8c9fee0ca445e23435861237c09 +net/minecraft/src/EntityWitch 38f3137692dc553c99bf58e56221d070 +net/minecraft/src/EntityWither 3d2f919c8a8b30736382e627b5b61f23 +net/minecraft/src/EntityWitherAttackFilter 0740963a33f3135511eda7e4b4102b94 +net/minecraft/src/EntityWitherSkull 0cf549b8c6ff4c11fea8e94ae88eba4d +net/minecraft/src/EntityWolf 7b113d45ad18b1da58c2360444501781 +net/minecraft/src/EntityXPOrb 3b294d3ad506406b8eab1206d020cbd7 +net/minecraft/src/EntityZombie 988c0a94834252f87d32b844d9a98a85 +net/minecraft/src/EnumAction 045d3b8b826aed639080102359e05530 +net/minecraft/src/EnumArmorMaterial b6c03d02961696c254aa2d313d974c87 +net/minecraft/src/EnumArt d62805a34f88e1b082d80787e1b9f634 +net/minecraft/src/EnumChatFormatting 8d6249f0332c8c0329ed1f6f545e9f74 +net/minecraft/src/EnumCreatureAttribute e3d84140796218b91342311ad6400510 +net/minecraft/src/EnumCreatureType 492736892401aaf2c36e38dcff7ee3cc +net/minecraft/src/EnumDoor 1830b95fa8a0d6bf541905a8c89a8500 +net/minecraft/src/EnumDoorHelper eaca08b43b721e9d9b912be6c9a7bf3c +net/minecraft/src/EnumEnchantmentType b6d0a965ad8f2544ab60b5bc8384d319 +net/minecraft/src/EnumEntitySize 79325ea8c70190b30b1c3b8cbba977d7 +net/minecraft/src/EnumEntitySizeHelper c1748ed970743b94b8c018a65361a50a +net/minecraft/src/EnumFacing 0ebfbdaf92edcaaa02ed08e7c7684a00 +net/minecraft/src/EnumGameType 26775a3c795a43223a0539c5459402fe +net/minecraft/src/EnumMobType f078f2e6ec5ad06b41592472b105148a +net/minecraft/src/EnumMovingObjectType 09f737ca6009d2b29aa0ab0be34e4a23 +net/minecraft/src/EnumOptions 327b0d01ddd129dd0009c2e1fe25fb3e +net/minecraft/src/EnumOptionsHelper df1529fed7827507c3c6562f9065500c +net/minecraft/src/EnumOS c7220771f6a98de1d1556023c915f7f2 +net/minecraft/src/EnumOSHelper 2accf3c9d8409f19f938f6d7eb569255 +net/minecraft/src/EnumRarity 259fb20d1e73fc428dc841d533c5a494 +net/minecraft/src/EnumSkyBlock c676fb04205d7d71403fcfcd10959b8d +net/minecraft/src/EnumStatus 35145d4da0a77a38bf5122cc0a167786 +net/minecraft/src/EnumToolMaterial 67fb1ff2a9a4e9f5c7fbf08f3d37e8e1 +net/minecraft/src/ExceptionMcoHttp 96e84895d2d5a222cb26995c20193170 +net/minecraft/src/ExceptionMcoService 97f9f77f63eef3839c804756ce90890e +net/minecraft/src/ExceptionRetryCall 9f1c5613bd7b217bf270fea3970ca18b +net/minecraft/src/Explosion 16a43d958ad317e6ccccd2a1581f128d +net/minecraft/src/ExtendedBlockStorage 1d61cd1cb2a1c7d5156662b1c23418ee +net/minecraft/src/Facing 0e7bafdee90db772728f8113292b5b63 +net/minecraft/src/FilterIMob ea54f4266093278aaf9f096050ef336b +net/minecraft/src/FlatGeneratorInfo da1ff461a8e72746a9ef47eab7a6ceab +net/minecraft/src/FlatLayerInfo 2ffe2b1459a702d70da5c1ce62e786e7 +net/minecraft/src/FontRenderer 2e3da291ed0e2a3d1b467b6a14fa251d +net/minecraft/src/FoodStats 4ced76795f89df02fd2cfc6a5c0fe8f9 +net/minecraft/src/Frustrum da2466bbd0fc8b6a1feb7635b3084e86 +net/minecraft/src/FurnaceRecipes 25e8108bd745509a7f6d4c5106a28a92 +net/minecraft/src/GameRules b8af58e2dea1ca570eeef00bc5038191 +net/minecraft/src/GameRuleValue c0c542175e26761cfe988a05378ec8f5 +net/minecraft/src/GameSettings da319fa0b27b8a190a5d746dd298b490 +net/minecraft/src/GameWindowListener 118e81f072c61ae791c6a18f8fca0220 +net/minecraft/src/GenLayer 4533e6d4cb962190adf635818e511011 +net/minecraft/src/GenLayerAddIsland 6461bd800d508a0348825163a53c20f6 +net/minecraft/src/GenLayerAddMushroomIsland 639a5d5739d3c3f2b6d2f297b7e64798 +net/minecraft/src/GenLayerAddSnow 0020d9ee92b3a3d11b3a9ed66a8bb3d1 +net/minecraft/src/GenLayerBiome 3e6694879904c8e998ddc414e0cae381 +net/minecraft/src/GenLayerFuzzyZoom 347dbcca928bc44105b0c1318820e4c9 +net/minecraft/src/GenLayerHills a8a7a30844bbb72f9e9beae2720283a1 +net/minecraft/src/GenLayerIsland fe77cb55014e24ee61c84b6f0baa0edd +net/minecraft/src/GenLayerRiver 1f7025eb7e987832dd0464e1a68ac371 +net/minecraft/src/GenLayerRiverInit f0b9038e568992865385b43d86b5b2a5 +net/minecraft/src/GenLayerRiverMix 9c5734ab6b3f7f15396f7651bb11edc5 +net/minecraft/src/GenLayerShore b193cf9d32f26fa674825030276d395c +net/minecraft/src/GenLayerSmooth 7a16f9a92aefaaf22746a03d4f4004ff +net/minecraft/src/GenLayerSwampRivers 1748b703bd751fee47cfbd3f8d2c7b54 +net/minecraft/src/GenLayerVoronoiZoom be97fbd4dcb12223322a7c84133202f1 +net/minecraft/src/GenLayerZoom 7514354b458931bb1ca44a125aa698e1 +net/minecraft/src/GLAllocation d51506ebd1ebdc0d7ad1c8ec7ca039f1 +net/minecraft/src/Gui ef0cf1779218c5dd817b12df053da955 +net/minecraft/src/GuiAchievement a8bfb916684826724d9a3babe7d9a9a1 +net/minecraft/src/GuiAchievements e915cef7029e8148316f1215cd9e3d47 +net/minecraft/src/GuiBeacon 7632e67e9f18bb6362dd26013b44312d +net/minecraft/src/GuiBeaconButton c63215aa92f6d39ab90e82567c0819b9 +net/minecraft/src/GuiBeaconButtonCancel 8f65c6a28c85780bce00ec8010d0e8e0 +net/minecraft/src/GuiBeaconButtonConfirm 3bd4053b0088a03bb50aa2e8b3380326 +net/minecraft/src/GuiBeaconButtonPower 5b1d598dc949c737da16a03e5ee88803 +net/minecraft/src/GuiBrewingStand 48aa828934aed7ba2cb783d1df777cf8 +net/minecraft/src/GuiButton a6565d55c07c633f5bf665dc8c8a60a7 +net/minecraft/src/GuiButtonLanguage 617d021a719ac7d2c2e268c94ce448cc +net/minecraft/src/GuiButtonLink e8cd6e13e7bd5a633b66744e869870db +net/minecraft/src/GuiButtonMerchant 393c138f640053a9427b71701f7279bd +net/minecraft/src/GuiButtonNextPage dbe7566eb928bd9feb3ce38163441c7a +net/minecraft/src/GuiChat 17c64eb98117b33cd552146d4d4f3be7 +net/minecraft/src/GuiChest edb476406989d2d6365e43292a9e80d4 +net/minecraft/src/GuiCommandBlock 94aa66ddb7e172659dc313d2b7f2fd78 +net/minecraft/src/GuiConfirmOpenLink ff487871da0142c6aa50061e5fa95f2a +net/minecraft/src/GuiConnecting 7662de9b77614b6c4f362d462ee79b69 +net/minecraft/src/GuiContainer f08c984cb50a6a36899db3897aec8d1b +net/minecraft/src/GuiContainerCreative 31be2c34ea1a2f3ebb66ecc02e4bbe36 +net/minecraft/src/GuiControls cdc29d1b8fc5a749e0baa5e6c2a587f2 +net/minecraft/src/GuiCrafting e61bd143b3bf7e89074b736f175a1d17 +net/minecraft/src/GuiCreateFlatWorld 947623b0039254bea979a002b8280bff +net/minecraft/src/GuiCreateFlatWorldListSlot f80e9e25f0ef236445441fd1e5ee83e1 +net/minecraft/src/GuiCreateWorld 783294aa3c63d71a8088477460d7d80d +net/minecraft/src/GuiDisconnected cb52bbbdbefd2c8a8b5701e6567740fd +net/minecraft/src/GuiDispenser 6e6d67c3500109382d77ee67840784af +net/minecraft/src/GuiDownloadTerrain 9b8c65cf7b7c4ec68e13853be6a03a8a +net/minecraft/src/GuiEditSign b7e03f30d38aad846c1f7bcb93c3b943 +net/minecraft/src/GuiEnchantment 3c04b79367dff42daacb9125c016e630 +net/minecraft/src/GuiErrorScreen 07d4c4022f2887e056d8ded850b523b3 +net/minecraft/src/GuiFlatPresets 9ce350c3513c1dd439643fb8414bb18a +net/minecraft/src/GuiFlatPresetsItem a824effa99bf7eec798e50da9f8122e7 +net/minecraft/src/GuiFlatPresetsListSlot 32a719aadfa09efc36d4a7c3d63c7307 +net/minecraft/src/GuiFurnace 6f80d8e27726e40c0a11240728b1340b +net/minecraft/src/GuiGameOver dc4e49518e515bc38edcd087fe262fe7 +net/minecraft/src/GuiHopper 15a279349efda46c1eed63cb1c708ec0 +net/minecraft/src/GuiIngame c121f6fef0bb782126b7e775c9b4d74f +net/minecraft/src/GuiIngameMenu a40107d8bcf552a549ed2f5be3847c51 +net/minecraft/src/GuiInventory d196f16ea16f0879778048439af5291b +net/minecraft/src/GuiLanguage bd0c6c9f95ebcd9cc824556ab3f5d770 +net/minecraft/src/GuiMainMenu 797b065e674aab4651d482c5c9802af0 +net/minecraft/src/GuiMemoryErrorScreen e4ffec7b61c5b5467def8bcbb2a5919a +net/minecraft/src/GuiMerchant 6ddc7e0802e49b1c6c01d8f7057ae7a3 +net/minecraft/src/GuiMultiplayer ab344fd97a1aa37bc94dc851d3b08ebc +net/minecraft/src/GuiNewChat 118726251c479cef474303fecd2d62c7 +net/minecraft/src/GuiOptions 0377ea90be83ed7adf6174e9bff64706 +net/minecraft/src/GuiParticle bba66f5bef92f9f984eaf5ddfc3775b1 +net/minecraft/src/GuiPlayerInfo d065d0dac77e0d55b215122866ff47a0 +net/minecraft/src/GuiProgress 7637c48f6271d1ffd3c17684bed727bb +net/minecraft/src/GuiRenameWorld aa04a5fe4dec8b0d55e3253e25a75ab1 +net/minecraft/src/GuiRepair 4620d6cb8422908f0823dfce615e3665 +net/minecraft/src/GuiScreen 6d03bc90bc15557395426536e77fe600 +net/minecraft/src/GuiScreenAddServer 2c22665c326745a551c2f292a2b1b318 +net/minecraft/src/GuiScreenBook 8215b6e48e958e00f61ab3728ffff5e5 +net/minecraft/src/GuiScreenConfigureWorld e37b645338d44fd75412aa6054329f08 +net/minecraft/src/GuiScreenConfirmation b46952420e0667cfd2bd94d5e8417122 +net/minecraft/src/GuiScreenCreateOnlineWorld fc9e5cfd342c0f2636ea8f47c3f51cdc +net/minecraft/src/GuiScreenDemo 31919c0e64f3ffd4c21681be283bb434 +net/minecraft/src/GuiScreenDisconnectedOnline 25606caa9a8890b139e030828ef5baff +net/minecraft/src/GuiScreenEditOnlineWorld 0408527137bce798542538e4e6b05032 +net/minecraft/src/GuiScreenInvite feeb2edaa7b43f3af90a8912a7d7924c +net/minecraft/src/GuiScreenLongRunningTask bf1750cb0f42b9fb049d9ec6e4514f8c +net/minecraft/src/GuiScreenOnlineServers 1a74bf05a3059e4c0e52a2df6d38124a +net/minecraft/src/GuiScreenOnlineServersSubscreen 2d3a3fa7ac97b767b3776c5973d40601 +net/minecraft/src/GuiScreenResetWorld 5e0ec533ee7ae7d399167011c1f14530 +net/minecraft/src/GuiScreenSelectLocation 9612ea33537f4ff6d1542ab3c1118e63 +net/minecraft/src/GuiScreenServerList 082b7bbb78ff96eab421610f2ff32ee5 +net/minecraft/src/GuiScreenSubscription 3a91d112cd24465f4c6ae245d615de2d +net/minecraft/src/GuiSelectWorld 06911888a69007267a9cb4091c35b55e +net/minecraft/src/GuiShareToLan f333b795774a91719e0ef24474c9b9af +net/minecraft/src/GuiSleepMP 5156a6ba0bad1728fd52d59a0630c6a7 +net/minecraft/src/GuiSlider 96b70b4c2b4d0394f62a4e2eb1230bc7 +net/minecraft/src/GuiSlot 702cfa14265b60ccb64cddb7aac05078 +net/minecraft/src/GuiSlotLanguage 4a344d8b5344cdb0be17d61db6df39a4 +net/minecraft/src/GuiSlotOnlineServerList d8c1f103c1940e7302de8637474432ca +net/minecraft/src/GuiSlotServer 31753da6de6efdd2234e3281393dada4 +net/minecraft/src/GuiSlotStats ee679f30560abfe540d9997f8732f8ba +net/minecraft/src/GuiSlotStatsBlock 351e713f505d0992bfff17d5f5d4ead7 +net/minecraft/src/GuiSlotStatsGeneral fb3970e748defcf172bf9b1b2bcf9346 +net/minecraft/src/GuiSlotStatsItem 1b1a77e790e6613406ab7aa2df7726de +net/minecraft/src/GuiSmallButton 016ac842bf005a5fefa8a0df68ac5ed4 +net/minecraft/src/GuiSnooper 02e51b2ca32844c823e5fb2f768c5b05 +net/minecraft/src/GuiSnooperList cb0980a8c8a746153665a2cb26e01b2b +net/minecraft/src/GuiStats dc1a5dee6b0c334ef21e58bb881fba88 +net/minecraft/src/GuiTextField 6ca60f67011610f6812537caae59c384 +net/minecraft/src/GuiTexturePacks 7483dbfdd144546aa5b127ea4c0d49ab +net/minecraft/src/GuiTexturePackSlot c49794d1075c525044754e9bed725b14 +net/minecraft/src/GuiVideoSettings 19a4abde88e7dde9ce1a313420fb3693 +net/minecraft/src/GuiWinGame 9da2e06d4c33b2c9a49f1f62ffb97dec +net/minecraft/src/GuiWorldSlot c74a0be2d6f373ec74b71369a5112818 +net/minecraft/src/GuiYesNo b691af5e89dcad8c6dc10f609b8ccc80 +net/minecraft/src/Hopper 92a01b233e2b21b53950b408ecafc704 +net/minecraft/src/HttpUtil 44156cf88411950b9d982f87d23aee20 +net/minecraft/src/HttpUtilRunnable 19afa51af1d161dcc2a5ca081889a00b +net/minecraft/src/IAdminCommand 6d3d9c98db3c9b83ef1c3c757af6577a +net/minecraft/src/IAnimals 5d0a1e4e84647835c68c10ec55677efa +net/minecraft/src/IBehaviorDispenseItem 3db1de5c621aec840439153a50b99e68 +net/minecraft/src/IBlockAccess f07506ab7189901a7c899c14d7f7f332 +net/minecraft/src/IBlockSource bbe087480a00dfc18fc34ef0cae04954 +net/minecraft/src/IBossDisplayData 35a5644d21dd5c8cbbf2cad558bd6866 +net/minecraft/src/ICamera dd46fb15c67a1595f7a5c04c78925cac +net/minecraft/src/IChunkLoader 9e721701cae9d5107dd6db7fdd0acf28 +net/minecraft/src/IChunkProvider 8505660f90938172620bc79308b10353 +net/minecraft/src/ICommand 182ddd94fbad8e9f513760e6429fab83 +net/minecraft/src/ICommandManager d6de59ab068dd320a508e4b4e9f5acec +net/minecraft/src/ICommandSender 9193d90acfe684fc30ef6194b8baa44d +net/minecraft/src/Icon 44c8808e5592622afbef754d7ea73b96 +net/minecraft/src/IconFlipped fa0a80ad36f442c3c1646f5d04b796d0 +net/minecraft/src/IconRegister ec46f9c69cf270451d319b90b23b878c +net/minecraft/src/ICrafting 137d0517e714406e4cd7b0263e9a2e35 +net/minecraft/src/IDownloadSuccess eb2776e3b1d9f835466f8bdeb2963699 +net/minecraft/src/IEnchantmentModifier 19a02fa472525e2ad1a957594445e511 +net/minecraft/src/IEntityMultiPart 37f27d53b4880de5b25204c372b9cd03 +net/minecraft/src/IEntitySelector 67508d049f00ecacfa65a5649c30080b +net/minecraft/src/IImageBuffer 79ff2efffb63ddb917c8d42a274d37d4 +net/minecraft/src/IInvBasic 0e3faf68165c0df2f095b7f588b51413 +net/minecraft/src/IInventory 20a931c1bfbe326ad03b3b587afbdfdc +net/minecraft/src/ILocatableSource e13ee3c2af03214ecfe5f2c7ad1a0c50 +net/minecraft/src/ILocation 75c3445a1605e283873aa6605504d0ba +net/minecraft/src/ILogAgent dc4803c3421868490d390051c1a0604c +net/minecraft/src/ImageBufferDownload 25fb01ccad9824f8da2242276182b1b9 +net/minecraft/src/IMerchant d041c60cb0515d19cc5b6ed279ccc15d +net/minecraft/src/IMob c21ea381fcf6aac0991e6cff4b46a6e7 +net/minecraft/src/INetworkManager 2a0378ccb06683684e86c4c2dd93a53e +net/minecraft/src/INpc 442aba0b27fb47ca0e38b12322ba6e88 +net/minecraft/src/IntCache 4f04977e53857c2a5d00f13466e7e35b +net/minecraft/src/IntegratedPlayerList 8ec8b149c6bdf63ea652b8c7d5465ec9 +net/minecraft/src/IntegratedServer 218ef3b39f0ccc35bdc5ff18b1f83a64 +net/minecraft/src/IntegratedServerListenThread 3a1a90167bd7f9063c9d58f9c9f55a80 +net/minecraft/src/IntHashMap 151024c9cdd909a8e69cd79b377417c7 +net/minecraft/src/IntHashMapEntry dcca4b99e3db6eb1d545627dfe9db7af +net/minecraft/src/InventoryBasic 9b63e43b741454b2692739b1b2e033f5 +net/minecraft/src/InventoryCrafting ceff0cd4c102cdc34c96977b033cf593 +net/minecraft/src/InventoryCraftResult 4bafc5c3e549b2395392a5aa624c080a +net/minecraft/src/InventoryEffectRenderer b9dadfa858e8fe3f15356159a8b1368b +net/minecraft/src/InventoryEnderChest 8a1516b4ca2f9c9ab2323948e6950497 +net/minecraft/src/InventoryLargeChest ca62090929b0026c8c1e1003dc753ddb +net/minecraft/src/InventoryMerchant b34b0174ddf7bb7f32abb4083536cad3 +net/minecraft/src/InventoryPlayer dfe35f45939020ad47946ab47ac0edb0 +net/minecraft/src/InventoryRepair b6ff634ddfb29e43feb4c343b21e90f5 +net/minecraft/src/IPlayerFileData 1a120ec48868fff99da00dc4e1229952 +net/minecraft/src/IPlayerUsage f99e1a5ce7ac3fe92e16452fd250c56d +net/minecraft/src/IPosition d542eaf13f00e0d362c46fd22bb55795 +net/minecraft/src/IProgressUpdate c38be41cdfb11dbf0c203f77f67f3065 +net/minecraft/src/IProjectile 9c190d5f69fcb13a8383b5d45d8c0cd8 +net/minecraft/src/IRangedAttackMob 52f4f25ca342f7d403f9be42b8eec05c +net/minecraft/src/IRecipe 2ace5a0cb31ee66a3664757efcd1e124 +net/minecraft/src/IRegistry cf8da71827ed8c072c34d21d1aeba75b +net/minecraft/src/ISaveFormat e13644886b33bdc7d23f1aeb6545ab1b +net/minecraft/src/ISaveHandler 65924702a1772adf85e7c16565b04e09 +net/minecraft/src/IServer 267231a588f396c810fd491b1a328e47 +net/minecraft/src/ISidedInventory b536660328e25c41cd7d12457bb89d6a +net/minecraft/src/IStatStringFormat 5502cefa6984a223a09776eb4487ec3b +net/minecraft/src/IStatType 05a53248f5e95086aaa5e55f757d5296 +net/minecraft/src/Item b30aa3002b43719a4816a8968be35d7b +net/minecraft/src/ItemAnvilBlock 3d7ba67afc5e9376d95d075eeb33696c +net/minecraft/src/ItemAppleGold 1d9f2e5cbfcb75c852bef6c899cea92d +net/minecraft/src/ItemArmor f5ca21be4aa16d0ebd962f219bc075fa +net/minecraft/src/ItemAxe c68864c3bf4cf23d5f9eab7551270a1f +net/minecraft/src/ItemBed b9d35e7fa701ec005c2a3b5e56837498 +net/minecraft/src/ItemBlock a289cc8aee654e5f32c051506b098cff +net/minecraft/src/ItemBlockWithMetadata 1c13dcd952777b1f6e9622213fc2663f +net/minecraft/src/ItemBoat 5eeae96cfc9dfac4804a4240e1268ad0 +net/minecraft/src/ItemBook 1e20252f2974bb5b789861ad9de8aba1 +net/minecraft/src/ItemBow 41fb08e6652eb48810ae5c6b0108e6b9 +net/minecraft/src/ItemBucket e7db53b35d9bb94a1850eec49057e462 +net/minecraft/src/ItemBucketMilk 56307cfe8fe0807b82c5d7e9bb0706c3 +net/minecraft/src/ItemCarrotOnAStick 490956b508f28740b5a1f750ba615edc +net/minecraft/src/ItemCloth 7b4bca58c0eeaf458d666cf90b7f8d59 +net/minecraft/src/ItemCoal 6cbb736f428fe747b9a40995973833a4 +net/minecraft/src/ItemColored 4c320a8b8375a3907c3e00cec570e40d +net/minecraft/src/ItemDoor dc00537ca41d08cf96bcdd78eb71c79a +net/minecraft/src/ItemDye e5913b9c6fbeb88004e31d739323f6dc +net/minecraft/src/ItemEditableBook 3926126c48c9f82216765c427e2711c5 +net/minecraft/src/ItemEgg f0061d28657da27204a64961ae6b24ec +net/minecraft/src/ItemEmptyMap 7bfc3f8192ebf8488466edac1ed7bf81 +net/minecraft/src/ItemEnchantedBook 995d568c4c11099a842db3315f7ae4cb +net/minecraft/src/ItemEnderEye 93dd3feca632a4bd7f7a2fb481bb73c6 +net/minecraft/src/ItemEnderPearl 5b6b251a4f8de41df0318c7305878afc +net/minecraft/src/ItemExpBottle bfbd576ae4820c6f802a6063b725413c +net/minecraft/src/ItemFireball ee82c73c36e5ec7223c91ce919ca80a8 +net/minecraft/src/ItemFirework 63e4e49580ef5f8c1b342520a4bf4bd6 +net/minecraft/src/ItemFireworkCharge 2d16a632a6f731b12a59465bcae82861 +net/minecraft/src/ItemFishingRod c756ecc830e17822b9d53d50fe2991aa +net/minecraft/src/ItemFlintAndSteel 1be68e9a67913e9ae6ab567ccec14083 +net/minecraft/src/ItemFood 69d368cd2f0e8bfb9fa906a77fd5ce70 +net/minecraft/src/ItemGlassBottle 8ce4135dcadb3befa9ef36c8f4c95f73 +net/minecraft/src/ItemHangingEntity 1413db6203c4afd44ef7723a80a3659b +net/minecraft/src/ItemHoe fe20bc496a77f1b983fa48c0452297a7 +net/minecraft/src/ItemInWorldManager 365603e0be9ea0bbebc76621c4b5a0cb +net/minecraft/src/ItemLeaves 9fff920af316cc13e10fc97d70a2d19f +net/minecraft/src/ItemLilyPad c5ce9bdd94c838e30fcf60cc5675b8a4 +net/minecraft/src/ItemMap db96adbd7882dd644fb5b5a6d4b9ff2a +net/minecraft/src/ItemMapBase 537af0c93f0a539613dae9f61fa5d9c9 +net/minecraft/src/ItemMinecart 3a9d69a4e2f2803c39fa80f2cab607ad +net/minecraft/src/ItemMonsterPlacer 6f1af0c244447c3a2617427c9e9ac641 +net/minecraft/src/ItemMultiTextureTile 204ba7f3a0a1aee88a9c765c799210d4 +net/minecraft/src/ItemPickaxe b75426b456fc80d56e66bbe305c250d9 +net/minecraft/src/ItemPiston 23c2d0cef75f83de890335655bc853bc +net/minecraft/src/ItemPotion 9bf522b1f6d376b0dc5c207e46680495 +net/minecraft/src/ItemRecord 1b883afc2633e81333cfa16e91d61519 +net/minecraft/src/ItemRedstone 876b54d76f0298c082bc07fb6c7e8bc0 +net/minecraft/src/ItemReed 1a32baf8ca3b40544dc98dd7e77fe968 +net/minecraft/src/ItemRenderer 58b0404a145d5d30e926a7bdddf9d36a +net/minecraft/src/ItemSaddle 69cd493e45b36e17e11afe4b307996ac +net/minecraft/src/ItemSeedFood 22ddf683ed2a87fbebd474512ad9aba7 +net/minecraft/src/ItemSeeds 1419e9b25113114c26a9d02933467247 +net/minecraft/src/ItemShears b55edac6389c64a6af7835ee94824713 +net/minecraft/src/ItemSign 1ef360eb896b36563d3c6ea4854e0d07 +net/minecraft/src/ItemSimpleFoiled f554195081deb24cbdd90f509ed03eec +net/minecraft/src/ItemSkull c1ad8fa0c80aec2e7f7382be43b53e5c +net/minecraft/src/ItemSlab e489bc704fb858197ef946a88c541877 +net/minecraft/src/ItemSnow 969a3bf5d3d26dcd204a9844078d5bf2 +net/minecraft/src/ItemSnowball 6f399a7da3998ebcc01bb301004c7300 +net/minecraft/src/ItemSoup cd27da51dc1e3f47195aaaba2c68024d +net/minecraft/src/ItemSpade 2025b48182e08b5c167d5afc64b6507c +net/minecraft/src/ItemStack 1745787e409efc1c1ba1016750f849cf +net/minecraft/src/ItemSword f028897bb505501c5eef353e2e4d8bd6 +net/minecraft/src/ItemTool f29bc910844a9c681e59183842ff2d10 +net/minecraft/src/ItemWritableBook cd3df35246b4171cc4cbf9ba1c41b35a +net/minecraft/src/ITexturePack cbefd0f5f4780b49baea7f7810f8eb99 +net/minecraft/src/IThreadedFileIO b90f74d6157ff83c0f7de24deb4d4d3f +net/minecraft/src/ITileEntityProvider 7a4837f0d817cb598d269bd05f2a5879 +net/minecraft/src/IUpdatePlayerListBox b21664bf806cd2938e4600a3c8a0856d +net/minecraft/src/IWorldAccess ce36ba47e45932a3d2a096d3a9f5af19 +net/minecraft/src/KeyBinding dd3b5cc36e60cdba74ad66fe3947a7c9 +net/minecraft/src/LanServer e9c9b6a1f14f2d569a9d9cf8588b830c +net/minecraft/src/LanServerList c00385934ae3636308860ecd0d96d82c +net/minecraft/src/LoadingScreenRenderer a212c5e940c44a999fe8b7c8e4780e31 +net/minecraft/src/LogAgent c6066786405cc1a10c3f6169d8ef0f9a +net/minecraft/src/LogAgentINNER1 7b450532cb001852a710b6ae1402927c +net/minecraft/src/LogFormatter d3dd07f6a1d63d04cacf668b3828a8b9 +net/minecraft/src/LongHashMap 04ee9b013a7e0d0abeb880e0fa6cfacd +net/minecraft/src/LongHashMapEntry 91f142e1cf6c2e420076eb2013f0290b +net/minecraft/src/LowerStringMap 9f42cd0954095ffcee2fea163e66ef99 +net/minecraft/src/MapColor 1628f8fb43b0c80f5c75849b59fee6fb +net/minecraft/src/MapCoord 8d65aab168b38baa4ef1da2de53a6f70 +net/minecraft/src/MapData 556fca1e43557520ae5953c9afb2b118 +net/minecraft/src/MapGenBase 5a80e8d9501773926b2efc5946719eca +net/minecraft/src/MapGenCaves a27f1e07cdb25acb1a175a0fc9c32375 +net/minecraft/src/MapGenCavesHell 9720161b89ac63fc34fc392ee99f8cd2 +net/minecraft/src/MapGenMineshaft fd80b40842d898ddcf7db50310cb7e3d +net/minecraft/src/MapGenNetherBridge 75c9c0780dabb53f37b8e929b0b60732 +net/minecraft/src/MapGenRavine 09edfd91dad55dce020d3e8e77ca38a6 +net/minecraft/src/MapGenScatteredFeature 57214ea2c95a776d1477233ac762f760 +net/minecraft/src/MapGenStronghold 3251987c9f5139dd4768316a8a79e047 +net/minecraft/src/MapGenStructure 3d0263da1777e1ad45ec75314e1c6c36 +net/minecraft/src/MapGenVillage d210be0f6d4046f542faa62f8b4308a7 +net/minecraft/src/MapInfo b50e5662e5912f60470f3b6d5e7e47f5 +net/minecraft/src/MapItemRenderer 615b977a15084bba533e0c3a7d4043bb +net/minecraft/src/MapStorage 664ff6f1a4de34a881869059d83a231c +net/minecraft/src/Material a68d1967b7ae170f4382230d1a0c8882 +net/minecraft/src/MaterialLiquid 547702ea87e7a795e06b3065859dd72a +net/minecraft/src/MaterialLogic 2dec7c13c38a8f8748affbe359ef7859 +net/minecraft/src/MaterialPortal 58589f0eedec87fa0223434ba726f536 +net/minecraft/src/MaterialTransparent 9bde8da46cd75a1f84b86d7b3987df73 +net/minecraft/src/MaterialWeb 770610865b55831bcc9a9c3c795c18f5 +net/minecraft/src/MathHelper e153f5ffb0d5e9ae666a46b9e95a2abc +net/minecraft/src/McoClient b8d94f96e9d016e087c752162243c441 +net/minecraft/src/McoOption bb8dc3e04854b07d2fa61fb18c79fc2f +net/minecraft/src/McoOptionNone 71f9236e6734fc300454ae8594e995da +net/minecraft/src/McoOptionSome 4d657caf75d91a8ce8793172fa0a4fd2 +net/minecraft/src/McoPair c4a3a216b6dff67c3807f6bdc79f24fe +net/minecraft/src/McoServer a8e907ccafb8cd99343ebc2678ef8562 +net/minecraft/src/McoServerAddress fec1a1d2ce7c062e2d34b2ce73f24956 +net/minecraft/src/McoServerList 682790dae7afcc8e27ec5048bc00215e +net/minecraft/src/McoServerListINNER1 91f86eb5341a5052ba88370361f5580f +net/minecraft/src/MD5String da1f27584230065799fc3ace2da41a0a +net/minecraft/src/MemoryConnection 75bf1c0f13dc652812b5d2d24eb1629e +net/minecraft/src/MerchantRecipe 8120b8769eee137060a8499bce732025 +net/minecraft/src/MerchantRecipeList 72500c1c346b13ee01df3a33202feb5f +net/minecraft/src/MinecraftAppletImpl 255ac4417075d1fd0140435be990a31f +net/minecraft/src/MinecraftError a620a10313b6cf071d7dc8d95cc490af +net/minecraft/src/MinecraftException 8eaa62a5b435fdec50e328b27baff596 +net/minecraft/src/MinecraftFakeLauncher 75ab180306c73354e988fe7a4ea8fb73 +net/minecraft/src/MobSpawnerBaseLogic 16ef9d26b2fe5e078380f3e0b68056d5 +net/minecraft/src/ModelBase 3ed0e7c7d7b68384c76f8597e3a3340f +net/minecraft/src/ModelBat 61572ba451c594febe5d83e997bc1483 +net/minecraft/src/ModelBiped ad1e6f70f174eaf864bdcc0886cbb895 +net/minecraft/src/ModelBlaze 0995e24ddf6893a34c8f2af0d0ca7ed6 +net/minecraft/src/ModelBoat a83cee0e43978fb74964e5a8b1e9ca7f +net/minecraft/src/ModelBook b28a8ae34f5402cc97c6369de0b2fa73 +net/minecraft/src/ModelBox 6d59e9cf654537d9ea977323daa81da8 +net/minecraft/src/ModelChest b24f699566db71bf3d6897946a367c2a +net/minecraft/src/ModelChicken 8746a58aa35b97b91ab85dcd33124517 +net/minecraft/src/ModelCow 805420a0f104130e7738377e3ae7cf62 +net/minecraft/src/ModelCreeper c0e3e76a63b09813499cdd6c60ade8a6 +net/minecraft/src/ModelDragon 9857154b2623c44d7d7a2df457033679 +net/minecraft/src/ModelEnderCrystal 1d5197e57a50276e34976d7e0b3fe6b5 +net/minecraft/src/ModelEnderman f7be2c4cc3aa5dcba2310cb8a7d0df69 +net/minecraft/src/ModelGhast c64d9c521e57cad66785c0aec09ecbdd +net/minecraft/src/ModelIronGolem f75b18af6100b6f9dcdd5c6b081eb9a6 +net/minecraft/src/ModelLargeChest a31c899493fc1d96f6deb60db3effffb +net/minecraft/src/ModelMagmaCube de8aee8b48b752648b3c2b007b105054 +net/minecraft/src/ModelMinecart f011f9d8cc5a95aa41adc4f143295f77 +net/minecraft/src/ModelOcelot 495cdf6ca8c249a1420ff3ec7b628218 +net/minecraft/src/ModelPig 2dee82e3cfcd12a893f1113459f221cf +net/minecraft/src/ModelQuadruped 60a1dc36428ddd5801d300fcb80f5ba5 +net/minecraft/src/ModelRenderer 6e9c7ab5b6e0f95b0b72a53f00051ee9 +net/minecraft/src/ModelSheep1 d8266cc4f42f26aca371b443b1218266 +net/minecraft/src/ModelSheep2 5d1bcfccd347c75f41baa756b5f28905 +net/minecraft/src/ModelSign 9d3e43f10f1d079d92dee2aceb81d9ad +net/minecraft/src/ModelSilverfish 8e8cb5cf3839a328fdb91a24a926d0bc +net/minecraft/src/ModelSkeleton 1881d9c13618170bb6a6fbfdca09248e +net/minecraft/src/ModelSkeletonHead 0c6d57c23103dc08944edb53db21c30c +net/minecraft/src/ModelSlime 408830f36a36b6b5f64fe61b75814daa +net/minecraft/src/ModelSnowMan 9e031c4a93b0ac422bdccca6a730ff37 +net/minecraft/src/ModelSpider ea584e8f42d8edace9ceed14e27bdae5 +net/minecraft/src/ModelSquid 2364f314f8d45bcfbc543704ca2c4446 +net/minecraft/src/ModelVillager b13688b6e5785b093c04d461ce7ab8af +net/minecraft/src/ModelWitch f4cb048df8da3a22855416c51e340688 +net/minecraft/src/ModelWither 075dedc574180ba2680ff58e064a5983 +net/minecraft/src/ModelWolf 070c0ca37f2fb2177d99e5616bef0901 +net/minecraft/src/ModelZombie 6579e572890aa394c8f8eafa142ac8ab +net/minecraft/src/ModelZombieVillager 5816d3a23c9fd4012209183bca0d60b1 +net/minecraft/src/MouseFilter fafd85f0f0c6a63e887254b852ad845f +net/minecraft/src/MouseHelper b431e098646568f179f4a2998adfc482 +net/minecraft/src/MovementInput b1d1fed4ac3bb09bd57e6098df054e9a +net/minecraft/src/MovementInputFromOptions 9d8e45096b820625fadced57d695dfa7 +net/minecraft/src/MovingObjectPosition 95300747bb46ae68e46d0b64094851a0 +net/minecraft/src/MusInputStream d90fe082309d0bc2da723a5f58abd4df +net/minecraft/src/NBTBase adc0b892bdbb9b639e995a3daca0d4ac +net/minecraft/src/NBTTagByte 43bc5de638e49773b9f5f8461cd18740 +net/minecraft/src/NBTTagByteArray 622e2ddbe7a2f35a297987c8c6069a6e +net/minecraft/src/NBTTagCompound 49a5ca5717122d42058621c996b1ed7e +net/minecraft/src/NBTTagDouble 4401ac764837b0c71956f7abf7952190 +net/minecraft/src/NBTTagEnd b6bbbea18410908dbfba7a4077e01732 +net/minecraft/src/NBTTagFloat be51ca3a4dd96045320cc7ecdc4e77a2 +net/minecraft/src/NBTTagInt c5b2830cbb8845ea1e8105f2c329316a +net/minecraft/src/NBTTagIntArray 5ac42b97278f93fc8b50bf207b0025ba +net/minecraft/src/NBTTagList 3e2698d04cb376824b5934c3c3085077 +net/minecraft/src/NBTTagLong 2f25a62485c43dff7c92f5791a196037 +net/minecraft/src/NBTTagShort fe83d71e2a06c167b32b006f6bb5d37c +net/minecraft/src/NBTTagString 604a98ee6d0e9cfa895473b5cf42334f +net/minecraft/src/NetClientHandler ea6229bc302326b49a9a7b9cdd429b6a +net/minecraft/src/NetClientWebTextures 157f0ea851325ee0ad39f7d16676117a +net/minecraft/src/NetHandler 99c7764b3c5e3cc3654f6d7a54c821fd +net/minecraft/src/NetLoginHandler f1589e5faff112610693cbface36c2cd +net/minecraft/src/NetServerHandler a867dcc1155f48db875f58c790348911 +net/minecraft/src/NetworkListenThread 7be6a86073b8e8bc53862191c2087767 +net/minecraft/src/NextTickListEntry b94a15d7c8bed37eb3d4c9e06f43f938 +net/minecraft/src/NibbleArray 4683e1aff79b0b9107578d5f9ded8b4d +net/minecraft/src/NibbleArrayReader a4b3e4a42dcb80e71763d6cb08f5c9c7 +net/minecraft/src/NoiseGenerator 0e17a6eaf9cf1ab75d7ab8472c1cf957 +net/minecraft/src/NoiseGeneratorOctaves a2284a6f2bd3e1e265ba3e5ba40021a4 +net/minecraft/src/NoiseGeneratorPerlin 3e62e26d679be33c56b899731a39ca4c +net/minecraft/src/NpcMerchant bc8d000680cc37f00508e62755c7eb8e +net/minecraft/src/NumberInvalidException 9f9a21aa15e5d99f57e402c5f4d4631a +net/minecraft/src/OpenGlCapsChecker c52ba0e054202b17ffe92de29c20dcb7 +net/minecraft/src/OpenGlHelper 192c39ef2e8dcc4ca51ba7b9b9523b8e +net/minecraft/src/Packet 0faa49ab589e20f526e3156050df2b63 +net/minecraft/src/Packet0KeepAlive c28a2b49353817268d08a00d7ec7f9db +net/minecraft/src/Packet100OpenWindow 8674956d2844eadb93fab6cf50a7bbd0 +net/minecraft/src/Packet101CloseWindow 74e37780329d95fe034829f320ad3b7c +net/minecraft/src/Packet102WindowClick 66de6b6d4756ac602c5a33b63dba3d32 +net/minecraft/src/Packet103SetSlot dc9450621d01283561245e1857efada9 +net/minecraft/src/Packet104WindowItems 39934a2bacdada7f99a3a2e719531bd8 +net/minecraft/src/Packet105UpdateProgressbar 75229b1657f8f834e4891e81bbb30de2 +net/minecraft/src/Packet106Transaction db1b0af6ff508aea0fc573db7017e47b +net/minecraft/src/Packet107CreativeSetSlot 20c597c0ea5c2f120f9f8e79877fcc68 +net/minecraft/src/Packet108EnchantItem ef322e51d0318095e7997ab35940990f +net/minecraft/src/Packet10Flying 7752c11f3c419ef84e10ba83ea1e55bd +net/minecraft/src/Packet11PlayerPosition d34596e713fe26e41a8b35ee0eca6e88 +net/minecraft/src/Packet12PlayerLook f5140a2b81236cda77ee566744d81cb3 +net/minecraft/src/Packet130UpdateSign 0e99dc0818517afe6fe0933ef3833465 +net/minecraft/src/Packet131MapData b882c078311454abe1dd33172ef57976 +net/minecraft/src/Packet132TileEntityData e4f459b82e433be499c60843b72b4260 +net/minecraft/src/Packet13PlayerLookMove 5ac9281d552da07c295ceafc7f3dd39b +net/minecraft/src/Packet14BlockDig 71ed8a628113090bd109b4a76d55556f +net/minecraft/src/Packet15Place 7fa0f39c2490fa1d62ccc5abc825fccf +net/minecraft/src/Packet16BlockItemSwitch 6f14f697e457f7fcb3d2c42520b86363 +net/minecraft/src/Packet17Sleep b5ca8129bfe8740a750f27ff391ef2f7 +net/minecraft/src/Packet18Animation b0cf7a43aff9ba952acc01603f77358a +net/minecraft/src/Packet19EntityAction e3f449e7453f8faecb3983bfdc9784c3 +net/minecraft/src/Packet1Login cceadff9807136f5706737364ca205cf +net/minecraft/src/Packet200Statistic 4bf9b15ef9197077d21a6d919af2e387 +net/minecraft/src/Packet201PlayerInfo 462a8eae361a1099d495012988cc58a0 +net/minecraft/src/Packet202PlayerAbilities 433e06448b988b1cc93d7587df957783 +net/minecraft/src/Packet203AutoComplete 18594910dd624f16c07e2d1d703c361d +net/minecraft/src/Packet204ClientInfo 68e07d244fbfb88f9095f80b8768a0bc +net/minecraft/src/Packet205ClientCommand 7c773f00501b957fc18b1e5ca219db0c +net/minecraft/src/Packet206SetObjective ea72f6c8f37485ec526c8a676dfc2908 +net/minecraft/src/Packet207SetScore e9a02e6b8c30b468895f0cb16d0432bd +net/minecraft/src/Packet208SetDisplayObjective b3833581f68dca05f72a97ee1d6754db +net/minecraft/src/Packet209SetPlayerTeam 7f44e8b560ac004a38b6038a39028e5a +net/minecraft/src/Packet20NamedEntitySpawn 694982ae04a7b6a488a91772ac87a571 +net/minecraft/src/Packet22Collect 90c2e42fa248bc758e3be7bb128ed981 +net/minecraft/src/Packet23VehicleSpawn c9a284fb68bf3d341e7427bea189dbde +net/minecraft/src/Packet24MobSpawn ba1cd88e90d688e14d02dd8889098d59 +net/minecraft/src/Packet250CustomPayload a7668c7e1b045ce5c4eaec4d8a7cf409 +net/minecraft/src/Packet252SharedKey f145958239affed2a8b30bf276f2d9bc +net/minecraft/src/Packet253ServerAuthData 992933d8d76aa2bae081acf73410f20d +net/minecraft/src/Packet254ServerPing 5ba9f8a002d2815b6a9fb6bd28f7b647 +net/minecraft/src/Packet255KickDisconnect b25dd05fe8671d2025e734d1bb1c3e60 +net/minecraft/src/Packet25EntityPainting 1cd0c6c3cdeb4d4da5547c439acc4747 +net/minecraft/src/Packet26EntityExpOrb b6a0856ae3ef001a3ab0637e007437ce +net/minecraft/src/Packet28EntityVelocity 6ca194e581804891ca9861ef492b7a8c +net/minecraft/src/Packet29DestroyEntity e26121df8ab913dacecfd6f3e6809a92 +net/minecraft/src/Packet2ClientProtocol f01de91067d4395eef3faee34b871739 +net/minecraft/src/Packet30Entity 4f6556fa9dc52ecdc06a17cba2472577 +net/minecraft/src/Packet31RelEntityMove 1d3770059c48e030bf43e55f32f240ea +net/minecraft/src/Packet32EntityLook 14bbd85fb7edd899e959a495e435eb89 +net/minecraft/src/Packet33RelEntityMoveLook 24b3733f7d66be4fc83a6e58fd9c6f4e +net/minecraft/src/Packet34EntityTeleport 0de9815b006af5a0de6831a8b95719dd +net/minecraft/src/Packet35EntityHeadRotation 6c8dbc381bdbe93531633130617c4684 +net/minecraft/src/Packet38EntityStatus 0510a44ba41178821275a57fae0ed2f0 +net/minecraft/src/Packet39AttachEntity 82f80b4ea02dbc5a574c0f479c0e2d78 +net/minecraft/src/Packet3Chat 987721f349a673aba1322dc6b192ec6b +net/minecraft/src/Packet40EntityMetadata f9814fe16dc13238de2629e864e44b38 +net/minecraft/src/Packet41EntityEffect 316e0b36eaa541fa2f436bc6c16da64a +net/minecraft/src/Packet42RemoveEntityEffect bb5247ff79a08ee872d48e837259bbe8 +net/minecraft/src/Packet43Experience 947e6842fcafa027d83d441f3192000d +net/minecraft/src/Packet4UpdateTime c1d2cb1208aad66da1d73e7b93dedd3d +net/minecraft/src/Packet51MapChunk 73e64f511f299ca8cb553ba1ab97762d +net/minecraft/src/Packet51MapChunkData ee13555ae6b88eea6f4c0b7ad96c403f +net/minecraft/src/Packet52MultiBlockChange 0a0586d4a15f445619dc7a1b48230c82 +net/minecraft/src/Packet53BlockChange 6a55f8379b2ae88e48e87cecddfeb734 +net/minecraft/src/Packet54PlayNoteBlock 9684fdb4d79b2568777e7d2a3d03fc59 +net/minecraft/src/Packet55BlockDestroy 1baa9573267cc96348c49bbf10189f44 +net/minecraft/src/Packet56MapChunks 27f0a7a8c7cc12aae25ab31ad4b77089 +net/minecraft/src/Packet5PlayerInventory adfc5d32c63baef89ce9b00cd38188aa +net/minecraft/src/Packet60Explosion 8feb5d7f578bb36aa1f23ae49251ef24 +net/minecraft/src/Packet61DoorChange 650b288d6e3e7b9bf770531acd9ce4ee +net/minecraft/src/Packet62LevelSound 54c4e40b2477df945ce16a7a8403968f +net/minecraft/src/Packet63WorldParticles ae984195d44bf27374be6a66db566a08 +net/minecraft/src/Packet6SpawnPosition a7c53a95a1e3a076ed13eb5ecccfb0e3 +net/minecraft/src/Packet70GameEvent 07cb929efbc70e092c23f217f44897f0 +net/minecraft/src/Packet71Weather 05c7158727fa78048a8d24be9ffcf535 +net/minecraft/src/Packet7UseEntity 1ff24e8ecda5c7b8d49aa7306965a9a0 +net/minecraft/src/Packet8UpdateHealth ec7fbbb7d807cfc892ba1e3b82fbfc9e +net/minecraft/src/Packet9Respawn 818205f5b97cf22f73a9337d3c8289db +net/minecraft/src/PacketCount cf97d105f0ea6553e184c8c6cb68fc4a +net/minecraft/src/PanelCrashReport 57bf4e9d157c735ba7ac997b82d2b228 +net/minecraft/src/Particle 7173c73ca2b48fbdb981670ee67d4c4c +net/minecraft/src/Path 97780c14b14b1808cffcde1d23c3a29b +net/minecraft/src/PathEntity 25893a0ed25d814d9cd71891fe878ba1 +net/minecraft/src/PathFinder 95d6658a73dd628ad972d6b13a05d6eb +net/minecraft/src/PathNavigate 665bccd540ca4a75406183db36928400 +net/minecraft/src/PathPoint dcdf50729596adaddedecdd0555a5c7d +net/minecraft/src/PlayerCapabilities 25d7b7dce1afe2fa7117ce3a1ca824bd +net/minecraft/src/PlayerControllerMP 8092bf882276c3af89ffe6cd6b91f179 +net/minecraft/src/PlayerInstance 7238832ef3838e8f09fb8751b1de3927 +net/minecraft/src/PlayerManager f53d41f12d6b247113039aecbcb2516b +net/minecraft/src/PlayerNotFoundException 26a719e1ab349ec99ad061b1fe2ffa55 +net/minecraft/src/PlayerPositionComparator b7ad7358f9dd28a60b29d55d0c12d4fb +net/minecraft/src/PlayerSelector 9813cb5493aacfa39f5889967d6ab4c1 +net/minecraft/src/PlayerUsageSnooper 6a5f8f14bd36f4d7d49c3aa7cf54c5d8 +net/minecraft/src/PlayerUsageSnooperThread 9ac0a796e1d4306d252885031901558a +net/minecraft/src/PortalPosition 5b7a4c23e8470353a5332b6eb998823c +net/minecraft/src/PositionImpl 6a4d77033662bc7b47777d06cd3a7f72 +net/minecraft/src/PositionTextureVertex 29bee54637ed6d0779e600748fad999b +net/minecraft/src/Potion 9f52f7e7766345008ad9457d526eeaac +net/minecraft/src/PotionEffect 4b3b96c324e6051bb6c79921f5a06ed6 +net/minecraft/src/PotionHealth 764dba0732a2497ee2b24f21d14dbba0 +net/minecraft/src/PotionHelper a7c296092ca3b82d2ed80e1747286ee1 +net/minecraft/src/Profiler 502a0e8a3a76224e1abb862d0ffa8a25 +net/minecraft/src/ProfilerResult dd5ddb5b6a9f1acaf44db7d7c6935837 +net/minecraft/src/PropertyManager 7385fb445ea13315d8580ea153913fe6 +net/minecraft/src/RandomPositionGenerator 85680a173270a1e018b978be1b9d389f +net/minecraft/src/RConConsoleSource 3d0fb0b3f3c498fab96429e11611e7d7 +net/minecraft/src/RConOutputStream ecc816a46d62e41ed1ed15f789812be5 +net/minecraft/src/RConThreadBase 5871585dc4dd0938d367de4b5ea52e11 +net/minecraft/src/RConThreadClient d01b9903515df27ee9538966fcdedcda +net/minecraft/src/RConThreadMain 50e32539fb4e1c29256249f166aed4dc +net/minecraft/src/RConThreadQuery 638b4aaea0047e07214e4df7a1266782 +net/minecraft/src/RConThreadQueryAuth 2da02e663576b0fc96e52b1914e5f2da +net/minecraft/src/RConUtils 0e654509c7fc9f912d25d6f5a9a2ce6a +net/minecraft/src/RecipeFireworks 94dbd0eb3eb956b5d658fa1687a41a94 +net/minecraft/src/RecipesArmor c1f7433ddc1f04e2f0975991fe023308 +net/minecraft/src/RecipesArmorDyes 51844a7be29e9c9f7c4b0364da52fe5d +net/minecraft/src/RecipesCrafting c643ed23edfadf38d2262bd9da596cbc +net/minecraft/src/RecipesDyes bd1339db0120ce39a29fab9e90a57c72 +net/minecraft/src/RecipesFood f1c14a297c5b376fc7d02b3530dfe752 +net/minecraft/src/RecipesIngots 33d4411c2c440c3f96f4453d2ab87bf0 +net/minecraft/src/RecipesMapCloning 9e87f8d273d34aaf40d5be950cb99004 +net/minecraft/src/RecipesMapExtending d4b82f423c0ba9363a22da4ecb72eba1 +net/minecraft/src/RecipeSorter 7fdcab85640e12b36ca93419e2d19cf9 +net/minecraft/src/RecipesTools ba32c7642ce0ca935b5ba3609c49a5d8 +net/minecraft/src/RecipesWeapons 5c936e2c051df463f9f03cd8358720ab +net/minecraft/src/Rect2i b7aeeb50228f97738f266d044736ef71 +net/minecraft/src/RedstoneUpdateInfo 76c793d06992c65dce3997cd6f5d0ef3 +net/minecraft/src/RegionFile d7e6ba58476597b99fbb5db5d5d0c538 +net/minecraft/src/RegionFileCache ed5c994b4ba136fbc737ef76130e6d0e +net/minecraft/src/RegionFileChunkBuffer bff6df46ec8d38fd87ad532e1ea04b64 +net/minecraft/src/RegistryDefaulted 080956cb8c77a1af91732fb1e1e62a5e +net/minecraft/src/RegistrySimple 71d37632f4e921a8ed7e4cd09032cd1e +net/minecraft/src/Render 2fa36a9f737c59e89491687d1a5999a0 +net/minecraft/src/RenderArrow 1fc7c3491518c56614ef61ab3a742ec9 +net/minecraft/src/RenderBat 79ab5d9e67facc326c2fe99e28ea62de +net/minecraft/src/RenderBiped 8979b803184565bdffda579412711425 +net/minecraft/src/RenderBlaze 57b58af58ba90a1c10ca2c572fbbee4a +net/minecraft/src/RenderBlocks 156f4f550119bfa291c6cc6d687eec90 +net/minecraft/src/RenderBoat 0bdee3f9704ea79ef86695a5df493bd3 +net/minecraft/src/RenderChicken f272f54057cbcd0289d1d89164655258 +net/minecraft/src/RenderCow 145ca237d71751ca4ec9f430d472fc8c +net/minecraft/src/RenderCreeper 0a74b5c5ef815ca1ec725d196db39b27 +net/minecraft/src/RenderDragon 4e761aa08e3ee3592073141ab9fe2601 +net/minecraft/src/RenderEnchantmentTable e63a73547f4cb471bc4564fd2eb7b702 +net/minecraft/src/RenderEnderCrystal eb16c7ee2787fcfa456cce034af19713 +net/minecraft/src/RenderEnderman 6b4ad5dbd625a03f131dec8e4b62af8c +net/minecraft/src/RenderEndPortal 6db688235e99ce28e56d324e3fe3e328 +net/minecraft/src/RenderEngine d58f1bc6700184596ff43ff820dad1c8 +net/minecraft/src/RenderEntity 074d380d10dbe2439db78f4a44a9def9 +net/minecraft/src/RenderFallingSand d5a24a12ab9e57caf6e861a594300158 +net/minecraft/src/RenderFireball d57c9b571408838e98f157e50c7a1a42 +net/minecraft/src/RenderFish 2cd59b79835a8f21fa6155ac04d53d4d +net/minecraft/src/RenderGhast f9fce7ef20140acc874bc9bf5d99a2b7 +net/minecraft/src/RenderGiantZombie bfb3f4fb7782baaa24bc696db574bedd +net/minecraft/src/RenderGlobal 212c1529b170dc8631ead10911cdab32 +net/minecraft/src/RenderHelper 5bc96d008b0bc67dda7c3f26c5c7a541 +net/minecraft/src/RenderIronGolem f7de864a759eac9a04f324ed0be97d7a +net/minecraft/src/RenderItem 473d4502f680d00ac8ed8f727c5f6257 +net/minecraft/src/RenderItemFrame 73a5238913b5130f63ce5a53a0d00f86 +net/minecraft/src/RenderLightningBolt ac8ee589b60472d5c27608f645570613 +net/minecraft/src/RenderList 53d75747795b987ed3d9a3688041a831 +net/minecraft/src/RenderLiving 6d10db24abcf4211d4a9f1ad4e100105 +net/minecraft/src/RenderMagmaCube add0365c5fe603ffcbcc6dc4f5c20ff5 +net/minecraft/src/RenderManager 82a0e874ba6aa52caf33cf48f1c08ffc +net/minecraft/src/RenderMinecart 793ffea6a55c8e429f227944ad57c88f +net/minecraft/src/RenderMinecartMobSpawner fd2d8a3baa3e566566b2bad8893e2c2f +net/minecraft/src/RenderMooshroom 38c57997cd6604907c96f1e36126fcd8 +net/minecraft/src/RenderOcelot 7a2912c93f7507bd25435812c83f3515 +net/minecraft/src/RenderPainting 1631cded835c061e2769e916ac92e03d +net/minecraft/src/RenderPig 5d160e01d07461ff27455231c9b80b44 +net/minecraft/src/RenderPlayer 81cb70d520e47bf3dcf6834ae6d6b099 +net/minecraft/src/RenderSheep 11f28965f468b7453b73ebd856f95651 +net/minecraft/src/RenderSilverfish fb8588ae72cada7ecd07eddb8e926e07 +net/minecraft/src/RenderSkeleton ec3db13a4630c32c365ddc6fcb7f6ef3 +net/minecraft/src/RenderSlime 3e99793ab023435faebbbbb45c4af92a +net/minecraft/src/RenderSnowball f58e01133d6b6b7d373e57af9263f758 +net/minecraft/src/RenderSnowMan 1d3a5ff647b907209e0b67700d1db918 +net/minecraft/src/RenderSorter 02f7da88138d4c8b67389f8c7e448f43 +net/minecraft/src/RenderSpider c8a2d3775d37300d8b694c8ea2ed3d67 +net/minecraft/src/RenderSquid 9e766cd98a5670639fdad0835c41202b +net/minecraft/src/RenderTntMinecart ef34035e8f95265693e5fe745f4dc191 +net/minecraft/src/RenderTNTPrimed 9695354428f9571041ebc21d45d2b8e7 +net/minecraft/src/RenderVillager e6f2038911d93c089d5bf31f3c448e1b +net/minecraft/src/RenderWitch c35c90b490193c8bc1597c0dca55b6b6 +net/minecraft/src/RenderWither b951b43c7ac1380a42394a3e45040ae2 +net/minecraft/src/RenderWitherSkull d629afff176a30ae2a826bc9942ff36c +net/minecraft/src/RenderWolf 5266d7e09024beebe87f2302ff736c34 +net/minecraft/src/RenderXPOrb af3e49dedb67d06650c4cd1bedfdd34d +net/minecraft/src/RenderZombie ea6ea8e07ec6d233c32a746d5f1b051d +net/minecraft/src/ReportedException 50d8b76b78dac119c281659220f1cb96 +net/minecraft/src/Request 63df2d2f5a547463e6df87d821fcdb0a +net/minecraft/src/RequestDelete 4b8551dd2373c3c568717ac27d68082b +net/minecraft/src/RequestGet ec3a523b03f7d60f5981e37bf928e688 +net/minecraft/src/RequestPost b4bd79a7f2b1ec25e4884e4d30f6df93 +net/minecraft/src/RequestPut 292fd81021d6cb4cea2107e6ecc28628 +net/minecraft/src/RunnableTitleScreen 0d77ada1138e4a65a27ab747f16d4074 +net/minecraft/src/SaveFormatComparator 0a958abb62f799608937614f450437bb +net/minecraft/src/SaveFormatOld 87ebbe429a4c763991d5f710f584ae41 +net/minecraft/src/SaveHandler 334e65082c7d522db78c65d6426a8420 +net/minecraft/src/SaveHandlerMP b955386267b7847082715873d5d630b5 +net/minecraft/src/ScaledResolution 9e343664546e032b4105e3e708f4017a +net/minecraft/src/ScheduledSound 29afdd2b2ee9d634512bc452e3b3fc8a +net/minecraft/src/Score bea6cb11e73de86a8eebf34bfe124f3e +net/minecraft/src/Scoreboard 5cb29f6c640c02d97947b44f1c8183a4 +net/minecraft/src/ScoreboardSaveData d966580435cb56d78dd41e6b5e1d6066 +net/minecraft/src/ScoreComparator 13b88c647140f2199070710c0cf6e07c +net/minecraft/src/ScoreDummyCriteria b5ecaea632a65f85b5e01086515497af +net/minecraft/src/ScoreHealthCriteria 2b66463168155264764a93b708bfb67c +net/minecraft/src/ScoreObjective 78a4d04fd612bcbd5811baf74f1c7a53 +net/minecraft/src/ScoreObjectiveCriteria 31813ffb594493cbe5b0ec0a7f394a34 +net/minecraft/src/ScorePlayerTeam 9a74d884d8c38d10927c8d19859b1987 +net/minecraft/src/ScreenChatOptions 4b8679a7f81b85601656edb615f4ac1e +net/minecraft/src/ScreenShotHelper e1abcf6261ed3f105706b45464c6645e +net/minecraft/src/SelectionListBase 70a3c4b94c6c3b051e6f4be2563e8c10 +net/minecraft/src/SelectionListInvited fa7d3387aa09702455f8294674e7e472 +net/minecraft/src/ServerAddress 412ce0c23637cc24b16b45be547057a7 +net/minecraft/src/ServerBlockEvent 380a6161cd4561afce89ed01736e0984 +net/minecraft/src/ServerBlockEventList 97e4d46bd674d87852c852dc66df1d8e +net/minecraft/src/ServerCommand f1f70adb6b277e5fc50a883175d24053 +net/minecraft/src/ServerCommandManager ff5b0148bf6837d760071a4fb3f3a652 +net/minecraft/src/ServerCommandScoreboard 7cadaa2a0f9776d7c5c75bbfb540b57e +net/minecraft/src/ServerCommandTestFor f14b9d7b686922800f026fd679a272fb +net/minecraft/src/ServerConfigurationManager b678a0f890212b53ac37f22ed4e232ec +net/minecraft/src/ServerData af9452bd59ed6374cd045123cbd4da30 +net/minecraft/src/ServerList e368c2a628d3ff70f4fb1121910e8983 +net/minecraft/src/ServerListenThread f57fc7fcef5db83da7c6682a2b96764c +net/minecraft/src/ServerScoreboard 8078f886ae2696860c41f927a6fea18f +net/minecraft/src/Session ac7ef7cc794d16e5e44e1e701fe15dd6 +net/minecraft/src/ShapedRecipes 036079b6e0d1b38e2aebcce9d19f59e9 +net/minecraft/src/ShapelessRecipes a0ea031c264365bb408e865d5dd020ea +net/minecraft/src/Slot f8b830ee3bf7c1c1c89a35f00c55b064 +net/minecraft/src/SlotArmor 3fb5c290197e9775ce19f15aa5bb4fcf +net/minecraft/src/SlotBeacon 5eb6e9d688b535f600f18af19d9fcb8c +net/minecraft/src/SlotBrewingStandIngredient e471b098527481e7dfdebc9fc98363b2 +net/minecraft/src/SlotBrewingStandPotion e7607df662b92efc8e211bc07b8334d5 +net/minecraft/src/SlotCrafting 819fa69827a6e25291df19b64dcd37b1 +net/minecraft/src/SlotCreativeInventory 2d41f8ff4038fe91a645ea25fd9eb125 +net/minecraft/src/SlotEnchantment 9615692462716f49a3287e30d3e572ca +net/minecraft/src/SlotEnchantmentTable 16f68d2f2f164e82009a5a68edd85082 +net/minecraft/src/SlotFurnace 5f0354a7c2734c3fd41217a26a01ee44 +net/minecraft/src/SlotMerchantResult b3e5b3a50a0b5b51e8c7c7f33fc7d61a +net/minecraft/src/SlotRepair 66580fe34978c89fe07a0e41053ecbf7 +net/minecraft/src/SorterStatsBlock 38a2fcfe180954b9ee48ac8b10fd5a42 +net/minecraft/src/SorterStatsItem 0edf8d3808b2a252c45e9eee668224e1 +net/minecraft/src/SoundManager 2f962f0e222a37c7f286e150e21307a8 +net/minecraft/src/SoundPool 32321bd2ec7f905b13c7ac64d893a5fb +net/minecraft/src/SoundPoolEntry ee0b9f7260d1da22b660a7e78a88f358 +net/minecraft/src/SoundUpdaterMinecart e0f442f2630757a2d5ba2efd715f1992 +net/minecraft/src/SpawnerAnimals ae20073478b744225c6d42b5f3ca06b4 +net/minecraft/src/SpawnListEntry fe30fd336e0c794ffa6be287bccefc0c +net/minecraft/src/StatBase c8812c087a92d87fa1adf550c970a1b4 +net/minecraft/src/StatBasic 2caca8ce9ac3ea87bdb4072272efee2e +net/minecraft/src/StatCollector 76aa6ea72f6926ad438dac45bbec4a07 +net/minecraft/src/StatCrafting 761d94eb345e4d86276ee1fddad11866 +net/minecraft/src/StatFileWriter ad3781c465f49ea165ffff29d9276597 +net/minecraft/src/StatList d49926044e3cea47d96a8ef8b3298bb0 +net/minecraft/src/StatPlaceholder 6cf123ade54ffe3541ebe1c29f99f457 +net/minecraft/src/StatsSyncher a80a748b101713c8e825c2871a88790e +net/minecraft/src/StatStringFormatKeyInv fe4b89564c2ebe3fbe406524893ee3fb +net/minecraft/src/StatTypeDistance 12c7777c1d8d4ebf48a3f0b2cd991488 +net/minecraft/src/StatTypeSimple 6e5e6de91b2c8635bf32e0f645604daa +net/minecraft/src/StatTypeTime 01047e37e1e86c9378a2de4cf2866ad5 +net/minecraft/src/StepSound 1e7566c8a2d5757ae774107a6731a537 +net/minecraft/src/StepSoundAnvil f9d0abff83b3490b8bbaa4f91c246c83 +net/minecraft/src/StepSoundSand 341d50f998257ae03554f77ce68821ce +net/minecraft/src/StepSoundStone b9373ef0b92ee01da6c44ec82234feba +net/minecraft/src/Stitcher b0ca8aa2bfe94ebe7f865dab244a6bdf +net/minecraft/src/StitcherException c4a6f6e39aeb63041fef47cb6c61ca67 +net/minecraft/src/StitchHolder 3a0a53abcac1bf8fcc0516953eb2cde7 +net/minecraft/src/StitchSlot d2f9ac188b482e3e23033ba0b2722378 +net/minecraft/src/StringTranslate 2e83762d31be5c2ce74854766e828839 +net/minecraft/src/StringUtils 2bfe942af86a5d1fcd3c2856081a7bb6 +net/minecraft/src/StructureBoundingBox 9223962bf0518c042d8c27fa209d57b6 +net/minecraft/src/StructureComponent 40219178519d27c0476ea837920a426d +net/minecraft/src/StructureMineshaftPieces 6c18ad7032438a84f5893955d510e411 +net/minecraft/src/StructureMineshaftStart db0671b60efbca07987c1e512cb42eca +net/minecraft/src/StructureNetherBridgePieces ad59037df5794e374f3c77498bb76562 +net/minecraft/src/StructureNetherBridgePieceWeight 1e1d69d7bd8f621fc0190abead9e1511 +net/minecraft/src/StructureNetherBridgeStart 4b14cf8d3d69bdb6652f2ca46523bdf2 +net/minecraft/src/StructurePieceBlockSelector acdaf48e11f3e5f42c8437aca53898f9 +net/minecraft/src/StructureScatteredFeatureStart 826f192d8e660ab5d32ca91d1fa4bef4 +net/minecraft/src/StructureScatteredFeatureStones fa0310c72601d8aa8ad82abe1c952f02 +net/minecraft/src/StructureStart c65e17c125fc17d38a32c8b740b1d2d5 +net/minecraft/src/StructureStrongholdPieces df0f7b99ea02b304ccacfd901cc9ac08 +net/minecraft/src/StructureStrongholdPieceWeight 997365f94493e564c4dcd829528ac5a6 +net/minecraft/src/StructureStrongholdPieceWeight2 25b29f02ad797a14249ecc8077a1dcc1 +net/minecraft/src/StructureStrongholdPieceWeight3 5530bbd8a3cdeb11f80305b2d9733a48 +net/minecraft/src/StructureStrongholdStart a718edac88bb70f7ab640f9b9d570385 +net/minecraft/src/StructureStrongholdStones ca02e6522caf00fa78bbc385d28927f0 +net/minecraft/src/StructureVillagePieces 246cde72d25ea2feb08fa26ac4392cca +net/minecraft/src/StructureVillagePieceWeight 5d175b7226cacc30f50331b3e7614966 +net/minecraft/src/StructureVillageStart 8b260ba394bef4de14dde2bc1252f3f5 +net/minecraft/src/SyntaxErrorException 8c0ab45952582ba8b17a501a391cda68 +net/minecraft/src/TaskLongRunning 0b9cb70126852c4b792e95b0c8143dba +net/minecraft/src/TaskOnlineConnect ad3d36c88cc1c873fb6baea7181308a8 +net/minecraft/src/TaskResetWorld e167df0cad2968b54a94fb1c5deee5ed +net/minecraft/src/TaskWorldCreation f807c056c62e27d20cb21e1d3e207e3d +net/minecraft/src/TcpConnection 454304cc2e0d36da787557e812cc99fb +net/minecraft/src/TcpMasterThread a76c6c46ce9b785dc2ebc327fee98f1a +net/minecraft/src/TcpMonitorThread 77675f0eea9ee2e0c041b720ed3ae76c +net/minecraft/src/TcpReaderThread c1c6c85e59d87955e5680902e634f4e1 +net/minecraft/src/TcpWriterThread c0d6aa7fdaeaf0a93bbdbba943c7f4a9 +net/minecraft/src/Teleporter 518849944c8a1bce5c46dae412d22ce3 +net/minecraft/src/Tessellator 52efbc018affa284eb4e20b98ae4a358 +net/minecraft/src/Texture 15122ad1a7af50435d0be54d63c4e58c +net/minecraft/src/TextureClock f39c4c3f9a56f55a860bf8a4b031340b +net/minecraft/src/TextureCompass dbaab058f0a090db76993b71093792ab +net/minecraft/src/TexturedQuad e65a685db9735c03988b5d0913fb2fb7 +net/minecraft/src/TextureManager a816ea7c5b392a60efaa64195ac7f0c4 +net/minecraft/src/TextureMap 2e228e89b5b6ac78db51e88adc6eb712 +net/minecraft/src/TextureOffset 5d702898075fdf196167be0b0ef6b882 +net/minecraft/src/TexturePackCustom 93303c15a060e008a49aa5278aa7aac6 +net/minecraft/src/TexturePackDefault e890e875ec847ffeec660d2e8b5a202a +net/minecraft/src/TexturePackDownloadSuccess 4f241a31dd5aaf5a5c67eabce49519d6 +net/minecraft/src/TexturePackFolder 22b05dfd79f0b57b921f925be4b7a8d2 +net/minecraft/src/TexturePackImplementation 3cecfbcb6c953b693460e8be2320fc54 +net/minecraft/src/TexturePackList 468ec9f7bd755e17acdd185d5934d463 +net/minecraft/src/TextureStitched 4e034e3ba42c7eecb6e690583ae97dc5 +net/minecraft/src/ThreadClientSleep 9c61b59da8ca8789db931626d42df253 +net/minecraft/src/ThreadConnectToOnlineServer 832a85ca9818a675e020b1523b7f5caa +net/minecraft/src/ThreadConnectToServer 602c1b3c63aa1d5d42af2d391f6b0488 +net/minecraft/src/ThreadDownloadImage 38f300ca397f6f8a4613a549df530944 +net/minecraft/src/ThreadDownloadImageData a0ff10642e68d44b3434adf17331435b +net/minecraft/src/ThreadDownloadResources 5f7bd8a6a97ce4d139f492592ce422d7 +net/minecraft/src/ThreadedFileIOBase fe908083bf92ebe5538314ff9cf8239c +net/minecraft/src/ThreadLanServerFind 0cf69dc5c0173e4ddfa943eed07b01af +net/minecraft/src/ThreadLanServerPing c4ed5ec3a67f78ad8e1fd26d5d6fa116 +net/minecraft/src/ThreadLoginVerifier 66bafb237e8621c951df5f280e5968f7 +net/minecraft/src/ThreadMinecraftServer b26778d7fb362be9e02323020cd4b0da +net/minecraft/src/ThreadOnlineConnect 2ee7bc6bb9141258f6d3d2ae373a9f76 +net/minecraft/src/ThreadOnlineScreen 824088b1a042cd2e0efd499773884c75 +net/minecraft/src/ThreadPollServers 719d0365c76047b49fe828db83bf3684 +net/minecraft/src/ThreadShutdown 670756d5e5257782447eb3a86fd30224 +net/minecraft/src/ThreadStatSyncherReceive 0fd185d645685b1c9438a306e5f683a2 +net/minecraft/src/ThreadStatSyncherSend b1aa55f4e42dfce5832ec4621b798067 +net/minecraft/src/ThreadTitleScreen ed0741521bfd14ddeeab9bf673755122 +net/minecraft/src/TileEntity d167890081922e0946541c623a9ed406 +net/minecraft/src/TileEntityBeacon 981cbed4e8f70f05627cf5eae1d84f49 +net/minecraft/src/TileEntityBeaconRenderer c86cdd4aa8823a9f644838dcb4a3ec88 +net/minecraft/src/TileEntityBrewingStand 720c6450858519b5d72795ce07ec8ba5 +net/minecraft/src/TileEntityChest 1ac0a54a2c8723a2aad785f34166eb1c +net/minecraft/src/TileEntityChestRenderer df8def71f7d3734b173652af399fb8e6 +net/minecraft/src/TileEntityCommandBlock 52b60f9f926959767d0d11fa8099b366 +net/minecraft/src/TileEntityComparator 059166ce1d4685ae3d9ceadc4276d823 +net/minecraft/src/TileEntityDaylightDetector 2159666007f790be0f75446aba62d8de +net/minecraft/src/TileEntityDispenser 212e94a93e399d3fda1446981658f24c +net/minecraft/src/TileEntityDropper db6563e7f459ad79fa24fde5b53da3ce +net/minecraft/src/TileEntityEnchantmentTable 7eb9ee171d5adbb070212f6ce90779c1 +net/minecraft/src/TileEntityEnderChest 53aff9f7a387f14f105fd250531127c0 +net/minecraft/src/TileEntityEnderChestRenderer 602662411a73c4a269bcfc2eab5911d8 +net/minecraft/src/TileEntityEndPortal 13bf9fad659f2a6747207983ef1f38c3 +net/minecraft/src/TileEntityFurnace b9405b7e58f8d81c4dceb9e530a1ac68 +net/minecraft/src/TileEntityHopper 54b6bf5f15accb6218012b9807c15003 +net/minecraft/src/TileEntityMobSpawner 9f4c0165fdec05fcfeee2703383c9ae2 +net/minecraft/src/TileEntityMobSpawnerLogic c4f18280fccbde3333d781aa66d75e0e +net/minecraft/src/TileEntityMobSpawnerRenderer b5f91dd8b35da322cb4f782998f48e97 +net/minecraft/src/TileEntityNote 71f8c39656dc41178fa6c3192644a839 +net/minecraft/src/TileEntityPiston 0b6e565bd0ba06ff869c256de215b970 +net/minecraft/src/TileEntityRecordPlayer 1af6bddb31d8e86143561cdb9e335bf6 +net/minecraft/src/TileEntityRenderer 45e7b8ac2997a4f0b24dcd359431deff +net/minecraft/src/TileEntityRendererPiston 175ca6169ca4e054849f36369257819d +net/minecraft/src/TileEntitySign b38f26e12ad1cb62db4379175ce52a45 +net/minecraft/src/TileEntitySignRenderer 07d20b2bc6ff5c440ea1feedcd6fbd82 +net/minecraft/src/TileEntitySkull 2ad4db1fb94b19de9fa6d831d23736c1 +net/minecraft/src/TileEntitySkullRenderer 403a675dd6f3faeebe542c47b25aa7a9 +net/minecraft/src/TileEntitySpecialRenderer 20f84dc5a3e066980855e2d50bedb893 +net/minecraft/src/Timer f5051c4e0194b412a12f9a0ab730546d +net/minecraft/src/TimerTaskMcoServerListUpdate d40563b6c9b9c12882b5458e4808aada +net/minecraft/src/TimerTaskMcoServerListUpdateComparator f6cd50d195a8b08a87cca82687b102b2 +net/minecraft/src/Tuple 43e9b248e0c4cc3e8359036cb447f437 +net/minecraft/src/ValueObject 474ebdf2a52527707665a6d0f709c23e +net/minecraft/src/ValueObjectList 2d7838666d8ab651c50f196847009e91 +net/minecraft/src/ValueObjectSubscription b0e1269d6116c8d1813f47571af2a0f2 +net/minecraft/src/Vec3 701e24a7165756e9dd7b0fbdc4230599 +net/minecraft/src/Vec3Pool d57e4e444992821c66fecd80bfd51148 +net/minecraft/src/Village 3fa6b9a5c8320ac8fad257e9018b4a11 +net/minecraft/src/VillageAgressor 95034c99ef0011eff560a7fda504be56 +net/minecraft/src/VillageCollection 1785e5ac4b53dae23eeb365b7fba3a1b +net/minecraft/src/VillageDoorInfo 365685e18edecee0663d12edb96284af +net/minecraft/src/VillageSiege c198dbd0e8e44f40df311dd6549bedf6 +net/minecraft/src/WatchableObject 9f6de96d848a8681ef44869da91d8fef +net/minecraft/src/WeightedRandom c037bd24652fa73cbbe6b3916a07f2b4 +net/minecraft/src/WeightedRandomChestContent 8de9df94685729cb891ae32eb725149c +net/minecraft/src/WeightedRandomItem 37db9657d46b7a02ed489d375f88e5df +net/minecraft/src/WeightedRandomMinecart 41684475403a31271e3d80e2ad3dcbc3 +net/minecraft/src/World 12cabcd611ceedfe7942d4f9511370ae +net/minecraft/src/WorldChunkManager 7d47782372203d804063bafc34edf05c +net/minecraft/src/WorldChunkManagerHell 607d942bfbe10da8497f06ca2356435a +net/minecraft/src/WorldClient 34eb8ed3afb274b63fcbfa1ab3ee8d76 +net/minecraft/src/WorldGenBigMushroom 60d13e98248efc30a6cbcf783355a20c +net/minecraft/src/WorldGenBigTree 7b7895947997d84af2158f2285a3e297 +net/minecraft/src/WorldGenCactus b6eac43eedc33a13e6d98b32d3f183d4 +net/minecraft/src/WorldGenClay d1c20ba36fd7d0e0a09b0f871cbf1824 +net/minecraft/src/WorldGenDeadBush aa2c9d9cfe3225ec40363d7bc87cc14d +net/minecraft/src/WorldGenDesertWells e3bd9c4e3b27325fdb5979e44f27531c +net/minecraft/src/WorldGenDungeons f4165ea6c23bf9568ac1cfd551eaeb71 +net/minecraft/src/WorldGenerator f1a1c2821bf862ab111f63da2d585c32 +net/minecraft/src/WorldGeneratorBonusChest e8d48cff52b688c966b62ef4e8a4c859 +net/minecraft/src/WorldGenFire 57826579ebd0f8533e64a31fd828f3b6 +net/minecraft/src/WorldGenFlowers 51605d45bea1c48dd37c298668221ec0 +net/minecraft/src/WorldGenForest 7d778f8724bc11272afae53298fdb9bb +net/minecraft/src/WorldGenGlowStone1 8c20a6edd099e248a682020760dc8929 +net/minecraft/src/WorldGenGlowStone2 f947348ce468ff0202088ae26288291f +net/minecraft/src/WorldGenHellLava 44ea2b59014145e8da90ffd9c4e43924 +net/minecraft/src/WorldGenHugeTrees e39dbddacc16342d47d7fe35da1bfc81 +net/minecraft/src/WorldGenLakes a4fcaf1fbd848f88f596e1e4b4d26b2b +net/minecraft/src/WorldGenLiquids 10d36d3605022e14c44ffead0ade98a3 +net/minecraft/src/WorldGenMinable 0131bf70b54e321daa851e7527500bc5 +net/minecraft/src/WorldGenPumpkin 50e5ac286886850e682a20c8981adde1 +net/minecraft/src/WorldGenReed 26d14cf029bd5a571790f2af30a1c2dc +net/minecraft/src/WorldGenSand d3ebaac4c74698f61e95a412c18f7104 +net/minecraft/src/WorldGenShrub 149412db5d0d1a325446808f8279fae0 +net/minecraft/src/WorldGenSpikes dc80c962b24fbece78a6f53c00714f3b +net/minecraft/src/WorldGenSwamp 3fd6ba31284fd1a238d403c9c81f4aaf +net/minecraft/src/WorldGenTaiga1 868e7c45bb7ef40e023f609f9a626d67 +net/minecraft/src/WorldGenTaiga2 7dd1647838e26d4e0933b57ea980bc83 +net/minecraft/src/WorldGenTallGrass f2526b59446ef2b82ff185d0088a0cbd +net/minecraft/src/WorldGenTrees f1e9614f0dde9950422b8f9c315908cb +net/minecraft/src/WorldGenVines 091fd70f005b4eff434c0a2b37a1f084 +net/minecraft/src/WorldGenWaterlily bafebc3f45b8183563260bb94c039ee7 +net/minecraft/src/WorldInfo 2aa05090f4810ba332b77ea5a05336e8 +net/minecraft/src/WorldManager 2303bcffded3d9ddc4e0d264d7ea7f2b +net/minecraft/src/WorldProvider 3a59ca619f885cc07652bcfb4b121ac6 +net/minecraft/src/WorldProviderEnd dd8d0a67e4b17788e412c5efa025215d +net/minecraft/src/WorldProviderHell ec97b537c92211e0c72cfdcdb3a1399b +net/minecraft/src/WorldProviderSurface d46cef08d6f8a46660ffb9845c9cd665 +net/minecraft/src/WorldRenderer 5b958a3f55c0e2aa2c5131e612a3b5a9 +net/minecraft/src/WorldSavedData c95d51a64fa47af0255673066a9bfcfa +net/minecraft/src/WorldServer e6287967abacf62f76dca5d0f049865f +net/minecraft/src/WorldServerMulti 2907d0af67a2c31818e3bbb6e5ae4518 +net/minecraft/src/WorldSettings b2d5d8d1c99223954452efdd5998493e +net/minecraft/src/WorldType b0c41c2331ee97f125647a2b2ea160f0 +net/minecraft/src/WrongUsageException 2eb0c50b4067dfb0f1a6b87f2d6f8b36 diff --git a/minecraft.iml b/minecraft.iml new file mode 100644 index 0000000..88248b5 --- /dev/null +++ b/minecraft.iml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/net/minecraft/client/ClientBrandRetriever.java b/src/net/minecraft/client/ClientBrandRetriever.java new file mode 100644 index 0000000..2242032 --- /dev/null +++ b/src/net/minecraft/client/ClientBrandRetriever.java @@ -0,0 +1,7 @@ +package net.minecraft.client; + +public class ClientBrandRetriever { + public static String getClientModName() { + return "vanilla"; + } +} diff --git a/src/net/minecraft/client/Minecraft.java b/src/net/minecraft/client/Minecraft.java new file mode 100644 index 0000000..085f7e4 --- /dev/null +++ b/src/net/minecraft/client/Minecraft.java @@ -0,0 +1,1878 @@ +package net.minecraft.client; + +import java.awt.BorderLayout; +import java.awt.Canvas; +import java.awt.Color; +import java.awt.Component; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.Graphics; +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.text.DecimalFormat; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import javax.swing.JPanel; +import net.minecraft.src.AchievementList; +import net.minecraft.src.AnvilSaveConverter; +import net.minecraft.src.AxisAlignedBB; +import net.minecraft.src.Block; +import net.minecraft.src.CallableClientMemoryStats; +import net.minecraft.src.CallableClientProfiler; +import net.minecraft.src.CallableGLInfo; +import net.minecraft.src.CallableLWJGLVersion; +import net.minecraft.src.CallableModded; +import net.minecraft.src.CallableParticleScreenName; +import net.minecraft.src.CallableTexturePack; +import net.minecraft.src.CallableTickingScreenName; +import net.minecraft.src.CallableType2; +import net.minecraft.src.CallableUpdatingScreenName; +import net.minecraft.src.ColorizerFoliage; +import net.minecraft.src.ColorizerGrass; +import net.minecraft.src.CrashReport; +import net.minecraft.src.CrashReportCategory; +import net.minecraft.src.EffectRenderer; +import net.minecraft.src.EntityBoat; +import net.minecraft.src.EntityClientPlayerMP; +import net.minecraft.src.EntityItemFrame; +import net.minecraft.src.EntityList; +import net.minecraft.src.EntityLiving; +import net.minecraft.src.EntityMinecart; +import net.minecraft.src.EntityPainting; +import net.minecraft.src.EntityRenderer; +import net.minecraft.src.EnumMovingObjectType; +import net.minecraft.src.EnumOS; +import net.minecraft.src.EnumOSHelper; +import net.minecraft.src.EnumOptions; +import net.minecraft.src.FontRenderer; +import net.minecraft.src.GLAllocation; +import net.minecraft.src.GameSettings; +import net.minecraft.src.GameWindowListener; +import net.minecraft.src.GuiAchievement; +import net.minecraft.src.GuiChat; +import net.minecraft.src.GuiConnecting; +import net.minecraft.src.GuiGameOver; +import net.minecraft.src.GuiIngame; +import net.minecraft.src.GuiIngameMenu; +import net.minecraft.src.GuiInventory; +import net.minecraft.src.GuiMainMenu; +import net.minecraft.src.GuiMemoryErrorScreen; +import net.minecraft.src.GuiScreen; +import net.minecraft.src.GuiSleepMP; +import net.minecraft.src.HttpUtil; +import net.minecraft.src.ILogAgent; +import net.minecraft.src.INetworkManager; +import net.minecraft.src.IPlayerUsage; +import net.minecraft.src.ISaveFormat; +import net.minecraft.src.ISaveHandler; +import net.minecraft.src.IntegratedServer; +import net.minecraft.src.Item; +import net.minecraft.src.ItemRenderer; +import net.minecraft.src.ItemStack; +import net.minecraft.src.KeyBinding; +import net.minecraft.src.LoadingScreenRenderer; +import net.minecraft.src.LogAgent; +import net.minecraft.src.MathHelper; +import net.minecraft.src.MemoryConnection; +import net.minecraft.src.MinecraftError; +import net.minecraft.src.MinecraftFakeLauncher; +import net.minecraft.src.MouseHelper; +import net.minecraft.src.MovementInputFromOptions; +import net.minecraft.src.MovingObjectPosition; +import net.minecraft.src.NetClientHandler; +import net.minecraft.src.OpenGlHelper; +import net.minecraft.src.Packet3Chat; +import net.minecraft.src.PlayerControllerMP; +import net.minecraft.src.PlayerUsageSnooper; +import net.minecraft.src.Profiler; +import net.minecraft.src.ProfilerResult; +import net.minecraft.src.RenderBlocks; +import net.minecraft.src.RenderEngine; +import net.minecraft.src.RenderGlobal; +import net.minecraft.src.RenderManager; +import net.minecraft.src.ReportedException; +import net.minecraft.src.ScaledResolution; +import net.minecraft.src.ScreenShotHelper; +import net.minecraft.src.ServerData; +import net.minecraft.src.Session; +import net.minecraft.src.SoundManager; +import net.minecraft.src.StatCollector; +import net.minecraft.src.StatFileWriter; +import net.minecraft.src.StatList; +import net.minecraft.src.StatStringFormatKeyInv; +import net.minecraft.src.StringTranslate; +import net.minecraft.src.Tessellator; +import net.minecraft.src.TextureManager; +import net.minecraft.src.TexturePackList; +import net.minecraft.src.ThreadClientSleep; +import net.minecraft.src.ThreadDownloadResources; +import net.minecraft.src.ThreadShutdown; +import net.minecraft.src.Timer; +import net.minecraft.src.WorldClient; +import net.minecraft.src.WorldInfo; +import net.minecraft.src.WorldRenderer; +import net.minecraft.src.WorldSettings; +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.GL11; +import org.lwjgl.opengl.GL20; +import org.lwjgl.opengl.GLContext; +import org.lwjgl.opengl.PixelFormat; +import org.lwjgl.util.glu.GLU; + +public abstract class Minecraft implements Runnable, IPlayerUsage { + public static byte[] memoryReserve = new byte[10485760]; + private final ILogAgent field_94139_O = new LogAgent("Minecraft-Client", " [CLIENT]", (new File(getMinecraftDir(), "output-client.log")).getAbsolutePath()); + private ServerData currentServerData; + private static Minecraft theMinecraft; + public PlayerControllerMP playerController; + private boolean fullscreen = false; + private boolean hasCrashed = false; + private CrashReport crashReporter; + public int displayWidth; + public int displayHeight; + private Timer timer = new Timer(20.0F); + private PlayerUsageSnooper usageSnooper = new PlayerUsageSnooper("client", this); + public WorldClient theWorld; + public RenderGlobal renderGlobal; + public EntityClientPlayerMP thePlayer; + public EntityLiving renderViewEntity; + public EntityLiving pointedEntityLiving; + public EffectRenderer effectRenderer; + public Session session = null; + public String minecraftUri; + public Canvas mcCanvas; + public boolean hideQuitButton = false; + public volatile boolean isGamePaused = false; + public RenderEngine renderEngine; + public FontRenderer fontRenderer; + public FontRenderer standardGalacticFontRenderer; + public GuiScreen currentScreen = null; + public LoadingScreenRenderer loadingScreen; + public EntityRenderer entityRenderer; + private ThreadDownloadResources downloadResourcesThread; + private int leftClickCounter = 0; + private int tempDisplayWidth; + private int tempDisplayHeight; + private IntegratedServer theIntegratedServer; + public GuiAchievement guiAchievement; + public GuiIngame ingameGUI; + public boolean skipRenderWorld = false; + public MovingObjectPosition objectMouseOver = null; + public GameSettings gameSettings; + protected MinecraftApplet mcApplet; + public SoundManager sndManager = new SoundManager(); + public MouseHelper mouseHelper; + public TexturePackList texturePackList; + public File mcDataDir; + private ISaveFormat saveLoader; + private static int debugFPS; + private int rightClickDelayTimer = 0; + private boolean refreshTexturePacksScheduled; + public StatFileWriter statFileWriter; + private String serverName; + private int serverPort; + boolean isTakingScreenshot = false; + public boolean inGameHasFocus = false; + long systemTime = getSystemTime(); + private int joinPlayerCounter = 0; + private boolean isDemo; + private INetworkManager myNetworkManager; + private boolean integratedServerIsRunning; + public final Profiler mcProfiler = new Profiler(); + private long field_83002_am = -1L; + private static File minecraftDir = null; + public volatile boolean running = true; + public String debug = ""; + long debugUpdateTime = getSystemTime(); + int fpsCounter = 0; + long prevFrameTime = -1L; + private String debugProfilerName = "root"; + + public Minecraft(Canvas var1, MinecraftApplet var2, int var3, int var4, boolean var5) { + StatList.nopInit(); + this.tempDisplayHeight = var4; + this.fullscreen = var5; + this.mcApplet = var2; + Packet3Chat.maxChatLength = Short.MAX_VALUE; + this.startTimerHackThread(); + this.mcCanvas = var1; + this.displayWidth = var3; + this.displayHeight = var4; + this.fullscreen = var5; + theMinecraft = this; + TextureManager.init(); + this.guiAchievement = new GuiAchievement(this); + } + + private void startTimerHackThread() { + ThreadClientSleep var1 = new ThreadClientSleep(this, "Timer hack thread"); + var1.setDaemon(true); + var1.start(); + } + + public void crashed(CrashReport var1) { + this.hasCrashed = true; + this.crashReporter = var1; + } + + public void displayCrashReport(CrashReport var1) { + this.hasCrashed = true; + this.displayCrashReportInternal(var1); + } + + public abstract void displayCrashReportInternal(CrashReport var1); + + public void setServer(String var1, int var2) { + this.serverName = var1; + this.serverPort = var2; + } + + public void startGame() throws LWJGLException { + if(this.mcCanvas != null) { + Graphics var1 = this.mcCanvas.getGraphics(); + if(var1 != null) { + var1.setColor(Color.BLACK); + var1.fillRect(0, 0, this.displayWidth, this.displayHeight); + var1.dispose(); + } + + Display.setParent(this.mcCanvas); + } else if(this.fullscreen) { + Display.setFullscreen(true); + 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.displayWidth, this.displayHeight)); + } + + Display.setTitle("Minecraft Minecraft 1.5.2"); + this.getLogAgent().logInfo("LWJGL Version: " + Sys.getVersion()); + + try { + Display.create((new PixelFormat()).withDepthBits(24)); + } catch (LWJGLException var5) { + var5.printStackTrace(); + + try { + Thread.sleep(1000L); + } catch (InterruptedException var4) { + } + + Display.create(); + } + + OpenGlHelper.initializeTextures(); + this.mcDataDir = getMinecraftDir(); + this.saveLoader = new AnvilSaveConverter(new File(this.mcDataDir, "saves")); + this.gameSettings = new GameSettings(this, this.mcDataDir); + this.texturePackList = new TexturePackList(this.mcDataDir, this); + this.renderEngine = new RenderEngine(this.texturePackList, this.gameSettings); + this.loadScreen(); + this.fontRenderer = new FontRenderer(this.gameSettings, "/font/default.png", this.renderEngine, false); + this.standardGalacticFontRenderer = new FontRenderer(this.gameSettings, "/font/alternate.png", this.renderEngine, false); + if(this.gameSettings.language != null) { + StringTranslate.getInstance().setLanguage(this.gameSettings.language, false); + this.fontRenderer.setUnicodeFlag(StringTranslate.getInstance().isUnicode()); + this.fontRenderer.setBidiFlag(StringTranslate.isBidirectional(this.gameSettings.language)); + } + + ColorizerGrass.setGrassBiomeColorizer(this.renderEngine.getTextureContents("/misc/grasscolor.png")); + ColorizerFoliage.setFoliageBiomeColorizer(this.renderEngine.getTextureContents("/misc/foliagecolor.png")); + this.entityRenderer = new EntityRenderer(this); + RenderManager.instance.itemRenderer = new ItemRenderer(this); + this.statFileWriter = new StatFileWriter(this.session, this.mcDataDir); + AchievementList.openInventory.setStatStringFormatter(new StatStringFormatKeyInv(this)); + this.loadScreen(); + Mouse.create(); + this.mouseHelper = new MouseHelper(this.mcCanvas, this.gameSettings); + this.checkGLError("Pre startup"); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glClearDepth(1.0D); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDepthFunc(GL11.GL_LEQUAL); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + GL11.glCullFace(GL11.GL_BACK); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + this.checkGLError("Startup"); + this.sndManager.loadSoundSettings(this.gameSettings); + this.renderGlobal = new RenderGlobal(this, this.renderEngine); + this.renderEngine.refreshTextureMaps(); + GL11.glViewport(0, 0, this.displayWidth, this.displayHeight); + this.effectRenderer = new EffectRenderer(this.theWorld, this.renderEngine); + + try { + this.downloadResourcesThread = new ThreadDownloadResources(this.mcDataDir, this); + this.downloadResourcesThread.start(); + } catch (Exception var3) { + } + + this.checkGLError("Post startup"); + this.ingameGUI = new GuiIngame(this); + if(this.serverName != null) { + this.displayGuiScreen(new GuiConnecting(new GuiMainMenu(), this, this.serverName, this.serverPort)); + } else { + this.displayGuiScreen(new GuiMainMenu()); + } + + this.loadingScreen = new LoadingScreenRenderer(this); + if(this.gameSettings.fullScreen && !this.fullscreen) { + this.toggleFullscreen(); + } + + } + + private void loadScreen() throws LWJGLException { + ScaledResolution var1 = new ScaledResolution(this.gameSettings, this.displayWidth, this.displayHeight); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT | GL11.GL_COLOR_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glOrtho(0.0D, var1.getScaledWidth_double(), var1.getScaledHeight_double(), 0.0D, 1000.0D, 3000.0D); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + GL11.glTranslatef(0.0F, 0.0F, -2000.0F); + GL11.glViewport(0, 0, this.displayWidth, this.displayHeight); + GL11.glClearColor(0.0F, 0.0F, 0.0F, 0.0F); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_FOG); + Tessellator var2 = Tessellator.instance; + this.renderEngine.bindTexture("/title/mojang.png"); + var2.startDrawingQuads(); + var2.setColorOpaque_I(16777215); + var2.addVertexWithUV(0.0D, (double)this.displayHeight, 0.0D, 0.0D, 0.0D); + var2.addVertexWithUV((double)this.displayWidth, (double)this.displayHeight, 0.0D, 0.0D, 0.0D); + var2.addVertexWithUV((double)this.displayWidth, 0.0D, 0.0D, 0.0D, 0.0D); + var2.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, 0.0D); + var2.draw(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var2.setColorOpaque_I(16777215); + short var3 = 256; + short var4 = 256; + this.scaledTessellator((var1.getScaledWidth() - var3) / 2, (var1.getScaledHeight() - var4) / 2, 0, 0, var3, var4); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_FOG); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + Display.swapBuffers(); + } + + public void scaledTessellator(int var1, int var2, int var3, int var4, int var5, int var6) { + float var7 = 0.00390625F; + float var8 = 0.00390625F; + Tessellator var9 = Tessellator.instance; + var9.startDrawingQuads(); + var9.addVertexWithUV((double)(var1 + 0), (double)(var2 + var6), 0.0D, (double)((float)(var3 + 0) * var7), (double)((float)(var4 + var6) * var8)); + var9.addVertexWithUV((double)(var1 + var5), (double)(var2 + var6), 0.0D, (double)((float)(var3 + var5) * var7), (double)((float)(var4 + var6) * var8)); + var9.addVertexWithUV((double)(var1 + var5), (double)(var2 + 0), 0.0D, (double)((float)(var3 + var5) * var7), (double)((float)(var4 + 0) * var8)); + var9.addVertexWithUV((double)(var1 + 0), (double)(var2 + 0), 0.0D, (double)((float)(var3 + 0) * var7), (double)((float)(var4 + 0) * var8)); + var9.draw(); + } + + public static File getMinecraftDir() { + if(minecraftDir == null) { + minecraftDir = getAppDir("minecraft"); + } + + return minecraftDir; + } + + public static File getAppDir(String var0) { + String var1 = System.getProperty("user.home", "."); + File var2; + switch(EnumOSHelper.field_90049_a[getOs().ordinal()]) { + case 1: + case 2: + var2 = new File(var1, '.' + var0 + '/'); + break; + case 3: + String var3 = System.getenv("APPDATA"); + if(var3 != null) { + var2 = new File(var3, "." + var0 + '/'); + } else { + var2 = new File(var1, '.' + var0 + '/'); + } + break; + case 4: + var2 = new File(var1, "Library/Application Support/" + var0); + break; + default: + var2 = new File(var1, var0 + '/'); + } + + if(!var2.exists() && !var2.mkdirs()) { + throw new RuntimeException("The working directory could not be created: " + var2); + } else { + return var2; + } + } + + public static EnumOS getOs() { + String var0 = System.getProperty("os.name").toLowerCase(); + return var0.contains("win") ? EnumOS.WINDOWS : (var0.contains("mac") ? EnumOS.MACOS : (var0.contains("solaris") ? EnumOS.SOLARIS : (var0.contains("sunos") ? EnumOS.SOLARIS : (var0.contains("linux") ? EnumOS.LINUX : (var0.contains("unix") ? EnumOS.LINUX : EnumOS.UNKNOWN))))); + } + + public ISaveFormat getSaveLoader() { + return this.saveLoader; + } + + public void displayGuiScreen(GuiScreen var1) { + if(this.currentScreen != null) { + this.currentScreen.onGuiClosed(); + } + + this.statFileWriter.syncStats(); + if(var1 == null && this.theWorld == null) { + var1 = new GuiMainMenu(); + } else if(var1 == null && this.thePlayer.getHealth() <= 0) { + var1 = new GuiGameOver(); + } + + if(var1 instanceof GuiMainMenu) { + this.gameSettings.showDebugInfo = false; + this.ingameGUI.getChatGUI().clearChatMessages(); + } + + this.currentScreen = (GuiScreen)var1; + if(var1 != null) { + this.setIngameNotInFocus(); + ScaledResolution var2 = new ScaledResolution(this.gameSettings, this.displayWidth, this.displayHeight); + int var3 = var2.getScaledWidth(); + int var4 = var2.getScaledHeight(); + ((GuiScreen)var1).setWorldAndResolution(this, var3, var4); + this.skipRenderWorld = false; + } else { + this.setIngameFocus(); + } + + } + + private void checkGLError(String var1) { + int var2 = GL11.glGetError(); + if(var2 != 0) { + String var3 = GLU.gluErrorString(var2); + this.getLogAgent().logSevere("########## GL ERROR ##########"); + this.getLogAgent().logSevere("@ " + var1); + this.getLogAgent().logSevere(var2 + ": " + var3); + } + + } + + public void shutdownMinecraftApplet() { + try { + this.statFileWriter.syncStats(); + + try { + if(this.downloadResourcesThread != null) { + this.downloadResourcesThread.closeMinecraft(); + } + } catch (Exception var9) { + } + + this.getLogAgent().logInfo("Stopping!"); + + try { + this.loadWorld((WorldClient)null); + } catch (Throwable var8) { + } + + try { + GLAllocation.deleteTexturesAndDisplayLists(); + } catch (Throwable var7) { + } + + this.sndManager.closeMinecraft(); + Mouse.destroy(); + Keyboard.destroy(); + } finally { + Display.destroy(); + if(!this.hasCrashed) { + System.exit(0); + } + + } + + System.gc(); + } + + public void run() { + this.running = true; + + try { + this.startGame(); + } catch (Exception var11) { + var11.printStackTrace(); + this.displayCrashReport(this.addGraphicsAndWorldToCrashReport(new CrashReport("Failed to start game", var11))); + return; + } + + try { + try { + while(this.running) { + if(this.hasCrashed && this.crashReporter != null) { + this.displayCrashReport(this.crashReporter); + return; + } + + if(this.refreshTexturePacksScheduled) { + this.refreshTexturePacksScheduled = false; + this.renderEngine.refreshTextures(); + } + + try { + this.runGameLoop(); + } catch (OutOfMemoryError var10) { + this.freeMemory(); + this.displayGuiScreen(new GuiMemoryErrorScreen()); + System.gc(); + } + } + + return; + } catch (MinecraftError var12) { + } catch (ReportedException var13) { + this.addGraphicsAndWorldToCrashReport(var13.getCrashReport()); + this.freeMemory(); + var13.printStackTrace(); + this.displayCrashReport(var13.getCrashReport()); + } catch (Throwable var14) { + CrashReport var2 = this.addGraphicsAndWorldToCrashReport(new CrashReport("Unexpected error", var14)); + this.freeMemory(); + var14.printStackTrace(); + this.displayCrashReport(var2); + } + + } finally { + this.shutdownMinecraftApplet(); + } + } + + private void runGameLoop() { + if(this.mcApplet != null && !this.mcApplet.isActive()) { + this.running = false; + } else { + AxisAlignedBB.getAABBPool().cleanPool(); + if(this.theWorld != null) { + this.theWorld.getWorldVec3Pool().clear(); + } + + this.mcProfiler.startSection("root"); + if(this.mcCanvas == null && Display.isCloseRequested()) { + this.shutdown(); + } + + if(this.isGamePaused && this.theWorld != null) { + float var1 = this.timer.renderPartialTicks; + this.timer.updateTimer(); + this.timer.renderPartialTicks = var1; + } else { + this.timer.updateTimer(); + } + + long var6 = System.nanoTime(); + this.mcProfiler.startSection("tick"); + + for(int var3 = 0; var3 < this.timer.elapsedTicks; ++var3) { + this.runTick(); + } + + this.mcProfiler.endStartSection("preRenderErrors"); + long var7 = System.nanoTime() - var6; + this.checkGLError("Pre render"); + RenderBlocks.fancyGrass = this.gameSettings.fancyGraphics; + this.mcProfiler.endStartSection("sound"); + this.sndManager.setListener(this.thePlayer, this.timer.renderPartialTicks); + if(!this.isGamePaused) { + this.sndManager.func_92071_g(); + } + + this.mcProfiler.endSection(); + this.mcProfiler.startSection("render"); + this.mcProfiler.startSection("display"); + GL11.glEnable(GL11.GL_TEXTURE_2D); + if(!Keyboard.isKeyDown(Keyboard.KEY_F7)) { + Display.update(); + } + + if(this.thePlayer != null && this.thePlayer.isEntityInsideOpaqueBlock()) { + this.gameSettings.thirdPersonView = 0; + } + + this.mcProfiler.endSection(); + if(!this.skipRenderWorld) { + this.mcProfiler.endStartSection("gameRenderer"); + this.entityRenderer.updateCameraAndRender(this.timer.renderPartialTicks); + this.mcProfiler.endSection(); + } + + GL11.glFlush(); + this.mcProfiler.endSection(); + if(!Display.isActive() && this.fullscreen) { + this.toggleFullscreen(); + } + + if(this.gameSettings.showDebugInfo && this.gameSettings.showDebugProfilerChart) { + if(!this.mcProfiler.profilingEnabled) { + this.mcProfiler.clearProfiling(); + } + + this.mcProfiler.profilingEnabled = true; + this.displayDebugInfo(var7); + } else { + this.mcProfiler.profilingEnabled = false; + this.prevFrameTime = System.nanoTime(); + } + + this.guiAchievement.updateAchievementWindow(); + this.mcProfiler.startSection("root"); + Thread.yield(); + if(Keyboard.isKeyDown(Keyboard.KEY_F7)) { + Display.update(); + } + + this.screenshotListener(); + if(this.mcCanvas != null && !this.fullscreen && (this.mcCanvas.getWidth() != this.displayWidth || this.mcCanvas.getHeight() != this.displayHeight)) { + this.displayWidth = this.mcCanvas.getWidth(); + this.displayHeight = this.mcCanvas.getHeight(); + if(this.displayWidth <= 0) { + this.displayWidth = 1; + } + + if(this.displayHeight <= 0) { + this.displayHeight = 1; + } + + this.resize(this.displayWidth, this.displayHeight); + } + + this.checkGLError("Post render"); + ++this.fpsCounter; + boolean var5 = this.isGamePaused; + this.isGamePaused = this.isSingleplayer() && this.currentScreen != null && this.currentScreen.doesGuiPauseGame() && !this.theIntegratedServer.getPublic(); + if(this.isIntegratedServerRunning() && this.thePlayer != null && this.thePlayer.sendQueue != null && this.isGamePaused != var5) { + ((MemoryConnection)this.thePlayer.sendQueue.getNetManager()).setGamePaused(this.isGamePaused); + } + + while(getSystemTime() >= this.debugUpdateTime + 1000L) { + debugFPS = this.fpsCounter; + this.debug = debugFPS + " fps, " + WorldRenderer.chunksUpdated + " chunk updates"; + WorldRenderer.chunksUpdated = 0; + this.debugUpdateTime += 1000L; + this.fpsCounter = 0; + this.usageSnooper.addMemoryStatsToSnooper(); + if(!this.usageSnooper.isSnooperRunning()) { + this.usageSnooper.startSnooper(); + } + } + + this.mcProfiler.endSection(); + if(this.func_90020_K() > 0) { + Display.sync(EntityRenderer.performanceToFps(this.func_90020_K())); + } + + } + } + + private int func_90020_K() { + return this.currentScreen != null && this.currentScreen instanceof GuiMainMenu ? 2 : this.gameSettings.limitFramerate; + } + + public void freeMemory() { + try { + memoryReserve = new byte[0]; + this.renderGlobal.deleteAllDisplayLists(); + } catch (Throwable var4) { + } + + try { + System.gc(); + AxisAlignedBB.getAABBPool().clearPool(); + this.theWorld.getWorldVec3Pool().clearAndFreeCache(); + } catch (Throwable var3) { + } + + try { + System.gc(); + this.loadWorld((WorldClient)null); + } catch (Throwable var2) { + } + + System.gc(); + } + + private void screenshotListener() { + if(Keyboard.isKeyDown(Keyboard.KEY_F2)) { + if(!this.isTakingScreenshot) { + this.isTakingScreenshot = true; + this.ingameGUI.getChatGUI().printChatMessage(ScreenShotHelper.saveScreenshot(minecraftDir, this.displayWidth, this.displayHeight)); + } + } else { + this.isTakingScreenshot = false; + } + + } + + private void updateDebugProfilerName(int var1) { + List var2 = this.mcProfiler.getProfilingData(this.debugProfilerName); + if(var2 != null && !var2.isEmpty()) { + ProfilerResult var3 = (ProfilerResult)var2.remove(0); + if(var1 == 0) { + if(var3.field_76331_c.length() > 0) { + int var4 = this.debugProfilerName.lastIndexOf("."); + if(var4 >= 0) { + this.debugProfilerName = this.debugProfilerName.substring(0, var4); + } + } + } else { + --var1; + if(var1 < var2.size() && !((ProfilerResult)var2.get(var1)).field_76331_c.equals("unspecified")) { + if(this.debugProfilerName.length() > 0) { + this.debugProfilerName = this.debugProfilerName + "."; + } + + this.debugProfilerName = this.debugProfilerName + ((ProfilerResult)var2.get(var1)).field_76331_c; + } + } + + } + } + + private void displayDebugInfo(long var1) { + if(this.mcProfiler.profilingEnabled) { + List var3 = this.mcProfiler.getProfilingData(this.debugProfilerName); + ProfilerResult var4 = (ProfilerResult)var3.remove(0); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glLoadIdentity(); + GL11.glOrtho(0.0D, (double)this.displayWidth, (double)this.displayHeight, 0.0D, 1000.0D, 3000.0D); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + GL11.glTranslatef(0.0F, 0.0F, -2000.0F); + GL11.glLineWidth(1.0F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + Tessellator var5 = Tessellator.instance; + short var6 = 160; + int var7 = this.displayWidth - var6 - 10; + int var8 = this.displayHeight - var6 * 2; + GL11.glEnable(GL11.GL_BLEND); + var5.startDrawingQuads(); + var5.setColorRGBA_I(0, 200); + var5.addVertex((double)((float)var7 - (float)var6 * 1.1F), (double)((float)var8 - (float)var6 * 0.6F - 16.0F), 0.0D); + var5.addVertex((double)((float)var7 - (float)var6 * 1.1F), (double)(var8 + var6 * 2), 0.0D); + var5.addVertex((double)((float)var7 + (float)var6 * 1.1F), (double)(var8 + var6 * 2), 0.0D); + var5.addVertex((double)((float)var7 + (float)var6 * 1.1F), (double)((float)var8 - (float)var6 * 0.6F - 16.0F), 0.0D); + var5.draw(); + GL11.glDisable(GL11.GL_BLEND); + double var9 = 0.0D; + + int var13; + for(int var11 = 0; var11 < var3.size(); ++var11) { + ProfilerResult var12 = (ProfilerResult)var3.get(var11); + var13 = MathHelper.floor_double(var12.field_76332_a / 4.0D) + 1; + var5.startDrawing(6); + var5.setColorOpaque_I(var12.func_76329_a()); + var5.addVertex((double)var7, (double)var8, 0.0D); + + int var14; + float var15; + float var16; + float var17; + for(var14 = var13; var14 >= 0; --var14) { + var15 = (float)((var9 + var12.field_76332_a * (double)var14 / (double)var13) * (double)((float)Math.PI) * 2.0D / 100.0D); + var16 = MathHelper.sin(var15) * (float)var6; + var17 = MathHelper.cos(var15) * (float)var6 * 0.5F; + var5.addVertex((double)((float)var7 + var16), (double)((float)var8 - var17), 0.0D); + } + + var5.draw(); + var5.startDrawing(5); + var5.setColorOpaque_I((var12.func_76329_a() & 16711422) >> 1); + + for(var14 = var13; var14 >= 0; --var14) { + var15 = (float)((var9 + var12.field_76332_a * (double)var14 / (double)var13) * (double)((float)Math.PI) * 2.0D / 100.0D); + var16 = MathHelper.sin(var15) * (float)var6; + var17 = MathHelper.cos(var15) * (float)var6 * 0.5F; + var5.addVertex((double)((float)var7 + var16), (double)((float)var8 - var17), 0.0D); + var5.addVertex((double)((float)var7 + var16), (double)((float)var8 - var17 + 10.0F), 0.0D); + } + + var5.draw(); + var9 += var12.field_76332_a; + } + + DecimalFormat var18 = new DecimalFormat("##0.00"); + GL11.glEnable(GL11.GL_TEXTURE_2D); + String var19 = ""; + if(!var4.field_76331_c.equals("unspecified")) { + var19 = var19 + "[0] "; + } + + if(var4.field_76331_c.length() == 0) { + var19 = var19 + "ROOT "; + } else { + var19 = var19 + var4.field_76331_c + " "; + } + + var13 = 16777215; + this.fontRenderer.drawStringWithShadow(var19, var7 - var6, var8 - var6 / 2 - 16, var13); + FontRenderer var10000 = this.fontRenderer; + var19 = var18.format(var4.field_76330_b) + "%"; + var10000.drawStringWithShadow(var19, var7 + var6 - this.fontRenderer.getStringWidth(var19), var8 - var6 / 2 - 16, var13); + + for(int var21 = 0; var21 < var3.size(); ++var21) { + ProfilerResult var20 = (ProfilerResult)var3.get(var21); + String var22 = ""; + if(var20.field_76331_c.equals("unspecified")) { + var22 = var22 + "[?] "; + } else { + var22 = var22 + "[" + (var21 + 1) + "] "; + } + + var22 = var22 + var20.field_76331_c; + this.fontRenderer.drawStringWithShadow(var22, var7 - var6, var8 + var6 / 2 + var21 * 8 + 20, var20.func_76329_a()); + var10000 = this.fontRenderer; + var22 = var18.format(var20.field_76332_a) + "%"; + var10000.drawStringWithShadow(var22, var7 + var6 - 50 - this.fontRenderer.getStringWidth(var22), var8 + var6 / 2 + var21 * 8 + 20, var20.func_76329_a()); + var10000 = this.fontRenderer; + var22 = var18.format(var20.field_76330_b) + "%"; + var10000.drawStringWithShadow(var22, var7 + var6 - this.fontRenderer.getStringWidth(var22), var8 + var6 / 2 + var21 * 8 + 20, var20.func_76329_a()); + } + + } + } + + public void shutdown() { + this.running = false; + } + + public void setIngameFocus() { + if(Display.isActive()) { + if(!this.inGameHasFocus) { + this.inGameHasFocus = true; + this.mouseHelper.grabMouseCursor(); + this.displayGuiScreen((GuiScreen)null); + this.leftClickCounter = 10000; + } + } + } + + public void setIngameNotInFocus() { + if(this.inGameHasFocus) { + KeyBinding.unPressAllKeys(); + this.inGameHasFocus = false; + this.mouseHelper.ungrabMouseCursor(); + } + } + + public void displayInGameMenu() { + if(this.currentScreen == null) { + this.displayGuiScreen(new GuiIngameMenu()); + if(this.isSingleplayer() && !this.theIntegratedServer.getPublic()) { + this.sndManager.pauseAllSounds(); + } + + } + } + + private void sendClickBlockToController(int var1, boolean var2) { + if(!var2) { + this.leftClickCounter = 0; + } + + if(var1 != 0 || this.leftClickCounter <= 0) { + if(var2 && this.objectMouseOver != null && this.objectMouseOver.typeOfHit == EnumMovingObjectType.TILE && var1 == 0) { + int var3 = this.objectMouseOver.blockX; + int var4 = this.objectMouseOver.blockY; + int var5 = this.objectMouseOver.blockZ; + this.playerController.onPlayerDamageBlock(var3, var4, var5, this.objectMouseOver.sideHit); + if(this.thePlayer.canCurrentToolHarvestBlock(var3, var4, var5)) { + this.effectRenderer.addBlockHitEffects(var3, var4, var5, this.objectMouseOver.sideHit); + this.thePlayer.swingItem(); + } + } else { + this.playerController.resetBlockRemoving(); + } + + } + } + + private void clickMouse(int var1) { + if(var1 != 0 || this.leftClickCounter <= 0) { + if(var1 == 0) { + this.thePlayer.swingItem(); + } + + if(var1 == 1) { + this.rightClickDelayTimer = 4; + } + + boolean var2 = true; + ItemStack var3 = this.thePlayer.inventory.getCurrentItem(); + if(this.objectMouseOver == null) { + if(var1 == 0 && this.playerController.isNotCreative()) { + this.leftClickCounter = 10; + } + } else if(this.objectMouseOver.typeOfHit == EnumMovingObjectType.ENTITY) { + if(var1 == 0) { + this.playerController.attackEntity(this.thePlayer, this.objectMouseOver.entityHit); + } + + if(var1 == 1 && this.playerController.func_78768_b(this.thePlayer, this.objectMouseOver.entityHit)) { + var2 = false; + } + } else if(this.objectMouseOver.typeOfHit == EnumMovingObjectType.TILE) { + int var4 = this.objectMouseOver.blockX; + int var5 = this.objectMouseOver.blockY; + int var6 = this.objectMouseOver.blockZ; + int var7 = this.objectMouseOver.sideHit; + if(var1 == 0) { + this.playerController.clickBlock(var4, var5, var6, this.objectMouseOver.sideHit); + } else { + int var8 = var3 != null ? var3.stackSize : 0; + if(this.playerController.onPlayerRightClick(this.thePlayer, this.theWorld, var3, var4, var5, var6, var7, this.objectMouseOver.hitVec)) { + var2 = false; + this.thePlayer.swingItem(); + } + + if(var3 == null) { + return; + } + + if(var3.stackSize == 0) { + this.thePlayer.inventory.mainInventory[this.thePlayer.inventory.currentItem] = null; + } else if(var3.stackSize != var8 || this.playerController.isInCreativeMode()) { + this.entityRenderer.itemRenderer.resetEquippedProgress(); + } + } + } + + if(var2 && var1 == 1) { + ItemStack var9 = this.thePlayer.inventory.getCurrentItem(); + if(var9 != null && this.playerController.sendUseItem(this.thePlayer, this.theWorld, var9)) { + this.entityRenderer.itemRenderer.resetEquippedProgress2(); + } + } + + } + } + + public void toggleFullscreen() { + try { + this.fullscreen = !this.fullscreen; + if(this.fullscreen) { + Display.setDisplayMode(Display.getDesktopDisplayMode()); + 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 { + if(this.mcCanvas != null) { + this.displayWidth = this.mcCanvas.getWidth(); + this.displayHeight = this.mcCanvas.getHeight(); + } else { + 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); + } + + Display.setFullscreen(this.fullscreen); + Display.setVSyncEnabled(this.gameSettings.enableVsync); + Display.update(); + } catch (Exception var2) { + var2.printStackTrace(); + } + + } + + private void resize(int var1, int var2) { + this.displayWidth = var1 <= 0 ? 1 : var1; + this.displayHeight = var2 <= 0 ? 1 : var2; + if(this.currentScreen != null) { + ScaledResolution var3 = new ScaledResolution(this.gameSettings, var1, var2); + int var4 = var3.getScaledWidth(); + int var5 = var3.getScaledHeight(); + this.currentScreen.setWorldAndResolution(this, var4, var5); + } + + } + + public void runTick() { + if(this.rightClickDelayTimer > 0) { + --this.rightClickDelayTimer; + } + + this.mcProfiler.startSection("stats"); + this.statFileWriter.func_77449_e(); + this.mcProfiler.endStartSection("gui"); + if(!this.isGamePaused) { + this.ingameGUI.updateTick(); + } + + this.mcProfiler.endStartSection("pick"); + this.entityRenderer.getMouseOver(1.0F); + this.mcProfiler.endStartSection("gameMode"); + if(!this.isGamePaused && this.theWorld != null) { + this.playerController.updateController(); + } + + this.renderEngine.bindTexture("/terrain.png"); + this.mcProfiler.endStartSection("textures"); + if(!this.isGamePaused) { + this.renderEngine.updateDynamicTextures(); + } + + if(this.currentScreen == null && this.thePlayer != null) { + if(this.thePlayer.getHealth() <= 0) { + this.displayGuiScreen((GuiScreen)null); + } else if(this.thePlayer.isPlayerSleeping() && this.theWorld != null) { + this.displayGuiScreen(new GuiSleepMP()); + } + } else if(this.currentScreen != null && this.currentScreen instanceof GuiSleepMP && !this.thePlayer.isPlayerSleeping()) { + this.displayGuiScreen((GuiScreen)null); + } + + if(this.currentScreen != null) { + this.leftClickCounter = 10000; + } + + CrashReport var2; + CrashReportCategory var3; + if(this.currentScreen != null) { + try { + this.currentScreen.handleInput(); + } catch (Throwable var6) { + var2 = CrashReport.makeCrashReport(var6, "Updating screen events"); + var3 = var2.makeCategory("Affected screen"); + var3.addCrashSectionCallable("Screen name", new CallableUpdatingScreenName(this)); + throw new ReportedException(var2); + } + + if(this.currentScreen != null) { + try { + this.currentScreen.guiParticles.update(); + } catch (Throwable var5) { + var2 = CrashReport.makeCrashReport(var5, "Ticking screen particles"); + var3 = var2.makeCategory("Affected screen"); + var3.addCrashSectionCallable("Screen name", new CallableParticleScreenName(this)); + throw new ReportedException(var2); + } + + try { + this.currentScreen.updateScreen(); + } catch (Throwable var4) { + var2 = CrashReport.makeCrashReport(var4, "Ticking screen"); + var3 = var2.makeCategory("Affected screen"); + var3.addCrashSectionCallable("Screen name", new CallableTickingScreenName(this)); + throw new ReportedException(var2); + } + } + } + + if(this.currentScreen == null || this.currentScreen.allowUserInput) { + this.mcProfiler.endStartSection("mouse"); + + while(Mouse.next()) { + KeyBinding.setKeyBindState(Mouse.getEventButton() - 100, Mouse.getEventButtonState()); + if(Mouse.getEventButtonState()) { + KeyBinding.onTick(Mouse.getEventButton() - 100); + } + + long var1 = getSystemTime() - this.systemTime; + if(var1 <= 200L) { + int var10 = Mouse.getEventDWheel(); + if(var10 != 0) { + this.thePlayer.inventory.changeCurrentItem(var10); + if(this.gameSettings.noclip) { + if(var10 > 0) { + var10 = 1; + } + + if(var10 < 0) { + var10 = -1; + } + + this.gameSettings.noclipRate += (float)var10 * 0.25F; + } + } + + if(this.currentScreen == null) { + if(!this.inGameHasFocus && Mouse.getEventButtonState()) { + this.setIngameFocus(); + } + } else if(this.currentScreen != null) { + this.currentScreen.handleMouseInput(); + } + } + } + + if(this.leftClickCounter > 0) { + --this.leftClickCounter; + } + + this.mcProfiler.endStartSection("keyboard"); + + label438: + while(true) { + while(true) { + boolean var8; + do { + if(!Keyboard.next()) { + var8 = this.gameSettings.chatVisibility != 2; + + while(this.gameSettings.keyBindInventory.isPressed()) { + this.displayGuiScreen(new GuiInventory(this.thePlayer)); + } + + while(this.gameSettings.keyBindDrop.isPressed()) { + this.thePlayer.dropOneItem(GuiScreen.isCtrlKeyDown()); + } + + while(this.gameSettings.keyBindChat.isPressed() && var8) { + this.displayGuiScreen(new GuiChat()); + } + + if(this.currentScreen == null && this.gameSettings.keyBindCommand.isPressed() && var8) { + this.displayGuiScreen(new GuiChat("/")); + } + + if(this.thePlayer.isUsingItem()) { + if(!this.gameSettings.keyBindUseItem.pressed) { + this.playerController.onStoppedUsingItem(this.thePlayer); + } + + while(true) { + if(!this.gameSettings.keyBindAttack.isPressed()) { + while(this.gameSettings.keyBindUseItem.isPressed()) { + } + + while(this.gameSettings.keyBindPickBlock.isPressed()) { + } + break; + } + } + } else { + while(this.gameSettings.keyBindAttack.isPressed()) { + this.clickMouse(0); + } + + while(this.gameSettings.keyBindUseItem.isPressed()) { + this.clickMouse(1); + } + + while(this.gameSettings.keyBindPickBlock.isPressed()) { + this.clickMiddleMouseButton(); + } + } + + if(this.gameSettings.keyBindUseItem.pressed && this.rightClickDelayTimer == 0 && !this.thePlayer.isUsingItem()) { + this.clickMouse(1); + } + + this.sendClickBlockToController(0, this.currentScreen == null && this.gameSettings.keyBindAttack.pressed && this.inGameHasFocus); + break label438; + } + + KeyBinding.setKeyBindState(Keyboard.getEventKey(), Keyboard.getEventKeyState()); + if(Keyboard.getEventKeyState()) { + KeyBinding.onTick(Keyboard.getEventKey()); + } + + if(this.field_83002_am > 0L) { + if(getSystemTime() - this.field_83002_am >= 6000L) { + throw new ReportedException(new CrashReport("Manually triggered debug crash", new Throwable())); + } + + if(!Keyboard.isKeyDown(Keyboard.KEY_C) || !Keyboard.isKeyDown(Keyboard.KEY_F3)) { + this.field_83002_am = -1L; + } + } else if(Keyboard.isKeyDown(Keyboard.KEY_C) && Keyboard.isKeyDown(Keyboard.KEY_F3)) { + this.field_83002_am = getSystemTime(); + } + } while(!Keyboard.getEventKeyState()); + + if(Keyboard.getEventKey() == Keyboard.KEY_F11) { + this.toggleFullscreen(); + } else { + if(this.currentScreen != null) { + this.currentScreen.handleKeyboardInput(); + } else { + if(Keyboard.getEventKey() == Keyboard.KEY_ESCAPE) { + this.displayInGameMenu(); + } + + if(Keyboard.getEventKey() == Keyboard.KEY_S && Keyboard.isKeyDown(Keyboard.KEY_F3)) { + this.forceReload(); + } + + if(Keyboard.getEventKey() == Keyboard.KEY_T && Keyboard.isKeyDown(Keyboard.KEY_F3)) { + this.renderEngine.refreshTextures(); + this.renderGlobal.loadRenderers(); + } + + if(Keyboard.getEventKey() == Keyboard.KEY_F && Keyboard.isKeyDown(Keyboard.KEY_F3)) { + var8 = Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) | Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); + this.gameSettings.setOptionValue(EnumOptions.RENDER_DISTANCE, var8 ? -1 : 1); + } + + if(Keyboard.getEventKey() == Keyboard.KEY_A && Keyboard.isKeyDown(Keyboard.KEY_F3)) { + this.renderGlobal.loadRenderers(); + } + + if(Keyboard.getEventKey() == Keyboard.KEY_H && Keyboard.isKeyDown(Keyboard.KEY_F3)) { + this.gameSettings.advancedItemTooltips = !this.gameSettings.advancedItemTooltips; + this.gameSettings.saveOptions(); + } + + if(Keyboard.getEventKey() == Keyboard.KEY_B && Keyboard.isKeyDown(Keyboard.KEY_F3)) { + RenderManager.field_85095_o = !RenderManager.field_85095_o; + } + + if(Keyboard.getEventKey() == Keyboard.KEY_P && Keyboard.isKeyDown(Keyboard.KEY_F3)) { + this.gameSettings.pauseOnLostFocus = !this.gameSettings.pauseOnLostFocus; + this.gameSettings.saveOptions(); + } + + if(Keyboard.getEventKey() == Keyboard.KEY_F1) { + this.gameSettings.hideGUI = !this.gameSettings.hideGUI; + } + + if(Keyboard.getEventKey() == Keyboard.KEY_F3) { + this.gameSettings.showDebugInfo = !this.gameSettings.showDebugInfo; + this.gameSettings.showDebugProfilerChart = GuiScreen.isShiftKeyDown(); + } + + if(Keyboard.getEventKey() == Keyboard.KEY_F5) { + ++this.gameSettings.thirdPersonView; + if(this.gameSettings.thirdPersonView > 2) { + this.gameSettings.thirdPersonView = 0; + } + } + + if(Keyboard.getEventKey() == Keyboard.KEY_F8) { + this.gameSettings.smoothCamera = !this.gameSettings.smoothCamera; + } + } + + int var9; + for(var9 = 0; var9 < 9; ++var9) { + if(Keyboard.getEventKey() == Keyboard.KEY_1 + var9) { + this.thePlayer.inventory.currentItem = var9; + } + } + + if(this.gameSettings.showDebugInfo && this.gameSettings.showDebugProfilerChart) { + if(Keyboard.getEventKey() == Keyboard.KEY_0) { + this.updateDebugProfilerName(0); + } + + for(var9 = 0; var9 < 9; ++var9) { + if(Keyboard.getEventKey() == Keyboard.KEY_1 + var9) { + this.updateDebugProfilerName(var9 + 1); + } + } + } + } + } + } + } + + if(this.theWorld != null) { + if(this.thePlayer != null) { + ++this.joinPlayerCounter; + if(this.joinPlayerCounter == 30) { + this.joinPlayerCounter = 0; + this.theWorld.joinEntityInSurroundings(this.thePlayer); + } + } + + 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.theWorld.lastLightningBolt > 0) { + --this.theWorld.lastLightningBolt; + } + + this.theWorld.updateEntities(); + } + + if(!this.isGamePaused) { + this.theWorld.setAllowedSpawnTypes(this.theWorld.difficultySetting > 0, true); + + try { + this.theWorld.tick(); + } catch (Throwable var7) { + var2 = CrashReport.makeCrashReport(var7, "Exception in world tick"); + if(this.theWorld == null) { + var3 = var2.makeCategory("Affected level"); + var3.addCrashSection("Problem", "Level is null!"); + } else { + this.theWorld.addWorldInfoToCrashReport(var2); + } + + throw new ReportedException(var2); + } + } + + this.mcProfiler.endStartSection("animateTick"); + if(!this.isGamePaused && this.theWorld != null) { + this.theWorld.doVoidFogParticles(MathHelper.floor_double(this.thePlayer.posX), MathHelper.floor_double(this.thePlayer.posY), MathHelper.floor_double(this.thePlayer.posZ)); + } + + this.mcProfiler.endStartSection("particles"); + if(!this.isGamePaused) { + this.effectRenderer.updateEffects(); + } + } else if(this.myNetworkManager != null) { + this.mcProfiler.endStartSection("pendingConnection"); + this.myNetworkManager.processReadPackets(); + } + + this.mcProfiler.endSection(); + this.systemTime = getSystemTime(); + } + + private void forceReload() { + this.getLogAgent().logInfo("FORCING RELOAD!"); + if(this.sndManager != null) { + this.sndManager.stopAllSounds(); + } + + this.sndManager = new SoundManager(); + this.sndManager.loadSoundSettings(this.gameSettings); + this.downloadResourcesThread.reloadResources(); + } + + public void launchIntegratedServer(String var1, String var2, WorldSettings var3) { + this.loadWorld((WorldClient)null); + System.gc(); + ISaveHandler var4 = this.saveLoader.getSaveLoader(var1, false); + WorldInfo var5 = var4.loadWorldInfo(); + if(var5 == null && var3 != null) { + this.statFileWriter.readStat(StatList.createWorldStat, 1); + var5 = new WorldInfo(var3, var1); + var4.saveWorldInfo(var5); + } + + if(var3 == null) { + var3 = new WorldSettings(var5); + } + + this.statFileWriter.readStat(StatList.startGameStat, 1); + this.theIntegratedServer = new IntegratedServer(this, var1, var2, var3); + this.theIntegratedServer.startServerThread(); + this.integratedServerIsRunning = true; + this.loadingScreen.displayProgressMessage(StatCollector.translateToLocal("menu.loadingLevel")); + + while(!this.theIntegratedServer.serverIsInRunLoop()) { + String var6 = this.theIntegratedServer.getUserMessage(); + if(var6 != null) { + this.loadingScreen.resetProgresAndWorkingMessage(StatCollector.translateToLocal(var6)); + } else { + this.loadingScreen.resetProgresAndWorkingMessage(""); + } + + try { + Thread.sleep(200L); + } catch (InterruptedException var9) { + } + } + + this.displayGuiScreen((GuiScreen)null); + + try { + NetClientHandler var10 = new NetClientHandler(this, this.theIntegratedServer); + this.myNetworkManager = var10.getNetManager(); + } catch (IOException var8) { + this.displayCrashReport(this.addGraphicsAndWorldToCrashReport(new CrashReport("Connecting to integrated server", var8))); + } + + } + + public void loadWorld(WorldClient var1) { + this.loadWorld(var1, ""); + } + + public void loadWorld(WorldClient var1, String var2) { + this.statFileWriter.syncStats(); + if(var1 == null) { + NetClientHandler var3 = this.getNetHandler(); + if(var3 != null) { + var3.cleanup(); + } + + if(this.myNetworkManager != null) { + this.myNetworkManager.closeConnections(); + } + + if(this.theIntegratedServer != null) { + this.theIntegratedServer.initiateShutdown(); + } + + this.theIntegratedServer = null; + } + + this.renderViewEntity = null; + this.myNetworkManager = null; + if(this.loadingScreen != null) { + this.loadingScreen.resetProgressAndMessage(var2); + this.loadingScreen.resetProgresAndWorkingMessage(""); + } + + if(var1 == null && this.theWorld != null) { + if(this.texturePackList.getIsDownloading()) { + this.texturePackList.onDownloadFinished(); + } + + this.setServerData((ServerData)null); + this.integratedServerIsRunning = false; + } + + this.sndManager.playStreaming((String)null, 0.0F, 0.0F, 0.0F); + this.sndManager.stopAllSounds(); + this.theWorld = var1; + if(var1 != null) { + if(this.renderGlobal != null) { + this.renderGlobal.setWorldAndLoadRenderers(var1); + } + + if(this.effectRenderer != null) { + this.effectRenderer.clearEffects(var1); + } + + if(this.thePlayer == null) { + this.thePlayer = this.playerController.func_78754_a(var1); + this.playerController.flipPlayer(this.thePlayer); + } + + this.thePlayer.preparePlayerToSpawn(); + var1.spawnEntityInWorld(this.thePlayer); + this.thePlayer.movementInput = new MovementInputFromOptions(this.gameSettings); + this.playerController.setPlayerCapabilities(this.thePlayer); + this.renderViewEntity = this.thePlayer; + } else { + this.saveLoader.flushCache(); + this.thePlayer = null; + } + + System.gc(); + this.systemTime = 0L; + } + + public void installResource(String var1, File var2) { + int var3 = var1.indexOf("/"); + String var4 = var1.substring(0, var3); + var1 = var1.substring(var3 + 1); + if(var4.equalsIgnoreCase("sound3")) { + this.sndManager.addSound(var1, var2); + } else if(var4.equalsIgnoreCase("streaming")) { + this.sndManager.addStreaming(var1, var2); + } else if(!var4.equalsIgnoreCase("music") && !var4.equalsIgnoreCase("newmusic")) { + if(var4.equalsIgnoreCase("lang")) { + StringTranslate.getInstance().func_94519_a(var1, var2); + } + } else { + this.sndManager.addMusic(var1, var2); + } + + } + + public String debugInfoRenders() { + return this.renderGlobal.getDebugInfoRenders(); + } + + public String getEntityDebug() { + return this.renderGlobal.getDebugInfoEntities(); + } + + public String getWorldProviderName() { + return this.theWorld.getProviderName(); + } + + public String debugInfoEntities() { + return "P: " + this.effectRenderer.getStatistics() + ". T: " + this.theWorld.getDebugLoadedEntities(); + } + + public void setDimensionAndSpawnPlayer(int var1) { + this.theWorld.setSpawnLocation(); + this.theWorld.removeAllEntities(); + int var2 = 0; + if(this.thePlayer != null) { + var2 = this.thePlayer.entityId; + this.theWorld.removeEntity(this.thePlayer); + } + + this.renderViewEntity = null; + this.thePlayer = this.playerController.func_78754_a(this.theWorld); + this.thePlayer.dimension = var1; + this.renderViewEntity = this.thePlayer; + this.thePlayer.preparePlayerToSpawn(); + this.theWorld.spawnEntityInWorld(this.thePlayer); + this.playerController.flipPlayer(this.thePlayer); + this.thePlayer.movementInput = new MovementInputFromOptions(this.gameSettings); + this.thePlayer.entityId = var2; + this.playerController.setPlayerCapabilities(this.thePlayer); + if(this.currentScreen instanceof GuiGameOver) { + this.displayGuiScreen((GuiScreen)null); + } + + } + + void setDemo(boolean var1) { + this.isDemo = var1; + } + + public final boolean isDemo() { + return this.isDemo; + } + + public NetClientHandler getNetHandler() { + return this.thePlayer != null ? this.thePlayer.sendQueue : null; + } + + public static void main(String[] var0) { + HashMap var1 = new HashMap(); + boolean var2 = false; + boolean var3 = true; + boolean var4 = false; + String var5 = "Player" + getSystemTime() % 1000L; + String var6 = var5; + if(var0.length > 0) { + var6 = var0[0]; + } + + String var7 = "-"; + if(var0.length > 1) { + var7 = var0[1]; + } + + ArrayList var8 = new ArrayList(); + + for(int var9 = 2; var9 < var0.length; ++var9) { + String var10 = var0[var9]; + String var11 = var9 == var0.length - 1 ? null : var0[var9 + 1]; + boolean var12 = false; + if(!var10.equals("-demo") && !var10.equals("--demo")) { + if(var10.equals("--applet")) { + var3 = false; + } else if(var10.equals("--password") && var11 != null) { + String[] var13 = HttpUtil.loginToMinecraft((ILogAgent)null, var6, var11); + if(var13 != null) { + var6 = var13[0]; + var7 = var13[1]; + var8.add("Logged in insecurely as " + var6); + } else { + var8.add("Could not log in as " + var6 + " with given password"); + } + + var12 = true; + } + } else { + var2 = true; + } + + if(var12) { + ++var9; + } + } + + if(var6.contains("@") && var7.length() <= 1) { + var6 = var5; + } + + var1.put("demo", "" + var2); + var1.put("stand-alone", "" + var3); + var1.put("username", var6); + var1.put("fullscreen", "" + var4); + var1.put("sessionid", var7); + Frame var15 = new Frame(); + var15.setTitle("Minecraft"); + var15.setBackground(Color.BLACK); + JPanel var16 = new JPanel(); + var15.setLayout(new BorderLayout()); + var16.setPreferredSize(new Dimension(854, 480)); + var15.add(var16, "Center"); + var15.pack(); + var15.setLocationRelativeTo((Component)null); + var15.setVisible(true); + var15.addWindowListener(new GameWindowListener()); + MinecraftFakeLauncher var17 = new MinecraftFakeLauncher(var1); + MinecraftApplet var18 = new MinecraftApplet(); + var18.setStub(var17); + var17.setLayout(new BorderLayout()); + var17.add(var18, "Center"); + var17.validate(); + var15.removeAll(); + var15.setLayout(new BorderLayout()); + var15.add(var17, "Center"); + var15.validate(); + var18.init(); + Iterator var19 = var8.iterator(); + + while(var19.hasNext()) { + String var14 = (String)var19.next(); + getMinecraft().getLogAgent().logInfo(var14); + } + + var18.start(); + Runtime.getRuntime().addShutdownHook(new ThreadShutdown()); + } + + public static boolean isGuiEnabled() { + return theMinecraft == null || !theMinecraft.gameSettings.hideGUI; + } + + public static boolean isFancyGraphicsEnabled() { + return theMinecraft != null && theMinecraft.gameSettings.fancyGraphics; + } + + public static boolean isAmbientOcclusionEnabled() { + return theMinecraft != null && theMinecraft.gameSettings.ambientOcclusion != 0; + } + + public boolean handleClientCommand(String var1) { + return !var1.startsWith("/") ? false : false; + } + + private void clickMiddleMouseButton() { + if(this.objectMouseOver != null) { + boolean var1 = this.thePlayer.capabilities.isCreativeMode; + int var3 = 0; + boolean var4 = false; + int var2; + int var5; + if(this.objectMouseOver.typeOfHit == EnumMovingObjectType.TILE) { + var5 = this.objectMouseOver.blockX; + int var6 = this.objectMouseOver.blockY; + int var7 = this.objectMouseOver.blockZ; + Block var8 = Block.blocksList[this.theWorld.getBlockId(var5, var6, var7)]; + if(var8 == null) { + return; + } + + var2 = var8.idPicked(this.theWorld, var5, var6, var7); + if(var2 == 0) { + return; + } + + var4 = Item.itemsList[var2].getHasSubtypes(); + int var9 = var2 < 256 && !Block.blocksList[var8.blockID].isFlowerPot() ? var2 : var8.blockID; + var3 = Block.blocksList[var9].getDamageValue(this.theWorld, var5, var6, var7); + } else { + if(this.objectMouseOver.typeOfHit != EnumMovingObjectType.ENTITY || this.objectMouseOver.entityHit == null || !var1) { + return; + } + + if(this.objectMouseOver.entityHit instanceof EntityPainting) { + var2 = Item.painting.itemID; + } else if(this.objectMouseOver.entityHit instanceof EntityItemFrame) { + EntityItemFrame var10 = (EntityItemFrame)this.objectMouseOver.entityHit; + if(var10.getDisplayedItem() == null) { + var2 = Item.itemFrame.itemID; + } else { + var2 = var10.getDisplayedItem().itemID; + var3 = var10.getDisplayedItem().getItemDamage(); + var4 = true; + } + } else if(this.objectMouseOver.entityHit instanceof EntityMinecart) { + EntityMinecart var11 = (EntityMinecart)this.objectMouseOver.entityHit; + if(var11.getMinecartType() == 2) { + var2 = Item.minecartPowered.itemID; + } else if(var11.getMinecartType() == 1) { + var2 = Item.minecartCrate.itemID; + } else if(var11.getMinecartType() == 3) { + var2 = Item.minecartTnt.itemID; + } else if(var11.getMinecartType() == 5) { + var2 = Item.minecartHopper.itemID; + } else { + var2 = Item.minecartEmpty.itemID; + } + } else if(this.objectMouseOver.entityHit instanceof EntityBoat) { + var2 = Item.boat.itemID; + } else { + var2 = Item.monsterPlacer.itemID; + var3 = EntityList.getEntityID(this.objectMouseOver.entityHit); + var4 = true; + if(var3 <= 0 || !EntityList.entityEggs.containsKey(Integer.valueOf(var3))) { + return; + } + } + } + + this.thePlayer.inventory.setCurrentItem(var2, var3, var4, var1); + if(var1) { + var5 = this.thePlayer.inventoryContainer.inventorySlots.size() - 9 + this.thePlayer.inventory.currentItem; + this.playerController.sendSlotPacket(this.thePlayer.inventory.getStackInSlot(this.thePlayer.inventory.currentItem), var5); + } + + } + } + + public CrashReport addGraphicsAndWorldToCrashReport(CrashReport var1) { + var1.func_85056_g().addCrashSectionCallable("LWJGL", new CallableLWJGLVersion(this)); + var1.func_85056_g().addCrashSectionCallable("OpenGL", new CallableGLInfo(this)); + var1.func_85056_g().addCrashSectionCallable("Is Modded", new CallableModded(this)); + var1.func_85056_g().addCrashSectionCallable("Type", new CallableType2(this)); + var1.func_85056_g().addCrashSectionCallable("Texture Pack", new CallableTexturePack(this)); + var1.func_85056_g().addCrashSectionCallable("Profiler Position", new CallableClientProfiler(this)); + var1.func_85056_g().addCrashSectionCallable("Vec3 Pool Size", new CallableClientMemoryStats(this)); + if(this.theWorld != null) { + this.theWorld.addWorldInfoToCrashReport(var1); + } + + return var1; + } + + public static Minecraft getMinecraft() { + return theMinecraft; + } + + public void scheduleTexturePackRefresh() { + this.refreshTexturePacksScheduled = true; + } + + public void addServerStatsToSnooper(PlayerUsageSnooper var1) { + var1.addData("fps", Integer.valueOf(debugFPS)); + var1.addData("texpack_name", this.texturePackList.getSelectedTexturePack().getTexturePackFileName()); + var1.addData("vsync_enabled", Boolean.valueOf(this.gameSettings.enableVsync)); + var1.addData("display_frequency", Integer.valueOf(Display.getDisplayMode().getFrequency())); + var1.addData("display_type", this.fullscreen ? "fullscreen" : "windowed"); + if(this.theIntegratedServer != null && this.theIntegratedServer.getPlayerUsageSnooper() != null) { + var1.addData("snooper_partner", this.theIntegratedServer.getPlayerUsageSnooper().getUniqueID()); + } + + } + + public void addServerTypeToSnooper(PlayerUsageSnooper var1) { + var1.addData("opengl_version", GL11.glGetString(GL11.GL_VERSION)); + var1.addData("opengl_vendor", GL11.glGetString(GL11.GL_VENDOR)); + var1.addData("client_brand", ClientBrandRetriever.getClientModName()); + var1.addData("applet", Boolean.valueOf(this.hideQuitButton)); + ContextCapabilities var2 = GLContext.getCapabilities(); + var1.addData("gl_caps[ARB_multitexture]", Boolean.valueOf(var2.GL_ARB_multitexture)); + var1.addData("gl_caps[ARB_multisample]", Boolean.valueOf(var2.GL_ARB_multisample)); + var1.addData("gl_caps[ARB_texture_cube_map]", Boolean.valueOf(var2.GL_ARB_texture_cube_map)); + var1.addData("gl_caps[ARB_vertex_blend]", Boolean.valueOf(var2.GL_ARB_vertex_blend)); + var1.addData("gl_caps[ARB_matrix_palette]", Boolean.valueOf(var2.GL_ARB_matrix_palette)); + var1.addData("gl_caps[ARB_vertex_program]", Boolean.valueOf(var2.GL_ARB_vertex_program)); + var1.addData("gl_caps[ARB_vertex_shader]", Boolean.valueOf(var2.GL_ARB_vertex_shader)); + var1.addData("gl_caps[ARB_fragment_program]", Boolean.valueOf(var2.GL_ARB_fragment_program)); + var1.addData("gl_caps[ARB_fragment_shader]", Boolean.valueOf(var2.GL_ARB_fragment_shader)); + var1.addData("gl_caps[ARB_shader_objects]", Boolean.valueOf(var2.GL_ARB_shader_objects)); + var1.addData("gl_caps[ARB_vertex_buffer_object]", Boolean.valueOf(var2.GL_ARB_vertex_buffer_object)); + var1.addData("gl_caps[ARB_framebuffer_object]", Boolean.valueOf(var2.GL_ARB_framebuffer_object)); + var1.addData("gl_caps[ARB_pixel_buffer_object]", Boolean.valueOf(var2.GL_ARB_pixel_buffer_object)); + var1.addData("gl_caps[ARB_uniform_buffer_object]", Boolean.valueOf(var2.GL_ARB_uniform_buffer_object)); + var1.addData("gl_caps[ARB_texture_non_power_of_two]", Boolean.valueOf(var2.GL_ARB_texture_non_power_of_two)); + var1.addData("gl_caps[gl_max_vertex_uniforms]", Integer.valueOf(GL11.glGetInteger(GL20.GL_MAX_VERTEX_UNIFORM_COMPONENTS))); + var1.addData("gl_caps[gl_max_fragment_uniforms]", Integer.valueOf(GL11.glGetInteger(GL20.GL_MAX_FRAGMENT_UNIFORM_COMPONENTS))); + var1.addData("gl_max_texture_size", Integer.valueOf(getGLMaximumTextureSize())); + } + + public static int getGLMaximumTextureSize() { + for(int var0 = 16384; var0 > 0; var0 >>= 1) { + GL11.glTexImage2D(GL11.GL_PROXY_TEXTURE_2D, 0, GL11.GL_RGBA, var0, var0, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)((ByteBuffer)null)); + int var1 = GL11.glGetTexLevelParameteri(GL11.GL_PROXY_TEXTURE_2D, 0, GL11.GL_TEXTURE_WIDTH); + if(var1 != 0) { + return var0; + } + } + + return -1; + } + + public boolean isSnooperEnabled() { + return this.gameSettings.snooperEnabled; + } + + public void setServerData(ServerData var1) { + this.currentServerData = var1; + } + + public ServerData getServerData() { + return this.currentServerData; + } + + public boolean isIntegratedServerRunning() { + return this.integratedServerIsRunning; + } + + public boolean isSingleplayer() { + return this.integratedServerIsRunning && this.theIntegratedServer != null; + } + + public IntegratedServer getIntegratedServer() { + return this.theIntegratedServer; + } + + public static void stopIntegratedServer() { + if(theMinecraft != null) { + IntegratedServer var0 = theMinecraft.getIntegratedServer(); + if(var0 != null) { + var0.stopServer(); + } + + } + } + + public PlayerUsageSnooper getPlayerUsageSnooper() { + return this.usageSnooper; + } + + public static long getSystemTime() { + return Sys.getTime() * 1000L / Sys.getTimerResolution(); + } + + public boolean isFullScreen() { + return this.fullscreen; + } + + public ILogAgent getLogAgent() { + return this.field_94139_O; + } +} diff --git a/src/net/minecraft/client/MinecraftApplet.java b/src/net/minecraft/client/MinecraftApplet.java new file mode 100644 index 0000000..80035fa --- /dev/null +++ b/src/net/minecraft/client/MinecraftApplet.java @@ -0,0 +1,87 @@ +package net.minecraft.client; + +import java.applet.Applet; +import java.awt.BorderLayout; +import java.awt.Canvas; +import net.minecraft.src.CanvasMinecraftApplet; +import net.minecraft.src.MinecraftAppletImpl; +import net.minecraft.src.Session; + +public class MinecraftApplet extends Applet { + private Canvas mcCanvas; + private Minecraft mc; + private Thread mcThread = null; + + public void init() { + this.mcCanvas = new CanvasMinecraftApplet(this); + boolean var1 = "true".equalsIgnoreCase(this.getParameter("fullscreen")); + this.mc = new MinecraftAppletImpl(this, this.mcCanvas, this, this.getWidth(), this.getHeight(), var1); + this.mc.minecraftUri = this.getDocumentBase().getHost(); + if(this.getDocumentBase().getPort() > 0) { + this.mc.minecraftUri = this.mc.minecraftUri + ":" + this.getDocumentBase().getPort(); + } + + if(this.getParameter("username") != null && this.getParameter("sessionid") != null) { + this.mc.session = new Session(this.getParameter("username"), this.getParameter("sessionid")); + this.mc.getLogAgent().logInfo("Setting user: " + this.mc.session.username); + System.out.println("(Session ID is " + this.mc.session.sessionId + ")"); + } else { + this.mc.session = new Session("Player", ""); + } + + this.mc.setDemo("true".equals(this.getParameter("demo"))); + if(this.getParameter("server") != null && this.getParameter("port") != null) { + this.mc.setServer(this.getParameter("server"), Integer.parseInt(this.getParameter("port"))); + } + + this.mc.hideQuitButton = !"true".equals(this.getParameter("stand-alone")); + this.setLayout(new BorderLayout()); + this.add(this.mcCanvas, "Center"); + this.mcCanvas.setFocusable(true); + this.mcCanvas.setFocusTraversalKeysEnabled(false); + this.validate(); + } + + public void startMainThread() { + if(this.mcThread == null) { + this.mcThread = new Thread(this.mc, "Minecraft main thread"); + this.mcThread.start(); + } + } + + public void start() { + if(this.mc != null) { + this.mc.isGamePaused = false; + } + + } + + public void stop() { + if(this.mc != null) { + this.mc.isGamePaused = true; + } + + } + + public void destroy() { + this.shutdown(); + } + + public void shutdown() { + if(this.mcThread != null) { + this.mc.shutdown(); + + try { + this.mcThread.join(10000L); + } catch (InterruptedException var4) { + try { + this.mc.shutdownMinecraftApplet(); + } catch (Exception var3) { + var3.printStackTrace(); + } + } + + this.mcThread = null; + } + } +} diff --git a/src/net/minecraft/server/MinecraftServer.java b/src/net/minecraft/server/MinecraftServer.java new file mode 100644 index 0000000..6248e04 --- /dev/null +++ b/src/net/minecraft/server/MinecraftServer.java @@ -0,0 +1,915 @@ +package net.minecraft.server; + +import java.awt.GraphicsEnvironment; +import java.io.File; +import java.io.IOException; +import java.security.KeyPair; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; +import net.minecraft.src.AnvilSaveConverter; +import net.minecraft.src.AxisAlignedBB; +import net.minecraft.src.CallableIsServerModded; +import net.minecraft.src.CallableServerMemoryStats; +import net.minecraft.src.CallableServerProfiler; +import net.minecraft.src.ChunkCoordinates; +import net.minecraft.src.CommandBase; +import net.minecraft.src.ConvertingProgressUpdate; +import net.minecraft.src.CrashReport; +import net.minecraft.src.DemoWorldServer; +import net.minecraft.src.DispenserBehaviors; +import net.minecraft.src.EntityPlayer; +import net.minecraft.src.EnumGameType; +import net.minecraft.src.ICommandManager; +import net.minecraft.src.ICommandSender; +import net.minecraft.src.ILogAgent; +import net.minecraft.src.IPlayerUsage; +import net.minecraft.src.IProgressUpdate; +import net.minecraft.src.ISaveFormat; +import net.minecraft.src.ISaveHandler; +import net.minecraft.src.IUpdatePlayerListBox; +import net.minecraft.src.MathHelper; +import net.minecraft.src.MinecraftException; +import net.minecraft.src.NetworkListenThread; +import net.minecraft.src.Packet; +import net.minecraft.src.Packet4UpdateTime; +import net.minecraft.src.PlayerUsageSnooper; +import net.minecraft.src.Profiler; +import net.minecraft.src.RConConsoleSource; +import net.minecraft.src.ReportedException; +import net.minecraft.src.ServerCommandManager; +import net.minecraft.src.ServerConfigurationManager; +import net.minecraft.src.StringTranslate; +import net.minecraft.src.StringUtils; +import net.minecraft.src.ThreadMinecraftServer; +import net.minecraft.src.World; +import net.minecraft.src.WorldInfo; +import net.minecraft.src.WorldManager; +import net.minecraft.src.WorldServer; +import net.minecraft.src.WorldServerMulti; +import net.minecraft.src.WorldSettings; +import net.minecraft.src.WorldType; + +public abstract class MinecraftServer implements ICommandSender, Runnable, IPlayerUsage { + private static MinecraftServer mcServer = null; + private final ISaveFormat anvilConverterForAnvilFile; + private final PlayerUsageSnooper usageSnooper = new PlayerUsageSnooper("server", this); + private final File anvilFile; + private final List tickables = new ArrayList(); + private final ICommandManager commandManager; + public final Profiler theProfiler = new Profiler(); + private String hostname; + private int serverPort = -1; + public WorldServer[] worldServers; + private ServerConfigurationManager serverConfigManager; + private boolean serverRunning = true; + private boolean serverStopped = false; + private int tickCounter = 0; + public String currentTask; + public int percentDone; + private boolean onlineMode; + private boolean canSpawnAnimals; + private boolean canSpawnNPCs; + private boolean pvpEnabled; + private boolean allowFlight; + private String motd; + private int buildLimit; + private long lastSentPacketID; + private long lastSentPacketSize; + private long lastReceivedID; + private long lastReceivedSize; + public final long[] sentPacketCountArray = new long[100]; + public final long[] sentPacketSizeArray = new long[100]; + public final long[] receivedPacketCountArray = new long[100]; + public final long[] receivedPacketSizeArray = new long[100]; + public final long[] tickTimeArray = new long[100]; + public long[][] timeOfLastDimensionTick; + private KeyPair serverKeyPair; + private String serverOwner; + private String folderName; + private String worldName; + private boolean isDemo; + private boolean enableBonusChest; + private boolean worldIsBeingDeleted; + private String texturePack = ""; + private boolean serverIsRunning = false; + private long timeOfLastWarning; + private String userMessage; + private boolean startProfiling; + private boolean field_104057_T = false; + + public MinecraftServer(File var1) { + mcServer = this; + this.anvilFile = var1; + this.commandManager = new ServerCommandManager(); + this.anvilConverterForAnvilFile = new AnvilSaveConverter(var1); + this.registerDispenseBehaviors(); + } + + private void registerDispenseBehaviors() { + DispenserBehaviors.func_96467_a(); + } + + protected abstract boolean startServer() throws IOException; + + protected void convertMapIfNeeded(String var1) { + if(this.getActiveAnvilConverter().isOldMapFormat(var1)) { + this.getLogAgent().logInfo("Converting map!"); + this.setUserMessage("menu.convertingLevel"); + this.getActiveAnvilConverter().convertMapFormat(var1, new ConvertingProgressUpdate(this)); + } + + } + + protected synchronized void setUserMessage(String var1) { + this.userMessage = var1; + } + + public synchronized String getUserMessage() { + return this.userMessage; + } + + protected void loadAllWorlds(String var1, String var2, long var3, WorldType var5, String var6) { + this.convertMapIfNeeded(var1); + this.setUserMessage("menu.loadingLevel"); + this.worldServers = new WorldServer[3]; + this.timeOfLastDimensionTick = new long[this.worldServers.length][100]; + ISaveHandler var7 = this.anvilConverterForAnvilFile.getSaveLoader(var1, true); + WorldInfo var9 = var7.loadWorldInfo(); + WorldSettings var8; + if(var9 == null) { + var8 = new WorldSettings(var3, this.getGameType(), this.canStructuresSpawn(), this.isHardcore(), var5); + var8.func_82750_a(var6); + } else { + var8 = new WorldSettings(var9); + } + + if(this.enableBonusChest) { + var8.enableBonusChest(); + } + + for(int var10 = 0; var10 < this.worldServers.length; ++var10) { + byte var11 = 0; + if(var10 == 1) { + var11 = -1; + } + + if(var10 == 2) { + var11 = 1; + } + + if(var10 == 0) { + if(this.isDemo()) { + this.worldServers[var10] = new DemoWorldServer(this, var7, var2, var11, this.theProfiler, this.getLogAgent()); + } else { + this.worldServers[var10] = new WorldServer(this, var7, var2, var11, var8, this.theProfiler, this.getLogAgent()); + } + } else { + this.worldServers[var10] = new WorldServerMulti(this, var7, var2, var11, var8, this.worldServers[0], this.theProfiler, this.getLogAgent()); + } + + this.worldServers[var10].addWorldAccess(new WorldManager(this, this.worldServers[var10])); + if(!this.isSinglePlayer()) { + this.worldServers[var10].getWorldInfo().setGameType(this.getGameType()); + } + + this.serverConfigManager.setPlayerManager(this.worldServers); + } + + this.setDifficultyForAllWorlds(this.getDifficulty()); + this.initialWorldChunkLoad(); + } + + protected void initialWorldChunkLoad() { + int var5 = 0; + this.setUserMessage("menu.generatingTerrain"); + byte var6 = 0; + this.getLogAgent().logInfo("Preparing start region for level " + var6); + WorldServer var7 = this.worldServers[var6]; + ChunkCoordinates var8 = var7.getSpawnPoint(); + long var9 = System.currentTimeMillis(); + + for(int var11 = -192; var11 <= 192 && this.isServerRunning(); var11 += 16) { + for(int var12 = -192; var12 <= 192 && this.isServerRunning(); var12 += 16) { + long var13 = System.currentTimeMillis(); + if(var13 - var9 > 1000L) { + this.outputPercentRemaining("Preparing spawn area", var5 * 100 / 625); + var9 = var13; + } + + ++var5; + var7.theChunkProviderServer.loadChunk(var8.posX + var11 >> 4, var8.posZ + var12 >> 4); + } + } + + this.clearCurrentTask(); + } + + public abstract boolean canStructuresSpawn(); + + public abstract EnumGameType getGameType(); + + public abstract int getDifficulty(); + + public abstract boolean isHardcore(); + + protected void outputPercentRemaining(String var1, int var2) { + this.currentTask = var1; + this.percentDone = var2; + this.getLogAgent().logInfo(var1 + ": " + var2 + "%"); + } + + protected void clearCurrentTask() { + this.currentTask = null; + this.percentDone = 0; + } + + protected void saveAllWorlds(boolean var1) { + if(!this.worldIsBeingDeleted) { + WorldServer[] var2 = this.worldServers; + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + WorldServer var5 = var2[var4]; + if(var5 != null) { + if(!var1) { + this.getLogAgent().logInfo("Saving chunks for level \'" + var5.getWorldInfo().getWorldName() + "\'/" + var5.provider.getDimensionName()); + } + + try { + var5.saveAllChunks(true, (IProgressUpdate)null); + } catch (MinecraftException var7) { + this.getLogAgent().logWarning(var7.getMessage()); + } + } + } + + } + } + + public void stopServer() { + if(!this.worldIsBeingDeleted) { + this.getLogAgent().logInfo("Stopping server"); + if(this.getNetworkThread() != null) { + this.getNetworkThread().stopListening(); + } + + if(this.serverConfigManager != null) { + this.getLogAgent().logInfo("Saving players"); + this.serverConfigManager.saveAllPlayerData(); + this.serverConfigManager.removeAllPlayers(); + } + + this.getLogAgent().logInfo("Saving worlds"); + this.saveAllWorlds(false); + + for(int var1 = 0; var1 < this.worldServers.length; ++var1) { + WorldServer var2 = this.worldServers[var1]; + var2.flush(); + } + + if(this.usageSnooper != null && this.usageSnooper.isSnooperRunning()) { + this.usageSnooper.stopSnooper(); + } + + } + } + + public String getServerHostname() { + return this.hostname; + } + + public void setHostname(String var1) { + this.hostname = var1; + } + + public boolean isServerRunning() { + return this.serverRunning; + } + + public void initiateShutdown() { + this.serverRunning = false; + } + + public void run() { + try { + if(this.startServer()) { + long var1 = System.currentTimeMillis(); + + for(long var50 = 0L; this.serverRunning; this.serverIsRunning = true) { + long var5 = System.currentTimeMillis(); + long var7 = var5 - var1; + if(var7 > 2000L && var1 - this.timeOfLastWarning >= 15000L) { + this.getLogAgent().logWarning("Can\'t keep up! Did the system time change, or is the server overloaded?"); + var7 = 2000L; + this.timeOfLastWarning = var1; + } + + if(var7 < 0L) { + this.getLogAgent().logWarning("Time ran backwards! Did the system time change?"); + var7 = 0L; + } + + var50 += var7; + var1 = var5; + if(this.worldServers[0].areAllPlayersAsleep()) { + this.tick(); + var50 = 0L; + } else { + while(var50 > 50L) { + var50 -= 50L; + this.tick(); + } + } + + Thread.sleep(1L); + } + } else { + this.finalTick((CrashReport)null); + } + } catch (Throwable var48) { + var48.printStackTrace(); + this.getLogAgent().logSevereException("Encountered an unexpected exception " + var48.getClass().getSimpleName(), var48); + CrashReport var2 = null; + if(var48 instanceof ReportedException) { + var2 = this.addServerInfoToCrashReport(((ReportedException)var48).getCrashReport()); + } else { + var2 = this.addServerInfoToCrashReport(new CrashReport("Exception in server tick loop", var48)); + } + + File var3 = new File(new File(this.getDataDirectory(), "crash-reports"), "crash-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + "-server.txt"); + if(var2.saveToFile(var3, this.getLogAgent())) { + this.getLogAgent().logSevere("This crash report has been saved to: " + var3.getAbsolutePath()); + } else { + this.getLogAgent().logSevere("We were unable to save this crash report to disk."); + } + + this.finalTick(var2); + } finally { + try { + this.stopServer(); + this.serverStopped = true; + } catch (Throwable var46) { + var46.printStackTrace(); + } finally { + this.systemExitNow(); + } + + } + + } + + protected File getDataDirectory() { + return new File("."); + } + + protected void finalTick(CrashReport var1) { + } + + protected void systemExitNow() { + } + + public void tick() { + long var1 = System.nanoTime(); + AxisAlignedBB.getAABBPool().cleanPool(); + ++this.tickCounter; + if(this.startProfiling) { + this.startProfiling = false; + this.theProfiler.profilingEnabled = true; + this.theProfiler.clearProfiling(); + } + + this.theProfiler.startSection("root"); + this.updateTimeLightAndEntities(); + if(this.tickCounter % 900 == 0) { + this.theProfiler.startSection("save"); + this.serverConfigManager.saveAllPlayerData(); + this.saveAllWorlds(true); + this.theProfiler.endSection(); + } + + this.theProfiler.startSection("tallying"); + this.tickTimeArray[this.tickCounter % 100] = System.nanoTime() - var1; + this.sentPacketCountArray[this.tickCounter % 100] = Packet.sentID - this.lastSentPacketID; + this.lastSentPacketID = Packet.sentID; + this.sentPacketSizeArray[this.tickCounter % 100] = Packet.sentSize - this.lastSentPacketSize; + this.lastSentPacketSize = Packet.sentSize; + this.receivedPacketCountArray[this.tickCounter % 100] = Packet.receivedID - this.lastReceivedID; + this.lastReceivedID = Packet.receivedID; + this.receivedPacketSizeArray[this.tickCounter % 100] = Packet.receivedSize - this.lastReceivedSize; + this.lastReceivedSize = Packet.receivedSize; + this.theProfiler.endSection(); + this.theProfiler.startSection("snooper"); + if(!this.usageSnooper.isSnooperRunning() && this.tickCounter > 100) { + this.usageSnooper.startSnooper(); + } + + if(this.tickCounter % 6000 == 0) { + this.usageSnooper.addMemoryStatsToSnooper(); + } + + this.theProfiler.endSection(); + this.theProfiler.endSection(); + } + + public void updateTimeLightAndEntities() { + this.theProfiler.startSection("levels"); + + int var1; + for(var1 = 0; var1 < this.worldServers.length; ++var1) { + long var2 = System.nanoTime(); + if(var1 == 0 || this.getAllowNether()) { + WorldServer var4 = this.worldServers[var1]; + this.theProfiler.startSection(var4.getWorldInfo().getWorldName()); + this.theProfiler.startSection("pools"); + var4.getWorldVec3Pool().clear(); + this.theProfiler.endSection(); + if(this.tickCounter % 20 == 0) { + this.theProfiler.startSection("timeSync"); + this.serverConfigManager.sendPacketToAllPlayersInDimension(new Packet4UpdateTime(var4.getTotalWorldTime(), var4.getWorldTime()), var4.provider.dimensionId); + this.theProfiler.endSection(); + } + + this.theProfiler.startSection("tick"); + + CrashReport var6; + try { + var4.tick(); + } catch (Throwable var8) { + var6 = CrashReport.makeCrashReport(var8, "Exception ticking world"); + var4.addWorldInfoToCrashReport(var6); + throw new ReportedException(var6); + } + + try { + var4.updateEntities(); + } catch (Throwable var7) { + var6 = CrashReport.makeCrashReport(var7, "Exception ticking world entities"); + var4.addWorldInfoToCrashReport(var6); + throw new ReportedException(var6); + } + + this.theProfiler.endSection(); + this.theProfiler.startSection("tracker"); + var4.getEntityTracker().updateTrackedEntities(); + this.theProfiler.endSection(); + this.theProfiler.endSection(); + } + + this.timeOfLastDimensionTick[var1][this.tickCounter % 100] = System.nanoTime() - var2; + } + + this.theProfiler.endStartSection("connection"); + this.getNetworkThread().networkTick(); + this.theProfiler.endStartSection("players"); + this.serverConfigManager.sendPlayerInfoToAllPlayers(); + this.theProfiler.endStartSection("tickables"); + + for(var1 = 0; var1 < this.tickables.size(); ++var1) { + ((IUpdatePlayerListBox)this.tickables.get(var1)).update(); + } + + this.theProfiler.endSection(); + } + + public boolean getAllowNether() { + return true; + } + + public void startServerThread() { + (new ThreadMinecraftServer(this, "Server thread")).start(); + } + + public File getFile(String var1) { + return new File(this.getDataDirectory(), var1); + } + + public void logInfo(String var1) { + this.getLogAgent().logInfo(var1); + } + + public void logWarning(String var1) { + this.getLogAgent().logWarning(var1); + } + + public WorldServer worldServerForDimension(int var1) { + return var1 == -1 ? this.worldServers[1] : (var1 == 1 ? this.worldServers[2] : this.worldServers[0]); + } + + public String getHostname() { + return this.hostname; + } + + public int getPort() { + return this.serverPort; + } + + public String getServerMOTD() { + return this.motd; + } + + public String getMinecraftVersion() { + return "1.5.2"; + } + + public int getCurrentPlayerCount() { + return this.serverConfigManager.getCurrentPlayerCount(); + } + + public int getMaxPlayers() { + return this.serverConfigManager.getMaxPlayers(); + } + + public String[] getAllUsernames() { + return this.serverConfigManager.getAllUsernames(); + } + + public String getPlugins() { + return ""; + } + + public String executeCommand(String var1) { + RConConsoleSource.consoleBuffer.resetLog(); + this.commandManager.executeCommand(RConConsoleSource.consoleBuffer, var1); + return RConConsoleSource.consoleBuffer.getChatBuffer(); + } + + public boolean isDebuggingEnabled() { + return false; + } + + public void logSevere(String var1) { + this.getLogAgent().logSevere(var1); + } + + public void logDebug(String var1) { + if(this.isDebuggingEnabled()) { + this.getLogAgent().logInfo(var1); + } + + } + + public String getServerModName() { + return "vanilla"; + } + + public CrashReport addServerInfoToCrashReport(CrashReport var1) { + var1.func_85056_g().addCrashSectionCallable("Profiler Position", new CallableIsServerModded(this)); + if(this.worldServers != null && this.worldServers.length > 0 && this.worldServers[0] != null) { + var1.func_85056_g().addCrashSectionCallable("Vec3 Pool Size", new CallableServerProfiler(this)); + } + + if(this.serverConfigManager != null) { + var1.func_85056_g().addCrashSectionCallable("Player Count", new CallableServerMemoryStats(this)); + } + + return var1; + } + + public List getPossibleCompletions(ICommandSender var1, String var2) { + ArrayList var3 = new ArrayList(); + if(var2.startsWith("/")) { + var2 = var2.substring(1); + boolean var10 = !var2.contains(" "); + List var11 = this.commandManager.getPossibleCommands(var1, var2); + if(var11 != null) { + Iterator var12 = var11.iterator(); + + while(var12.hasNext()) { + String var13 = (String)var12.next(); + if(var10) { + var3.add("/" + var13); + } else { + var3.add(var13); + } + } + } + + return var3; + } else { + String[] var4 = var2.split(" ", -1); + String var5 = var4[var4.length - 1]; + String[] var6 = this.serverConfigManager.getAllUsernames(); + int var7 = var6.length; + + for(int var8 = 0; var8 < var7; ++var8) { + String var9 = var6[var8]; + if(CommandBase.doesStringStartWith(var5, var9)) { + var3.add(var9); + } + } + + return var3; + } + } + + public static MinecraftServer getServer() { + return mcServer; + } + + public String getCommandSenderName() { + return "Server"; + } + + public void sendChatToPlayer(String var1) { + this.getLogAgent().logInfo(StringUtils.stripControlCodes(var1)); + } + + public boolean canCommandSenderUseCommand(int var1, String var2) { + return true; + } + + public String translateString(String var1, Object... var2) { + return StringTranslate.getInstance().translateKeyFormat(var1, var2); + } + + public ICommandManager getCommandManager() { + return this.commandManager; + } + + public KeyPair getKeyPair() { + return this.serverKeyPair; + } + + public int getServerPort() { + return this.serverPort; + } + + public void setServerPort(int var1) { + this.serverPort = var1; + } + + public String getServerOwner() { + return this.serverOwner; + } + + public void setServerOwner(String var1) { + this.serverOwner = var1; + } + + public boolean isSinglePlayer() { + return this.serverOwner != null; + } + + public String getFolderName() { + return this.folderName; + } + + public void setFolderName(String var1) { + this.folderName = var1; + } + + public void setWorldName(String var1) { + this.worldName = var1; + } + + public String getWorldName() { + return this.worldName; + } + + public void setKeyPair(KeyPair var1) { + this.serverKeyPair = var1; + } + + public void setDifficultyForAllWorlds(int var1) { + for(int var2 = 0; var2 < this.worldServers.length; ++var2) { + WorldServer var3 = this.worldServers[var2]; + if(var3 != null) { + if(var3.getWorldInfo().isHardcoreModeEnabled()) { + var3.difficultySetting = 3; + var3.setAllowedSpawnTypes(true, true); + } else if(this.isSinglePlayer()) { + var3.difficultySetting = var1; + var3.setAllowedSpawnTypes(var3.difficultySetting > 0, true); + } else { + var3.difficultySetting = var1; + var3.setAllowedSpawnTypes(this.allowSpawnMonsters(), this.canSpawnAnimals); + } + } + } + + } + + protected boolean allowSpawnMonsters() { + return true; + } + + public boolean isDemo() { + return this.isDemo; + } + + public void setDemo(boolean var1) { + this.isDemo = var1; + } + + public void canCreateBonusChest(boolean var1) { + this.enableBonusChest = var1; + } + + public ISaveFormat getActiveAnvilConverter() { + return this.anvilConverterForAnvilFile; + } + + public void deleteWorldAndStopServer() { + this.worldIsBeingDeleted = true; + this.getActiveAnvilConverter().flushCache(); + + for(int var1 = 0; var1 < this.worldServers.length; ++var1) { + WorldServer var2 = this.worldServers[var1]; + if(var2 != null) { + var2.flush(); + } + } + + this.getActiveAnvilConverter().deleteWorldDirectory(this.worldServers[0].getSaveHandler().getWorldDirectoryName()); + this.initiateShutdown(); + } + + public String getTexturePack() { + return this.texturePack; + } + + public void setTexturePack(String var1) { + this.texturePack = var1; + } + + public void addServerStatsToSnooper(PlayerUsageSnooper var1) { + var1.addData("whitelist_enabled", Boolean.valueOf(false)); + var1.addData("whitelist_count", Integer.valueOf(0)); + var1.addData("players_current", Integer.valueOf(this.getCurrentPlayerCount())); + var1.addData("players_max", Integer.valueOf(this.getMaxPlayers())); + var1.addData("players_seen", Integer.valueOf(this.serverConfigManager.getAvailablePlayerDat().length)); + var1.addData("uses_auth", Boolean.valueOf(this.onlineMode)); + var1.addData("gui_state", this.getGuiEnabled() ? "enabled" : "disabled"); + var1.addData("avg_tick_ms", Integer.valueOf((int)(MathHelper.average(this.tickTimeArray) * 1.0E-6D))); + var1.addData("avg_sent_packet_count", Integer.valueOf((int)MathHelper.average(this.sentPacketCountArray))); + var1.addData("avg_sent_packet_size", Integer.valueOf((int)MathHelper.average(this.sentPacketSizeArray))); + var1.addData("avg_rec_packet_count", Integer.valueOf((int)MathHelper.average(this.receivedPacketCountArray))); + var1.addData("avg_rec_packet_size", Integer.valueOf((int)MathHelper.average(this.receivedPacketSizeArray))); + int var2 = 0; + + for(int var3 = 0; var3 < this.worldServers.length; ++var3) { + if(this.worldServers[var3] != null) { + WorldServer var4 = this.worldServers[var3]; + WorldInfo var5 = var4.getWorldInfo(); + var1.addData("world[" + var2 + "][dimension]", Integer.valueOf(var4.provider.dimensionId)); + var1.addData("world[" + var2 + "][mode]", var5.getGameType()); + var1.addData("world[" + var2 + "][difficulty]", Integer.valueOf(var4.difficultySetting)); + var1.addData("world[" + var2 + "][hardcore]", Boolean.valueOf(var5.isHardcoreModeEnabled())); + var1.addData("world[" + var2 + "][generator_name]", var5.getTerrainType().getWorldTypeName()); + var1.addData("world[" + var2 + "][generator_version]", Integer.valueOf(var5.getTerrainType().getGeneratorVersion())); + var1.addData("world[" + var2 + "][height]", Integer.valueOf(this.buildLimit)); + var1.addData("world[" + var2 + "][chunks_loaded]", Integer.valueOf(var4.getChunkProvider().getLoadedChunkCount())); + ++var2; + } + } + + var1.addData("worlds", Integer.valueOf(var2)); + } + + public void addServerTypeToSnooper(PlayerUsageSnooper var1) { + var1.addData("singleplayer", Boolean.valueOf(this.isSinglePlayer())); + var1.addData("server_brand", this.getServerModName()); + var1.addData("gui_supported", GraphicsEnvironment.isHeadless() ? "headless" : "supported"); + var1.addData("dedicated", Boolean.valueOf(this.isDedicatedServer())); + } + + public boolean isSnooperEnabled() { + return true; + } + + public int textureSize() { + return 16; + } + + public abstract boolean isDedicatedServer(); + + public boolean isServerInOnlineMode() { + return this.onlineMode; + } + + public void setOnlineMode(boolean var1) { + this.onlineMode = var1; + } + + public boolean getCanSpawnAnimals() { + return this.canSpawnAnimals; + } + + public void setCanSpawnAnimals(boolean var1) { + this.canSpawnAnimals = var1; + } + + public boolean getCanSpawnNPCs() { + return this.canSpawnNPCs; + } + + public void setCanSpawnNPCs(boolean var1) { + this.canSpawnNPCs = var1; + } + + public boolean isPVPEnabled() { + return this.pvpEnabled; + } + + public void setAllowPvp(boolean var1) { + this.pvpEnabled = var1; + } + + public boolean isFlightAllowed() { + return this.allowFlight; + } + + public void setAllowFlight(boolean var1) { + this.allowFlight = var1; + } + + public abstract boolean isCommandBlockEnabled(); + + public String getMOTD() { + return this.motd; + } + + public void setMOTD(String var1) { + this.motd = var1; + } + + public int getBuildLimit() { + return this.buildLimit; + } + + public void setBuildLimit(int var1) { + this.buildLimit = var1; + } + + public boolean isServerStopped() { + return this.serverStopped; + } + + public ServerConfigurationManager getConfigurationManager() { + return this.serverConfigManager; + } + + public void setConfigurationManager(ServerConfigurationManager var1) { + this.serverConfigManager = var1; + } + + public void setGameType(EnumGameType var1) { + for(int var2 = 0; var2 < this.worldServers.length; ++var2) { + getServer().worldServers[var2].getWorldInfo().setGameType(var1); + } + + } + + public abstract NetworkListenThread getNetworkThread(); + + public boolean serverIsInRunLoop() { + return this.serverIsRunning; + } + + public boolean getGuiEnabled() { + return false; + } + + public abstract String shareToLAN(EnumGameType var1, boolean var2); + + public int getTickCounter() { + return this.tickCounter; + } + + public void enableProfiling() { + this.startProfiling = true; + } + + public PlayerUsageSnooper getPlayerUsageSnooper() { + return this.usageSnooper; + } + + public ChunkCoordinates getPlayerCoordinates() { + return new ChunkCoordinates(0, 0, 0); + } + + public int getSpawnProtectionSize() { + return 16; + } + + public boolean func_96290_a(World var1, int var2, int var3, int var4, EntityPlayer var5) { + return false; + } + + public abstract ILogAgent getLogAgent(); + + public void func_104055_i(boolean var1) { + this.field_104057_T = var1; + } + + public boolean func_104056_am() { + return this.field_104057_T; + } + + public static ServerConfigurationManager getServerConfigurationManager(MinecraftServer var0) { + return var0.serverConfigManager; + } +} diff --git a/src/net/minecraft/src/AABBLocalPool.java b/src/net/minecraft/src/AABBLocalPool.java new file mode 100644 index 0000000..feed058 --- /dev/null +++ b/src/net/minecraft/src/AABBLocalPool.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class AABBLocalPool extends ThreadLocal { + protected AABBPool createNewDefaultPool() { + return new AABBPool(300, 2000); + } + + protected Object initialValue() { + return this.createNewDefaultPool(); + } +} diff --git a/src/net/minecraft/src/AABBPool.java b/src/net/minecraft/src/AABBPool.java new file mode 100644 index 0000000..f743d85 --- /dev/null +++ b/src/net/minecraft/src/AABBPool.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class AABBPool { + private final int maxNumCleans; + private final int numEntriesToRemove; + private final List listAABB = new ArrayList(); + private int nextPoolIndex = 0; + private int maxPoolIndex = 0; + private int numCleans = 0; + + public AABBPool(int var1, int var2) { + this.maxNumCleans = var1; + this.numEntriesToRemove = var2; + } + + public AxisAlignedBB getAABB(double var1, double var3, double var5, double var7, double var9, double var11) { + AxisAlignedBB var13; + if(this.nextPoolIndex >= this.listAABB.size()) { + var13 = new AxisAlignedBB(var1, var3, var5, var7, var9, var11); + this.listAABB.add(var13); + } else { + var13 = (AxisAlignedBB)this.listAABB.get(this.nextPoolIndex); + var13.setBounds(var1, var3, var5, var7, var9, var11); + } + + ++this.nextPoolIndex; + return var13; + } + + public void cleanPool() { + if(this.nextPoolIndex > this.maxPoolIndex) { + this.maxPoolIndex = this.nextPoolIndex; + } + + if(this.numCleans++ == this.maxNumCleans) { + int var1 = Math.max(this.maxPoolIndex, this.listAABB.size() - this.numEntriesToRemove); + + while(this.listAABB.size() > var1) { + this.listAABB.remove(var1); + } + + this.maxPoolIndex = 0; + this.numCleans = 0; + } + + this.nextPoolIndex = 0; + } + + public void clearPool() { + this.nextPoolIndex = 0; + this.listAABB.clear(); + } + + public int getlistAABBsize() { + return this.listAABB.size(); + } + + public int getnextPoolIndex() { + return this.nextPoolIndex; + } +} diff --git a/src/net/minecraft/src/Achievement.java b/src/net/minecraft/src/Achievement.java new file mode 100644 index 0000000..45b2a2d --- /dev/null +++ b/src/net/minecraft/src/Achievement.java @@ -0,0 +1,85 @@ +package net.minecraft.src; + +public class Achievement extends StatBase { + public final int displayColumn; + public final int displayRow; + public final Achievement parentAchievement; + private final String achievementDescription; + private IStatStringFormat statStringFormatter; + public final ItemStack theItemStack; + private boolean isSpecial; + + public Achievement(int var1, String var2, int var3, int var4, Item var5, Achievement var6) { + this(var1, var2, var3, var4, new ItemStack(var5), var6); + } + + public Achievement(int var1, String var2, int var3, int var4, Block var5, Achievement var6) { + this(var1, var2, var3, var4, new ItemStack(var5), var6); + } + + public Achievement(int var1, String var2, int var3, int var4, ItemStack var5, Achievement var6) { + super(5242880 + var1, "achievement." + var2); + this.theItemStack = var5; + this.achievementDescription = "achievement." + var2 + ".desc"; + this.displayColumn = var3; + this.displayRow = var4; + if(var3 < AchievementList.minDisplayColumn) { + AchievementList.minDisplayColumn = var3; + } + + if(var4 < AchievementList.minDisplayRow) { + AchievementList.minDisplayRow = var4; + } + + if(var3 > AchievementList.maxDisplayColumn) { + AchievementList.maxDisplayColumn = var3; + } + + if(var4 > AchievementList.maxDisplayRow) { + AchievementList.maxDisplayRow = var4; + } + + this.parentAchievement = var6; + } + + public Achievement setIndependent() { + this.isIndependent = true; + return this; + } + + public Achievement setSpecial() { + this.isSpecial = true; + return this; + } + + public Achievement registerAchievement() { + super.registerStat(); + AchievementList.achievementList.add(this); + return this; + } + + public boolean isAchievement() { + return true; + } + + public String getDescription() { + return this.statStringFormatter != null ? this.statStringFormatter.formatString(StatCollector.translateToLocal(this.achievementDescription)) : StatCollector.translateToLocal(this.achievementDescription); + } + + public Achievement setStatStringFormatter(IStatStringFormat var1) { + this.statStringFormatter = var1; + return this; + } + + public boolean getSpecial() { + return this.isSpecial; + } + + public StatBase registerStat() { + return this.registerAchievement(); + } + + public StatBase initIndependentStat() { + return this.setIndependent(); + } +} diff --git a/src/net/minecraft/src/AchievementList.java b/src/net/minecraft/src/AchievementList.java new file mode 100644 index 0000000..6c5cbd3 --- /dev/null +++ b/src/net/minecraft/src/AchievementList.java @@ -0,0 +1,46 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class AchievementList { + public static int minDisplayColumn; + public static int minDisplayRow; + public static int maxDisplayColumn; + public static int maxDisplayRow; + public static List achievementList = new ArrayList(); + public static Achievement openInventory = (new Achievement(0, "openInventory", 0, 0, Item.book, (Achievement)null)).setIndependent().registerAchievement(); + public static Achievement mineWood = (new Achievement(1, "mineWood", 2, 1, Block.wood, openInventory)).registerAchievement(); + public static Achievement buildWorkBench = (new Achievement(2, "buildWorkBench", 4, -1, Block.workbench, mineWood)).registerAchievement(); + public static Achievement buildPickaxe = (new Achievement(3, "buildPickaxe", 4, 2, Item.pickaxeWood, buildWorkBench)).registerAchievement(); + public static Achievement buildFurnace = (new Achievement(4, "buildFurnace", 3, 4, Block.furnaceIdle, buildPickaxe)).registerAchievement(); + public static Achievement acquireIron = (new Achievement(5, "acquireIron", 1, 4, Item.ingotIron, buildFurnace)).registerAchievement(); + public static Achievement buildHoe = (new Achievement(6, "buildHoe", 2, -3, Item.hoeWood, buildWorkBench)).registerAchievement(); + public static Achievement makeBread = (new Achievement(7, "makeBread", -1, -3, Item.bread, buildHoe)).registerAchievement(); + public static Achievement bakeCake = (new Achievement(8, "bakeCake", 0, -5, Item.cake, buildHoe)).registerAchievement(); + public static Achievement buildBetterPickaxe = (new Achievement(9, "buildBetterPickaxe", 6, 2, Item.pickaxeStone, buildPickaxe)).registerAchievement(); + public static Achievement cookFish = (new Achievement(10, "cookFish", 2, 6, Item.fishCooked, buildFurnace)).registerAchievement(); + public static Achievement onARail = (new Achievement(11, "onARail", 2, 3, Block.rail, acquireIron)).setSpecial().registerAchievement(); + public static Achievement buildSword = (new Achievement(12, "buildSword", 6, -1, Item.swordWood, buildWorkBench)).registerAchievement(); + public static Achievement killEnemy = (new Achievement(13, "killEnemy", 8, -1, Item.bone, buildSword)).registerAchievement(); + public static Achievement killCow = (new Achievement(14, "killCow", 7, -3, Item.leather, buildSword)).registerAchievement(); + public static Achievement flyPig = (new Achievement(15, "flyPig", 8, -4, Item.saddle, killCow)).setSpecial().registerAchievement(); + public static Achievement snipeSkeleton = (new Achievement(16, "snipeSkeleton", 7, 0, Item.bow, killEnemy)).setSpecial().registerAchievement(); + public static Achievement diamonds = (new Achievement(17, "diamonds", -1, 5, Item.diamond, acquireIron)).registerAchievement(); + public static Achievement portal = (new Achievement(18, "portal", -1, 7, Block.obsidian, diamonds)).registerAchievement(); + public static Achievement ghast = (new Achievement(19, "ghast", -4, 8, Item.ghastTear, portal)).setSpecial().registerAchievement(); + public static Achievement blazeRod = (new Achievement(20, "blazeRod", 0, 9, Item.blazeRod, portal)).registerAchievement(); + public static Achievement potion = (new Achievement(21, "potion", 2, 8, Item.potion, blazeRod)).registerAchievement(); + public static Achievement theEnd = (new Achievement(22, "theEnd", 3, 10, Item.eyeOfEnder, blazeRod)).setSpecial().registerAchievement(); + public static Achievement theEnd2 = (new Achievement(23, "theEnd2", 4, 13, Block.dragonEgg, theEnd)).setSpecial().registerAchievement(); + public static Achievement enchantments = (new Achievement(24, "enchantments", -4, 4, Block.enchantmentTable, diamonds)).registerAchievement(); + public static Achievement overkill = (new Achievement(25, "overkill", -4, 1, Item.swordDiamond, enchantments)).setSpecial().registerAchievement(); + public static Achievement bookcase = (new Achievement(26, "bookcase", -3, 6, Block.bookShelf, enchantments)).registerAchievement(); + + public static void init() { + } + + static { + System.out.println(achievementList.size() + " achievements"); + } +} diff --git a/src/net/minecraft/src/AchievementMap.java b/src/net/minecraft/src/AchievementMap.java new file mode 100644 index 0000000..dd4413d --- /dev/null +++ b/src/net/minecraft/src/AchievementMap.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.util.HashMap; +import java.util.Map; + +public class AchievementMap { + public static AchievementMap instance = new AchievementMap(); + private Map guidMap = new HashMap(); + + private AchievementMap() { + try { + BufferedReader var1 = new BufferedReader(new InputStreamReader(AchievementMap.class.getResourceAsStream("/achievement/map.txt"))); + + while(true) { + String var2 = var1.readLine(); + if(var2 == null) { + var1.close(); + break; + } + + String[] var3 = var2.split(","); + int var4 = Integer.parseInt(var3[0]); + this.guidMap.put(Integer.valueOf(var4), var3[1]); + } + } catch (Exception var5) { + var5.printStackTrace(); + } + + } + + public static String getGuid(int var0) { + return (String)instance.guidMap.get(Integer.valueOf(var0)); + } +} diff --git a/src/net/minecraft/src/ActiveRenderInfo.java b/src/net/minecraft/src/ActiveRenderInfo.java new file mode 100644 index 0000000..e87aba2 --- /dev/null +++ b/src/net/minecraft/src/ActiveRenderInfo.java @@ -0,0 +1,66 @@ +package net.minecraft.src; + +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.glu.GLU; + +public class ActiveRenderInfo { + public static float objectX = 0.0F; + public static float objectY = 0.0F; + public static float objectZ = 0.0F; + private static IntBuffer viewport = GLAllocation.createDirectIntBuffer(16); + private static FloatBuffer modelview = GLAllocation.createDirectFloatBuffer(16); + private static FloatBuffer projection = GLAllocation.createDirectFloatBuffer(16); + private static FloatBuffer objectCoords = GLAllocation.createDirectFloatBuffer(3); + public static float rotationX; + public static float rotationXZ; + public static float rotationZ; + public static float rotationYZ; + public static float rotationXY; + + public static void updateRenderInfo(EntityPlayer var0, boolean var1) { + GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, modelview); + GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, projection); + GL11.glGetInteger(GL11.GL_VIEWPORT, viewport); + float var2 = (float)((viewport.get(0) + viewport.get(2)) / 2); + float var3 = (float)((viewport.get(1) + viewport.get(3)) / 2); + GLU.gluUnProject(var2, var3, 0.0F, modelview, projection, viewport, objectCoords); + objectX = objectCoords.get(0); + objectY = objectCoords.get(1); + objectZ = objectCoords.get(2); + int var4 = var1 ? 1 : 0; + float var5 = var0.rotationPitch; + float var6 = var0.rotationYaw; + rotationX = MathHelper.cos(var6 * (float)Math.PI / 180.0F) * (float)(1 - var4 * 2); + rotationZ = MathHelper.sin(var6 * (float)Math.PI / 180.0F) * (float)(1 - var4 * 2); + rotationYZ = -rotationZ * MathHelper.sin(var5 * (float)Math.PI / 180.0F) * (float)(1 - var4 * 2); + rotationXY = rotationX * MathHelper.sin(var5 * (float)Math.PI / 180.0F) * (float)(1 - var4 * 2); + rotationXZ = MathHelper.cos(var5 * (float)Math.PI / 180.0F); + } + + public static Vec3 projectViewFromEntity(EntityLiving var0, double var1) { + double var3 = var0.prevPosX + (var0.posX - var0.prevPosX) * var1; + double var5 = var0.prevPosY + (var0.posY - var0.prevPosY) * var1 + (double)var0.getEyeHeight(); + double var7 = var0.prevPosZ + (var0.posZ - var0.prevPosZ) * var1; + double var9 = var3 + (double)(objectX * 1.0F); + double var11 = var5 + (double)(objectY * 1.0F); + double var13 = var7 + (double)(objectZ * 1.0F); + return var0.worldObj.getWorldVec3Pool().getVecFromPool(var9, var11, var13); + } + + public static int getBlockIdAtEntityViewpoint(World var0, EntityLiving var1, float var2) { + Vec3 var3 = projectViewFromEntity(var1, (double)var2); + ChunkPosition var4 = new ChunkPosition(var3); + int var5 = var0.getBlockId(var4.x, var4.y, var4.z); + if(var5 != 0 && Block.blocksList[var5].blockMaterial.isLiquid()) { + float var6 = BlockFluid.getFluidHeightPercent(var0.getBlockMetadata(var4.x, var4.y, var4.z)) - 1.0F / 9.0F; + float var7 = (float)(var4.y + 1) - var6; + if(var3.yCoord >= (double)var7) { + var5 = var0.getBlockId(var4.x, var4.y + 1, var4.z); + } + } + + return var5; + } +} diff --git a/src/net/minecraft/src/AnvilChunkLoader.java b/src/net/minecraft/src/AnvilChunkLoader.java new file mode 100644 index 0000000..5a7c08b --- /dev/null +++ b/src/net/minecraft/src/AnvilChunkLoader.java @@ -0,0 +1,316 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +public class AnvilChunkLoader implements IChunkLoader, IThreadedFileIO { + private List chunksToRemove = new ArrayList(); + private Set pendingAnvilChunksCoordinates = new HashSet(); + private Object syncLockObject = new Object(); + private final File chunkSaveLocation; + + public AnvilChunkLoader(File var1) { + this.chunkSaveLocation = var1; + } + + public Chunk loadChunk(World var1, int var2, int var3) throws IOException { + NBTTagCompound var4 = null; + ChunkCoordIntPair var5 = new ChunkCoordIntPair(var2, var3); + Object var6 = this.syncLockObject; + synchronized(var6) { + if(this.pendingAnvilChunksCoordinates.contains(var5)) { + for(int var7 = 0; var7 < this.chunksToRemove.size(); ++var7) { + if(((AnvilChunkLoaderPending)this.chunksToRemove.get(var7)).chunkCoordinate.equals(var5)) { + var4 = ((AnvilChunkLoaderPending)this.chunksToRemove.get(var7)).nbtTags; + break; + } + } + } + } + + if(var4 == null) { + DataInputStream var10 = RegionFileCache.getChunkInputStream(this.chunkSaveLocation, var2, var3); + if(var10 == null) { + return null; + } + + var4 = CompressedStreamTools.read((DataInput)var10); + } + + return this.checkedReadChunkFromNBT(var1, var2, var3, var4); + } + + protected Chunk checkedReadChunkFromNBT(World var1, int var2, int var3, NBTTagCompound var4) { + if(!var4.hasKey("Level")) { + var1.getWorldLogAgent().logSevere("Chunk file at " + var2 + "," + var3 + " is missing level data, skipping"); + return null; + } else if(!var4.getCompoundTag("Level").hasKey("Sections")) { + var1.getWorldLogAgent().logSevere("Chunk file at " + var2 + "," + var3 + " is missing block data, skipping"); + return null; + } else { + Chunk var5 = this.readChunkFromNBT(var1, var4.getCompoundTag("Level")); + if(!var5.isAtLocation(var2, var3)) { + var1.getWorldLogAgent().logSevere("Chunk file at " + var2 + "," + var3 + " is in the wrong location; relocating. (Expected " + var2 + ", " + var3 + ", got " + var5.xPosition + ", " + var5.zPosition + ")"); + var4.setInteger("xPos", var2); + var4.setInteger("zPos", var3); + var5 = this.readChunkFromNBT(var1, var4.getCompoundTag("Level")); + } + + return var5; + } + } + + public void saveChunk(World var1, Chunk var2) throws IOException, MinecraftException { + var1.checkSessionLock(); + + try { + NBTTagCompound var3 = new NBTTagCompound(); + NBTTagCompound var4 = new NBTTagCompound(); + var3.setTag("Level", var4); + this.writeChunkToNBT(var2, var1, var4); + this.addChunkToPending(var2.getChunkCoordIntPair(), var3); + } catch (Exception var5) { + var5.printStackTrace(); + } + + } + + protected void addChunkToPending(ChunkCoordIntPair var1, NBTTagCompound var2) { + Object var3 = this.syncLockObject; + synchronized(var3) { + if(this.pendingAnvilChunksCoordinates.contains(var1)) { + for(int var4 = 0; var4 < this.chunksToRemove.size(); ++var4) { + if(((AnvilChunkLoaderPending)this.chunksToRemove.get(var4)).chunkCoordinate.equals(var1)) { + this.chunksToRemove.set(var4, new AnvilChunkLoaderPending(var1, var2)); + return; + } + } + } + + this.chunksToRemove.add(new AnvilChunkLoaderPending(var1, var2)); + this.pendingAnvilChunksCoordinates.add(var1); + ThreadedFileIOBase.threadedIOInstance.queueIO(this); + } + } + + public boolean writeNextIO() { + AnvilChunkLoaderPending var1 = null; + Object var2 = this.syncLockObject; + synchronized(var2) { + if(this.chunksToRemove.isEmpty()) { + return false; + } + + var1 = (AnvilChunkLoaderPending)this.chunksToRemove.remove(0); + this.pendingAnvilChunksCoordinates.remove(var1.chunkCoordinate); + } + + if(var1 != null) { + try { + this.writeChunkNBTTags(var1); + } catch (Exception var4) { + var4.printStackTrace(); + } + } + + return true; + } + + private void writeChunkNBTTags(AnvilChunkLoaderPending var1) throws IOException { + DataOutputStream var2 = RegionFileCache.getChunkOutputStream(this.chunkSaveLocation, var1.chunkCoordinate.chunkXPos, var1.chunkCoordinate.chunkZPos); + CompressedStreamTools.write(var1.nbtTags, (DataOutput)var2); + var2.close(); + } + + public void saveExtraChunkData(World var1, Chunk var2) { + } + + public void chunkTick() { + } + + public void saveExtraData() { + while(this.writeNextIO()) { + } + + } + + private void writeChunkToNBT(Chunk var1, World var2, NBTTagCompound var3) { + var3.setInteger("xPos", var1.xPosition); + var3.setInteger("zPos", var1.zPosition); + var3.setLong("LastUpdate", var2.getTotalWorldTime()); + var3.setIntArray("HeightMap", var1.heightMap); + var3.setBoolean("TerrainPopulated", var1.isTerrainPopulated); + ExtendedBlockStorage[] var4 = var1.getBlockStorageArray(); + NBTTagList var5 = new NBTTagList("Sections"); + boolean var6 = !var2.provider.hasNoSky; + ExtendedBlockStorage[] var7 = var4; + int var8 = var4.length; + + NBTTagCompound var11; + for(int var9 = 0; var9 < var8; ++var9) { + ExtendedBlockStorage var10 = var7[var9]; + if(var10 != null) { + var11 = new NBTTagCompound(); + var11.setByte("Y", (byte)(var10.getYLocation() >> 4 & 255)); + var11.setByteArray("Blocks", var10.getBlockLSBArray()); + if(var10.getBlockMSBArray() != null) { + var11.setByteArray("Add", var10.getBlockMSBArray().data); + } + + var11.setByteArray("Data", var10.getMetadataArray().data); + var11.setByteArray("BlockLight", var10.getBlocklightArray().data); + if(var6) { + var11.setByteArray("SkyLight", var10.getSkylightArray().data); + } else { + var11.setByteArray("SkyLight", new byte[var10.getBlocklightArray().data.length]); + } + + var5.appendTag(var11); + } + } + + var3.setTag("Sections", var5); + var3.setByteArray("Biomes", var1.getBiomeArray()); + var1.hasEntities = false; + NBTTagList var16 = new NBTTagList(); + + Iterator var18; + for(var8 = 0; var8 < var1.entityLists.length; ++var8) { + var18 = var1.entityLists[var8].iterator(); + + while(var18.hasNext()) { + Entity var20 = (Entity)var18.next(); + var11 = new NBTTagCompound(); + if(var20.addEntityID(var11)) { + var1.hasEntities = true; + var16.appendTag(var11); + } + } + } + + var3.setTag("Entities", var16); + NBTTagList var17 = new NBTTagList(); + var18 = var1.chunkTileEntityMap.values().iterator(); + + while(var18.hasNext()) { + TileEntity var21 = (TileEntity)var18.next(); + var11 = new NBTTagCompound(); + var21.writeToNBT(var11); + var17.appendTag(var11); + } + + var3.setTag("TileEntities", var17); + List var19 = var2.getPendingBlockUpdates(var1, false); + if(var19 != null) { + long var22 = var2.getTotalWorldTime(); + NBTTagList var12 = new NBTTagList(); + Iterator var13 = var19.iterator(); + + while(var13.hasNext()) { + NextTickListEntry var14 = (NextTickListEntry)var13.next(); + NBTTagCompound var15 = new NBTTagCompound(); + var15.setInteger("i", var14.blockID); + var15.setInteger("x", var14.xCoord); + var15.setInteger("y", var14.yCoord); + var15.setInteger("z", var14.zCoord); + var15.setInteger("t", (int)(var14.scheduledTime - var22)); + var15.setInteger("p", var14.field_82754_f); + var12.appendTag(var15); + } + + var3.setTag("TileTicks", var12); + } + + } + + private Chunk readChunkFromNBT(World var1, NBTTagCompound var2) { + int var3 = var2.getInteger("xPos"); + int var4 = var2.getInteger("zPos"); + Chunk var5 = new Chunk(var1, var3, var4); + var5.heightMap = var2.getIntArray("HeightMap"); + var5.isTerrainPopulated = var2.getBoolean("TerrainPopulated"); + NBTTagList var6 = var2.getTagList("Sections"); + byte var7 = 16; + ExtendedBlockStorage[] var8 = new ExtendedBlockStorage[var7]; + boolean var9 = !var1.provider.hasNoSky; + + for(int var10 = 0; var10 < var6.tagCount(); ++var10) { + NBTTagCompound var11 = (NBTTagCompound)var6.tagAt(var10); + byte var12 = var11.getByte("Y"); + ExtendedBlockStorage var13 = new ExtendedBlockStorage(var12 << 4, var9); + var13.setBlockLSBArray(var11.getByteArray("Blocks")); + if(var11.hasKey("Add")) { + var13.setBlockMSBArray(new NibbleArray(var11.getByteArray("Add"), 4)); + } + + var13.setBlockMetadataArray(new NibbleArray(var11.getByteArray("Data"), 4)); + var13.setBlocklightArray(new NibbleArray(var11.getByteArray("BlockLight"), 4)); + if(var9) { + var13.setSkylightArray(new NibbleArray(var11.getByteArray("SkyLight"), 4)); + } + + var13.removeInvalidBlocks(); + var8[var12] = var13; + } + + var5.setStorageArrays(var8); + if(var2.hasKey("Biomes")) { + var5.setBiomeArray(var2.getByteArray("Biomes")); + } + + NBTTagList var17 = var2.getTagList("Entities"); + if(var17 != null) { + for(int var18 = 0; var18 < var17.tagCount(); ++var18) { + NBTTagCompound var20 = (NBTTagCompound)var17.tagAt(var18); + Entity var22 = EntityList.createEntityFromNBT(var20, var1); + var5.hasEntities = true; + if(var22 != null) { + var5.addEntity(var22); + Entity var14 = var22; + + for(NBTTagCompound var15 = var20; var15.hasKey("Riding"); var15 = var15.getCompoundTag("Riding")) { + Entity var16 = EntityList.createEntityFromNBT(var15.getCompoundTag("Riding"), var1); + if(var16 != null) { + var5.addEntity(var16); + var14.mountEntity(var16); + } + + var14 = var16; + } + } + } + } + + NBTTagList var19 = var2.getTagList("TileEntities"); + if(var19 != null) { + for(int var21 = 0; var21 < var19.tagCount(); ++var21) { + NBTTagCompound var24 = (NBTTagCompound)var19.tagAt(var21); + TileEntity var26 = TileEntity.createAndLoadEntity(var24); + if(var26 != null) { + var5.addTileEntity(var26); + } + } + } + + if(var2.hasKey("TileTicks")) { + NBTTagList var23 = var2.getTagList("TileTicks"); + if(var23 != null) { + for(int var25 = 0; var25 < var23.tagCount(); ++var25) { + NBTTagCompound var27 = (NBTTagCompound)var23.tagAt(var25); + var1.scheduleBlockUpdateFromLoad(var27.getInteger("x"), var27.getInteger("y"), var27.getInteger("z"), var27.getInteger("i"), var27.getInteger("t"), var27.getInteger("p")); + } + } + } + + return var5; + } +} diff --git a/src/net/minecraft/src/AnvilChunkLoaderPending.java b/src/net/minecraft/src/AnvilChunkLoaderPending.java new file mode 100644 index 0000000..eda2af2 --- /dev/null +++ b/src/net/minecraft/src/AnvilChunkLoaderPending.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +class AnvilChunkLoaderPending { + public final ChunkCoordIntPair chunkCoordinate; + public final NBTTagCompound nbtTags; + + public AnvilChunkLoaderPending(ChunkCoordIntPair var1, NBTTagCompound var2) { + this.chunkCoordinate = var1; + this.nbtTags = var2; + } +} diff --git a/src/net/minecraft/src/AnvilConverterData.java b/src/net/minecraft/src/AnvilConverterData.java new file mode 100644 index 0000000..8665941 --- /dev/null +++ b/src/net/minecraft/src/AnvilConverterData.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +public class AnvilConverterData { + public long lastUpdated; + public boolean terrainPopulated; + public byte[] heightmap; + public NibbleArrayReader blockLight; + public NibbleArrayReader skyLight; + public NibbleArrayReader data; + public byte[] blocks; + public NBTTagList entities; + public NBTTagList tileEntities; + public NBTTagList tileTicks; + public final int x; + public final int z; + + public AnvilConverterData(int var1, int var2) { + this.x = var1; + this.z = var2; + } +} diff --git a/src/net/minecraft/src/AnvilConverterException.java b/src/net/minecraft/src/AnvilConverterException.java new file mode 100644 index 0000000..ac7d792 --- /dev/null +++ b/src/net/minecraft/src/AnvilConverterException.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class AnvilConverterException extends Exception { + public AnvilConverterException(String var1) { + super(var1); + } +} diff --git a/src/net/minecraft/src/AnvilSaveConverter.java b/src/net/minecraft/src/AnvilSaveConverter.java new file mode 100644 index 0000000..da17d90 --- /dev/null +++ b/src/net/minecraft/src/AnvilSaveConverter.java @@ -0,0 +1,194 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class AnvilSaveConverter extends SaveFormatOld { + public AnvilSaveConverter(File var1) { + super(var1); + } + + public List getSaveList() throws AnvilConverterException { + if(this.savesDirectory != null && this.savesDirectory.exists() && this.savesDirectory.isDirectory()) { + ArrayList var1 = new ArrayList(); + File[] var2 = this.savesDirectory.listFiles(); + File[] var3 = var2; + int var4 = var2.length; + + for(int var5 = 0; var5 < var4; ++var5) { + File var6 = var3[var5]; + if(var6.isDirectory()) { + String var7 = var6.getName(); + WorldInfo var8 = this.getWorldInfo(var7); + if(var8 != null && (var8.getSaveVersion() == 19132 || var8.getSaveVersion() == 19133)) { + boolean var9 = var8.getSaveVersion() != this.getSaveVersion(); + String var10 = var8.getWorldName(); + if(var10 == null || MathHelper.stringNullOrLengthZero(var10)) { + var10 = var7; + } + + long var11 = 0L; + var1.add(new SaveFormatComparator(var7, var10, var8.getLastTimePlayed(), var11, var8.getGameType(), var9, var8.isHardcoreModeEnabled(), var8.areCommandsAllowed())); + } + } + } + + return var1; + } else { + throw new AnvilConverterException("Unable to read or access folder where game worlds are saved!"); + } + } + + protected int getSaveVersion() { + return 19133; + } + + public void flushCache() { + RegionFileCache.clearRegionFileReferences(); + } + + public ISaveHandler getSaveLoader(String var1, boolean var2) { + return new AnvilSaveHandler(this.savesDirectory, var1, var2); + } + + public boolean isOldMapFormat(String var1) { + WorldInfo var2 = this.getWorldInfo(var1); + return var2 != null && var2.getSaveVersion() != this.getSaveVersion(); + } + + public boolean convertMapFormat(String var1, IProgressUpdate var2) { + var2.setLoadingProgress(0); + ArrayList var3 = new ArrayList(); + ArrayList var4 = new ArrayList(); + ArrayList var5 = new ArrayList(); + File var6 = new File(this.savesDirectory, var1); + File var7 = new File(var6, "DIM-1"); + File var8 = new File(var6, "DIM1"); + MinecraftServer.getServer().getLogAgent().logInfo("Scanning folders..."); + this.addRegionFilesToCollection(var6, var3); + if(var7.exists()) { + this.addRegionFilesToCollection(var7, var4); + } + + if(var8.exists()) { + this.addRegionFilesToCollection(var8, var5); + } + + int var9 = var3.size() + var4.size() + var5.size(); + MinecraftServer.getServer().getLogAgent().logInfo("Total conversion count is " + var9); + WorldInfo var10 = this.getWorldInfo(var1); + Object var11 = null; + if(var10.getTerrainType() == WorldType.FLAT) { + var11 = new WorldChunkManagerHell(BiomeGenBase.plains, 0.5F, 0.5F); + } else { + var11 = new WorldChunkManager(var10.getSeed(), var10.getTerrainType()); + } + + this.convertFile(new File(var6, "region"), var3, (WorldChunkManager)var11, 0, var9, var2); + this.convertFile(new File(var7, "region"), var4, new WorldChunkManagerHell(BiomeGenBase.hell, 1.0F, 0.0F), var3.size(), var9, var2); + this.convertFile(new File(var8, "region"), var5, new WorldChunkManagerHell(BiomeGenBase.sky, 0.5F, 0.0F), var3.size() + var4.size(), var9, var2); + var10.setSaveVersion(19133); + if(var10.getTerrainType() == WorldType.DEFAULT_1_1) { + var10.setTerrainType(WorldType.DEFAULT); + } + + this.createFile(var1); + ISaveHandler var12 = this.getSaveLoader(var1, false); + var12.saveWorldInfo(var10); + return true; + } + + private void createFile(String var1) { + File var2 = new File(this.savesDirectory, var1); + if(!var2.exists()) { + System.out.println("Warning: Unable to create level.dat_mcr backup"); + } else { + File var3 = new File(var2, "level.dat"); + if(!var3.exists()) { + System.out.println("Warning: Unable to create level.dat_mcr backup"); + } else { + File var4 = new File(var2, "level.dat_mcr"); + if(!var3.renameTo(var4)) { + System.out.println("Warning: Unable to create level.dat_mcr backup"); + } + + } + } + } + + private void convertFile(File var1, Iterable var2, WorldChunkManager var3, int var4, int var5, IProgressUpdate var6) { + Iterator var7 = var2.iterator(); + + while(var7.hasNext()) { + File var8 = (File)var7.next(); + this.convertChunks(var1, var8, var3, var4, var5, var6); + ++var4; + int var9 = (int)Math.round(100.0D * (double)var4 / (double)var5); + var6.setLoadingProgress(var9); + } + + } + + private void convertChunks(File var1, File var2, WorldChunkManager var3, int var4, int var5, IProgressUpdate var6) { + try { + String var7 = var2.getName(); + RegionFile var8 = new RegionFile(var2); + RegionFile var9 = new RegionFile(new File(var1, var7.substring(0, var7.length() - ".mcr".length()) + ".mca")); + + for(int var10 = 0; var10 < 32; ++var10) { + int var11; + for(var11 = 0; var11 < 32; ++var11) { + if(var8.isChunkSaved(var10, var11) && !var9.isChunkSaved(var10, var11)) { + DataInputStream var12 = var8.getChunkDataInputStream(var10, var11); + if(var12 == null) { + MinecraftServer.getServer().getLogAgent().logWarning("Failed to fetch input stream"); + } else { + NBTTagCompound var13 = CompressedStreamTools.read((DataInput)var12); + var12.close(); + NBTTagCompound var14 = var13.getCompoundTag("Level"); + AnvilConverterData var15 = ChunkLoader.load(var14); + NBTTagCompound var16 = new NBTTagCompound(); + NBTTagCompound var17 = new NBTTagCompound(); + var16.setTag("Level", var17); + ChunkLoader.convertToAnvilFormat(var15, var17, var3); + DataOutputStream var18 = var9.getChunkDataOutputStream(var10, var11); + CompressedStreamTools.write(var16, (DataOutput)var18); + var18.close(); + } + } + } + + var11 = (int)Math.round(100.0D * (double)(var4 * 1024) / (double)(var5 * 1024)); + int var20 = (int)Math.round(100.0D * (double)((var10 + 1) * 32 + var4 * 1024) / (double)(var5 * 1024)); + if(var20 > var11) { + var6.setLoadingProgress(var20); + } + } + + var8.close(); + var9.close(); + } catch (IOException var19) { + var19.printStackTrace(); + } + + } + + private void addRegionFilesToCollection(File var1, Collection var2) { + File var3 = new File(var1, "region"); + File[] var4 = var3.listFiles(new AnvilSaveConverterFileFilter(this)); + if(var4 != null) { + Collections.addAll(var2, var4); + } + + } +} diff --git a/src/net/minecraft/src/AnvilSaveConverterFileFilter.java b/src/net/minecraft/src/AnvilSaveConverterFileFilter.java new file mode 100644 index 0000000..561eb4e --- /dev/null +++ b/src/net/minecraft/src/AnvilSaveConverterFileFilter.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FilenameFilter; + +class AnvilSaveConverterFileFilter implements FilenameFilter { + final AnvilSaveConverter parent; + + AnvilSaveConverterFileFilter(AnvilSaveConverter var1) { + this.parent = var1; + } + + public boolean accept(File var1, String var2) { + return var2.endsWith(".mcr"); + } +} diff --git a/src/net/minecraft/src/AnvilSaveHandler.java b/src/net/minecraft/src/AnvilSaveHandler.java new file mode 100644 index 0000000..8c4fd6f --- /dev/null +++ b/src/net/minecraft/src/AnvilSaveHandler.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.io.File; + +public class AnvilSaveHandler extends SaveHandler { + public AnvilSaveHandler(File var1, String var2, boolean var3) { + super(var1, var2, var3); + } + + public IChunkLoader getChunkLoader(WorldProvider var1) { + File var2 = this.getWorldDirectory(); + File var3; + if(var1 instanceof WorldProviderHell) { + var3 = new File(var2, "DIM-1"); + var3.mkdirs(); + return new AnvilChunkLoader(var3); + } else if(var1 instanceof WorldProviderEnd) { + var3 = new File(var2, "DIM1"); + var3.mkdirs(); + return new AnvilChunkLoader(var3); + } else { + return new AnvilChunkLoader(var2); + } + } + + public void saveWorldInfoWithPlayer(WorldInfo var1, NBTTagCompound var2) { + var1.setSaveVersion(19133); + super.saveWorldInfoWithPlayer(var1, var2); + } + + public void flush() { + try { + ThreadedFileIOBase.threadedIOInstance.waitForFinish(); + } catch (InterruptedException var2) { + var2.printStackTrace(); + } + + RegionFileCache.clearRegionFileReferences(); + } +} diff --git a/src/net/minecraft/src/AxisAlignedBB.java b/src/net/minecraft/src/AxisAlignedBB.java new file mode 100644 index 0000000..04d084b --- /dev/null +++ b/src/net/minecraft/src/AxisAlignedBB.java @@ -0,0 +1,319 @@ +package net.minecraft.src; + +public class AxisAlignedBB { + private static final ThreadLocal theAABBLocalPool = new AABBLocalPool(); + public double minX; + public double minY; + public double minZ; + public double maxX; + public double maxY; + public double maxZ; + + public static AxisAlignedBB getBoundingBox(double var0, double var2, double var4, double var6, double var8, double var10) { + return new AxisAlignedBB(var0, var2, var4, var6, var8, var10); + } + + public static AABBPool getAABBPool() { + return (AABBPool)theAABBLocalPool.get(); + } + + protected AxisAlignedBB(double var1, double var3, double var5, double var7, double var9, double var11) { + this.minX = var1; + this.minY = var3; + this.minZ = var5; + this.maxX = var7; + this.maxY = var9; + this.maxZ = var11; + } + + public AxisAlignedBB setBounds(double var1, double var3, double var5, double var7, double var9, double var11) { + this.minX = var1; + this.minY = var3; + this.minZ = var5; + this.maxX = var7; + this.maxY = var9; + this.maxZ = var11; + return this; + } + + public AxisAlignedBB addCoord(double var1, double var3, double var5) { + double var7 = this.minX; + double var9 = this.minY; + double var11 = this.minZ; + double var13 = this.maxX; + double var15 = this.maxY; + double var17 = this.maxZ; + if(var1 < 0.0D) { + var7 += var1; + } + + if(var1 > 0.0D) { + var13 += var1; + } + + if(var3 < 0.0D) { + var9 += var3; + } + + if(var3 > 0.0D) { + var15 += var3; + } + + if(var5 < 0.0D) { + var11 += var5; + } + + if(var5 > 0.0D) { + var17 += var5; + } + + return getAABBPool().getAABB(var7, var9, var11, var13, var15, var17); + } + + public AxisAlignedBB expand(double var1, double var3, double var5) { + double var7 = this.minX - var1; + double var9 = this.minY - var3; + double var11 = this.minZ - var5; + double var13 = this.maxX + var1; + double var15 = this.maxY + var3; + double var17 = this.maxZ + var5; + return getAABBPool().getAABB(var7, var9, var11, var13, var15, var17); + } + + public AxisAlignedBB getOffsetBoundingBox(double var1, double var3, double var5) { + return getAABBPool().getAABB(this.minX + var1, this.minY + var3, this.minZ + var5, this.maxX + var1, this.maxY + var3, this.maxZ + var5); + } + + public double calculateXOffset(AxisAlignedBB var1, double var2) { + if(var1.maxY > this.minY && var1.minY < this.maxY) { + if(var1.maxZ > this.minZ && var1.minZ < this.maxZ) { + double var4; + if(var2 > 0.0D && var1.maxX <= this.minX) { + var4 = this.minX - var1.maxX; + if(var4 < var2) { + var2 = var4; + } + } + + if(var2 < 0.0D && var1.minX >= this.maxX) { + var4 = this.maxX - var1.minX; + if(var4 > var2) { + var2 = var4; + } + } + + return var2; + } else { + return var2; + } + } else { + return var2; + } + } + + public double calculateYOffset(AxisAlignedBB var1, double var2) { + if(var1.maxX > this.minX && var1.minX < this.maxX) { + if(var1.maxZ > this.minZ && var1.minZ < this.maxZ) { + double var4; + if(var2 > 0.0D && var1.maxY <= this.minY) { + var4 = this.minY - var1.maxY; + if(var4 < var2) { + var2 = var4; + } + } + + if(var2 < 0.0D && var1.minY >= this.maxY) { + var4 = this.maxY - var1.minY; + if(var4 > var2) { + var2 = var4; + } + } + + return var2; + } else { + return var2; + } + } else { + return var2; + } + } + + public double calculateZOffset(AxisAlignedBB var1, double var2) { + if(var1.maxX > this.minX && var1.minX < this.maxX) { + if(var1.maxY > this.minY && var1.minY < this.maxY) { + double var4; + if(var2 > 0.0D && var1.maxZ <= this.minZ) { + var4 = this.minZ - var1.maxZ; + if(var4 < var2) { + var2 = var4; + } + } + + if(var2 < 0.0D && var1.minZ >= this.maxZ) { + var4 = this.maxZ - var1.minZ; + if(var4 > var2) { + var2 = var4; + } + } + + return var2; + } else { + return var2; + } + } else { + return var2; + } + } + + public boolean intersectsWith(AxisAlignedBB var1) { + return var1.maxX > this.minX && var1.minX < this.maxX ? (var1.maxY > this.minY && var1.minY < this.maxY ? var1.maxZ > this.minZ && var1.minZ < this.maxZ : false) : false; + } + + public AxisAlignedBB offset(double var1, double var3, double var5) { + this.minX += var1; + this.minY += var3; + this.minZ += var5; + this.maxX += var1; + this.maxY += var3; + this.maxZ += var5; + return this; + } + + public boolean isVecInside(Vec3 var1) { + return var1.xCoord > this.minX && var1.xCoord < this.maxX ? (var1.yCoord > this.minY && var1.yCoord < this.maxY ? var1.zCoord > this.minZ && var1.zCoord < this.maxZ : false) : false; + } + + public double getAverageEdgeLength() { + double var1 = this.maxX - this.minX; + double var3 = this.maxY - this.minY; + double var5 = this.maxZ - this.minZ; + return (var1 + var3 + var5) / 3.0D; + } + + public AxisAlignedBB contract(double var1, double var3, double var5) { + double var7 = this.minX + var1; + double var9 = this.minY + var3; + double var11 = this.minZ + var5; + double var13 = this.maxX - var1; + double var15 = this.maxY - var3; + double var17 = this.maxZ - var5; + return getAABBPool().getAABB(var7, var9, var11, var13, var15, var17); + } + + public AxisAlignedBB copy() { + return getAABBPool().getAABB(this.minX, this.minY, this.minZ, this.maxX, this.maxY, this.maxZ); + } + + public MovingObjectPosition calculateIntercept(Vec3 var1, Vec3 var2) { + Vec3 var3 = var1.getIntermediateWithXValue(var2, this.minX); + Vec3 var4 = var1.getIntermediateWithXValue(var2, this.maxX); + Vec3 var5 = var1.getIntermediateWithYValue(var2, this.minY); + Vec3 var6 = var1.getIntermediateWithYValue(var2, this.maxY); + Vec3 var7 = var1.getIntermediateWithZValue(var2, this.minZ); + Vec3 var8 = var1.getIntermediateWithZValue(var2, this.maxZ); + if(!this.isVecInYZ(var3)) { + var3 = null; + } + + if(!this.isVecInYZ(var4)) { + var4 = null; + } + + if(!this.isVecInXZ(var5)) { + var5 = null; + } + + if(!this.isVecInXZ(var6)) { + var6 = null; + } + + if(!this.isVecInXY(var7)) { + var7 = null; + } + + if(!this.isVecInXY(var8)) { + var8 = null; + } + + Vec3 var9 = null; + if(var3 != null && (var9 == null || var1.squareDistanceTo(var3) < var1.squareDistanceTo(var9))) { + var9 = var3; + } + + if(var4 != null && (var9 == null || var1.squareDistanceTo(var4) < var1.squareDistanceTo(var9))) { + var9 = var4; + } + + if(var5 != null && (var9 == null || var1.squareDistanceTo(var5) < var1.squareDistanceTo(var9))) { + var9 = var5; + } + + if(var6 != null && (var9 == null || var1.squareDistanceTo(var6) < var1.squareDistanceTo(var9))) { + var9 = var6; + } + + if(var7 != null && (var9 == null || var1.squareDistanceTo(var7) < var1.squareDistanceTo(var9))) { + var9 = var7; + } + + if(var8 != null && (var9 == null || var1.squareDistanceTo(var8) < var1.squareDistanceTo(var9))) { + var9 = var8; + } + + if(var9 == null) { + return null; + } else { + byte var10 = -1; + if(var9 == var3) { + var10 = 4; + } + + if(var9 == var4) { + var10 = 5; + } + + if(var9 == var5) { + var10 = 0; + } + + if(var9 == var6) { + var10 = 1; + } + + if(var9 == var7) { + var10 = 2; + } + + if(var9 == var8) { + var10 = 3; + } + + return new MovingObjectPosition(0, 0, 0, var10, var9); + } + } + + private boolean isVecInYZ(Vec3 var1) { + return var1 == null ? false : var1.yCoord >= this.minY && var1.yCoord <= this.maxY && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ; + } + + private boolean isVecInXZ(Vec3 var1) { + return var1 == null ? false : var1.xCoord >= this.minX && var1.xCoord <= this.maxX && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ; + } + + private boolean isVecInXY(Vec3 var1) { + return var1 == null ? false : var1.xCoord >= this.minX && var1.xCoord <= this.maxX && var1.yCoord >= this.minY && var1.yCoord <= this.maxY; + } + + public void setBB(AxisAlignedBB var1) { + this.minX = var1.minX; + this.minY = var1.minY; + this.minZ = var1.minZ; + this.maxX = var1.maxX; + this.maxY = var1.maxY; + this.maxZ = var1.maxZ; + } + + public String toString() { + return "box[" + this.minX + ", " + this.minY + ", " + this.minZ + " -> " + this.maxX + ", " + this.maxY + ", " + this.maxZ + "]"; + } +} diff --git a/src/net/minecraft/src/BanEntry.java b/src/net/minecraft/src/BanEntry.java new file mode 100644 index 0000000..8590741 --- /dev/null +++ b/src/net/minecraft/src/BanEntry.java @@ -0,0 +1,126 @@ +package net.minecraft.src; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.regex.Pattern; +import net.minecraft.server.MinecraftServer; + +public class BanEntry { + public static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z"); + private final String username; + private Date banStartDate = new Date(); + private String bannedBy = "(Unknown)"; + private Date banEndDate = null; + private String reason = "Banned by an operator."; + + public BanEntry(String var1) { + this.username = var1; + } + + public String getBannedUsername() { + return this.username; + } + + public Date getBanStartDate() { + return this.banStartDate; + } + + public void setBanStartDate(Date var1) { + this.banStartDate = var1 != null ? var1 : new Date(); + } + + public String getBannedBy() { + return this.bannedBy; + } + + public void setBannedBy(String var1) { + this.bannedBy = var1; + } + + public Date getBanEndDate() { + return this.banEndDate; + } + + public void setBanEndDate(Date var1) { + this.banEndDate = var1; + } + + public boolean hasBanExpired() { + return this.banEndDate == null ? false : this.banEndDate.before(new Date()); + } + + public String getBanReason() { + return this.reason; + } + + public void setBanReason(String var1) { + this.reason = var1; + } + + public String buildBanString() { + StringBuilder var1 = new StringBuilder(); + var1.append(this.getBannedUsername()); + var1.append("|"); + var1.append(dateFormat.format(this.getBanStartDate())); + var1.append("|"); + var1.append(this.getBannedBy()); + var1.append("|"); + var1.append(this.getBanEndDate() == null ? "Forever" : dateFormat.format(this.getBanEndDate())); + var1.append("|"); + var1.append(this.getBanReason()); + return var1.toString(); + } + + public static BanEntry parse(String var0) { + if(var0.trim().length() < 2) { + return null; + } else { + String[] var1 = var0.trim().split(Pattern.quote("|"), 5); + BanEntry var2 = new BanEntry(var1[0].trim()); + byte var3 = 0; + int var10000 = var1.length; + int var7 = var3 + 1; + if(var10000 <= var7) { + return var2; + } else { + try { + var2.setBanStartDate(dateFormat.parse(var1[var7].trim())); + } catch (ParseException var6) { + MinecraftServer.getServer().getLogAgent().logWarningException("Could not read creation date format for ban entry \'" + var2.getBannedUsername() + "\' (was: \'" + var1[var7] + "\')", var6); + } + + var10000 = var1.length; + ++var7; + if(var10000 <= var7) { + return var2; + } else { + var2.setBannedBy(var1[var7].trim()); + var10000 = var1.length; + ++var7; + if(var10000 <= var7) { + return var2; + } else { + try { + String var4 = var1[var7].trim(); + if(!var4.equalsIgnoreCase("Forever") && var4.length() > 0) { + var2.setBanEndDate(dateFormat.parse(var4)); + } + } catch (ParseException var5) { + MinecraftServer.getServer().getLogAgent().logWarningException("Could not read expiry date format for ban entry \'" + var2.getBannedUsername() + "\' (was: \'" + var1[var7] + "\')", var5); + } + + var10000 = var1.length; + ++var7; + if(var10000 <= var7) { + return var2; + } else { + var2.setBanReason(var1[var7].trim()); + return var2; + } + } + } + } + } + } +} diff --git a/src/net/minecraft/src/BanList.java b/src/net/minecraft/src/BanList.java new file mode 100644 index 0000000..19e6d72 --- /dev/null +++ b/src/net/minecraft/src/BanList.java @@ -0,0 +1,127 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Iterator; +import java.util.Map; +import net.minecraft.server.MinecraftServer; + +public class BanList { + private final LowerStringMap theBanList = new LowerStringMap(); + private final File fileName; + private boolean listActive = true; + + public BanList(File var1) { + this.fileName = var1; + } + + public boolean isListActive() { + return this.listActive; + } + + public void setListActive(boolean var1) { + this.listActive = var1; + } + + public Map getBannedList() { + this.removeExpiredBans(); + return this.theBanList; + } + + public boolean isBanned(String var1) { + if(!this.isListActive()) { + return false; + } else { + this.removeExpiredBans(); + return this.theBanList.containsKey(var1); + } + } + + public void put(BanEntry var1) { + this.theBanList.putLower(var1.getBannedUsername(), var1); + this.saveToFileWithHeader(); + } + + public void remove(String var1) { + this.theBanList.remove(var1); + this.saveToFileWithHeader(); + } + + public void removeExpiredBans() { + Iterator var1 = this.theBanList.values().iterator(); + + while(var1.hasNext()) { + BanEntry var2 = (BanEntry)var1.next(); + if(var2.hasBanExpired()) { + var1.remove(); + } + } + + } + + public void loadBanList() { + if(this.fileName.isFile()) { + BufferedReader var1; + try { + var1 = new BufferedReader(new FileReader(this.fileName)); + } catch (FileNotFoundException var4) { + throw new Error(); + } + + try { + while(true) { + String var2 = var1.readLine(); + if(var2 == null) { + break; + } + + if(!var2.startsWith("#")) { + BanEntry var3 = BanEntry.parse(var2); + if(var3 != null) { + this.theBanList.putLower(var3.getBannedUsername(), var3); + } + } + } + } catch (IOException var5) { + MinecraftServer.getServer().getLogAgent().logSevereException("Could not load ban list", var5); + } + + } + } + + public void saveToFileWithHeader() { + this.saveToFile(true); + } + + public void saveToFile(boolean var1) { + this.removeExpiredBans(); + + try { + PrintWriter var2 = new PrintWriter(new FileWriter(this.fileName, false)); + if(var1) { + var2.println("# Updated " + (new SimpleDateFormat()).format(new Date()) + " by Minecraft " + "1.5.2"); + var2.println("# victim name | ban date | banned by | banned until | reason"); + var2.println(); + } + + Iterator var3 = this.theBanList.values().iterator(); + + while(var3.hasNext()) { + BanEntry var4 = (BanEntry)var3.next(); + var2.println(var4.buildBanString()); + } + + var2.close(); + } catch (IOException var5) { + MinecraftServer.getServer().getLogAgent().logSevereException("Could not save ban list", var5); + } + + } +} diff --git a/src/net/minecraft/src/BehaviorDefaultDispenseItem.java b/src/net/minecraft/src/BehaviorDefaultDispenseItem.java new file mode 100644 index 0000000..6c7fbe0 --- /dev/null +++ b/src/net/minecraft/src/BehaviorDefaultDispenseItem.java @@ -0,0 +1,45 @@ +package net.minecraft.src; + +public class BehaviorDefaultDispenseItem implements IBehaviorDispenseItem { + public final ItemStack dispense(IBlockSource var1, ItemStack var2) { + ItemStack var3 = this.dispenseStack(var1, var2); + this.playDispenseSound(var1); + this.spawnDispenseParticles(var1, BlockDispenser.getFacing(var1.getBlockMetadata())); + return var3; + } + + protected ItemStack dispenseStack(IBlockSource var1, ItemStack var2) { + EnumFacing var3 = BlockDispenser.getFacing(var1.getBlockMetadata()); + IPosition var4 = BlockDispenser.getIPositionFromBlockSource(var1); + ItemStack var5 = var2.splitStack(1); + doDispense(var1.getWorld(), var5, 6, var3, var4); + return var2; + } + + public static void doDispense(World var0, ItemStack var1, int var2, EnumFacing var3, IPosition var4) { + double var5 = var4.getX(); + double var7 = var4.getY(); + double var9 = var4.getZ(); + EntityItem var11 = new EntityItem(var0, var5, var7 - 0.3D, var9, var1); + double var12 = var0.rand.nextDouble() * 0.1D + 0.2D; + var11.motionX = (double)var3.getFrontOffsetX() * var12; + var11.motionY = (double)0.2F; + var11.motionZ = (double)var3.getFrontOffsetZ() * var12; + var11.motionX += var0.rand.nextGaussian() * (double)0.0075F * (double)var2; + var11.motionY += var0.rand.nextGaussian() * (double)0.0075F * (double)var2; + var11.motionZ += var0.rand.nextGaussian() * (double)0.0075F * (double)var2; + var0.spawnEntityInWorld(var11); + } + + protected void playDispenseSound(IBlockSource var1) { + var1.getWorld().playAuxSFX(1000, var1.getXInt(), var1.getYInt(), var1.getZInt(), 0); + } + + protected void spawnDispenseParticles(IBlockSource var1, EnumFacing var2) { + var1.getWorld().playAuxSFX(2000, var1.getXInt(), var1.getYInt(), var1.getZInt(), this.func_82488_a(var2)); + } + + private int func_82488_a(EnumFacing var1) { + return var1.getFrontOffsetX() + 1 + (var1.getFrontOffsetZ() + 1) * 3; + } +} diff --git a/src/net/minecraft/src/BehaviorDispenseArmor.java b/src/net/minecraft/src/BehaviorDispenseArmor.java new file mode 100644 index 0000000..5f0d4bc --- /dev/null +++ b/src/net/minecraft/src/BehaviorDispenseArmor.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +import java.util.List; + +final class BehaviorDispenseArmor extends BehaviorDefaultDispenseItem { + protected ItemStack dispenseStack(IBlockSource var1, ItemStack var2) { + EnumFacing var3 = BlockDispenser.getFacing(var1.getBlockMetadata()); + int var4 = var1.getXInt() + var3.getFrontOffsetX(); + int var5 = var1.getYInt() + var3.getFrontOffsetY(); + int var6 = var1.getZInt() + var3.getFrontOffsetZ(); + AxisAlignedBB var7 = AxisAlignedBB.getAABBPool().getAABB((double)var4, (double)var5, (double)var6, (double)(var4 + 1), (double)(var5 + 1), (double)(var6 + 1)); + List var8 = var1.getWorld().selectEntitiesWithinAABB(EntityLiving.class, var7, new EntitySelectorArmoredMob(var2)); + if(var8.size() > 0) { + EntityLiving var9 = (EntityLiving)var8.get(0); + int var10 = var9 instanceof EntityPlayer ? 1 : 0; + int var11 = EntityLiving.getArmorPosition(var2); + ItemStack var12 = var2.copy(); + var12.stackSize = 1; + var9.setCurrentItemOrArmor(var11 - var10, var12); + var9.func_96120_a(var11, 2.0F); + --var2.stackSize; + return var2; + } else { + return super.dispenseStack(var1, var2); + } + } +} diff --git a/src/net/minecraft/src/BehaviorDispenseItemProvider.java b/src/net/minecraft/src/BehaviorDispenseItemProvider.java new file mode 100644 index 0000000..e6bf800 --- /dev/null +++ b/src/net/minecraft/src/BehaviorDispenseItemProvider.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +final class BehaviorDispenseItemProvider implements IBehaviorDispenseItem { + public ItemStack dispense(IBlockSource var1, ItemStack var2) { + return var2; + } +} diff --git a/src/net/minecraft/src/BehaviorDispenseMinecart.java b/src/net/minecraft/src/BehaviorDispenseMinecart.java new file mode 100644 index 0000000..76d7a62 --- /dev/null +++ b/src/net/minecraft/src/BehaviorDispenseMinecart.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +final class BehaviorDispenseMinecart extends BehaviorDefaultDispenseItem { + private final BehaviorDefaultDispenseItem field_96465_b = new BehaviorDefaultDispenseItem(); + + public ItemStack dispenseStack(IBlockSource var1, ItemStack var2) { + EnumFacing var3 = BlockDispenser.getFacing(var1.getBlockMetadata()); + World var4 = var1.getWorld(); + double var5 = var1.getX() + (double)((float)var3.getFrontOffsetX() * 1.125F); + double var7 = var1.getY() + (double)((float)var3.getFrontOffsetY() * 1.125F); + double var9 = var1.getZ() + (double)((float)var3.getFrontOffsetZ() * 1.125F); + int var11 = var1.getXInt() + var3.getFrontOffsetX(); + int var12 = var1.getYInt() + var3.getFrontOffsetY(); + int var13 = var1.getZInt() + var3.getFrontOffsetZ(); + int var14 = var4.getBlockId(var11, var12, var13); + double var15; + if(BlockRailBase.isRailBlock(var14)) { + var15 = 0.0D; + } else { + if(var14 != 0 || !BlockRailBase.isRailBlock(var4.getBlockId(var11, var12 - 1, var13))) { + return this.field_96465_b.dispense(var1, var2); + } + + var15 = -1.0D; + } + + EntityMinecart var17 = EntityMinecart.createMinecart(var4, var5, var7 + var15, var9, ((ItemMinecart)var2.getItem()).minecartType); + var4.spawnEntityInWorld(var17); + var2.splitStack(1); + return var2; + } + + protected void playDispenseSound(IBlockSource var1) { + var1.getWorld().playAuxSFX(1000, var1.getXInt(), var1.getYInt(), var1.getZInt(), 0); + } +} diff --git a/src/net/minecraft/src/BehaviorProjectileDispense.java b/src/net/minecraft/src/BehaviorProjectileDispense.java new file mode 100644 index 0000000..e32baac --- /dev/null +++ b/src/net/minecraft/src/BehaviorProjectileDispense.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +public abstract class BehaviorProjectileDispense extends BehaviorDefaultDispenseItem { + public ItemStack dispenseStack(IBlockSource var1, ItemStack var2) { + World var3 = var1.getWorld(); + IPosition var4 = BlockDispenser.getIPositionFromBlockSource(var1); + EnumFacing var5 = BlockDispenser.getFacing(var1.getBlockMetadata()); + IProjectile var6 = this.getProjectileEntity(var3, var4); + var6.setThrowableHeading((double)var5.getFrontOffsetX(), (double)((float)var5.getFrontOffsetY() + 0.1F), (double)var5.getFrontOffsetZ(), this.func_82500_b(), this.func_82498_a()); + var3.spawnEntityInWorld((Entity)var6); + var2.splitStack(1); + return var2; + } + + protected void playDispenseSound(IBlockSource var1) { + var1.getWorld().playAuxSFX(1002, var1.getXInt(), var1.getYInt(), var1.getZInt(), 0); + } + + protected abstract IProjectile getProjectileEntity(World var1, IPosition var2); + + protected float func_82498_a() { + return 6.0F; + } + + protected float func_82500_b() { + return 1.1F; + } +} diff --git a/src/net/minecraft/src/BiomeCache.java b/src/net/minecraft/src/BiomeCache.java new file mode 100644 index 0000000..d1e96e8 --- /dev/null +++ b/src/net/minecraft/src/BiomeCache.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class BiomeCache { + private final WorldChunkManager chunkManager; + private long lastCleanupTime = 0L; + private LongHashMap cacheMap = new LongHashMap(); + private List cache = new ArrayList(); + + public BiomeCache(WorldChunkManager var1) { + this.chunkManager = var1; + } + + public BiomeCacheBlock getBiomeCacheBlock(int var1, int var2) { + var1 >>= 4; + var2 >>= 4; + long var3 = (long)var1 & 4294967295L | ((long)var2 & 4294967295L) << 32; + BiomeCacheBlock var5 = (BiomeCacheBlock)this.cacheMap.getValueByKey(var3); + if(var5 == null) { + var5 = new BiomeCacheBlock(this, var1, var2); + this.cacheMap.add(var3, var5); + this.cache.add(var5); + } + + var5.lastAccessTime = System.currentTimeMillis(); + return var5; + } + + public BiomeGenBase getBiomeGenAt(int var1, int var2) { + return this.getBiomeCacheBlock(var1, var2).getBiomeGenAt(var1, var2); + } + + public void cleanupCache() { + long var1 = System.currentTimeMillis(); + long var3 = var1 - this.lastCleanupTime; + if(var3 > 7500L || var3 < 0L) { + this.lastCleanupTime = var1; + + for(int var5 = 0; var5 < this.cache.size(); ++var5) { + BiomeCacheBlock var6 = (BiomeCacheBlock)this.cache.get(var5); + long var7 = var1 - var6.lastAccessTime; + if(var7 > 30000L || var7 < 0L) { + this.cache.remove(var5--); + long var9 = (long)var6.xPosition & 4294967295L | ((long)var6.zPosition & 4294967295L) << 32; + this.cacheMap.remove(var9); + } + } + } + + } + + public BiomeGenBase[] getCachedBiomes(int var1, int var2) { + return this.getBiomeCacheBlock(var1, var2).biomes; + } + + static WorldChunkManager getChunkManager(BiomeCache var0) { + return var0.chunkManager; + } +} diff --git a/src/net/minecraft/src/BiomeCacheBlock.java b/src/net/minecraft/src/BiomeCacheBlock.java new file mode 100644 index 0000000..c4def35 --- /dev/null +++ b/src/net/minecraft/src/BiomeCacheBlock.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public class BiomeCacheBlock { + public float[] temperatureValues; + public float[] rainfallValues; + public BiomeGenBase[] biomes; + public int xPosition; + public int zPosition; + public long lastAccessTime; + final BiomeCache theBiomeCache; + + public BiomeCacheBlock(BiomeCache var1, int var2, int var3) { + this.theBiomeCache = var1; + this.temperatureValues = new float[256]; + this.rainfallValues = new float[256]; + this.biomes = new BiomeGenBase[256]; + this.xPosition = var2; + this.zPosition = var3; + BiomeCache.getChunkManager(var1).getTemperatures(this.temperatureValues, var2 << 4, var3 << 4, 16, 16); + BiomeCache.getChunkManager(var1).getRainfall(this.rainfallValues, var2 << 4, var3 << 4, 16, 16); + BiomeCache.getChunkManager(var1).getBiomeGenAt(this.biomes, var2 << 4, var3 << 4, 16, 16, false); + } + + public BiomeGenBase getBiomeGenAt(int var1, int var2) { + return this.biomes[var1 & 15 | (var2 & 15) << 4]; + } +} diff --git a/src/net/minecraft/src/BiomeDecorator.java b/src/net/minecraft/src/BiomeDecorator.java new file mode 100644 index 0000000..0edac9b --- /dev/null +++ b/src/net/minecraft/src/BiomeDecorator.java @@ -0,0 +1,251 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BiomeDecorator { + protected World currentWorld; + protected Random randomGenerator; + protected int chunk_X; + protected int chunk_Z; + protected BiomeGenBase biome; + protected WorldGenerator clayGen = new WorldGenClay(4); + protected WorldGenerator sandGen = new WorldGenSand(7, Block.sand.blockID); + protected WorldGenerator gravelAsSandGen = new WorldGenSand(6, Block.gravel.blockID); + protected WorldGenerator dirtGen = new WorldGenMinable(Block.dirt.blockID, 32); + protected WorldGenerator gravelGen = new WorldGenMinable(Block.gravel.blockID, 32); + protected WorldGenerator coalGen = new WorldGenMinable(Block.oreCoal.blockID, 16); + protected WorldGenerator ironGen = new WorldGenMinable(Block.oreIron.blockID, 8); + protected WorldGenerator goldGen = new WorldGenMinable(Block.oreGold.blockID, 8); + protected WorldGenerator redstoneGen = new WorldGenMinable(Block.oreRedstone.blockID, 7); + protected WorldGenerator diamondGen = new WorldGenMinable(Block.oreDiamond.blockID, 7); + protected WorldGenerator lapisGen = new WorldGenMinable(Block.oreLapis.blockID, 6); + protected WorldGenerator plantYellowGen = new WorldGenFlowers(Block.plantYellow.blockID); + protected WorldGenerator plantRedGen = new WorldGenFlowers(Block.plantRed.blockID); + protected WorldGenerator mushroomBrownGen = new WorldGenFlowers(Block.mushroomBrown.blockID); + protected WorldGenerator mushroomRedGen = new WorldGenFlowers(Block.mushroomRed.blockID); + protected WorldGenerator bigMushroomGen = new WorldGenBigMushroom(); + protected WorldGenerator reedGen = new WorldGenReed(); + protected WorldGenerator cactusGen = new WorldGenCactus(); + protected WorldGenerator waterlilyGen = new WorldGenWaterlily(); + protected int waterlilyPerChunk = 0; + protected int treesPerChunk = 0; + protected int flowersPerChunk = 2; + protected int grassPerChunk = 1; + protected int deadBushPerChunk = 0; + protected int mushroomsPerChunk = 0; + protected int reedsPerChunk = 0; + protected int cactiPerChunk = 0; + protected int sandPerChunk = 1; + protected int sandPerChunk2 = 3; + protected int clayPerChunk = 1; + protected int bigMushroomsPerChunk = 0; + public boolean generateLakes = true; + + public BiomeDecorator(BiomeGenBase var1) { + this.biome = var1; + } + + public void decorate(World var1, Random var2, int var3, int var4) { + if(this.currentWorld != null) { + throw new RuntimeException("Already decorating!!"); + } else { + this.currentWorld = var1; + this.randomGenerator = var2; + this.chunk_X = var3; + this.chunk_Z = var4; + this.decorate(); + this.currentWorld = null; + this.randomGenerator = null; + } + } + + protected void decorate() { + this.generateOres(); + + int var1; + int var2; + int var3; + for(var1 = 0; var1 < this.sandPerChunk2; ++var1) { + var2 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var3 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + this.sandGen.generate(this.currentWorld, this.randomGenerator, var2, this.currentWorld.getTopSolidOrLiquidBlock(var2, var3), var3); + } + + for(var1 = 0; var1 < this.clayPerChunk; ++var1) { + var2 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var3 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + this.clayGen.generate(this.currentWorld, this.randomGenerator, var2, this.currentWorld.getTopSolidOrLiquidBlock(var2, var3), var3); + } + + for(var1 = 0; var1 < this.sandPerChunk; ++var1) { + var2 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var3 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + this.sandGen.generate(this.currentWorld, this.randomGenerator, var2, this.currentWorld.getTopSolidOrLiquidBlock(var2, var3), var3); + } + + var1 = this.treesPerChunk; + if(this.randomGenerator.nextInt(10) == 0) { + ++var1; + } + + int var4; + for(var2 = 0; var2 < var1; ++var2) { + var3 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var4 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + WorldGenerator var5 = this.biome.getRandomWorldGenForTrees(this.randomGenerator); + var5.setScale(1.0D, 1.0D, 1.0D); + var5.generate(this.currentWorld, this.randomGenerator, var3, this.currentWorld.getHeightValue(var3, var4), var4); + } + + for(var2 = 0; var2 < this.bigMushroomsPerChunk; ++var2) { + var3 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var4 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + this.bigMushroomGen.generate(this.currentWorld, this.randomGenerator, var3, this.currentWorld.getHeightValue(var3, var4), var4); + } + + int var7; + for(var2 = 0; var2 < this.flowersPerChunk; ++var2) { + var3 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var4 = this.randomGenerator.nextInt(128); + var7 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + this.plantYellowGen.generate(this.currentWorld, this.randomGenerator, var3, var4, var7); + if(this.randomGenerator.nextInt(4) == 0) { + var3 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var4 = this.randomGenerator.nextInt(128); + var7 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + this.plantRedGen.generate(this.currentWorld, this.randomGenerator, var3, var4, var7); + } + } + + for(var2 = 0; var2 < this.grassPerChunk; ++var2) { + var3 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var4 = this.randomGenerator.nextInt(128); + var7 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + WorldGenerator var6 = this.biome.getRandomWorldGenForGrass(this.randomGenerator); + var6.generate(this.currentWorld, this.randomGenerator, var3, var4, var7); + } + + for(var2 = 0; var2 < this.deadBushPerChunk; ++var2) { + var3 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var4 = this.randomGenerator.nextInt(128); + var7 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + (new WorldGenDeadBush(Block.deadBush.blockID)).generate(this.currentWorld, this.randomGenerator, var3, var4, var7); + } + + for(var2 = 0; var2 < this.waterlilyPerChunk; ++var2) { + var3 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var4 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + + for(var7 = this.randomGenerator.nextInt(128); var7 > 0 && this.currentWorld.getBlockId(var3, var7 - 1, var4) == 0; --var7) { + } + + this.waterlilyGen.generate(this.currentWorld, this.randomGenerator, var3, var7, var4); + } + + for(var2 = 0; var2 < this.mushroomsPerChunk; ++var2) { + if(this.randomGenerator.nextInt(4) == 0) { + var3 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var4 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + var7 = this.currentWorld.getHeightValue(var3, var4); + this.mushroomBrownGen.generate(this.currentWorld, this.randomGenerator, var3, var7, var4); + } + + if(this.randomGenerator.nextInt(8) == 0) { + var3 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var4 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + var7 = this.randomGenerator.nextInt(128); + this.mushroomRedGen.generate(this.currentWorld, this.randomGenerator, var3, var7, var4); + } + } + + if(this.randomGenerator.nextInt(4) == 0) { + var2 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var3 = this.randomGenerator.nextInt(128); + var4 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + this.mushroomBrownGen.generate(this.currentWorld, this.randomGenerator, var2, var3, var4); + } + + if(this.randomGenerator.nextInt(8) == 0) { + var2 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var3 = this.randomGenerator.nextInt(128); + var4 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + this.mushroomRedGen.generate(this.currentWorld, this.randomGenerator, var2, var3, var4); + } + + for(var2 = 0; var2 < this.reedsPerChunk; ++var2) { + var3 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var4 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + var7 = this.randomGenerator.nextInt(128); + this.reedGen.generate(this.currentWorld, this.randomGenerator, var3, var7, var4); + } + + for(var2 = 0; var2 < 10; ++var2) { + var3 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var4 = this.randomGenerator.nextInt(128); + var7 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + this.reedGen.generate(this.currentWorld, this.randomGenerator, var3, var4, var7); + } + + if(this.randomGenerator.nextInt(32) == 0) { + var2 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var3 = this.randomGenerator.nextInt(128); + var4 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + (new WorldGenPumpkin()).generate(this.currentWorld, this.randomGenerator, var2, var3, var4); + } + + for(var2 = 0; var2 < this.cactiPerChunk; ++var2) { + var3 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var4 = this.randomGenerator.nextInt(128); + var7 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + this.cactusGen.generate(this.currentWorld, this.randomGenerator, var3, var4, var7); + } + + if(this.generateLakes) { + for(var2 = 0; var2 < 50; ++var2) { + var3 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var4 = this.randomGenerator.nextInt(this.randomGenerator.nextInt(120) + 8); + var7 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + (new WorldGenLiquids(Block.waterMoving.blockID)).generate(this.currentWorld, this.randomGenerator, var3, var4, var7); + } + + for(var2 = 0; var2 < 20; ++var2) { + var3 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + var4 = this.randomGenerator.nextInt(this.randomGenerator.nextInt(this.randomGenerator.nextInt(112) + 8) + 8); + var7 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + (new WorldGenLiquids(Block.lavaMoving.blockID)).generate(this.currentWorld, this.randomGenerator, var3, var4, var7); + } + } + + } + + protected void genStandardOre1(int var1, WorldGenerator var2, int var3, int var4) { + for(int var5 = 0; var5 < var1; ++var5) { + int var6 = this.chunk_X + this.randomGenerator.nextInt(16); + int var7 = this.randomGenerator.nextInt(var4 - var3) + var3; + int var8 = this.chunk_Z + this.randomGenerator.nextInt(16); + var2.generate(this.currentWorld, this.randomGenerator, var6, var7, var8); + } + + } + + protected void genStandardOre2(int var1, WorldGenerator var2, int var3, int var4) { + for(int var5 = 0; var5 < var1; ++var5) { + int var6 = this.chunk_X + this.randomGenerator.nextInt(16); + int var7 = this.randomGenerator.nextInt(var4) + this.randomGenerator.nextInt(var4) + (var3 - var4); + int var8 = this.chunk_Z + this.randomGenerator.nextInt(16); + var2.generate(this.currentWorld, this.randomGenerator, var6, var7, var8); + } + + } + + protected void generateOres() { + this.genStandardOre1(20, this.dirtGen, 0, 128); + this.genStandardOre1(10, this.gravelGen, 0, 128); + this.genStandardOre1(20, this.coalGen, 0, 128); + this.genStandardOre1(20, this.ironGen, 0, 64); + this.genStandardOre1(2, this.goldGen, 0, 32); + this.genStandardOre1(8, this.redstoneGen, 0, 16); + this.genStandardOre1(1, this.diamondGen, 0, 16); + this.genStandardOre2(1, this.lapisGen, 16, 16); + } +} diff --git a/src/net/minecraft/src/BiomeEndDecorator.java b/src/net/minecraft/src/BiomeEndDecorator.java new file mode 100644 index 0000000..0c5ab39 --- /dev/null +++ b/src/net/minecraft/src/BiomeEndDecorator.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +public class BiomeEndDecorator extends BiomeDecorator { + protected WorldGenerator spikeGen = new WorldGenSpikes(Block.whiteStone.blockID); + + public BiomeEndDecorator(BiomeGenBase var1) { + super(var1); + } + + protected void decorate() { + this.generateOres(); + if(this.randomGenerator.nextInt(5) == 0) { + int var1 = this.chunk_X + this.randomGenerator.nextInt(16) + 8; + int var2 = this.chunk_Z + this.randomGenerator.nextInt(16) + 8; + int var3 = this.currentWorld.getTopSolidOrLiquidBlock(var1, var2); + if(var3 > 0) { + } + + this.spikeGen.generate(this.currentWorld, this.randomGenerator, var1, var3, var2); + } + + if(this.chunk_X == 0 && this.chunk_Z == 0) { + EntityDragon var4 = new EntityDragon(this.currentWorld); + var4.setLocationAndAngles(0.0D, 128.0D, 0.0D, this.randomGenerator.nextFloat() * 360.0F, 0.0F); + this.currentWorld.spawnEntityInWorld(var4); + } + + } +} diff --git a/src/net/minecraft/src/BiomeGenBase.java b/src/net/minecraft/src/BiomeGenBase.java new file mode 100644 index 0000000..c688b0c --- /dev/null +++ b/src/net/minecraft/src/BiomeGenBase.java @@ -0,0 +1,191 @@ +package net.minecraft.src; + +import java.awt.Color; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public abstract class BiomeGenBase { + public static final BiomeGenBase[] biomeList = new BiomeGenBase[256]; + public static final BiomeGenBase ocean = (new BiomeGenOcean(0)).setColor(112).setBiomeName("Ocean").setMinMaxHeight(-1.0F, 0.4F); + public static final BiomeGenBase plains = (new BiomeGenPlains(1)).setColor(9286496).setBiomeName("Plains").setTemperatureRainfall(0.8F, 0.4F); + public static final BiomeGenBase desert = (new BiomeGenDesert(2)).setColor(16421912).setBiomeName("Desert").setDisableRain().setTemperatureRainfall(2.0F, 0.0F).setMinMaxHeight(0.1F, 0.2F); + public static final BiomeGenBase extremeHills = (new BiomeGenHills(3)).setColor(6316128).setBiomeName("Extreme Hills").setMinMaxHeight(0.3F, 1.5F).setTemperatureRainfall(0.2F, 0.3F); + public static final BiomeGenBase forest = (new BiomeGenForest(4)).setColor(353825).setBiomeName("Forest").func_76733_a(5159473).setTemperatureRainfall(0.7F, 0.8F); + public static final BiomeGenBase taiga = (new BiomeGenTaiga(5)).setColor(747097).setBiomeName("Taiga").func_76733_a(5159473).setEnableSnow().setTemperatureRainfall(0.05F, 0.8F).setMinMaxHeight(0.1F, 0.4F); + public static final BiomeGenBase swampland = (new BiomeGenSwamp(6)).setColor(522674).setBiomeName("Swampland").func_76733_a(9154376).setMinMaxHeight(-0.2F, 0.1F).setTemperatureRainfall(0.8F, 0.9F); + public static final BiomeGenBase river = (new BiomeGenRiver(7)).setColor(255).setBiomeName("River").setMinMaxHeight(-0.5F, 0.0F); + public static final BiomeGenBase hell = (new BiomeGenHell(8)).setColor(16711680).setBiomeName("Hell").setDisableRain().setTemperatureRainfall(2.0F, 0.0F); + public static final BiomeGenBase sky = (new BiomeGenEnd(9)).setColor(8421631).setBiomeName("Sky").setDisableRain(); + public static final BiomeGenBase frozenOcean = (new BiomeGenOcean(10)).setColor(9474208).setBiomeName("FrozenOcean").setEnableSnow().setMinMaxHeight(-1.0F, 0.5F).setTemperatureRainfall(0.0F, 0.5F); + public static final BiomeGenBase frozenRiver = (new BiomeGenRiver(11)).setColor(10526975).setBiomeName("FrozenRiver").setEnableSnow().setMinMaxHeight(-0.5F, 0.0F).setTemperatureRainfall(0.0F, 0.5F); + public static final BiomeGenBase icePlains = (new BiomeGenSnow(12)).setColor(16777215).setBiomeName("Ice Plains").setEnableSnow().setTemperatureRainfall(0.0F, 0.5F); + public static final BiomeGenBase iceMountains = (new BiomeGenSnow(13)).setColor(10526880).setBiomeName("Ice Mountains").setEnableSnow().setMinMaxHeight(0.3F, 1.3F).setTemperatureRainfall(0.0F, 0.5F); + public static final BiomeGenBase mushroomIsland = (new BiomeGenMushroomIsland(14)).setColor(16711935).setBiomeName("MushroomIsland").setTemperatureRainfall(0.9F, 1.0F).setMinMaxHeight(0.2F, 1.0F); + public static final BiomeGenBase mushroomIslandShore = (new BiomeGenMushroomIsland(15)).setColor(10486015).setBiomeName("MushroomIslandShore").setTemperatureRainfall(0.9F, 1.0F).setMinMaxHeight(-1.0F, 0.1F); + public static final BiomeGenBase beach = (new BiomeGenBeach(16)).setColor(16440917).setBiomeName("Beach").setTemperatureRainfall(0.8F, 0.4F).setMinMaxHeight(0.0F, 0.1F); + public static final BiomeGenBase desertHills = (new BiomeGenDesert(17)).setColor(13786898).setBiomeName("DesertHills").setDisableRain().setTemperatureRainfall(2.0F, 0.0F).setMinMaxHeight(0.3F, 0.8F); + public static final BiomeGenBase forestHills = (new BiomeGenForest(18)).setColor(2250012).setBiomeName("ForestHills").func_76733_a(5159473).setTemperatureRainfall(0.7F, 0.8F).setMinMaxHeight(0.3F, 0.7F); + public static final BiomeGenBase taigaHills = (new BiomeGenTaiga(19)).setColor(1456435).setBiomeName("TaigaHills").setEnableSnow().func_76733_a(5159473).setTemperatureRainfall(0.05F, 0.8F).setMinMaxHeight(0.3F, 0.8F); + public static final BiomeGenBase extremeHillsEdge = (new BiomeGenHills(20)).setColor(7501978).setBiomeName("Extreme Hills Edge").setMinMaxHeight(0.2F, 0.8F).setTemperatureRainfall(0.2F, 0.3F); + public static final BiomeGenBase jungle = (new BiomeGenJungle(21)).setColor(5470985).setBiomeName("Jungle").func_76733_a(5470985).setTemperatureRainfall(1.2F, 0.9F).setMinMaxHeight(0.2F, 0.4F); + public static final BiomeGenBase jungleHills = (new BiomeGenJungle(22)).setColor(2900485).setBiomeName("JungleHills").func_76733_a(5470985).setTemperatureRainfall(1.2F, 0.9F).setMinMaxHeight(1.8F, 0.5F); + public String biomeName; + public int color; + public byte topBlock = (byte)Block.grass.blockID; + public byte fillerBlock = (byte)Block.dirt.blockID; + public int field_76754_C = 5169201; + public float minHeight = 0.1F; + public float maxHeight = 0.3F; + public float temperature = 0.5F; + public float rainfall = 0.5F; + public int waterColorMultiplier = 16777215; + public BiomeDecorator theBiomeDecorator; + protected List spawnableMonsterList = new ArrayList(); + protected List spawnableCreatureList = new ArrayList(); + protected List spawnableWaterCreatureList = new ArrayList(); + protected List spawnableCaveCreatureList = new ArrayList(); + private boolean enableSnow; + private boolean enableRain = true; + public final int biomeID; + protected WorldGenTrees worldGeneratorTrees = new WorldGenTrees(false); + protected WorldGenBigTree worldGeneratorBigTree = new WorldGenBigTree(false); + protected WorldGenForest worldGeneratorForest = new WorldGenForest(false); + protected WorldGenSwamp worldGeneratorSwamp = new WorldGenSwamp(); + + protected BiomeGenBase(int var1) { + this.biomeID = var1; + biomeList[var1] = this; + this.theBiomeDecorator = this.createBiomeDecorator(); + this.spawnableCreatureList.add(new SpawnListEntry(EntitySheep.class, 12, 4, 4)); + this.spawnableCreatureList.add(new SpawnListEntry(EntityPig.class, 10, 4, 4)); + this.spawnableCreatureList.add(new SpawnListEntry(EntityChicken.class, 10, 4, 4)); + this.spawnableCreatureList.add(new SpawnListEntry(EntityCow.class, 8, 4, 4)); + this.spawnableMonsterList.add(new SpawnListEntry(EntitySpider.class, 10, 4, 4)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityZombie.class, 10, 4, 4)); + this.spawnableMonsterList.add(new SpawnListEntry(EntitySkeleton.class, 10, 4, 4)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityCreeper.class, 10, 4, 4)); + this.spawnableMonsterList.add(new SpawnListEntry(EntitySlime.class, 10, 4, 4)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityEnderman.class, 1, 1, 4)); + this.spawnableWaterCreatureList.add(new SpawnListEntry(EntitySquid.class, 10, 4, 4)); + this.spawnableCaveCreatureList.add(new SpawnListEntry(EntityBat.class, 10, 8, 8)); + } + + protected BiomeDecorator createBiomeDecorator() { + return new BiomeDecorator(this); + } + + private BiomeGenBase setTemperatureRainfall(float var1, float var2) { + if(var1 > 0.1F && var1 < 0.2F) { + throw new IllegalArgumentException("Please avoid temperatures in the range 0.1 - 0.2 because of snow"); + } else { + this.temperature = var1; + this.rainfall = var2; + return this; + } + } + + private BiomeGenBase setMinMaxHeight(float var1, float var2) { + this.minHeight = var1; + this.maxHeight = var2; + return this; + } + + private BiomeGenBase setDisableRain() { + this.enableRain = false; + return this; + } + + public WorldGenerator getRandomWorldGenForTrees(Random var1) { + return (WorldGenerator)(var1.nextInt(10) == 0 ? this.worldGeneratorBigTree : this.worldGeneratorTrees); + } + + public WorldGenerator getRandomWorldGenForGrass(Random var1) { + return new WorldGenTallGrass(Block.tallGrass.blockID, 1); + } + + protected BiomeGenBase setEnableSnow() { + this.enableSnow = true; + return this; + } + + protected BiomeGenBase setBiomeName(String var1) { + this.biomeName = var1; + return this; + } + + protected BiomeGenBase func_76733_a(int var1) { + this.field_76754_C = var1; + return this; + } + + protected BiomeGenBase setColor(int var1) { + this.color = var1; + return this; + } + + public int getSkyColorByTemp(float var1) { + var1 /= 3.0F; + if(var1 < -1.0F) { + var1 = -1.0F; + } + + if(var1 > 1.0F) { + var1 = 1.0F; + } + + return Color.getHSBColor(224.0F / 360.0F - var1 * 0.05F, 0.5F + var1 * 0.1F, 1.0F).getRGB(); + } + + public List getSpawnableList(EnumCreatureType var1) { + return var1 == EnumCreatureType.monster ? this.spawnableMonsterList : (var1 == EnumCreatureType.creature ? this.spawnableCreatureList : (var1 == EnumCreatureType.waterCreature ? this.spawnableWaterCreatureList : (var1 == EnumCreatureType.ambient ? this.spawnableCaveCreatureList : null))); + } + + public boolean getEnableSnow() { + return this.enableSnow; + } + + public boolean canSpawnLightningBolt() { + return this.enableSnow ? false : this.enableRain; + } + + public boolean isHighHumidity() { + return this.rainfall > 0.85F; + } + + public float getSpawningChance() { + return 0.1F; + } + + public final int getIntRainfall() { + return (int)(this.rainfall * 65536.0F); + } + + public final int getIntTemperature() { + return (int)(this.temperature * 65536.0F); + } + + public final float getFloatRainfall() { + return this.rainfall; + } + + public final float getFloatTemperature() { + return this.temperature; + } + + public void decorate(World var1, Random var2, int var3, int var4) { + this.theBiomeDecorator.decorate(var1, var2, var3, var4); + } + + public int getBiomeGrassColor() { + double var1 = (double)MathHelper.clamp_float(this.getFloatTemperature(), 0.0F, 1.0F); + double var3 = (double)MathHelper.clamp_float(this.getFloatRainfall(), 0.0F, 1.0F); + return ColorizerGrass.getGrassColor(var1, var3); + } + + public int getBiomeFoliageColor() { + double var1 = (double)MathHelper.clamp_float(this.getFloatTemperature(), 0.0F, 1.0F); + double var3 = (double)MathHelper.clamp_float(this.getFloatRainfall(), 0.0F, 1.0F); + return ColorizerFoliage.getFoliageColor(var1, var3); + } +} diff --git a/src/net/minecraft/src/BiomeGenBeach.java b/src/net/minecraft/src/BiomeGenBeach.java new file mode 100644 index 0000000..1aef167 --- /dev/null +++ b/src/net/minecraft/src/BiomeGenBeach.java @@ -0,0 +1,14 @@ +package net.minecraft.src; + +public class BiomeGenBeach extends BiomeGenBase { + public BiomeGenBeach(int var1) { + super(var1); + this.spawnableCreatureList.clear(); + this.topBlock = (byte)Block.sand.blockID; + this.fillerBlock = (byte)Block.sand.blockID; + this.theBiomeDecorator.treesPerChunk = -999; + this.theBiomeDecorator.deadBushPerChunk = 0; + this.theBiomeDecorator.reedsPerChunk = 0; + this.theBiomeDecorator.cactiPerChunk = 0; + } +} diff --git a/src/net/minecraft/src/BiomeGenDesert.java b/src/net/minecraft/src/BiomeGenDesert.java new file mode 100644 index 0000000..e077b83 --- /dev/null +++ b/src/net/minecraft/src/BiomeGenDesert.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BiomeGenDesert extends BiomeGenBase { + public BiomeGenDesert(int var1) { + super(var1); + this.spawnableCreatureList.clear(); + this.topBlock = (byte)Block.sand.blockID; + this.fillerBlock = (byte)Block.sand.blockID; + this.theBiomeDecorator.treesPerChunk = -999; + this.theBiomeDecorator.deadBushPerChunk = 2; + this.theBiomeDecorator.reedsPerChunk = 50; + this.theBiomeDecorator.cactiPerChunk = 10; + } + + public void decorate(World var1, Random var2, int var3, int var4) { + super.decorate(var1, var2, var3, var4); + if(var2.nextInt(1000) == 0) { + int var5 = var3 + var2.nextInt(16) + 8; + int var6 = var4 + var2.nextInt(16) + 8; + WorldGenDesertWells var7 = new WorldGenDesertWells(); + var7.generate(var1, var2, var5, var1.getHeightValue(var5, var6) + 1, var6); + } + + } +} diff --git a/src/net/minecraft/src/BiomeGenEnd.java b/src/net/minecraft/src/BiomeGenEnd.java new file mode 100644 index 0000000..a646337 --- /dev/null +++ b/src/net/minecraft/src/BiomeGenEnd.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class BiomeGenEnd extends BiomeGenBase { + public BiomeGenEnd(int var1) { + super(var1); + this.spawnableMonsterList.clear(); + this.spawnableCreatureList.clear(); + this.spawnableWaterCreatureList.clear(); + this.spawnableCaveCreatureList.clear(); + this.spawnableMonsterList.add(new SpawnListEntry(EntityEnderman.class, 10, 4, 4)); + this.topBlock = (byte)Block.dirt.blockID; + this.fillerBlock = (byte)Block.dirt.blockID; + this.theBiomeDecorator = new BiomeEndDecorator(this); + } + + public int getSkyColorByTemp(float var1) { + return 0; + } +} diff --git a/src/net/minecraft/src/BiomeGenForest.java b/src/net/minecraft/src/BiomeGenForest.java new file mode 100644 index 0000000..cb5adea --- /dev/null +++ b/src/net/minecraft/src/BiomeGenForest.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BiomeGenForest extends BiomeGenBase { + public BiomeGenForest(int var1) { + super(var1); + this.spawnableCreatureList.add(new SpawnListEntry(EntityWolf.class, 5, 4, 4)); + this.theBiomeDecorator.treesPerChunk = 10; + this.theBiomeDecorator.grassPerChunk = 2; + } + + public WorldGenerator getRandomWorldGenForTrees(Random var1) { + return (WorldGenerator)(var1.nextInt(5) == 0 ? this.worldGeneratorForest : (var1.nextInt(10) == 0 ? this.worldGeneratorBigTree : this.worldGeneratorTrees)); + } +} diff --git a/src/net/minecraft/src/BiomeGenHell.java b/src/net/minecraft/src/BiomeGenHell.java new file mode 100644 index 0000000..2c9846c --- /dev/null +++ b/src/net/minecraft/src/BiomeGenHell.java @@ -0,0 +1,14 @@ +package net.minecraft.src; + +public class BiomeGenHell extends BiomeGenBase { + public BiomeGenHell(int var1) { + super(var1); + this.spawnableMonsterList.clear(); + this.spawnableCreatureList.clear(); + this.spawnableWaterCreatureList.clear(); + this.spawnableCaveCreatureList.clear(); + this.spawnableMonsterList.add(new SpawnListEntry(EntityGhast.class, 50, 4, 4)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityPigZombie.class, 100, 4, 4)); + this.spawnableMonsterList.add(new SpawnListEntry(EntityMagmaCube.class, 1, 4, 4)); + } +} diff --git a/src/net/minecraft/src/BiomeGenHills.java b/src/net/minecraft/src/BiomeGenHills.java new file mode 100644 index 0000000..b9f5503 --- /dev/null +++ b/src/net/minecraft/src/BiomeGenHills.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BiomeGenHills extends BiomeGenBase { + private WorldGenerator theWorldGenerator = new WorldGenMinable(Block.silverfish.blockID, 8); + + protected BiomeGenHills(int var1) { + super(var1); + } + + public void decorate(World var1, Random var2, int var3, int var4) { + super.decorate(var1, var2, var3, var4); + int var5 = 3 + var2.nextInt(6); + + int var6; + int var7; + int var8; + for(var6 = 0; var6 < var5; ++var6) { + var7 = var3 + var2.nextInt(16); + var8 = var2.nextInt(28) + 4; + int var9 = var4 + var2.nextInt(16); + int var10 = var1.getBlockId(var7, var8, var9); + if(var10 == Block.stone.blockID) { + var1.setBlock(var7, var8, var9, Block.oreEmerald.blockID, 0, 2); + } + } + + for(var5 = 0; var5 < 7; ++var5) { + var6 = var3 + var2.nextInt(16); + var7 = var2.nextInt(64); + var8 = var4 + var2.nextInt(16); + this.theWorldGenerator.generate(var1, var2, var6, var7, var8); + } + + } +} diff --git a/src/net/minecraft/src/BiomeGenJungle.java b/src/net/minecraft/src/BiomeGenJungle.java new file mode 100644 index 0000000..f738b66 --- /dev/null +++ b/src/net/minecraft/src/BiomeGenJungle.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BiomeGenJungle extends BiomeGenBase { + public BiomeGenJungle(int var1) { + super(var1); + this.theBiomeDecorator.treesPerChunk = 50; + this.theBiomeDecorator.grassPerChunk = 25; + this.theBiomeDecorator.flowersPerChunk = 4; + this.spawnableMonsterList.add(new SpawnListEntry(EntityOcelot.class, 2, 1, 1)); + this.spawnableCreatureList.add(new SpawnListEntry(EntityChicken.class, 10, 4, 4)); + } + + public WorldGenerator getRandomWorldGenForTrees(Random var1) { + return (WorldGenerator)(var1.nextInt(10) == 0 ? this.worldGeneratorBigTree : (var1.nextInt(2) == 0 ? new WorldGenShrub(3, 0) : (var1.nextInt(3) == 0 ? new WorldGenHugeTrees(false, 10 + var1.nextInt(20), 3, 3) : new WorldGenTrees(false, 4 + var1.nextInt(7), 3, 3, true)))); + } + + public WorldGenerator getRandomWorldGenForGrass(Random var1) { + return var1.nextInt(4) == 0 ? new WorldGenTallGrass(Block.tallGrass.blockID, 2) : new WorldGenTallGrass(Block.tallGrass.blockID, 1); + } + + public void decorate(World var1, Random var2, int var3, int var4) { + super.decorate(var1, var2, var3, var4); + WorldGenVines var5 = new WorldGenVines(); + + for(int var6 = 0; var6 < 50; ++var6) { + int var7 = var3 + var2.nextInt(16) + 8; + byte var8 = 64; + int var9 = var4 + var2.nextInt(16) + 8; + var5.generate(var1, var2, var7, var8, var9); + } + + } +} diff --git a/src/net/minecraft/src/BiomeGenMushroomIsland.java b/src/net/minecraft/src/BiomeGenMushroomIsland.java new file mode 100644 index 0000000..8ace317 --- /dev/null +++ b/src/net/minecraft/src/BiomeGenMushroomIsland.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class BiomeGenMushroomIsland extends BiomeGenBase { + public BiomeGenMushroomIsland(int var1) { + super(var1); + this.theBiomeDecorator.treesPerChunk = -100; + this.theBiomeDecorator.flowersPerChunk = -100; + this.theBiomeDecorator.grassPerChunk = -100; + this.theBiomeDecorator.mushroomsPerChunk = 1; + this.theBiomeDecorator.bigMushroomsPerChunk = 1; + this.topBlock = (byte)Block.mycelium.blockID; + this.spawnableMonsterList.clear(); + this.spawnableCreatureList.clear(); + this.spawnableWaterCreatureList.clear(); + this.spawnableCreatureList.add(new SpawnListEntry(EntityMooshroom.class, 8, 4, 8)); + } +} diff --git a/src/net/minecraft/src/BiomeGenOcean.java b/src/net/minecraft/src/BiomeGenOcean.java new file mode 100644 index 0000000..4c7b130 --- /dev/null +++ b/src/net/minecraft/src/BiomeGenOcean.java @@ -0,0 +1,8 @@ +package net.minecraft.src; + +public class BiomeGenOcean extends BiomeGenBase { + public BiomeGenOcean(int var1) { + super(var1); + this.spawnableCreatureList.clear(); + } +} diff --git a/src/net/minecraft/src/BiomeGenPlains.java b/src/net/minecraft/src/BiomeGenPlains.java new file mode 100644 index 0000000..729f16b --- /dev/null +++ b/src/net/minecraft/src/BiomeGenPlains.java @@ -0,0 +1,10 @@ +package net.minecraft.src; + +public class BiomeGenPlains extends BiomeGenBase { + protected BiomeGenPlains(int var1) { + super(var1); + this.theBiomeDecorator.treesPerChunk = -999; + this.theBiomeDecorator.flowersPerChunk = 4; + this.theBiomeDecorator.grassPerChunk = 10; + } +} diff --git a/src/net/minecraft/src/BiomeGenRiver.java b/src/net/minecraft/src/BiomeGenRiver.java new file mode 100644 index 0000000..c6b37d2 --- /dev/null +++ b/src/net/minecraft/src/BiomeGenRiver.java @@ -0,0 +1,8 @@ +package net.minecraft.src; + +public class BiomeGenRiver extends BiomeGenBase { + public BiomeGenRiver(int var1) { + super(var1); + this.spawnableCreatureList.clear(); + } +} diff --git a/src/net/minecraft/src/BiomeGenSnow.java b/src/net/minecraft/src/BiomeGenSnow.java new file mode 100644 index 0000000..513729f --- /dev/null +++ b/src/net/minecraft/src/BiomeGenSnow.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class BiomeGenSnow extends BiomeGenBase { + public BiomeGenSnow(int var1) { + super(var1); + } +} diff --git a/src/net/minecraft/src/BiomeGenSwamp.java b/src/net/minecraft/src/BiomeGenSwamp.java new file mode 100644 index 0000000..67b5e79 --- /dev/null +++ b/src/net/minecraft/src/BiomeGenSwamp.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BiomeGenSwamp extends BiomeGenBase { + protected BiomeGenSwamp(int var1) { + super(var1); + this.theBiomeDecorator.treesPerChunk = 2; + this.theBiomeDecorator.flowersPerChunk = -999; + this.theBiomeDecorator.deadBushPerChunk = 1; + this.theBiomeDecorator.mushroomsPerChunk = 8; + this.theBiomeDecorator.reedsPerChunk = 10; + this.theBiomeDecorator.clayPerChunk = 1; + this.theBiomeDecorator.waterlilyPerChunk = 4; + this.waterColorMultiplier = 14745518; + this.spawnableMonsterList.add(new SpawnListEntry(EntitySlime.class, 1, 1, 1)); + } + + public WorldGenerator getRandomWorldGenForTrees(Random var1) { + return this.worldGeneratorSwamp; + } + + public int getBiomeGrassColor() { + double var1 = (double)this.getFloatTemperature(); + double var3 = (double)this.getFloatRainfall(); + return ((ColorizerGrass.getGrassColor(var1, var3) & 16711422) + 5115470) / 2; + } + + public int getBiomeFoliageColor() { + double var1 = (double)this.getFloatTemperature(); + double var3 = (double)this.getFloatRainfall(); + return ((ColorizerFoliage.getFoliageColor(var1, var3) & 16711422) + 5115470) / 2; + } +} diff --git a/src/net/minecraft/src/BiomeGenTaiga.java b/src/net/minecraft/src/BiomeGenTaiga.java new file mode 100644 index 0000000..d81c29f --- /dev/null +++ b/src/net/minecraft/src/BiomeGenTaiga.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BiomeGenTaiga extends BiomeGenBase { + public BiomeGenTaiga(int var1) { + super(var1); + this.spawnableCreatureList.add(new SpawnListEntry(EntityWolf.class, 8, 4, 4)); + this.theBiomeDecorator.treesPerChunk = 10; + this.theBiomeDecorator.grassPerChunk = 1; + } + + public WorldGenerator getRandomWorldGenForTrees(Random var1) { + return (WorldGenerator)(var1.nextInt(3) == 0 ? new WorldGenTaiga1() : new WorldGenTaiga2(false)); + } +} diff --git a/src/net/minecraft/src/Block.java b/src/net/minecraft/src/Block.java new file mode 100644 index 0000000..3561683 --- /dev/null +++ b/src/net/minecraft/src/Block.java @@ -0,0 +1,844 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class Block { + private CreativeTabs displayOnCreativeTab; + public static final StepSound soundPowderFootstep = new StepSound("stone", 1.0F, 1.0F); + public static final StepSound soundWoodFootstep = new StepSound("wood", 1.0F, 1.0F); + public static final StepSound soundGravelFootstep = new StepSound("gravel", 1.0F, 1.0F); + public static final StepSound soundGrassFootstep = new StepSound("grass", 1.0F, 1.0F); + public static final StepSound soundStoneFootstep = new StepSound("stone", 1.0F, 1.0F); + public static final StepSound soundMetalFootstep = new StepSound("stone", 1.0F, 1.5F); + public static final StepSound soundGlassFootstep = new StepSoundStone("stone", 1.0F, 1.0F); + public static final StepSound soundClothFootstep = new StepSound("cloth", 1.0F, 1.0F); + public static final StepSound soundSandFootstep = new StepSound("sand", 1.0F, 1.0F); + public static final StepSound soundSnowFootstep = new StepSound("snow", 1.0F, 1.0F); + public static final StepSound soundLadderFootstep = new StepSoundSand("ladder", 1.0F, 1.0F); + public static final StepSound soundAnvilFootstep = new StepSoundAnvil("anvil", 0.3F, 1.0F); + public static final Block[] blocksList = new Block[4096]; + public static final boolean[] opaqueCubeLookup = new boolean[4096]; + public static final int[] lightOpacity = new int[4096]; + public static final boolean[] canBlockGrass = new boolean[4096]; + public static final int[] lightValue = new int[4096]; + public static boolean[] useNeighborBrightness = new boolean[4096]; + public static final Block stone = (new BlockStone(1)).setHardness(1.5F).setResistance(10.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("stone"); + public static final BlockGrass grass = (BlockGrass)(new BlockGrass(2)).setHardness(0.6F).setStepSound(soundGrassFootstep).setUnlocalizedName("grass"); + public static final Block dirt = (new BlockDirt(3)).setHardness(0.5F).setStepSound(soundGravelFootstep).setUnlocalizedName("dirt"); + public static final Block cobblestone = (new Block(4, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("stonebrick").setCreativeTab(CreativeTabs.tabBlock); + public static final Block planks = (new BlockWood(5)).setHardness(2.0F).setResistance(5.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("wood"); + public static final Block sapling = (new BlockSapling(6)).setHardness(0.0F).setStepSound(soundGrassFootstep).setUnlocalizedName("sapling"); + public static final Block bedrock = (new Block(7, Material.rock)).setBlockUnbreakable().setResistance(6000000.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("bedrock").disableStats().setCreativeTab(CreativeTabs.tabBlock); + public static final BlockFluid waterMoving = (BlockFluid)(new BlockFlowing(8, Material.water)).setHardness(100.0F).setLightOpacity(3).setUnlocalizedName("water").disableStats(); + public static final Block waterStill = (new BlockStationary(9, Material.water)).setHardness(100.0F).setLightOpacity(3).setUnlocalizedName("water").disableStats(); + public static final BlockFluid lavaMoving = (BlockFluid)(new BlockFlowing(10, Material.lava)).setHardness(0.0F).setLightValue(1.0F).setUnlocalizedName("lava").disableStats(); + public static final Block lavaStill = (new BlockStationary(11, Material.lava)).setHardness(100.0F).setLightValue(1.0F).setUnlocalizedName("lava").disableStats(); + public static final Block sand = (new BlockSand(12)).setHardness(0.5F).setStepSound(soundSandFootstep).setUnlocalizedName("sand"); + public static final Block gravel = (new BlockGravel(13)).setHardness(0.6F).setStepSound(soundGravelFootstep).setUnlocalizedName("gravel"); + public static final Block oreGold = (new BlockOre(14)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("oreGold"); + public static final Block oreIron = (new BlockOre(15)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("oreIron"); + public static final Block oreCoal = (new BlockOre(16)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("oreCoal"); + public static final Block wood = (new BlockLog(17)).setHardness(2.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("log"); + public static final BlockLeaves leaves = (BlockLeaves)(new BlockLeaves(18)).setHardness(0.2F).setLightOpacity(1).setStepSound(soundGrassFootstep).setUnlocalizedName("leaves"); + public static final Block sponge = (new BlockSponge(19)).setHardness(0.6F).setStepSound(soundGrassFootstep).setUnlocalizedName("sponge"); + public static final Block glass = (new BlockGlass(20, Material.glass, false)).setHardness(0.3F).setStepSound(soundGlassFootstep).setUnlocalizedName("glass"); + public static final Block oreLapis = (new BlockOre(21)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("oreLapis"); + public static final Block blockLapis = (new Block(22, Material.rock)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("blockLapis").setCreativeTab(CreativeTabs.tabBlock); + public static final Block dispenser = (new BlockDispenser(23)).setHardness(3.5F).setStepSound(soundStoneFootstep).setUnlocalizedName("dispenser"); + public static final Block sandStone = (new BlockSandStone(24)).setStepSound(soundStoneFootstep).setHardness(0.8F).setUnlocalizedName("sandStone"); + public static final Block music = (new BlockNote(25)).setHardness(0.8F).setUnlocalizedName("musicBlock"); + public static final Block bed = (new BlockBed(26)).setHardness(0.2F).setUnlocalizedName("bed").disableStats(); + public static final Block railPowered = (new BlockRailPowered(27)).setHardness(0.7F).setStepSound(soundMetalFootstep).setUnlocalizedName("goldenRail"); + public static final Block railDetector = (new BlockDetectorRail(28)).setHardness(0.7F).setStepSound(soundMetalFootstep).setUnlocalizedName("detectorRail"); + public static final BlockPistonBase pistonStickyBase = (BlockPistonBase)(new BlockPistonBase(29, true)).setUnlocalizedName("pistonStickyBase"); + public static final Block web = (new BlockWeb(30)).setLightOpacity(1).setHardness(4.0F).setUnlocalizedName("web"); + public static final BlockTallGrass tallGrass = (BlockTallGrass)(new BlockTallGrass(31)).setHardness(0.0F).setStepSound(soundGrassFootstep).setUnlocalizedName("tallgrass"); + public static final BlockDeadBush deadBush = (BlockDeadBush)(new BlockDeadBush(32)).setHardness(0.0F).setStepSound(soundGrassFootstep).setUnlocalizedName("deadbush"); + public static final BlockPistonBase pistonBase = (BlockPistonBase)(new BlockPistonBase(33, false)).setUnlocalizedName("pistonBase"); + public static final BlockPistonExtension pistonExtension = new BlockPistonExtension(34); + public static final Block cloth = (new BlockCloth()).setHardness(0.8F).setStepSound(soundClothFootstep).setUnlocalizedName("cloth"); + public static final BlockPistonMoving pistonMoving = new BlockPistonMoving(36); + public static final BlockFlower plantYellow = (BlockFlower)(new BlockFlower(37)).setHardness(0.0F).setStepSound(soundGrassFootstep).setUnlocalizedName("flower"); + public static final BlockFlower plantRed = (BlockFlower)(new BlockFlower(38)).setHardness(0.0F).setStepSound(soundGrassFootstep).setUnlocalizedName("rose"); + public static final BlockFlower mushroomBrown = (BlockFlower)(new BlockMushroom(39, "mushroom_brown")).setHardness(0.0F).setStepSound(soundGrassFootstep).setLightValue(2.0F / 16.0F).setUnlocalizedName("mushroom"); + public static final BlockFlower mushroomRed = (BlockFlower)(new BlockMushroom(40, "mushroom_red")).setHardness(0.0F).setStepSound(soundGrassFootstep).setUnlocalizedName("mushroom"); + public static final Block blockGold = (new BlockOreStorage(41)).setHardness(3.0F).setResistance(10.0F).setStepSound(soundMetalFootstep).setUnlocalizedName("blockGold"); + public static final Block blockIron = (new BlockOreStorage(42)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundMetalFootstep).setUnlocalizedName("blockIron"); + public static final BlockHalfSlab stoneDoubleSlab = (BlockHalfSlab)(new BlockStep(43, true)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("stoneSlab"); + public static final BlockHalfSlab stoneSingleSlab = (BlockHalfSlab)(new BlockStep(44, false)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("stoneSlab"); + public static final Block brick = (new Block(45, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("brick").setCreativeTab(CreativeTabs.tabBlock); + public static final Block tnt = (new BlockTNT(46)).setHardness(0.0F).setStepSound(soundGrassFootstep).setUnlocalizedName("tnt"); + public static final Block bookShelf = (new BlockBookshelf(47)).setHardness(1.5F).setStepSound(soundWoodFootstep).setUnlocalizedName("bookshelf"); + public static final Block cobblestoneMossy = (new Block(48, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("stoneMoss").setCreativeTab(CreativeTabs.tabBlock); + public static final Block obsidian = (new BlockObsidian(49)).setHardness(50.0F).setResistance(2000.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("obsidian"); + public static final Block torchWood = (new BlockTorch(50)).setHardness(0.0F).setLightValue(15.0F / 16.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("torch"); + public static final BlockFire fire = (BlockFire)(new BlockFire(51)).setHardness(0.0F).setLightValue(1.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("fire").disableStats(); + public static final Block mobSpawner = (new BlockMobSpawner(52)).setHardness(5.0F).setStepSound(soundMetalFootstep).setUnlocalizedName("mobSpawner").disableStats(); + public static final Block stairsWoodOak = (new BlockStairs(53, planks, 0)).setUnlocalizedName("stairsWood"); + public static final BlockChest chest = (BlockChest)(new BlockChest(54, 0)).setHardness(2.5F).setStepSound(soundWoodFootstep).setUnlocalizedName("chest"); + public static final BlockRedstoneWire redstoneWire = (BlockRedstoneWire)(new BlockRedstoneWire(55)).setHardness(0.0F).setStepSound(soundPowderFootstep).setUnlocalizedName("redstoneDust").disableStats(); + public static final Block oreDiamond = (new BlockOre(56)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("oreDiamond"); + public static final Block blockDiamond = (new BlockOreStorage(57)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundMetalFootstep).setUnlocalizedName("blockDiamond"); + public static final Block workbench = (new BlockWorkbench(58)).setHardness(2.5F).setStepSound(soundWoodFootstep).setUnlocalizedName("workbench"); + public static final Block crops = (new BlockCrops(59)).setUnlocalizedName("crops"); + public static final Block tilledField = (new BlockFarmland(60)).setHardness(0.6F).setStepSound(soundGravelFootstep).setUnlocalizedName("farmland"); + public static final Block furnaceIdle = (new BlockFurnace(61, false)).setHardness(3.5F).setStepSound(soundStoneFootstep).setUnlocalizedName("furnace").setCreativeTab(CreativeTabs.tabDecorations); + public static final Block furnaceBurning = (new BlockFurnace(62, true)).setHardness(3.5F).setStepSound(soundStoneFootstep).setLightValue(14.0F / 16.0F).setUnlocalizedName("furnace"); + public static final Block signPost = (new BlockSign(63, TileEntitySign.class, true)).setHardness(1.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("sign").disableStats(); + public static final Block doorWood = (new BlockDoor(64, Material.wood)).setHardness(3.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("doorWood").disableStats(); + public static final Block ladder = (new BlockLadder(65)).setHardness(0.4F).setStepSound(soundLadderFootstep).setUnlocalizedName("ladder"); + public static final Block rail = (new BlockRail(66)).setHardness(0.7F).setStepSound(soundMetalFootstep).setUnlocalizedName("rail"); + public static final Block stairsCobblestone = (new BlockStairs(67, cobblestone, 0)).setUnlocalizedName("stairsStone"); + public static final Block signWall = (new BlockSign(68, TileEntitySign.class, false)).setHardness(1.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("sign").disableStats(); + public static final Block lever = (new BlockLever(69)).setHardness(0.5F).setStepSound(soundWoodFootstep).setUnlocalizedName("lever"); + public static final Block pressurePlateStone = (new BlockPressurePlate(70, "stone", Material.rock, EnumMobType.mobs)).setHardness(0.5F).setStepSound(soundStoneFootstep).setUnlocalizedName("pressurePlate"); + public static final Block doorIron = (new BlockDoor(71, Material.iron)).setHardness(5.0F).setStepSound(soundMetalFootstep).setUnlocalizedName("doorIron").disableStats(); + public static final Block pressurePlatePlanks = (new BlockPressurePlate(72, "wood", Material.wood, EnumMobType.everything)).setHardness(0.5F).setStepSound(soundWoodFootstep).setUnlocalizedName("pressurePlate"); + public static final Block oreRedstone = (new BlockRedstoneOre(73, false)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("oreRedstone").setCreativeTab(CreativeTabs.tabBlock); + public static final Block oreRedstoneGlowing = (new BlockRedstoneOre(74, true)).setLightValue(10.0F / 16.0F).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("oreRedstone"); + public static final Block torchRedstoneIdle = (new BlockRedstoneTorch(75, false)).setHardness(0.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("notGate"); + public static final Block torchRedstoneActive = (new BlockRedstoneTorch(76, true)).setHardness(0.0F).setLightValue(0.5F).setStepSound(soundWoodFootstep).setUnlocalizedName("notGate").setCreativeTab(CreativeTabs.tabRedstone); + public static final Block stoneButton = (new BlockButtonStone(77)).setHardness(0.5F).setStepSound(soundStoneFootstep).setUnlocalizedName("button"); + public static final Block snow = (new BlockSnow(78)).setHardness(0.1F).setStepSound(soundSnowFootstep).setUnlocalizedName("snow").setLightOpacity(0); + public static final Block ice = (new BlockIce(79)).setHardness(0.5F).setLightOpacity(3).setStepSound(soundGlassFootstep).setUnlocalizedName("ice"); + public static final Block blockSnow = (new BlockSnowBlock(80)).setHardness(0.2F).setStepSound(soundSnowFootstep).setUnlocalizedName("snow"); + public static final Block cactus = (new BlockCactus(81)).setHardness(0.4F).setStepSound(soundClothFootstep).setUnlocalizedName("cactus"); + public static final Block blockClay = (new BlockClay(82)).setHardness(0.6F).setStepSound(soundGravelFootstep).setUnlocalizedName("clay"); + public static final Block reed = (new BlockReed(83)).setHardness(0.0F).setStepSound(soundGrassFootstep).setUnlocalizedName("reeds").disableStats(); + public static final Block jukebox = (new BlockJukeBox(84)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("jukebox"); + public static final Block fence = (new BlockFence(85, "wood", Material.wood)).setHardness(2.0F).setResistance(5.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("fence"); + public static final Block pumpkin = (new BlockPumpkin(86, false)).setHardness(1.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("pumpkin"); + public static final Block netherrack = (new BlockNetherrack(87)).setHardness(0.4F).setStepSound(soundStoneFootstep).setUnlocalizedName("hellrock"); + public static final Block slowSand = (new BlockSoulSand(88)).setHardness(0.5F).setStepSound(soundSandFootstep).setUnlocalizedName("hellsand"); + public static final Block glowStone = (new BlockGlowStone(89, Material.glass)).setHardness(0.3F).setStepSound(soundGlassFootstep).setLightValue(1.0F).setUnlocalizedName("lightgem"); + public static final BlockPortal portal = (BlockPortal)(new BlockPortal(90)).setHardness(-1.0F).setStepSound(soundGlassFootstep).setLightValue(12.0F / 16.0F).setUnlocalizedName("portal"); + public static final Block pumpkinLantern = (new BlockPumpkin(91, true)).setHardness(1.0F).setStepSound(soundWoodFootstep).setLightValue(1.0F).setUnlocalizedName("litpumpkin"); + public static final Block cake = (new BlockCake(92)).setHardness(0.5F).setStepSound(soundClothFootstep).setUnlocalizedName("cake").disableStats(); + public static final BlockRedstoneRepeater redstoneRepeaterIdle = (BlockRedstoneRepeater)(new BlockRedstoneRepeater(93, false)).setHardness(0.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("diode").disableStats(); + public static final BlockRedstoneRepeater redstoneRepeaterActive = (BlockRedstoneRepeater)(new BlockRedstoneRepeater(94, true)).setHardness(0.0F).setLightValue(10.0F / 16.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("diode").disableStats(); + public static final Block lockedChest = (new BlockLockedChest(95)).setHardness(0.0F).setLightValue(1.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("lockedchest").setTickRandomly(true); + public static final Block trapdoor = (new BlockTrapDoor(96, Material.wood)).setHardness(3.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("trapdoor").disableStats(); + public static final Block silverfish = (new BlockSilverfish(97)).setHardness(12.0F / 16.0F).setUnlocalizedName("monsterStoneEgg"); + public static final Block stoneBrick = (new BlockStoneBrick(98)).setHardness(1.5F).setResistance(10.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("stonebricksmooth"); + public static final Block mushroomCapBrown = (new BlockMushroomCap(99, Material.wood, 0)).setHardness(0.2F).setStepSound(soundWoodFootstep).setUnlocalizedName("mushroom"); + public static final Block mushroomCapRed = (new BlockMushroomCap(100, Material.wood, 1)).setHardness(0.2F).setStepSound(soundWoodFootstep).setUnlocalizedName("mushroom"); + public static final Block fenceIron = (new BlockPane(101, "fenceIron", "fenceIron", Material.iron, true)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundMetalFootstep).setUnlocalizedName("fenceIron"); + public static final Block thinGlass = (new BlockPane(102, "glass", "thinglass_top", Material.glass, false)).setHardness(0.3F).setStepSound(soundGlassFootstep).setUnlocalizedName("thinGlass"); + public static final Block melon = (new BlockMelon(103)).setHardness(1.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("melon"); + public static final Block pumpkinStem = (new BlockStem(104, pumpkin)).setHardness(0.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("pumpkinStem"); + public static final Block melonStem = (new BlockStem(105, melon)).setHardness(0.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("pumpkinStem"); + public static final Block vine = (new BlockVine(106)).setHardness(0.2F).setStepSound(soundGrassFootstep).setUnlocalizedName("vine"); + public static final Block fenceGate = (new BlockFenceGate(107)).setHardness(2.0F).setResistance(5.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("fenceGate"); + public static final Block stairsBrick = (new BlockStairs(108, brick, 0)).setUnlocalizedName("stairsBrick"); + public static final Block stairsStoneBrick = (new BlockStairs(109, stoneBrick, 0)).setUnlocalizedName("stairsStoneBrickSmooth"); + public static final BlockMycelium mycelium = (BlockMycelium)(new BlockMycelium(110)).setHardness(0.6F).setStepSound(soundGrassFootstep).setUnlocalizedName("mycel"); + public static final Block waterlily = (new BlockLilyPad(111)).setHardness(0.0F).setStepSound(soundGrassFootstep).setUnlocalizedName("waterlily"); + public static final Block netherBrick = (new Block(112, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("netherBrick").setCreativeTab(CreativeTabs.tabBlock); + public static final Block netherFence = (new BlockFence(113, "netherBrick", Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("netherFence"); + public static final Block stairsNetherBrick = (new BlockStairs(114, netherBrick, 0)).setUnlocalizedName("stairsNetherBrick"); + public static final Block netherStalk = (new BlockNetherStalk(115)).setUnlocalizedName("netherStalk"); + public static final Block enchantmentTable = (new BlockEnchantmentTable(116)).setHardness(5.0F).setResistance(2000.0F).setUnlocalizedName("enchantmentTable"); + public static final Block brewingStand = (new BlockBrewingStand(117)).setHardness(0.5F).setLightValue(2.0F / 16.0F).setUnlocalizedName("brewingStand"); + public static final BlockCauldron cauldron = (BlockCauldron)(new BlockCauldron(118)).setHardness(2.0F).setUnlocalizedName("cauldron"); + public static final Block endPortal = (new BlockEndPortal(119, Material.portal)).setHardness(-1.0F).setResistance(6000000.0F); + public static final Block endPortalFrame = (new BlockEndPortalFrame(120)).setStepSound(soundGlassFootstep).setLightValue(2.0F / 16.0F).setHardness(-1.0F).setUnlocalizedName("endPortalFrame").setResistance(6000000.0F).setCreativeTab(CreativeTabs.tabDecorations); + public static final Block whiteStone = (new Block(121, Material.rock)).setHardness(3.0F).setResistance(15.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("whiteStone").setCreativeTab(CreativeTabs.tabBlock); + public static final Block dragonEgg = (new BlockDragonEgg(122)).setHardness(3.0F).setResistance(15.0F).setStepSound(soundStoneFootstep).setLightValue(2.0F / 16.0F).setUnlocalizedName("dragonEgg"); + public static final Block redstoneLampIdle = (new BlockRedstoneLight(123, false)).setHardness(0.3F).setStepSound(soundGlassFootstep).setUnlocalizedName("redstoneLight").setCreativeTab(CreativeTabs.tabRedstone); + public static final Block redstoneLampActive = (new BlockRedstoneLight(124, true)).setHardness(0.3F).setStepSound(soundGlassFootstep).setUnlocalizedName("redstoneLight"); + public static final BlockHalfSlab woodDoubleSlab = (BlockHalfSlab)(new BlockWoodSlab(125, true)).setHardness(2.0F).setResistance(5.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("woodSlab"); + public static final BlockHalfSlab woodSingleSlab = (BlockHalfSlab)(new BlockWoodSlab(126, false)).setHardness(2.0F).setResistance(5.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("woodSlab"); + public static final Block cocoaPlant = (new BlockCocoa(127)).setHardness(0.2F).setResistance(5.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("cocoa"); + public static final Block stairsSandStone = (new BlockStairs(128, sandStone, 0)).setUnlocalizedName("stairsSandStone"); + public static final Block oreEmerald = (new BlockOre(129)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("oreEmerald"); + public static final Block enderChest = (new BlockEnderChest(130)).setHardness(22.5F).setResistance(1000.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("enderChest").setLightValue(0.5F); + public static final BlockTripWireSource tripWireSource = (BlockTripWireSource)(new BlockTripWireSource(131)).setUnlocalizedName("tripWireSource"); + public static final Block tripWire = (new BlockTripWire(132)).setUnlocalizedName("tripWire"); + public static final Block blockEmerald = (new BlockOreStorage(133)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundMetalFootstep).setUnlocalizedName("blockEmerald"); + public static final Block stairsWoodSpruce = (new BlockStairs(134, planks, 1)).setUnlocalizedName("stairsWoodSpruce"); + public static final Block stairsWoodBirch = (new BlockStairs(135, planks, 2)).setUnlocalizedName("stairsWoodBirch"); + public static final Block stairsWoodJungle = (new BlockStairs(136, planks, 3)).setUnlocalizedName("stairsWoodJungle"); + public static final Block commandBlock = (new BlockCommandBlock(137)).setUnlocalizedName("commandBlock"); + public static final BlockBeacon beacon = (BlockBeacon)(new BlockBeacon(138)).setUnlocalizedName("beacon").setLightValue(1.0F); + public static final Block cobblestoneWall = (new BlockWall(139, cobblestone)).setUnlocalizedName("cobbleWall"); + public static final Block flowerPot = (new BlockFlowerPot(140)).setHardness(0.0F).setStepSound(soundPowderFootstep).setUnlocalizedName("flowerPot"); + public static final Block carrot = (new BlockCarrot(141)).setUnlocalizedName("carrots"); + public static final Block potato = (new BlockPotato(142)).setUnlocalizedName("potatoes"); + public static final Block woodenButton = (new BlockButtonWood(143)).setHardness(0.5F).setStepSound(soundWoodFootstep).setUnlocalizedName("button"); + public static final Block skull = (new BlockSkull(144)).setHardness(1.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("skull"); + public static final Block anvil = (new BlockAnvil(145)).setHardness(5.0F).setStepSound(soundAnvilFootstep).setResistance(2000.0F).setUnlocalizedName("anvil"); + public static final Block chestTrapped = (new BlockChest(146, 1)).setHardness(2.5F).setStepSound(soundWoodFootstep).setUnlocalizedName("chestTrap"); + public static final Block pressurePlateGold = (new BlockPressurePlateWeighted(147, "blockGold", Material.iron, 64)).setHardness(0.5F).setStepSound(soundWoodFootstep).setUnlocalizedName("weightedPlate_light"); + public static final Block pressurePlateIron = (new BlockPressurePlateWeighted(148, "blockIron", Material.iron, 640)).setHardness(0.5F).setStepSound(soundWoodFootstep).setUnlocalizedName("weightedPlate_heavy"); + public static final BlockComparator redstoneComparatorIdle = (BlockComparator)(new BlockComparator(149, false)).setHardness(0.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("comparator").disableStats(); + public static final BlockComparator redstoneComparatorActive = (BlockComparator)(new BlockComparator(150, true)).setHardness(0.0F).setLightValue(10.0F / 16.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("comparator").disableStats(); + public static final BlockDaylightDetector daylightSensor = (BlockDaylightDetector)(new BlockDaylightDetector(151)).setHardness(0.2F).setStepSound(soundWoodFootstep).setUnlocalizedName("daylightDetector"); + public static final Block blockRedstone = (new BlockPoweredOre(152)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundMetalFootstep).setUnlocalizedName("blockRedstone"); + public static final Block oreNetherQuartz = (new BlockOre(153)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep).setUnlocalizedName("netherquartz"); + public static final BlockHopper hopperBlock = (BlockHopper)(new BlockHopper(154)).setHardness(3.0F).setResistance(8.0F).setStepSound(soundWoodFootstep).setUnlocalizedName("hopper"); + public static final Block blockNetherQuartz = (new BlockQuartz(155)).setStepSound(soundStoneFootstep).setHardness(0.8F).setUnlocalizedName("quartzBlock"); + public static final Block stairsNetherQuartz = (new BlockStairs(156, blockNetherQuartz, 0)).setUnlocalizedName("stairsQuartz"); + public static final Block railActivator = (new BlockRailPowered(157)).setHardness(0.7F).setStepSound(soundMetalFootstep).setUnlocalizedName("activatorRail"); + public static final Block dropper = (new BlockDropper(158)).setHardness(3.5F).setStepSound(soundStoneFootstep).setUnlocalizedName("dropper"); + public final int blockID; + protected float blockHardness; + protected float blockResistance; + protected boolean blockConstructorCalled = true; + protected boolean enableStats = true; + protected boolean needsRandomTick; + protected boolean isBlockContainer; + protected double minX; + protected double minY; + protected double minZ; + protected double maxX; + protected double maxY; + protected double maxZ; + public StepSound stepSound = soundPowderFootstep; + public float blockParticleGravity = 1.0F; + public final Material blockMaterial; + public float slipperiness = 0.6F; + private String unlocalizedName; + protected Icon blockIcon; + + protected Block(int var1, Material var2) { + if(blocksList[var1] != null) { + throw new IllegalArgumentException("Slot " + var1 + " is already occupied by " + blocksList[var1] + " when adding " + this); + } else { + this.blockMaterial = var2; + blocksList[var1] = this; + this.blockID = var1; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + opaqueCubeLookup[var1] = this.isOpaqueCube(); + lightOpacity[var1] = this.isOpaqueCube() ? 255 : 0; + canBlockGrass[var1] = !var2.getCanBlockGrass(); + } + } + + protected void initializeBlock() { + } + + protected Block setStepSound(StepSound var1) { + this.stepSound = var1; + return this; + } + + protected Block setLightOpacity(int var1) { + lightOpacity[this.blockID] = var1; + return this; + } + + protected Block setLightValue(float var1) { + lightValue[this.blockID] = (int)(15.0F * var1); + return this; + } + + protected Block setResistance(float var1) { + this.blockResistance = var1 * 3.0F; + return this; + } + + public static boolean isNormalCube(int var0) { + Block var1 = blocksList[var0]; + return var1 == null ? false : var1.blockMaterial.isOpaque() && var1.renderAsNormalBlock() && !var1.canProvidePower(); + } + + public boolean renderAsNormalBlock() { + return true; + } + + public boolean getBlocksMovement(IBlockAccess var1, int var2, int var3, int var4) { + return !this.blockMaterial.blocksMovement(); + } + + public int getRenderType() { + return 0; + } + + protected Block setHardness(float var1) { + this.blockHardness = var1; + if(this.blockResistance < var1 * 5.0F) { + this.blockResistance = var1 * 5.0F; + } + + return this; + } + + protected Block setBlockUnbreakable() { + this.setHardness(-1.0F); + return this; + } + + public float getBlockHardness(World var1, int var2, int var3, int var4) { + return this.blockHardness; + } + + protected Block setTickRandomly(boolean var1) { + this.needsRandomTick = var1; + return this; + } + + public boolean getTickRandomly() { + return this.needsRandomTick; + } + + public boolean hasTileEntity() { + return this.isBlockContainer; + } + + protected final void setBlockBounds(float var1, float var2, float var3, float var4, float var5, float var6) { + this.minX = (double)var1; + this.minY = (double)var2; + this.minZ = (double)var3; + this.maxX = (double)var4; + this.maxY = (double)var5; + this.maxZ = (double)var6; + } + + public float getBlockBrightness(IBlockAccess var1, int var2, int var3, int var4) { + return var1.getBrightness(var2, var3, var4, lightValue[var1.getBlockId(var2, var3, var4)]); + } + + public int getMixedBrightnessForBlock(IBlockAccess var1, int var2, int var3, int var4) { + return var1.getLightBrightnessForSkyBlocks(var2, var3, var4, lightValue[var1.getBlockId(var2, var3, var4)]); + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return var5 == 0 && this.minY > 0.0D ? true : (var5 == 1 && this.maxY < 1.0D ? true : (var5 == 2 && this.minZ > 0.0D ? true : (var5 == 3 && this.maxZ < 1.0D ? true : (var5 == 4 && this.minX > 0.0D ? true : (var5 == 5 && this.maxX < 1.0D ? true : !var1.isBlockOpaqueCube(var2, var3, var4)))))); + } + + public boolean isBlockSolid(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return var1.getBlockMaterial(var2, var3, var4).isSolid(); + } + + public Icon getBlockTexture(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return this.getIcon(var5, var1.getBlockMetadata(var2, var3, var4)); + } + + public Icon getIcon(int var1, int var2) { + return this.blockIcon; + } + + public final Icon getBlockTextureFromSide(int var1) { + return this.getIcon(var1, 0); + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return AxisAlignedBB.getAABBPool().getAABB((double)var2 + this.minX, (double)var3 + this.minY, (double)var4 + this.minZ, (double)var2 + this.maxX, (double)var3 + this.maxY, (double)var4 + this.maxZ); + } + + public void addCollisionBoxesToList(World var1, int var2, int var3, int var4, AxisAlignedBB var5, List var6, Entity var7) { + AxisAlignedBB var8 = this.getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + if(var8 != null && var5.intersectsWith(var8)) { + var6.add(var8); + } + + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return AxisAlignedBB.getAABBPool().getAABB((double)var2 + this.minX, (double)var3 + this.minY, (double)var4 + this.minZ, (double)var2 + this.maxX, (double)var3 + this.maxY, (double)var4 + this.maxZ); + } + + public boolean isOpaqueCube() { + return true; + } + + public boolean canCollideCheck(int var1, boolean var2) { + return this.isCollidable(); + } + + public boolean isCollidable() { + return true; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + } + + public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) { + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + } + + public int tickRate(World var1) { + return 10; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + } + + public int quantityDropped(Random var1) { + return 1; + } + + public int idDropped(int var1, Random var2, int var3) { + return this.blockID; + } + + public float getPlayerRelativeBlockHardness(EntityPlayer var1, World var2, int var3, int var4, int var5) { + float var6 = this.getBlockHardness(var2, var3, var4, var5); + return var6 < 0.0F ? 0.0F : (!var1.canHarvestBlock(this) ? var1.getCurrentPlayerStrVsBlock(this, false) / var6 / 100.0F : var1.getCurrentPlayerStrVsBlock(this, true) / var6 / 30.0F); + } + + public final void dropBlockAsItem(World var1, int var2, int var3, int var4, int var5, int var6) { + this.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, 1.0F, var6); + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + if(!var1.isRemote) { + int var8 = this.quantityDroppedWithBonus(var7, var1.rand); + + for(int var9 = 0; var9 < var8; ++var9) { + if(var1.rand.nextFloat() <= var6) { + int var10 = this.idDropped(var5, var1.rand, var7); + if(var10 > 0) { + this.dropBlockAsItem_do(var1, var2, var3, var4, new ItemStack(var10, 1, this.damageDropped(var5))); + } + } + } + + } + } + + protected void dropBlockAsItem_do(World var1, int var2, int var3, int var4, ItemStack var5) { + if(!var1.isRemote && var1.getGameRules().getGameRuleBooleanValue("doTileDrops")) { + float var6 = 0.7F; + double var7 = (double)(var1.rand.nextFloat() * var6) + (double)(1.0F - var6) * 0.5D; + double var9 = (double)(var1.rand.nextFloat() * var6) + (double)(1.0F - var6) * 0.5D; + double var11 = (double)(var1.rand.nextFloat() * var6) + (double)(1.0F - var6) * 0.5D; + EntityItem var13 = new EntityItem(var1, (double)var2 + var7, (double)var3 + var9, (double)var4 + var11, var5); + var13.delayBeforeCanPickup = 10; + var1.spawnEntityInWorld(var13); + } + } + + protected void dropXpOnBlockBreak(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isRemote) { + while(var5 > 0) { + int var6 = EntityXPOrb.getXPSplit(var5); + var5 -= var6; + var1.spawnEntityInWorld(new EntityXPOrb(var1, (double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, var6)); + } + } + + } + + public int damageDropped(int var1) { + return 0; + } + + public float getExplosionResistance(Entity var1) { + return this.blockResistance / 5.0F; + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3 var5, Vec3 var6) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + var5 = var5.addVector((double)(-var2), (double)(-var3), (double)(-var4)); + var6 = var6.addVector((double)(-var2), (double)(-var3), (double)(-var4)); + Vec3 var7 = var5.getIntermediateWithXValue(var6, this.minX); + Vec3 var8 = var5.getIntermediateWithXValue(var6, this.maxX); + Vec3 var9 = var5.getIntermediateWithYValue(var6, this.minY); + Vec3 var10 = var5.getIntermediateWithYValue(var6, this.maxY); + Vec3 var11 = var5.getIntermediateWithZValue(var6, this.minZ); + Vec3 var12 = var5.getIntermediateWithZValue(var6, this.maxZ); + if(!this.isVecInsideYZBounds(var7)) { + var7 = null; + } + + if(!this.isVecInsideYZBounds(var8)) { + var8 = null; + } + + if(!this.isVecInsideXZBounds(var9)) { + var9 = null; + } + + if(!this.isVecInsideXZBounds(var10)) { + var10 = null; + } + + if(!this.isVecInsideXYBounds(var11)) { + var11 = null; + } + + if(!this.isVecInsideXYBounds(var12)) { + var12 = null; + } + + Vec3 var13 = null; + if(var7 != null && (var13 == null || var5.squareDistanceTo(var7) < var5.squareDistanceTo(var13))) { + var13 = var7; + } + + if(var8 != null && (var13 == null || var5.squareDistanceTo(var8) < var5.squareDistanceTo(var13))) { + var13 = var8; + } + + if(var9 != null && (var13 == null || var5.squareDistanceTo(var9) < var5.squareDistanceTo(var13))) { + var13 = var9; + } + + if(var10 != null && (var13 == null || var5.squareDistanceTo(var10) < var5.squareDistanceTo(var13))) { + var13 = var10; + } + + if(var11 != null && (var13 == null || var5.squareDistanceTo(var11) < var5.squareDistanceTo(var13))) { + var13 = var11; + } + + if(var12 != null && (var13 == null || var5.squareDistanceTo(var12) < var5.squareDistanceTo(var13))) { + var13 = var12; + } + + if(var13 == null) { + return null; + } else { + byte var14 = -1; + if(var13 == var7) { + var14 = 4; + } + + if(var13 == var8) { + var14 = 5; + } + + if(var13 == var9) { + var14 = 0; + } + + if(var13 == var10) { + var14 = 1; + } + + if(var13 == var11) { + var14 = 2; + } + + if(var13 == var12) { + var14 = 3; + } + + return new MovingObjectPosition(var2, var3, var4, var14, var13.addVector((double)var2, (double)var3, (double)var4)); + } + } + + private boolean isVecInsideYZBounds(Vec3 var1) { + return var1 == null ? false : var1.yCoord >= this.minY && var1.yCoord <= this.maxY && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ; + } + + private boolean isVecInsideXZBounds(Vec3 var1) { + return var1 == null ? false : var1.xCoord >= this.minX && var1.xCoord <= this.maxX && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ; + } + + private boolean isVecInsideXYBounds(Vec3 var1) { + return var1 == null ? false : var1.xCoord >= this.minX && var1.xCoord <= this.maxX && var1.yCoord >= this.minY && var1.yCoord <= this.maxY; + } + + public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4, Explosion var5) { + } + + public int getRenderBlockPass() { + return 0; + } + + public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5, ItemStack var6) { + return this.canPlaceBlockOnSide(var1, var2, var3, var4, var5); + } + + public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) { + return this.canPlaceBlockAt(var1, var2, var3, var4); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3, var4); + return var5 == 0 || blocksList[var5].blockMaterial.isReplaceable(); + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + return false; + } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + } + + public int onBlockPlaced(World var1, int var2, int var3, int var4, int var5, float var6, float var7, float var8, int var9) { + return var9; + } + + public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + } + + public void velocityToAddToEntity(World var1, int var2, int var3, int var4, Entity var5, Vec3 var6) { + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + } + + public final double getBlockBoundsMinX() { + return this.minX; + } + + public final double getBlockBoundsMaxX() { + return this.maxX; + } + + public final double getBlockBoundsMinY() { + return this.minY; + } + + public final double getBlockBoundsMaxY() { + return this.maxY; + } + + public final double getBlockBoundsMinZ() { + return this.minZ; + } + + public final double getBlockBoundsMaxZ() { + return this.maxZ; + } + + public int getBlockColor() { + return 16777215; + } + + public int getRenderColor(int var1) { + return 16777215; + } + + public int colorMultiplier(IBlockAccess var1, int var2, int var3, int var4) { + return 16777215; + } + + public int isProvidingWeakPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return 0; + } + + public boolean canProvidePower() { + return false; + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + } + + public int isProvidingStrongPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return 0; + } + + public void setBlockBoundsForItemRender() { + } + + public void harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) { + var2.addStat(StatList.mineBlockStatArray[this.blockID], 1); + var2.addExhaustion(0.025F); + if(this.canSilkHarvest() && EnchantmentHelper.getSilkTouchModifier(var2)) { + ItemStack var8 = this.createStackedBlock(var6); + if(var8 != null) { + this.dropBlockAsItem_do(var1, var3, var4, var5, var8); + } + } else { + int var7 = EnchantmentHelper.getFortuneModifier(var2); + this.dropBlockAsItem(var1, var3, var4, var5, var6, var7); + } + + } + + protected boolean canSilkHarvest() { + return this.renderAsNormalBlock() && !this.isBlockContainer; + } + + protected ItemStack createStackedBlock(int var1) { + int var2 = 0; + if(this.blockID >= 0 && this.blockID < Item.itemsList.length && Item.itemsList[this.blockID].getHasSubtypes()) { + var2 = var1; + } + + return new ItemStack(this.blockID, 1, var2); + } + + public int quantityDroppedWithBonus(int var1, Random var2) { + return this.quantityDropped(var2); + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + return true; + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + } + + public void onPostBlockPlaced(World var1, int var2, int var3, int var4, int var5) { + } + + public Block setUnlocalizedName(String var1) { + this.unlocalizedName = var1; + return this; + } + + public String getLocalizedName() { + return StatCollector.translateToLocal(this.getUnlocalizedName() + ".name"); + } + + public String getUnlocalizedName() { + return "tile." + this.unlocalizedName; + } + + public String getUnlocalizedName2() { + return this.unlocalizedName; + } + + public boolean onBlockEventReceived(World var1, int var2, int var3, int var4, int var5, int var6) { + return false; + } + + public boolean getEnableStats() { + return this.enableStats; + } + + protected Block disableStats() { + this.enableStats = false; + return this; + } + + public int getMobilityFlag() { + return this.blockMaterial.getMaterialMobility(); + } + + public float getAmbientOcclusionLightValue(IBlockAccess var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(var2, var3, var4) ? 0.2F : 1.0F; + } + + public void onFallenUpon(World var1, int var2, int var3, int var4, Entity var5, float var6) { + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return this.blockID; + } + + public int getDamageValue(World var1, int var2, int var3, int var4) { + return this.damageDropped(var1.getBlockMetadata(var2, var3, var4)); + } + + public void getSubBlocks(int var1, CreativeTabs var2, List var3) { + var3.add(new ItemStack(var1, 1, 0)); + } + + public CreativeTabs getCreativeTabToDisplayOn() { + return this.displayOnCreativeTab; + } + + public Block setCreativeTab(CreativeTabs var1) { + this.displayOnCreativeTab = var1; + return this; + } + + public void onBlockHarvested(World var1, int var2, int var3, int var4, int var5, EntityPlayer var6) { + } + + public void onSetBlockIDWithMetaData(World var1, int var2, int var3, int var4, int var5) { + } + + public void fillWithRain(World var1, int var2, int var3, int var4) { + } + + public boolean isFlowerPot() { + return false; + } + + public boolean func_82506_l() { + return true; + } + + public boolean canDropFromExplosion(Explosion var1) { + return true; + } + + public boolean isAssociatedBlockID(int var1) { + return this.blockID == var1; + } + + public static boolean isAssociatedBlockID(int var0, int var1) { + return var0 == var1 ? true : (var0 != 0 && var1 != 0 && blocksList[var0] != null && blocksList[var1] != null ? blocksList[var0].isAssociatedBlockID(var1) : false); + } + + public boolean hasComparatorInputOverride() { + return false; + } + + public int getComparatorInputOverride(World var1, int var2, int var3, int var4, int var5) { + return 0; + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon(this.unlocalizedName); + } + + public String getItemIconName() { + return null; + } + + static { + Item.itemsList[cloth.blockID] = (new ItemCloth(cloth.blockID - 256)).setUnlocalizedName("cloth"); + Item.itemsList[wood.blockID] = (new ItemMultiTextureTile(wood.blockID - 256, wood, BlockLog.woodType)).setUnlocalizedName("log"); + Item.itemsList[planks.blockID] = (new ItemMultiTextureTile(planks.blockID - 256, planks, BlockWood.woodType)).setUnlocalizedName("wood"); + Item.itemsList[silverfish.blockID] = (new ItemMultiTextureTile(silverfish.blockID - 256, silverfish, BlockSilverfish.silverfishStoneTypes)).setUnlocalizedName("monsterStoneEgg"); + Item.itemsList[stoneBrick.blockID] = (new ItemMultiTextureTile(stoneBrick.blockID - 256, stoneBrick, BlockStoneBrick.STONE_BRICK_TYPES)).setUnlocalizedName("stonebricksmooth"); + Item.itemsList[sandStone.blockID] = (new ItemMultiTextureTile(sandStone.blockID - 256, sandStone, BlockSandStone.SAND_STONE_TYPES)).setUnlocalizedName("sandStone"); + Item.itemsList[blockNetherQuartz.blockID] = (new ItemMultiTextureTile(blockNetherQuartz.blockID - 256, blockNetherQuartz, BlockQuartz.quartzBlockTypes)).setUnlocalizedName("quartzBlock"); + Item.itemsList[stoneSingleSlab.blockID] = (new ItemSlab(stoneSingleSlab.blockID - 256, stoneSingleSlab, stoneDoubleSlab, false)).setUnlocalizedName("stoneSlab"); + Item.itemsList[stoneDoubleSlab.blockID] = (new ItemSlab(stoneDoubleSlab.blockID - 256, stoneSingleSlab, stoneDoubleSlab, true)).setUnlocalizedName("stoneSlab"); + Item.itemsList[woodSingleSlab.blockID] = (new ItemSlab(woodSingleSlab.blockID - 256, woodSingleSlab, woodDoubleSlab, false)).setUnlocalizedName("woodSlab"); + Item.itemsList[woodDoubleSlab.blockID] = (new ItemSlab(woodDoubleSlab.blockID - 256, woodSingleSlab, woodDoubleSlab, true)).setUnlocalizedName("woodSlab"); + Item.itemsList[sapling.blockID] = (new ItemMultiTextureTile(sapling.blockID - 256, sapling, BlockSapling.WOOD_TYPES)).setUnlocalizedName("sapling"); + Item.itemsList[leaves.blockID] = (new ItemLeaves(leaves.blockID - 256)).setUnlocalizedName("leaves"); + Item.itemsList[vine.blockID] = new ItemColored(vine.blockID - 256, false); + Item.itemsList[tallGrass.blockID] = (new ItemColored(tallGrass.blockID - 256, true)).setBlockNames(new String[]{"shrub", "grass", "fern"}); + Item.itemsList[snow.blockID] = new ItemSnow(snow.blockID - 256, snow); + Item.itemsList[waterlily.blockID] = new ItemLilyPad(waterlily.blockID - 256); + Item.itemsList[pistonBase.blockID] = new ItemPiston(pistonBase.blockID - 256); + Item.itemsList[pistonStickyBase.blockID] = new ItemPiston(pistonStickyBase.blockID - 256); + Item.itemsList[cobblestoneWall.blockID] = (new ItemMultiTextureTile(cobblestoneWall.blockID - 256, cobblestoneWall, BlockWall.types)).setUnlocalizedName("cobbleWall"); + Item.itemsList[anvil.blockID] = (new ItemAnvilBlock(anvil)).setUnlocalizedName("anvil"); + + for(int var0 = 0; var0 < 256; ++var0) { + if(blocksList[var0] != null) { + if(Item.itemsList[var0] == null) { + Item.itemsList[var0] = new ItemBlock(var0 - 256); + blocksList[var0].initializeBlock(); + } + + boolean var1 = false; + if(var0 > 0 && blocksList[var0].getRenderType() == 10) { + var1 = true; + } + + if(var0 > 0 && blocksList[var0] instanceof BlockHalfSlab) { + var1 = true; + } + + if(var0 == tilledField.blockID) { + var1 = true; + } + + if(canBlockGrass[var0]) { + var1 = true; + } + + if(lightOpacity[var0] == 0) { + var1 = true; + } + + useNeighborBrightness[var0] = var1; + } + } + + canBlockGrass[0] = true; + StatList.initBreakableStats(); + } +} diff --git a/src/net/minecraft/src/BlockAnvil.java b/src/net/minecraft/src/BlockAnvil.java new file mode 100644 index 0000000..9054cce --- /dev/null +++ b/src/net/minecraft/src/BlockAnvil.java @@ -0,0 +1,111 @@ +package net.minecraft.src; + +import java.util.List; + +public class BlockAnvil extends BlockSand { + public static final String[] statuses = new String[]{"intact", "slightlyDamaged", "veryDamaged"}; + private static final String[] anvilIconNames = new String[]{"anvil_top", "anvil_top_damaged_1", "anvil_top_damaged_2"}; + public int field_82521_b = 0; + private Icon[] iconArray; + + protected BlockAnvil(int var1) { + super(var1, Material.anvil); + this.setLightOpacity(0); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public Icon getIcon(int var1, int var2) { + if(this.field_82521_b == 3 && var1 == 1) { + int var3 = (var2 >> 2) % this.iconArray.length; + return this.iconArray[var3]; + } else { + return this.blockIcon; + } + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("anvil_base"); + this.iconArray = new Icon[anvilIconNames.length]; + + for(int var2 = 0; var2 < this.iconArray.length; ++var2) { + this.iconArray[var2] = var1.registerIcon(anvilIconNames[var2]); + } + + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + int var7 = MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int var8 = var1.getBlockMetadata(var2, var3, var4) >> 2; + ++var7; + var7 %= 4; + if(var7 == 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 2 | var8 << 2, 2); + } + + if(var7 == 1) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 3 | var8 << 2, 2); + } + + if(var7 == 2) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 0 | var8 << 2, 2); + } + + if(var7 == 3) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 1 | var8 << 2, 2); + } + + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(var1.isRemote) { + return true; + } else { + var5.displayGUIAnvil(var2, var3, var4); + return true; + } + } + + public int getRenderType() { + return 35; + } + + public int damageDropped(int var1) { + return var1 >> 2; + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4) & 3; + if(var5 != 3 && var5 != 1) { + this.setBlockBounds(2.0F / 16.0F, 0.0F, 0.0F, 14.0F / 16.0F, 1.0F, 1.0F); + } else { + this.setBlockBounds(0.0F, 0.0F, 2.0F / 16.0F, 1.0F, 1.0F, 14.0F / 16.0F); + } + + } + + public void getSubBlocks(int var1, CreativeTabs var2, List var3) { + var3.add(new ItemStack(var1, 1, 0)); + var3.add(new ItemStack(var1, 1, 1)); + var3.add(new ItemStack(var1, 1, 2)); + } + + protected void onStartFalling(EntityFallingSand var1) { + var1.setIsAnvil(true); + } + + public void onFinishFalling(World var1, int var2, int var3, int var4, int var5) { + var1.playAuxSFX(1022, var2, var3, var4, 0); + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return true; + } +} diff --git a/src/net/minecraft/src/BlockBasePressurePlate.java b/src/net/minecraft/src/BlockBasePressurePlate.java new file mode 100644 index 0000000..c1485fc --- /dev/null +++ b/src/net/minecraft/src/BlockBasePressurePlate.java @@ -0,0 +1,160 @@ +package net.minecraft.src; + +import java.util.Random; + +public abstract class BlockBasePressurePlate extends Block { + private String pressurePlateIconName; + + protected BlockBasePressurePlate(int var1, String var2, Material var3) { + super(var1, var3); + this.pressurePlateIconName = var2; + this.setCreativeTab(CreativeTabs.tabRedstone); + this.setTickRandomly(true); + this.func_94353_c_(this.getMetaFromWeight(15)); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + this.func_94353_c_(var1.getBlockMetadata(var2, var3, var4)); + } + + protected void func_94353_c_(int var1) { + boolean var2 = this.getPowerSupply(var1) > 0; + float var3 = 1.0F / 16.0F; + if(var2) { + this.setBlockBounds(var3, 0.0F, var3, 1.0F - var3, 0.03125F, 1.0F - var3); + } else { + this.setBlockBounds(var3, 0.0F, var3, 1.0F - var3, 1.0F / 16.0F, 1.0F - var3); + } + + } + + public int tickRate(World var1) { + return 20; + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean getBlocksMovement(IBlockAccess var1, int var2, int var3, int var4) { + return true; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) || BlockFence.isIdAFence(var1.getBlockId(var2, var3 - 1, var4)); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + boolean var6 = false; + if(!var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) && !BlockFence.isIdAFence(var1.getBlockId(var2, var3 - 1, var4))) { + var6 = true; + } + + if(var6) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + } + + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.isRemote) { + int var6 = this.getPowerSupply(var1.getBlockMetadata(var2, var3, var4)); + if(var6 > 0) { + this.setStateIfMobInteractsWithPlate(var1, var2, var3, var4, var6); + } + + } + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + if(!var1.isRemote) { + int var6 = this.getPowerSupply(var1.getBlockMetadata(var2, var3, var4)); + if(var6 == 0) { + this.setStateIfMobInteractsWithPlate(var1, var2, var3, var4, var6); + } + + } + } + + protected void setStateIfMobInteractsWithPlate(World var1, int var2, int var3, int var4, int var5) { + int var6 = this.getPlateState(var1, var2, var3, var4); + boolean var7 = var5 > 0; + boolean var8 = var6 > 0; + if(var5 != var6) { + var1.setBlockMetadataWithNotify(var2, var3, var4, this.getMetaFromWeight(var6), 2); + this.func_94354_b_(var1, var2, var3, var4); + var1.markBlockRangeForRenderUpdate(var2, var3, var4, var2, var3, var4); + } + + if(!var8 && var7) { + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.1D, (double)var4 + 0.5D, "random.click", 0.3F, 0.5F); + } else if(var8 && !var7) { + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.1D, (double)var4 + 0.5D, "random.click", 0.3F, 0.6F); + } + + if(var8) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1)); + } + + } + + protected AxisAlignedBB getSensitiveAABB(int var1, int var2, int var3) { + float var4 = 2.0F / 16.0F; + return AxisAlignedBB.getAABBPool().getAABB((double)((float)var1 + var4), (double)var2, (double)((float)var3 + var4), (double)((float)(var1 + 1) - var4), (double)var2 + 0.25D, (double)((float)(var3 + 1) - var4)); + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + if(this.getPowerSupply(var6) > 0) { + this.func_94354_b_(var1, var2, var3, var4); + } + + super.breakBlock(var1, var2, var3, var4, var5, var6); + } + + protected void func_94354_b_(World var1, int var2, int var3, int var4) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + } + + public int isProvidingWeakPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return this.getPowerSupply(var1.getBlockMetadata(var2, var3, var4)); + } + + public int isProvidingStrongPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return var5 == 1 ? this.getPowerSupply(var1.getBlockMetadata(var2, var3, var4)) : 0; + } + + public boolean canProvidePower() { + return true; + } + + public void setBlockBoundsForItemRender() { + float var1 = 0.5F; + float var2 = 2.0F / 16.0F; + float var3 = 0.5F; + this.setBlockBounds(0.5F - var1, 0.5F - var2, 0.5F - var3, 0.5F + var1, 0.5F + var2, 0.5F + var3); + } + + public int getMobilityFlag() { + return 1; + } + + protected abstract int getPlateState(World var1, int var2, int var3, int var4); + + protected abstract int getPowerSupply(int var1); + + protected abstract int getMetaFromWeight(int var1); + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon(this.pressurePlateIconName); + } +} diff --git a/src/net/minecraft/src/BlockBaseRailLogic.java b/src/net/minecraft/src/BlockBaseRailLogic.java new file mode 100644 index 0000000..0c88145 --- /dev/null +++ b/src/net/minecraft/src/BlockBaseRailLogic.java @@ -0,0 +1,335 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class BlockBaseRailLogic { + private World logicWorld; + private int railX; + private int railY; + private int railZ; + private final boolean isStraightRail; + private List railChunkPosition; + final BlockRailBase theRail; + + public BlockBaseRailLogic(BlockRailBase var1, World var2, int var3, int var4, int var5) { + this.theRail = var1; + this.railChunkPosition = new ArrayList(); + this.logicWorld = var2; + this.railX = var3; + this.railY = var4; + this.railZ = var5; + int var6 = var2.getBlockId(var3, var4, var5); + int var7 = var2.getBlockMetadata(var3, var4, var5); + if(((BlockRailBase)Block.blocksList[var6]).isPowered) { + this.isStraightRail = true; + var7 &= -9; + } else { + this.isStraightRail = false; + } + + this.setBasicRail(var7); + } + + private void setBasicRail(int var1) { + this.railChunkPosition.clear(); + if(var1 == 0) { + this.railChunkPosition.add(new ChunkPosition(this.railX, this.railY, this.railZ - 1)); + this.railChunkPosition.add(new ChunkPosition(this.railX, this.railY, this.railZ + 1)); + } else if(var1 == 1) { + this.railChunkPosition.add(new ChunkPosition(this.railX - 1, this.railY, this.railZ)); + this.railChunkPosition.add(new ChunkPosition(this.railX + 1, this.railY, this.railZ)); + } else if(var1 == 2) { + this.railChunkPosition.add(new ChunkPosition(this.railX - 1, this.railY, this.railZ)); + this.railChunkPosition.add(new ChunkPosition(this.railX + 1, this.railY + 1, this.railZ)); + } else if(var1 == 3) { + this.railChunkPosition.add(new ChunkPosition(this.railX - 1, this.railY + 1, this.railZ)); + this.railChunkPosition.add(new ChunkPosition(this.railX + 1, this.railY, this.railZ)); + } else if(var1 == 4) { + this.railChunkPosition.add(new ChunkPosition(this.railX, this.railY + 1, this.railZ - 1)); + this.railChunkPosition.add(new ChunkPosition(this.railX, this.railY, this.railZ + 1)); + } else if(var1 == 5) { + this.railChunkPosition.add(new ChunkPosition(this.railX, this.railY, this.railZ - 1)); + this.railChunkPosition.add(new ChunkPosition(this.railX, this.railY + 1, this.railZ + 1)); + } else if(var1 == 6) { + this.railChunkPosition.add(new ChunkPosition(this.railX + 1, this.railY, this.railZ)); + this.railChunkPosition.add(new ChunkPosition(this.railX, this.railY, this.railZ + 1)); + } else if(var1 == 7) { + this.railChunkPosition.add(new ChunkPosition(this.railX - 1, this.railY, this.railZ)); + this.railChunkPosition.add(new ChunkPosition(this.railX, this.railY, this.railZ + 1)); + } else if(var1 == 8) { + this.railChunkPosition.add(new ChunkPosition(this.railX - 1, this.railY, this.railZ)); + this.railChunkPosition.add(new ChunkPosition(this.railX, this.railY, this.railZ - 1)); + } else if(var1 == 9) { + this.railChunkPosition.add(new ChunkPosition(this.railX + 1, this.railY, this.railZ)); + this.railChunkPosition.add(new ChunkPosition(this.railX, this.railY, this.railZ - 1)); + } + + } + + private void refreshConnectedTracks() { + for(int var1 = 0; var1 < this.railChunkPosition.size(); ++var1) { + BlockBaseRailLogic var2 = this.getRailLogic((ChunkPosition)this.railChunkPosition.get(var1)); + if(var2 != null && var2.isRailChunkPositionCorrect(this)) { + this.railChunkPosition.set(var1, new ChunkPosition(var2.railX, var2.railY, var2.railZ)); + } else { + this.railChunkPosition.remove(var1--); + } + } + + } + + private boolean isMinecartTrack(int var1, int var2, int var3) { + return BlockRailBase.isRailBlockAt(this.logicWorld, var1, var2, var3) ? true : (BlockRailBase.isRailBlockAt(this.logicWorld, var1, var2 + 1, var3) ? true : BlockRailBase.isRailBlockAt(this.logicWorld, var1, var2 - 1, var3)); + } + + private BlockBaseRailLogic getRailLogic(ChunkPosition var1) { + return BlockRailBase.isRailBlockAt(this.logicWorld, var1.x, var1.y, var1.z) ? new BlockBaseRailLogic(this.theRail, this.logicWorld, var1.x, var1.y, var1.z) : (BlockRailBase.isRailBlockAt(this.logicWorld, var1.x, var1.y + 1, var1.z) ? new BlockBaseRailLogic(this.theRail, this.logicWorld, var1.x, var1.y + 1, var1.z) : (BlockRailBase.isRailBlockAt(this.logicWorld, var1.x, var1.y - 1, var1.z) ? new BlockBaseRailLogic(this.theRail, this.logicWorld, var1.x, var1.y - 1, var1.z) : null)); + } + + private boolean isRailChunkPositionCorrect(BlockBaseRailLogic var1) { + for(int var2 = 0; var2 < this.railChunkPosition.size(); ++var2) { + ChunkPosition var3 = (ChunkPosition)this.railChunkPosition.get(var2); + if(var3.x == var1.railX && var3.z == var1.railZ) { + return true; + } + } + + return false; + } + + private boolean isPartOfTrack(int var1, int var2, int var3) { + for(int var4 = 0; var4 < this.railChunkPosition.size(); ++var4) { + ChunkPosition var5 = (ChunkPosition)this.railChunkPosition.get(var4); + if(var5.x == var1 && var5.z == var3) { + return true; + } + } + + return false; + } + + protected int getNumberOfAdjacentTracks() { + int var1 = 0; + if(this.isMinecartTrack(this.railX, this.railY, this.railZ - 1)) { + ++var1; + } + + if(this.isMinecartTrack(this.railX, this.railY, this.railZ + 1)) { + ++var1; + } + + if(this.isMinecartTrack(this.railX - 1, this.railY, this.railZ)) { + ++var1; + } + + if(this.isMinecartTrack(this.railX + 1, this.railY, this.railZ)) { + ++var1; + } + + return var1; + } + + private boolean canConnectTo(BlockBaseRailLogic var1) { + return this.isRailChunkPositionCorrect(var1) ? true : (this.railChunkPosition.size() == 2 ? false : (this.railChunkPosition.isEmpty() ? true : true)); + } + + private void connectToNeighbor(BlockBaseRailLogic var1) { + this.railChunkPosition.add(new ChunkPosition(var1.railX, var1.railY, var1.railZ)); + boolean var2 = this.isPartOfTrack(this.railX, this.railY, this.railZ - 1); + boolean var3 = this.isPartOfTrack(this.railX, this.railY, this.railZ + 1); + boolean var4 = this.isPartOfTrack(this.railX - 1, this.railY, this.railZ); + boolean var5 = this.isPartOfTrack(this.railX + 1, this.railY, this.railZ); + byte var6 = -1; + if(var2 || var3) { + var6 = 0; + } + + if(var4 || var5) { + var6 = 1; + } + + if(!this.isStraightRail) { + if(var3 && var5 && !var2 && !var4) { + var6 = 6; + } + + if(var3 && var4 && !var2 && !var5) { + var6 = 7; + } + + if(var2 && var4 && !var3 && !var5) { + var6 = 8; + } + + if(var2 && var5 && !var3 && !var4) { + var6 = 9; + } + } + + if(var6 == 0) { + if(BlockRailBase.isRailBlockAt(this.logicWorld, this.railX, this.railY + 1, this.railZ - 1)) { + var6 = 4; + } + + if(BlockRailBase.isRailBlockAt(this.logicWorld, this.railX, this.railY + 1, this.railZ + 1)) { + var6 = 5; + } + } + + if(var6 == 1) { + if(BlockRailBase.isRailBlockAt(this.logicWorld, this.railX + 1, this.railY + 1, this.railZ)) { + var6 = 2; + } + + if(BlockRailBase.isRailBlockAt(this.logicWorld, this.railX - 1, this.railY + 1, this.railZ)) { + var6 = 3; + } + } + + if(var6 < 0) { + var6 = 0; + } + + int var7 = var6; + if(this.isStraightRail) { + var7 = this.logicWorld.getBlockMetadata(this.railX, this.railY, this.railZ) & 8 | var6; + } + + this.logicWorld.setBlockMetadataWithNotify(this.railX, this.railY, this.railZ, var7, 3); + } + + private boolean canConnectFrom(int var1, int var2, int var3) { + BlockBaseRailLogic var4 = this.getRailLogic(new ChunkPosition(var1, var2, var3)); + if(var4 == null) { + return false; + } else { + var4.refreshConnectedTracks(); + return var4.canConnectTo(this); + } + } + + public void func_94511_a(boolean var1, boolean var2) { + boolean var3 = this.canConnectFrom(this.railX, this.railY, this.railZ - 1); + boolean var4 = this.canConnectFrom(this.railX, this.railY, this.railZ + 1); + boolean var5 = this.canConnectFrom(this.railX - 1, this.railY, this.railZ); + boolean var6 = this.canConnectFrom(this.railX + 1, this.railY, this.railZ); + byte var7 = -1; + if((var3 || var4) && !var5 && !var6) { + var7 = 0; + } + + if((var5 || var6) && !var3 && !var4) { + var7 = 1; + } + + if(!this.isStraightRail) { + if(var4 && var6 && !var3 && !var5) { + var7 = 6; + } + + if(var4 && var5 && !var3 && !var6) { + var7 = 7; + } + + if(var3 && var5 && !var4 && !var6) { + var7 = 8; + } + + if(var3 && var6 && !var4 && !var5) { + var7 = 9; + } + } + + if(var7 == -1) { + if(var3 || var4) { + var7 = 0; + } + + if(var5 || var6) { + var7 = 1; + } + + if(!this.isStraightRail) { + if(var1) { + if(var4 && var6) { + var7 = 6; + } + + if(var5 && var4) { + var7 = 7; + } + + if(var6 && var3) { + var7 = 9; + } + + if(var3 && var5) { + var7 = 8; + } + } else { + if(var3 && var5) { + var7 = 8; + } + + if(var6 && var3) { + var7 = 9; + } + + if(var5 && var4) { + var7 = 7; + } + + if(var4 && var6) { + var7 = 6; + } + } + } + } + + if(var7 == 0) { + if(BlockRailBase.isRailBlockAt(this.logicWorld, this.railX, this.railY + 1, this.railZ - 1)) { + var7 = 4; + } + + if(BlockRailBase.isRailBlockAt(this.logicWorld, this.railX, this.railY + 1, this.railZ + 1)) { + var7 = 5; + } + } + + if(var7 == 1) { + if(BlockRailBase.isRailBlockAt(this.logicWorld, this.railX + 1, this.railY + 1, this.railZ)) { + var7 = 2; + } + + if(BlockRailBase.isRailBlockAt(this.logicWorld, this.railX - 1, this.railY + 1, this.railZ)) { + var7 = 3; + } + } + + if(var7 < 0) { + var7 = 0; + } + + this.setBasicRail(var7); + int var8 = var7; + if(this.isStraightRail) { + var8 = this.logicWorld.getBlockMetadata(this.railX, this.railY, this.railZ) & 8 | var7; + } + + if(var2 || this.logicWorld.getBlockMetadata(this.railX, this.railY, this.railZ) != var8) { + this.logicWorld.setBlockMetadataWithNotify(this.railX, this.railY, this.railZ, var8, 3); + + for(int var9 = 0; var9 < this.railChunkPosition.size(); ++var9) { + BlockBaseRailLogic var10 = this.getRailLogic((ChunkPosition)this.railChunkPosition.get(var9)); + if(var10 != null) { + var10.refreshConnectedTracks(); + if(var10.canConnectTo(this)) { + var10.connectToNeighbor(this); + } + } + } + } + + } +} diff --git a/src/net/minecraft/src/BlockBeacon.java b/src/net/minecraft/src/BlockBeacon.java new file mode 100644 index 0000000..97a25ff --- /dev/null +++ b/src/net/minecraft/src/BlockBeacon.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +public class BlockBeacon extends BlockContainer { + private Icon theIcon; + + public BlockBeacon(int var1) { + super(var1, Material.glass); + this.setHardness(3.0F); + this.setCreativeTab(CreativeTabs.tabMisc); + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntityBeacon(); + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(var1.isRemote) { + return true; + } else { + TileEntityBeacon var10 = (TileEntityBeacon)var1.getBlockTileEntity(var2, var3, var4); + if(var10 != null) { + var5.displayGUIBeacon(var10); + } + + return true; + } + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 34; + } + + public void registerIcons(IconRegister var1) { + super.registerIcons(var1); + this.theIcon = var1.registerIcon("beacon"); + } + + public Icon getBeaconIcon() { + return this.theIcon; + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + super.onBlockPlacedBy(var1, var2, var3, var4, var5, var6); + if(var6.hasDisplayName()) { + ((TileEntityBeacon)var1.getBlockTileEntity(var2, var3, var4)).func_94047_a(var6.getDisplayName()); + } + + } +} diff --git a/src/net/minecraft/src/BlockBed.java b/src/net/minecraft/src/BlockBed.java new file mode 100644 index 0000000..7f21c8c --- /dev/null +++ b/src/net/minecraft/src/BlockBed.java @@ -0,0 +1,218 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.Random; + +public class BlockBed extends BlockDirectional { + public static final int[][] footBlockToHeadBlockMap = new int[][]{{0, 1}, {-1, 0}, {0, -1}, {1, 0}}; + private Icon[] field_94472_b; + private Icon[] bedSideIcons; + private Icon[] bedTopIcons; + + public BlockBed(int var1) { + super(var1, Material.cloth); + this.setBounds(); + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(var1.isRemote) { + return true; + } else { + int var10 = var1.getBlockMetadata(var2, var3, var4); + if(!isBlockHeadOfBed(var10)) { + int var11 = getDirection(var10); + var2 += footBlockToHeadBlockMap[var11][0]; + var4 += footBlockToHeadBlockMap[var11][1]; + if(var1.getBlockId(var2, var3, var4) != this.blockID) { + return true; + } + + var10 = var1.getBlockMetadata(var2, var3, var4); + } + + if(var1.provider.canRespawnHere() && var1.getBiomeGenForCoords(var2, var4) != BiomeGenBase.hell) { + if(isBedOccupied(var10)) { + EntityPlayer var19 = null; + Iterator var12 = var1.playerEntities.iterator(); + + while(var12.hasNext()) { + EntityPlayer var21 = (EntityPlayer)var12.next(); + if(var21.isPlayerSleeping()) { + ChunkCoordinates var14 = var21.playerLocation; + if(var14.posX == var2 && var14.posY == var3 && var14.posZ == var4) { + var19 = var21; + } + } + } + + if(var19 != null) { + var5.addChatMessage("tile.bed.occupied"); + return true; + } + + setBedOccupied(var1, var2, var3, var4, false); + } + + EnumStatus var20 = var5.sleepInBedAt(var2, var3, var4); + if(var20 == EnumStatus.OK) { + setBedOccupied(var1, var2, var3, var4, true); + return true; + } else { + if(var20 == EnumStatus.NOT_POSSIBLE_NOW) { + var5.addChatMessage("tile.bed.noSleep"); + } else if(var20 == EnumStatus.NOT_SAFE) { + var5.addChatMessage("tile.bed.notSafe"); + } + + return true; + } + } else { + double var18 = (double)var2 + 0.5D; + double var13 = (double)var3 + 0.5D; + double var15 = (double)var4 + 0.5D; + var1.setBlockToAir(var2, var3, var4); + int var17 = getDirection(var10); + var2 += footBlockToHeadBlockMap[var17][0]; + var4 += footBlockToHeadBlockMap[var17][1]; + if(var1.getBlockId(var2, var3, var4) == this.blockID) { + var1.setBlockToAir(var2, var3, var4); + var18 = (var18 + (double)var2 + 0.5D) / 2.0D; + var13 = (var13 + (double)var3 + 0.5D) / 2.0D; + var15 = (var15 + (double)var4 + 0.5D) / 2.0D; + } + + var1.newExplosion((Entity)null, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), 5.0F, true, true); + return true; + } + } + } + + public Icon getIcon(int var1, int var2) { + if(var1 == 0) { + return Block.planks.getBlockTextureFromSide(var1); + } else { + int var3 = getDirection(var2); + int var4 = Direction.bedDirection[var3][var1]; + int var5 = isBlockHeadOfBed(var2) ? 1 : 0; + return (var5 != 1 || var4 != 2) && (var5 != 0 || var4 != 3) ? (var4 != 5 && var4 != 4 ? this.bedTopIcons[var5] : this.bedSideIcons[var5]) : this.field_94472_b[var5]; + } + } + + public void registerIcons(IconRegister var1) { + this.bedTopIcons = new Icon[]{var1.registerIcon("bed_feet_top"), var1.registerIcon("bed_head_top")}; + this.field_94472_b = new Icon[]{var1.registerIcon("bed_feet_end"), var1.registerIcon("bed_head_end")}; + this.bedSideIcons = new Icon[]{var1.registerIcon("bed_feet_side"), var1.registerIcon("bed_head_side")}; + } + + public int getRenderType() { + return 14; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + this.setBounds(); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = getDirection(var6); + if(isBlockHeadOfBed(var6)) { + if(var1.getBlockId(var2 - footBlockToHeadBlockMap[var7][0], var3, var4 - footBlockToHeadBlockMap[var7][1]) != this.blockID) { + var1.setBlockToAir(var2, var3, var4); + } + } else if(var1.getBlockId(var2 + footBlockToHeadBlockMap[var7][0], var3, var4 + footBlockToHeadBlockMap[var7][1]) != this.blockID) { + var1.setBlockToAir(var2, var3, var4); + if(!var1.isRemote) { + this.dropBlockAsItem(var1, var2, var3, var4, var6, 0); + } + } + + } + + public int idDropped(int var1, Random var2, int var3) { + return isBlockHeadOfBed(var1) ? 0 : Item.bed.itemID; + } + + private void setBounds() { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 9.0F / 16.0F, 1.0F); + } + + public static boolean isBlockHeadOfBed(int var0) { + return (var0 & 8) != 0; + } + + public static boolean isBedOccupied(int var0) { + return (var0 & 4) != 0; + } + + public static void setBedOccupied(World var0, int var1, int var2, int var3, boolean var4) { + int var5 = var0.getBlockMetadata(var1, var2, var3); + if(var4) { + var5 |= 4; + } else { + var5 &= -5; + } + + var0.setBlockMetadataWithNotify(var1, var2, var3, var5, 4); + } + + public static ChunkCoordinates getNearestEmptyChunkCoordinates(World var0, int var1, int var2, int var3, int var4) { + int var5 = var0.getBlockMetadata(var1, var2, var3); + int var6 = BlockDirectional.getDirection(var5); + + for(int var7 = 0; var7 <= 1; ++var7) { + int var8 = var1 - footBlockToHeadBlockMap[var6][0] * var7 - 1; + int var9 = var3 - footBlockToHeadBlockMap[var6][1] * var7 - 1; + int var10 = var8 + 2; + int var11 = var9 + 2; + + for(int var12 = var8; var12 <= var10; ++var12) { + for(int var13 = var9; var13 <= var11; ++var13) { + if(var0.doesBlockHaveSolidTopSurface(var12, var2 - 1, var13) && var0.isAirBlock(var12, var2, var13) && var0.isAirBlock(var12, var2 + 1, var13)) { + if(var4 <= 0) { + return new ChunkCoordinates(var12, var2, var13); + } + + --var4; + } + } + } + } + + return null; + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + if(!isBlockHeadOfBed(var5)) { + super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6, 0); + } + + } + + public int getMobilityFlag() { + return 1; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Item.bed.itemID; + } + + public void onBlockHarvested(World var1, int var2, int var3, int var4, int var5, EntityPlayer var6) { + if(var6.capabilities.isCreativeMode && isBlockHeadOfBed(var5)) { + int var7 = getDirection(var5); + var2 -= footBlockToHeadBlockMap[var7][0]; + var4 -= footBlockToHeadBlockMap[var7][1]; + if(var1.getBlockId(var2, var3, var4) == this.blockID) { + var1.setBlockToAir(var2, var3, var4); + } + } + + } +} diff --git a/src/net/minecraft/src/BlockBookshelf.java b/src/net/minecraft/src/BlockBookshelf.java new file mode 100644 index 0000000..6ac4849 --- /dev/null +++ b/src/net/minecraft/src/BlockBookshelf.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockBookshelf extends Block { + public BlockBookshelf(int var1) { + super(var1, Material.wood); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public Icon getIcon(int var1, int var2) { + return var1 != 1 && var1 != 0 ? super.getIcon(var1, var2) : Block.planks.getBlockTextureFromSide(var1); + } + + public int quantityDropped(Random var1) { + return 3; + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.book.itemID; + } +} diff --git a/src/net/minecraft/src/BlockBreakable.java b/src/net/minecraft/src/BlockBreakable.java new file mode 100644 index 0000000..8798828 --- /dev/null +++ b/src/net/minecraft/src/BlockBreakable.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class BlockBreakable extends Block { + private boolean localFlag; + private String breakableBlockIcon; + + protected BlockBreakable(int var1, String var2, Material var3, boolean var4) { + super(var1, var3); + this.localFlag = var4; + this.breakableBlockIcon = var2; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockId(var2, var3, var4); + return !this.localFlag && var6 == this.blockID ? false : super.shouldSideBeRendered(var1, var2, var3, var4, var5); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon(this.breakableBlockIcon); + } +} diff --git a/src/net/minecraft/src/BlockBrewingStand.java b/src/net/minecraft/src/BlockBrewingStand.java new file mode 100644 index 0000000..6e15949 --- /dev/null +++ b/src/net/minecraft/src/BlockBrewingStand.java @@ -0,0 +1,125 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockBrewingStand extends BlockContainer { + private Random rand = new Random(); + private Icon theIcon; + + public BlockBrewingStand(int var1) { + super(var1, Material.iron); + } + + public boolean isOpaqueCube() { + return false; + } + + public int getRenderType() { + return 25; + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntityBrewingStand(); + } + + public boolean renderAsNormalBlock() { + return false; + } + + public void addCollisionBoxesToList(World var1, int var2, int var3, int var4, AxisAlignedBB var5, List var6, Entity var7) { + this.setBlockBounds(7.0F / 16.0F, 0.0F, 7.0F / 16.0F, 9.0F / 16.0F, 14.0F / 16.0F, 9.0F / 16.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + this.setBlockBoundsForItemRender(); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + } + + public void setBlockBoundsForItemRender() { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F); + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(var1.isRemote) { + return true; + } else { + TileEntityBrewingStand var10 = (TileEntityBrewingStand)var1.getBlockTileEntity(var2, var3, var4); + if(var10 != null) { + var5.displayGUIBrewingStand(var10); + } + + return true; + } + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + if(var6.hasDisplayName()) { + ((TileEntityBrewingStand)var1.getBlockTileEntity(var2, var3, var4)).func_94131_a(var6.getDisplayName()); + } + + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + double var6 = (double)((float)var2 + 0.4F + var5.nextFloat() * 0.2F); + double var8 = (double)((float)var3 + 0.7F + var5.nextFloat() * 0.3F); + double var10 = (double)((float)var4 + 0.4F + var5.nextFloat() * 0.2F); + var1.spawnParticle("smoke", var6, var8, var10, 0.0D, 0.0D, 0.0D); + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + TileEntity var7 = var1.getBlockTileEntity(var2, var3, var4); + if(var7 instanceof TileEntityBrewingStand) { + TileEntityBrewingStand var8 = (TileEntityBrewingStand)var7; + + for(int var9 = 0; var9 < var8.getSizeInventory(); ++var9) { + ItemStack var10 = var8.getStackInSlot(var9); + if(var10 != null) { + float var11 = this.rand.nextFloat() * 0.8F + 0.1F; + float var12 = this.rand.nextFloat() * 0.8F + 0.1F; + float var13 = this.rand.nextFloat() * 0.8F + 0.1F; + + while(var10.stackSize > 0) { + int var14 = this.rand.nextInt(21) + 10; + if(var14 > var10.stackSize) { + var14 = var10.stackSize; + } + + var10.stackSize -= var14; + EntityItem var15 = new EntityItem(var1, (double)((float)var2 + var11), (double)((float)var3 + var12), (double)((float)var4 + var13), new ItemStack(var10.itemID, var14, var10.getItemDamage())); + float var16 = 0.05F; + var15.motionX = (double)((float)this.rand.nextGaussian() * var16); + var15.motionY = (double)((float)this.rand.nextGaussian() * var16 + 0.2F); + var15.motionZ = (double)((float)this.rand.nextGaussian() * var16); + var1.spawnEntityInWorld(var15); + } + } + } + } + + super.breakBlock(var1, var2, var3, var4, var5, var6); + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.brewingStand.itemID; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Item.brewingStand.itemID; + } + + public boolean hasComparatorInputOverride() { + return true; + } + + public int getComparatorInputOverride(World var1, int var2, int var3, int var4, int var5) { + return Container.calcRedstoneFromInventory((IInventory)var1.getBlockTileEntity(var2, var3, var4)); + } + + public void registerIcons(IconRegister var1) { + super.registerIcons(var1); + this.theIcon = var1.registerIcon("brewingStand_base"); + } + + public Icon getBrewingStandIcon() { + return this.theIcon; + } +} diff --git a/src/net/minecraft/src/BlockButton.java b/src/net/minecraft/src/BlockButton.java new file mode 100644 index 0000000..e206720 --- /dev/null +++ b/src/net/minecraft/src/BlockButton.java @@ -0,0 +1,255 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public abstract class BlockButton extends Block { + private final boolean sensible; + + protected BlockButton(int var1, boolean var2) { + super(var1, Material.circuits); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.tabRedstone); + this.sensible = var2; + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public int tickRate(World var1) { + return this.sensible ? 30 : 20; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) { + return var5 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1) ? true : (var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : (var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4))); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(var2 - 1, var3, var4) ? true : (var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : (var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : var1.isBlockNormalCube(var2, var3, var4 + 1))); + } + + public int onBlockPlaced(World var1, int var2, int var3, int var4, int var5, float var6, float var7, float var8, int var9) { + int var10 = var1.getBlockMetadata(var2, var3, var4); + int var11 = var10 & 8; + var10 &= 7; + if(var5 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var10 = 4; + } else if(var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var10 = 3; + } else if(var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var10 = 2; + } else if(var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var10 = 1; + } else { + var10 = this.getOrientation(var1, var2, var3, var4); + } + + return var10 + var11; + } + + private int getOrientation(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(var2 - 1, var3, var4) ? 1 : (var1.isBlockNormalCube(var2 + 1, var3, var4) ? 2 : (var1.isBlockNormalCube(var2, var3, var4 - 1) ? 3 : (var1.isBlockNormalCube(var2, var3, var4 + 1) ? 4 : 1))); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(this.redundantCanPlaceBlockAt(var1, var2, var3, var4)) { + int var6 = var1.getBlockMetadata(var2, var3, var4) & 7; + boolean var7 = false; + if(!var1.isBlockNormalCube(var2 - 1, var3, var4) && var6 == 1) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2 + 1, var3, var4) && var6 == 2) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3, var4 - 1) && var6 == 3) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3, var4 + 1) && var6 == 4) { + var7 = true; + } + + if(var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + } + } + + } + + private boolean redundantCanPlaceBlockAt(World var1, int var2, int var3, int var4) { + if(!this.canPlaceBlockAt(var1, var2, var3, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + return false; + } else { + return true; + } + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + this.func_82534_e(var5); + } + + private void func_82534_e(int var1) { + int var2 = var1 & 7; + boolean var3 = (var1 & 8) > 0; + float var4 = 6.0F / 16.0F; + float var5 = 10.0F / 16.0F; + float var6 = 3.0F / 16.0F; + float var7 = 2.0F / 16.0F; + if(var3) { + var7 = 1.0F / 16.0F; + } + + if(var2 == 1) { + this.setBlockBounds(0.0F, var4, 0.5F - var6, var7, var5, 0.5F + var6); + } else if(var2 == 2) { + this.setBlockBounds(1.0F - var7, var4, 0.5F - var6, 1.0F, var5, 0.5F + var6); + } else if(var2 == 3) { + this.setBlockBounds(0.5F - var6, var4, 0.0F, 0.5F + var6, var5, var7); + } else if(var2 == 4) { + this.setBlockBounds(0.5F - var6, var4, 1.0F - var7, 0.5F + var6, var5, 1.0F); + } + + } + + public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + int var10 = var1.getBlockMetadata(var2, var3, var4); + int var11 = var10 & 7; + int var12 = 8 - (var10 & 8); + if(var12 == 0) { + return true; + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, var11 + var12, 3); + var1.markBlockRangeForRenderUpdate(var2, var3, var4, var2, var3, var4); + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.click", 0.3F, 0.6F); + this.func_82536_d(var1, var2, var3, var4, var11); + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1)); + return true; + } + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + if((var6 & 8) > 0) { + int var7 = var6 & 7; + this.func_82536_d(var1, var2, var3, var4, var7); + } + + super.breakBlock(var1, var2, var3, var4, var5, var6); + } + + public int isProvidingWeakPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return (var1.getBlockMetadata(var2, var3, var4) & 8) > 0 ? 15 : 0; + } + + public int isProvidingStrongPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) == 0) { + return 0; + } else { + int var7 = var6 & 7; + return var7 == 5 && var5 == 1 ? 15 : (var7 == 4 && var5 == 2 ? 15 : (var7 == 3 && var5 == 3 ? 15 : (var7 == 2 && var5 == 4 ? 15 : (var7 == 1 && var5 == 5 ? 15 : 0)))); + } + } + + public boolean canProvidePower() { + return true; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.isRemote) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) != 0) { + if(this.sensible) { + this.func_82535_o(var1, var2, var3, var4); + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 & 7, 3); + int var7 = var6 & 7; + this.func_82536_d(var1, var2, var3, var4, var7); + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.click", 0.3F, 0.5F); + var1.markBlockRangeForRenderUpdate(var2, var3, var4, var2, var3, var4); + } + + } + } + } + + public void setBlockBoundsForItemRender() { + float var1 = 3.0F / 16.0F; + float var2 = 2.0F / 16.0F; + float var3 = 2.0F / 16.0F; + this.setBlockBounds(0.5F - var1, 0.5F - var2, 0.5F - var3, 0.5F + var1, 0.5F + var2, 0.5F + var3); + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + if(!var1.isRemote) { + if(this.sensible) { + if((var1.getBlockMetadata(var2, var3, var4) & 8) == 0) { + this.func_82535_o(var1, var2, var3, var4); + } + } + } + } + + private void func_82535_o(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + int var6 = var5 & 7; + boolean var7 = (var5 & 8) != 0; + this.func_82534_e(var5); + List var9 = var1.getEntitiesWithinAABB(EntityArrow.class, AxisAlignedBB.getAABBPool().getAABB((double)var2 + this.minX, (double)var3 + this.minY, (double)var4 + this.minZ, (double)var2 + this.maxX, (double)var3 + this.maxY, (double)var4 + this.maxZ)); + boolean var8 = !var9.isEmpty(); + if(var8 && !var7) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 | 8, 3); + this.func_82536_d(var1, var2, var3, var4, var6); + var1.markBlockRangeForRenderUpdate(var2, var3, var4, var2, var3, var4); + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.click", 0.3F, 0.6F); + } + + if(!var8 && var7) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6, 3); + this.func_82536_d(var1, var2, var3, var4, var6); + var1.markBlockRangeForRenderUpdate(var2, var3, var4, var2, var3, var4); + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.click", 0.3F, 0.5F); + } + + if(var8) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1)); + } + + } + + private void func_82536_d(World var1, int var2, int var3, int var4, int var5) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + if(var5 == 1) { + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + } else if(var5 == 2) { + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + } else if(var5 == 3) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + } else if(var5 == 4) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + } else { + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + } + + } + + public void registerIcons(IconRegister var1) { + } +} diff --git a/src/net/minecraft/src/BlockButtonStone.java b/src/net/minecraft/src/BlockButtonStone.java new file mode 100644 index 0000000..383fe2b --- /dev/null +++ b/src/net/minecraft/src/BlockButtonStone.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class BlockButtonStone extends BlockButton { + protected BlockButtonStone(int var1) { + super(var1, false); + } + + public Icon getIcon(int var1, int var2) { + return Block.stone.getBlockTextureFromSide(1); + } +} diff --git a/src/net/minecraft/src/BlockButtonWood.java b/src/net/minecraft/src/BlockButtonWood.java new file mode 100644 index 0000000..0962689 --- /dev/null +++ b/src/net/minecraft/src/BlockButtonWood.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class BlockButtonWood extends BlockButton { + protected BlockButtonWood(int var1) { + super(var1, true); + } + + public Icon getIcon(int var1, int var2) { + return Block.planks.getBlockTextureFromSide(1); + } +} diff --git a/src/net/minecraft/src/BlockCactus.java b/src/net/minecraft/src/BlockCactus.java new file mode 100644 index 0000000..73acefa --- /dev/null +++ b/src/net/minecraft/src/BlockCactus.java @@ -0,0 +1,96 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockCactus extends Block { + private Icon cactusTopIcon; + private Icon cactusBottomIcon; + + protected BlockCactus(int var1) { + super(var1, Material.cactus); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.isAirBlock(var2, var3 + 1, var4)) { + int var6; + for(var6 = 1; var1.getBlockId(var2, var3 - var6, var4) == this.blockID; ++var6) { + } + + if(var6 < 3) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + if(var7 == 15) { + var1.setBlock(var2, var3 + 1, var4, this.blockID); + var1.setBlockMetadataWithNotify(var2, var3, var4, 0, 4); + this.onNeighborBlockChange(var1, var2, var3 + 1, var4, this.blockID); + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, var7 + 1, 4); + } + } + } + + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + float var5 = 1.0F / 16.0F; + return AxisAlignedBB.getAABBPool().getAABB((double)((float)var2 + var5), (double)var3, (double)((float)var4 + var5), (double)((float)(var2 + 1) - var5), (double)((float)(var3 + 1) - var5), (double)((float)(var4 + 1) - var5)); + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + float var5 = 1.0F / 16.0F; + return AxisAlignedBB.getAABBPool().getAABB((double)((float)var2 + var5), (double)var3, (double)((float)var4 + var5), (double)((float)(var2 + 1) - var5), (double)(var3 + 1), (double)((float)(var4 + 1) - var5)); + } + + public Icon getIcon(int var1, int var2) { + return var1 == 1 ? this.cactusTopIcon : (var1 == 0 ? this.cactusBottomIcon : this.blockIcon); + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public int getRenderType() { + return 13; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return !super.canPlaceBlockAt(var1, var2, var3, var4) ? false : this.canBlockStay(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!this.canBlockStay(var1, var2, var3, var4)) { + var1.destroyBlock(var2, var3, var4, true); + } + + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + if(var1.getBlockMaterial(var2 - 1, var3, var4).isSolid()) { + return false; + } else if(var1.getBlockMaterial(var2 + 1, var3, var4).isSolid()) { + return false; + } else if(var1.getBlockMaterial(var2, var3, var4 - 1).isSolid()) { + return false; + } else if(var1.getBlockMaterial(var2, var3, var4 + 1).isSolid()) { + return false; + } else { + int var5 = var1.getBlockId(var2, var3 - 1, var4); + return var5 == Block.cactus.blockID || var5 == Block.sand.blockID; + } + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + var5.attackEntityFrom(DamageSource.cactus, 1); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("cactus_side"); + this.cactusTopIcon = var1.registerIcon("cactus_top"); + this.cactusBottomIcon = var1.registerIcon("cactus_bottom"); + } +} diff --git a/src/net/minecraft/src/BlockCake.java b/src/net/minecraft/src/BlockCake.java new file mode 100644 index 0000000..fd27a6e --- /dev/null +++ b/src/net/minecraft/src/BlockCake.java @@ -0,0 +1,112 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockCake extends Block { + private Icon cakeTopIcon; + private Icon cakeBottomIcon; + private Icon field_94382_c; + + protected BlockCake(int var1) { + super(var1, Material.cake); + this.setTickRandomly(true); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + float var6 = 1.0F / 16.0F; + float var7 = (float)(1 + var5 * 2) / 16.0F; + float var8 = 0.5F; + this.setBlockBounds(var7, 0.0F, var6, 1.0F - var6, var8, 1.0F - var6); + } + + public void setBlockBoundsForItemRender() { + float var1 = 1.0F / 16.0F; + float var2 = 0.5F; + this.setBlockBounds(var1, 0.0F, var1, 1.0F - var1, var2, 1.0F - var1); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + float var6 = 1.0F / 16.0F; + float var7 = (float)(1 + var5 * 2) / 16.0F; + float var8 = 0.5F; + return AxisAlignedBB.getAABBPool().getAABB((double)((float)var2 + var7), (double)var3, (double)((float)var4 + var6), (double)((float)(var2 + 1) - var6), (double)((float)var3 + var8 - var6), (double)((float)(var4 + 1) - var6)); + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + float var6 = 1.0F / 16.0F; + float var7 = (float)(1 + var5 * 2) / 16.0F; + float var8 = 0.5F; + return AxisAlignedBB.getAABBPool().getAABB((double)((float)var2 + var7), (double)var3, (double)((float)var4 + var6), (double)((float)(var2 + 1) - var6), (double)((float)var3 + var8), (double)((float)(var4 + 1) - var6)); + } + + public Icon getIcon(int var1, int var2) { + return var1 == 1 ? this.cakeTopIcon : (var1 == 0 ? this.cakeBottomIcon : (var2 > 0 && var1 == 4 ? this.field_94382_c : this.blockIcon)); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("cake_side"); + this.field_94382_c = var1.registerIcon("cake_inner"); + this.cakeTopIcon = var1.registerIcon("cake_top"); + this.cakeBottomIcon = var1.registerIcon("cake_bottom"); + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + this.eatCakeSlice(var1, var2, var3, var4, var5); + return true; + } + + public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + this.eatCakeSlice(var1, var2, var3, var4, var5); + } + + private void eatCakeSlice(World var1, int var2, int var3, int var4, EntityPlayer var5) { + if(var5.canEat(false)) { + var5.getFoodStats().addStats(2, 0.1F); + int var6 = var1.getBlockMetadata(var2, var3, var4) + 1; + if(var6 >= 6) { + var1.setBlockToAir(var2, var3, var4); + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6, 2); + } + } + + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return !super.canPlaceBlockAt(var1, var2, var3, var4) ? false : this.canBlockStay(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!this.canBlockStay(var1, var2, var3, var4)) { + var1.setBlockToAir(var2, var3, var4); + } + + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + return var1.getBlockMaterial(var2, var3 - 1, var4).isSolid(); + } + + public int quantityDropped(Random var1) { + return 0; + } + + public int idDropped(int var1, Random var2, int var3) { + return 0; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Item.cake.itemID; + } +} diff --git a/src/net/minecraft/src/BlockCarrot.java b/src/net/minecraft/src/BlockCarrot.java new file mode 100644 index 0000000..5fa7bb2 --- /dev/null +++ b/src/net/minecraft/src/BlockCarrot.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +public class BlockCarrot extends BlockCrops { + private Icon[] iconArray; + + public BlockCarrot(int var1) { + super(var1); + } + + public Icon getIcon(int var1, int var2) { + if(var2 < 7) { + if(var2 == 6) { + var2 = 5; + } + + return this.iconArray[var2 >> 1]; + } else { + return this.iconArray[3]; + } + } + + protected int getSeedItem() { + return Item.carrot.itemID; + } + + protected int getCropItem() { + return Item.carrot.itemID; + } + + public void registerIcons(IconRegister var1) { + this.iconArray = new Icon[4]; + + for(int var2 = 0; var2 < this.iconArray.length; ++var2) { + this.iconArray[var2] = var1.registerIcon("carrots_" + var2); + } + + } +} diff --git a/src/net/minecraft/src/BlockCauldron.java b/src/net/minecraft/src/BlockCauldron.java new file mode 100644 index 0000000..5f3fb7c --- /dev/null +++ b/src/net/minecraft/src/BlockCauldron.java @@ -0,0 +1,127 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockCauldron extends Block { + private Icon field_94378_a; + private Icon cauldronTopIcon; + private Icon cauldronBottomIcon; + + public BlockCauldron(int var1) { + super(var1, Material.iron); + } + + public Icon getIcon(int var1, int var2) { + return var1 == 1 ? this.cauldronTopIcon : (var1 == 0 ? this.cauldronBottomIcon : this.blockIcon); + } + + public void registerIcons(IconRegister var1) { + this.field_94378_a = var1.registerIcon("cauldron_inner"); + this.cauldronTopIcon = var1.registerIcon("cauldron_top"); + this.cauldronBottomIcon = var1.registerIcon("cauldron_bottom"); + this.blockIcon = var1.registerIcon("cauldron_side"); + } + + public static Icon func_94375_b(String var0) { + return var0 == "cauldron_inner" ? Block.cauldron.field_94378_a : (var0 == "cauldron_bottom" ? Block.cauldron.cauldronBottomIcon : null); + } + + public void addCollisionBoxesToList(World var1, int var2, int var3, int var4, AxisAlignedBB var5, List var6, Entity var7) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 5.0F / 16.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + float var8 = 2.0F / 16.0F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, var8, 1.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var8); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + this.setBlockBounds(1.0F - var8, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + this.setBlockBounds(0.0F, 0.0F, 1.0F - var8, 1.0F, 1.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + this.setBlockBoundsForItemRender(); + } + + public void setBlockBoundsForItemRender() { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public boolean isOpaqueCube() { + return false; + } + + public int getRenderType() { + return 24; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(var1.isRemote) { + return true; + } else { + ItemStack var10 = var5.inventory.getCurrentItem(); + if(var10 == null) { + return true; + } else { + int var11 = var1.getBlockMetadata(var2, var3, var4); + if(var10.itemID == Item.bucketWater.itemID) { + if(var11 < 3) { + if(!var5.capabilities.isCreativeMode) { + var5.inventory.setInventorySlotContents(var5.inventory.currentItem, new ItemStack(Item.bucketEmpty)); + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, 3, 2); + } + + return true; + } else { + if(var10.itemID == Item.glassBottle.itemID) { + if(var11 > 0) { + ItemStack var12 = new ItemStack(Item.potion, 1, 0); + if(!var5.inventory.addItemStackToInventory(var12)) { + var1.spawnEntityInWorld(new EntityItem(var1, (double)var2 + 0.5D, (double)var3 + 1.5D, (double)var4 + 0.5D, var12)); + } else if(var5 instanceof EntityPlayerMP) { + ((EntityPlayerMP)var5).sendContainerToPlayer(var5.inventoryContainer); + } + + --var10.stackSize; + if(var10.stackSize <= 0) { + var5.inventory.setInventorySlotContents(var5.inventory.currentItem, (ItemStack)null); + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var11 - 1, 2); + } + } else if(var11 > 0 && var10.getItem() instanceof ItemArmor && ((ItemArmor)var10.getItem()).getArmorMaterial() == EnumArmorMaterial.CLOTH) { + ItemArmor var13 = (ItemArmor)var10.getItem(); + var13.removeColor(var10); + var1.setBlockMetadataWithNotify(var2, var3, var4, var11 - 1, 2); + return true; + } + + return true; + } + } + } + } + + public void fillWithRain(World var1, int var2, int var3, int var4) { + if(var1.rand.nextInt(20) == 1) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + if(var5 < 3) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var5 + 1, 2); + } + + } + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.cauldron.itemID; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Item.cauldron.itemID; + } +} diff --git a/src/net/minecraft/src/BlockChest.java b/src/net/minecraft/src/BlockChest.java new file mode 100644 index 0000000..f221eeb --- /dev/null +++ b/src/net/minecraft/src/BlockChest.java @@ -0,0 +1,377 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.Random; + +public class BlockChest extends BlockContainer { + private final Random random = new Random(); + public final int isTrapped; + + protected BlockChest(int var1, int var2) { + super(var1, Material.wood); + this.isTrapped = var2; + this.setCreativeTab(CreativeTabs.tabDecorations); + this.setBlockBounds(1.0F / 16.0F, 0.0F, 1.0F / 16.0F, 15.0F / 16.0F, 14.0F / 16.0F, 15.0F / 16.0F); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 22; + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID) { + this.setBlockBounds(1.0F / 16.0F, 0.0F, 0.0F, 15.0F / 16.0F, 14.0F / 16.0F, 15.0F / 16.0F); + } else if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID) { + this.setBlockBounds(1.0F / 16.0F, 0.0F, 1.0F / 16.0F, 15.0F / 16.0F, 14.0F / 16.0F, 1.0F); + } else if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID) { + this.setBlockBounds(0.0F, 0.0F, 1.0F / 16.0F, 15.0F / 16.0F, 14.0F / 16.0F, 15.0F / 16.0F); + } else if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID) { + this.setBlockBounds(1.0F / 16.0F, 0.0F, 1.0F / 16.0F, 1.0F, 14.0F / 16.0F, 15.0F / 16.0F); + } else { + this.setBlockBounds(1.0F / 16.0F, 0.0F, 1.0F / 16.0F, 15.0F / 16.0F, 14.0F / 16.0F, 15.0F / 16.0F); + } + + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + this.unifyAdjacentChests(var1, var2, var3, var4); + int var5 = var1.getBlockId(var2, var3, var4 - 1); + int var6 = var1.getBlockId(var2, var3, var4 + 1); + int var7 = var1.getBlockId(var2 - 1, var3, var4); + int var8 = var1.getBlockId(var2 + 1, var3, var4); + if(var5 == this.blockID) { + this.unifyAdjacentChests(var1, var2, var3, var4 - 1); + } + + if(var6 == this.blockID) { + this.unifyAdjacentChests(var1, var2, var3, var4 + 1); + } + + if(var7 == this.blockID) { + this.unifyAdjacentChests(var1, var2 - 1, var3, var4); + } + + if(var8 == this.blockID) { + this.unifyAdjacentChests(var1, var2 + 1, var3, var4); + } + + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + int var7 = var1.getBlockId(var2, var3, var4 - 1); + int var8 = var1.getBlockId(var2, var3, var4 + 1); + int var9 = var1.getBlockId(var2 - 1, var3, var4); + int var10 = var1.getBlockId(var2 + 1, var3, var4); + byte var11 = 0; + int var12 = MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + if(var12 == 0) { + var11 = 2; + } + + if(var12 == 1) { + var11 = 5; + } + + if(var12 == 2) { + var11 = 3; + } + + if(var12 == 3) { + var11 = 4; + } + + if(var7 != this.blockID && var8 != this.blockID && var9 != this.blockID && var10 != this.blockID) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var11, 3); + } else { + if((var7 == this.blockID || var8 == this.blockID) && (var11 == 4 || var11 == 5)) { + if(var7 == this.blockID) { + var1.setBlockMetadataWithNotify(var2, var3, var4 - 1, var11, 3); + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4 + 1, var11, 3); + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var11, 3); + } + + if((var9 == this.blockID || var10 == this.blockID) && (var11 == 2 || var11 == 3)) { + if(var9 == this.blockID) { + var1.setBlockMetadataWithNotify(var2 - 1, var3, var4, var11, 3); + } else { + var1.setBlockMetadataWithNotify(var2 + 1, var3, var4, var11, 3); + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var11, 3); + } + } + + if(var6.hasDisplayName()) { + ((TileEntityChest)var1.getBlockTileEntity(var2, var3, var4)).func_94043_a(var6.getDisplayName()); + } + + } + + public void unifyAdjacentChests(World var1, int var2, int var3, int var4) { + if(!var1.isRemote) { + int var5 = var1.getBlockId(var2, var3, var4 - 1); + int var6 = var1.getBlockId(var2, var3, var4 + 1); + int var7 = var1.getBlockId(var2 - 1, var3, var4); + int var8 = var1.getBlockId(var2 + 1, var3, var4); + boolean var9 = true; + int var10; + int var11; + boolean var12; + byte var13; + int var14; + if(var5 != this.blockID && var6 != this.blockID) { + if(var7 != this.blockID && var8 != this.blockID) { + var13 = 3; + if(Block.opaqueCubeLookup[var5] && !Block.opaqueCubeLookup[var6]) { + var13 = 3; + } + + if(Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var5]) { + var13 = 2; + } + + if(Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var8]) { + var13 = 5; + } + + if(Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var7]) { + var13 = 4; + } + } else { + var10 = var1.getBlockId(var7 == this.blockID ? var2 - 1 : var2 + 1, var3, var4 - 1); + var11 = var1.getBlockId(var7 == this.blockID ? var2 - 1 : var2 + 1, var3, var4 + 1); + var13 = 3; + var12 = true; + if(var7 == this.blockID) { + var14 = var1.getBlockMetadata(var2 - 1, var3, var4); + } else { + var14 = var1.getBlockMetadata(var2 + 1, var3, var4); + } + + if(var14 == 2) { + var13 = 2; + } + + if((Block.opaqueCubeLookup[var5] || Block.opaqueCubeLookup[var10]) && !Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var11]) { + var13 = 3; + } + + if((Block.opaqueCubeLookup[var6] || Block.opaqueCubeLookup[var11]) && !Block.opaqueCubeLookup[var5] && !Block.opaqueCubeLookup[var10]) { + var13 = 2; + } + } + } else { + var10 = var1.getBlockId(var2 - 1, var3, var5 == this.blockID ? var4 - 1 : var4 + 1); + var11 = var1.getBlockId(var2 + 1, var3, var5 == this.blockID ? var4 - 1 : var4 + 1); + var13 = 5; + var12 = true; + if(var5 == this.blockID) { + var14 = var1.getBlockMetadata(var2, var3, var4 - 1); + } else { + var14 = var1.getBlockMetadata(var2, var3, var4 + 1); + } + + if(var14 == 4) { + var13 = 4; + } + + if((Block.opaqueCubeLookup[var7] || Block.opaqueCubeLookup[var10]) && !Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var11]) { + var13 = 5; + } + + if((Block.opaqueCubeLookup[var8] || Block.opaqueCubeLookup[var11]) && !Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var10]) { + var13 = 4; + } + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var13, 3); + } + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + int var5 = 0; + if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID) { + ++var5; + } + + if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID) { + ++var5; + } + + if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID) { + ++var5; + } + + if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID) { + ++var5; + } + + return var5 > 1 ? false : (this.isThereANeighborChest(var1, var2 - 1, var3, var4) ? false : (this.isThereANeighborChest(var1, var2 + 1, var3, var4) ? false : (this.isThereANeighborChest(var1, var2, var3, var4 - 1) ? false : !this.isThereANeighborChest(var1, var2, var3, var4 + 1)))); + } + + private boolean isThereANeighborChest(World var1, int var2, int var3, int var4) { + return var1.getBlockId(var2, var3, var4) != this.blockID ? false : (var1.getBlockId(var2 - 1, var3, var4) == this.blockID ? true : (var1.getBlockId(var2 + 1, var3, var4) == this.blockID ? true : (var1.getBlockId(var2, var3, var4 - 1) == this.blockID ? true : var1.getBlockId(var2, var3, var4 + 1) == this.blockID))); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + TileEntityChest var6 = (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4); + if(var6 != null) { + var6.updateContainingBlockInfo(); + } + + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + TileEntityChest var7 = (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4); + if(var7 != null) { + for(int var8 = 0; var8 < var7.getSizeInventory(); ++var8) { + ItemStack var9 = var7.getStackInSlot(var8); + if(var9 != null) { + float var10 = this.random.nextFloat() * 0.8F + 0.1F; + float var11 = this.random.nextFloat() * 0.8F + 0.1F; + + EntityItem var14; + for(float var12 = this.random.nextFloat() * 0.8F + 0.1F; var9.stackSize > 0; var1.spawnEntityInWorld(var14)) { + int var13 = this.random.nextInt(21) + 10; + if(var13 > var9.stackSize) { + var13 = var9.stackSize; + } + + var9.stackSize -= var13; + var14 = new EntityItem(var1, (double)((float)var2 + var10), (double)((float)var3 + var11), (double)((float)var4 + var12), new ItemStack(var9.itemID, var13, var9.getItemDamage())); + float var15 = 0.05F; + var14.motionX = (double)((float)this.random.nextGaussian() * var15); + var14.motionY = (double)((float)this.random.nextGaussian() * var15 + 0.2F); + var14.motionZ = (double)((float)this.random.nextGaussian() * var15); + if(var9.hasTagCompound()) { + var14.getEntityItem().setTagCompound((NBTTagCompound)var9.getTagCompound().copy()); + } + } + } + } + + var1.func_96440_m(var2, var3, var4, var5); + } + + super.breakBlock(var1, var2, var3, var4, var5, var6); + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(var1.isRemote) { + return true; + } else { + IInventory var10 = this.getInventory(var1, var2, var3, var4); + if(var10 != null) { + var5.displayGUIChest(var10); + } + + return true; + } + } + + public IInventory getInventory(World var1, int var2, int var3, int var4) { + Object var5 = (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4); + if(var5 == null) { + return null; + } else if(var1.isBlockNormalCube(var2, var3 + 1, var4)) { + return null; + } else if(isOcelotBlockingChest(var1, var2, var3, var4)) { + return null; + } else if(var1.getBlockId(var2 - 1, var3, var4) != this.blockID || !var1.isBlockNormalCube(var2 - 1, var3 + 1, var4) && !isOcelotBlockingChest(var1, var2 - 1, var3, var4)) { + if(var1.getBlockId(var2 + 1, var3, var4) != this.blockID || !var1.isBlockNormalCube(var2 + 1, var3 + 1, var4) && !isOcelotBlockingChest(var1, var2 + 1, var3, var4)) { + if(var1.getBlockId(var2, var3, var4 - 1) != this.blockID || !var1.isBlockNormalCube(var2, var3 + 1, var4 - 1) && !isOcelotBlockingChest(var1, var2, var3, var4 - 1)) { + if(var1.getBlockId(var2, var3, var4 + 1) != this.blockID || !var1.isBlockNormalCube(var2, var3 + 1, var4 + 1) && !isOcelotBlockingChest(var1, var2, var3, var4 + 1)) { + if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID) { + var5 = new InventoryLargeChest("container.chestDouble", (TileEntityChest)var1.getBlockTileEntity(var2 - 1, var3, var4), (IInventory)var5); + } + + if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID) { + var5 = new InventoryLargeChest("container.chestDouble", (IInventory)var5, (TileEntityChest)var1.getBlockTileEntity(var2 + 1, var3, var4)); + } + + if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID) { + var5 = new InventoryLargeChest("container.chestDouble", (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4 - 1), (IInventory)var5); + } + + if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID) { + var5 = new InventoryLargeChest("container.chestDouble", (IInventory)var5, (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4 + 1)); + } + + return (IInventory)var5; + } else { + return null; + } + } else { + return null; + } + } else { + return null; + } + } else { + return null; + } + } + + public TileEntity createNewTileEntity(World var1) { + TileEntityChest var2 = new TileEntityChest(); + return var2; + } + + public boolean canProvidePower() { + return this.isTrapped == 1; + } + + public int isProvidingWeakPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(!this.canProvidePower()) { + return 0; + } else { + int var6 = ((TileEntityChest)var1.getBlockTileEntity(var2, var3, var4)).numUsingPlayers; + return MathHelper.clamp_int(var6, 0, 15); + } + } + + public int isProvidingStrongPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return var5 == 1 ? this.isProvidingWeakPower(var1, var2, var3, var4, var5) : 0; + } + + private static boolean isOcelotBlockingChest(World var0, int var1, int var2, int var3) { + Iterator var4 = var0.getEntitiesWithinAABB(EntityOcelot.class, AxisAlignedBB.getAABBPool().getAABB((double)var1, (double)(var2 + 1), (double)var3, (double)(var1 + 1), (double)(var2 + 2), (double)(var3 + 1))).iterator(); + + EntityOcelot var6; + do { + if(!var4.hasNext()) { + return false; + } + + EntityOcelot var5 = (EntityOcelot)var4.next(); + var6 = (EntityOcelot)var5; + } while(!var6.isSitting()); + + return true; + } + + public boolean hasComparatorInputOverride() { + return true; + } + + public int getComparatorInputOverride(World var1, int var2, int var3, int var4, int var5) { + return Container.calcRedstoneFromInventory(this.getInventory(var1, var2, var3, var4)); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("wood"); + } +} diff --git a/src/net/minecraft/src/BlockClay.java b/src/net/minecraft/src/BlockClay.java new file mode 100644 index 0000000..31d0fff --- /dev/null +++ b/src/net/minecraft/src/BlockClay.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockClay extends Block { + public BlockClay(int var1) { + super(var1, Material.clay); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.clay.itemID; + } + + public int quantityDropped(Random var1) { + return 4; + } +} diff --git a/src/net/minecraft/src/BlockCloth.java b/src/net/minecraft/src/BlockCloth.java new file mode 100644 index 0000000..6c6484e --- /dev/null +++ b/src/net/minecraft/src/BlockCloth.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import java.util.List; + +public class BlockCloth extends Block { + private Icon[] iconArray; + + public BlockCloth() { + super(35, Material.cloth); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public Icon getIcon(int var1, int var2) { + return this.iconArray[var2 % this.iconArray.length]; + } + + public int damageDropped(int var1) { + return var1; + } + + public static int getBlockFromDye(int var0) { + return ~var0 & 15; + } + + public static int getDyeFromBlock(int var0) { + return ~var0 & 15; + } + + public void getSubBlocks(int var1, CreativeTabs var2, List var3) { + for(int var4 = 0; var4 < 16; ++var4) { + var3.add(new ItemStack(var1, 1, var4)); + } + + } + + public void registerIcons(IconRegister var1) { + this.iconArray = new Icon[16]; + + for(int var2 = 0; var2 < this.iconArray.length; ++var2) { + this.iconArray[var2] = var1.registerIcon("cloth_" + var2); + } + + } +} diff --git a/src/net/minecraft/src/BlockCocoa.java b/src/net/minecraft/src/BlockCocoa.java new file mode 100644 index 0000000..a4d7f8f --- /dev/null +++ b/src/net/minecraft/src/BlockCocoa.java @@ -0,0 +1,148 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockCocoa extends BlockDirectional { + public static final String[] cocoaIcons = new String[]{"cocoa_0", "cocoa_1", "cocoa_2"}; + private Icon[] iconArray; + + public BlockCocoa(int var1) { + super(var1, Material.plants); + this.setTickRandomly(true); + } + + public Icon getIcon(int var1, int var2) { + return this.iconArray[2]; + } + + public Icon func_94468_i_(int var1) { + if(var1 < 0 || var1 >= this.iconArray.length) { + var1 = this.iconArray.length - 1; + } + + return this.iconArray[var1]; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!this.canBlockStay(var1, var2, var3, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + } else if(var1.rand.nextInt(5) == 0) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = func_72219_c(var6); + if(var7 < 2) { + ++var7; + var1.setBlockMetadataWithNotify(var2, var3, var4, var7 << 2 | getDirection(var6), 2); + } + } + + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + int var5 = getDirection(var1.getBlockMetadata(var2, var3, var4)); + var2 += Direction.offsetX[var5]; + var4 += Direction.offsetZ[var5]; + int var6 = var1.getBlockId(var2, var3, var4); + return var6 == Block.wood.blockID && BlockLog.limitToValidMetadata(var1.getBlockMetadata(var2, var3, var4)) == 3; + } + + public int getRenderType() { + return 28; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.getSelectedBoundingBoxFromPool(var1, var2, var3, var4); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + int var6 = getDirection(var5); + int var7 = func_72219_c(var5); + int var8 = 4 + var7 * 2; + int var9 = 5 + var7 * 2; + float var10 = (float)var8 / 2.0F; + switch(var6) { + case 0: + this.setBlockBounds((8.0F - var10) / 16.0F, (12.0F - (float)var9) / 16.0F, (15.0F - (float)var8) / 16.0F, (8.0F + var10) / 16.0F, 12.0F / 16.0F, 15.0F / 16.0F); + break; + case 1: + this.setBlockBounds(1.0F / 16.0F, (12.0F - (float)var9) / 16.0F, (8.0F - var10) / 16.0F, (1.0F + (float)var8) / 16.0F, 12.0F / 16.0F, (8.0F + var10) / 16.0F); + break; + case 2: + this.setBlockBounds((8.0F - var10) / 16.0F, (12.0F - (float)var9) / 16.0F, 1.0F / 16.0F, (8.0F + var10) / 16.0F, 12.0F / 16.0F, (1.0F + (float)var8) / 16.0F); + break; + case 3: + this.setBlockBounds((15.0F - (float)var8) / 16.0F, (12.0F - (float)var9) / 16.0F, (8.0F - var10) / 16.0F, 15.0F / 16.0F, 12.0F / 16.0F, (8.0F + var10) / 16.0F); + } + + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + int var7 = ((MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3) + 0) % 4; + var1.setBlockMetadataWithNotify(var2, var3, var4, var7, 2); + } + + public int onBlockPlaced(World var1, int var2, int var3, int var4, int var5, float var6, float var7, float var8, int var9) { + if(var5 == 1 || var5 == 0) { + var5 = 2; + } + + return Direction.rotateOpposite[Direction.facingToDirection[var5]]; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!this.canBlockStay(var1, var2, var3, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + } + + } + + public static int func_72219_c(int var0) { + return (var0 & 12) >> 2; + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + int var8 = func_72219_c(var5); + byte var9 = 1; + if(var8 >= 2) { + var9 = 3; + } + + for(int var10 = 0; var10 < var9; ++var10) { + this.dropBlockAsItem_do(var1, var2, var3, var4, new ItemStack(Item.dyePowder, 1, 3)); + } + + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Item.dyePowder.itemID; + } + + public int getDamageValue(World var1, int var2, int var3, int var4) { + return 3; + } + + public void registerIcons(IconRegister var1) { + this.iconArray = new Icon[cocoaIcons.length]; + + for(int var2 = 0; var2 < this.iconArray.length; ++var2) { + this.iconArray[var2] = var1.registerIcon(cocoaIcons[var2]); + } + + } +} diff --git a/src/net/minecraft/src/BlockCommandBlock.java b/src/net/minecraft/src/BlockCommandBlock.java new file mode 100644 index 0000000..1447fc7 --- /dev/null +++ b/src/net/minecraft/src/BlockCommandBlock.java @@ -0,0 +1,68 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockCommandBlock extends BlockContainer { + public BlockCommandBlock(int var1) { + super(var1, Material.iron); + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntityCommandBlock(); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isRemote) { + boolean var6 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4); + int var7 = var1.getBlockMetadata(var2, var3, var4); + boolean var8 = (var7 & 1) != 0; + if(var6 && !var8) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var7 | 1, 4); + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1)); + } else if(!var6 && var8) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var7 & -2, 4); + } + } + + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + TileEntity var6 = var1.getBlockTileEntity(var2, var3, var4); + if(var6 != null && var6 instanceof TileEntityCommandBlock) { + TileEntityCommandBlock var7 = (TileEntityCommandBlock)var6; + var7.func_96102_a(var7.executeCommandOnPowered(var1)); + var1.func_96440_m(var2, var3, var4, this.blockID); + } + + } + + public int tickRate(World var1) { + return 1; + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + TileEntityCommandBlock var10 = (TileEntityCommandBlock)var1.getBlockTileEntity(var2, var3, var4); + if(var10 != null) { + var5.displayGUIEditSign(var10); + } + + return true; + } + + public boolean hasComparatorInputOverride() { + return true; + } + + public int getComparatorInputOverride(World var1, int var2, int var3, int var4, int var5) { + TileEntity var6 = var1.getBlockTileEntity(var2, var3, var4); + return var6 != null && var6 instanceof TileEntityCommandBlock ? ((TileEntityCommandBlock)var6).func_96103_d() : 0; + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + TileEntityCommandBlock var7 = (TileEntityCommandBlock)var1.getBlockTileEntity(var2, var3, var4); + if(var6.hasDisplayName()) { + var7.setCommandSenderName(var6.getDisplayName()); + } + + } +} diff --git a/src/net/minecraft/src/BlockComparator.java b/src/net/minecraft/src/BlockComparator.java new file mode 100644 index 0000000..4b43752 --- /dev/null +++ b/src/net/minecraft/src/BlockComparator.java @@ -0,0 +1,174 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockComparator extends BlockRedstoneLogic implements ITileEntityProvider { + public BlockComparator(int var1, boolean var2) { + super(var1, var2); + this.isBlockContainer = true; + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.comparator.itemID; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Item.comparator.itemID; + } + + protected int func_94481_j_(int var1) { + return 2; + } + + protected BlockRedstoneLogic func_94485_e() { + return Block.redstoneComparatorActive; + } + + protected BlockRedstoneLogic func_94484_i() { + return Block.redstoneComparatorIdle; + } + + public int getRenderType() { + return 37; + } + + public Icon getIcon(int var1, int var2) { + boolean var3 = this.isRepeaterPowered || (var2 & 8) != 0; + return var1 == 0 ? (var3 ? Block.torchRedstoneActive.getBlockTextureFromSide(var1) : Block.torchRedstoneIdle.getBlockTextureFromSide(var1)) : (var1 == 1 ? (var3 ? Block.redstoneComparatorActive.blockIcon : this.blockIcon) : Block.stoneDoubleSlab.getBlockTextureFromSide(1)); + } + + protected boolean func_96470_c(int var1) { + return this.isRepeaterPowered || (var1 & 8) != 0; + } + + protected int func_94480_d(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return this.getTileEntityComparator(var1, var2, var3, var4).func_96100_a(); + } + + private int func_94491_m(World var1, int var2, int var3, int var4, int var5) { + return !this.func_94490_c(var5) ? this.getInputStrength(var1, var2, var3, var4, var5) : Math.max(this.getInputStrength(var1, var2, var3, var4, var5) - this.func_94482_f(var1, var2, var3, var4, var5), 0); + } + + public boolean func_94490_c(int var1) { + return (var1 & 4) == 4; + } + + protected boolean func_94478_d(World var1, int var2, int var3, int var4, int var5) { + int var6 = this.getInputStrength(var1, var2, var3, var4, var5); + if(var6 >= 15) { + return true; + } else if(var6 == 0) { + return false; + } else { + int var7 = this.func_94482_f(var1, var2, var3, var4, var5); + return var7 == 0 ? true : var6 >= var7; + } + } + + protected int getInputStrength(World var1, int var2, int var3, int var4, int var5) { + int var6 = super.getInputStrength(var1, var2, var3, var4, var5); + int var7 = getDirection(var5); + int var8 = var2 + Direction.offsetX[var7]; + int var9 = var4 + Direction.offsetZ[var7]; + int var10 = var1.getBlockId(var8, var3, var9); + if(var10 > 0) { + if(Block.blocksList[var10].hasComparatorInputOverride()) { + var6 = Block.blocksList[var10].getComparatorInputOverride(var1, var8, var3, var9, Direction.rotateOpposite[var7]); + } else if(var6 < 15 && Block.isNormalCube(var10)) { + var8 += Direction.offsetX[var7]; + var9 += Direction.offsetZ[var7]; + var10 = var1.getBlockId(var8, var3, var9); + if(var10 > 0 && Block.blocksList[var10].hasComparatorInputOverride()) { + var6 = Block.blocksList[var10].getComparatorInputOverride(var1, var8, var3, var9, Direction.rotateOpposite[var7]); + } + } + } + + return var6; + } + + public TileEntityComparator getTileEntityComparator(IBlockAccess var1, int var2, int var3, int var4) { + return (TileEntityComparator)var1.getBlockTileEntity(var2, var3, var4); + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + int var10 = var1.getBlockMetadata(var2, var3, var4); + boolean var11 = this.isRepeaterPowered | (var10 & 8) != 0; + boolean var12 = !this.func_94490_c(var10); + int var13 = var12 ? 4 : 0; + var13 |= var11 ? 8 : 0; + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.click", 0.3F, var12 ? 0.55F : 0.5F); + var1.setBlockMetadataWithNotify(var2, var3, var4, var13 | var10 & 3, 2); + this.func_96476_c(var1, var2, var3, var4, var1.rand); + return true; + } + + protected void func_94479_f(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isBlockTickScheduled(var2, var3, var4, this.blockID)) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = this.func_94491_m(var1, var2, var3, var4, var6); + int var8 = this.getTileEntityComparator(var1, var2, var3, var4).func_96100_a(); + if(var7 != var8 || this.func_96470_c(var6) != this.func_94478_d(var1, var2, var3, var4, var6)) { + if(this.func_83011_d(var1, var2, var3, var4, var6)) { + var1.func_82740_a(var2, var3, var4, this.blockID, this.func_94481_j_(0), -1); + } else { + var1.func_82740_a(var2, var3, var4, this.blockID, this.func_94481_j_(0), 0); + } + } + } + + } + + private void func_96476_c(World var1, int var2, int var3, int var4, Random var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = this.func_94491_m(var1, var2, var3, var4, var6); + int var8 = this.getTileEntityComparator(var1, var2, var3, var4).func_96100_a(); + this.getTileEntityComparator(var1, var2, var3, var4).func_96099_a(var7); + if(var8 != var7 || !this.func_94490_c(var6)) { + boolean var9 = this.func_94478_d(var1, var2, var3, var4, var6); + boolean var10 = this.isRepeaterPowered || (var6 & 8) != 0; + if(var10 && !var9) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 & -9, 2); + } else if(!var10 && var9) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 | 8, 2); + } + + this.func_94483_i_(var1, var2, var3, var4); + } + + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(this.isRepeaterPowered) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + var1.setBlock(var2, var3, var4, this.func_94484_i().blockID, var6 | 8, 4); + } + + this.func_96476_c(var1, var2, var3, var4, var5); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + var1.setBlockTileEntity(var2, var3, var4, this.createNewTileEntity(var1)); + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + super.breakBlock(var1, var2, var3, var4, var5, var6); + var1.removeBlockTileEntity(var2, var3, var4); + this.func_94483_i_(var1, var2, var3, var4); + } + + public boolean onBlockEventReceived(World var1, int var2, int var3, int var4, int var5, int var6) { + super.onBlockEventReceived(var1, var2, var3, var4, var5, var6); + TileEntity var7 = var1.getBlockTileEntity(var2, var3, var4); + return var7 != null ? var7.receiveClientEvent(var5, var6) : false; + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon(this.isRepeaterPowered ? "comparator_lit" : "comparator"); + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntityComparator(); + } +} diff --git a/src/net/minecraft/src/BlockContainer.java b/src/net/minecraft/src/BlockContainer.java new file mode 100644 index 0000000..b04da39 --- /dev/null +++ b/src/net/minecraft/src/BlockContainer.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +public abstract class BlockContainer extends Block implements ITileEntityProvider { + protected BlockContainer(int var1, Material var2) { + super(var1, var2); + this.isBlockContainer = true; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + super.breakBlock(var1, var2, var3, var4, var5, var6); + var1.removeBlockTileEntity(var2, var3, var4); + } + + public boolean onBlockEventReceived(World var1, int var2, int var3, int var4, int var5, int var6) { + super.onBlockEventReceived(var1, var2, var3, var4, var5, var6); + TileEntity var7 = var1.getBlockTileEntity(var2, var3, var4); + return var7 != null ? var7.receiveClientEvent(var5, var6) : false; + } +} diff --git a/src/net/minecraft/src/BlockCrops.java b/src/net/minecraft/src/BlockCrops.java new file mode 100644 index 0000000..679e775 --- /dev/null +++ b/src/net/minecraft/src/BlockCrops.java @@ -0,0 +1,143 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockCrops extends BlockFlower { + private Icon[] iconArray; + + protected BlockCrops(int var1) { + super(var1); + this.setTickRandomly(true); + float var2 = 0.5F; + this.setBlockBounds(0.5F - var2, 0.0F, 0.5F - var2, 0.5F + var2, 0.25F, 0.5F + var2); + this.setCreativeTab((CreativeTabs)null); + this.setHardness(0.0F); + this.setStepSound(soundGrassFootstep); + this.disableStats(); + } + + protected boolean canThisPlantGrowOnThisBlockID(int var1) { + return var1 == Block.tilledField.blockID; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + super.updateTick(var1, var2, var3, var4, var5); + if(var1.getBlockLightValue(var2, var3 + 1, var4) >= 9) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 < 7) { + float var7 = this.getGrowthRate(var1, var2, var3, var4); + if(var5.nextInt((int)(25.0F / var7) + 1) == 0) { + ++var6; + var1.setBlockMetadataWithNotify(var2, var3, var4, var6, 2); + } + } + } + + } + + public void fertilize(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4) + MathHelper.getRandomIntegerInRange(var1.rand, 2, 5); + if(var5 > 7) { + var5 = 7; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var5, 2); + } + + private float getGrowthRate(World var1, int var2, int var3, int var4) { + float var5 = 1.0F; + int var6 = var1.getBlockId(var2, var3, var4 - 1); + int var7 = var1.getBlockId(var2, var3, var4 + 1); + int var8 = var1.getBlockId(var2 - 1, var3, var4); + int var9 = var1.getBlockId(var2 + 1, var3, var4); + int var10 = var1.getBlockId(var2 - 1, var3, var4 - 1); + int var11 = var1.getBlockId(var2 + 1, var3, var4 - 1); + int var12 = var1.getBlockId(var2 + 1, var3, var4 + 1); + int var13 = var1.getBlockId(var2 - 1, var3, var4 + 1); + boolean var14 = var8 == this.blockID || var9 == this.blockID; + boolean var15 = var6 == this.blockID || var7 == this.blockID; + boolean var16 = var10 == this.blockID || var11 == this.blockID || var12 == this.blockID || var13 == this.blockID; + + for(int var17 = var2 - 1; var17 <= var2 + 1; ++var17) { + for(int var18 = var4 - 1; var18 <= var4 + 1; ++var18) { + int var19 = var1.getBlockId(var17, var3 - 1, var18); + float var20 = 0.0F; + if(var19 == Block.tilledField.blockID) { + var20 = 1.0F; + if(var1.getBlockMetadata(var17, var3 - 1, var18) > 0) { + var20 = 3.0F; + } + } + + if(var17 != var2 || var18 != var4) { + var20 /= 4.0F; + } + + var5 += var20; + } + } + + if(var16 || var14 && var15) { + var5 /= 2.0F; + } + + return var5; + } + + public Icon getIcon(int var1, int var2) { + if(var2 < 0 || var2 > 7) { + var2 = 7; + } + + return this.iconArray[var2]; + } + + public int getRenderType() { + return 6; + } + + protected int getSeedItem() { + return Item.seeds.itemID; + } + + protected int getCropItem() { + return Item.wheat.itemID; + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6, 0); + if(!var1.isRemote) { + if(var5 >= 7) { + int var8 = 3 + var7; + + for(int var9 = 0; var9 < var8; ++var9) { + if(var1.rand.nextInt(15) <= var5) { + this.dropBlockAsItem_do(var1, var2, var3, var4, new ItemStack(this.getSeedItem(), 1, 0)); + } + } + } + + } + } + + public int idDropped(int var1, Random var2, int var3) { + return var1 == 7 ? this.getCropItem() : this.getSeedItem(); + } + + public int quantityDropped(Random var1) { + return 1; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return this.getSeedItem(); + } + + public void registerIcons(IconRegister var1) { + this.iconArray = new Icon[8]; + + for(int var2 = 0; var2 < this.iconArray.length; ++var2) { + this.iconArray[var2] = var1.registerIcon("crops_" + var2); + } + + } +} diff --git a/src/net/minecraft/src/BlockDaylightDetector.java b/src/net/minecraft/src/BlockDaylightDetector.java new file mode 100644 index 0000000..7ebc971 --- /dev/null +++ b/src/net/minecraft/src/BlockDaylightDetector.java @@ -0,0 +1,82 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockDaylightDetector extends BlockContainer { + private Icon[] iconArray = new Icon[2]; + + public BlockDaylightDetector(int var1) { + super(var1, Material.wood); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 6.0F / 16.0F, 1.0F); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 6.0F / 16.0F, 1.0F); + } + + public int isProvidingWeakPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return var1.getBlockMetadata(var2, var3, var4); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + } + + public void updateLightLevel(World var1, int var2, int var3, int var4) { + if(!var1.provider.hasNoSky) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + int var6 = var1.getSavedLightValue(EnumSkyBlock.Sky, var2, var3, var4) - var1.skylightSubtracted; + float var7 = var1.getCelestialAngleRadians(1.0F); + if(var7 < (float)Math.PI) { + var7 += (0.0F - var7) * 0.2F; + } else { + var7 += ((float)Math.PI * 2.0F - var7) * 0.2F; + } + + var6 = Math.round((float)var6 * MathHelper.cos(var7)); + if(var6 < 0) { + var6 = 0; + } + + if(var6 > 15) { + var6 = 15; + } + + if(var5 != var6) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6, 3); + } + + } + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean canProvidePower() { + return true; + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntityDaylightDetector(); + } + + public Icon getIcon(int var1, int var2) { + return var1 == 1 ? this.iconArray[0] : this.iconArray[1]; + } + + public void registerIcons(IconRegister var1) { + this.iconArray[0] = var1.registerIcon("daylightDetector_top"); + this.iconArray[1] = var1.registerIcon("daylightDetector_side"); + } +} diff --git a/src/net/minecraft/src/BlockDeadBush.java b/src/net/minecraft/src/BlockDeadBush.java new file mode 100644 index 0000000..95572da --- /dev/null +++ b/src/net/minecraft/src/BlockDeadBush.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockDeadBush extends BlockFlower { + protected BlockDeadBush(int var1) { + super(var1, Material.vine); + float var2 = 0.4F; + this.setBlockBounds(0.5F - var2, 0.0F, 0.5F - var2, 0.5F + var2, 0.8F, 0.5F + var2); + } + + protected boolean canThisPlantGrowOnThisBlockID(int var1) { + return var1 == Block.sand.blockID; + } + + public int idDropped(int var1, Random var2, int var3) { + return -1; + } + + public void harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) { + if(!var1.isRemote && var2.getCurrentEquippedItem() != null && var2.getCurrentEquippedItem().itemID == Item.shears.itemID) { + var2.addStat(StatList.mineBlockStatArray[this.blockID], 1); + this.dropBlockAsItem_do(var1, var3, var4, var5, new ItemStack(Block.deadBush, 1, var6)); + } else { + super.harvestBlock(var1, var2, var3, var4, var5, var6); + } + + } +} diff --git a/src/net/minecraft/src/BlockDetectorRail.java b/src/net/minecraft/src/BlockDetectorRail.java new file mode 100644 index 0000000..ace0f2a --- /dev/null +++ b/src/net/minecraft/src/BlockDetectorRail.java @@ -0,0 +1,108 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockDetectorRail extends BlockRailBase { + private Icon[] iconArray; + + public BlockDetectorRail(int var1) { + super(var1, true); + this.setTickRandomly(true); + } + + public int tickRate(World var1) { + return 20; + } + + public boolean canProvidePower() { + return true; + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + if(!var1.isRemote) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) == 0) { + this.setStateIfMinecartInteractsWithRail(var1, var2, var3, var4, var6); + } + } + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.isRemote) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) != 0) { + this.setStateIfMinecartInteractsWithRail(var1, var2, var3, var4, var6); + } + } + } + + public int isProvidingWeakPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return (var1.getBlockMetadata(var2, var3, var4) & 8) != 0 ? 15 : 0; + } + + public int isProvidingStrongPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return (var1.getBlockMetadata(var2, var3, var4) & 8) == 0 ? 0 : (var5 == 1 ? 15 : 0); + } + + private void setStateIfMinecartInteractsWithRail(World var1, int var2, int var3, int var4, int var5) { + boolean var6 = (var5 & 8) != 0; + boolean var7 = false; + float var8 = 2.0F / 16.0F; + List var9 = var1.getEntitiesWithinAABB(EntityMinecart.class, AxisAlignedBB.getAABBPool().getAABB((double)((float)var2 + var8), (double)var3, (double)((float)var4 + var8), (double)((float)(var2 + 1) - var8), (double)((float)(var3 + 1) - var8), (double)((float)(var4 + 1) - var8))); + if(!var9.isEmpty()) { + var7 = true; + } + + if(var7 && !var6) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var5 | 8, 3); + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.markBlockRangeForRenderUpdate(var2, var3, var4, var2, var3, var4); + } + + if(!var7 && var6) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var5 & 7, 3); + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.markBlockRangeForRenderUpdate(var2, var3, var4, var2, var3, var4); + } + + if(var7) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1)); + } + + var1.func_96440_m(var2, var3, var4, this.blockID); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + this.setStateIfMinecartInteractsWithRail(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + } + + public boolean hasComparatorInputOverride() { + return true; + } + + public int getComparatorInputOverride(World var1, int var2, int var3, int var4, int var5) { + if((var1.getBlockMetadata(var2, var3, var4) & 8) > 0) { + float var6 = 2.0F / 16.0F; + List var7 = var1.selectEntitiesWithinAABB(EntityMinecart.class, AxisAlignedBB.getAABBPool().getAABB((double)((float)var2 + var6), (double)var3, (double)((float)var4 + var6), (double)((float)(var2 + 1) - var6), (double)((float)(var3 + 1) - var6), (double)((float)(var4 + 1) - var6)), IEntitySelector.selectInventories); + if(var7.size() > 0) { + return Container.calcRedstoneFromInventory((IInventory)var7.get(0)); + } + } + + return 0; + } + + public void registerIcons(IconRegister var1) { + this.iconArray = new Icon[2]; + this.iconArray[0] = var1.registerIcon("detectorRail"); + this.iconArray[1] = var1.registerIcon("detectorRail_on"); + } + + public Icon getIcon(int var1, int var2) { + return (var2 & 8) != 0 ? this.iconArray[1] : this.iconArray[0]; + } +} diff --git a/src/net/minecraft/src/BlockDirectional.java b/src/net/minecraft/src/BlockDirectional.java new file mode 100644 index 0000000..d1fd28a --- /dev/null +++ b/src/net/minecraft/src/BlockDirectional.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public abstract class BlockDirectional extends Block { + protected BlockDirectional(int var1, Material var2) { + super(var1, var2); + } + + public static int getDirection(int var0) { + return var0 & 3; + } +} diff --git a/src/net/minecraft/src/BlockDirt.java b/src/net/minecraft/src/BlockDirt.java new file mode 100644 index 0000000..b6f7e48 --- /dev/null +++ b/src/net/minecraft/src/BlockDirt.java @@ -0,0 +1,8 @@ +package net.minecraft.src; + +public class BlockDirt extends Block { + protected BlockDirt(int var1) { + super(var1, Material.ground); + this.setCreativeTab(CreativeTabs.tabBlock); + } +} diff --git a/src/net/minecraft/src/BlockDispenser.java b/src/net/minecraft/src/BlockDispenser.java new file mode 100644 index 0000000..191e56f --- /dev/null +++ b/src/net/minecraft/src/BlockDispenser.java @@ -0,0 +1,190 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockDispenser extends BlockContainer { + public static final IRegistry dispenseBehaviorRegistry = new RegistryDefaulted(new BehaviorDefaultDispenseItem()); + protected Random random = new Random(); + protected Icon furnaceTopIcon; + protected Icon furnaceFrontIcon; + protected Icon field_96473_e; + + protected BlockDispenser(int var1) { + super(var1, Material.rock); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + + public int tickRate(World var1) { + return 4; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + this.setDispenserDefaultDirection(var1, var2, var3, var4); + } + + private void setDispenserDefaultDirection(World var1, int var2, int var3, int var4) { + if(!var1.isRemote) { + int var5 = var1.getBlockId(var2, var3, var4 - 1); + int var6 = var1.getBlockId(var2, var3, var4 + 1); + int var7 = var1.getBlockId(var2 - 1, var3, var4); + int var8 = var1.getBlockId(var2 + 1, var3, var4); + byte var9 = 3; + if(Block.opaqueCubeLookup[var5] && !Block.opaqueCubeLookup[var6]) { + var9 = 3; + } + + if(Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var5]) { + var9 = 2; + } + + if(Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var8]) { + var9 = 5; + } + + if(Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var7]) { + var9 = 4; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var9, 2); + } + } + + public Icon getIcon(int var1, int var2) { + int var3 = var2 & 7; + return var1 == var3 ? (var3 != 1 && var3 != 0 ? this.furnaceFrontIcon : this.field_96473_e) : (var3 != 1 && var3 != 0 ? (var1 != 1 && var1 != 0 ? this.blockIcon : this.furnaceTopIcon) : this.furnaceTopIcon); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("furnace_side"); + this.furnaceTopIcon = var1.registerIcon("furnace_top"); + this.furnaceFrontIcon = var1.registerIcon("dispenser_front"); + this.field_96473_e = var1.registerIcon("dispenser_front_vertical"); + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(var1.isRemote) { + return true; + } else { + TileEntityDispenser var10 = (TileEntityDispenser)var1.getBlockTileEntity(var2, var3, var4); + if(var10 != null) { + var5.displayGUIDispenser(var10); + } + + return true; + } + } + + protected void dispense(World var1, int var2, int var3, int var4) { + BlockSourceImpl var5 = new BlockSourceImpl(var1, var2, var3, var4); + TileEntityDispenser var6 = (TileEntityDispenser)var5.getBlockTileEntity(); + if(var6 != null) { + int var7 = var6.getRandomStackFromInventory(); + if(var7 < 0) { + var1.playAuxSFX(1001, var2, var3, var4, 0); + } else { + ItemStack var8 = var6.getStackInSlot(var7); + IBehaviorDispenseItem var9 = this.getBehaviorForItemStack(var8); + if(var9 != IBehaviorDispenseItem.itemDispenseBehaviorProvider) { + ItemStack var10 = var9.dispense(var5, var8); + var6.setInventorySlotContents(var7, var10.stackSize == 0 ? null : var10); + } + } + + } + } + + protected IBehaviorDispenseItem getBehaviorForItemStack(ItemStack var1) { + return (IBehaviorDispenseItem)dispenseBehaviorRegistry.func_82594_a(var1.getItem()); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + boolean var6 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4) || var1.isBlockIndirectlyGettingPowered(var2, var3 + 1, var4); + int var7 = var1.getBlockMetadata(var2, var3, var4); + boolean var8 = (var7 & 8) != 0; + if(var6 && !var8) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1)); + var1.setBlockMetadataWithNotify(var2, var3, var4, var7 | 8, 4); + } else if(!var6 && var8) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var7 & -9, 4); + } + + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.isRemote) { + this.dispense(var1, var2, var3, var4); + } + + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntityDispenser(); + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + int var7 = BlockPistonBase.determineOrientation(var1, var2, var3, var4, var5); + var1.setBlockMetadataWithNotify(var2, var3, var4, var7, 2); + if(var6.hasDisplayName()) { + ((TileEntityDispenser)var1.getBlockTileEntity(var2, var3, var4)).setCustomName(var6.getDisplayName()); + } + + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + TileEntityDispenser var7 = (TileEntityDispenser)var1.getBlockTileEntity(var2, var3, var4); + if(var7 != null) { + for(int var8 = 0; var8 < var7.getSizeInventory(); ++var8) { + ItemStack var9 = var7.getStackInSlot(var8); + if(var9 != null) { + float var10 = this.random.nextFloat() * 0.8F + 0.1F; + float var11 = this.random.nextFloat() * 0.8F + 0.1F; + float var12 = this.random.nextFloat() * 0.8F + 0.1F; + + while(var9.stackSize > 0) { + int var13 = this.random.nextInt(21) + 10; + if(var13 > var9.stackSize) { + var13 = var9.stackSize; + } + + var9.stackSize -= var13; + EntityItem var14 = new EntityItem(var1, (double)((float)var2 + var10), (double)((float)var3 + var11), (double)((float)var4 + var12), new ItemStack(var9.itemID, var13, var9.getItemDamage())); + if(var9.hasTagCompound()) { + var14.getEntityItem().setTagCompound((NBTTagCompound)var9.getTagCompound().copy()); + } + + float var15 = 0.05F; + var14.motionX = (double)((float)this.random.nextGaussian() * var15); + var14.motionY = (double)((float)this.random.nextGaussian() * var15 + 0.2F); + var14.motionZ = (double)((float)this.random.nextGaussian() * var15); + var1.spawnEntityInWorld(var14); + } + } + } + + var1.func_96440_m(var2, var3, var4, var5); + } + + super.breakBlock(var1, var2, var3, var4, var5, var6); + } + + public static IPosition getIPositionFromBlockSource(IBlockSource var0) { + EnumFacing var1 = getFacing(var0.getBlockMetadata()); + double var2 = var0.getX() + 0.7D * (double)var1.getFrontOffsetX(); + double var4 = var0.getY() + 0.7D * (double)var1.getFrontOffsetY(); + double var6 = var0.getZ() + 0.7D * (double)var1.getFrontOffsetZ(); + return new PositionImpl(var2, var4, var6); + } + + public static EnumFacing getFacing(int var0) { + return EnumFacing.getFront(var0 & 7); + } + + public boolean hasComparatorInputOverride() { + return true; + } + + public int getComparatorInputOverride(World var1, int var2, int var3, int var4, int var5) { + return Container.calcRedstoneFromInventory((IInventory)var1.getBlockTileEntity(var2, var3, var4)); + } +} diff --git a/src/net/minecraft/src/BlockDoor.java b/src/net/minecraft/src/BlockDoor.java new file mode 100644 index 0000000..dcd2039 --- /dev/null +++ b/src/net/minecraft/src/BlockDoor.java @@ -0,0 +1,289 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockDoor extends Block { + private static final String[] doorIconNames = new String[]{"doorWood_lower", "doorWood_upper", "doorIron_lower", "doorIron_upper"}; + private final int doorTypeForIcon; + private Icon[] iconArray; + + protected BlockDoor(int var1, Material var2) { + super(var1, var2); + if(var2 == Material.iron) { + this.doorTypeForIcon = 2; + } else { + this.doorTypeForIcon = 0; + } + + float var3 = 0.5F; + float var4 = 1.0F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, var4, 0.5F + var3); + } + + public Icon getIcon(int var1, int var2) { + return this.iconArray[this.doorTypeForIcon]; + } + + public Icon getBlockTexture(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(var5 != 1 && var5 != 0) { + int var6 = this.getFullMetadata(var1, var2, var3, var4); + int var7 = var6 & 3; + boolean var8 = (var6 & 4) != 0; + boolean var9 = false; + boolean var10 = (var6 & 8) != 0; + if(var8) { + if(var7 == 0 && var5 == 2) { + var9 = !var9; + } else if(var7 == 1 && var5 == 5) { + var9 = !var9; + } else if(var7 == 2 && var5 == 3) { + var9 = !var9; + } else if(var7 == 3 && var5 == 4) { + var9 = !var9; + } + } else { + if(var7 == 0 && var5 == 5) { + var9 = !var9; + } else if(var7 == 1 && var5 == 3) { + var9 = !var9; + } else if(var7 == 2 && var5 == 4) { + var9 = !var9; + } else if(var7 == 3 && var5 == 2) { + var9 = !var9; + } + + if((var6 & 16) != 0) { + var9 = !var9; + } + } + + return this.iconArray[this.doorTypeForIcon + (var9 ? doorIconNames.length : 0) + (var10 ? 1 : 0)]; + } else { + return this.iconArray[this.doorTypeForIcon]; + } + } + + public void registerIcons(IconRegister var1) { + this.iconArray = new Icon[doorIconNames.length * 2]; + + for(int var2 = 0; var2 < doorIconNames.length; ++var2) { + this.iconArray[var2] = var1.registerIcon(doorIconNames[var2]); + this.iconArray[var2 + doorIconNames.length] = new IconFlipped(this.iconArray[var2], true, false); + } + + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean getBlocksMovement(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = this.getFullMetadata(var1, var2, var3, var4); + return (var5 & 4) != 0; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 7; + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.getSelectedBoundingBoxFromPool(var1, var2, var3, var4); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + this.setDoorRotation(this.getFullMetadata(var1, var2, var3, var4)); + } + + public int getDoorOrientation(IBlockAccess var1, int var2, int var3, int var4) { + return this.getFullMetadata(var1, var2, var3, var4) & 3; + } + + public boolean isDoorOpen(IBlockAccess var1, int var2, int var3, int var4) { + return (this.getFullMetadata(var1, var2, var3, var4) & 4) != 0; + } + + private void setDoorRotation(int var1) { + float var2 = 3.0F / 16.0F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F); + int var3 = var1 & 3; + boolean var4 = (var1 & 4) != 0; + boolean var5 = (var1 & 16) != 0; + if(var3 == 0) { + if(var4) { + if(!var5) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var2); + } else { + this.setBlockBounds(0.0F, 0.0F, 1.0F - var2, 1.0F, 1.0F, 1.0F); + } + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, var2, 1.0F, 1.0F); + } + } else if(var3 == 1) { + if(var4) { + if(!var5) { + this.setBlockBounds(1.0F - var2, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, var2, 1.0F, 1.0F); + } + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var2); + } + } else if(var3 == 2) { + if(var4) { + if(!var5) { + this.setBlockBounds(0.0F, 0.0F, 1.0F - var2, 1.0F, 1.0F, 1.0F); + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var2); + } + } else { + this.setBlockBounds(1.0F - var2, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + } else if(var3 == 3) { + if(var4) { + if(!var5) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, var2, 1.0F, 1.0F); + } else { + this.setBlockBounds(1.0F - var2, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + } else { + this.setBlockBounds(0.0F, 0.0F, 1.0F - var2, 1.0F, 1.0F, 1.0F); + } + } + + } + + public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(this.blockMaterial == Material.iron) { + return true; + } else { + int var10 = this.getFullMetadata(var1, var2, var3, var4); + int var11 = var10 & 7; + var11 ^= 4; + if((var10 & 8) == 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var11, 2); + var1.markBlockRangeForRenderUpdate(var2, var3, var4, var2, var3, var4); + } else { + var1.setBlockMetadataWithNotify(var2, var3 - 1, var4, var11, 2); + var1.markBlockRangeForRenderUpdate(var2, var3 - 1, var4, var2, var3, var4); + } + + var1.playAuxSFXAtEntity(var5, 1003, var2, var3, var4, 0); + return true; + } + } + + public void onPoweredBlockChange(World var1, int var2, int var3, int var4, boolean var5) { + int var6 = this.getFullMetadata(var1, var2, var3, var4); + boolean var7 = (var6 & 4) != 0; + if(var7 != var5) { + int var8 = var6 & 7; + var8 ^= 4; + if((var6 & 8) == 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var8, 2); + var1.markBlockRangeForRenderUpdate(var2, var3, var4, var2, var3, var4); + } else { + var1.setBlockMetadataWithNotify(var2, var3 - 1, var4, var8, 2); + var1.markBlockRangeForRenderUpdate(var2, var3 - 1, var4, var2, var3, var4); + } + + var1.playAuxSFXAtEntity((EntityPlayer)null, 1003, var2, var3, var4, 0); + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) == 0) { + boolean var7 = false; + if(var1.getBlockId(var2, var3 + 1, var4) != this.blockID) { + var1.setBlockToAir(var2, var3, var4); + var7 = true; + } + + if(!var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4)) { + var1.setBlockToAir(var2, var3, var4); + var7 = true; + if(var1.getBlockId(var2, var3 + 1, var4) == this.blockID) { + var1.setBlockToAir(var2, var3 + 1, var4); + } + } + + if(var7) { + if(!var1.isRemote) { + this.dropBlockAsItem(var1, var2, var3, var4, var6, 0); + } + } else { + boolean var8 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4) || var1.isBlockIndirectlyGettingPowered(var2, var3 + 1, var4); + if((var8 || var5 > 0 && Block.blocksList[var5].canProvidePower()) && var5 != this.blockID) { + this.onPoweredBlockChange(var1, var2, var3, var4, var8); + } + } + } else { + if(var1.getBlockId(var2, var3 - 1, var4) != this.blockID) { + var1.setBlockToAir(var2, var3, var4); + } + + if(var5 > 0 && var5 != this.blockID) { + this.onNeighborBlockChange(var1, var2, var3 - 1, var4, var5); + } + } + + } + + public int idDropped(int var1, Random var2, int var3) { + return (var1 & 8) != 0 ? 0 : (this.blockMaterial == Material.iron ? Item.doorIron.itemID : Item.doorWood.itemID); + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3 var5, Vec3 var6) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.collisionRayTrace(var1, var2, var3, var4, var5, var6); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var3 >= 255 ? false : var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) && super.canPlaceBlockAt(var1, var2, var3, var4) && super.canPlaceBlockAt(var1, var2, var3 + 1, var4); + } + + public int getMobilityFlag() { + return 1; + } + + public int getFullMetadata(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + boolean var6 = (var5 & 8) != 0; + int var7; + int var8; + if(var6) { + var7 = var1.getBlockMetadata(var2, var3 - 1, var4); + var8 = var5; + } else { + var7 = var5; + var8 = var1.getBlockMetadata(var2, var3 + 1, var4); + } + + boolean var9 = (var8 & 1) != 0; + return var7 & 7 | (var6 ? 8 : 0) | (var9 ? 16 : 0); + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return this.blockMaterial == Material.iron ? Item.doorIron.itemID : Item.doorWood.itemID; + } + + public void onBlockHarvested(World var1, int var2, int var3, int var4, int var5, EntityPlayer var6) { + if(var6.capabilities.isCreativeMode && (var5 & 8) != 0 && var1.getBlockId(var2, var3 - 1, var4) == this.blockID) { + var1.setBlockToAir(var2, var3 - 1, var4); + } + + } +} diff --git a/src/net/minecraft/src/BlockDragonEgg.java b/src/net/minecraft/src/BlockDragonEgg.java new file mode 100644 index 0000000..a21e307 --- /dev/null +++ b/src/net/minecraft/src/BlockDragonEgg.java @@ -0,0 +1,108 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockDragonEgg extends Block { + public BlockDragonEgg(int var1) { + super(var1, Material.dragonEgg); + this.setBlockBounds(1.0F / 16.0F, 0.0F, 1.0F / 16.0F, 15.0F / 16.0F, 1.0F, 15.0F / 16.0F); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1)); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1)); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + this.fallIfPossible(var1, var2, var3, var4); + } + + private void fallIfPossible(World var1, int var2, int var3, int var4) { + if(BlockSand.canFallBelow(var1, var2, var3 - 1, var4) && var3 >= 0) { + byte var5 = 32; + if(!BlockSand.fallInstantly && var1.checkChunksExist(var2 - var5, var3 - var5, var4 - var5, var2 + var5, var3 + var5, var4 + var5)) { + EntityFallingSand var6 = new EntityFallingSand(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), this.blockID); + var1.spawnEntityInWorld(var6); + } else { + var1.setBlockToAir(var2, var3, var4); + + while(BlockSand.canFallBelow(var1, var2, var3 - 1, var4) && var3 > 0) { + --var3; + } + + if(var3 > 0) { + var1.setBlock(var2, var3, var4, this.blockID, 0, 2); + } + } + } + + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + this.teleportNearby(var1, var2, var3, var4); + return true; + } + + public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + this.teleportNearby(var1, var2, var3, var4); + } + + private void teleportNearby(World var1, int var2, int var3, int var4) { + if(var1.getBlockId(var2, var3, var4) == this.blockID) { + for(int var5 = 0; var5 < 1000; ++var5) { + int var6 = var2 + var1.rand.nextInt(16) - var1.rand.nextInt(16); + int var7 = var3 + var1.rand.nextInt(8) - var1.rand.nextInt(8); + int var8 = var4 + var1.rand.nextInt(16) - var1.rand.nextInt(16); + if(var1.getBlockId(var6, var7, var8) == 0) { + if(!var1.isRemote) { + var1.setBlock(var6, var7, var8, this.blockID, var1.getBlockMetadata(var2, var3, var4), 2); + var1.setBlockToAir(var2, var3, var4); + } else { + short var9 = 128; + + for(int var10 = 0; var10 < var9; ++var10) { + double var11 = var1.rand.nextDouble(); + float var13 = (var1.rand.nextFloat() - 0.5F) * 0.2F; + float var14 = (var1.rand.nextFloat() - 0.5F) * 0.2F; + float var15 = (var1.rand.nextFloat() - 0.5F) * 0.2F; + double var16 = (double)var6 + (double)(var2 - var6) * var11 + (var1.rand.nextDouble() - 0.5D) * 1.0D + 0.5D; + double var18 = (double)var7 + (double)(var3 - var7) * var11 + var1.rand.nextDouble() * 1.0D - 0.5D; + double var20 = (double)var8 + (double)(var4 - var8) * var11 + (var1.rand.nextDouble() - 0.5D) * 1.0D + 0.5D; + var1.spawnParticle("portal", var16, var18, var20, (double)var13, (double)var14, (double)var15); + } + } + + return; + } + } + + } + } + + public int tickRate(World var1) { + return 5; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return true; + } + + public int getRenderType() { + return 27; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return 0; + } +} diff --git a/src/net/minecraft/src/BlockDropper.java b/src/net/minecraft/src/BlockDropper.java new file mode 100644 index 0000000..d88bd57 --- /dev/null +++ b/src/net/minecraft/src/BlockDropper.java @@ -0,0 +1,59 @@ +package net.minecraft.src; + +public class BlockDropper extends BlockDispenser { + private final IBehaviorDispenseItem dropperDefaultBehaviour = new BehaviorDefaultDispenseItem(); + + protected BlockDropper(int var1) { + super(var1); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("furnace_side"); + this.furnaceTopIcon = var1.registerIcon("furnace_top"); + this.furnaceFrontIcon = var1.registerIcon("dropper_front"); + this.field_96473_e = var1.registerIcon("dropper_front_vertical"); + } + + protected IBehaviorDispenseItem getBehaviorForItemStack(ItemStack var1) { + return this.dropperDefaultBehaviour; + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntityDropper(); + } + + protected void dispense(World var1, int var2, int var3, int var4) { + BlockSourceImpl var5 = new BlockSourceImpl(var1, var2, var3, var4); + TileEntityDispenser var6 = (TileEntityDispenser)var5.getBlockTileEntity(); + if(var6 != null) { + int var7 = var6.getRandomStackFromInventory(); + if(var7 < 0) { + var1.playAuxSFX(1001, var2, var3, var4, 0); + } else { + ItemStack var8 = var6.getStackInSlot(var7); + int var9 = var1.getBlockMetadata(var2, var3, var4) & 7; + IInventory var10 = TileEntityHopper.getInventoryAtLocation(var1, (double)(var2 + Facing.offsetsXForSide[var9]), (double)(var3 + Facing.offsetsYForSide[var9]), (double)(var4 + Facing.offsetsZForSide[var9])); + ItemStack var11; + if(var10 != null) { + var11 = TileEntityHopper.insertStack(var10, var8.copy().splitStack(1), Facing.oppositeSide[var9]); + if(var11 == null) { + var11 = var8.copy(); + if(--var11.stackSize == 0) { + var11 = null; + } + } else { + var11 = var8.copy(); + } + } else { + var11 = this.dropperDefaultBehaviour.dispense(var5, var8); + if(var11 != null && var11.stackSize == 0) { + var11 = null; + } + } + + var6.setInventorySlotContents(var7, var11); + } + + } + } +} diff --git a/src/net/minecraft/src/BlockEnchantmentTable.java b/src/net/minecraft/src/BlockEnchantmentTable.java new file mode 100644 index 0000000..9480a73 --- /dev/null +++ b/src/net/minecraft/src/BlockEnchantmentTable.java @@ -0,0 +1,80 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockEnchantmentTable extends BlockContainer { + private Icon field_94461_a; + private Icon field_94460_b; + + protected BlockEnchantmentTable(int var1) { + super(var1, Material.rock); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 12.0F / 16.0F, 1.0F); + this.setLightOpacity(0); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public boolean renderAsNormalBlock() { + return false; + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + super.randomDisplayTick(var1, var2, var3, var4, var5); + + for(int var6 = var2 - 2; var6 <= var2 + 2; ++var6) { + for(int var7 = var4 - 2; var7 <= var4 + 2; ++var7) { + if(var6 > var2 - 2 && var6 < var2 + 2 && var7 == var4 - 1) { + var7 = var4 + 2; + } + + if(var5.nextInt(16) == 0) { + for(int var8 = var3; var8 <= var3 + 1; ++var8) { + if(var1.getBlockId(var6, var8, var7) == Block.bookShelf.blockID) { + if(!var1.isAirBlock((var6 - var2) / 2 + var2, var8, (var7 - var4) / 2 + var4)) { + break; + } + + var1.spawnParticle("enchantmenttable", (double)var2 + 0.5D, (double)var3 + 2.0D, (double)var4 + 0.5D, (double)((float)(var6 - var2) + var5.nextFloat()) - 0.5D, (double)((float)(var8 - var3) - var5.nextFloat() - 1.0F), (double)((float)(var7 - var4) + var5.nextFloat()) - 0.5D); + } + } + } + } + } + + } + + public boolean isOpaqueCube() { + return false; + } + + public Icon getIcon(int var1, int var2) { + return var1 == 0 ? this.field_94460_b : (var1 == 1 ? this.field_94461_a : this.blockIcon); + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntityEnchantmentTable(); + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(var1.isRemote) { + return true; + } else { + TileEntityEnchantmentTable var10 = (TileEntityEnchantmentTable)var1.getBlockTileEntity(var2, var3, var4); + var5.displayGUIEnchantment(var2, var3, var4, var10.func_94135_b() ? var10.func_94133_a() : null); + return true; + } + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + super.onBlockPlacedBy(var1, var2, var3, var4, var5, var6); + if(var6.hasDisplayName()) { + ((TileEntityEnchantmentTable)var1.getBlockTileEntity(var2, var3, var4)).func_94134_a(var6.getDisplayName()); + } + + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("enchantment_side"); + this.field_94461_a = var1.registerIcon("enchantment_top"); + this.field_94460_b = var1.registerIcon("enchantment_bottom"); + } +} diff --git a/src/net/minecraft/src/BlockEndPortal.java b/src/net/minecraft/src/BlockEndPortal.java new file mode 100644 index 0000000..218cd07 --- /dev/null +++ b/src/net/minecraft/src/BlockEndPortal.java @@ -0,0 +1,79 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockEndPortal extends BlockContainer { + public static boolean bossDefeated = false; + + protected BlockEndPortal(int var1, Material var2) { + super(var1, var2); + this.setLightValue(1.0F); + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntityEndPortal(); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + float var5 = 1.0F / 16.0F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, var5, 1.0F); + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return var5 != 0 ? false : super.shouldSideBeRendered(var1, var2, var3, var4, var5); + } + + public void addCollisionBoxesToList(World var1, int var2, int var3, int var4, AxisAlignedBB var5, List var6, Entity var7) { + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int quantityDropped(Random var1) { + return 0; + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + if(var5.ridingEntity == null && var5.riddenByEntity == null && !var1.isRemote) { + var5.travelToDimension(1); + } + + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + double var6 = (double)((float)var2 + var5.nextFloat()); + double var8 = (double)((float)var3 + 0.8F); + double var10 = (double)((float)var4 + var5.nextFloat()); + double var12 = 0.0D; + double var14 = 0.0D; + double var16 = 0.0D; + var1.spawnParticle("smoke", var6, var8, var10, var12, var14, var16); + } + + public int getRenderType() { + return -1; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(!bossDefeated) { + if(var1.provider.dimensionId != 0) { + var1.setBlockToAir(var2, var3, var4); + } + + } + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return 0; + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("portal"); + } +} diff --git a/src/net/minecraft/src/BlockEndPortalFrame.java b/src/net/minecraft/src/BlockEndPortalFrame.java new file mode 100644 index 0000000..979d87e --- /dev/null +++ b/src/net/minecraft/src/BlockEndPortalFrame.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockEndPortalFrame extends Block { + private Icon field_94400_a; + private Icon field_94399_b; + + public BlockEndPortalFrame(int var1) { + super(var1, Material.rock); + } + + public Icon getIcon(int var1, int var2) { + return var1 == 1 ? this.field_94400_a : (var1 == 0 ? Block.whiteStone.getBlockTextureFromSide(var1) : this.blockIcon); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("endframe_side"); + this.field_94400_a = var1.registerIcon("endframe_top"); + this.field_94399_b = var1.registerIcon("endframe_eye"); + } + + public Icon func_94398_p() { + return this.field_94399_b; + } + + public boolean isOpaqueCube() { + return false; + } + + public int getRenderType() { + return 26; + } + + public void setBlockBoundsForItemRender() { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 13.0F / 16.0F, 1.0F); + } + + public void addCollisionBoxesToList(World var1, int var2, int var3, int var4, AxisAlignedBB var5, List var6, Entity var7) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 13.0F / 16.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + int var8 = var1.getBlockMetadata(var2, var3, var4); + if(isEnderEyeInserted(var8)) { + this.setBlockBounds(5.0F / 16.0F, 13.0F / 16.0F, 5.0F / 16.0F, 11.0F / 16.0F, 1.0F, 11.0F / 16.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + } + + this.setBlockBoundsForItemRender(); + } + + public static boolean isEnderEyeInserted(int var0) { + return (var0 & 4) != 0; + } + + public int idDropped(int var1, Random var2, int var3) { + return 0; + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + int var7 = ((MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3) + 2) % 4; + var1.setBlockMetadataWithNotify(var2, var3, var4, var7, 2); + } +} diff --git a/src/net/minecraft/src/BlockEnderChest.java b/src/net/minecraft/src/BlockEnderChest.java new file mode 100644 index 0000000..edf1b58 --- /dev/null +++ b/src/net/minecraft/src/BlockEnderChest.java @@ -0,0 +1,105 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockEnderChest extends BlockContainer { + protected BlockEnderChest(int var1) { + super(var1, Material.rock); + this.setCreativeTab(CreativeTabs.tabDecorations); + this.setBlockBounds(1.0F / 16.0F, 0.0F, 1.0F / 16.0F, 15.0F / 16.0F, 14.0F / 16.0F, 15.0F / 16.0F); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 22; + } + + public int idDropped(int var1, Random var2, int var3) { + return Block.obsidian.blockID; + } + + public int quantityDropped(Random var1) { + return 8; + } + + protected boolean canSilkHarvest() { + return true; + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + byte var7 = 0; + int var8 = MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + if(var8 == 0) { + var7 = 2; + } + + if(var8 == 1) { + var7 = 5; + } + + if(var8 == 2) { + var7 = 3; + } + + if(var8 == 3) { + var7 = 4; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var7, 2); + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + InventoryEnderChest var10 = var5.getInventoryEnderChest(); + TileEntityEnderChest var11 = (TileEntityEnderChest)var1.getBlockTileEntity(var2, var3, var4); + if(var10 != null && var11 != null) { + if(var1.isBlockNormalCube(var2, var3 + 1, var4)) { + return true; + } else if(var1.isRemote) { + return true; + } else { + var10.setAssociatedChest(var11); + var5.displayGUIChest(var10); + return true; + } + } else { + return true; + } + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntityEnderChest(); + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + for(int var6 = 0; var6 < 3; ++var6) { + double var10000 = (double)((float)var2 + var5.nextFloat()); + double var9 = (double)((float)var3 + var5.nextFloat()); + var10000 = (double)((float)var4 + var5.nextFloat()); + double var13 = 0.0D; + double var15 = 0.0D; + double var17 = 0.0D; + int var19 = var5.nextInt(2) * 2 - 1; + int var20 = var5.nextInt(2) * 2 - 1; + var13 = ((double)var5.nextFloat() - 0.5D) * 0.125D; + var15 = ((double)var5.nextFloat() - 0.5D) * 0.125D; + var17 = ((double)var5.nextFloat() - 0.5D) * 0.125D; + double var11 = (double)var4 + 0.5D + 0.25D * (double)var20; + var17 = (double)(var5.nextFloat() * 1.0F * (float)var20); + double var7 = (double)var2 + 0.5D + 0.25D * (double)var19; + var13 = (double)(var5.nextFloat() * 1.0F * (float)var19); + var1.spawnParticle("portal", var7, var9, var11, var13, var15, var17); + } + + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("obsidian"); + } +} diff --git a/src/net/minecraft/src/BlockEventData.java b/src/net/minecraft/src/BlockEventData.java new file mode 100644 index 0000000..ba1803f --- /dev/null +++ b/src/net/minecraft/src/BlockEventData.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +public class BlockEventData { + private int coordX; + private int coordY; + private int coordZ; + private int blockID; + private int eventID; + private int eventParameter; + + public BlockEventData(int var1, int var2, int var3, int var4, int var5, int var6) { + this.coordX = var1; + this.coordY = var2; + this.coordZ = var3; + this.eventID = var5; + this.eventParameter = var6; + this.blockID = var4; + } + + public int getX() { + return this.coordX; + } + + public int getY() { + return this.coordY; + } + + public int getZ() { + return this.coordZ; + } + + public int getEventID() { + return this.eventID; + } + + public int getEventParameter() { + return this.eventParameter; + } + + public int getBlockID() { + return this.blockID; + } + + public boolean equals(Object var1) { + if(!(var1 instanceof BlockEventData)) { + return false; + } else { + BlockEventData var2 = (BlockEventData)var1; + return this.coordX == var2.coordX && this.coordY == var2.coordY && this.coordZ == var2.coordZ && this.eventID == var2.eventID && this.eventParameter == var2.eventParameter && this.blockID == var2.blockID; + } + } + + public String toString() { + return "TE(" + this.coordX + "," + this.coordY + "," + this.coordZ + ")," + this.eventID + "," + this.eventParameter + "," + this.blockID; + } +} diff --git a/src/net/minecraft/src/BlockFarmland.java b/src/net/minecraft/src/BlockFarmland.java new file mode 100644 index 0000000..ee6aad4 --- /dev/null +++ b/src/net/minecraft/src/BlockFarmland.java @@ -0,0 +1,107 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFarmland extends Block { + private Icon field_94441_a; + private Icon field_94440_b; + + protected BlockFarmland(int var1) { + super(var1, Material.ground); + this.setTickRandomly(true); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 15.0F / 16.0F, 1.0F); + this.setLightOpacity(255); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return AxisAlignedBB.getAABBPool().getAABB((double)(var2 + 0), (double)(var3 + 0), (double)(var4 + 0), (double)(var2 + 1), (double)(var3 + 1), (double)(var4 + 1)); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public Icon getIcon(int var1, int var2) { + return var1 == 1 ? (var2 > 0 ? this.field_94441_a : this.field_94440_b) : Block.dirt.getBlockTextureFromSide(var1); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!this.isWaterNearby(var1, var2, var3, var4) && !var1.canLightningStrikeAt(var2, var3 + 1, var4)) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 > 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 - 1, 2); + } else if(!this.isCropsNearby(var1, var2, var3, var4)) { + var1.setBlock(var2, var3, var4, Block.dirt.blockID); + } + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, 7, 2); + } + + } + + public void onFallenUpon(World var1, int var2, int var3, int var4, Entity var5, float var6) { + if(!var1.isRemote && var1.rand.nextFloat() < var6 - 0.5F) { + if(!(var5 instanceof EntityPlayer) && !var1.getGameRules().getGameRuleBooleanValue("mobGriefing")) { + return; + } + + var1.setBlock(var2, var3, var4, Block.dirt.blockID); + } + + } + + private boolean isCropsNearby(World var1, int var2, int var3, int var4) { + byte var5 = 0; + + for(int var6 = var2 - var5; var6 <= var2 + var5; ++var6) { + for(int var7 = var4 - var5; var7 <= var4 + var5; ++var7) { + int var8 = var1.getBlockId(var6, var3 + 1, var7); + if(var8 == Block.crops.blockID || var8 == Block.melonStem.blockID || var8 == Block.pumpkinStem.blockID || var8 == Block.potato.blockID || var8 == Block.carrot.blockID) { + return true; + } + } + } + + return false; + } + + private boolean isWaterNearby(World var1, int var2, int var3, int var4) { + for(int var5 = var2 - 4; var5 <= var2 + 4; ++var5) { + for(int var6 = var3; var6 <= var3 + 1; ++var6) { + for(int var7 = var4 - 4; var7 <= var4 + 4; ++var7) { + if(var1.getBlockMaterial(var5, var6, var7) == Material.water) { + return true; + } + } + } + } + + return false; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + Material var6 = var1.getBlockMaterial(var2, var3 + 1, var4); + if(var6.isSolid()) { + var1.setBlock(var2, var3, var4, Block.dirt.blockID); + } + + } + + public int idDropped(int var1, Random var2, int var3) { + return Block.dirt.idDropped(0, var2, var3); + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Block.dirt.blockID; + } + + public void registerIcons(IconRegister var1) { + this.field_94441_a = var1.registerIcon("farmland_wet"); + this.field_94440_b = var1.registerIcon("farmland_dry"); + } +} diff --git a/src/net/minecraft/src/BlockFence.java b/src/net/minecraft/src/BlockFence.java new file mode 100644 index 0000000..d6bcbe6 --- /dev/null +++ b/src/net/minecraft/src/BlockFence.java @@ -0,0 +1,127 @@ +package net.minecraft.src; + +import java.util.List; + +public class BlockFence extends Block { + private final String field_94464_a; + + public BlockFence(int var1, String var2, Material var3) { + super(var1, var3); + this.field_94464_a = var2; + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public void addCollisionBoxesToList(World var1, int var2, int var3, int var4, AxisAlignedBB var5, List var6, Entity var7) { + boolean var8 = this.canConnectFenceTo(var1, var2, var3, var4 - 1); + boolean var9 = this.canConnectFenceTo(var1, var2, var3, var4 + 1); + boolean var10 = this.canConnectFenceTo(var1, var2 - 1, var3, var4); + boolean var11 = this.canConnectFenceTo(var1, var2 + 1, var3, var4); + float var12 = 6.0F / 16.0F; + float var13 = 10.0F / 16.0F; + float var14 = 6.0F / 16.0F; + float var15 = 10.0F / 16.0F; + if(var8) { + var14 = 0.0F; + } + + if(var9) { + var15 = 1.0F; + } + + if(var8 || var9) { + this.setBlockBounds(var12, 0.0F, var14, var13, 1.5F, var15); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + } + + var14 = 6.0F / 16.0F; + var15 = 10.0F / 16.0F; + if(var10) { + var12 = 0.0F; + } + + if(var11) { + var13 = 1.0F; + } + + if(var10 || var11 || !var8 && !var9) { + this.setBlockBounds(var12, 0.0F, var14, var13, 1.5F, var15); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + } + + if(var8) { + var14 = 0.0F; + } + + if(var9) { + var15 = 1.0F; + } + + this.setBlockBounds(var12, 0.0F, var14, var13, 1.0F, var15); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + boolean var5 = this.canConnectFenceTo(var1, var2, var3, var4 - 1); + boolean var6 = this.canConnectFenceTo(var1, var2, var3, var4 + 1); + boolean var7 = this.canConnectFenceTo(var1, var2 - 1, var3, var4); + boolean var8 = this.canConnectFenceTo(var1, var2 + 1, var3, var4); + float var9 = 6.0F / 16.0F; + float var10 = 10.0F / 16.0F; + float var11 = 6.0F / 16.0F; + float var12 = 10.0F / 16.0F; + if(var5) { + var11 = 0.0F; + } + + if(var6) { + var12 = 1.0F; + } + + if(var7) { + var9 = 0.0F; + } + + if(var8) { + var10 = 1.0F; + } + + this.setBlockBounds(var9, 0.0F, var11, var10, 1.0F, var12); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean getBlocksMovement(IBlockAccess var1, int var2, int var3, int var4) { + return false; + } + + public int getRenderType() { + return 11; + } + + public boolean canConnectFenceTo(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3, var4); + if(var5 != this.blockID && var5 != Block.fenceGate.blockID) { + Block var6 = Block.blocksList[var5]; + return var6 != null && var6.blockMaterial.isOpaque() && var6.renderAsNormalBlock() ? var6.blockMaterial != Material.pumpkin : false; + } else { + return true; + } + } + + public static boolean isIdAFence(int var0) { + return var0 == Block.fence.blockID || var0 == Block.netherFence.blockID; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return true; + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon(this.field_94464_a); + } +} diff --git a/src/net/minecraft/src/BlockFenceGate.java b/src/net/minecraft/src/BlockFenceGate.java new file mode 100644 index 0000000..d311baa --- /dev/null +++ b/src/net/minecraft/src/BlockFenceGate.java @@ -0,0 +1,98 @@ +package net.minecraft.src; + +public class BlockFenceGate extends BlockDirectional { + public BlockFenceGate(int var1) { + super(var1, Material.wood); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + + public Icon getIcon(int var1, int var2) { + return Block.planks.getBlockTextureFromSide(var1); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return !var1.getBlockMaterial(var2, var3 - 1, var4).isSolid() ? false : super.canPlaceBlockAt(var1, var2, var3, var4); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + return isFenceGateOpen(var5) ? null : (var5 != 2 && var5 != 0 ? AxisAlignedBB.getAABBPool().getAABB((double)((float)var2 + 6.0F / 16.0F), (double)var3, (double)var4, (double)((float)var2 + 10.0F / 16.0F), (double)((float)var3 + 1.5F), (double)(var4 + 1)) : AxisAlignedBB.getAABBPool().getAABB((double)var2, (double)var3, (double)((float)var4 + 6.0F / 16.0F), (double)(var2 + 1), (double)((float)var3 + 1.5F), (double)((float)var4 + 10.0F / 16.0F))); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = getDirection(var1.getBlockMetadata(var2, var3, var4)); + if(var5 != 2 && var5 != 0) { + this.setBlockBounds(6.0F / 16.0F, 0.0F, 0.0F, 10.0F / 16.0F, 1.0F, 1.0F); + } else { + this.setBlockBounds(0.0F, 0.0F, 6.0F / 16.0F, 1.0F, 1.0F, 10.0F / 16.0F); + } + + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean getBlocksMovement(IBlockAccess var1, int var2, int var3, int var4) { + return isFenceGateOpen(var1.getBlockMetadata(var2, var3, var4)); + } + + public int getRenderType() { + return 21; + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + int var7 = (MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3) % 4; + var1.setBlockMetadataWithNotify(var2, var3, var4, var7, 2); + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + int var10 = var1.getBlockMetadata(var2, var3, var4); + if(isFenceGateOpen(var10)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var10 & -5, 2); + } else { + int var11 = (MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3) % 4; + int var12 = getDirection(var10); + if(var12 == (var11 + 2) % 4) { + var10 = var11; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var10 | 4, 2); + } + + var1.playAuxSFXAtEntity(var5, 1003, var2, var3, var4, 0); + return true; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isRemote) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + boolean var7 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4); + if(var7 || var5 > 0 && Block.blocksList[var5].canProvidePower()) { + if(var7 && !isFenceGateOpen(var6)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 | 4, 2); + var1.playAuxSFXAtEntity((EntityPlayer)null, 1003, var2, var3, var4, 0); + } else if(!var7 && isFenceGateOpen(var6)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 & -5, 2); + var1.playAuxSFXAtEntity((EntityPlayer)null, 1003, var2, var3, var4, 0); + } + } + + } + } + + public static boolean isFenceGateOpen(int var0) { + return (var0 & 4) != 0; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return true; + } + + public void registerIcons(IconRegister var1) { + } +} diff --git a/src/net/minecraft/src/BlockFire.java b/src/net/minecraft/src/BlockFire.java new file mode 100644 index 0000000..9fdee0a --- /dev/null +++ b/src/net/minecraft/src/BlockFire.java @@ -0,0 +1,293 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFire extends Block { + private int[] chanceToEncourageFire = new int[256]; + private int[] abilityToCatchFire = new int[256]; + private Icon[] iconArray; + + protected BlockFire(int var1) { + super(var1, Material.fire); + this.setTickRandomly(true); + } + + public void initializeBlock() { + this.setBurnRate(Block.planks.blockID, 5, 20); + this.setBurnRate(Block.woodDoubleSlab.blockID, 5, 20); + this.setBurnRate(Block.woodSingleSlab.blockID, 5, 20); + this.setBurnRate(Block.fence.blockID, 5, 20); + this.setBurnRate(Block.stairsWoodOak.blockID, 5, 20); + this.setBurnRate(Block.stairsWoodBirch.blockID, 5, 20); + this.setBurnRate(Block.stairsWoodSpruce.blockID, 5, 20); + this.setBurnRate(Block.stairsWoodJungle.blockID, 5, 20); + this.setBurnRate(Block.wood.blockID, 5, 5); + this.setBurnRate(Block.leaves.blockID, 30, 60); + this.setBurnRate(Block.bookShelf.blockID, 30, 20); + this.setBurnRate(Block.tnt.blockID, 15, 100); + this.setBurnRate(Block.tallGrass.blockID, 60, 100); + this.setBurnRate(Block.cloth.blockID, 30, 60); + this.setBurnRate(Block.vine.blockID, 15, 100); + } + + private void setBurnRate(int var1, int var2, int var3) { + this.chanceToEncourageFire[var1] = var2; + this.abilityToCatchFire[var1] = var3; + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 3; + } + + public int quantityDropped(Random var1) { + return 0; + } + + public int tickRate(World var1) { + return 30; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.getGameRules().getGameRuleBooleanValue("doFireTick")) { + boolean var6 = var1.getBlockId(var2, var3 - 1, var4) == Block.netherrack.blockID; + if(var1.provider instanceof WorldProviderEnd && var1.getBlockId(var2, var3 - 1, var4) == Block.bedrock.blockID) { + var6 = true; + } + + if(!this.canPlaceBlockAt(var1, var2, var3, var4)) { + var1.setBlockToAir(var2, var3, var4); + } + + if(var6 || !var1.isRaining() || !var1.canLightningStrikeAt(var2, var3, var4) && !var1.canLightningStrikeAt(var2 - 1, var3, var4) && !var1.canLightningStrikeAt(var2 + 1, var3, var4) && !var1.canLightningStrikeAt(var2, var3, var4 - 1) && !var1.canLightningStrikeAt(var2, var3, var4 + 1)) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + if(var7 < 15) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var7 + var5.nextInt(3) / 2, 4); + } + + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1) + var5.nextInt(10)); + if(!var6 && !this.canNeighborBurn(var1, var2, var3, var4)) { + if(!var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) || var7 > 3) { + var1.setBlockToAir(var2, var3, var4); + } + + } else if(!var6 && !this.canBlockCatchFire(var1, var2, var3 - 1, var4) && var7 == 15 && var5.nextInt(4) == 0) { + var1.setBlockToAir(var2, var3, var4); + } else { + boolean var8 = var1.isBlockHighHumidity(var2, var3, var4); + byte var9 = 0; + if(var8) { + var9 = -50; + } + + this.tryToCatchBlockOnFire(var1, var2 + 1, var3, var4, 300 + var9, var5, var7); + this.tryToCatchBlockOnFire(var1, var2 - 1, var3, var4, 300 + var9, var5, var7); + this.tryToCatchBlockOnFire(var1, var2, var3 - 1, var4, 250 + var9, var5, var7); + this.tryToCatchBlockOnFire(var1, var2, var3 + 1, var4, 250 + var9, var5, var7); + this.tryToCatchBlockOnFire(var1, var2, var3, var4 - 1, 300 + var9, var5, var7); + this.tryToCatchBlockOnFire(var1, var2, var3, var4 + 1, 300 + var9, var5, var7); + + for(int var10 = var2 - 1; var10 <= var2 + 1; ++var10) { + for(int var11 = var4 - 1; var11 <= var4 + 1; ++var11) { + for(int var12 = var3 - 1; var12 <= var3 + 4; ++var12) { + if(var10 != var2 || var12 != var3 || var11 != var4) { + int var13 = 100; + if(var12 > var3 + 1) { + var13 += (var12 - (var3 + 1)) * 100; + } + + int var14 = this.getChanceOfNeighborsEncouragingFire(var1, var10, var12, var11); + if(var14 > 0) { + int var15 = (var14 + 40 + var1.difficultySetting * 7) / (var7 + 30); + if(var8) { + var15 /= 2; + } + + if(var15 > 0 && var5.nextInt(var13) <= var15 && (!var1.isRaining() || !var1.canLightningStrikeAt(var10, var12, var11)) && !var1.canLightningStrikeAt(var10 - 1, var12, var4) && !var1.canLightningStrikeAt(var10 + 1, var12, var11) && !var1.canLightningStrikeAt(var10, var12, var11 - 1) && !var1.canLightningStrikeAt(var10, var12, var11 + 1)) { + int var16 = var7 + var5.nextInt(5) / 4; + if(var16 > 15) { + var16 = 15; + } + + var1.setBlock(var10, var12, var11, this.blockID, var16, 3); + } + } + } + } + } + } + + } + } else { + var1.setBlockToAir(var2, var3, var4); + } + } + } + + public boolean func_82506_l() { + return false; + } + + private void tryToCatchBlockOnFire(World var1, int var2, int var3, int var4, int var5, Random var6, int var7) { + int var8 = this.abilityToCatchFire[var1.getBlockId(var2, var3, var4)]; + if(var6.nextInt(var5) < var8) { + boolean var9 = var1.getBlockId(var2, var3, var4) == Block.tnt.blockID; + if(var6.nextInt(var7 + 10) < 5 && !var1.canLightningStrikeAt(var2, var3, var4)) { + int var10 = var7 + var6.nextInt(5) / 4; + if(var10 > 15) { + var10 = 15; + } + + var1.setBlock(var2, var3, var4, this.blockID, var10, 3); + } else { + var1.setBlockToAir(var2, var3, var4); + } + + if(var9) { + Block.tnt.onBlockDestroyedByPlayer(var1, var2, var3, var4, 1); + } + } + + } + + private boolean canNeighborBurn(World var1, int var2, int var3, int var4) { + return this.canBlockCatchFire(var1, var2 + 1, var3, var4) ? true : (this.canBlockCatchFire(var1, var2 - 1, var3, var4) ? true : (this.canBlockCatchFire(var1, var2, var3 - 1, var4) ? true : (this.canBlockCatchFire(var1, var2, var3 + 1, var4) ? true : (this.canBlockCatchFire(var1, var2, var3, var4 - 1) ? true : this.canBlockCatchFire(var1, var2, var3, var4 + 1))))); + } + + private int getChanceOfNeighborsEncouragingFire(World var1, int var2, int var3, int var4) { + byte var5 = 0; + if(!var1.isAirBlock(var2, var3, var4)) { + return 0; + } else { + int var6 = this.getChanceToEncourageFire(var1, var2 + 1, var3, var4, var5); + var6 = this.getChanceToEncourageFire(var1, var2 - 1, var3, var4, var6); + var6 = this.getChanceToEncourageFire(var1, var2, var3 - 1, var4, var6); + var6 = this.getChanceToEncourageFire(var1, var2, var3 + 1, var4, var6); + var6 = this.getChanceToEncourageFire(var1, var2, var3, var4 - 1, var6); + var6 = this.getChanceToEncourageFire(var1, var2, var3, var4 + 1, var6); + return var6; + } + } + + public boolean isCollidable() { + return false; + } + + public boolean canBlockCatchFire(IBlockAccess var1, int var2, int var3, int var4) { + return this.chanceToEncourageFire[var1.getBlockId(var2, var3, var4)] > 0; + } + + public int getChanceToEncourageFire(World var1, int var2, int var3, int var4, int var5) { + int var6 = this.chanceToEncourageFire[var1.getBlockId(var2, var3, var4)]; + return var6 > var5 ? var6 : var5; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) || this.canNeighborBurn(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) && !this.canNeighborBurn(var1, var2, var3, var4)) { + var1.setBlockToAir(var2, var3, var4); + } + + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(var1.provider.dimensionId > 0 || var1.getBlockId(var2, var3 - 1, var4) != Block.obsidian.blockID || !Block.portal.tryToCreatePortal(var1, var2, var3, var4)) { + if(!var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) && !this.canNeighborBurn(var1, var2, var3, var4)) { + var1.setBlockToAir(var2, var3, var4); + } else { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1) + var1.rand.nextInt(10)); + } + } + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + if(var5.nextInt(24) == 0) { + var1.playSound((double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), "fire.fire", 1.0F + var5.nextFloat(), var5.nextFloat() * 0.7F + 0.3F, false); + } + + int var6; + float var7; + float var8; + float var9; + if(!var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) && !Block.fire.canBlockCatchFire(var1, var2, var3 - 1, var4)) { + if(Block.fire.canBlockCatchFire(var1, var2 - 1, var3, var4)) { + for(var6 = 0; var6 < 2; ++var6) { + var7 = (float)var2 + var5.nextFloat() * 0.1F; + var8 = (float)var3 + var5.nextFloat(); + var9 = (float)var4 + var5.nextFloat(); + var1.spawnParticle("largesmoke", (double)var7, (double)var8, (double)var9, 0.0D, 0.0D, 0.0D); + } + } + + if(Block.fire.canBlockCatchFire(var1, var2 + 1, var3, var4)) { + for(var6 = 0; var6 < 2; ++var6) { + var7 = (float)(var2 + 1) - var5.nextFloat() * 0.1F; + var8 = (float)var3 + var5.nextFloat(); + var9 = (float)var4 + var5.nextFloat(); + var1.spawnParticle("largesmoke", (double)var7, (double)var8, (double)var9, 0.0D, 0.0D, 0.0D); + } + } + + if(Block.fire.canBlockCatchFire(var1, var2, var3, var4 - 1)) { + for(var6 = 0; var6 < 2; ++var6) { + var7 = (float)var2 + var5.nextFloat(); + var8 = (float)var3 + var5.nextFloat(); + var9 = (float)var4 + var5.nextFloat() * 0.1F; + var1.spawnParticle("largesmoke", (double)var7, (double)var8, (double)var9, 0.0D, 0.0D, 0.0D); + } + } + + if(Block.fire.canBlockCatchFire(var1, var2, var3, var4 + 1)) { + for(var6 = 0; var6 < 2; ++var6) { + var7 = (float)var2 + var5.nextFloat(); + var8 = (float)var3 + var5.nextFloat(); + var9 = (float)(var4 + 1) - var5.nextFloat() * 0.1F; + var1.spawnParticle("largesmoke", (double)var7, (double)var8, (double)var9, 0.0D, 0.0D, 0.0D); + } + } + + if(Block.fire.canBlockCatchFire(var1, var2, var3 + 1, var4)) { + for(var6 = 0; var6 < 2; ++var6) { + var7 = (float)var2 + var5.nextFloat(); + var8 = (float)(var3 + 1) - var5.nextFloat() * 0.1F; + var9 = (float)var4 + var5.nextFloat(); + var1.spawnParticle("largesmoke", (double)var7, (double)var8, (double)var9, 0.0D, 0.0D, 0.0D); + } + } + } else { + for(var6 = 0; var6 < 3; ++var6) { + var7 = (float)var2 + var5.nextFloat(); + var8 = (float)var3 + var5.nextFloat() * 0.5F + 0.5F; + var9 = (float)var4 + var5.nextFloat(); + var1.spawnParticle("largesmoke", (double)var7, (double)var8, (double)var9, 0.0D, 0.0D, 0.0D); + } + } + + } + + public void registerIcons(IconRegister var1) { + this.iconArray = new Icon[]{var1.registerIcon("fire_0"), var1.registerIcon("fire_1")}; + } + + public Icon func_94438_c(int var1) { + return this.iconArray[var1]; + } + + public Icon getIcon(int var1, int var2) { + return this.iconArray[0]; + } +} diff --git a/src/net/minecraft/src/BlockFlower.java b/src/net/minecraft/src/BlockFlower.java new file mode 100644 index 0000000..1fc3982 --- /dev/null +++ b/src/net/minecraft/src/BlockFlower.java @@ -0,0 +1,62 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFlower extends Block { + protected BlockFlower(int var1, Material var2) { + super(var1, var2); + this.setTickRandomly(true); + float var3 = 0.2F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, var3 * 3.0F, 0.5F + var3); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + protected BlockFlower(int var1) { + this(var1, Material.plants); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return super.canPlaceBlockAt(var1, var2, var3, var4) && this.canThisPlantGrowOnThisBlockID(var1.getBlockId(var2, var3 - 1, var4)); + } + + protected boolean canThisPlantGrowOnThisBlockID(int var1) { + return var1 == Block.grass.blockID || var1 == Block.dirt.blockID || var1 == Block.tilledField.blockID; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + this.checkFlowerChange(var1, var2, var3, var4); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + this.checkFlowerChange(var1, var2, var3, var4); + } + + protected final void checkFlowerChange(World var1, int var2, int var3, int var4) { + if(!this.canBlockStay(var1, var2, var3, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + } + + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + return (var1.getFullBlockLightValue(var2, var3, var4) >= 8 || var1.canBlockSeeTheSky(var2, var3, var4)) && this.canThisPlantGrowOnThisBlockID(var1.getBlockId(var2, var3 - 1, var4)); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 1; + } +} diff --git a/src/net/minecraft/src/BlockFlowerPot.java b/src/net/minecraft/src/BlockFlowerPot.java new file mode 100644 index 0000000..b15ea08 --- /dev/null +++ b/src/net/minecraft/src/BlockFlowerPot.java @@ -0,0 +1,158 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFlowerPot extends Block { + public BlockFlowerPot(int var1) { + super(var1, Material.circuits); + this.setBlockBoundsForItemRender(); + } + + public void setBlockBoundsForItemRender() { + float var1 = 6.0F / 16.0F; + float var2 = var1 / 2.0F; + this.setBlockBounds(0.5F - var2, 0.0F, 0.5F - var2, 0.5F + var2, var1, 0.5F + var2); + } + + public boolean isOpaqueCube() { + return false; + } + + public int getRenderType() { + return 33; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + ItemStack var10 = var5.inventory.getCurrentItem(); + if(var10 == null) { + return false; + } else if(var1.getBlockMetadata(var2, var3, var4) != 0) { + return false; + } else { + int var11 = getMetaForPlant(var10); + if(var11 > 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var11, 2); + if(!var5.capabilities.isCreativeMode && --var10.stackSize <= 0) { + var5.inventory.setInventorySlotContents(var5.inventory.currentItem, (ItemStack)null); + } + + return true; + } else { + return false; + } + } + } + + public int idPicked(World var1, int var2, int var3, int var4) { + ItemStack var5 = getPlantForMeta(var1.getBlockMetadata(var2, var3, var4)); + return var5 == null ? Item.flowerPot.itemID : var5.itemID; + } + + public int getDamageValue(World var1, int var2, int var3, int var4) { + ItemStack var5 = getPlantForMeta(var1.getBlockMetadata(var2, var3, var4)); + return var5 == null ? Item.flowerPot.itemID : var5.getItemDamage(); + } + + public boolean isFlowerPot() { + return true; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return super.canPlaceBlockAt(var1, var2, var3, var4) && var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + } + + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6, var7); + if(var5 > 0) { + ItemStack var8 = getPlantForMeta(var5); + if(var8 != null) { + this.dropBlockAsItem_do(var1, var2, var3, var4, var8); + } + } + + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.flowerPot.itemID; + } + + public static ItemStack getPlantForMeta(int var0) { + switch(var0) { + case 1: + return new ItemStack(Block.plantRed); + case 2: + return new ItemStack(Block.plantYellow); + case 3: + return new ItemStack(Block.sapling, 1, 0); + case 4: + return new ItemStack(Block.sapling, 1, 1); + case 5: + return new ItemStack(Block.sapling, 1, 2); + case 6: + return new ItemStack(Block.sapling, 1, 3); + case 7: + return new ItemStack(Block.mushroomRed); + case 8: + return new ItemStack(Block.mushroomBrown); + case 9: + return new ItemStack(Block.cactus); + case 10: + return new ItemStack(Block.deadBush); + case 11: + return new ItemStack(Block.tallGrass, 1, 2); + default: + return null; + } + } + + public static int getMetaForPlant(ItemStack var0) { + int var1 = var0.getItem().itemID; + if(var1 == Block.plantRed.blockID) { + return 1; + } else if(var1 == Block.plantYellow.blockID) { + return 2; + } else if(var1 == Block.cactus.blockID) { + return 9; + } else if(var1 == Block.mushroomBrown.blockID) { + return 8; + } else if(var1 == Block.mushroomRed.blockID) { + return 7; + } else if(var1 == Block.deadBush.blockID) { + return 10; + } else { + if(var1 == Block.sapling.blockID) { + switch(var0.getItemDamage()) { + case 0: + return 3; + case 1: + return 4; + case 2: + return 5; + case 3: + return 6; + } + } + + if(var1 == Block.tallGrass.blockID) { + switch(var0.getItemDamage()) { + case 2: + return 11; + } + } + + return 0; + } + } +} diff --git a/src/net/minecraft/src/BlockFlowing.java b/src/net/minecraft/src/BlockFlowing.java new file mode 100644 index 0000000..e9beae1 --- /dev/null +++ b/src/net/minecraft/src/BlockFlowing.java @@ -0,0 +1,277 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFlowing extends BlockFluid { + int numAdjacentSources = 0; + boolean[] isOptimalFlowDirection = new boolean[4]; + int[] flowCost = new int[4]; + + protected BlockFlowing(int var1, Material var2) { + super(var1, var2); + } + + private void updateFlow(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + var1.setBlock(var2, var3, var4, this.blockID + 1, var5, 2); + } + + public boolean getBlocksMovement(IBlockAccess var1, int var2, int var3, int var4) { + return this.blockMaterial != Material.lava; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + int var6 = this.getFlowDecay(var1, var2, var3, var4); + byte var7 = 1; + if(this.blockMaterial == Material.lava && !var1.provider.isHellWorld) { + var7 = 2; + } + + boolean var8 = true; + int var10; + if(var6 > 0) { + byte var9 = -100; + this.numAdjacentSources = 0; + int var12 = this.getSmallestFlowDecay(var1, var2 - 1, var3, var4, var9); + var12 = this.getSmallestFlowDecay(var1, var2 + 1, var3, var4, var12); + var12 = this.getSmallestFlowDecay(var1, var2, var3, var4 - 1, var12); + var12 = this.getSmallestFlowDecay(var1, var2, var3, var4 + 1, var12); + var10 = var12 + var7; + if(var10 >= 8 || var12 < 0) { + var10 = -1; + } + + if(this.getFlowDecay(var1, var2, var3 + 1, var4) >= 0) { + int var11 = this.getFlowDecay(var1, var2, var3 + 1, var4); + if(var11 >= 8) { + var10 = var11; + } else { + var10 = var11 + 8; + } + } + + if(this.numAdjacentSources >= 2 && this.blockMaterial == Material.water) { + if(var1.getBlockMaterial(var2, var3 - 1, var4).isSolid()) { + var10 = 0; + } else if(var1.getBlockMaterial(var2, var3 - 1, var4) == this.blockMaterial && var1.getBlockMetadata(var2, var3 - 1, var4) == 0) { + var10 = 0; + } + } + + if(this.blockMaterial == Material.lava && var6 < 8 && var10 < 8 && var10 > var6 && var5.nextInt(4) != 0) { + var10 = var6; + var8 = false; + } + + if(var10 == var6) { + if(var8) { + this.updateFlow(var1, var2, var3, var4); + } + } else { + var6 = var10; + if(var10 < 0) { + var1.setBlockToAir(var2, var3, var4); + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, var10, 2); + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1)); + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + } + } + } else { + this.updateFlow(var1, var2, var3, var4); + } + + if(this.liquidCanDisplaceBlock(var1, var2, var3 - 1, var4)) { + if(this.blockMaterial == Material.lava && var1.getBlockMaterial(var2, var3 - 1, var4) == Material.water) { + var1.setBlock(var2, var3 - 1, var4, Block.stone.blockID); + this.triggerLavaMixEffects(var1, var2, var3 - 1, var4); + return; + } + + if(var6 >= 8) { + this.flowIntoBlock(var1, var2, var3 - 1, var4, var6); + } else { + this.flowIntoBlock(var1, var2, var3 - 1, var4, var6 + 8); + } + } else if(var6 >= 0 && (var6 == 0 || this.blockBlocksFlow(var1, var2, var3 - 1, var4))) { + boolean[] var13 = this.getOptimalFlowDirections(var1, var2, var3, var4); + var10 = var6 + var7; + if(var6 >= 8) { + var10 = 1; + } + + if(var10 >= 8) { + return; + } + + if(var13[0]) { + this.flowIntoBlock(var1, var2 - 1, var3, var4, var10); + } + + if(var13[1]) { + this.flowIntoBlock(var1, var2 + 1, var3, var4, var10); + } + + if(var13[2]) { + this.flowIntoBlock(var1, var2, var3, var4 - 1, var10); + } + + if(var13[3]) { + this.flowIntoBlock(var1, var2, var3, var4 + 1, var10); + } + } + + } + + private void flowIntoBlock(World var1, int var2, int var3, int var4, int var5) { + if(this.liquidCanDisplaceBlock(var1, var2, var3, var4)) { + int var6 = var1.getBlockId(var2, var3, var4); + if(var6 > 0) { + if(this.blockMaterial == Material.lava) { + this.triggerLavaMixEffects(var1, var2, var3, var4); + } else { + Block.blocksList[var6].dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + } + } + + var1.setBlock(var2, var3, var4, this.blockID, var5, 3); + } + + } + + private int calculateFlowCost(World var1, int var2, int var3, int var4, int var5, int var6) { + int var7 = 1000; + + for(int var8 = 0; var8 < 4; ++var8) { + if((var8 != 0 || var6 != 1) && (var8 != 1 || var6 != 0) && (var8 != 2 || var6 != 3) && (var8 != 3 || var6 != 2)) { + int var9 = var2; + int var11 = var4; + if(var8 == 0) { + var9 = var2 - 1; + } + + if(var8 == 1) { + ++var9; + } + + if(var8 == 2) { + var11 = var4 - 1; + } + + if(var8 == 3) { + ++var11; + } + + if(!this.blockBlocksFlow(var1, var9, var3, var11) && (var1.getBlockMaterial(var9, var3, var11) != this.blockMaterial || var1.getBlockMetadata(var9, var3, var11) != 0)) { + if(!this.blockBlocksFlow(var1, var9, var3 - 1, var11)) { + return var5; + } + + if(var5 < 4) { + int var12 = this.calculateFlowCost(var1, var9, var3, var11, var5 + 1, var8); + if(var12 < var7) { + var7 = var12; + } + } + } + } + } + + return var7; + } + + private boolean[] getOptimalFlowDirections(World var1, int var2, int var3, int var4) { + int var5; + int var6; + for(var5 = 0; var5 < 4; ++var5) { + this.flowCost[var5] = 1000; + var6 = var2; + int var8 = var4; + if(var5 == 0) { + var6 = var2 - 1; + } + + if(var5 == 1) { + ++var6; + } + + if(var5 == 2) { + var8 = var4 - 1; + } + + if(var5 == 3) { + ++var8; + } + + if(!this.blockBlocksFlow(var1, var6, var3, var8) && (var1.getBlockMaterial(var6, var3, var8) != this.blockMaterial || var1.getBlockMetadata(var6, var3, var8) != 0)) { + if(this.blockBlocksFlow(var1, var6, var3 - 1, var8)) { + this.flowCost[var5] = this.calculateFlowCost(var1, var6, var3, var8, 1, var5); + } else { + this.flowCost[var5] = 0; + } + } + } + + var5 = this.flowCost[0]; + + for(var6 = 1; var6 < 4; ++var6) { + if(this.flowCost[var6] < var5) { + var5 = this.flowCost[var6]; + } + } + + for(var6 = 0; var6 < 4; ++var6) { + this.isOptimalFlowDirection[var6] = this.flowCost[var6] == var5; + } + + return this.isOptimalFlowDirection; + } + + private boolean blockBlocksFlow(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3, var4); + if(var5 != Block.doorWood.blockID && var5 != Block.doorIron.blockID && var5 != Block.signPost.blockID && var5 != Block.ladder.blockID && var5 != Block.reed.blockID) { + if(var5 == 0) { + return false; + } else { + Material var6 = Block.blocksList[var5].blockMaterial; + return var6 == Material.portal ? true : var6.blocksMovement(); + } + } else { + return true; + } + } + + protected int getSmallestFlowDecay(World var1, int var2, int var3, int var4, int var5) { + int var6 = this.getFlowDecay(var1, var2, var3, var4); + if(var6 < 0) { + return var5; + } else { + if(var6 == 0) { + ++this.numAdjacentSources; + } + + if(var6 >= 8) { + var6 = 0; + } + + return var5 >= 0 && var6 >= var5 ? var5 : var6; + } + } + + private boolean liquidCanDisplaceBlock(World var1, int var2, int var3, int var4) { + Material var5 = var1.getBlockMaterial(var2, var3, var4); + return var5 == this.blockMaterial ? false : (var5 == Material.lava ? false : !this.blockBlocksFlow(var1, var2, var3, var4)); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + if(var1.getBlockId(var2, var3, var4) == this.blockID) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1)); + } + + } + + public boolean func_82506_l() { + return false; + } +} diff --git a/src/net/minecraft/src/BlockFluid.java b/src/net/minecraft/src/BlockFluid.java new file mode 100644 index 0000000..5797c56 --- /dev/null +++ b/src/net/minecraft/src/BlockFluid.java @@ -0,0 +1,417 @@ +package net.minecraft.src; + +import java.util.Random; + +public abstract class BlockFluid extends Block { + private Icon[] theIcon; + + protected BlockFluid(int var1, Material var2) { + super(var1, var2); + float var3 = 0.0F; + float var4 = 0.0F; + this.setBlockBounds(0.0F + var4, 0.0F + var3, 0.0F + var4, 1.0F + var4, 1.0F + var3, 1.0F + var4); + this.setTickRandomly(true); + } + + public boolean getBlocksMovement(IBlockAccess var1, int var2, int var3, int var4) { + return this.blockMaterial != Material.lava; + } + + public int getBlockColor() { + return 16777215; + } + + public int colorMultiplier(IBlockAccess var1, int var2, int var3, int var4) { + if(this.blockMaterial != Material.water) { + return 16777215; + } else { + int var5 = 0; + int var6 = 0; + int var7 = 0; + + for(int var8 = -1; var8 <= 1; ++var8) { + for(int var9 = -1; var9 <= 1; ++var9) { + int var10 = var1.getBiomeGenForCoords(var2 + var9, var4 + var8).waterColorMultiplier; + var5 += (var10 & 16711680) >> 16; + var6 += (var10 & '\uff00') >> 8; + var7 += var10 & 255; + } + } + + return (var5 / 9 & 255) << 16 | (var6 / 9 & 255) << 8 | var7 / 9 & 255; + } + } + + public static float getFluidHeightPercent(int var0) { + if(var0 >= 8) { + var0 = 0; + } + + return (float)(var0 + 1) / 9.0F; + } + + public Icon getIcon(int var1, int var2) { + return var1 != 0 && var1 != 1 ? this.theIcon[1] : this.theIcon[0]; + } + + protected int getFlowDecay(World var1, int var2, int var3, int var4) { + return var1.getBlockMaterial(var2, var3, var4) == this.blockMaterial ? var1.getBlockMetadata(var2, var3, var4) : -1; + } + + protected int getEffectiveFlowDecay(IBlockAccess var1, int var2, int var3, int var4) { + if(var1.getBlockMaterial(var2, var3, var4) != this.blockMaterial) { + return -1; + } else { + int var5 = var1.getBlockMetadata(var2, var3, var4); + if(var5 >= 8) { + var5 = 0; + } + + return var5; + } + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean canCollideCheck(int var1, boolean var2) { + return var2 && var1 == 0; + } + + public boolean isBlockSolid(IBlockAccess var1, int var2, int var3, int var4, int var5) { + Material var6 = var1.getBlockMaterial(var2, var3, var4); + return var6 == this.blockMaterial ? false : (var5 == 1 ? true : (var6 == Material.ice ? false : super.isBlockSolid(var1, var2, var3, var4, var5))); + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + Material var6 = var1.getBlockMaterial(var2, var3, var4); + return var6 == this.blockMaterial ? false : (var5 == 1 ? true : (var6 == Material.ice ? false : super.shouldSideBeRendered(var1, var2, var3, var4, var5))); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public int getRenderType() { + return 4; + } + + public int idDropped(int var1, Random var2, int var3) { + return 0; + } + + public int quantityDropped(Random var1) { + return 0; + } + + private Vec3 getFlowVector(IBlockAccess var1, int var2, int var3, int var4) { + Vec3 var5 = var1.getWorldVec3Pool().getVecFromPool(0.0D, 0.0D, 0.0D); + int var6 = this.getEffectiveFlowDecay(var1, var2, var3, var4); + + for(int var7 = 0; var7 < 4; ++var7) { + int var8 = var2; + int var10 = var4; + if(var7 == 0) { + var8 = var2 - 1; + } + + if(var7 == 1) { + var10 = var4 - 1; + } + + if(var7 == 2) { + ++var8; + } + + if(var7 == 3) { + ++var10; + } + + int var11 = this.getEffectiveFlowDecay(var1, var8, var3, var10); + int var12; + if(var11 < 0) { + if(!var1.getBlockMaterial(var8, var3, var10).blocksMovement()) { + var11 = this.getEffectiveFlowDecay(var1, var8, var3 - 1, var10); + if(var11 >= 0) { + var12 = var11 - (var6 - 8); + var5 = var5.addVector((double)((var8 - var2) * var12), (double)((var3 - var3) * var12), (double)((var10 - var4) * var12)); + } + } + } else if(var11 >= 0) { + var12 = var11 - var6; + var5 = var5.addVector((double)((var8 - var2) * var12), (double)((var3 - var3) * var12), (double)((var10 - var4) * var12)); + } + } + + if(var1.getBlockMetadata(var2, var3, var4) >= 8) { + boolean var13 = false; + if(var13 || this.isBlockSolid(var1, var2, var3, var4 - 1, 2)) { + var13 = true; + } + + if(var13 || this.isBlockSolid(var1, var2, var3, var4 + 1, 3)) { + var13 = true; + } + + if(var13 || this.isBlockSolid(var1, var2 - 1, var3, var4, 4)) { + var13 = true; + } + + if(var13 || this.isBlockSolid(var1, var2 + 1, var3, var4, 5)) { + var13 = true; + } + + if(var13 || this.isBlockSolid(var1, var2, var3 + 1, var4 - 1, 2)) { + var13 = true; + } + + if(var13 || this.isBlockSolid(var1, var2, var3 + 1, var4 + 1, 3)) { + var13 = true; + } + + if(var13 || this.isBlockSolid(var1, var2 - 1, var3 + 1, var4, 4)) { + var13 = true; + } + + if(var13 || this.isBlockSolid(var1, var2 + 1, var3 + 1, var4, 5)) { + var13 = true; + } + + if(var13) { + var5 = var5.normalize().addVector(0.0D, -6.0D, 0.0D); + } + } + + var5 = var5.normalize(); + return var5; + } + + public void velocityToAddToEntity(World var1, int var2, int var3, int var4, Entity var5, Vec3 var6) { + Vec3 var7 = this.getFlowVector(var1, var2, var3, var4); + var6.xCoord += var7.xCoord; + var6.yCoord += var7.yCoord; + var6.zCoord += var7.zCoord; + } + + public int tickRate(World var1) { + return this.blockMaterial == Material.water ? 5 : (this.blockMaterial == Material.lava ? (var1.provider.hasNoSky ? 10 : 30) : 0); + } + + public int getMixedBrightnessForBlock(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getLightBrightnessForSkyBlocks(var2, var3, var4, 0); + int var6 = var1.getLightBrightnessForSkyBlocks(var2, var3 + 1, var4, 0); + int var7 = var5 & 255; + int var8 = var6 & 255; + int var9 = var5 >> 16 & 255; + int var10 = var6 >> 16 & 255; + return (var7 > var8 ? var7 : var8) | (var9 > var10 ? var9 : var10) << 16; + } + + public float getBlockBrightness(IBlockAccess var1, int var2, int var3, int var4) { + float var5 = var1.getLightBrightness(var2, var3, var4); + float var6 = var1.getLightBrightness(var2, var3 + 1, var4); + return var5 > var6 ? var5 : var6; + } + + public int getRenderBlockPass() { + return this.blockMaterial == Material.water ? 1 : 0; + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + int var6; + if(this.blockMaterial == Material.water) { + if(var5.nextInt(10) == 0) { + var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 <= 0 || var6 >= 8) { + var1.spawnParticle("suspended", (double)((float)var2 + var5.nextFloat()), (double)((float)var3 + var5.nextFloat()), (double)((float)var4 + var5.nextFloat()), 0.0D, 0.0D, 0.0D); + } + } + + for(var6 = 0; var6 < 0; ++var6) { + int var7 = var5.nextInt(4); + int var8 = var2; + int var9 = var4; + if(var7 == 0) { + var8 = var2 - 1; + } + + if(var7 == 1) { + ++var8; + } + + if(var7 == 2) { + var9 = var4 - 1; + } + + if(var7 == 3) { + ++var9; + } + + if(var1.getBlockMaterial(var8, var3, var9) == Material.air && (var1.getBlockMaterial(var8, var3 - 1, var9).blocksMovement() || var1.getBlockMaterial(var8, var3 - 1, var9).isLiquid())) { + float var10 = 1.0F / 16.0F; + double var11 = (double)((float)var2 + var5.nextFloat()); + double var13 = (double)((float)var3 + var5.nextFloat()); + double var15 = (double)((float)var4 + var5.nextFloat()); + if(var7 == 0) { + var11 = (double)((float)var2 - var10); + } + + if(var7 == 1) { + var11 = (double)((float)(var2 + 1) + var10); + } + + if(var7 == 2) { + var15 = (double)((float)var4 - var10); + } + + if(var7 == 3) { + var15 = (double)((float)(var4 + 1) + var10); + } + + double var17 = 0.0D; + double var19 = 0.0D; + if(var7 == 0) { + var17 = (double)(-var10); + } + + if(var7 == 1) { + var17 = (double)var10; + } + + if(var7 == 2) { + var19 = (double)(-var10); + } + + if(var7 == 3) { + var19 = (double)var10; + } + + var1.spawnParticle("splash", var11, var13, var15, var17, 0.0D, var19); + } + } + } + + if(this.blockMaterial == Material.water && var5.nextInt(64) == 0) { + var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 > 0 && var6 < 8) { + var1.playSound((double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), "liquid.water", var5.nextFloat() * 0.25F + 12.0F / 16.0F, var5.nextFloat() * 1.0F + 0.5F, false); + } + } + + double var21; + double var22; + double var23; + if(this.blockMaterial == Material.lava && var1.getBlockMaterial(var2, var3 + 1, var4) == Material.air && !var1.isBlockOpaqueCube(var2, var3 + 1, var4)) { + if(var5.nextInt(100) == 0) { + var21 = (double)((float)var2 + var5.nextFloat()); + var22 = (double)var3 + this.maxY; + var23 = (double)((float)var4 + var5.nextFloat()); + var1.spawnParticle("lava", var21, var22, var23, 0.0D, 0.0D, 0.0D); + var1.playSound(var21, var22, var23, "liquid.lavapop", 0.2F + var5.nextFloat() * 0.2F, 0.9F + var5.nextFloat() * 0.15F, false); + } + + if(var5.nextInt(200) == 0) { + var1.playSound((double)var2, (double)var3, (double)var4, "liquid.lava", 0.2F + var5.nextFloat() * 0.2F, 0.9F + var5.nextFloat() * 0.15F, false); + } + } + + if(var5.nextInt(10) == 0 && var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) && !var1.getBlockMaterial(var2, var3 - 2, var4).blocksMovement()) { + var21 = (double)((float)var2 + var5.nextFloat()); + var22 = (double)var3 - 1.05D; + var23 = (double)((float)var4 + var5.nextFloat()); + if(this.blockMaterial == Material.water) { + var1.spawnParticle("dripWater", var21, var22, var23, 0.0D, 0.0D, 0.0D); + } else { + var1.spawnParticle("dripLava", var21, var22, var23, 0.0D, 0.0D, 0.0D); + } + } + + } + + public static double getFlowDirection(IBlockAccess var0, int var1, int var2, int var3, Material var4) { + Vec3 var5 = null; + if(var4 == Material.water) { + var5 = Block.waterMoving.getFlowVector(var0, var1, var2, var3); + } + + if(var4 == Material.lava) { + var5 = Block.lavaMoving.getFlowVector(var0, var1, var2, var3); + } + + return var5.xCoord == 0.0D && var5.zCoord == 0.0D ? -1000.0D : Math.atan2(var5.zCoord, var5.xCoord) - Math.PI * 0.5D; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + this.checkForHarden(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + this.checkForHarden(var1, var2, var3, var4); + } + + private void checkForHarden(World var1, int var2, int var3, int var4) { + if(var1.getBlockId(var2, var3, var4) == this.blockID) { + if(this.blockMaterial == Material.lava) { + boolean var5 = false; + if(var5 || var1.getBlockMaterial(var2, var3, var4 - 1) == Material.water) { + var5 = true; + } + + if(var5 || var1.getBlockMaterial(var2, var3, var4 + 1) == Material.water) { + var5 = true; + } + + if(var5 || var1.getBlockMaterial(var2 - 1, var3, var4) == Material.water) { + var5 = true; + } + + if(var5 || var1.getBlockMaterial(var2 + 1, var3, var4) == Material.water) { + var5 = true; + } + + if(var5 || var1.getBlockMaterial(var2, var3 + 1, var4) == Material.water) { + var5 = true; + } + + if(var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 == 0) { + var1.setBlock(var2, var3, var4, Block.obsidian.blockID); + } else if(var6 <= 4) { + var1.setBlock(var2, var3, var4, Block.cobblestone.blockID); + } + + this.triggerLavaMixEffects(var1, var2, var3, var4); + } + } + + } + } + + protected void triggerLavaMixEffects(World var1, int var2, int var3, int var4) { + var1.playSoundEffect((double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), "random.fizz", 0.5F, 2.6F + (var1.rand.nextFloat() - var1.rand.nextFloat()) * 0.8F); + + for(int var5 = 0; var5 < 8; ++var5) { + var1.spawnParticle("largesmoke", (double)var2 + Math.random(), (double)var3 + 1.2D, (double)var4 + Math.random(), 0.0D, 0.0D, 0.0D); + } + + } + + public void registerIcons(IconRegister var1) { + if(this.blockMaterial == Material.lava) { + this.theIcon = new Icon[]{var1.registerIcon("lava"), var1.registerIcon("lava_flow")}; + } else { + this.theIcon = new Icon[]{var1.registerIcon("water"), var1.registerIcon("water_flow")}; + } + + } + + public static Icon func_94424_b(String var0) { + return var0 == "water" ? Block.waterMoving.theIcon[0] : (var0 == "water_flow" ? Block.waterMoving.theIcon[1] : (var0 == "lava" ? Block.lavaMoving.theIcon[0] : (var0 == "lava_flow" ? Block.lavaMoving.theIcon[1] : null))); + } +} diff --git a/src/net/minecraft/src/BlockFurnace.java b/src/net/minecraft/src/BlockFurnace.java new file mode 100644 index 0000000..cbca11e --- /dev/null +++ b/src/net/minecraft/src/BlockFurnace.java @@ -0,0 +1,198 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFurnace extends BlockContainer { + private final Random furnaceRand = new Random(); + private final boolean isActive; + private static boolean keepFurnaceInventory = false; + private Icon furnaceIconTop; + private Icon furnaceIconFront; + + protected BlockFurnace(int var1, boolean var2) { + super(var1, Material.rock); + this.isActive = var2; + } + + public int idDropped(int var1, Random var2, int var3) { + return Block.furnaceIdle.blockID; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + this.setDefaultDirection(var1, var2, var3, var4); + } + + private void setDefaultDirection(World var1, int var2, int var3, int var4) { + if(!var1.isRemote) { + int var5 = var1.getBlockId(var2, var3, var4 - 1); + int var6 = var1.getBlockId(var2, var3, var4 + 1); + int var7 = var1.getBlockId(var2 - 1, var3, var4); + int var8 = var1.getBlockId(var2 + 1, var3, var4); + byte var9 = 3; + if(Block.opaqueCubeLookup[var5] && !Block.opaqueCubeLookup[var6]) { + var9 = 3; + } + + if(Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var5]) { + var9 = 2; + } + + if(Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var8]) { + var9 = 5; + } + + if(Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var7]) { + var9 = 4; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var9, 2); + } + } + + public Icon getIcon(int var1, int var2) { + return var1 == 1 ? this.furnaceIconTop : (var1 == 0 ? this.furnaceIconTop : (var1 != var2 ? this.blockIcon : this.furnaceIconFront)); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("furnace_side"); + this.furnaceIconFront = var1.registerIcon(this.isActive ? "furnace_front_lit" : "furnace_front"); + this.furnaceIconTop = var1.registerIcon("furnace_top"); + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + if(this.isActive) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + float var7 = (float)var2 + 0.5F; + float var8 = (float)var3 + 0.0F + var5.nextFloat() * 6.0F / 16.0F; + float var9 = (float)var4 + 0.5F; + float var10 = 0.52F; + float var11 = var5.nextFloat() * 0.6F - 0.3F; + if(var6 == 4) { + var1.spawnParticle("smoke", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", (double)(var7 - var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + } else if(var6 == 5) { + var1.spawnParticle("smoke", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", (double)(var7 + var10), (double)var8, (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + } else if(var6 == 2) { + var1.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 - var10), 0.0D, 0.0D, 0.0D); + } else if(var6 == 3) { + var1.spawnParticle("smoke", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", (double)(var7 + var11), (double)var8, (double)(var9 + var10), 0.0D, 0.0D, 0.0D); + } + + } + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(var1.isRemote) { + return true; + } else { + TileEntityFurnace var10 = (TileEntityFurnace)var1.getBlockTileEntity(var2, var3, var4); + if(var10 != null) { + var5.displayGUIFurnace(var10); + } + + return true; + } + } + + public static void updateFurnaceBlockState(boolean var0, World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + TileEntity var6 = var1.getBlockTileEntity(var2, var3, var4); + keepFurnaceInventory = true; + if(var0) { + var1.setBlock(var2, var3, var4, Block.furnaceBurning.blockID); + } else { + var1.setBlock(var2, var3, var4, Block.furnaceIdle.blockID); + } + + keepFurnaceInventory = false; + var1.setBlockMetadataWithNotify(var2, var3, var4, var5, 2); + if(var6 != null) { + var6.validate(); + var1.setBlockTileEntity(var2, var3, var4, var6); + } + + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntityFurnace(); + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + int var7 = MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + if(var7 == 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 2, 2); + } + + if(var7 == 1) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 5, 2); + } + + if(var7 == 2) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 3, 2); + } + + if(var7 == 3) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 4, 2); + } + + if(var6.hasDisplayName()) { + ((TileEntityFurnace)var1.getBlockTileEntity(var2, var3, var4)).func_94129_a(var6.getDisplayName()); + } + + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + if(!keepFurnaceInventory) { + TileEntityFurnace var7 = (TileEntityFurnace)var1.getBlockTileEntity(var2, var3, var4); + if(var7 != null) { + for(int var8 = 0; var8 < var7.getSizeInventory(); ++var8) { + ItemStack var9 = var7.getStackInSlot(var8); + if(var9 != null) { + float var10 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; + float var11 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; + float var12 = this.furnaceRand.nextFloat() * 0.8F + 0.1F; + + while(var9.stackSize > 0) { + int var13 = this.furnaceRand.nextInt(21) + 10; + if(var13 > var9.stackSize) { + var13 = var9.stackSize; + } + + var9.stackSize -= var13; + EntityItem var14 = new EntityItem(var1, (double)((float)var2 + var10), (double)((float)var3 + var11), (double)((float)var4 + var12), new ItemStack(var9.itemID, var13, var9.getItemDamage())); + if(var9.hasTagCompound()) { + var14.getEntityItem().setTagCompound((NBTTagCompound)var9.getTagCompound().copy()); + } + + float var15 = 0.05F; + var14.motionX = (double)((float)this.furnaceRand.nextGaussian() * var15); + var14.motionY = (double)((float)this.furnaceRand.nextGaussian() * var15 + 0.2F); + var14.motionZ = (double)((float)this.furnaceRand.nextGaussian() * var15); + var1.spawnEntityInWorld(var14); + } + } + } + + var1.func_96440_m(var2, var3, var4, var5); + } + } + + super.breakBlock(var1, var2, var3, var4, var5, var6); + } + + public boolean hasComparatorInputOverride() { + return true; + } + + public int getComparatorInputOverride(World var1, int var2, int var3, int var4, int var5) { + return Container.calcRedstoneFromInventory((IInventory)var1.getBlockTileEntity(var2, var3, var4)); + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Block.furnaceIdle.blockID; + } +} diff --git a/src/net/minecraft/src/BlockGlass.java b/src/net/minecraft/src/BlockGlass.java new file mode 100644 index 0000000..2fcde6e --- /dev/null +++ b/src/net/minecraft/src/BlockGlass.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGlass extends BlockBreakable { + public BlockGlass(int var1, Material var2, boolean var3) { + super(var1, "glass", var2, var3); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public int quantityDropped(Random var1) { + return 0; + } + + public int getRenderBlockPass() { + return 0; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + protected boolean canSilkHarvest() { + return true; + } +} diff --git a/src/net/minecraft/src/BlockGlowStone.java b/src/net/minecraft/src/BlockGlowStone.java new file mode 100644 index 0000000..2d0c046 --- /dev/null +++ b/src/net/minecraft/src/BlockGlowStone.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGlowStone extends Block { + public BlockGlowStone(int var1, Material var2) { + super(var1, var2); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public int quantityDroppedWithBonus(int var1, Random var2) { + return MathHelper.clamp_int(this.quantityDropped(var2) + var2.nextInt(var1 + 1), 1, 4); + } + + public int quantityDropped(Random var1) { + return 2 + var1.nextInt(3); + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.lightStoneDust.itemID; + } +} diff --git a/src/net/minecraft/src/BlockGrass.java b/src/net/minecraft/src/BlockGrass.java new file mode 100644 index 0000000..df50df5 --- /dev/null +++ b/src/net/minecraft/src/BlockGrass.java @@ -0,0 +1,91 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGrass extends Block { + private Icon iconGrassTop; + private Icon iconSnowSide; + private Icon iconGrassSideOverlay; + + protected BlockGrass(int var1) { + super(var1, Material.grass); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public Icon getIcon(int var1, int var2) { + return var1 == 1 ? this.iconGrassTop : (var1 == 0 ? Block.dirt.getBlockTextureFromSide(var1) : this.blockIcon); + } + + public Icon getBlockTexture(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(var5 == 1) { + return this.iconGrassTop; + } else if(var5 == 0) { + return Block.dirt.getBlockTextureFromSide(var5); + } else { + Material var6 = var1.getBlockMaterial(var2, var3 + 1, var4); + return var6 != Material.snow && var6 != Material.craftedSnow ? this.blockIcon : this.iconSnowSide; + } + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("grass_side"); + this.iconGrassTop = var1.registerIcon("grass_top"); + this.iconSnowSide = var1.registerIcon("snow_side"); + this.iconGrassSideOverlay = var1.registerIcon("grass_side_overlay"); + } + + public int getBlockColor() { + double var1 = 0.5D; + double var3 = 1.0D; + return ColorizerGrass.getGrassColor(var1, var3); + } + + public int getRenderColor(int var1) { + return this.getBlockColor(); + } + + public int colorMultiplier(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = 0; + int var6 = 0; + int var7 = 0; + + for(int var8 = -1; var8 <= 1; ++var8) { + for(int var9 = -1; var9 <= 1; ++var9) { + int var10 = var1.getBiomeGenForCoords(var2 + var9, var4 + var8).getBiomeGrassColor(); + var5 += (var10 & 16711680) >> 16; + var6 += (var10 & '\uff00') >> 8; + var7 += var10 & 255; + } + } + + return (var5 / 9 & 255) << 16 | (var6 / 9 & 255) << 8 | var7 / 9 & 255; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.isRemote) { + if(var1.getBlockLightValue(var2, var3 + 1, var4) < 4 && Block.lightOpacity[var1.getBlockId(var2, var3 + 1, var4)] > 2) { + var1.setBlock(var2, var3, var4, Block.dirt.blockID); + } else if(var1.getBlockLightValue(var2, var3 + 1, var4) >= 9) { + for(int var6 = 0; var6 < 4; ++var6) { + int var7 = var2 + var5.nextInt(3) - 1; + int var8 = var3 + var5.nextInt(5) - 3; + int var9 = var4 + var5.nextInt(3) - 1; + int var10 = var1.getBlockId(var7, var8 + 1, var9); + if(var1.getBlockId(var7, var8, var9) == Block.dirt.blockID && var1.getBlockLightValue(var7, var8 + 1, var9) >= 4 && Block.lightOpacity[var10] <= 2) { + var1.setBlock(var7, var8, var9, Block.grass.blockID); + } + } + } + + } + } + + public int idDropped(int var1, Random var2, int var3) { + return Block.dirt.idDropped(0, var2, var3); + } + + public static Icon getIconSideOverlay() { + return Block.grass.iconGrassSideOverlay; + } +} diff --git a/src/net/minecraft/src/BlockGravel.java b/src/net/minecraft/src/BlockGravel.java new file mode 100644 index 0000000..d24c6cf --- /dev/null +++ b/src/net/minecraft/src/BlockGravel.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGravel extends BlockSand { + public BlockGravel(int var1) { + super(var1); + } + + public int idDropped(int var1, Random var2, int var3) { + if(var3 > 3) { + var3 = 3; + } + + return var2.nextInt(10 - var3 * 3) == 0 ? Item.flint.itemID : this.blockID; + } +} diff --git a/src/net/minecraft/src/BlockHalfSlab.java b/src/net/minecraft/src/BlockHalfSlab.java new file mode 100644 index 0000000..e0b037c --- /dev/null +++ b/src/net/minecraft/src/BlockHalfSlab.java @@ -0,0 +1,96 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public abstract class BlockHalfSlab extends Block { + protected final boolean isDoubleSlab; + + public BlockHalfSlab(int var1, boolean var2, Material var3) { + super(var1, var3); + this.isDoubleSlab = var2; + if(var2) { + opaqueCubeLookup[var1] = true; + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + } + + this.setLightOpacity(255); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + if(this.isDoubleSlab) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } else { + boolean var5 = (var1.getBlockMetadata(var2, var3, var4) & 8) != 0; + if(var5) { + this.setBlockBounds(0.0F, 0.5F, 0.0F, 1.0F, 1.0F, 1.0F); + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + } + } + + } + + public void setBlockBoundsForItemRender() { + if(this.isDoubleSlab) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + } + + } + + public void addCollisionBoxesToList(World var1, int var2, int var3, int var4, AxisAlignedBB var5, List var6, Entity var7) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + } + + public boolean isOpaqueCube() { + return this.isDoubleSlab; + } + + public int onBlockPlaced(World var1, int var2, int var3, int var4, int var5, float var6, float var7, float var8, int var9) { + return this.isDoubleSlab ? var9 : (var5 != 0 && (var5 == 1 || (double)var7 <= 0.5D) ? var9 : var9 | 8); + } + + public int quantityDropped(Random var1) { + return this.isDoubleSlab ? 2 : 1; + } + + public int damageDropped(int var1) { + return var1 & 7; + } + + public boolean renderAsNormalBlock() { + return this.isDoubleSlab; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(this.isDoubleSlab) { + return super.shouldSideBeRendered(var1, var2, var3, var4, var5); + } else if(var5 != 1 && var5 != 0 && !super.shouldSideBeRendered(var1, var2, var3, var4, var5)) { + return false; + } else { + int var6 = var2 + Facing.offsetsXForSide[Facing.oppositeSide[var5]]; + int var7 = var3 + Facing.offsetsYForSide[Facing.oppositeSide[var5]]; + int var8 = var4 + Facing.offsetsZForSide[Facing.oppositeSide[var5]]; + boolean var9 = (var1.getBlockMetadata(var6, var7, var8) & 8) != 0; + return var9 ? (var5 == 0 ? true : (var5 == 1 && super.shouldSideBeRendered(var1, var2, var3, var4, var5) ? true : !isBlockSingleSlab(var1.getBlockId(var2, var3, var4)) || (var1.getBlockMetadata(var2, var3, var4) & 8) == 0)) : (var5 == 1 ? true : (var5 == 0 && super.shouldSideBeRendered(var1, var2, var3, var4, var5) ? true : !isBlockSingleSlab(var1.getBlockId(var2, var3, var4)) || (var1.getBlockMetadata(var2, var3, var4) & 8) != 0)); + } + } + + private static boolean isBlockSingleSlab(int var0) { + return var0 == Block.stoneSingleSlab.blockID || var0 == Block.woodSingleSlab.blockID; + } + + public abstract String getFullSlabName(int var1); + + public int getDamageValue(World var1, int var2, int var3, int var4) { + return super.getDamageValue(var1, var2, var3, var4) & 7; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return isBlockSingleSlab(this.blockID) ? this.blockID : (this.blockID == Block.stoneDoubleSlab.blockID ? Block.stoneSingleSlab.blockID : (this.blockID == Block.woodDoubleSlab.blockID ? Block.woodSingleSlab.blockID : Block.stoneSingleSlab.blockID)); + } +} diff --git a/src/net/minecraft/src/BlockHopper.java b/src/net/minecraft/src/BlockHopper.java new file mode 100644 index 0000000..594bb6a --- /dev/null +++ b/src/net/minecraft/src/BlockHopper.java @@ -0,0 +1,182 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockHopper extends BlockContainer { + private final Random field_94457_a = new Random(); + private Icon hopperIcon; + private Icon hopperTopIcon; + private Icon hopperInsideIcon; + + public BlockHopper(int var1) { + super(var1, Material.iron); + this.setCreativeTab(CreativeTabs.tabRedstone); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public void addCollisionBoxesToList(World var1, int var2, int var3, int var4, AxisAlignedBB var5, List var6, Entity var7) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 10.0F / 16.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + float var8 = 2.0F / 16.0F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, var8, 1.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var8); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + this.setBlockBounds(1.0F - var8, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + this.setBlockBounds(0.0F, 0.0F, 1.0F - var8, 1.0F, 1.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public int onBlockPlaced(World var1, int var2, int var3, int var4, int var5, float var6, float var7, float var8, int var9) { + int var10 = Facing.oppositeSide[var5]; + if(var10 == 1) { + var10 = 0; + } + + return var10; + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntityHopper(); + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + super.onBlockPlacedBy(var1, var2, var3, var4, var5, var6); + if(var6.hasDisplayName()) { + TileEntityHopper var7 = getHopperTile(var1, var2, var3, var4); + var7.setInventoryName(var6.getDisplayName()); + } + + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + this.updateMetadata(var1, var2, var3, var4); + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(var1.isRemote) { + return true; + } else { + TileEntityHopper var10 = getHopperTile(var1, var2, var3, var4); + if(var10 != null) { + var5.displayGUIHopper(var10); + } + + return true; + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + this.updateMetadata(var1, var2, var3, var4); + } + + private void updateMetadata(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + int var6 = getDirectionFromMetadata(var5); + boolean var7 = !var1.isBlockIndirectlyGettingPowered(var2, var3, var4); + boolean var8 = getIsBlockNotPoweredFromMetadata(var5); + if(var7 != var8) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 | (var7 ? 0 : 8), 4); + } + + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + TileEntityHopper var7 = (TileEntityHopper)var1.getBlockTileEntity(var2, var3, var4); + if(var7 != null) { + for(int var8 = 0; var8 < var7.getSizeInventory(); ++var8) { + ItemStack var9 = var7.getStackInSlot(var8); + if(var9 != null) { + float var10 = this.field_94457_a.nextFloat() * 0.8F + 0.1F; + float var11 = this.field_94457_a.nextFloat() * 0.8F + 0.1F; + float var12 = this.field_94457_a.nextFloat() * 0.8F + 0.1F; + + while(var9.stackSize > 0) { + int var13 = this.field_94457_a.nextInt(21) + 10; + if(var13 > var9.stackSize) { + var13 = var9.stackSize; + } + + var9.stackSize -= var13; + EntityItem var14 = new EntityItem(var1, (double)((float)var2 + var10), (double)((float)var3 + var11), (double)((float)var4 + var12), new ItemStack(var9.itemID, var13, var9.getItemDamage())); + if(var9.hasTagCompound()) { + var14.getEntityItem().setTagCompound((NBTTagCompound)var9.getTagCompound().copy()); + } + + float var15 = 0.05F; + var14.motionX = (double)((float)this.field_94457_a.nextGaussian() * var15); + var14.motionY = (double)((float)this.field_94457_a.nextGaussian() * var15 + 0.2F); + var14.motionZ = (double)((float)this.field_94457_a.nextGaussian() * var15); + var1.spawnEntityInWorld(var14); + } + } + } + + var1.func_96440_m(var2, var3, var4, var5); + } + + super.breakBlock(var1, var2, var3, var4, var5, var6); + } + + public int getRenderType() { + return 38; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return true; + } + + public Icon getIcon(int var1, int var2) { + return var1 == 1 ? this.hopperTopIcon : this.hopperIcon; + } + + public static int getDirectionFromMetadata(int var0) { + return var0 & 7; + } + + public static boolean getIsBlockNotPoweredFromMetadata(int var0) { + return (var0 & 8) != 8; + } + + public boolean hasComparatorInputOverride() { + return true; + } + + public int getComparatorInputOverride(World var1, int var2, int var3, int var4, int var5) { + return Container.calcRedstoneFromInventory(getHopperTile(var1, var2, var3, var4)); + } + + public void registerIcons(IconRegister var1) { + this.hopperIcon = var1.registerIcon("hopper"); + this.hopperTopIcon = var1.registerIcon("hopper_top"); + this.hopperInsideIcon = var1.registerIcon("hopper_inside"); + } + + public static Icon getHopperIcon(String var0) { + return var0 == "hopper" ? Block.hopperBlock.hopperIcon : (var0 == "hopper_inside" ? Block.hopperBlock.hopperInsideIcon : null); + } + + public String getItemIconName() { + return "hopper"; + } + + public static TileEntityHopper getHopperTile(IBlockAccess var0, int var1, int var2, int var3) { + return (TileEntityHopper)var0.getBlockTileEntity(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/BlockIce.java b/src/net/minecraft/src/BlockIce.java new file mode 100644 index 0000000..40955c8 --- /dev/null +++ b/src/net/minecraft/src/BlockIce.java @@ -0,0 +1,65 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockIce extends BlockBreakable { + public BlockIce(int var1) { + super(var1, "ice", Material.ice, false); + this.slipperiness = 0.98F; + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public int getRenderBlockPass() { + return 1; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return super.shouldSideBeRendered(var1, var2, var3, var4, 1 - var5); + } + + public void harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) { + var2.addStat(StatList.mineBlockStatArray[this.blockID], 1); + var2.addExhaustion(0.025F); + if(this.canSilkHarvest() && EnchantmentHelper.getSilkTouchModifier(var2)) { + ItemStack var9 = this.createStackedBlock(var6); + if(var9 != null) { + this.dropBlockAsItem_do(var1, var3, var4, var5, var9); + } + } else { + if(var1.provider.isHellWorld) { + var1.setBlockToAir(var3, var4, var5); + return; + } + + int var7 = EnchantmentHelper.getFortuneModifier(var2); + this.dropBlockAsItem(var1, var3, var4, var5, var6, var7); + Material var8 = var1.getBlockMaterial(var3, var4 - 1, var5); + if(var8.blocksMovement() || var8.isLiquid()) { + var1.setBlock(var3, var4, var5, Block.waterMoving.blockID); + } + } + + } + + public int quantityDropped(Random var1) { + return 0; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.getSavedLightValue(EnumSkyBlock.Block, var2, var3, var4) > 11 - Block.lightOpacity[this.blockID]) { + if(var1.provider.isHellWorld) { + var1.setBlockToAir(var2, var3, var4); + return; + } + + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlock(var2, var3, var4, Block.waterStill.blockID); + } + + } + + public int getMobilityFlag() { + return 0; + } +} diff --git a/src/net/minecraft/src/BlockJukeBox.java b/src/net/minecraft/src/BlockJukeBox.java new file mode 100644 index 0000000..2a57c68 --- /dev/null +++ b/src/net/minecraft/src/BlockJukeBox.java @@ -0,0 +1,85 @@ +package net.minecraft.src; + +public class BlockJukeBox extends BlockContainer { + private Icon theIcon; + + protected BlockJukeBox(int var1) { + super(var1, Material.wood); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public Icon getIcon(int var1, int var2) { + return var1 == 1 ? this.theIcon : this.blockIcon; + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(var1.getBlockMetadata(var2, var3, var4) == 0) { + return false; + } else { + this.ejectRecord(var1, var2, var3, var4); + return true; + } + } + + public void insertRecord(World var1, int var2, int var3, int var4, ItemStack var5) { + if(!var1.isRemote) { + TileEntityRecordPlayer var6 = (TileEntityRecordPlayer)var1.getBlockTileEntity(var2, var3, var4); + if(var6 != null) { + var6.func_96098_a(var5.copy()); + var1.setBlockMetadataWithNotify(var2, var3, var4, 1, 2); + } + } + } + + public void ejectRecord(World var1, int var2, int var3, int var4) { + if(!var1.isRemote) { + TileEntityRecordPlayer var5 = (TileEntityRecordPlayer)var1.getBlockTileEntity(var2, var3, var4); + if(var5 != null) { + ItemStack var6 = var5.func_96097_a(); + if(var6 != null) { + var1.playAuxSFX(1005, var2, var3, var4, 0); + var1.playRecord((String)null, var2, var3, var4); + var5.func_96098_a((ItemStack)null); + var1.setBlockMetadataWithNotify(var2, var3, var4, 0, 2); + float var7 = 0.7F; + double var8 = (double)(var1.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.5D; + double var10 = (double)(var1.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.2D + 0.6D; + double var12 = (double)(var1.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.5D; + ItemStack var14 = var6.copy(); + EntityItem var15 = new EntityItem(var1, (double)var2 + var8, (double)var3 + var10, (double)var4 + var12, var14); + var15.delayBeforeCanPickup = 10; + var1.spawnEntityInWorld(var15); + } + } + } + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + this.ejectRecord(var1, var2, var3, var4); + super.breakBlock(var1, var2, var3, var4, var5, var6); + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + if(!var1.isRemote) { + super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6, 0); + } + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntityRecordPlayer(); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("musicBlock"); + this.theIcon = var1.registerIcon("jukebox_top"); + } + + public boolean hasComparatorInputOverride() { + return true; + } + + public int getComparatorInputOverride(World var1, int var2, int var3, int var4, int var5) { + ItemStack var6 = ((TileEntityRecordPlayer)var1.getBlockTileEntity(var2, var3, var4)).func_96097_a(); + return var6 == null ? 0 : var6.itemID + 1 - Item.record13.itemID; + } +} diff --git a/src/net/minecraft/src/BlockLadder.java b/src/net/minecraft/src/BlockLadder.java new file mode 100644 index 0000000..495adb2 --- /dev/null +++ b/src/net/minecraft/src/BlockLadder.java @@ -0,0 +1,112 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockLadder extends Block { + protected BlockLadder(int var1) { + super(var1, Material.circuits); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.getSelectedBoundingBoxFromPool(var1, var2, var3, var4); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + this.updateLadderBounds(var1.getBlockMetadata(var2, var3, var4)); + } + + public void updateLadderBounds(int var1) { + float var3 = 2.0F / 16.0F; + if(var1 == 2) { + this.setBlockBounds(0.0F, 0.0F, 1.0F - var3, 1.0F, 1.0F, 1.0F); + } + + if(var1 == 3) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var3); + } + + if(var1 == 4) { + this.setBlockBounds(1.0F - var3, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + if(var1 == 5) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, var3, 1.0F, 1.0F); + } + + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 8; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(var2 - 1, var3, var4) ? true : (var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : (var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : var1.isBlockNormalCube(var2, var3, var4 + 1))); + } + + public int onBlockPlaced(World var1, int var2, int var3, int var4, int var5, float var6, float var7, float var8, int var9) { + int var10 = var9; + if((var9 == 0 || var5 == 2) && var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var10 = 2; + } + + if((var10 == 0 || var5 == 3) && var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var10 = 3; + } + + if((var10 == 0 || var5 == 4) && var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var10 = 4; + } + + if((var10 == 0 || var5 == 5) && var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var10 = 5; + } + + return var10; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + boolean var7 = false; + if(var6 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var7 = true; + } + + if(var6 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var7 = true; + } + + if(var6 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var7 = true; + } + + if(var6 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var7 = true; + } + + if(!var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var6, 0); + var1.setBlockToAir(var2, var3, var4); + } + + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + } + + public int quantityDropped(Random var1) { + return 1; + } +} diff --git a/src/net/minecraft/src/BlockLeaves.java b/src/net/minecraft/src/BlockLeaves.java new file mode 100644 index 0000000..d145346 --- /dev/null +++ b/src/net/minecraft/src/BlockLeaves.java @@ -0,0 +1,271 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockLeaves extends BlockLeavesBase { + public static final String[] LEAF_TYPES = new String[]{"oak", "spruce", "birch", "jungle"}; + public static final String[][] field_94396_b = new String[][]{{"leaves", "leaves_spruce", "leaves", "leaves_jungle"}, {"leaves_opaque", "leaves_spruce_opaque", "leaves_opaque", "leaves_jungle_opaque"}}; + private int field_94394_cP; + private Icon[][] iconArray = new Icon[2][]; + int[] adjacentTreeBlocks; + + protected BlockLeaves(int var1) { + super(var1, Material.leaves, false); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public int getBlockColor() { + double var1 = 0.5D; + double var3 = 1.0D; + return ColorizerFoliage.getFoliageColor(var1, var3); + } + + public int getRenderColor(int var1) { + return (var1 & 3) == 1 ? ColorizerFoliage.getFoliageColorPine() : ((var1 & 3) == 2 ? ColorizerFoliage.getFoliageColorBirch() : ColorizerFoliage.getFoliageColorBasic()); + } + + public int colorMultiplier(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + if((var5 & 3) == 1) { + return ColorizerFoliage.getFoliageColorPine(); + } else if((var5 & 3) == 2) { + return ColorizerFoliage.getFoliageColorBirch(); + } else { + int var6 = 0; + int var7 = 0; + int var8 = 0; + + for(int var9 = -1; var9 <= 1; ++var9) { + for(int var10 = -1; var10 <= 1; ++var10) { + int var11 = var1.getBiomeGenForCoords(var2 + var10, var4 + var9).getBiomeFoliageColor(); + var6 += (var11 & 16711680) >> 16; + var7 += (var11 & '\uff00') >> 8; + var8 += var11 & 255; + } + } + + return (var6 / 9 & 255) << 16 | (var7 / 9 & 255) << 8 | var8 / 9 & 255; + } + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + byte var7 = 1; + int var8 = var7 + 1; + if(var1.checkChunksExist(var2 - var8, var3 - var8, var4 - var8, var2 + var8, var3 + var8, var4 + var8)) { + for(int var9 = -var7; var9 <= var7; ++var9) { + for(int var10 = -var7; var10 <= var7; ++var10) { + for(int var11 = -var7; var11 <= var7; ++var11) { + int var12 = var1.getBlockId(var2 + var9, var3 + var10, var4 + var11); + if(var12 == Block.leaves.blockID) { + int var13 = var1.getBlockMetadata(var2 + var9, var3 + var10, var4 + var11); + var1.setBlockMetadataWithNotify(var2 + var9, var3 + var10, var4 + var11, var13 | 8, 4); + } + } + } + } + } + + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.isRemote) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) != 0 && (var6 & 4) == 0) { + byte var7 = 4; + int var8 = var7 + 1; + byte var9 = 32; + int var10 = var9 * var9; + int var11 = var9 / 2; + if(this.adjacentTreeBlocks == null) { + this.adjacentTreeBlocks = new int[var9 * var9 * var9]; + } + + int var12; + if(var1.checkChunksExist(var2 - var8, var3 - var8, var4 - var8, var2 + var8, var3 + var8, var4 + var8)) { + var12 = -var7; + + label112: + while(true) { + int var13; + int var14; + int var15; + if(var12 > var7) { + var12 = 1; + + while(true) { + if(var12 > 4) { + break label112; + } + + for(var13 = -var7; var13 <= var7; ++var13) { + for(var14 = -var7; var14 <= var7; ++var14) { + for(var15 = -var7; var15 <= var7; ++var15) { + if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + var15 + var11] == var12 - 1) { + if(this.adjacentTreeBlocks[(var13 + var11 - 1) * var10 + (var14 + var11) * var9 + var15 + var11] == -2) { + this.adjacentTreeBlocks[(var13 + var11 - 1) * var10 + (var14 + var11) * var9 + var15 + var11] = var12; + } + + if(this.adjacentTreeBlocks[(var13 + var11 + 1) * var10 + (var14 + var11) * var9 + var15 + var11] == -2) { + this.adjacentTreeBlocks[(var13 + var11 + 1) * var10 + (var14 + var11) * var9 + var15 + var11] = var12; + } + + if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 - 1) * var9 + var15 + var11] == -2) { + this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 - 1) * var9 + var15 + var11] = var12; + } + + if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 + 1) * var9 + var15 + var11] == -2) { + this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11 + 1) * var9 + var15 + var11] = var12; + } + + if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + (var15 + var11 - 1)] == -2) { + this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + (var15 + var11 - 1)] = var12; + } + + if(this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + var15 + var11 + 1] == -2) { + this.adjacentTreeBlocks[(var13 + var11) * var10 + (var14 + var11) * var9 + var15 + var11 + 1] = var12; + } + } + } + } + } + + ++var12; + } + } + + for(var13 = -var7; var13 <= var7; ++var13) { + for(var14 = -var7; var14 <= var7; ++var14) { + var15 = var1.getBlockId(var2 + var12, var3 + var13, var4 + var14); + if(var15 == Block.wood.blockID) { + this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = 0; + } else if(var15 == Block.leaves.blockID) { + this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = -2; + } else { + this.adjacentTreeBlocks[(var12 + var11) * var10 + (var13 + var11) * var9 + var14 + var11] = -1; + } + } + } + + ++var12; + } + } + + var12 = this.adjacentTreeBlocks[var11 * var10 + var11 * var9 + var11]; + if(var12 >= 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 & -9, 4); + } else { + this.removeLeaves(var1, var2, var3, var4); + } + } + + } + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.canLightningStrikeAt(var2, var3 + 1, var4) && !var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) && var5.nextInt(15) == 1) { + double var6 = (double)((float)var2 + var5.nextFloat()); + double var8 = (double)var3 - 0.05D; + double var10 = (double)((float)var4 + var5.nextFloat()); + var1.spawnParticle("dripWater", var6, var8, var10, 0.0D, 0.0D, 0.0D); + } + + } + + private void removeLeaves(World var1, int var2, int var3, int var4) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + } + + public int quantityDropped(Random var1) { + return var1.nextInt(20) == 0 ? 1 : 0; + } + + public int idDropped(int var1, Random var2, int var3) { + return Block.sapling.blockID; + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + if(!var1.isRemote) { + int var8 = 20; + if((var5 & 3) == 3) { + var8 = 40; + } + + if(var7 > 0) { + var8 -= 2 << var7; + if(var8 < 10) { + var8 = 10; + } + } + + if(var1.rand.nextInt(var8) == 0) { + int var9 = this.idDropped(var5, var1.rand, var7); + this.dropBlockAsItem_do(var1, var2, var3, var4, new ItemStack(var9, 1, this.damageDropped(var5))); + } + + var8 = 200; + if(var7 > 0) { + var8 -= 10 << var7; + if(var8 < 40) { + var8 = 40; + } + } + + if((var5 & 3) == 0 && var1.rand.nextInt(var8) == 0) { + this.dropBlockAsItem_do(var1, var2, var3, var4, new ItemStack(Item.appleRed, 1, 0)); + } + } + + } + + public void harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) { + if(!var1.isRemote && var2.getCurrentEquippedItem() != null && var2.getCurrentEquippedItem().itemID == Item.shears.itemID) { + var2.addStat(StatList.mineBlockStatArray[this.blockID], 1); + this.dropBlockAsItem_do(var1, var3, var4, var5, new ItemStack(Block.leaves.blockID, 1, var6 & 3)); + } else { + super.harvestBlock(var1, var2, var3, var4, var5, var6); + } + + } + + public int damageDropped(int var1) { + return var1 & 3; + } + + public boolean isOpaqueCube() { + return !this.graphicsLevel; + } + + public Icon getIcon(int var1, int var2) { + return (var2 & 3) == 1 ? this.iconArray[this.field_94394_cP][1] : ((var2 & 3) == 3 ? this.iconArray[this.field_94394_cP][3] : this.iconArray[this.field_94394_cP][0]); + } + + public void setGraphicsLevel(boolean var1) { + this.graphicsLevel = var1; + this.field_94394_cP = var1 ? 0 : 1; + } + + public void getSubBlocks(int var1, CreativeTabs var2, List var3) { + var3.add(new ItemStack(var1, 1, 0)); + var3.add(new ItemStack(var1, 1, 1)); + var3.add(new ItemStack(var1, 1, 2)); + var3.add(new ItemStack(var1, 1, 3)); + } + + protected ItemStack createStackedBlock(int var1) { + return new ItemStack(this.blockID, 1, var1 & 3); + } + + public void registerIcons(IconRegister var1) { + for(int var2 = 0; var2 < field_94396_b.length; ++var2) { + this.iconArray[var2] = new Icon[field_94396_b[var2].length]; + + for(int var3 = 0; var3 < field_94396_b[var2].length; ++var3) { + this.iconArray[var2][var3] = var1.registerIcon(field_94396_b[var2][var3]); + } + } + + } +} diff --git a/src/net/minecraft/src/BlockLeavesBase.java b/src/net/minecraft/src/BlockLeavesBase.java new file mode 100644 index 0000000..67993c1 --- /dev/null +++ b/src/net/minecraft/src/BlockLeavesBase.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class BlockLeavesBase extends Block { + protected boolean graphicsLevel; + + protected BlockLeavesBase(int var1, Material var2, boolean var3) { + super(var1, var2); + this.graphicsLevel = var3; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockId(var2, var3, var4); + return !this.graphicsLevel && var6 == this.blockID ? false : super.shouldSideBeRendered(var1, var2, var3, var4, var5); + } +} diff --git a/src/net/minecraft/src/BlockLever.java b/src/net/minecraft/src/BlockLever.java new file mode 100644 index 0000000..b0af2f4 --- /dev/null +++ b/src/net/minecraft/src/BlockLever.java @@ -0,0 +1,251 @@ +package net.minecraft.src; + +public class BlockLever extends Block { + protected BlockLever(int var1) { + super(var1, Material.circuits); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 12; + } + + public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) { + return var5 == 0 && var1.isBlockNormalCube(var2, var3 + 1, var4) ? true : (var5 == 1 && var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) ? true : (var5 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1) ? true : (var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : (var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4))))); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(var2 - 1, var3, var4) ? true : (var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : (var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : (var1.isBlockNormalCube(var2, var3, var4 + 1) ? true : (var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) ? true : var1.isBlockNormalCube(var2, var3 + 1, var4))))); + } + + public int onBlockPlaced(World var1, int var2, int var3, int var4, int var5, float var6, float var7, float var8, int var9) { + int var11 = var9 & 8; + int var10 = var9 & 7; + byte var12 = -1; + if(var5 == 0 && var1.isBlockNormalCube(var2, var3 + 1, var4)) { + var12 = 0; + } + + if(var5 == 1 && var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4)) { + var12 = 5; + } + + if(var5 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var12 = 4; + } + + if(var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var12 = 3; + } + + if(var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var12 = 2; + } + + if(var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var12 = 1; + } + + return var12 + var11; + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + int var8 = var7 & 7; + int var9 = var7 & 8; + if(var8 == invertMetadata(1)) { + if((MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 1) == 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 5 | var9, 2); + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, 6 | var9, 2); + } + } else if(var8 == invertMetadata(0)) { + if((MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 1) == 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 7 | var9, 2); + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, 0 | var9, 2); + } + } + + } + + public static int invertMetadata(int var0) { + switch(var0) { + case 0: + return 0; + case 1: + return 5; + case 2: + return 4; + case 3: + return 3; + case 4: + return 2; + case 5: + return 1; + default: + return -1; + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(this.checkIfAttachedToBlock(var1, var2, var3, var4)) { + int var6 = var1.getBlockMetadata(var2, var3, var4) & 7; + boolean var7 = false; + if(!var1.isBlockNormalCube(var2 - 1, var3, var4) && var6 == 1) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2 + 1, var3, var4) && var6 == 2) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3, var4 - 1) && var6 == 3) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3, var4 + 1) && var6 == 4) { + var7 = true; + } + + if(!var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) && var6 == 5) { + var7 = true; + } + + if(!var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) && var6 == 6) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3 + 1, var4) && var6 == 0) { + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3 + 1, var4) && var6 == 7) { + var7 = true; + } + + if(var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + } + } + + } + + private boolean checkIfAttachedToBlock(World var1, int var2, int var3, int var4) { + if(!this.canPlaceBlockAt(var1, var2, var3, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + return false; + } else { + return true; + } + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4) & 7; + float var6 = 3.0F / 16.0F; + if(var5 == 1) { + this.setBlockBounds(0.0F, 0.2F, 0.5F - var6, var6 * 2.0F, 0.8F, 0.5F + var6); + } else if(var5 == 2) { + this.setBlockBounds(1.0F - var6 * 2.0F, 0.2F, 0.5F - var6, 1.0F, 0.8F, 0.5F + var6); + } else if(var5 == 3) { + this.setBlockBounds(0.5F - var6, 0.2F, 0.0F, 0.5F + var6, 0.8F, var6 * 2.0F); + } else if(var5 == 4) { + this.setBlockBounds(0.5F - var6, 0.2F, 1.0F - var6 * 2.0F, 0.5F + var6, 0.8F, 1.0F); + } else if(var5 != 5 && var5 != 6) { + if(var5 == 0 || var5 == 7) { + var6 = 0.25F; + this.setBlockBounds(0.5F - var6, 0.4F, 0.5F - var6, 0.5F + var6, 1.0F, 0.5F + var6); + } + } else { + var6 = 0.25F; + this.setBlockBounds(0.5F - var6, 0.0F, 0.5F - var6, 0.5F + var6, 0.6F, 0.5F + var6); + } + + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(var1.isRemote) { + return true; + } else { + int var10 = var1.getBlockMetadata(var2, var3, var4); + int var11 = var10 & 7; + int var12 = 8 - (var10 & 8); + var1.setBlockMetadataWithNotify(var2, var3, var4, var11 + var12, 3); + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.click", 0.3F, var12 > 0 ? 0.6F : 0.5F); + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + if(var11 == 1) { + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + } else if(var11 == 2) { + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + } else if(var11 == 3) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + } else if(var11 == 4) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + } else if(var11 != 5 && var11 != 6) { + if(var11 == 0 || var11 == 7) { + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + } + } else { + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + } + + return true; + } + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + if((var6 & 8) > 0) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + int var7 = var6 & 7; + if(var7 == 1) { + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + } else if(var7 == 2) { + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + } else if(var7 == 3) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + } else if(var7 == 4) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + } else if(var7 != 5 && var7 != 6) { + if(var7 == 0 || var7 == 7) { + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + } + } else { + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + } + } + + super.breakBlock(var1, var2, var3, var4, var5, var6); + } + + public int isProvidingWeakPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return (var1.getBlockMetadata(var2, var3, var4) & 8) > 0 ? 15 : 0; + } + + public int isProvidingStrongPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) == 0) { + return 0; + } else { + int var7 = var6 & 7; + return var7 == 0 && var5 == 0 ? 15 : (var7 == 7 && var5 == 0 ? 15 : (var7 == 6 && var5 == 1 ? 15 : (var7 == 5 && var5 == 1 ? 15 : (var7 == 4 && var5 == 2 ? 15 : (var7 == 3 && var5 == 3 ? 15 : (var7 == 2 && var5 == 4 ? 15 : (var7 == 1 && var5 == 5 ? 15 : 0))))))); + } + } + + public boolean canProvidePower() { + return true; + } +} diff --git a/src/net/minecraft/src/BlockLilyPad.java b/src/net/minecraft/src/BlockLilyPad.java new file mode 100644 index 0000000..d76c838 --- /dev/null +++ b/src/net/minecraft/src/BlockLilyPad.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.util.List; + +public class BlockLilyPad extends BlockFlower { + protected BlockLilyPad(int var1) { + super(var1); + float var2 = 0.5F; + float var3 = 0.015625F; + this.setBlockBounds(0.5F - var2, 0.0F, 0.5F - var2, 0.5F + var2, var3, 0.5F + var2); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public int getRenderType() { + return 23; + } + + public void addCollisionBoxesToList(World var1, int var2, int var3, int var4, AxisAlignedBB var5, List var6, Entity var7) { + if(var7 == null || !(var7 instanceof EntityBoat)) { + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + } + + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return AxisAlignedBB.getAABBPool().getAABB((double)var2 + this.minX, (double)var3 + this.minY, (double)var4 + this.minZ, (double)var2 + this.maxX, (double)var3 + this.maxY, (double)var4 + this.maxZ); + } + + public int getBlockColor() { + return 2129968; + } + + public int getRenderColor(int var1) { + return 2129968; + } + + public int colorMultiplier(IBlockAccess var1, int var2, int var3, int var4) { + return 2129968; + } + + protected boolean canThisPlantGrowOnThisBlockID(int var1) { + return var1 == Block.waterStill.blockID; + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + return var3 >= 0 && var3 < 256 ? var1.getBlockMaterial(var2, var3 - 1, var4) == Material.water && var1.getBlockMetadata(var2, var3 - 1, var4) == 0 : false; + } +} diff --git a/src/net/minecraft/src/BlockLockedChest.java b/src/net/minecraft/src/BlockLockedChest.java new file mode 100644 index 0000000..76bfe71 --- /dev/null +++ b/src/net/minecraft/src/BlockLockedChest.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockLockedChest extends Block { + protected BlockLockedChest(int var1) { + super(var1, Material.wood); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return true; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + var1.setBlockToAir(var2, var3, var4); + } + + public void registerIcons(IconRegister var1) { + } +} diff --git a/src/net/minecraft/src/BlockLog.java b/src/net/minecraft/src/BlockLog.java new file mode 100644 index 0000000..f34bb11 --- /dev/null +++ b/src/net/minecraft/src/BlockLog.java @@ -0,0 +1,104 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockLog extends Block { + public static final String[] woodType = new String[]{"oak", "spruce", "birch", "jungle"}; + public static final String[] treeTextureTypes = new String[]{"tree_side", "tree_spruce", "tree_birch", "tree_jungle"}; + private Icon[] iconArray; + private Icon tree_top; + + protected BlockLog(int var1) { + super(var1, Material.wood); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public int getRenderType() { + return 31; + } + + public int quantityDropped(Random var1) { + return 1; + } + + public int idDropped(int var1, Random var2, int var3) { + return Block.wood.blockID; + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + byte var7 = 4; + int var8 = var7 + 1; + if(var1.checkChunksExist(var2 - var8, var3 - var8, var4 - var8, var2 + var8, var3 + var8, var4 + var8)) { + for(int var9 = -var7; var9 <= var7; ++var9) { + for(int var10 = -var7; var10 <= var7; ++var10) { + for(int var11 = -var7; var11 <= var7; ++var11) { + int var12 = var1.getBlockId(var2 + var9, var3 + var10, var4 + var11); + if(var12 == Block.leaves.blockID) { + int var13 = var1.getBlockMetadata(var2 + var9, var3 + var10, var4 + var11); + if((var13 & 8) == 0) { + var1.setBlockMetadataWithNotify(var2 + var9, var3 + var10, var4 + var11, var13 | 8, 4); + } + } + } + } + } + } + + } + + public int onBlockPlaced(World var1, int var2, int var3, int var4, int var5, float var6, float var7, float var8, int var9) { + int var10 = var9 & 3; + byte var11 = 0; + switch(var5) { + case 0: + case 1: + var11 = 0; + break; + case 2: + case 3: + var11 = 8; + break; + case 4: + case 5: + var11 = 4; + } + + return var10 | var11; + } + + public Icon getIcon(int var1, int var2) { + int var3 = var2 & 12; + int var4 = var2 & 3; + return var3 != 0 || var1 != 1 && var1 != 0 ? (var3 != 4 || var1 != 5 && var1 != 4 ? (var3 != 8 || var1 != 2 && var1 != 3 ? this.iconArray[var4] : this.tree_top) : this.tree_top) : this.tree_top; + } + + public int damageDropped(int var1) { + return var1 & 3; + } + + public static int limitToValidMetadata(int var0) { + return var0 & 3; + } + + public void getSubBlocks(int var1, CreativeTabs var2, List var3) { + var3.add(new ItemStack(var1, 1, 0)); + var3.add(new ItemStack(var1, 1, 1)); + var3.add(new ItemStack(var1, 1, 2)); + var3.add(new ItemStack(var1, 1, 3)); + } + + protected ItemStack createStackedBlock(int var1) { + return new ItemStack(this.blockID, 1, limitToValidMetadata(var1)); + } + + public void registerIcons(IconRegister var1) { + this.tree_top = var1.registerIcon("tree_top"); + this.iconArray = new Icon[treeTextureTypes.length]; + + for(int var2 = 0; var2 < this.iconArray.length; ++var2) { + this.iconArray[var2] = var1.registerIcon(treeTextureTypes[var2]); + } + + } +} diff --git a/src/net/minecraft/src/BlockMelon.java b/src/net/minecraft/src/BlockMelon.java new file mode 100644 index 0000000..5cd9096 --- /dev/null +++ b/src/net/minecraft/src/BlockMelon.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockMelon extends Block { + private Icon theIcon; + + protected BlockMelon(int var1) { + super(var1, Material.pumpkin); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public Icon getIcon(int var1, int var2) { + return var1 != 1 && var1 != 0 ? this.blockIcon : this.theIcon; + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.melon.itemID; + } + + public int quantityDropped(Random var1) { + return 3 + var1.nextInt(5); + } + + public int quantityDroppedWithBonus(int var1, Random var2) { + int var3 = this.quantityDropped(var2) + var2.nextInt(1 + var1); + if(var3 > 9) { + var3 = 9; + } + + return var3; + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("melon_side"); + this.theIcon = var1.registerIcon("melon_top"); + } +} diff --git a/src/net/minecraft/src/BlockMobSpawner.java b/src/net/minecraft/src/BlockMobSpawner.java new file mode 100644 index 0000000..d49c28c --- /dev/null +++ b/src/net/minecraft/src/BlockMobSpawner.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockMobSpawner extends BlockContainer { + protected BlockMobSpawner(int var1) { + super(var1, Material.rock); + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntityMobSpawner(); + } + + public int idDropped(int var1, Random var2, int var3) { + return 0; + } + + public int quantityDropped(Random var1) { + return 0; + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6, var7); + int var8 = 15 + var1.rand.nextInt(15) + var1.rand.nextInt(15); + this.dropXpOnBlockBreak(var1, var2, var3, var4, var8); + } + + public boolean isOpaqueCube() { + return false; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return 0; + } +} diff --git a/src/net/minecraft/src/BlockMushroom.java b/src/net/minecraft/src/BlockMushroom.java new file mode 100644 index 0000000..065e57d --- /dev/null +++ b/src/net/minecraft/src/BlockMushroom.java @@ -0,0 +1,98 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockMushroom extends BlockFlower { + private final String field_94374_a; + + protected BlockMushroom(int var1, String var2) { + super(var1); + this.field_94374_a = var2; + float var3 = 0.2F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, var3 * 2.0F, 0.5F + var3); + this.setTickRandomly(true); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var5.nextInt(25) == 0) { + byte var6 = 4; + int var7 = 5; + + int var8; + int var9; + int var10; + for(var8 = var2 - var6; var8 <= var2 + var6; ++var8) { + for(var9 = var4 - var6; var9 <= var4 + var6; ++var9) { + for(var10 = var3 - 1; var10 <= var3 + 1; ++var10) { + if(var1.getBlockId(var8, var10, var9) == this.blockID) { + --var7; + if(var7 <= 0) { + return; + } + } + } + } + } + + var8 = var2 + var5.nextInt(3) - 1; + var9 = var3 + var5.nextInt(2) - var5.nextInt(2); + var10 = var4 + var5.nextInt(3) - 1; + + for(int var11 = 0; var11 < 4; ++var11) { + if(var1.isAirBlock(var8, var9, var10) && this.canBlockStay(var1, var8, var9, var10)) { + var2 = var8; + var3 = var9; + var4 = var10; + } + + var8 = var2 + var5.nextInt(3) - 1; + var9 = var3 + var5.nextInt(2) - var5.nextInt(2); + var10 = var4 + var5.nextInt(3) - 1; + } + + if(var1.isAirBlock(var8, var9, var10) && this.canBlockStay(var1, var8, var9, var10)) { + var1.setBlock(var8, var9, var10, this.blockID); + } + } + + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return super.canPlaceBlockAt(var1, var2, var3, var4) && this.canBlockStay(var1, var2, var3, var4); + } + + protected boolean canThisPlantGrowOnThisBlockID(int var1) { + return Block.opaqueCubeLookup[var1]; + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + if(var3 >= 0 && var3 < 256) { + int var5 = var1.getBlockId(var2, var3 - 1, var4); + return var5 == Block.mycelium.blockID || var1.getFullBlockLightValue(var2, var3, var4) < 13 && this.canThisPlantGrowOnThisBlockID(var5); + } else { + return false; + } + } + + public boolean fertilizeMushroom(World var1, int var2, int var3, int var4, Random var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + var1.setBlockToAir(var2, var3, var4); + WorldGenBigMushroom var7 = null; + if(this.blockID == Block.mushroomBrown.blockID) { + var7 = new WorldGenBigMushroom(0); + } else if(this.blockID == Block.mushroomRed.blockID) { + var7 = new WorldGenBigMushroom(1); + } + + if(var7 != null && var7.generate(var1, var5, var2, var3, var4)) { + return true; + } else { + var1.setBlock(var2, var3, var4, this.blockID, var6, 3); + return false; + } + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon(this.field_94374_a); + } +} diff --git a/src/net/minecraft/src/BlockMushroomCap.java b/src/net/minecraft/src/BlockMushroomCap.java new file mode 100644 index 0000000..1c0e1e6 --- /dev/null +++ b/src/net/minecraft/src/BlockMushroomCap.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockMushroomCap extends Block { + private static final String[] field_94429_a = new String[]{"mushroom_skin_brown", "mushroom_skin_red"}; + private final int mushroomType; + private Icon[] iconArray; + private Icon field_94426_cO; + private Icon field_94427_cP; + + public BlockMushroomCap(int var1, Material var2, int var3) { + super(var1, var2); + this.mushroomType = var3; + } + + public Icon getIcon(int var1, int var2) { + return var2 == 10 && var1 > 1 ? this.field_94426_cO : (var2 >= 1 && var2 <= 9 && var1 == 1 ? this.iconArray[this.mushroomType] : (var2 >= 1 && var2 <= 3 && var1 == 2 ? this.iconArray[this.mushroomType] : (var2 >= 7 && var2 <= 9 && var1 == 3 ? this.iconArray[this.mushroomType] : ((var2 == 1 || var2 == 4 || var2 == 7) && var1 == 4 ? this.iconArray[this.mushroomType] : ((var2 == 3 || var2 == 6 || var2 == 9) && var1 == 5 ? this.iconArray[this.mushroomType] : (var2 == 14 ? this.iconArray[this.mushroomType] : (var2 == 15 ? this.field_94426_cO : this.field_94427_cP))))))); + } + + public int quantityDropped(Random var1) { + int var2 = var1.nextInt(10) - 7; + if(var2 < 0) { + var2 = 0; + } + + return var2; + } + + public int idDropped(int var1, Random var2, int var3) { + return Block.mushroomBrown.blockID + this.mushroomType; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Block.mushroomBrown.blockID + this.mushroomType; + } + + public void registerIcons(IconRegister var1) { + this.iconArray = new Icon[field_94429_a.length]; + + for(int var2 = 0; var2 < this.iconArray.length; ++var2) { + this.iconArray[var2] = var1.registerIcon(field_94429_a[var2]); + } + + this.field_94427_cP = var1.registerIcon("mushroom_inside"); + this.field_94426_cO = var1.registerIcon("mushroom_skin_stem"); + } +} diff --git a/src/net/minecraft/src/BlockMycelium.java b/src/net/minecraft/src/BlockMycelium.java new file mode 100644 index 0000000..f3ebbfd --- /dev/null +++ b/src/net/minecraft/src/BlockMycelium.java @@ -0,0 +1,66 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockMycelium extends Block { + private Icon field_94422_a; + private Icon field_94421_b; + + protected BlockMycelium(int var1) { + super(var1, Material.grass); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public Icon getIcon(int var1, int var2) { + return var1 == 1 ? this.field_94422_a : (var1 == 0 ? Block.dirt.getBlockTextureFromSide(var1) : this.blockIcon); + } + + public Icon getBlockTexture(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(var5 == 1) { + return this.field_94422_a; + } else if(var5 == 0) { + return Block.dirt.getBlockTextureFromSide(var5); + } else { + Material var6 = var1.getBlockMaterial(var2, var3 + 1, var4); + return var6 != Material.snow && var6 != Material.craftedSnow ? this.blockIcon : this.field_94421_b; + } + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("mycel_side"); + this.field_94422_a = var1.registerIcon("mycel_top"); + this.field_94421_b = var1.registerIcon("snow_side"); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.isRemote) { + if(var1.getBlockLightValue(var2, var3 + 1, var4) < 4 && Block.lightOpacity[var1.getBlockId(var2, var3 + 1, var4)] > 2) { + var1.setBlock(var2, var3, var4, Block.dirt.blockID); + } else if(var1.getBlockLightValue(var2, var3 + 1, var4) >= 9) { + for(int var6 = 0; var6 < 4; ++var6) { + int var7 = var2 + var5.nextInt(3) - 1; + int var8 = var3 + var5.nextInt(5) - 3; + int var9 = var4 + var5.nextInt(3) - 1; + int var10 = var1.getBlockId(var7, var8 + 1, var9); + if(var1.getBlockId(var7, var8, var9) == Block.dirt.blockID && var1.getBlockLightValue(var7, var8 + 1, var9) >= 4 && Block.lightOpacity[var10] <= 2) { + var1.setBlock(var7, var8, var9, this.blockID); + } + } + } + + } + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + super.randomDisplayTick(var1, var2, var3, var4, var5); + if(var5.nextInt(10) == 0) { + var1.spawnParticle("townaura", (double)((float)var2 + var5.nextFloat()), (double)((float)var3 + 1.1F), (double)((float)var4 + var5.nextFloat()), 0.0D, 0.0D, 0.0D); + } + + } + + public int idDropped(int var1, Random var2, int var3) { + return Block.dirt.idDropped(0, var2, var3); + } +} diff --git a/src/net/minecraft/src/BlockNetherStalk.java b/src/net/minecraft/src/BlockNetherStalk.java new file mode 100644 index 0000000..ac788f1 --- /dev/null +++ b/src/net/minecraft/src/BlockNetherStalk.java @@ -0,0 +1,80 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockNetherStalk extends BlockFlower { + private static final String[] field_94373_a = new String[]{"netherStalk_0", "netherStalk_1", "netherStalk_2"}; + private Icon[] iconArray; + + protected BlockNetherStalk(int var1) { + super(var1); + this.setTickRandomly(true); + float var2 = 0.5F; + this.setBlockBounds(0.5F - var2, 0.0F, 0.5F - var2, 0.5F + var2, 0.25F, 0.5F + var2); + this.setCreativeTab((CreativeTabs)null); + } + + protected boolean canThisPlantGrowOnThisBlockID(int var1) { + return var1 == Block.slowSand.blockID; + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + return this.canThisPlantGrowOnThisBlockID(var1.getBlockId(var2, var3 - 1, var4)); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 < 3 && var5.nextInt(10) == 0) { + ++var6; + var1.setBlockMetadataWithNotify(var2, var3, var4, var6, 2); + } + + super.updateTick(var1, var2, var3, var4, var5); + } + + public Icon getIcon(int var1, int var2) { + return var2 >= 3 ? this.iconArray[2] : (var2 > 0 ? this.iconArray[1] : this.iconArray[0]); + } + + public int getRenderType() { + return 6; + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + if(!var1.isRemote) { + int var8 = 1; + if(var5 >= 3) { + var8 = 2 + var1.rand.nextInt(3); + if(var7 > 0) { + var8 += var1.rand.nextInt(var7 + 1); + } + } + + for(int var9 = 0; var9 < var8; ++var9) { + this.dropBlockAsItem_do(var1, var2, var3, var4, new ItemStack(Item.netherStalkSeeds)); + } + + } + } + + public int idDropped(int var1, Random var2, int var3) { + return 0; + } + + public int quantityDropped(Random var1) { + return 0; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Item.netherStalkSeeds.itemID; + } + + public void registerIcons(IconRegister var1) { + this.iconArray = new Icon[field_94373_a.length]; + + for(int var2 = 0; var2 < this.iconArray.length; ++var2) { + this.iconArray[var2] = var1.registerIcon(field_94373_a[var2]); + } + + } +} diff --git a/src/net/minecraft/src/BlockNetherrack.java b/src/net/minecraft/src/BlockNetherrack.java new file mode 100644 index 0000000..bf0cf63 --- /dev/null +++ b/src/net/minecraft/src/BlockNetherrack.java @@ -0,0 +1,8 @@ +package net.minecraft.src; + +public class BlockNetherrack extends Block { + public BlockNetherrack(int var1) { + super(var1, Material.rock); + this.setCreativeTab(CreativeTabs.tabBlock); + } +} diff --git a/src/net/minecraft/src/BlockNote.java b/src/net/minecraft/src/BlockNote.java new file mode 100644 index 0000000..4ec4464 --- /dev/null +++ b/src/net/minecraft/src/BlockNote.java @@ -0,0 +1,73 @@ +package net.minecraft.src; + +public class BlockNote extends BlockContainer { + public BlockNote(int var1) { + super(var1, Material.wood); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + boolean var6 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4); + TileEntityNote var7 = (TileEntityNote)var1.getBlockTileEntity(var2, var3, var4); + if(var7 != null && var7.previousRedstoneState != var6) { + if(var6) { + var7.triggerNote(var1, var2, var3, var4); + } + + var7.previousRedstoneState = var6; + } + + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(var1.isRemote) { + return true; + } else { + TileEntityNote var10 = (TileEntityNote)var1.getBlockTileEntity(var2, var3, var4); + if(var10 != null) { + var10.changePitch(); + var10.triggerNote(var1, var2, var3, var4); + } + + return true; + } + } + + public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + if(!var1.isRemote) { + TileEntityNote var6 = (TileEntityNote)var1.getBlockTileEntity(var2, var3, var4); + if(var6 != null) { + var6.triggerNote(var1, var2, var3, var4); + } + + } + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntityNote(); + } + + public boolean onBlockEventReceived(World var1, int var2, int var3, int var4, int var5, int var6) { + float var7 = (float)Math.pow(2.0D, (double)(var6 - 12) / 12.0D); + String var8 = "harp"; + if(var5 == 1) { + var8 = "bd"; + } + + if(var5 == 2) { + var8 = "snare"; + } + + if(var5 == 3) { + var8 = "hat"; + } + + if(var5 == 4) { + var8 = "bassattack"; + } + + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "note." + var8, 3.0F, var7); + var1.spawnParticle("note", (double)var2 + 0.5D, (double)var3 + 1.2D, (double)var4 + 0.5D, (double)var6 / 24.0D, 0.0D, 0.0D); + return true; + } +} diff --git a/src/net/minecraft/src/BlockObsidian.java b/src/net/minecraft/src/BlockObsidian.java new file mode 100644 index 0000000..57d9592 --- /dev/null +++ b/src/net/minecraft/src/BlockObsidian.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockObsidian extends BlockStone { + public BlockObsidian(int var1) { + super(var1); + } + + public int quantityDropped(Random var1) { + return 1; + } + + public int idDropped(int var1, Random var2, int var3) { + return Block.obsidian.blockID; + } +} diff --git a/src/net/minecraft/src/BlockOre.java b/src/net/minecraft/src/BlockOre.java new file mode 100644 index 0000000..df4b9be --- /dev/null +++ b/src/net/minecraft/src/BlockOre.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockOre extends Block { + public BlockOre(int var1) { + super(var1, Material.rock); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public int idDropped(int var1, Random var2, int var3) { + return this.blockID == Block.oreCoal.blockID ? Item.coal.itemID : (this.blockID == Block.oreDiamond.blockID ? Item.diamond.itemID : (this.blockID == Block.oreLapis.blockID ? Item.dyePowder.itemID : (this.blockID == Block.oreEmerald.blockID ? Item.emerald.itemID : (this.blockID == Block.oreNetherQuartz.blockID ? Item.netherQuartz.itemID : this.blockID)))); + } + + public int quantityDropped(Random var1) { + return this.blockID == Block.oreLapis.blockID ? 4 + var1.nextInt(5) : 1; + } + + public int quantityDroppedWithBonus(int var1, Random var2) { + if(var1 > 0 && this.blockID != this.idDropped(0, var2, var1)) { + int var3 = var2.nextInt(var1 + 2) - 1; + if(var3 < 0) { + var3 = 0; + } + + return this.quantityDropped(var2) * (var3 + 1); + } else { + return this.quantityDropped(var2); + } + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6, var7); + if(this.idDropped(var5, var1.rand, var7) != this.blockID) { + int var8 = 0; + if(this.blockID == Block.oreCoal.blockID) { + var8 = MathHelper.getRandomIntegerInRange(var1.rand, 0, 2); + } else if(this.blockID == Block.oreDiamond.blockID) { + var8 = MathHelper.getRandomIntegerInRange(var1.rand, 3, 7); + } else if(this.blockID == Block.oreEmerald.blockID) { + var8 = MathHelper.getRandomIntegerInRange(var1.rand, 3, 7); + } else if(this.blockID == Block.oreLapis.blockID) { + var8 = MathHelper.getRandomIntegerInRange(var1.rand, 2, 5); + } else if(this.blockID == Block.oreNetherQuartz.blockID) { + var8 = MathHelper.getRandomIntegerInRange(var1.rand, 2, 5); + } + + this.dropXpOnBlockBreak(var1, var2, var3, var4, var8); + } + + } + + public int damageDropped(int var1) { + return this.blockID == Block.oreLapis.blockID ? 4 : 0; + } +} diff --git a/src/net/minecraft/src/BlockOreStorage.java b/src/net/minecraft/src/BlockOreStorage.java new file mode 100644 index 0000000..c31288c --- /dev/null +++ b/src/net/minecraft/src/BlockOreStorage.java @@ -0,0 +1,8 @@ +package net.minecraft.src; + +public class BlockOreStorage extends Block { + public BlockOreStorage(int var1) { + super(var1, Material.iron); + this.setCreativeTab(CreativeTabs.tabBlock); + } +} diff --git a/src/net/minecraft/src/BlockPane.java b/src/net/minecraft/src/BlockPane.java new file mode 100644 index 0000000..ca58731 --- /dev/null +++ b/src/net/minecraft/src/BlockPane.java @@ -0,0 +1,132 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockPane extends Block { + private final String sideTextureIndex; + private final boolean canDropItself; + private final String field_94402_c; + private Icon theIcon; + + protected BlockPane(int var1, String var2, String var3, Material var4, boolean var5) { + super(var1, var4); + this.sideTextureIndex = var3; + this.canDropItself = var5; + this.field_94402_c = var2; + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public int idDropped(int var1, Random var2, int var3) { + return !this.canDropItself ? 0 : super.idDropped(var1, var2, var3); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 18; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockId(var2, var3, var4); + return var6 == this.blockID ? false : super.shouldSideBeRendered(var1, var2, var3, var4, var5); + } + + public void addCollisionBoxesToList(World var1, int var2, int var3, int var4, AxisAlignedBB var5, List var6, Entity var7) { + boolean var8 = this.canThisPaneConnectToThisBlockID(var1.getBlockId(var2, var3, var4 - 1)); + boolean var9 = this.canThisPaneConnectToThisBlockID(var1.getBlockId(var2, var3, var4 + 1)); + boolean var10 = this.canThisPaneConnectToThisBlockID(var1.getBlockId(var2 - 1, var3, var4)); + boolean var11 = this.canThisPaneConnectToThisBlockID(var1.getBlockId(var2 + 1, var3, var4)); + if((!var10 || !var11) && (var10 || var11 || var8 || var9)) { + if(var10 && !var11) { + this.setBlockBounds(0.0F, 0.0F, 7.0F / 16.0F, 0.5F, 1.0F, 9.0F / 16.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + } else if(!var10 && var11) { + this.setBlockBounds(0.5F, 0.0F, 7.0F / 16.0F, 1.0F, 1.0F, 9.0F / 16.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + } + } else { + this.setBlockBounds(0.0F, 0.0F, 7.0F / 16.0F, 1.0F, 1.0F, 9.0F / 16.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + } + + if((!var8 || !var9) && (var10 || var11 || var8 || var9)) { + if(var8 && !var9) { + this.setBlockBounds(7.0F / 16.0F, 0.0F, 0.0F, 9.0F / 16.0F, 1.0F, 0.5F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + } else if(!var8 && var9) { + this.setBlockBounds(7.0F / 16.0F, 0.0F, 0.5F, 9.0F / 16.0F, 1.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + } + } else { + this.setBlockBounds(7.0F / 16.0F, 0.0F, 0.0F, 9.0F / 16.0F, 1.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + } + + } + + public void setBlockBoundsForItemRender() { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + float var5 = 7.0F / 16.0F; + float var6 = 9.0F / 16.0F; + float var7 = 7.0F / 16.0F; + float var8 = 9.0F / 16.0F; + boolean var9 = this.canThisPaneConnectToThisBlockID(var1.getBlockId(var2, var3, var4 - 1)); + boolean var10 = this.canThisPaneConnectToThisBlockID(var1.getBlockId(var2, var3, var4 + 1)); + boolean var11 = this.canThisPaneConnectToThisBlockID(var1.getBlockId(var2 - 1, var3, var4)); + boolean var12 = this.canThisPaneConnectToThisBlockID(var1.getBlockId(var2 + 1, var3, var4)); + if((!var11 || !var12) && (var11 || var12 || var9 || var10)) { + if(var11 && !var12) { + var5 = 0.0F; + } else if(!var11 && var12) { + var6 = 1.0F; + } + } else { + var5 = 0.0F; + var6 = 1.0F; + } + + if((!var9 || !var10) && (var11 || var12 || var9 || var10)) { + if(var9 && !var10) { + var7 = 0.0F; + } else if(!var9 && var10) { + var8 = 1.0F; + } + } else { + var7 = 0.0F; + var8 = 1.0F; + } + + this.setBlockBounds(var5, 0.0F, var7, var6, 1.0F, var8); + } + + public Icon getSideTextureIndex() { + return this.theIcon; + } + + public final boolean canThisPaneConnectToThisBlockID(int var1) { + return Block.opaqueCubeLookup[var1] || var1 == this.blockID || var1 == Block.glass.blockID; + } + + protected boolean canSilkHarvest() { + return true; + } + + protected ItemStack createStackedBlock(int var1) { + return new ItemStack(this.blockID, 1, var1); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon(this.field_94402_c); + this.theIcon = var1.registerIcon(this.sideTextureIndex); + } +} diff --git a/src/net/minecraft/src/BlockPistonBase.java b/src/net/minecraft/src/BlockPistonBase.java new file mode 100644 index 0000000..0020615 --- /dev/null +++ b/src/net/minecraft/src/BlockPistonBase.java @@ -0,0 +1,383 @@ +package net.minecraft.src; + +import java.util.List; + +public class BlockPistonBase extends Block { + private final boolean isSticky; + private Icon innerTopIcon; + private Icon bottomIcon; + private Icon topIcon; + + public BlockPistonBase(int var1, boolean var2) { + super(var1, Material.piston); + this.isSticky = var2; + this.setStepSound(soundStoneFootstep); + this.setHardness(0.5F); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + + public Icon getPistonExtensionTexture() { + return this.topIcon; + } + + public void func_96479_b(float var1, float var2, float var3, float var4, float var5, float var6) { + this.setBlockBounds(var1, var2, var3, var4, var5, var6); + } + + public Icon getIcon(int var1, int var2) { + int var3 = getOrientation(var2); + return var3 > 5 ? this.topIcon : (var1 == var3 ? (!isExtended(var2) && this.minX <= 0.0D && this.minY <= 0.0D && this.minZ <= 0.0D && this.maxX >= 1.0D && this.maxY >= 1.0D && this.maxZ >= 1.0D ? this.topIcon : this.innerTopIcon) : (var1 == Facing.oppositeSide[var3] ? this.bottomIcon : this.blockIcon)); + } + + public static Icon func_94496_b(String var0) { + return var0 == "piston_side" ? Block.pistonBase.blockIcon : (var0 == "piston_top" ? Block.pistonBase.topIcon : (var0 == "piston_top_sticky" ? Block.pistonStickyBase.topIcon : (var0 == "piston_inner_top" ? Block.pistonBase.innerTopIcon : null))); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("piston_side"); + this.topIcon = var1.registerIcon(this.isSticky ? "piston_top_sticky" : "piston_top"); + this.innerTopIcon = var1.registerIcon("piston_inner_top"); + this.bottomIcon = var1.registerIcon("piston_bottom"); + } + + public int getRenderType() { + return 16; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + return false; + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + int var7 = determineOrientation(var1, var2, var3, var4, var5); + var1.setBlockMetadataWithNotify(var2, var3, var4, var7, 2); + if(!var1.isRemote) { + this.updatePistonState(var1, var2, var3, var4); + } + + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isRemote) { + this.updatePistonState(var1, var2, var3, var4); + } + + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(!var1.isRemote && var1.getBlockTileEntity(var2, var3, var4) == null) { + this.updatePistonState(var1, var2, var3, var4); + } + + } + + private void updatePistonState(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + int var6 = getOrientation(var5); + if(var6 != 7) { + boolean var7 = this.isIndirectlyPowered(var1, var2, var3, var4, var6); + if(var7 && !isExtended(var5)) { + if(canExtend(var1, var2, var3, var4, var6)) { + var1.addBlockEvent(var2, var3, var4, this.blockID, 0, var6); + } + } else if(!var7 && isExtended(var5)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6, 2); + var1.addBlockEvent(var2, var3, var4, this.blockID, 1, var6); + } + + } + } + + private boolean isIndirectlyPowered(World var1, int var2, int var3, int var4, int var5) { + return var5 != 0 && var1.getIndirectPowerOutput(var2, var3 - 1, var4, 0) ? true : (var5 != 1 && var1.getIndirectPowerOutput(var2, var3 + 1, var4, 1) ? true : (var5 != 2 && var1.getIndirectPowerOutput(var2, var3, var4 - 1, 2) ? true : (var5 != 3 && var1.getIndirectPowerOutput(var2, var3, var4 + 1, 3) ? true : (var5 != 5 && var1.getIndirectPowerOutput(var2 + 1, var3, var4, 5) ? true : (var5 != 4 && var1.getIndirectPowerOutput(var2 - 1, var3, var4, 4) ? true : (var1.getIndirectPowerOutput(var2, var3, var4, 0) ? true : (var1.getIndirectPowerOutput(var2, var3 + 2, var4, 1) ? true : (var1.getIndirectPowerOutput(var2, var3 + 1, var4 - 1, 2) ? true : (var1.getIndirectPowerOutput(var2, var3 + 1, var4 + 1, 3) ? true : (var1.getIndirectPowerOutput(var2 - 1, var3 + 1, var4, 4) ? true : var1.getIndirectPowerOutput(var2 + 1, var3 + 1, var4, 5))))))))))); + } + + public boolean onBlockEventReceived(World var1, int var2, int var3, int var4, int var5, int var6) { + if(!var1.isRemote) { + boolean var7 = this.isIndirectlyPowered(var1, var2, var3, var4, var6); + if(var7 && var5 == 1) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 | 8, 2); + return false; + } + + if(!var7 && var5 == 0) { + return false; + } + } + + if(var5 == 0) { + if(!this.tryExtend(var1, var2, var3, var4, var6)) { + return false; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 | 8, 2); + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "tile.piston.out", 0.5F, var1.rand.nextFloat() * 0.25F + 0.6F); + } else if(var5 == 1) { + TileEntity var16 = var1.getBlockTileEntity(var2 + Facing.offsetsXForSide[var6], var3 + Facing.offsetsYForSide[var6], var4 + Facing.offsetsZForSide[var6]); + if(var16 instanceof TileEntityPiston) { + ((TileEntityPiston)var16).clearPistonTileEntity(); + } + + var1.setBlock(var2, var3, var4, Block.pistonMoving.blockID, var6, 3); + var1.setBlockTileEntity(var2, var3, var4, BlockPistonMoving.getTileEntity(this.blockID, var6, var6, false, true)); + if(this.isSticky) { + int var8 = var2 + Facing.offsetsXForSide[var6] * 2; + int var9 = var3 + Facing.offsetsYForSide[var6] * 2; + int var10 = var4 + Facing.offsetsZForSide[var6] * 2; + int var11 = var1.getBlockId(var8, var9, var10); + int var12 = var1.getBlockMetadata(var8, var9, var10); + boolean var13 = false; + if(var11 == Block.pistonMoving.blockID) { + TileEntity var14 = var1.getBlockTileEntity(var8, var9, var10); + if(var14 instanceof TileEntityPiston) { + TileEntityPiston var15 = (TileEntityPiston)var14; + if(var15.getPistonOrientation() == var6 && var15.isExtending()) { + var15.clearPistonTileEntity(); + var11 = var15.getStoredBlockID(); + var12 = var15.getBlockMetadata(); + var13 = true; + } + } + } + + if(var13 || var11 <= 0 || !canPushBlock(var11, var1, var8, var9, var10, false) || Block.blocksList[var11].getMobilityFlag() != 0 && var11 != Block.pistonBase.blockID && var11 != Block.pistonStickyBase.blockID) { + if(!var13) { + var1.setBlockToAir(var2 + Facing.offsetsXForSide[var6], var3 + Facing.offsetsYForSide[var6], var4 + Facing.offsetsZForSide[var6]); + } + } else { + var2 += Facing.offsetsXForSide[var6]; + var3 += Facing.offsetsYForSide[var6]; + var4 += Facing.offsetsZForSide[var6]; + var1.setBlock(var2, var3, var4, Block.pistonMoving.blockID, var12, 3); + var1.setBlockTileEntity(var2, var3, var4, BlockPistonMoving.getTileEntity(var11, var12, var6, false, false)); + var1.setBlockToAir(var8, var9, var10); + } + } else { + var1.setBlockToAir(var2 + Facing.offsetsXForSide[var6], var3 + Facing.offsetsYForSide[var6], var4 + Facing.offsetsZForSide[var6]); + } + + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "tile.piston.in", 0.5F, var1.rand.nextFloat() * 0.15F + 0.6F); + } + + return true; + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + if(isExtended(var5)) { + switch(getOrientation(var5)) { + case 0: + this.setBlockBounds(0.0F, 0.25F, 0.0F, 1.0F, 1.0F, 1.0F); + break; + case 1: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 12.0F / 16.0F, 1.0F); + break; + case 2: + this.setBlockBounds(0.0F, 0.0F, 0.25F, 1.0F, 1.0F, 1.0F); + break; + case 3: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 12.0F / 16.0F); + break; + case 4: + this.setBlockBounds(0.25F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + break; + case 5: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 12.0F / 16.0F, 1.0F, 1.0F); + } + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + } + + public void setBlockBoundsForItemRender() { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public void addCollisionBoxesToList(World var1, int var2, int var3, int var4, AxisAlignedBB var5, List var6, Entity var7) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + } + + public boolean renderAsNormalBlock() { + return false; + } + + public static int getOrientation(int var0) { + return var0 & 7; + } + + public static boolean isExtended(int var0) { + return (var0 & 8) != 0; + } + + public static int determineOrientation(World var0, int var1, int var2, int var3, EntityLiving var4) { + if(MathHelper.abs((float)var4.posX - (float)var1) < 2.0F && MathHelper.abs((float)var4.posZ - (float)var3) < 2.0F) { + double var5 = var4.posY + 1.82D - (double)var4.yOffset; + if(var5 - (double)var2 > 2.0D) { + return 1; + } + + if((double)var2 - var5 > 0.0D) { + return 0; + } + } + + int var7 = MathHelper.floor_double((double)(var4.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + return var7 == 0 ? 2 : (var7 == 1 ? 5 : (var7 == 2 ? 3 : (var7 == 3 ? 4 : 0))); + } + + private static boolean canPushBlock(int var0, World var1, int var2, int var3, int var4, boolean var5) { + if(var0 == Block.obsidian.blockID) { + return false; + } else { + if(var0 != Block.pistonBase.blockID && var0 != Block.pistonStickyBase.blockID) { + if(Block.blocksList[var0].getBlockHardness(var1, var2, var3, var4) == -1.0F) { + return false; + } + + if(Block.blocksList[var0].getMobilityFlag() == 2) { + return false; + } + + if(Block.blocksList[var0].getMobilityFlag() == 1) { + if(!var5) { + return false; + } + + return true; + } + } else if(isExtended(var1.getBlockMetadata(var2, var3, var4))) { + return false; + } + + return !(Block.blocksList[var0] instanceof ITileEntityProvider); + } + } + + private static boolean canExtend(World var0, int var1, int var2, int var3, int var4) { + int var5 = var1 + Facing.offsetsXForSide[var4]; + int var6 = var2 + Facing.offsetsYForSide[var4]; + int var7 = var3 + Facing.offsetsZForSide[var4]; + int var8 = 0; + + while(true) { + if(var8 < 13) { + if(var6 <= 0 || var6 >= 255) { + return false; + } + + int var9 = var0.getBlockId(var5, var6, var7); + if(var9 != 0) { + if(!canPushBlock(var9, var0, var5, var6, var7, true)) { + return false; + } + + if(Block.blocksList[var9].getMobilityFlag() != 1) { + if(var8 == 12) { + return false; + } + + var5 += Facing.offsetsXForSide[var4]; + var6 += Facing.offsetsYForSide[var4]; + var7 += Facing.offsetsZForSide[var4]; + ++var8; + continue; + } + } + } + + return true; + } + } + + private boolean tryExtend(World var1, int var2, int var3, int var4, int var5) { + int var6 = var2 + Facing.offsetsXForSide[var5]; + int var7 = var3 + Facing.offsetsYForSide[var5]; + int var8 = var4 + Facing.offsetsZForSide[var5]; + int var9 = 0; + + while(true) { + int var10; + if(var9 < 13) { + if(var7 <= 0 || var7 >= 255) { + return false; + } + + var10 = var1.getBlockId(var6, var7, var8); + if(var10 != 0) { + if(!canPushBlock(var10, var1, var6, var7, var8, true)) { + return false; + } + + if(Block.blocksList[var10].getMobilityFlag() != 1) { + if(var9 == 12) { + return false; + } + + var6 += Facing.offsetsXForSide[var5]; + var7 += Facing.offsetsYForSide[var5]; + var8 += Facing.offsetsZForSide[var5]; + ++var9; + continue; + } + + Block.blocksList[var10].dropBlockAsItem(var1, var6, var7, var8, var1.getBlockMetadata(var6, var7, var8), 0); + var1.setBlockToAir(var6, var7, var8); + } + } + + var9 = var6; + var10 = var7; + int var11 = var8; + int var12 = 0; + + int[] var13; + int var14; + int var15; + int var16; + for(var13 = new int[13]; var6 != var2 || var7 != var3 || var8 != var4; var8 = var16) { + var14 = var6 - Facing.offsetsXForSide[var5]; + var15 = var7 - Facing.offsetsYForSide[var5]; + var16 = var8 - Facing.offsetsZForSide[var5]; + int var17 = var1.getBlockId(var14, var15, var16); + int var18 = var1.getBlockMetadata(var14, var15, var16); + if(var17 == this.blockID && var14 == var2 && var15 == var3 && var16 == var4) { + var1.setBlock(var6, var7, var8, Block.pistonMoving.blockID, var5 | (this.isSticky ? 8 : 0), 4); + var1.setBlockTileEntity(var6, var7, var8, BlockPistonMoving.getTileEntity(Block.pistonExtension.blockID, var5 | (this.isSticky ? 8 : 0), var5, true, false)); + } else { + var1.setBlock(var6, var7, var8, Block.pistonMoving.blockID, var18, 4); + var1.setBlockTileEntity(var6, var7, var8, BlockPistonMoving.getTileEntity(var17, var18, var5, true, false)); + } + + var13[var12++] = var17; + var6 = var14; + var7 = var15; + } + + var6 = var9; + var7 = var10; + var8 = var11; + + for(var12 = 0; var6 != var2 || var7 != var3 || var8 != var4; var8 = var16) { + var14 = var6 - Facing.offsetsXForSide[var5]; + var15 = var7 - Facing.offsetsYForSide[var5]; + var16 = var8 - Facing.offsetsZForSide[var5]; + var1.notifyBlocksOfNeighborChange(var14, var15, var16, var13[var12++]); + var6 = var14; + var7 = var15; + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/BlockPistonExtension.java b/src/net/minecraft/src/BlockPistonExtension.java new file mode 100644 index 0000000..aa20fc8 --- /dev/null +++ b/src/net/minecraft/src/BlockPistonExtension.java @@ -0,0 +1,157 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockPistonExtension extends Block { + private Icon headTexture = null; + + public BlockPistonExtension(int var1) { + super(var1, Material.piston); + this.setStepSound(soundStoneFootstep); + this.setHardness(0.5F); + } + + public void setHeadTexture(Icon var1) { + this.headTexture = var1; + } + + public void clearHeadTexture() { + this.headTexture = null; + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + super.breakBlock(var1, var2, var3, var4, var5, var6); + int var7 = Facing.oppositeSide[getDirectionMeta(var6)]; + var2 += Facing.offsetsXForSide[var7]; + var3 += Facing.offsetsYForSide[var7]; + var4 += Facing.offsetsZForSide[var7]; + int var8 = var1.getBlockId(var2, var3, var4); + if(var8 == Block.pistonBase.blockID || var8 == Block.pistonStickyBase.blockID) { + var6 = var1.getBlockMetadata(var2, var3, var4); + if(BlockPistonBase.isExtended(var6)) { + Block.blocksList[var8].dropBlockAsItem(var1, var2, var3, var4, var6, 0); + var1.setBlockToAir(var2, var3, var4); + } + } + + } + + public Icon getIcon(int var1, int var2) { + int var3 = getDirectionMeta(var2); + return var1 == var3 ? (this.headTexture != null ? this.headTexture : ((var2 & 8) != 0 ? BlockPistonBase.func_94496_b("piston_top_sticky") : BlockPistonBase.func_94496_b("piston_top"))) : (var3 < 6 && var1 == Facing.oppositeSide[var3] ? BlockPistonBase.func_94496_b("piston_top") : BlockPistonBase.func_94496_b("piston_side")); + } + + public void registerIcons(IconRegister var1) { + } + + public int getRenderType() { + return 17; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return false; + } + + public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) { + return false; + } + + public int quantityDropped(Random var1) { + return 0; + } + + public void addCollisionBoxesToList(World var1, int var2, int var3, int var4, AxisAlignedBB var5, List var6, Entity var7) { + int var8 = var1.getBlockMetadata(var2, var3, var4); + switch(getDirectionMeta(var8)) { + case 0: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.25F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + this.setBlockBounds(6.0F / 16.0F, 0.25F, 6.0F / 16.0F, 10.0F / 16.0F, 1.0F, 10.0F / 16.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + break; + case 1: + this.setBlockBounds(0.0F, 12.0F / 16.0F, 0.0F, 1.0F, 1.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + this.setBlockBounds(6.0F / 16.0F, 0.0F, 6.0F / 16.0F, 10.0F / 16.0F, 12.0F / 16.0F, 10.0F / 16.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + break; + case 2: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.25F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + this.setBlockBounds(0.25F, 6.0F / 16.0F, 0.25F, 12.0F / 16.0F, 10.0F / 16.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + break; + case 3: + this.setBlockBounds(0.0F, 0.0F, 12.0F / 16.0F, 1.0F, 1.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + this.setBlockBounds(0.25F, 6.0F / 16.0F, 0.0F, 12.0F / 16.0F, 10.0F / 16.0F, 12.0F / 16.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + break; + case 4: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.25F, 1.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + this.setBlockBounds(6.0F / 16.0F, 0.25F, 0.25F, 10.0F / 16.0F, 12.0F / 16.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + break; + case 5: + this.setBlockBounds(12.0F / 16.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + this.setBlockBounds(0.0F, 6.0F / 16.0F, 0.25F, 12.0F / 16.0F, 10.0F / 16.0F, 12.0F / 16.0F); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + } + + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + switch(getDirectionMeta(var5)) { + case 0: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.25F, 1.0F); + break; + case 1: + this.setBlockBounds(0.0F, 12.0F / 16.0F, 0.0F, 1.0F, 1.0F, 1.0F); + break; + case 2: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.25F); + break; + case 3: + this.setBlockBounds(0.0F, 0.0F, 12.0F / 16.0F, 1.0F, 1.0F, 1.0F); + break; + case 4: + this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.25F, 1.0F, 1.0F); + break; + case 5: + this.setBlockBounds(12.0F / 16.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + int var6 = getDirectionMeta(var1.getBlockMetadata(var2, var3, var4)); + int var7 = var1.getBlockId(var2 - Facing.offsetsXForSide[var6], var3 - Facing.offsetsYForSide[var6], var4 - Facing.offsetsZForSide[var6]); + if(var7 != Block.pistonBase.blockID && var7 != Block.pistonStickyBase.blockID) { + var1.setBlockToAir(var2, var3, var4); + } else { + Block.blocksList[var7].onNeighborBlockChange(var1, var2 - Facing.offsetsXForSide[var6], var3 - Facing.offsetsYForSide[var6], var4 - Facing.offsetsZForSide[var6], var5); + } + + } + + public static int getDirectionMeta(int var0) { + return var0 & 7; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return 0; + } +} diff --git a/src/net/minecraft/src/BlockPistonMoving.java b/src/net/minecraft/src/BlockPistonMoving.java new file mode 100644 index 0000000..5d48d2f --- /dev/null +++ b/src/net/minecraft/src/BlockPistonMoving.java @@ -0,0 +1,162 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockPistonMoving extends BlockContainer { + public BlockPistonMoving(int var1) { + super(var1, Material.piston); + this.setHardness(-1.0F); + } + + public TileEntity createNewTileEntity(World var1) { + return null; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + TileEntity var7 = var1.getBlockTileEntity(var2, var3, var4); + if(var7 instanceof TileEntityPiston) { + ((TileEntityPiston)var7).clearPistonTileEntity(); + } else { + super.breakBlock(var1, var2, var3, var4, var5, var6); + } + + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return false; + } + + public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) { + return false; + } + + public int getRenderType() { + return -1; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(!var1.isRemote && var1.getBlockTileEntity(var2, var3, var4) == null) { + var1.setBlockToAir(var2, var3, var4); + return true; + } else { + return false; + } + } + + public int idDropped(int var1, Random var2, int var3) { + return 0; + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + if(!var1.isRemote) { + TileEntityPiston var8 = this.getTileEntityAtLocation(var1, var2, var3, var4); + if(var8 != null) { + Block.blocksList[var8.getStoredBlockID()].dropBlockAsItem(var1, var2, var3, var4, var8.getBlockMetadata(), 0); + } + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isRemote && var1.getBlockTileEntity(var2, var3, var4) == null) { + } + + } + + public static TileEntity getTileEntity(int var0, int var1, int var2, boolean var3, boolean var4) { + return new TileEntityPiston(var0, var1, var2, var3, var4); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + TileEntityPiston var5 = this.getTileEntityAtLocation(var1, var2, var3, var4); + if(var5 == null) { + return null; + } else { + float var6 = var5.getProgress(0.0F); + if(var5.isExtending()) { + var6 = 1.0F - var6; + } + + return this.getAxisAlignedBB(var1, var2, var3, var4, var5.getStoredBlockID(), var6, var5.getPistonOrientation()); + } + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + TileEntityPiston var5 = this.getTileEntityAtLocation(var1, var2, var3, var4); + if(var5 != null) { + Block var6 = Block.blocksList[var5.getStoredBlockID()]; + if(var6 == null || var6 == this) { + return; + } + + var6.setBlockBoundsBasedOnState(var1, var2, var3, var4); + float var7 = var5.getProgress(0.0F); + if(var5.isExtending()) { + var7 = 1.0F - var7; + } + + int var8 = var5.getPistonOrientation(); + this.minX = var6.getBlockBoundsMinX() - (double)((float)Facing.offsetsXForSide[var8] * var7); + this.minY = var6.getBlockBoundsMinY() - (double)((float)Facing.offsetsYForSide[var8] * var7); + this.minZ = var6.getBlockBoundsMinZ() - (double)((float)Facing.offsetsZForSide[var8] * var7); + this.maxX = var6.getBlockBoundsMaxX() - (double)((float)Facing.offsetsXForSide[var8] * var7); + this.maxY = var6.getBlockBoundsMaxY() - (double)((float)Facing.offsetsYForSide[var8] * var7); + this.maxZ = var6.getBlockBoundsMaxZ() - (double)((float)Facing.offsetsZForSide[var8] * var7); + } + + } + + public AxisAlignedBB getAxisAlignedBB(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + if(var5 != 0 && var5 != this.blockID) { + AxisAlignedBB var8 = Block.blocksList[var5].getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + if(var8 == null) { + return null; + } else { + if(Facing.offsetsXForSide[var7] < 0) { + var8.minX -= (double)((float)Facing.offsetsXForSide[var7] * var6); + } else { + var8.maxX -= (double)((float)Facing.offsetsXForSide[var7] * var6); + } + + if(Facing.offsetsYForSide[var7] < 0) { + var8.minY -= (double)((float)Facing.offsetsYForSide[var7] * var6); + } else { + var8.maxY -= (double)((float)Facing.offsetsYForSide[var7] * var6); + } + + if(Facing.offsetsZForSide[var7] < 0) { + var8.minZ -= (double)((float)Facing.offsetsZForSide[var7] * var6); + } else { + var8.maxZ -= (double)((float)Facing.offsetsZForSide[var7] * var6); + } + + return var8; + } + } else { + return null; + } + } + + private TileEntityPiston getTileEntityAtLocation(IBlockAccess var1, int var2, int var3, int var4) { + TileEntity var5 = var1.getBlockTileEntity(var2, var3, var4); + return var5 instanceof TileEntityPiston ? (TileEntityPiston)var5 : null; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return 0; + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("piston_top"); + } +} diff --git a/src/net/minecraft/src/BlockPortal.java b/src/net/minecraft/src/BlockPortal.java new file mode 100644 index 0000000..1d3a4e8 --- /dev/null +++ b/src/net/minecraft/src/BlockPortal.java @@ -0,0 +1,199 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockPortal extends BlockBreakable { + public BlockPortal(int var1) { + super(var1, "portal", Material.portal, false); + this.setTickRandomly(true); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + super.updateTick(var1, var2, var3, var4, var5); + if(var1.provider.isSurfaceWorld() && var5.nextInt(2000) < var1.difficultySetting) { + int var6; + for(var6 = var3; !var1.doesBlockHaveSolidTopSurface(var2, var6, var4) && var6 > 0; --var6) { + } + + if(var6 > 0 && !var1.isBlockNormalCube(var2, var6 + 1, var4)) { + Entity var7 = ItemMonsterPlacer.spawnCreature(var1, 57, (double)var2 + 0.5D, (double)var6 + 1.1D, (double)var4 + 0.5D); + if(var7 != null) { + var7.timeUntilPortal = var7.getPortalCooldown(); + } + } + } + + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + float var5; + float var6; + if(var1.getBlockId(var2 - 1, var3, var4) != this.blockID && var1.getBlockId(var2 + 1, var3, var4) != this.blockID) { + var5 = 2.0F / 16.0F; + var6 = 0.5F; + this.setBlockBounds(0.5F - var5, 0.0F, 0.5F - var6, 0.5F + var5, 1.0F, 0.5F + var6); + } else { + var5 = 0.5F; + var6 = 2.0F / 16.0F; + this.setBlockBounds(0.5F - var5, 0.0F, 0.5F - var6, 0.5F + var5, 1.0F, 0.5F + var6); + } + + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean tryToCreatePortal(World var1, int var2, int var3, int var4) { + byte var5 = 0; + byte var6 = 0; + if(var1.getBlockId(var2 - 1, var3, var4) == Block.obsidian.blockID || var1.getBlockId(var2 + 1, var3, var4) == Block.obsidian.blockID) { + var5 = 1; + } + + if(var1.getBlockId(var2, var3, var4 - 1) == Block.obsidian.blockID || var1.getBlockId(var2, var3, var4 + 1) == Block.obsidian.blockID) { + var6 = 1; + } + + if(var5 == var6) { + return false; + } else { + if(var1.getBlockId(var2 - var5, var3, var4 - var6) == 0) { + var2 -= var5; + var4 -= var6; + } + + int var7; + int var8; + for(var7 = -1; var7 <= 2; ++var7) { + for(var8 = -1; var8 <= 3; ++var8) { + boolean var9 = var7 == -1 || var7 == 2 || var8 == -1 || var8 == 3; + if(var7 != -1 && var7 != 2 || var8 != -1 && var8 != 3) { + int var10 = var1.getBlockId(var2 + var5 * var7, var3 + var8, var4 + var6 * var7); + if(var9) { + if(var10 != Block.obsidian.blockID) { + return false; + } + } else if(var10 != 0 && var10 != Block.fire.blockID) { + return false; + } + } + } + } + + for(var7 = 0; var7 < 2; ++var7) { + for(var8 = 0; var8 < 3; ++var8) { + var1.setBlock(var2 + var5 * var7, var3 + var8, var4 + var6 * var7, Block.portal.blockID, 0, 2); + } + } + + return true; + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + byte var6 = 0; + byte var7 = 1; + if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID || var1.getBlockId(var2 + 1, var3, var4) == this.blockID) { + var6 = 1; + var7 = 0; + } + + int var8; + for(var8 = var3; var1.getBlockId(var2, var8 - 1, var4) == this.blockID; --var8) { + } + + if(var1.getBlockId(var2, var8 - 1, var4) != Block.obsidian.blockID) { + var1.setBlockToAir(var2, var3, var4); + } else { + int var9; + for(var9 = 1; var9 < 4 && var1.getBlockId(var2, var8 + var9, var4) == this.blockID; ++var9) { + } + + if(var9 == 3 && var1.getBlockId(var2, var8 + var9, var4) == Block.obsidian.blockID) { + boolean var10 = var1.getBlockId(var2 - 1, var3, var4) == this.blockID || var1.getBlockId(var2 + 1, var3, var4) == this.blockID; + boolean var11 = var1.getBlockId(var2, var3, var4 - 1) == this.blockID || var1.getBlockId(var2, var3, var4 + 1) == this.blockID; + if(var10 && var11) { + var1.setBlockToAir(var2, var3, var4); + } else { + if((var1.getBlockId(var2 + var6, var3, var4 + var7) != Block.obsidian.blockID || var1.getBlockId(var2 - var6, var3, var4 - var7) != this.blockID) && (var1.getBlockId(var2 - var6, var3, var4 - var7) != Block.obsidian.blockID || var1.getBlockId(var2 + var6, var3, var4 + var7) != this.blockID)) { + var1.setBlockToAir(var2, var3, var4); + } + + } + } else { + var1.setBlockToAir(var2, var3, var4); + } + } + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(var1.getBlockId(var2, var3, var4) == this.blockID) { + return false; + } else { + boolean var6 = var1.getBlockId(var2 - 1, var3, var4) == this.blockID && var1.getBlockId(var2 - 2, var3, var4) != this.blockID; + boolean var7 = var1.getBlockId(var2 + 1, var3, var4) == this.blockID && var1.getBlockId(var2 + 2, var3, var4) != this.blockID; + boolean var8 = var1.getBlockId(var2, var3, var4 - 1) == this.blockID && var1.getBlockId(var2, var3, var4 - 2) != this.blockID; + boolean var9 = var1.getBlockId(var2, var3, var4 + 1) == this.blockID && var1.getBlockId(var2, var3, var4 + 2) != this.blockID; + boolean var10 = var6 || var7; + boolean var11 = var8 || var9; + return var10 && var5 == 4 ? true : (var10 && var5 == 5 ? true : (var11 && var5 == 2 ? true : var11 && var5 == 3)); + } + } + + public int quantityDropped(Random var1) { + return 0; + } + + public int getRenderBlockPass() { + return 1; + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + if(var5.ridingEntity == null && var5.riddenByEntity == null) { + var5.setInPortal(); + } + + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + if(var5.nextInt(100) == 0) { + var1.playSound((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "portal.portal", 0.5F, var5.nextFloat() * 0.4F + 0.8F, false); + } + + for(int var6 = 0; var6 < 4; ++var6) { + double var7 = (double)((float)var2 + var5.nextFloat()); + double var9 = (double)((float)var3 + var5.nextFloat()); + double var11 = (double)((float)var4 + var5.nextFloat()); + double var13 = 0.0D; + double var15 = 0.0D; + double var17 = 0.0D; + int var19 = var5.nextInt(2) * 2 - 1; + var13 = ((double)var5.nextFloat() - 0.5D) * 0.5D; + var15 = ((double)var5.nextFloat() - 0.5D) * 0.5D; + var17 = ((double)var5.nextFloat() - 0.5D) * 0.5D; + if(var1.getBlockId(var2 - 1, var3, var4) != this.blockID && var1.getBlockId(var2 + 1, var3, var4) != this.blockID) { + var7 = (double)var2 + 0.5D + 0.25D * (double)var19; + var13 = (double)(var5.nextFloat() * 2.0F * (float)var19); + } else { + var11 = (double)var4 + 0.5D + 0.25D * (double)var19; + var17 = (double)(var5.nextFloat() * 2.0F * (float)var19); + } + + var1.spawnParticle("portal", var7, var9, var11, var13, var15, var17); + } + + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return 0; + } +} diff --git a/src/net/minecraft/src/BlockPotato.java b/src/net/minecraft/src/BlockPotato.java new file mode 100644 index 0000000..43590c3 --- /dev/null +++ b/src/net/minecraft/src/BlockPotato.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +public class BlockPotato extends BlockCrops { + private Icon[] iconArray; + + public BlockPotato(int var1) { + super(var1); + } + + public Icon getIcon(int var1, int var2) { + if(var2 < 7) { + if(var2 == 6) { + var2 = 5; + } + + return this.iconArray[var2 >> 1]; + } else { + return this.iconArray[3]; + } + } + + protected int getSeedItem() { + return Item.potato.itemID; + } + + protected int getCropItem() { + return Item.potato.itemID; + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6, var7); + if(!var1.isRemote) { + if(var5 >= 7 && var1.rand.nextInt(50) == 0) { + this.dropBlockAsItem_do(var1, var2, var3, var4, new ItemStack(Item.poisonousPotato)); + } + + } + } + + public void registerIcons(IconRegister var1) { + this.iconArray = new Icon[4]; + + for(int var2 = 0; var2 < this.iconArray.length; ++var2) { + this.iconArray[var2] = var1.registerIcon("potatoes_" + var2); + } + + } +} diff --git a/src/net/minecraft/src/BlockPoweredOre.java b/src/net/minecraft/src/BlockPoweredOre.java new file mode 100644 index 0000000..bceb79f --- /dev/null +++ b/src/net/minecraft/src/BlockPoweredOre.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +public class BlockPoweredOre extends BlockOreStorage { + public BlockPoweredOre(int var1) { + super(var1); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + + public boolean canProvidePower() { + return true; + } + + public int isProvidingWeakPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return 15; + } +} diff --git a/src/net/minecraft/src/BlockPressurePlate.java b/src/net/minecraft/src/BlockPressurePlate.java new file mode 100644 index 0000000..c473e88 --- /dev/null +++ b/src/net/minecraft/src/BlockPressurePlate.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class BlockPressurePlate extends BlockBasePressurePlate { + private EnumMobType triggerMobType; + + protected BlockPressurePlate(int var1, String var2, Material var3, EnumMobType var4) { + super(var1, var2, var3); + this.triggerMobType = var4; + } + + protected int getMetaFromWeight(int var1) { + return var1 > 0 ? 1 : 0; + } + + protected int getPowerSupply(int var1) { + return var1 == 1 ? 15 : 0; + } + + protected int getPlateState(World var1, int var2, int var3, int var4) { + List var5 = null; + if(this.triggerMobType == EnumMobType.everything) { + var5 = var1.getEntitiesWithinAABBExcludingEntity((Entity)null, this.getSensitiveAABB(var2, var3, var4)); + } + + if(this.triggerMobType == EnumMobType.mobs) { + var5 = var1.getEntitiesWithinAABB(EntityLiving.class, this.getSensitiveAABB(var2, var3, var4)); + } + + if(this.triggerMobType == EnumMobType.players) { + var5 = var1.getEntitiesWithinAABB(EntityPlayer.class, this.getSensitiveAABB(var2, var3, var4)); + } + + if(!var5.isEmpty()) { + Iterator var6 = var5.iterator(); + + while(var6.hasNext()) { + Entity var7 = (Entity)var6.next(); + if(!var7.doesEntityNotTriggerPressurePlate()) { + return 15; + } + } + } + + return 0; + } +} diff --git a/src/net/minecraft/src/BlockPressurePlateWeighted.java b/src/net/minecraft/src/BlockPressurePlateWeighted.java new file mode 100644 index 0000000..4bf5f43 --- /dev/null +++ b/src/net/minecraft/src/BlockPressurePlateWeighted.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import java.util.Iterator; + +public class BlockPressurePlateWeighted extends BlockBasePressurePlate { + private final int maxItemsWeighted; + + protected BlockPressurePlateWeighted(int var1, String var2, Material var3, int var4) { + super(var1, var2, var3); + this.maxItemsWeighted = var4; + } + + protected int getPlateState(World var1, int var2, int var3, int var4) { + int var5 = 0; + Iterator var6 = var1.getEntitiesWithinAABB(EntityItem.class, this.getSensitiveAABB(var2, var3, var4)).iterator(); + + while(var6.hasNext()) { + EntityItem var7 = (EntityItem)var6.next(); + var5 += var7.getEntityItem().stackSize; + if(var5 >= this.maxItemsWeighted) { + break; + } + } + + if(var5 <= 0) { + return 0; + } else { + float var8 = (float)Math.min(this.maxItemsWeighted, var5) / (float)this.maxItemsWeighted; + return MathHelper.ceiling_float_int(var8 * 15.0F); + } + } + + protected int getPowerSupply(int var1) { + return var1; + } + + protected int getMetaFromWeight(int var1) { + return var1; + } + + public int tickRate(World var1) { + return 10; + } +} diff --git a/src/net/minecraft/src/BlockPumpkin.java b/src/net/minecraft/src/BlockPumpkin.java new file mode 100644 index 0000000..26576d1 --- /dev/null +++ b/src/net/minecraft/src/BlockPumpkin.java @@ -0,0 +1,91 @@ +package net.minecraft.src; + +public class BlockPumpkin extends BlockDirectional { + private boolean blockType; + private Icon field_94474_b; + private Icon field_94475_c; + + protected BlockPumpkin(int var1, boolean var2) { + super(var1, Material.pumpkin); + this.setTickRandomly(true); + this.blockType = var2; + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public Icon getIcon(int var1, int var2) { + return var1 == 1 ? this.field_94474_b : (var1 == 0 ? this.field_94474_b : (var2 == 2 && var1 == 2 ? this.field_94475_c : (var2 == 3 && var1 == 5 ? this.field_94475_c : (var2 == 0 && var1 == 3 ? this.field_94475_c : (var2 == 1 && var1 == 4 ? this.field_94475_c : this.blockIcon))))); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + if(var1.getBlockId(var2, var3 - 1, var4) == Block.blockSnow.blockID && var1.getBlockId(var2, var3 - 2, var4) == Block.blockSnow.blockID) { + if(!var1.isRemote) { + var1.setBlock(var2, var3, var4, 0, 0, 2); + var1.setBlock(var2, var3 - 1, var4, 0, 0, 2); + var1.setBlock(var2, var3 - 2, var4, 0, 0, 2); + EntitySnowman var9 = new EntitySnowman(var1); + var9.setLocationAndAngles((double)var2 + 0.5D, (double)var3 - 1.95D, (double)var4 + 0.5D, 0.0F, 0.0F); + var1.spawnEntityInWorld(var9); + var1.notifyBlockChange(var2, var3, var4, 0); + var1.notifyBlockChange(var2, var3 - 1, var4, 0); + var1.notifyBlockChange(var2, var3 - 2, var4, 0); + } + + for(int var10 = 0; var10 < 120; ++var10) { + var1.spawnParticle("snowshovel", (double)var2 + var1.rand.nextDouble(), (double)(var3 - 2) + var1.rand.nextDouble() * 2.5D, (double)var4 + var1.rand.nextDouble(), 0.0D, 0.0D, 0.0D); + } + } else if(var1.getBlockId(var2, var3 - 1, var4) == Block.blockIron.blockID && var1.getBlockId(var2, var3 - 2, var4) == Block.blockIron.blockID) { + boolean var5 = var1.getBlockId(var2 - 1, var3 - 1, var4) == Block.blockIron.blockID && var1.getBlockId(var2 + 1, var3 - 1, var4) == Block.blockIron.blockID; + boolean var6 = var1.getBlockId(var2, var3 - 1, var4 - 1) == Block.blockIron.blockID && var1.getBlockId(var2, var3 - 1, var4 + 1) == Block.blockIron.blockID; + if(var5 || var6) { + var1.setBlock(var2, var3, var4, 0, 0, 2); + var1.setBlock(var2, var3 - 1, var4, 0, 0, 2); + var1.setBlock(var2, var3 - 2, var4, 0, 0, 2); + if(var5) { + var1.setBlock(var2 - 1, var3 - 1, var4, 0, 0, 2); + var1.setBlock(var2 + 1, var3 - 1, var4, 0, 0, 2); + } else { + var1.setBlock(var2, var3 - 1, var4 - 1, 0, 0, 2); + var1.setBlock(var2, var3 - 1, var4 + 1, 0, 0, 2); + } + + EntityIronGolem var7 = new EntityIronGolem(var1); + var7.setPlayerCreated(true); + var7.setLocationAndAngles((double)var2 + 0.5D, (double)var3 - 1.95D, (double)var4 + 0.5D, 0.0F, 0.0F); + var1.spawnEntityInWorld(var7); + + for(int var8 = 0; var8 < 120; ++var8) { + var1.spawnParticle("snowballpoof", (double)var2 + var1.rand.nextDouble(), (double)(var3 - 2) + var1.rand.nextDouble() * 3.9D, (double)var4 + var1.rand.nextDouble(), 0.0D, 0.0D, 0.0D); + } + + var1.notifyBlockChange(var2, var3, var4, 0); + var1.notifyBlockChange(var2, var3 - 1, var4, 0); + var1.notifyBlockChange(var2, var3 - 2, var4, 0); + if(var5) { + var1.notifyBlockChange(var2 - 1, var3 - 1, var4, 0); + var1.notifyBlockChange(var2 + 1, var3 - 1, var4, 0); + } else { + var1.notifyBlockChange(var2, var3 - 1, var4 - 1, 0); + var1.notifyBlockChange(var2, var3 - 1, var4 + 1, 0); + } + } + } + + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3, var4); + return (var5 == 0 || Block.blocksList[var5].blockMaterial.isReplaceable()) && var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4); + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + int var7 = MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3; + var1.setBlockMetadataWithNotify(var2, var3, var4, var7, 2); + } + + public void registerIcons(IconRegister var1) { + this.field_94475_c = var1.registerIcon(this.blockType ? "pumpkin_jack" : "pumpkin_face"); + this.field_94474_b = var1.registerIcon("pumpkin_top"); + this.blockIcon = var1.registerIcon("pumpkin_side"); + } +} diff --git a/src/net/minecraft/src/BlockQuartz.java b/src/net/minecraft/src/BlockQuartz.java new file mode 100644 index 0000000..41b836b --- /dev/null +++ b/src/net/minecraft/src/BlockQuartz.java @@ -0,0 +1,93 @@ +package net.minecraft.src; + +import java.util.List; + +public class BlockQuartz extends Block { + public static final String[] quartzBlockTypes = new String[]{"default", "chiseled", "lines"}; + private static final String[] quartzBlockTextureTypes = new String[]{"quartzblock_side", "quartzblock_chiseled", "quartzblock_lines", null, null}; + private Icon[] quartzblockIcons; + private Icon quartzblock_chiseled_top; + private Icon quartzblock_lines_top; + private Icon quartzblock_top; + private Icon quartzblock_bottom; + + public BlockQuartz(int var1) { + super(var1, Material.rock); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public Icon getIcon(int var1, int var2) { + if(var2 != 2 && var2 != 3 && var2 != 4) { + if(var1 != 1 && (var1 != 0 || var2 != 1)) { + if(var1 == 0) { + return this.quartzblock_bottom; + } else { + if(var2 < 0 || var2 >= this.quartzblockIcons.length) { + var2 = 0; + } + + return this.quartzblockIcons[var2]; + } + } else { + return var2 == 1 ? this.quartzblock_chiseled_top : this.quartzblock_top; + } + } else { + return var2 != 2 || var1 != 1 && var1 != 0 ? (var2 != 3 || var1 != 5 && var1 != 4 ? (var2 != 4 || var1 != 2 && var1 != 3 ? this.quartzblockIcons[var2] : this.quartzblock_lines_top) : this.quartzblock_lines_top) : this.quartzblock_lines_top; + } + } + + public int onBlockPlaced(World var1, int var2, int var3, int var4, int var5, float var6, float var7, float var8, int var9) { + if(var9 == 2) { + switch(var5) { + case 0: + case 1: + var9 = 2; + break; + case 2: + case 3: + var9 = 4; + break; + case 4: + case 5: + var9 = 3; + } + } + + return var9; + } + + public int damageDropped(int var1) { + return var1 != 3 && var1 != 4 ? var1 : 2; + } + + protected ItemStack createStackedBlock(int var1) { + return var1 != 3 && var1 != 4 ? super.createStackedBlock(var1) : new ItemStack(this.blockID, 1, 2); + } + + public int getRenderType() { + return 39; + } + + public void getSubBlocks(int var1, CreativeTabs var2, List var3) { + var3.add(new ItemStack(var1, 1, 0)); + var3.add(new ItemStack(var1, 1, 1)); + var3.add(new ItemStack(var1, 1, 2)); + } + + public void registerIcons(IconRegister var1) { + this.quartzblockIcons = new Icon[quartzBlockTextureTypes.length]; + + for(int var2 = 0; var2 < this.quartzblockIcons.length; ++var2) { + if(quartzBlockTextureTypes[var2] == null) { + this.quartzblockIcons[var2] = this.quartzblockIcons[var2 - 1]; + } else { + this.quartzblockIcons[var2] = var1.registerIcon(quartzBlockTextureTypes[var2]); + } + } + + this.quartzblock_top = var1.registerIcon("quartzblock_top"); + this.quartzblock_chiseled_top = var1.registerIcon("quartzblock_chiseled_top"); + this.quartzblock_lines_top = var1.registerIcon("quartzblock_lines_top"); + this.quartzblock_bottom = var1.registerIcon("quartzblock_bottom"); + } +} diff --git a/src/net/minecraft/src/BlockRail.java b/src/net/minecraft/src/BlockRail.java new file mode 100644 index 0000000..f93a212 --- /dev/null +++ b/src/net/minecraft/src/BlockRail.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class BlockRail extends BlockRailBase { + private Icon theIcon; + + protected BlockRail(int var1) { + super(var1, false); + } + + public Icon getIcon(int var1, int var2) { + return var2 >= 6 ? this.theIcon : this.blockIcon; + } + + public void registerIcons(IconRegister var1) { + super.registerIcons(var1); + this.theIcon = var1.registerIcon("rail_turn"); + } + + protected void func_94358_a(World var1, int var2, int var3, int var4, int var5, int var6, int var7) { + if(var7 > 0 && Block.blocksList[var7].canProvidePower() && (new BlockBaseRailLogic(this, var1, var2, var3, var4)).getNumberOfAdjacentTracks() == 3) { + this.refreshTrackShape(var1, var2, var3, var4, false); + } + + } +} diff --git a/src/net/minecraft/src/BlockRailBase.java b/src/net/minecraft/src/BlockRailBase.java new file mode 100644 index 0000000..6f89dd3 --- /dev/null +++ b/src/net/minecraft/src/BlockRailBase.java @@ -0,0 +1,145 @@ +package net.minecraft.src; + +import java.util.Random; + +public abstract class BlockRailBase extends Block { + protected final boolean isPowered; + + public static final boolean isRailBlockAt(World var0, int var1, int var2, int var3) { + return isRailBlock(var0.getBlockId(var1, var2, var3)); + } + + public static final boolean isRailBlock(int var0) { + return var0 == Block.rail.blockID || var0 == Block.railPowered.blockID || var0 == Block.railDetector.blockID || var0 == Block.railActivator.blockID; + } + + protected BlockRailBase(int var1, boolean var2) { + super(var1, Material.circuits); + this.isPowered = var2; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F); + this.setCreativeTab(CreativeTabs.tabTransport); + } + + public boolean isPowered() { + return this.isPowered; + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isOpaqueCube() { + return false; + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3 var5, Vec3 var6) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.collisionRayTrace(var1, var2, var3, var4, var5, var6); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + if(var5 >= 2 && var5 <= 5) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 10.0F / 16.0F, 1.0F); + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F); + } + + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 9; + } + + public int quantityDropped(Random var1) { + return 1; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(!var1.isRemote) { + this.refreshTrackShape(var1, var2, var3, var4, true); + if(this.isPowered) { + this.onNeighborBlockChange(var1, var2, var3, var4, this.blockID); + } + } + + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isRemote) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = var6; + if(this.isPowered) { + var7 = var6 & 7; + } + + boolean var8 = false; + if(!var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4)) { + var8 = true; + } + + if(var7 == 2 && !var1.doesBlockHaveSolidTopSurface(var2 + 1, var3, var4)) { + var8 = true; + } + + if(var7 == 3 && !var1.doesBlockHaveSolidTopSurface(var2 - 1, var3, var4)) { + var8 = true; + } + + if(var7 == 4 && !var1.doesBlockHaveSolidTopSurface(var2, var3, var4 - 1)) { + var8 = true; + } + + if(var7 == 5 && !var1.doesBlockHaveSolidTopSurface(var2, var3, var4 + 1)) { + var8 = true; + } + + if(var8) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + } else { + this.func_94358_a(var1, var2, var3, var4, var6, var7, var5); + } + + } + } + + protected void func_94358_a(World var1, int var2, int var3, int var4, int var5, int var6, int var7) { + } + + protected void refreshTrackShape(World var1, int var2, int var3, int var4, boolean var5) { + if(!var1.isRemote) { + (new BlockBaseRailLogic(this, var1, var2, var3, var4)).func_94511_a(var1.isBlockIndirectlyGettingPowered(var2, var3, var4), var5); + } + } + + public int getMobilityFlag() { + return 0; + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + int var7 = var6; + if(this.isPowered) { + var7 = var6 & 7; + } + + super.breakBlock(var1, var2, var3, var4, var5, var6); + if(var7 == 2 || var7 == 3 || var7 == 4 || var7 == 5) { + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, var5); + } + + if(this.isPowered) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4, var5); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, var5); + } + + } +} diff --git a/src/net/minecraft/src/BlockRailPowered.java b/src/net/minecraft/src/BlockRailPowered.java new file mode 100644 index 0000000..3589c62 --- /dev/null +++ b/src/net/minecraft/src/BlockRailPowered.java @@ -0,0 +1,134 @@ +package net.minecraft.src; + +public class BlockRailPowered extends BlockRailBase { + protected Icon theIcon; + + protected BlockRailPowered(int var1) { + super(var1, true); + } + + public Icon getIcon(int var1, int var2) { + return (var2 & 8) == 0 ? this.blockIcon : this.theIcon; + } + + public void registerIcons(IconRegister var1) { + super.registerIcons(var1); + this.theIcon = var1.registerIcon(this.getUnlocalizedName2() + "_powered"); + } + + protected boolean func_94360_a(World var1, int var2, int var3, int var4, int var5, boolean var6, int var7) { + if(var7 >= 8) { + return false; + } else { + int var8 = var5 & 7; + boolean var9 = true; + switch(var8) { + case 0: + if(var6) { + ++var4; + } else { + --var4; + } + break; + case 1: + if(var6) { + --var2; + } else { + ++var2; + } + break; + case 2: + if(var6) { + --var2; + } else { + ++var2; + ++var3; + var9 = false; + } + + var8 = 1; + break; + case 3: + if(var6) { + --var2; + ++var3; + var9 = false; + } else { + ++var2; + } + + var8 = 1; + break; + case 4: + if(var6) { + ++var4; + } else { + --var4; + ++var3; + var9 = false; + } + + var8 = 0; + break; + case 5: + if(var6) { + ++var4; + ++var3; + var9 = false; + } else { + --var4; + } + + var8 = 0; + } + + return this.func_94361_a(var1, var2, var3, var4, var6, var7, var8) ? true : var9 && this.func_94361_a(var1, var2, var3 - 1, var4, var6, var7, var8); + } + } + + protected boolean func_94361_a(World var1, int var2, int var3, int var4, boolean var5, int var6, int var7) { + int var8 = var1.getBlockId(var2, var3, var4); + if(var8 == this.blockID) { + int var9 = var1.getBlockMetadata(var2, var3, var4); + int var10 = var9 & 7; + if(var7 == 1 && (var10 == 0 || var10 == 4 || var10 == 5)) { + return false; + } + + if(var7 == 0 && (var10 == 1 || var10 == 2 || var10 == 3)) { + return false; + } + + if((var9 & 8) != 0) { + if(var1.isBlockIndirectlyGettingPowered(var2, var3, var4)) { + return true; + } + + return this.func_94360_a(var1, var2, var3, var4, var9, var5, var6 + 1); + } + } + + return false; + } + + protected void func_94358_a(World var1, int var2, int var3, int var4, int var5, int var6, int var7) { + boolean var8 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4); + var8 = var8 || this.func_94360_a(var1, var2, var3, var4, var5, true, 0) || this.func_94360_a(var1, var2, var3, var4, var5, false, 0); + boolean var9 = false; + if(var8 && (var5 & 8) == 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 | 8, 3); + var9 = true; + } else if(!var8 && (var5 & 8) != 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6, 3); + var9 = true; + } + + if(var9) { + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + if(var6 == 2 || var6 == 3 || var6 == 4 || var6 == 5) { + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + } + } + + } +} diff --git a/src/net/minecraft/src/BlockRedstoneLight.java b/src/net/minecraft/src/BlockRedstoneLight.java new file mode 100644 index 0000000..c1f973b --- /dev/null +++ b/src/net/minecraft/src/BlockRedstoneLight.java @@ -0,0 +1,62 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockRedstoneLight extends Block { + private final boolean powered; + + public BlockRedstoneLight(int var1, boolean var2) { + super(var1, Material.redstoneLight); + this.powered = var2; + if(var2) { + this.setLightValue(1.0F); + } + + } + + public void registerIcons(IconRegister var1) { + if(this.powered) { + this.blockIcon = var1.registerIcon("redstoneLight_lit"); + } else { + this.blockIcon = var1.registerIcon("redstoneLight"); + } + + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(!var1.isRemote) { + if(this.powered && !var1.isBlockIndirectlyGettingPowered(var2, var3, var4)) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, 4); + } else if(!this.powered && var1.isBlockIndirectlyGettingPowered(var2, var3, var4)) { + var1.setBlock(var2, var3, var4, Block.redstoneLampActive.blockID, 0, 2); + } + } + + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isRemote) { + if(this.powered && !var1.isBlockIndirectlyGettingPowered(var2, var3, var4)) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, 4); + } else if(!this.powered && var1.isBlockIndirectlyGettingPowered(var2, var3, var4)) { + var1.setBlock(var2, var3, var4, Block.redstoneLampActive.blockID, 0, 2); + } + } + + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.isRemote && this.powered && !var1.isBlockIndirectlyGettingPowered(var2, var3, var4)) { + var1.setBlock(var2, var3, var4, Block.redstoneLampIdle.blockID, 0, 2); + } + + } + + public int idDropped(int var1, Random var2, int var3) { + return Block.redstoneLampIdle.blockID; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Block.redstoneLampIdle.blockID; + } +} diff --git a/src/net/minecraft/src/BlockRedstoneLogic.java b/src/net/minecraft/src/BlockRedstoneLogic.java new file mode 100644 index 0000000..dfa8e65 --- /dev/null +++ b/src/net/minecraft/src/BlockRedstoneLogic.java @@ -0,0 +1,244 @@ +package net.minecraft.src; + +import java.util.Random; + +public abstract class BlockRedstoneLogic extends BlockDirectional { + protected final boolean isRepeaterPowered; + + protected BlockRedstoneLogic(int var1, boolean var2) { + super(var1, Material.circuits); + this.isRepeaterPowered = var2; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F); + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return !var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) ? false : super.canPlaceBlockAt(var1, var2, var3, var4); + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + return !var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) ? false : super.canBlockStay(var1, var2, var3, var4); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(!this.func_94476_e(var1, var2, var3, var4, var6)) { + boolean var7 = this.func_94478_d(var1, var2, var3, var4, var6); + if(this.isRepeaterPowered && !var7) { + var1.setBlock(var2, var3, var4, this.func_94484_i().blockID, var6, 2); + } else if(!this.isRepeaterPowered) { + var1.setBlock(var2, var3, var4, this.func_94485_e().blockID, var6, 2); + if(!var7) { + var1.func_82740_a(var2, var3, var4, this.func_94485_e().blockID, this.func_94486_g(var6), -1); + } + } + } + + } + + public Icon getIcon(int var1, int var2) { + return var1 == 0 ? (this.isRepeaterPowered ? Block.torchRedstoneActive.getBlockTextureFromSide(var1) : Block.torchRedstoneIdle.getBlockTextureFromSide(var1)) : (var1 == 1 ? this.blockIcon : Block.stoneDoubleSlab.getBlockTextureFromSide(1)); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon(this.isRepeaterPowered ? "repeater_lit" : "repeater"); + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return var5 != 0 && var5 != 1; + } + + public int getRenderType() { + return 36; + } + + protected boolean func_96470_c(int var1) { + return this.isRepeaterPowered; + } + + public int isProvidingStrongPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return this.isProvidingWeakPower(var1, var2, var3, var4, var5); + } + + public int isProvidingWeakPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(!this.func_96470_c(var6)) { + return 0; + } else { + int var7 = getDirection(var6); + return var7 == 0 && var5 == 3 ? this.func_94480_d(var1, var2, var3, var4, var6) : (var7 == 1 && var5 == 4 ? this.func_94480_d(var1, var2, var3, var4, var6) : (var7 == 2 && var5 == 2 ? this.func_94480_d(var1, var2, var3, var4, var6) : (var7 == 3 && var5 == 5 ? this.func_94480_d(var1, var2, var3, var4, var6) : 0))); + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!this.canBlockStay(var1, var2, var3, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + } else { + this.func_94479_f(var1, var2, var3, var4, var5); + } + } + + protected void func_94479_f(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(!this.func_94476_e(var1, var2, var3, var4, var6)) { + boolean var7 = this.func_94478_d(var1, var2, var3, var4, var6); + if((this.isRepeaterPowered && !var7 || !this.isRepeaterPowered && var7) && !var1.isBlockTickScheduled(var2, var3, var4, this.blockID)) { + byte var8 = -1; + if(this.func_83011_d(var1, var2, var3, var4, var6)) { + var8 = -3; + } else if(this.isRepeaterPowered) { + var8 = -2; + } + + var1.func_82740_a(var2, var3, var4, this.blockID, this.func_94481_j_(var6), var8); + } + } + + } + + public boolean func_94476_e(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return false; + } + + protected boolean func_94478_d(World var1, int var2, int var3, int var4, int var5) { + return this.getInputStrength(var1, var2, var3, var4, var5) > 0; + } + + protected int getInputStrength(World var1, int var2, int var3, int var4, int var5) { + int var6 = getDirection(var5); + int var7 = var2 + Direction.offsetX[var6]; + int var8 = var4 + Direction.offsetZ[var6]; + int var9 = var1.getIndirectPowerLevelTo(var7, var3, var8, Direction.directionToFacing[var6]); + return var9 >= 15 ? var9 : Math.max(var9, var1.getBlockId(var7, var3, var8) == Block.redstoneWire.blockID ? var1.getBlockMetadata(var7, var3, var8) : 0); + } + + protected int func_94482_f(IBlockAccess var1, int var2, int var3, int var4, int var5) { + int var6 = getDirection(var5); + switch(var6) { + case 0: + case 2: + return Math.max(this.func_94488_g(var1, var2 - 1, var3, var4, 4), this.func_94488_g(var1, var2 + 1, var3, var4, 5)); + case 1: + case 3: + return Math.max(this.func_94488_g(var1, var2, var3, var4 + 1, 3), this.func_94488_g(var1, var2, var3, var4 - 1, 2)); + default: + return 0; + } + } + + protected int func_94488_g(IBlockAccess var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockId(var2, var3, var4); + return this.func_94477_d(var6) ? (var6 == Block.redstoneWire.blockID ? var1.getBlockMetadata(var2, var3, var4) : var1.isBlockProvidingPowerTo(var2, var3, var4, var5)) : 0; + } + + public boolean canProvidePower() { + return true; + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + int var7 = ((MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3) + 2) % 4; + var1.setBlockMetadataWithNotify(var2, var3, var4, var7, 3); + boolean var8 = this.func_94478_d(var1, var2, var3, var4, var7); + if(var8) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, 1); + } + + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + this.func_94483_i_(var1, var2, var3, var4); + } + + protected void func_94483_i_(World var1, int var2, int var3, int var4) { + int var5 = getDirection(var1.getBlockMetadata(var2, var3, var4)); + if(var5 == 1) { + var1.notifyBlockOfNeighborChange(var2 + 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID, 4); + } + + if(var5 == 3) { + var1.notifyBlockOfNeighborChange(var2 - 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID, 5); + } + + if(var5 == 2) { + var1.notifyBlockOfNeighborChange(var2, var3, var4 + 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID, 2); + } + + if(var5 == 0) { + var1.notifyBlockOfNeighborChange(var2, var3, var4 - 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID, 3); + } + + } + + public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) { + if(this.isRepeaterPowered) { + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + } + + super.onBlockDestroyedByPlayer(var1, var2, var3, var4, var5); + } + + public boolean isOpaqueCube() { + return false; + } + + protected boolean func_94477_d(int var1) { + Block var2 = Block.blocksList[var1]; + return var2 != null && var2.canProvidePower(); + } + + protected int func_94480_d(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return 15; + } + + public static boolean isRedstoneRepeaterBlockID(int var0) { + return Block.redstoneRepeaterIdle.func_94487_f(var0) || Block.redstoneComparatorIdle.func_94487_f(var0); + } + + public boolean func_94487_f(int var1) { + return var1 == this.func_94485_e().blockID || var1 == this.func_94484_i().blockID; + } + + public boolean func_83011_d(World var1, int var2, int var3, int var4, int var5) { + int var6 = getDirection(var5); + if(isRedstoneRepeaterBlockID(var1.getBlockId(var2 - Direction.offsetX[var6], var3, var4 - Direction.offsetZ[var6]))) { + int var7 = var1.getBlockMetadata(var2 - Direction.offsetX[var6], var3, var4 - Direction.offsetZ[var6]); + int var8 = getDirection(var7); + return var8 != var6; + } else { + return false; + } + } + + protected int func_94486_g(int var1) { + return this.func_94481_j_(var1); + } + + protected abstract int func_94481_j_(int var1); + + protected abstract BlockRedstoneLogic func_94485_e(); + + protected abstract BlockRedstoneLogic func_94484_i(); + + public boolean isAssociatedBlockID(int var1) { + return this.func_94487_f(var1); + } +} diff --git a/src/net/minecraft/src/BlockRedstoneOre.java b/src/net/minecraft/src/BlockRedstoneOre.java new file mode 100644 index 0000000..598d42d --- /dev/null +++ b/src/net/minecraft/src/BlockRedstoneOre.java @@ -0,0 +1,121 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockRedstoneOre extends Block { + private boolean glowing; + + public BlockRedstoneOre(int var1, boolean var2) { + super(var1, Material.rock); + if(var2) { + this.setTickRandomly(true); + } + + this.glowing = var2; + } + + public int tickRate(World var1) { + return 30; + } + + public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + this.glow(var1, var2, var3, var4); + super.onBlockClicked(var1, var2, var3, var4, var5); + } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + this.glow(var1, var2, var3, var4); + super.onEntityWalking(var1, var2, var3, var4, var5); + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + this.glow(var1, var2, var3, var4); + return super.onBlockActivated(var1, var2, var3, var4, var5, var6, var7, var8, var9); + } + + private void glow(World var1, int var2, int var3, int var4) { + this.sparkle(var1, var2, var3, var4); + if(this.blockID == Block.oreRedstone.blockID) { + var1.setBlock(var2, var3, var4, Block.oreRedstoneGlowing.blockID); + } + + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(this.blockID == Block.oreRedstoneGlowing.blockID) { + var1.setBlock(var2, var3, var4, Block.oreRedstone.blockID); + } + + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.redstone.itemID; + } + + public int quantityDroppedWithBonus(int var1, Random var2) { + return this.quantityDropped(var2) + var2.nextInt(var1 + 1); + } + + public int quantityDropped(Random var1) { + return 4 + var1.nextInt(2); + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6, var7); + if(this.idDropped(var5, var1.rand, var7) != this.blockID) { + int var8 = 1 + var1.rand.nextInt(5); + this.dropXpOnBlockBreak(var1, var2, var3, var4, var8); + } + + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + if(this.glowing) { + this.sparkle(var1, var2, var3, var4); + } + + } + + private void sparkle(World var1, int var2, int var3, int var4) { + Random var5 = var1.rand; + double var6 = 1.0D / 16.0D; + + for(int var8 = 0; var8 < 6; ++var8) { + double var9 = (double)((float)var2 + var5.nextFloat()); + double var11 = (double)((float)var3 + var5.nextFloat()); + double var13 = (double)((float)var4 + var5.nextFloat()); + if(var8 == 0 && !var1.isBlockOpaqueCube(var2, var3 + 1, var4)) { + var11 = (double)(var3 + 1) + var6; + } + + if(var8 == 1 && !var1.isBlockOpaqueCube(var2, var3 - 1, var4)) { + var11 = (double)(var3 + 0) - var6; + } + + if(var8 == 2 && !var1.isBlockOpaqueCube(var2, var3, var4 + 1)) { + var13 = (double)(var4 + 1) + var6; + } + + if(var8 == 3 && !var1.isBlockOpaqueCube(var2, var3, var4 - 1)) { + var13 = (double)(var4 + 0) - var6; + } + + if(var8 == 4 && !var1.isBlockOpaqueCube(var2 + 1, var3, var4)) { + var9 = (double)(var2 + 1) + var6; + } + + if(var8 == 5 && !var1.isBlockOpaqueCube(var2 - 1, var3, var4)) { + var9 = (double)(var2 + 0) - var6; + } + + if(var9 < (double)var2 || var9 > (double)(var2 + 1) || var11 < 0.0D || var11 > (double)(var3 + 1) || var13 < (double)var4 || var13 > (double)(var4 + 1)) { + var1.spawnParticle("reddust", var9, var11, var13, 0.0D, 0.0D, 0.0D); + } + } + + } + + protected ItemStack createStackedBlock(int var1) { + return new ItemStack(Block.oreRedstone); + } +} diff --git a/src/net/minecraft/src/BlockRedstoneRepeater.java b/src/net/minecraft/src/BlockRedstoneRepeater.java new file mode 100644 index 0000000..a322d93 --- /dev/null +++ b/src/net/minecraft/src/BlockRedstoneRepeater.java @@ -0,0 +1,101 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockRedstoneRepeater extends BlockRedstoneLogic { + public static final double[] repeaterTorchOffset = new double[]{-0.0625D, 1.0D / 16.0D, 0.1875D, 0.3125D}; + private static final int[] repeaterState = new int[]{1, 2, 3, 4}; + + protected BlockRedstoneRepeater(int var1, boolean var2) { + super(var1, var2); + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + int var10 = var1.getBlockMetadata(var2, var3, var4); + int var11 = (var10 & 12) >> 2; + var11 = var11 + 1 << 2 & 12; + var1.setBlockMetadataWithNotify(var2, var3, var4, var11 | var10 & 3, 3); + return true; + } + + protected int func_94481_j_(int var1) { + return repeaterState[(var1 & 12) >> 2] * 2; + } + + protected BlockRedstoneLogic func_94485_e() { + return Block.redstoneRepeaterActive; + } + + protected BlockRedstoneLogic func_94484_i() { + return Block.redstoneRepeaterIdle; + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.redstoneRepeater.itemID; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Item.redstoneRepeater.itemID; + } + + public int getRenderType() { + return 15; + } + + public boolean func_94476_e(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return this.func_94482_f(var1, var2, var3, var4, var5) > 0; + } + + protected boolean func_94477_d(int var1) { + return isRedstoneRepeaterBlockID(var1); + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + if(this.isRepeaterPowered) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = getDirection(var6); + double var8 = (double)((float)var2 + 0.5F) + (double)(var5.nextFloat() - 0.5F) * 0.2D; + double var10 = (double)((float)var3 + 0.4F) + (double)(var5.nextFloat() - 0.5F) * 0.2D; + double var12 = (double)((float)var4 + 0.5F) + (double)(var5.nextFloat() - 0.5F) * 0.2D; + double var14 = 0.0D; + double var16 = 0.0D; + if(var5.nextInt(2) == 0) { + switch(var7) { + case 0: + var16 = -0.3125D; + break; + case 1: + var14 = 0.3125D; + break; + case 2: + var16 = 0.3125D; + break; + case 3: + var14 = -0.3125D; + } + } else { + int var18 = (var6 & 12) >> 2; + switch(var7) { + case 0: + var16 = repeaterTorchOffset[var18]; + break; + case 1: + var14 = -repeaterTorchOffset[var18]; + break; + case 2: + var16 = -repeaterTorchOffset[var18]; + break; + case 3: + var14 = repeaterTorchOffset[var18]; + } + } + + var1.spawnParticle("reddust", var8 + var14, var10, var12 + var16, 0.0D, 0.0D, 0.0D); + } + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + super.breakBlock(var1, var2, var3, var4, var5, var6); + this.func_94483_i_(var1, var2, var3, var4); + } +} diff --git a/src/net/minecraft/src/BlockRedstoneTorch.java b/src/net/minecraft/src/BlockRedstoneTorch.java new file mode 100644 index 0000000..bc97718 --- /dev/null +++ b/src/net/minecraft/src/BlockRedstoneTorch.java @@ -0,0 +1,180 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +public class BlockRedstoneTorch extends BlockTorch { + private boolean torchActive = false; + private static Map redstoneUpdateInfoCache = new HashMap(); + + private boolean checkForBurnout(World var1, int var2, int var3, int var4, boolean var5) { + if(!redstoneUpdateInfoCache.containsKey(var1)) { + redstoneUpdateInfoCache.put(var1, new ArrayList()); + } + + List var6 = (List)redstoneUpdateInfoCache.get(var1); + if(var5) { + var6.add(new RedstoneUpdateInfo(var2, var3, var4, var1.getTotalWorldTime())); + } + + int var7 = 0; + + for(int var8 = 0; var8 < var6.size(); ++var8) { + RedstoneUpdateInfo var9 = (RedstoneUpdateInfo)var6.get(var8); + if(var9.x == var2 && var9.y == var3 && var9.z == var4) { + ++var7; + if(var7 >= 8) { + return true; + } + } + } + + return false; + } + + protected BlockRedstoneTorch(int var1, boolean var2) { + super(var1); + this.torchActive = var2; + this.setTickRandomly(true); + this.setCreativeTab((CreativeTabs)null); + } + + public int tickRate(World var1) { + return 2; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(var1.getBlockMetadata(var2, var3, var4) == 0) { + super.onBlockAdded(var1, var2, var3, var4); + } + + if(this.torchActive) { + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + } + + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + if(this.torchActive) { + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + } + + } + + public int isProvidingWeakPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(!this.torchActive) { + return 0; + } else { + int var6 = var1.getBlockMetadata(var2, var3, var4); + return var6 == 5 && var5 == 1 ? 0 : (var6 == 3 && var5 == 3 ? 0 : (var6 == 4 && var5 == 2 ? 0 : (var6 == 1 && var5 == 5 ? 0 : (var6 == 2 && var5 == 4 ? 0 : 15)))); + } + } + + private boolean isIndirectlyPowered(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + return var5 == 5 && var1.getIndirectPowerOutput(var2, var3 - 1, var4, 0) ? true : (var5 == 3 && var1.getIndirectPowerOutput(var2, var3, var4 - 1, 2) ? true : (var5 == 4 && var1.getIndirectPowerOutput(var2, var3, var4 + 1, 3) ? true : (var5 == 1 && var1.getIndirectPowerOutput(var2 - 1, var3, var4, 4) ? true : var5 == 2 && var1.getIndirectPowerOutput(var2 + 1, var3, var4, 5)))); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + boolean var6 = this.isIndirectlyPowered(var1, var2, var3, var4); + List var7 = (List)redstoneUpdateInfoCache.get(var1); + + while(var7 != null && !var7.isEmpty() && var1.getTotalWorldTime() - ((RedstoneUpdateInfo)var7.get(0)).updateTime > 60L) { + var7.remove(0); + } + + if(this.torchActive) { + if(var6) { + var1.setBlock(var2, var3, var4, Block.torchRedstoneIdle.blockID, var1.getBlockMetadata(var2, var3, var4), 3); + if(this.checkForBurnout(var1, var2, var3, var4, true)) { + var1.playSoundEffect((double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), "random.fizz", 0.5F, 2.6F + (var1.rand.nextFloat() - var1.rand.nextFloat()) * 0.8F); + + for(int var8 = 0; var8 < 5; ++var8) { + double var9 = (double)var2 + var5.nextDouble() * 0.6D + 0.2D; + double var11 = (double)var3 + var5.nextDouble() * 0.6D + 0.2D; + double var13 = (double)var4 + var5.nextDouble() * 0.6D + 0.2D; + var1.spawnParticle("smoke", var9, var11, var13, 0.0D, 0.0D, 0.0D); + } + } + } + } else if(!var6 && !this.checkForBurnout(var1, var2, var3, var4, false)) { + var1.setBlock(var2, var3, var4, Block.torchRedstoneActive.blockID, var1.getBlockMetadata(var2, var3, var4), 3); + } + + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!this.func_94397_d(var1, var2, var3, var4, var5)) { + boolean var6 = this.isIndirectlyPowered(var1, var2, var3, var4); + if(this.torchActive && var6 || !this.torchActive && !var6) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1)); + } + + } + } + + public int isProvidingStrongPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return var5 == 0 ? this.isProvidingWeakPower(var1, var2, var3, var4, var5) : 0; + } + + public int idDropped(int var1, Random var2, int var3) { + return Block.torchRedstoneActive.blockID; + } + + public boolean canProvidePower() { + return true; + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + if(this.torchActive) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + double var7 = (double)((float)var2 + 0.5F) + (double)(var5.nextFloat() - 0.5F) * 0.2D; + double var9 = (double)((float)var3 + 0.7F) + (double)(var5.nextFloat() - 0.5F) * 0.2D; + double var11 = (double)((float)var4 + 0.5F) + (double)(var5.nextFloat() - 0.5F) * 0.2D; + double var13 = (double)0.22F; + double var15 = (double)0.27F; + if(var6 == 1) { + var1.spawnParticle("reddust", var7 - var15, var9 + var13, var11, 0.0D, 0.0D, 0.0D); + } else if(var6 == 2) { + var1.spawnParticle("reddust", var7 + var15, var9 + var13, var11, 0.0D, 0.0D, 0.0D); + } else if(var6 == 3) { + var1.spawnParticle("reddust", var7, var9 + var13, var11 - var15, 0.0D, 0.0D, 0.0D); + } else if(var6 == 4) { + var1.spawnParticle("reddust", var7, var9 + var13, var11 + var15, 0.0D, 0.0D, 0.0D); + } else { + var1.spawnParticle("reddust", var7, var9, var11, 0.0D, 0.0D, 0.0D); + } + + } + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Block.torchRedstoneActive.blockID; + } + + public boolean isAssociatedBlockID(int var1) { + return var1 == Block.torchRedstoneIdle.blockID || var1 == Block.torchRedstoneActive.blockID; + } + + public void registerIcons(IconRegister var1) { + if(this.torchActive) { + this.blockIcon = var1.registerIcon("redtorch_lit"); + } else { + this.blockIcon = var1.registerIcon("redtorch"); + } + + } +} diff --git a/src/net/minecraft/src/BlockRedstoneWire.java b/src/net/minecraft/src/BlockRedstoneWire.java new file mode 100644 index 0000000..5515ba1 --- /dev/null +++ b/src/net/minecraft/src/BlockRedstoneWire.java @@ -0,0 +1,359 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Random; +import java.util.Set; + +public class BlockRedstoneWire extends Block { + private boolean wiresProvidePower = true; + private Set blocksNeedingUpdate = new HashSet(); + private Icon field_94413_c; + private Icon field_94410_cO; + private Icon field_94411_cP; + private Icon field_94412_cQ; + + public BlockRedstoneWire(int var1) { + super(var1, Material.circuits); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F / 16.0F, 1.0F); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 5; + } + + public int colorMultiplier(IBlockAccess var1, int var2, int var3, int var4) { + return 8388608; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) || var1.getBlockId(var2, var3 - 1, var4) == Block.glowStone.blockID; + } + + private void updateAndPropagateCurrentStrength(World var1, int var2, int var3, int var4) { + this.calculateCurrentChanges(var1, var2, var3, var4, var2, var3, var4); + ArrayList var5 = new ArrayList(this.blocksNeedingUpdate); + this.blocksNeedingUpdate.clear(); + + for(int var6 = 0; var6 < var5.size(); ++var6) { + ChunkPosition var7 = (ChunkPosition)var5.get(var6); + var1.notifyBlocksOfNeighborChange(var7.x, var7.y, var7.z, this.blockID); + } + + } + + private void calculateCurrentChanges(World var1, int var2, int var3, int var4, int var5, int var6, int var7) { + int var8 = var1.getBlockMetadata(var2, var3, var4); + byte var9 = 0; + int var15 = this.getMaxCurrentStrength(var1, var5, var6, var7, var9); + this.wiresProvidePower = false; + int var10 = var1.getStrongestIndirectPower(var2, var3, var4); + this.wiresProvidePower = true; + if(var10 > 0 && var10 > var15 - 1) { + var15 = var10; + } + + int var11 = 0; + + for(int var12 = 0; var12 < 4; ++var12) { + int var13 = var2; + int var14 = var4; + if(var12 == 0) { + var13 = var2 - 1; + } + + if(var12 == 1) { + ++var13; + } + + if(var12 == 2) { + var14 = var4 - 1; + } + + if(var12 == 3) { + ++var14; + } + + if(var13 != var5 || var14 != var7) { + var11 = this.getMaxCurrentStrength(var1, var13, var3, var14, var11); + } + + if(var1.isBlockNormalCube(var13, var3, var14) && !var1.isBlockNormalCube(var2, var3 + 1, var4)) { + if((var13 != var5 || var14 != var7) && var3 >= var6) { + var11 = this.getMaxCurrentStrength(var1, var13, var3 + 1, var14, var11); + } + } else if(!var1.isBlockNormalCube(var13, var3, var14) && (var13 != var5 || var14 != var7) && var3 <= var6) { + var11 = this.getMaxCurrentStrength(var1, var13, var3 - 1, var14, var11); + } + } + + if(var11 > var15) { + var15 = var11 - 1; + } else if(var15 > 0) { + --var15; + } else { + var15 = 0; + } + + if(var10 > var15 - 1) { + var15 = var10; + } + + if(var8 != var15) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var15, 2); + this.blocksNeedingUpdate.add(new ChunkPosition(var2, var3, var4)); + this.blocksNeedingUpdate.add(new ChunkPosition(var2 - 1, var3, var4)); + this.blocksNeedingUpdate.add(new ChunkPosition(var2 + 1, var3, var4)); + this.blocksNeedingUpdate.add(new ChunkPosition(var2, var3 - 1, var4)); + this.blocksNeedingUpdate.add(new ChunkPosition(var2, var3 + 1, var4)); + this.blocksNeedingUpdate.add(new ChunkPosition(var2, var3, var4 - 1)); + this.blocksNeedingUpdate.add(new ChunkPosition(var2, var3, var4 + 1)); + } + + } + + private void notifyWireNeighborsOfNeighborChange(World var1, int var2, int var3, int var4) { + if(var1.getBlockId(var2, var3, var4) == this.blockID) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + } + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + if(!var1.isRemote) { + this.updateAndPropagateCurrentStrength(var1, var2, var3, var4); + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3, var4); + this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3, var4); + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3, var4 - 1); + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3, var4 + 1); + if(var1.isBlockNormalCube(var2 - 1, var3, var4)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3 + 1, var4); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3 - 1, var4); + } + + if(var1.isBlockNormalCube(var2 + 1, var3, var4)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3 + 1, var4); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3 - 1, var4); + } + + if(var1.isBlockNormalCube(var2, var3, var4 - 1)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 + 1, var4 - 1); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 - 1, var4 - 1); + } + + if(var1.isBlockNormalCube(var2, var3, var4 + 1)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 + 1, var4 + 1); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 - 1, var4 + 1); + } + + } + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + super.breakBlock(var1, var2, var3, var4, var5, var6); + if(!var1.isRemote) { + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + this.updateAndPropagateCurrentStrength(var1, var2, var3, var4); + this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3, var4); + this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3, var4); + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3, var4 - 1); + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3, var4 + 1); + if(var1.isBlockNormalCube(var2 - 1, var3, var4)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3 + 1, var4); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2 - 1, var3 - 1, var4); + } + + if(var1.isBlockNormalCube(var2 + 1, var3, var4)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3 + 1, var4); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2 + 1, var3 - 1, var4); + } + + if(var1.isBlockNormalCube(var2, var3, var4 - 1)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 + 1, var4 - 1); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 - 1, var4 - 1); + } + + if(var1.isBlockNormalCube(var2, var3, var4 + 1)) { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 + 1, var4 + 1); + } else { + this.notifyWireNeighborsOfNeighborChange(var1, var2, var3 - 1, var4 + 1); + } + + } + } + + private int getMaxCurrentStrength(World var1, int var2, int var3, int var4, int var5) { + if(var1.getBlockId(var2, var3, var4) != this.blockID) { + return var5; + } else { + int var6 = var1.getBlockMetadata(var2, var3, var4); + return var6 > var5 ? var6 : var5; + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isRemote) { + boolean var6 = this.canPlaceBlockAt(var1, var2, var3, var4); + if(var6) { + this.updateAndPropagateCurrentStrength(var1, var2, var3, var4); + } else { + this.dropBlockAsItem(var1, var2, var3, var4, 0, 0); + var1.setBlockToAir(var2, var3, var4); + } + + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + } + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.redstone.itemID; + } + + public int isProvidingStrongPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return !this.wiresProvidePower ? 0 : this.isProvidingWeakPower(var1, var2, var3, var4, var5); + } + + public int isProvidingWeakPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(!this.wiresProvidePower) { + return 0; + } else { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 == 0) { + return 0; + } else if(var5 == 1) { + return var6; + } else { + boolean var7 = isPoweredOrRepeater(var1, var2 - 1, var3, var4, 1) || !var1.isBlockNormalCube(var2 - 1, var3, var4) && isPoweredOrRepeater(var1, var2 - 1, var3 - 1, var4, -1); + boolean var8 = isPoweredOrRepeater(var1, var2 + 1, var3, var4, 3) || !var1.isBlockNormalCube(var2 + 1, var3, var4) && isPoweredOrRepeater(var1, var2 + 1, var3 - 1, var4, -1); + boolean var9 = isPoweredOrRepeater(var1, var2, var3, var4 - 1, 2) || !var1.isBlockNormalCube(var2, var3, var4 - 1) && isPoweredOrRepeater(var1, var2, var3 - 1, var4 - 1, -1); + boolean var10 = isPoweredOrRepeater(var1, var2, var3, var4 + 1, 0) || !var1.isBlockNormalCube(var2, var3, var4 + 1) && isPoweredOrRepeater(var1, var2, var3 - 1, var4 + 1, -1); + if(!var1.isBlockNormalCube(var2, var3 + 1, var4)) { + if(var1.isBlockNormalCube(var2 - 1, var3, var4) && isPoweredOrRepeater(var1, var2 - 1, var3 + 1, var4, -1)) { + var7 = true; + } + + if(var1.isBlockNormalCube(var2 + 1, var3, var4) && isPoweredOrRepeater(var1, var2 + 1, var3 + 1, var4, -1)) { + var8 = true; + } + + if(var1.isBlockNormalCube(var2, var3, var4 - 1) && isPoweredOrRepeater(var1, var2, var3 + 1, var4 - 1, -1)) { + var9 = true; + } + + if(var1.isBlockNormalCube(var2, var3, var4 + 1) && isPoweredOrRepeater(var1, var2, var3 + 1, var4 + 1, -1)) { + var10 = true; + } + } + + return !var9 && !var8 && !var7 && !var10 && var5 >= 2 && var5 <= 5 ? var6 : (var5 == 2 && var9 && !var7 && !var8 ? var6 : (var5 == 3 && var10 && !var7 && !var8 ? var6 : (var5 == 4 && var7 && !var9 && !var10 ? var6 : (var5 == 5 && var8 && !var9 && !var10 ? var6 : 0)))); + } + } + } + + public boolean canProvidePower() { + return this.wiresProvidePower; + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 > 0) { + double var7 = (double)var2 + 0.5D + ((double)var5.nextFloat() - 0.5D) * 0.2D; + double var9 = (double)((float)var3 + 1.0F / 16.0F); + double var11 = (double)var4 + 0.5D + ((double)var5.nextFloat() - 0.5D) * 0.2D; + float var13 = (float)var6 / 15.0F; + float var14 = var13 * 0.6F + 0.4F; + if(var6 == 0) { + var14 = 0.0F; + } + + float var15 = var13 * var13 * 0.7F - 0.5F; + float var16 = var13 * var13 * 0.6F - 0.7F; + if(var15 < 0.0F) { + var15 = 0.0F; + } + + if(var16 < 0.0F) { + var16 = 0.0F; + } + + var1.spawnParticle("reddust", var7, var9, var11, (double)var14, (double)var15, (double)var16); + } + + } + + public static boolean isPowerProviderOrWire(IBlockAccess var0, int var1, int var2, int var3, int var4) { + int var5 = var0.getBlockId(var1, var2, var3); + if(var5 == Block.redstoneWire.blockID) { + return true; + } else if(var5 == 0) { + return false; + } else if(!Block.redstoneRepeaterIdle.func_94487_f(var5)) { + return Block.blocksList[var5].canProvidePower() && var4 != -1; + } else { + int var6 = var0.getBlockMetadata(var1, var2, var3); + return var4 == (var6 & 3) || var4 == Direction.rotateOpposite[var6 & 3]; + } + } + + public static boolean isPoweredOrRepeater(IBlockAccess var0, int var1, int var2, int var3, int var4) { + if(isPowerProviderOrWire(var0, var1, var2, var3, var4)) { + return true; + } else { + int var5 = var0.getBlockId(var1, var2, var3); + if(var5 == Block.redstoneRepeaterActive.blockID) { + int var6 = var0.getBlockMetadata(var1, var2, var3); + return var4 == (var6 & 3); + } else { + return false; + } + } + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Item.redstone.itemID; + } + + public void registerIcons(IconRegister var1) { + this.field_94413_c = var1.registerIcon("redstoneDust_cross"); + this.field_94410_cO = var1.registerIcon("redstoneDust_line"); + this.field_94411_cP = var1.registerIcon("redstoneDust_cross_overlay"); + this.field_94412_cQ = var1.registerIcon("redstoneDust_line_overlay"); + this.blockIcon = this.field_94413_c; + } + + public static Icon func_94409_b(String var0) { + return var0 == "redstoneDust_cross" ? Block.redstoneWire.field_94413_c : (var0 == "redstoneDust_line" ? Block.redstoneWire.field_94410_cO : (var0 == "redstoneDust_cross_overlay" ? Block.redstoneWire.field_94411_cP : (var0 == "redstoneDust_line_overlay" ? Block.redstoneWire.field_94412_cQ : null))); + } +} diff --git a/src/net/minecraft/src/BlockReed.java b/src/net/minecraft/src/BlockReed.java new file mode 100644 index 0000000..d2b730c --- /dev/null +++ b/src/net/minecraft/src/BlockReed.java @@ -0,0 +1,76 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockReed extends Block { + protected BlockReed(int var1) { + super(var1, Material.plants); + float var2 = 6.0F / 16.0F; + this.setBlockBounds(0.5F - var2, 0.0F, 0.5F - var2, 0.5F + var2, 1.0F, 0.5F + var2); + this.setTickRandomly(true); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.isAirBlock(var2, var3 + 1, var4)) { + int var6; + for(var6 = 1; var1.getBlockId(var2, var3 - var6, var4) == this.blockID; ++var6) { + } + + if(var6 < 3) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + if(var7 == 15) { + var1.setBlock(var2, var3 + 1, var4, this.blockID); + var1.setBlockMetadataWithNotify(var2, var3, var4, 0, 4); + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, var7 + 1, 4); + } + } + } + + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3 - 1, var4); + return var5 == this.blockID ? true : (var5 != Block.grass.blockID && var5 != Block.dirt.blockID && var5 != Block.sand.blockID ? false : (var1.getBlockMaterial(var2 - 1, var3 - 1, var4) == Material.water ? true : (var1.getBlockMaterial(var2 + 1, var3 - 1, var4) == Material.water ? true : (var1.getBlockMaterial(var2, var3 - 1, var4 - 1) == Material.water ? true : var1.getBlockMaterial(var2, var3 - 1, var4 + 1) == Material.water)))); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + this.checkBlockCoordValid(var1, var2, var3, var4); + } + + protected final void checkBlockCoordValid(World var1, int var2, int var3, int var4) { + if(!this.canBlockStay(var1, var2, var3, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + } + + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + return this.canPlaceBlockAt(var1, var2, var3, var4); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.reed.itemID; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 1; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Item.reed.itemID; + } +} diff --git a/src/net/minecraft/src/BlockSand.java b/src/net/minecraft/src/BlockSand.java new file mode 100644 index 0000000..c7400d4 --- /dev/null +++ b/src/net/minecraft/src/BlockSand.java @@ -0,0 +1,77 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSand extends Block { + public static boolean fallInstantly = false; + + public BlockSand(int var1) { + super(var1, Material.sand); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public BlockSand(int var1, Material var2) { + super(var1, var2); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1)); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1)); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.isRemote) { + this.tryToFall(var1, var2, var3, var4); + } + + } + + private void tryToFall(World var1, int var2, int var3, int var4) { + if(canFallBelow(var1, var2, var3 - 1, var4) && var3 >= 0) { + byte var8 = 32; + if(!fallInstantly && var1.checkChunksExist(var2 - var8, var3 - var8, var4 - var8, var2 + var8, var3 + var8, var4 + var8)) { + if(!var1.isRemote) { + EntityFallingSand var9 = new EntityFallingSand(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), this.blockID, var1.getBlockMetadata(var2, var3, var4)); + this.onStartFalling(var9); + var1.spawnEntityInWorld(var9); + } + } else { + var1.setBlockToAir(var2, var3, var4); + + while(canFallBelow(var1, var2, var3 - 1, var4) && var3 > 0) { + --var3; + } + + if(var3 > 0) { + var1.setBlock(var2, var3, var4, this.blockID); + } + } + } + + } + + protected void onStartFalling(EntityFallingSand var1) { + } + + public int tickRate(World var1) { + return 2; + } + + public static boolean canFallBelow(World var0, int var1, int var2, int var3) { + int var4 = var0.getBlockId(var1, var2, var3); + if(var4 == 0) { + return true; + } else if(var4 == Block.fire.blockID) { + return true; + } else { + Material var5 = Block.blocksList[var4].blockMaterial; + return var5 == Material.water ? true : var5 == Material.lava; + } + } + + public void onFinishFalling(World var1, int var2, int var3, int var4, int var5) { + } +} diff --git a/src/net/minecraft/src/BlockSandStone.java b/src/net/minecraft/src/BlockSandStone.java new file mode 100644 index 0000000..b83ea11 --- /dev/null +++ b/src/net/minecraft/src/BlockSandStone.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.util.List; + +public class BlockSandStone extends Block { + public static final String[] SAND_STONE_TYPES = new String[]{"default", "chiseled", "smooth"}; + private static final String[] field_94405_b = new String[]{"sandstone_side", "sandstone_carved", "sandstone_smooth"}; + private Icon[] field_94406_c; + private Icon field_94403_cO; + private Icon field_94404_cP; + + public BlockSandStone(int var1) { + super(var1, Material.rock); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public Icon getIcon(int var1, int var2) { + if(var1 != 1 && (var1 != 0 || var2 != 1 && var2 != 2)) { + if(var1 == 0) { + return this.field_94404_cP; + } else { + if(var2 < 0 || var2 >= this.field_94406_c.length) { + var2 = 0; + } + + return this.field_94406_c[var2]; + } + } else { + return this.field_94403_cO; + } + } + + public int damageDropped(int var1) { + return var1; + } + + public void getSubBlocks(int var1, CreativeTabs var2, List var3) { + var3.add(new ItemStack(var1, 1, 0)); + var3.add(new ItemStack(var1, 1, 1)); + var3.add(new ItemStack(var1, 1, 2)); + } + + public void registerIcons(IconRegister var1) { + this.field_94406_c = new Icon[field_94405_b.length]; + + for(int var2 = 0; var2 < this.field_94406_c.length; ++var2) { + this.field_94406_c[var2] = var1.registerIcon(field_94405_b[var2]); + } + + this.field_94403_cO = var1.registerIcon("sandstone_top"); + this.field_94404_cP = var1.registerIcon("sandstone_bottom"); + } +} diff --git a/src/net/minecraft/src/BlockSapling.java b/src/net/minecraft/src/BlockSapling.java new file mode 100644 index 0000000..739972c --- /dev/null +++ b/src/net/minecraft/src/BlockSapling.java @@ -0,0 +1,125 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockSapling extends BlockFlower { + public static final String[] WOOD_TYPES = new String[]{"oak", "spruce", "birch", "jungle"}; + private static final String[] field_94370_b = new String[]{"sapling", "sapling_spruce", "sapling_birch", "sapling_jungle"}; + private Icon[] saplingIcon; + + protected BlockSapling(int var1) { + super(var1); + float var2 = 0.4F; + this.setBlockBounds(0.5F - var2, 0.0F, 0.5F - var2, 0.5F + var2, var2 * 2.0F, 0.5F + var2); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.isRemote) { + super.updateTick(var1, var2, var3, var4, var5); + if(var1.getBlockLightValue(var2, var3 + 1, var4) >= 9 && var5.nextInt(7) == 0) { + this.markOrGrowMarked(var1, var2, var3, var4, var5); + } + + } + } + + public Icon getIcon(int var1, int var2) { + var2 &= 3; + return this.saplingIcon[var2]; + } + + public void markOrGrowMarked(World var1, int var2, int var3, int var4, Random var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) == 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 | 8, 4); + } else { + this.growTree(var1, var2, var3, var4, var5); + } + + } + + public void growTree(World var1, int var2, int var3, int var4, Random var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4) & 3; + Object var7 = null; + int var8 = 0; + int var9 = 0; + boolean var10 = false; + if(var6 == 1) { + var7 = new WorldGenTaiga2(true); + } else if(var6 == 2) { + var7 = new WorldGenForest(true); + } else if(var6 == 3) { + for(var8 = 0; var8 >= -1; --var8) { + for(var9 = 0; var9 >= -1; --var9) { + if(this.isSameSapling(var1, var2 + var8, var3, var4 + var9, 3) && this.isSameSapling(var1, var2 + var8 + 1, var3, var4 + var9, 3) && this.isSameSapling(var1, var2 + var8, var3, var4 + var9 + 1, 3) && this.isSameSapling(var1, var2 + var8 + 1, var3, var4 + var9 + 1, 3)) { + var7 = new WorldGenHugeTrees(true, 10 + var5.nextInt(20), 3, 3); + var10 = true; + break; + } + } + + if(var7 != null) { + break; + } + } + + if(var7 == null) { + var9 = 0; + var8 = var9; + var7 = new WorldGenTrees(true, 4 + var5.nextInt(7), 3, 3, false); + } + } else { + var7 = new WorldGenTrees(true); + if(var5.nextInt(10) == 0) { + var7 = new WorldGenBigTree(true); + } + } + + if(var10) { + var1.setBlock(var2 + var8, var3, var4 + var9, 0, 0, 4); + var1.setBlock(var2 + var8 + 1, var3, var4 + var9, 0, 0, 4); + var1.setBlock(var2 + var8, var3, var4 + var9 + 1, 0, 0, 4); + var1.setBlock(var2 + var8 + 1, var3, var4 + var9 + 1, 0, 0, 4); + } else { + var1.setBlock(var2, var3, var4, 0, 0, 4); + } + + if(!((WorldGenerator)var7).generate(var1, var5, var2 + var8, var3, var4 + var9)) { + if(var10) { + var1.setBlock(var2 + var8, var3, var4 + var9, this.blockID, var6, 4); + var1.setBlock(var2 + var8 + 1, var3, var4 + var9, this.blockID, var6, 4); + var1.setBlock(var2 + var8, var3, var4 + var9 + 1, this.blockID, var6, 4); + var1.setBlock(var2 + var8 + 1, var3, var4 + var9 + 1, this.blockID, var6, 4); + } else { + var1.setBlock(var2, var3, var4, this.blockID, var6, 4); + } + } + + } + + public boolean isSameSapling(World var1, int var2, int var3, int var4, int var5) { + return var1.getBlockId(var2, var3, var4) == this.blockID && (var1.getBlockMetadata(var2, var3, var4) & 3) == var5; + } + + public int damageDropped(int var1) { + return var1 & 3; + } + + public void getSubBlocks(int var1, CreativeTabs var2, List var3) { + var3.add(new ItemStack(var1, 1, 0)); + var3.add(new ItemStack(var1, 1, 1)); + var3.add(new ItemStack(var1, 1, 2)); + var3.add(new ItemStack(var1, 1, 3)); + } + + public void registerIcons(IconRegister var1) { + this.saplingIcon = new Icon[field_94370_b.length]; + + for(int var2 = 0; var2 < this.saplingIcon.length; ++var2) { + this.saplingIcon[var2] = var1.registerIcon(field_94370_b[var2]); + } + + } +} diff --git a/src/net/minecraft/src/BlockSign.java b/src/net/minecraft/src/BlockSign.java new file mode 100644 index 0000000..f461c26 --- /dev/null +++ b/src/net/minecraft/src/BlockSign.java @@ -0,0 +1,127 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSign extends BlockContainer { + private Class signEntityClass; + private boolean isFreestanding; + + protected BlockSign(int var1, Class var2, boolean var3) { + super(var1, Material.wood); + this.isFreestanding = var3; + this.signEntityClass = var2; + float var4 = 0.25F; + float var5 = 1.0F; + this.setBlockBounds(0.5F - var4, 0.0F, 0.5F - var4, 0.5F + var4, var5, 0.5F + var4); + } + + public Icon getIcon(int var1, int var2) { + return Block.planks.getBlockTextureFromSide(var1); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.getSelectedBoundingBoxFromPool(var1, var2, var3, var4); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + if(!this.isFreestanding) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + float var6 = 9.0F / 32.0F; + float var7 = 25.0F / 32.0F; + float var8 = 0.0F; + float var9 = 1.0F; + float var10 = 2.0F / 16.0F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + if(var5 == 2) { + this.setBlockBounds(var8, var6, 1.0F - var10, var9, var7, 1.0F); + } + + if(var5 == 3) { + this.setBlockBounds(var8, var6, 0.0F, var9, var7, var10); + } + + if(var5 == 4) { + this.setBlockBounds(1.0F - var10, var6, var8, 1.0F, var7, var9); + } + + if(var5 == 5) { + this.setBlockBounds(0.0F, var6, var8, var10, var7, var9); + } + + } + } + + public int getRenderType() { + return -1; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean getBlocksMovement(IBlockAccess var1, int var2, int var3, int var4) { + return true; + } + + public boolean isOpaqueCube() { + return false; + } + + public TileEntity createNewTileEntity(World var1) { + try { + return (TileEntity)this.signEntityClass.newInstance(); + } catch (Exception var3) { + throw new RuntimeException(var3); + } + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.sign.itemID; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + boolean var6 = false; + if(this.isFreestanding) { + if(!var1.getBlockMaterial(var2, var3 - 1, var4).isSolid()) { + var6 = true; + } + } else { + int var7 = var1.getBlockMetadata(var2, var3, var4); + var6 = true; + if(var7 == 2 && var1.getBlockMaterial(var2, var3, var4 + 1).isSolid()) { + var6 = false; + } + + if(var7 == 3 && var1.getBlockMaterial(var2, var3, var4 - 1).isSolid()) { + var6 = false; + } + + if(var7 == 4 && var1.getBlockMaterial(var2 + 1, var3, var4).isSolid()) { + var6 = false; + } + + if(var7 == 5 && var1.getBlockMaterial(var2 - 1, var3, var4).isSolid()) { + var6 = false; + } + } + + if(var6) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + } + + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Item.sign.itemID; + } + + public void registerIcons(IconRegister var1) { + } +} diff --git a/src/net/minecraft/src/BlockSilverfish.java b/src/net/minecraft/src/BlockSilverfish.java new file mode 100644 index 0000000..8be609c --- /dev/null +++ b/src/net/minecraft/src/BlockSilverfish.java @@ -0,0 +1,68 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockSilverfish extends Block { + public static final String[] silverfishStoneTypes = new String[]{"stone", "cobble", "brick"}; + + public BlockSilverfish(int var1) { + super(var1, Material.clay); + this.setHardness(0.0F); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public Icon getIcon(int var1, int var2) { + return var2 == 1 ? Block.cobblestone.getBlockTextureFromSide(var1) : (var2 == 2 ? Block.stoneBrick.getBlockTextureFromSide(var1) : Block.stone.getBlockTextureFromSide(var1)); + } + + public void registerIcons(IconRegister var1) { + } + + public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isRemote) { + EntitySilverfish var6 = new EntitySilverfish(var1); + var6.setLocationAndAngles((double)var2 + 0.5D, (double)var3, (double)var4 + 0.5D, 0.0F, 0.0F); + var1.spawnEntityInWorld(var6); + var6.spawnExplosionParticle(); + } + + super.onBlockDestroyedByPlayer(var1, var2, var3, var4, var5); + } + + public int quantityDropped(Random var1) { + return 0; + } + + public static boolean getPosingIdByMetadata(int var0) { + return var0 == Block.stone.blockID || var0 == Block.cobblestone.blockID || var0 == Block.stoneBrick.blockID; + } + + public static int getMetadataForBlockType(int var0) { + return var0 == Block.cobblestone.blockID ? 1 : (var0 == Block.stoneBrick.blockID ? 2 : 0); + } + + protected ItemStack createStackedBlock(int var1) { + Block var2 = Block.stone; + if(var1 == 1) { + var2 = Block.cobblestone; + } + + if(var1 == 2) { + var2 = Block.stoneBrick; + } + + return new ItemStack(var2); + } + + public int getDamageValue(World var1, int var2, int var3, int var4) { + return var1.getBlockMetadata(var2, var3, var4); + } + + public void getSubBlocks(int var1, CreativeTabs var2, List var3) { + for(int var4 = 0; var4 < 3; ++var4) { + var3.add(new ItemStack(var1, 1, var4)); + } + + } +} diff --git a/src/net/minecraft/src/BlockSkull.java b/src/net/minecraft/src/BlockSkull.java new file mode 100644 index 0000000..2707375 --- /dev/null +++ b/src/net/minecraft/src/BlockSkull.java @@ -0,0 +1,203 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSkull extends BlockContainer { + protected BlockSkull(int var1) { + super(var1, Material.circuits); + this.setBlockBounds(0.25F, 0.0F, 0.25F, 12.0F / 16.0F, 0.5F, 12.0F / 16.0F); + } + + public int getRenderType() { + return -1; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4) & 7; + switch(var5) { + case 1: + default: + this.setBlockBounds(0.25F, 0.0F, 0.25F, 12.0F / 16.0F, 0.5F, 12.0F / 16.0F); + break; + case 2: + this.setBlockBounds(0.25F, 0.25F, 0.5F, 12.0F / 16.0F, 12.0F / 16.0F, 1.0F); + break; + case 3: + this.setBlockBounds(0.25F, 0.25F, 0.0F, 12.0F / 16.0F, 12.0F / 16.0F, 0.5F); + break; + case 4: + this.setBlockBounds(0.5F, 0.25F, 0.25F, 1.0F, 12.0F / 16.0F, 12.0F / 16.0F); + break; + case 5: + this.setBlockBounds(0.0F, 0.25F, 0.25F, 0.5F, 12.0F / 16.0F, 12.0F / 16.0F); + } + + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + int var7 = MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3; + var1.setBlockMetadataWithNotify(var2, var3, var4, var7, 2); + } + + public TileEntity createNewTileEntity(World var1) { + return new TileEntitySkull(); + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Item.skull.itemID; + } + + public int getDamageValue(World var1, int var2, int var3, int var4) { + TileEntity var5 = var1.getBlockTileEntity(var2, var3, var4); + return var5 != null && var5 instanceof TileEntitySkull ? ((TileEntitySkull)var5).getSkullType() : super.getDamageValue(var1, var2, var3, var4); + } + + public int damageDropped(int var1) { + return var1; + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + } + + public void onBlockHarvested(World var1, int var2, int var3, int var4, int var5, EntityPlayer var6) { + if(var6.capabilities.isCreativeMode) { + var5 |= 8; + var1.setBlockMetadataWithNotify(var2, var3, var4, var5, 4); + } + + super.onBlockHarvested(var1, var2, var3, var4, var5, var6); + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + if(!var1.isRemote) { + if((var6 & 8) == 0) { + ItemStack var7 = new ItemStack(Item.skull.itemID, 1, this.getDamageValue(var1, var2, var3, var4)); + TileEntitySkull var8 = (TileEntitySkull)var1.getBlockTileEntity(var2, var3, var4); + if(var8.getSkullType() == 3 && var8.getExtraType() != null && var8.getExtraType().length() > 0) { + var7.setTagCompound(new NBTTagCompound()); + var7.getTagCompound().setString("SkullOwner", var8.getExtraType()); + } + + this.dropBlockAsItem_do(var1, var2, var3, var4, var7); + } + + super.breakBlock(var1, var2, var3, var4, var5, var6); + } + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.skull.itemID; + } + + public void makeWither(World var1, int var2, int var3, int var4, TileEntitySkull var5) { + if(var5.getSkullType() == 1 && var3 >= 2 && var1.difficultySetting > 0 && !var1.isRemote) { + int var6 = Block.slowSand.blockID; + + int var7; + EntityWither var8; + int var9; + for(var7 = -2; var7 <= 0; ++var7) { + if(var1.getBlockId(var2, var3 - 1, var4 + var7) == var6 && var1.getBlockId(var2, var3 - 1, var4 + var7 + 1) == var6 && var1.getBlockId(var2, var3 - 2, var4 + var7 + 1) == var6 && var1.getBlockId(var2, var3 - 1, var4 + var7 + 2) == var6 && this.func_82528_d(var1, var2, var3, var4 + var7, 1) && this.func_82528_d(var1, var2, var3, var4 + var7 + 1, 1) && this.func_82528_d(var1, var2, var3, var4 + var7 + 2, 1)) { + var1.setBlockMetadataWithNotify(var2, var3, var4 + var7, 8, 2); + var1.setBlockMetadataWithNotify(var2, var3, var4 + var7 + 1, 8, 2); + var1.setBlockMetadataWithNotify(var2, var3, var4 + var7 + 2, 8, 2); + var1.setBlock(var2, var3, var4 + var7, 0, 0, 2); + var1.setBlock(var2, var3, var4 + var7 + 1, 0, 0, 2); + var1.setBlock(var2, var3, var4 + var7 + 2, 0, 0, 2); + var1.setBlock(var2, var3 - 1, var4 + var7, 0, 0, 2); + var1.setBlock(var2, var3 - 1, var4 + var7 + 1, 0, 0, 2); + var1.setBlock(var2, var3 - 1, var4 + var7 + 2, 0, 0, 2); + var1.setBlock(var2, var3 - 2, var4 + var7 + 1, 0, 0, 2); + if(!var1.isRemote) { + var8 = new EntityWither(var1); + var8.setLocationAndAngles((double)var2 + 0.5D, (double)var3 - 1.45D, (double)(var4 + var7) + 1.5D, 90.0F, 0.0F); + var8.renderYawOffset = 90.0F; + var8.func_82206_m(); + var1.spawnEntityInWorld(var8); + } + + for(var9 = 0; var9 < 120; ++var9) { + var1.spawnParticle("snowballpoof", (double)var2 + var1.rand.nextDouble(), (double)(var3 - 2) + var1.rand.nextDouble() * 3.9D, (double)(var4 + var7 + 1) + var1.rand.nextDouble(), 0.0D, 0.0D, 0.0D); + } + + var1.notifyBlockChange(var2, var3, var4 + var7, 0); + var1.notifyBlockChange(var2, var3, var4 + var7 + 1, 0); + var1.notifyBlockChange(var2, var3, var4 + var7 + 2, 0); + var1.notifyBlockChange(var2, var3 - 1, var4 + var7, 0); + var1.notifyBlockChange(var2, var3 - 1, var4 + var7 + 1, 0); + var1.notifyBlockChange(var2, var3 - 1, var4 + var7 + 2, 0); + var1.notifyBlockChange(var2, var3 - 2, var4 + var7 + 1, 0); + return; + } + } + + for(var7 = -2; var7 <= 0; ++var7) { + if(var1.getBlockId(var2 + var7, var3 - 1, var4) == var6 && var1.getBlockId(var2 + var7 + 1, var3 - 1, var4) == var6 && var1.getBlockId(var2 + var7 + 1, var3 - 2, var4) == var6 && var1.getBlockId(var2 + var7 + 2, var3 - 1, var4) == var6 && this.func_82528_d(var1, var2 + var7, var3, var4, 1) && this.func_82528_d(var1, var2 + var7 + 1, var3, var4, 1) && this.func_82528_d(var1, var2 + var7 + 2, var3, var4, 1)) { + var1.setBlockMetadataWithNotify(var2 + var7, var3, var4, 8, 2); + var1.setBlockMetadataWithNotify(var2 + var7 + 1, var3, var4, 8, 2); + var1.setBlockMetadataWithNotify(var2 + var7 + 2, var3, var4, 8, 2); + var1.setBlock(var2 + var7, var3, var4, 0, 0, 2); + var1.setBlock(var2 + var7 + 1, var3, var4, 0, 0, 2); + var1.setBlock(var2 + var7 + 2, var3, var4, 0, 0, 2); + var1.setBlock(var2 + var7, var3 - 1, var4, 0, 0, 2); + var1.setBlock(var2 + var7 + 1, var3 - 1, var4, 0, 0, 2); + var1.setBlock(var2 + var7 + 2, var3 - 1, var4, 0, 0, 2); + var1.setBlock(var2 + var7 + 1, var3 - 2, var4, 0, 0, 2); + if(!var1.isRemote) { + var8 = new EntityWither(var1); + var8.setLocationAndAngles((double)(var2 + var7) + 1.5D, (double)var3 - 1.45D, (double)var4 + 0.5D, 0.0F, 0.0F); + var8.func_82206_m(); + var1.spawnEntityInWorld(var8); + } + + for(var9 = 0; var9 < 120; ++var9) { + var1.spawnParticle("snowballpoof", (double)(var2 + var7 + 1) + var1.rand.nextDouble(), (double)(var3 - 2) + var1.rand.nextDouble() * 3.9D, (double)var4 + var1.rand.nextDouble(), 0.0D, 0.0D, 0.0D); + } + + var1.notifyBlockChange(var2 + var7, var3, var4, 0); + var1.notifyBlockChange(var2 + var7 + 1, var3, var4, 0); + var1.notifyBlockChange(var2 + var7 + 2, var3, var4, 0); + var1.notifyBlockChange(var2 + var7, var3 - 1, var4, 0); + var1.notifyBlockChange(var2 + var7 + 1, var3 - 1, var4, 0); + var1.notifyBlockChange(var2 + var7 + 2, var3 - 1, var4, 0); + var1.notifyBlockChange(var2 + var7 + 1, var3 - 2, var4, 0); + return; + } + } + } + + } + + private boolean func_82528_d(World var1, int var2, int var3, int var4, int var5) { + if(var1.getBlockId(var2, var3, var4) != this.blockID) { + return false; + } else { + TileEntity var6 = var1.getBlockTileEntity(var2, var3, var4); + return var6 != null && var6 instanceof TileEntitySkull ? ((TileEntitySkull)var6).getSkullType() == var5 : false; + } + } + + public void registerIcons(IconRegister var1) { + } + + public Icon getIcon(int var1, int var2) { + return Block.slowSand.getBlockTextureFromSide(var1); + } + + public String getItemIconName() { + return ItemSkull.field_94587_a[0]; + } +} diff --git a/src/net/minecraft/src/BlockSnow.java b/src/net/minecraft/src/BlockSnow.java new file mode 100644 index 0000000..c7bf995 --- /dev/null +++ b/src/net/minecraft/src/BlockSnow.java @@ -0,0 +1,92 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSnow extends Block { + protected BlockSnow(int var1) { + super(var1, Material.snow); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.tabDecorations); + this.setBlockBoundsForSnowDepth(0); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("snow"); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4) & 7; + float var6 = 2.0F / 16.0F; + return AxisAlignedBB.getAABBPool().getAABB((double)var2 + this.minX, (double)var3 + this.minY, (double)var4 + this.minZ, (double)var2 + this.maxX, (double)((float)var3 + (float)var5 * var6), (double)var4 + this.maxZ); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public void setBlockBoundsForItemRender() { + this.setBlockBoundsForSnowDepth(0); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + this.setBlockBoundsForSnowDepth(var1.getBlockMetadata(var2, var3, var4)); + } + + protected void setBlockBoundsForSnowDepth(int var1) { + int var2 = var1 & 7; + float var3 = (float)(2 * (1 + var2)) / 16.0F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, var3, 1.0F); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3 - 1, var4); + return var5 == 0 ? false : (var5 == this.blockID && (var1.getBlockMetadata(var2, var3 - 1, var4) & 7) == 7 ? true : (var5 != Block.leaves.blockID && !Block.blocksList[var5].isOpaqueCube() ? false : var1.getBlockMaterial(var2, var3 - 1, var4).blocksMovement())); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + this.canSnowStay(var1, var2, var3, var4); + } + + private boolean canSnowStay(World var1, int var2, int var3, int var4) { + if(!this.canPlaceBlockAt(var1, var2, var3, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + return false; + } else { + return true; + } + } + + public void harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) { + int var7 = Item.snowball.itemID; + int var8 = var6 & 7; + this.dropBlockAsItem_do(var1, var3, var4, var5, new ItemStack(var7, var8 + 1, 0)); + var1.setBlockToAir(var3, var4, var5); + var2.addStat(StatList.mineBlockStatArray[this.blockID], 1); + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.snowball.itemID; + } + + public int quantityDropped(Random var1) { + return 0; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.getSavedLightValue(EnumSkyBlock.Block, var2, var3, var4) > 11) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + } + + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return var5 == 1 ? true : super.shouldSideBeRendered(var1, var2, var3, var4, var5); + } +} diff --git a/src/net/minecraft/src/BlockSnowBlock.java b/src/net/minecraft/src/BlockSnowBlock.java new file mode 100644 index 0000000..c4136dd --- /dev/null +++ b/src/net/minecraft/src/BlockSnowBlock.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSnowBlock extends Block { + protected BlockSnowBlock(int var1) { + super(var1, Material.craftedSnow); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.snowball.itemID; + } + + public int quantityDropped(Random var1) { + return 4; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.getSavedLightValue(EnumSkyBlock.Block, var2, var3, var4) > 11) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + } + + } +} diff --git a/src/net/minecraft/src/BlockSoulSand.java b/src/net/minecraft/src/BlockSoulSand.java new file mode 100644 index 0000000..38df02e --- /dev/null +++ b/src/net/minecraft/src/BlockSoulSand.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +public class BlockSoulSand extends Block { + public BlockSoulSand(int var1) { + super(var1, Material.sand); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + float var5 = 2.0F / 16.0F; + return AxisAlignedBB.getAABBPool().getAABB((double)var2, (double)var3, (double)var4, (double)(var2 + 1), (double)((float)(var3 + 1) - var5), (double)(var4 + 1)); + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + var5.motionX *= 0.4D; + var5.motionZ *= 0.4D; + } +} diff --git a/src/net/minecraft/src/BlockSourceImpl.java b/src/net/minecraft/src/BlockSourceImpl.java new file mode 100644 index 0000000..3082de1 --- /dev/null +++ b/src/net/minecraft/src/BlockSourceImpl.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +public class BlockSourceImpl implements IBlockSource { + private final World worldObj; + private final int xPos; + private final int yPos; + private final int zPos; + + public BlockSourceImpl(World var1, int var2, int var3, int var4) { + this.worldObj = var1; + this.xPos = var2; + this.yPos = var3; + this.zPos = var4; + } + + public World getWorld() { + return this.worldObj; + } + + public double getX() { + return (double)this.xPos + 0.5D; + } + + public double getY() { + return (double)this.yPos + 0.5D; + } + + public double getZ() { + return (double)this.zPos + 0.5D; + } + + public int getXInt() { + return this.xPos; + } + + public int getYInt() { + return this.yPos; + } + + public int getZInt() { + return this.zPos; + } + + public int getBlockMetadata() { + return this.worldObj.getBlockMetadata(this.xPos, this.yPos, this.zPos); + } + + public TileEntity getBlockTileEntity() { + return this.worldObj.getBlockTileEntity(this.xPos, this.yPos, this.zPos); + } +} diff --git a/src/net/minecraft/src/BlockSponge.java b/src/net/minecraft/src/BlockSponge.java new file mode 100644 index 0000000..b9e2fce --- /dev/null +++ b/src/net/minecraft/src/BlockSponge.java @@ -0,0 +1,8 @@ +package net.minecraft.src; + +public class BlockSponge extends Block { + protected BlockSponge(int var1) { + super(var1, Material.sponge); + this.setCreativeTab(CreativeTabs.tabBlock); + } +} diff --git a/src/net/minecraft/src/BlockStairs.java b/src/net/minecraft/src/BlockStairs.java new file mode 100644 index 0000000..53309e2 --- /dev/null +++ b/src/net/minecraft/src/BlockStairs.java @@ -0,0 +1,405 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockStairs extends Block { + private static final int[][] field_72159_a = new int[][]{{2, 6}, {3, 7}, {2, 3}, {6, 7}, {0, 4}, {1, 5}, {0, 1}, {4, 5}}; + private final Block modelBlock; + private final int modelBlockMetadata; + private boolean field_72156_cr = false; + private int field_72160_cs = 0; + + protected BlockStairs(int var1, Block var2, int var3) { + super(var1, var2.blockMaterial); + this.modelBlock = var2; + this.modelBlockMetadata = var3; + this.setHardness(var2.blockHardness); + this.setResistance(var2.blockResistance / 3.0F); + this.setStepSound(var2.stepSound); + this.setLightOpacity(255); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + if(this.field_72156_cr) { + this.setBlockBounds(0.5F * (float)(this.field_72160_cs % 2), 0.5F * (float)(this.field_72160_cs / 2 % 2), 0.5F * (float)(this.field_72160_cs / 4 % 2), 0.5F + 0.5F * (float)(this.field_72160_cs % 2), 0.5F + 0.5F * (float)(this.field_72160_cs / 2 % 2), 0.5F + 0.5F * (float)(this.field_72160_cs / 4 % 2)); + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 10; + } + + public void func_82541_d(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + if((var5 & 4) != 0) { + this.setBlockBounds(0.0F, 0.5F, 0.0F, 1.0F, 1.0F, 1.0F); + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + } + + } + + public static boolean isBlockStairsID(int var0) { + return var0 > 0 && Block.blocksList[var0] instanceof BlockStairs; + } + + private boolean func_82540_f(IBlockAccess var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockId(var2, var3, var4); + return isBlockStairsID(var6) && var1.getBlockMetadata(var2, var3, var4) == var5; + } + + public boolean func_82542_g(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + int var6 = var5 & 3; + float var7 = 0.5F; + float var8 = 1.0F; + if((var5 & 4) != 0) { + var7 = 0.0F; + var8 = 0.5F; + } + + float var9 = 0.0F; + float var10 = 1.0F; + float var11 = 0.0F; + float var12 = 0.5F; + boolean var13 = true; + int var14; + int var15; + int var16; + if(var6 == 0) { + var9 = 0.5F; + var12 = 1.0F; + var14 = var1.getBlockId(var2 + 1, var3, var4); + var15 = var1.getBlockMetadata(var2 + 1, var3, var4); + if(isBlockStairsID(var14) && (var5 & 4) == (var15 & 4)) { + var16 = var15 & 3; + if(var16 == 3 && !this.func_82540_f(var1, var2, var3, var4 + 1, var5)) { + var12 = 0.5F; + var13 = false; + } else if(var16 == 2 && !this.func_82540_f(var1, var2, var3, var4 - 1, var5)) { + var11 = 0.5F; + var13 = false; + } + } + } else if(var6 == 1) { + var10 = 0.5F; + var12 = 1.0F; + var14 = var1.getBlockId(var2 - 1, var3, var4); + var15 = var1.getBlockMetadata(var2 - 1, var3, var4); + if(isBlockStairsID(var14) && (var5 & 4) == (var15 & 4)) { + var16 = var15 & 3; + if(var16 == 3 && !this.func_82540_f(var1, var2, var3, var4 + 1, var5)) { + var12 = 0.5F; + var13 = false; + } else if(var16 == 2 && !this.func_82540_f(var1, var2, var3, var4 - 1, var5)) { + var11 = 0.5F; + var13 = false; + } + } + } else if(var6 == 2) { + var11 = 0.5F; + var12 = 1.0F; + var14 = var1.getBlockId(var2, var3, var4 + 1); + var15 = var1.getBlockMetadata(var2, var3, var4 + 1); + if(isBlockStairsID(var14) && (var5 & 4) == (var15 & 4)) { + var16 = var15 & 3; + if(var16 == 1 && !this.func_82540_f(var1, var2 + 1, var3, var4, var5)) { + var10 = 0.5F; + var13 = false; + } else if(var16 == 0 && !this.func_82540_f(var1, var2 - 1, var3, var4, var5)) { + var9 = 0.5F; + var13 = false; + } + } + } else if(var6 == 3) { + var14 = var1.getBlockId(var2, var3, var4 - 1); + var15 = var1.getBlockMetadata(var2, var3, var4 - 1); + if(isBlockStairsID(var14) && (var5 & 4) == (var15 & 4)) { + var16 = var15 & 3; + if(var16 == 1 && !this.func_82540_f(var1, var2 + 1, var3, var4, var5)) { + var10 = 0.5F; + var13 = false; + } else if(var16 == 0 && !this.func_82540_f(var1, var2 - 1, var3, var4, var5)) { + var9 = 0.5F; + var13 = false; + } + } + } + + this.setBlockBounds(var9, var7, var11, var10, var8, var12); + return var13; + } + + public boolean func_82544_h(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + int var6 = var5 & 3; + float var7 = 0.5F; + float var8 = 1.0F; + if((var5 & 4) != 0) { + var7 = 0.0F; + var8 = 0.5F; + } + + float var9 = 0.0F; + float var10 = 0.5F; + float var11 = 0.5F; + float var12 = 1.0F; + boolean var13 = false; + int var14; + int var15; + int var16; + if(var6 == 0) { + var14 = var1.getBlockId(var2 - 1, var3, var4); + var15 = var1.getBlockMetadata(var2 - 1, var3, var4); + if(isBlockStairsID(var14) && (var5 & 4) == (var15 & 4)) { + var16 = var15 & 3; + if(var16 == 3 && !this.func_82540_f(var1, var2, var3, var4 - 1, var5)) { + var11 = 0.0F; + var12 = 0.5F; + var13 = true; + } else if(var16 == 2 && !this.func_82540_f(var1, var2, var3, var4 + 1, var5)) { + var11 = 0.5F; + var12 = 1.0F; + var13 = true; + } + } + } else if(var6 == 1) { + var14 = var1.getBlockId(var2 + 1, var3, var4); + var15 = var1.getBlockMetadata(var2 + 1, var3, var4); + if(isBlockStairsID(var14) && (var5 & 4) == (var15 & 4)) { + var9 = 0.5F; + var10 = 1.0F; + var16 = var15 & 3; + if(var16 == 3 && !this.func_82540_f(var1, var2, var3, var4 - 1, var5)) { + var11 = 0.0F; + var12 = 0.5F; + var13 = true; + } else if(var16 == 2 && !this.func_82540_f(var1, var2, var3, var4 + 1, var5)) { + var11 = 0.5F; + var12 = 1.0F; + var13 = true; + } + } + } else if(var6 == 2) { + var14 = var1.getBlockId(var2, var3, var4 - 1); + var15 = var1.getBlockMetadata(var2, var3, var4 - 1); + if(isBlockStairsID(var14) && (var5 & 4) == (var15 & 4)) { + var11 = 0.0F; + var12 = 0.5F; + var16 = var15 & 3; + if(var16 == 1 && !this.func_82540_f(var1, var2 - 1, var3, var4, var5)) { + var13 = true; + } else if(var16 == 0 && !this.func_82540_f(var1, var2 + 1, var3, var4, var5)) { + var9 = 0.5F; + var10 = 1.0F; + var13 = true; + } + } + } else if(var6 == 3) { + var14 = var1.getBlockId(var2, var3, var4 + 1); + var15 = var1.getBlockMetadata(var2, var3, var4 + 1); + if(isBlockStairsID(var14) && (var5 & 4) == (var15 & 4)) { + var16 = var15 & 3; + if(var16 == 1 && !this.func_82540_f(var1, var2 - 1, var3, var4, var5)) { + var13 = true; + } else if(var16 == 0 && !this.func_82540_f(var1, var2 + 1, var3, var4, var5)) { + var9 = 0.5F; + var10 = 1.0F; + var13 = true; + } + } + } + + if(var13) { + this.setBlockBounds(var9, var7, var11, var10, var8, var12); + } + + return var13; + } + + public void addCollisionBoxesToList(World var1, int var2, int var3, int var4, AxisAlignedBB var5, List var6, Entity var7) { + this.func_82541_d(var1, var2, var3, var4); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + boolean var8 = this.func_82542_g(var1, var2, var3, var4); + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + if(var8 && this.func_82544_h(var1, var2, var3, var4)) { + super.addCollisionBoxesToList(var1, var2, var3, var4, var5, var6, var7); + } + + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + this.modelBlock.randomDisplayTick(var1, var2, var3, var4, var5); + } + + public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + this.modelBlock.onBlockClicked(var1, var2, var3, var4, var5); + } + + public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) { + this.modelBlock.onBlockDestroyedByPlayer(var1, var2, var3, var4, var5); + } + + public int getMixedBrightnessForBlock(IBlockAccess var1, int var2, int var3, int var4) { + return this.modelBlock.getMixedBrightnessForBlock(var1, var2, var3, var4); + } + + public float getBlockBrightness(IBlockAccess var1, int var2, int var3, int var4) { + return this.modelBlock.getBlockBrightness(var1, var2, var3, var4); + } + + public float getExplosionResistance(Entity var1) { + return this.modelBlock.getExplosionResistance(var1); + } + + public int getRenderBlockPass() { + return this.modelBlock.getRenderBlockPass(); + } + + public Icon getIcon(int var1, int var2) { + return this.modelBlock.getIcon(var1, this.modelBlockMetadata); + } + + public int tickRate(World var1) { + return this.modelBlock.tickRate(var1); + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return this.modelBlock.getSelectedBoundingBoxFromPool(var1, var2, var3, var4); + } + + public void velocityToAddToEntity(World var1, int var2, int var3, int var4, Entity var5, Vec3 var6) { + this.modelBlock.velocityToAddToEntity(var1, var2, var3, var4, var5, var6); + } + + public boolean isCollidable() { + return this.modelBlock.isCollidable(); + } + + public boolean canCollideCheck(int var1, boolean var2) { + return this.modelBlock.canCollideCheck(var1, var2); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return this.modelBlock.canPlaceBlockAt(var1, var2, var3, var4); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + this.onNeighborBlockChange(var1, var2, var3, var4, 0); + this.modelBlock.onBlockAdded(var1, var2, var3, var4); + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + this.modelBlock.breakBlock(var1, var2, var3, var4, var5, var6); + } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + this.modelBlock.onEntityWalking(var1, var2, var3, var4, var5); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + this.modelBlock.updateTick(var1, var2, var3, var4, var5); + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + return this.modelBlock.onBlockActivated(var1, var2, var3, var4, var5, 0, 0.0F, 0.0F, 0.0F); + } + + public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4, Explosion var5) { + this.modelBlock.onBlockDestroyedByExplosion(var1, var2, var3, var4, var5); + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5, ItemStack var6) { + int var7 = MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + int var8 = var1.getBlockMetadata(var2, var3, var4) & 4; + if(var7 == 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 2 | var8, 2); + } + + if(var7 == 1) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 1 | var8, 2); + } + + if(var7 == 2) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 3 | var8, 2); + } + + if(var7 == 3) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 0 | var8, 2); + } + + } + + public int onBlockPlaced(World var1, int var2, int var3, int var4, int var5, float var6, float var7, float var8, int var9) { + return var5 != 0 && (var5 == 1 || (double)var7 <= 0.5D) ? var9 : var9 | 4; + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3 var5, Vec3 var6) { + MovingObjectPosition[] var7 = new MovingObjectPosition[8]; + int var8 = var1.getBlockMetadata(var2, var3, var4); + int var9 = var8 & 3; + boolean var10 = (var8 & 4) == 4; + int[] var11 = field_72159_a[var9 + (var10 ? 4 : 0)]; + this.field_72156_cr = true; + + int var14; + int var15; + int var16; + for(int var12 = 0; var12 < 8; ++var12) { + this.field_72160_cs = var12; + int[] var13 = var11; + var14 = var11.length; + + for(var15 = 0; var15 < var14; ++var15) { + var16 = var13[var15]; + if(var16 == var12) { + } + } + + var7[var12] = super.collisionRayTrace(var1, var2, var3, var4, var5, var6); + } + + int[] var21 = var11; + int var23 = var11.length; + + for(var14 = 0; var14 < var23; ++var14) { + var15 = var21[var14]; + var7[var15] = null; + } + + MovingObjectPosition var22 = null; + double var24 = 0.0D; + MovingObjectPosition[] var25 = var7; + var16 = var7.length; + + for(int var17 = 0; var17 < var16; ++var17) { + MovingObjectPosition var18 = var25[var17]; + if(var18 != null) { + double var19 = var18.hitVec.squareDistanceTo(var6); + if(var19 > var24) { + var22 = var18; + var24 = var19; + } + } + } + + return var22; + } + + public void registerIcons(IconRegister var1) { + } +} diff --git a/src/net/minecraft/src/BlockStationary.java b/src/net/minecraft/src/BlockStationary.java new file mode 100644 index 0000000..6815498 --- /dev/null +++ b/src/net/minecraft/src/BlockStationary.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockStationary extends BlockFluid { + protected BlockStationary(int var1, Material var2) { + super(var1, var2); + this.setTickRandomly(false); + if(var2 == Material.lava) { + this.setTickRandomly(true); + } + + } + + public boolean getBlocksMovement(IBlockAccess var1, int var2, int var3, int var4) { + return this.blockMaterial != Material.lava; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + if(var1.getBlockId(var2, var3, var4) == this.blockID) { + this.setNotStationary(var1, var2, var3, var4); + } + + } + + private void setNotStationary(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + var1.setBlock(var2, var3, var4, this.blockID - 1, var5, 2); + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID - 1, this.tickRate(var1)); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(this.blockMaterial == Material.lava) { + int var6 = var5.nextInt(3); + int var7 = 0; + + while(true) { + int var8; + if(var7 >= var6) { + if(var6 == 0) { + var7 = var2; + var8 = var4; + + for(int var9 = 0; var9 < 3; ++var9) { + var2 = var7 + var5.nextInt(3) - 1; + var4 = var8 + var5.nextInt(3) - 1; + if(var1.isAirBlock(var2, var3 + 1, var4) && this.isFlammable(var1, var2, var3, var4)) { + var1.setBlock(var2, var3 + 1, var4, Block.fire.blockID); + } + } + } + break; + } + + var2 += var5.nextInt(3) - 1; + ++var3; + var4 += var5.nextInt(3) - 1; + var8 = var1.getBlockId(var2, var3, var4); + if(var8 == 0) { + if(this.isFlammable(var1, var2 - 1, var3, var4) || this.isFlammable(var1, var2 + 1, var3, var4) || this.isFlammable(var1, var2, var3, var4 - 1) || this.isFlammable(var1, var2, var3, var4 + 1) || this.isFlammable(var1, var2, var3 - 1, var4) || this.isFlammable(var1, var2, var3 + 1, var4)) { + var1.setBlock(var2, var3, var4, Block.fire.blockID); + return; + } + } else if(Block.blocksList[var8].blockMaterial.blocksMovement()) { + return; + } + + ++var7; + } + } + + } + + private boolean isFlammable(World var1, int var2, int var3, int var4) { + return var1.getBlockMaterial(var2, var3, var4).getCanBurn(); + } +} diff --git a/src/net/minecraft/src/BlockStem.java b/src/net/minecraft/src/BlockStem.java new file mode 100644 index 0000000..36a49e4 --- /dev/null +++ b/src/net/minecraft/src/BlockStem.java @@ -0,0 +1,198 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockStem extends BlockFlower { + private final Block fruitType; + private Icon theIcon; + + protected BlockStem(int var1, Block var2) { + super(var1); + this.fruitType = var2; + this.setTickRandomly(true); + float var3 = 2.0F / 16.0F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, 0.25F, 0.5F + var3); + this.setCreativeTab((CreativeTabs)null); + } + + protected boolean canThisPlantGrowOnThisBlockID(int var1) { + return var1 == Block.tilledField.blockID; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + super.updateTick(var1, var2, var3, var4, var5); + if(var1.getBlockLightValue(var2, var3 + 1, var4) >= 9) { + float var6 = this.getGrowthModifier(var1, var2, var3, var4); + if(var5.nextInt((int)(25.0F / var6) + 1) == 0) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + if(var7 < 7) { + ++var7; + var1.setBlockMetadataWithNotify(var2, var3, var4, var7, 2); + } else { + if(var1.getBlockId(var2 - 1, var3, var4) == this.fruitType.blockID) { + return; + } + + if(var1.getBlockId(var2 + 1, var3, var4) == this.fruitType.blockID) { + return; + } + + if(var1.getBlockId(var2, var3, var4 - 1) == this.fruitType.blockID) { + return; + } + + if(var1.getBlockId(var2, var3, var4 + 1) == this.fruitType.blockID) { + return; + } + + int var8 = var5.nextInt(4); + int var9 = var2; + int var10 = var4; + if(var8 == 0) { + var9 = var2 - 1; + } + + if(var8 == 1) { + ++var9; + } + + if(var8 == 2) { + var10 = var4 - 1; + } + + if(var8 == 3) { + ++var10; + } + + int var11 = var1.getBlockId(var9, var3 - 1, var10); + if(var1.getBlockId(var9, var3, var10) == 0 && (var11 == Block.tilledField.blockID || var11 == Block.dirt.blockID || var11 == Block.grass.blockID)) { + var1.setBlock(var9, var3, var10, this.fruitType.blockID); + } + } + } + } + + } + + public void fertilizeStem(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4) + MathHelper.getRandomIntegerInRange(var1.rand, 2, 5); + if(var5 > 7) { + var5 = 7; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var5, 2); + } + + private float getGrowthModifier(World var1, int var2, int var3, int var4) { + float var5 = 1.0F; + int var6 = var1.getBlockId(var2, var3, var4 - 1); + int var7 = var1.getBlockId(var2, var3, var4 + 1); + int var8 = var1.getBlockId(var2 - 1, var3, var4); + int var9 = var1.getBlockId(var2 + 1, var3, var4); + int var10 = var1.getBlockId(var2 - 1, var3, var4 - 1); + int var11 = var1.getBlockId(var2 + 1, var3, var4 - 1); + int var12 = var1.getBlockId(var2 + 1, var3, var4 + 1); + int var13 = var1.getBlockId(var2 - 1, var3, var4 + 1); + boolean var14 = var8 == this.blockID || var9 == this.blockID; + boolean var15 = var6 == this.blockID || var7 == this.blockID; + boolean var16 = var10 == this.blockID || var11 == this.blockID || var12 == this.blockID || var13 == this.blockID; + + for(int var17 = var2 - 1; var17 <= var2 + 1; ++var17) { + for(int var18 = var4 - 1; var18 <= var4 + 1; ++var18) { + int var19 = var1.getBlockId(var17, var3 - 1, var18); + float var20 = 0.0F; + if(var19 == Block.tilledField.blockID) { + var20 = 1.0F; + if(var1.getBlockMetadata(var17, var3 - 1, var18) > 0) { + var20 = 3.0F; + } + } + + if(var17 != var2 || var18 != var4) { + var20 /= 4.0F; + } + + var5 += var20; + } + } + + if(var16 || var14 && var15) { + var5 /= 2.0F; + } + + return var5; + } + + public int getRenderColor(int var1) { + int var2 = var1 * 32; + int var3 = 255 - var1 * 8; + int var4 = var1 * 4; + return var2 << 16 | var3 << 8 | var4; + } + + public int colorMultiplier(IBlockAccess var1, int var2, int var3, int var4) { + return this.getRenderColor(var1.getBlockMetadata(var2, var3, var4)); + } + + public void setBlockBoundsForItemRender() { + float var1 = 2.0F / 16.0F; + this.setBlockBounds(0.5F - var1, 0.0F, 0.5F - var1, 0.5F + var1, 0.25F, 0.5F + var1); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + this.maxY = (double)((float)(var1.getBlockMetadata(var2, var3, var4) * 2 + 2) / 16.0F); + float var5 = 2.0F / 16.0F; + this.setBlockBounds(0.5F - var5, 0.0F, 0.5F - var5, 0.5F + var5, (float)this.maxY, 0.5F + var5); + } + + public int getRenderType() { + return 19; + } + + public int getState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + return var5 < 7 ? -1 : (var1.getBlockId(var2 - 1, var3, var4) == this.fruitType.blockID ? 0 : (var1.getBlockId(var2 + 1, var3, var4) == this.fruitType.blockID ? 1 : (var1.getBlockId(var2, var3, var4 - 1) == this.fruitType.blockID ? 2 : (var1.getBlockId(var2, var3, var4 + 1) == this.fruitType.blockID ? 3 : -1)))); + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6, int var7) { + super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6, var7); + if(!var1.isRemote) { + Item var8 = null; + if(this.fruitType == Block.pumpkin) { + var8 = Item.pumpkinSeeds; + } + + if(this.fruitType == Block.melon) { + var8 = Item.melonSeeds; + } + + for(int var9 = 0; var9 < 3; ++var9) { + if(var1.rand.nextInt(15) <= var5) { + this.dropBlockAsItem_do(var1, var2, var3, var4, new ItemStack(var8)); + } + } + + } + } + + public int idDropped(int var1, Random var2, int var3) { + return -1; + } + + public int quantityDropped(Random var1) { + return 1; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return this.fruitType == Block.pumpkin ? Item.pumpkinSeeds.itemID : (this.fruitType == Block.melon ? Item.melonSeeds.itemID : 0); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("stem_straight"); + this.theIcon = var1.registerIcon("stem_bent"); + } + + public Icon func_94368_p() { + return this.theIcon; + } +} diff --git a/src/net/minecraft/src/BlockStep.java b/src/net/minecraft/src/BlockStep.java new file mode 100644 index 0000000..dded4be --- /dev/null +++ b/src/net/minecraft/src/BlockStep.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockStep extends BlockHalfSlab { + public static final String[] blockStepTypes = new String[]{"stone", "sand", "wood", "cobble", "brick", "smoothStoneBrick", "netherBrick", "quartz"}; + private Icon theIcon; + + public BlockStep(int var1, boolean var2) { + super(var1, var2, Material.rock); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public Icon getIcon(int var1, int var2) { + int var3 = var2 & 7; + if(this.isDoubleSlab && (var2 & 8) != 0) { + var1 = 1; + } + + return var3 == 0 ? (var1 != 1 && var1 != 0 ? this.theIcon : this.blockIcon) : (var3 == 1 ? Block.sandStone.getBlockTextureFromSide(var1) : (var3 == 2 ? Block.planks.getBlockTextureFromSide(var1) : (var3 == 3 ? Block.cobblestone.getBlockTextureFromSide(var1) : (var3 == 4 ? Block.brick.getBlockTextureFromSide(var1) : (var3 == 5 ? Block.stoneBrick.getIcon(var1, 0) : (var3 == 6 ? Block.netherBrick.getBlockTextureFromSide(1) : (var3 == 7 ? Block.blockNetherQuartz.getBlockTextureFromSide(var1) : this.blockIcon))))))); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("stoneslab_top"); + this.theIcon = var1.registerIcon("stoneslab_side"); + } + + public int idDropped(int var1, Random var2, int var3) { + return Block.stoneSingleSlab.blockID; + } + + protected ItemStack createStackedBlock(int var1) { + return new ItemStack(Block.stoneSingleSlab.blockID, 2, var1 & 7); + } + + public String getFullSlabName(int var1) { + if(var1 < 0 || var1 >= blockStepTypes.length) { + var1 = 0; + } + + return super.getUnlocalizedName() + "." + blockStepTypes[var1]; + } + + public void getSubBlocks(int var1, CreativeTabs var2, List var3) { + if(var1 != Block.stoneDoubleSlab.blockID) { + for(int var4 = 0; var4 <= 7; ++var4) { + if(var4 != 2) { + var3.add(new ItemStack(var1, 1, var4)); + } + } + + } + } +} diff --git a/src/net/minecraft/src/BlockStone.java b/src/net/minecraft/src/BlockStone.java new file mode 100644 index 0000000..c05fd57 --- /dev/null +++ b/src/net/minecraft/src/BlockStone.java @@ -0,0 +1,14 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockStone extends Block { + public BlockStone(int var1) { + super(var1, Material.rock); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public int idDropped(int var1, Random var2, int var3) { + return Block.cobblestone.blockID; + } +} diff --git a/src/net/minecraft/src/BlockStoneBrick.java b/src/net/minecraft/src/BlockStoneBrick.java new file mode 100644 index 0000000..65b2e52 --- /dev/null +++ b/src/net/minecraft/src/BlockStoneBrick.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +import java.util.List; + +public class BlockStoneBrick extends Block { + public static final String[] STONE_BRICK_TYPES = new String[]{"default", "mossy", "cracked", "chiseled"}; + public static final String[] field_94407_b = new String[]{"stonebricksmooth", "stonebricksmooth_mossy", "stonebricksmooth_cracked", "stonebricksmooth_carved"}; + private Icon[] field_94408_c; + + public BlockStoneBrick(int var1) { + super(var1, Material.rock); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public Icon getIcon(int var1, int var2) { + if(var2 < 0 || var2 >= field_94407_b.length) { + var2 = 0; + } + + return this.field_94408_c[var2]; + } + + public int damageDropped(int var1) { + return var1; + } + + public void getSubBlocks(int var1, CreativeTabs var2, List var3) { + for(int var4 = 0; var4 < 4; ++var4) { + var3.add(new ItemStack(var1, 1, var4)); + } + + } + + public void registerIcons(IconRegister var1) { + this.field_94408_c = new Icon[field_94407_b.length]; + + for(int var2 = 0; var2 < this.field_94408_c.length; ++var2) { + this.field_94408_c[var2] = var1.registerIcon(field_94407_b[var2]); + } + + } +} diff --git a/src/net/minecraft/src/BlockTNT.java b/src/net/minecraft/src/BlockTNT.java new file mode 100644 index 0000000..0de91b1 --- /dev/null +++ b/src/net/minecraft/src/BlockTNT.java @@ -0,0 +1,92 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockTNT extends Block { + private Icon field_94393_a; + private Icon field_94392_b; + + public BlockTNT(int var1) { + super(var1, Material.tnt); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + + public Icon getIcon(int var1, int var2) { + return var1 == 0 ? this.field_94392_b : (var1 == 1 ? this.field_94393_a : this.blockIcon); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + if(var1.isBlockIndirectlyGettingPowered(var2, var3, var4)) { + this.onBlockDestroyedByPlayer(var1, var2, var3, var4, 1); + var1.setBlockToAir(var2, var3, var4); + } + + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(var1.isBlockIndirectlyGettingPowered(var2, var3, var4)) { + this.onBlockDestroyedByPlayer(var1, var2, var3, var4, 1); + var1.setBlockToAir(var2, var3, var4); + } + + } + + public int quantityDropped(Random var1) { + return 1; + } + + public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4, Explosion var5) { + if(!var1.isRemote) { + EntityTNTPrimed var6 = new EntityTNTPrimed(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), var5.func_94613_c()); + var6.fuse = var1.rand.nextInt(var6.fuse / 4) + var6.fuse / 8; + var1.spawnEntityInWorld(var6); + } + } + + public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) { + this.func_94391_a(var1, var2, var3, var4, var5, (EntityLiving)null); + } + + public void func_94391_a(World var1, int var2, int var3, int var4, int var5, EntityLiving var6) { + if(!var1.isRemote) { + if((var5 & 1) == 1) { + EntityTNTPrimed var7 = new EntityTNTPrimed(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), var6); + var1.spawnEntityInWorld(var7); + var1.playSoundAtEntity(var7, "random.fuse", 1.0F, 1.0F); + } + + } + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(var5.getCurrentEquippedItem() != null && var5.getCurrentEquippedItem().itemID == Item.flintAndSteel.itemID) { + this.func_94391_a(var1, var2, var3, var4, 1, var5); + var1.setBlockToAir(var2, var3, var4); + return true; + } else { + return super.onBlockActivated(var1, var2, var3, var4, var5, var6, var7, var8, var9); + } + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + if(var5 instanceof EntityArrow && !var1.isRemote) { + EntityArrow var6 = (EntityArrow)var5; + if(var6.isBurning()) { + this.func_94391_a(var1, var2, var3, var4, 1, var6.shootingEntity instanceof EntityLiving ? (EntityLiving)var6.shootingEntity : null); + var1.setBlockToAir(var2, var3, var4); + } + } + + } + + public boolean canDropFromExplosion(Explosion var1) { + return false; + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("tnt_side"); + this.field_94393_a = var1.registerIcon("tnt_top"); + this.field_94392_b = var1.registerIcon("tnt_bottom"); + } +} diff --git a/src/net/minecraft/src/BlockTallGrass.java b/src/net/minecraft/src/BlockTallGrass.java new file mode 100644 index 0000000..8942139 --- /dev/null +++ b/src/net/minecraft/src/BlockTallGrass.java @@ -0,0 +1,76 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockTallGrass extends BlockFlower { + private static final String[] grassTypes = new String[]{"deadbush", "tallgrass", "fern"}; + private Icon[] iconArray; + + protected BlockTallGrass(int var1) { + super(var1, Material.vine); + float var2 = 0.4F; + this.setBlockBounds(0.5F - var2, 0.0F, 0.5F - var2, 0.5F + var2, 0.8F, 0.5F + var2); + } + + public Icon getIcon(int var1, int var2) { + if(var2 >= this.iconArray.length) { + var2 = 0; + } + + return this.iconArray[var2]; + } + + public int getBlockColor() { + double var1 = 0.5D; + double var3 = 1.0D; + return ColorizerGrass.getGrassColor(var1, var3); + } + + public int getRenderColor(int var1) { + return var1 == 0 ? 16777215 : ColorizerFoliage.getFoliageColorBasic(); + } + + public int colorMultiplier(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + return var5 == 0 ? 16777215 : var1.getBiomeGenForCoords(var2, var4).getBiomeGrassColor(); + } + + public int idDropped(int var1, Random var2, int var3) { + return var2.nextInt(8) == 0 ? Item.seeds.itemID : -1; + } + + public int quantityDroppedWithBonus(int var1, Random var2) { + return 1 + var2.nextInt(var1 * 2 + 1); + } + + public void harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) { + if(!var1.isRemote && var2.getCurrentEquippedItem() != null && var2.getCurrentEquippedItem().itemID == Item.shears.itemID) { + var2.addStat(StatList.mineBlockStatArray[this.blockID], 1); + this.dropBlockAsItem_do(var1, var3, var4, var5, new ItemStack(Block.tallGrass, 1, var6)); + } else { + super.harvestBlock(var1, var2, var3, var4, var5, var6); + } + + } + + public int getDamageValue(World var1, int var2, int var3, int var4) { + return var1.getBlockMetadata(var2, var3, var4); + } + + public void getSubBlocks(int var1, CreativeTabs var2, List var3) { + for(int var4 = 1; var4 < 3; ++var4) { + var3.add(new ItemStack(var1, 1, var4)); + } + + } + + public void registerIcons(IconRegister var1) { + this.iconArray = new Icon[grassTypes.length]; + + for(int var2 = 0; var2 < this.iconArray.length; ++var2) { + this.iconArray[var2] = var1.registerIcon(grassTypes[var2]); + } + + } +} diff --git a/src/net/minecraft/src/BlockTorch.java b/src/net/minecraft/src/BlockTorch.java new file mode 100644 index 0000000..72bafcf --- /dev/null +++ b/src/net/minecraft/src/BlockTorch.java @@ -0,0 +1,189 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockTorch extends Block { + protected BlockTorch(int var1) { + super(var1, Material.circuits); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 2; + } + + private boolean canPlaceTorchOn(World var1, int var2, int var3, int var4) { + if(var1.doesBlockHaveSolidTopSurface(var2, var3, var4)) { + return true; + } else { + int var5 = var1.getBlockId(var2, var3, var4); + return var5 == Block.fence.blockID || var5 == Block.netherFence.blockID || var5 == Block.glass.blockID || var5 == Block.cobblestoneWall.blockID; + } + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCubeDefault(var2 - 1, var3, var4, true) ? true : (var1.isBlockNormalCubeDefault(var2 + 1, var3, var4, true) ? true : (var1.isBlockNormalCubeDefault(var2, var3, var4 - 1, true) ? true : (var1.isBlockNormalCubeDefault(var2, var3, var4 + 1, true) ? true : this.canPlaceTorchOn(var1, var2, var3 - 1, var4)))); + } + + public int onBlockPlaced(World var1, int var2, int var3, int var4, int var5, float var6, float var7, float var8, int var9) { + int var10 = var9; + if(var5 == 1 && this.canPlaceTorchOn(var1, var2, var3 - 1, var4)) { + var10 = 5; + } + + if(var5 == 2 && var1.isBlockNormalCubeDefault(var2, var3, var4 + 1, true)) { + var10 = 4; + } + + if(var5 == 3 && var1.isBlockNormalCubeDefault(var2, var3, var4 - 1, true)) { + var10 = 3; + } + + if(var5 == 4 && var1.isBlockNormalCubeDefault(var2 + 1, var3, var4, true)) { + var10 = 2; + } + + if(var5 == 5 && var1.isBlockNormalCubeDefault(var2 - 1, var3, var4, true)) { + var10 = 1; + } + + return var10; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + super.updateTick(var1, var2, var3, var4, var5); + if(var1.getBlockMetadata(var2, var3, var4) == 0) { + this.onBlockAdded(var1, var2, var3, var4); + } + + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(var1.getBlockMetadata(var2, var3, var4) == 0) { + if(var1.isBlockNormalCubeDefault(var2 - 1, var3, var4, true)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 1, 2); + } else if(var1.isBlockNormalCubeDefault(var2 + 1, var3, var4, true)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 2, 2); + } else if(var1.isBlockNormalCubeDefault(var2, var3, var4 - 1, true)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 3, 2); + } else if(var1.isBlockNormalCubeDefault(var2, var3, var4 + 1, true)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 4, 2); + } else if(this.canPlaceTorchOn(var1, var2, var3 - 1, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 5, 2); + } + } + + this.dropTorchIfCantStay(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + this.func_94397_d(var1, var2, var3, var4, var5); + } + + protected boolean func_94397_d(World var1, int var2, int var3, int var4, int var5) { + if(this.dropTorchIfCantStay(var1, var2, var3, var4)) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + boolean var7 = false; + if(!var1.isBlockNormalCubeDefault(var2 - 1, var3, var4, true) && var6 == 1) { + var7 = true; + } + + if(!var1.isBlockNormalCubeDefault(var2 + 1, var3, var4, true) && var6 == 2) { + var7 = true; + } + + if(!var1.isBlockNormalCubeDefault(var2, var3, var4 - 1, true) && var6 == 3) { + var7 = true; + } + + if(!var1.isBlockNormalCubeDefault(var2, var3, var4 + 1, true) && var6 == 4) { + var7 = true; + } + + if(!this.canPlaceTorchOn(var1, var2, var3 - 1, var4) && var6 == 5) { + var7 = true; + } + + if(var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + return true; + } else { + return false; + } + } else { + return true; + } + } + + protected boolean dropTorchIfCantStay(World var1, int var2, int var3, int var4) { + if(!this.canPlaceBlockAt(var1, var2, var3, var4)) { + if(var1.getBlockId(var2, var3, var4) == this.blockID) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + } + + return false; + } else { + return true; + } + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3 var5, Vec3 var6) { + int var7 = var1.getBlockMetadata(var2, var3, var4) & 7; + float var8 = 0.15F; + if(var7 == 1) { + this.setBlockBounds(0.0F, 0.2F, 0.5F - var8, var8 * 2.0F, 0.8F, 0.5F + var8); + } else if(var7 == 2) { + this.setBlockBounds(1.0F - var8 * 2.0F, 0.2F, 0.5F - var8, 1.0F, 0.8F, 0.5F + var8); + } else if(var7 == 3) { + this.setBlockBounds(0.5F - var8, 0.2F, 0.0F, 0.5F + var8, 0.8F, var8 * 2.0F); + } else if(var7 == 4) { + this.setBlockBounds(0.5F - var8, 0.2F, 1.0F - var8 * 2.0F, 0.5F + var8, 0.8F, 1.0F); + } else { + var8 = 0.1F; + this.setBlockBounds(0.5F - var8, 0.0F, 0.5F - var8, 0.5F + var8, 0.6F, 0.5F + var8); + } + + return super.collisionRayTrace(var1, var2, var3, var4, var5, var6); + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + double var7 = (double)((float)var2 + 0.5F); + double var9 = (double)((float)var3 + 0.7F); + double var11 = (double)((float)var4 + 0.5F); + double var13 = (double)0.22F; + double var15 = (double)0.27F; + if(var6 == 1) { + var1.spawnParticle("smoke", var7 - var15, var9 + var13, var11, 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", var7 - var15, var9 + var13, var11, 0.0D, 0.0D, 0.0D); + } else if(var6 == 2) { + var1.spawnParticle("smoke", var7 + var15, var9 + var13, var11, 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", var7 + var15, var9 + var13, var11, 0.0D, 0.0D, 0.0D); + } else if(var6 == 3) { + var1.spawnParticle("smoke", var7, var9 + var13, var11 - var15, 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", var7, var9 + var13, var11 - var15, 0.0D, 0.0D, 0.0D); + } else if(var6 == 4) { + var1.spawnParticle("smoke", var7, var9 + var13, var11 + var15, 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", var7, var9 + var13, var11 + var15, 0.0D, 0.0D, 0.0D); + } else { + var1.spawnParticle("smoke", var7, var9, var11, 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", var7, var9, var11, 0.0D, 0.0D, 0.0D); + } + + } +} diff --git a/src/net/minecraft/src/BlockTrapDoor.java b/src/net/minecraft/src/BlockTrapDoor.java new file mode 100644 index 0000000..093b01a --- /dev/null +++ b/src/net/minecraft/src/BlockTrapDoor.java @@ -0,0 +1,200 @@ +package net.minecraft.src; + +public class BlockTrapDoor extends Block { + protected BlockTrapDoor(int var1, Material var2) { + super(var1, var2); + float var3 = 0.5F; + float var4 = 1.0F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, var4, 0.5F + var3); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean getBlocksMovement(IBlockAccess var1, int var2, int var3, int var4) { + return !isTrapdoorOpen(var1.getBlockMetadata(var2, var3, var4)); + } + + public int getRenderType() { + return 0; + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.getSelectedBoundingBoxFromPool(var1, var2, var3, var4); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + this.setBlockBoundsForBlockRender(var1.getBlockMetadata(var2, var3, var4)); + } + + public void setBlockBoundsForItemRender() { + float var1 = 3.0F / 16.0F; + this.setBlockBounds(0.0F, 0.5F - var1 / 2.0F, 0.0F, 1.0F, 0.5F + var1 / 2.0F, 1.0F); + } + + public void setBlockBoundsForBlockRender(int var1) { + float var2 = 3.0F / 16.0F; + if((var1 & 8) != 0) { + this.setBlockBounds(0.0F, 1.0F - var2, 0.0F, 1.0F, 1.0F, 1.0F); + } else { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, var2, 1.0F); + } + + if(isTrapdoorOpen(var1)) { + if((var1 & 3) == 0) { + this.setBlockBounds(0.0F, 0.0F, 1.0F - var2, 1.0F, 1.0F, 1.0F); + } + + if((var1 & 3) == 1) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var2); + } + + if((var1 & 3) == 2) { + this.setBlockBounds(1.0F - var2, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + if((var1 & 3) == 3) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, var2, 1.0F, 1.0F); + } + } + + } + + public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(this.blockMaterial == Material.iron) { + return true; + } else { + int var10 = var1.getBlockMetadata(var2, var3, var4); + var1.setBlockMetadataWithNotify(var2, var3, var4, var10 ^ 4, 2); + var1.playAuxSFXAtEntity(var5, 1003, var2, var3, var4, 0); + return true; + } + } + + public void onPoweredBlockChange(World var1, int var2, int var3, int var4, boolean var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + boolean var7 = (var6 & 4) > 0; + if(var7 != var5) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 ^ 4, 2); + var1.playAuxSFXAtEntity((EntityPlayer)null, 1003, var2, var3, var4, 0); + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isRemote) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = var2; + int var8 = var4; + if((var6 & 3) == 0) { + var8 = var4 + 1; + } + + if((var6 & 3) == 1) { + --var8; + } + + if((var6 & 3) == 2) { + var7 = var2 + 1; + } + + if((var6 & 3) == 3) { + --var7; + } + + if(!isValidSupportBlock(var1.getBlockId(var7, var3, var8))) { + var1.setBlockToAir(var2, var3, var4); + this.dropBlockAsItem(var1, var2, var3, var4, var6, 0); + } + + boolean var9 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4); + if(var9 || var5 > 0 && Block.blocksList[var5].canProvidePower()) { + this.onPoweredBlockChange(var1, var2, var3, var4, var9); + } + + } + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3 var5, Vec3 var6) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.collisionRayTrace(var1, var2, var3, var4, var5, var6); + } + + public int onBlockPlaced(World var1, int var2, int var3, int var4, int var5, float var6, float var7, float var8, int var9) { + int var10 = 0; + if(var5 == 2) { + var10 = 0; + } + + if(var5 == 3) { + var10 = 1; + } + + if(var5 == 4) { + var10 = 2; + } + + if(var5 == 5) { + var10 = 3; + } + + if(var5 != 1 && var5 != 0 && var7 > 0.5F) { + var10 |= 8; + } + + return var10; + } + + public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) { + if(var5 == 0) { + return false; + } else if(var5 == 1) { + return false; + } else { + if(var5 == 2) { + ++var4; + } + + if(var5 == 3) { + --var4; + } + + if(var5 == 4) { + ++var2; + } + + if(var5 == 5) { + --var2; + } + + return isValidSupportBlock(var1.getBlockId(var2, var3, var4)); + } + } + + public static boolean isTrapdoorOpen(int var0) { + return (var0 & 4) != 0; + } + + private static boolean isValidSupportBlock(int var0) { + if(var0 <= 0) { + return false; + } else { + Block var1 = Block.blocksList[var0]; + return var1 != null && var1.blockMaterial.isOpaque() && var1.renderAsNormalBlock() || var1 == Block.glowStone || var1 instanceof BlockHalfSlab || var1 instanceof BlockStairs; + } + } +} diff --git a/src/net/minecraft/src/BlockTripWire.java b/src/net/minecraft/src/BlockTripWire.java new file mode 100644 index 0000000..cefb33b --- /dev/null +++ b/src/net/minecraft/src/BlockTripWire.java @@ -0,0 +1,182 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +public class BlockTripWire extends Block { + public BlockTripWire(int var1) { + super(var1, Material.circuits); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.15625F, 1.0F); + this.setTickRandomly(true); + } + + public int tickRate(World var1) { + return 10; + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderBlockPass() { + return 1; + } + + public int getRenderType() { + return 30; + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.silk.itemID; + } + + public int idPicked(World var1, int var2, int var3, int var4) { + return Item.silk.itemID; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + boolean var7 = (var6 & 2) == 2; + boolean var8 = !var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4); + if(var7 != var8) { + this.dropBlockAsItem(var1, var2, var3, var4, var6, 0); + var1.setBlockToAir(var2, var3, var4); + } + + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + boolean var6 = (var5 & 4) == 4; + boolean var7 = (var5 & 2) == 2; + if(!var7) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.09375F, 1.0F); + } else if(!var6) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + } else { + this.setBlockBounds(0.0F, 1.0F / 16.0F, 0.0F, 1.0F, 0.15625F, 1.0F); + } + + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + int var5 = var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) ? 0 : 2; + var1.setBlockMetadataWithNotify(var2, var3, var4, var5, 3); + this.func_72149_e(var1, var2, var3, var4, var5); + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + this.func_72149_e(var1, var2, var3, var4, var6 | 1); + } + + public void onBlockHarvested(World var1, int var2, int var3, int var4, int var5, EntityPlayer var6) { + if(!var1.isRemote) { + if(var6.getCurrentEquippedItem() != null && var6.getCurrentEquippedItem().itemID == Item.shears.itemID) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var5 | 8, 4); + } + + } + } + + private void func_72149_e(World var1, int var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 2; ++var6) { + for(int var7 = 1; var7 < 42; ++var7) { + int var8 = var2 + Direction.offsetX[var6] * var7; + int var9 = var4 + Direction.offsetZ[var6] * var7; + int var10 = var1.getBlockId(var8, var3, var9); + if(var10 == Block.tripWireSource.blockID) { + int var11 = var1.getBlockMetadata(var8, var3, var9) & 3; + if(var11 == Direction.rotateOpposite[var6]) { + Block.tripWireSource.func_72143_a(var1, var8, var3, var9, var10, var1.getBlockMetadata(var8, var3, var9), true, var7, var5); + } + break; + } + + if(var10 != Block.tripWire.blockID) { + break; + } + } + } + + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + if(!var1.isRemote) { + if((var1.getBlockMetadata(var2, var3, var4) & 1) != 1) { + this.updateTripWireState(var1, var2, var3, var4); + } + } + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.isRemote) { + if((var1.getBlockMetadata(var2, var3, var4) & 1) == 1) { + this.updateTripWireState(var1, var2, var3, var4); + } + } + } + + private void updateTripWireState(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + boolean var6 = (var5 & 1) == 1; + boolean var7 = false; + List var8 = var1.getEntitiesWithinAABBExcludingEntity((Entity)null, AxisAlignedBB.getAABBPool().getAABB((double)var2 + this.minX, (double)var3 + this.minY, (double)var4 + this.minZ, (double)var2 + this.maxX, (double)var3 + this.maxY, (double)var4 + this.maxZ)); + if(!var8.isEmpty()) { + Iterator var9 = var8.iterator(); + + while(var9.hasNext()) { + Entity var10 = (Entity)var9.next(); + if(!var10.doesEntityNotTriggerPressurePlate()) { + var7 = true; + break; + } + } + } + + if(var7 && !var6) { + var5 |= 1; + } + + if(!var7 && var6) { + var5 &= -2; + } + + if(var7 != var6) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var5, 3); + this.func_72149_e(var1, var2, var3, var4, var5); + } + + if(var7) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID, this.tickRate(var1)); + } + + } + + public static boolean func_72148_a(IBlockAccess var0, int var1, int var2, int var3, int var4, int var5) { + int var6 = var1 + Direction.offsetX[var5]; + int var8 = var3 + Direction.offsetZ[var5]; + int var9 = var0.getBlockId(var6, var2, var8); + boolean var10 = (var4 & 2) == 2; + int var11; + if(var9 == Block.tripWireSource.blockID) { + var11 = var0.getBlockMetadata(var6, var2, var8); + int var13 = var11 & 3; + return var13 == Direction.rotateOpposite[var5]; + } else if(var9 == Block.tripWire.blockID) { + var11 = var0.getBlockMetadata(var6, var2, var8); + boolean var12 = (var11 & 2) == 2; + return var10 == var12; + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/BlockTripWireSource.java b/src/net/minecraft/src/BlockTripWireSource.java new file mode 100644 index 0000000..571326d --- /dev/null +++ b/src/net/minecraft/src/BlockTripWireSource.java @@ -0,0 +1,280 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockTripWireSource extends Block { + public BlockTripWireSource(int var1) { + super(var1, Material.circuits); + this.setCreativeTab(CreativeTabs.tabRedstone); + this.setTickRandomly(true); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 29; + } + + public int tickRate(World var1) { + return 10; + } + + public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) { + return var5 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1) ? true : (var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : (var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4))); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.isBlockNormalCube(var2 - 1, var3, var4) ? true : (var1.isBlockNormalCube(var2 + 1, var3, var4) ? true : (var1.isBlockNormalCube(var2, var3, var4 - 1) ? true : var1.isBlockNormalCube(var2, var3, var4 + 1))); + } + + public int onBlockPlaced(World var1, int var2, int var3, int var4, int var5, float var6, float var7, float var8, int var9) { + byte var10 = 0; + if(var5 == 2 && var1.isBlockNormalCubeDefault(var2, var3, var4 + 1, true)) { + var10 = 2; + } + + if(var5 == 3 && var1.isBlockNormalCubeDefault(var2, var3, var4 - 1, true)) { + var10 = 0; + } + + if(var5 == 4 && var1.isBlockNormalCubeDefault(var2 + 1, var3, var4, true)) { + var10 = 1; + } + + if(var5 == 5 && var1.isBlockNormalCubeDefault(var2 - 1, var3, var4, true)) { + var10 = 3; + } + + return var10; + } + + public void onPostBlockPlaced(World var1, int var2, int var3, int var4, int var5) { + this.func_72143_a(var1, var2, var3, var4, this.blockID, var5, false, -1, 0); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(var5 != this.blockID) { + if(this.func_72144_l(var1, var2, var3, var4)) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = var6 & 3; + boolean var8 = false; + if(!var1.isBlockNormalCube(var2 - 1, var3, var4) && var7 == 3) { + var8 = true; + } + + if(!var1.isBlockNormalCube(var2 + 1, var3, var4) && var7 == 1) { + var8 = true; + } + + if(!var1.isBlockNormalCube(var2, var3, var4 - 1) && var7 == 0) { + var8 = true; + } + + if(!var1.isBlockNormalCube(var2, var3, var4 + 1) && var7 == 2) { + var8 = true; + } + + if(var8) { + this.dropBlockAsItem(var1, var2, var3, var4, var6, 0); + var1.setBlockToAir(var2, var3, var4); + } + } + + } + } + + public void func_72143_a(World var1, int var2, int var3, int var4, int var5, int var6, boolean var7, int var8, int var9) { + int var10 = var6 & 3; + boolean var11 = (var6 & 4) == 4; + boolean var12 = (var6 & 8) == 8; + boolean var13 = var5 == Block.tripWireSource.blockID; + boolean var14 = false; + boolean var15 = !var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4); + int var16 = Direction.offsetX[var10]; + int var17 = Direction.offsetZ[var10]; + int var18 = 0; + int[] var19 = new int[42]; + + int var20; + int var21; + int var22; + int var23; + int var24; + for(var20 = 1; var20 < 42; ++var20) { + var21 = var2 + var16 * var20; + var22 = var4 + var17 * var20; + var23 = var1.getBlockId(var21, var3, var22); + if(var23 == Block.tripWireSource.blockID) { + var24 = var1.getBlockMetadata(var21, var3, var22); + if((var24 & 3) == Direction.rotateOpposite[var10]) { + var18 = var20; + } + break; + } + + if(var23 != Block.tripWire.blockID && var20 != var8) { + var19[var20] = -1; + var13 = false; + } else { + var24 = var20 == var8 ? var9 : var1.getBlockMetadata(var21, var3, var22); + boolean var25 = (var24 & 8) != 8; + boolean var26 = (var24 & 1) == 1; + boolean var27 = (var24 & 2) == 2; + var13 &= var27 == var15; + var14 |= var25 && var26; + var19[var20] = var24; + if(var20 == var8) { + var1.scheduleBlockUpdate(var2, var3, var4, var5, this.tickRate(var1)); + var13 &= var25; + } + } + } + + var13 &= var18 > 1; + var14 &= var13; + var20 = (var13 ? 4 : 0) | (var14 ? 8 : 0); + var6 = var10 | var20; + if(var18 > 0) { + var21 = var2 + var16 * var18; + var22 = var4 + var17 * var18; + var23 = Direction.rotateOpposite[var10]; + var1.setBlockMetadataWithNotify(var21, var3, var22, var23 | var20, 3); + this.notifyNeighborOfChange(var1, var21, var3, var22, var23); + this.playSoundEffect(var1, var21, var3, var22, var13, var14, var11, var12); + } + + this.playSoundEffect(var1, var2, var3, var4, var13, var14, var11, var12); + if(var5 > 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6, 3); + if(var7) { + this.notifyNeighborOfChange(var1, var2, var3, var4, var10); + } + } + + if(var11 != var13) { + for(var21 = 1; var21 < var18; ++var21) { + var22 = var2 + var16 * var21; + var23 = var4 + var17 * var21; + var24 = var19[var21]; + if(var24 >= 0) { + if(var13) { + var24 |= 4; + } else { + var24 &= -5; + } + + var1.setBlockMetadataWithNotify(var22, var3, var23, var24, 3); + } + } + } + + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + this.func_72143_a(var1, var2, var3, var4, this.blockID, var1.getBlockMetadata(var2, var3, var4), true, -1, 0); + } + + private void playSoundEffect(World var1, int var2, int var3, int var4, boolean var5, boolean var6, boolean var7, boolean var8) { + if(var6 && !var8) { + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.1D, (double)var4 + 0.5D, "random.click", 0.4F, 0.6F); + } else if(!var6 && var8) { + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.1D, (double)var4 + 0.5D, "random.click", 0.4F, 0.5F); + } else if(var5 && !var7) { + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.1D, (double)var4 + 0.5D, "random.click", 0.4F, 0.7F); + } else if(!var5 && var7) { + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.1D, (double)var4 + 0.5D, "random.bowhit", 0.4F, 1.2F / (var1.rand.nextFloat() * 0.2F + 0.9F)); + } + + } + + private void notifyNeighborOfChange(World var1, int var2, int var3, int var4, int var5) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + if(var5 == 3) { + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + } else if(var5 == 1) { + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + } else if(var5 == 0) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + } else if(var5 == 2) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + } + + } + + private boolean func_72144_l(World var1, int var2, int var3, int var4) { + if(!this.canPlaceBlockAt(var1, var2, var3, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + return false; + } else { + return true; + } + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4) & 3; + float var6 = 3.0F / 16.0F; + if(var5 == 3) { + this.setBlockBounds(0.0F, 0.2F, 0.5F - var6, var6 * 2.0F, 0.8F, 0.5F + var6); + } else if(var5 == 1) { + this.setBlockBounds(1.0F - var6 * 2.0F, 0.2F, 0.5F - var6, 1.0F, 0.8F, 0.5F + var6); + } else if(var5 == 0) { + this.setBlockBounds(0.5F - var6, 0.2F, 0.0F, 0.5F + var6, 0.8F, var6 * 2.0F); + } else if(var5 == 2) { + this.setBlockBounds(0.5F - var6, 0.2F, 1.0F - var6 * 2.0F, 0.5F + var6, 0.8F, 1.0F); + } + + } + + public void breakBlock(World var1, int var2, int var3, int var4, int var5, int var6) { + boolean var7 = (var6 & 4) == 4; + boolean var8 = (var6 & 8) == 8; + if(var7 || var8) { + this.func_72143_a(var1, var2, var3, var4, 0, var6, false, -1, 0); + } + + if(var8) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + int var9 = var6 & 3; + if(var9 == 3) { + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + } else if(var9 == 1) { + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + } else if(var9 == 0) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + } else if(var9 == 2) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + } + } + + super.breakBlock(var1, var2, var3, var4, var5, var6); + } + + public int isProvidingWeakPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return (var1.getBlockMetadata(var2, var3, var4) & 8) == 8 ? 15 : 0; + } + + public int isProvidingStrongPower(IBlockAccess var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) != 8) { + return 0; + } else { + int var7 = var6 & 3; + return var7 == 2 && var5 == 2 ? 15 : (var7 == 0 && var5 == 3 ? 15 : (var7 == 1 && var5 == 4 ? 15 : (var7 == 3 && var5 == 5 ? 15 : 0))); + } + } + + public boolean canProvidePower() { + return true; + } +} diff --git a/src/net/minecraft/src/BlockVine.java b/src/net/minecraft/src/BlockVine.java new file mode 100644 index 0000000..9b77d3c --- /dev/null +++ b/src/net/minecraft/src/BlockVine.java @@ -0,0 +1,291 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockVine extends Block { + public BlockVine(int var1) { + super(var1, Material.vine); + this.setTickRandomly(true); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public void setBlockBoundsForItemRender() { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public int getRenderType() { + return 20; + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + float var7 = 1.0F; + float var8 = 1.0F; + float var9 = 1.0F; + float var10 = 0.0F; + float var11 = 0.0F; + float var12 = 0.0F; + boolean var13 = var6 > 0; + if((var6 & 2) != 0) { + var10 = Math.max(var10, 1.0F / 16.0F); + var7 = 0.0F; + var8 = 0.0F; + var11 = 1.0F; + var9 = 0.0F; + var12 = 1.0F; + var13 = true; + } + + if((var6 & 8) != 0) { + var7 = Math.min(var7, 15.0F / 16.0F); + var10 = 1.0F; + var8 = 0.0F; + var11 = 1.0F; + var9 = 0.0F; + var12 = 1.0F; + var13 = true; + } + + if((var6 & 4) != 0) { + var12 = Math.max(var12, 1.0F / 16.0F); + var9 = 0.0F; + var7 = 0.0F; + var10 = 1.0F; + var8 = 0.0F; + var11 = 1.0F; + var13 = true; + } + + if((var6 & 1) != 0) { + var9 = Math.min(var9, 15.0F / 16.0F); + var12 = 1.0F; + var7 = 0.0F; + var10 = 1.0F; + var8 = 0.0F; + var11 = 1.0F; + var13 = true; + } + + if(!var13 && this.canBePlacedOn(var1.getBlockId(var2, var3 + 1, var4))) { + var8 = Math.min(var8, 15.0F / 16.0F); + var11 = 1.0F; + var7 = 0.0F; + var10 = 1.0F; + var9 = 0.0F; + var12 = 1.0F; + } + + this.setBlockBounds(var7, var8, var9, var10, var11, var12); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean canPlaceBlockOnSide(World var1, int var2, int var3, int var4, int var5) { + switch(var5) { + case 1: + return this.canBePlacedOn(var1.getBlockId(var2, var3 + 1, var4)); + case 2: + return this.canBePlacedOn(var1.getBlockId(var2, var3, var4 + 1)); + case 3: + return this.canBePlacedOn(var1.getBlockId(var2, var3, var4 - 1)); + case 4: + return this.canBePlacedOn(var1.getBlockId(var2 + 1, var3, var4)); + case 5: + return this.canBePlacedOn(var1.getBlockId(var2 - 1, var3, var4)); + default: + return false; + } + } + + private boolean canBePlacedOn(int var1) { + if(var1 == 0) { + return false; + } else { + Block var2 = Block.blocksList[var1]; + return var2.renderAsNormalBlock() && var2.blockMaterial.blocksMovement(); + } + } + + private boolean canVineStay(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + int var6 = var5; + if(var5 > 0) { + for(int var7 = 0; var7 <= 3; ++var7) { + int var8 = 1 << var7; + if((var5 & var8) != 0 && !this.canBePlacedOn(var1.getBlockId(var2 + Direction.offsetX[var7], var3, var4 + Direction.offsetZ[var7])) && (var1.getBlockId(var2, var3 + 1, var4) != this.blockID || (var1.getBlockMetadata(var2, var3 + 1, var4) & var8) == 0)) { + var6 &= ~var8; + } + } + } + + if(var6 == 0 && !this.canBePlacedOn(var1.getBlockId(var2, var3 + 1, var4))) { + return false; + } else { + if(var6 != var5) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6, 2); + } + + return true; + } + } + + public int getBlockColor() { + return ColorizerFoliage.getFoliageColorBasic(); + } + + public int getRenderColor(int var1) { + return ColorizerFoliage.getFoliageColorBasic(); + } + + public int colorMultiplier(IBlockAccess var1, int var2, int var3, int var4) { + return var1.getBiomeGenForCoords(var2, var4).getBiomeFoliageColor(); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isRemote && !this.canVineStay(var1, var2, var3, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4), 0); + var1.setBlockToAir(var2, var3, var4); + } + + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.isRemote && var1.rand.nextInt(4) == 0) { + byte var6 = 4; + int var7 = 5; + boolean var8 = false; + + int var9; + int var10; + int var11; + label141: + for(var9 = var2 - var6; var9 <= var2 + var6; ++var9) { + for(var10 = var4 - var6; var10 <= var4 + var6; ++var10) { + for(var11 = var3 - 1; var11 <= var3 + 1; ++var11) { + if(var1.getBlockId(var9, var11, var10) == this.blockID) { + --var7; + if(var7 <= 0) { + var8 = true; + break label141; + } + } + } + } + } + + var9 = var1.getBlockMetadata(var2, var3, var4); + var10 = var1.rand.nextInt(6); + var11 = Direction.facingToDirection[var10]; + int var12; + int var13; + if(var10 == 1 && var3 < 255 && var1.isAirBlock(var2, var3 + 1, var4)) { + if(var8) { + return; + } + + var12 = var1.rand.nextInt(16) & var9; + if(var12 > 0) { + for(var13 = 0; var13 <= 3; ++var13) { + if(!this.canBePlacedOn(var1.getBlockId(var2 + Direction.offsetX[var13], var3 + 1, var4 + Direction.offsetZ[var13]))) { + var12 &= ~(1 << var13); + } + } + + if(var12 > 0) { + var1.setBlock(var2, var3 + 1, var4, this.blockID, var12, 2); + } + } + } else { + int var14; + if(var10 >= 2 && var10 <= 5 && (var9 & 1 << var11) == 0) { + if(var8) { + return; + } + + var12 = var1.getBlockId(var2 + Direction.offsetX[var11], var3, var4 + Direction.offsetZ[var11]); + if(var12 != 0 && Block.blocksList[var12] != null) { + if(Block.blocksList[var12].blockMaterial.isOpaque() && Block.blocksList[var12].renderAsNormalBlock()) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var9 | 1 << var11, 2); + } + } else { + var13 = var11 + 1 & 3; + var14 = var11 + 3 & 3; + if((var9 & 1 << var13) != 0 && this.canBePlacedOn(var1.getBlockId(var2 + Direction.offsetX[var11] + Direction.offsetX[var13], var3, var4 + Direction.offsetZ[var11] + Direction.offsetZ[var13]))) { + var1.setBlock(var2 + Direction.offsetX[var11], var3, var4 + Direction.offsetZ[var11], this.blockID, 1 << var13, 2); + } else if((var9 & 1 << var14) != 0 && this.canBePlacedOn(var1.getBlockId(var2 + Direction.offsetX[var11] + Direction.offsetX[var14], var3, var4 + Direction.offsetZ[var11] + Direction.offsetZ[var14]))) { + var1.setBlock(var2 + Direction.offsetX[var11], var3, var4 + Direction.offsetZ[var11], this.blockID, 1 << var14, 2); + } else if((var9 & 1 << var13) != 0 && var1.isAirBlock(var2 + Direction.offsetX[var11] + Direction.offsetX[var13], var3, var4 + Direction.offsetZ[var11] + Direction.offsetZ[var13]) && this.canBePlacedOn(var1.getBlockId(var2 + Direction.offsetX[var13], var3, var4 + Direction.offsetZ[var13]))) { + var1.setBlock(var2 + Direction.offsetX[var11] + Direction.offsetX[var13], var3, var4 + Direction.offsetZ[var11] + Direction.offsetZ[var13], this.blockID, 1 << (var11 + 2 & 3), 2); + } else if((var9 & 1 << var14) != 0 && var1.isAirBlock(var2 + Direction.offsetX[var11] + Direction.offsetX[var14], var3, var4 + Direction.offsetZ[var11] + Direction.offsetZ[var14]) && this.canBePlacedOn(var1.getBlockId(var2 + Direction.offsetX[var14], var3, var4 + Direction.offsetZ[var14]))) { + var1.setBlock(var2 + Direction.offsetX[var11] + Direction.offsetX[var14], var3, var4 + Direction.offsetZ[var11] + Direction.offsetZ[var14], this.blockID, 1 << (var11 + 2 & 3), 2); + } else if(this.canBePlacedOn(var1.getBlockId(var2 + Direction.offsetX[var11], var3 + 1, var4 + Direction.offsetZ[var11]))) { + var1.setBlock(var2 + Direction.offsetX[var11], var3, var4 + Direction.offsetZ[var11], this.blockID, 0, 2); + } + } + } else if(var3 > 1) { + var12 = var1.getBlockId(var2, var3 - 1, var4); + if(var12 == 0) { + var13 = var1.rand.nextInt(16) & var9; + if(var13 > 0) { + var1.setBlock(var2, var3 - 1, var4, this.blockID, var13, 2); + } + } else if(var12 == this.blockID) { + var13 = var1.rand.nextInt(16) & var9; + var14 = var1.getBlockMetadata(var2, var3 - 1, var4); + if(var14 != (var14 | var13)) { + var1.setBlockMetadataWithNotify(var2, var3 - 1, var4, var14 | var13, 2); + } + } + } + } + } + + } + + public int onBlockPlaced(World var1, int var2, int var3, int var4, int var5, float var6, float var7, float var8, int var9) { + byte var10 = 0; + switch(var5) { + case 2: + var10 = 1; + break; + case 3: + var10 = 4; + break; + case 4: + var10 = 8; + break; + case 5: + var10 = 2; + } + + return var10 != 0 ? var10 : var9; + } + + public int idDropped(int var1, Random var2, int var3) { + return 0; + } + + public int quantityDropped(Random var1) { + return 0; + } + + public void harvestBlock(World var1, EntityPlayer var2, int var3, int var4, int var5, int var6) { + if(!var1.isRemote && var2.getCurrentEquippedItem() != null && var2.getCurrentEquippedItem().itemID == Item.shears.itemID) { + var2.addStat(StatList.mineBlockStatArray[this.blockID], 1); + this.dropBlockAsItem_do(var1, var3, var4, var5, new ItemStack(Block.vine, 1, 0)); + } else { + super.harvestBlock(var1, var2, var3, var4, var5, var6); + } + + } +} diff --git a/src/net/minecraft/src/BlockWall.java b/src/net/minecraft/src/BlockWall.java new file mode 100644 index 0000000..3cf9ef5 --- /dev/null +++ b/src/net/minecraft/src/BlockWall.java @@ -0,0 +1,106 @@ +package net.minecraft.src; + +import java.util.List; + +public class BlockWall extends Block { + public static final String[] types = new String[]{"normal", "mossy"}; + + public BlockWall(int var1, Block var2) { + super(var1, var2.blockMaterial); + this.setHardness(var2.blockHardness); + this.setResistance(var2.blockResistance / 3.0F); + this.setStepSound(var2.stepSound); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public Icon getIcon(int var1, int var2) { + return var2 == 1 ? Block.cobblestoneMossy.getBlockTextureFromSide(var1) : Block.cobblestone.getBlockTextureFromSide(var1); + } + + public int getRenderType() { + return 32; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean getBlocksMovement(IBlockAccess var1, int var2, int var3, int var4) { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + boolean var5 = this.canConnectWallTo(var1, var2, var3, var4 - 1); + boolean var6 = this.canConnectWallTo(var1, var2, var3, var4 + 1); + boolean var7 = this.canConnectWallTo(var1, var2 - 1, var3, var4); + boolean var8 = this.canConnectWallTo(var1, var2 + 1, var3, var4); + float var9 = 0.25F; + float var10 = 12.0F / 16.0F; + float var11 = 0.25F; + float var12 = 12.0F / 16.0F; + float var13 = 1.0F; + if(var5) { + var11 = 0.0F; + } + + if(var6) { + var12 = 1.0F; + } + + if(var7) { + var9 = 0.0F; + } + + if(var8) { + var10 = 1.0F; + } + + if(var5 && var6 && !var7 && !var8) { + var13 = 13.0F / 16.0F; + var9 = 5.0F / 16.0F; + var10 = 11.0F / 16.0F; + } else if(!var5 && !var6 && var7 && var8) { + var13 = 13.0F / 16.0F; + var11 = 5.0F / 16.0F; + var12 = 11.0F / 16.0F; + } + + this.setBlockBounds(var9, 0.0F, var11, var10, var13, var12); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + this.maxY = 1.5D; + return super.getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + } + + public boolean canConnectWallTo(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3, var4); + if(var5 != this.blockID && var5 != Block.fenceGate.blockID) { + Block var6 = Block.blocksList[var5]; + return var6 != null && var6.blockMaterial.isOpaque() && var6.renderAsNormalBlock() ? var6.blockMaterial != Material.pumpkin : false; + } else { + return true; + } + } + + public void getSubBlocks(int var1, CreativeTabs var2, List var3) { + var3.add(new ItemStack(var1, 1, 0)); + var3.add(new ItemStack(var1, 1, 1)); + } + + public int damageDropped(int var1) { + return var1; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return var5 == 0 ? super.shouldSideBeRendered(var1, var2, var3, var4, var5) : true; + } + + public void registerIcons(IconRegister var1) { + } +} diff --git a/src/net/minecraft/src/BlockWeb.java b/src/net/minecraft/src/BlockWeb.java new file mode 100644 index 0000000..6a6ffb2 --- /dev/null +++ b/src/net/minecraft/src/BlockWeb.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockWeb extends Block { + public BlockWeb(int var1) { + super(var1, Material.web); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + var5.setInWeb(); + } + + public boolean isOpaqueCube() { + return false; + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public int getRenderType() { + return 1; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int idDropped(int var1, Random var2, int var3) { + return Item.silk.itemID; + } + + protected boolean canSilkHarvest() { + return true; + } +} diff --git a/src/net/minecraft/src/BlockWood.java b/src/net/minecraft/src/BlockWood.java new file mode 100644 index 0000000..2d9cfc7 --- /dev/null +++ b/src/net/minecraft/src/BlockWood.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +import java.util.List; + +public class BlockWood extends Block { + public static final String[] woodType = new String[]{"oak", "spruce", "birch", "jungle"}; + public static final String[] woodTextureTypes = new String[]{"wood", "wood_spruce", "wood_birch", "wood_jungle"}; + private Icon[] iconArray; + + public BlockWood(int var1) { + super(var1, Material.wood); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public Icon getIcon(int var1, int var2) { + if(var2 < 0 || var2 >= this.iconArray.length) { + var2 = 0; + } + + return this.iconArray[var2]; + } + + public int damageDropped(int var1) { + return var1; + } + + public void getSubBlocks(int var1, CreativeTabs var2, List var3) { + var3.add(new ItemStack(var1, 1, 0)); + var3.add(new ItemStack(var1, 1, 1)); + var3.add(new ItemStack(var1, 1, 2)); + var3.add(new ItemStack(var1, 1, 3)); + } + + public void registerIcons(IconRegister var1) { + this.iconArray = new Icon[woodTextureTypes.length]; + + for(int var2 = 0; var2 < this.iconArray.length; ++var2) { + this.iconArray[var2] = var1.registerIcon(woodTextureTypes[var2]); + } + + } +} diff --git a/src/net/minecraft/src/BlockWoodSlab.java b/src/net/minecraft/src/BlockWoodSlab.java new file mode 100644 index 0000000..7b3b9a5 --- /dev/null +++ b/src/net/minecraft/src/BlockWoodSlab.java @@ -0,0 +1,45 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockWoodSlab extends BlockHalfSlab { + public static final String[] woodType = new String[]{"oak", "spruce", "birch", "jungle"}; + + public BlockWoodSlab(int var1, boolean var2) { + super(var1, var2, Material.wood); + this.setCreativeTab(CreativeTabs.tabBlock); + } + + public Icon getIcon(int var1, int var2) { + return Block.planks.getIcon(var1, var2 & 7); + } + + public int idDropped(int var1, Random var2, int var3) { + return Block.woodSingleSlab.blockID; + } + + protected ItemStack createStackedBlock(int var1) { + return new ItemStack(Block.woodSingleSlab.blockID, 2, var1 & 7); + } + + public String getFullSlabName(int var1) { + if(var1 < 0 || var1 >= woodType.length) { + var1 = 0; + } + + return super.getUnlocalizedName() + "." + woodType[var1]; + } + + public void getSubBlocks(int var1, CreativeTabs var2, List var3) { + if(var1 != Block.woodDoubleSlab.blockID) { + for(int var4 = 0; var4 < 4; ++var4) { + var3.add(new ItemStack(var1, 1, var4)); + } + + } + } + + public void registerIcons(IconRegister var1) { + } +} diff --git a/src/net/minecraft/src/BlockWorkbench.java b/src/net/minecraft/src/BlockWorkbench.java new file mode 100644 index 0000000..a840f18 --- /dev/null +++ b/src/net/minecraft/src/BlockWorkbench.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +public class BlockWorkbench extends Block { + private Icon workbenchIconTop; + private Icon workbenchIconFront; + + protected BlockWorkbench(int var1) { + super(var1, Material.wood); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public Icon getIcon(int var1, int var2) { + return var1 == 1 ? this.workbenchIconTop : (var1 == 0 ? Block.planks.getBlockTextureFromSide(var1) : (var1 != 2 && var1 != 4 ? this.blockIcon : this.workbenchIconFront)); + } + + public void registerIcons(IconRegister var1) { + this.blockIcon = var1.registerIcon("workbench_side"); + this.workbenchIconTop = var1.registerIcon("workbench_top"); + this.workbenchIconFront = var1.registerIcon("workbench_front"); + } + + public boolean onBlockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5, int var6, float var7, float var8, float var9) { + if(var1.isRemote) { + return true; + } else { + var5.displayGUIWorkbench(var2, var3, var4); + return true; + } + } +} diff --git a/src/net/minecraft/src/BossStatus.java b/src/net/minecraft/src/BossStatus.java new file mode 100644 index 0000000..54efc6b --- /dev/null +++ b/src/net/minecraft/src/BossStatus.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public final class BossStatus { + public static float healthScale; + public static int statusBarLength; + public static String bossName; + public static boolean field_82825_d; + + public static void func_82824_a(IBossDisplayData var0, boolean var1) { + healthScale = (float)var0.getBossHealth() / (float)var0.getMaxHealth(); + statusBarLength = 100; + bossName = var0.getEntityName(); + field_82825_d = var1; + } +} diff --git a/src/net/minecraft/src/CallableBlockDataValue.java b/src/net/minecraft/src/CallableBlockDataValue.java new file mode 100644 index 0000000..be6d778 --- /dev/null +++ b/src/net/minecraft/src/CallableBlockDataValue.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +final class CallableBlockDataValue implements Callable { + final int field_85063_a; + + CallableBlockDataValue(int var1) { + this.field_85063_a = var1; + } + + public String callBlockDataValue() { + if(this.field_85063_a < 0) { + return "Unknown? (Got " + this.field_85063_a + ")"; + } else { + String var1 = String.format("%4s", new Object[]{Integer.toBinaryString(this.field_85063_a)}).replace(" ", "0"); + return String.format("%1$d / 0x%1$X / 0b%2$s", new Object[]{Integer.valueOf(this.field_85063_a), var1}); + } + } + + public Object call() { + return this.callBlockDataValue(); + } +} diff --git a/src/net/minecraft/src/CallableBlockLocation.java b/src/net/minecraft/src/CallableBlockLocation.java new file mode 100644 index 0000000..9d22f63 --- /dev/null +++ b/src/net/minecraft/src/CallableBlockLocation.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +final class CallableBlockLocation implements Callable { + final int blockXCoord; + final int blockYCoord; + final int blockZCoord; + + CallableBlockLocation(int var1, int var2, int var3) { + this.blockXCoord = var1; + this.blockYCoord = var2; + this.blockZCoord = var3; + } + + public String callBlockLocationInfo() { + return CrashReportCategory.getLocationInfo(this.blockXCoord, this.blockYCoord, this.blockZCoord); + } + + public Object call() { + return this.callBlockLocationInfo(); + } +} diff --git a/src/net/minecraft/src/CallableBlockType.java b/src/net/minecraft/src/CallableBlockType.java new file mode 100644 index 0000000..eda5c57 --- /dev/null +++ b/src/net/minecraft/src/CallableBlockType.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +final class CallableBlockType implements Callable { + final int blockID; + + CallableBlockType(int var1) { + this.blockID = var1; + } + + public String callBlockType() { + try { + return String.format("ID #%d (%s // %s)", new Object[]{Integer.valueOf(this.blockID), Block.blocksList[this.blockID].getUnlocalizedName(), Block.blocksList[this.blockID].getClass().getCanonicalName()}); + } catch (Throwable var2) { + return "ID #" + this.blockID; + } + } + + public Object call() { + return this.callBlockType(); + } +} diff --git a/src/net/minecraft/src/CallableChunkPosHash.java b/src/net/minecraft/src/CallableChunkPosHash.java new file mode 100644 index 0000000..9b08966 --- /dev/null +++ b/src/net/minecraft/src/CallableChunkPosHash.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableChunkPosHash implements Callable { + final int field_85165_a; + final int field_85163_b; + final MapGenStructure theMapStructureGenerator; + + CallableChunkPosHash(MapGenStructure var1, int var2, int var3) { + this.theMapStructureGenerator = var1; + this.field_85165_a = var2; + this.field_85163_b = var3; + } + + public String callChunkPositionHash() { + return String.valueOf(ChunkCoordIntPair.chunkXZ2Int(this.field_85165_a, this.field_85163_b)); + } + + public Object call() { + return this.callChunkPositionHash(); + } +} diff --git a/src/net/minecraft/src/CallableClientMemoryStats.java b/src/net/minecraft/src/CallableClientMemoryStats.java new file mode 100644 index 0000000..d5aab99 --- /dev/null +++ b/src/net/minecraft/src/CallableClientMemoryStats.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; +import net.minecraft.client.Minecraft; + +public class CallableClientMemoryStats implements Callable { + final Minecraft theMinecraft; + + public CallableClientMemoryStats(Minecraft var1) { + this.theMinecraft = var1; + } + + public String callClientMemoryStats() { + int var1 = this.theMinecraft.theWorld.getWorldVec3Pool().getPoolSize(); + int var2 = 56 * var1; + int var3 = var2 / 1024 / 1024; + int var4 = this.theMinecraft.theWorld.getWorldVec3Pool().func_82590_d(); + int var5 = 56 * var4; + int var6 = var5 / 1024 / 1024; + return var1 + " (" + var2 + " bytes; " + var3 + " MB) allocated, " + var4 + " (" + var5 + " bytes; " + var6 + " MB) used"; + } + + public Object call() { + return this.callClientMemoryStats(); + } +} diff --git a/src/net/minecraft/src/CallableClientProfiler.java b/src/net/minecraft/src/CallableClientProfiler.java new file mode 100644 index 0000000..db69aa3 --- /dev/null +++ b/src/net/minecraft/src/CallableClientProfiler.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; +import net.minecraft.client.Minecraft; + +public class CallableClientProfiler implements Callable { + final Minecraft theMinecraft; + + public CallableClientProfiler(Minecraft var1) { + this.theMinecraft = var1; + } + + public String callClientProfilerInfo() { + return this.theMinecraft.mcProfiler.profilingEnabled ? this.theMinecraft.mcProfiler.getNameOfLastSection() : "N/A (disabled)"; + } + + public Object call() { + return this.callClientProfilerInfo(); + } +} diff --git a/src/net/minecraft/src/CallableCrashMemoryReport.java b/src/net/minecraft/src/CallableCrashMemoryReport.java new file mode 100644 index 0000000..6ccb605 --- /dev/null +++ b/src/net/minecraft/src/CallableCrashMemoryReport.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableCrashMemoryReport implements Callable { + final CrashReport theCrashReport; + + CallableCrashMemoryReport(CrashReport var1) { + this.theCrashReport = var1; + } + + public String getMemoryReport() { + int var1 = AxisAlignedBB.getAABBPool().getlistAABBsize(); + int var2 = 56 * var1; + int var3 = var2 / 1024 / 1024; + int var4 = AxisAlignedBB.getAABBPool().getnextPoolIndex(); + int var5 = 56 * var4; + int var6 = var5 / 1024 / 1024; + return var1 + " (" + var2 + " bytes; " + var3 + " MB) allocated, " + var4 + " (" + var5 + " bytes; " + var6 + " MB) used"; + } + + public Object call() { + return this.getMemoryReport(); + } +} diff --git a/src/net/minecraft/src/CallableEffectAmplifier.java b/src/net/minecraft/src/CallableEffectAmplifier.java new file mode 100644 index 0000000..d553c79 --- /dev/null +++ b/src/net/minecraft/src/CallableEffectAmplifier.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableEffectAmplifier implements Callable { + final PotionEffect field_102040_a; + final EntityLiving field_102039_b; + + CallableEffectAmplifier(EntityLiving var1, PotionEffect var2) { + this.field_102039_b = var1; + this.field_102040_a = var2; + } + + public String func_102038_a() { + return this.field_102040_a.getAmplifier() + ""; + } + + public Object call() { + return this.func_102038_a(); + } +} diff --git a/src/net/minecraft/src/CallableEffectDuration.java b/src/net/minecraft/src/CallableEffectDuration.java new file mode 100644 index 0000000..60e9f02 --- /dev/null +++ b/src/net/minecraft/src/CallableEffectDuration.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableEffectDuration implements Callable { + final PotionEffect field_102037_a; + final EntityLiving field_102036_b; + + CallableEffectDuration(EntityLiving var1, PotionEffect var2) { + this.field_102036_b = var1; + this.field_102037_a = var2; + } + + public String func_102035_a() { + return this.field_102037_a.getDuration() + ""; + } + + public Object call() { + return this.func_102035_a(); + } +} diff --git a/src/net/minecraft/src/CallableEffectID.java b/src/net/minecraft/src/CallableEffectID.java new file mode 100644 index 0000000..0949686 --- /dev/null +++ b/src/net/minecraft/src/CallableEffectID.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableEffectID implements Callable { + final PotionEffect field_102034_a; + final EntityLiving field_102033_b; + + CallableEffectID(EntityLiving var1, PotionEffect var2) { + this.field_102033_b = var1; + this.field_102034_a = var2; + } + + public String func_102032_a() { + return this.field_102034_a.getPotionID() + ""; + } + + public Object call() { + return this.func_102032_a(); + } +} diff --git a/src/net/minecraft/src/CallableEffectIsAmbient.java b/src/net/minecraft/src/CallableEffectIsAmbient.java new file mode 100644 index 0000000..7d661ed --- /dev/null +++ b/src/net/minecraft/src/CallableEffectIsAmbient.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableEffectIsAmbient implements Callable { + final PotionEffect field_102046_a; + final EntityLiving field_102045_b; + + CallableEffectIsAmbient(EntityLiving var1, PotionEffect var2) { + this.field_102045_b = var1; + this.field_102046_a = var2; + } + + public String func_102044_a() { + return this.field_102046_a.getIsAmbient() + ""; + } + + public Object call() { + return this.func_102044_a(); + } +} diff --git a/src/net/minecraft/src/CallableEffectIsSplash.java b/src/net/minecraft/src/CallableEffectIsSplash.java new file mode 100644 index 0000000..cdf2d6f --- /dev/null +++ b/src/net/minecraft/src/CallableEffectIsSplash.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableEffectIsSplash implements Callable { + final PotionEffect field_102043_a; + final EntityLiving field_102042_b; + + CallableEffectIsSplash(EntityLiving var1, PotionEffect var2) { + this.field_102042_b = var1; + this.field_102043_a = var2; + } + + public String func_102041_a() { + return this.field_102043_a.isSplashPotionEffect() + ""; + } + + public Object call() { + return this.func_102041_a(); + } +} diff --git a/src/net/minecraft/src/CallableEffectName.java b/src/net/minecraft/src/CallableEffectName.java new file mode 100644 index 0000000..55c3082 --- /dev/null +++ b/src/net/minecraft/src/CallableEffectName.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableEffectName implements Callable { + final PotionEffect field_102031_a; + final EntityLiving field_102030_b; + + CallableEffectName(EntityLiving var1, PotionEffect var2) { + this.field_102030_b = var1; + this.field_102031_a = var2; + } + + public String func_102029_a() { + return Potion.potionTypes[this.field_102031_a.getPotionID()].getName(); + } + + public Object call() { + return this.func_102029_a(); + } +} diff --git a/src/net/minecraft/src/CallableEntityName.java b/src/net/minecraft/src/CallableEntityName.java new file mode 100644 index 0000000..a32f23c --- /dev/null +++ b/src/net/minecraft/src/CallableEntityName.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableEntityName implements Callable { + final Entity theEntity; + + CallableEntityName(Entity var1) { + this.theEntity = var1; + } + + public String callEntityName() { + return this.theEntity.getEntityName(); + } + + public Object call() { + return this.callEntityName(); + } +} diff --git a/src/net/minecraft/src/CallableEntityTracker.java b/src/net/minecraft/src/CallableEntityTracker.java new file mode 100644 index 0000000..108c547 --- /dev/null +++ b/src/net/minecraft/src/CallableEntityTracker.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableEntityTracker implements Callable { + final int field_96570_a; + final EntityTracker theEntityTracker; + + CallableEntityTracker(EntityTracker var1, int var2) { + this.theEntityTracker = var1; + this.field_96570_a = var2; + } + + public String func_96568_a() { + String var1 = "Once per " + this.field_96570_a + " ticks"; + if(this.field_96570_a == Integer.MAX_VALUE) { + var1 = "Maximum (" + var1 + ")"; + } + + return var1; + } + + public Object call() { + return this.func_96568_a(); + } +} diff --git a/src/net/minecraft/src/CallableEntityType.java b/src/net/minecraft/src/CallableEntityType.java new file mode 100644 index 0000000..365dfd4 --- /dev/null +++ b/src/net/minecraft/src/CallableEntityType.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableEntityType implements Callable { + final Entity theEntity; + + CallableEntityType(Entity var1) { + this.theEntity = var1; + } + + public String callEntityType() { + return EntityList.getEntityString(this.theEntity) + " (" + this.theEntity.getClass().getCanonicalName() + ")"; + } + + public Object call() { + return this.callEntityType(); + } +} diff --git a/src/net/minecraft/src/CallableGLInfo.java b/src/net/minecraft/src/CallableGLInfo.java new file mode 100644 index 0000000..66ddbe8 --- /dev/null +++ b/src/net/minecraft/src/CallableGLInfo.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +public class CallableGLInfo implements Callable { + final Minecraft mc; + + public CallableGLInfo(Minecraft var1) { + this.mc = var1; + } + + public String getTexturePack() { + return GL11.glGetString(GL11.GL_RENDERER) + " GL version " + GL11.glGetString(GL11.GL_VERSION) + ", " + GL11.glGetString(GL11.GL_VENDOR); + } + + public Object call() { + return this.getTexturePack(); + } +} diff --git a/src/net/minecraft/src/CallableIntCache.java b/src/net/minecraft/src/CallableIntCache.java new file mode 100644 index 0000000..c2b570a --- /dev/null +++ b/src/net/minecraft/src/CallableIntCache.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableIntCache implements Callable { + final CrashReport theCrashReport; + + CallableIntCache(CrashReport var1) { + this.theCrashReport = var1; + } + + public String func_85083_a() { + return IntCache.func_85144_b(); + } + + public Object call() { + return this.func_85083_a(); + } +} diff --git a/src/net/minecraft/src/CallableIsFeatureChunk.java b/src/net/minecraft/src/CallableIsFeatureChunk.java new file mode 100644 index 0000000..1d4ca8c --- /dev/null +++ b/src/net/minecraft/src/CallableIsFeatureChunk.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableIsFeatureChunk implements Callable { + final int field_85169_a; + final int field_85167_b; + final MapGenStructure theMapStructureGenerator; + + CallableIsFeatureChunk(MapGenStructure var1, int var2, int var3) { + this.theMapStructureGenerator = var1; + this.field_85169_a = var2; + this.field_85167_b = var3; + } + + public String func_85166_a() { + return this.theMapStructureGenerator.canSpawnStructureAtCoords(this.field_85169_a, this.field_85167_b) ? "True" : "False"; + } + + public Object call() { + return this.func_85166_a(); + } +} diff --git a/src/net/minecraft/src/CallableIsModded.java b/src/net/minecraft/src/CallableIsModded.java new file mode 100644 index 0000000..f8df69b --- /dev/null +++ b/src/net/minecraft/src/CallableIsModded.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; +import net.minecraft.client.ClientBrandRetriever; +import net.minecraft.client.Minecraft; + +class CallableIsModded implements Callable { + final IntegratedServer theIntegratedServer; + + CallableIsModded(IntegratedServer var1) { + this.theIntegratedServer = var1; + } + + public String getMinecraftIsModded() { + String var1 = ClientBrandRetriever.getClientModName(); + if(!var1.equals("vanilla")) { + return "Definitely; Client brand changed to \'" + var1 + "\'"; + } else { + var1 = this.theIntegratedServer.getServerModName(); + return !var1.equals("vanilla") ? "Definitely; Server brand changed to \'" + var1 + "\'" : (Minecraft.class.getSigners() == null ? "Very likely; Jar signature invalidated" : "Probably not. Jar signature remains and both client + server brands are untouched."); + } + } + + public Object call() { + return this.getMinecraftIsModded(); + } +} diff --git a/src/net/minecraft/src/CallableIsServerModded.java b/src/net/minecraft/src/CallableIsServerModded.java new file mode 100644 index 0000000..35132e2 --- /dev/null +++ b/src/net/minecraft/src/CallableIsServerModded.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; +import net.minecraft.server.MinecraftServer; + +public class CallableIsServerModded implements Callable { + final MinecraftServer mcServer; + + public CallableIsServerModded(MinecraftServer var1) { + this.mcServer = var1; + } + + public String func_96558_a() { + return this.mcServer.theProfiler.profilingEnabled ? this.mcServer.theProfiler.getNameOfLastSection() : "N/A (disabled)"; + } + + public Object call() { + return this.func_96558_a(); + } +} diff --git a/src/net/minecraft/src/CallableItemName.java b/src/net/minecraft/src/CallableItemName.java new file mode 100644 index 0000000..5f4a13a --- /dev/null +++ b/src/net/minecraft/src/CallableItemName.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableItemName implements Callable { + final ItemStack theItemStack; + final InventoryPlayer playerInventory; + + CallableItemName(InventoryPlayer var1, ItemStack var2) { + this.playerInventory = var1; + this.theItemStack = var2; + } + + public String callItemDisplayName() { + return this.theItemStack.getDisplayName(); + } + + public Object call() { + return this.callItemDisplayName(); + } +} diff --git a/src/net/minecraft/src/CallableJVMFlags.java b/src/net/minecraft/src/CallableJVMFlags.java new file mode 100644 index 0000000..3543245 --- /dev/null +++ b/src/net/minecraft/src/CallableJVMFlags.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.lang.management.ManagementFactory; +import java.lang.management.RuntimeMXBean; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.Callable; + +class CallableJVMFlags implements Callable { + final CrashReport theCrashReport; + + CallableJVMFlags(CrashReport var1) { + this.theCrashReport = var1; + } + + public String getJVMFlagsAsString() { + RuntimeMXBean var1 = ManagementFactory.getRuntimeMXBean(); + List var2 = var1.getInputArguments(); + int var3 = 0; + StringBuilder var4 = new StringBuilder(); + Iterator var5 = var2.iterator(); + + while(var5.hasNext()) { + String var6 = (String)var5.next(); + if(var6.startsWith("-X")) { + if(var3++ > 0) { + var4.append(" "); + } + + var4.append(var6); + } + } + + return String.format("%d total; %s", new Object[]{Integer.valueOf(var3), var4.toString()}); + } + + public Object call() { + return this.getJVMFlagsAsString(); + } +} diff --git a/src/net/minecraft/src/CallableJavaInfo.java b/src/net/minecraft/src/CallableJavaInfo.java new file mode 100644 index 0000000..ca2c4cd --- /dev/null +++ b/src/net/minecraft/src/CallableJavaInfo.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableJavaInfo implements Callable { + final CrashReport theCrashReport; + + CallableJavaInfo(CrashReport var1) { + this.theCrashReport = var1; + } + + public String getJavaInfoAsString() { + return System.getProperty("java.version") + ", " + System.getProperty("java.vendor"); + } + + public Object call() { + return this.getJavaInfoAsString(); + } +} diff --git a/src/net/minecraft/src/CallableJavaInfo2.java b/src/net/minecraft/src/CallableJavaInfo2.java new file mode 100644 index 0000000..50a342a --- /dev/null +++ b/src/net/minecraft/src/CallableJavaInfo2.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableJavaInfo2 implements Callable { + final CrashReport theCrashReport; + + CallableJavaInfo2(CrashReport var1) { + this.theCrashReport = var1; + } + + public String getJavaVMInfoAsString() { + return System.getProperty("java.vm.name") + " (" + System.getProperty("java.vm.info") + "), " + System.getProperty("java.vm.vendor"); + } + + public Object call() { + return this.getJavaVMInfoAsString(); + } +} diff --git a/src/net/minecraft/src/CallableLWJGLVersion.java b/src/net/minecraft/src/CallableLWJGLVersion.java new file mode 100644 index 0000000..2be57e5 --- /dev/null +++ b/src/net/minecraft/src/CallableLWJGLVersion.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; +import net.minecraft.client.Minecraft; +import org.lwjgl.Sys; + +public class CallableLWJGLVersion implements Callable { + final Minecraft mc; + + public CallableLWJGLVersion(Minecraft var1) { + this.mc = var1; + } + + public String getType() { + return Sys.getVersion(); + } + + public Object call() { + return this.getType(); + } +} diff --git a/src/net/minecraft/src/CallableLevelDimension.java b/src/net/minecraft/src/CallableLevelDimension.java new file mode 100644 index 0000000..133f52d --- /dev/null +++ b/src/net/minecraft/src/CallableLevelDimension.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableLevelDimension implements Callable { + final WorldInfo worldInfoInstance; + + CallableLevelDimension(WorldInfo var1) { + this.worldInfoInstance = var1; + } + + public String callLevelDimension() { + return String.valueOf(WorldInfo.func_85122_i(this.worldInfoInstance)); + } + + public Object call() { + return this.callLevelDimension(); + } +} diff --git a/src/net/minecraft/src/CallableLevelGamemode.java b/src/net/minecraft/src/CallableLevelGamemode.java new file mode 100644 index 0000000..fa96980 --- /dev/null +++ b/src/net/minecraft/src/CallableLevelGamemode.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableLevelGamemode implements Callable { + final WorldInfo worldInfoInstance; + + CallableLevelGamemode(WorldInfo var1) { + this.worldInfoInstance = var1; + } + + public String callLevelGameModeInfo() { + return String.format("Game mode: %s (ID %d). Hardcore: %b. Cheats: %b", new Object[]{WorldInfo.getGameType(this.worldInfoInstance).getName(), Integer.valueOf(WorldInfo.getGameType(this.worldInfoInstance).getID()), Boolean.valueOf(WorldInfo.func_85117_p(this.worldInfoInstance)), Boolean.valueOf(WorldInfo.func_85131_q(this.worldInfoInstance))}); + } + + public Object call() { + return this.callLevelGameModeInfo(); + } +} diff --git a/src/net/minecraft/src/CallableLevelGenerator.java b/src/net/minecraft/src/CallableLevelGenerator.java new file mode 100644 index 0000000..b2f8419 --- /dev/null +++ b/src/net/minecraft/src/CallableLevelGenerator.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableLevelGenerator implements Callable { + final WorldInfo worldInfoInstance; + + CallableLevelGenerator(WorldInfo var1) { + this.worldInfoInstance = var1; + } + + public String callLevelGeneratorInfo() { + return String.format("ID %02d - %s, ver %d. Features enabled: %b", new Object[]{Integer.valueOf(WorldInfo.getTerrainTypeOfWorld(this.worldInfoInstance).getWorldTypeID()), WorldInfo.getTerrainTypeOfWorld(this.worldInfoInstance).getWorldTypeName(), Integer.valueOf(WorldInfo.getTerrainTypeOfWorld(this.worldInfoInstance).getGeneratorVersion()), Boolean.valueOf(WorldInfo.getMapFeaturesEnabled(this.worldInfoInstance))}); + } + + public Object call() { + return this.callLevelGeneratorInfo(); + } +} diff --git a/src/net/minecraft/src/CallableLevelGeneratorOptions.java b/src/net/minecraft/src/CallableLevelGeneratorOptions.java new file mode 100644 index 0000000..9053e2e --- /dev/null +++ b/src/net/minecraft/src/CallableLevelGeneratorOptions.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableLevelGeneratorOptions implements Callable { + final WorldInfo worldInfoInstance; + + CallableLevelGeneratorOptions(WorldInfo var1) { + this.worldInfoInstance = var1; + } + + public String callLevelGeneratorOptions() { + return WorldInfo.getWorldGeneratorOptions(this.worldInfoInstance); + } + + public Object call() { + return this.callLevelGeneratorOptions(); + } +} diff --git a/src/net/minecraft/src/CallableLevelSeed.java b/src/net/minecraft/src/CallableLevelSeed.java new file mode 100644 index 0000000..63a8a8c --- /dev/null +++ b/src/net/minecraft/src/CallableLevelSeed.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableLevelSeed implements Callable { + final WorldInfo worldInfoInstance; + + CallableLevelSeed(WorldInfo var1) { + this.worldInfoInstance = var1; + } + + public String callLevelSeed() { + return String.valueOf(this.worldInfoInstance.getSeed()); + } + + public Object call() { + return this.callLevelSeed(); + } +} diff --git a/src/net/minecraft/src/CallableLevelSpawnLocation.java b/src/net/minecraft/src/CallableLevelSpawnLocation.java new file mode 100644 index 0000000..7cbdc54 --- /dev/null +++ b/src/net/minecraft/src/CallableLevelSpawnLocation.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableLevelSpawnLocation implements Callable { + final WorldInfo worldInfoInstance; + + CallableLevelSpawnLocation(WorldInfo var1) { + this.worldInfoInstance = var1; + } + + public String callLevelSpawnLocation() { + return CrashReportCategory.getLocationInfo(WorldInfo.getSpawnXCoordinate(this.worldInfoInstance), WorldInfo.getSpawnYCoordinate(this.worldInfoInstance), WorldInfo.getSpawnZCoordinate(this.worldInfoInstance)); + } + + public Object call() { + return this.callLevelSpawnLocation(); + } +} diff --git a/src/net/minecraft/src/CallableLevelStorageVersion.java b/src/net/minecraft/src/CallableLevelStorageVersion.java new file mode 100644 index 0000000..c125706 --- /dev/null +++ b/src/net/minecraft/src/CallableLevelStorageVersion.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableLevelStorageVersion implements Callable { + final WorldInfo worldInfoInstance; + + CallableLevelStorageVersion(WorldInfo var1) { + this.worldInfoInstance = var1; + } + + public String callLevelStorageFormat() { + String var1 = "Unknown?"; + + try { + switch(WorldInfo.getSaveVersion(this.worldInfoInstance)) { + case 19132: + var1 = "McRegion"; + break; + case 19133: + var1 = "Anvil"; + } + } catch (Throwable var3) { + } + + return String.format("0x%05X - %s", new Object[]{Integer.valueOf(WorldInfo.getSaveVersion(this.worldInfoInstance)), var1}); + } + + public Object call() { + return this.callLevelStorageFormat(); + } +} diff --git a/src/net/minecraft/src/CallableLevelTime.java b/src/net/minecraft/src/CallableLevelTime.java new file mode 100644 index 0000000..aac7135 --- /dev/null +++ b/src/net/minecraft/src/CallableLevelTime.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableLevelTime implements Callable { + final WorldInfo worldInfoInstance; + + CallableLevelTime(WorldInfo var1) { + this.worldInfoInstance = var1; + } + + public String callLevelTime() { + return String.format("%d game time, %d day time", new Object[]{Long.valueOf(WorldInfo.func_85126_g(this.worldInfoInstance)), Long.valueOf(WorldInfo.getWorldTime(this.worldInfoInstance))}); + } + + public Object call() { + return this.callLevelTime(); + } +} diff --git a/src/net/minecraft/src/CallableLevelWeather.java b/src/net/minecraft/src/CallableLevelWeather.java new file mode 100644 index 0000000..444f104 --- /dev/null +++ b/src/net/minecraft/src/CallableLevelWeather.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableLevelWeather implements Callable { + final WorldInfo worldInfoInstance; + + CallableLevelWeather(WorldInfo var1) { + this.worldInfoInstance = var1; + } + + public String callLevelWeatherInfo() { + return String.format("Rain time: %d (now: %b), thunder time: %d (now: %b)", new Object[]{Integer.valueOf(WorldInfo.getRainTime(this.worldInfoInstance)), Boolean.valueOf(WorldInfo.getRaining(this.worldInfoInstance)), Integer.valueOf(WorldInfo.getThunderTime(this.worldInfoInstance)), Boolean.valueOf(WorldInfo.getThundering(this.worldInfoInstance))}); + } + + public Object call() { + return this.callLevelWeatherInfo(); + } +} diff --git a/src/net/minecraft/src/CallableLvl1.java b/src/net/minecraft/src/CallableLvl1.java new file mode 100644 index 0000000..00ff49f --- /dev/null +++ b/src/net/minecraft/src/CallableLvl1.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableLvl1 implements Callable { + final int field_85179_a; + final World theWorld; + + CallableLvl1(World var1, int var2) { + this.theWorld = var1; + this.field_85179_a = var2; + } + + public String getWorldEntitiesAsString() { + try { + return String.format("ID #%d (%s // %s)", new Object[]{Integer.valueOf(this.field_85179_a), Block.blocksList[this.field_85179_a].getUnlocalizedName(), Block.blocksList[this.field_85179_a].getClass().getCanonicalName()}); + } catch (Throwable var2) { + return "ID #" + this.field_85179_a; + } + } + + public Object call() { + return this.getWorldEntitiesAsString(); + } +} diff --git a/src/net/minecraft/src/CallableLvl2.java b/src/net/minecraft/src/CallableLvl2.java new file mode 100644 index 0000000..3cdfc1c --- /dev/null +++ b/src/net/minecraft/src/CallableLvl2.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableLvl2 implements Callable { + final World theWorld; + + CallableLvl2(World var1) { + this.theWorld = var1; + } + + public String getPlayerEntities() { + return this.theWorld.playerEntities.size() + " total; " + this.theWorld.playerEntities.toString(); + } + + public Object call() { + return this.getPlayerEntities(); + } +} diff --git a/src/net/minecraft/src/CallableLvl3.java b/src/net/minecraft/src/CallableLvl3.java new file mode 100644 index 0000000..bbb2352 --- /dev/null +++ b/src/net/minecraft/src/CallableLvl3.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableLvl3 implements Callable { + final World theWorld; + + CallableLvl3(World var1) { + this.theWorld = var1; + } + + public String getChunkProvider() { + return this.theWorld.chunkProvider.makeString(); + } + + public Object call() { + return this.getChunkProvider(); + } +} diff --git a/src/net/minecraft/src/CallableMPL1.java b/src/net/minecraft/src/CallableMPL1.java new file mode 100644 index 0000000..8f5d5b7 --- /dev/null +++ b/src/net/minecraft/src/CallableMPL1.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableMPL1 implements Callable { + final WorldClient theWorldClient; + + CallableMPL1(WorldClient var1) { + this.theWorldClient = var1; + } + + public String getEntityCountAndList() { + return WorldClient.getEntityList(this.theWorldClient).size() + " total; " + WorldClient.getEntityList(this.theWorldClient).toString(); + } + + public Object call() { + return this.getEntityCountAndList(); + } +} diff --git a/src/net/minecraft/src/CallableMPL2.java b/src/net/minecraft/src/CallableMPL2.java new file mode 100644 index 0000000..174805c --- /dev/null +++ b/src/net/minecraft/src/CallableMPL2.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableMPL2 implements Callable { + final WorldClient theWorldClient; + + CallableMPL2(WorldClient var1) { + this.theWorldClient = var1; + } + + public String getEntitySpawnQueueCountAndList() { + return WorldClient.getEntitySpawnQueue(this.theWorldClient).size() + " total; " + WorldClient.getEntitySpawnQueue(this.theWorldClient).toString(); + } + + public Object call() { + return this.getEntitySpawnQueueCountAndList(); + } +} diff --git a/src/net/minecraft/src/CallableMemoryInfo.java b/src/net/minecraft/src/CallableMemoryInfo.java new file mode 100644 index 0000000..78d3eea --- /dev/null +++ b/src/net/minecraft/src/CallableMemoryInfo.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableMemoryInfo implements Callable { + final CrashReport theCrashReport; + + CallableMemoryInfo(CrashReport var1) { + this.theCrashReport = var1; + } + + public String getMemoryInfoAsString() { + Runtime var1 = Runtime.getRuntime(); + long var2 = var1.maxMemory(); + long var4 = var1.totalMemory(); + long var6 = var1.freeMemory(); + long var8 = var2 / 1024L / 1024L; + long var10 = var4 / 1024L / 1024L; + long var12 = var6 / 1024L / 1024L; + return var6 + " bytes (" + var12 + " MB) / " + var4 + " bytes (" + var10 + " MB) up to " + var2 + " bytes (" + var8 + " MB)"; + } + + public Object call() { + return this.getMemoryInfoAsString(); + } +} diff --git a/src/net/minecraft/src/CallableMinecraftVersion.java b/src/net/minecraft/src/CallableMinecraftVersion.java new file mode 100644 index 0000000..ba4d8fc --- /dev/null +++ b/src/net/minecraft/src/CallableMinecraftVersion.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableMinecraftVersion implements Callable { + final CrashReport theCrashReport; + + CallableMinecraftVersion(CrashReport var1) { + this.theCrashReport = var1; + } + + public String minecraftVersion() { + return "1.5.2"; + } + + public Object call() { + return this.minecraftVersion(); + } +} diff --git a/src/net/minecraft/src/CallableModded.java b/src/net/minecraft/src/CallableModded.java new file mode 100644 index 0000000..7dddfd3 --- /dev/null +++ b/src/net/minecraft/src/CallableModded.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; +import net.minecraft.client.ClientBrandRetriever; +import net.minecraft.client.Minecraft; + +public class CallableModded implements Callable { + final Minecraft mc; + + public CallableModded(Minecraft var1) { + this.mc = var1; + } + + public String getClientProfilerEnabled() { + String var1 = ClientBrandRetriever.getClientModName(); + return !var1.equals("vanilla") ? "Definitely; Client brand changed to \'" + var1 + "\'" : (Minecraft.class.getSigners() == null ? "Very likely; Jar signature invalidated" : "Probably not. Jar signature remains and client brand is untouched."); + } + + public Object call() { + return this.getClientProfilerEnabled(); + } +} diff --git a/src/net/minecraft/src/CallableMouseLocation.java b/src/net/minecraft/src/CallableMouseLocation.java new file mode 100644 index 0000000..3ed5ecb --- /dev/null +++ b/src/net/minecraft/src/CallableMouseLocation.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; +import org.lwjgl.input.Mouse; + +class CallableMouseLocation implements Callable { + final int field_90026_a; + final int field_90024_b; + final EntityRenderer theEntityRenderer; + + CallableMouseLocation(EntityRenderer var1, int var2, int var3) { + this.theEntityRenderer = var1; + this.field_90026_a = var2; + this.field_90024_b = var3; + } + + public String callMouseLocation() { + return String.format("Scaled: (%d, %d). Absolute: (%d, %d)", new Object[]{Integer.valueOf(this.field_90026_a), Integer.valueOf(this.field_90024_b), Integer.valueOf(Mouse.getX()), Integer.valueOf(Mouse.getY())}); + } + + public Object call() { + return this.callMouseLocation(); + } +} diff --git a/src/net/minecraft/src/CallableOSInfo.java b/src/net/minecraft/src/CallableOSInfo.java new file mode 100644 index 0000000..8f59150 --- /dev/null +++ b/src/net/minecraft/src/CallableOSInfo.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableOSInfo implements Callable { + final CrashReport theCrashReport; + + CallableOSInfo(CrashReport var1) { + this.theCrashReport = var1; + } + + public String getOsAsString() { + return System.getProperty("os.name") + " (" + System.getProperty("os.arch") + ") version " + System.getProperty("os.version"); + } + + public Object call() { + return this.getOsAsString(); + } +} diff --git a/src/net/minecraft/src/CallablePacketClass.java b/src/net/minecraft/src/CallablePacketClass.java new file mode 100644 index 0000000..1828992 --- /dev/null +++ b/src/net/minecraft/src/CallablePacketClass.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallablePacketClass implements Callable { + final Packet thePacket; + final NetServerHandler theNetServerHandler; + + CallablePacketClass(NetServerHandler var1, Packet var2) { + this.theNetServerHandler = var1; + this.thePacket = var2; + } + + public String getPacketClass() { + return this.thePacket.getClass().getCanonicalName(); + } + + public Object call() { + return this.getPacketClass(); + } +} diff --git a/src/net/minecraft/src/CallablePacketID.java b/src/net/minecraft/src/CallablePacketID.java new file mode 100644 index 0000000..d73fc6e --- /dev/null +++ b/src/net/minecraft/src/CallablePacketID.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallablePacketID implements Callable { + final Packet thePacket; + final NetServerHandler theNetServerHandler; + + CallablePacketID(NetServerHandler var1, Packet var2) { + this.theNetServerHandler = var1; + this.thePacket = var2; + } + + public String callPacketID() { + return String.valueOf(this.thePacket.getPacketId()); + } + + public Object call() { + return this.callPacketID(); + } +} diff --git a/src/net/minecraft/src/CallableParticlePositionInfo.java b/src/net/minecraft/src/CallableParticlePositionInfo.java new file mode 100644 index 0000000..c825350 --- /dev/null +++ b/src/net/minecraft/src/CallableParticlePositionInfo.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableParticlePositionInfo implements Callable { + final double field_85101_a; + final double field_85099_b; + final double field_85100_c; + final RenderGlobal globalRenderer; + + CallableParticlePositionInfo(RenderGlobal var1, double var2, double var4, double var6) { + this.globalRenderer = var1; + this.field_85101_a = var2; + this.field_85099_b = var4; + this.field_85100_c = var6; + } + + public String callParticlePositionInfo() { + return CrashReportCategory.func_85074_a(this.field_85101_a, this.field_85099_b, this.field_85100_c); + } + + public Object call() { + return this.callParticlePositionInfo(); + } +} diff --git a/src/net/minecraft/src/CallableParticleScreenName.java b/src/net/minecraft/src/CallableParticleScreenName.java new file mode 100644 index 0000000..51b835c --- /dev/null +++ b/src/net/minecraft/src/CallableParticleScreenName.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; +import net.minecraft.client.Minecraft; + +public class CallableParticleScreenName implements Callable { + final Minecraft theMinecraft; + + public CallableParticleScreenName(Minecraft var1) { + this.theMinecraft = var1; + } + + public String callParticleScreenName() { + return this.theMinecraft.currentScreen.getClass().getCanonicalName(); + } + + public Object call() { + return this.callParticleScreenName(); + } +} diff --git a/src/net/minecraft/src/CallableScreenName.java b/src/net/minecraft/src/CallableScreenName.java new file mode 100644 index 0000000..bde1d3c --- /dev/null +++ b/src/net/minecraft/src/CallableScreenName.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableScreenName implements Callable { + final EntityRenderer entityRender; + + CallableScreenName(EntityRenderer var1) { + this.entityRender = var1; + } + + public String callScreenName() { + return EntityRenderer.getRendererMinecraft(this.entityRender).currentScreen.getClass().getCanonicalName(); + } + + public Object call() { + return this.callScreenName(); + } +} diff --git a/src/net/minecraft/src/CallableScreenSize.java b/src/net/minecraft/src/CallableScreenSize.java new file mode 100644 index 0000000..bef9eae --- /dev/null +++ b/src/net/minecraft/src/CallableScreenSize.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableScreenSize implements Callable { + final ScaledResolution theScaledResolution; + final EntityRenderer theEntityRenderer; + + CallableScreenSize(EntityRenderer var1, ScaledResolution var2) { + this.theEntityRenderer = var1; + this.theScaledResolution = var2; + } + + public String callScreenSize() { + return String.format("Scaled: (%d, %d). Absolute: (%d, %d). Scale factor of %d", new Object[]{Integer.valueOf(this.theScaledResolution.getScaledWidth()), Integer.valueOf(this.theScaledResolution.getScaledHeight()), Integer.valueOf(EntityRenderer.getRendererMinecraft(this.theEntityRenderer).displayWidth), Integer.valueOf(EntityRenderer.getRendererMinecraft(this.theEntityRenderer).displayHeight), Integer.valueOf(this.theScaledResolution.getScaleFactor())}); + } + + public Object call() { + return this.callScreenSize(); + } +} diff --git a/src/net/minecraft/src/CallableServerMemoryStats.java b/src/net/minecraft/src/CallableServerMemoryStats.java new file mode 100644 index 0000000..9656695 --- /dev/null +++ b/src/net/minecraft/src/CallableServerMemoryStats.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; +import net.minecraft.server.MinecraftServer; + +public class CallableServerMemoryStats implements Callable { + final MinecraftServer mcServer; + + public CallableServerMemoryStats(MinecraftServer var1) { + this.mcServer = var1; + } + + public String callServerMemoryStats() { + return MinecraftServer.getServerConfigurationManager(this.mcServer).getCurrentPlayerCount() + " / " + MinecraftServer.getServerConfigurationManager(this.mcServer).getMaxPlayers() + "; " + MinecraftServer.getServerConfigurationManager(this.mcServer).playerEntityList; + } + + public Object call() { + return this.callServerMemoryStats(); + } +} diff --git a/src/net/minecraft/src/CallableServerProfiler.java b/src/net/minecraft/src/CallableServerProfiler.java new file mode 100644 index 0000000..01069b1 --- /dev/null +++ b/src/net/minecraft/src/CallableServerProfiler.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; +import net.minecraft.server.MinecraftServer; + +public class CallableServerProfiler implements Callable { + final MinecraftServer mcServer; + + public CallableServerProfiler(MinecraftServer var1) { + this.mcServer = var1; + } + + public String callServerProfiler() { + int var1 = this.mcServer.worldServers[0].getWorldVec3Pool().getPoolSize(); + int var2 = 56 * var1; + int var3 = var2 / 1024 / 1024; + int var4 = this.mcServer.worldServers[0].getWorldVec3Pool().func_82590_d(); + int var5 = 56 * var4; + int var6 = var5 / 1024 / 1024; + return var1 + " (" + var2 + " bytes; " + var3 + " MB) allocated, " + var4 + " (" + var5 + " bytes; " + var6 + " MB) used"; + } + + public Object call() { + return this.callServerProfiler(); + } +} diff --git a/src/net/minecraft/src/CallableServerType.java b/src/net/minecraft/src/CallableServerType.java new file mode 100644 index 0000000..c36f513 --- /dev/null +++ b/src/net/minecraft/src/CallableServerType.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableServerType implements Callable { + final DedicatedServer theDedicatedServer; + + CallableServerType(DedicatedServer var1) { + this.theDedicatedServer = var1; + } + + public String callServerType() { + return "Dedicated Server (map_server.txt)"; + } + + public Object call() { + return this.callServerType(); + } +} diff --git a/src/net/minecraft/src/CallableStructureType.java b/src/net/minecraft/src/CallableStructureType.java new file mode 100644 index 0000000..65fbdff --- /dev/null +++ b/src/net/minecraft/src/CallableStructureType.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableStructureType implements Callable { + final MapGenStructure theMapStructureGenerator; + + CallableStructureType(MapGenStructure var1) { + this.theMapStructureGenerator = var1; + } + + public String callStructureType() { + return this.theMapStructureGenerator.getClass().getCanonicalName(); + } + + public Object call() { + return this.callStructureType(); + } +} diff --git a/src/net/minecraft/src/CallableSuspiciousClasses.java b/src/net/minecraft/src/CallableSuspiciousClasses.java new file mode 100644 index 0000000..1203626 --- /dev/null +++ b/src/net/minecraft/src/CallableSuspiciousClasses.java @@ -0,0 +1,125 @@ +package net.minecraft.src; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Vector; +import java.util.concurrent.Callable; + +class CallableSuspiciousClasses implements Callable { + final CrashReport theCrashReport; + + CallableSuspiciousClasses(CrashReport var1) { + this.theCrashReport = var1; + } + + public String callSuspiciousClasses() throws Exception { + StringBuilder var1 = new StringBuilder(); + Field var2 = ClassLoader.class.getDeclaredField("classes"); + var2.setAccessible(true); + ArrayList var3 = new ArrayList((Vector)var2.get(CrashReport.class.getClassLoader())); + boolean var4 = true; + boolean var5 = !CrashReport.class.getCanonicalName().equals("net.minecraft.CrashReport"); + HashMap var6 = new HashMap(); + String var7 = ""; + Collections.sort(var3, new ComparatorClassSorter(this)); + Iterator var8 = var3.iterator(); + + while(true) { + while(true) { + Class var9; + while(true) { + String var10; + do { + do { + do { + do { + do { + do { + do { + do { + do { + if(!var8.hasNext()) { + if(var4) { + var1.append("No suspicious classes found."); + } else { + var1.append("]"); + } + + return var1.toString(); + } + + var9 = (Class)var8.next(); + } while(var9 == null); + + var10 = var9.getCanonicalName(); + } while(var10 == null); + } while(var10.startsWith("org.lwjgl.")); + } while(var10.startsWith("paulscode.")); + } while(var10.startsWith("org.bouncycastle.")); + } while(var10.startsWith("argo.")); + } while(var10.startsWith("com.jcraft.")); + } while(var10.startsWith("com.fasterxml.")); + } while(var10.equals("util.GLX")); + + if(var5) { + if(var10.length() > 3 && !var10.equals("net.minecraft.client.MinecraftApplet") && !var10.equals("net.minecraft.client.Minecraft") && !var10.equals("net.minecraft.client.ClientBrandRetriever") && !var10.equals("net.minecraft.server.MinecraftServer")) { + break; + } + } else { + if(var10.startsWith("net.minecraft")) { + continue; + } + break; + } + } + + Package var11 = var9.getPackage(); + String var12 = var11 == null ? "" : var11.getName(); + if(var6.containsKey(var12)) { + int var13 = ((Integer)var6.get(var12)).intValue(); + var6.put(var12, Integer.valueOf(var13 + 1)); + if(var13 == 3) { + if(!var4) { + var1.append(", "); + } + + var1.append("..."); + var4 = false; + continue; + } + + if(var13 > 3) { + continue; + } + } else { + var6.put(var12, Integer.valueOf(1)); + } + + if(var7 != var12 && var7.length() > 0) { + var1.append("], "); + } + + if(!var4 && var7 == var12) { + var1.append(", "); + } + + if(var7 != var12) { + var1.append("["); + var1.append(var12); + var1.append("."); + } + + var1.append(var9.getSimpleName()); + var7 = var12; + var4 = false; + } + } + } + + public Object call() throws Exception { + return this.callSuspiciousClasses(); + } +} diff --git a/src/net/minecraft/src/CallableTagCompound1.java b/src/net/minecraft/src/CallableTagCompound1.java new file mode 100644 index 0000000..d9e9189 --- /dev/null +++ b/src/net/minecraft/src/CallableTagCompound1.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableTagCompound1 implements Callable { + final String field_82585_a; + final NBTTagCompound theNBTTagCompound; + + CallableTagCompound1(NBTTagCompound var1, String var2) { + this.theNBTTagCompound = var1; + this.field_82585_a = var2; + } + + public String func_82583_a() { + return NBTBase.NBTTypes[((NBTBase)NBTTagCompound.getTagMap(this.theNBTTagCompound).get(this.field_82585_a)).getId()]; + } + + public Object call() { + return this.func_82583_a(); + } +} diff --git a/src/net/minecraft/src/CallableTagCompound2.java b/src/net/minecraft/src/CallableTagCompound2.java new file mode 100644 index 0000000..92edc2d --- /dev/null +++ b/src/net/minecraft/src/CallableTagCompound2.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableTagCompound2 implements Callable { + final int field_82588_a; + final NBTTagCompound theNBTTagCompound; + + CallableTagCompound2(NBTTagCompound var1, int var2) { + this.theNBTTagCompound = var1; + this.field_82588_a = var2; + } + + public String func_82586_a() { + return NBTBase.NBTTypes[this.field_82588_a]; + } + + public Object call() { + return this.func_82586_a(); + } +} diff --git a/src/net/minecraft/src/CallableTexturePack.java b/src/net/minecraft/src/CallableTexturePack.java new file mode 100644 index 0000000..c653c2c --- /dev/null +++ b/src/net/minecraft/src/CallableTexturePack.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; +import net.minecraft.client.Minecraft; + +public class CallableTexturePack implements Callable { + final Minecraft theMinecraft; + + public CallableTexturePack(Minecraft var1) { + this.theMinecraft = var1; + } + + public String callTexturePack() { + return this.theMinecraft.gameSettings.skin; + } + + public Object call() { + return this.callTexturePack(); + } +} diff --git a/src/net/minecraft/src/CallableTickingScreenName.java b/src/net/minecraft/src/CallableTickingScreenName.java new file mode 100644 index 0000000..ac39585 --- /dev/null +++ b/src/net/minecraft/src/CallableTickingScreenName.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; +import net.minecraft.client.Minecraft; + +public class CallableTickingScreenName implements Callable { + final Minecraft mc; + + public CallableTickingScreenName(Minecraft var1) { + this.mc = var1; + } + + public String getLWJGLVersion() { + return this.mc.currentScreen.getClass().getCanonicalName(); + } + + public Object call() { + return this.getLWJGLVersion(); + } +} diff --git a/src/net/minecraft/src/CallableTileEntityData.java b/src/net/minecraft/src/CallableTileEntityData.java new file mode 100644 index 0000000..e2feb64 --- /dev/null +++ b/src/net/minecraft/src/CallableTileEntityData.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableTileEntityData implements Callable { + final TileEntity theTileEntity; + + CallableTileEntityData(TileEntity var1) { + this.theTileEntity = var1; + } + + public String callTileEntityDataInfo() { + int var1 = this.theTileEntity.worldObj.getBlockMetadata(this.theTileEntity.xCoord, this.theTileEntity.yCoord, this.theTileEntity.zCoord); + if(var1 < 0) { + return "Unknown? (Got " + var1 + ")"; + } else { + String var2 = String.format("%4s", new Object[]{Integer.toBinaryString(var1)}).replace(" ", "0"); + return String.format("%1$d / 0x%1$X / 0b%2$s", new Object[]{Integer.valueOf(var1), var2}); + } + } + + public Object call() { + return this.callTileEntityDataInfo(); + } +} diff --git a/src/net/minecraft/src/CallableTileEntityID.java b/src/net/minecraft/src/CallableTileEntityID.java new file mode 100644 index 0000000..95126cd --- /dev/null +++ b/src/net/minecraft/src/CallableTileEntityID.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableTileEntityID implements Callable { + final TileEntity theTileEntity; + + CallableTileEntityID(TileEntity var1) { + this.theTileEntity = var1; + } + + public String callTileEntityID() { + int var1 = this.theTileEntity.worldObj.getBlockId(this.theTileEntity.xCoord, this.theTileEntity.yCoord, this.theTileEntity.zCoord); + + try { + return String.format("ID #%d (%s // %s)", new Object[]{Integer.valueOf(var1), Block.blocksList[var1].getUnlocalizedName(), Block.blocksList[var1].getClass().getCanonicalName()}); + } catch (Throwable var3) { + return "ID #" + var1; + } + } + + public Object call() { + return this.callTileEntityID(); + } +} diff --git a/src/net/minecraft/src/CallableTileEntityName.java b/src/net/minecraft/src/CallableTileEntityName.java new file mode 100644 index 0000000..51c7476 --- /dev/null +++ b/src/net/minecraft/src/CallableTileEntityName.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableTileEntityName implements Callable { + final TileEntity theTileEntity; + + CallableTileEntityName(TileEntity var1) { + this.theTileEntity = var1; + } + + public String callTileEntityName() { + return (String)TileEntity.getClassToNameMap().get(this.theTileEntity.getClass()) + " // " + this.theTileEntity.getClass().getCanonicalName(); + } + + public Object call() { + return this.callTileEntityName(); + } +} diff --git a/src/net/minecraft/src/CallableType.java b/src/net/minecraft/src/CallableType.java new file mode 100644 index 0000000..90f16f5 --- /dev/null +++ b/src/net/minecraft/src/CallableType.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableType implements Callable { + final DedicatedServer theDecitatedServer; + + CallableType(DedicatedServer var1) { + this.theDecitatedServer = var1; + } + + public String getType() { + String var1 = this.theDecitatedServer.getServerModName(); + return !var1.equals("vanilla") ? "Definitely; Server brand changed to \'" + var1 + "\'" : "Unknown (can\'t tell)"; + } + + public Object call() { + return this.getType(); + } +} diff --git a/src/net/minecraft/src/CallableType2.java b/src/net/minecraft/src/CallableType2.java new file mode 100644 index 0000000..26d1521 --- /dev/null +++ b/src/net/minecraft/src/CallableType2.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; +import net.minecraft.client.Minecraft; + +public class CallableType2 implements Callable { + final Minecraft mc; + + public CallableType2(Minecraft var1) { + this.mc = var1; + } + + public String func_82886_a() { + return "Client (map_client.txt)"; + } + + public Object call() { + return this.func_82886_a(); + } +} diff --git a/src/net/minecraft/src/CallableType3.java b/src/net/minecraft/src/CallableType3.java new file mode 100644 index 0000000..84f2dfe --- /dev/null +++ b/src/net/minecraft/src/CallableType3.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; + +class CallableType3 implements Callable { + final IntegratedServer theIntegratedServer; + + CallableType3(IntegratedServer var1) { + this.theIntegratedServer = var1; + } + + public String getType() { + return "Integrated Server (map_client.txt)"; + } + + public Object call() { + return this.getType(); + } +} diff --git a/src/net/minecraft/src/CallableUpdatingScreenName.java b/src/net/minecraft/src/CallableUpdatingScreenName.java new file mode 100644 index 0000000..9ade925 --- /dev/null +++ b/src/net/minecraft/src/CallableUpdatingScreenName.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.util.concurrent.Callable; +import net.minecraft.client.Minecraft; + +public class CallableUpdatingScreenName implements Callable { + final Minecraft theMinecraft; + + public CallableUpdatingScreenName(Minecraft var1) { + this.theMinecraft = var1; + } + + public String callUpdatingScreenName() { + return this.theMinecraft.currentScreen.getClass().getCanonicalName(); + } + + public Object call() { + return this.callUpdatingScreenName(); + } +} diff --git a/src/net/minecraft/src/CanvasCrashReport.java b/src/net/minecraft/src/CanvasCrashReport.java new file mode 100644 index 0000000..caa70c7 --- /dev/null +++ b/src/net/minecraft/src/CanvasCrashReport.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +import java.awt.Canvas; +import java.awt.Dimension; + +class CanvasCrashReport extends Canvas { + public CanvasCrashReport(int var1) { + this.setPreferredSize(new Dimension(var1, var1)); + this.setMinimumSize(new Dimension(var1, var1)); + } +} diff --git a/src/net/minecraft/src/CanvasMinecraftApplet.java b/src/net/minecraft/src/CanvasMinecraftApplet.java new file mode 100644 index 0000000..51f39f3 --- /dev/null +++ b/src/net/minecraft/src/CanvasMinecraftApplet.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import java.awt.Canvas; +import net.minecraft.client.MinecraftApplet; + +public class CanvasMinecraftApplet extends Canvas { + final MinecraftApplet mcApplet; + + public CanvasMinecraftApplet(MinecraftApplet var1) { + this.mcApplet = var1; + } + + public synchronized void addNotify() { + super.addNotify(); + this.mcApplet.startMainThread(); + } + + public synchronized void removeNotify() { + this.mcApplet.shutdown(); + super.removeNotify(); + } +} diff --git a/src/net/minecraft/src/CanvasMojangLogo.java b/src/net/minecraft/src/CanvasMojangLogo.java new file mode 100644 index 0000000..9fa0fcf --- /dev/null +++ b/src/net/minecraft/src/CanvasMojangLogo.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +import java.awt.Canvas; +import java.awt.Dimension; +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import java.awt.image.ImageObserver; +import java.io.IOException; +import javax.imageio.ImageIO; + +class CanvasMojangLogo extends Canvas { + private BufferedImage logo; + + public CanvasMojangLogo() { + try { + this.logo = ImageIO.read(PanelCrashReport.class.getResource("/gui/crash_logo.png")); + } catch (IOException var2) { + } + + byte var1 = 100; + this.setPreferredSize(new Dimension(var1, var1)); + this.setMinimumSize(new Dimension(var1, var1)); + } + + public void paint(Graphics var1) { + super.paint(var1); + var1.drawImage(this.logo, this.getWidth() / 2 - this.logo.getWidth() / 2, 32, (ImageObserver)null); + } +} diff --git a/src/net/minecraft/src/ChatAllowedCharacters.java b/src/net/minecraft/src/ChatAllowedCharacters.java new file mode 100644 index 0000000..714a64e --- /dev/null +++ b/src/net/minecraft/src/ChatAllowedCharacters.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.InputStreamReader; + +public class ChatAllowedCharacters { + public static final String allowedCharacters = getAllowedCharacters(); + public static final char[] allowedCharactersArray = new char[]{'/', '\n', '\r', '\t', '\u0000', '\f', '`', '?', '*', '\\', '<', '>', '|', '\"', ':'}; + + private static String getAllowedCharacters() { + String var0 = ""; + + try { + BufferedReader var1 = new BufferedReader(new InputStreamReader(ChatAllowedCharacters.class.getResourceAsStream("/font.txt"), "UTF-8")); + String var2 = ""; + + while(true) { + var2 = var1.readLine(); + if(var2 == null) { + var1.close(); + break; + } + + if(!var2.startsWith("#")) { + var0 = var0 + var2; + } + } + } catch (Exception var3) { + } + + return var0; + } + + public static final boolean isAllowedCharacter(char var0) { + return var0 != 167 && (allowedCharacters.indexOf(var0) >= 0 || var0 > 32); + } + + public static String filerAllowedCharacters(String var0) { + StringBuilder var1 = new StringBuilder(); + char[] var2 = var0.toCharArray(); + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + char var5 = var2[var4]; + if(isAllowedCharacter(var5)) { + var1.append(var5); + } + } + + return var1.toString(); + } +} diff --git a/src/net/minecraft/src/ChatClickData.java b/src/net/minecraft/src/ChatClickData.java new file mode 100644 index 0000000..48e317e --- /dev/null +++ b/src/net/minecraft/src/ChatClickData.java @@ -0,0 +1,67 @@ +package net.minecraft.src; + +import java.net.URI; +import java.net.URISyntaxException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import net.minecraft.client.Minecraft; + +public class ChatClickData { + public static final Pattern pattern = Pattern.compile("^(?:(https?)://)?([-\\w_\\.]{2,}\\.[a-z]{2,4})(/\\S*)?$"); + private final FontRenderer fontR; + private final ChatLine line; + private final int field_78312_d; + private final int field_78313_e; + private final String field_78310_f; + private final String clickedUrl; + + public ChatClickData(FontRenderer var1, ChatLine var2, int var3, int var4) { + this.fontR = var1; + this.line = var2; + this.field_78312_d = var3; + this.field_78313_e = var4; + this.field_78310_f = var1.trimStringToWidth(var2.getChatLineString(), var3); + this.clickedUrl = this.findClickedUrl(); + } + + public String getClickedUrl() { + return this.clickedUrl; + } + + public URI getURI() { + String var1 = this.getClickedUrl(); + if(var1 == null) { + return null; + } else { + Matcher var2 = pattern.matcher(var1); + if(var2.matches()) { + try { + String var3 = var2.group(0); + if(var2.group(1) == null) { + var3 = "http://" + var3; + } + + return new URI(var3); + } catch (URISyntaxException var4) { + Minecraft.getMinecraft().getLogAgent().logSevereException("Couldn\'t create URI from chat", var4); + } + } + + return null; + } + } + + private String findClickedUrl() { + int var1 = this.field_78310_f.lastIndexOf(" ", this.field_78310_f.length()) + 1; + if(var1 < 0) { + var1 = 0; + } + + int var2 = this.line.getChatLineString().indexOf(" ", var1); + if(var2 < 0) { + var2 = this.line.getChatLineString().length(); + } + + return StringUtils.stripControlCodes(this.line.getChatLineString().substring(var1, var2)); + } +} diff --git a/src/net/minecraft/src/ChatLine.java b/src/net/minecraft/src/ChatLine.java new file mode 100644 index 0000000..84755bc --- /dev/null +++ b/src/net/minecraft/src/ChatLine.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class ChatLine { + private final int updateCounterCreated; + private final String lineString; + private final int chatLineID; + + public ChatLine(int var1, String var2, int var3) { + this.lineString = var2; + this.updateCounterCreated = var1; + this.chatLineID = var3; + } + + public String getChatLineString() { + return this.lineString; + } + + public int getUpdatedCounter() { + return this.updateCounterCreated; + } + + public int getChatLineID() { + return this.chatLineID; + } +} diff --git a/src/net/minecraft/src/ChestItemRenderHelper.java b/src/net/minecraft/src/ChestItemRenderHelper.java new file mode 100644 index 0000000..cdca0d5 --- /dev/null +++ b/src/net/minecraft/src/ChestItemRenderHelper.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +public class ChestItemRenderHelper { + public static ChestItemRenderHelper instance = new ChestItemRenderHelper(); + private TileEntityChest theChest = new TileEntityChest(); + private TileEntityEnderChest theEnderChest = new TileEntityEnderChest(); + + public void renderChest(Block var1, int var2, float var3) { + if(var1.blockID == Block.enderChest.blockID) { + TileEntityRenderer.instance.renderTileEntityAt(this.theEnderChest, 0.0D, 0.0D, 0.0D, 0.0F); + } else { + TileEntityRenderer.instance.renderTileEntityAt(this.theChest, 0.0D, 0.0D, 0.0D, 0.0F); + } + + } +} diff --git a/src/net/minecraft/src/Chunk.java b/src/net/minecraft/src/Chunk.java new file mode 100644 index 0000000..e85374f --- /dev/null +++ b/src/net/minecraft/src/Chunk.java @@ -0,0 +1,957 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; + +public class Chunk { + public static boolean isLit; + private ExtendedBlockStorage[] storageArrays; + private byte[] blockBiomeArray; + public int[] precipitationHeightMap; + public boolean[] updateSkylightColumns; + public boolean isChunkLoaded; + public World worldObj; + public int[] heightMap; + public final int xPosition; + public final int zPosition; + private boolean isGapLightingUpdated; + public Map chunkTileEntityMap; + public List[] entityLists; + public boolean isTerrainPopulated; + public boolean isModified; + public boolean hasEntities; + public long lastSaveTime; + public boolean sendUpdates; + public int heightMapMinimum; + private int queuedLightChecks; + boolean field_76653_p; + + public Chunk(World var1, int var2, int var3) { + this.storageArrays = new ExtendedBlockStorage[16]; + this.blockBiomeArray = new byte[256]; + this.precipitationHeightMap = new int[256]; + this.updateSkylightColumns = new boolean[256]; + this.isGapLightingUpdated = false; + this.chunkTileEntityMap = new HashMap(); + this.isTerrainPopulated = false; + this.isModified = false; + this.hasEntities = false; + this.lastSaveTime = 0L; + this.sendUpdates = false; + this.heightMapMinimum = 0; + this.queuedLightChecks = 4096; + this.field_76653_p = false; + this.entityLists = new List[16]; + this.worldObj = var1; + this.xPosition = var2; + this.zPosition = var3; + this.heightMap = new int[256]; + + for(int var4 = 0; var4 < this.entityLists.length; ++var4) { + this.entityLists[var4] = new ArrayList(); + } + + Arrays.fill(this.precipitationHeightMap, -999); + Arrays.fill(this.blockBiomeArray, (byte)-1); + } + + public Chunk(World var1, byte[] var2, int var3, int var4) { + this(var1, var3, var4); + int var5 = var2.length / 256; + + for(int var6 = 0; var6 < 16; ++var6) { + for(int var7 = 0; var7 < 16; ++var7) { + for(int var8 = 0; var8 < var5; ++var8) { + byte var9 = var2[var6 << 11 | var7 << 7 | var8]; + if(var9 != 0) { + int var10 = var8 >> 4; + if(this.storageArrays[var10] == null) { + this.storageArrays[var10] = new ExtendedBlockStorage(var10 << 4, !var1.provider.hasNoSky); + } + + this.storageArrays[var10].setExtBlockID(var6, var8 & 15, var7, var9); + } + } + } + } + + } + + public boolean isAtLocation(int var1, int var2) { + return var1 == this.xPosition && var2 == this.zPosition; + } + + public int getHeightValue(int var1, int var2) { + return this.heightMap[var2 << 4 | var1]; + } + + public int getTopFilledSegment() { + for(int var1 = this.storageArrays.length - 1; var1 >= 0; --var1) { + if(this.storageArrays[var1] != null) { + return this.storageArrays[var1].getYLocation(); + } + } + + return 0; + } + + public ExtendedBlockStorage[] getBlockStorageArray() { + return this.storageArrays; + } + + public void generateHeightMap() { + int var1 = this.getTopFilledSegment(); + + for(int var2 = 0; var2 < 16; ++var2) { + for(int var3 = 0; var3 < 16; ++var3) { + this.precipitationHeightMap[var2 + (var3 << 4)] = -999; + + for(int var4 = var1 + 16 - 1; var4 > 0; --var4) { + int var5 = this.getBlockID(var2, var4 - 1, var3); + if(Block.lightOpacity[var5] != 0) { + this.heightMap[var3 << 4 | var2] = var4; + break; + } + } + } + } + + this.isModified = true; + } + + public void generateSkylightMap() { + int var1 = this.getTopFilledSegment(); + this.heightMapMinimum = Integer.MAX_VALUE; + + int var2; + int var3; + for(var2 = 0; var2 < 16; ++var2) { + for(var3 = 0; var3 < 16; ++var3) { + this.precipitationHeightMap[var2 + (var3 << 4)] = -999; + + int var4; + for(var4 = var1 + 16 - 1; var4 > 0; --var4) { + if(this.getBlockLightOpacity(var2, var4 - 1, var3) != 0) { + this.heightMap[var3 << 4 | var2] = var4; + if(var4 < this.heightMapMinimum) { + this.heightMapMinimum = var4; + } + break; + } + } + + if(!this.worldObj.provider.hasNoSky) { + var4 = 15; + int var5 = var1 + 16 - 1; + + do { + var4 -= this.getBlockLightOpacity(var2, var5, var3); + if(var4 > 0) { + ExtendedBlockStorage var6 = this.storageArrays[var5 >> 4]; + if(var6 != null) { + var6.setExtSkylightValue(var2, var5 & 15, var3, var4); + this.worldObj.markBlockForRenderUpdate((this.xPosition << 4) + var2, var5, (this.zPosition << 4) + var3); + } + } + + --var5; + } while(var5 > 0 && var4 > 0); + } + } + } + + this.isModified = true; + + for(var2 = 0; var2 < 16; ++var2) { + for(var3 = 0; var3 < 16; ++var3) { + this.propagateSkylightOcclusion(var2, var3); + } + } + + } + + private void propagateSkylightOcclusion(int var1, int var2) { + this.updateSkylightColumns[var1 + var2 * 16] = true; + this.isGapLightingUpdated = true; + } + + private void updateSkylight_do() { + this.worldObj.theProfiler.startSection("recheckGaps"); + if(this.worldObj.doChunksNearChunkExist(this.xPosition * 16 + 8, 0, this.zPosition * 16 + 8, 16)) { + for(int var1 = 0; var1 < 16; ++var1) { + for(int var2 = 0; var2 < 16; ++var2) { + if(this.updateSkylightColumns[var1 + var2 * 16]) { + this.updateSkylightColumns[var1 + var2 * 16] = false; + int var3 = this.getHeightValue(var1, var2); + int var4 = this.xPosition * 16 + var1; + int var5 = this.zPosition * 16 + var2; + int var6 = this.worldObj.getChunkHeightMapMinimum(var4 - 1, var5); + int var7 = this.worldObj.getChunkHeightMapMinimum(var4 + 1, var5); + int var8 = this.worldObj.getChunkHeightMapMinimum(var4, var5 - 1); + int var9 = this.worldObj.getChunkHeightMapMinimum(var4, var5 + 1); + if(var7 < var6) { + var6 = var7; + } + + if(var8 < var6) { + var6 = var8; + } + + if(var9 < var6) { + var6 = var9; + } + + this.checkSkylightNeighborHeight(var4, var5, var6); + this.checkSkylightNeighborHeight(var4 - 1, var5, var3); + this.checkSkylightNeighborHeight(var4 + 1, var5, var3); + this.checkSkylightNeighborHeight(var4, var5 - 1, var3); + this.checkSkylightNeighborHeight(var4, var5 + 1, var3); + } + } + } + + this.isGapLightingUpdated = false; + } + + this.worldObj.theProfiler.endSection(); + } + + private void checkSkylightNeighborHeight(int var1, int var2, int var3) { + int var4 = this.worldObj.getHeightValue(var1, var2); + if(var4 > var3) { + this.updateSkylightNeighborHeight(var1, var2, var3, var4 + 1); + } else if(var4 < var3) { + this.updateSkylightNeighborHeight(var1, var2, var4, var3 + 1); + } + + } + + private void updateSkylightNeighborHeight(int var1, int var2, int var3, int var4) { + if(var4 > var3 && this.worldObj.doChunksNearChunkExist(var1, 0, var2, 16)) { + for(int var5 = var3; var5 < var4; ++var5) { + this.worldObj.updateLightByType(EnumSkyBlock.Sky, var1, var5, var2); + } + + this.isModified = true; + } + + } + + private void relightBlock(int var1, int var2, int var3) { + int var4 = this.heightMap[var3 << 4 | var1] & 255; + int var5 = var4; + if(var2 > var4) { + var5 = var2; + } + + while(var5 > 0 && this.getBlockLightOpacity(var1, var5 - 1, var3) == 0) { + --var5; + } + + if(var5 != var4) { + this.worldObj.markBlocksDirtyVertical(var1 + this.xPosition * 16, var3 + this.zPosition * 16, var5, var4); + this.heightMap[var3 << 4 | var1] = var5; + int var6 = this.xPosition * 16 + var1; + int var7 = this.zPosition * 16 + var3; + int var8; + int var12; + if(!this.worldObj.provider.hasNoSky) { + ExtendedBlockStorage var9; + if(var5 < var4) { + for(var8 = var5; var8 < var4; ++var8) { + var9 = this.storageArrays[var8 >> 4]; + if(var9 != null) { + var9.setExtSkylightValue(var1, var8 & 15, var3, 15); + this.worldObj.markBlockForRenderUpdate((this.xPosition << 4) + var1, var8, (this.zPosition << 4) + var3); + } + } + } else { + for(var8 = var4; var8 < var5; ++var8) { + var9 = this.storageArrays[var8 >> 4]; + if(var9 != null) { + var9.setExtSkylightValue(var1, var8 & 15, var3, 0); + this.worldObj.markBlockForRenderUpdate((this.xPosition << 4) + var1, var8, (this.zPosition << 4) + var3); + } + } + } + + var8 = 15; + + while(var5 > 0 && var8 > 0) { + --var5; + var12 = this.getBlockLightOpacity(var1, var5, var3); + if(var12 == 0) { + var12 = 1; + } + + var8 -= var12; + if(var8 < 0) { + var8 = 0; + } + + ExtendedBlockStorage var10 = this.storageArrays[var5 >> 4]; + if(var10 != null) { + var10.setExtSkylightValue(var1, var5 & 15, var3, var8); + } + } + } + + var8 = this.heightMap[var3 << 4 | var1]; + var12 = var4; + int var13 = var8; + if(var8 < var4) { + var12 = var8; + var13 = var4; + } + + if(var8 < this.heightMapMinimum) { + this.heightMapMinimum = var8; + } + + if(!this.worldObj.provider.hasNoSky) { + this.updateSkylightNeighborHeight(var6 - 1, var7, var12, var13); + this.updateSkylightNeighborHeight(var6 + 1, var7, var12, var13); + this.updateSkylightNeighborHeight(var6, var7 - 1, var12, var13); + this.updateSkylightNeighborHeight(var6, var7 + 1, var12, var13); + this.updateSkylightNeighborHeight(var6, var7, var12, var13); + } + + this.isModified = true; + } + } + + public int getBlockLightOpacity(int var1, int var2, int var3) { + return Block.lightOpacity[this.getBlockID(var1, var2, var3)]; + } + + public int getBlockID(int var1, int var2, int var3) { + if(var2 >> 4 >= this.storageArrays.length) { + return 0; + } else { + ExtendedBlockStorage var4 = this.storageArrays[var2 >> 4]; + return var4 != null ? var4.getExtBlockID(var1, var2 & 15, var3) : 0; + } + } + + public int getBlockMetadata(int var1, int var2, int var3) { + if(var2 >> 4 >= this.storageArrays.length) { + return 0; + } else { + ExtendedBlockStorage var4 = this.storageArrays[var2 >> 4]; + return var4 != null ? var4.getExtBlockMetadata(var1, var2 & 15, var3) : 0; + } + } + + public boolean setBlockIDWithMetadata(int var1, int var2, int var3, int var4, int var5) { + int var6 = var3 << 4 | var1; + if(var2 >= this.precipitationHeightMap[var6] - 1) { + this.precipitationHeightMap[var6] = -999; + } + + int var7 = this.heightMap[var6]; + int var8 = this.getBlockID(var1, var2, var3); + int var9 = this.getBlockMetadata(var1, var2, var3); + if(var8 == var4 && var9 == var5) { + return false; + } else { + ExtendedBlockStorage var10 = this.storageArrays[var2 >> 4]; + boolean var11 = false; + if(var10 == null) { + if(var4 == 0) { + return false; + } + + var10 = this.storageArrays[var2 >> 4] = new ExtendedBlockStorage(var2 >> 4 << 4, !this.worldObj.provider.hasNoSky); + var11 = var2 >= var7; + } + + int var12 = this.xPosition * 16 + var1; + int var13 = this.zPosition * 16 + var3; + if(var8 != 0 && !this.worldObj.isRemote) { + Block.blocksList[var8].onSetBlockIDWithMetaData(this.worldObj, var12, var2, var13, var9); + } + + var10.setExtBlockID(var1, var2 & 15, var3, var4); + if(var8 != 0) { + if(!this.worldObj.isRemote) { + Block.blocksList[var8].breakBlock(this.worldObj, var12, var2, var13, var8, var9); + } else if(Block.blocksList[var8] instanceof ITileEntityProvider && var8 != var4) { + this.worldObj.removeBlockTileEntity(var12, var2, var13); + } + } + + if(var10.getExtBlockID(var1, var2 & 15, var3) != var4) { + return false; + } else { + var10.setExtBlockMetadata(var1, var2 & 15, var3, var5); + if(var11) { + this.generateSkylightMap(); + } else { + if(Block.lightOpacity[var4 & 4095] > 0) { + if(var2 >= var7) { + this.relightBlock(var1, var2 + 1, var3); + } + } else if(var2 == var7 - 1) { + this.relightBlock(var1, var2, var3); + } + + this.propagateSkylightOcclusion(var1, var3); + } + + TileEntity var14; + if(var4 != 0) { + if(!this.worldObj.isRemote) { + Block.blocksList[var4].onBlockAdded(this.worldObj, var12, var2, var13); + } + + if(Block.blocksList[var4] instanceof ITileEntityProvider) { + var14 = this.getChunkBlockTileEntity(var1, var2, var3); + if(var14 == null) { + var14 = ((ITileEntityProvider)Block.blocksList[var4]).createNewTileEntity(this.worldObj); + this.worldObj.setBlockTileEntity(var12, var2, var13, var14); + } + + if(var14 != null) { + var14.updateContainingBlockInfo(); + } + } + } else if(var8 > 0 && Block.blocksList[var8] instanceof ITileEntityProvider) { + var14 = this.getChunkBlockTileEntity(var1, var2, var3); + if(var14 != null) { + var14.updateContainingBlockInfo(); + } + } + + this.isModified = true; + return true; + } + } + } + + public boolean setBlockMetadata(int var1, int var2, int var3, int var4) { + ExtendedBlockStorage var5 = this.storageArrays[var2 >> 4]; + if(var5 == null) { + return false; + } else { + int var6 = var5.getExtBlockMetadata(var1, var2 & 15, var3); + if(var6 == var4) { + return false; + } else { + this.isModified = true; + var5.setExtBlockMetadata(var1, var2 & 15, var3, var4); + int var7 = var5.getExtBlockID(var1, var2 & 15, var3); + if(var7 > 0 && Block.blocksList[var7] instanceof ITileEntityProvider) { + TileEntity var8 = this.getChunkBlockTileEntity(var1, var2, var3); + if(var8 != null) { + var8.updateContainingBlockInfo(); + var8.blockMetadata = var4; + } + } + + return true; + } + } + } + + public int getSavedLightValue(EnumSkyBlock var1, int var2, int var3, int var4) { + ExtendedBlockStorage var5 = this.storageArrays[var3 >> 4]; + return var5 == null ? (this.canBlockSeeTheSky(var2, var3, var4) ? var1.defaultLightValue : 0) : (var1 == EnumSkyBlock.Sky ? (this.worldObj.provider.hasNoSky ? 0 : var5.getExtSkylightValue(var2, var3 & 15, var4)) : (var1 == EnumSkyBlock.Block ? var5.getExtBlocklightValue(var2, var3 & 15, var4) : var1.defaultLightValue)); + } + + public void setLightValue(EnumSkyBlock var1, int var2, int var3, int var4, int var5) { + ExtendedBlockStorage var6 = this.storageArrays[var3 >> 4]; + if(var6 == null) { + var6 = this.storageArrays[var3 >> 4] = new ExtendedBlockStorage(var3 >> 4 << 4, !this.worldObj.provider.hasNoSky); + this.generateSkylightMap(); + } + + this.isModified = true; + if(var1 == EnumSkyBlock.Sky) { + if(!this.worldObj.provider.hasNoSky) { + var6.setExtSkylightValue(var2, var3 & 15, var4, var5); + } + } else if(var1 == EnumSkyBlock.Block) { + var6.setExtBlocklightValue(var2, var3 & 15, var4, var5); + } + + } + + public int getBlockLightValue(int var1, int var2, int var3, int var4) { + ExtendedBlockStorage var5 = this.storageArrays[var2 >> 4]; + if(var5 == null) { + return !this.worldObj.provider.hasNoSky && var4 < EnumSkyBlock.Sky.defaultLightValue ? EnumSkyBlock.Sky.defaultLightValue - var4 : 0; + } else { + int var6 = this.worldObj.provider.hasNoSky ? 0 : var5.getExtSkylightValue(var1, var2 & 15, var3); + if(var6 > 0) { + isLit = true; + } + + var6 -= var4; + int var7 = var5.getExtBlocklightValue(var1, var2 & 15, var3); + if(var7 > var6) { + var6 = var7; + } + + return var6; + } + } + + public void addEntity(Entity var1) { + this.hasEntities = true; + int var2 = MathHelper.floor_double(var1.posX / 16.0D); + int var3 = MathHelper.floor_double(var1.posZ / 16.0D); + if(var2 != this.xPosition || var3 != this.zPosition) { + this.worldObj.getWorldLogAgent().logSevere("Wrong location! " + var1); + Thread.dumpStack(); + } + + int var4 = MathHelper.floor_double(var1.posY / 16.0D); + if(var4 < 0) { + var4 = 0; + } + + if(var4 >= this.entityLists.length) { + var4 = this.entityLists.length - 1; + } + + var1.addedToChunk = true; + var1.chunkCoordX = this.xPosition; + var1.chunkCoordY = var4; + var1.chunkCoordZ = this.zPosition; + this.entityLists[var4].add(var1); + } + + public void removeEntity(Entity var1) { + this.removeEntityAtIndex(var1, var1.chunkCoordY); + } + + public void removeEntityAtIndex(Entity var1, int var2) { + if(var2 < 0) { + var2 = 0; + } + + if(var2 >= this.entityLists.length) { + var2 = this.entityLists.length - 1; + } + + this.entityLists[var2].remove(var1); + } + + public boolean canBlockSeeTheSky(int var1, int var2, int var3) { + return var2 >= this.heightMap[var3 << 4 | var1]; + } + + public TileEntity getChunkBlockTileEntity(int var1, int var2, int var3) { + ChunkPosition var4 = new ChunkPosition(var1, var2, var3); + TileEntity var5 = (TileEntity)this.chunkTileEntityMap.get(var4); + if(var5 == null) { + int var6 = this.getBlockID(var1, var2, var3); + if(var6 <= 0 || !Block.blocksList[var6].hasTileEntity()) { + return null; + } + + if(var5 == null) { + var5 = ((ITileEntityProvider)Block.blocksList[var6]).createNewTileEntity(this.worldObj); + this.worldObj.setBlockTileEntity(this.xPosition * 16 + var1, var2, this.zPosition * 16 + var3, var5); + } + + var5 = (TileEntity)this.chunkTileEntityMap.get(var4); + } + + if(var5 != null && var5.isInvalid()) { + this.chunkTileEntityMap.remove(var4); + return null; + } else { + return var5; + } + } + + public void addTileEntity(TileEntity var1) { + int var2 = var1.xCoord - this.xPosition * 16; + int var3 = var1.yCoord; + int var4 = var1.zCoord - this.zPosition * 16; + this.setChunkBlockTileEntity(var2, var3, var4, var1); + if(this.isChunkLoaded) { + this.worldObj.loadedTileEntityList.add(var1); + } + + } + + public void setChunkBlockTileEntity(int var1, int var2, int var3, TileEntity var4) { + ChunkPosition var5 = new ChunkPosition(var1, var2, var3); + var4.setWorldObj(this.worldObj); + var4.xCoord = this.xPosition * 16 + var1; + var4.yCoord = var2; + var4.zCoord = this.zPosition * 16 + var3; + if(this.getBlockID(var1, var2, var3) != 0 && Block.blocksList[this.getBlockID(var1, var2, var3)] instanceof ITileEntityProvider) { + if(this.chunkTileEntityMap.containsKey(var5)) { + ((TileEntity)this.chunkTileEntityMap.get(var5)).invalidate(); + } + + var4.validate(); + this.chunkTileEntityMap.put(var5, var4); + } + } + + public void removeChunkBlockTileEntity(int var1, int var2, int var3) { + ChunkPosition var4 = new ChunkPosition(var1, var2, var3); + if(this.isChunkLoaded) { + TileEntity var5 = (TileEntity)this.chunkTileEntityMap.remove(var4); + if(var5 != null) { + var5.invalidate(); + } + } + + } + + public void onChunkLoad() { + this.isChunkLoaded = true; + this.worldObj.addTileEntity(this.chunkTileEntityMap.values()); + + for(int var1 = 0; var1 < this.entityLists.length; ++var1) { + this.worldObj.addLoadedEntities(this.entityLists[var1]); + } + + } + + public void onChunkUnload() { + this.isChunkLoaded = false; + Iterator var1 = this.chunkTileEntityMap.values().iterator(); + + while(var1.hasNext()) { + TileEntity var2 = (TileEntity)var1.next(); + this.worldObj.markTileEntityForDespawn(var2); + } + + for(int var3 = 0; var3 < this.entityLists.length; ++var3) { + this.worldObj.unloadEntities(this.entityLists[var3]); + } + + } + + public void setChunkModified() { + this.isModified = true; + } + + public void getEntitiesWithinAABBForEntity(Entity var1, AxisAlignedBB var2, List var3, IEntitySelector var4) { + int var5 = MathHelper.floor_double((var2.minY - 2.0D) / 16.0D); + int var6 = MathHelper.floor_double((var2.maxY + 2.0D) / 16.0D); + if(var5 < 0) { + var5 = 0; + var6 = Math.max(var5, var6); + } + + if(var6 >= this.entityLists.length) { + var6 = this.entityLists.length - 1; + var5 = Math.min(var5, var6); + } + + for(int var7 = var5; var7 <= var6; ++var7) { + List var8 = this.entityLists[var7]; + + for(int var9 = 0; var9 < var8.size(); ++var9) { + Entity var10 = (Entity)var8.get(var9); + if(var10 != var1 && var10.boundingBox.intersectsWith(var2) && (var4 == null || var4.isEntityApplicable(var10))) { + var3.add(var10); + Entity[] var11 = var10.getParts(); + if(var11 != null) { + for(int var12 = 0; var12 < var11.length; ++var12) { + var10 = var11[var12]; + if(var10 != var1 && var10.boundingBox.intersectsWith(var2) && (var4 == null || var4.isEntityApplicable(var10))) { + var3.add(var10); + } + } + } + } + } + } + + } + + public void getEntitiesOfTypeWithinAAAB(Class var1, AxisAlignedBB var2, List var3, IEntitySelector var4) { + int var5 = MathHelper.floor_double((var2.minY - 2.0D) / 16.0D); + int var6 = MathHelper.floor_double((var2.maxY + 2.0D) / 16.0D); + if(var5 < 0) { + var5 = 0; + } else if(var5 >= this.entityLists.length) { + var5 = this.entityLists.length - 1; + } + + if(var6 >= this.entityLists.length) { + var6 = this.entityLists.length - 1; + } else if(var6 < 0) { + var6 = 0; + } + + for(int var7 = var5; var7 <= var6; ++var7) { + List var8 = this.entityLists[var7]; + + for(int var9 = 0; var9 < var8.size(); ++var9) { + Entity var10 = (Entity)var8.get(var9); + if(var1.isAssignableFrom(var10.getClass()) && var10.boundingBox.intersectsWith(var2) && (var4 == null || var4.isEntityApplicable(var10))) { + var3.add(var10); + } + } + } + + } + + public boolean needsSaving(boolean var1) { + if(var1) { + if(this.hasEntities && this.worldObj.getTotalWorldTime() != this.lastSaveTime || this.isModified) { + return true; + } + } else if(this.hasEntities && this.worldObj.getTotalWorldTime() >= this.lastSaveTime + 600L) { + return true; + } + + return this.isModified; + } + + public Random getRandomWithSeed(long var1) { + return new Random(this.worldObj.getSeed() + (long)(this.xPosition * this.xPosition * 4987142) + (long)(this.xPosition * 5947611) + (long)(this.zPosition * this.zPosition) * 4392871L + (long)(this.zPosition * 389711) ^ var1); + } + + public boolean isEmpty() { + return false; + } + + public void populateChunk(IChunkProvider var1, IChunkProvider var2, int var3, int var4) { + if(!this.isTerrainPopulated && var1.chunkExists(var3 + 1, var4 + 1) && var1.chunkExists(var3, var4 + 1) && var1.chunkExists(var3 + 1, var4)) { + var1.populate(var2, var3, var4); + } + + if(var1.chunkExists(var3 - 1, var4) && !var1.provideChunk(var3 - 1, var4).isTerrainPopulated && var1.chunkExists(var3 - 1, var4 + 1) && var1.chunkExists(var3, var4 + 1) && var1.chunkExists(var3 - 1, var4 + 1)) { + var1.populate(var2, var3 - 1, var4); + } + + if(var1.chunkExists(var3, var4 - 1) && !var1.provideChunk(var3, var4 - 1).isTerrainPopulated && var1.chunkExists(var3 + 1, var4 - 1) && var1.chunkExists(var3 + 1, var4 - 1) && var1.chunkExists(var3 + 1, var4)) { + var1.populate(var2, var3, var4 - 1); + } + + if(var1.chunkExists(var3 - 1, var4 - 1) && !var1.provideChunk(var3 - 1, var4 - 1).isTerrainPopulated && var1.chunkExists(var3, var4 - 1) && var1.chunkExists(var3 - 1, var4)) { + var1.populate(var2, var3 - 1, var4 - 1); + } + + } + + public int getPrecipitationHeight(int var1, int var2) { + int var3 = var1 | var2 << 4; + int var4 = this.precipitationHeightMap[var3]; + if(var4 == -999) { + int var5 = this.getTopFilledSegment() + 15; + var4 = -1; + + while(true) { + while(var5 > 0 && var4 == -1) { + int var6 = this.getBlockID(var1, var5, var2); + Material var7 = var6 == 0 ? Material.air : Block.blocksList[var6].blockMaterial; + if(!var7.blocksMovement() && !var7.isLiquid()) { + --var5; + } else { + var4 = var5 + 1; + } + } + + this.precipitationHeightMap[var3] = var4; + break; + } + } + + return var4; + } + + public void updateSkylight() { + if(this.isGapLightingUpdated && !this.worldObj.provider.hasNoSky) { + this.updateSkylight_do(); + } + + } + + public ChunkCoordIntPair getChunkCoordIntPair() { + return new ChunkCoordIntPair(this.xPosition, this.zPosition); + } + + public boolean getAreLevelsEmpty(int var1, int var2) { + if(var1 < 0) { + var1 = 0; + } + + if(var2 >= 256) { + var2 = 255; + } + + for(int var3 = var1; var3 <= var2; var3 += 16) { + ExtendedBlockStorage var4 = this.storageArrays[var3 >> 4]; + if(var4 != null && !var4.isEmpty()) { + return false; + } + } + + return true; + } + + public void setStorageArrays(ExtendedBlockStorage[] var1) { + this.storageArrays = var1; + } + + public void fillChunk(byte[] var1, int var2, int var3, boolean var4) { + int var5 = 0; + boolean var6 = !this.worldObj.provider.hasNoSky; + + int var7; + for(var7 = 0; var7 < this.storageArrays.length; ++var7) { + if((var2 & 1 << var7) != 0) { + if(this.storageArrays[var7] == null) { + this.storageArrays[var7] = new ExtendedBlockStorage(var7 << 4, var6); + } + + byte[] var8 = this.storageArrays[var7].getBlockLSBArray(); + System.arraycopy(var1, var5, var8, 0, var8.length); + var5 += var8.length; + } else if(var4 && this.storageArrays[var7] != null) { + this.storageArrays[var7] = null; + } + } + + NibbleArray var9; + for(var7 = 0; var7 < this.storageArrays.length; ++var7) { + if((var2 & 1 << var7) != 0 && this.storageArrays[var7] != null) { + var9 = this.storageArrays[var7].getMetadataArray(); + System.arraycopy(var1, var5, var9.data, 0, var9.data.length); + var5 += var9.data.length; + } + } + + for(var7 = 0; var7 < this.storageArrays.length; ++var7) { + if((var2 & 1 << var7) != 0 && this.storageArrays[var7] != null) { + var9 = this.storageArrays[var7].getBlocklightArray(); + System.arraycopy(var1, var5, var9.data, 0, var9.data.length); + var5 += var9.data.length; + } + } + + if(var6) { + for(var7 = 0; var7 < this.storageArrays.length; ++var7) { + if((var2 & 1 << var7) != 0 && this.storageArrays[var7] != null) { + var9 = this.storageArrays[var7].getSkylightArray(); + System.arraycopy(var1, var5, var9.data, 0, var9.data.length); + var5 += var9.data.length; + } + } + } + + for(var7 = 0; var7 < this.storageArrays.length; ++var7) { + if((var3 & 1 << var7) != 0) { + if(this.storageArrays[var7] == null) { + var5 += 2048; + } else { + var9 = this.storageArrays[var7].getBlockMSBArray(); + if(var9 == null) { + var9 = this.storageArrays[var7].createBlockMSBArray(); + } + + System.arraycopy(var1, var5, var9.data, 0, var9.data.length); + var5 += var9.data.length; + } + } else if(var4 && this.storageArrays[var7] != null && this.storageArrays[var7].getBlockMSBArray() != null) { + this.storageArrays[var7].clearMSBArray(); + } + } + + if(var4) { + System.arraycopy(var1, var5, this.blockBiomeArray, 0, this.blockBiomeArray.length); + int var10000 = var5 + this.blockBiomeArray.length; + } + + for(var7 = 0; var7 < this.storageArrays.length; ++var7) { + if(this.storageArrays[var7] != null && (var2 & 1 << var7) != 0) { + this.storageArrays[var7].removeInvalidBlocks(); + } + } + + this.generateHeightMap(); + Iterator var11 = this.chunkTileEntityMap.values().iterator(); + + while(var11.hasNext()) { + TileEntity var10 = (TileEntity)var11.next(); + var10.updateContainingBlockInfo(); + } + + } + + public BiomeGenBase getBiomeGenForWorldCoords(int var1, int var2, WorldChunkManager var3) { + int var4 = this.blockBiomeArray[var2 << 4 | var1] & 255; + if(var4 == 255) { + BiomeGenBase var5 = var3.getBiomeGenAt((this.xPosition << 4) + var1, (this.zPosition << 4) + var2); + var4 = var5.biomeID; + this.blockBiomeArray[var2 << 4 | var1] = (byte)(var4 & 255); + } + + return BiomeGenBase.biomeList[var4] == null ? BiomeGenBase.plains : BiomeGenBase.biomeList[var4]; + } + + public byte[] getBiomeArray() { + return this.blockBiomeArray; + } + + public void setBiomeArray(byte[] var1) { + this.blockBiomeArray = var1; + } + + public void resetRelightChecks() { + this.queuedLightChecks = 0; + } + + public void enqueueRelightChecks() { + for(int var1 = 0; var1 < 8; ++var1) { + if(this.queuedLightChecks >= 4096) { + return; + } + + int var2 = this.queuedLightChecks % 16; + int var3 = this.queuedLightChecks / 16 % 16; + int var4 = this.queuedLightChecks / 256; + ++this.queuedLightChecks; + int var5 = (this.xPosition << 4) + var3; + int var6 = (this.zPosition << 4) + var4; + + for(int var7 = 0; var7 < 16; ++var7) { + int var8 = (var2 << 4) + var7; + if(this.storageArrays[var2] == null && (var7 == 0 || var7 == 15 || var3 == 0 || var3 == 15 || var4 == 0 || var4 == 15) || this.storageArrays[var2] != null && this.storageArrays[var2].getExtBlockID(var3, var7, var4) == 0) { + if(Block.lightValue[this.worldObj.getBlockId(var5, var8 - 1, var6)] > 0) { + this.worldObj.updateAllLightTypes(var5, var8 - 1, var6); + } + + if(Block.lightValue[this.worldObj.getBlockId(var5, var8 + 1, var6)] > 0) { + this.worldObj.updateAllLightTypes(var5, var8 + 1, var6); + } + + if(Block.lightValue[this.worldObj.getBlockId(var5 - 1, var8, var6)] > 0) { + this.worldObj.updateAllLightTypes(var5 - 1, var8, var6); + } + + if(Block.lightValue[this.worldObj.getBlockId(var5 + 1, var8, var6)] > 0) { + this.worldObj.updateAllLightTypes(var5 + 1, var8, var6); + } + + if(Block.lightValue[this.worldObj.getBlockId(var5, var8, var6 - 1)] > 0) { + this.worldObj.updateAllLightTypes(var5, var8, var6 - 1); + } + + if(Block.lightValue[this.worldObj.getBlockId(var5, var8, var6 + 1)] > 0) { + this.worldObj.updateAllLightTypes(var5, var8, var6 + 1); + } + + this.worldObj.updateAllLightTypes(var5, var8, var6); + } + } + } + + } +} diff --git a/src/net/minecraft/src/ChunkCache.java b/src/net/minecraft/src/ChunkCache.java new file mode 100644 index 0000000..b686a48 --- /dev/null +++ b/src/net/minecraft/src/ChunkCache.java @@ -0,0 +1,267 @@ +package net.minecraft.src; + +public class ChunkCache implements IBlockAccess { + private int chunkX; + private int chunkZ; + private Chunk[][] chunkArray; + private boolean hasExtendedLevels; + private World worldObj; + + public ChunkCache(World var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { + this.worldObj = var1; + this.chunkX = var2 - var8 >> 4; + this.chunkZ = var4 - var8 >> 4; + int var9 = var5 + var8 >> 4; + int var10 = var7 + var8 >> 4; + this.chunkArray = new Chunk[var9 - this.chunkX + 1][var10 - this.chunkZ + 1]; + this.hasExtendedLevels = true; + + int var11; + int var12; + Chunk var13; + for(var11 = this.chunkX; var11 <= var9; ++var11) { + for(var12 = this.chunkZ; var12 <= var10; ++var12) { + var13 = var1.getChunkFromChunkCoords(var11, var12); + if(var13 != null) { + this.chunkArray[var11 - this.chunkX][var12 - this.chunkZ] = var13; + } + } + } + + for(var11 = var2 >> 4; var11 <= var5 >> 4; ++var11) { + for(var12 = var4 >> 4; var12 <= var7 >> 4; ++var12) { + var13 = this.chunkArray[var11 - this.chunkX][var12 - this.chunkZ]; + if(var13 != null && !var13.getAreLevelsEmpty(var3, var6)) { + this.hasExtendedLevels = false; + } + } + } + + } + + public boolean extendedLevelsInChunkCache() { + return this.hasExtendedLevels; + } + + public int getBlockId(int var1, int var2, int var3) { + if(var2 < 0) { + return 0; + } else if(var2 >= 256) { + return 0; + } else { + int var4 = (var1 >> 4) - this.chunkX; + int var5 = (var3 >> 4) - this.chunkZ; + if(var4 >= 0 && var4 < this.chunkArray.length && var5 >= 0 && var5 < this.chunkArray[var4].length) { + Chunk var6 = this.chunkArray[var4][var5]; + return var6 == null ? 0 : var6.getBlockID(var1 & 15, var2, var3 & 15); + } else { + return 0; + } + } + } + + public TileEntity getBlockTileEntity(int var1, int var2, int var3) { + int var4 = (var1 >> 4) - this.chunkX; + int var5 = (var3 >> 4) - this.chunkZ; + return this.chunkArray[var4][var5].getChunkBlockTileEntity(var1 & 15, var2, var3 & 15); + } + + public float getBrightness(int var1, int var2, int var3, int var4) { + int var5 = this.getLightValue(var1, var2, var3); + if(var5 < var4) { + var5 = var4; + } + + return this.worldObj.provider.lightBrightnessTable[var5]; + } + + public int getLightBrightnessForSkyBlocks(int var1, int var2, int var3, int var4) { + int var5 = this.getSkyBlockTypeBrightness(EnumSkyBlock.Sky, var1, var2, var3); + int var6 = this.getSkyBlockTypeBrightness(EnumSkyBlock.Block, var1, var2, var3); + if(var6 < var4) { + var6 = var4; + } + + return var5 << 20 | var6 << 4; + } + + public float getLightBrightness(int var1, int var2, int var3) { + return this.worldObj.provider.lightBrightnessTable[this.getLightValue(var1, var2, var3)]; + } + + public int getLightValue(int var1, int var2, int var3) { + return this.getLightValueExt(var1, var2, var3, true); + } + + public int getLightValueExt(int var1, int var2, int var3, boolean var4) { + if(var1 >= -30000000 && var3 >= -30000000 && var1 < 30000000 && var3 <= 30000000) { + int var5; + int var6; + if(var4) { + var5 = this.getBlockId(var1, var2, var3); + if(var5 == Block.stoneSingleSlab.blockID || var5 == Block.woodSingleSlab.blockID || var5 == Block.tilledField.blockID || var5 == Block.stairsWoodOak.blockID || var5 == Block.stairsCobblestone.blockID) { + var6 = this.getLightValueExt(var1, var2 + 1, var3, false); + int var7 = this.getLightValueExt(var1 + 1, var2, var3, false); + int var8 = this.getLightValueExt(var1 - 1, var2, var3, false); + int var9 = this.getLightValueExt(var1, var2, var3 + 1, false); + int var10 = this.getLightValueExt(var1, var2, var3 - 1, false); + if(var7 > var6) { + var6 = var7; + } + + if(var8 > var6) { + var6 = var8; + } + + if(var9 > var6) { + var6 = var9; + } + + if(var10 > var6) { + var6 = var10; + } + + return var6; + } + } + + if(var2 < 0) { + return 0; + } else if(var2 >= 256) { + var5 = 15 - this.worldObj.skylightSubtracted; + if(var5 < 0) { + var5 = 0; + } + + return var5; + } else { + var5 = (var1 >> 4) - this.chunkX; + var6 = (var3 >> 4) - this.chunkZ; + return this.chunkArray[var5][var6].getBlockLightValue(var1 & 15, var2, var3 & 15, this.worldObj.skylightSubtracted); + } + } else { + return 15; + } + } + + public int getBlockMetadata(int var1, int var2, int var3) { + if(var2 < 0) { + return 0; + } else if(var2 >= 256) { + return 0; + } else { + int var4 = (var1 >> 4) - this.chunkX; + int var5 = (var3 >> 4) - this.chunkZ; + return this.chunkArray[var4][var5].getBlockMetadata(var1 & 15, var2, var3 & 15); + } + } + + public Material getBlockMaterial(int var1, int var2, int var3) { + int var4 = this.getBlockId(var1, var2, var3); + return var4 == 0 ? Material.air : Block.blocksList[var4].blockMaterial; + } + + public BiomeGenBase getBiomeGenForCoords(int var1, int var2) { + return this.worldObj.getBiomeGenForCoords(var1, var2); + } + + public boolean isBlockOpaqueCube(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return var4 == null ? false : var4.isOpaqueCube(); + } + + public boolean isBlockNormalCube(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return var4 == null ? false : var4.blockMaterial.blocksMovement() && var4.renderAsNormalBlock(); + } + + public boolean doesBlockHaveSolidTopSurface(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return this.worldObj.isBlockTopFacingSurfaceSolid(var4, this.getBlockMetadata(var1, var2, var3)); + } + + public Vec3Pool getWorldVec3Pool() { + return this.worldObj.getWorldVec3Pool(); + } + + public boolean isAirBlock(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return var4 == null; + } + + public int getSkyBlockTypeBrightness(EnumSkyBlock var1, int var2, int var3, int var4) { + if(var3 < 0) { + var3 = 0; + } + + if(var3 >= 256) { + var3 = 255; + } + + if(var3 >= 0 && var3 < 256 && var2 >= -30000000 && var4 >= -30000000 && var2 < 30000000 && var4 <= 30000000) { + if(var1 == EnumSkyBlock.Sky && this.worldObj.provider.hasNoSky) { + return 0; + } else { + int var5; + int var6; + if(Block.useNeighborBrightness[this.getBlockId(var2, var3, var4)]) { + var5 = this.getSpecialBlockBrightness(var1, var2, var3 + 1, var4); + var6 = this.getSpecialBlockBrightness(var1, var2 + 1, var3, var4); + int var7 = this.getSpecialBlockBrightness(var1, var2 - 1, var3, var4); + int var8 = this.getSpecialBlockBrightness(var1, var2, var3, var4 + 1); + int var9 = this.getSpecialBlockBrightness(var1, var2, var3, var4 - 1); + if(var6 > var5) { + var5 = var6; + } + + if(var7 > var5) { + var5 = var7; + } + + if(var8 > var5) { + var5 = var8; + } + + if(var9 > var5) { + var5 = var9; + } + + return var5; + } else { + var5 = (var2 >> 4) - this.chunkX; + var6 = (var4 >> 4) - this.chunkZ; + return this.chunkArray[var5][var6].getSavedLightValue(var1, var2 & 15, var3, var4 & 15); + } + } + } else { + return var1.defaultLightValue; + } + } + + public int getSpecialBlockBrightness(EnumSkyBlock var1, int var2, int var3, int var4) { + if(var3 < 0) { + var3 = 0; + } + + if(var3 >= 256) { + var3 = 255; + } + + if(var3 >= 0 && var3 < 256 && var2 >= -30000000 && var4 >= -30000000 && var2 < 30000000 && var4 <= 30000000) { + int var5 = (var2 >> 4) - this.chunkX; + int var6 = (var4 >> 4) - this.chunkZ; + return this.chunkArray[var5][var6].getSavedLightValue(var1, var2 & 15, var3, var4 & 15); + } else { + return var1.defaultLightValue; + } + } + + public int getHeight() { + return 256; + } + + public int isBlockProvidingPowerTo(int var1, int var2, int var3, int var4) { + int var5 = this.getBlockId(var1, var2, var3); + return var5 == 0 ? 0 : Block.blocksList[var5].isProvidingStrongPower(this, var1, var2, var3, var4); + } +} diff --git a/src/net/minecraft/src/ChunkCoordIntPair.java b/src/net/minecraft/src/ChunkCoordIntPair.java new file mode 100644 index 0000000..bf2ef92 --- /dev/null +++ b/src/net/minecraft/src/ChunkCoordIntPair.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +public class ChunkCoordIntPair { + public final int chunkXPos; + public final int chunkZPos; + + public ChunkCoordIntPair(int var1, int var2) { + this.chunkXPos = var1; + this.chunkZPos = var2; + } + + public static long chunkXZ2Int(int var0, int var1) { + return (long)var0 & 4294967295L | ((long)var1 & 4294967295L) << 32; + } + + public int hashCode() { + long var1 = chunkXZ2Int(this.chunkXPos, this.chunkZPos); + int var3 = (int)var1; + int var4 = (int)(var1 >> 32); + return var3 ^ var4; + } + + public boolean equals(Object var1) { + ChunkCoordIntPair var2 = (ChunkCoordIntPair)var1; + return var2.chunkXPos == this.chunkXPos && var2.chunkZPos == this.chunkZPos; + } + + public int getCenterXPos() { + return (this.chunkXPos << 4) + 8; + } + + public int getCenterZPosition() { + return (this.chunkZPos << 4) + 8; + } + + public ChunkPosition getChunkPosition(int var1) { + return new ChunkPosition(this.getCenterXPos(), var1, this.getCenterZPosition()); + } + + public String toString() { + return "[" + this.chunkXPos + ", " + this.chunkZPos + "]"; + } +} diff --git a/src/net/minecraft/src/ChunkCoordinates.java b/src/net/minecraft/src/ChunkCoordinates.java new file mode 100644 index 0000000..d03e216 --- /dev/null +++ b/src/net/minecraft/src/ChunkCoordinates.java @@ -0,0 +1,60 @@ +package net.minecraft.src; + +public class ChunkCoordinates implements Comparable { + public int posX; + public int posY; + public int posZ; + + public ChunkCoordinates() { + } + + public ChunkCoordinates(int var1, int var2, int var3) { + this.posX = var1; + this.posY = var2; + this.posZ = var3; + } + + public ChunkCoordinates(ChunkCoordinates var1) { + this.posX = var1.posX; + this.posY = var1.posY; + this.posZ = var1.posZ; + } + + public boolean equals(Object var1) { + if(!(var1 instanceof ChunkCoordinates)) { + return false; + } else { + ChunkCoordinates var2 = (ChunkCoordinates)var1; + return this.posX == var2.posX && this.posY == var2.posY && this.posZ == var2.posZ; + } + } + + public int hashCode() { + return this.posX + this.posZ << 8 + this.posY << 16; + } + + public int compareChunkCoordinate(ChunkCoordinates var1) { + return this.posY == var1.posY ? (this.posZ == var1.posZ ? this.posX - var1.posX : this.posZ - var1.posZ) : this.posY - var1.posY; + } + + public void set(int var1, int var2, int var3) { + this.posX = var1; + this.posY = var2; + this.posZ = var3; + } + + public float getDistanceSquared(int var1, int var2, int var3) { + int var4 = this.posX - var1; + int var5 = this.posY - var2; + int var6 = this.posZ - var3; + return (float)(var4 * var4 + var5 * var5 + var6 * var6); + } + + public float getDistanceSquaredToChunkCoordinates(ChunkCoordinates var1) { + return this.getDistanceSquared(var1.posX, var1.posY, var1.posZ); + } + + public int compareTo(Object var1) { + return this.compareChunkCoordinate((ChunkCoordinates)var1); + } +} diff --git a/src/net/minecraft/src/ChunkLoader.java b/src/net/minecraft/src/ChunkLoader.java new file mode 100644 index 0000000..d6d29e4 --- /dev/null +++ b/src/net/minecraft/src/ChunkLoader.java @@ -0,0 +1,104 @@ +package net.minecraft.src; + +public class ChunkLoader { + public static AnvilConverterData load(NBTTagCompound var0) { + int var1 = var0.getInteger("xPos"); + int var2 = var0.getInteger("zPos"); + AnvilConverterData var3 = new AnvilConverterData(var1, var2); + var3.blocks = var0.getByteArray("Blocks"); + var3.data = new NibbleArrayReader(var0.getByteArray("Data"), 7); + var3.skyLight = new NibbleArrayReader(var0.getByteArray("SkyLight"), 7); + var3.blockLight = new NibbleArrayReader(var0.getByteArray("BlockLight"), 7); + var3.heightmap = var0.getByteArray("HeightMap"); + var3.terrainPopulated = var0.getBoolean("TerrainPopulated"); + var3.entities = var0.getTagList("Entities"); + var3.tileEntities = var0.getTagList("TileEntities"); + var3.tileTicks = var0.getTagList("TileTicks"); + + try { + var3.lastUpdated = var0.getLong("LastUpdate"); + } catch (ClassCastException var5) { + var3.lastUpdated = (long)var0.getInteger("LastUpdate"); + } + + return var3; + } + + public static void convertToAnvilFormat(AnvilConverterData var0, NBTTagCompound var1, WorldChunkManager var2) { + var1.setInteger("xPos", var0.x); + var1.setInteger("zPos", var0.z); + var1.setLong("LastUpdate", var0.lastUpdated); + int[] var3 = new int[var0.heightmap.length]; + + for(int var4 = 0; var4 < var0.heightmap.length; ++var4) { + var3[var4] = var0.heightmap[var4]; + } + + var1.setIntArray("HeightMap", var3); + var1.setBoolean("TerrainPopulated", var0.terrainPopulated); + NBTTagList var16 = new NBTTagList("Sections"); + + int var7; + for(int var5 = 0; var5 < 8; ++var5) { + boolean var6 = true; + + for(var7 = 0; var7 < 16 && var6; ++var7) { + for(int var8 = 0; var8 < 16 && var6; ++var8) { + for(int var9 = 0; var9 < 16; ++var9) { + int var10 = var7 << 11 | var9 << 7 | var8 + (var5 << 4); + byte var11 = var0.blocks[var10]; + if(var11 != 0) { + var6 = false; + break; + } + } + } + } + + if(!var6) { + byte[] var19 = new byte[4096]; + NibbleArray var20 = new NibbleArray(var19.length, 4); + NibbleArray var21 = new NibbleArray(var19.length, 4); + NibbleArray var22 = new NibbleArray(var19.length, 4); + + for(int var23 = 0; var23 < 16; ++var23) { + for(int var12 = 0; var12 < 16; ++var12) { + for(int var13 = 0; var13 < 16; ++var13) { + int var14 = var23 << 11 | var13 << 7 | var12 + (var5 << 4); + byte var15 = var0.blocks[var14]; + var19[var12 << 8 | var13 << 4 | var23] = (byte)(var15 & 255); + var20.set(var23, var12, var13, var0.data.get(var23, var12 + (var5 << 4), var13)); + var21.set(var23, var12, var13, var0.skyLight.get(var23, var12 + (var5 << 4), var13)); + var22.set(var23, var12, var13, var0.blockLight.get(var23, var12 + (var5 << 4), var13)); + } + } + } + + NBTTagCompound var24 = new NBTTagCompound(); + var24.setByte("Y", (byte)(var5 & 255)); + var24.setByteArray("Blocks", var19); + var24.setByteArray("Data", var20.data); + var24.setByteArray("SkyLight", var21.data); + var24.setByteArray("BlockLight", var22.data); + var16.appendTag(var24); + } + } + + var1.setTag("Sections", var16); + byte[] var17 = new byte[256]; + + for(int var18 = 0; var18 < 16; ++var18) { + for(var7 = 0; var7 < 16; ++var7) { + var17[var7 << 4 | var18] = (byte)(var2.getBiomeGenAt(var0.x << 4 | var18, var0.z << 4 | var7).biomeID & 255); + } + } + + var1.setByteArray("Biomes", var17); + var1.setTag("Entities", var0.entities); + var1.setTag("TileEntities", var0.tileEntities); + if(var0.tileTicks != null) { + var1.setTag("TileTicks", var0.tileTicks); + } + + } +} diff --git a/src/net/minecraft/src/ChunkPosition.java b/src/net/minecraft/src/ChunkPosition.java new file mode 100644 index 0000000..a960299 --- /dev/null +++ b/src/net/minecraft/src/ChunkPosition.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +public class ChunkPosition { + public final int x; + public final int y; + public final int z; + + public ChunkPosition(int var1, int var2, int var3) { + this.x = var1; + this.y = var2; + this.z = var3; + } + + public ChunkPosition(Vec3 var1) { + this(MathHelper.floor_double(var1.xCoord), MathHelper.floor_double(var1.yCoord), MathHelper.floor_double(var1.zCoord)); + } + + public boolean equals(Object var1) { + if(!(var1 instanceof ChunkPosition)) { + return false; + } else { + ChunkPosition var2 = (ChunkPosition)var1; + return var2.x == this.x && var2.y == this.y && var2.z == this.z; + } + } + + public int hashCode() { + return this.x * 8976890 + this.y * 981131 + this.z; + } +} diff --git a/src/net/minecraft/src/ChunkProviderClient.java b/src/net/minecraft/src/ChunkProviderClient.java new file mode 100644 index 0000000..39c0e9f --- /dev/null +++ b/src/net/minecraft/src/ChunkProviderClient.java @@ -0,0 +1,79 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class ChunkProviderClient implements IChunkProvider { + private Chunk blankChunk; + private LongHashMap chunkMapping = new LongHashMap(); + private List chunkListing = new ArrayList(); + private World worldObj; + + public ChunkProviderClient(World var1) { + this.blankChunk = new EmptyChunk(var1, 0, 0); + this.worldObj = var1; + } + + public boolean chunkExists(int var1, int var2) { + return true; + } + + public void unloadChunk(int var1, int var2) { + Chunk var3 = this.provideChunk(var1, var2); + if(!var3.isEmpty()) { + var3.onChunkUnload(); + } + + this.chunkMapping.remove(ChunkCoordIntPair.chunkXZ2Int(var1, var2)); + this.chunkListing.remove(var3); + } + + public Chunk loadChunk(int var1, int var2) { + Chunk var3 = new Chunk(this.worldObj, var1, var2); + this.chunkMapping.add(ChunkCoordIntPair.chunkXZ2Int(var1, var2), var3); + var3.isChunkLoaded = true; + return var3; + } + + public Chunk provideChunk(int var1, int var2) { + Chunk var3 = (Chunk)this.chunkMapping.getValueByKey(ChunkCoordIntPair.chunkXZ2Int(var1, var2)); + return var3 == null ? this.blankChunk : var3; + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + return true; + } + + public void func_104112_b() { + } + + public boolean unloadQueuedChunks() { + return false; + } + + public boolean canSave() { + return false; + } + + public void populate(IChunkProvider var1, int var2, int var3) { + } + + public String makeString() { + return "MultiplayerChunkCache: " + this.chunkMapping.getNumHashElements(); + } + + public List getPossibleCreatures(EnumCreatureType var1, int var2, int var3, int var4) { + return null; + } + + public ChunkPosition findClosestStructure(World var1, String var2, int var3, int var4, int var5) { + return null; + } + + public int getLoadedChunkCount() { + return this.chunkListing.size(); + } + + public void recreateStructures(int var1, int var2) { + } +} diff --git a/src/net/minecraft/src/ChunkProviderEnd.java b/src/net/minecraft/src/ChunkProviderEnd.java new file mode 100644 index 0000000..ec83b5b --- /dev/null +++ b/src/net/minecraft/src/ChunkProviderEnd.java @@ -0,0 +1,303 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ChunkProviderEnd implements IChunkProvider { + private Random endRNG; + private NoiseGeneratorOctaves noiseGen1; + private NoiseGeneratorOctaves noiseGen2; + private NoiseGeneratorOctaves noiseGen3; + public NoiseGeneratorOctaves noiseGen4; + public NoiseGeneratorOctaves noiseGen5; + private World endWorld; + private double[] densities; + private BiomeGenBase[] biomesForGeneration; + double[] noiseData1; + double[] noiseData2; + double[] noiseData3; + double[] noiseData4; + double[] noiseData5; + int[][] field_73203_h = new int[32][32]; + + public ChunkProviderEnd(World var1, long var2) { + this.endWorld = var1; + this.endRNG = new Random(var2); + this.noiseGen1 = new NoiseGeneratorOctaves(this.endRNG, 16); + this.noiseGen2 = new NoiseGeneratorOctaves(this.endRNG, 16); + this.noiseGen3 = new NoiseGeneratorOctaves(this.endRNG, 8); + this.noiseGen4 = new NoiseGeneratorOctaves(this.endRNG, 10); + this.noiseGen5 = new NoiseGeneratorOctaves(this.endRNG, 16); + } + + public void generateTerrain(int var1, int var2, byte[] var3, BiomeGenBase[] var4) { + byte var5 = 2; + int var6 = var5 + 1; + byte var7 = 33; + int var8 = var5 + 1; + this.densities = this.initializeNoiseField(this.densities, var1 * var5, 0, var2 * var5, var6, var7, var8); + + for(int var9 = 0; var9 < var5; ++var9) { + for(int var10 = 0; var10 < var5; ++var10) { + for(int var11 = 0; var11 < 32; ++var11) { + double var12 = 0.25D; + double var14 = this.densities[((var9 + 0) * var8 + var10 + 0) * var7 + var11 + 0]; + double var16 = this.densities[((var9 + 0) * var8 + var10 + 1) * var7 + var11 + 0]; + double var18 = this.densities[((var9 + 1) * var8 + var10 + 0) * var7 + var11 + 0]; + double var20 = this.densities[((var9 + 1) * var8 + var10 + 1) * var7 + var11 + 0]; + double var22 = (this.densities[((var9 + 0) * var8 + var10 + 0) * var7 + var11 + 1] - var14) * var12; + double var24 = (this.densities[((var9 + 0) * var8 + var10 + 1) * var7 + var11 + 1] - var16) * var12; + double var26 = (this.densities[((var9 + 1) * var8 + var10 + 0) * var7 + var11 + 1] - var18) * var12; + double var28 = (this.densities[((var9 + 1) * var8 + var10 + 1) * var7 + var11 + 1] - var20) * var12; + + for(int var30 = 0; var30 < 4; ++var30) { + double var31 = 0.125D; + double var33 = var14; + double var35 = var16; + double var37 = (var18 - var14) * var31; + double var39 = (var20 - var16) * var31; + + for(int var41 = 0; var41 < 8; ++var41) { + int var42 = var41 + var9 * 8 << 11 | 0 + var10 * 8 << 7 | var11 * 4 + var30; + short var43 = 128; + double var44 = 0.125D; + double var46 = var33; + double var48 = (var35 - var33) * var44; + + for(int var50 = 0; var50 < 8; ++var50) { + int var51 = 0; + if(var46 > 0.0D) { + var51 = Block.whiteStone.blockID; + } + + var3[var42] = (byte)var51; + var42 += var43; + var46 += var48; + } + + var33 += var37; + var35 += var39; + } + + var14 += var22; + var16 += var24; + var18 += var26; + var20 += var28; + } + } + } + } + + } + + public void replaceBlocksForBiome(int var1, int var2, byte[] var3, BiomeGenBase[] var4) { + for(int var5 = 0; var5 < 16; ++var5) { + for(int var6 = 0; var6 < 16; ++var6) { + byte var7 = 1; + int var8 = -1; + byte var9 = (byte)Block.whiteStone.blockID; + byte var10 = (byte)Block.whiteStone.blockID; + + for(int var11 = 127; var11 >= 0; --var11) { + int var12 = (var6 * 16 + var5) * 128 + var11; + byte var13 = var3[var12]; + if(var13 == 0) { + var8 = -1; + } else if(var13 == Block.stone.blockID) { + if(var8 == -1) { + if(var7 <= 0) { + var9 = 0; + var10 = (byte)Block.whiteStone.blockID; + } + + var8 = var7; + if(var11 >= 0) { + var3[var12] = var9; + } else { + var3[var12] = var10; + } + } else if(var8 > 0) { + --var8; + var3[var12] = var10; + } + } + } + } + } + + } + + public Chunk loadChunk(int var1, int var2) { + return this.provideChunk(var1, var2); + } + + public Chunk provideChunk(int var1, int var2) { + this.endRNG.setSeed((long)var1 * 341873128712L + (long)var2 * 132897987541L); + byte[] var3 = new byte[-Short.MIN_VALUE]; + this.biomesForGeneration = this.endWorld.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, var1 * 16, var2 * 16, 16, 16); + this.generateTerrain(var1, var2, var3, this.biomesForGeneration); + this.replaceBlocksForBiome(var1, var2, var3, this.biomesForGeneration); + Chunk var4 = new Chunk(this.endWorld, var3, var1, var2); + byte[] var5 = var4.getBiomeArray(); + + for(int var6 = 0; var6 < var5.length; ++var6) { + var5[var6] = (byte)this.biomesForGeneration[var6].biomeID; + } + + var4.generateSkylightMap(); + return var4; + } + + private double[] initializeNoiseField(double[] var1, int var2, int var3, int var4, int var5, int var6, int var7) { + if(var1 == null) { + var1 = new double[var5 * var6 * var7]; + } + + double var8 = 684.412D; + double var10 = 684.412D; + this.noiseData4 = this.noiseGen4.generateNoiseOctaves(this.noiseData4, var2, var4, var5, var7, 1.121D, 1.121D, 0.5D); + this.noiseData5 = this.noiseGen5.generateNoiseOctaves(this.noiseData5, var2, var4, var5, var7, 200.0D, 200.0D, 0.5D); + var8 *= 2.0D; + this.noiseData1 = this.noiseGen3.generateNoiseOctaves(this.noiseData1, var2, var3, var4, var5, var6, var7, var8 / 80.0D, var10 / 160.0D, var8 / 80.0D); + this.noiseData2 = this.noiseGen1.generateNoiseOctaves(this.noiseData2, var2, var3, var4, var5, var6, var7, var8, var10, var8); + this.noiseData3 = this.noiseGen2.generateNoiseOctaves(this.noiseData3, var2, var3, var4, var5, var6, var7, var8, var10, var8); + int var12 = 0; + int var13 = 0; + + for(int var14 = 0; var14 < var5; ++var14) { + for(int var15 = 0; var15 < var7; ++var15) { + double var16 = (this.noiseData4[var13] + 256.0D) / 512.0D; + if(var16 > 1.0D) { + var16 = 1.0D; + } + + double var18 = this.noiseData5[var13] / 8000.0D; + if(var18 < 0.0D) { + var18 = -var18 * 0.3D; + } + + var18 = var18 * 3.0D - 2.0D; + float var20 = (float)(var14 + var2 - 0) / 1.0F; + float var21 = (float)(var15 + var4 - 0) / 1.0F; + float var22 = 100.0F - MathHelper.sqrt_float(var20 * var20 + var21 * var21) * 8.0F; + if(var22 > 80.0F) { + var22 = 80.0F; + } + + if(var22 < -100.0F) { + var22 = -100.0F; + } + + if(var18 > 1.0D) { + var18 = 1.0D; + } + + var18 /= 8.0D; + var18 = 0.0D; + if(var16 < 0.0D) { + var16 = 0.0D; + } + + var16 += 0.5D; + var18 = var18 * (double)var6 / 16.0D; + ++var13; + double var23 = (double)var6 / 2.0D; + + for(int var25 = 0; var25 < var6; ++var25) { + double var26 = 0.0D; + double var28 = ((double)var25 - var23) * 8.0D / var16; + if(var28 < 0.0D) { + var28 *= -1.0D; + } + + double var30 = this.noiseData2[var12] / 512.0D; + double var32 = this.noiseData3[var12] / 512.0D; + double var34 = (this.noiseData1[var12] / 10.0D + 1.0D) / 2.0D; + if(var34 < 0.0D) { + var26 = var30; + } else if(var34 > 1.0D) { + var26 = var32; + } else { + var26 = var30 + (var32 - var30) * var34; + } + + var26 -= 8.0D; + var26 += (double)var22; + byte var36 = 2; + double var37; + if(var25 > var6 / 2 - var36) { + var37 = (double)((float)(var25 - (var6 / 2 - var36)) / 64.0F); + if(var37 < 0.0D) { + var37 = 0.0D; + } + + if(var37 > 1.0D) { + var37 = 1.0D; + } + + var26 = var26 * (1.0D - var37) + -3000.0D * var37; + } + + var36 = 8; + if(var25 < var36) { + var37 = (double)((float)(var36 - var25) / ((float)var36 - 1.0F)); + var26 = var26 * (1.0D - var37) + -30.0D * var37; + } + + var1[var12] = var26; + ++var12; + } + } + } + + return var1; + } + + public boolean chunkExists(int var1, int var2) { + return true; + } + + public void populate(IChunkProvider var1, int var2, int var3) { + BlockSand.fallInstantly = true; + int var4 = var2 * 16; + int var5 = var3 * 16; + BiomeGenBase var6 = this.endWorld.getBiomeGenForCoords(var4 + 16, var5 + 16); + var6.decorate(this.endWorld, this.endWorld.rand, var4, var5); + BlockSand.fallInstantly = false; + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + return true; + } + + public void func_104112_b() { + } + + public boolean unloadQueuedChunks() { + return false; + } + + public boolean canSave() { + return true; + } + + public String makeString() { + return "RandomLevelSource"; + } + + public List getPossibleCreatures(EnumCreatureType var1, int var2, int var3, int var4) { + BiomeGenBase var5 = this.endWorld.getBiomeGenForCoords(var2, var4); + return var5 == null ? null : var5.getSpawnableList(var1); + } + + public ChunkPosition findClosestStructure(World var1, String var2, int var3, int var4, int var5) { + return null; + } + + public int getLoadedChunkCount() { + return 0; + } + + public void recreateStructures(int var1, int var2) { + } +} diff --git a/src/net/minecraft/src/ChunkProviderFlat.java b/src/net/minecraft/src/ChunkProviderFlat.java new file mode 100644 index 0000000..a8dbd65 --- /dev/null +++ b/src/net/minecraft/src/ChunkProviderFlat.java @@ -0,0 +1,223 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; + +public class ChunkProviderFlat implements IChunkProvider { + private World worldObj; + private Random random; + private final byte[] field_82700_c = new byte[256]; + private final byte[] field_82698_d = new byte[256]; + private final FlatGeneratorInfo field_82699_e; + private final List structureGenerators = new ArrayList(); + private final boolean field_82697_g; + private final boolean field_82702_h; + private WorldGenLakes waterLakeGenerator; + private WorldGenLakes lavaLakeGenerator; + + public ChunkProviderFlat(World var1, long var2, boolean var4, String var5) { + this.worldObj = var1; + this.random = new Random(var2); + this.field_82699_e = FlatGeneratorInfo.createFlatGeneratorFromString(var5); + if(var4) { + Map var6 = this.field_82699_e.getWorldFeatures(); + if(var6.containsKey("village")) { + Map var7 = (Map)var6.get("village"); + if(!var7.containsKey("size")) { + var7.put("size", "1"); + } + + this.structureGenerators.add(new MapGenVillage(var7)); + } + + if(var6.containsKey("biome_1")) { + this.structureGenerators.add(new MapGenScatteredFeature((Map)var6.get("biome_1"))); + } + + if(var6.containsKey("mineshaft")) { + this.structureGenerators.add(new MapGenMineshaft((Map)var6.get("mineshaft"))); + } + + if(var6.containsKey("stronghold")) { + this.structureGenerators.add(new MapGenStronghold((Map)var6.get("stronghold"))); + } + } + + this.field_82697_g = this.field_82699_e.getWorldFeatures().containsKey("decoration"); + if(this.field_82699_e.getWorldFeatures().containsKey("lake")) { + this.waterLakeGenerator = new WorldGenLakes(Block.waterStill.blockID); + } + + if(this.field_82699_e.getWorldFeatures().containsKey("lava_lake")) { + this.lavaLakeGenerator = new WorldGenLakes(Block.lavaStill.blockID); + } + + this.field_82702_h = this.field_82699_e.getWorldFeatures().containsKey("dungeon"); + Iterator var9 = this.field_82699_e.getFlatLayers().iterator(); + + while(var9.hasNext()) { + FlatLayerInfo var10 = (FlatLayerInfo)var9.next(); + + for(int var8 = var10.getMinY(); var8 < var10.getMinY() + var10.getLayerCount(); ++var8) { + this.field_82700_c[var8] = (byte)(var10.getFillBlock() & 255); + this.field_82698_d[var8] = (byte)var10.getFillBlockMeta(); + } + } + + } + + public Chunk loadChunk(int var1, int var2) { + return this.provideChunk(var1, var2); + } + + public Chunk provideChunk(int var1, int var2) { + Chunk var3 = new Chunk(this.worldObj, var1, var2); + + for(int var4 = 0; var4 < this.field_82700_c.length; ++var4) { + int var5 = var4 >> 4; + ExtendedBlockStorage var6 = var3.getBlockStorageArray()[var5]; + if(var6 == null) { + var6 = new ExtendedBlockStorage(var4, !this.worldObj.provider.hasNoSky); + var3.getBlockStorageArray()[var5] = var6; + } + + for(int var7 = 0; var7 < 16; ++var7) { + for(int var8 = 0; var8 < 16; ++var8) { + var6.setExtBlockID(var7, var4 & 15, var8, this.field_82700_c[var4] & 255); + var6.setExtBlockMetadata(var7, var4 & 15, var8, this.field_82698_d[var4]); + } + } + } + + var3.generateSkylightMap(); + BiomeGenBase[] var9 = this.worldObj.getWorldChunkManager().loadBlockGeneratorData((BiomeGenBase[])null, var1 * 16, var2 * 16, 16, 16); + byte[] var10 = var3.getBiomeArray(); + + for(int var11 = 0; var11 < var10.length; ++var11) { + var10[var11] = (byte)var9[var11].biomeID; + } + + Iterator var12 = this.structureGenerators.iterator(); + + while(var12.hasNext()) { + MapGenStructure var13 = (MapGenStructure)var12.next(); + var13.generate(this, this.worldObj, var1, var2, (byte[])null); + } + + var3.generateSkylightMap(); + return var3; + } + + public boolean chunkExists(int var1, int var2) { + return true; + } + + public void populate(IChunkProvider var1, int var2, int var3) { + int var4 = var2 * 16; + int var5 = var3 * 16; + BiomeGenBase var6 = this.worldObj.getBiomeGenForCoords(var4 + 16, var5 + 16); + boolean var7 = false; + this.random.setSeed(this.worldObj.getSeed()); + long var8 = this.random.nextLong() / 2L * 2L + 1L; + long var10 = this.random.nextLong() / 2L * 2L + 1L; + this.random.setSeed((long)var2 * var8 + (long)var3 * var10 ^ this.worldObj.getSeed()); + Iterator var12 = this.structureGenerators.iterator(); + + while(var12.hasNext()) { + MapGenStructure var13 = (MapGenStructure)var12.next(); + boolean var14 = var13.generateStructuresInChunk(this.worldObj, this.random, var2, var3); + if(var13 instanceof MapGenVillage) { + var7 |= var14; + } + } + + int var16; + int var17; + int var18; + if(this.waterLakeGenerator != null && !var7 && this.random.nextInt(4) == 0) { + var16 = var4 + this.random.nextInt(16) + 8; + var17 = this.random.nextInt(128); + var18 = var5 + this.random.nextInt(16) + 8; + this.waterLakeGenerator.generate(this.worldObj, this.random, var16, var17, var18); + } + + if(this.lavaLakeGenerator != null && !var7 && this.random.nextInt(8) == 0) { + var16 = var4 + this.random.nextInt(16) + 8; + var17 = this.random.nextInt(this.random.nextInt(120) + 8); + var18 = var5 + this.random.nextInt(16) + 8; + if(var17 < 63 || this.random.nextInt(10) == 0) { + this.lavaLakeGenerator.generate(this.worldObj, this.random, var16, var17, var18); + } + } + + if(this.field_82702_h) { + for(var16 = 0; var16 < 8; ++var16) { + var17 = var4 + this.random.nextInt(16) + 8; + var18 = this.random.nextInt(128); + int var15 = var5 + this.random.nextInt(16) + 8; + (new WorldGenDungeons()).generate(this.worldObj, this.random, var17, var18, var15); + } + } + + if(this.field_82697_g) { + var6.decorate(this.worldObj, this.random, var4, var5); + } + + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + return true; + } + + public void func_104112_b() { + } + + public boolean unloadQueuedChunks() { + return false; + } + + public boolean canSave() { + return true; + } + + public String makeString() { + return "FlatLevelSource"; + } + + public List getPossibleCreatures(EnumCreatureType var1, int var2, int var3, int var4) { + BiomeGenBase var5 = this.worldObj.getBiomeGenForCoords(var2, var4); + return var5 == null ? null : var5.getSpawnableList(var1); + } + + public ChunkPosition findClosestStructure(World var1, String var2, int var3, int var4, int var5) { + if("Stronghold".equals(var2)) { + Iterator var6 = this.structureGenerators.iterator(); + + while(var6.hasNext()) { + MapGenStructure var7 = (MapGenStructure)var6.next(); + if(var7 instanceof MapGenStronghold) { + return var7.getNearestInstance(var1, var3, var4, var5); + } + } + } + + return null; + } + + public int getLoadedChunkCount() { + return 0; + } + + public void recreateStructures(int var1, int var2) { + Iterator var3 = this.structureGenerators.iterator(); + + while(var3.hasNext()) { + MapGenStructure var4 = (MapGenStructure)var3.next(); + var4.generate(this, this.worldObj, var1, var2, (byte[])null); + } + + } +} diff --git a/src/net/minecraft/src/ChunkProviderGenerate.java b/src/net/minecraft/src/ChunkProviderGenerate.java new file mode 100644 index 0000000..4b468d0 --- /dev/null +++ b/src/net/minecraft/src/ChunkProviderGenerate.java @@ -0,0 +1,431 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ChunkProviderGenerate implements IChunkProvider { + private Random rand; + private NoiseGeneratorOctaves noiseGen1; + private NoiseGeneratorOctaves noiseGen2; + private NoiseGeneratorOctaves noiseGen3; + private NoiseGeneratorOctaves noiseGen4; + public NoiseGeneratorOctaves noiseGen5; + public NoiseGeneratorOctaves noiseGen6; + public NoiseGeneratorOctaves mobSpawnerNoise; + private World worldObj; + private final boolean mapFeaturesEnabled; + private double[] noiseArray; + private double[] stoneNoise = new double[256]; + private MapGenBase caveGenerator = new MapGenCaves(); + private MapGenStronghold strongholdGenerator = new MapGenStronghold(); + private MapGenVillage villageGenerator = new MapGenVillage(); + private MapGenMineshaft mineshaftGenerator = new MapGenMineshaft(); + private MapGenScatteredFeature scatteredFeatureGenerator = new MapGenScatteredFeature(); + private MapGenBase ravineGenerator = new MapGenRavine(); + private BiomeGenBase[] biomesForGeneration; + double[] noise3; + double[] noise1; + double[] noise2; + double[] noise5; + double[] noise6; + float[] parabolicField; + int[][] field_73219_j = new int[32][32]; + + public ChunkProviderGenerate(World var1, long var2, boolean var4) { + this.worldObj = var1; + this.mapFeaturesEnabled = var4; + this.rand = new Random(var2); + this.noiseGen1 = new NoiseGeneratorOctaves(this.rand, 16); + this.noiseGen2 = new NoiseGeneratorOctaves(this.rand, 16); + this.noiseGen3 = new NoiseGeneratorOctaves(this.rand, 8); + this.noiseGen4 = new NoiseGeneratorOctaves(this.rand, 4); + this.noiseGen5 = new NoiseGeneratorOctaves(this.rand, 10); + this.noiseGen6 = new NoiseGeneratorOctaves(this.rand, 16); + this.mobSpawnerNoise = new NoiseGeneratorOctaves(this.rand, 8); + } + + public void generateTerrain(int var1, int var2, byte[] var3) { + byte var4 = 4; + byte var5 = 16; + byte var6 = 63; + int var7 = var4 + 1; + byte var8 = 17; + int var9 = var4 + 1; + this.biomesForGeneration = this.worldObj.getWorldChunkManager().getBiomesForGeneration(this.biomesForGeneration, var1 * 4 - 2, var2 * 4 - 2, var7 + 5, var9 + 5); + this.noiseArray = this.initializeNoiseField(this.noiseArray, var1 * var4, 0, var2 * var4, var7, var8, var9); + + for(int var10 = 0; var10 < var4; ++var10) { + for(int var11 = 0; var11 < var4; ++var11) { + for(int var12 = 0; var12 < var5; ++var12) { + double var13 = 0.125D; + double var15 = this.noiseArray[((var10 + 0) * var9 + var11 + 0) * var8 + var12 + 0]; + double var17 = this.noiseArray[((var10 + 0) * var9 + var11 + 1) * var8 + var12 + 0]; + double var19 = this.noiseArray[((var10 + 1) * var9 + var11 + 0) * var8 + var12 + 0]; + double var21 = this.noiseArray[((var10 + 1) * var9 + var11 + 1) * var8 + var12 + 0]; + double var23 = (this.noiseArray[((var10 + 0) * var9 + var11 + 0) * var8 + var12 + 1] - var15) * var13; + double var25 = (this.noiseArray[((var10 + 0) * var9 + var11 + 1) * var8 + var12 + 1] - var17) * var13; + double var27 = (this.noiseArray[((var10 + 1) * var9 + var11 + 0) * var8 + var12 + 1] - var19) * var13; + double var29 = (this.noiseArray[((var10 + 1) * var9 + var11 + 1) * var8 + var12 + 1] - var21) * var13; + + for(int var31 = 0; var31 < 8; ++var31) { + double var32 = 0.25D; + double var34 = var15; + double var36 = var17; + double var38 = (var19 - var15) * var32; + double var40 = (var21 - var17) * var32; + + for(int var42 = 0; var42 < 4; ++var42) { + int var43 = var42 + var10 * 4 << 11 | 0 + var11 * 4 << 7 | var12 * 8 + var31; + short var44 = 128; + var43 -= var44; + double var45 = 0.25D; + double var49 = (var36 - var34) * var45; + double var47 = var34 - var49; + + for(int var51 = 0; var51 < 4; ++var51) { + var47 += var49; + if(var47 > 0.0D) { + var43 += var44; + var3[var43] = (byte)Block.stone.blockID; + } else if(var12 * 8 + var31 < var6) { + var43 += var44; + var3[var43] = (byte)Block.waterStill.blockID; + } else { + var43 += var44; + var3[var43] = 0; + } + } + + var34 += var38; + var36 += var40; + } + + var15 += var23; + var17 += var25; + var19 += var27; + var21 += var29; + } + } + } + } + + } + + public void replaceBlocksForBiome(int var1, int var2, byte[] var3, BiomeGenBase[] var4) { + byte var5 = 63; + double var6 = 1.0D / 32.0D; + this.stoneNoise = this.noiseGen4.generateNoiseOctaves(this.stoneNoise, var1 * 16, var2 * 16, 0, 16, 16, 1, var6 * 2.0D, var6 * 2.0D, var6 * 2.0D); + + for(int var8 = 0; var8 < 16; ++var8) { + for(int var9 = 0; var9 < 16; ++var9) { + BiomeGenBase var10 = var4[var9 + var8 * 16]; + float var11 = var10.getFloatTemperature(); + int var12 = (int)(this.stoneNoise[var8 + var9 * 16] / 3.0D + 3.0D + this.rand.nextDouble() * 0.25D); + int var13 = -1; + byte var14 = var10.topBlock; + byte var15 = var10.fillerBlock; + + for(int var16 = 127; var16 >= 0; --var16) { + int var17 = (var9 * 16 + var8) * 128 + var16; + if(var16 <= 0 + this.rand.nextInt(5)) { + var3[var17] = (byte)Block.bedrock.blockID; + } else { + byte var18 = var3[var17]; + if(var18 == 0) { + var13 = -1; + } else if(var18 == Block.stone.blockID) { + if(var13 == -1) { + if(var12 <= 0) { + var14 = 0; + var15 = (byte)Block.stone.blockID; + } else if(var16 >= var5 - 4 && var16 <= var5 + 1) { + var14 = var10.topBlock; + var15 = var10.fillerBlock; + } + + if(var16 < var5 && var14 == 0) { + if(var11 < 0.15F) { + var14 = (byte)Block.ice.blockID; + } else { + var14 = (byte)Block.waterStill.blockID; + } + } + + var13 = var12; + if(var16 >= var5 - 1) { + var3[var17] = var14; + } else { + var3[var17] = var15; + } + } else if(var13 > 0) { + --var13; + var3[var17] = var15; + if(var13 == 0 && var15 == Block.sand.blockID) { + var13 = this.rand.nextInt(4); + var15 = (byte)Block.sandStone.blockID; + } + } + } + } + } + } + } + + } + + public Chunk loadChunk(int var1, int var2) { + return this.provideChunk(var1, var2); + } + + public Chunk provideChunk(int var1, int var2) { + this.rand.setSeed((long)var1 * 341873128712L + (long)var2 * 132897987541L); + byte[] var3 = new byte[-Short.MIN_VALUE]; + this.generateTerrain(var1, var2, var3); + this.biomesForGeneration = this.worldObj.getWorldChunkManager().loadBlockGeneratorData(this.biomesForGeneration, var1 * 16, var2 * 16, 16, 16); + this.replaceBlocksForBiome(var1, var2, var3, this.biomesForGeneration); + this.caveGenerator.generate(this, this.worldObj, var1, var2, var3); + this.ravineGenerator.generate(this, this.worldObj, var1, var2, var3); + if(this.mapFeaturesEnabled) { + this.mineshaftGenerator.generate(this, this.worldObj, var1, var2, var3); + this.villageGenerator.generate(this, this.worldObj, var1, var2, var3); + this.strongholdGenerator.generate(this, this.worldObj, var1, var2, var3); + this.scatteredFeatureGenerator.generate(this, this.worldObj, var1, var2, var3); + } + + Chunk var4 = new Chunk(this.worldObj, var3, var1, var2); + byte[] var5 = var4.getBiomeArray(); + + for(int var6 = 0; var6 < var5.length; ++var6) { + var5[var6] = (byte)this.biomesForGeneration[var6].biomeID; + } + + var4.generateSkylightMap(); + return var4; + } + + private double[] initializeNoiseField(double[] var1, int var2, int var3, int var4, int var5, int var6, int var7) { + if(var1 == null) { + var1 = new double[var5 * var6 * var7]; + } + + if(this.parabolicField == null) { + this.parabolicField = new float[25]; + + for(int var8 = -2; var8 <= 2; ++var8) { + for(int var9 = -2; var9 <= 2; ++var9) { + float var10 = 10.0F / MathHelper.sqrt_float((float)(var8 * var8 + var9 * var9) + 0.2F); + this.parabolicField[var8 + 2 + (var9 + 2) * 5] = var10; + } + } + } + + double var43 = 684.412D; + double var44 = 684.412D; + this.noise5 = this.noiseGen5.generateNoiseOctaves(this.noise5, var2, var4, var5, var7, 1.121D, 1.121D, 0.5D); + this.noise6 = this.noiseGen6.generateNoiseOctaves(this.noise6, var2, var4, var5, var7, 200.0D, 200.0D, 0.5D); + this.noise3 = this.noiseGen3.generateNoiseOctaves(this.noise3, var2, var3, var4, var5, var6, var7, var43 / 80.0D, var44 / 160.0D, var43 / 80.0D); + this.noise1 = this.noiseGen1.generateNoiseOctaves(this.noise1, var2, var3, var4, var5, var6, var7, var43, var44, var43); + this.noise2 = this.noiseGen2.generateNoiseOctaves(this.noise2, var2, var3, var4, var5, var6, var7, var43, var44, var43); + boolean var42 = false; + int var12 = 0; + int var13 = 0; + + for(int var14 = 0; var14 < var5; ++var14) { + for(int var15 = 0; var15 < var7; ++var15) { + float var16 = 0.0F; + float var17 = 0.0F; + float var18 = 0.0F; + byte var19 = 2; + BiomeGenBase var20 = this.biomesForGeneration[var14 + 2 + (var15 + 2) * (var5 + 5)]; + + for(int var21 = -var19; var21 <= var19; ++var21) { + for(int var22 = -var19; var22 <= var19; ++var22) { + BiomeGenBase var23 = this.biomesForGeneration[var14 + var21 + 2 + (var15 + var22 + 2) * (var5 + 5)]; + float var24 = this.parabolicField[var21 + 2 + (var22 + 2) * 5] / (var23.minHeight + 2.0F); + if(var23.minHeight > var20.minHeight) { + var24 /= 2.0F; + } + + var16 += var23.maxHeight * var24; + var17 += var23.minHeight * var24; + var18 += var24; + } + } + + var16 /= var18; + var17 /= var18; + var16 = var16 * 0.9F + 0.1F; + var17 = (var17 * 4.0F - 1.0F) / 8.0F; + double var45 = this.noise6[var13] / 8000.0D; + if(var45 < 0.0D) { + var45 = -var45 * 0.3D; + } + + var45 = var45 * 3.0D - 2.0D; + if(var45 < 0.0D) { + var45 /= 2.0D; + if(var45 < -1.0D) { + var45 = -1.0D; + } + + var45 /= 1.4D; + var45 /= 2.0D; + } else { + if(var45 > 1.0D) { + var45 = 1.0D; + } + + var45 /= 8.0D; + } + + ++var13; + + for(int var46 = 0; var46 < var6; ++var46) { + double var47 = (double)var17; + double var26 = (double)var16; + var47 += var45 * 0.2D; + var47 = var47 * (double)var6 / 16.0D; + double var28 = (double)var6 / 2.0D + var47 * 4.0D; + double var30 = 0.0D; + double var32 = ((double)var46 - var28) * 12.0D * 128.0D / 128.0D / var26; + if(var32 < 0.0D) { + var32 *= 4.0D; + } + + double var34 = this.noise1[var12] / 512.0D; + double var36 = this.noise2[var12] / 512.0D; + double var38 = (this.noise3[var12] / 10.0D + 1.0D) / 2.0D; + if(var38 < 0.0D) { + var30 = var34; + } else if(var38 > 1.0D) { + var30 = var36; + } else { + var30 = var34 + (var36 - var34) * var38; + } + + var30 -= var32; + if(var46 > var6 - 4) { + double var40 = (double)((float)(var46 - (var6 - 4)) / 3.0F); + var30 = var30 * (1.0D - var40) + -10.0D * var40; + } + + var1[var12] = var30; + ++var12; + } + } + } + + return var1; + } + + public boolean chunkExists(int var1, int var2) { + return true; + } + + public void populate(IChunkProvider var1, int var2, int var3) { + BlockSand.fallInstantly = true; + int var4 = var2 * 16; + int var5 = var3 * 16; + BiomeGenBase var6 = this.worldObj.getBiomeGenForCoords(var4 + 16, var5 + 16); + this.rand.setSeed(this.worldObj.getSeed()); + long var7 = this.rand.nextLong() / 2L * 2L + 1L; + long var9 = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed((long)var2 * var7 + (long)var3 * var9 ^ this.worldObj.getSeed()); + boolean var11 = false; + if(this.mapFeaturesEnabled) { + this.mineshaftGenerator.generateStructuresInChunk(this.worldObj, this.rand, var2, var3); + var11 = this.villageGenerator.generateStructuresInChunk(this.worldObj, this.rand, var2, var3); + this.strongholdGenerator.generateStructuresInChunk(this.worldObj, this.rand, var2, var3); + this.scatteredFeatureGenerator.generateStructuresInChunk(this.worldObj, this.rand, var2, var3); + } + + int var12; + int var13; + int var14; + if(!var11 && this.rand.nextInt(4) == 0) { + var12 = var4 + this.rand.nextInt(16) + 8; + var13 = this.rand.nextInt(128); + var14 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenLakes(Block.waterStill.blockID)).generate(this.worldObj, this.rand, var12, var13, var14); + } + + if(!var11 && this.rand.nextInt(8) == 0) { + var12 = var4 + this.rand.nextInt(16) + 8; + var13 = this.rand.nextInt(this.rand.nextInt(120) + 8); + var14 = var5 + this.rand.nextInt(16) + 8; + if(var13 < 63 || this.rand.nextInt(10) == 0) { + (new WorldGenLakes(Block.lavaStill.blockID)).generate(this.worldObj, this.rand, var12, var13, var14); + } + } + + for(var12 = 0; var12 < 8; ++var12) { + var13 = var4 + this.rand.nextInt(16) + 8; + var14 = this.rand.nextInt(128); + int var15 = var5 + this.rand.nextInt(16) + 8; + if((new WorldGenDungeons()).generate(this.worldObj, this.rand, var13, var14, var15)) { + } + } + + var6.decorate(this.worldObj, this.rand, var4, var5); + SpawnerAnimals.performWorldGenSpawning(this.worldObj, var6, var4 + 8, var5 + 8, 16, 16, this.rand); + var4 += 8; + var5 += 8; + + for(var12 = 0; var12 < 16; ++var12) { + for(var13 = 0; var13 < 16; ++var13) { + var14 = this.worldObj.getPrecipitationHeight(var4 + var12, var5 + var13); + if(this.worldObj.isBlockFreezable(var12 + var4, var14 - 1, var13 + var5)) { + this.worldObj.setBlock(var12 + var4, var14 - 1, var13 + var5, Block.ice.blockID, 0, 2); + } + + if(this.worldObj.canSnowAt(var12 + var4, var14, var13 + var5)) { + this.worldObj.setBlock(var12 + var4, var14, var13 + var5, Block.snow.blockID, 0, 2); + } + } + } + + BlockSand.fallInstantly = false; + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + return true; + } + + public void func_104112_b() { + } + + public boolean unloadQueuedChunks() { + return false; + } + + public boolean canSave() { + return true; + } + + public String makeString() { + return "RandomLevelSource"; + } + + public List getPossibleCreatures(EnumCreatureType var1, int var2, int var3, int var4) { + BiomeGenBase var5 = this.worldObj.getBiomeGenForCoords(var2, var4); + return var5 == null ? null : (var5 == BiomeGenBase.swampland && var1 == EnumCreatureType.monster && this.scatteredFeatureGenerator.hasStructureAt(var2, var3, var4) ? this.scatteredFeatureGenerator.getScatteredFeatureSpawnList() : var5.getSpawnableList(var1)); + } + + public ChunkPosition findClosestStructure(World var1, String var2, int var3, int var4, int var5) { + return "Stronghold".equals(var2) && this.strongholdGenerator != null ? this.strongholdGenerator.getNearestInstance(var1, var3, var4, var5) : null; + } + + public int getLoadedChunkCount() { + return 0; + } + + public void recreateStructures(int var1, int var2) { + if(this.mapFeaturesEnabled) { + this.mineshaftGenerator.generate(this, this.worldObj, var1, var2, (byte[])null); + this.villageGenerator.generate(this, this.worldObj, var1, var2, (byte[])null); + this.strongholdGenerator.generate(this, this.worldObj, var1, var2, (byte[])null); + this.scatteredFeatureGenerator.generate(this, this.worldObj, var1, var2, (byte[])null); + } + + } +} diff --git a/src/net/minecraft/src/ChunkProviderHell.java b/src/net/minecraft/src/ChunkProviderHell.java new file mode 100644 index 0000000..1e819c6 --- /dev/null +++ b/src/net/minecraft/src/ChunkProviderHell.java @@ -0,0 +1,427 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ChunkProviderHell implements IChunkProvider { + private Random hellRNG; + private NoiseGeneratorOctaves netherNoiseGen1; + private NoiseGeneratorOctaves netherNoiseGen2; + private NoiseGeneratorOctaves netherNoiseGen3; + private NoiseGeneratorOctaves slowsandGravelNoiseGen; + private NoiseGeneratorOctaves netherrackExculsivityNoiseGen; + public NoiseGeneratorOctaves netherNoiseGen6; + public NoiseGeneratorOctaves netherNoiseGen7; + private World worldObj; + private double[] noiseField; + public MapGenNetherBridge genNetherBridge = new MapGenNetherBridge(); + private double[] slowsandNoise = new double[256]; + private double[] gravelNoise = new double[256]; + private double[] netherrackExclusivityNoise = new double[256]; + private MapGenBase netherCaveGenerator = new MapGenCavesHell(); + double[] noiseData1; + double[] noiseData2; + double[] noiseData3; + double[] noiseData4; + double[] noiseData5; + + public ChunkProviderHell(World var1, long var2) { + this.worldObj = var1; + this.hellRNG = new Random(var2); + this.netherNoiseGen1 = new NoiseGeneratorOctaves(this.hellRNG, 16); + this.netherNoiseGen2 = new NoiseGeneratorOctaves(this.hellRNG, 16); + this.netherNoiseGen3 = new NoiseGeneratorOctaves(this.hellRNG, 8); + this.slowsandGravelNoiseGen = new NoiseGeneratorOctaves(this.hellRNG, 4); + this.netherrackExculsivityNoiseGen = new NoiseGeneratorOctaves(this.hellRNG, 4); + this.netherNoiseGen6 = new NoiseGeneratorOctaves(this.hellRNG, 10); + this.netherNoiseGen7 = new NoiseGeneratorOctaves(this.hellRNG, 16); + } + + public void generateNetherTerrain(int var1, int var2, byte[] var3) { + byte var4 = 4; + byte var5 = 32; + int var6 = var4 + 1; + byte var7 = 17; + int var8 = var4 + 1; + this.noiseField = this.initializeNoiseField(this.noiseField, var1 * var4, 0, var2 * var4, var6, var7, var8); + + for(int var9 = 0; var9 < var4; ++var9) { + for(int var10 = 0; var10 < var4; ++var10) { + for(int var11 = 0; var11 < 16; ++var11) { + double var12 = 0.125D; + double var14 = this.noiseField[((var9 + 0) * var8 + var10 + 0) * var7 + var11 + 0]; + double var16 = this.noiseField[((var9 + 0) * var8 + var10 + 1) * var7 + var11 + 0]; + double var18 = this.noiseField[((var9 + 1) * var8 + var10 + 0) * var7 + var11 + 0]; + double var20 = this.noiseField[((var9 + 1) * var8 + var10 + 1) * var7 + var11 + 0]; + double var22 = (this.noiseField[((var9 + 0) * var8 + var10 + 0) * var7 + var11 + 1] - var14) * var12; + double var24 = (this.noiseField[((var9 + 0) * var8 + var10 + 1) * var7 + var11 + 1] - var16) * var12; + double var26 = (this.noiseField[((var9 + 1) * var8 + var10 + 0) * var7 + var11 + 1] - var18) * var12; + double var28 = (this.noiseField[((var9 + 1) * var8 + var10 + 1) * var7 + var11 + 1] - var20) * var12; + + for(int var30 = 0; var30 < 8; ++var30) { + double var31 = 0.25D; + double var33 = var14; + double var35 = var16; + double var37 = (var18 - var14) * var31; + double var39 = (var20 - var16) * var31; + + for(int var41 = 0; var41 < 4; ++var41) { + int var42 = var41 + var9 * 4 << 11 | 0 + var10 * 4 << 7 | var11 * 8 + var30; + short var43 = 128; + double var44 = 0.25D; + double var46 = var33; + double var48 = (var35 - var33) * var44; + + for(int var50 = 0; var50 < 4; ++var50) { + int var51 = 0; + if(var11 * 8 + var30 < var5) { + var51 = Block.lavaStill.blockID; + } + + if(var46 > 0.0D) { + var51 = Block.netherrack.blockID; + } + + var3[var42] = (byte)var51; + var42 += var43; + var46 += var48; + } + + var33 += var37; + var35 += var39; + } + + var14 += var22; + var16 += var24; + var18 += var26; + var20 += var28; + } + } + } + } + + } + + public void replaceBlocksForBiome(int var1, int var2, byte[] var3) { + byte var4 = 64; + double var5 = 1.0D / 32.0D; + this.slowsandNoise = this.slowsandGravelNoiseGen.generateNoiseOctaves(this.slowsandNoise, var1 * 16, var2 * 16, 0, 16, 16, 1, var5, var5, 1.0D); + this.gravelNoise = this.slowsandGravelNoiseGen.generateNoiseOctaves(this.gravelNoise, var1 * 16, 109, var2 * 16, 16, 1, 16, var5, 1.0D, var5); + this.netherrackExclusivityNoise = this.netherrackExculsivityNoiseGen.generateNoiseOctaves(this.netherrackExclusivityNoise, var1 * 16, var2 * 16, 0, 16, 16, 1, var5 * 2.0D, var5 * 2.0D, var5 * 2.0D); + + for(int var7 = 0; var7 < 16; ++var7) { + for(int var8 = 0; var8 < 16; ++var8) { + boolean var9 = this.slowsandNoise[var7 + var8 * 16] + this.hellRNG.nextDouble() * 0.2D > 0.0D; + boolean var10 = this.gravelNoise[var7 + var8 * 16] + this.hellRNG.nextDouble() * 0.2D > 0.0D; + int var11 = (int)(this.netherrackExclusivityNoise[var7 + var8 * 16] / 3.0D + 3.0D + this.hellRNG.nextDouble() * 0.25D); + int var12 = -1; + byte var13 = (byte)Block.netherrack.blockID; + byte var14 = (byte)Block.netherrack.blockID; + + for(int var15 = 127; var15 >= 0; --var15) { + int var16 = (var8 * 16 + var7) * 128 + var15; + if(var15 < 127 - this.hellRNG.nextInt(5) && var15 > 0 + this.hellRNG.nextInt(5)) { + byte var17 = var3[var16]; + if(var17 == 0) { + var12 = -1; + } else if(var17 == Block.netherrack.blockID) { + if(var12 == -1) { + if(var11 <= 0) { + var13 = 0; + var14 = (byte)Block.netherrack.blockID; + } else if(var15 >= var4 - 4 && var15 <= var4 + 1) { + var13 = (byte)Block.netherrack.blockID; + var14 = (byte)Block.netherrack.blockID; + if(var10) { + var13 = (byte)Block.gravel.blockID; + } + + if(var10) { + var14 = (byte)Block.netherrack.blockID; + } + + if(var9) { + var13 = (byte)Block.slowSand.blockID; + } + + if(var9) { + var14 = (byte)Block.slowSand.blockID; + } + } + + if(var15 < var4 && var13 == 0) { + var13 = (byte)Block.lavaStill.blockID; + } + + var12 = var11; + if(var15 >= var4 - 1) { + var3[var16] = var13; + } else { + var3[var16] = var14; + } + } else if(var12 > 0) { + --var12; + var3[var16] = var14; + } + } + } else { + var3[var16] = (byte)Block.bedrock.blockID; + } + } + } + } + + } + + public Chunk loadChunk(int var1, int var2) { + return this.provideChunk(var1, var2); + } + + public Chunk provideChunk(int var1, int var2) { + this.hellRNG.setSeed((long)var1 * 341873128712L + (long)var2 * 132897987541L); + byte[] var3 = new byte[-Short.MIN_VALUE]; + this.generateNetherTerrain(var1, var2, var3); + this.replaceBlocksForBiome(var1, var2, var3); + this.netherCaveGenerator.generate(this, this.worldObj, var1, var2, var3); + this.genNetherBridge.generate(this, this.worldObj, var1, var2, var3); + Chunk var4 = new Chunk(this.worldObj, var3, var1, var2); + BiomeGenBase[] var5 = this.worldObj.getWorldChunkManager().loadBlockGeneratorData((BiomeGenBase[])null, var1 * 16, var2 * 16, 16, 16); + byte[] var6 = var4.getBiomeArray(); + + for(int var7 = 0; var7 < var6.length; ++var7) { + var6[var7] = (byte)var5[var7].biomeID; + } + + var4.resetRelightChecks(); + return var4; + } + + private double[] initializeNoiseField(double[] var1, int var2, int var3, int var4, int var5, int var6, int var7) { + if(var1 == null) { + var1 = new double[var5 * var6 * var7]; + } + + double var8 = 684.412D; + double var10 = 2053.236D; + this.noiseData4 = this.netherNoiseGen6.generateNoiseOctaves(this.noiseData4, var2, var3, var4, var5, 1, var7, 1.0D, 0.0D, 1.0D); + this.noiseData5 = this.netherNoiseGen7.generateNoiseOctaves(this.noiseData5, var2, var3, var4, var5, 1, var7, 100.0D, 0.0D, 100.0D); + this.noiseData1 = this.netherNoiseGen3.generateNoiseOctaves(this.noiseData1, var2, var3, var4, var5, var6, var7, var8 / 80.0D, var10 / 60.0D, var8 / 80.0D); + this.noiseData2 = this.netherNoiseGen1.generateNoiseOctaves(this.noiseData2, var2, var3, var4, var5, var6, var7, var8, var10, var8); + this.noiseData3 = this.netherNoiseGen2.generateNoiseOctaves(this.noiseData3, var2, var3, var4, var5, var6, var7, var8, var10, var8); + int var12 = 0; + int var13 = 0; + double[] var14 = new double[var6]; + + int var15; + for(var15 = 0; var15 < var6; ++var15) { + var14[var15] = Math.cos((double)var15 * Math.PI * 6.0D / (double)var6) * 2.0D; + double var16 = (double)var15; + if(var15 > var6 / 2) { + var16 = (double)(var6 - 1 - var15); + } + + if(var16 < 4.0D) { + var16 = 4.0D - var16; + var14[var15] -= var16 * var16 * var16 * 10.0D; + } + } + + for(var15 = 0; var15 < var5; ++var15) { + for(int var36 = 0; var36 < var7; ++var36) { + double var17 = (this.noiseData4[var13] + 256.0D) / 512.0D; + if(var17 > 1.0D) { + var17 = 1.0D; + } + + double var19 = 0.0D; + double var21 = this.noiseData5[var13] / 8000.0D; + if(var21 < 0.0D) { + var21 = -var21; + } + + var21 = var21 * 3.0D - 3.0D; + if(var21 < 0.0D) { + var21 /= 2.0D; + if(var21 < -1.0D) { + var21 = -1.0D; + } + + var21 /= 1.4D; + var21 /= 2.0D; + var17 = 0.0D; + } else { + if(var21 > 1.0D) { + var21 = 1.0D; + } + + var21 /= 6.0D; + } + + var17 += 0.5D; + var21 = var21 * (double)var6 / 16.0D; + ++var13; + + for(int var23 = 0; var23 < var6; ++var23) { + double var24 = 0.0D; + double var26 = var14[var23]; + double var28 = this.noiseData2[var12] / 512.0D; + double var30 = this.noiseData3[var12] / 512.0D; + double var32 = (this.noiseData1[var12] / 10.0D + 1.0D) / 2.0D; + if(var32 < 0.0D) { + var24 = var28; + } else if(var32 > 1.0D) { + var24 = var30; + } else { + var24 = var28 + (var30 - var28) * var32; + } + + var24 -= var26; + double var34; + if(var23 > var6 - 4) { + var34 = (double)((float)(var23 - (var6 - 4)) / 3.0F); + var24 = var24 * (1.0D - var34) + -10.0D * var34; + } + + if((double)var23 < var19) { + var34 = (var19 - (double)var23) / 4.0D; + if(var34 < 0.0D) { + var34 = 0.0D; + } + + if(var34 > 1.0D) { + var34 = 1.0D; + } + + var24 = var24 * (1.0D - var34) + -10.0D * var34; + } + + var1[var12] = var24; + ++var12; + } + } + } + + return var1; + } + + public boolean chunkExists(int var1, int var2) { + return true; + } + + public void populate(IChunkProvider var1, int var2, int var3) { + BlockSand.fallInstantly = true; + int var4 = var2 * 16; + int var5 = var3 * 16; + this.genNetherBridge.generateStructuresInChunk(this.worldObj, this.hellRNG, var2, var3); + + int var6; + int var7; + int var8; + int var9; + for(var6 = 0; var6 < 8; ++var6) { + var7 = var4 + this.hellRNG.nextInt(16) + 8; + var8 = this.hellRNG.nextInt(120) + 4; + var9 = var5 + this.hellRNG.nextInt(16) + 8; + (new WorldGenHellLava(Block.lavaMoving.blockID, false)).generate(this.worldObj, this.hellRNG, var7, var8, var9); + } + + var6 = this.hellRNG.nextInt(this.hellRNG.nextInt(10) + 1) + 1; + + int var10; + for(var7 = 0; var7 < var6; ++var7) { + var8 = var4 + this.hellRNG.nextInt(16) + 8; + var9 = this.hellRNG.nextInt(120) + 4; + var10 = var5 + this.hellRNG.nextInt(16) + 8; + (new WorldGenFire()).generate(this.worldObj, this.hellRNG, var8, var9, var10); + } + + var6 = this.hellRNG.nextInt(this.hellRNG.nextInt(10) + 1); + + for(var7 = 0; var7 < var6; ++var7) { + var8 = var4 + this.hellRNG.nextInt(16) + 8; + var9 = this.hellRNG.nextInt(120) + 4; + var10 = var5 + this.hellRNG.nextInt(16) + 8; + (new WorldGenGlowStone1()).generate(this.worldObj, this.hellRNG, var8, var9, var10); + } + + for(var7 = 0; var7 < 10; ++var7) { + var8 = var4 + this.hellRNG.nextInt(16) + 8; + var9 = this.hellRNG.nextInt(128); + var10 = var5 + this.hellRNG.nextInt(16) + 8; + (new WorldGenGlowStone2()).generate(this.worldObj, this.hellRNG, var8, var9, var10); + } + + if(this.hellRNG.nextInt(1) == 0) { + var7 = var4 + this.hellRNG.nextInt(16) + 8; + var8 = this.hellRNG.nextInt(128); + var9 = var5 + this.hellRNG.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomBrown.blockID)).generate(this.worldObj, this.hellRNG, var7, var8, var9); + } + + if(this.hellRNG.nextInt(1) == 0) { + var7 = var4 + this.hellRNG.nextInt(16) + 8; + var8 = this.hellRNG.nextInt(128); + var9 = var5 + this.hellRNG.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomRed.blockID)).generate(this.worldObj, this.hellRNG, var7, var8, var9); + } + + WorldGenMinable var12 = new WorldGenMinable(Block.oreNetherQuartz.blockID, 13, Block.netherrack.blockID); + + int var11; + for(var8 = 0; var8 < 16; ++var8) { + var9 = var4 + this.hellRNG.nextInt(16); + var10 = this.hellRNG.nextInt(108) + 10; + var11 = var5 + this.hellRNG.nextInt(16); + var12.generate(this.worldObj, this.hellRNG, var9, var10, var11); + } + + for(var8 = 0; var8 < 16; ++var8) { + var9 = var4 + this.hellRNG.nextInt(16); + var10 = this.hellRNG.nextInt(108) + 10; + var11 = var5 + this.hellRNG.nextInt(16); + (new WorldGenHellLava(Block.lavaMoving.blockID, true)).generate(this.worldObj, this.hellRNG, var9, var10, var11); + } + + BlockSand.fallInstantly = false; + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + return true; + } + + public void func_104112_b() { + } + + public boolean unloadQueuedChunks() { + return false; + } + + public boolean canSave() { + return true; + } + + public String makeString() { + return "HellRandomLevelSource"; + } + + public List getPossibleCreatures(EnumCreatureType var1, int var2, int var3, int var4) { + if(var1 == EnumCreatureType.monster && this.genNetherBridge.hasStructureAt(var2, var3, var4)) { + return this.genNetherBridge.getSpawnList(); + } else { + BiomeGenBase var5 = this.worldObj.getBiomeGenForCoords(var2, var4); + return var5 == null ? null : var5.getSpawnableList(var1); + } + } + + public ChunkPosition findClosestStructure(World var1, String var2, int var3, int var4, int var5) { + return null; + } + + public int getLoadedChunkCount() { + return 0; + } + + public void recreateStructures(int var1, int var2) { + this.genNetherBridge.generate(this, this.worldObj, var1, var2, (byte[])null); + } +} diff --git a/src/net/minecraft/src/ChunkProviderServer.java b/src/net/minecraft/src/ChunkProviderServer.java new file mode 100644 index 0000000..2fd3984 --- /dev/null +++ b/src/net/minecraft/src/ChunkProviderServer.java @@ -0,0 +1,228 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +public class ChunkProviderServer implements IChunkProvider { + private Set chunksToUnload = new HashSet(); + private Chunk defaultEmptyChunk; + private IChunkProvider currentChunkProvider; + private IChunkLoader currentChunkLoader; + public boolean loadChunkOnProvideRequest = true; + private LongHashMap loadedChunkHashMap = new LongHashMap(); + private List loadedChunks = new ArrayList(); + private WorldServer worldObj; + + public ChunkProviderServer(WorldServer var1, IChunkLoader var2, IChunkProvider var3) { + this.defaultEmptyChunk = new EmptyChunk(var1, 0, 0); + this.worldObj = var1; + this.currentChunkLoader = var2; + this.currentChunkProvider = var3; + } + + public boolean chunkExists(int var1, int var2) { + return this.loadedChunkHashMap.containsItem(ChunkCoordIntPair.chunkXZ2Int(var1, var2)); + } + + public void unloadChunksIfNotNearSpawn(int var1, int var2) { + if(this.worldObj.provider.canRespawnHere()) { + ChunkCoordinates var3 = this.worldObj.getSpawnPoint(); + int var4 = var1 * 16 + 8 - var3.posX; + int var5 = var2 * 16 + 8 - var3.posZ; + short var6 = 128; + if(var4 < -var6 || var4 > var6 || var5 < -var6 || var5 > var6) { + this.chunksToUnload.add(Long.valueOf(ChunkCoordIntPair.chunkXZ2Int(var1, var2))); + } + } else { + this.chunksToUnload.add(Long.valueOf(ChunkCoordIntPair.chunkXZ2Int(var1, var2))); + } + + } + + public void unloadAllChunks() { + Iterator var1 = this.loadedChunks.iterator(); + + while(var1.hasNext()) { + Chunk var2 = (Chunk)var1.next(); + this.unloadChunksIfNotNearSpawn(var2.xPosition, var2.zPosition); + } + + } + + public Chunk loadChunk(int var1, int var2) { + long var3 = ChunkCoordIntPair.chunkXZ2Int(var1, var2); + this.chunksToUnload.remove(Long.valueOf(var3)); + Chunk var5 = (Chunk)this.loadedChunkHashMap.getValueByKey(var3); + if(var5 == null) { + var5 = this.safeLoadChunk(var1, var2); + if(var5 == null) { + if(this.currentChunkProvider == null) { + var5 = this.defaultEmptyChunk; + } else { + try { + var5 = this.currentChunkProvider.provideChunk(var1, var2); + } catch (Throwable var9) { + CrashReport var7 = CrashReport.makeCrashReport(var9, "Exception generating new chunk"); + CrashReportCategory var8 = var7.makeCategory("Chunk to be generated"); + var8.addCrashSection("Location", String.format("%d,%d", new Object[]{Integer.valueOf(var1), Integer.valueOf(var2)})); + var8.addCrashSection("Position hash", Long.valueOf(var3)); + var8.addCrashSection("Generator", this.currentChunkProvider.makeString()); + throw new ReportedException(var7); + } + } + } + + this.loadedChunkHashMap.add(var3, var5); + this.loadedChunks.add(var5); + if(var5 != null) { + var5.onChunkLoad(); + } + + var5.populateChunk(this, this, var1, var2); + } + + return var5; + } + + public Chunk provideChunk(int var1, int var2) { + Chunk var3 = (Chunk)this.loadedChunkHashMap.getValueByKey(ChunkCoordIntPair.chunkXZ2Int(var1, var2)); + return var3 == null ? (!this.worldObj.findingSpawnPoint && !this.loadChunkOnProvideRequest ? this.defaultEmptyChunk : this.loadChunk(var1, var2)) : var3; + } + + private Chunk safeLoadChunk(int var1, int var2) { + if(this.currentChunkLoader == null) { + return null; + } else { + try { + Chunk var3 = this.currentChunkLoader.loadChunk(this.worldObj, var1, var2); + if(var3 != null) { + var3.lastSaveTime = this.worldObj.getTotalWorldTime(); + if(this.currentChunkProvider != null) { + this.currentChunkProvider.recreateStructures(var1, var2); + } + } + + return var3; + } catch (Exception var4) { + var4.printStackTrace(); + return null; + } + } + } + + private void safeSaveExtraChunkData(Chunk var1) { + if(this.currentChunkLoader != null) { + try { + this.currentChunkLoader.saveExtraChunkData(this.worldObj, var1); + } catch (Exception var3) { + var3.printStackTrace(); + } + + } + } + + private void safeSaveChunk(Chunk var1) { + if(this.currentChunkLoader != null) { + try { + var1.lastSaveTime = this.worldObj.getTotalWorldTime(); + this.currentChunkLoader.saveChunk(this.worldObj, var1); + } catch (IOException var3) { + var3.printStackTrace(); + } catch (MinecraftException var4) { + var4.printStackTrace(); + } + + } + } + + public void populate(IChunkProvider var1, int var2, int var3) { + Chunk var4 = this.provideChunk(var2, var3); + if(!var4.isTerrainPopulated) { + var4.isTerrainPopulated = true; + if(this.currentChunkProvider != null) { + this.currentChunkProvider.populate(var1, var2, var3); + var4.setChunkModified(); + } + } + + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + int var3 = 0; + + for(int var4 = 0; var4 < this.loadedChunks.size(); ++var4) { + Chunk var5 = (Chunk)this.loadedChunks.get(var4); + if(var1) { + this.safeSaveExtraChunkData(var5); + } + + if(var5.needsSaving(var1)) { + this.safeSaveChunk(var5); + var5.isModified = false; + ++var3; + if(var3 == 24 && !var1) { + return false; + } + } + } + + return true; + } + + public void func_104112_b() { + if(this.currentChunkLoader != null) { + this.currentChunkLoader.saveExtraData(); + } + + } + + public boolean unloadQueuedChunks() { + if(!this.worldObj.canNotSave) { + for(int var1 = 0; var1 < 100; ++var1) { + if(!this.chunksToUnload.isEmpty()) { + Long var2 = (Long)this.chunksToUnload.iterator().next(); + Chunk var3 = (Chunk)this.loadedChunkHashMap.getValueByKey(var2.longValue()); + var3.onChunkUnload(); + this.safeSaveChunk(var3); + this.safeSaveExtraChunkData(var3); + this.chunksToUnload.remove(var2); + this.loadedChunkHashMap.remove(var2.longValue()); + this.loadedChunks.remove(var3); + } + } + + if(this.currentChunkLoader != null) { + this.currentChunkLoader.chunkTick(); + } + } + + return this.currentChunkProvider.unloadQueuedChunks(); + } + + public boolean canSave() { + return !this.worldObj.canNotSave; + } + + public String makeString() { + return "ServerChunkCache: " + this.loadedChunkHashMap.getNumHashElements() + " Drop: " + this.chunksToUnload.size(); + } + + public List getPossibleCreatures(EnumCreatureType var1, int var2, int var3, int var4) { + return this.currentChunkProvider.getPossibleCreatures(var1, var2, var3, var4); + } + + public ChunkPosition findClosestStructure(World var1, String var2, int var3, int var4, int var5) { + return this.currentChunkProvider.findClosestStructure(var1, var2, var3, var4, var5); + } + + public int getLoadedChunkCount() { + return this.loadedChunkHashMap.getNumHashElements(); + } + + public void recreateStructures(int var1, int var2) { + } +} diff --git a/src/net/minecraft/src/ClippingHelper.java b/src/net/minecraft/src/ClippingHelper.java new file mode 100644 index 0000000..df283be --- /dev/null +++ b/src/net/minecraft/src/ClippingHelper.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +public class ClippingHelper { + public float[][] frustum = new float[16][16]; + public float[] projectionMatrix = new float[16]; + public float[] modelviewMatrix = new float[16]; + public float[] clippingMatrix = new float[16]; + + public boolean isBoxInFrustum(double var1, double var3, double var5, double var7, double var9, double var11) { + for(int var13 = 0; var13 < 6; ++var13) { + if((double)this.frustum[var13][0] * var1 + (double)this.frustum[var13][1] * var3 + (double)this.frustum[var13][2] * var5 + (double)this.frustum[var13][3] <= 0.0D && (double)this.frustum[var13][0] * var7 + (double)this.frustum[var13][1] * var3 + (double)this.frustum[var13][2] * var5 + (double)this.frustum[var13][3] <= 0.0D && (double)this.frustum[var13][0] * var1 + (double)this.frustum[var13][1] * var9 + (double)this.frustum[var13][2] * var5 + (double)this.frustum[var13][3] <= 0.0D && (double)this.frustum[var13][0] * var7 + (double)this.frustum[var13][1] * var9 + (double)this.frustum[var13][2] * var5 + (double)this.frustum[var13][3] <= 0.0D && (double)this.frustum[var13][0] * var1 + (double)this.frustum[var13][1] * var3 + (double)this.frustum[var13][2] * var11 + (double)this.frustum[var13][3] <= 0.0D && (double)this.frustum[var13][0] * var7 + (double)this.frustum[var13][1] * var3 + (double)this.frustum[var13][2] * var11 + (double)this.frustum[var13][3] <= 0.0D && (double)this.frustum[var13][0] * var1 + (double)this.frustum[var13][1] * var9 + (double)this.frustum[var13][2] * var11 + (double)this.frustum[var13][3] <= 0.0D && (double)this.frustum[var13][0] * var7 + (double)this.frustum[var13][1] * var9 + (double)this.frustum[var13][2] * var11 + (double)this.frustum[var13][3] <= 0.0D) { + return false; + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ClippingHelperImpl.java b/src/net/minecraft/src/ClippingHelperImpl.java new file mode 100644 index 0000000..7a8904c --- /dev/null +++ b/src/net/minecraft/src/ClippingHelperImpl.java @@ -0,0 +1,82 @@ +package net.minecraft.src; + +import java.nio.FloatBuffer; +import org.lwjgl.opengl.GL11; + +public class ClippingHelperImpl extends ClippingHelper { + private static ClippingHelperImpl instance = new ClippingHelperImpl(); + private FloatBuffer projectionMatrixBuffer = GLAllocation.createDirectFloatBuffer(16); + private FloatBuffer modelviewMatrixBuffer = GLAllocation.createDirectFloatBuffer(16); + private FloatBuffer field_78564_h = GLAllocation.createDirectFloatBuffer(16); + + public static ClippingHelper getInstance() { + instance.init(); + return instance; + } + + private void normalize(float[][] var1, int var2) { + float var3 = MathHelper.sqrt_float(var1[var2][0] * var1[var2][0] + var1[var2][1] * var1[var2][1] + var1[var2][2] * var1[var2][2]); + var1[var2][0] /= var3; + var1[var2][1] /= var3; + var1[var2][2] /= var3; + var1[var2][3] /= var3; + } + + private void init() { + this.projectionMatrixBuffer.clear(); + this.modelviewMatrixBuffer.clear(); + this.field_78564_h.clear(); + GL11.glGetFloat(GL11.GL_PROJECTION_MATRIX, this.projectionMatrixBuffer); + GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, this.modelviewMatrixBuffer); + this.projectionMatrixBuffer.flip().limit(16); + this.projectionMatrixBuffer.get(this.projectionMatrix); + this.modelviewMatrixBuffer.flip().limit(16); + this.modelviewMatrixBuffer.get(this.modelviewMatrix); + this.clippingMatrix[0] = this.modelviewMatrix[0] * this.projectionMatrix[0] + this.modelviewMatrix[1] * this.projectionMatrix[4] + this.modelviewMatrix[2] * this.projectionMatrix[8] + this.modelviewMatrix[3] * this.projectionMatrix[12]; + this.clippingMatrix[1] = this.modelviewMatrix[0] * this.projectionMatrix[1] + this.modelviewMatrix[1] * this.projectionMatrix[5] + this.modelviewMatrix[2] * this.projectionMatrix[9] + this.modelviewMatrix[3] * this.projectionMatrix[13]; + this.clippingMatrix[2] = this.modelviewMatrix[0] * this.projectionMatrix[2] + this.modelviewMatrix[1] * this.projectionMatrix[6] + this.modelviewMatrix[2] * this.projectionMatrix[10] + this.modelviewMatrix[3] * this.projectionMatrix[14]; + this.clippingMatrix[3] = this.modelviewMatrix[0] * this.projectionMatrix[3] + this.modelviewMatrix[1] * this.projectionMatrix[7] + this.modelviewMatrix[2] * this.projectionMatrix[11] + this.modelviewMatrix[3] * this.projectionMatrix[15]; + this.clippingMatrix[4] = this.modelviewMatrix[4] * this.projectionMatrix[0] + this.modelviewMatrix[5] * this.projectionMatrix[4] + this.modelviewMatrix[6] * this.projectionMatrix[8] + this.modelviewMatrix[7] * this.projectionMatrix[12]; + this.clippingMatrix[5] = this.modelviewMatrix[4] * this.projectionMatrix[1] + this.modelviewMatrix[5] * this.projectionMatrix[5] + this.modelviewMatrix[6] * this.projectionMatrix[9] + this.modelviewMatrix[7] * this.projectionMatrix[13]; + this.clippingMatrix[6] = this.modelviewMatrix[4] * this.projectionMatrix[2] + this.modelviewMatrix[5] * this.projectionMatrix[6] + this.modelviewMatrix[6] * this.projectionMatrix[10] + this.modelviewMatrix[7] * this.projectionMatrix[14]; + this.clippingMatrix[7] = this.modelviewMatrix[4] * this.projectionMatrix[3] + this.modelviewMatrix[5] * this.projectionMatrix[7] + this.modelviewMatrix[6] * this.projectionMatrix[11] + this.modelviewMatrix[7] * this.projectionMatrix[15]; + this.clippingMatrix[8] = this.modelviewMatrix[8] * this.projectionMatrix[0] + this.modelviewMatrix[9] * this.projectionMatrix[4] + this.modelviewMatrix[10] * this.projectionMatrix[8] + this.modelviewMatrix[11] * this.projectionMatrix[12]; + this.clippingMatrix[9] = this.modelviewMatrix[8] * this.projectionMatrix[1] + this.modelviewMatrix[9] * this.projectionMatrix[5] + this.modelviewMatrix[10] * this.projectionMatrix[9] + this.modelviewMatrix[11] * this.projectionMatrix[13]; + this.clippingMatrix[10] = this.modelviewMatrix[8] * this.projectionMatrix[2] + this.modelviewMatrix[9] * this.projectionMatrix[6] + this.modelviewMatrix[10] * this.projectionMatrix[10] + this.modelviewMatrix[11] * this.projectionMatrix[14]; + this.clippingMatrix[11] = this.modelviewMatrix[8] * this.projectionMatrix[3] + this.modelviewMatrix[9] * this.projectionMatrix[7] + this.modelviewMatrix[10] * this.projectionMatrix[11] + this.modelviewMatrix[11] * this.projectionMatrix[15]; + this.clippingMatrix[12] = this.modelviewMatrix[12] * this.projectionMatrix[0] + this.modelviewMatrix[13] * this.projectionMatrix[4] + this.modelviewMatrix[14] * this.projectionMatrix[8] + this.modelviewMatrix[15] * this.projectionMatrix[12]; + this.clippingMatrix[13] = this.modelviewMatrix[12] * this.projectionMatrix[1] + this.modelviewMatrix[13] * this.projectionMatrix[5] + this.modelviewMatrix[14] * this.projectionMatrix[9] + this.modelviewMatrix[15] * this.projectionMatrix[13]; + this.clippingMatrix[14] = this.modelviewMatrix[12] * this.projectionMatrix[2] + this.modelviewMatrix[13] * this.projectionMatrix[6] + this.modelviewMatrix[14] * this.projectionMatrix[10] + this.modelviewMatrix[15] * this.projectionMatrix[14]; + this.clippingMatrix[15] = this.modelviewMatrix[12] * this.projectionMatrix[3] + this.modelviewMatrix[13] * this.projectionMatrix[7] + this.modelviewMatrix[14] * this.projectionMatrix[11] + this.modelviewMatrix[15] * this.projectionMatrix[15]; + this.frustum[0][0] = this.clippingMatrix[3] - this.clippingMatrix[0]; + this.frustum[0][1] = this.clippingMatrix[7] - this.clippingMatrix[4]; + this.frustum[0][2] = this.clippingMatrix[11] - this.clippingMatrix[8]; + this.frustum[0][3] = this.clippingMatrix[15] - this.clippingMatrix[12]; + this.normalize(this.frustum, 0); + this.frustum[1][0] = this.clippingMatrix[3] + this.clippingMatrix[0]; + this.frustum[1][1] = this.clippingMatrix[7] + this.clippingMatrix[4]; + this.frustum[1][2] = this.clippingMatrix[11] + this.clippingMatrix[8]; + this.frustum[1][3] = this.clippingMatrix[15] + this.clippingMatrix[12]; + this.normalize(this.frustum, 1); + this.frustum[2][0] = this.clippingMatrix[3] + this.clippingMatrix[1]; + this.frustum[2][1] = this.clippingMatrix[7] + this.clippingMatrix[5]; + this.frustum[2][2] = this.clippingMatrix[11] + this.clippingMatrix[9]; + this.frustum[2][3] = this.clippingMatrix[15] + this.clippingMatrix[13]; + this.normalize(this.frustum, 2); + this.frustum[3][0] = this.clippingMatrix[3] - this.clippingMatrix[1]; + this.frustum[3][1] = this.clippingMatrix[7] - this.clippingMatrix[5]; + this.frustum[3][2] = this.clippingMatrix[11] - this.clippingMatrix[9]; + this.frustum[3][3] = this.clippingMatrix[15] - this.clippingMatrix[13]; + this.normalize(this.frustum, 3); + this.frustum[4][0] = this.clippingMatrix[3] - this.clippingMatrix[2]; + this.frustum[4][1] = this.clippingMatrix[7] - this.clippingMatrix[6]; + this.frustum[4][2] = this.clippingMatrix[11] - this.clippingMatrix[10]; + this.frustum[4][3] = this.clippingMatrix[15] - this.clippingMatrix[14]; + this.normalize(this.frustum, 4); + this.frustum[5][0] = this.clippingMatrix[3] + this.clippingMatrix[2]; + this.frustum[5][1] = this.clippingMatrix[7] + this.clippingMatrix[6]; + this.frustum[5][2] = this.clippingMatrix[11] + this.clippingMatrix[10]; + this.frustum[5][3] = this.clippingMatrix[15] + this.clippingMatrix[14]; + this.normalize(this.frustum, 5); + } +} diff --git a/src/net/minecraft/src/CodecMus.java b/src/net/minecraft/src/CodecMus.java new file mode 100644 index 0000000..68581ae --- /dev/null +++ b/src/net/minecraft/src/CodecMus.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.io.InputStream; +import paulscode.sound.codecs.CodecJOrbis; + +public class CodecMus extends CodecJOrbis { + protected InputStream openInputStream() throws IOException { + return new MusInputStream(this, this.url, this.urlConnection.getInputStream()); + } +} diff --git a/src/net/minecraft/src/ColorizerFoliage.java b/src/net/minecraft/src/ColorizerFoliage.java new file mode 100644 index 0000000..ffd0328 --- /dev/null +++ b/src/net/minecraft/src/ColorizerFoliage.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +public class ColorizerFoliage { + private static int[] foliageBuffer = new int[65536]; + + public static void setFoliageBiomeColorizer(int[] var0) { + foliageBuffer = var0; + } + + public static int getFoliageColor(double var0, double var2) { + var2 *= var0; + int var4 = (int)((1.0D - var0) * 255.0D); + int var5 = (int)((1.0D - var2) * 255.0D); + return foliageBuffer[var5 << 8 | var4]; + } + + public static int getFoliageColorPine() { + return 6396257; + } + + public static int getFoliageColorBirch() { + return 8431445; + } + + public static int getFoliageColorBasic() { + return 4764952; + } +} diff --git a/src/net/minecraft/src/ColorizerGrass.java b/src/net/minecraft/src/ColorizerGrass.java new file mode 100644 index 0000000..e2a9ab6 --- /dev/null +++ b/src/net/minecraft/src/ColorizerGrass.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +public class ColorizerGrass { + private static int[] grassBuffer = new int[65536]; + + public static void setGrassBiomeColorizer(int[] var0) { + grassBuffer = var0; + } + + public static int getGrassColor(double var0, double var2) { + var2 *= var0; + int var4 = (int)((1.0D - var0) * 255.0D); + int var5 = (int)((1.0D - var2) * 255.0D); + return grassBuffer[var5 << 8 | var4]; + } +} diff --git a/src/net/minecraft/src/CombatEntry.java b/src/net/minecraft/src/CombatEntry.java new file mode 100644 index 0000000..97cd168 --- /dev/null +++ b/src/net/minecraft/src/CombatEntry.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +public class CombatEntry { + private final DamageSource field_94569_a; + private final int field_94567_b; + private final int field_94568_c; + private final int field_94565_d; + private final String field_94566_e; + private final float field_94564_f; + + public CombatEntry(DamageSource var1, int var2, int var3, int var4, String var5, float var6) { + this.field_94569_a = var1; + this.field_94567_b = var2; + this.field_94568_c = var4; + this.field_94565_d = var3; + this.field_94566_e = var5; + this.field_94564_f = var6; + } + + public DamageSource func_94560_a() { + return this.field_94569_a; + } + + public int func_94563_c() { + return this.field_94568_c; + } + + public boolean func_94559_f() { + return this.field_94569_a.getEntity() instanceof EntityLiving; + } + + public String func_94562_g() { + return this.field_94566_e; + } + + public String func_94558_h() { + return this.func_94560_a().getEntity() == null ? null : this.func_94560_a().getEntity().getTranslatedEntityName(); + } + + public float func_94561_i() { + return this.field_94569_a == DamageSource.outOfWorld ? Float.MAX_VALUE : this.field_94564_f; + } +} diff --git a/src/net/minecraft/src/CombatTracker.java b/src/net/minecraft/src/CombatTracker.java new file mode 100644 index 0000000..9ed0bd7 --- /dev/null +++ b/src/net/minecraft/src/CombatTracker.java @@ -0,0 +1,167 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class CombatTracker { + private final List field_94556_a = new ArrayList(); + private final EntityLiving field_94554_b; + private int field_94555_c = 0; + private boolean field_94552_d = false; + private boolean field_94553_e = false; + private String field_94551_f; + + public CombatTracker(EntityLiving var1) { + this.field_94554_b = var1; + } + + public void func_94545_a() { + this.func_94542_g(); + if(this.field_94554_b.isOnLadder()) { + int var1 = this.field_94554_b.worldObj.getBlockId(MathHelper.floor_double(this.field_94554_b.posX), MathHelper.floor_double(this.field_94554_b.boundingBox.minY), MathHelper.floor_double(this.field_94554_b.posZ)); + if(var1 == Block.ladder.blockID) { + this.field_94551_f = "ladder"; + } else if(var1 == Block.vine.blockID) { + this.field_94551_f = "vines"; + } + } else if(this.field_94554_b.isInWater()) { + this.field_94551_f = "water"; + } + + } + + public void func_94547_a(DamageSource var1, int var2, int var3) { + this.func_94549_h(); + this.func_94545_a(); + CombatEntry var4 = new CombatEntry(var1, this.field_94554_b.ticksExisted, var2, var3, this.field_94551_f, this.field_94554_b.fallDistance); + this.field_94556_a.add(var4); + this.field_94555_c = this.field_94554_b.ticksExisted; + this.field_94553_e = true; + this.field_94552_d |= var4.func_94559_f(); + } + + public String func_94546_b() { + if(this.field_94556_a.size() == 0) { + return this.field_94554_b.getTranslatedEntityName() + " died"; + } else { + CombatEntry var1 = this.func_94544_f(); + CombatEntry var2 = (CombatEntry)this.field_94556_a.get(this.field_94556_a.size() - 1); + String var3 = ""; + String var4 = var2.func_94558_h(); + Entity var5 = var2.func_94560_a().getEntity(); + if(var1 != null && var2.func_94560_a() == DamageSource.fall) { + String var6 = var1.func_94558_h(); + if(var1.func_94560_a() != DamageSource.fall && var1.func_94560_a() != DamageSource.outOfWorld) { + if(var6 != null && (var4 == null || !var6.equals(var4))) { + Entity var9 = var1.func_94560_a().getEntity(); + ItemStack var8 = var9 instanceof EntityLiving ? ((EntityLiving)var9).getHeldItem() : null; + if(var8 != null && var8.hasDisplayName()) { + var3 = StatCollector.translateToLocalFormatted("death.fell.assist.item", new Object[]{this.field_94554_b.getTranslatedEntityName(), var4, var8.getDisplayName()}); + } else { + var3 = StatCollector.translateToLocalFormatted("death.fell.assist", new Object[]{this.field_94554_b.getTranslatedEntityName(), var6}); + } + } else if(var4 != null) { + ItemStack var7 = var5 instanceof EntityLiving ? ((EntityLiving)var5).getHeldItem() : null; + if(var7 != null && var7.hasDisplayName()) { + var3 = StatCollector.translateToLocalFormatted("death.fell.finish.item", new Object[]{this.field_94554_b.getTranslatedEntityName(), var4, var7.getDisplayName()}); + } else { + var3 = StatCollector.translateToLocalFormatted("death.fell.finish", new Object[]{this.field_94554_b.getTranslatedEntityName(), var4}); + } + } else { + var3 = StatCollector.translateToLocalFormatted("death.fell.killer", new Object[]{this.field_94554_b.getTranslatedEntityName()}); + } + } else { + var3 = StatCollector.translateToLocalFormatted("death.fell.accident." + this.func_94548_b(var1), new Object[]{this.field_94554_b.getTranslatedEntityName()}); + } + } else { + var3 = var2.func_94560_a().getDeathMessage(this.field_94554_b); + } + + return var3; + } + } + + public EntityLiving func_94550_c() { + EntityLiving var1 = null; + EntityPlayer var2 = null; + int var3 = 0; + int var4 = 0; + Iterator var5 = this.field_94556_a.iterator(); + + while(true) { + CombatEntry var6; + do { + do { + if(!var5.hasNext()) { + if(var2 != null && var4 >= var3 / 3) { + return var2; + } + + return var1; + } + + var6 = (CombatEntry)var5.next(); + if(var6.func_94560_a().getEntity() instanceof EntityPlayer && (var2 == null || var6.func_94563_c() > var4)) { + var4 = var6.func_94563_c(); + var2 = (EntityPlayer)var6.func_94560_a().getEntity(); + } + } while(!(var6.func_94560_a().getEntity() instanceof EntityLiving)); + } while(var1 != null && var6.func_94563_c() <= var3); + + var3 = var6.func_94563_c(); + var1 = (EntityLiving)var6.func_94560_a().getEntity(); + } + } + + private CombatEntry func_94544_f() { + CombatEntry var1 = null; + CombatEntry var2 = null; + byte var3 = 0; + float var4 = 0.0F; + + for(int var5 = 0; var5 < this.field_94556_a.size(); ++var5) { + CombatEntry var6 = (CombatEntry)this.field_94556_a.get(var5); + CombatEntry var7 = var5 > 0 ? (CombatEntry)this.field_94556_a.get(var5 - 1) : null; + if((var6.func_94560_a() == DamageSource.fall || var6.func_94560_a() == DamageSource.outOfWorld) && var6.func_94561_i() > 0.0F && (var1 == null || var6.func_94561_i() > var4)) { + if(var5 > 0) { + var1 = var7; + } else { + var1 = var6; + } + + var4 = var6.func_94561_i(); + } + + if(var6.func_94562_g() != null && (var2 == null || var6.func_94563_c() > var3)) { + var2 = var6; + } + } + + if(var4 > 5.0F && var1 != null) { + return var1; + } else if(var3 > 5 && var2 != null) { + return var2; + } else { + return null; + } + } + + private String func_94548_b(CombatEntry var1) { + return var1.func_94562_g() == null ? "generic" : var1.func_94562_g(); + } + + private void func_94542_g() { + this.field_94551_f = null; + } + + private void func_94549_h() { + int var1 = this.field_94552_d ? 300 : 100; + if(this.field_94553_e && this.field_94554_b.ticksExisted - this.field_94555_c > var1) { + this.field_94556_a.clear(); + this.field_94553_e = false; + this.field_94552_d = false; + } + + } +} diff --git a/src/net/minecraft/src/CommandBase.java b/src/net/minecraft/src/CommandBase.java new file mode 100644 index 0000000..7e0f506 --- /dev/null +++ b/src/net/minecraft/src/CommandBase.java @@ -0,0 +1,208 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public abstract class CommandBase implements ICommand { + private static IAdminCommand theAdmin = null; + + public int getRequiredPermissionLevel() { + return 4; + } + + public String getCommandUsage(ICommandSender var1) { + return "/" + this.getCommandName(); + } + + public List getCommandAliases() { + return null; + } + + public boolean canCommandSenderUseCommand(ICommandSender var1) { + return var1.canCommandSenderUseCommand(this.getRequiredPermissionLevel(), this.getCommandName()); + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return null; + } + + public static int parseInt(ICommandSender var0, String var1) { + try { + return Integer.parseInt(var1); + } catch (NumberFormatException var3) { + throw new NumberInvalidException("commands.generic.num.invalid", new Object[]{var1}); + } + } + + public static int parseIntWithMin(ICommandSender var0, String var1, int var2) { + return parseIntBounded(var0, var1, var2, Integer.MAX_VALUE); + } + + public static int parseIntBounded(ICommandSender var0, String var1, int var2, int var3) { + int var4 = parseInt(var0, var1); + if(var4 < var2) { + throw new NumberInvalidException("commands.generic.num.tooSmall", new Object[]{Integer.valueOf(var4), Integer.valueOf(var2)}); + } else if(var4 > var3) { + throw new NumberInvalidException("commands.generic.num.tooBig", new Object[]{Integer.valueOf(var4), Integer.valueOf(var3)}); + } else { + return var4; + } + } + + public static double parseDouble(ICommandSender var0, String var1) { + try { + return Double.parseDouble(var1); + } catch (NumberFormatException var3) { + throw new NumberInvalidException("commands.generic.double.invalid", new Object[]{var1}); + } + } + + public static EntityPlayerMP getCommandSenderAsPlayer(ICommandSender var0) { + if(var0 instanceof EntityPlayerMP) { + return (EntityPlayerMP)var0; + } else { + throw new PlayerNotFoundException("You must specify which player you wish to perform this action on.", new Object[0]); + } + } + + public static EntityPlayerMP func_82359_c(ICommandSender var0, String var1) { + EntityPlayerMP var2 = PlayerSelector.matchOnePlayer(var0, var1); + if(var2 != null) { + return var2; + } else { + var2 = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(var1); + if(var2 == null) { + throw new PlayerNotFoundException(); + } else { + return var2; + } + } + } + + public static String func_96332_d(ICommandSender var0, String var1) { + EntityPlayerMP var2 = PlayerSelector.matchOnePlayer(var0, var1); + if(var2 != null) { + return var2.getEntityName(); + } else if(PlayerSelector.hasArguments(var1)) { + throw new PlayerNotFoundException(); + } else { + return var1; + } + } + + public static String func_82360_a(ICommandSender var0, String[] var1, int var2) { + return func_82361_a(var0, var1, var2, false); + } + + public static String func_82361_a(ICommandSender var0, String[] var1, int var2, boolean var3) { + StringBuilder var4 = new StringBuilder(); + + for(int var5 = var2; var5 < var1.length; ++var5) { + if(var5 > var2) { + var4.append(" "); + } + + String var6 = var1[var5]; + if(var3) { + String var7 = PlayerSelector.matchPlayersAsString(var0, var6); + if(var7 != null) { + var6 = var7; + } else if(PlayerSelector.hasArguments(var6)) { + throw new PlayerNotFoundException(); + } + } + + var4.append(var6); + } + + return var4.toString(); + } + + public static String joinNiceString(Object[] var0) { + StringBuilder var1 = new StringBuilder(); + + for(int var2 = 0; var2 < var0.length; ++var2) { + String var3 = var0[var2].toString(); + if(var2 > 0) { + if(var2 == var0.length - 1) { + var1.append(" and "); + } else { + var1.append(", "); + } + } + + var1.append(var3); + } + + return var1.toString(); + } + + public static String func_96333_a(Collection var0) { + return joinNiceString(var0.toArray(new String[0])); + } + + public static boolean doesStringStartWith(String var0, String var1) { + return var1.regionMatches(true, 0, var0, 0, var0.length()); + } + + public static List getListOfStringsMatchingLastWord(String[] var0, String... var1) { + String var2 = var0[var0.length - 1]; + ArrayList var3 = new ArrayList(); + String[] var4 = var1; + int var5 = var1.length; + + for(int var6 = 0; var6 < var5; ++var6) { + String var7 = var4[var6]; + if(doesStringStartWith(var2, var7)) { + var3.add(var7); + } + } + + return var3; + } + + public static List getListOfStringsFromIterableMatchingLastWord(String[] var0, Iterable var1) { + String var2 = var0[var0.length - 1]; + ArrayList var3 = new ArrayList(); + Iterator var4 = var1.iterator(); + + while(var4.hasNext()) { + String var5 = (String)var4.next(); + if(doesStringStartWith(var2, var5)) { + var3.add(var5); + } + } + + return var3; + } + + public boolean isUsernameIndex(String[] var1, int var2) { + return false; + } + + public static void notifyAdmins(ICommandSender var0, String var1, Object... var2) { + notifyAdmins(var0, 0, var1, var2); + } + + public static void notifyAdmins(ICommandSender var0, int var1, String var2, Object... var3) { + if(theAdmin != null) { + theAdmin.notifyAdmins(var0, var1, var2, var3); + } + + } + + public static void setAdminCommander(IAdminCommand var0) { + theAdmin = var0; + } + + public int compareTo(ICommand var1) { + return this.getCommandName().compareTo(var1.getCommandName()); + } + + public int compareTo(Object var1) { + return this.compareTo((ICommand)var1); + } +} diff --git a/src/net/minecraft/src/CommandClearInventory.java b/src/net/minecraft/src/CommandClearInventory.java new file mode 100644 index 0000000..b6663d6 --- /dev/null +++ b/src/net/minecraft/src/CommandClearInventory.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandClearInventory extends CommandBase { + public String getCommandName() { + return "clear"; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.clear.usage", new Object[0]); + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public void processCommand(ICommandSender var1, String[] var2) { + EntityPlayerMP var3 = var2.length == 0 ? getCommandSenderAsPlayer(var1) : func_82359_c(var1, var2[0]); + int var4 = var2.length >= 2 ? parseIntWithMin(var1, var2[1], 1) : -1; + int var5 = var2.length >= 3 ? parseIntWithMin(var1, var2[2], 0) : -1; + int var6 = var3.inventory.clearInventory(var4, var5); + var3.inventoryContainer.detectAndSendChanges(); + if(var6 == 0) { + throw new CommandException("commands.clear.failure", new Object[]{var3.getEntityName()}); + } else { + notifyAdmins(var1, "commands.clear.success", new Object[]{var3.getEntityName(), Integer.valueOf(var6)}); + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 1 ? getListOfStringsMatchingLastWord(var2, this.getAllOnlineUsernames()) : null; + } + + protected String[] getAllOnlineUsernames() { + return MinecraftServer.getServer().getAllUsernames(); + } + + public boolean isUsernameIndex(String[] var1, int var2) { + return var2 == 0; + } +} diff --git a/src/net/minecraft/src/CommandDebug.java b/src/net/minecraft/src/CommandDebug.java new file mode 100644 index 0000000..f5fb8f9 --- /dev/null +++ b/src/net/minecraft/src/CommandDebug.java @@ -0,0 +1,122 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileWriter; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandDebug extends CommandBase { + private long startTime = 0L; + private int startTicks = 0; + + public String getCommandName() { + return "debug"; + } + + public int getRequiredPermissionLevel() { + return 3; + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length == 1) { + if(var2[0].equals("start")) { + notifyAdmins(var1, "commands.debug.start", new Object[0]); + MinecraftServer.getServer().enableProfiling(); + this.startTime = System.currentTimeMillis(); + this.startTicks = MinecraftServer.getServer().getTickCounter(); + return; + } + + if(var2[0].equals("stop")) { + if(!MinecraftServer.getServer().theProfiler.profilingEnabled) { + throw new CommandException("commands.debug.notStarted", new Object[0]); + } + + long var3 = System.currentTimeMillis(); + int var5 = MinecraftServer.getServer().getTickCounter(); + long var6 = var3 - this.startTime; + int var8 = var5 - this.startTicks; + this.saveProfilerResults(var6, var8); + MinecraftServer.getServer().theProfiler.profilingEnabled = false; + notifyAdmins(var1, "commands.debug.stop", new Object[]{Float.valueOf((float)var6 / 1000.0F), Integer.valueOf(var8)}); + return; + } + } + + throw new WrongUsageException("commands.debug.usage", new Object[0]); + } + + private void saveProfilerResults(long var1, int var3) { + File var4 = new File(MinecraftServer.getServer().getFile("debug"), "profile-results-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + ".txt"); + var4.getParentFile().mkdirs(); + + try { + FileWriter var5 = new FileWriter(var4); + var5.write(this.getProfilerResults(var1, var3)); + var5.close(); + } catch (Throwable var6) { + MinecraftServer.getServer().getLogAgent().logSevereException("Could not save profiler results to " + var4, var6); + } + + } + + private String getProfilerResults(long var1, int var3) { + StringBuilder var4 = new StringBuilder(); + var4.append("---- Minecraft Profiler Results ----\n"); + var4.append("// "); + var4.append(getWittyComment()); + var4.append("\n\n"); + var4.append("Time span: ").append(var1).append(" ms\n"); + var4.append("Tick span: ").append(var3).append(" ticks\n"); + var4.append("// This is approximately ").append(String.format("%.2f", new Object[]{Float.valueOf((float)var3 / ((float)var1 / 1000.0F))})).append(" ticks per second. It should be ").append(20).append(" ticks per second\n\n"); + var4.append("--- BEGIN PROFILE DUMP ---\n\n"); + this.getProfileDump(0, "root", var4); + var4.append("--- END PROFILE DUMP ---\n\n"); + return var4.toString(); + } + + private void getProfileDump(int var1, String var2, StringBuilder var3) { + List var4 = MinecraftServer.getServer().theProfiler.getProfilingData(var2); + if(var4 != null && var4.size() >= 3) { + for(int var5 = 1; var5 < var4.size(); ++var5) { + ProfilerResult var6 = (ProfilerResult)var4.get(var5); + var3.append(String.format("[%02d] ", new Object[]{Integer.valueOf(var1)})); + + for(int var7 = 0; var7 < var1; ++var7) { + var3.append(" "); + } + + var3.append(var6.field_76331_c); + var3.append(" - "); + var3.append(String.format("%.2f", new Object[]{Double.valueOf(var6.field_76332_a)})); + var3.append("%/"); + var3.append(String.format("%.2f", new Object[]{Double.valueOf(var6.field_76330_b)})); + var3.append("%\n"); + if(!var6.field_76331_c.equals("unspecified")) { + try { + this.getProfileDump(var1 + 1, var2 + "." + var6.field_76331_c, var3); + } catch (Exception var8) { + var3.append("[[ EXCEPTION " + var8 + " ]]"); + } + } + } + + } + } + + private static String getWittyComment() { + String[] var0 = 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 var0[(int)(System.nanoTime() % (long)var0.length)]; + } catch (Throwable var2) { + return "Witty comment unavailable :("; + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 1 ? getListOfStringsMatchingLastWord(var2, new String[]{"start", "stop"}) : null; + } +} diff --git a/src/net/minecraft/src/CommandDefaultGameMode.java b/src/net/minecraft/src/CommandDefaultGameMode.java new file mode 100644 index 0000000..74a8e92 --- /dev/null +++ b/src/net/minecraft/src/CommandDefaultGameMode.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class CommandDefaultGameMode extends CommandGameMode { + public String getCommandName() { + return "defaultgamemode"; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.defaultgamemode.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length > 0) { + EnumGameType var3 = this.getGameModeFromCommand(var1, var2[0]); + this.setGameType(var3); + String var4 = StatCollector.translateToLocal("gameMode." + var3.getName()); + notifyAdmins(var1, "commands.defaultgamemode.success", new Object[]{var4}); + } else { + throw new WrongUsageException("commands.defaultgamemode.usage", new Object[0]); + } + } + + protected void setGameType(EnumGameType var1) { + MinecraftServer.getServer().setGameType(var1); + } +} diff --git a/src/net/minecraft/src/CommandDifficulty.java b/src/net/minecraft/src/CommandDifficulty.java new file mode 100644 index 0000000..37e0e62 --- /dev/null +++ b/src/net/minecraft/src/CommandDifficulty.java @@ -0,0 +1,39 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandDifficulty extends CommandBase { + private static final String[] difficulties = new String[]{"options.difficulty.peaceful", "options.difficulty.easy", "options.difficulty.normal", "options.difficulty.hard"}; + + public String getCommandName() { + return "difficulty"; + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.difficulty.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length > 0) { + int var3 = this.getDifficultyForName(var1, var2[0]); + MinecraftServer.getServer().setDifficultyForAllWorlds(var3); + String var4 = StatCollector.translateToLocal(difficulties[var3]); + notifyAdmins(var1, "commands.difficulty.success", new Object[]{var4}); + } else { + throw new WrongUsageException("commands.difficulty.usage", new Object[0]); + } + } + + protected int getDifficultyForName(ICommandSender var1, String var2) { + return !var2.equalsIgnoreCase("peaceful") && !var2.equalsIgnoreCase("p") ? (!var2.equalsIgnoreCase("easy") && !var2.equalsIgnoreCase("e") ? (!var2.equalsIgnoreCase("normal") && !var2.equalsIgnoreCase("n") ? (!var2.equalsIgnoreCase("hard") && !var2.equalsIgnoreCase("h") ? parseIntBounded(var1, var2, 0, 3) : 3) : 2) : 1) : 0; + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 1 ? getListOfStringsMatchingLastWord(var2, new String[]{"peaceful", "easy", "normal", "hard"}) : null; + } +} diff --git a/src/net/minecraft/src/CommandEffect.java b/src/net/minecraft/src/CommandEffect.java new file mode 100644 index 0000000..4eb898b --- /dev/null +++ b/src/net/minecraft/src/CommandEffect.java @@ -0,0 +1,74 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandEffect extends CommandBase { + public String getCommandName() { + return "effect"; + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.effect.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length >= 2) { + EntityPlayerMP var3 = func_82359_c(var1, var2[0]); + int var4 = parseIntWithMin(var1, var2[1], 1); + int var5 = 600; + int var6 = 30; + int var7 = 0; + if(var4 >= 0 && var4 < Potion.potionTypes.length && Potion.potionTypes[var4] != null) { + if(var2.length >= 3) { + var6 = parseIntBounded(var1, var2[2], 0, 1000000); + if(Potion.potionTypes[var4].isInstant()) { + var5 = var6; + } else { + var5 = var6 * 20; + } + } else if(Potion.potionTypes[var4].isInstant()) { + var5 = 1; + } + + if(var2.length >= 4) { + var7 = parseIntBounded(var1, var2[3], 0, 255); + } + + if(var6 == 0) { + if(!var3.isPotionActive(var4)) { + throw new CommandException("commands.effect.failure.notActive", new Object[]{StatCollector.translateToLocal(Potion.potionTypes[var4].getName()), var3.getEntityName()}); + } + + var3.removePotionEffect(var4); + notifyAdmins(var1, "commands.effect.success.removed", new Object[]{StatCollector.translateToLocal(Potion.potionTypes[var4].getName()), var3.getEntityName()}); + } else { + PotionEffect var8 = new PotionEffect(var4, var5, var7); + var3.addPotionEffect(var8); + notifyAdmins(var1, "commands.effect.success", new Object[]{StatCollector.translateToLocal(var8.getEffectName()), Integer.valueOf(var4), Integer.valueOf(var7), var3.getEntityName(), Integer.valueOf(var6)}); + } + + } else { + throw new NumberInvalidException("commands.effect.notFound", new Object[]{Integer.valueOf(var4)}); + } + } else { + throw new WrongUsageException("commands.effect.usage", new Object[0]); + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 1 ? getListOfStringsMatchingLastWord(var2, this.getAllUsernames()) : null; + } + + protected String[] getAllUsernames() { + return MinecraftServer.getServer().getAllUsernames(); + } + + public boolean isUsernameIndex(String[] var1, int var2) { + return var2 == 0; + } +} diff --git a/src/net/minecraft/src/CommandEnchant.java b/src/net/minecraft/src/CommandEnchant.java new file mode 100644 index 0000000..90fec21 --- /dev/null +++ b/src/net/minecraft/src/CommandEnchant.java @@ -0,0 +1,74 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandEnchant extends CommandBase { + public String getCommandName() { + return "enchant"; + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.enchant.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length < 2) { + throw new WrongUsageException("commands.enchant.usage", new Object[0]); + } else { + EntityPlayerMP var3 = func_82359_c(var1, var2[0]); + int var4 = parseIntBounded(var1, var2[1], 0, Enchantment.enchantmentsList.length - 1); + int var5 = 1; + ItemStack var6 = var3.getCurrentEquippedItem(); + if(var6 == null) { + notifyAdmins(var1, "commands.enchant.noItem", new Object[0]); + } else { + Enchantment var7 = Enchantment.enchantmentsList[var4]; + if(var7 == null) { + throw new NumberInvalidException("commands.enchant.notFound", new Object[]{Integer.valueOf(var4)}); + } else if(!var7.canApply(var6)) { + notifyAdmins(var1, "commands.enchant.cantEnchant", new Object[0]); + } else { + if(var2.length >= 3) { + var5 = parseIntBounded(var1, var2[2], var7.getMinLevel(), var7.getMaxLevel()); + } + + if(var6.hasTagCompound()) { + NBTTagList var8 = var6.getEnchantmentTagList(); + if(var8 != null) { + for(int var9 = 0; var9 < var8.tagCount(); ++var9) { + short var10 = ((NBTTagCompound)var8.tagAt(var9)).getShort("id"); + if(Enchantment.enchantmentsList[var10] != null) { + Enchantment var11 = Enchantment.enchantmentsList[var10]; + if(!var11.canApplyTogether(var7)) { + notifyAdmins(var1, "commands.enchant.cantCombine", new Object[]{var7.getTranslatedName(var5), var11.getTranslatedName(((NBTTagCompound)var8.tagAt(var9)).getShort("lvl"))}); + return; + } + } + } + } + } + + var6.addEnchantment(var7, var5); + notifyAdmins(var1, "commands.enchant.success", new Object[0]); + } + } + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 1 ? getListOfStringsMatchingLastWord(var2, this.getListOfPlayers()) : null; + } + + protected String[] getListOfPlayers() { + return MinecraftServer.getServer().getAllUsernames(); + } + + public boolean isUsernameIndex(String[] var1, int var2) { + return var2 == 0; + } +} diff --git a/src/net/minecraft/src/CommandException.java b/src/net/minecraft/src/CommandException.java new file mode 100644 index 0000000..0d4294f --- /dev/null +++ b/src/net/minecraft/src/CommandException.java @@ -0,0 +1,14 @@ +package net.minecraft.src; + +public class CommandException extends RuntimeException { + private Object[] errorObjects; + + public CommandException(String var1, Object... var2) { + super(var1); + this.errorObjects = var2; + } + + public Object[] getErrorOjbects() { + return this.errorObjects; + } +} diff --git a/src/net/minecraft/src/CommandGameMode.java b/src/net/minecraft/src/CommandGameMode.java new file mode 100644 index 0000000..e7d7367 --- /dev/null +++ b/src/net/minecraft/src/CommandGameMode.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandGameMode extends CommandBase { + public String getCommandName() { + return "gamemode"; + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.gamemode.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length > 0) { + EnumGameType var3 = this.getGameModeFromCommand(var1, var2[0]); + EntityPlayerMP var4 = var2.length >= 2 ? func_82359_c(var1, var2[1]) : getCommandSenderAsPlayer(var1); + var4.setGameType(var3); + var4.fallDistance = 0.0F; + String var5 = StatCollector.translateToLocal("gameMode." + var3.getName()); + if(var4 != var1) { + notifyAdmins(var1, 1, "commands.gamemode.success.other", new Object[]{var4.getEntityName(), var5}); + } else { + notifyAdmins(var1, 1, "commands.gamemode.success.self", new Object[]{var5}); + } + + } else { + throw new WrongUsageException("commands.gamemode.usage", new Object[0]); + } + } + + protected EnumGameType getGameModeFromCommand(ICommandSender var1, String var2) { + return !var2.equalsIgnoreCase(EnumGameType.SURVIVAL.getName()) && !var2.equalsIgnoreCase("s") ? (!var2.equalsIgnoreCase(EnumGameType.CREATIVE.getName()) && !var2.equalsIgnoreCase("c") ? (!var2.equalsIgnoreCase(EnumGameType.ADVENTURE.getName()) && !var2.equalsIgnoreCase("a") ? WorldSettings.getGameTypeById(parseIntBounded(var1, var2, 0, EnumGameType.values().length - 2)) : EnumGameType.ADVENTURE) : EnumGameType.CREATIVE) : EnumGameType.SURVIVAL; + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 1 ? getListOfStringsMatchingLastWord(var2, new String[]{"survival", "creative", "adventure"}) : (var2.length == 2 ? getListOfStringsMatchingLastWord(var2, this.getListOfPlayerUsernames()) : null); + } + + protected String[] getListOfPlayerUsernames() { + return MinecraftServer.getServer().getAllUsernames(); + } + + public boolean isUsernameIndex(String[] var1, int var2) { + return var2 == 1; + } +} diff --git a/src/net/minecraft/src/CommandGameRule.java b/src/net/minecraft/src/CommandGameRule.java new file mode 100644 index 0000000..7a69bff --- /dev/null +++ b/src/net/minecraft/src/CommandGameRule.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandGameRule extends CommandBase { + public String getCommandName() { + return "gamerule"; + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.gamerule.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + String var6; + if(var2.length == 2) { + var6 = var2[0]; + String var7 = var2[1]; + GameRules var8 = this.getGameRules(); + if(var8.hasRule(var6)) { + var8.setOrCreateGameRule(var6, var7); + notifyAdmins(var1, "commands.gamerule.success", new Object[0]); + } else { + notifyAdmins(var1, "commands.gamerule.norule", new Object[]{var6}); + } + + } else if(var2.length == 1) { + var6 = var2[0]; + GameRules var4 = this.getGameRules(); + if(var4.hasRule(var6)) { + String var5 = var4.getGameRuleStringValue(var6); + var1.sendChatToPlayer(var6 + " = " + var5); + } else { + notifyAdmins(var1, "commands.gamerule.norule", new Object[]{var6}); + } + + } else if(var2.length == 0) { + GameRules var3 = this.getGameRules(); + var1.sendChatToPlayer(joinNiceString(var3.getRules())); + } else { + throw new WrongUsageException("commands.gamerule.usage", new Object[0]); + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 1 ? getListOfStringsMatchingLastWord(var2, this.getGameRules().getRules()) : (var2.length == 2 ? getListOfStringsMatchingLastWord(var2, new String[]{"true", "false"}) : null); + } + + private GameRules getGameRules() { + return MinecraftServer.getServer().worldServerForDimension(0).getGameRules(); + } +} diff --git a/src/net/minecraft/src/CommandGive.java b/src/net/minecraft/src/CommandGive.java new file mode 100644 index 0000000..d039362 --- /dev/null +++ b/src/net/minecraft/src/CommandGive.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandGive extends CommandBase { + public String getCommandName() { + return "give"; + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.give.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length >= 2) { + EntityPlayerMP var3 = func_82359_c(var1, var2[0]); + int var4 = parseIntWithMin(var1, var2[1], 1); + int var5 = 1; + int var6 = 0; + if(Item.itemsList[var4] == null) { + throw new NumberInvalidException("commands.give.notFound", new Object[]{Integer.valueOf(var4)}); + } else { + if(var2.length >= 3) { + var5 = parseIntBounded(var1, var2[2], 1, 64); + } + + if(var2.length >= 4) { + var6 = parseInt(var1, var2[3]); + } + + ItemStack var7 = new ItemStack(var4, var5, var6); + EntityItem var8 = var3.dropPlayerItem(var7); + var8.delayBeforeCanPickup = 0; + notifyAdmins(var1, "commands.give.success", new Object[]{Item.itemsList[var4].func_77653_i(var7), Integer.valueOf(var4), Integer.valueOf(var5), var3.getEntityName()}); + } + } else { + throw new WrongUsageException("commands.give.usage", new Object[0]); + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 1 ? getListOfStringsMatchingLastWord(var2, this.getPlayers()) : null; + } + + protected String[] getPlayers() { + return MinecraftServer.getServer().getAllUsernames(); + } + + public boolean isUsernameIndex(String[] var1, int var2) { + return var2 == 0; + } +} diff --git a/src/net/minecraft/src/CommandHandler.java b/src/net/minecraft/src/CommandHandler.java new file mode 100644 index 0000000..025d8f3 --- /dev/null +++ b/src/net/minecraft/src/CommandHandler.java @@ -0,0 +1,167 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; + +public class CommandHandler implements ICommandManager { + private final Map commandMap = new HashMap(); + private final Set commandSet = new HashSet(); + + public int executeCommand(ICommandSender var1, String var2) { + var2 = var2.trim(); + if(var2.startsWith("/")) { + var2 = var2.substring(1); + } + + String[] var3 = var2.split(" "); + String var4 = var3[0]; + var3 = dropFirstString(var3); + ICommand var5 = (ICommand)this.commandMap.get(var4); + int var6 = this.getUsernameIndex(var5, var3); + int var7 = 0; + + try { + if(var5 == null) { + throw new CommandNotFoundException(); + } + + if(var5.canCommandSenderUseCommand(var1)) { + if(var6 > -1) { + EntityPlayerMP[] var8 = PlayerSelector.matchPlayers(var1, var3[var6]); + String var9 = var3[var6]; + EntityPlayerMP[] var10 = var8; + int var11 = var8.length; + + for(int var12 = 0; var12 < var11; ++var12) { + EntityPlayerMP var13 = var10[var12]; + var3[var6] = var13.getEntityName(); + + try { + var5.processCommand(var1, var3); + ++var7; + } catch (CommandException var15) { + var1.sendChatToPlayer(EnumChatFormatting.RED + var1.translateString(var15.getMessage(), var15.getErrorOjbects())); + } + } + + var3[var6] = var9; + } else { + var5.processCommand(var1, var3); + ++var7; + } + } else { + var1.sendChatToPlayer("" + EnumChatFormatting.RED + "You do not have permission to use this command."); + } + } catch (WrongUsageException var16) { + var1.sendChatToPlayer(EnumChatFormatting.RED + var1.translateString("commands.generic.usage", new Object[]{var1.translateString(var16.getMessage(), var16.getErrorOjbects())})); + } catch (CommandException var17) { + var1.sendChatToPlayer(EnumChatFormatting.RED + var1.translateString(var17.getMessage(), var17.getErrorOjbects())); + } catch (Throwable var18) { + var1.sendChatToPlayer(EnumChatFormatting.RED + var1.translateString("commands.generic.exception", new Object[0])); + var18.printStackTrace(); + } + + return var7; + } + + public ICommand registerCommand(ICommand var1) { + List var2 = var1.getCommandAliases(); + this.commandMap.put(var1.getCommandName(), var1); + this.commandSet.add(var1); + if(var2 != null) { + Iterator var3 = var2.iterator(); + + while(true) { + String var4; + ICommand var5; + do { + if(!var3.hasNext()) { + return var1; + } + + var4 = (String)var3.next(); + var5 = (ICommand)this.commandMap.get(var4); + } while(var5 != null && var5.getCommandName().equals(var4)); + + this.commandMap.put(var4, var1); + } + } else { + return var1; + } + } + + private static String[] dropFirstString(String[] var0) { + String[] var1 = new String[var0.length - 1]; + + for(int var2 = 1; var2 < var0.length; ++var2) { + var1[var2 - 1] = var0[var2]; + } + + return var1; + } + + public List getPossibleCommands(ICommandSender var1, String var2) { + String[] var3 = var2.split(" ", -1); + String var4 = var3[0]; + if(var3.length == 1) { + ArrayList var8 = new ArrayList(); + Iterator var6 = this.commandMap.entrySet().iterator(); + + while(var6.hasNext()) { + Entry var7 = (Entry)var6.next(); + if(CommandBase.doesStringStartWith(var4, (String)var7.getKey()) && ((ICommand)var7.getValue()).canCommandSenderUseCommand(var1)) { + var8.add(var7.getKey()); + } + } + + return var8; + } else { + if(var3.length > 1) { + ICommand var5 = (ICommand)this.commandMap.get(var4); + if(var5 != null) { + return var5.addTabCompletionOptions(var1, dropFirstString(var3)); + } + } + + return null; + } + } + + public List getPossibleCommands(ICommandSender var1) { + ArrayList var2 = new ArrayList(); + Iterator var3 = this.commandSet.iterator(); + + while(var3.hasNext()) { + ICommand var4 = (ICommand)var3.next(); + if(var4.canCommandSenderUseCommand(var1)) { + var2.add(var4); + } + } + + return var2; + } + + public Map getCommands() { + return this.commandMap; + } + + private int getUsernameIndex(ICommand var1, String[] var2) { + if(var1 == null) { + return -1; + } else { + for(int var3 = 0; var3 < var2.length; ++var3) { + if(var1.isUsernameIndex(var2, var3) && PlayerSelector.matchesMultiplePlayers(var2[var3])) { + return var3; + } + } + + return -1; + } + } +} diff --git a/src/net/minecraft/src/CommandHelp.java b/src/net/minecraft/src/CommandHelp.java new file mode 100644 index 0000000..71b0c7d --- /dev/null +++ b/src/net/minecraft/src/CommandHelp.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import net.minecraft.server.MinecraftServer; + +public class CommandHelp extends CommandBase { + public String getCommandName() { + return "help"; + } + + public int getRequiredPermissionLevel() { + return 0; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.help.usage", new Object[0]); + } + + public List getCommandAliases() { + return Arrays.asList(new String[]{"?"}); + } + + public void processCommand(ICommandSender var1, String[] var2) { + List var3 = this.getSortedPossibleCommands(var1); + byte var4 = 7; + int var5 = (var3.size() - 1) / var4; + boolean var6 = false; + + ICommand var9; + int var11; + try { + var11 = var2.length == 0 ? 0 : parseIntBounded(var1, var2[0], 1, var5 + 1) - 1; + } catch (NumberInvalidException var10) { + Map var8 = this.getCommands(); + var9 = (ICommand)var8.get(var2[0]); + if(var9 != null) { + throw new WrongUsageException(var9.getCommandUsage(var1), new Object[0]); + } + + throw new CommandNotFoundException(); + } + + int var7 = Math.min((var11 + 1) * var4, var3.size()); + var1.sendChatToPlayer(EnumChatFormatting.DARK_GREEN + var1.translateString("commands.help.header", new Object[]{Integer.valueOf(var11 + 1), Integer.valueOf(var5 + 1)})); + + for(int var12 = var11 * var4; var12 < var7; ++var12) { + var9 = (ICommand)var3.get(var12); + var1.sendChatToPlayer(var9.getCommandUsage(var1)); + } + + if(var11 == 0 && var1 instanceof EntityPlayer) { + var1.sendChatToPlayer(EnumChatFormatting.GREEN + var1.translateString("commands.help.footer", new Object[0])); + } + + } + + protected List getSortedPossibleCommands(ICommandSender var1) { + List var2 = MinecraftServer.getServer().getCommandManager().getPossibleCommands(var1); + Collections.sort(var2); + return var2; + } + + protected Map getCommands() { + return MinecraftServer.getServer().getCommandManager().getCommands(); + } +} diff --git a/src/net/minecraft/src/CommandKill.java b/src/net/minecraft/src/CommandKill.java new file mode 100644 index 0000000..66641f8 --- /dev/null +++ b/src/net/minecraft/src/CommandKill.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class CommandKill extends CommandBase { + public String getCommandName() { + return "kill"; + } + + public int getRequiredPermissionLevel() { + return 0; + } + + public void processCommand(ICommandSender var1, String[] var2) { + EntityPlayerMP var3 = getCommandSenderAsPlayer(var1); + var3.attackEntityFrom(DamageSource.outOfWorld, 1000); + var1.sendChatToPlayer("Ouch. That looks like it hurt."); + } +} diff --git a/src/net/minecraft/src/CommandNotFoundException.java b/src/net/minecraft/src/CommandNotFoundException.java new file mode 100644 index 0000000..e6d6392 --- /dev/null +++ b/src/net/minecraft/src/CommandNotFoundException.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class CommandNotFoundException extends CommandException { + public CommandNotFoundException() { + this("commands.generic.notFound", new Object[0]); + } + + public CommandNotFoundException(String var1, Object... var2) { + super(var1, var2); + } +} diff --git a/src/net/minecraft/src/CommandServerBan.java b/src/net/minecraft/src/CommandServerBan.java new file mode 100644 index 0000000..c99d783 --- /dev/null +++ b/src/net/minecraft/src/CommandServerBan.java @@ -0,0 +1,46 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandServerBan extends CommandBase { + public String getCommandName() { + return "ban"; + } + + public int getRequiredPermissionLevel() { + return 3; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.ban.usage", new Object[0]); + } + + public boolean canCommandSenderUseCommand(ICommandSender var1) { + return MinecraftServer.getServer().getConfigurationManager().getBannedPlayers().isListActive() && super.canCommandSenderUseCommand(var1); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length >= 1 && var2[0].length() > 0) { + EntityPlayerMP var3 = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(var2[0]); + BanEntry var4 = new BanEntry(var2[0]); + var4.setBannedBy(var1.getCommandSenderName()); + if(var2.length >= 2) { + var4.setBanReason(func_82360_a(var1, var2, 1)); + } + + MinecraftServer.getServer().getConfigurationManager().getBannedPlayers().put(var4); + if(var3 != null) { + var3.playerNetServerHandler.kickPlayerFromServer("You are banned from this server."); + } + + notifyAdmins(var1, "commands.ban.success", new Object[]{var2[0]}); + } else { + throw new WrongUsageException("commands.ban.usage", new Object[0]); + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length >= 1 ? getListOfStringsMatchingLastWord(var2, MinecraftServer.getServer().getAllUsernames()) : null; + } +} diff --git a/src/net/minecraft/src/CommandServerBanIp.java b/src/net/minecraft/src/CommandServerBanIp.java new file mode 100644 index 0000000..174eb63 --- /dev/null +++ b/src/net/minecraft/src/CommandServerBanIp.java @@ -0,0 +1,81 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import net.minecraft.server.MinecraftServer; + +public class CommandServerBanIp extends CommandBase { + public static final Pattern IPv4Pattern = 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])$"); + + public String getCommandName() { + return "ban-ip"; + } + + public int getRequiredPermissionLevel() { + return 3; + } + + public boolean canCommandSenderUseCommand(ICommandSender var1) { + return MinecraftServer.getServer().getConfigurationManager().getBannedIPs().isListActive() && super.canCommandSenderUseCommand(var1); + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.banip.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length >= 1 && var2[0].length() > 1) { + Matcher var3 = IPv4Pattern.matcher(var2[0]); + String var4 = null; + if(var2.length >= 2) { + var4 = func_82360_a(var1, var2, 1); + } + + if(var3.matches()) { + this.banIP(var1, var2[0], var4); + } else { + EntityPlayerMP var5 = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(var2[0]); + if(var5 == null) { + throw new PlayerNotFoundException("commands.banip.invalid", new Object[0]); + } + + this.banIP(var1, var5.getPlayerIP(), var4); + } + + } else { + throw new WrongUsageException("commands.banip.usage", new Object[0]); + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 1 ? getListOfStringsMatchingLastWord(var2, MinecraftServer.getServer().getAllUsernames()) : null; + } + + protected void banIP(ICommandSender var1, String var2, String var3) { + BanEntry var4 = new BanEntry(var2); + var4.setBannedBy(var1.getCommandSenderName()); + if(var3 != null) { + var4.setBanReason(var3); + } + + MinecraftServer.getServer().getConfigurationManager().getBannedIPs().put(var4); + List var5 = MinecraftServer.getServer().getConfigurationManager().getPlayerList(var2); + String[] var6 = new String[var5.size()]; + int var7 = 0; + + EntityPlayerMP var9; + for(Iterator var8 = var5.iterator(); var8.hasNext(); var6[var7++] = var9.getEntityName()) { + var9 = (EntityPlayerMP)var8.next(); + var9.playerNetServerHandler.kickPlayerFromServer("You have been IP banned."); + } + + if(var5.isEmpty()) { + notifyAdmins(var1, "commands.banip.success", new Object[]{var2}); + } else { + notifyAdmins(var1, "commands.banip.success.players", new Object[]{var2, joinNiceString(var6)}); + } + + } +} diff --git a/src/net/minecraft/src/CommandServerBanlist.java b/src/net/minecraft/src/CommandServerBanlist.java new file mode 100644 index 0000000..f7ede66 --- /dev/null +++ b/src/net/minecraft/src/CommandServerBanlist.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandServerBanlist extends CommandBase { + public String getCommandName() { + return "banlist"; + } + + public int getRequiredPermissionLevel() { + return 3; + } + + public boolean canCommandSenderUseCommand(ICommandSender var1) { + return (MinecraftServer.getServer().getConfigurationManager().getBannedIPs().isListActive() || MinecraftServer.getServer().getConfigurationManager().getBannedPlayers().isListActive()) && super.canCommandSenderUseCommand(var1); + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.banlist.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length >= 1 && var2[0].equalsIgnoreCase("ips")) { + var1.sendChatToPlayer(var1.translateString("commands.banlist.ips", new Object[]{Integer.valueOf(MinecraftServer.getServer().getConfigurationManager().getBannedIPs().getBannedList().size())})); + var1.sendChatToPlayer(joinNiceString(MinecraftServer.getServer().getConfigurationManager().getBannedIPs().getBannedList().keySet().toArray())); + } else { + var1.sendChatToPlayer(var1.translateString("commands.banlist.players", new Object[]{Integer.valueOf(MinecraftServer.getServer().getConfigurationManager().getBannedPlayers().getBannedList().size())})); + var1.sendChatToPlayer(joinNiceString(MinecraftServer.getServer().getConfigurationManager().getBannedPlayers().getBannedList().keySet().toArray())); + } + + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 1 ? getListOfStringsMatchingLastWord(var2, new String[]{"players", "ips"}) : null; + } +} diff --git a/src/net/minecraft/src/CommandServerDeop.java b/src/net/minecraft/src/CommandServerDeop.java new file mode 100644 index 0000000..f32e149 --- /dev/null +++ b/src/net/minecraft/src/CommandServerDeop.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandServerDeop extends CommandBase { + public String getCommandName() { + return "deop"; + } + + public int getRequiredPermissionLevel() { + return 3; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.deop.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length == 1 && var2[0].length() > 0) { + MinecraftServer.getServer().getConfigurationManager().removeOp(var2[0]); + notifyAdmins(var1, "commands.deop.success", new Object[]{var2[0]}); + } else { + throw new WrongUsageException("commands.deop.usage", new Object[0]); + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 1 ? getListOfStringsFromIterableMatchingLastWord(var2, MinecraftServer.getServer().getConfigurationManager().getOps()) : null; + } +} diff --git a/src/net/minecraft/src/CommandServerEmote.java b/src/net/minecraft/src/CommandServerEmote.java new file mode 100644 index 0000000..6a52388 --- /dev/null +++ b/src/net/minecraft/src/CommandServerEmote.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandServerEmote extends CommandBase { + public String getCommandName() { + return "me"; + } + + public int getRequiredPermissionLevel() { + return 0; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.me.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length > 0) { + String var3 = func_82361_a(var1, var2, 0, var1.canCommandSenderUseCommand(1, "me")); + MinecraftServer.getServer().getConfigurationManager().sendPacketToAllPlayers(new Packet3Chat("* " + var1.getCommandSenderName() + " " + var3)); + } else { + throw new WrongUsageException("commands.me.usage", new Object[0]); + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return getListOfStringsMatchingLastWord(var2, MinecraftServer.getServer().getAllUsernames()); + } +} diff --git a/src/net/minecraft/src/CommandServerKick.java b/src/net/minecraft/src/CommandServerKick.java new file mode 100644 index 0000000..a37ed77 --- /dev/null +++ b/src/net/minecraft/src/CommandServerKick.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandServerKick extends CommandBase { + public String getCommandName() { + return "kick"; + } + + public int getRequiredPermissionLevel() { + return 3; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.kick.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length > 0 && var2[0].length() > 1) { + EntityPlayerMP var3 = MinecraftServer.getServer().getConfigurationManager().getPlayerForUsername(var2[0]); + String var4 = "Kicked by an operator."; + boolean var5 = false; + if(var3 == null) { + throw new PlayerNotFoundException(); + } else { + if(var2.length >= 2) { + var4 = func_82360_a(var1, var2, 1); + var5 = true; + } + + var3.playerNetServerHandler.kickPlayerFromServer(var4); + if(var5) { + notifyAdmins(var1, "commands.kick.success.reason", new Object[]{var3.getEntityName(), var4}); + } else { + notifyAdmins(var1, "commands.kick.success", new Object[]{var3.getEntityName()}); + } + + } + } else { + throw new WrongUsageException("commands.kick.usage", new Object[0]); + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length >= 1 ? getListOfStringsMatchingLastWord(var2, MinecraftServer.getServer().getAllUsernames()) : null; + } +} diff --git a/src/net/minecraft/src/CommandServerList.java b/src/net/minecraft/src/CommandServerList.java new file mode 100644 index 0000000..c7ccb46 --- /dev/null +++ b/src/net/minecraft/src/CommandServerList.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class CommandServerList extends CommandBase { + public String getCommandName() { + return "list"; + } + + public int getRequiredPermissionLevel() { + return 0; + } + + public void processCommand(ICommandSender var1, String[] var2) { + var1.sendChatToPlayer(var1.translateString("commands.players.list", new Object[]{Integer.valueOf(MinecraftServer.getServer().getCurrentPlayerCount()), Integer.valueOf(MinecraftServer.getServer().getMaxPlayers())})); + var1.sendChatToPlayer(MinecraftServer.getServer().getConfigurationManager().getPlayerListAsString()); + } +} diff --git a/src/net/minecraft/src/CommandServerMessage.java b/src/net/minecraft/src/CommandServerMessage.java new file mode 100644 index 0000000..ed821f4 --- /dev/null +++ b/src/net/minecraft/src/CommandServerMessage.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import java.util.Arrays; +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandServerMessage extends CommandBase { + public List getCommandAliases() { + return Arrays.asList(new String[]{"w", "msg"}); + } + + public String getCommandName() { + return "tell"; + } + + public int getRequiredPermissionLevel() { + return 0; + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length < 2) { + throw new WrongUsageException("commands.message.usage", new Object[0]); + } else { + EntityPlayerMP var3 = func_82359_c(var1, var2[0]); + if(var3 == null) { + throw new PlayerNotFoundException(); + } else if(var3 == var1) { + throw new PlayerNotFoundException("commands.message.sameTarget", new Object[0]); + } else { + String var4 = func_82361_a(var1, var2, 1, !(var1 instanceof EntityPlayer)); + var3.sendChatToPlayer(EnumChatFormatting.GRAY + "" + EnumChatFormatting.ITALIC + var3.translateString("commands.message.display.incoming", new Object[]{var1.getCommandSenderName(), var4})); + var1.sendChatToPlayer(EnumChatFormatting.GRAY + "" + EnumChatFormatting.ITALIC + var1.translateString("commands.message.display.outgoing", new Object[]{var3.getCommandSenderName(), var4})); + } + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return getListOfStringsMatchingLastWord(var2, MinecraftServer.getServer().getAllUsernames()); + } + + public boolean isUsernameIndex(String[] var1, int var2) { + return var2 == 0; + } +} diff --git a/src/net/minecraft/src/CommandServerOp.java b/src/net/minecraft/src/CommandServerOp.java new file mode 100644 index 0000000..75f1564 --- /dev/null +++ b/src/net/minecraft/src/CommandServerOp.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandServerOp extends CommandBase { + public String getCommandName() { + return "op"; + } + + public int getRequiredPermissionLevel() { + return 3; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.op.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length == 1 && var2[0].length() > 0) { + MinecraftServer.getServer().getConfigurationManager().addOp(var2[0]); + notifyAdmins(var1, "commands.op.success", new Object[]{var2[0]}); + } else { + throw new WrongUsageException("commands.op.usage", new Object[0]); + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + if(var2.length == 1) { + String var3 = var2[var2.length - 1]; + ArrayList var4 = new ArrayList(); + String[] var5 = MinecraftServer.getServer().getAllUsernames(); + int var6 = var5.length; + + for(int var7 = 0; var7 < var6; ++var7) { + String var8 = var5[var7]; + if(!MinecraftServer.getServer().getConfigurationManager().areCommandsAllowed(var8) && doesStringStartWith(var3, var8)) { + var4.add(var8); + } + } + + return var4; + } else { + return null; + } + } +} diff --git a/src/net/minecraft/src/CommandServerPardon.java b/src/net/minecraft/src/CommandServerPardon.java new file mode 100644 index 0000000..8075ecb --- /dev/null +++ b/src/net/minecraft/src/CommandServerPardon.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandServerPardon extends CommandBase { + public String getCommandName() { + return "pardon"; + } + + public int getRequiredPermissionLevel() { + return 3; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.unban.usage", new Object[0]); + } + + public boolean canCommandSenderUseCommand(ICommandSender var1) { + return MinecraftServer.getServer().getConfigurationManager().getBannedPlayers().isListActive() && super.canCommandSenderUseCommand(var1); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length == 1 && var2[0].length() > 0) { + MinecraftServer.getServer().getConfigurationManager().getBannedPlayers().remove(var2[0]); + notifyAdmins(var1, "commands.unban.success", new Object[]{var2[0]}); + } else { + throw new WrongUsageException("commands.unban.usage", new Object[0]); + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 1 ? getListOfStringsFromIterableMatchingLastWord(var2, MinecraftServer.getServer().getConfigurationManager().getBannedPlayers().getBannedList().keySet()) : null; + } +} diff --git a/src/net/minecraft/src/CommandServerPardonIp.java b/src/net/minecraft/src/CommandServerPardonIp.java new file mode 100644 index 0000000..453fd73 --- /dev/null +++ b/src/net/minecraft/src/CommandServerPardonIp.java @@ -0,0 +1,41 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.regex.Matcher; +import net.minecraft.server.MinecraftServer; + +public class CommandServerPardonIp extends CommandBase { + public String getCommandName() { + return "pardon-ip"; + } + + public int getRequiredPermissionLevel() { + return 3; + } + + public boolean canCommandSenderUseCommand(ICommandSender var1) { + return MinecraftServer.getServer().getConfigurationManager().getBannedIPs().isListActive() && super.canCommandSenderUseCommand(var1); + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.unbanip.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length == 1 && var2[0].length() > 1) { + Matcher var3 = CommandServerBanIp.IPv4Pattern.matcher(var2[0]); + if(var3.matches()) { + MinecraftServer.getServer().getConfigurationManager().getBannedIPs().remove(var2[0]); + notifyAdmins(var1, "commands.unbanip.success", new Object[]{var2[0]}); + } else { + throw new SyntaxErrorException("commands.unbanip.invalid", new Object[0]); + } + } else { + throw new WrongUsageException("commands.unbanip.usage", new Object[0]); + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 1 ? getListOfStringsFromIterableMatchingLastWord(var2, MinecraftServer.getServer().getConfigurationManager().getBannedIPs().getBannedList().keySet()) : null; + } +} diff --git a/src/net/minecraft/src/CommandServerPublishLocal.java b/src/net/minecraft/src/CommandServerPublishLocal.java new file mode 100644 index 0000000..a8e32a5 --- /dev/null +++ b/src/net/minecraft/src/CommandServerPublishLocal.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class CommandServerPublishLocal extends CommandBase { + public String getCommandName() { + return "publish"; + } + + public int getRequiredPermissionLevel() { + return 4; + } + + public void processCommand(ICommandSender var1, String[] var2) { + String var3 = MinecraftServer.getServer().shareToLAN(EnumGameType.SURVIVAL, false); + if(var3 != null) { + notifyAdmins(var1, "commands.publish.started", new Object[]{var3}); + } else { + notifyAdmins(var1, "commands.publish.failed", new Object[0]); + } + + } +} diff --git a/src/net/minecraft/src/CommandServerSaveAll.java b/src/net/minecraft/src/CommandServerSaveAll.java new file mode 100644 index 0000000..77f1053 --- /dev/null +++ b/src/net/minecraft/src/CommandServerSaveAll.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class CommandServerSaveAll extends CommandBase { + public String getCommandName() { + return "save-all"; + } + + public int getRequiredPermissionLevel() { + return 4; + } + + public void processCommand(ICommandSender var1, String[] var2) { + MinecraftServer var3 = MinecraftServer.getServer(); + var1.sendChatToPlayer(var1.translateString("commands.save.start", new Object[0])); + if(var3.getConfigurationManager() != null) { + var3.getConfigurationManager().saveAllPlayerData(); + } + + try { + int var4; + WorldServer var5; + boolean var6; + for(var4 = 0; var4 < var3.worldServers.length; ++var4) { + if(var3.worldServers[var4] != null) { + var5 = var3.worldServers[var4]; + var6 = var5.canNotSave; + var5.canNotSave = false; + var5.saveAllChunks(true, (IProgressUpdate)null); + var5.canNotSave = var6; + } + } + + if(var2.length > 0 && "flush".equals(var2[0])) { + var1.sendChatToPlayer(var1.translateString("commands.save.flushStart", new Object[0])); + + for(var4 = 0; var4 < var3.worldServers.length; ++var4) { + if(var3.worldServers[var4] != null) { + var5 = var3.worldServers[var4]; + var6 = var5.canNotSave; + var5.canNotSave = false; + var5.func_104140_m(); + var5.canNotSave = var6; + } + } + + var1.sendChatToPlayer(var1.translateString("commands.save.flushEnd", new Object[0])); + } + } catch (MinecraftException var7) { + notifyAdmins(var1, "commands.save.failed", new Object[]{var7.getMessage()}); + return; + } + + notifyAdmins(var1, "commands.save.success", new Object[0]); + } +} diff --git a/src/net/minecraft/src/CommandServerSaveOff.java b/src/net/minecraft/src/CommandServerSaveOff.java new file mode 100644 index 0000000..2cec0f4 --- /dev/null +++ b/src/net/minecraft/src/CommandServerSaveOff.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class CommandServerSaveOff extends CommandBase { + public String getCommandName() { + return "save-off"; + } + + public int getRequiredPermissionLevel() { + return 4; + } + + public void processCommand(ICommandSender var1, String[] var2) { + MinecraftServer var3 = MinecraftServer.getServer(); + + for(int var4 = 0; var4 < var3.worldServers.length; ++var4) { + if(var3.worldServers[var4] != null) { + WorldServer var5 = var3.worldServers[var4]; + var5.canNotSave = true; + } + } + + notifyAdmins(var1, "commands.save.disabled", new Object[0]); + } +} diff --git a/src/net/minecraft/src/CommandServerSaveOn.java b/src/net/minecraft/src/CommandServerSaveOn.java new file mode 100644 index 0000000..846afc8 --- /dev/null +++ b/src/net/minecraft/src/CommandServerSaveOn.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class CommandServerSaveOn extends CommandBase { + public String getCommandName() { + return "save-on"; + } + + public int getRequiredPermissionLevel() { + return 4; + } + + public void processCommand(ICommandSender var1, String[] var2) { + MinecraftServer var3 = MinecraftServer.getServer(); + + for(int var4 = 0; var4 < var3.worldServers.length; ++var4) { + if(var3.worldServers[var4] != null) { + WorldServer var5 = var3.worldServers[var4]; + var5.canNotSave = false; + } + } + + notifyAdmins(var1, "commands.save.enabled", new Object[0]); + } +} diff --git a/src/net/minecraft/src/CommandServerSay.java b/src/net/minecraft/src/CommandServerSay.java new file mode 100644 index 0000000..732a257 --- /dev/null +++ b/src/net/minecraft/src/CommandServerSay.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandServerSay extends CommandBase { + public String getCommandName() { + return "say"; + } + + public int getRequiredPermissionLevel() { + return 1; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.say.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length > 0 && var2[0].length() > 0) { + String var3 = func_82361_a(var1, var2, 0, true); + MinecraftServer.getServer().getConfigurationManager().sendChatMsg(String.format("[%s] %s", new Object[]{var1.getCommandSenderName(), var3})); + } else { + throw new WrongUsageException("commands.say.usage", new Object[0]); + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length >= 1 ? getListOfStringsMatchingLastWord(var2, MinecraftServer.getServer().getAllUsernames()) : null; + } +} diff --git a/src/net/minecraft/src/CommandServerStop.java b/src/net/minecraft/src/CommandServerStop.java new file mode 100644 index 0000000..b205670 --- /dev/null +++ b/src/net/minecraft/src/CommandServerStop.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class CommandServerStop extends CommandBase { + public String getCommandName() { + return "stop"; + } + + public int getRequiredPermissionLevel() { + return 4; + } + + public void processCommand(ICommandSender var1, String[] var2) { + notifyAdmins(var1, "commands.stop.start", new Object[0]); + MinecraftServer.getServer().initiateShutdown(); + } +} diff --git a/src/net/minecraft/src/CommandServerTp.java b/src/net/minecraft/src/CommandServerTp.java new file mode 100644 index 0000000..06521c6 --- /dev/null +++ b/src/net/minecraft/src/CommandServerTp.java @@ -0,0 +1,101 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandServerTp extends CommandBase { + public String getCommandName() { + return "tp"; + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.tp.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length < 1) { + throw new WrongUsageException("commands.tp.usage", new Object[0]); + } else { + EntityPlayerMP var3; + if(var2.length != 2 && var2.length != 4) { + var3 = getCommandSenderAsPlayer(var1); + } else { + var3 = func_82359_c(var1, var2[0]); + if(var3 == null) { + throw new PlayerNotFoundException(); + } + } + + if(var2.length != 3 && var2.length != 4) { + if(var2.length == 1 || var2.length == 2) { + EntityPlayerMP var11 = func_82359_c(var1, var2[var2.length - 1]); + if(var11 == null) { + throw new PlayerNotFoundException(); + } + + if(var11.worldObj != var3.worldObj) { + notifyAdmins(var1, "commands.tp.notSameDimension", new Object[0]); + return; + } + + var3.mountEntity((Entity)null); + var3.playerNetServerHandler.setPlayerLocation(var11.posX, var11.posY, var11.posZ, var11.rotationYaw, var11.rotationPitch); + notifyAdmins(var1, "commands.tp.success", new Object[]{var3.getEntityName(), var11.getEntityName()}); + } + } else if(var3.worldObj != null) { + int var4 = var2.length - 3; + double var5 = this.func_82368_a(var1, var3.posX, var2[var4++]); + double var7 = this.func_82367_a(var1, var3.posY, var2[var4++], 0, 0); + double var9 = this.func_82368_a(var1, var3.posZ, var2[var4++]); + var3.mountEntity((Entity)null); + var3.setPositionAndUpdate(var5, var7, var9); + notifyAdmins(var1, "commands.tp.success.coordinates", new Object[]{var3.getEntityName(), Double.valueOf(var5), Double.valueOf(var7), Double.valueOf(var9)}); + } + + } + } + + private double func_82368_a(ICommandSender var1, double var2, String var4) { + return this.func_82367_a(var1, var2, var4, -30000000, 30000000); + } + + private double func_82367_a(ICommandSender var1, double var2, String var4, int var5, int var6) { + boolean var7 = var4.startsWith("~"); + double var8 = var7 ? var2 : 0.0D; + if(!var7 || var4.length() > 1) { + boolean var10 = var4.contains("."); + if(var7) { + var4 = var4.substring(1); + } + + var8 += parseDouble(var1, var4); + if(!var10 && !var7) { + var8 += 0.5D; + } + } + + if(var5 != 0 || var6 != 0) { + if(var8 < (double)var5) { + throw new NumberInvalidException("commands.generic.double.tooSmall", new Object[]{Double.valueOf(var8), Integer.valueOf(var5)}); + } + + if(var8 > (double)var6) { + throw new NumberInvalidException("commands.generic.double.tooBig", new Object[]{Double.valueOf(var8), Integer.valueOf(var6)}); + } + } + + return var8; + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length != 1 && var2.length != 2 ? null : getListOfStringsMatchingLastWord(var2, MinecraftServer.getServer().getAllUsernames()); + } + + public boolean isUsernameIndex(String[] var1, int var2) { + return var2 == 0; + } +} diff --git a/src/net/minecraft/src/CommandServerWhitelist.java b/src/net/minecraft/src/CommandServerWhitelist.java new file mode 100644 index 0000000..f618fba --- /dev/null +++ b/src/net/minecraft/src/CommandServerWhitelist.java @@ -0,0 +1,100 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandServerWhitelist extends CommandBase { + public String getCommandName() { + return "whitelist"; + } + + public int getRequiredPermissionLevel() { + return 3; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.whitelist.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length >= 1) { + if(var2[0].equals("on")) { + MinecraftServer.getServer().getConfigurationManager().setWhiteListEnabled(true); + notifyAdmins(var1, "commands.whitelist.enabled", new Object[0]); + return; + } + + if(var2[0].equals("off")) { + MinecraftServer.getServer().getConfigurationManager().setWhiteListEnabled(false); + notifyAdmins(var1, "commands.whitelist.disabled", new Object[0]); + return; + } + + if(var2[0].equals("list")) { + var1.sendChatToPlayer(var1.translateString("commands.whitelist.list", new Object[]{Integer.valueOf(MinecraftServer.getServer().getConfigurationManager().getWhiteListedPlayers().size()), Integer.valueOf(MinecraftServer.getServer().getConfigurationManager().getAvailablePlayerDat().length)})); + var1.sendChatToPlayer(joinNiceString(MinecraftServer.getServer().getConfigurationManager().getWhiteListedPlayers().toArray(new String[0]))); + return; + } + + if(var2[0].equals("add")) { + if(var2.length < 2) { + throw new WrongUsageException("commands.whitelist.add.usage", new Object[0]); + } + + MinecraftServer.getServer().getConfigurationManager().addToWhiteList(var2[1]); + notifyAdmins(var1, "commands.whitelist.add.success", new Object[]{var2[1]}); + return; + } + + if(var2[0].equals("remove")) { + if(var2.length < 2) { + throw new WrongUsageException("commands.whitelist.remove.usage", new Object[0]); + } + + MinecraftServer.getServer().getConfigurationManager().removeFromWhitelist(var2[1]); + notifyAdmins(var1, "commands.whitelist.remove.success", new Object[]{var2[1]}); + return; + } + + if(var2[0].equals("reload")) { + MinecraftServer.getServer().getConfigurationManager().loadWhiteList(); + notifyAdmins(var1, "commands.whitelist.reloaded", new Object[0]); + return; + } + } + + throw new WrongUsageException("commands.whitelist.usage", new Object[0]); + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + if(var2.length == 1) { + return getListOfStringsMatchingLastWord(var2, new String[]{"on", "off", "list", "add", "remove", "reload"}); + } else { + if(var2.length == 2) { + if(var2[0].equals("add")) { + String[] var3 = MinecraftServer.getServer().getConfigurationManager().getAvailablePlayerDat(); + ArrayList var4 = new ArrayList(); + String var5 = var2[var2.length - 1]; + String[] var6 = var3; + int var7 = var3.length; + + for(int var8 = 0; var8 < var7; ++var8) { + String var9 = var6[var8]; + if(doesStringStartWith(var5, var9) && !MinecraftServer.getServer().getConfigurationManager().getWhiteListedPlayers().contains(var9)) { + var4.add(var9); + } + } + + return var4; + } + + if(var2[0].equals("remove")) { + return getListOfStringsFromIterableMatchingLastWord(var2, MinecraftServer.getServer().getConfigurationManager().getWhiteListedPlayers()); + } + } + + return null; + } + } +} diff --git a/src/net/minecraft/src/CommandSetSpawnpoint.java b/src/net/minecraft/src/CommandSetSpawnpoint.java new file mode 100644 index 0000000..3ec12a7 --- /dev/null +++ b/src/net/minecraft/src/CommandSetSpawnpoint.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandSetSpawnpoint extends CommandBase { + public String getCommandName() { + return "spawnpoint"; + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.spawnpoint.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + EntityPlayerMP var3 = var2.length == 0 ? getCommandSenderAsPlayer(var1) : func_82359_c(var1, var2[0]); + if(var2.length == 4) { + if(var3.worldObj != null) { + byte var4 = 1; + int var5 = 30000000; + int var9 = var4 + 1; + int var6 = parseIntBounded(var1, var2[var4], -var5, var5); + int var7 = parseIntBounded(var1, var2[var9++], 0, 256); + int var8 = parseIntBounded(var1, var2[var9++], -var5, var5); + var3.setSpawnChunk(new ChunkCoordinates(var6, var7, var8), true); + notifyAdmins(var1, "commands.spawnpoint.success", new Object[]{var3.getEntityName(), Integer.valueOf(var6), Integer.valueOf(var7), Integer.valueOf(var8)}); + } + } else { + if(var2.length > 1) { + throw new WrongUsageException("commands.spawnpoint.usage", new Object[0]); + } + + ChunkCoordinates var10 = var3.getPlayerCoordinates(); + var3.setSpawnChunk(var10, true); + notifyAdmins(var1, "commands.spawnpoint.success", new Object[]{var3.getEntityName(), Integer.valueOf(var10.posX), Integer.valueOf(var10.posY), Integer.valueOf(var10.posZ)}); + } + + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length != 1 && var2.length != 2 ? null : getListOfStringsMatchingLastWord(var2, MinecraftServer.getServer().getAllUsernames()); + } + + public boolean isUsernameIndex(String[] var1, int var2) { + return var2 == 0; + } +} diff --git a/src/net/minecraft/src/CommandShowSeed.java b/src/net/minecraft/src/CommandShowSeed.java new file mode 100644 index 0000000..06b732d --- /dev/null +++ b/src/net/minecraft/src/CommandShowSeed.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class CommandShowSeed extends CommandBase { + public boolean canCommandSenderUseCommand(ICommandSender var1) { + return MinecraftServer.getServer().isSinglePlayer() || super.canCommandSenderUseCommand(var1); + } + + public String getCommandName() { + return "seed"; + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public void processCommand(ICommandSender var1, String[] var2) { + Object var3 = var1 instanceof EntityPlayer ? ((EntityPlayer)var1).worldObj : MinecraftServer.getServer().worldServerForDimension(0); + var1.sendChatToPlayer("Seed: " + ((World)var3).getSeed()); + } +} diff --git a/src/net/minecraft/src/CommandTime.java b/src/net/minecraft/src/CommandTime.java new file mode 100644 index 0000000..e065467 --- /dev/null +++ b/src/net/minecraft/src/CommandTime.java @@ -0,0 +1,65 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandTime extends CommandBase { + public String getCommandName() { + return "time"; + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.time.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length > 1) { + int var3; + if(var2[0].equals("set")) { + if(var2[1].equals("day")) { + var3 = 0; + } else if(var2[1].equals("night")) { + var3 = 12500; + } else { + var3 = parseIntWithMin(var1, var2[1], 0); + } + + this.setTime(var1, var3); + notifyAdmins(var1, "commands.time.set", new Object[]{Integer.valueOf(var3)}); + return; + } + + if(var2[0].equals("add")) { + var3 = parseIntWithMin(var1, var2[1], 0); + this.addTime(var1, var3); + notifyAdmins(var1, "commands.time.added", new Object[]{Integer.valueOf(var3)}); + return; + } + } + + throw new WrongUsageException("commands.time.usage", new Object[0]); + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 1 ? getListOfStringsMatchingLastWord(var2, new String[]{"set", "add"}) : (var2.length == 2 && var2[0].equals("set") ? getListOfStringsMatchingLastWord(var2, new String[]{"day", "night"}) : null); + } + + protected void setTime(ICommandSender var1, int var2) { + for(int var3 = 0; var3 < MinecraftServer.getServer().worldServers.length; ++var3) { + MinecraftServer.getServer().worldServers[var3].setWorldTime((long)var2); + } + + } + + protected void addTime(ICommandSender var1, int var2) { + for(int var3 = 0; var3 < MinecraftServer.getServer().worldServers.length; ++var3) { + WorldServer var4 = MinecraftServer.getServer().worldServers[var3]; + var4.setWorldTime(var4.getWorldTime() + (long)var2); + } + + } +} diff --git a/src/net/minecraft/src/CommandToggleDownfall.java b/src/net/minecraft/src/CommandToggleDownfall.java new file mode 100644 index 0000000..f354ee9 --- /dev/null +++ b/src/net/minecraft/src/CommandToggleDownfall.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class CommandToggleDownfall extends CommandBase { + public String getCommandName() { + return "toggledownfall"; + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public void processCommand(ICommandSender var1, String[] var2) { + this.toggleDownfall(); + notifyAdmins(var1, "commands.downfall.success", new Object[0]); + } + + protected void toggleDownfall() { + MinecraftServer.getServer().worldServers[0].toggleRain(); + MinecraftServer.getServer().worldServers[0].getWorldInfo().setThundering(true); + } +} diff --git a/src/net/minecraft/src/CommandWeather.java b/src/net/minecraft/src/CommandWeather.java new file mode 100644 index 0000000..2c89b61 --- /dev/null +++ b/src/net/minecraft/src/CommandWeather.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; +import net.minecraft.server.MinecraftServer; + +public class CommandWeather extends CommandBase { + public String getCommandName() { + return "weather"; + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length < 1) { + throw new WrongUsageException("commands.weather.usage", new Object[0]); + } else { + int var3 = (300 + (new Random()).nextInt(600)) * 20; + if(var2.length >= 2) { + var3 = parseIntBounded(var1, var2[1], 1, 1000000) * 20; + } + + WorldServer var4 = MinecraftServer.getServer().worldServers[0]; + WorldInfo var5 = var4.getWorldInfo(); + var5.setRainTime(var3); + var5.setThunderTime(var3); + if("clear".equalsIgnoreCase(var2[0])) { + var5.setRaining(false); + var5.setThundering(false); + notifyAdmins(var1, "commands.weather.clear", new Object[0]); + } else if("rain".equalsIgnoreCase(var2[0])) { + var5.setRaining(true); + var5.setThundering(false); + notifyAdmins(var1, "commands.weather.rain", new Object[0]); + } else if("thunder".equalsIgnoreCase(var2[0])) { + var5.setRaining(true); + var5.setThundering(true); + notifyAdmins(var1, "commands.weather.thunder", new Object[0]); + } + + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 1 ? getListOfStringsMatchingLastWord(var2, new String[]{"clear", "rain", "thunder"}) : null; + } +} diff --git a/src/net/minecraft/src/CommandXP.java b/src/net/minecraft/src/CommandXP.java new file mode 100644 index 0000000..c32fddc --- /dev/null +++ b/src/net/minecraft/src/CommandXP.java @@ -0,0 +1,73 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class CommandXP extends CommandBase { + public String getCommandName() { + return "xp"; + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public String getCommandUsage(ICommandSender var1) { + return var1.translateString("commands.xp.usage", new Object[0]); + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length <= 0) { + throw new WrongUsageException("commands.xp.usage", new Object[0]); + } else { + String var4 = var2[0]; + boolean var5 = var4.endsWith("l") || var4.endsWith("L"); + if(var5 && var4.length() > 1) { + var4 = var4.substring(0, var4.length() - 1); + } + + int var6 = parseInt(var1, var4); + boolean var7 = var6 < 0; + if(var7) { + var6 *= -1; + } + + EntityPlayerMP var3; + if(var2.length > 1) { + var3 = func_82359_c(var1, var2[1]); + } else { + var3 = getCommandSenderAsPlayer(var1); + } + + if(var5) { + if(var7) { + var3.addExperienceLevel(-var6); + notifyAdmins(var1, "commands.xp.success.negative.levels", new Object[]{Integer.valueOf(var6), var3.getEntityName()}); + } else { + var3.addExperienceLevel(var6); + notifyAdmins(var1, "commands.xp.success.levels", new Object[]{Integer.valueOf(var6), var3.getEntityName()}); + } + } else { + if(var7) { + throw new WrongUsageException("commands.xp.failure.widthdrawXp", new Object[0]); + } + + var3.addExperience(var6); + notifyAdmins(var1, "commands.xp.success", new Object[]{Integer.valueOf(var6), var3.getEntityName()}); + } + + } + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + return var2.length == 2 ? getListOfStringsMatchingLastWord(var2, this.getAllUsernames()) : null; + } + + protected String[] getAllUsernames() { + return MinecraftServer.getServer().getAllUsernames(); + } + + public boolean isUsernameIndex(String[] var1, int var2) { + return var2 == 1; + } +} diff --git a/src/net/minecraft/src/ComparatorClassSorter.java b/src/net/minecraft/src/ComparatorClassSorter.java new file mode 100644 index 0000000..3b5459f --- /dev/null +++ b/src/net/minecraft/src/ComparatorClassSorter.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.Comparator; + +class ComparatorClassSorter implements Comparator { + final CallableSuspiciousClasses theSuspiciousClasses; + + ComparatorClassSorter(CallableSuspiciousClasses var1) { + this.theSuspiciousClasses = var1; + } + + public int func_85081_a(Class var1, Class var2) { + String var3 = var1.getPackage() == null ? "" : var1.getPackage().getName(); + String var4 = var2.getPackage() == null ? "" : var2.getPackage().getName(); + return var3.compareTo(var4); + } + + public int compare(Object var1, Object var2) { + return this.func_85081_a((Class)var1, (Class)var2); + } +} diff --git a/src/net/minecraft/src/ComponentMineshaftCorridor.java b/src/net/minecraft/src/ComponentMineshaftCorridor.java new file mode 100644 index 0000000..f645036 --- /dev/null +++ b/src/net/minecraft/src/ComponentMineshaftCorridor.java @@ -0,0 +1,220 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentMineshaftCorridor extends StructureComponent { + private final boolean hasRails; + private final boolean hasSpiders; + private boolean spawnerPlaced; + private int sectionCount; + + public ComponentMineshaftCorridor(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + this.hasRails = var2.nextInt(3) == 0; + this.hasSpiders = !this.hasRails && var2.nextInt(23) == 0; + if(this.coordBaseMode != 2 && this.coordBaseMode != 0) { + this.sectionCount = var3.getXSize() / 5; + } else { + this.sectionCount = var3.getZSize() / 5; + } + + } + + public static StructureBoundingBox findValidPlacement(List var0, Random var1, int var2, int var3, int var4, int var5) { + StructureBoundingBox var6 = new StructureBoundingBox(var2, var3, var4, var2, var3 + 2, var4); + + int var7; + for(var7 = var1.nextInt(3) + 2; var7 > 0; --var7) { + int var8 = var7 * 5; + switch(var5) { + case 0: + var6.maxX = var2 + 2; + var6.maxZ = var4 + (var8 - 1); + break; + case 1: + var6.minX = var2 - (var8 - 1); + var6.maxZ = var4 + 2; + break; + case 2: + var6.maxX = var2 + 2; + var6.minZ = var4 - (var8 - 1); + break; + case 3: + var6.maxX = var2 + (var8 - 1); + var6.maxZ = var4 + 2; + } + + if(StructureComponent.findIntersecting(var0, var6) == null) { + break; + } + } + + return var7 > 0 ? var6 : null; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + int var4 = this.getComponentType(); + int var5 = var3.nextInt(4); + switch(this.coordBaseMode) { + case 0: + if(var5 <= 1) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX, this.boundingBox.minY - 1 + var3.nextInt(3), this.boundingBox.maxZ + 1, this.coordBaseMode, var4); + } else if(var5 == 2) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY - 1 + var3.nextInt(3), this.boundingBox.maxZ - 3, 1, var4); + } else { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY - 1 + var3.nextInt(3), this.boundingBox.maxZ - 3, 3, var4); + } + break; + case 1: + if(var5 <= 1) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY - 1 + var3.nextInt(3), this.boundingBox.minZ, this.coordBaseMode, var4); + } else if(var5 == 2) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX, this.boundingBox.minY - 1 + var3.nextInt(3), this.boundingBox.minZ - 1, 2, var4); + } else { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX, this.boundingBox.minY - 1 + var3.nextInt(3), this.boundingBox.maxZ + 1, 0, var4); + } + break; + case 2: + if(var5 <= 1) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX, this.boundingBox.minY - 1 + var3.nextInt(3), this.boundingBox.minZ - 1, this.coordBaseMode, var4); + } else if(var5 == 2) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY - 1 + var3.nextInt(3), this.boundingBox.minZ, 1, var4); + } else { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY - 1 + var3.nextInt(3), this.boundingBox.minZ, 3, var4); + } + break; + case 3: + if(var5 <= 1) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY - 1 + var3.nextInt(3), this.boundingBox.minZ, this.coordBaseMode, var4); + } else if(var5 == 2) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.maxX - 3, this.boundingBox.minY - 1 + var3.nextInt(3), this.boundingBox.minZ - 1, 2, var4); + } else { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.maxX - 3, this.boundingBox.minY - 1 + var3.nextInt(3), this.boundingBox.maxZ + 1, 0, var4); + } + } + + if(var4 < 8) { + int var6; + int var7; + if(this.coordBaseMode != 2 && this.coordBaseMode != 0) { + for(var6 = this.boundingBox.minX + 3; var6 + 3 <= this.boundingBox.maxX; var6 += 5) { + var7 = var3.nextInt(5); + if(var7 == 0) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, var6, this.boundingBox.minY, this.boundingBox.minZ - 1, 2, var4 + 1); + } else if(var7 == 1) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, var6, this.boundingBox.minY, this.boundingBox.maxZ + 1, 0, var4 + 1); + } + } + } else { + for(var6 = this.boundingBox.minZ + 3; var6 + 3 <= this.boundingBox.maxZ; var6 += 5) { + var7 = var3.nextInt(5); + if(var7 == 0) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY, var6, 1, var4 + 1); + } else if(var7 == 1) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY, var6, 3, var4 + 1); + } + } + } + } + + } + + protected boolean generateStructureChestContents(World var1, StructureBoundingBox var2, Random var3, int var4, int var5, int var6, WeightedRandomChestContent[] var7, int var8) { + int var9 = this.getXWithOffset(var4, var6); + int var10 = this.getYWithOffset(var5); + int var11 = this.getZWithOffset(var4, var6); + if(var2.isVecInside(var9, var10, var11) && var1.getBlockId(var9, var10, var11) == 0) { + var1.setBlock(var9, var10, var11, Block.rail.blockID, this.getMetadataWithOffset(Block.rail.blockID, var3.nextBoolean() ? 1 : 0), 2); + EntityMinecartChest var12 = new EntityMinecartChest(var1, (double)((float)var9 + 0.5F), (double)((float)var10 + 0.5F), (double)((float)var11 + 0.5F)); + WeightedRandomChestContent.generateChestContents(var3, var7, var12, var8); + var1.spawnEntityInWorld(var12); + return true; + } else { + return false; + } + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.isLiquidInStructureBoundingBox(var1, var3)) { + return false; + } else { + int var8 = this.sectionCount * 5 - 1; + this.fillWithBlocks(var1, var3, 0, 0, 0, 2, 1, var8, 0, 0, false); + this.randomlyFillWithBlocks(var1, var3, var2, 0.8F, 0, 2, 0, 2, 2, var8, 0, 0, false); + if(this.hasSpiders) { + this.randomlyFillWithBlocks(var1, var3, var2, 0.6F, 0, 0, 0, 2, 1, var8, Block.web.blockID, 0, false); + } + + int var9; + int var10; + int var11; + for(var9 = 0; var9 < this.sectionCount; ++var9) { + var10 = 2 + var9 * 5; + this.fillWithBlocks(var1, var3, 0, 0, var10, 0, 1, var10, Block.fence.blockID, 0, false); + this.fillWithBlocks(var1, var3, 2, 0, var10, 2, 1, var10, Block.fence.blockID, 0, false); + if(var2.nextInt(4) == 0) { + this.fillWithBlocks(var1, var3, 0, 2, var10, 0, 2, var10, Block.planks.blockID, 0, false); + this.fillWithBlocks(var1, var3, 2, 2, var10, 2, 2, var10, Block.planks.blockID, 0, false); + } else { + this.fillWithBlocks(var1, var3, 0, 2, var10, 2, 2, var10, Block.planks.blockID, 0, false); + } + + this.randomlyPlaceBlock(var1, var3, var2, 0.1F, 0, 2, var10 - 1, Block.web.blockID, 0); + this.randomlyPlaceBlock(var1, var3, var2, 0.1F, 2, 2, var10 - 1, Block.web.blockID, 0); + this.randomlyPlaceBlock(var1, var3, var2, 0.1F, 0, 2, var10 + 1, Block.web.blockID, 0); + this.randomlyPlaceBlock(var1, var3, var2, 0.1F, 2, 2, var10 + 1, Block.web.blockID, 0); + this.randomlyPlaceBlock(var1, var3, var2, 0.05F, 0, 2, var10 - 2, Block.web.blockID, 0); + this.randomlyPlaceBlock(var1, var3, var2, 0.05F, 2, 2, var10 - 2, Block.web.blockID, 0); + this.randomlyPlaceBlock(var1, var3, var2, 0.05F, 0, 2, var10 + 2, Block.web.blockID, 0); + this.randomlyPlaceBlock(var1, var3, var2, 0.05F, 2, 2, var10 + 2, Block.web.blockID, 0); + this.randomlyPlaceBlock(var1, var3, var2, 0.05F, 1, 2, var10 - 1, Block.torchWood.blockID, 0); + this.randomlyPlaceBlock(var1, var3, var2, 0.05F, 1, 2, var10 + 1, Block.torchWood.blockID, 0); + if(var2.nextInt(100) == 0) { + this.generateStructureChestContents(var1, var3, var2, 2, 0, var10 - 1, WeightedRandomChestContent.func_92080_a(StructureMineshaftPieces.func_78816_a(), new WeightedRandomChestContent[]{Item.enchantedBook.func_92114_b(var2)}), 3 + var2.nextInt(4)); + } + + if(var2.nextInt(100) == 0) { + this.generateStructureChestContents(var1, var3, var2, 0, 0, var10 + 1, WeightedRandomChestContent.func_92080_a(StructureMineshaftPieces.func_78816_a(), new WeightedRandomChestContent[]{Item.enchantedBook.func_92114_b(var2)}), 3 + var2.nextInt(4)); + } + + if(this.hasSpiders && !this.spawnerPlaced) { + var11 = this.getYWithOffset(0); + int var12 = var10 - 1 + var2.nextInt(3); + int var13 = this.getXWithOffset(1, var12); + var12 = this.getZWithOffset(1, var12); + if(var3.isVecInside(var13, var11, var12)) { + this.spawnerPlaced = true; + var1.setBlock(var13, var11, var12, Block.mobSpawner.blockID, 0, 2); + TileEntityMobSpawner var14 = (TileEntityMobSpawner)var1.getBlockTileEntity(var13, var11, var12); + if(var14 != null) { + var14.func_98049_a().setMobID("CaveSpider"); + } + } + } + } + + for(var9 = 0; var9 <= 2; ++var9) { + for(var10 = 0; var10 <= var8; ++var10) { + var11 = this.getBlockIdAtCurrentPosition(var1, var9, -1, var10, var3); + if(var11 == 0) { + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, var9, -1, var10, var3); + } + } + } + + if(this.hasRails) { + for(var9 = 0; var9 <= var8; ++var9) { + var10 = this.getBlockIdAtCurrentPosition(var1, 1, -1, var9, var3); + if(var10 > 0 && Block.opaqueCubeLookup[var10]) { + this.randomlyPlaceBlock(var1, var3, var2, 0.7F, 1, 0, var9, Block.rail.blockID, this.getMetadataWithOffset(Block.rail.blockID, 0)); + } + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentMineshaftCross.java b/src/net/minecraft/src/ComponentMineshaftCross.java new file mode 100644 index 0000000..41d01af --- /dev/null +++ b/src/net/minecraft/src/ComponentMineshaftCross.java @@ -0,0 +1,124 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentMineshaftCross extends StructureComponent { + private final int corridorDirection; + private final boolean isMultipleFloors; + + public ComponentMineshaftCross(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.corridorDirection = var4; + this.boundingBox = var3; + this.isMultipleFloors = var3.getYSize() > 3; + } + + public static StructureBoundingBox findValidPlacement(List var0, Random var1, int var2, int var3, int var4, int var5) { + StructureBoundingBox var6 = new StructureBoundingBox(var2, var3, var4, var2, var3 + 2, var4); + if(var1.nextInt(4) == 0) { + var6.maxY += 4; + } + + switch(var5) { + case 0: + var6.minX = var2 - 1; + var6.maxX = var2 + 3; + var6.maxZ = var4 + 4; + break; + case 1: + var6.minX = var2 - 4; + var6.minZ = var4 - 1; + var6.maxZ = var4 + 3; + break; + case 2: + var6.minX = var2 - 1; + var6.maxX = var2 + 3; + var6.minZ = var4 - 4; + break; + case 3: + var6.maxX = var2 + 4; + var6.minZ = var4 - 1; + var6.maxZ = var4 + 3; + } + + return StructureComponent.findIntersecting(var0, var6) != null ? null : var6; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + int var4 = this.getComponentType(); + switch(this.corridorDirection) { + case 0: + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX + 1, this.boundingBox.minY, this.boundingBox.maxZ + 1, 0, var4); + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY, this.boundingBox.minZ + 1, 1, var4); + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY, this.boundingBox.minZ + 1, 3, var4); + break; + case 1: + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX + 1, this.boundingBox.minY, this.boundingBox.minZ - 1, 2, var4); + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX + 1, this.boundingBox.minY, this.boundingBox.maxZ + 1, 0, var4); + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY, this.boundingBox.minZ + 1, 1, var4); + break; + case 2: + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX + 1, this.boundingBox.minY, this.boundingBox.minZ - 1, 2, var4); + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY, this.boundingBox.minZ + 1, 1, var4); + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY, this.boundingBox.minZ + 1, 3, var4); + break; + case 3: + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX + 1, this.boundingBox.minY, this.boundingBox.minZ - 1, 2, var4); + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX + 1, this.boundingBox.minY, this.boundingBox.maxZ + 1, 0, var4); + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY, this.boundingBox.minZ + 1, 3, var4); + } + + if(this.isMultipleFloors) { + if(var3.nextBoolean()) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX + 1, this.boundingBox.minY + 3 + 1, this.boundingBox.minZ - 1, 2, var4); + } + + if(var3.nextBoolean()) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY + 3 + 1, this.boundingBox.minZ + 1, 1, var4); + } + + if(var3.nextBoolean()) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY + 3 + 1, this.boundingBox.minZ + 1, 3, var4); + } + + if(var3.nextBoolean()) { + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX + 1, this.boundingBox.minY + 3 + 1, this.boundingBox.maxZ + 1, 0, var4); + } + } + + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.isLiquidInStructureBoundingBox(var1, var3)) { + return false; + } else { + if(this.isMultipleFloors) { + this.fillWithBlocks(var1, var3, this.boundingBox.minX + 1, this.boundingBox.minY, this.boundingBox.minZ, this.boundingBox.maxX - 1, this.boundingBox.minY + 3 - 1, this.boundingBox.maxZ, 0, 0, false); + this.fillWithBlocks(var1, var3, this.boundingBox.minX, this.boundingBox.minY, this.boundingBox.minZ + 1, this.boundingBox.maxX, this.boundingBox.minY + 3 - 1, this.boundingBox.maxZ - 1, 0, 0, false); + this.fillWithBlocks(var1, var3, this.boundingBox.minX + 1, this.boundingBox.maxY - 2, this.boundingBox.minZ, this.boundingBox.maxX - 1, this.boundingBox.maxY, this.boundingBox.maxZ, 0, 0, false); + this.fillWithBlocks(var1, var3, this.boundingBox.minX, this.boundingBox.maxY - 2, this.boundingBox.minZ + 1, this.boundingBox.maxX, this.boundingBox.maxY, this.boundingBox.maxZ - 1, 0, 0, false); + this.fillWithBlocks(var1, var3, this.boundingBox.minX + 1, this.boundingBox.minY + 3, this.boundingBox.minZ + 1, this.boundingBox.maxX - 1, this.boundingBox.minY + 3, this.boundingBox.maxZ - 1, 0, 0, false); + } else { + this.fillWithBlocks(var1, var3, this.boundingBox.minX + 1, this.boundingBox.minY, this.boundingBox.minZ, this.boundingBox.maxX - 1, this.boundingBox.maxY, this.boundingBox.maxZ, 0, 0, false); + this.fillWithBlocks(var1, var3, this.boundingBox.minX, this.boundingBox.minY, this.boundingBox.minZ + 1, this.boundingBox.maxX, this.boundingBox.maxY, this.boundingBox.maxZ - 1, 0, 0, false); + } + + this.fillWithBlocks(var1, var3, this.boundingBox.minX + 1, this.boundingBox.minY, this.boundingBox.minZ + 1, this.boundingBox.minX + 1, this.boundingBox.maxY, this.boundingBox.minZ + 1, Block.planks.blockID, 0, false); + this.fillWithBlocks(var1, var3, this.boundingBox.minX + 1, this.boundingBox.minY, this.boundingBox.maxZ - 1, this.boundingBox.minX + 1, this.boundingBox.maxY, this.boundingBox.maxZ - 1, Block.planks.blockID, 0, false); + this.fillWithBlocks(var1, var3, this.boundingBox.maxX - 1, this.boundingBox.minY, this.boundingBox.minZ + 1, this.boundingBox.maxX - 1, this.boundingBox.maxY, this.boundingBox.minZ + 1, Block.planks.blockID, 0, false); + this.fillWithBlocks(var1, var3, this.boundingBox.maxX - 1, this.boundingBox.minY, this.boundingBox.maxZ - 1, this.boundingBox.maxX - 1, this.boundingBox.maxY, this.boundingBox.maxZ - 1, Block.planks.blockID, 0, false); + + for(int var4 = this.boundingBox.minX; var4 <= this.boundingBox.maxX; ++var4) { + for(int var5 = this.boundingBox.minZ; var5 <= this.boundingBox.maxZ; ++var5) { + int var6 = this.getBlockIdAtCurrentPosition(var1, var4, this.boundingBox.minY - 1, var5, var3); + if(var6 == 0) { + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, var4, this.boundingBox.minY - 1, var5, var3); + } + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentMineshaftRoom.java b/src/net/minecraft/src/ComponentMineshaftRoom.java new file mode 100644 index 0000000..51eda9a --- /dev/null +++ b/src/net/minecraft/src/ComponentMineshaftRoom.java @@ -0,0 +1,97 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import java.util.Random; + +public class ComponentMineshaftRoom extends StructureComponent { + private List roomsLinkedToTheRoom = new LinkedList(); + + public ComponentMineshaftRoom(int var1, Random var2, int var3, int var4) { + super(var1); + this.boundingBox = new StructureBoundingBox(var3, 50, var4, var3 + 7 + var2.nextInt(6), 54 + var2.nextInt(6), var4 + 7 + var2.nextInt(6)); + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + int var4 = this.getComponentType(); + int var6 = this.boundingBox.getYSize() - 3 - 1; + if(var6 <= 0) { + var6 = 1; + } + + int var5; + StructureComponent var7; + StructureBoundingBox var8; + for(var5 = 0; var5 < this.boundingBox.getXSize(); var5 += 4) { + var5 += var3.nextInt(this.boundingBox.getXSize()); + if(var5 + 3 > this.boundingBox.getXSize()) { + break; + } + + var7 = StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX + var5, this.boundingBox.minY + var3.nextInt(var6) + 1, this.boundingBox.minZ - 1, 2, var4); + if(var7 != null) { + var8 = var7.getBoundingBox(); + this.roomsLinkedToTheRoom.add(new StructureBoundingBox(var8.minX, var8.minY, this.boundingBox.minZ, var8.maxX, var8.maxY, this.boundingBox.minZ + 1)); + } + } + + for(var5 = 0; var5 < this.boundingBox.getXSize(); var5 += 4) { + var5 += var3.nextInt(this.boundingBox.getXSize()); + if(var5 + 3 > this.boundingBox.getXSize()) { + break; + } + + var7 = StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX + var5, this.boundingBox.minY + var3.nextInt(var6) + 1, this.boundingBox.maxZ + 1, 0, var4); + if(var7 != null) { + var8 = var7.getBoundingBox(); + this.roomsLinkedToTheRoom.add(new StructureBoundingBox(var8.minX, var8.minY, this.boundingBox.maxZ - 1, var8.maxX, var8.maxY, this.boundingBox.maxZ)); + } + } + + for(var5 = 0; var5 < this.boundingBox.getZSize(); var5 += 4) { + var5 += var3.nextInt(this.boundingBox.getZSize()); + if(var5 + 3 > this.boundingBox.getZSize()) { + break; + } + + var7 = StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY + var3.nextInt(var6) + 1, this.boundingBox.minZ + var5, 1, var4); + if(var7 != null) { + var8 = var7.getBoundingBox(); + this.roomsLinkedToTheRoom.add(new StructureBoundingBox(this.boundingBox.minX, var8.minY, var8.minZ, this.boundingBox.minX + 1, var8.maxY, var8.maxZ)); + } + } + + for(var5 = 0; var5 < this.boundingBox.getZSize(); var5 += 4) { + var5 += var3.nextInt(this.boundingBox.getZSize()); + if(var5 + 3 > this.boundingBox.getZSize()) { + break; + } + + var7 = StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY + var3.nextInt(var6) + 1, this.boundingBox.minZ + var5, 3, var4); + if(var7 != null) { + var8 = var7.getBoundingBox(); + this.roomsLinkedToTheRoom.add(new StructureBoundingBox(this.boundingBox.maxX - 1, var8.minY, var8.minZ, this.boundingBox.maxX, var8.maxY, var8.maxZ)); + } + } + + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.isLiquidInStructureBoundingBox(var1, var3)) { + return false; + } else { + this.fillWithBlocks(var1, var3, this.boundingBox.minX, this.boundingBox.minY, this.boundingBox.minZ, this.boundingBox.maxX, this.boundingBox.minY, this.boundingBox.maxZ, Block.dirt.blockID, 0, true); + this.fillWithBlocks(var1, var3, this.boundingBox.minX, this.boundingBox.minY + 1, this.boundingBox.minZ, this.boundingBox.maxX, Math.min(this.boundingBox.minY + 3, this.boundingBox.maxY), this.boundingBox.maxZ, 0, 0, false); + Iterator var4 = this.roomsLinkedToTheRoom.iterator(); + + while(var4.hasNext()) { + StructureBoundingBox var5 = (StructureBoundingBox)var4.next(); + this.fillWithBlocks(var1, var3, var5.minX, var5.maxY - 2, var5.minZ, var5.maxX, var5.maxY, var5.maxZ, 0, 0, false); + } + + this.randomlyRareFillWithBlocks(var1, var3, this.boundingBox.minX, this.boundingBox.minY + 4, this.boundingBox.minZ, this.boundingBox.maxX, this.boundingBox.maxY, this.boundingBox.maxZ, 0, false); + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentMineshaftStairs.java b/src/net/minecraft/src/ComponentMineshaftStairs.java new file mode 100644 index 0000000..99a8822 --- /dev/null +++ b/src/net/minecraft/src/ComponentMineshaftStairs.java @@ -0,0 +1,68 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentMineshaftStairs extends StructureComponent { + public ComponentMineshaftStairs(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + } + + public static StructureBoundingBox findValidPlacement(List var0, Random var1, int var2, int var3, int var4, int var5) { + StructureBoundingBox var6 = new StructureBoundingBox(var2, var3 - 5, var4, var2, var3 + 2, var4); + switch(var5) { + case 0: + var6.maxX = var2 + 2; + var6.maxZ = var4 + 8; + break; + case 1: + var6.minX = var2 - 8; + var6.maxZ = var4 + 2; + break; + case 2: + var6.maxX = var2 + 2; + var6.minZ = var4 - 8; + break; + case 3: + var6.maxX = var2 + 8; + var6.maxZ = var4 + 2; + } + + return StructureComponent.findIntersecting(var0, var6) != null ? null : var6; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + int var4 = this.getComponentType(); + switch(this.coordBaseMode) { + case 0: + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX, this.boundingBox.minY, this.boundingBox.maxZ + 1, 0, var4); + break; + case 1: + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY, this.boundingBox.minZ, 1, var4); + break; + case 2: + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.minX, this.boundingBox.minY, this.boundingBox.minZ - 1, 2, var4); + break; + case 3: + StructureMineshaftPieces.getNextComponent(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY, this.boundingBox.minZ, 3, var4); + } + + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.isLiquidInStructureBoundingBox(var1, var3)) { + return false; + } else { + this.fillWithBlocks(var1, var3, 0, 5, 0, 2, 7, 1, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 0, 7, 2, 2, 8, 0, 0, false); + + for(int var4 = 0; var4 < 5; ++var4) { + this.fillWithBlocks(var1, var3, 0, 5 - var4 - (var4 < 4 ? 1 : 0), 2 + var4, 2, 7 - var4, 2 + var4, 0, 0, false); + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgeCorridor.java b/src/net/minecraft/src/ComponentNetherBridgeCorridor.java new file mode 100644 index 0000000..11f8ed0 --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgeCorridor.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentNetherBridgeCorridor extends ComponentNetherBridgePiece { + public ComponentNetherBridgeCorridor(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentX((ComponentNetherBridgeStartPiece)var1, var2, var3, 0, 1, true); + } + + public static ComponentNetherBridgeCorridor createValidComponent(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, 0, 0, 5, 7, 5, var5); + return isAboveGround(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentNetherBridgeCorridor(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + this.fillWithBlocks(var1, var3, 0, 0, 0, 4, 1, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 4, 5, 4, 0, 0, false); + this.fillWithBlocks(var1, var3, 4, 2, 0, 4, 5, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 4, 3, 1, 4, 4, 1, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 4, 3, 3, 4, 4, 3, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 0, 5, 0, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 4, 3, 5, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 3, 4, 1, 4, 4, Block.netherFence.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 3, 3, 4, 3, 4, 4, Block.netherFence.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 6, 0, 4, 6, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + + for(int var4 = 0; var4 <= 4; ++var4) { + for(int var5 = 0; var5 <= 4; ++var5) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var4, -1, var5, var3); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgeCorridor2.java b/src/net/minecraft/src/ComponentNetherBridgeCorridor2.java new file mode 100644 index 0000000..745bf4a --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgeCorridor2.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentNetherBridgeCorridor2 extends ComponentNetherBridgePiece { + public ComponentNetherBridgeCorridor2(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentZ((ComponentNetherBridgeStartPiece)var1, var2, var3, 0, 1, true); + } + + public static ComponentNetherBridgeCorridor2 createValidComponent(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, 0, 0, 5, 7, 5, var5); + return isAboveGround(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentNetherBridgeCorridor2(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + this.fillWithBlocks(var1, var3, 0, 0, 0, 4, 1, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 4, 5, 4, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 0, 5, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 3, 1, 0, 4, 1, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 0, 3, 3, 0, 4, 3, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 4, 2, 0, 4, 5, 0, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 2, 4, 4, 5, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 3, 4, 1, 4, 4, Block.netherFence.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 3, 3, 4, 3, 4, 4, Block.netherFence.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 6, 0, 4, 6, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + + for(int var4 = 0; var4 <= 4; ++var4) { + for(int var5 = 0; var5 <= 4; ++var5) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var4, -1, var5, var3); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgeCorridor3.java b/src/net/minecraft/src/ComponentNetherBridgeCorridor3.java new file mode 100644 index 0000000..1b3d9e2 --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgeCorridor3.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentNetherBridgeCorridor3 extends ComponentNetherBridgePiece { + public ComponentNetherBridgeCorridor3(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentNormal((ComponentNetherBridgeStartPiece)var1, var2, var3, 1, 0, true); + } + + public static ComponentNetherBridgeCorridor3 createValidComponent(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, -7, 0, 5, 14, 10, var5); + return isAboveGround(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentNetherBridgeCorridor3(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + int var4 = this.getMetadataWithOffset(Block.stairsNetherBrick.blockID, 2); + + for(int var5 = 0; var5 <= 9; ++var5) { + int var6 = Math.max(1, 7 - var5); + int var7 = Math.min(Math.max(var6 + 5, 14 - var5), 13); + int var8 = var5; + this.fillWithBlocks(var1, var3, 0, 0, var5, 4, var6, var5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, var6 + 1, var5, 3, var7 - 1, var5, 0, 0, false); + if(var5 <= 6) { + this.placeBlockAtCurrentPosition(var1, Block.stairsNetherBrick.blockID, var4, 1, var6 + 1, var5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsNetherBrick.blockID, var4, 2, var6 + 1, var5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsNetherBrick.blockID, var4, 3, var6 + 1, var5, var3); + } + + this.fillWithBlocks(var1, var3, 0, var7, var5, 4, var7, var5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, var6 + 1, var5, 0, var7 - 1, var5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 4, var6 + 1, var5, 4, var7 - 1, var5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + if((var5 & 1) == 0) { + this.fillWithBlocks(var1, var3, 0, var6 + 2, var5, 0, var6 + 3, var5, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 4, var6 + 2, var5, 4, var6 + 3, var5, Block.netherFence.blockID, Block.netherFence.blockID, false); + } + + for(int var9 = 0; var9 <= 4; ++var9) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var9, -1, var8, var3); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgeCorridor4.java b/src/net/minecraft/src/ComponentNetherBridgeCorridor4.java new file mode 100644 index 0000000..4391a33 --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgeCorridor4.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentNetherBridgeCorridor4 extends ComponentNetherBridgePiece { + public ComponentNetherBridgeCorridor4(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + byte var4 = 1; + if(this.coordBaseMode == 1 || this.coordBaseMode == 2) { + var4 = 5; + } + + this.getNextComponentX((ComponentNetherBridgeStartPiece)var1, var2, var3, 0, var4, var3.nextInt(8) > 0); + this.getNextComponentZ((ComponentNetherBridgeStartPiece)var1, var2, var3, 0, var4, var3.nextInt(8) > 0); + } + + public static ComponentNetherBridgeCorridor4 createValidComponent(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -3, 0, 0, 9, 7, 9, var5); + return isAboveGround(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentNetherBridgeCorridor4(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + this.fillWithBlocks(var1, var3, 0, 0, 0, 8, 1, 8, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 8, 5, 8, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 6, 0, 8, 6, 5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 2, 5, 0, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 6, 2, 0, 8, 5, 0, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 3, 0, 1, 4, 0, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 7, 3, 0, 7, 4, 0, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 4, 8, 2, 8, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 1, 4, 2, 2, 4, 0, 0, false); + this.fillWithBlocks(var1, var3, 6, 1, 4, 7, 2, 4, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 3, 8, 8, 3, 8, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 0, 3, 6, 0, 3, 7, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 8, 3, 6, 8, 3, 7, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 0, 3, 4, 0, 5, 5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 8, 3, 4, 8, 5, 5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 3, 5, 2, 5, 5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 6, 3, 5, 7, 5, 5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 4, 5, 1, 5, 5, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 7, 4, 5, 7, 5, 5, Block.netherFence.blockID, Block.netherFence.blockID, false); + + for(int var4 = 0; var4 <= 5; ++var4) { + for(int var5 = 0; var5 <= 8; ++var5) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var5, -1, var4, var3); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgeCorridor5.java b/src/net/minecraft/src/ComponentNetherBridgeCorridor5.java new file mode 100644 index 0000000..d12e3e9 --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgeCorridor5.java @@ -0,0 +1,41 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentNetherBridgeCorridor5 extends ComponentNetherBridgePiece { + public ComponentNetherBridgeCorridor5(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentNormal((ComponentNetherBridgeStartPiece)var1, var2, var3, 1, 0, true); + } + + public static ComponentNetherBridgeCorridor5 createValidComponent(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, 0, 0, 5, 7, 5, var5); + return isAboveGround(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentNetherBridgeCorridor5(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + this.fillWithBlocks(var1, var3, 0, 0, 0, 4, 1, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 4, 5, 4, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 0, 5, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 4, 2, 0, 4, 5, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 3, 1, 0, 4, 1, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 0, 3, 3, 0, 4, 3, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 4, 3, 1, 4, 4, 1, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 4, 3, 3, 4, 4, 3, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 0, 6, 0, 4, 6, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + + for(int var4 = 0; var4 <= 4; ++var4) { + for(int var5 = 0; var5 <= 4; ++var5) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var4, -1, var5, var3); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgeCrossing.java b/src/net/minecraft/src/ComponentNetherBridgeCrossing.java new file mode 100644 index 0000000..fa38ce6 --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgeCrossing.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentNetherBridgeCrossing extends ComponentNetherBridgePiece { + public ComponentNetherBridgeCrossing(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentNormal((ComponentNetherBridgeStartPiece)var1, var2, var3, 2, 0, false); + this.getNextComponentX((ComponentNetherBridgeStartPiece)var1, var2, var3, 0, 2, false); + this.getNextComponentZ((ComponentNetherBridgeStartPiece)var1, var2, var3, 0, 2, false); + } + + public static ComponentNetherBridgeCrossing createValidComponent(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -2, 0, 0, 7, 9, 7, var5); + return isAboveGround(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentNetherBridgeCrossing(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + this.fillWithBlocks(var1, var3, 0, 0, 0, 6, 1, 6, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 6, 7, 6, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 1, 6, 0, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 6, 1, 6, 6, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 5, 2, 0, 6, 6, 0, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 5, 2, 6, 6, 6, 6, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 0, 6, 1, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 5, 0, 6, 6, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 6, 2, 0, 6, 6, 1, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 6, 2, 5, 6, 6, 6, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 2, 6, 0, 4, 6, 0, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 2, 5, 0, 4, 5, 0, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 2, 6, 6, 4, 6, 6, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 2, 5, 6, 4, 5, 6, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 0, 6, 2, 0, 6, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 5, 2, 0, 5, 4, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 6, 6, 2, 6, 6, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 6, 5, 2, 6, 5, 4, Block.netherFence.blockID, Block.netherFence.blockID, false); + + for(int var4 = 0; var4 <= 6; ++var4) { + for(int var5 = 0; var5 <= 6; ++var5) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var4, -1, var5, var3); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgeCrossing2.java b/src/net/minecraft/src/ComponentNetherBridgeCrossing2.java new file mode 100644 index 0000000..a5b3095 --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgeCrossing2.java @@ -0,0 +1,41 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentNetherBridgeCrossing2 extends ComponentNetherBridgePiece { + public ComponentNetherBridgeCrossing2(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentNormal((ComponentNetherBridgeStartPiece)var1, var2, var3, 1, 0, true); + this.getNextComponentX((ComponentNetherBridgeStartPiece)var1, var2, var3, 0, 1, true); + this.getNextComponentZ((ComponentNetherBridgeStartPiece)var1, var2, var3, 0, 1, true); + } + + public static ComponentNetherBridgeCrossing2 createValidComponent(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, 0, 0, 5, 7, 5, var5); + return isAboveGround(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentNetherBridgeCrossing2(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + this.fillWithBlocks(var1, var3, 0, 0, 0, 4, 1, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 4, 5, 4, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 0, 5, 0, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 4, 2, 0, 4, 5, 0, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 4, 0, 5, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 4, 2, 4, 4, 5, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 6, 0, 4, 6, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + + for(int var4 = 0; var4 <= 4; ++var4) { + for(int var5 = 0; var5 <= 4; ++var5) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var4, -1, var5, var3); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgeCrossing3.java b/src/net/minecraft/src/ComponentNetherBridgeCrossing3.java new file mode 100644 index 0000000..1b340c7 --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgeCrossing3.java @@ -0,0 +1,79 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentNetherBridgeCrossing3 extends ComponentNetherBridgePiece { + public ComponentNetherBridgeCrossing3(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + } + + protected ComponentNetherBridgeCrossing3(Random var1, int var2, int var3) { + super(0); + this.coordBaseMode = var1.nextInt(4); + switch(this.coordBaseMode) { + case 0: + case 2: + this.boundingBox = new StructureBoundingBox(var2, 64, var3, var2 + 19 - 1, 73, var3 + 19 - 1); + break; + default: + this.boundingBox = new StructureBoundingBox(var2, 64, var3, var2 + 19 - 1, 73, var3 + 19 - 1); + } + + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentNormal((ComponentNetherBridgeStartPiece)var1, var2, var3, 8, 3, false); + this.getNextComponentX((ComponentNetherBridgeStartPiece)var1, var2, var3, 3, 8, false); + this.getNextComponentZ((ComponentNetherBridgeStartPiece)var1, var2, var3, 3, 8, false); + } + + public static ComponentNetherBridgeCrossing3 createValidComponent(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -8, -3, 0, 19, 10, 19, var5); + return isAboveGround(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentNetherBridgeCrossing3(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + this.fillWithBlocks(var1, var3, 7, 3, 0, 11, 4, 18, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 3, 7, 18, 4, 11, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 8, 5, 0, 10, 7, 18, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 5, 8, 18, 7, 10, 0, 0, false); + this.fillWithBlocks(var1, var3, 7, 5, 0, 7, 5, 7, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 7, 5, 11, 7, 5, 18, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 11, 5, 0, 11, 5, 7, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 11, 5, 11, 11, 5, 18, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 5, 7, 7, 5, 7, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 11, 5, 7, 18, 5, 7, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 5, 11, 7, 5, 11, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 11, 5, 11, 18, 5, 11, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 7, 2, 0, 11, 2, 5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 7, 2, 13, 11, 2, 18, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 7, 0, 0, 11, 1, 3, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 7, 0, 15, 11, 1, 18, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + + int var4; + int var5; + for(var4 = 7; var4 <= 11; ++var4) { + for(var5 = 0; var5 <= 2; ++var5) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var4, -1, var5, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var4, -1, 18 - var5, var3); + } + } + + this.fillWithBlocks(var1, var3, 0, 2, 7, 5, 2, 11, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 13, 2, 7, 18, 2, 11, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 0, 7, 3, 1, 11, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 15, 0, 7, 18, 1, 11, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + + for(var4 = 0; var4 <= 2; ++var4) { + for(var5 = 7; var5 <= 11; ++var5) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var4, -1, var5, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, 18 - var4, -1, var5, var3); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgeEnd.java b/src/net/minecraft/src/ComponentNetherBridgeEnd.java new file mode 100644 index 0000000..de6b0b4 --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgeEnd.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentNetherBridgeEnd extends ComponentNetherBridgePiece { + private int fillSeed; + + public ComponentNetherBridgeEnd(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + this.fillSeed = var2.nextInt(); + } + + public static ComponentNetherBridgeEnd func_74971_a(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, -3, 0, 5, 10, 8, var5); + return isAboveGround(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentNetherBridgeEnd(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + Random var4 = new Random((long)this.fillSeed); + + int var5; + int var6; + int var7; + for(var5 = 0; var5 <= 4; ++var5) { + for(var6 = 3; var6 <= 4; ++var6) { + var7 = var4.nextInt(8); + this.fillWithBlocks(var1, var3, var5, var6, 0, var5, var6, var7, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + } + } + + var5 = var4.nextInt(8); + this.fillWithBlocks(var1, var3, 0, 5, 0, 0, 5, var5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + var5 = var4.nextInt(8); + this.fillWithBlocks(var1, var3, 4, 5, 0, 4, 5, var5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + + for(var5 = 0; var5 <= 4; ++var5) { + var6 = var4.nextInt(5); + this.fillWithBlocks(var1, var3, var5, 2, 0, var5, 2, var6, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + } + + for(var5 = 0; var5 <= 4; ++var5) { + for(var6 = 0; var6 <= 1; ++var6) { + var7 = var4.nextInt(3); + this.fillWithBlocks(var1, var3, var5, var6, 0, var5, var6, var7, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgeEntrance.java b/src/net/minecraft/src/ComponentNetherBridgeEntrance.java new file mode 100644 index 0000000..1df1ec1 --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgeEntrance.java @@ -0,0 +1,99 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentNetherBridgeEntrance extends ComponentNetherBridgePiece { + public ComponentNetherBridgeEntrance(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentNormal((ComponentNetherBridgeStartPiece)var1, var2, var3, 5, 3, true); + } + + public static ComponentNetherBridgeEntrance createValidComponent(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -5, -3, 0, 13, 14, 13, var5); + return isAboveGround(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentNetherBridgeEntrance(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + this.fillWithBlocks(var1, var3, 0, 3, 0, 12, 4, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 5, 0, 12, 13, 12, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 5, 0, 1, 12, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 11, 5, 0, 12, 12, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 2, 5, 11, 4, 12, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 8, 5, 11, 10, 12, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 5, 9, 11, 7, 12, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 2, 5, 0, 4, 12, 1, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 8, 5, 0, 10, 12, 1, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 5, 9, 0, 7, 12, 1, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 2, 11, 2, 10, 12, 10, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 5, 8, 0, 7, 8, 0, Block.netherFence.blockID, Block.netherFence.blockID, false); + + int var4; + for(var4 = 1; var4 <= 11; var4 += 2) { + this.fillWithBlocks(var1, var3, var4, 10, 0, var4, 11, 0, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, var4, 10, 12, var4, 11, 12, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 0, 10, var4, 0, 11, var4, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 12, 10, var4, 12, 11, var4, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.netherBrick.blockID, 0, var4, 13, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherBrick.blockID, 0, var4, 13, 12, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherBrick.blockID, 0, 0, 13, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherBrick.blockID, 0, 12, 13, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, var4 + 1, 13, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, var4 + 1, 13, 12, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, 0, 13, var4 + 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, 12, 13, var4 + 1, var3); + } + + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, 0, 13, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, 0, 13, 12, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, 0, 13, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, 12, 13, 0, var3); + + for(var4 = 3; var4 <= 9; var4 += 2) { + this.fillWithBlocks(var1, var3, 1, 7, var4, 1, 8, var4, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 11, 7, var4, 11, 8, var4, Block.netherFence.blockID, Block.netherFence.blockID, false); + } + + this.fillWithBlocks(var1, var3, 4, 2, 0, 8, 2, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 4, 12, 2, 8, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 4, 0, 0, 8, 1, 3, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 4, 0, 9, 8, 1, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 0, 4, 3, 1, 8, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 9, 0, 4, 12, 1, 8, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + + int var5; + for(var4 = 4; var4 <= 8; ++var4) { + for(var5 = 0; var5 <= 2; ++var5) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var4, -1, var5, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var4, -1, 12 - var5, var3); + } + } + + for(var4 = 0; var4 <= 2; ++var4) { + for(var5 = 4; var5 <= 8; ++var5) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var4, -1, var5, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, 12 - var4, -1, var5, var3); + } + } + + this.fillWithBlocks(var1, var3, 5, 5, 5, 7, 5, 7, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 6, 1, 6, 6, 4, 6, 0, 0, false); + this.placeBlockAtCurrentPosition(var1, Block.netherBrick.blockID, 0, 6, 0, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.lavaMoving.blockID, 0, 6, 5, 6, var3); + var4 = this.getXWithOffset(6, 6); + var5 = this.getYWithOffset(5); + int var6 = this.getZWithOffset(6, 6); + if(var3.isVecInside(var4, var5, var6)) { + var1.scheduledUpdatesAreImmediate = true; + Block.blocksList[Block.lavaMoving.blockID].updateTick(var1, var4, var5, var6, var2); + var1.scheduledUpdatesAreImmediate = false; + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgeNetherStalkRoom.java b/src/net/minecraft/src/ComponentNetherBridgeNetherStalkRoom.java new file mode 100644 index 0000000..25602fd --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgeNetherStalkRoom.java @@ -0,0 +1,136 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentNetherBridgeNetherStalkRoom extends ComponentNetherBridgePiece { + public ComponentNetherBridgeNetherStalkRoom(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentNormal((ComponentNetherBridgeStartPiece)var1, var2, var3, 5, 3, true); + this.getNextComponentNormal((ComponentNetherBridgeStartPiece)var1, var2, var3, 5, 11, true); + } + + public static ComponentNetherBridgeNetherStalkRoom createValidComponent(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -5, -3, 0, 13, 14, 13, var5); + return isAboveGround(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentNetherBridgeNetherStalkRoom(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + this.fillWithBlocks(var1, var3, 0, 3, 0, 12, 4, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 5, 0, 12, 13, 12, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 5, 0, 1, 12, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 11, 5, 0, 12, 12, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 2, 5, 11, 4, 12, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 8, 5, 11, 10, 12, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 5, 9, 11, 7, 12, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 2, 5, 0, 4, 12, 1, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 8, 5, 0, 10, 12, 1, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 5, 9, 0, 7, 12, 1, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 2, 11, 2, 10, 12, 10, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + + int var4; + for(var4 = 1; var4 <= 11; var4 += 2) { + this.fillWithBlocks(var1, var3, var4, 10, 0, var4, 11, 0, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, var4, 10, 12, var4, 11, 12, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 0, 10, var4, 0, 11, var4, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 12, 10, var4, 12, 11, var4, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.netherBrick.blockID, 0, var4, 13, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherBrick.blockID, 0, var4, 13, 12, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherBrick.blockID, 0, 0, 13, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherBrick.blockID, 0, 12, 13, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, var4 + 1, 13, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, var4 + 1, 13, 12, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, 0, 13, var4 + 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, 12, 13, var4 + 1, var3); + } + + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, 0, 13, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, 0, 13, 12, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, 0, 13, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, 12, 13, 0, var3); + + for(var4 = 3; var4 <= 9; var4 += 2) { + this.fillWithBlocks(var1, var3, 1, 7, var4, 1, 8, var4, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 11, 7, var4, 11, 8, var4, Block.netherFence.blockID, Block.netherFence.blockID, false); + } + + var4 = this.getMetadataWithOffset(Block.stairsNetherBrick.blockID, 3); + + int var5; + int var6; + int var7; + for(var5 = 0; var5 <= 6; ++var5) { + var6 = var5 + 4; + + for(var7 = 5; var7 <= 7; ++var7) { + this.placeBlockAtCurrentPosition(var1, Block.stairsNetherBrick.blockID, var4, var7, 5 + var5, var6, var3); + } + + if(var6 >= 5 && var6 <= 8) { + this.fillWithBlocks(var1, var3, 5, 5, var6, 7, var5 + 4, var6, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + } else if(var6 >= 9 && var6 <= 10) { + this.fillWithBlocks(var1, var3, 5, 8, var6, 7, var5 + 4, var6, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + } + + if(var5 >= 1) { + this.fillWithBlocks(var1, var3, 5, 6 + var5, var6, 7, 9 + var5, var6, 0, 0, false); + } + } + + for(var5 = 5; var5 <= 7; ++var5) { + this.placeBlockAtCurrentPosition(var1, Block.stairsNetherBrick.blockID, var4, var5, 12, 11, var3); + } + + this.fillWithBlocks(var1, var3, 5, 6, 7, 5, 7, 7, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 7, 6, 7, 7, 7, 7, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 5, 13, 12, 7, 13, 12, 0, 0, false); + this.fillWithBlocks(var1, var3, 2, 5, 2, 3, 5, 3, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 2, 5, 9, 3, 5, 10, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 2, 5, 4, 2, 5, 8, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 9, 5, 2, 10, 5, 3, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 9, 5, 9, 10, 5, 10, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 10, 5, 4, 10, 5, 8, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + var5 = this.getMetadataWithOffset(Block.stairsNetherBrick.blockID, 0); + var6 = this.getMetadataWithOffset(Block.stairsNetherBrick.blockID, 1); + this.placeBlockAtCurrentPosition(var1, Block.stairsNetherBrick.blockID, var6, 4, 5, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsNetherBrick.blockID, var6, 4, 5, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsNetherBrick.blockID, var6, 4, 5, 9, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsNetherBrick.blockID, var6, 4, 5, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsNetherBrick.blockID, var5, 8, 5, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsNetherBrick.blockID, var5, 8, 5, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsNetherBrick.blockID, var5, 8, 5, 9, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsNetherBrick.blockID, var5, 8, 5, 10, var3); + this.fillWithBlocks(var1, var3, 3, 4, 4, 4, 4, 8, Block.slowSand.blockID, Block.slowSand.blockID, false); + this.fillWithBlocks(var1, var3, 8, 4, 4, 9, 4, 8, Block.slowSand.blockID, Block.slowSand.blockID, false); + this.fillWithBlocks(var1, var3, 3, 5, 4, 4, 5, 8, Block.netherStalk.blockID, Block.netherStalk.blockID, false); + this.fillWithBlocks(var1, var3, 8, 5, 4, 9, 5, 8, Block.netherStalk.blockID, Block.netherStalk.blockID, false); + this.fillWithBlocks(var1, var3, 4, 2, 0, 8, 2, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 4, 12, 2, 8, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 4, 0, 0, 8, 1, 3, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 4, 0, 9, 8, 1, 12, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 0, 4, 3, 1, 8, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 9, 0, 4, 12, 1, 8, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + + int var8; + for(var7 = 4; var7 <= 8; ++var7) { + for(var8 = 0; var8 <= 2; ++var8) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var7, -1, var8, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var7, -1, 12 - var8, var3); + } + } + + for(var7 = 0; var7 <= 2; ++var7) { + for(var8 = 4; var8 <= 8; ++var8) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var7, -1, var8, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, 12 - var7, -1, var8, var3); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgePiece.java b/src/net/minecraft/src/ComponentNetherBridgePiece.java new file mode 100644 index 0000000..f2d09a5 --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgePiece.java @@ -0,0 +1,129 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +abstract class ComponentNetherBridgePiece extends StructureComponent { + protected ComponentNetherBridgePiece(int var1) { + super(var1); + } + + private int getTotalWeight(List var1) { + boolean var2 = false; + int var3 = 0; + + StructureNetherBridgePieceWeight var5; + for(Iterator var4 = var1.iterator(); var4.hasNext(); var3 += var5.field_78826_b) { + var5 = (StructureNetherBridgePieceWeight)var4.next(); + if(var5.field_78824_d > 0 && var5.field_78827_c < var5.field_78824_d) { + var2 = true; + } + } + + return var2 ? var3 : -1; + } + + private ComponentNetherBridgePiece getNextComponent(ComponentNetherBridgeStartPiece var1, List var2, List var3, Random var4, int var5, int var6, int var7, int var8, int var9) { + int var10 = this.getTotalWeight(var2); + boolean var11 = var10 > 0 && var9 <= 30; + int var12 = 0; + + while(var12 < 5 && var11) { + ++var12; + int var13 = var4.nextInt(var10); + Iterator var14 = var2.iterator(); + + while(var14.hasNext()) { + StructureNetherBridgePieceWeight var15 = (StructureNetherBridgePieceWeight)var14.next(); + var13 -= var15.field_78826_b; + if(var13 < 0) { + if(!var15.func_78822_a(var9) || var15 == var1.theNetherBridgePieceWeight && !var15.field_78825_e) { + break; + } + + ComponentNetherBridgePiece var16 = StructureNetherBridgePieces.createNextComponent(var15, var3, var4, var5, var6, var7, var8, var9); + if(var16 != null) { + ++var15.field_78827_c; + var1.theNetherBridgePieceWeight = var15; + if(!var15.func_78823_a()) { + var2.remove(var15); + } + + return var16; + } + } + } + } + + return ComponentNetherBridgeEnd.func_74971_a(var3, var4, var5, var6, var7, var8, var9); + } + + private StructureComponent getNextComponent(ComponentNetherBridgeStartPiece var1, List var2, Random var3, int var4, int var5, int var6, int var7, int var8, boolean var9) { + if(Math.abs(var4 - var1.getBoundingBox().minX) <= 112 && Math.abs(var6 - var1.getBoundingBox().minZ) <= 112) { + List var10 = var1.primaryWeights; + if(var9) { + var10 = var1.secondaryWeights; + } + + ComponentNetherBridgePiece var11 = this.getNextComponent(var1, var10, var2, var3, var4, var5, var6, var7, var8 + 1); + if(var11 != null) { + var2.add(var11); + var1.field_74967_d.add(var11); + } + + return var11; + } else { + return ComponentNetherBridgeEnd.func_74971_a(var2, var3, var4, var5, var6, var7, var8); + } + } + + protected StructureComponent getNextComponentNormal(ComponentNetherBridgeStartPiece var1, List var2, Random var3, int var4, int var5, boolean var6) { + switch(this.coordBaseMode) { + case 0: + return this.getNextComponent(var1, var2, var3, this.boundingBox.minX + var4, this.boundingBox.minY + var5, this.boundingBox.maxZ + 1, this.coordBaseMode, this.getComponentType(), var6); + case 1: + return this.getNextComponent(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY + var5, this.boundingBox.minZ + var4, this.coordBaseMode, this.getComponentType(), var6); + case 2: + return this.getNextComponent(var1, var2, var3, this.boundingBox.minX + var4, this.boundingBox.minY + var5, this.boundingBox.minZ - 1, this.coordBaseMode, this.getComponentType(), var6); + case 3: + return this.getNextComponent(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY + var5, this.boundingBox.minZ + var4, this.coordBaseMode, this.getComponentType(), var6); + default: + return null; + } + } + + protected StructureComponent getNextComponentX(ComponentNetherBridgeStartPiece var1, List var2, Random var3, int var4, int var5, boolean var6) { + switch(this.coordBaseMode) { + case 0: + return this.getNextComponent(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY + var4, this.boundingBox.minZ + var5, 1, this.getComponentType(), var6); + case 1: + return this.getNextComponent(var1, var2, var3, this.boundingBox.minX + var5, this.boundingBox.minY + var4, this.boundingBox.minZ - 1, 2, this.getComponentType(), var6); + case 2: + return this.getNextComponent(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY + var4, this.boundingBox.minZ + var5, 1, this.getComponentType(), var6); + case 3: + return this.getNextComponent(var1, var2, var3, this.boundingBox.minX + var5, this.boundingBox.minY + var4, this.boundingBox.minZ - 1, 2, this.getComponentType(), var6); + default: + return null; + } + } + + protected StructureComponent getNextComponentZ(ComponentNetherBridgeStartPiece var1, List var2, Random var3, int var4, int var5, boolean var6) { + switch(this.coordBaseMode) { + case 0: + return this.getNextComponent(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY + var4, this.boundingBox.minZ + var5, 3, this.getComponentType(), var6); + case 1: + return this.getNextComponent(var1, var2, var3, this.boundingBox.minX + var5, this.boundingBox.minY + var4, this.boundingBox.maxZ + 1, 0, this.getComponentType(), var6); + case 2: + return this.getNextComponent(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY + var4, this.boundingBox.minZ + var5, 3, this.getComponentType(), var6); + case 3: + return this.getNextComponent(var1, var2, var3, this.boundingBox.minX + var5, this.boundingBox.minY + var4, this.boundingBox.maxZ + 1, 0, this.getComponentType(), var6); + default: + return null; + } + } + + protected static boolean isAboveGround(StructureBoundingBox var0) { + return var0 != null && var0.minY > 10; + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgeStairs.java b/src/net/minecraft/src/ComponentNetherBridgeStairs.java new file mode 100644 index 0000000..bfe9ff3 --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgeStairs.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentNetherBridgeStairs extends ComponentNetherBridgePiece { + public ComponentNetherBridgeStairs(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentZ((ComponentNetherBridgeStartPiece)var1, var2, var3, 6, 2, false); + } + + public static ComponentNetherBridgeStairs createValidComponent(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -2, 0, 0, 7, 11, 7, var5); + return isAboveGround(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentNetherBridgeStairs(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + this.fillWithBlocks(var1, var3, 0, 0, 0, 6, 1, 6, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 6, 10, 6, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 1, 8, 0, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 5, 2, 0, 6, 8, 0, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 1, 0, 8, 6, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 6, 2, 1, 6, 8, 6, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 2, 6, 5, 8, 6, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 3, 2, 0, 5, 4, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 6, 3, 2, 6, 5, 2, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 6, 3, 4, 6, 5, 4, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.netherBrick.blockID, 0, 5, 2, 5, var3); + this.fillWithBlocks(var1, var3, 4, 2, 5, 4, 3, 5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 3, 2, 5, 3, 4, 5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 2, 2, 5, 2, 5, 5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 2, 5, 1, 6, 5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 7, 1, 5, 7, 4, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 6, 8, 2, 6, 8, 4, 0, 0, false); + this.fillWithBlocks(var1, var3, 2, 6, 0, 4, 8, 0, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 2, 5, 0, 4, 5, 0, Block.netherFence.blockID, Block.netherFence.blockID, false); + + for(int var4 = 0; var4 <= 6; ++var4) { + for(int var5 = 0; var5 <= 6; ++var5) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var4, -1, var5, var3); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgeStartPiece.java b/src/net/minecraft/src/ComponentNetherBridgeStartPiece.java new file mode 100644 index 0000000..a1df31f --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgeStartPiece.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class ComponentNetherBridgeStartPiece extends ComponentNetherBridgeCrossing3 { + public StructureNetherBridgePieceWeight theNetherBridgePieceWeight; + public List primaryWeights = new ArrayList(); + public List secondaryWeights; + public ArrayList field_74967_d = new ArrayList(); + + public ComponentNetherBridgeStartPiece(Random var1, int var2, int var3) { + super(var1, var2, var3); + StructureNetherBridgePieceWeight[] var4 = StructureNetherBridgePieces.getPrimaryComponents(); + int var5 = var4.length; + + int var6; + StructureNetherBridgePieceWeight var7; + for(var6 = 0; var6 < var5; ++var6) { + var7 = var4[var6]; + var7.field_78827_c = 0; + this.primaryWeights.add(var7); + } + + this.secondaryWeights = new ArrayList(); + var4 = StructureNetherBridgePieces.getSecondaryComponents(); + var5 = var4.length; + + for(var6 = 0; var6 < var5; ++var6) { + var7 = var4[var6]; + var7.field_78827_c = 0; + this.secondaryWeights.add(var7); + } + + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgeStraight.java b/src/net/minecraft/src/ComponentNetherBridgeStraight.java new file mode 100644 index 0000000..f044264 --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgeStraight.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentNetherBridgeStraight extends ComponentNetherBridgePiece { + public ComponentNetherBridgeStraight(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentNormal((ComponentNetherBridgeStartPiece)var1, var2, var3, 1, 3, false); + } + + public static ComponentNetherBridgeStraight createValidComponent(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, -3, 0, 5, 10, 19, var5); + return isAboveGround(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentNetherBridgeStraight(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + this.fillWithBlocks(var1, var3, 0, 3, 0, 4, 4, 18, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 5, 0, 3, 7, 18, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 5, 0, 0, 5, 18, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 4, 5, 0, 4, 5, 18, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 4, 2, 5, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 13, 4, 2, 18, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 0, 0, 4, 1, 3, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 0, 15, 4, 1, 18, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + + for(int var4 = 0; var4 <= 4; ++var4) { + for(int var5 = 0; var5 <= 2; ++var5) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var4, -1, var5, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var4, -1, 18 - var5, var3); + } + } + + this.fillWithBlocks(var1, var3, 0, 1, 1, 0, 4, 1, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 0, 3, 4, 0, 4, 4, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 0, 3, 14, 0, 4, 14, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 0, 1, 17, 0, 4, 17, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 4, 1, 1, 4, 4, 1, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 4, 3, 4, 4, 4, 4, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 4, 3, 14, 4, 4, 14, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 4, 1, 17, 4, 4, 17, Block.netherFence.blockID, Block.netherFence.blockID, false); + return true; + } +} diff --git a/src/net/minecraft/src/ComponentNetherBridgeThrone.java b/src/net/minecraft/src/ComponentNetherBridgeThrone.java new file mode 100644 index 0000000..9bc06fa --- /dev/null +++ b/src/net/minecraft/src/ComponentNetherBridgeThrone.java @@ -0,0 +1,63 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentNetherBridgeThrone extends ComponentNetherBridgePiece { + private boolean hasSpawner; + + public ComponentNetherBridgeThrone(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + } + + public static ComponentNetherBridgeThrone createValidComponent(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -2, 0, 0, 7, 8, 9, var5); + return isAboveGround(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentNetherBridgeThrone(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + this.fillWithBlocks(var1, var3, 0, 2, 0, 6, 7, 7, 0, 0, false); + this.fillWithBlocks(var1, var3, 1, 0, 0, 5, 1, 7, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 2, 1, 5, 2, 7, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 3, 2, 5, 3, 7, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 4, 3, 5, 4, 7, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 2, 0, 1, 4, 2, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 5, 2, 0, 5, 4, 2, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 5, 2, 1, 5, 3, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 5, 5, 2, 5, 5, 3, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 0, 5, 3, 0, 5, 8, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 6, 5, 3, 6, 5, 8, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.fillWithBlocks(var1, var3, 1, 5, 8, 5, 5, 8, Block.netherBrick.blockID, Block.netherBrick.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, 1, 6, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.netherFence.blockID, 0, 5, 6, 3, var3); + this.fillWithBlocks(var1, var3, 0, 6, 3, 0, 6, 8, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 6, 6, 3, 6, 6, 8, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 1, 6, 8, 5, 7, 8, Block.netherFence.blockID, Block.netherFence.blockID, false); + this.fillWithBlocks(var1, var3, 2, 8, 8, 4, 8, 8, Block.netherFence.blockID, Block.netherFence.blockID, false); + int var4; + int var5; + if(!this.hasSpawner) { + var4 = this.getYWithOffset(5); + var5 = this.getXWithOffset(3, 5); + int var6 = this.getZWithOffset(3, 5); + if(var3.isVecInside(var5, var4, var6)) { + this.hasSpawner = true; + var1.setBlock(var5, var4, var6, Block.mobSpawner.blockID, 0, 2); + TileEntityMobSpawner var7 = (TileEntityMobSpawner)var1.getBlockTileEntity(var5, var4, var6); + if(var7 != null) { + var7.func_98049_a().setMobID("Blaze"); + } + } + } + + for(var4 = 0; var4 <= 6; ++var4) { + for(var5 = 0; var5 <= 6; ++var5) { + this.fillCurrentPositionBlocksDownwards(var1, Block.netherBrick.blockID, 0, var4, -1, var5, var3); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentScatteredFeature.java b/src/net/minecraft/src/ComponentScatteredFeature.java new file mode 100644 index 0000000..1628713 --- /dev/null +++ b/src/net/minecraft/src/ComponentScatteredFeature.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.util.Random; + +abstract class ComponentScatteredFeature extends StructureComponent { + protected final int scatteredFeatureSizeX; + protected final int scatteredFeatureSizeY; + protected final int scatteredFeatureSizeZ; + protected int field_74936_d = -1; + + protected ComponentScatteredFeature(Random var1, int var2, int var3, int var4, int var5, int var6, int var7) { + super(0); + this.scatteredFeatureSizeX = var5; + this.scatteredFeatureSizeY = var6; + this.scatteredFeatureSizeZ = var7; + this.coordBaseMode = var1.nextInt(4); + switch(this.coordBaseMode) { + case 0: + case 2: + this.boundingBox = new StructureBoundingBox(var2, var3, var4, var2 + var5 - 1, var3 + var6 - 1, var4 + var7 - 1); + break; + default: + this.boundingBox = new StructureBoundingBox(var2, var3, var4, var2 + var7 - 1, var3 + var6 - 1, var4 + var5 - 1); + } + + } + + protected boolean func_74935_a(World var1, StructureBoundingBox var2, int var3) { + if(this.field_74936_d >= 0) { + return true; + } else { + int var4 = 0; + int var5 = 0; + + for(int var6 = this.boundingBox.minZ; var6 <= this.boundingBox.maxZ; ++var6) { + for(int var7 = this.boundingBox.minX; var7 <= this.boundingBox.maxX; ++var7) { + if(var2.isVecInside(var7, 64, var6)) { + var4 += Math.max(var1.getTopSolidOrLiquidBlock(var7, var6), var1.provider.getAverageGroundLevel()); + ++var5; + } + } + } + + if(var5 == 0) { + return false; + } else { + this.field_74936_d = var4 / var5; + this.boundingBox.offset(0, this.field_74936_d - this.boundingBox.minY + var3, 0); + return true; + } + } + } +} diff --git a/src/net/minecraft/src/ComponentScatteredFeatureDesertPyramid.java b/src/net/minecraft/src/ComponentScatteredFeatureDesertPyramid.java new file mode 100644 index 0000000..344405f --- /dev/null +++ b/src/net/minecraft/src/ComponentScatteredFeatureDesertPyramid.java @@ -0,0 +1,207 @@ +package net.minecraft.src; + +import java.util.Random; + +public class ComponentScatteredFeatureDesertPyramid extends ComponentScatteredFeature { + private boolean[] field_74940_h = new boolean[4]; + private static final WeightedRandomChestContent[] itemsToGenerateInTemple = new WeightedRandomChestContent[]{new WeightedRandomChestContent(Item.diamond.itemID, 0, 1, 3, 3), new WeightedRandomChestContent(Item.ingotIron.itemID, 0, 1, 5, 10), new WeightedRandomChestContent(Item.ingotGold.itemID, 0, 2, 7, 15), new WeightedRandomChestContent(Item.emerald.itemID, 0, 1, 3, 2), new WeightedRandomChestContent(Item.bone.itemID, 0, 4, 6, 20), new WeightedRandomChestContent(Item.rottenFlesh.itemID, 0, 3, 7, 16)}; + + public ComponentScatteredFeatureDesertPyramid(Random var1, int var2, int var3) { + super(var1, var2, 64, var3, 21, 15, 21); + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + this.fillWithBlocks(var1, var3, 0, -4, 0, this.scatteredFeatureSizeX - 1, 0, this.scatteredFeatureSizeZ - 1, Block.sandStone.blockID, Block.sandStone.blockID, false); + + int var4; + for(var4 = 1; var4 <= 9; ++var4) { + this.fillWithBlocks(var1, var3, var4, var4, var4, this.scatteredFeatureSizeX - 1 - var4, var4, this.scatteredFeatureSizeZ - 1 - var4, Block.sandStone.blockID, Block.sandStone.blockID, false); + this.fillWithBlocks(var1, var3, var4 + 1, var4, var4 + 1, this.scatteredFeatureSizeX - 2 - var4, var4, this.scatteredFeatureSizeZ - 2 - var4, 0, 0, false); + } + + int var5; + for(var4 = 0; var4 < this.scatteredFeatureSizeX; ++var4) { + for(var5 = 0; var5 < this.scatteredFeatureSizeZ; ++var5) { + this.fillCurrentPositionBlocksDownwards(var1, Block.sandStone.blockID, 0, var4, -5, var5, var3); + } + } + + var4 = this.getMetadataWithOffset(Block.stairsSandStone.blockID, 3); + var5 = this.getMetadataWithOffset(Block.stairsSandStone.blockID, 2); + int var6 = this.getMetadataWithOffset(Block.stairsSandStone.blockID, 0); + int var7 = this.getMetadataWithOffset(Block.stairsSandStone.blockID, 1); + byte var8 = 1; + byte var9 = 11; + this.fillWithBlocks(var1, var3, 0, 0, 0, 4, 9, 4, Block.sandStone.blockID, 0, false); + this.fillWithBlocks(var1, var3, 1, 10, 1, 3, 10, 3, Block.sandStone.blockID, Block.sandStone.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, var4, 2, 10, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, var5, 2, 10, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, var6, 0, 10, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, var7, 4, 10, 2, var3); + this.fillWithBlocks(var1, var3, this.scatteredFeatureSizeX - 5, 0, 0, this.scatteredFeatureSizeX - 1, 9, 4, Block.sandStone.blockID, 0, false); + this.fillWithBlocks(var1, var3, this.scatteredFeatureSizeX - 4, 10, 1, this.scatteredFeatureSizeX - 2, 10, 3, Block.sandStone.blockID, Block.sandStone.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, var4, this.scatteredFeatureSizeX - 3, 10, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, var5, this.scatteredFeatureSizeX - 3, 10, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, var6, this.scatteredFeatureSizeX - 5, 10, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, var7, this.scatteredFeatureSizeX - 1, 10, 2, var3); + this.fillWithBlocks(var1, var3, 8, 0, 0, 12, 4, 4, Block.sandStone.blockID, 0, false); + this.fillWithBlocks(var1, var3, 9, 1, 0, 11, 3, 4, 0, 0, false); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, 9, 1, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, 9, 2, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, 9, 3, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, 10, 3, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, 11, 3, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, 11, 2, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, 11, 1, 1, var3); + this.fillWithBlocks(var1, var3, 4, 1, 1, 8, 3, 3, Block.sandStone.blockID, 0, false); + this.fillWithBlocks(var1, var3, 4, 1, 2, 8, 2, 2, 0, 0, false); + this.fillWithBlocks(var1, var3, 12, 1, 1, 16, 3, 3, Block.sandStone.blockID, 0, false); + this.fillWithBlocks(var1, var3, 12, 1, 2, 16, 2, 2, 0, 0, false); + this.fillWithBlocks(var1, var3, 5, 4, 5, this.scatteredFeatureSizeX - 6, 4, this.scatteredFeatureSizeZ - 6, Block.sandStone.blockID, Block.sandStone.blockID, false); + this.fillWithBlocks(var1, var3, 9, 4, 9, 11, 4, 11, 0, 0, false); + this.fillWithMetadataBlocks(var1, var3, 8, 1, 8, 8, 3, 8, Block.sandStone.blockID, 2, Block.sandStone.blockID, 2, false); + this.fillWithMetadataBlocks(var1, var3, 12, 1, 8, 12, 3, 8, Block.sandStone.blockID, 2, Block.sandStone.blockID, 2, false); + this.fillWithMetadataBlocks(var1, var3, 8, 1, 12, 8, 3, 12, Block.sandStone.blockID, 2, Block.sandStone.blockID, 2, false); + this.fillWithMetadataBlocks(var1, var3, 12, 1, 12, 12, 3, 12, Block.sandStone.blockID, 2, Block.sandStone.blockID, 2, false); + this.fillWithBlocks(var1, var3, 1, 1, 5, 4, 4, 11, Block.sandStone.blockID, Block.sandStone.blockID, false); + this.fillWithBlocks(var1, var3, this.scatteredFeatureSizeX - 5, 1, 5, this.scatteredFeatureSizeX - 2, 4, 11, Block.sandStone.blockID, Block.sandStone.blockID, false); + this.fillWithBlocks(var1, var3, 6, 7, 9, 6, 7, 11, Block.sandStone.blockID, Block.sandStone.blockID, false); + this.fillWithBlocks(var1, var3, this.scatteredFeatureSizeX - 7, 7, 9, this.scatteredFeatureSizeX - 7, 7, 11, Block.sandStone.blockID, Block.sandStone.blockID, false); + this.fillWithMetadataBlocks(var1, var3, 5, 5, 9, 5, 7, 11, Block.sandStone.blockID, 2, Block.sandStone.blockID, 2, false); + this.fillWithMetadataBlocks(var1, var3, this.scatteredFeatureSizeX - 6, 5, 9, this.scatteredFeatureSizeX - 6, 7, 11, Block.sandStone.blockID, 2, Block.sandStone.blockID, 2, false); + this.placeBlockAtCurrentPosition(var1, 0, 0, 5, 5, 10, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 5, 6, 10, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 6, 6, 10, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, this.scatteredFeatureSizeX - 6, 5, 10, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, this.scatteredFeatureSizeX - 6, 6, 10, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, this.scatteredFeatureSizeX - 7, 6, 10, var3); + this.fillWithBlocks(var1, var3, 2, 4, 4, 2, 6, 4, 0, 0, false); + this.fillWithBlocks(var1, var3, this.scatteredFeatureSizeX - 3, 4, 4, this.scatteredFeatureSizeX - 3, 6, 4, 0, 0, false); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, var4, 2, 4, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, var4, 2, 3, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, var4, this.scatteredFeatureSizeX - 3, 4, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, var4, this.scatteredFeatureSizeX - 3, 3, 4, var3); + this.fillWithBlocks(var1, var3, 1, 1, 3, 2, 2, 3, Block.sandStone.blockID, Block.sandStone.blockID, false); + this.fillWithBlocks(var1, var3, this.scatteredFeatureSizeX - 3, 1, 3, this.scatteredFeatureSizeX - 2, 2, 3, Block.sandStone.blockID, Block.sandStone.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, 0, 1, 1, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, 0, this.scatteredFeatureSizeX - 2, 1, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 1, 1, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 1, this.scatteredFeatureSizeX - 2, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, var7, 2, 1, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsSandStone.blockID, var6, this.scatteredFeatureSizeX - 3, 1, 2, var3); + this.fillWithBlocks(var1, var3, 4, 3, 5, 4, 3, 18, Block.sandStone.blockID, Block.sandStone.blockID, false); + this.fillWithBlocks(var1, var3, this.scatteredFeatureSizeX - 5, 3, 5, this.scatteredFeatureSizeX - 5, 3, 17, Block.sandStone.blockID, Block.sandStone.blockID, false); + this.fillWithBlocks(var1, var3, 3, 1, 5, 4, 2, 16, 0, 0, false); + this.fillWithBlocks(var1, var3, this.scatteredFeatureSizeX - 6, 1, 5, this.scatteredFeatureSizeX - 5, 2, 16, 0, 0, false); + + int var10; + for(var10 = 5; var10 <= 17; var10 += 2) { + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, 4, 1, var10, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 1, 4, 2, var10, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, this.scatteredFeatureSizeX - 5, 1, var10, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 1, this.scatteredFeatureSizeX - 5, 2, var10, var3); + } + + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, 10, 0, 7, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, 10, 0, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, 9, 0, 9, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, 11, 0, 9, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, 8, 0, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, 12, 0, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, 7, 0, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, 13, 0, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, 9, 0, 11, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, 11, 0, 11, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, 10, 0, 12, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, 10, 0, 13, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var9, 10, 0, 10, var3); + + for(var10 = 0; var10 <= this.scatteredFeatureSizeX - 1; var10 += this.scatteredFeatureSizeX - 1) { + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10, 2, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10, 2, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10, 3, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10, 3, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10, 3, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10, 4, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 1, var10, 4, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10, 4, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10, 5, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10, 5, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10, 5, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10, 6, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 1, var10, 6, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10, 6, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10, 7, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10, 7, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10, 7, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10, 8, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10, 8, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10, 8, 3, var3); + } + + for(var10 = 2; var10 <= this.scatteredFeatureSizeX - 3; var10 += this.scatteredFeatureSizeX - 3 - 2) { + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10 - 1, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10 + 1, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10 - 1, 3, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10, 3, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10 + 1, 3, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10 - 1, 4, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 1, var10, 4, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10 + 1, 4, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10 - 1, 5, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10, 5, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10 + 1, 5, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10 - 1, 6, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 1, var10, 6, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10 + 1, 6, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10 - 1, 7, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10, 7, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, var10 + 1, 7, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10 - 1, 8, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10, 8, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, var10 + 1, 8, 0, var3); + } + + this.fillWithMetadataBlocks(var1, var3, 8, 4, 0, 12, 6, 0, Block.sandStone.blockID, 2, Block.sandStone.blockID, 2, false); + this.placeBlockAtCurrentPosition(var1, 0, 0, 8, 6, 0, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 12, 6, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, 9, 5, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 1, 10, 5, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, var8, 11, 5, 0, var3); + this.fillWithMetadataBlocks(var1, var3, 8, -14, 8, 12, -11, 12, Block.sandStone.blockID, 2, Block.sandStone.blockID, 2, false); + this.fillWithMetadataBlocks(var1, var3, 8, -10, 8, 12, -10, 12, Block.sandStone.blockID, 1, Block.sandStone.blockID, 1, false); + this.fillWithMetadataBlocks(var1, var3, 8, -9, 8, 12, -9, 12, Block.sandStone.blockID, 2, Block.sandStone.blockID, 2, false); + this.fillWithBlocks(var1, var3, 8, -8, 8, 12, -1, 12, Block.sandStone.blockID, Block.sandStone.blockID, false); + this.fillWithBlocks(var1, var3, 9, -11, 9, 11, -1, 11, 0, 0, false); + this.placeBlockAtCurrentPosition(var1, Block.pressurePlateStone.blockID, 0, 10, -11, 10, var3); + this.fillWithBlocks(var1, var3, 9, -13, 9, 11, -13, 11, Block.tnt.blockID, 0, false); + this.placeBlockAtCurrentPosition(var1, 0, 0, 8, -11, 10, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 8, -10, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 1, 7, -10, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, 7, -11, 10, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 12, -11, 10, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 12, -10, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 1, 13, -10, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, 13, -11, 10, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 10, -11, 8, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 10, -10, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 1, 10, -10, 7, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, 10, -11, 7, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 10, -11, 12, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 10, -10, 12, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 1, 10, -10, 13, var3); + this.placeBlockAtCurrentPosition(var1, Block.sandStone.blockID, 2, 10, -11, 13, var3); + + for(var10 = 0; var10 < 4; ++var10) { + if(!this.field_74940_h[var10]) { + int var11 = Direction.offsetX[var10] * 2; + int var12 = Direction.offsetZ[var10] * 2; + this.field_74940_h[var10] = this.generateStructureChestContents(var1, var3, var2, 10 + var11, -11, 10 + var12, WeightedRandomChestContent.func_92080_a(itemsToGenerateInTemple, new WeightedRandomChestContent[]{Item.enchantedBook.func_92114_b(var2)}), 2 + var2.nextInt(5)); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentScatteredFeatureJunglePyramid.java b/src/net/minecraft/src/ComponentScatteredFeatureJunglePyramid.java new file mode 100644 index 0000000..9b7f5e3 --- /dev/null +++ b/src/net/minecraft/src/ComponentScatteredFeatureJunglePyramid.java @@ -0,0 +1,196 @@ +package net.minecraft.src; + +import java.util.Random; + +public class ComponentScatteredFeatureJunglePyramid extends ComponentScatteredFeature { + private boolean field_74947_h; + private boolean field_74948_i; + private boolean field_74945_j; + private boolean field_74946_k; + private static final WeightedRandomChestContent[] junglePyramidsChestContents = new WeightedRandomChestContent[]{new WeightedRandomChestContent(Item.diamond.itemID, 0, 1, 3, 3), new WeightedRandomChestContent(Item.ingotIron.itemID, 0, 1, 5, 10), new WeightedRandomChestContent(Item.ingotGold.itemID, 0, 2, 7, 15), new WeightedRandomChestContent(Item.emerald.itemID, 0, 1, 3, 2), new WeightedRandomChestContent(Item.bone.itemID, 0, 4, 6, 20), new WeightedRandomChestContent(Item.rottenFlesh.itemID, 0, 3, 7, 16)}; + private static final WeightedRandomChestContent[] junglePyramidsDispenserContents = new WeightedRandomChestContent[]{new WeightedRandomChestContent(Item.arrow.itemID, 0, 2, 7, 30)}; + private static StructureScatteredFeatureStones junglePyramidsRandomScatteredStones = new StructureScatteredFeatureStones((ComponentScatteredFeaturePieces2)null); + + public ComponentScatteredFeatureJunglePyramid(Random var1, int var2, int var3) { + super(var1, var2, 64, var3, 12, 10, 15); + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(!this.func_74935_a(var1, var3, 0)) { + return false; + } else { + int var4 = this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 3); + int var5 = this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 2); + int var6 = this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 0); + int var7 = this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 1); + this.fillWithRandomizedBlocks(var1, var3, 0, -4, 0, this.scatteredFeatureSizeX - 1, 0, this.scatteredFeatureSizeZ - 1, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 2, 1, 2, 9, 2, 2, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 2, 1, 12, 9, 2, 12, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 2, 1, 3, 2, 2, 11, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 9, 1, 3, 9, 2, 11, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 1, 3, 1, 10, 6, 1, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 1, 3, 13, 10, 6, 13, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 1, 3, 2, 1, 6, 12, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 10, 3, 2, 10, 6, 12, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 2, 3, 2, 9, 3, 12, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 2, 6, 2, 9, 6, 12, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 3, 7, 3, 8, 7, 11, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 4, 8, 4, 7, 8, 10, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithAir(var1, var3, 3, 1, 3, 8, 2, 11); + this.fillWithAir(var1, var3, 4, 3, 6, 7, 3, 9); + this.fillWithAir(var1, var3, 2, 4, 2, 9, 5, 12); + this.fillWithAir(var1, var3, 4, 6, 5, 7, 6, 9); + this.fillWithAir(var1, var3, 5, 7, 6, 6, 7, 8); + this.fillWithAir(var1, var3, 5, 1, 2, 6, 2, 2); + this.fillWithAir(var1, var3, 5, 2, 12, 6, 2, 12); + this.fillWithAir(var1, var3, 5, 5, 1, 6, 5, 1); + this.fillWithAir(var1, var3, 5, 5, 13, 6, 5, 13); + this.placeBlockAtCurrentPosition(var1, 0, 0, 1, 5, 5, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 10, 5, 5, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 1, 5, 9, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 10, 5, 9, var3); + + int var8; + for(var8 = 0; var8 <= 14; var8 += 14) { + this.fillWithRandomizedBlocks(var1, var3, 2, 4, var8, 2, 5, var8, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 4, 4, var8, 4, 5, var8, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 7, 4, var8, 7, 5, var8, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 9, 4, var8, 9, 5, var8, false, var2, junglePyramidsRandomScatteredStones); + } + + this.fillWithRandomizedBlocks(var1, var3, 5, 6, 0, 6, 6, 0, false, var2, junglePyramidsRandomScatteredStones); + + for(var8 = 0; var8 <= 11; var8 += 11) { + for(int var9 = 2; var9 <= 12; var9 += 2) { + this.fillWithRandomizedBlocks(var1, var3, var8, 4, var9, var8, 5, var9, false, var2, junglePyramidsRandomScatteredStones); + } + + this.fillWithRandomizedBlocks(var1, var3, var8, 6, 5, var8, 6, 5, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, var8, 6, 9, var8, 6, 9, false, var2, junglePyramidsRandomScatteredStones); + } + + this.fillWithRandomizedBlocks(var1, var3, 2, 7, 2, 2, 9, 2, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 9, 7, 2, 9, 9, 2, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 2, 7, 12, 2, 9, 12, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 9, 7, 12, 9, 9, 12, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 4, 9, 4, 4, 9, 4, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 7, 9, 4, 7, 9, 4, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 4, 9, 10, 4, 9, 10, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 7, 9, 10, 7, 9, 10, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 5, 9, 7, 6, 9, 7, false, var2, junglePyramidsRandomScatteredStones); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var4, 5, 9, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var4, 6, 9, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var5, 5, 9, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var5, 6, 9, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var4, 4, 0, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var4, 5, 0, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var4, 6, 0, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var4, 7, 0, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var4, 4, 1, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var4, 4, 2, 9, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var4, 4, 3, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var4, 7, 1, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var4, 7, 2, 9, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var4, 7, 3, 10, var3); + this.fillWithRandomizedBlocks(var1, var3, 4, 1, 9, 4, 1, 9, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 7, 1, 9, 7, 1, 9, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 4, 1, 10, 7, 2, 10, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 5, 4, 5, 6, 4, 5, false, var2, junglePyramidsRandomScatteredStones); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var6, 4, 4, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var7, 7, 4, 5, var3); + + for(var8 = 0; var8 < 4; ++var8) { + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var5, 5, 0 - var8, 6 + var8, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var5, 6, 0 - var8, 6 + var8, var3); + this.fillWithAir(var1, var3, 5, 0 - var8, 7 + var8, 6, 0 - var8, 9 + var8); + } + + this.fillWithAir(var1, var3, 1, -3, 12, 10, -1, 13); + this.fillWithAir(var1, var3, 1, -3, 1, 3, -1, 13); + this.fillWithAir(var1, var3, 1, -3, 1, 9, -1, 5); + + for(var8 = 1; var8 <= 13; var8 += 2) { + this.fillWithRandomizedBlocks(var1, var3, 1, -3, var8, 1, -2, var8, false, var2, junglePyramidsRandomScatteredStones); + } + + for(var8 = 2; var8 <= 12; var8 += 2) { + this.fillWithRandomizedBlocks(var1, var3, 1, -1, var8, 3, -1, var8, false, var2, junglePyramidsRandomScatteredStones); + } + + this.fillWithRandomizedBlocks(var1, var3, 2, -2, 1, 5, -2, 1, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 7, -2, 1, 9, -2, 1, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 6, -3, 1, 6, -3, 1, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 6, -1, 1, 6, -1, 1, false, var2, junglePyramidsRandomScatteredStones); + this.placeBlockAtCurrentPosition(var1, Block.tripWireSource.blockID, this.getMetadataWithOffset(Block.tripWireSource.blockID, 3) | 4, 1, -3, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.tripWireSource.blockID, this.getMetadataWithOffset(Block.tripWireSource.blockID, 1) | 4, 4, -3, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.tripWire.blockID, 4, 2, -3, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.tripWire.blockID, 4, 3, -3, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneWire.blockID, 0, 5, -3, 7, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneWire.blockID, 0, 5, -3, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneWire.blockID, 0, 5, -3, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneWire.blockID, 0, 5, -3, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneWire.blockID, 0, 5, -3, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneWire.blockID, 0, 5, -3, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneWire.blockID, 0, 5, -3, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneWire.blockID, 0, 4, -3, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestoneMossy.blockID, 0, 3, -3, 1, var3); + if(!this.field_74945_j) { + this.field_74945_j = this.generateStructureDispenserContents(var1, var3, var2, 3, -2, 1, 2, junglePyramidsDispenserContents, 2); + } + + this.placeBlockAtCurrentPosition(var1, Block.vine.blockID, 15, 3, -2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.tripWireSource.blockID, this.getMetadataWithOffset(Block.tripWireSource.blockID, 2) | 4, 7, -3, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.tripWireSource.blockID, this.getMetadataWithOffset(Block.tripWireSource.blockID, 0) | 4, 7, -3, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.tripWire.blockID, 4, 7, -3, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.tripWire.blockID, 4, 7, -3, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.tripWire.blockID, 4, 7, -3, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneWire.blockID, 0, 8, -3, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneWire.blockID, 0, 9, -3, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneWire.blockID, 0, 9, -3, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestoneMossy.blockID, 0, 9, -3, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneWire.blockID, 0, 9, -2, 4, var3); + if(!this.field_74946_k) { + this.field_74946_k = this.generateStructureDispenserContents(var1, var3, var2, 9, -2, 3, 4, junglePyramidsDispenserContents, 2); + } + + this.placeBlockAtCurrentPosition(var1, Block.vine.blockID, 15, 8, -1, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.vine.blockID, 15, 8, -2, 3, var3); + if(!this.field_74947_h) { + this.field_74947_h = this.generateStructureChestContents(var1, var3, var2, 8, -3, 3, WeightedRandomChestContent.func_92080_a(junglePyramidsChestContents, new WeightedRandomChestContent[]{Item.enchantedBook.func_92114_b(var2)}), 2 + var2.nextInt(5)); + } + + this.placeBlockAtCurrentPosition(var1, Block.cobblestoneMossy.blockID, 0, 9, -3, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestoneMossy.blockID, 0, 8, -3, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestoneMossy.blockID, 0, 4, -3, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestoneMossy.blockID, 0, 5, -2, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestoneMossy.blockID, 0, 5, -1, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestoneMossy.blockID, 0, 6, -3, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestoneMossy.blockID, 0, 7, -2, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestoneMossy.blockID, 0, 7, -1, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestoneMossy.blockID, 0, 8, -3, 5, var3); + this.fillWithRandomizedBlocks(var1, var3, 9, -1, 1, 9, -1, 5, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithAir(var1, var3, 8, -3, 8, 10, -1, 10); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 3, 8, -2, 11, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 3, 9, -2, 11, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 3, 10, -2, 11, var3); + this.placeBlockAtCurrentPosition(var1, Block.lever.blockID, BlockLever.invertMetadata(this.getMetadataWithOffset(Block.lever.blockID, 2)), 8, -2, 12, var3); + this.placeBlockAtCurrentPosition(var1, Block.lever.blockID, BlockLever.invertMetadata(this.getMetadataWithOffset(Block.lever.blockID, 2)), 9, -2, 12, var3); + this.placeBlockAtCurrentPosition(var1, Block.lever.blockID, BlockLever.invertMetadata(this.getMetadataWithOffset(Block.lever.blockID, 2)), 10, -2, 12, var3); + this.fillWithRandomizedBlocks(var1, var3, 8, -3, 8, 8, -3, 10, false, var2, junglePyramidsRandomScatteredStones); + this.fillWithRandomizedBlocks(var1, var3, 10, -3, 8, 10, -3, 10, false, var2, junglePyramidsRandomScatteredStones); + this.placeBlockAtCurrentPosition(var1, Block.cobblestoneMossy.blockID, 0, 10, -2, 9, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneWire.blockID, 0, 8, -2, 9, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneWire.blockID, 0, 8, -2, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneWire.blockID, 0, 10, -1, 9, var3); + this.placeBlockAtCurrentPosition(var1, Block.pistonStickyBase.blockID, 1, 9, -2, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.pistonStickyBase.blockID, this.getMetadataWithOffset(Block.pistonStickyBase.blockID, 4), 10, -2, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.pistonStickyBase.blockID, this.getMetadataWithOffset(Block.pistonStickyBase.blockID, 4), 10, -1, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.redstoneRepeaterIdle.blockID, this.getMetadataWithOffset(Block.redstoneRepeaterIdle.blockID, 2), 10, -2, 10, var3); + if(!this.field_74948_i) { + this.field_74948_i = this.generateStructureChestContents(var1, var3, var2, 9, -3, 10, WeightedRandomChestContent.func_92080_a(junglePyramidsChestContents, new WeightedRandomChestContent[]{Item.enchantedBook.func_92114_b(var2)}), 2 + var2.nextInt(5)); + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentScatteredFeaturePieces2.java b/src/net/minecraft/src/ComponentScatteredFeaturePieces2.java new file mode 100644 index 0000000..1db727b --- /dev/null +++ b/src/net/minecraft/src/ComponentScatteredFeaturePieces2.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +class ComponentScatteredFeaturePieces2 { +} diff --git a/src/net/minecraft/src/ComponentScatteredFeatureSwampHut.java b/src/net/minecraft/src/ComponentScatteredFeatureSwampHut.java new file mode 100644 index 0000000..39fe831 --- /dev/null +++ b/src/net/minecraft/src/ComponentScatteredFeatureSwampHut.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +import java.util.Random; + +public class ComponentScatteredFeatureSwampHut extends ComponentScatteredFeature { + private boolean hasWitch; + + public ComponentScatteredFeatureSwampHut(Random var1, int var2, int var3) { + super(var1, var2, 64, var3, 7, 5, 9); + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(!this.func_74935_a(var1, var3, 0)) { + return false; + } else { + this.fillWithMetadataBlocks(var1, var3, 1, 1, 1, 5, 1, 7, Block.planks.blockID, 1, Block.planks.blockID, 1, false); + this.fillWithMetadataBlocks(var1, var3, 1, 4, 2, 5, 4, 7, Block.planks.blockID, 1, Block.planks.blockID, 1, false); + this.fillWithMetadataBlocks(var1, var3, 2, 1, 0, 4, 1, 0, Block.planks.blockID, 1, Block.planks.blockID, 1, false); + this.fillWithMetadataBlocks(var1, var3, 2, 2, 2, 3, 3, 2, Block.planks.blockID, 1, Block.planks.blockID, 1, false); + this.fillWithMetadataBlocks(var1, var3, 1, 2, 3, 1, 3, 6, Block.planks.blockID, 1, Block.planks.blockID, 1, false); + this.fillWithMetadataBlocks(var1, var3, 5, 2, 3, 5, 3, 6, Block.planks.blockID, 1, Block.planks.blockID, 1, false); + this.fillWithMetadataBlocks(var1, var3, 2, 2, 7, 4, 3, 7, Block.planks.blockID, 1, Block.planks.blockID, 1, false); + this.fillWithBlocks(var1, var3, 1, 0, 2, 1, 3, 2, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 5, 0, 2, 5, 3, 2, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 1, 0, 7, 1, 3, 7, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 5, 0, 7, 5, 3, 7, Block.wood.blockID, Block.wood.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 2, 3, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 3, 3, 7, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 1, 3, 4, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 5, 3, 4, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 5, 3, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.flowerPot.blockID, 7, 1, 3, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.workbench.blockID, 0, 3, 2, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.cauldron.blockID, 0, 4, 2, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 1, 2, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 5, 2, 1, var3); + int var4 = this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 3); + int var5 = this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 1); + int var6 = this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 0); + int var7 = this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 2); + this.fillWithMetadataBlocks(var1, var3, 0, 4, 1, 6, 4, 1, Block.stairsWoodSpruce.blockID, var4, Block.stairsWoodSpruce.blockID, var4, false); + this.fillWithMetadataBlocks(var1, var3, 0, 4, 2, 0, 4, 7, Block.stairsWoodSpruce.blockID, var6, Block.stairsWoodSpruce.blockID, var6, false); + this.fillWithMetadataBlocks(var1, var3, 6, 4, 2, 6, 4, 7, Block.stairsWoodSpruce.blockID, var5, Block.stairsWoodSpruce.blockID, var5, false); + this.fillWithMetadataBlocks(var1, var3, 0, 4, 8, 6, 4, 8, Block.stairsWoodSpruce.blockID, var7, Block.stairsWoodSpruce.blockID, var7, false); + + int var8; + int var9; + for(var8 = 2; var8 <= 7; var8 += 5) { + for(var9 = 1; var9 <= 5; var9 += 4) { + this.fillCurrentPositionBlocksDownwards(var1, Block.wood.blockID, 0, var9, -1, var8, var3); + } + } + + if(!this.hasWitch) { + var8 = this.getXWithOffset(2, 5); + var9 = this.getYWithOffset(2); + int var10 = this.getZWithOffset(2, 5); + if(var3.isVecInside(var8, var9, var10)) { + this.hasWitch = true; + EntityWitch var11 = new EntityWitch(var1); + var11.setLocationAndAngles((double)var8 + 0.5D, (double)var9, (double)var10 + 0.5D, 0.0F, 0.0F); + var11.initCreature(); + var1.spawnEntityInWorld(var11); + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentStronghold.java b/src/net/minecraft/src/ComponentStronghold.java new file mode 100644 index 0000000..ef1a54e --- /dev/null +++ b/src/net/minecraft/src/ComponentStronghold.java @@ -0,0 +1,119 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +abstract class ComponentStronghold extends StructureComponent { + protected ComponentStronghold(int var1) { + super(var1); + } + + protected void placeDoor(World var1, Random var2, StructureBoundingBox var3, EnumDoor var4, int var5, int var6, int var7) { + switch(EnumDoorHelper.doorEnum[var4.ordinal()]) { + case 1: + default: + this.fillWithBlocks(var1, var3, var5, var6, var7, var5 + 3 - 1, var6 + 3 - 1, var7, 0, 0, false); + break; + case 2: + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, var5, var6, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, var5, var6 + 1, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, var5, var6 + 2, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, var5 + 1, var6 + 2, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, var5 + 2, var6 + 2, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, var5 + 2, var6 + 1, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, var5 + 2, var6, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.doorWood.blockID, 0, var5 + 1, var6, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.doorWood.blockID, 8, var5 + 1, var6 + 1, var7, var3); + break; + case 3: + this.placeBlockAtCurrentPosition(var1, 0, 0, var5 + 1, var6, var7, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, var5 + 1, var6 + 1, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.fenceIron.blockID, 0, var5, var6, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.fenceIron.blockID, 0, var5, var6 + 1, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.fenceIron.blockID, 0, var5, var6 + 2, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.fenceIron.blockID, 0, var5 + 1, var6 + 2, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.fenceIron.blockID, 0, var5 + 2, var6 + 2, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.fenceIron.blockID, 0, var5 + 2, var6 + 1, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.fenceIron.blockID, 0, var5 + 2, var6, var7, var3); + break; + case 4: + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, var5, var6, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, var5, var6 + 1, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, var5, var6 + 2, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, var5 + 1, var6 + 2, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, var5 + 2, var6 + 2, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, var5 + 2, var6 + 1, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, var5 + 2, var6, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.doorIron.blockID, 0, var5 + 1, var6, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.doorIron.blockID, 8, var5 + 1, var6 + 1, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneButton.blockID, this.getMetadataWithOffset(Block.stoneButton.blockID, 4), var5 + 2, var6 + 1, var7 + 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneButton.blockID, this.getMetadataWithOffset(Block.stoneButton.blockID, 3), var5 + 2, var6 + 1, var7 - 1, var3); + } + + } + + protected EnumDoor getRandomDoor(Random var1) { + int var2 = var1.nextInt(5); + switch(var2) { + case 0: + case 1: + default: + return EnumDoor.OPENING; + case 2: + return EnumDoor.WOOD_DOOR; + case 3: + return EnumDoor.GRATES; + case 4: + return EnumDoor.IRON_DOOR; + } + } + + protected StructureComponent getNextComponentNormal(ComponentStrongholdStairs2 var1, List var2, Random var3, int var4, int var5) { + switch(this.coordBaseMode) { + case 0: + return StructureStrongholdPieces.getNextValidComponentAccess(var1, var2, var3, this.boundingBox.minX + var4, this.boundingBox.minY + var5, this.boundingBox.maxZ + 1, this.coordBaseMode, this.getComponentType()); + case 1: + return StructureStrongholdPieces.getNextValidComponentAccess(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY + var5, this.boundingBox.minZ + var4, this.coordBaseMode, this.getComponentType()); + case 2: + return StructureStrongholdPieces.getNextValidComponentAccess(var1, var2, var3, this.boundingBox.minX + var4, this.boundingBox.minY + var5, this.boundingBox.minZ - 1, this.coordBaseMode, this.getComponentType()); + case 3: + return StructureStrongholdPieces.getNextValidComponentAccess(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY + var5, this.boundingBox.minZ + var4, this.coordBaseMode, this.getComponentType()); + default: + return null; + } + } + + protected StructureComponent getNextComponentX(ComponentStrongholdStairs2 var1, List var2, Random var3, int var4, int var5) { + switch(this.coordBaseMode) { + case 0: + return StructureStrongholdPieces.getNextValidComponentAccess(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY + var4, this.boundingBox.minZ + var5, 1, this.getComponentType()); + case 1: + return StructureStrongholdPieces.getNextValidComponentAccess(var1, var2, var3, this.boundingBox.minX + var5, this.boundingBox.minY + var4, this.boundingBox.minZ - 1, 2, this.getComponentType()); + case 2: + return StructureStrongholdPieces.getNextValidComponentAccess(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY + var4, this.boundingBox.minZ + var5, 1, this.getComponentType()); + case 3: + return StructureStrongholdPieces.getNextValidComponentAccess(var1, var2, var3, this.boundingBox.minX + var5, this.boundingBox.minY + var4, this.boundingBox.minZ - 1, 2, this.getComponentType()); + default: + return null; + } + } + + protected StructureComponent getNextComponentZ(ComponentStrongholdStairs2 var1, List var2, Random var3, int var4, int var5) { + switch(this.coordBaseMode) { + case 0: + return StructureStrongholdPieces.getNextValidComponentAccess(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY + var4, this.boundingBox.minZ + var5, 3, this.getComponentType()); + case 1: + return StructureStrongholdPieces.getNextValidComponentAccess(var1, var2, var3, this.boundingBox.minX + var5, this.boundingBox.minY + var4, this.boundingBox.maxZ + 1, 0, this.getComponentType()); + case 2: + return StructureStrongholdPieces.getNextValidComponentAccess(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY + var4, this.boundingBox.minZ + var5, 3, this.getComponentType()); + case 3: + return StructureStrongholdPieces.getNextValidComponentAccess(var1, var2, var3, this.boundingBox.minX + var5, this.boundingBox.minY + var4, this.boundingBox.maxZ + 1, 0, this.getComponentType()); + default: + return null; + } + } + + protected static boolean canStrongholdGoDeeper(StructureBoundingBox var0) { + return var0 != null && var0.minY > 10; + } +} diff --git a/src/net/minecraft/src/ComponentStrongholdChestCorridor.java b/src/net/minecraft/src/ComponentStrongholdChestCorridor.java new file mode 100644 index 0000000..4e795b6 --- /dev/null +++ b/src/net/minecraft/src/ComponentStrongholdChestCorridor.java @@ -0,0 +1,58 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentStrongholdChestCorridor extends ComponentStronghold { + private static final WeightedRandomChestContent[] strongholdChestContents = new WeightedRandomChestContent[]{new WeightedRandomChestContent(Item.enderPearl.itemID, 0, 1, 1, 10), new WeightedRandomChestContent(Item.diamond.itemID, 0, 1, 3, 3), new WeightedRandomChestContent(Item.ingotIron.itemID, 0, 1, 5, 10), new WeightedRandomChestContent(Item.ingotGold.itemID, 0, 1, 3, 5), new WeightedRandomChestContent(Item.redstone.itemID, 0, 4, 9, 5), new WeightedRandomChestContent(Item.bread.itemID, 0, 1, 3, 15), new WeightedRandomChestContent(Item.appleRed.itemID, 0, 1, 3, 15), new WeightedRandomChestContent(Item.pickaxeIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.swordIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.plateIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.helmetIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.legsIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.bootsIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.appleGold.itemID, 0, 1, 1, 1)}; + private final EnumDoor doorType; + private boolean hasMadeChest; + + public ComponentStrongholdChestCorridor(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.doorType = this.getRandomDoor(var2); + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentNormal((ComponentStrongholdStairs2)var1, var2, var3, 1, 1); + } + + public static ComponentStrongholdChestCorridor findValidPlacement(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, -1, 0, 5, 5, 7, var5); + return canStrongholdGoDeeper(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentStrongholdChestCorridor(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.isLiquidInStructureBoundingBox(var1, var3)) { + return false; + } else { + this.fillWithRandomizedBlocks(var1, var3, 0, 0, 0, 4, 4, 6, true, var2, StructureStrongholdPieces.getStrongholdStones()); + this.placeDoor(var1, var2, var3, this.doorType, 1, 1, 0); + this.placeDoor(var1, var2, var3, EnumDoor.OPENING, 1, 1, 6); + this.fillWithBlocks(var1, var3, 3, 1, 2, 3, 1, 4, Block.stoneBrick.blockID, Block.stoneBrick.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 5, 3, 1, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 5, 3, 1, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 5, 3, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 5, 3, 2, 4, var3); + + int var4; + for(var4 = 2; var4 <= 4; ++var4) { + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 5, 2, 1, var4, var3); + } + + if(!this.hasMadeChest) { + var4 = this.getYWithOffset(2); + int var5 = this.getXWithOffset(3, 3); + int var6 = this.getZWithOffset(3, 3); + if(var3.isVecInside(var5, var4, var6)) { + this.hasMadeChest = true; + this.generateStructureChestContents(var1, var3, var2, 3, 2, 3, WeightedRandomChestContent.func_92080_a(strongholdChestContents, new WeightedRandomChestContent[]{Item.enchantedBook.func_92114_b(var2)}), 2 + var2.nextInt(2)); + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentStrongholdCorridor.java b/src/net/minecraft/src/ComponentStrongholdCorridor.java new file mode 100644 index 0000000..8769eae --- /dev/null +++ b/src/net/minecraft/src/ComponentStrongholdCorridor.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentStrongholdCorridor extends ComponentStronghold { + private final int field_74993_a; + + public ComponentStrongholdCorridor(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + this.field_74993_a = var4 != 2 && var4 != 0 ? var3.getXSize() : var3.getZSize(); + } + + public static StructureBoundingBox func_74992_a(List var0, Random var1, int var2, int var3, int var4, int var5) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, -1, 0, 5, 5, 4, var5); + StructureComponent var8 = StructureComponent.findIntersecting(var0, var7); + if(var8 == null) { + return null; + } else { + if(var8.getBoundingBox().minY == var7.minY) { + for(int var9 = 3; var9 >= 1; --var9) { + var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, -1, 0, 5, 5, var9 - 1, var5); + if(!var8.getBoundingBox().intersectsWith(var7)) { + return StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, -1, 0, 5, 5, var9, var5); + } + } + } + + return null; + } + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.isLiquidInStructureBoundingBox(var1, var3)) { + return false; + } else { + for(int var4 = 0; var4 < this.field_74993_a; ++var4) { + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 0, 0, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 1, 0, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 2, 0, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 3, 0, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 4, 0, var4, var3); + + for(int var5 = 1; var5 <= 3; ++var5) { + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 0, var5, var4, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 1, var5, var4, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 2, var5, var4, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 3, var5, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 4, var5, var4, var3); + } + + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 0, 4, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 1, 4, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 2, 4, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 3, 4, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 4, 4, var4, var3); + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentStrongholdCrossing.java b/src/net/minecraft/src/ComponentStrongholdCrossing.java new file mode 100644 index 0000000..f967d3d --- /dev/null +++ b/src/net/minecraft/src/ComponentStrongholdCrossing.java @@ -0,0 +1,96 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentStrongholdCrossing extends ComponentStronghold { + protected final EnumDoor doorType; + private boolean field_74996_b; + private boolean field_74997_c; + private boolean field_74995_d; + private boolean field_74999_h; + + public ComponentStrongholdCrossing(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.doorType = this.getRandomDoor(var2); + this.boundingBox = var3; + this.field_74996_b = var2.nextBoolean(); + this.field_74997_c = var2.nextBoolean(); + this.field_74995_d = var2.nextBoolean(); + this.field_74999_h = var2.nextInt(3) > 0; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + int var4 = 3; + int var5 = 5; + if(this.coordBaseMode == 1 || this.coordBaseMode == 2) { + var4 = 8 - var4; + var5 = 8 - var5; + } + + this.getNextComponentNormal((ComponentStrongholdStairs2)var1, var2, var3, 5, 1); + if(this.field_74996_b) { + this.getNextComponentX((ComponentStrongholdStairs2)var1, var2, var3, var4, 1); + } + + if(this.field_74997_c) { + this.getNextComponentX((ComponentStrongholdStairs2)var1, var2, var3, var5, 7); + } + + if(this.field_74995_d) { + this.getNextComponentZ((ComponentStrongholdStairs2)var1, var2, var3, var4, 1); + } + + if(this.field_74999_h) { + this.getNextComponentZ((ComponentStrongholdStairs2)var1, var2, var3, var5, 7); + } + + } + + public static ComponentStrongholdCrossing findValidPlacement(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -4, -3, 0, 10, 9, 11, var5); + return canStrongholdGoDeeper(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentStrongholdCrossing(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.isLiquidInStructureBoundingBox(var1, var3)) { + return false; + } else { + this.fillWithRandomizedBlocks(var1, var3, 0, 0, 0, 9, 8, 10, true, var2, StructureStrongholdPieces.getStrongholdStones()); + this.placeDoor(var1, var2, var3, this.doorType, 4, 3, 0); + if(this.field_74996_b) { + this.fillWithBlocks(var1, var3, 0, 3, 1, 0, 5, 3, 0, 0, false); + } + + if(this.field_74995_d) { + this.fillWithBlocks(var1, var3, 9, 3, 1, 9, 5, 3, 0, 0, false); + } + + if(this.field_74997_c) { + this.fillWithBlocks(var1, var3, 0, 5, 7, 0, 7, 9, 0, 0, false); + } + + if(this.field_74999_h) { + this.fillWithBlocks(var1, var3, 9, 5, 7, 9, 7, 9, 0, 0, false); + } + + this.fillWithBlocks(var1, var3, 5, 1, 10, 7, 3, 10, 0, 0, false); + this.fillWithRandomizedBlocks(var1, var3, 1, 2, 1, 8, 2, 6, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithRandomizedBlocks(var1, var3, 4, 1, 5, 4, 4, 9, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithRandomizedBlocks(var1, var3, 8, 1, 5, 8, 4, 9, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithRandomizedBlocks(var1, var3, 1, 4, 7, 3, 4, 9, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithRandomizedBlocks(var1, var3, 1, 3, 5, 3, 3, 6, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithBlocks(var1, var3, 1, 3, 4, 3, 3, 4, Block.stoneSingleSlab.blockID, Block.stoneSingleSlab.blockID, false); + this.fillWithBlocks(var1, var3, 1, 4, 6, 3, 4, 6, Block.stoneSingleSlab.blockID, Block.stoneSingleSlab.blockID, false); + this.fillWithRandomizedBlocks(var1, var3, 5, 1, 7, 7, 1, 8, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithBlocks(var1, var3, 5, 1, 9, 7, 1, 9, Block.stoneSingleSlab.blockID, Block.stoneSingleSlab.blockID, false); + this.fillWithBlocks(var1, var3, 5, 2, 7, 7, 2, 7, Block.stoneSingleSlab.blockID, Block.stoneSingleSlab.blockID, false); + this.fillWithBlocks(var1, var3, 4, 5, 7, 4, 5, 9, Block.stoneSingleSlab.blockID, Block.stoneSingleSlab.blockID, false); + this.fillWithBlocks(var1, var3, 8, 5, 7, 8, 5, 9, Block.stoneSingleSlab.blockID, Block.stoneSingleSlab.blockID, false); + this.fillWithBlocks(var1, var3, 5, 5, 7, 7, 5, 9, Block.stoneDoubleSlab.blockID, Block.stoneDoubleSlab.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 6, 5, 6, var3); + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentStrongholdLeftTurn.java b/src/net/minecraft/src/ComponentStrongholdLeftTurn.java new file mode 100644 index 0000000..8b4c9a2 --- /dev/null +++ b/src/net/minecraft/src/ComponentStrongholdLeftTurn.java @@ -0,0 +1,45 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentStrongholdLeftTurn extends ComponentStronghold { + protected final EnumDoor doorType; + + public ComponentStrongholdLeftTurn(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.doorType = this.getRandomDoor(var2); + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + if(this.coordBaseMode != 2 && this.coordBaseMode != 3) { + this.getNextComponentZ((ComponentStrongholdStairs2)var1, var2, var3, 1, 1); + } else { + this.getNextComponentX((ComponentStrongholdStairs2)var1, var2, var3, 1, 1); + } + + } + + public static ComponentStrongholdLeftTurn findValidPlacement(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, -1, 0, 5, 5, 5, var5); + return canStrongholdGoDeeper(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentStrongholdLeftTurn(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.isLiquidInStructureBoundingBox(var1, var3)) { + return false; + } else { + this.fillWithRandomizedBlocks(var1, var3, 0, 0, 0, 4, 4, 4, true, var2, StructureStrongholdPieces.getStrongholdStones()); + this.placeDoor(var1, var2, var3, this.doorType, 1, 1, 0); + if(this.coordBaseMode != 2 && this.coordBaseMode != 3) { + this.fillWithBlocks(var1, var3, 4, 1, 1, 4, 3, 3, 0, 0, false); + } else { + this.fillWithBlocks(var1, var3, 0, 1, 1, 0, 3, 3, 0, 0, false); + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentStrongholdLibrary.java b/src/net/minecraft/src/ComponentStrongholdLibrary.java new file mode 100644 index 0000000..e3a98e5 --- /dev/null +++ b/src/net/minecraft/src/ComponentStrongholdLibrary.java @@ -0,0 +1,125 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentStrongholdLibrary extends ComponentStronghold { + private static final WeightedRandomChestContent[] strongholdLibraryChestContents = new WeightedRandomChestContent[]{new WeightedRandomChestContent(Item.book.itemID, 0, 1, 3, 20), new WeightedRandomChestContent(Item.paper.itemID, 0, 2, 7, 20), new WeightedRandomChestContent(Item.emptyMap.itemID, 0, 1, 1, 1), new WeightedRandomChestContent(Item.compass.itemID, 0, 1, 1, 1)}; + protected final EnumDoor doorType; + private final boolean isLargeRoom; + + public ComponentStrongholdLibrary(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.doorType = this.getRandomDoor(var2); + this.boundingBox = var3; + this.isLargeRoom = var3.getYSize() > 6; + } + + public static ComponentStrongholdLibrary findValidPlacement(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -4, -1, 0, 14, 11, 15, var5); + if(!canStrongholdGoDeeper(var7) || StructureComponent.findIntersecting(var0, var7) != null) { + var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -4, -1, 0, 14, 6, 15, var5); + if(!canStrongholdGoDeeper(var7) || StructureComponent.findIntersecting(var0, var7) != null) { + return null; + } + } + + return new ComponentStrongholdLibrary(var6, var1, var7, var5); + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.isLiquidInStructureBoundingBox(var1, var3)) { + return false; + } else { + byte var4 = 11; + if(!this.isLargeRoom) { + var4 = 6; + } + + this.fillWithRandomizedBlocks(var1, var3, 0, 0, 0, 13, var4 - 1, 14, true, var2, StructureStrongholdPieces.getStrongholdStones()); + this.placeDoor(var1, var2, var3, this.doorType, 4, 1, 0); + this.randomlyFillWithBlocks(var1, var3, var2, 0.07F, 2, 1, 1, 11, 4, 13, Block.web.blockID, Block.web.blockID, false); + + int var7; + for(var7 = 1; var7 <= 13; ++var7) { + if((var7 - 1) % 4 == 0) { + this.fillWithBlocks(var1, var3, 1, 1, var7, 1, 4, var7, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 12, 1, var7, 12, 4, var7, Block.planks.blockID, Block.planks.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 2, 3, var7, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 11, 3, var7, var3); + if(this.isLargeRoom) { + this.fillWithBlocks(var1, var3, 1, 6, var7, 1, 9, var7, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 12, 6, var7, 12, 9, var7, Block.planks.blockID, Block.planks.blockID, false); + } + } else { + this.fillWithBlocks(var1, var3, 1, 1, var7, 1, 4, var7, Block.bookShelf.blockID, Block.bookShelf.blockID, false); + this.fillWithBlocks(var1, var3, 12, 1, var7, 12, 4, var7, Block.bookShelf.blockID, Block.bookShelf.blockID, false); + if(this.isLargeRoom) { + this.fillWithBlocks(var1, var3, 1, 6, var7, 1, 9, var7, Block.bookShelf.blockID, Block.bookShelf.blockID, false); + this.fillWithBlocks(var1, var3, 12, 6, var7, 12, 9, var7, Block.bookShelf.blockID, Block.bookShelf.blockID, false); + } + } + } + + for(var7 = 3; var7 < 12; var7 += 2) { + this.fillWithBlocks(var1, var3, 3, 1, var7, 4, 3, var7, Block.bookShelf.blockID, Block.bookShelf.blockID, false); + this.fillWithBlocks(var1, var3, 6, 1, var7, 7, 3, var7, Block.bookShelf.blockID, Block.bookShelf.blockID, false); + this.fillWithBlocks(var1, var3, 9, 1, var7, 10, 3, var7, Block.bookShelf.blockID, Block.bookShelf.blockID, false); + } + + if(this.isLargeRoom) { + this.fillWithBlocks(var1, var3, 1, 5, 1, 3, 5, 13, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 10, 5, 1, 12, 5, 13, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 4, 5, 1, 9, 5, 2, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 4, 5, 12, 9, 5, 13, Block.planks.blockID, Block.planks.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 9, 5, 11, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 8, 5, 11, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 9, 5, 10, var3); + this.fillWithBlocks(var1, var3, 3, 6, 2, 3, 6, 12, Block.fence.blockID, Block.fence.blockID, false); + this.fillWithBlocks(var1, var3, 10, 6, 2, 10, 6, 10, Block.fence.blockID, Block.fence.blockID, false); + this.fillWithBlocks(var1, var3, 4, 6, 2, 9, 6, 2, Block.fence.blockID, Block.fence.blockID, false); + this.fillWithBlocks(var1, var3, 4, 6, 12, 8, 6, 12, Block.fence.blockID, Block.fence.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 9, 6, 11, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 8, 6, 11, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 9, 6, 10, var3); + var7 = this.getMetadataWithOffset(Block.ladder.blockID, 3); + this.placeBlockAtCurrentPosition(var1, Block.ladder.blockID, var7, 10, 1, 13, var3); + this.placeBlockAtCurrentPosition(var1, Block.ladder.blockID, var7, 10, 2, 13, var3); + this.placeBlockAtCurrentPosition(var1, Block.ladder.blockID, var7, 10, 3, 13, var3); + this.placeBlockAtCurrentPosition(var1, Block.ladder.blockID, var7, 10, 4, 13, var3); + this.placeBlockAtCurrentPosition(var1, Block.ladder.blockID, var7, 10, 5, 13, var3); + this.placeBlockAtCurrentPosition(var1, Block.ladder.blockID, var7, 10, 6, 13, var3); + this.placeBlockAtCurrentPosition(var1, Block.ladder.blockID, var7, 10, 7, 13, var3); + byte var8 = 7; + byte var9 = 7; + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, var8 - 1, 9, var9, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, var8, 9, var9, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, var8 - 1, 8, var9, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, var8, 8, var9, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, var8 - 1, 7, var9, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, var8, 7, var9, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, var8 - 2, 7, var9, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, var8 + 1, 7, var9, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, var8 - 1, 7, var9 - 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, var8 - 1, 7, var9 + 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, var8, 7, var9 - 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, var8, 7, var9 + 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, var8 - 2, 8, var9, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, var8 + 1, 8, var9, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, var8 - 1, 8, var9 - 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, var8 - 1, 8, var9 + 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, var8, 8, var9 - 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, var8, 8, var9 + 1, var3); + } + + this.generateStructureChestContents(var1, var3, var2, 3, 3, 5, WeightedRandomChestContent.func_92080_a(strongholdLibraryChestContents, new WeightedRandomChestContent[]{Item.enchantedBook.func_92112_a(var2, 1, 5, 2)}), 1 + var2.nextInt(4)); + if(this.isLargeRoom) { + this.placeBlockAtCurrentPosition(var1, 0, 0, 12, 9, 1, var3); + this.generateStructureChestContents(var1, var3, var2, 12, 8, 1, WeightedRandomChestContent.func_92080_a(strongholdLibraryChestContents, new WeightedRandomChestContent[]{Item.enchantedBook.func_92112_a(var2, 1, 5, 2)}), 1 + var2.nextInt(4)); + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentStrongholdPortalRoom.java b/src/net/minecraft/src/ComponentStrongholdPortalRoom.java new file mode 100644 index 0000000..0883272 --- /dev/null +++ b/src/net/minecraft/src/ComponentStrongholdPortalRoom.java @@ -0,0 +1,115 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentStrongholdPortalRoom extends ComponentStronghold { + private boolean hasSpawner; + + public ComponentStrongholdPortalRoom(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + if(var1 != null) { + ((ComponentStrongholdStairs2)var1).strongholdPortalRoom = this; + } + + } + + public static ComponentStrongholdPortalRoom findValidPlacement(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -4, -1, 0, 11, 8, 16, var5); + return canStrongholdGoDeeper(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentStrongholdPortalRoom(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + this.fillWithRandomizedBlocks(var1, var3, 0, 0, 0, 10, 7, 15, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.placeDoor(var1, var2, var3, EnumDoor.GRATES, 4, 1, 0); + byte var4 = 6; + this.fillWithRandomizedBlocks(var1, var3, 1, var4, 1, 1, var4, 14, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithRandomizedBlocks(var1, var3, 9, var4, 1, 9, var4, 14, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithRandomizedBlocks(var1, var3, 2, var4, 1, 8, var4, 2, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithRandomizedBlocks(var1, var3, 2, var4, 14, 8, var4, 14, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithRandomizedBlocks(var1, var3, 1, 1, 1, 2, 1, 4, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithRandomizedBlocks(var1, var3, 8, 1, 1, 9, 1, 4, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithBlocks(var1, var3, 1, 1, 1, 1, 1, 3, Block.lavaMoving.blockID, Block.lavaMoving.blockID, false); + this.fillWithBlocks(var1, var3, 9, 1, 1, 9, 1, 3, Block.lavaMoving.blockID, Block.lavaMoving.blockID, false); + this.fillWithRandomizedBlocks(var1, var3, 3, 1, 8, 7, 1, 12, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithBlocks(var1, var3, 4, 1, 9, 6, 1, 11, Block.lavaMoving.blockID, Block.lavaMoving.blockID, false); + + int var5; + for(var5 = 3; var5 < 14; var5 += 2) { + this.fillWithBlocks(var1, var3, 0, 3, var5, 0, 4, var5, Block.fenceIron.blockID, Block.fenceIron.blockID, false); + this.fillWithBlocks(var1, var3, 10, 3, var5, 10, 4, var5, Block.fenceIron.blockID, Block.fenceIron.blockID, false); + } + + for(var5 = 2; var5 < 9; var5 += 2) { + this.fillWithBlocks(var1, var3, var5, 3, 15, var5, 4, 15, Block.fenceIron.blockID, Block.fenceIron.blockID, false); + } + + var5 = this.getMetadataWithOffset(Block.stairsStoneBrick.blockID, 3); + this.fillWithRandomizedBlocks(var1, var3, 4, 1, 5, 6, 1, 7, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithRandomizedBlocks(var1, var3, 4, 2, 6, 6, 2, 7, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithRandomizedBlocks(var1, var3, 4, 3, 7, 6, 3, 7, false, var2, StructureStrongholdPieces.getStrongholdStones()); + + for(int var6 = 4; var6 <= 6; ++var6) { + this.placeBlockAtCurrentPosition(var1, Block.stairsStoneBrick.blockID, var5, var6, 1, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsStoneBrick.blockID, var5, var6, 2, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsStoneBrick.blockID, var5, var6, 3, 6, var3); + } + + byte var14 = 2; + byte var7 = 0; + byte var8 = 3; + byte var9 = 1; + switch(this.coordBaseMode) { + case 0: + var14 = 0; + var7 = 2; + break; + case 1: + var14 = 1; + var7 = 3; + var8 = 0; + var9 = 2; + case 2: + default: + break; + case 3: + var14 = 3; + var7 = 1; + var8 = 0; + var9 = 2; + } + + this.placeBlockAtCurrentPosition(var1, Block.endPortalFrame.blockID, var14 + (var2.nextFloat() > 0.9F ? 4 : 0), 4, 3, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.endPortalFrame.blockID, var14 + (var2.nextFloat() > 0.9F ? 4 : 0), 5, 3, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.endPortalFrame.blockID, var14 + (var2.nextFloat() > 0.9F ? 4 : 0), 6, 3, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.endPortalFrame.blockID, var7 + (var2.nextFloat() > 0.9F ? 4 : 0), 4, 3, 12, var3); + this.placeBlockAtCurrentPosition(var1, Block.endPortalFrame.blockID, var7 + (var2.nextFloat() > 0.9F ? 4 : 0), 5, 3, 12, var3); + this.placeBlockAtCurrentPosition(var1, Block.endPortalFrame.blockID, var7 + (var2.nextFloat() > 0.9F ? 4 : 0), 6, 3, 12, var3); + this.placeBlockAtCurrentPosition(var1, Block.endPortalFrame.blockID, var8 + (var2.nextFloat() > 0.9F ? 4 : 0), 3, 3, 9, var3); + this.placeBlockAtCurrentPosition(var1, Block.endPortalFrame.blockID, var8 + (var2.nextFloat() > 0.9F ? 4 : 0), 3, 3, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.endPortalFrame.blockID, var8 + (var2.nextFloat() > 0.9F ? 4 : 0), 3, 3, 11, var3); + this.placeBlockAtCurrentPosition(var1, Block.endPortalFrame.blockID, var9 + (var2.nextFloat() > 0.9F ? 4 : 0), 7, 3, 9, var3); + this.placeBlockAtCurrentPosition(var1, Block.endPortalFrame.blockID, var9 + (var2.nextFloat() > 0.9F ? 4 : 0), 7, 3, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.endPortalFrame.blockID, var9 + (var2.nextFloat() > 0.9F ? 4 : 0), 7, 3, 11, var3); + if(!this.hasSpawner) { + int var13 = this.getYWithOffset(3); + int var10 = this.getXWithOffset(5, 6); + int var11 = this.getZWithOffset(5, 6); + if(var3.isVecInside(var10, var13, var11)) { + this.hasSpawner = true; + var1.setBlock(var10, var13, var11, Block.mobSpawner.blockID, 0, 2); + TileEntityMobSpawner var12 = (TileEntityMobSpawner)var1.getBlockTileEntity(var10, var13, var11); + if(var12 != null) { + var12.func_98049_a().setMobID("Silverfish"); + } + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentStrongholdPrison.java b/src/net/minecraft/src/ComponentStrongholdPrison.java new file mode 100644 index 0000000..68773b5 --- /dev/null +++ b/src/net/minecraft/src/ComponentStrongholdPrison.java @@ -0,0 +1,47 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentStrongholdPrison extends ComponentStronghold { + protected final EnumDoor doorType; + + public ComponentStrongholdPrison(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.doorType = this.getRandomDoor(var2); + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentNormal((ComponentStrongholdStairs2)var1, var2, var3, 1, 1); + } + + public static ComponentStrongholdPrison findValidPlacement(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, -1, 0, 9, 5, 11, var5); + return canStrongholdGoDeeper(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentStrongholdPrison(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.isLiquidInStructureBoundingBox(var1, var3)) { + return false; + } else { + this.fillWithRandomizedBlocks(var1, var3, 0, 0, 0, 8, 4, 10, true, var2, StructureStrongholdPieces.getStrongholdStones()); + this.placeDoor(var1, var2, var3, this.doorType, 1, 1, 0); + this.fillWithBlocks(var1, var3, 1, 1, 10, 3, 3, 10, 0, 0, false); + this.fillWithRandomizedBlocks(var1, var3, 4, 1, 1, 4, 3, 1, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithRandomizedBlocks(var1, var3, 4, 1, 3, 4, 3, 3, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithRandomizedBlocks(var1, var3, 4, 1, 7, 4, 3, 7, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithRandomizedBlocks(var1, var3, 4, 1, 9, 4, 3, 9, false, var2, StructureStrongholdPieces.getStrongholdStones()); + this.fillWithBlocks(var1, var3, 4, 1, 4, 4, 3, 6, Block.fenceIron.blockID, Block.fenceIron.blockID, false); + this.fillWithBlocks(var1, var3, 5, 1, 5, 7, 3, 5, Block.fenceIron.blockID, Block.fenceIron.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.fenceIron.blockID, 0, 4, 3, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.fenceIron.blockID, 0, 4, 3, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.doorIron.blockID, this.getMetadataWithOffset(Block.doorIron.blockID, 3), 4, 1, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.doorIron.blockID, this.getMetadataWithOffset(Block.doorIron.blockID, 3) + 8, 4, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.doorIron.blockID, this.getMetadataWithOffset(Block.doorIron.blockID, 3), 4, 1, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.doorIron.blockID, this.getMetadataWithOffset(Block.doorIron.blockID, 3) + 8, 4, 2, 8, var3); + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentStrongholdRightTurn.java b/src/net/minecraft/src/ComponentStrongholdRightTurn.java new file mode 100644 index 0000000..04e7d73 --- /dev/null +++ b/src/net/minecraft/src/ComponentStrongholdRightTurn.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentStrongholdRightTurn extends ComponentStrongholdLeftTurn { + private ComponentStrongholdRightTurn(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1, var2, var3, var4); + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + if(this.coordBaseMode != 2 && this.coordBaseMode != 3) { + this.getNextComponentX((ComponentStrongholdStairs2)var1, var2, var3, 1, 1); + } else { + this.getNextComponentZ((ComponentStrongholdStairs2)var1, var2, var3, 1, 1); + } + + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.isLiquidInStructureBoundingBox(var1, var3)) { + return false; + } else { + this.fillWithRandomizedBlocks(var1, var3, 0, 0, 0, 4, 4, 4, true, var2, StructureStrongholdPieces.getStrongholdStones()); + this.placeDoor(var1, var2, var3, this.doorType, 1, 1, 0); + if(this.coordBaseMode != 2 && this.coordBaseMode != 3) { + this.fillWithBlocks(var1, var3, 0, 1, 1, 0, 3, 3, 0, 0, false); + } else { + this.fillWithBlocks(var1, var3, 4, 1, 1, 4, 3, 3, 0, 0, false); + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentStrongholdRoomCrossing.java b/src/net/minecraft/src/ComponentStrongholdRoomCrossing.java new file mode 100644 index 0000000..4c6d439 --- /dev/null +++ b/src/net/minecraft/src/ComponentStrongholdRoomCrossing.java @@ -0,0 +1,122 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentStrongholdRoomCrossing extends ComponentStronghold { + private static final WeightedRandomChestContent[] strongholdRoomCrossingChestContents = new WeightedRandomChestContent[]{new WeightedRandomChestContent(Item.ingotIron.itemID, 0, 1, 5, 10), new WeightedRandomChestContent(Item.ingotGold.itemID, 0, 1, 3, 5), new WeightedRandomChestContent(Item.redstone.itemID, 0, 4, 9, 5), new WeightedRandomChestContent(Item.coal.itemID, 0, 3, 8, 10), new WeightedRandomChestContent(Item.bread.itemID, 0, 1, 3, 15), new WeightedRandomChestContent(Item.appleRed.itemID, 0, 1, 3, 15), new WeightedRandomChestContent(Item.pickaxeIron.itemID, 0, 1, 1, 1)}; + protected final EnumDoor doorType; + protected final int roomType; + + public ComponentStrongholdRoomCrossing(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.doorType = this.getRandomDoor(var2); + this.boundingBox = var3; + this.roomType = var2.nextInt(5); + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentNormal((ComponentStrongholdStairs2)var1, var2, var3, 4, 1); + this.getNextComponentX((ComponentStrongholdStairs2)var1, var2, var3, 1, 4); + this.getNextComponentZ((ComponentStrongholdStairs2)var1, var2, var3, 1, 4); + } + + public static ComponentStrongholdRoomCrossing findValidPlacement(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -4, -1, 0, 11, 7, 11, var5); + return canStrongholdGoDeeper(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentStrongholdRoomCrossing(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.isLiquidInStructureBoundingBox(var1, var3)) { + return false; + } else { + this.fillWithRandomizedBlocks(var1, var3, 0, 0, 0, 10, 6, 10, true, var2, StructureStrongholdPieces.getStrongholdStones()); + this.placeDoor(var1, var2, var3, this.doorType, 4, 1, 0); + this.fillWithBlocks(var1, var3, 4, 1, 10, 6, 3, 10, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 1, 4, 0, 3, 6, 0, 0, false); + this.fillWithBlocks(var1, var3, 10, 1, 4, 10, 3, 6, 0, 0, false); + int var4; + switch(this.roomType) { + case 0: + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 5, 1, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 5, 2, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 5, 3, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 4, 3, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 6, 3, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 5, 3, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 5, 3, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 0, 4, 1, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 0, 4, 1, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 0, 4, 1, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 0, 6, 1, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 0, 6, 1, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 0, 6, 1, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 0, 5, 1, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 0, 5, 1, 6, var3); + break; + case 1: + for(var4 = 0; var4 < 5; ++var4) { + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 3, 1, 3 + var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 7, 1, 3 + var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 3 + var4, 1, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 3 + var4, 1, 7, var3); + } + + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 5, 1, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 5, 2, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 5, 3, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.waterMoving.blockID, 0, 5, 4, 5, var3); + break; + case 2: + for(var4 = 1; var4 <= 9; ++var4) { + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 1, 3, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 9, 3, var4, var3); + } + + for(var4 = 1; var4 <= 9; ++var4) { + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, var4, 3, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, var4, 3, 9, var3); + } + + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 5, 1, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 5, 1, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 5, 3, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 5, 3, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 4, 1, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 6, 1, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 4, 3, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 6, 3, 5, var3); + + for(var4 = 1; var4 <= 3; ++var4) { + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 4, var4, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 6, var4, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 4, var4, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 6, var4, 6, var3); + } + + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 5, 3, 5, var3); + + for(var4 = 2; var4 <= 8; ++var4) { + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 2, 3, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 3, 3, var4, var3); + if(var4 <= 3 || var4 >= 7) { + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 4, 3, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 5, 3, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 6, 3, var4, var3); + } + + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 7, 3, var4, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 8, 3, var4, var3); + } + + this.placeBlockAtCurrentPosition(var1, Block.ladder.blockID, this.getMetadataWithOffset(Block.ladder.blockID, 4), 9, 1, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.ladder.blockID, this.getMetadataWithOffset(Block.ladder.blockID, 4), 9, 2, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.ladder.blockID, this.getMetadataWithOffset(Block.ladder.blockID, 4), 9, 3, 3, var3); + this.generateStructureChestContents(var1, var3, var2, 3, 4, 8, WeightedRandomChestContent.func_92080_a(strongholdRoomCrossingChestContents, new WeightedRandomChestContent[]{Item.enchantedBook.func_92114_b(var2)}), 1 + var2.nextInt(4)); + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentStrongholdStairs.java b/src/net/minecraft/src/ComponentStrongholdStairs.java new file mode 100644 index 0000000..7edbba7 --- /dev/null +++ b/src/net/minecraft/src/ComponentStrongholdStairs.java @@ -0,0 +1,74 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentStrongholdStairs extends ComponentStronghold { + private final boolean field_75024_a; + private final EnumDoor doorType; + + public ComponentStrongholdStairs(int var1, Random var2, int var3, int var4) { + super(var1); + this.field_75024_a = true; + this.coordBaseMode = var2.nextInt(4); + this.doorType = EnumDoor.OPENING; + switch(this.coordBaseMode) { + case 0: + case 2: + this.boundingBox = new StructureBoundingBox(var3, 64, var4, var3 + 5 - 1, 74, var4 + 5 - 1); + break; + default: + this.boundingBox = new StructureBoundingBox(var3, 64, var4, var3 + 5 - 1, 74, var4 + 5 - 1); + } + + } + + public ComponentStrongholdStairs(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.field_75024_a = false; + this.coordBaseMode = var4; + this.doorType = this.getRandomDoor(var2); + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + if(this.field_75024_a) { + StructureStrongholdPieces.setComponentType(ComponentStrongholdCrossing.class); + } + + this.getNextComponentNormal((ComponentStrongholdStairs2)var1, var2, var3, 1, 1); + } + + public static ComponentStrongholdStairs getStrongholdStairsComponent(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, -7, 0, 5, 11, 5, var5); + return canStrongholdGoDeeper(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentStrongholdStairs(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.isLiquidInStructureBoundingBox(var1, var3)) { + return false; + } else { + this.fillWithRandomizedBlocks(var1, var3, 0, 0, 0, 4, 10, 4, true, var2, StructureStrongholdPieces.getStrongholdStones()); + this.placeDoor(var1, var2, var3, this.doorType, 1, 7, 0); + this.placeDoor(var1, var2, var3, EnumDoor.OPENING, 1, 1, 4); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 2, 6, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 1, 5, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 0, 1, 6, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 1, 5, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 1, 4, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 0, 1, 5, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 2, 4, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 3, 3, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 0, 3, 4, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 3, 3, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 3, 2, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 0, 3, 3, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 2, 2, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 1, 1, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 0, 1, 2, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 1, 1, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneSingleSlab.blockID, 0, 1, 1, 3, var3); + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentStrongholdStairs2.java b/src/net/minecraft/src/ComponentStrongholdStairs2.java new file mode 100644 index 0000000..7ed0aa5 --- /dev/null +++ b/src/net/minecraft/src/ComponentStrongholdStairs2.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Random; + +public class ComponentStrongholdStairs2 extends ComponentStrongholdStairs { + public StructureStrongholdPieceWeight strongholdPieceWeight; + public ComponentStrongholdPortalRoom strongholdPortalRoom; + public ArrayList field_75026_c = new ArrayList(); + + public ComponentStrongholdStairs2(int var1, Random var2, int var3, int var4) { + super(0, var2, var3, var4); + } + + public ChunkPosition getCenter() { + return this.strongholdPortalRoom != null ? this.strongholdPortalRoom.getCenter() : super.getCenter(); + } +} diff --git a/src/net/minecraft/src/ComponentStrongholdStairsStraight.java b/src/net/minecraft/src/ComponentStrongholdStairsStraight.java new file mode 100644 index 0000000..41bf557 --- /dev/null +++ b/src/net/minecraft/src/ComponentStrongholdStairsStraight.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentStrongholdStairsStraight extends ComponentStronghold { + private final EnumDoor doorType; + + public ComponentStrongholdStairsStraight(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.doorType = this.getRandomDoor(var2); + this.boundingBox = var3; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentNormal((ComponentStrongholdStairs2)var1, var2, var3, 1, 1); + } + + public static ComponentStrongholdStairsStraight findValidPlacement(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, -7, 0, 5, 11, 8, var5); + return canStrongholdGoDeeper(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentStrongholdStairsStraight(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.isLiquidInStructureBoundingBox(var1, var3)) { + return false; + } else { + this.fillWithRandomizedBlocks(var1, var3, 0, 0, 0, 4, 10, 7, true, var2, StructureStrongholdPieces.getStrongholdStones()); + this.placeDoor(var1, var2, var3, this.doorType, 1, 7, 0); + this.placeDoor(var1, var2, var3, EnumDoor.OPENING, 1, 1, 7); + int var4 = this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 2); + + for(int var5 = 0; var5 < 6; ++var5) { + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var4, 1, 6 - var5, 1 + var5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var4, 2, 6 - var5, 1 + var5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, var4, 3, 6 - var5, 1 + var5, var3); + if(var5 < 5) { + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 1, 5 - var5, 1 + var5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 2, 5 - var5, 1 + var5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneBrick.blockID, 0, 3, 5 - var5, 1 + var5, var3); + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentStrongholdStraight.java b/src/net/minecraft/src/ComponentStrongholdStraight.java new file mode 100644 index 0000000..4c9c3cd --- /dev/null +++ b/src/net/minecraft/src/ComponentStrongholdStraight.java @@ -0,0 +1,59 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentStrongholdStraight extends ComponentStronghold { + private final EnumDoor doorType; + private final boolean expandsX; + private final boolean expandsZ; + + public ComponentStrongholdStraight(int var1, Random var2, StructureBoundingBox var3, int var4) { + super(var1); + this.coordBaseMode = var4; + this.doorType = this.getRandomDoor(var2); + this.boundingBox = var3; + this.expandsX = var2.nextInt(2) == 0; + this.expandsZ = var2.nextInt(2) == 0; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + this.getNextComponentNormal((ComponentStrongholdStairs2)var1, var2, var3, 1, 1); + if(this.expandsX) { + this.getNextComponentX((ComponentStrongholdStairs2)var1, var2, var3, 1, 2); + } + + if(this.expandsZ) { + this.getNextComponentZ((ComponentStrongholdStairs2)var1, var2, var3, 1, 2); + } + + } + + public static ComponentStrongholdStraight findValidPlacement(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var2, var3, var4, -1, -1, 0, 5, 5, 7, var5); + return canStrongholdGoDeeper(var7) && StructureComponent.findIntersecting(var0, var7) == null ? new ComponentStrongholdStraight(var6, var1, var7, var5) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.isLiquidInStructureBoundingBox(var1, var3)) { + return false; + } else { + this.fillWithRandomizedBlocks(var1, var3, 0, 0, 0, 4, 4, 6, true, var2, StructureStrongholdPieces.getStrongholdStones()); + this.placeDoor(var1, var2, var3, this.doorType, 1, 1, 0); + this.placeDoor(var1, var2, var3, EnumDoor.OPENING, 1, 1, 6); + this.randomlyPlaceBlock(var1, var3, var2, 0.1F, 1, 2, 1, Block.torchWood.blockID, 0); + this.randomlyPlaceBlock(var1, var3, var2, 0.1F, 3, 2, 1, Block.torchWood.blockID, 0); + this.randomlyPlaceBlock(var1, var3, var2, 0.1F, 1, 2, 5, Block.torchWood.blockID, 0); + this.randomlyPlaceBlock(var1, var3, var2, 0.1F, 3, 2, 5, Block.torchWood.blockID, 0); + if(this.expandsX) { + this.fillWithBlocks(var1, var3, 0, 1, 2, 0, 3, 4, 0, 0, false); + } + + if(this.expandsZ) { + this.fillWithBlocks(var1, var3, 4, 1, 2, 4, 3, 4, 0, 0, false); + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ComponentVillage.java b/src/net/minecraft/src/ComponentVillage.java new file mode 100644 index 0000000..10c44d9 --- /dev/null +++ b/src/net/minecraft/src/ComponentVillage.java @@ -0,0 +1,159 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +abstract class ComponentVillage extends StructureComponent { + private int villagersSpawned; + protected ComponentVillageStartPiece startPiece; + + protected ComponentVillage(ComponentVillageStartPiece var1, int var2) { + super(var2); + this.startPiece = var1; + } + + protected StructureComponent getNextComponentNN(ComponentVillageStartPiece var1, List var2, Random var3, int var4, int var5) { + switch(this.coordBaseMode) { + case 0: + return StructureVillagePieces.getNextStructureComponent(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY + var4, this.boundingBox.minZ + var5, 1, this.getComponentType()); + case 1: + return StructureVillagePieces.getNextStructureComponent(var1, var2, var3, this.boundingBox.minX + var5, this.boundingBox.minY + var4, this.boundingBox.minZ - 1, 2, this.getComponentType()); + case 2: + return StructureVillagePieces.getNextStructureComponent(var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY + var4, this.boundingBox.minZ + var5, 1, this.getComponentType()); + case 3: + return StructureVillagePieces.getNextStructureComponent(var1, var2, var3, this.boundingBox.minX + var5, this.boundingBox.minY + var4, this.boundingBox.minZ - 1, 2, this.getComponentType()); + default: + return null; + } + } + + protected StructureComponent getNextComponentPP(ComponentVillageStartPiece var1, List var2, Random var3, int var4, int var5) { + switch(this.coordBaseMode) { + case 0: + return StructureVillagePieces.getNextStructureComponent(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY + var4, this.boundingBox.minZ + var5, 3, this.getComponentType()); + case 1: + return StructureVillagePieces.getNextStructureComponent(var1, var2, var3, this.boundingBox.minX + var5, this.boundingBox.minY + var4, this.boundingBox.maxZ + 1, 0, this.getComponentType()); + case 2: + return StructureVillagePieces.getNextStructureComponent(var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY + var4, this.boundingBox.minZ + var5, 3, this.getComponentType()); + case 3: + return StructureVillagePieces.getNextStructureComponent(var1, var2, var3, this.boundingBox.minX + var5, this.boundingBox.minY + var4, this.boundingBox.maxZ + 1, 0, this.getComponentType()); + default: + return null; + } + } + + protected int getAverageGroundLevel(World var1, StructureBoundingBox var2) { + int var3 = 0; + int var4 = 0; + + for(int var5 = this.boundingBox.minZ; var5 <= this.boundingBox.maxZ; ++var5) { + for(int var6 = this.boundingBox.minX; var6 <= this.boundingBox.maxX; ++var6) { + if(var2.isVecInside(var6, 64, var5)) { + var3 += Math.max(var1.getTopSolidOrLiquidBlock(var6, var5), var1.provider.getAverageGroundLevel()); + ++var4; + } + } + } + + if(var4 == 0) { + return -1; + } else { + return var3 / var4; + } + } + + protected static boolean canVillageGoDeeper(StructureBoundingBox var0) { + return var0 != null && var0.minY > 10; + } + + protected void spawnVillagers(World var1, StructureBoundingBox var2, int var3, int var4, int var5, int var6) { + if(this.villagersSpawned < var6) { + for(int var7 = this.villagersSpawned; var7 < var6; ++var7) { + int var8 = this.getXWithOffset(var3 + var7, var5); + int var9 = this.getYWithOffset(var4); + int var10 = this.getZWithOffset(var3 + var7, var5); + if(!var2.isVecInside(var8, var9, var10)) { + break; + } + + ++this.villagersSpawned; + EntityVillager var11 = new EntityVillager(var1, this.getVillagerType(var7)); + var11.setLocationAndAngles((double)var8 + 0.5D, (double)var9, (double)var10 + 0.5D, 0.0F, 0.0F); + var1.spawnEntityInWorld(var11); + } + + } + } + + protected int getVillagerType(int var1) { + return 0; + } + + protected int getBiomeSpecificBlock(int var1, int var2) { + if(this.startPiece.inDesert) { + if(var1 == Block.wood.blockID) { + return Block.sandStone.blockID; + } + + if(var1 == Block.cobblestone.blockID) { + return Block.sandStone.blockID; + } + + if(var1 == Block.planks.blockID) { + return Block.sandStone.blockID; + } + + if(var1 == Block.stairsWoodOak.blockID) { + return Block.stairsSandStone.blockID; + } + + if(var1 == Block.stairsCobblestone.blockID) { + return Block.stairsSandStone.blockID; + } + + if(var1 == Block.gravel.blockID) { + return Block.sandStone.blockID; + } + } + + return var1; + } + + protected int getBiomeSpecificBlockMetadata(int var1, int var2) { + if(this.startPiece.inDesert) { + if(var1 == Block.wood.blockID) { + return 0; + } + + if(var1 == Block.cobblestone.blockID) { + return 0; + } + + if(var1 == Block.planks.blockID) { + return 2; + } + } + + return var2; + } + + protected void placeBlockAtCurrentPosition(World var1, int var2, int var3, int var4, int var5, int var6, StructureBoundingBox var7) { + int var8 = this.getBiomeSpecificBlock(var2, var3); + int var9 = this.getBiomeSpecificBlockMetadata(var2, var3); + super.placeBlockAtCurrentPosition(var1, var8, var9, var4, var5, var6, var7); + } + + protected void fillWithBlocks(World var1, StructureBoundingBox var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, boolean var11) { + int var12 = this.getBiomeSpecificBlock(var9, 0); + int var13 = this.getBiomeSpecificBlockMetadata(var9, 0); + int var14 = this.getBiomeSpecificBlock(var10, 0); + int var15 = this.getBiomeSpecificBlockMetadata(var10, 0); + super.fillWithMetadataBlocks(var1, var2, var3, var4, var5, var6, var7, var8, var12, var13, var14, var15, var11); + } + + protected void fillCurrentPositionBlocksDownwards(World var1, int var2, int var3, int var4, int var5, int var6, StructureBoundingBox var7) { + int var8 = this.getBiomeSpecificBlock(var2, var3); + int var9 = this.getBiomeSpecificBlockMetadata(var2, var3); + super.fillCurrentPositionBlocksDownwards(var1, var8, var9, var4, var5, var6, var7); + } +} diff --git a/src/net/minecraft/src/ComponentVillageChurch.java b/src/net/minecraft/src/ComponentVillageChurch.java new file mode 100644 index 0000000..16dd5d2 --- /dev/null +++ b/src/net/minecraft/src/ComponentVillageChurch.java @@ -0,0 +1,104 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentVillageChurch extends ComponentVillage { + private int averageGroundLevel = -1; + + public ComponentVillageChurch(ComponentVillageStartPiece var1, int var2, Random var3, StructureBoundingBox var4, int var5) { + super(var1, var2); + this.coordBaseMode = var5; + this.boundingBox = var4; + } + + public static ComponentVillageChurch func_74919_a(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(var3, var4, var5, 0, 0, 0, 5, 12, 9, var6); + return canVillageGoDeeper(var8) && StructureComponent.findIntersecting(var1, var8) == null ? new ComponentVillageChurch(var0, var7, var2, var8, var6) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.averageGroundLevel < 0) { + this.averageGroundLevel = this.getAverageGroundLevel(var1, var3); + if(this.averageGroundLevel < 0) { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 12 - 1, 0); + } + + this.fillWithBlocks(var1, var3, 1, 1, 1, 3, 3, 7, 0, 0, false); + this.fillWithBlocks(var1, var3, 1, 5, 1, 3, 9, 3, 0, 0, false); + this.fillWithBlocks(var1, var3, 1, 0, 0, 3, 0, 8, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 1, 1, 0, 3, 10, 0, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 0, 1, 1, 0, 10, 3, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 4, 1, 1, 4, 10, 3, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 0, 0, 4, 0, 4, 7, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 4, 0, 4, 4, 4, 7, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 1, 1, 8, 3, 4, 8, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 1, 5, 4, 3, 10, 4, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 1, 5, 5, 3, 5, 7, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 0, 9, 0, 4, 9, 4, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 0, 4, 0, 4, 4, 4, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 0, 11, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 4, 11, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 2, 11, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 2, 11, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 1, 1, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 1, 1, 7, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 2, 1, 7, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 3, 1, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 3, 1, 7, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 3), 1, 1, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 3), 2, 1, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 3), 3, 1, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 1), 1, 2, 7, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 0), 3, 2, 7, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 3, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 4, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 4, 3, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 6, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 7, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 4, 6, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 4, 7, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 2, 6, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 2, 7, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 2, 6, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 2, 7, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 3, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 4, 3, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 2, 3, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 2, 4, 7, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 1, 4, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 3, 4, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 2, 4, 5, var3); + int var4 = this.getMetadataWithOffset(Block.ladder.blockID, 4); + + int var5; + for(var5 = 1; var5 <= 9; ++var5) { + this.placeBlockAtCurrentPosition(var1, Block.ladder.blockID, var4, 3, var5, 3, var3); + } + + this.placeBlockAtCurrentPosition(var1, 0, 0, 2, 1, 0, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 2, 2, 0, var3); + this.placeDoorAtCurrentPosition(var1, var3, var2, 2, 1, 0, this.getMetadataWithOffset(Block.doorWood.blockID, 1)); + if(this.getBlockIdAtCurrentPosition(var1, 2, 0, -1, var3) == 0 && this.getBlockIdAtCurrentPosition(var1, 2, -1, -1, var3) != 0) { + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 3), 2, 0, -1, var3); + } + + for(var5 = 0; var5 < 9; ++var5) { + for(int var6 = 0; var6 < 5; ++var6) { + this.clearCurrentPositionBlocksUpwards(var1, var6, 12, var5, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.cobblestone.blockID, 0, var6, -1, var5, var3); + } + } + + this.spawnVillagers(var1, var3, 2, 1, 2, 1); + return true; + } + + protected int getVillagerType(int var1) { + return 2; + } +} diff --git a/src/net/minecraft/src/ComponentVillageField.java b/src/net/minecraft/src/ComponentVillageField.java new file mode 100644 index 0000000..d70618e --- /dev/null +++ b/src/net/minecraft/src/ComponentVillageField.java @@ -0,0 +1,83 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentVillageField extends ComponentVillage { + private int averageGroundLevel = -1; + private int cropTypeA; + private int cropTypeB; + private int cropTypeC; + private int cropTypeD; + + public ComponentVillageField(ComponentVillageStartPiece var1, int var2, Random var3, StructureBoundingBox var4, int var5) { + super(var1, var2); + this.coordBaseMode = var5; + this.boundingBox = var4; + this.cropTypeA = this.getRandomCrop(var3); + this.cropTypeB = this.getRandomCrop(var3); + this.cropTypeC = this.getRandomCrop(var3); + this.cropTypeD = this.getRandomCrop(var3); + } + + private int getRandomCrop(Random var1) { + switch(var1.nextInt(5)) { + case 0: + return Block.carrot.blockID; + case 1: + return Block.potato.blockID; + default: + return Block.crops.blockID; + } + } + + public static ComponentVillageField func_74900_a(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(var3, var4, var5, 0, 0, 0, 13, 4, 9, var6); + return canVillageGoDeeper(var8) && StructureComponent.findIntersecting(var1, var8) == null ? new ComponentVillageField(var0, var7, var2, var8, var6) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.averageGroundLevel < 0) { + this.averageGroundLevel = this.getAverageGroundLevel(var1, var3); + if(this.averageGroundLevel < 0) { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 4 - 1, 0); + } + + this.fillWithBlocks(var1, var3, 0, 1, 0, 12, 4, 8, 0, 0, false); + this.fillWithBlocks(var1, var3, 1, 0, 1, 2, 0, 7, Block.tilledField.blockID, Block.tilledField.blockID, false); + this.fillWithBlocks(var1, var3, 4, 0, 1, 5, 0, 7, Block.tilledField.blockID, Block.tilledField.blockID, false); + this.fillWithBlocks(var1, var3, 7, 0, 1, 8, 0, 7, Block.tilledField.blockID, Block.tilledField.blockID, false); + this.fillWithBlocks(var1, var3, 10, 0, 1, 11, 0, 7, Block.tilledField.blockID, Block.tilledField.blockID, false); + this.fillWithBlocks(var1, var3, 0, 0, 0, 0, 0, 8, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 6, 0, 0, 6, 0, 8, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 12, 0, 0, 12, 0, 8, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 1, 0, 0, 11, 0, 0, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 1, 0, 8, 11, 0, 8, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 3, 0, 1, 3, 0, 7, Block.waterMoving.blockID, Block.waterMoving.blockID, false); + this.fillWithBlocks(var1, var3, 9, 0, 1, 9, 0, 7, Block.waterMoving.blockID, Block.waterMoving.blockID, false); + + int var4; + for(var4 = 1; var4 <= 7; ++var4) { + this.placeBlockAtCurrentPosition(var1, this.cropTypeA, MathHelper.getRandomIntegerInRange(var2, 2, 7), 1, 1, var4, var3); + this.placeBlockAtCurrentPosition(var1, this.cropTypeA, MathHelper.getRandomIntegerInRange(var2, 2, 7), 2, 1, var4, var3); + this.placeBlockAtCurrentPosition(var1, this.cropTypeB, MathHelper.getRandomIntegerInRange(var2, 2, 7), 4, 1, var4, var3); + this.placeBlockAtCurrentPosition(var1, this.cropTypeB, MathHelper.getRandomIntegerInRange(var2, 2, 7), 5, 1, var4, var3); + this.placeBlockAtCurrentPosition(var1, this.cropTypeC, MathHelper.getRandomIntegerInRange(var2, 2, 7), 7, 1, var4, var3); + this.placeBlockAtCurrentPosition(var1, this.cropTypeC, MathHelper.getRandomIntegerInRange(var2, 2, 7), 8, 1, var4, var3); + this.placeBlockAtCurrentPosition(var1, this.cropTypeD, MathHelper.getRandomIntegerInRange(var2, 2, 7), 10, 1, var4, var3); + this.placeBlockAtCurrentPosition(var1, this.cropTypeD, MathHelper.getRandomIntegerInRange(var2, 2, 7), 11, 1, var4, var3); + } + + for(var4 = 0; var4 < 9; ++var4) { + for(int var5 = 0; var5 < 13; ++var5) { + this.clearCurrentPositionBlocksUpwards(var1, var5, 4, var4, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.dirt.blockID, 0, var5, -1, var4, var3); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentVillageField2.java b/src/net/minecraft/src/ComponentVillageField2.java new file mode 100644 index 0000000..90e936f --- /dev/null +++ b/src/net/minecraft/src/ComponentVillageField2.java @@ -0,0 +1,71 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentVillageField2 extends ComponentVillage { + private int averageGroundLevel = -1; + private int cropTypeA; + private int cropTypeB; + + public ComponentVillageField2(ComponentVillageStartPiece var1, int var2, Random var3, StructureBoundingBox var4, int var5) { + super(var1, var2); + this.coordBaseMode = var5; + this.boundingBox = var4; + this.cropTypeA = this.pickRandomCrop(var3); + this.cropTypeB = this.pickRandomCrop(var3); + } + + private int pickRandomCrop(Random var1) { + switch(var1.nextInt(5)) { + case 0: + return Block.carrot.blockID; + case 1: + return Block.potato.blockID; + default: + return Block.crops.blockID; + } + } + + public static ComponentVillageField2 func_74902_a(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(var3, var4, var5, 0, 0, 0, 7, 4, 9, var6); + return canVillageGoDeeper(var8) && StructureComponent.findIntersecting(var1, var8) == null ? new ComponentVillageField2(var0, var7, var2, var8, var6) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.averageGroundLevel < 0) { + this.averageGroundLevel = this.getAverageGroundLevel(var1, var3); + if(this.averageGroundLevel < 0) { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 4 - 1, 0); + } + + this.fillWithBlocks(var1, var3, 0, 1, 0, 6, 4, 8, 0, 0, false); + this.fillWithBlocks(var1, var3, 1, 0, 1, 2, 0, 7, Block.tilledField.blockID, Block.tilledField.blockID, false); + this.fillWithBlocks(var1, var3, 4, 0, 1, 5, 0, 7, Block.tilledField.blockID, Block.tilledField.blockID, false); + this.fillWithBlocks(var1, var3, 0, 0, 0, 0, 0, 8, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 6, 0, 0, 6, 0, 8, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 1, 0, 0, 5, 0, 0, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 1, 0, 8, 5, 0, 8, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 3, 0, 1, 3, 0, 7, Block.waterMoving.blockID, Block.waterMoving.blockID, false); + + int var4; + for(var4 = 1; var4 <= 7; ++var4) { + this.placeBlockAtCurrentPosition(var1, this.cropTypeA, MathHelper.getRandomIntegerInRange(var2, 2, 7), 1, 1, var4, var3); + this.placeBlockAtCurrentPosition(var1, this.cropTypeA, MathHelper.getRandomIntegerInRange(var2, 2, 7), 2, 1, var4, var3); + this.placeBlockAtCurrentPosition(var1, this.cropTypeB, MathHelper.getRandomIntegerInRange(var2, 2, 7), 4, 1, var4, var3); + this.placeBlockAtCurrentPosition(var1, this.cropTypeB, MathHelper.getRandomIntegerInRange(var2, 2, 7), 5, 1, var4, var3); + } + + for(var4 = 0; var4 < 9; ++var4) { + for(int var5 = 0; var5 < 7; ++var5) { + this.clearCurrentPositionBlocksUpwards(var1, var5, 4, var4, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.dirt.blockID, 0, var5, -1, var4, var3); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentVillageHall.java b/src/net/minecraft/src/ComponentVillageHall.java new file mode 100644 index 0000000..a32a288 --- /dev/null +++ b/src/net/minecraft/src/ComponentVillageHall.java @@ -0,0 +1,110 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentVillageHall extends ComponentVillage { + private int averageGroundLevel = -1; + + public ComponentVillageHall(ComponentVillageStartPiece var1, int var2, Random var3, StructureBoundingBox var4, int var5) { + super(var1, var2); + this.coordBaseMode = var5; + this.boundingBox = var4; + } + + public static ComponentVillageHall func_74906_a(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(var3, var4, var5, 0, 0, 0, 9, 7, 11, var6); + return canVillageGoDeeper(var8) && StructureComponent.findIntersecting(var1, var8) == null ? new ComponentVillageHall(var0, var7, var2, var8, var6) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.averageGroundLevel < 0) { + this.averageGroundLevel = this.getAverageGroundLevel(var1, var3); + if(this.averageGroundLevel < 0) { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 7 - 1, 0); + } + + this.fillWithBlocks(var1, var3, 1, 1, 1, 7, 4, 4, 0, 0, false); + this.fillWithBlocks(var1, var3, 2, 1, 6, 8, 4, 10, 0, 0, false); + this.fillWithBlocks(var1, var3, 2, 0, 6, 8, 0, 10, Block.dirt.blockID, Block.dirt.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 6, 0, 6, var3); + this.fillWithBlocks(var1, var3, 2, 1, 6, 2, 1, 10, Block.fence.blockID, Block.fence.blockID, false); + this.fillWithBlocks(var1, var3, 8, 1, 6, 8, 1, 10, Block.fence.blockID, Block.fence.blockID, false); + this.fillWithBlocks(var1, var3, 3, 1, 10, 7, 1, 10, Block.fence.blockID, Block.fence.blockID, false); + this.fillWithBlocks(var1, var3, 1, 0, 1, 7, 0, 4, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 0, 0, 0, 0, 3, 5, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 8, 0, 0, 8, 3, 5, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 1, 0, 0, 7, 1, 0, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 1, 0, 5, 7, 1, 5, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 1, 2, 0, 7, 3, 0, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 1, 2, 5, 7, 3, 5, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 0, 4, 1, 8, 4, 1, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 0, 4, 4, 8, 4, 4, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 0, 5, 2, 8, 5, 3, Block.planks.blockID, Block.planks.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 0, 4, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 0, 4, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 8, 4, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 8, 4, 3, var3); + int var4 = this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 3); + int var5 = this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 2); + + int var6; + int var7; + for(var6 = -1; var6 <= 2; ++var6) { + for(var7 = 0; var7 <= 8; ++var7) { + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, var4, var7, 4 + var6, var6, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, var5, var7, 4 + var6, 5 - var6, var3); + } + } + + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 0, 2, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 0, 2, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 8, 2, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 8, 2, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 2, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 8, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 8, 2, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 2, 2, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 3, 2, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 5, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 6, 2, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 2, 1, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.pressurePlatePlanks.blockID, 0, 2, 2, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 1, 1, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 3), 2, 1, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 1), 1, 1, 3, var3); + this.fillWithBlocks(var1, var3, 5, 0, 1, 7, 0, 3, Block.stoneDoubleSlab.blockID, Block.stoneDoubleSlab.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.stoneDoubleSlab.blockID, 0, 6, 1, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneDoubleSlab.blockID, 0, 6, 1, 2, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 2, 1, 0, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 2, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 2, 3, 1, var3); + this.placeDoorAtCurrentPosition(var1, var3, var2, 2, 1, 0, this.getMetadataWithOffset(Block.doorWood.blockID, 1)); + if(this.getBlockIdAtCurrentPosition(var1, 2, 0, -1, var3) == 0 && this.getBlockIdAtCurrentPosition(var1, 2, -1, -1, var3) != 0) { + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 3), 2, 0, -1, var3); + } + + this.placeBlockAtCurrentPosition(var1, 0, 0, 6, 1, 5, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 6, 2, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 6, 3, 4, var3); + this.placeDoorAtCurrentPosition(var1, var3, var2, 6, 1, 5, this.getMetadataWithOffset(Block.doorWood.blockID, 1)); + + for(var6 = 0; var6 < 5; ++var6) { + for(var7 = 0; var7 < 9; ++var7) { + this.clearCurrentPositionBlocksUpwards(var1, var7, 7, var6, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.cobblestone.blockID, 0, var7, -1, var6, var3); + } + } + + this.spawnVillagers(var1, var3, 4, 1, 2, 2); + return true; + } + + protected int getVillagerType(int var1) { + return var1 == 0 ? 4 : 0; + } +} diff --git a/src/net/minecraft/src/ComponentVillageHouse1.java b/src/net/minecraft/src/ComponentVillageHouse1.java new file mode 100644 index 0000000..d3e5002 --- /dev/null +++ b/src/net/minecraft/src/ComponentVillageHouse1.java @@ -0,0 +1,113 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentVillageHouse1 extends ComponentVillage { + private int averageGroundLevel = -1; + + public ComponentVillageHouse1(ComponentVillageStartPiece var1, int var2, Random var3, StructureBoundingBox var4, int var5) { + super(var1, var2); + this.coordBaseMode = var5; + this.boundingBox = var4; + } + + public static ComponentVillageHouse1 func_74898_a(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(var3, var4, var5, 0, 0, 0, 9, 9, 6, var6); + return canVillageGoDeeper(var8) && StructureComponent.findIntersecting(var1, var8) == null ? new ComponentVillageHouse1(var0, var7, var2, var8, var6) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.averageGroundLevel < 0) { + this.averageGroundLevel = this.getAverageGroundLevel(var1, var3); + if(this.averageGroundLevel < 0) { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 9 - 1, 0); + } + + this.fillWithBlocks(var1, var3, 1, 1, 1, 7, 5, 4, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 0, 0, 8, 0, 5, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 0, 5, 0, 8, 5, 5, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 0, 6, 1, 8, 6, 4, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 0, 7, 2, 8, 7, 3, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + int var4 = this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 3); + int var5 = this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 2); + + int var6; + int var7; + for(var6 = -1; var6 <= 2; ++var6) { + for(var7 = 0; var7 <= 8; ++var7) { + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, var4, var7, 6 + var6, var6, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, var5, var7, 6 + var6, 5 - var6, var3); + } + } + + this.fillWithBlocks(var1, var3, 0, 1, 0, 0, 1, 5, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 1, 1, 5, 8, 1, 5, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 8, 1, 0, 8, 1, 4, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 2, 1, 0, 7, 1, 0, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 0, 0, 4, 0, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 5, 0, 4, 5, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 8, 2, 5, 8, 4, 5, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 8, 2, 0, 8, 4, 0, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 0, 2, 1, 0, 4, 4, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 1, 2, 5, 7, 4, 5, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 8, 2, 1, 8, 4, 4, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 1, 2, 0, 7, 4, 0, Block.planks.blockID, Block.planks.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 4, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 5, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 6, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 4, 3, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 5, 3, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 6, 3, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 2, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 3, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 3, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 8, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 8, 2, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 8, 3, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 8, 3, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 2, 2, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 3, 2, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 5, 2, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 6, 2, 5, var3); + this.fillWithBlocks(var1, var3, 1, 4, 1, 7, 4, 1, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 1, 4, 4, 7, 4, 4, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 1, 3, 4, 7, 3, 4, Block.bookShelf.blockID, Block.bookShelf.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 7, 1, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 0), 7, 1, 3, var3); + var6 = this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 3); + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, var6, 6, 1, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, var6, 5, 1, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, var6, 4, 1, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, var6, 3, 1, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 6, 1, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.pressurePlatePlanks.blockID, 0, 6, 2, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 4, 1, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.pressurePlatePlanks.blockID, 0, 4, 2, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.workbench.blockID, 0, 7, 1, 1, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 1, 1, 0, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 1, 2, 0, var3); + this.placeDoorAtCurrentPosition(var1, var3, var2, 1, 1, 0, this.getMetadataWithOffset(Block.doorWood.blockID, 1)); + if(this.getBlockIdAtCurrentPosition(var1, 1, 0, -1, var3) == 0 && this.getBlockIdAtCurrentPosition(var1, 1, -1, -1, var3) != 0) { + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 3), 1, 0, -1, var3); + } + + for(var7 = 0; var7 < 6; ++var7) { + for(int var8 = 0; var8 < 9; ++var8) { + this.clearCurrentPositionBlocksUpwards(var1, var8, 9, var7, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.cobblestone.blockID, 0, var8, -1, var7, var3); + } + } + + this.spawnVillagers(var1, var3, 2, 1, 2, 1); + return true; + } + + protected int getVillagerType(int var1) { + return 1; + } +} diff --git a/src/net/minecraft/src/ComponentVillageHouse2.java b/src/net/minecraft/src/ComponentVillageHouse2.java new file mode 100644 index 0000000..c03e7cd --- /dev/null +++ b/src/net/minecraft/src/ComponentVillageHouse2.java @@ -0,0 +1,99 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentVillageHouse2 extends ComponentVillage { + private static final WeightedRandomChestContent[] villageBlacksmithChestContents = new WeightedRandomChestContent[]{new WeightedRandomChestContent(Item.diamond.itemID, 0, 1, 3, 3), new WeightedRandomChestContent(Item.ingotIron.itemID, 0, 1, 5, 10), new WeightedRandomChestContent(Item.ingotGold.itemID, 0, 1, 3, 5), new WeightedRandomChestContent(Item.bread.itemID, 0, 1, 3, 15), new WeightedRandomChestContent(Item.appleRed.itemID, 0, 1, 3, 15), new WeightedRandomChestContent(Item.pickaxeIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.swordIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.plateIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.helmetIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.legsIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.bootsIron.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Block.obsidian.blockID, 0, 3, 7, 5), new WeightedRandomChestContent(Block.sapling.blockID, 0, 3, 7, 5)}; + private int averageGroundLevel = -1; + private boolean hasMadeChest; + + public ComponentVillageHouse2(ComponentVillageStartPiece var1, int var2, Random var3, StructureBoundingBox var4, int var5) { + super(var1, var2); + this.coordBaseMode = var5; + this.boundingBox = var4; + } + + public static ComponentVillageHouse2 func_74915_a(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(var3, var4, var5, 0, 0, 0, 10, 6, 7, var6); + return canVillageGoDeeper(var8) && StructureComponent.findIntersecting(var1, var8) == null ? new ComponentVillageHouse2(var0, var7, var2, var8, var6) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.averageGroundLevel < 0) { + this.averageGroundLevel = this.getAverageGroundLevel(var1, var3); + if(this.averageGroundLevel < 0) { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 6 - 1, 0); + } + + this.fillWithBlocks(var1, var3, 0, 1, 0, 9, 4, 6, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 0, 0, 9, 0, 6, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 0, 4, 0, 9, 4, 6, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 0, 5, 0, 9, 5, 6, Block.stoneSingleSlab.blockID, Block.stoneSingleSlab.blockID, false); + this.fillWithBlocks(var1, var3, 1, 5, 1, 8, 5, 5, 0, 0, false); + this.fillWithBlocks(var1, var3, 1, 1, 0, 2, 3, 0, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 0, 1, 0, 0, 4, 0, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 3, 1, 0, 3, 4, 0, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 0, 1, 6, 0, 4, 6, Block.wood.blockID, Block.wood.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 3, 3, 1, var3); + this.fillWithBlocks(var1, var3, 3, 1, 2, 3, 3, 2, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 4, 1, 3, 5, 3, 3, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 0, 1, 1, 0, 3, 5, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 1, 1, 6, 5, 3, 6, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 5, 1, 0, 5, 3, 0, Block.fence.blockID, Block.fence.blockID, false); + this.fillWithBlocks(var1, var3, 9, 1, 0, 9, 3, 0, Block.fence.blockID, Block.fence.blockID, false); + this.fillWithBlocks(var1, var3, 6, 1, 4, 9, 4, 6, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.lavaMoving.blockID, 0, 7, 1, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.lavaMoving.blockID, 0, 8, 1, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.fenceIron.blockID, 0, 9, 2, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.fenceIron.blockID, 0, 9, 2, 4, var3); + this.fillWithBlocks(var1, var3, 7, 2, 4, 8, 2, 5, 0, 0, false); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 6, 1, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.furnaceIdle.blockID, 0, 6, 2, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.furnaceIdle.blockID, 0, 6, 3, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.stoneDoubleSlab.blockID, 0, 8, 1, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 2, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 2, 2, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 4, 2, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 2, 1, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.pressurePlatePlanks.blockID, 0, 2, 2, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 1, 1, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 3), 2, 1, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 1), 1, 1, 4, var3); + int var4; + int var5; + if(!this.hasMadeChest) { + var4 = this.getYWithOffset(1); + var5 = this.getXWithOffset(5, 5); + int var6 = this.getZWithOffset(5, 5); + if(var3.isVecInside(var5, var4, var6)) { + this.hasMadeChest = true; + this.generateStructureChestContents(var1, var3, var2, 5, 1, 5, villageBlacksmithChestContents, 3 + var2.nextInt(6)); + } + } + + for(var4 = 6; var4 <= 8; ++var4) { + if(this.getBlockIdAtCurrentPosition(var1, var4, 0, -1, var3) == 0 && this.getBlockIdAtCurrentPosition(var1, var4, -1, -1, var3) != 0) { + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 3), var4, 0, -1, var3); + } + } + + for(var4 = 0; var4 < 7; ++var4) { + for(var5 = 0; var5 < 10; ++var5) { + this.clearCurrentPositionBlocksUpwards(var1, var5, 6, var4, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.cobblestone.blockID, 0, var5, -1, var4, var3); + } + } + + this.spawnVillagers(var1, var3, 7, 1, 1, 1); + return true; + } + + protected int getVillagerType(int var1) { + return 3; + } +} diff --git a/src/net/minecraft/src/ComponentVillageHouse3.java b/src/net/minecraft/src/ComponentVillageHouse3.java new file mode 100644 index 0000000..c35d692 --- /dev/null +++ b/src/net/minecraft/src/ComponentVillageHouse3.java @@ -0,0 +1,142 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentVillageHouse3 extends ComponentVillage { + private int averageGroundLevel = -1; + + public ComponentVillageHouse3(ComponentVillageStartPiece var1, int var2, Random var3, StructureBoundingBox var4, int var5) { + super(var1, var2); + this.coordBaseMode = var5; + this.boundingBox = var4; + } + + public static ComponentVillageHouse3 func_74921_a(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(var3, var4, var5, 0, 0, 0, 9, 7, 12, var6); + return canVillageGoDeeper(var8) && StructureComponent.findIntersecting(var1, var8) == null ? new ComponentVillageHouse3(var0, var7, var2, var8, var6) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.averageGroundLevel < 0) { + this.averageGroundLevel = this.getAverageGroundLevel(var1, var3); + if(this.averageGroundLevel < 0) { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 7 - 1, 0); + } + + this.fillWithBlocks(var1, var3, 1, 1, 1, 7, 4, 4, 0, 0, false); + this.fillWithBlocks(var1, var3, 2, 1, 6, 8, 4, 10, 0, 0, false); + this.fillWithBlocks(var1, var3, 2, 0, 5, 8, 0, 10, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 1, 0, 1, 7, 0, 4, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 0, 0, 0, 0, 3, 5, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 8, 0, 0, 8, 3, 10, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 1, 0, 0, 7, 2, 0, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 1, 0, 5, 2, 1, 5, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 2, 0, 6, 2, 3, 10, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 3, 0, 10, 7, 3, 10, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 1, 2, 0, 7, 3, 0, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 1, 2, 5, 2, 3, 5, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 0, 4, 1, 8, 4, 1, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 0, 4, 4, 3, 4, 4, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 0, 5, 2, 8, 5, 3, Block.planks.blockID, Block.planks.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 0, 4, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 0, 4, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 8, 4, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 8, 4, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 8, 4, 4, var3); + int var4 = this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 3); + int var5 = this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 2); + + int var6; + int var7; + for(var6 = -1; var6 <= 2; ++var6) { + for(var7 = 0; var7 <= 8; ++var7) { + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, var4, var7, 4 + var6, var6, var3); + if((var6 > -1 || var7 <= 1) && (var6 > 0 || var7 <= 3) && (var6 > 1 || var7 <= 4 || var7 >= 6)) { + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, var5, var7, 4 + var6, 5 - var6, var3); + } + } + } + + this.fillWithBlocks(var1, var3, 3, 4, 5, 3, 4, 10, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 7, 4, 2, 7, 4, 10, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 4, 5, 4, 4, 5, 10, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 6, 5, 4, 6, 5, 10, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 5, 6, 3, 5, 6, 10, Block.planks.blockID, Block.planks.blockID, false); + var6 = this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 0); + + int var8; + for(var7 = 4; var7 >= 1; --var7) { + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, var7, 2 + var7, 7 - var7, var3); + + for(var8 = 8 - var7; var8 <= 10; ++var8) { + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, var6, var7, 2 + var7, var8, var3); + } + } + + var7 = this.getMetadataWithOffset(Block.stairsWoodOak.blockID, 1); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 6, 6, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 7, 5, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, var7, 6, 6, 4, var3); + + int var9; + for(var8 = 6; var8 <= 8; ++var8) { + for(var9 = 5; var9 <= 10; ++var9) { + this.placeBlockAtCurrentPosition(var1, Block.stairsWoodOak.blockID, var7, var8, 12 - var8, var9, var3); + } + } + + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 0, 2, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 0, 2, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 2, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 4, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 5, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 6, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 8, 2, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 8, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 8, 2, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 8, 2, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 8, 2, 5, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 8, 2, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 8, 2, 7, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 8, 2, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 8, 2, 9, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 2, 2, 6, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 2, 2, 7, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 2, 2, 8, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 2, 2, 9, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 4, 4, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 5, 4, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 6, 4, 10, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 5, 5, 10, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 2, 1, 0, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 2, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 2, 3, 1, var3); + this.placeDoorAtCurrentPosition(var1, var3, var2, 2, 1, 0, this.getMetadataWithOffset(Block.doorWood.blockID, 1)); + this.fillWithBlocks(var1, var3, 1, 0, -1, 3, 2, -1, 0, 0, false); + if(this.getBlockIdAtCurrentPosition(var1, 2, 0, -1, var3) == 0 && this.getBlockIdAtCurrentPosition(var1, 2, -1, -1, var3) != 0) { + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 3), 2, 0, -1, var3); + } + + for(var8 = 0; var8 < 5; ++var8) { + for(var9 = 0; var9 < 9; ++var9) { + this.clearCurrentPositionBlocksUpwards(var1, var9, 7, var8, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.cobblestone.blockID, 0, var9, -1, var8, var3); + } + } + + for(var8 = 5; var8 < 11; ++var8) { + for(var9 = 2; var9 < 9; ++var9) { + this.clearCurrentPositionBlocksUpwards(var1, var9, 7, var8, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.cobblestone.blockID, 0, var9, -1, var8, var3); + } + } + + this.spawnVillagers(var1, var3, 4, 1, 2, 2); + return true; + } +} diff --git a/src/net/minecraft/src/ComponentVillageHouse4_Garden.java b/src/net/minecraft/src/ComponentVillageHouse4_Garden.java new file mode 100644 index 0000000..df08bfa --- /dev/null +++ b/src/net/minecraft/src/ComponentVillageHouse4_Garden.java @@ -0,0 +1,105 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentVillageHouse4_Garden extends ComponentVillage { + private int averageGroundLevel = -1; + private final boolean isRoofAccessible; + + public ComponentVillageHouse4_Garden(ComponentVillageStartPiece var1, int var2, Random var3, StructureBoundingBox var4, int var5) { + super(var1, var2); + this.coordBaseMode = var5; + this.boundingBox = var4; + this.isRoofAccessible = var3.nextBoolean(); + } + + public static ComponentVillageHouse4_Garden func_74912_a(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(var3, var4, var5, 0, 0, 0, 5, 6, 5, var6); + return StructureComponent.findIntersecting(var1, var8) != null ? null : new ComponentVillageHouse4_Garden(var0, var7, var2, var8, var6); + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.averageGroundLevel < 0) { + this.averageGroundLevel = this.getAverageGroundLevel(var1, var3); + if(this.averageGroundLevel < 0) { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 6 - 1, 0); + } + + this.fillWithBlocks(var1, var3, 0, 0, 0, 4, 0, 4, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 0, 4, 0, 4, 4, 4, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 1, 4, 1, 3, 4, 3, Block.planks.blockID, Block.planks.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 0, 1, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 0, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 0, 3, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 4, 1, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 4, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 4, 3, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 0, 1, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 0, 2, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 0, 3, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 4, 1, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 4, 2, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.cobblestone.blockID, 0, 4, 3, 4, var3); + this.fillWithBlocks(var1, var3, 0, 1, 1, 0, 3, 3, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 4, 1, 1, 4, 3, 3, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 1, 1, 4, 3, 3, 4, Block.planks.blockID, Block.planks.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 2, 2, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 4, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 1, 1, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 1, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 1, 3, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 2, 3, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 3, 3, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 3, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.planks.blockID, 0, 3, 1, 0, var3); + if(this.getBlockIdAtCurrentPosition(var1, 2, 0, -1, var3) == 0 && this.getBlockIdAtCurrentPosition(var1, 2, -1, -1, var3) != 0) { + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 3), 2, 0, -1, var3); + } + + this.fillWithBlocks(var1, var3, 1, 1, 1, 3, 3, 3, 0, 0, false); + if(this.isRoofAccessible) { + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 0, 5, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 1, 5, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 2, 5, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 3, 5, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 4, 5, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 0, 5, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 1, 5, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 2, 5, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 3, 5, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 4, 5, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 4, 5, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 4, 5, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 4, 5, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 0, 5, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 0, 5, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 0, 5, 3, var3); + } + + int var4; + if(this.isRoofAccessible) { + var4 = this.getMetadataWithOffset(Block.ladder.blockID, 3); + this.placeBlockAtCurrentPosition(var1, Block.ladder.blockID, var4, 3, 1, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.ladder.blockID, var4, 3, 2, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.ladder.blockID, var4, 3, 3, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.ladder.blockID, var4, 3, 4, 3, var3); + } + + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 2, 3, 1, var3); + + for(var4 = 0; var4 < 5; ++var4) { + for(int var5 = 0; var5 < 5; ++var5) { + this.clearCurrentPositionBlocksUpwards(var1, var5, 6, var4, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.cobblestone.blockID, 0, var5, -1, var4, var3); + } + } + + this.spawnVillagers(var1, var3, 1, 1, 2, 1); + return true; + } +} diff --git a/src/net/minecraft/src/ComponentVillagePathGen.java b/src/net/minecraft/src/ComponentVillagePathGen.java new file mode 100644 index 0000000..97a783e --- /dev/null +++ b/src/net/minecraft/src/ComponentVillagePathGen.java @@ -0,0 +1,96 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentVillagePathGen extends ComponentVillageRoadPiece { + private int averageGroundLevel; + + public ComponentVillagePathGen(ComponentVillageStartPiece var1, int var2, Random var3, StructureBoundingBox var4, int var5) { + super(var1, var2); + this.coordBaseMode = var5; + this.boundingBox = var4; + this.averageGroundLevel = Math.max(var4.getXSize(), var4.getZSize()); + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + boolean var4 = false; + + int var5; + StructureComponent var6; + for(var5 = var3.nextInt(5); var5 < this.averageGroundLevel - 8; var5 += 2 + var3.nextInt(5)) { + var6 = this.getNextComponentNN((ComponentVillageStartPiece)var1, var2, var3, 0, var5); + if(var6 != null) { + var5 += Math.max(var6.boundingBox.getXSize(), var6.boundingBox.getZSize()); + var4 = true; + } + } + + for(var5 = var3.nextInt(5); var5 < this.averageGroundLevel - 8; var5 += 2 + var3.nextInt(5)) { + var6 = this.getNextComponentPP((ComponentVillageStartPiece)var1, var2, var3, 0, var5); + if(var6 != null) { + var5 += Math.max(var6.boundingBox.getXSize(), var6.boundingBox.getZSize()); + var4 = true; + } + } + + if(var4 && var3.nextInt(3) > 0) { + switch(this.coordBaseMode) { + case 0: + StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY, this.boundingBox.maxZ - 2, 1, this.getComponentType()); + break; + case 1: + StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)var1, var2, var3, this.boundingBox.minX, this.boundingBox.minY, this.boundingBox.minZ - 1, 2, this.getComponentType()); + break; + case 2: + StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.minY, this.boundingBox.minZ, 1, this.getComponentType()); + break; + case 3: + StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)var1, var2, var3, this.boundingBox.maxX - 2, this.boundingBox.minY, this.boundingBox.minZ - 1, 2, this.getComponentType()); + } + } + + if(var4 && var3.nextInt(3) > 0) { + switch(this.coordBaseMode) { + case 0: + StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY, this.boundingBox.maxZ - 2, 3, this.getComponentType()); + break; + case 1: + StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)var1, var2, var3, this.boundingBox.minX, this.boundingBox.minY, this.boundingBox.maxZ + 1, 0, this.getComponentType()); + break; + case 2: + StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.minY, this.boundingBox.minZ, 3, this.getComponentType()); + break; + case 3: + StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)var1, var2, var3, this.boundingBox.maxX - 2, this.boundingBox.minY, this.boundingBox.maxZ + 1, 0, this.getComponentType()); + } + } + + } + + public static StructureBoundingBox func_74933_a(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6) { + for(int var7 = 7 * MathHelper.getRandomIntegerInRange(var2, 3, 5); var7 >= 7; var7 -= 7) { + StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(var3, var4, var5, 0, 0, 0, 3, 3, var7, var6); + if(StructureComponent.findIntersecting(var1, var8) == null) { + return var8; + } + } + + return null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + int var4 = this.getBiomeSpecificBlock(Block.gravel.blockID, 0); + + for(int var5 = this.boundingBox.minX; var5 <= this.boundingBox.maxX; ++var5) { + for(int var6 = this.boundingBox.minZ; var6 <= this.boundingBox.maxZ; ++var6) { + if(var3.isVecInside(var5, 64, var6)) { + int var7 = var1.getTopSolidOrLiquidBlock(var5, var6) - 1; + var1.setBlock(var5, var7, var6, var4, 0, 2); + } + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentVillageRoadPiece.java b/src/net/minecraft/src/ComponentVillageRoadPiece.java new file mode 100644 index 0000000..e8ae50f --- /dev/null +++ b/src/net/minecraft/src/ComponentVillageRoadPiece.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public abstract class ComponentVillageRoadPiece extends ComponentVillage { + protected ComponentVillageRoadPiece(ComponentVillageStartPiece var1, int var2) { + super(var1, var2); + } +} diff --git a/src/net/minecraft/src/ComponentVillageStartPiece.java b/src/net/minecraft/src/ComponentVillageStartPiece.java new file mode 100644 index 0000000..598b6f5 --- /dev/null +++ b/src/net/minecraft/src/ComponentVillageStartPiece.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Random; + +public class ComponentVillageStartPiece extends ComponentVillageWell { + public final WorldChunkManager worldChunkMngr; + public final boolean inDesert; + public final int terrainType; + public StructureVillagePieceWeight structVillagePieceWeight; + public ArrayList structureVillageWeightedPieceList; + public ArrayList field_74932_i = new ArrayList(); + public ArrayList field_74930_j = new ArrayList(); + + public ComponentVillageStartPiece(WorldChunkManager var1, int var2, Random var3, int var4, int var5, ArrayList var6, int var7) { + super((ComponentVillageStartPiece)null, 0, var3, var4, var5); + this.worldChunkMngr = var1; + this.structureVillageWeightedPieceList = var6; + this.terrainType = var7; + BiomeGenBase var8 = var1.getBiomeGenAt(var4, var5); + this.inDesert = var8 == BiomeGenBase.desert || var8 == BiomeGenBase.desertHills; + this.startPiece = this; + } + + public WorldChunkManager getWorldChunkManager() { + return this.worldChunkMngr; + } +} diff --git a/src/net/minecraft/src/ComponentVillageTorch.java b/src/net/minecraft/src/ComponentVillageTorch.java new file mode 100644 index 0000000..2bdcf48 --- /dev/null +++ b/src/net/minecraft/src/ComponentVillageTorch.java @@ -0,0 +1,41 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentVillageTorch extends ComponentVillage { + private int averageGroundLevel = -1; + + public ComponentVillageTorch(ComponentVillageStartPiece var1, int var2, Random var3, StructureBoundingBox var4, int var5) { + super(var1, var2); + this.coordBaseMode = var5; + this.boundingBox = var4; + } + + public static StructureBoundingBox func_74904_a(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6) { + StructureBoundingBox var7 = StructureBoundingBox.getComponentToAddBoundingBox(var3, var4, var5, 0, 0, 0, 3, 4, 2, var6); + return StructureComponent.findIntersecting(var1, var7) != null ? null : var7; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.averageGroundLevel < 0) { + this.averageGroundLevel = this.getAverageGroundLevel(var1, var3); + if(this.averageGroundLevel < 0) { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 4 - 1, 0); + } + + this.fillWithBlocks(var1, var3, 0, 0, 0, 2, 3, 1, 0, 0, false); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 1, 0, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 1, 1, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 1, 2, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.cloth.blockID, 15, 1, 3, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 0, 3, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 1, 3, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 2, 3, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.torchWood.blockID, 0, 1, 3, -1, var3); + return true; + } +} diff --git a/src/net/minecraft/src/ComponentVillageWell.java b/src/net/minecraft/src/ComponentVillageWell.java new file mode 100644 index 0000000..036032d --- /dev/null +++ b/src/net/minecraft/src/ComponentVillageWell.java @@ -0,0 +1,67 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentVillageWell extends ComponentVillage { + private final boolean field_74924_a = true; + private int averageGroundLevel = -1; + + public ComponentVillageWell(ComponentVillageStartPiece var1, int var2, Random var3, int var4, int var5) { + super(var1, var2); + this.coordBaseMode = var3.nextInt(4); + switch(this.coordBaseMode) { + case 0: + case 2: + this.boundingBox = new StructureBoundingBox(var4, 64, var5, var4 + 6 - 1, 78, var5 + 6 - 1); + break; + default: + this.boundingBox = new StructureBoundingBox(var4, 64, var5, var4 + 6 - 1, 78, var5 + 6 - 1); + } + + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)var1, var2, var3, this.boundingBox.minX - 1, this.boundingBox.maxY - 4, this.boundingBox.minZ + 1, 1, this.getComponentType()); + StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)var1, var2, var3, this.boundingBox.maxX + 1, this.boundingBox.maxY - 4, this.boundingBox.minZ + 1, 3, this.getComponentType()); + StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)var1, var2, var3, this.boundingBox.minX + 1, this.boundingBox.maxY - 4, this.boundingBox.minZ - 1, 2, this.getComponentType()); + StructureVillagePieces.getNextStructureComponentVillagePath((ComponentVillageStartPiece)var1, var2, var3, this.boundingBox.minX + 1, this.boundingBox.maxY - 4, this.boundingBox.maxZ + 1, 0, this.getComponentType()); + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.averageGroundLevel < 0) { + this.averageGroundLevel = this.getAverageGroundLevel(var1, var3); + if(this.averageGroundLevel < 0) { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 3, 0); + } + + this.fillWithBlocks(var1, var3, 1, 0, 1, 4, 12, 4, Block.cobblestone.blockID, Block.waterMoving.blockID, false); + this.placeBlockAtCurrentPosition(var1, 0, 0, 2, 12, 2, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 3, 12, 2, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 2, 12, 3, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 3, 12, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 1, 13, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 1, 14, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 4, 13, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 4, 14, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 1, 13, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 1, 14, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 4, 13, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, 4, 14, 4, var3); + this.fillWithBlocks(var1, var3, 1, 15, 1, 4, 15, 4, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + + for(int var4 = 0; var4 <= 5; ++var4) { + for(int var5 = 0; var5 <= 5; ++var5) { + if(var5 == 0 || var5 == 5 || var4 == 0 || var4 == 5) { + this.placeBlockAtCurrentPosition(var1, Block.gravel.blockID, 0, var5, 11, var4, var3); + this.clearCurrentPositionBlocksUpwards(var1, var5, 12, var4, var3); + } + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/ComponentVillageWoodHut.java b/src/net/minecraft/src/ComponentVillageWoodHut.java new file mode 100644 index 0000000..14ae8f8 --- /dev/null +++ b/src/net/minecraft/src/ComponentVillageWoodHut.java @@ -0,0 +1,85 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ComponentVillageWoodHut extends ComponentVillage { + private int averageGroundLevel = -1; + private final boolean isTallHouse; + private final int tablePosition; + + public ComponentVillageWoodHut(ComponentVillageStartPiece var1, int var2, Random var3, StructureBoundingBox var4, int var5) { + super(var1, var2); + this.coordBaseMode = var5; + this.boundingBox = var4; + this.isTallHouse = var3.nextBoolean(); + this.tablePosition = var3.nextInt(3); + } + + public static ComponentVillageWoodHut func_74908_a(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + StructureBoundingBox var8 = StructureBoundingBox.getComponentToAddBoundingBox(var3, var4, var5, 0, 0, 0, 4, 6, 5, var6); + return canVillageGoDeeper(var8) && StructureComponent.findIntersecting(var1, var8) == null ? new ComponentVillageWoodHut(var0, var7, var2, var8, var6) : null; + } + + public boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3) { + if(this.averageGroundLevel < 0) { + this.averageGroundLevel = this.getAverageGroundLevel(var1, var3); + if(this.averageGroundLevel < 0) { + return true; + } + + this.boundingBox.offset(0, this.averageGroundLevel - this.boundingBox.maxY + 6 - 1, 0); + } + + this.fillWithBlocks(var1, var3, 1, 1, 1, 3, 5, 4, 0, 0, false); + this.fillWithBlocks(var1, var3, 0, 0, 0, 3, 0, 4, Block.cobblestone.blockID, Block.cobblestone.blockID, false); + this.fillWithBlocks(var1, var3, 1, 0, 1, 2, 0, 3, Block.dirt.blockID, Block.dirt.blockID, false); + if(this.isTallHouse) { + this.fillWithBlocks(var1, var3, 1, 4, 1, 2, 4, 3, Block.wood.blockID, Block.wood.blockID, false); + } else { + this.fillWithBlocks(var1, var3, 1, 5, 1, 2, 5, 3, Block.wood.blockID, Block.wood.blockID, false); + } + + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 1, 4, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 2, 4, 0, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 1, 4, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 2, 4, 4, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 0, 4, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 0, 4, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 0, 4, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 3, 4, 1, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 3, 4, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.wood.blockID, 0, 3, 4, 3, var3); + this.fillWithBlocks(var1, var3, 0, 1, 0, 0, 3, 0, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 3, 1, 0, 3, 3, 0, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 0, 1, 4, 0, 3, 4, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 3, 1, 4, 3, 3, 4, Block.wood.blockID, Block.wood.blockID, false); + this.fillWithBlocks(var1, var3, 0, 1, 1, 0, 3, 3, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 3, 1, 1, 3, 3, 3, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 1, 1, 0, 2, 3, 0, Block.planks.blockID, Block.planks.blockID, false); + this.fillWithBlocks(var1, var3, 1, 1, 4, 2, 3, 4, Block.planks.blockID, Block.planks.blockID, false); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 0, 2, 2, var3); + this.placeBlockAtCurrentPosition(var1, Block.thinGlass.blockID, 0, 3, 2, 2, var3); + if(this.tablePosition > 0) { + this.placeBlockAtCurrentPosition(var1, Block.fence.blockID, 0, this.tablePosition, 1, 3, var3); + this.placeBlockAtCurrentPosition(var1, Block.pressurePlatePlanks.blockID, 0, this.tablePosition, 2, 3, var3); + } + + this.placeBlockAtCurrentPosition(var1, 0, 0, 1, 1, 0, var3); + this.placeBlockAtCurrentPosition(var1, 0, 0, 1, 2, 0, var3); + this.placeDoorAtCurrentPosition(var1, var3, var2, 1, 1, 0, this.getMetadataWithOffset(Block.doorWood.blockID, 1)); + if(this.getBlockIdAtCurrentPosition(var1, 1, 0, -1, var3) == 0 && this.getBlockIdAtCurrentPosition(var1, 1, -1, -1, var3) != 0) { + this.placeBlockAtCurrentPosition(var1, Block.stairsCobblestone.blockID, this.getMetadataWithOffset(Block.stairsCobblestone.blockID, 3), 1, 0, -1, var3); + } + + for(int var4 = 0; var4 < 5; ++var4) { + for(int var5 = 0; var5 < 4; ++var5) { + this.clearCurrentPositionBlocksUpwards(var1, var5, 6, var4, var3); + this.fillCurrentPositionBlocksDownwards(var1, Block.cobblestone.blockID, 0, var5, -1, var4, var3); + } + } + + this.spawnVillagers(var1, var3, 1, 1, 2, 1); + return true; + } +} diff --git a/src/net/minecraft/src/CompressedStreamTools.java b/src/net/minecraft/src/CompressedStreamTools.java new file mode 100644 index 0000000..e0738c6 --- /dev/null +++ b/src/net/minecraft/src/CompressedStreamTools.java @@ -0,0 +1,128 @@ +package net.minecraft.src; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +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; + +public class CompressedStreamTools { + public static NBTTagCompound readCompressed(InputStream var0) throws IOException { + DataInputStream var1 = new DataInputStream(new BufferedInputStream(new GZIPInputStream(var0))); + + NBTTagCompound var2; + try { + var2 = read((DataInput)var1); + } finally { + var1.close(); + } + + return var2; + } + + public static void writeCompressed(NBTTagCompound var0, OutputStream var1) throws IOException { + DataOutputStream var2 = new DataOutputStream(new GZIPOutputStream(var1)); + + try { + write(var0, (DataOutput)var2); + } finally { + var2.close(); + } + + } + + public static NBTTagCompound decompress(byte[] var0) throws IOException { + DataInputStream var1 = new DataInputStream(new BufferedInputStream(new GZIPInputStream(new ByteArrayInputStream(var0)))); + + NBTTagCompound var2; + try { + var2 = read((DataInput)var1); + } finally { + var1.close(); + } + + return var2; + } + + public static byte[] compress(NBTTagCompound var0) throws IOException { + ByteArrayOutputStream var1 = new ByteArrayOutputStream(); + DataOutputStream var2 = new DataOutputStream(new GZIPOutputStream(var1)); + + try { + write(var0, (DataOutput)var2); + } finally { + var2.close(); + } + + return var1.toByteArray(); + } + + public static void safeWrite(NBTTagCompound var0, File var1) throws IOException { + File var2 = new File(var1.getAbsolutePath() + "_tmp"); + if(var2.exists()) { + var2.delete(); + } + + write(var0, var2); + if(var1.exists()) { + var1.delete(); + } + + if(var1.exists()) { + throw new IOException("Failed to delete " + var1); + } else { + var2.renameTo(var1); + } + } + + public static void write(NBTTagCompound var0, File var1) throws IOException { + DataOutputStream var2 = new DataOutputStream(new FileOutputStream(var1)); + + try { + write(var0, (DataOutput)var2); + } finally { + var2.close(); + } + + } + + public static NBTTagCompound read(File var0) throws IOException { + if(!var0.exists()) { + return null; + } else { + DataInputStream var1 = new DataInputStream(new FileInputStream(var0)); + + NBTTagCompound var2; + try { + var2 = read((DataInput)var1); + } finally { + var1.close(); + } + + return var2; + } + } + + public static NBTTagCompound read(DataInput var0) throws IOException { + NBTBase var1 = NBTBase.readNamedTag(var0); + if(var1 instanceof NBTTagCompound) { + return (NBTTagCompound)var1; + } else { + throw new IOException("Root tag must be a named compound tag"); + } + } + + public static void write(NBTTagCompound var0, DataOutput var1) throws IOException { + NBTBase.writeNamedTag(var0, var1); + } +} diff --git a/src/net/minecraft/src/Container.java b/src/net/minecraft/src/Container.java new file mode 100644 index 0000000..baedf5f --- /dev/null +++ b/src/net/minecraft/src/Container.java @@ -0,0 +1,524 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +public abstract class Container { + public List inventoryItemStacks = new ArrayList(); + public List inventorySlots = new ArrayList(); + public int windowId = 0; + private short transactionID = 0; + private int field_94535_f = -1; + private int field_94536_g = 0; + private final Set field_94537_h = new HashSet(); + protected List crafters = new ArrayList(); + private Set playerList = new HashSet(); + + protected Slot addSlotToContainer(Slot var1) { + var1.slotNumber = this.inventorySlots.size(); + this.inventorySlots.add(var1); + this.inventoryItemStacks.add((Object)null); + return var1; + } + + public void addCraftingToCrafters(ICrafting var1) { + if(this.crafters.contains(var1)) { + throw new IllegalArgumentException("Listener already listening"); + } else { + this.crafters.add(var1); + var1.sendContainerAndContentsToPlayer(this, this.getInventory()); + this.detectAndSendChanges(); + } + } + + public void removeCraftingFromCrafters(ICrafting var1) { + this.crafters.remove(var1); + } + + public List getInventory() { + ArrayList var1 = new ArrayList(); + + for(int var2 = 0; var2 < this.inventorySlots.size(); ++var2) { + var1.add(((Slot)this.inventorySlots.get(var2)).getStack()); + } + + return var1; + } + + public void detectAndSendChanges() { + for(int var1 = 0; var1 < this.inventorySlots.size(); ++var1) { + ItemStack var2 = ((Slot)this.inventorySlots.get(var1)).getStack(); + ItemStack var3 = (ItemStack)this.inventoryItemStacks.get(var1); + if(!ItemStack.areItemStacksEqual(var3, var2)) { + var3 = var2 == null ? null : var2.copy(); + this.inventoryItemStacks.set(var1, var3); + + for(int var4 = 0; var4 < this.crafters.size(); ++var4) { + ((ICrafting)this.crafters.get(var4)).sendSlotContents(this, var1, var3); + } + } + } + + } + + public boolean enchantItem(EntityPlayer var1, int var2) { + return false; + } + + public Slot getSlotFromInventory(IInventory var1, int var2) { + for(int var3 = 0; var3 < this.inventorySlots.size(); ++var3) { + Slot var4 = (Slot)this.inventorySlots.get(var3); + if(var4.isSlotInInventory(var1, var2)) { + return var4; + } + } + + return null; + } + + public Slot getSlot(int var1) { + return (Slot)this.inventorySlots.get(var1); + } + + public ItemStack transferStackInSlot(EntityPlayer var1, int var2) { + Slot var3 = (Slot)this.inventorySlots.get(var2); + return var3 != null ? var3.getStack() : null; + } + + public ItemStack slotClick(int var1, int var2, int var3, EntityPlayer var4) { + ItemStack var5 = null; + InventoryPlayer var6 = var4.inventory; + int var9; + ItemStack var17; + if(var3 == 5) { + int var7 = this.field_94536_g; + this.field_94536_g = func_94532_c(var2); + if((var7 != 1 || this.field_94536_g != 2) && var7 != this.field_94536_g) { + this.func_94533_d(); + } else if(var6.getItemStack() == null) { + this.func_94533_d(); + } else if(this.field_94536_g == 0) { + this.field_94535_f = func_94529_b(var2); + if(func_94528_d(this.field_94535_f)) { + this.field_94536_g = 1; + this.field_94537_h.clear(); + } else { + this.func_94533_d(); + } + } else if(this.field_94536_g == 1) { + Slot var8 = (Slot)this.inventorySlots.get(var1); + if(var8 != null && func_94527_a(var8, var6.getItemStack(), true) && var8.isItemValid(var6.getItemStack()) && var6.getItemStack().stackSize > this.field_94537_h.size() && this.func_94531_b(var8)) { + this.field_94537_h.add(var8); + } + } else if(this.field_94536_g == 2) { + if(!this.field_94537_h.isEmpty()) { + var17 = var6.getItemStack().copy(); + var9 = var6.getItemStack().stackSize; + Iterator var10 = this.field_94537_h.iterator(); + + while(var10.hasNext()) { + Slot var11 = (Slot)var10.next(); + if(var11 != null && func_94527_a(var11, var6.getItemStack(), true) && var11.isItemValid(var6.getItemStack()) && var6.getItemStack().stackSize >= this.field_94537_h.size() && this.func_94531_b(var11)) { + ItemStack var12 = var17.copy(); + int var13 = var11.getHasStack() ? var11.getStack().stackSize : 0; + func_94525_a(this.field_94537_h, this.field_94535_f, var12, var13); + if(var12.stackSize > var12.getMaxStackSize()) { + var12.stackSize = var12.getMaxStackSize(); + } + + if(var12.stackSize > var11.getSlotStackLimit()) { + var12.stackSize = var11.getSlotStackLimit(); + } + + var9 -= var12.stackSize - var13; + var11.putStack(var12); + } + } + + var17.stackSize = var9; + if(var17.stackSize <= 0) { + var17 = null; + } + + var6.setItemStack(var17); + } + + this.func_94533_d(); + } else { + this.func_94533_d(); + } + } else if(this.field_94536_g != 0) { + this.func_94533_d(); + } else { + Slot var16; + int var19; + ItemStack var22; + if((var3 == 0 || var3 == 1) && (var2 == 0 || var2 == 1)) { + if(var1 == -999) { + if(var6.getItemStack() != null && var1 == -999) { + if(var2 == 0) { + var4.dropPlayerItem(var6.getItemStack()); + var6.setItemStack((ItemStack)null); + } + + if(var2 == 1) { + var4.dropPlayerItem(var6.getItemStack().splitStack(1)); + if(var6.getItemStack().stackSize == 0) { + var6.setItemStack((ItemStack)null); + } + } + } + } else if(var3 == 1) { + if(var1 < 0) { + return null; + } + + var16 = (Slot)this.inventorySlots.get(var1); + if(var16 != null && var16.canTakeStack(var4)) { + var17 = this.transferStackInSlot(var4, var1); + if(var17 != null) { + var9 = var17.itemID; + var5 = var17.copy(); + if(var16 != null && var16.getStack() != null && var16.getStack().itemID == var9) { + this.retrySlotClick(var1, var2, true, var4); + } + } + } + } else { + if(var1 < 0) { + return null; + } + + var16 = (Slot)this.inventorySlots.get(var1); + if(var16 != null) { + var17 = var16.getStack(); + ItemStack var20 = var6.getItemStack(); + if(var17 != null) { + var5 = var17.copy(); + } + + if(var17 == null) { + if(var20 != null && var16.isItemValid(var20)) { + var19 = var2 == 0 ? var20.stackSize : 1; + if(var19 > var16.getSlotStackLimit()) { + var19 = var16.getSlotStackLimit(); + } + + var16.putStack(var20.splitStack(var19)); + if(var20.stackSize == 0) { + var6.setItemStack((ItemStack)null); + } + } + } else if(var16.canTakeStack(var4)) { + if(var20 == null) { + var19 = var2 == 0 ? var17.stackSize : (var17.stackSize + 1) / 2; + var22 = var16.decrStackSize(var19); + var6.setItemStack(var22); + if(var17.stackSize == 0) { + var16.putStack((ItemStack)null); + } + + var16.onPickupFromSlot(var4, var6.getItemStack()); + } else if(var16.isItemValid(var20)) { + if(var17.itemID == var20.itemID && var17.getItemDamage() == var20.getItemDamage() && ItemStack.areItemStackTagsEqual(var17, var20)) { + var19 = var2 == 0 ? var20.stackSize : 1; + if(var19 > var16.getSlotStackLimit() - var17.stackSize) { + var19 = var16.getSlotStackLimit() - var17.stackSize; + } + + if(var19 > var20.getMaxStackSize() - var17.stackSize) { + var19 = var20.getMaxStackSize() - var17.stackSize; + } + + var20.splitStack(var19); + if(var20.stackSize == 0) { + var6.setItemStack((ItemStack)null); + } + + var17.stackSize += var19; + } else if(var20.stackSize <= var16.getSlotStackLimit()) { + var16.putStack(var20); + var6.setItemStack(var17); + } + } else if(var17.itemID == var20.itemID && var20.getMaxStackSize() > 1 && (!var17.getHasSubtypes() || var17.getItemDamage() == var20.getItemDamage()) && ItemStack.areItemStackTagsEqual(var17, var20)) { + var19 = var17.stackSize; + if(var19 > 0 && var19 + var20.stackSize <= var20.getMaxStackSize()) { + var20.stackSize += var19; + var17 = var16.decrStackSize(var19); + if(var17.stackSize == 0) { + var16.putStack((ItemStack)null); + } + + var16.onPickupFromSlot(var4, var6.getItemStack()); + } + } + } + + var16.onSlotChanged(); + } + } + } else if(var3 == 2 && var2 >= 0 && var2 < 9) { + var16 = (Slot)this.inventorySlots.get(var1); + if(var16.canTakeStack(var4)) { + var17 = var6.getStackInSlot(var2); + boolean var18 = var17 == null || var16.inventory == var6 && var16.isItemValid(var17); + var19 = -1; + if(!var18) { + var19 = var6.getFirstEmptyStack(); + var18 |= var19 > -1; + } + + if(var16.getHasStack() && var18) { + var22 = var16.getStack(); + var6.setInventorySlotContents(var2, var22.copy()); + if((var16.inventory != var6 || !var16.isItemValid(var17)) && var17 != null) { + if(var19 > -1) { + var6.addItemStackToInventory(var17); + var16.decrStackSize(var22.stackSize); + var16.putStack((ItemStack)null); + var16.onPickupFromSlot(var4, var22); + } + } else { + var16.decrStackSize(var22.stackSize); + var16.putStack(var17); + var16.onPickupFromSlot(var4, var22); + } + } else if(!var16.getHasStack() && var17 != null && var16.isItemValid(var17)) { + var6.setInventorySlotContents(var2, (ItemStack)null); + var16.putStack(var17); + } + } + } else if(var3 == 3 && var4.capabilities.isCreativeMode && var6.getItemStack() == null && var1 >= 0) { + var16 = (Slot)this.inventorySlots.get(var1); + if(var16 != null && var16.getHasStack()) { + var17 = var16.getStack().copy(); + var17.stackSize = var17.getMaxStackSize(); + var6.setItemStack(var17); + } + } else if(var3 == 4 && var6.getItemStack() == null && var1 >= 0) { + var16 = (Slot)this.inventorySlots.get(var1); + if(var16 != null && var16.getHasStack() && var16.canTakeStack(var4)) { + var17 = var16.decrStackSize(var2 == 0 ? 1 : var16.getStack().stackSize); + var16.onPickupFromSlot(var4, var17); + var4.dropPlayerItem(var17); + } + } else if(var3 == 6 && var1 >= 0) { + var16 = (Slot)this.inventorySlots.get(var1); + var17 = var6.getItemStack(); + if(var17 != null && (var16 == null || !var16.getHasStack() || !var16.canTakeStack(var4))) { + var9 = var2 == 0 ? 0 : this.inventorySlots.size() - 1; + var19 = var2 == 0 ? 1 : -1; + + for(int var21 = 0; var21 < 2; ++var21) { + for(int var23 = var9; var23 >= 0 && var23 < this.inventorySlots.size() && var17.stackSize < var17.getMaxStackSize(); var23 += var19) { + Slot var24 = (Slot)this.inventorySlots.get(var23); + if(var24.getHasStack() && func_94527_a(var24, var17, true) && var24.canTakeStack(var4) && this.func_94530_a(var17, var24) && (var21 != 0 || var24.getStack().stackSize != var24.getStack().getMaxStackSize())) { + int var14 = Math.min(var17.getMaxStackSize() - var17.stackSize, var24.getStack().stackSize); + ItemStack var15 = var24.decrStackSize(var14); + var17.stackSize += var14; + if(var15.stackSize <= 0) { + var24.putStack((ItemStack)null); + } + + var24.onPickupFromSlot(var4, var15); + } + } + } + } + + this.detectAndSendChanges(); + } + } + + return var5; + } + + public boolean func_94530_a(ItemStack var1, Slot var2) { + return true; + } + + protected void retrySlotClick(int var1, int var2, boolean var3, EntityPlayer var4) { + this.slotClick(var1, var2, 1, var4); + } + + public void onCraftGuiClosed(EntityPlayer var1) { + InventoryPlayer var2 = var1.inventory; + if(var2.getItemStack() != null) { + var1.dropPlayerItem(var2.getItemStack()); + var2.setItemStack((ItemStack)null); + } + + } + + public void onCraftMatrixChanged(IInventory var1) { + this.detectAndSendChanges(); + } + + public void putStackInSlot(int var1, ItemStack var2) { + this.getSlot(var1).putStack(var2); + } + + public void putStacksInSlots(ItemStack[] var1) { + for(int var2 = 0; var2 < var1.length; ++var2) { + this.getSlot(var2).putStack(var1[var2]); + } + + } + + public void updateProgressBar(int var1, int var2) { + } + + public short getNextTransactionID(InventoryPlayer var1) { + ++this.transactionID; + return this.transactionID; + } + + public boolean isPlayerNotUsingContainer(EntityPlayer var1) { + return !this.playerList.contains(var1); + } + + public void setPlayerIsPresent(EntityPlayer var1, boolean var2) { + if(var2) { + this.playerList.remove(var1); + } else { + this.playerList.add(var1); + } + + } + + public abstract boolean canInteractWith(EntityPlayer var1); + + protected boolean mergeItemStack(ItemStack var1, int var2, int var3, boolean var4) { + boolean var5 = false; + int var6 = var2; + if(var4) { + var6 = var3 - 1; + } + + Slot var7; + ItemStack var8; + if(var1.isStackable()) { + while(var1.stackSize > 0 && (!var4 && var6 < var3 || var4 && var6 >= var2)) { + var7 = (Slot)this.inventorySlots.get(var6); + var8 = var7.getStack(); + if(var8 != null && var8.itemID == var1.itemID && (!var1.getHasSubtypes() || var1.getItemDamage() == var8.getItemDamage()) && ItemStack.areItemStackTagsEqual(var1, var8)) { + int var9 = var8.stackSize + var1.stackSize; + if(var9 <= var1.getMaxStackSize()) { + var1.stackSize = 0; + var8.stackSize = var9; + var7.onSlotChanged(); + var5 = true; + } else if(var8.stackSize < var1.getMaxStackSize()) { + var1.stackSize -= var1.getMaxStackSize() - var8.stackSize; + var8.stackSize = var1.getMaxStackSize(); + var7.onSlotChanged(); + var5 = true; + } + } + + if(var4) { + --var6; + } else { + ++var6; + } + } + } + + if(var1.stackSize > 0) { + if(var4) { + var6 = var3 - 1; + } else { + var6 = var2; + } + + while(!var4 && var6 < var3 || var4 && var6 >= var2) { + var7 = (Slot)this.inventorySlots.get(var6); + var8 = var7.getStack(); + if(var8 == null) { + var7.putStack(var1.copy()); + var7.onSlotChanged(); + var1.stackSize = 0; + var5 = true; + break; + } + + if(var4) { + --var6; + } else { + ++var6; + } + } + } + + return var5; + } + + public static int func_94529_b(int var0) { + return var0 >> 2 & 3; + } + + public static int func_94532_c(int var0) { + return var0 & 3; + } + + public static int func_94534_d(int var0, int var1) { + return var0 & 3 | (var1 & 3) << 2; + } + + public static boolean func_94528_d(int var0) { + return var0 == 0 || var0 == 1; + } + + protected void func_94533_d() { + this.field_94536_g = 0; + this.field_94537_h.clear(); + } + + public static boolean func_94527_a(Slot var0, ItemStack var1, boolean var2) { + boolean var3 = var0 == null || !var0.getHasStack(); + if(var0 != null && var0.getHasStack() && var1 != null && var1.isItemEqual(var0.getStack()) && ItemStack.areItemStackTagsEqual(var0.getStack(), var1)) { + var3 |= var0.getStack().stackSize + (var2 ? 0 : var1.stackSize) <= var1.getMaxStackSize(); + } + + return var3; + } + + public static void func_94525_a(Set var0, int var1, ItemStack var2, int var3) { + switch(var1) { + case 0: + var2.stackSize = MathHelper.floor_float((float)var2.stackSize / (float)var0.size()); + break; + case 1: + var2.stackSize = 1; + } + + var2.stackSize += var3; + } + + public boolean func_94531_b(Slot var1) { + return true; + } + + public static int calcRedstoneFromInventory(IInventory var0) { + if(var0 == null) { + return 0; + } else { + int var1 = 0; + float var2 = 0.0F; + + for(int var3 = 0; var3 < var0.getSizeInventory(); ++var3) { + ItemStack var4 = var0.getStackInSlot(var3); + if(var4 != null) { + var2 += (float)var4.stackSize / (float)Math.min(var0.getInventoryStackLimit(), var4.getMaxStackSize()); + ++var1; + } + } + + var2 /= (float)var0.getSizeInventory(); + return MathHelper.floor_float(var2 * 14.0F) + (var1 > 0 ? 1 : 0); + } + } +} diff --git a/src/net/minecraft/src/ContainerBeacon.java b/src/net/minecraft/src/ContainerBeacon.java new file mode 100644 index 0000000..f0b29aa --- /dev/null +++ b/src/net/minecraft/src/ContainerBeacon.java @@ -0,0 +1,109 @@ +package net.minecraft.src; + +public class ContainerBeacon extends Container { + private TileEntityBeacon theBeacon; + private final SlotBeacon beaconSlot; + private int field_82865_g; + private int field_82867_h; + private int field_82868_i; + + public ContainerBeacon(InventoryPlayer var1, TileEntityBeacon var2) { + this.theBeacon = var2; + this.addSlotToContainer(this.beaconSlot = new SlotBeacon(this, var2, 0, 136, 110)); + byte var3 = 36; + short var4 = 137; + + int var5; + for(var5 = 0; var5 < 3; ++var5) { + for(int var6 = 0; var6 < 9; ++var6) { + this.addSlotToContainer(new Slot(var1, var6 + var5 * 9 + 9, var3 + var6 * 18, var4 + var5 * 18)); + } + } + + for(var5 = 0; var5 < 9; ++var5) { + this.addSlotToContainer(new Slot(var1, var5, var3 + var5 * 18, 58 + var4)); + } + + this.field_82865_g = var2.getLevels(); + this.field_82867_h = var2.getPrimaryEffect(); + this.field_82868_i = var2.getSecondaryEffect(); + } + + public void addCraftingToCrafters(ICrafting var1) { + super.addCraftingToCrafters(var1); + var1.sendProgressBarUpdate(this, 0, this.field_82865_g); + var1.sendProgressBarUpdate(this, 1, this.field_82867_h); + var1.sendProgressBarUpdate(this, 2, this.field_82868_i); + } + + public void detectAndSendChanges() { + super.detectAndSendChanges(); + } + + public void updateProgressBar(int var1, int var2) { + if(var1 == 0) { + this.theBeacon.setLevels(var2); + } + + if(var1 == 1) { + this.theBeacon.setPrimaryEffect(var2); + } + + if(var1 == 2) { + this.theBeacon.setSecondaryEffect(var2); + } + + } + + public TileEntityBeacon getBeacon() { + return this.theBeacon; + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.theBeacon.isUseableByPlayer(var1); + } + + public ItemStack transferStackInSlot(EntityPlayer var1, int var2) { + ItemStack var3 = null; + Slot var4 = (Slot)this.inventorySlots.get(var2); + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + if(var2 == 0) { + if(!this.mergeItemStack(var5, 1, 37, true)) { + return null; + } + + var4.onSlotChange(var5, var3); + } else if(!this.beaconSlot.getHasStack() && this.beaconSlot.isItemValid(var5) && var5.stackSize == 1) { + if(!this.mergeItemStack(var5, 0, 1, false)) { + return null; + } + } else if(var2 >= 1 && var2 < 28) { + if(!this.mergeItemStack(var5, 28, 37, false)) { + return null; + } + } else if(var2 >= 28 && var2 < 37) { + if(!this.mergeItemStack(var5, 1, 28, false)) { + return null; + } + } else if(!this.mergeItemStack(var5, 1, 37, false)) { + return null; + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack)null); + } else { + var4.onSlotChanged(); + } + + if(var5.stackSize == var3.stackSize) { + return null; + } + + var4.onPickupFromSlot(var1, var5); + } + + return var3; + } +} diff --git a/src/net/minecraft/src/ContainerBrewingStand.java b/src/net/minecraft/src/ContainerBrewingStand.java new file mode 100644 index 0000000..41a3dc5 --- /dev/null +++ b/src/net/minecraft/src/ContainerBrewingStand.java @@ -0,0 +1,106 @@ +package net.minecraft.src; + +public class ContainerBrewingStand extends Container { + private TileEntityBrewingStand tileBrewingStand; + private final Slot theSlot; + private int brewTime = 0; + + public ContainerBrewingStand(InventoryPlayer var1, TileEntityBrewingStand var2) { + this.tileBrewingStand = var2; + this.addSlotToContainer(new SlotBrewingStandPotion(var1.player, var2, 0, 56, 46)); + this.addSlotToContainer(new SlotBrewingStandPotion(var1.player, var2, 1, 79, 53)); + this.addSlotToContainer(new SlotBrewingStandPotion(var1.player, var2, 2, 102, 46)); + this.theSlot = this.addSlotToContainer(new SlotBrewingStandIngredient(this, var2, 3, 79, 17)); + + int var3; + for(var3 = 0; var3 < 3; ++var3) { + for(int var4 = 0; var4 < 9; ++var4) { + this.addSlotToContainer(new Slot(var1, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for(var3 = 0; var3 < 9; ++var3) { + this.addSlotToContainer(new Slot(var1, var3, 8 + var3 * 18, 142)); + } + + } + + public void addCraftingToCrafters(ICrafting var1) { + super.addCraftingToCrafters(var1); + var1.sendProgressBarUpdate(this, 0, this.tileBrewingStand.getBrewTime()); + } + + public void detectAndSendChanges() { + super.detectAndSendChanges(); + + for(int var1 = 0; var1 < this.crafters.size(); ++var1) { + ICrafting var2 = (ICrafting)this.crafters.get(var1); + if(this.brewTime != this.tileBrewingStand.getBrewTime()) { + var2.sendProgressBarUpdate(this, 0, this.tileBrewingStand.getBrewTime()); + } + } + + this.brewTime = this.tileBrewingStand.getBrewTime(); + } + + public void updateProgressBar(int var1, int var2) { + if(var1 == 0) { + this.tileBrewingStand.setBrewTime(var2); + } + + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.tileBrewingStand.isUseableByPlayer(var1); + } + + public ItemStack transferStackInSlot(EntityPlayer var1, int var2) { + ItemStack var3 = null; + Slot var4 = (Slot)this.inventorySlots.get(var2); + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + if((var2 < 0 || var2 > 2) && var2 != 3) { + if(!this.theSlot.getHasStack() && this.theSlot.isItemValid(var5)) { + if(!this.mergeItemStack(var5, 3, 4, false)) { + return null; + } + } else if(SlotBrewingStandPotion.canHoldPotion(var3)) { + if(!this.mergeItemStack(var5, 0, 3, false)) { + return null; + } + } else if(var2 >= 4 && var2 < 31) { + if(!this.mergeItemStack(var5, 31, 40, false)) { + return null; + } + } else if(var2 >= 31 && var2 < 40) { + if(!this.mergeItemStack(var5, 4, 31, false)) { + return null; + } + } else if(!this.mergeItemStack(var5, 4, 40, false)) { + return null; + } + } else { + if(!this.mergeItemStack(var5, 4, 40, true)) { + return null; + } + + var4.onSlotChange(var5, var3); + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack)null); + } else { + var4.onSlotChanged(); + } + + if(var5.stackSize == var3.stackSize) { + return null; + } + + var4.onPickupFromSlot(var1, var5); + } + + return var3; + } +} diff --git a/src/net/minecraft/src/ContainerChest.java b/src/net/minecraft/src/ContainerChest.java new file mode 100644 index 0000000..dc585ec --- /dev/null +++ b/src/net/minecraft/src/ContainerChest.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +public class ContainerChest extends Container { + private IInventory lowerChestInventory; + private int numRows; + + public ContainerChest(IInventory var1, IInventory var2) { + this.lowerChestInventory = var2; + this.numRows = var2.getSizeInventory() / 9; + var2.openChest(); + int var3 = (this.numRows - 4) * 18; + + int var4; + int var5; + for(var4 = 0; var4 < this.numRows; ++var4) { + for(var5 = 0; var5 < 9; ++var5) { + this.addSlotToContainer(new Slot(var2, var5 + var4 * 9, 8 + var5 * 18, 18 + var4 * 18)); + } + } + + for(var4 = 0; var4 < 3; ++var4) { + for(var5 = 0; var5 < 9; ++var5) { + this.addSlotToContainer(new Slot(var1, var5 + var4 * 9 + 9, 8 + var5 * 18, 103 + var4 * 18 + var3)); + } + } + + for(var4 = 0; var4 < 9; ++var4) { + this.addSlotToContainer(new Slot(var1, var4, 8 + var4 * 18, 161 + var3)); + } + + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.lowerChestInventory.isUseableByPlayer(var1); + } + + public ItemStack transferStackInSlot(EntityPlayer var1, int var2) { + ItemStack var3 = null; + Slot var4 = (Slot)this.inventorySlots.get(var2); + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + if(var2 < this.numRows * 9) { + if(!this.mergeItemStack(var5, this.numRows * 9, this.inventorySlots.size(), true)) { + return null; + } + } else if(!this.mergeItemStack(var5, 0, this.numRows * 9, false)) { + return null; + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack)null); + } else { + var4.onSlotChanged(); + } + } + + return var3; + } + + public void onCraftGuiClosed(EntityPlayer var1) { + super.onCraftGuiClosed(var1); + this.lowerChestInventory.closeChest(); + } + + public IInventory getLowerChestInventory() { + return this.lowerChestInventory; + } +} diff --git a/src/net/minecraft/src/ContainerCreative.java b/src/net/minecraft/src/ContainerCreative.java new file mode 100644 index 0000000..2f14c04 --- /dev/null +++ b/src/net/minecraft/src/ContainerCreative.java @@ -0,0 +1,75 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +class ContainerCreative extends Container { + public List itemList = new ArrayList(); + + public ContainerCreative(EntityPlayer var1) { + InventoryPlayer var2 = var1.inventory; + + int var3; + for(var3 = 0; var3 < 5; ++var3) { + for(int var4 = 0; var4 < 9; ++var4) { + this.addSlotToContainer(new Slot(GuiContainerCreative.getInventory(), var3 * 9 + var4, 9 + var4 * 18, 18 + var3 * 18)); + } + } + + for(var3 = 0; var3 < 9; ++var3) { + this.addSlotToContainer(new Slot(var2, var3, 9 + var3 * 18, 112)); + } + + this.scrollTo(0.0F); + } + + public boolean canInteractWith(EntityPlayer var1) { + return true; + } + + public void scrollTo(float var1) { + int var2 = this.itemList.size() / 9 - 5 + 1; + int var3 = (int)((double)(var1 * (float)var2) + 0.5D); + if(var3 < 0) { + var3 = 0; + } + + for(int var4 = 0; var4 < 5; ++var4) { + for(int var5 = 0; var5 < 9; ++var5) { + int var6 = var5 + (var4 + var3) * 9; + if(var6 >= 0 && var6 < this.itemList.size()) { + GuiContainerCreative.getInventory().setInventorySlotContents(var5 + var4 * 9, (ItemStack)this.itemList.get(var6)); + } else { + GuiContainerCreative.getInventory().setInventorySlotContents(var5 + var4 * 9, (ItemStack)null); + } + } + } + + } + + public boolean hasMoreThan1PageOfItemsInList() { + return this.itemList.size() > 45; + } + + protected void retrySlotClick(int var1, int var2, boolean var3, EntityPlayer var4) { + } + + public ItemStack transferStackInSlot(EntityPlayer var1, int var2) { + if(var2 >= this.inventorySlots.size() - 9 && var2 < this.inventorySlots.size()) { + Slot var3 = (Slot)this.inventorySlots.get(var2); + if(var3 != null && var3.getHasStack()) { + var3.putStack((ItemStack)null); + } + } + + return null; + } + + public boolean func_94530_a(ItemStack var1, Slot var2) { + return var2.yDisplayPosition > 90; + } + + public boolean func_94531_b(Slot var1) { + return var1.inventory instanceof InventoryPlayer || var1.yDisplayPosition > 90 && var1.xDisplayPosition <= 162; + } +} diff --git a/src/net/minecraft/src/ContainerDispenser.java b/src/net/minecraft/src/ContainerDispenser.java new file mode 100644 index 0000000..3bf434d --- /dev/null +++ b/src/net/minecraft/src/ContainerDispenser.java @@ -0,0 +1,62 @@ +package net.minecraft.src; + +public class ContainerDispenser extends Container { + private TileEntityDispenser tileEntityDispenser; + + public ContainerDispenser(IInventory var1, TileEntityDispenser var2) { + this.tileEntityDispenser = var2; + + int var3; + int var4; + for(var3 = 0; var3 < 3; ++var3) { + for(var4 = 0; var4 < 3; ++var4) { + this.addSlotToContainer(new Slot(var2, var4 + var3 * 3, 62 + var4 * 18, 17 + var3 * 18)); + } + } + + for(var3 = 0; var3 < 3; ++var3) { + for(var4 = 0; var4 < 9; ++var4) { + this.addSlotToContainer(new Slot(var1, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for(var3 = 0; var3 < 9; ++var3) { + this.addSlotToContainer(new Slot(var1, var3, 8 + var3 * 18, 142)); + } + + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.tileEntityDispenser.isUseableByPlayer(var1); + } + + public ItemStack transferStackInSlot(EntityPlayer var1, int var2) { + ItemStack var3 = null; + Slot var4 = (Slot)this.inventorySlots.get(var2); + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + if(var2 < 9) { + if(!this.mergeItemStack(var5, 9, 45, true)) { + return null; + } + } else if(!this.mergeItemStack(var5, 0, 9, false)) { + return null; + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack)null); + } else { + var4.onSlotChanged(); + } + + if(var5.stackSize == var3.stackSize) { + return null; + } + + var4.onPickupFromSlot(var1, var5); + } + + return var3; + } +} diff --git a/src/net/minecraft/src/ContainerEnchantment.java b/src/net/minecraft/src/ContainerEnchantment.java new file mode 100644 index 0000000..7e7ebac --- /dev/null +++ b/src/net/minecraft/src/ContainerEnchantment.java @@ -0,0 +1,210 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ContainerEnchantment extends Container { + public IInventory tableInventory = new SlotEnchantmentTable(this, "Enchant", true, 1); + private World worldPointer; + private int posX; + private int posY; + private int posZ; + private Random rand = new Random(); + public long nameSeed; + public int[] enchantLevels = new int[3]; + + public ContainerEnchantment(InventoryPlayer var1, World var2, int var3, int var4, int var5) { + this.worldPointer = var2; + this.posX = var3; + this.posY = var4; + this.posZ = var5; + this.addSlotToContainer(new SlotEnchantment(this, this.tableInventory, 0, 25, 47)); + + int var6; + for(var6 = 0; var6 < 3; ++var6) { + for(int var7 = 0; var7 < 9; ++var7) { + this.addSlotToContainer(new Slot(var1, var7 + var6 * 9 + 9, 8 + var7 * 18, 84 + var6 * 18)); + } + } + + for(var6 = 0; var6 < 9; ++var6) { + this.addSlotToContainer(new Slot(var1, var6, 8 + var6 * 18, 142)); + } + + } + + public void addCraftingToCrafters(ICrafting var1) { + super.addCraftingToCrafters(var1); + var1.sendProgressBarUpdate(this, 0, this.enchantLevels[0]); + var1.sendProgressBarUpdate(this, 1, this.enchantLevels[1]); + var1.sendProgressBarUpdate(this, 2, this.enchantLevels[2]); + } + + public void detectAndSendChanges() { + super.detectAndSendChanges(); + + for(int var1 = 0; var1 < this.crafters.size(); ++var1) { + ICrafting var2 = (ICrafting)this.crafters.get(var1); + var2.sendProgressBarUpdate(this, 0, this.enchantLevels[0]); + var2.sendProgressBarUpdate(this, 1, this.enchantLevels[1]); + var2.sendProgressBarUpdate(this, 2, this.enchantLevels[2]); + } + + } + + public void updateProgressBar(int var1, int var2) { + if(var1 >= 0 && var1 <= 2) { + this.enchantLevels[var1] = var2; + } else { + super.updateProgressBar(var1, var2); + } + + } + + public void onCraftMatrixChanged(IInventory var1) { + if(var1 == this.tableInventory) { + ItemStack var2 = var1.getStackInSlot(0); + int var3; + if(var2 != null && var2.isItemEnchantable()) { + this.nameSeed = this.rand.nextLong(); + if(!this.worldPointer.isRemote) { + var3 = 0; + + int var4; + for(var4 = -1; var4 <= 1; ++var4) { + for(int var5 = -1; var5 <= 1; ++var5) { + if((var4 != 0 || var5 != 0) && this.worldPointer.isAirBlock(this.posX + var5, this.posY, this.posZ + var4) && this.worldPointer.isAirBlock(this.posX + var5, this.posY + 1, this.posZ + var4)) { + if(this.worldPointer.getBlockId(this.posX + var5 * 2, this.posY, this.posZ + var4 * 2) == Block.bookShelf.blockID) { + ++var3; + } + + if(this.worldPointer.getBlockId(this.posX + var5 * 2, this.posY + 1, this.posZ + var4 * 2) == Block.bookShelf.blockID) { + ++var3; + } + + if(var5 != 0 && var4 != 0) { + if(this.worldPointer.getBlockId(this.posX + var5 * 2, this.posY, this.posZ + var4) == Block.bookShelf.blockID) { + ++var3; + } + + if(this.worldPointer.getBlockId(this.posX + var5 * 2, this.posY + 1, this.posZ + var4) == Block.bookShelf.blockID) { + ++var3; + } + + if(this.worldPointer.getBlockId(this.posX + var5, this.posY, this.posZ + var4 * 2) == Block.bookShelf.blockID) { + ++var3; + } + + if(this.worldPointer.getBlockId(this.posX + var5, this.posY + 1, this.posZ + var4 * 2) == Block.bookShelf.blockID) { + ++var3; + } + } + } + } + } + + for(var4 = 0; var4 < 3; ++var4) { + this.enchantLevels[var4] = EnchantmentHelper.calcItemStackEnchantability(this.rand, var4, var3, var2); + } + + this.detectAndSendChanges(); + } + } else { + for(var3 = 0; var3 < 3; ++var3) { + this.enchantLevels[var3] = 0; + } + } + } + + } + + public boolean enchantItem(EntityPlayer var1, int var2) { + ItemStack var3 = this.tableInventory.getStackInSlot(0); + if(this.enchantLevels[var2] > 0 && var3 != null && (var1.experienceLevel >= this.enchantLevels[var2] || var1.capabilities.isCreativeMode)) { + if(!this.worldPointer.isRemote) { + List var4 = EnchantmentHelper.buildEnchantmentList(this.rand, var3, this.enchantLevels[var2]); + boolean var5 = var3.itemID == Item.book.itemID; + if(var4 != null) { + var1.addExperienceLevel(-this.enchantLevels[var2]); + if(var5) { + var3.itemID = Item.enchantedBook.itemID; + } + + int var6 = var5 ? this.rand.nextInt(var4.size()) : -1; + + for(int var7 = 0; var7 < var4.size(); ++var7) { + EnchantmentData var8 = (EnchantmentData)var4.get(var7); + if(!var5 || var7 == var6) { + if(var5) { + Item.enchantedBook.func_92115_a(var3, var8); + } else { + var3.addEnchantment(var8.enchantmentobj, var8.enchantmentLevel); + } + } + } + + this.onCraftMatrixChanged(this.tableInventory); + } + } + + return true; + } else { + return false; + } + } + + public void onCraftGuiClosed(EntityPlayer var1) { + super.onCraftGuiClosed(var1); + if(!this.worldPointer.isRemote) { + ItemStack var2 = this.tableInventory.getStackInSlotOnClosing(0); + if(var2 != null) { + var1.dropPlayerItem(var2); + } + + } + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.worldPointer.getBlockId(this.posX, this.posY, this.posZ) != Block.enchantmentTable.blockID ? false : var1.getDistanceSq((double)this.posX + 0.5D, (double)this.posY + 0.5D, (double)this.posZ + 0.5D) <= 64.0D; + } + + public ItemStack transferStackInSlot(EntityPlayer var1, int var2) { + ItemStack var3 = null; + Slot var4 = (Slot)this.inventorySlots.get(var2); + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + if(var2 == 0) { + if(!this.mergeItemStack(var5, 1, 37, true)) { + return null; + } + } else { + if(((Slot)this.inventorySlots.get(0)).getHasStack() || !((Slot)this.inventorySlots.get(0)).isItemValid(var5)) { + return null; + } + + if(var5.hasTagCompound() && var5.stackSize == 1) { + ((Slot)this.inventorySlots.get(0)).putStack(var5.copy()); + var5.stackSize = 0; + } else if(var5.stackSize >= 1) { + ((Slot)this.inventorySlots.get(0)).putStack(new ItemStack(var5.itemID, 1, var5.getItemDamage())); + --var5.stackSize; + } + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack)null); + } else { + var4.onSlotChanged(); + } + + if(var5.stackSize == var3.stackSize) { + return null; + } + + var4.onPickupFromSlot(var1, var5); + } + + return var3; + } +} diff --git a/src/net/minecraft/src/ContainerFurnace.java b/src/net/minecraft/src/ContainerFurnace.java new file mode 100644 index 0000000..8824271 --- /dev/null +++ b/src/net/minecraft/src/ContainerFurnace.java @@ -0,0 +1,124 @@ +package net.minecraft.src; + +public class ContainerFurnace extends Container { + private TileEntityFurnace furnace; + private int lastCookTime = 0; + private int lastBurnTime = 0; + private int lastItemBurnTime = 0; + + public ContainerFurnace(InventoryPlayer var1, TileEntityFurnace var2) { + this.furnace = var2; + this.addSlotToContainer(new Slot(var2, 0, 56, 17)); + this.addSlotToContainer(new Slot(var2, 1, 56, 53)); + this.addSlotToContainer(new SlotFurnace(var1.player, var2, 2, 116, 35)); + + int var3; + for(var3 = 0; var3 < 3; ++var3) { + for(int var4 = 0; var4 < 9; ++var4) { + this.addSlotToContainer(new Slot(var1, var4 + var3 * 9 + 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for(var3 = 0; var3 < 9; ++var3) { + this.addSlotToContainer(new Slot(var1, var3, 8 + var3 * 18, 142)); + } + + } + + public void addCraftingToCrafters(ICrafting var1) { + super.addCraftingToCrafters(var1); + var1.sendProgressBarUpdate(this, 0, this.furnace.furnaceCookTime); + var1.sendProgressBarUpdate(this, 1, this.furnace.furnaceBurnTime); + var1.sendProgressBarUpdate(this, 2, this.furnace.currentItemBurnTime); + } + + public void detectAndSendChanges() { + super.detectAndSendChanges(); + + for(int var1 = 0; var1 < this.crafters.size(); ++var1) { + ICrafting var2 = (ICrafting)this.crafters.get(var1); + if(this.lastCookTime != this.furnace.furnaceCookTime) { + var2.sendProgressBarUpdate(this, 0, this.furnace.furnaceCookTime); + } + + if(this.lastBurnTime != this.furnace.furnaceBurnTime) { + var2.sendProgressBarUpdate(this, 1, this.furnace.furnaceBurnTime); + } + + if(this.lastItemBurnTime != this.furnace.currentItemBurnTime) { + var2.sendProgressBarUpdate(this, 2, this.furnace.currentItemBurnTime); + } + } + + this.lastCookTime = this.furnace.furnaceCookTime; + this.lastBurnTime = this.furnace.furnaceBurnTime; + this.lastItemBurnTime = this.furnace.currentItemBurnTime; + } + + public void updateProgressBar(int var1, int var2) { + if(var1 == 0) { + this.furnace.furnaceCookTime = var2; + } + + if(var1 == 1) { + this.furnace.furnaceBurnTime = var2; + } + + if(var1 == 2) { + this.furnace.currentItemBurnTime = var2; + } + + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.furnace.isUseableByPlayer(var1); + } + + public ItemStack transferStackInSlot(EntityPlayer var1, int var2) { + ItemStack var3 = null; + Slot var4 = (Slot)this.inventorySlots.get(var2); + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + if(var2 == 2) { + if(!this.mergeItemStack(var5, 3, 39, true)) { + return null; + } + + var4.onSlotChange(var5, var3); + } else if(var2 != 1 && var2 != 0) { + if(FurnaceRecipes.smelting().getSmeltingResult(var5.getItem().itemID) != null) { + if(!this.mergeItemStack(var5, 0, 1, false)) { + return null; + } + } else if(TileEntityFurnace.isItemFuel(var5)) { + if(!this.mergeItemStack(var5, 1, 2, false)) { + return null; + } + } else if(var2 >= 3 && var2 < 30) { + if(!this.mergeItemStack(var5, 30, 39, false)) { + return null; + } + } else if(var2 >= 30 && var2 < 39 && !this.mergeItemStack(var5, 3, 30, false)) { + return null; + } + } else if(!this.mergeItemStack(var5, 3, 39, false)) { + return null; + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack)null); + } else { + var4.onSlotChanged(); + } + + if(var5.stackSize == var3.stackSize) { + return null; + } + + var4.onPickupFromSlot(var1, var5); + } + + return var3; + } +} diff --git a/src/net/minecraft/src/ContainerHopper.java b/src/net/minecraft/src/ContainerHopper.java new file mode 100644 index 0000000..260ecdb --- /dev/null +++ b/src/net/minecraft/src/ContainerHopper.java @@ -0,0 +1,60 @@ +package net.minecraft.src; + +public class ContainerHopper extends Container { + private final IInventory field_94538_a; + + public ContainerHopper(InventoryPlayer var1, IInventory var2) { + this.field_94538_a = var2; + var2.openChest(); + byte var3 = 51; + + int var4; + for(var4 = 0; var4 < var2.getSizeInventory(); ++var4) { + this.addSlotToContainer(new Slot(var2, var4, 44 + var4 * 18, 20)); + } + + for(var4 = 0; var4 < 3; ++var4) { + for(int var5 = 0; var5 < 9; ++var5) { + this.addSlotToContainer(new Slot(var1, var5 + var4 * 9 + 9, 8 + var5 * 18, var4 * 18 + var3)); + } + } + + for(var4 = 0; var4 < 9; ++var4) { + this.addSlotToContainer(new Slot(var1, var4, 8 + var4 * 18, 58 + var3)); + } + + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.field_94538_a.isUseableByPlayer(var1); + } + + public ItemStack transferStackInSlot(EntityPlayer var1, int var2) { + ItemStack var3 = null; + Slot var4 = (Slot)this.inventorySlots.get(var2); + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + if(var2 < this.field_94538_a.getSizeInventory()) { + if(!this.mergeItemStack(var5, this.field_94538_a.getSizeInventory(), this.inventorySlots.size(), true)) { + return null; + } + } else if(!this.mergeItemStack(var5, 0, this.field_94538_a.getSizeInventory(), false)) { + return null; + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack)null); + } else { + var4.onSlotChanged(); + } + } + + return var3; + } + + public void onCraftGuiClosed(EntityPlayer var1) { + super.onCraftGuiClosed(var1); + this.field_94538_a.closeChest(); + } +} diff --git a/src/net/minecraft/src/ContainerMerchant.java b/src/net/minecraft/src/ContainerMerchant.java new file mode 100644 index 0000000..3662264 --- /dev/null +++ b/src/net/minecraft/src/ContainerMerchant.java @@ -0,0 +1,114 @@ +package net.minecraft.src; + +public class ContainerMerchant extends Container { + private IMerchant theMerchant; + private InventoryMerchant merchantInventory; + private final World theWorld; + + public ContainerMerchant(InventoryPlayer var1, IMerchant var2, World var3) { + this.theMerchant = var2; + this.theWorld = var3; + this.merchantInventory = new InventoryMerchant(var1.player, var2); + this.addSlotToContainer(new Slot(this.merchantInventory, 0, 36, 53)); + this.addSlotToContainer(new Slot(this.merchantInventory, 1, 62, 53)); + this.addSlotToContainer(new SlotMerchantResult(var1.player, var2, this.merchantInventory, 2, 120, 53)); + + int var4; + for(var4 = 0; var4 < 3; ++var4) { + for(int var5 = 0; var5 < 9; ++var5) { + this.addSlotToContainer(new Slot(var1, var5 + var4 * 9 + 9, 8 + var5 * 18, 84 + var4 * 18)); + } + } + + for(var4 = 0; var4 < 9; ++var4) { + this.addSlotToContainer(new Slot(var1, var4, 8 + var4 * 18, 142)); + } + + } + + public InventoryMerchant getMerchantInventory() { + return this.merchantInventory; + } + + public void addCraftingToCrafters(ICrafting var1) { + super.addCraftingToCrafters(var1); + } + + public void detectAndSendChanges() { + super.detectAndSendChanges(); + } + + public void onCraftMatrixChanged(IInventory var1) { + this.merchantInventory.resetRecipeAndSlots(); + super.onCraftMatrixChanged(var1); + } + + public void setCurrentRecipeIndex(int var1) { + this.merchantInventory.setCurrentRecipeIndex(var1); + } + + public void updateProgressBar(int var1, int var2) { + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.theMerchant.getCustomer() == var1; + } + + public ItemStack transferStackInSlot(EntityPlayer var1, int var2) { + ItemStack var3 = null; + Slot var4 = (Slot)this.inventorySlots.get(var2); + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + if(var2 == 2) { + if(!this.mergeItemStack(var5, 3, 39, true)) { + return null; + } + + var4.onSlotChange(var5, var3); + } else if(var2 != 0 && var2 != 1) { + if(var2 >= 3 && var2 < 30) { + if(!this.mergeItemStack(var5, 30, 39, false)) { + return null; + } + } else if(var2 >= 30 && var2 < 39 && !this.mergeItemStack(var5, 3, 30, false)) { + return null; + } + } else if(!this.mergeItemStack(var5, 3, 39, false)) { + return null; + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack)null); + } else { + var4.onSlotChanged(); + } + + if(var5.stackSize == var3.stackSize) { + return null; + } + + var4.onPickupFromSlot(var1, var5); + } + + return var3; + } + + public void onCraftGuiClosed(EntityPlayer var1) { + super.onCraftGuiClosed(var1); + this.theMerchant.setCustomer((EntityPlayer)null); + super.onCraftGuiClosed(var1); + if(!this.theWorld.isRemote) { + ItemStack var2 = this.merchantInventory.getStackInSlotOnClosing(0); + if(var2 != null) { + var1.dropPlayerItem(var2); + } + + var2 = this.merchantInventory.getStackInSlotOnClosing(1); + if(var2 != null) { + var1.dropPlayerItem(var2); + } + + } + } +} diff --git a/src/net/minecraft/src/ContainerPlayer.java b/src/net/minecraft/src/ContainerPlayer.java new file mode 100644 index 0000000..aa63900 --- /dev/null +++ b/src/net/minecraft/src/ContainerPlayer.java @@ -0,0 +1,116 @@ +package net.minecraft.src; + +public class ContainerPlayer extends Container { + public InventoryCrafting craftMatrix = new InventoryCrafting(this, 2, 2); + public IInventory craftResult = new InventoryCraftResult(); + public boolean isLocalWorld = false; + private final EntityPlayer thePlayer; + + public ContainerPlayer(InventoryPlayer var1, boolean var2, EntityPlayer var3) { + this.isLocalWorld = var2; + this.thePlayer = var3; + this.addSlotToContainer(new SlotCrafting(var1.player, this.craftMatrix, this.craftResult, 0, 144, 36)); + + int var4; + int var5; + for(var4 = 0; var4 < 2; ++var4) { + for(var5 = 0; var5 < 2; ++var5) { + this.addSlotToContainer(new Slot(this.craftMatrix, var5 + var4 * 2, 88 + var5 * 18, 26 + var4 * 18)); + } + } + + for(var4 = 0; var4 < 4; ++var4) { + this.addSlotToContainer(new SlotArmor(this, var1, var1.getSizeInventory() - 1 - var4, 8, 8 + var4 * 18, var4)); + } + + for(var4 = 0; var4 < 3; ++var4) { + for(var5 = 0; var5 < 9; ++var5) { + this.addSlotToContainer(new Slot(var1, var5 + (var4 + 1) * 9, 8 + var5 * 18, 84 + var4 * 18)); + } + } + + for(var4 = 0; var4 < 9; ++var4) { + this.addSlotToContainer(new Slot(var1, var4, 8 + var4 * 18, 142)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + public void onCraftMatrixChanged(IInventory var1) { + this.craftResult.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(this.craftMatrix, this.thePlayer.worldObj)); + } + + public void onCraftGuiClosed(EntityPlayer var1) { + super.onCraftGuiClosed(var1); + + for(int var2 = 0; var2 < 4; ++var2) { + ItemStack var3 = this.craftMatrix.getStackInSlotOnClosing(var2); + if(var3 != null) { + var1.dropPlayerItem(var3); + } + } + + this.craftResult.setInventorySlotContents(0, (ItemStack)null); + } + + public boolean canInteractWith(EntityPlayer var1) { + return true; + } + + public ItemStack transferStackInSlot(EntityPlayer var1, int var2) { + ItemStack var3 = null; + Slot var4 = (Slot)this.inventorySlots.get(var2); + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + if(var2 == 0) { + if(!this.mergeItemStack(var5, 9, 45, true)) { + return null; + } + + var4.onSlotChange(var5, var3); + } else if(var2 >= 1 && var2 < 5) { + if(!this.mergeItemStack(var5, 9, 45, false)) { + return null; + } + } else if(var2 >= 5 && var2 < 9) { + if(!this.mergeItemStack(var5, 9, 45, false)) { + return null; + } + } else if(var3.getItem() instanceof ItemArmor && !((Slot)this.inventorySlots.get(5 + ((ItemArmor)var3.getItem()).armorType)).getHasStack()) { + int var6 = 5 + ((ItemArmor)var3.getItem()).armorType; + if(!this.mergeItemStack(var5, var6, var6 + 1, false)) { + return null; + } + } else if(var2 >= 9 && var2 < 36) { + if(!this.mergeItemStack(var5, 36, 45, false)) { + return null; + } + } else if(var2 >= 36 && var2 < 45) { + if(!this.mergeItemStack(var5, 9, 36, false)) { + return null; + } + } else if(!this.mergeItemStack(var5, 9, 45, false)) { + return null; + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack)null); + } else { + var4.onSlotChanged(); + } + + if(var5.stackSize == var3.stackSize) { + return null; + } + + var4.onPickupFromSlot(var1, var5); + } + + return var3; + } + + public boolean func_94530_a(ItemStack var1, Slot var2) { + return var2.inventory != this.craftResult && super.func_94530_a(var1, var2); + } +} diff --git a/src/net/minecraft/src/ContainerRepair.java b/src/net/minecraft/src/ContainerRepair.java new file mode 100644 index 0000000..578cacf --- /dev/null +++ b/src/net/minecraft/src/ContainerRepair.java @@ -0,0 +1,351 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.Map; + +public class ContainerRepair extends Container { + private IInventory outputSlot = new InventoryCraftResult(); + private IInventory inputSlots = new InventoryRepair(this, "Repair", true, 2); + private World theWorld; + private int field_82861_i; + private int field_82858_j; + private int field_82859_k; + public int maximumCost = 0; + private int stackSizeToBeUsedInRepair = 0; + private String repairedItemName; + private final EntityPlayer thePlayer; + + public ContainerRepair(InventoryPlayer var1, World var2, int var3, int var4, int var5, EntityPlayer var6) { + this.theWorld = var2; + this.field_82861_i = var3; + this.field_82858_j = var4; + this.field_82859_k = var5; + this.thePlayer = var6; + this.addSlotToContainer(new Slot(this.inputSlots, 0, 27, 47)); + this.addSlotToContainer(new Slot(this.inputSlots, 1, 76, 47)); + this.addSlotToContainer(new SlotRepair(this, this.outputSlot, 2, 134, 47, var2, var3, var4, var5)); + + int var7; + for(var7 = 0; var7 < 3; ++var7) { + for(int var8 = 0; var8 < 9; ++var8) { + this.addSlotToContainer(new Slot(var1, var8 + var7 * 9 + 9, 8 + var8 * 18, 84 + var7 * 18)); + } + } + + for(var7 = 0; var7 < 9; ++var7) { + this.addSlotToContainer(new Slot(var1, var7, 8 + var7 * 18, 142)); + } + + } + + public void onCraftMatrixChanged(IInventory var1) { + super.onCraftMatrixChanged(var1); + if(var1 == this.inputSlots) { + this.updateRepairOutput(); + } + + } + + public void updateRepairOutput() { + ItemStack var1 = this.inputSlots.getStackInSlot(0); + this.maximumCost = 0; + int var2 = 0; + byte var3 = 0; + int var4 = 0; + if(var1 == null) { + this.outputSlot.setInventorySlotContents(0, (ItemStack)null); + this.maximumCost = 0; + } else { + ItemStack var5 = var1.copy(); + ItemStack var6 = this.inputSlots.getStackInSlot(1); + Map var7 = EnchantmentHelper.getEnchantments(var5); + boolean var8 = false; + int var19 = var3 + var1.getRepairCost() + (var6 == null ? 0 : var6.getRepairCost()); + this.stackSizeToBeUsedInRepair = 0; + int var9; + int var10; + int var11; + int var13; + int var14; + Iterator var21; + Enchantment var22; + if(var6 != null) { + var8 = var6.itemID == Item.enchantedBook.itemID && Item.enchantedBook.func_92110_g(var6).tagCount() > 0; + if(var5.isItemStackDamageable() && Item.itemsList[var5.itemID].getIsRepairable(var1, var6)) { + var9 = Math.min(var5.getItemDamageForDisplay(), var5.getMaxDamage() / 4); + if(var9 <= 0) { + this.outputSlot.setInventorySlotContents(0, (ItemStack)null); + this.maximumCost = 0; + return; + } + + for(var10 = 0; var9 > 0 && var10 < var6.stackSize; ++var10) { + var11 = var5.getItemDamageForDisplay() - var9; + var5.setItemDamage(var11); + var2 += Math.max(1, var9 / 100) + var7.size(); + var9 = Math.min(var5.getItemDamageForDisplay(), var5.getMaxDamage() / 4); + } + + this.stackSizeToBeUsedInRepair = var10; + } else { + if(!var8 && (var5.itemID != var6.itemID || !var5.isItemStackDamageable())) { + this.outputSlot.setInventorySlotContents(0, (ItemStack)null); + this.maximumCost = 0; + return; + } + + if(var5.isItemStackDamageable() && !var8) { + var9 = var1.getMaxDamage() - var1.getItemDamageForDisplay(); + var10 = var6.getMaxDamage() - var6.getItemDamageForDisplay(); + var11 = var10 + var5.getMaxDamage() * 12 / 100; + int var12 = var9 + var11; + var13 = var5.getMaxDamage() - var12; + if(var13 < 0) { + var13 = 0; + } + + if(var13 < var5.getItemDamage()) { + var5.setItemDamage(var13); + var2 += Math.max(1, var11 / 100); + } + } + + Map var20 = EnchantmentHelper.getEnchantments(var6); + var21 = var20.keySet().iterator(); + + while(var21.hasNext()) { + var11 = ((Integer)var21.next()).intValue(); + var22 = Enchantment.enchantmentsList[var11]; + var13 = var7.containsKey(Integer.valueOf(var11)) ? ((Integer)var7.get(Integer.valueOf(var11))).intValue() : 0; + var14 = ((Integer)var20.get(Integer.valueOf(var11))).intValue(); + int var10000; + if(var13 == var14) { + ++var14; + var10000 = var14; + } else { + var10000 = Math.max(var14, var13); + } + + var14 = var10000; + int var15 = var14 - var13; + boolean var16 = var22.canApply(var1); + if(this.thePlayer.capabilities.isCreativeMode || var1.itemID == ItemEnchantedBook.enchantedBook.itemID) { + var16 = true; + } + + Iterator var17 = var7.keySet().iterator(); + + while(var17.hasNext()) { + int var18 = ((Integer)var17.next()).intValue(); + if(var18 != var11 && !var22.canApplyTogether(Enchantment.enchantmentsList[var18])) { + var16 = false; + var2 += var15; + } + } + + if(var16) { + if(var14 > var22.getMaxLevel()) { + var14 = var22.getMaxLevel(); + } + + var7.put(Integer.valueOf(var11), Integer.valueOf(var14)); + int var23 = 0; + switch(var22.getWeight()) { + case 1: + var23 = 8; + break; + case 2: + var23 = 4; + case 3: + case 4: + case 6: + case 7: + case 8: + case 9: + default: + break; + case 5: + var23 = 2; + break; + case 10: + var23 = 1; + } + + if(var8) { + var23 = Math.max(1, var23 / 2); + } + + var2 += var23 * var15; + } + } + } + } + + if(this.repairedItemName != null && this.repairedItemName.length() > 0 && !this.repairedItemName.equalsIgnoreCase(this.thePlayer.getTranslator().translateNamedKey(var1.getItemName())) && !this.repairedItemName.equals(var1.getDisplayName())) { + var4 = var1.isItemStackDamageable() ? 7 : var1.stackSize * 5; + var2 += var4; + if(var1.hasDisplayName()) { + var19 += var4 / 2; + } + + var5.setItemName(this.repairedItemName); + } + + var9 = 0; + + for(var21 = var7.keySet().iterator(); var21.hasNext(); var19 += var9 + var13 * var14) { + var11 = ((Integer)var21.next()).intValue(); + var22 = Enchantment.enchantmentsList[var11]; + var13 = ((Integer)var7.get(Integer.valueOf(var11))).intValue(); + var14 = 0; + ++var9; + switch(var22.getWeight()) { + case 1: + var14 = 8; + break; + case 2: + var14 = 4; + case 3: + case 4: + case 6: + case 7: + case 8: + case 9: + default: + break; + case 5: + var14 = 2; + break; + case 10: + var14 = 1; + } + + if(var8) { + var14 = Math.max(1, var14 / 2); + } + } + + if(var8) { + var19 = Math.max(1, var19 / 2); + } + + this.maximumCost = var19 + var2; + if(var2 <= 0) { + var5 = null; + } + + if(var4 == var2 && var4 > 0 && this.maximumCost >= 40) { + this.theWorld.getWorldLogAgent().logInfo("Naming an item only, cost too high; giving discount to cap cost to 39 levels"); + this.maximumCost = 39; + } + + if(this.maximumCost >= 40 && !this.thePlayer.capabilities.isCreativeMode) { + var5 = null; + } + + if(var5 != null) { + var10 = var5.getRepairCost(); + if(var6 != null && var10 < var6.getRepairCost()) { + var10 = var6.getRepairCost(); + } + + if(var5.hasDisplayName()) { + var10 -= 9; + } + + if(var10 < 0) { + var10 = 0; + } + + var10 += 2; + var5.setRepairCost(var10); + EnchantmentHelper.setEnchantments(var7, var5); + } + + this.outputSlot.setInventorySlotContents(0, var5); + this.detectAndSendChanges(); + } + } + + public void addCraftingToCrafters(ICrafting var1) { + super.addCraftingToCrafters(var1); + var1.sendProgressBarUpdate(this, 0, this.maximumCost); + } + + public void updateProgressBar(int var1, int var2) { + if(var1 == 0) { + this.maximumCost = var2; + } + + } + + public void onCraftGuiClosed(EntityPlayer var1) { + super.onCraftGuiClosed(var1); + if(!this.theWorld.isRemote) { + for(int var2 = 0; var2 < this.inputSlots.getSizeInventory(); ++var2) { + ItemStack var3 = this.inputSlots.getStackInSlotOnClosing(var2); + if(var3 != null) { + var1.dropPlayerItem(var3); + } + } + + } + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.theWorld.getBlockId(this.field_82861_i, this.field_82858_j, this.field_82859_k) != Block.anvil.blockID ? false : var1.getDistanceSq((double)this.field_82861_i + 0.5D, (double)this.field_82858_j + 0.5D, (double)this.field_82859_k + 0.5D) <= 64.0D; + } + + public ItemStack transferStackInSlot(EntityPlayer var1, int var2) { + ItemStack var3 = null; + Slot var4 = (Slot)this.inventorySlots.get(var2); + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + if(var2 == 2) { + if(!this.mergeItemStack(var5, 3, 39, true)) { + return null; + } + + var4.onSlotChange(var5, var3); + } else if(var2 != 0 && var2 != 1) { + if(var2 >= 3 && var2 < 39 && !this.mergeItemStack(var5, 0, 2, false)) { + return null; + } + } else if(!this.mergeItemStack(var5, 3, 39, false)) { + return null; + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack)null); + } else { + var4.onSlotChanged(); + } + + if(var5.stackSize == var3.stackSize) { + return null; + } + + var4.onPickupFromSlot(var1, var5); + } + + return var3; + } + + public void updateItemName(String var1) { + this.repairedItemName = var1; + if(this.getSlot(2).getHasStack()) { + this.getSlot(2).getStack().setItemName(this.repairedItemName); + } + + this.updateRepairOutput(); + } + + static IInventory getRepairInputInventory(ContainerRepair var0) { + return var0.inputSlots; + } + + static int getStackSizeUsedInRepair(ContainerRepair var0) { + return var0.stackSizeToBeUsedInRepair; + } +} diff --git a/src/net/minecraft/src/ContainerSheep.java b/src/net/minecraft/src/ContainerSheep.java new file mode 100644 index 0000000..5ac1aa9 --- /dev/null +++ b/src/net/minecraft/src/ContainerSheep.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +class ContainerSheep extends Container { + final EntitySheep field_90034_a; + + ContainerSheep(EntitySheep var1) { + this.field_90034_a = var1; + } + + public boolean canInteractWith(EntityPlayer var1) { + return false; + } +} diff --git a/src/net/minecraft/src/ContainerWorkbench.java b/src/net/minecraft/src/ContainerWorkbench.java new file mode 100644 index 0000000..03dcb43 --- /dev/null +++ b/src/net/minecraft/src/ContainerWorkbench.java @@ -0,0 +1,103 @@ +package net.minecraft.src; + +public class ContainerWorkbench extends Container { + public InventoryCrafting craftMatrix = new InventoryCrafting(this, 3, 3); + public IInventory craftResult = new InventoryCraftResult(); + private World worldObj; + private int posX; + private int posY; + private int posZ; + + public ContainerWorkbench(InventoryPlayer var1, World var2, int var3, int var4, int var5) { + this.worldObj = var2; + this.posX = var3; + this.posY = var4; + this.posZ = var5; + this.addSlotToContainer(new SlotCrafting(var1.player, this.craftMatrix, this.craftResult, 0, 124, 35)); + + int var6; + int var7; + for(var6 = 0; var6 < 3; ++var6) { + for(var7 = 0; var7 < 3; ++var7) { + this.addSlotToContainer(new Slot(this.craftMatrix, var7 + var6 * 3, 30 + var7 * 18, 17 + var6 * 18)); + } + } + + for(var6 = 0; var6 < 3; ++var6) { + for(var7 = 0; var7 < 9; ++var7) { + this.addSlotToContainer(new Slot(var1, var7 + var6 * 9 + 9, 8 + var7 * 18, 84 + var6 * 18)); + } + } + + for(var6 = 0; var6 < 9; ++var6) { + this.addSlotToContainer(new Slot(var1, var6, 8 + var6 * 18, 142)); + } + + this.onCraftMatrixChanged(this.craftMatrix); + } + + public void onCraftMatrixChanged(IInventory var1) { + this.craftResult.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(this.craftMatrix, this.worldObj)); + } + + public void onCraftGuiClosed(EntityPlayer var1) { + super.onCraftGuiClosed(var1); + if(!this.worldObj.isRemote) { + for(int var2 = 0; var2 < 9; ++var2) { + ItemStack var3 = this.craftMatrix.getStackInSlotOnClosing(var2); + if(var3 != null) { + var1.dropPlayerItem(var3); + } + } + + } + } + + public boolean canInteractWith(EntityPlayer var1) { + return this.worldObj.getBlockId(this.posX, this.posY, this.posZ) != Block.workbench.blockID ? false : var1.getDistanceSq((double)this.posX + 0.5D, (double)this.posY + 0.5D, (double)this.posZ + 0.5D) <= 64.0D; + } + + public ItemStack transferStackInSlot(EntityPlayer var1, int var2) { + ItemStack var3 = null; + Slot var4 = (Slot)this.inventorySlots.get(var2); + if(var4 != null && var4.getHasStack()) { + ItemStack var5 = var4.getStack(); + var3 = var5.copy(); + if(var2 == 0) { + if(!this.mergeItemStack(var5, 10, 46, true)) { + return null; + } + + var4.onSlotChange(var5, var3); + } else if(var2 >= 10 && var2 < 37) { + if(!this.mergeItemStack(var5, 37, 46, false)) { + return null; + } + } else if(var2 >= 37 && var2 < 46) { + if(!this.mergeItemStack(var5, 10, 37, false)) { + return null; + } + } else if(!this.mergeItemStack(var5, 10, 46, false)) { + return null; + } + + if(var5.stackSize == 0) { + var4.putStack((ItemStack)null); + } else { + var4.onSlotChanged(); + } + + if(var5.stackSize == var3.stackSize) { + return null; + } + + var4.onPickupFromSlot(var1, var5); + } + + return var3; + } + + public boolean func_94530_a(ItemStack var1, Slot var2) { + return var2.inventory != this.craftResult && super.func_94530_a(var1, var2); + } +} diff --git a/src/net/minecraft/src/ConvertingProgressUpdate.java b/src/net/minecraft/src/ConvertingProgressUpdate.java new file mode 100644 index 0000000..17149d0 --- /dev/null +++ b/src/net/minecraft/src/ConvertingProgressUpdate.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class ConvertingProgressUpdate implements IProgressUpdate { + private long field_96245_b; + final MinecraftServer mcServer; + + public ConvertingProgressUpdate(MinecraftServer var1) { + this.mcServer = var1; + this.field_96245_b = System.currentTimeMillis(); + } + + public void displayProgressMessage(String var1) { + } + + public void resetProgressAndMessage(String var1) { + } + + public void setLoadingProgress(int var1) { + if(System.currentTimeMillis() - this.field_96245_b >= 1000L) { + this.field_96245_b = System.currentTimeMillis(); + this.mcServer.getLogAgent().logInfo("Converting... " + var1 + "%"); + } + + } + + public void onNoMoreProgress() { + } + + public void resetProgresAndWorkingMessage(String var1) { + } +} diff --git a/src/net/minecraft/src/CraftingManager.java b/src/net/minecraft/src/CraftingManager.java new file mode 100644 index 0000000..dc0e22f --- /dev/null +++ b/src/net/minecraft/src/CraftingManager.java @@ -0,0 +1,262 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +public class CraftingManager { + private static final CraftingManager instance = new CraftingManager(); + private List recipes = new ArrayList(); + + public static final CraftingManager getInstance() { + return instance; + } + + private CraftingManager() { + (new RecipesTools()).addRecipes(this); + (new RecipesWeapons()).addRecipes(this); + (new RecipesIngots()).addRecipes(this); + (new RecipesFood()).addRecipes(this); + (new RecipesCrafting()).addRecipes(this); + (new RecipesArmor()).addRecipes(this); + (new RecipesDyes()).addRecipes(this); + this.recipes.add(new RecipesArmorDyes()); + this.recipes.add(new RecipesMapCloning()); + this.recipes.add(new RecipesMapExtending()); + this.recipes.add(new RecipeFireworks()); + this.addRecipe(new ItemStack(Item.paper, 3), new Object[]{"###", Character.valueOf('#'), Item.reed}); + this.addShapelessRecipe(new ItemStack(Item.book, 1), new Object[]{Item.paper, Item.paper, Item.paper, Item.leather}); + this.addShapelessRecipe(new ItemStack(Item.writableBook, 1), new Object[]{Item.book, new ItemStack(Item.dyePowder, 1, 0), Item.feather}); + this.addRecipe(new ItemStack(Block.fence, 2), new Object[]{"###", "###", Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Block.cobblestoneWall, 6, 0), new Object[]{"###", "###", Character.valueOf('#'), Block.cobblestone}); + this.addRecipe(new ItemStack(Block.cobblestoneWall, 6, 1), new Object[]{"###", "###", Character.valueOf('#'), Block.cobblestoneMossy}); + this.addRecipe(new ItemStack(Block.netherFence, 6), new Object[]{"###", "###", Character.valueOf('#'), Block.netherBrick}); + this.addRecipe(new ItemStack(Block.fenceGate, 1), new Object[]{"#W#", "#W#", Character.valueOf('#'), Item.stick, Character.valueOf('W'), Block.planks}); + this.addRecipe(new ItemStack(Block.jukebox, 1), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Block.planks, Character.valueOf('X'), Item.diamond}); + this.addRecipe(new ItemStack(Block.music, 1), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Block.planks, Character.valueOf('X'), Item.redstone}); + this.addRecipe(new ItemStack(Block.bookShelf, 1), new Object[]{"###", "XXX", "###", Character.valueOf('#'), Block.planks, Character.valueOf('X'), Item.book}); + this.addRecipe(new ItemStack(Block.blockSnow, 1), new Object[]{"##", "##", Character.valueOf('#'), Item.snowball}); + this.addRecipe(new ItemStack(Block.snow, 6), new Object[]{"###", Character.valueOf('#'), Block.blockSnow}); + this.addRecipe(new ItemStack(Block.blockClay, 1), new Object[]{"##", "##", Character.valueOf('#'), Item.clay}); + this.addRecipe(new ItemStack(Block.brick, 1), new Object[]{"##", "##", Character.valueOf('#'), Item.brick}); + this.addRecipe(new ItemStack(Block.glowStone, 1), new Object[]{"##", "##", Character.valueOf('#'), Item.lightStoneDust}); + this.addRecipe(new ItemStack(Block.blockNetherQuartz, 1), new Object[]{"##", "##", Character.valueOf('#'), Item.netherQuartz}); + this.addRecipe(new ItemStack(Block.cloth, 1), new Object[]{"##", "##", Character.valueOf('#'), Item.silk}); + this.addRecipe(new ItemStack(Block.tnt, 1), new Object[]{"X#X", "#X#", "X#X", Character.valueOf('X'), Item.gunpowder, Character.valueOf('#'), Block.sand}); + this.addRecipe(new ItemStack(Block.stoneSingleSlab, 6, 3), new Object[]{"###", Character.valueOf('#'), Block.cobblestone}); + this.addRecipe(new ItemStack(Block.stoneSingleSlab, 6, 0), new Object[]{"###", Character.valueOf('#'), Block.stone}); + this.addRecipe(new ItemStack(Block.stoneSingleSlab, 6, 1), new Object[]{"###", Character.valueOf('#'), Block.sandStone}); + this.addRecipe(new ItemStack(Block.stoneSingleSlab, 6, 4), new Object[]{"###", Character.valueOf('#'), Block.brick}); + this.addRecipe(new ItemStack(Block.stoneSingleSlab, 6, 5), new Object[]{"###", Character.valueOf('#'), Block.stoneBrick}); + this.addRecipe(new ItemStack(Block.stoneSingleSlab, 6, 6), new Object[]{"###", Character.valueOf('#'), Block.netherBrick}); + this.addRecipe(new ItemStack(Block.stoneSingleSlab, 6, 7), new Object[]{"###", Character.valueOf('#'), Block.blockNetherQuartz}); + this.addRecipe(new ItemStack(Block.woodSingleSlab, 6, 0), new Object[]{"###", Character.valueOf('#'), new ItemStack(Block.planks, 1, 0)}); + this.addRecipe(new ItemStack(Block.woodSingleSlab, 6, 2), new Object[]{"###", Character.valueOf('#'), new ItemStack(Block.planks, 1, 2)}); + this.addRecipe(new ItemStack(Block.woodSingleSlab, 6, 1), new Object[]{"###", Character.valueOf('#'), new ItemStack(Block.planks, 1, 1)}); + this.addRecipe(new ItemStack(Block.woodSingleSlab, 6, 3), new Object[]{"###", Character.valueOf('#'), new ItemStack(Block.planks, 1, 3)}); + this.addRecipe(new ItemStack(Block.ladder, 3), new Object[]{"# #", "###", "# #", Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Item.doorWood, 1), new Object[]{"##", "##", "##", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Block.trapdoor, 2), new Object[]{"###", "###", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Item.doorIron, 1), new Object[]{"##", "##", "##", Character.valueOf('#'), Item.ingotIron}); + this.addRecipe(new ItemStack(Item.sign, 3), new Object[]{"###", "###", " X ", Character.valueOf('#'), Block.planks, Character.valueOf('X'), Item.stick}); + this.addRecipe(new ItemStack(Item.cake, 1), new Object[]{"AAA", "BEB", "CCC", Character.valueOf('A'), Item.bucketMilk, Character.valueOf('B'), Item.sugar, Character.valueOf('C'), Item.wheat, Character.valueOf('E'), Item.egg}); + this.addRecipe(new ItemStack(Item.sugar, 1), new Object[]{"#", Character.valueOf('#'), Item.reed}); + this.addRecipe(new ItemStack(Block.planks, 4, 0), new Object[]{"#", Character.valueOf('#'), new ItemStack(Block.wood, 1, 0)}); + this.addRecipe(new ItemStack(Block.planks, 4, 1), new Object[]{"#", Character.valueOf('#'), new ItemStack(Block.wood, 1, 1)}); + this.addRecipe(new ItemStack(Block.planks, 4, 2), new Object[]{"#", Character.valueOf('#'), new ItemStack(Block.wood, 1, 2)}); + this.addRecipe(new ItemStack(Block.planks, 4, 3), new Object[]{"#", Character.valueOf('#'), new ItemStack(Block.wood, 1, 3)}); + this.addRecipe(new ItemStack(Item.stick, 4), new Object[]{"#", "#", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Block.torchWood, 4), new Object[]{"X", "#", Character.valueOf('X'), Item.coal, Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Block.torchWood, 4), new Object[]{"X", "#", Character.valueOf('X'), new ItemStack(Item.coal, 1, 1), Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Item.bowlEmpty, 4), new Object[]{"# #", " # ", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Item.glassBottle, 3), new Object[]{"# #", " # ", Character.valueOf('#'), Block.glass}); + this.addRecipe(new ItemStack(Block.rail, 16), new Object[]{"X X", "X#X", "X X", Character.valueOf('X'), Item.ingotIron, Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Block.railPowered, 6), new Object[]{"X X", "X#X", "XRX", Character.valueOf('X'), Item.ingotGold, Character.valueOf('R'), Item.redstone, Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Block.railActivator, 6), new Object[]{"XSX", "X#X", "XSX", Character.valueOf('X'), Item.ingotIron, Character.valueOf('#'), Block.torchRedstoneActive, Character.valueOf('S'), Item.stick}); + this.addRecipe(new ItemStack(Block.railDetector, 6), new Object[]{"X X", "X#X", "XRX", Character.valueOf('X'), Item.ingotIron, Character.valueOf('R'), Item.redstone, Character.valueOf('#'), Block.pressurePlateStone}); + this.addRecipe(new ItemStack(Item.minecartEmpty, 1), new Object[]{"# #", "###", Character.valueOf('#'), Item.ingotIron}); + this.addRecipe(new ItemStack(Item.cauldron, 1), new Object[]{"# #", "# #", "###", Character.valueOf('#'), Item.ingotIron}); + this.addRecipe(new ItemStack(Item.brewingStand, 1), new Object[]{" B ", "###", Character.valueOf('#'), Block.cobblestone, Character.valueOf('B'), Item.blazeRod}); + this.addRecipe(new ItemStack(Block.pumpkinLantern, 1), new Object[]{"A", "B", Character.valueOf('A'), Block.pumpkin, Character.valueOf('B'), Block.torchWood}); + this.addRecipe(new ItemStack(Item.minecartCrate, 1), new Object[]{"A", "B", Character.valueOf('A'), Block.chest, Character.valueOf('B'), Item.minecartEmpty}); + this.addRecipe(new ItemStack(Item.minecartPowered, 1), new Object[]{"A", "B", Character.valueOf('A'), Block.furnaceIdle, Character.valueOf('B'), Item.minecartEmpty}); + this.addRecipe(new ItemStack(Item.minecartTnt, 1), new Object[]{"A", "B", Character.valueOf('A'), Block.tnt, Character.valueOf('B'), Item.minecartEmpty}); + this.addRecipe(new ItemStack(Item.minecartHopper, 1), new Object[]{"A", "B", Character.valueOf('A'), Block.hopperBlock, Character.valueOf('B'), Item.minecartEmpty}); + this.addRecipe(new ItemStack(Item.boat, 1), new Object[]{"# #", "###", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Item.bucketEmpty, 1), new Object[]{"# #", " # ", Character.valueOf('#'), Item.ingotIron}); + this.addRecipe(new ItemStack(Item.flowerPot, 1), new Object[]{"# #", " # ", Character.valueOf('#'), Item.brick}); + this.addRecipe(new ItemStack(Item.flintAndSteel, 1), new Object[]{"A ", " B", Character.valueOf('A'), Item.ingotIron, Character.valueOf('B'), Item.flint}); + this.addRecipe(new ItemStack(Item.bread, 1), new Object[]{"###", Character.valueOf('#'), Item.wheat}); + this.addRecipe(new ItemStack(Block.stairsWoodOak, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), new ItemStack(Block.planks, 1, 0)}); + this.addRecipe(new ItemStack(Block.stairsWoodBirch, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), new ItemStack(Block.planks, 1, 2)}); + this.addRecipe(new ItemStack(Block.stairsWoodSpruce, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), new ItemStack(Block.planks, 1, 1)}); + this.addRecipe(new ItemStack(Block.stairsWoodJungle, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), new ItemStack(Block.planks, 1, 3)}); + this.addRecipe(new ItemStack(Item.fishingRod, 1), new Object[]{" #", " #X", "# X", Character.valueOf('#'), Item.stick, Character.valueOf('X'), Item.silk}); + this.addRecipe(new ItemStack(Item.carrotOnAStick, 1), new Object[]{"# ", " X", Character.valueOf('#'), Item.fishingRod, Character.valueOf('X'), Item.carrot}).func_92100_c(); + this.addRecipe(new ItemStack(Block.stairsCobblestone, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), Block.cobblestone}); + this.addRecipe(new ItemStack(Block.stairsBrick, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), Block.brick}); + this.addRecipe(new ItemStack(Block.stairsStoneBrick, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), Block.stoneBrick}); + this.addRecipe(new ItemStack(Block.stairsNetherBrick, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), Block.netherBrick}); + this.addRecipe(new ItemStack(Block.stairsSandStone, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), Block.sandStone}); + this.addRecipe(new ItemStack(Block.stairsNetherQuartz, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), Block.blockNetherQuartz}); + this.addRecipe(new ItemStack(Item.painting, 1), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Item.stick, Character.valueOf('X'), Block.cloth}); + this.addRecipe(new ItemStack(Item.itemFrame, 1), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Item.stick, Character.valueOf('X'), Item.leather}); + this.addRecipe(new ItemStack(Item.appleGold, 1, 0), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Item.goldNugget, Character.valueOf('X'), Item.appleRed}); + this.addRecipe(new ItemStack(Item.appleGold, 1, 1), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Block.blockGold, Character.valueOf('X'), Item.appleRed}); + this.addRecipe(new ItemStack(Item.goldenCarrot, 1, 0), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Item.goldNugget, Character.valueOf('X'), Item.carrot}); + this.addRecipe(new ItemStack(Block.lever, 1), new Object[]{"X", "#", Character.valueOf('#'), Block.cobblestone, Character.valueOf('X'), Item.stick}); + this.addRecipe(new ItemStack(Block.tripWireSource, 2), new Object[]{"I", "S", "#", Character.valueOf('#'), Block.planks, Character.valueOf('S'), Item.stick, Character.valueOf('I'), Item.ingotIron}); + this.addRecipe(new ItemStack(Block.torchRedstoneActive, 1), new Object[]{"X", "#", Character.valueOf('#'), Item.stick, Character.valueOf('X'), Item.redstone}); + this.addRecipe(new ItemStack(Item.redstoneRepeater, 1), new Object[]{"#X#", "III", Character.valueOf('#'), Block.torchRedstoneActive, Character.valueOf('X'), Item.redstone, Character.valueOf('I'), Block.stone}); + this.addRecipe(new ItemStack(Item.comparator, 1), new Object[]{" # ", "#X#", "III", Character.valueOf('#'), Block.torchRedstoneActive, Character.valueOf('X'), Item.netherQuartz, Character.valueOf('I'), Block.stone}); + this.addRecipe(new ItemStack(Item.pocketSundial, 1), new Object[]{" # ", "#X#", " # ", Character.valueOf('#'), Item.ingotGold, Character.valueOf('X'), Item.redstone}); + this.addRecipe(new ItemStack(Item.compass, 1), new Object[]{" # ", "#X#", " # ", Character.valueOf('#'), Item.ingotIron, Character.valueOf('X'), Item.redstone}); + this.addRecipe(new ItemStack(Item.emptyMap, 1), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Item.paper, Character.valueOf('X'), Item.compass}); + this.addRecipe(new ItemStack(Block.stoneButton, 1), new Object[]{"#", Character.valueOf('#'), Block.stone}); + this.addRecipe(new ItemStack(Block.woodenButton, 1), new Object[]{"#", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Block.pressurePlateStone, 1), new Object[]{"##", Character.valueOf('#'), Block.stone}); + this.addRecipe(new ItemStack(Block.pressurePlatePlanks, 1), new Object[]{"##", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Block.pressurePlateIron, 1), new Object[]{"##", Character.valueOf('#'), Item.ingotIron}); + this.addRecipe(new ItemStack(Block.pressurePlateGold, 1), new Object[]{"##", Character.valueOf('#'), Item.ingotGold}); + this.addRecipe(new ItemStack(Block.dispenser, 1), new Object[]{"###", "#X#", "#R#", Character.valueOf('#'), Block.cobblestone, Character.valueOf('X'), Item.bow, Character.valueOf('R'), Item.redstone}); + this.addRecipe(new ItemStack(Block.dropper, 1), new Object[]{"###", "# #", "#R#", Character.valueOf('#'), Block.cobblestone, Character.valueOf('R'), Item.redstone}); + this.addRecipe(new ItemStack(Block.pistonBase, 1), new Object[]{"TTT", "#X#", "#R#", Character.valueOf('#'), Block.cobblestone, Character.valueOf('X'), Item.ingotIron, Character.valueOf('R'), Item.redstone, Character.valueOf('T'), Block.planks}); + this.addRecipe(new ItemStack(Block.pistonStickyBase, 1), new Object[]{"S", "P", Character.valueOf('S'), Item.slimeBall, Character.valueOf('P'), Block.pistonBase}); + this.addRecipe(new ItemStack(Item.bed, 1), new Object[]{"###", "XXX", Character.valueOf('#'), Block.cloth, Character.valueOf('X'), Block.planks}); + this.addRecipe(new ItemStack(Block.enchantmentTable, 1), new Object[]{" B ", "D#D", "###", Character.valueOf('#'), Block.obsidian, Character.valueOf('B'), Item.book, Character.valueOf('D'), Item.diamond}); + this.addRecipe(new ItemStack(Block.anvil, 1), new Object[]{"III", " i ", "iii", Character.valueOf('I'), Block.blockIron, Character.valueOf('i'), Item.ingotIron}); + this.addShapelessRecipe(new ItemStack(Item.eyeOfEnder, 1), new Object[]{Item.enderPearl, Item.blazePowder}); + this.addShapelessRecipe(new ItemStack(Item.fireballCharge, 3), new Object[]{Item.gunpowder, Item.blazePowder, Item.coal}); + this.addShapelessRecipe(new ItemStack(Item.fireballCharge, 3), new Object[]{Item.gunpowder, Item.blazePowder, new ItemStack(Item.coal, 1, 1)}); + this.addRecipe(new ItemStack(Block.daylightSensor), new Object[]{"GGG", "QQQ", "WWW", Character.valueOf('G'), Block.glass, Character.valueOf('Q'), Item.netherQuartz, Character.valueOf('W'), Block.woodSingleSlab}); + this.addRecipe(new ItemStack(Block.hopperBlock), new Object[]{"I I", "ICI", " I ", Character.valueOf('I'), Item.ingotIron, Character.valueOf('C'), Block.chest}); + Collections.sort(this.recipes, new RecipeSorter(this)); + System.out.println(this.recipes.size() + " recipes"); + } + + ShapedRecipes addRecipe(ItemStack var1, Object... var2) { + String var3 = ""; + int var4 = 0; + int var5 = 0; + int var6 = 0; + if(var2[var4] instanceof String[]) { + String[] var11 = (String[])((String[])var2[var4++]); + + for(int var8 = 0; var8 < var11.length; ++var8) { + String var9 = var11[var8]; + ++var6; + var5 = var9.length(); + var3 = var3 + var9; + } + } else { + while(var2[var4] instanceof String) { + String var7 = (String)var2[var4++]; + ++var6; + var5 = var7.length(); + var3 = var3 + var7; + } + } + + HashMap var12; + for(var12 = new HashMap(); var4 < var2.length; var4 += 2) { + Character var13 = (Character)var2[var4]; + ItemStack var15 = null; + if(var2[var4 + 1] instanceof Item) { + var15 = new ItemStack((Item)var2[var4 + 1]); + } else if(var2[var4 + 1] instanceof Block) { + var15 = new ItemStack((Block)var2[var4 + 1], 1, Short.MAX_VALUE); + } else if(var2[var4 + 1] instanceof ItemStack) { + var15 = (ItemStack)var2[var4 + 1]; + } + + var12.put(var13, var15); + } + + ItemStack[] var14 = new ItemStack[var5 * var6]; + + for(int var16 = 0; var16 < var5 * var6; ++var16) { + char var10 = var3.charAt(var16); + if(var12.containsKey(Character.valueOf(var10))) { + var14[var16] = ((ItemStack)var12.get(Character.valueOf(var10))).copy(); + } else { + var14[var16] = null; + } + } + + ShapedRecipes var17 = new ShapedRecipes(var5, var6, var14, var1); + this.recipes.add(var17); + return var17; + } + + void addShapelessRecipe(ItemStack var1, Object... var2) { + ArrayList var3 = new ArrayList(); + Object[] var4 = var2; + int var5 = var2.length; + + for(int var6 = 0; var6 < var5; ++var6) { + Object var7 = var4[var6]; + if(var7 instanceof ItemStack) { + var3.add(((ItemStack)var7).copy()); + } else if(var7 instanceof Item) { + var3.add(new ItemStack((Item)var7)); + } else { + if(!(var7 instanceof Block)) { + throw new RuntimeException("Invalid shapeless recipy!"); + } + + var3.add(new ItemStack((Block)var7)); + } + } + + this.recipes.add(new ShapelessRecipes(var1, var3)); + } + + public ItemStack findMatchingRecipe(InventoryCrafting var1, World var2) { + int var3 = 0; + ItemStack var4 = null; + ItemStack var5 = null; + + int var6; + for(var6 = 0; var6 < var1.getSizeInventory(); ++var6) { + ItemStack var7 = var1.getStackInSlot(var6); + if(var7 != null) { + if(var3 == 0) { + var4 = var7; + } + + if(var3 == 1) { + var5 = var7; + } + + ++var3; + } + } + + if(var3 == 2 && var4.itemID == var5.itemID && var4.stackSize == 1 && var5.stackSize == 1 && Item.itemsList[var4.itemID].isDamageable()) { + Item var11 = Item.itemsList[var4.itemID]; + int var13 = var11.getMaxDamage() - var4.getItemDamageForDisplay(); + int var8 = var11.getMaxDamage() - var5.getItemDamageForDisplay(); + int var9 = var13 + var8 + var11.getMaxDamage() * 5 / 100; + int var10 = var11.getMaxDamage() - var9; + if(var10 < 0) { + var10 = 0; + } + + return new ItemStack(var4.itemID, 1, var10); + } else { + for(var6 = 0; var6 < this.recipes.size(); ++var6) { + IRecipe var12 = (IRecipe)this.recipes.get(var6); + if(var12.matches(var1, var2)) { + return var12.getCraftingResult(var1); + } + } + + return null; + } + } + + public List getRecipeList() { + return this.recipes; + } +} diff --git a/src/net/minecraft/src/CrashReport.java b/src/net/minecraft/src/CrashReport.java new file mode 100644 index 0000000..1ce1cd8 --- /dev/null +++ b/src/net/minecraft/src/CrashReport.java @@ -0,0 +1,216 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.Iterator; +import java.util.List; + +public class CrashReport { + private final String description; + private final Throwable cause; + private final CrashReportCategory field_85061_c = new CrashReportCategory(this, "System Details"); + private final List crashReportSections = new ArrayList(); + private File crashReportFile = null; + private boolean field_85059_f = true; + private StackTraceElement[] field_85060_g = new StackTraceElement[0]; + + public CrashReport(String var1, Throwable var2) { + this.description = var1; + this.cause = var2; + this.populateEnvironment(); + } + + private void populateEnvironment() { + this.field_85061_c.addCrashSectionCallable("Minecraft Version", new CallableMinecraftVersion(this)); + this.field_85061_c.addCrashSectionCallable("Operating System", new CallableOSInfo(this)); + this.field_85061_c.addCrashSectionCallable("Java Version", new CallableJavaInfo(this)); + this.field_85061_c.addCrashSectionCallable("Java VM Version", new CallableJavaInfo2(this)); + this.field_85061_c.addCrashSectionCallable("Memory", new CallableMemoryInfo(this)); + this.field_85061_c.addCrashSectionCallable("JVM Flags", new CallableJVMFlags(this)); + this.field_85061_c.addCrashSectionCallable("AABB Pool Size", new CallableCrashMemoryReport(this)); + this.field_85061_c.addCrashSectionCallable("Suspicious classes", new CallableSuspiciousClasses(this)); + this.field_85061_c.addCrashSectionCallable("IntCache", new CallableIntCache(this)); + } + + public String getDescription() { + return this.description; + } + + public Throwable getCrashCause() { + return this.cause; + } + + public String func_90021_c() { + StringBuilder var1 = new StringBuilder(); + this.getSectionsInStringBuilder(var1); + return var1.toString(); + } + + public void getSectionsInStringBuilder(StringBuilder var1) { + if(this.field_85060_g != null && this.field_85060_g.length > 0) { + var1.append("-- Head --\n"); + var1.append("Stacktrace:\n"); + StackTraceElement[] var2 = this.field_85060_g; + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + StackTraceElement var5 = var2[var4]; + var1.append("\t").append("at ").append(var5.toString()); + var1.append("\n"); + } + + var1.append("\n"); + } + + Iterator var6 = this.crashReportSections.iterator(); + + while(var6.hasNext()) { + CrashReportCategory var7 = (CrashReportCategory)var6.next(); + var7.func_85072_a(var1); + var1.append("\n\n"); + } + + this.field_85061_c.func_85072_a(var1); + } + + public String getCauseStackTraceOrString() { + StringWriter var1 = null; + PrintWriter var2 = null; + String var3 = this.cause.toString(); + + try { + var1 = new StringWriter(); + var2 = new PrintWriter(var1); + this.cause.printStackTrace(var2); + var3 = var1.toString(); + } finally { + try { + if(var1 != null) { + var1.close(); + } + + if(var2 != null) { + var2.close(); + } + } catch (IOException var10) { + } + + } + + return var3; + } + + public String getCompleteReport() { + StringBuilder var1 = new StringBuilder(); + var1.append("---- Minecraft Crash Report ----\n"); + var1.append("// "); + var1.append(getWittyComment()); + var1.append("\n\n"); + var1.append("Time: "); + var1.append((new SimpleDateFormat()).format(new Date())); + var1.append("\n"); + var1.append("Description: "); + var1.append(this.description); + var1.append("\n\n"); + var1.append(this.getCauseStackTraceOrString()); + var1.append("\n\nA detailed walkthrough of the error, its code path and all known details is as follows:\n"); + + for(int var2 = 0; var2 < 87; ++var2) { + var1.append("-"); + } + + var1.append("\n\n"); + this.getSectionsInStringBuilder(var1); + return var1.toString(); + } + + public File getFile() { + return this.crashReportFile; + } + + public boolean saveToFile(File var1, ILogAgent var2) { + if(this.crashReportFile != null) { + return false; + } else { + if(var1.getParentFile() != null) { + var1.getParentFile().mkdirs(); + } + + try { + FileWriter var3 = new FileWriter(var1); + var3.write(this.getCompleteReport()); + var3.close(); + this.crashReportFile = var1; + return true; + } catch (Throwable var4) { + var2.logSevereException("Could not save crash report to " + var1, var4); + return false; + } + } + } + + public CrashReportCategory func_85056_g() { + return this.field_85061_c; + } + + public CrashReportCategory makeCategory(String var1) { + return this.makeCategoryDepth(var1, 1); + } + + public CrashReportCategory makeCategoryDepth(String var1, int var2) { + CrashReportCategory var3 = new CrashReportCategory(this, var1); + if(this.field_85059_f) { + int var4 = var3.func_85073_a(var2); + StackTraceElement[] var5 = this.cause.getStackTrace(); + StackTraceElement var6 = null; + StackTraceElement var7 = null; + if(var5 != null && var5.length - var4 < var5.length) { + var6 = var5[var5.length - var4]; + if(var5.length + 1 - var4 < var5.length) { + var7 = var5[var5.length + 1 - var4]; + } + } + + this.field_85059_f = var3.func_85069_a(var6, var7); + if(var4 > 0 && !this.crashReportSections.isEmpty()) { + CrashReportCategory var8 = (CrashReportCategory)this.crashReportSections.get(this.crashReportSections.size() - 1); + var8.func_85070_b(var4); + } else if(var5 != null && var5.length >= var4) { + this.field_85060_g = new StackTraceElement[var5.length - var4]; + System.arraycopy(var5, 0, this.field_85060_g, 0, this.field_85060_g.length); + } else { + this.field_85059_f = false; + } + } + + this.crashReportSections.add(var3); + return var3; + } + + private static String getWittyComment() { + String[] var0 = 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!"}; + + try { + return var0[(int)(System.nanoTime() % (long)var0.length)]; + } catch (Throwable var2) { + return "Witty comment unavailable :("; + } + } + + public static CrashReport makeCrashReport(Throwable var0, String var1) { + CrashReport var2; + if(var0 instanceof ReportedException) { + var2 = ((ReportedException)var0).getCrashReport(); + } else { + var2 = new CrashReport(var1, var0); + } + + return var2; + } +} diff --git a/src/net/minecraft/src/CrashReportCategory.java b/src/net/minecraft/src/CrashReportCategory.java new file mode 100644 index 0000000..e727bc8 --- /dev/null +++ b/src/net/minecraft/src/CrashReportCategory.java @@ -0,0 +1,161 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.Callable; + +public class CrashReportCategory { + private final CrashReport theCrashReport; + private final String field_85076_b; + private final List field_85077_c = new ArrayList(); + private StackTraceElement[] stackTrace = new StackTraceElement[0]; + + public CrashReportCategory(CrashReport var1, String var2) { + this.theCrashReport = var1; + this.field_85076_b = var2; + } + + public static String func_85074_a(double var0, double var2, double var4) { + return String.format("%.2f,%.2f,%.2f - %s", new Object[]{Double.valueOf(var0), Double.valueOf(var2), Double.valueOf(var4), getLocationInfo(MathHelper.floor_double(var0), MathHelper.floor_double(var2), MathHelper.floor_double(var4))}); + } + + public static String getLocationInfo(int var0, int var1, int var2) { + StringBuilder var3 = new StringBuilder(); + + try { + var3.append(String.format("World: (%d,%d,%d)", new Object[]{Integer.valueOf(var0), Integer.valueOf(var1), Integer.valueOf(var2)})); + } catch (Throwable var16) { + var3.append("(Error finding world loc)"); + } + + var3.append(", "); + + int var4; + int var5; + int var6; + int var7; + int var8; + int var9; + int var10; + int var11; + int var12; + try { + var4 = var0 >> 4; + var5 = var2 >> 4; + var6 = var0 & 15; + var7 = var1 >> 4; + var8 = var2 & 15; + var9 = var4 << 4; + var10 = var5 << 4; + var11 = (var4 + 1 << 4) - 1; + var12 = (var5 + 1 << 4) - 1; + var3.append(String.format("Chunk: (at %d,%d,%d in %d,%d; contains blocks %d,0,%d to %d,255,%d)", new Object[]{Integer.valueOf(var6), Integer.valueOf(var7), Integer.valueOf(var8), Integer.valueOf(var4), Integer.valueOf(var5), Integer.valueOf(var9), Integer.valueOf(var10), Integer.valueOf(var11), Integer.valueOf(var12)})); + } catch (Throwable var15) { + var3.append("(Error finding chunk loc)"); + } + + var3.append(", "); + + try { + var4 = var0 >> 9; + var5 = var2 >> 9; + var6 = var4 << 5; + var7 = var5 << 5; + var8 = (var4 + 1 << 5) - 1; + var9 = (var5 + 1 << 5) - 1; + var10 = var4 << 9; + var11 = var5 << 9; + var12 = (var4 + 1 << 9) - 1; + int var13 = (var5 + 1 << 9) - 1; + var3.append(String.format("Region: (%d,%d; contains chunks %d,%d to %d,%d, blocks %d,0,%d to %d,255,%d)", new Object[]{Integer.valueOf(var4), Integer.valueOf(var5), Integer.valueOf(var6), Integer.valueOf(var7), Integer.valueOf(var8), Integer.valueOf(var9), Integer.valueOf(var10), Integer.valueOf(var11), Integer.valueOf(var12), Integer.valueOf(var13)})); + } catch (Throwable var14) { + var3.append("(Error finding world loc)"); + } + + return var3.toString(); + } + + public void addCrashSectionCallable(String var1, Callable var2) { + try { + this.addCrashSection(var1, var2.call()); + } catch (Throwable var4) { + this.addCrashSectionThrowable(var1, var4); + } + + } + + public void addCrashSection(String var1, Object var2) { + this.field_85077_c.add(new CrashReportCategoryEntry(var1, var2)); + } + + public void addCrashSectionThrowable(String var1, Throwable var2) { + this.addCrashSection(var1, var2); + } + + public int func_85073_a(int var1) { + StackTraceElement[] var2 = Thread.currentThread().getStackTrace(); + this.stackTrace = new StackTraceElement[var2.length - 3 - var1]; + System.arraycopy(var2, 3 + var1, this.stackTrace, 0, this.stackTrace.length); + return this.stackTrace.length; + } + + public boolean func_85069_a(StackTraceElement var1, StackTraceElement var2) { + if(this.stackTrace.length != 0 && var1 != null) { + StackTraceElement var3 = this.stackTrace[0]; + if(var3.isNativeMethod() == var1.isNativeMethod() && var3.getClassName().equals(var1.getClassName()) && var3.getFileName().equals(var1.getFileName()) && var3.getMethodName().equals(var1.getMethodName())) { + if(var2 != null != this.stackTrace.length > 1) { + return false; + } else if(var2 != null && !this.stackTrace[1].equals(var2)) { + return false; + } else { + this.stackTrace[0] = var1; + return true; + } + } else { + return false; + } + } else { + return false; + } + } + + public void func_85070_b(int var1) { + StackTraceElement[] var2 = new StackTraceElement[this.stackTrace.length - var1]; + System.arraycopy(this.stackTrace, 0, var2, 0, var2.length); + this.stackTrace = var2; + } + + public void func_85072_a(StringBuilder var1) { + var1.append("-- ").append(this.field_85076_b).append(" --\n"); + var1.append("Details:"); + Iterator var2 = this.field_85077_c.iterator(); + + while(var2.hasNext()) { + CrashReportCategoryEntry var3 = (CrashReportCategoryEntry)var2.next(); + var1.append("\n\t"); + var1.append(var3.func_85089_a()); + var1.append(": "); + var1.append(var3.func_85090_b()); + } + + if(this.stackTrace != null && this.stackTrace.length > 0) { + var1.append("\nStacktrace:"); + StackTraceElement[] var6 = this.stackTrace; + int var7 = var6.length; + + for(int var4 = 0; var4 < var7; ++var4) { + StackTraceElement var5 = var6[var4]; + var1.append("\n\tat "); + var1.append(var5.toString()); + } + } + + } + + public static void func_85068_a(CrashReportCategory var0, int var1, int var2, int var3, int var4, int var5) { + var0.addCrashSectionCallable("Block type", new CallableBlockType(var4)); + var0.addCrashSectionCallable("Block data value", new CallableBlockDataValue(var5)); + var0.addCrashSectionCallable("Block location", new CallableBlockLocation(var1, var2, var3)); + } +} diff --git a/src/net/minecraft/src/CrashReportCategoryEntry.java b/src/net/minecraft/src/CrashReportCategoryEntry.java new file mode 100644 index 0000000..43c61ae --- /dev/null +++ b/src/net/minecraft/src/CrashReportCategoryEntry.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +class CrashReportCategoryEntry { + private final String field_85092_a; + private final String field_85091_b; + + public CrashReportCategoryEntry(String var1, Object var2) { + this.field_85092_a = var1; + if(var2 == null) { + this.field_85091_b = "~~NULL~~"; + } else if(var2 instanceof Throwable) { + Throwable var3 = (Throwable)var2; + this.field_85091_b = "~~ERROR~~ " + var3.getClass().getSimpleName() + ": " + var3.getMessage(); + } else { + this.field_85091_b = var2.toString(); + } + + } + + public String func_85089_a() { + return this.field_85092_a; + } + + public String func_85090_b() { + return this.field_85091_b; + } +} diff --git a/src/net/minecraft/src/CreativeCrafting.java b/src/net/minecraft/src/CreativeCrafting.java new file mode 100644 index 0000000..ce945d1 --- /dev/null +++ b/src/net/minecraft/src/CreativeCrafting.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.client.Minecraft; + +public class CreativeCrafting implements ICrafting { + private final Minecraft mc; + + public CreativeCrafting(Minecraft var1) { + this.mc = var1; + } + + public void sendContainerAndContentsToPlayer(Container var1, List var2) { + } + + public void sendSlotContents(Container var1, int var2, ItemStack var3) { + this.mc.playerController.sendSlotPacket(var3, var2); + } + + public void sendProgressBarUpdate(Container var1, int var2, int var3) { + } +} diff --git a/src/net/minecraft/src/CreativeTabBlock.java b/src/net/minecraft/src/CreativeTabBlock.java new file mode 100644 index 0000000..eb185bd --- /dev/null +++ b/src/net/minecraft/src/CreativeTabBlock.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class CreativeTabBlock extends CreativeTabs { + CreativeTabBlock(int var1, String var2) { + super(var1, var2); + } + + public int getTabIconItemIndex() { + return Block.brick.blockID; + } +} diff --git a/src/net/minecraft/src/CreativeTabBrewing.java b/src/net/minecraft/src/CreativeTabBrewing.java new file mode 100644 index 0000000..6a3da13 --- /dev/null +++ b/src/net/minecraft/src/CreativeTabBrewing.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class CreativeTabBrewing extends CreativeTabs { + CreativeTabBrewing(int var1, String var2) { + super(var1, var2); + } + + public int getTabIconItemIndex() { + return Item.potion.itemID; + } +} diff --git a/src/net/minecraft/src/CreativeTabCombat.java b/src/net/minecraft/src/CreativeTabCombat.java new file mode 100644 index 0000000..0bf0203 --- /dev/null +++ b/src/net/minecraft/src/CreativeTabCombat.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import java.util.List; + +final class CreativeTabCombat extends CreativeTabs { + CreativeTabCombat(int var1, String var2) { + super(var1, var2); + } + + public int getTabIconItemIndex() { + return Item.swordGold.itemID; + } + + public void displayAllReleventItems(List var1) { + super.displayAllReleventItems(var1); + this.func_92116_a(var1, new EnumEnchantmentType[]{EnumEnchantmentType.armor, EnumEnchantmentType.armor_feet, EnumEnchantmentType.armor_head, EnumEnchantmentType.armor_legs, EnumEnchantmentType.armor_torso, EnumEnchantmentType.bow, EnumEnchantmentType.weapon}); + } +} diff --git a/src/net/minecraft/src/CreativeTabDeco.java b/src/net/minecraft/src/CreativeTabDeco.java new file mode 100644 index 0000000..d5766c7 --- /dev/null +++ b/src/net/minecraft/src/CreativeTabDeco.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class CreativeTabDeco extends CreativeTabs { + CreativeTabDeco(int var1, String var2) { + super(var1, var2); + } + + public int getTabIconItemIndex() { + return Block.plantRed.blockID; + } +} diff --git a/src/net/minecraft/src/CreativeTabFood.java b/src/net/minecraft/src/CreativeTabFood.java new file mode 100644 index 0000000..3816bb9 --- /dev/null +++ b/src/net/minecraft/src/CreativeTabFood.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class CreativeTabFood extends CreativeTabs { + CreativeTabFood(int var1, String var2) { + super(var1, var2); + } + + public int getTabIconItemIndex() { + return Item.appleRed.itemID; + } +} diff --git a/src/net/minecraft/src/CreativeTabInventory.java b/src/net/minecraft/src/CreativeTabInventory.java new file mode 100644 index 0000000..790f870 --- /dev/null +++ b/src/net/minecraft/src/CreativeTabInventory.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class CreativeTabInventory extends CreativeTabs { + CreativeTabInventory(int var1, String var2) { + super(var1, var2); + } + + public int getTabIconItemIndex() { + return Block.chest.blockID; + } +} diff --git a/src/net/minecraft/src/CreativeTabMaterial.java b/src/net/minecraft/src/CreativeTabMaterial.java new file mode 100644 index 0000000..1e1b808 --- /dev/null +++ b/src/net/minecraft/src/CreativeTabMaterial.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class CreativeTabMaterial extends CreativeTabs { + CreativeTabMaterial(int var1, String var2) { + super(var1, var2); + } + + public int getTabIconItemIndex() { + return Item.stick.itemID; + } +} diff --git a/src/net/minecraft/src/CreativeTabMisc.java b/src/net/minecraft/src/CreativeTabMisc.java new file mode 100644 index 0000000..2e21c3a --- /dev/null +++ b/src/net/minecraft/src/CreativeTabMisc.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import java.util.List; + +final class CreativeTabMisc extends CreativeTabs { + CreativeTabMisc(int var1, String var2) { + super(var1, var2); + } + + public int getTabIconItemIndex() { + return Item.bucketLava.itemID; + } + + public void displayAllReleventItems(List var1) { + super.displayAllReleventItems(var1); + this.func_92116_a(var1, new EnumEnchantmentType[]{EnumEnchantmentType.all}); + } +} diff --git a/src/net/minecraft/src/CreativeTabRedstone.java b/src/net/minecraft/src/CreativeTabRedstone.java new file mode 100644 index 0000000..4884ad6 --- /dev/null +++ b/src/net/minecraft/src/CreativeTabRedstone.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class CreativeTabRedstone extends CreativeTabs { + CreativeTabRedstone(int var1, String var2) { + super(var1, var2); + } + + public int getTabIconItemIndex() { + return Item.redstone.itemID; + } +} diff --git a/src/net/minecraft/src/CreativeTabSearch.java b/src/net/minecraft/src/CreativeTabSearch.java new file mode 100644 index 0000000..0fe687c --- /dev/null +++ b/src/net/minecraft/src/CreativeTabSearch.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class CreativeTabSearch extends CreativeTabs { + CreativeTabSearch(int var1, String var2) { + super(var1, var2); + } + + public int getTabIconItemIndex() { + return Item.compass.itemID; + } +} diff --git a/src/net/minecraft/src/CreativeTabTools.java b/src/net/minecraft/src/CreativeTabTools.java new file mode 100644 index 0000000..e77f84e --- /dev/null +++ b/src/net/minecraft/src/CreativeTabTools.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import java.util.List; + +final class CreativeTabTools extends CreativeTabs { + CreativeTabTools(int var1, String var2) { + super(var1, var2); + } + + public int getTabIconItemIndex() { + return Item.axeIron.itemID; + } + + public void displayAllReleventItems(List var1) { + super.displayAllReleventItems(var1); + this.func_92116_a(var1, new EnumEnchantmentType[]{EnumEnchantmentType.digger}); + } +} diff --git a/src/net/minecraft/src/CreativeTabTransport.java b/src/net/minecraft/src/CreativeTabTransport.java new file mode 100644 index 0000000..19f7e68 --- /dev/null +++ b/src/net/minecraft/src/CreativeTabTransport.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class CreativeTabTransport extends CreativeTabs { + CreativeTabTransport(int var1, String var2) { + super(var1, var2); + } + + public int getTabIconItemIndex() { + return Block.railPowered.blockID; + } +} diff --git a/src/net/minecraft/src/CreativeTabs.java b/src/net/minecraft/src/CreativeTabs.java new file mode 100644 index 0000000..fe369e5 --- /dev/null +++ b/src/net/minecraft/src/CreativeTabs.java @@ -0,0 +1,121 @@ +package net.minecraft.src; + +import java.util.List; + +public class CreativeTabs { + public static final CreativeTabs[] creativeTabArray = new CreativeTabs[12]; + public static final CreativeTabs tabBlock = new CreativeTabBlock(0, "buildingBlocks"); + public static final CreativeTabs tabDecorations = new CreativeTabDeco(1, "decorations"); + public static final CreativeTabs tabRedstone = new CreativeTabRedstone(2, "redstone"); + public static final CreativeTabs tabTransport = new CreativeTabTransport(3, "transportation"); + public static final CreativeTabs tabMisc = new CreativeTabMisc(4, "misc"); + public static final CreativeTabs tabAllSearch = (new CreativeTabSearch(5, "search")).setBackgroundImageName("search.png"); + public static final CreativeTabs tabFood = new CreativeTabFood(6, "food"); + public static final CreativeTabs tabTools = new CreativeTabTools(7, "tools"); + public static final CreativeTabs tabCombat = new CreativeTabCombat(8, "combat"); + public static final CreativeTabs tabBrewing = new CreativeTabBrewing(9, "brewing"); + public static final CreativeTabs tabMaterials = new CreativeTabMaterial(10, "materials"); + public static final CreativeTabs tabInventory = (new CreativeTabInventory(11, "inventory")).setBackgroundImageName("survival_inv.png").setNoScrollbar().setNoTitle(); + private final int tabIndex; + private final String tabLabel; + private String backgroundImageName = "list_items.png"; + private boolean hasScrollbar = true; + private boolean drawTitle = true; + + public CreativeTabs(int var1, String var2) { + this.tabIndex = var1; + this.tabLabel = var2; + creativeTabArray[var1] = this; + } + + public int getTabIndex() { + return this.tabIndex; + } + + public String getTabLabel() { + return this.tabLabel; + } + + public String getTranslatedTabLabel() { + return StringTranslate.getInstance().translateKey("itemGroup." + this.getTabLabel()); + } + + public Item getTabIconItem() { + return Item.itemsList[this.getTabIconItemIndex()]; + } + + public int getTabIconItemIndex() { + return 1; + } + + public String getBackgroundImageName() { + return this.backgroundImageName; + } + + public CreativeTabs setBackgroundImageName(String var1) { + this.backgroundImageName = var1; + return this; + } + + public boolean drawInForegroundOfTab() { + return this.drawTitle; + } + + public CreativeTabs setNoTitle() { + this.drawTitle = false; + return this; + } + + public boolean shouldHidePlayerInventory() { + return this.hasScrollbar; + } + + public CreativeTabs setNoScrollbar() { + this.hasScrollbar = false; + return this; + } + + public int getTabColumn() { + return this.tabIndex % 6; + } + + public boolean isTabInFirstRow() { + return this.tabIndex < 6; + } + + public void displayAllReleventItems(List var1) { + Item[] var2 = Item.itemsList; + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + Item var5 = var2[var4]; + if(var5 != null && var5.getCreativeTab() == this) { + var5.getSubItems(var5.itemID, this, var1); + } + } + + } + + public void func_92116_a(List var1, EnumEnchantmentType... var2) { + Enchantment[] var3 = Enchantment.enchantmentsList; + int var4 = var3.length; + + for(int var5 = 0; var5 < var4; ++var5) { + Enchantment var6 = var3[var5]; + if(var6 != null && var6.type != null) { + boolean var7 = false; + + for(int var8 = 0; var8 < var2.length && !var7; ++var8) { + if(var6.type == var2[var8]) { + var7 = true; + } + } + + if(var7) { + var1.add(Item.enchantedBook.func_92111_a(new EnchantmentData(var6, var6.getMaxLevel()))); + } + } + } + + } +} diff --git a/src/net/minecraft/src/CryptManager.java b/src/net/minecraft/src/CryptManager.java new file mode 100644 index 0000000..3d9542a --- /dev/null +++ b/src/net/minecraft/src/CryptManager.java @@ -0,0 +1,159 @@ +package net.minecraft.src; + +import java.io.InputStream; +import java.io.OutputStream; +import java.io.UnsupportedEncodingException; +import java.nio.charset.Charset; +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.SecureRandom; +import java.security.Security; +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.NoSuchPaddingException; +import javax.crypto.SecretKey; +import javax.crypto.spec.SecretKeySpec; +import org.bouncycastle.crypto.BufferedBlockCipher; +import org.bouncycastle.crypto.CipherKeyGenerator; +import org.bouncycastle.crypto.KeyGenerationParameters; +import org.bouncycastle.crypto.engines.AESFastEngine; +import org.bouncycastle.crypto.io.CipherInputStream; +import org.bouncycastle.crypto.io.CipherOutputStream; +import org.bouncycastle.crypto.modes.CFBBlockCipher; +import org.bouncycastle.crypto.params.KeyParameter; +import org.bouncycastle.crypto.params.ParametersWithIV; +import org.bouncycastle.jce.provider.BouncyCastleProvider; + +public class CryptManager { + public static final Charset charSet = Charset.forName("ISO_8859_1"); + + public static SecretKey createNewSharedKey() { + CipherKeyGenerator var0 = new CipherKeyGenerator(); + var0.init(new KeyGenerationParameters(new SecureRandom(), 128)); + return new SecretKeySpec(var0.generateKey(), "AES"); + } + + public static KeyPair createNewKeyPair() { + try { + KeyPairGenerator var0 = KeyPairGenerator.getInstance("RSA"); + var0.initialize(1024); + return var0.generateKeyPair(); + } catch (NoSuchAlgorithmException var1) { + var1.printStackTrace(); + System.err.println("Key pair generation failed!"); + return null; + } + } + + public static byte[] getServerIdHash(String var0, PublicKey var1, SecretKey var2) { + try { + return digestOperation("SHA-1", new byte[][]{var0.getBytes("ISO_8859_1"), var2.getEncoded(), var1.getEncoded()}); + } catch (UnsupportedEncodingException var4) { + var4.printStackTrace(); + return null; + } + } + + private static byte[] digestOperation(String var0, byte[]... var1) { + try { + MessageDigest var2 = MessageDigest.getInstance(var0); + byte[][] var3 = var1; + int var4 = var1.length; + + for(int var5 = 0; var5 < var4; ++var5) { + byte[] var6 = var3[var5]; + var2.update(var6); + } + + return var2.digest(); + } catch (NoSuchAlgorithmException var7) { + var7.printStackTrace(); + return null; + } + } + + public static PublicKey decodePublicKey(byte[] var0) { + try { + X509EncodedKeySpec var1 = new X509EncodedKeySpec(var0); + KeyFactory var2 = KeyFactory.getInstance("RSA"); + return var2.generatePublic(var1); + } catch (NoSuchAlgorithmException var3) { + var3.printStackTrace(); + } catch (InvalidKeySpecException var4) { + var4.printStackTrace(); + } + + System.err.println("Public key reconstitute failed!"); + return null; + } + + public static SecretKey decryptSharedKey(PrivateKey var0, byte[] var1) { + return new SecretKeySpec(decryptData(var0, var1), "AES"); + } + + public static byte[] encryptData(Key var0, byte[] var1) { + return cipherOperation(1, var0, var1); + } + + public static byte[] decryptData(Key var0, byte[] var1) { + return cipherOperation(2, var0, var1); + } + + private static byte[] cipherOperation(int var0, Key var1, byte[] var2) { + try { + return createTheCipherInstance(var0, var1.getAlgorithm(), var1).doFinal(var2); + } catch (IllegalBlockSizeException var4) { + var4.printStackTrace(); + } catch (BadPaddingException var5) { + var5.printStackTrace(); + } + + System.err.println("Cipher data failed!"); + return null; + } + + private static Cipher createTheCipherInstance(int var0, String var1, Key var2) { + try { + Cipher var3 = Cipher.getInstance(var1); + var3.init(var0, var2); + return var3; + } catch (InvalidKeyException var4) { + var4.printStackTrace(); + } catch (NoSuchAlgorithmException var5) { + var5.printStackTrace(); + } catch (NoSuchPaddingException var6) { + var6.printStackTrace(); + } + + System.err.println("Cipher creation failed!"); + return null; + } + + private static BufferedBlockCipher createBufferedBlockCipher(boolean var0, Key var1) { + BufferedBlockCipher var2 = new BufferedBlockCipher(new CFBBlockCipher(new AESFastEngine(), 8)); + var2.init(var0, new ParametersWithIV(new KeyParameter(var1.getEncoded()), var1.getEncoded(), 0, 16)); + return var2; + } + + public static OutputStream encryptOuputStream(SecretKey var0, OutputStream var1) { + return new CipherOutputStream(var1, createBufferedBlockCipher(true, var0)); + } + + public static InputStream decryptInputStream(SecretKey var0, InputStream var1) { + return new CipherInputStream(var1, createBufferedBlockCipher(false, var0)); + } + + static { + Security.addProvider(new BouncyCastleProvider()); + } +} diff --git a/src/net/minecraft/src/DamageSource.java b/src/net/minecraft/src/DamageSource.java new file mode 100644 index 0000000..00fb416 --- /dev/null +++ b/src/net/minecraft/src/DamageSource.java @@ -0,0 +1,150 @@ +package net.minecraft.src; + +public class DamageSource { + public static DamageSource inFire = (new DamageSource("inFire")).setFireDamage(); + public static DamageSource onFire = (new DamageSource("onFire")).setDamageBypassesArmor().setFireDamage(); + public static DamageSource lava = (new DamageSource("lava")).setFireDamage(); + public static DamageSource inWall = (new DamageSource("inWall")).setDamageBypassesArmor(); + public static DamageSource drown = (new DamageSource("drown")).setDamageBypassesArmor(); + public static DamageSource starve = (new DamageSource("starve")).setDamageBypassesArmor(); + public static DamageSource cactus = new DamageSource("cactus"); + public static DamageSource fall = (new DamageSource("fall")).setDamageBypassesArmor(); + public static DamageSource outOfWorld = (new DamageSource("outOfWorld")).setDamageBypassesArmor().setDamageAllowedInCreativeMode(); + public static DamageSource generic = (new DamageSource("generic")).setDamageBypassesArmor(); + public static DamageSource magic = (new DamageSource("magic")).setDamageBypassesArmor().setMagicDamage(); + public static DamageSource wither = (new DamageSource("wither")).setDamageBypassesArmor(); + public static DamageSource anvil = new DamageSource("anvil"); + public static DamageSource fallingBlock = new DamageSource("fallingBlock"); + private boolean isUnblockable = false; + private boolean isDamageAllowedInCreativeMode = false; + private float hungerDamage = 0.3F; + private boolean fireDamage; + private boolean projectile; + private boolean difficultyScaled; + private boolean magicDamage = false; + private boolean explosion = false; + public String damageType; + + public static DamageSource causeMobDamage(EntityLiving var0) { + return new EntityDamageSource("mob", var0); + } + + public static DamageSource causePlayerDamage(EntityPlayer var0) { + return new EntityDamageSource("player", var0); + } + + public static DamageSource causeArrowDamage(EntityArrow var0, Entity var1) { + return (new EntityDamageSourceIndirect("arrow", var0, var1)).setProjectile(); + } + + public static DamageSource causeFireballDamage(EntityFireball var0, Entity var1) { + return var1 == null ? (new EntityDamageSourceIndirect("onFire", var0, var0)).setFireDamage().setProjectile() : (new EntityDamageSourceIndirect("fireball", var0, var1)).setFireDamage().setProjectile(); + } + + public static DamageSource causeThrownDamage(Entity var0, Entity var1) { + return (new EntityDamageSourceIndirect("thrown", var0, var1)).setProjectile(); + } + + public static DamageSource causeIndirectMagicDamage(Entity var0, Entity var1) { + return (new EntityDamageSourceIndirect("indirectMagic", var0, var1)).setDamageBypassesArmor().setMagicDamage(); + } + + public static DamageSource causeThornsDamage(Entity var0) { + return (new EntityDamageSource("thorns", var0)).setMagicDamage(); + } + + public static DamageSource setExplosionSource(Explosion var0) { + return var0 != null && var0.func_94613_c() != null ? (new EntityDamageSource("explosion.player", var0.func_94613_c())).setDifficultyScaled().setExplosion() : (new DamageSource("explosion")).setDifficultyScaled().setExplosion(); + } + + public boolean isProjectile() { + return this.projectile; + } + + 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; + } + + public float getHungerDamage() { + return this.hungerDamage; + } + + public boolean canHarmInCreative() { + return this.isDamageAllowedInCreativeMode; + } + + protected DamageSource(String var1) { + this.damageType = var1; + } + + public Entity getSourceOfDamage() { + return this.getEntity(); + } + + public Entity getEntity() { + return null; + } + + protected DamageSource setDamageBypassesArmor() { + this.isUnblockable = true; + this.hungerDamage = 0.0F; + return this; + } + + protected DamageSource setDamageAllowedInCreativeMode() { + this.isDamageAllowedInCreativeMode = true; + return this; + } + + protected DamageSource setFireDamage() { + this.fireDamage = true; + return this; + } + + public String getDeathMessage(EntityLiving var1) { + EntityLiving var2 = var1.func_94060_bK(); + String var3 = "death.attack." + this.damageType; + String var4 = var3 + ".player"; + return var2 != null && StatCollector.func_94522_b(var4) ? StatCollector.translateToLocalFormatted(var4, new Object[]{var1.getTranslatedEntityName(), var2.getTranslatedEntityName()}) : StatCollector.translateToLocalFormatted(var3, new Object[]{var1.getTranslatedEntityName()}); + } + + public boolean isFireDamage() { + return this.fireDamage; + } + + public String getDamageType() { + return this.damageType; + } + + public DamageSource setDifficultyScaled() { + this.difficultyScaled = true; + return this; + } + + public boolean isDifficultyScaled() { + return this.difficultyScaled; + } + + public boolean isMagicDamage() { + return this.magicDamage; + } + + public DamageSource setMagicDamage() { + this.magicDamage = true; + return this; + } +} diff --git a/src/net/minecraft/src/DataWatcher.java b/src/net/minecraft/src/DataWatcher.java new file mode 100644 index 0000000..79ead14 --- /dev/null +++ b/src/net/minecraft/src/DataWatcher.java @@ -0,0 +1,272 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.locks.ReadWriteLock; +import java.util.concurrent.locks.ReentrantReadWriteLock; + +public class DataWatcher { + private boolean isBlank = true; + private static final HashMap dataTypes = new HashMap(); + private final Map watchedObjects = new HashMap(); + private boolean objectChanged; + private ReadWriteLock lock = new ReentrantReadWriteLock(); + + public void addObject(int var1, Object var2) { + Integer var3 = (Integer)dataTypes.get(var2.getClass()); + if(var3 == null) { + throw new IllegalArgumentException("Unknown data type: " + var2.getClass()); + } else if(var1 > 31) { + throw new IllegalArgumentException("Data value id is too big with " + var1 + "! (Max is " + 31 + ")"); + } else if(this.watchedObjects.containsKey(Integer.valueOf(var1))) { + throw new IllegalArgumentException("Duplicate id value for " + var1 + "!"); + } else { + WatchableObject var4 = new WatchableObject(var3.intValue(), var1, var2); + this.lock.writeLock().lock(); + this.watchedObjects.put(Integer.valueOf(var1), var4); + this.lock.writeLock().unlock(); + this.isBlank = false; + } + } + + public void addObjectByDataType(int var1, int var2) { + WatchableObject var3 = new WatchableObject(var2, var1, (Object)null); + this.lock.writeLock().lock(); + this.watchedObjects.put(Integer.valueOf(var1), var3); + this.lock.writeLock().unlock(); + this.isBlank = false; + } + + public byte getWatchableObjectByte(int var1) { + return ((Byte)this.getWatchedObject(var1).getObject()).byteValue(); + } + + public short getWatchableObjectShort(int var1) { + return ((Short)this.getWatchedObject(var1).getObject()).shortValue(); + } + + public int getWatchableObjectInt(int var1) { + return ((Integer)this.getWatchedObject(var1).getObject()).intValue(); + } + + public String getWatchableObjectString(int var1) { + return (String)this.getWatchedObject(var1).getObject(); + } + + public ItemStack getWatchableObjectItemStack(int var1) { + return (ItemStack)this.getWatchedObject(var1).getObject(); + } + + private WatchableObject getWatchedObject(int var1) { + this.lock.readLock().lock(); + + WatchableObject var2; + try { + var2 = (WatchableObject)this.watchedObjects.get(Integer.valueOf(var1)); + } catch (Throwable var6) { + CrashReport var4 = CrashReport.makeCrashReport(var6, "Getting synched entity data"); + CrashReportCategory var5 = var4.makeCategory("Synched entity data"); + var5.addCrashSection("Data ID", Integer.valueOf(var1)); + throw new ReportedException(var4); + } + + this.lock.readLock().unlock(); + return var2; + } + + public void updateObject(int var1, Object var2) { + WatchableObject var3 = this.getWatchedObject(var1); + if(!var2.equals(var3.getObject())) { + var3.setObject(var2); + var3.setWatched(true); + this.objectChanged = true; + } + + } + + public void setObjectWatched(int var1) { + WatchableObject.setWatchableObjectWatched(this.getWatchedObject(var1), true); + this.objectChanged = true; + } + + public boolean hasChanges() { + return this.objectChanged; + } + + public static void writeObjectsInListToStream(List var0, DataOutputStream var1) throws IOException { + if(var0 != null) { + Iterator var2 = var0.iterator(); + + while(var2.hasNext()) { + WatchableObject var3 = (WatchableObject)var2.next(); + writeWatchableObject(var1, var3); + } + } + + var1.writeByte(127); + } + + public List unwatchAndReturnAllWatched() { + ArrayList var1 = null; + if(this.objectChanged) { + this.lock.readLock().lock(); + Iterator var2 = this.watchedObjects.values().iterator(); + + while(var2.hasNext()) { + WatchableObject var3 = (WatchableObject)var2.next(); + if(var3.isWatched()) { + var3.setWatched(false); + if(var1 == null) { + var1 = new ArrayList(); + } + + var1.add(var3); + } + } + + this.lock.readLock().unlock(); + } + + this.objectChanged = false; + return var1; + } + + public void writeWatchableObjects(DataOutputStream var1) throws IOException { + this.lock.readLock().lock(); + Iterator var2 = this.watchedObjects.values().iterator(); + + while(var2.hasNext()) { + WatchableObject var3 = (WatchableObject)var2.next(); + writeWatchableObject(var1, var3); + } + + this.lock.readLock().unlock(); + var1.writeByte(127); + } + + public List getAllWatched() { + ArrayList var1 = null; + this.lock.readLock().lock(); + + WatchableObject var3; + for(Iterator var2 = this.watchedObjects.values().iterator(); var2.hasNext(); var1.add(var3)) { + var3 = (WatchableObject)var2.next(); + if(var1 == null) { + var1 = new ArrayList(); + } + } + + this.lock.readLock().unlock(); + return var1; + } + + private static void writeWatchableObject(DataOutputStream var0, WatchableObject var1) throws IOException { + int var2 = (var1.getObjectType() << 5 | var1.getDataValueId() & 31) & 255; + var0.writeByte(var2); + switch(var1.getObjectType()) { + case 0: + var0.writeByte(((Byte)var1.getObject()).byteValue()); + break; + case 1: + var0.writeShort(((Short)var1.getObject()).shortValue()); + break; + case 2: + var0.writeInt(((Integer)var1.getObject()).intValue()); + break; + case 3: + var0.writeFloat(((Float)var1.getObject()).floatValue()); + break; + case 4: + Packet.writeString((String)var1.getObject(), var0); + break; + case 5: + ItemStack var4 = (ItemStack)var1.getObject(); + Packet.writeItemStack(var4, var0); + break; + case 6: + ChunkCoordinates var3 = (ChunkCoordinates)var1.getObject(); + var0.writeInt(var3.posX); + var0.writeInt(var3.posY); + var0.writeInt(var3.posZ); + } + + } + + public static List readWatchableObjects(DataInputStream var0) throws IOException { + ArrayList var1 = null; + + for(byte var2 = var0.readByte(); var2 != 127; var2 = var0.readByte()) { + if(var1 == null) { + var1 = new ArrayList(); + } + + int var3 = (var2 & 224) >> 5; + int var4 = var2 & 31; + WatchableObject var5 = null; + switch(var3) { + case 0: + var5 = new WatchableObject(var3, var4, Byte.valueOf(var0.readByte())); + break; + case 1: + var5 = new WatchableObject(var3, var4, Short.valueOf(var0.readShort())); + break; + case 2: + var5 = new WatchableObject(var3, var4, Integer.valueOf(var0.readInt())); + break; + case 3: + var5 = new WatchableObject(var3, var4, Float.valueOf(var0.readFloat())); + break; + case 4: + var5 = new WatchableObject(var3, var4, Packet.readString(var0, 64)); + break; + case 5: + var5 = new WatchableObject(var3, var4, Packet.readItemStack(var0)); + break; + case 6: + int var6 = var0.readInt(); + int var7 = var0.readInt(); + int var8 = var0.readInt(); + var5 = new WatchableObject(var3, var4, new ChunkCoordinates(var6, var7, var8)); + } + + var1.add(var5); + } + + return var1; + } + + public void updateWatchedObjectsFromList(List var1) { + this.lock.writeLock().lock(); + Iterator var2 = var1.iterator(); + + while(var2.hasNext()) { + WatchableObject var3 = (WatchableObject)var2.next(); + WatchableObject var4 = (WatchableObject)this.watchedObjects.get(Integer.valueOf(var3.getDataValueId())); + if(var4 != null) { + var4.setObject(var3.getObject()); + } + } + + this.lock.writeLock().unlock(); + } + + public boolean getIsBlank() { + return this.isBlank; + } + + static { + dataTypes.put(Byte.class, Integer.valueOf(0)); + dataTypes.put(Short.class, Integer.valueOf(1)); + dataTypes.put(Integer.class, Integer.valueOf(2)); + dataTypes.put(Float.class, Integer.valueOf(3)); + dataTypes.put(String.class, Integer.valueOf(4)); + dataTypes.put(ItemStack.class, Integer.valueOf(5)); + dataTypes.put(ChunkCoordinates.class, Integer.valueOf(6)); + } +} diff --git a/src/net/minecraft/src/DedicatedPlayerList.java b/src/net/minecraft/src/DedicatedPlayerList.java new file mode 100644 index 0000000..417d143 --- /dev/null +++ b/src/net/minecraft/src/DedicatedPlayerList.java @@ -0,0 +1,158 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.PrintWriter; +import java.util.Iterator; +import net.minecraft.server.MinecraftServer; + +public class DedicatedPlayerList extends ServerConfigurationManager { + private File opsList; + private File whiteList; + + public DedicatedPlayerList(DedicatedServer var1) { + super(var1); + this.opsList = var1.getFile("ops.txt"); + this.whiteList = var1.getFile("white-list.txt"); + this.viewDistance = var1.getIntProperty("view-distance", 10); + this.maxPlayers = var1.getIntProperty("max-players", 20); + this.setWhiteListEnabled(var1.getBooleanProperty("white-list", false)); + if(!var1.isSinglePlayer()) { + this.getBannedPlayers().setListActive(true); + this.getBannedIPs().setListActive(true); + } + + this.getBannedPlayers().loadBanList(); + this.getBannedPlayers().saveToFileWithHeader(); + this.getBannedIPs().loadBanList(); + this.getBannedIPs().saveToFileWithHeader(); + this.loadOpsList(); + this.readWhiteList(); + this.saveOpsList(); + if(!this.whiteList.exists()) { + this.saveWhiteList(); + } + + } + + public void setWhiteListEnabled(boolean var1) { + super.setWhiteListEnabled(var1); + this.getDedicatedServerInstance().setProperty("white-list", Boolean.valueOf(var1)); + this.getDedicatedServerInstance().saveProperties(); + } + + public void addOp(String var1) { + super.addOp(var1); + this.saveOpsList(); + } + + public void removeOp(String var1) { + super.removeOp(var1); + this.saveOpsList(); + } + + public void removeFromWhitelist(String var1) { + super.removeFromWhitelist(var1); + this.saveWhiteList(); + } + + public void addToWhiteList(String var1) { + super.addToWhiteList(var1); + this.saveWhiteList(); + } + + public void loadWhiteList() { + this.readWhiteList(); + } + + private void loadOpsList() { + try { + this.getOps().clear(); + BufferedReader var1 = new BufferedReader(new FileReader(this.opsList)); + String var2 = ""; + + while(true) { + var2 = var1.readLine(); + if(var2 == null) { + var1.close(); + break; + } + + this.getOps().add(var2.trim().toLowerCase()); + } + } catch (Exception var3) { + this.getDedicatedServerInstance().getLogAgent().logWarning("Failed to load operators list: " + var3); + } + + } + + private void saveOpsList() { + try { + PrintWriter var1 = new PrintWriter(new FileWriter(this.opsList, false)); + Iterator var2 = this.getOps().iterator(); + + while(var2.hasNext()) { + String var3 = (String)var2.next(); + var1.println(var3); + } + + var1.close(); + } catch (Exception var4) { + this.getDedicatedServerInstance().getLogAgent().logWarning("Failed to save operators list: " + var4); + } + + } + + private void readWhiteList() { + try { + this.getWhiteListedPlayers().clear(); + BufferedReader var1 = new BufferedReader(new FileReader(this.whiteList)); + String var2 = ""; + + while(true) { + var2 = var1.readLine(); + if(var2 == null) { + var1.close(); + break; + } + + this.getWhiteListedPlayers().add(var2.trim().toLowerCase()); + } + } catch (Exception var3) { + this.getDedicatedServerInstance().getLogAgent().logWarning("Failed to load white-list: " + var3); + } + + } + + private void saveWhiteList() { + try { + PrintWriter var1 = new PrintWriter(new FileWriter(this.whiteList, false)); + Iterator var2 = this.getWhiteListedPlayers().iterator(); + + while(var2.hasNext()) { + String var3 = (String)var2.next(); + var1.println(var3); + } + + var1.close(); + } catch (Exception var4) { + this.getDedicatedServerInstance().getLogAgent().logWarning("Failed to save white-list: " + var4); + } + + } + + public boolean isAllowedToLogin(String var1) { + var1 = var1.trim().toLowerCase(); + return !this.isWhiteListEnabled() || this.areCommandsAllowed(var1) || this.getWhiteListedPlayers().contains(var1); + } + + public DedicatedServer getDedicatedServerInstance() { + return (DedicatedServer)super.getServerInstance(); + } + + public MinecraftServer getServerInstance() { + return this.getDedicatedServerInstance(); + } +} diff --git a/src/net/minecraft/src/DedicatedServer.java b/src/net/minecraft/src/DedicatedServer.java new file mode 100644 index 0000000..9c9e707 --- /dev/null +++ b/src/net/minecraft/src/DedicatedServer.java @@ -0,0 +1,296 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.IOException; +import java.net.InetAddress; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Random; +import net.minecraft.server.MinecraftServer; + +public class DedicatedServer extends MinecraftServer implements IServer { + private final List pendingCommandList = Collections.synchronizedList(new ArrayList()); + private final ILogAgent field_98131_l; + private RConThreadQuery theRConThreadQuery; + private RConThreadMain theRConThreadMain; + private PropertyManager settings; + private boolean canSpawnStructures; + private EnumGameType gameType; + private NetworkListenThread networkThread; + private boolean guiIsEnabled = false; + + public DedicatedServer(File var1) { + super(var1); + this.field_98131_l = new LogAgent("Minecraft-Server", (String)null, (new File(var1, "server.log")).getAbsolutePath()); + new DedicatedServerSleepThread(this); + } + + protected boolean startServer() throws IOException { + DedicatedServerCommandThread var1 = new DedicatedServerCommandThread(this); + var1.setDaemon(true); + var1.start(); + this.getLogAgent().logInfo("Starting minecraft server version 1.5.2"); + if(Runtime.getRuntime().maxMemory() / 1024L / 1024L < 512L) { + this.getLogAgent().logWarning("To start the server with more ram, launch it as \"java -Xmx1024M -Xms1024M -jar minecraft_server.jar\""); + } + + this.getLogAgent().logInfo("Loading properties"); + this.settings = new PropertyManager(new File("server.properties"), this.getLogAgent()); + if(this.isSinglePlayer()) { + this.setHostname("127.0.0.1"); + } else { + this.setOnlineMode(this.settings.getBooleanProperty("online-mode", true)); + this.setHostname(this.settings.getProperty("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.setTexturePack(this.settings.getProperty("texture-pack", "")); + this.setMOTD(this.settings.getProperty("motd", "A Minecraft Server")); + this.func_104055_i(this.settings.getBooleanProperty("force-gamemode", false)); + 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 var2 = this.settings.getIntProperty("gamemode", EnumGameType.SURVIVAL.getID()); + this.gameType = WorldSettings.getGameTypeById(var2); + this.getLogAgent().logInfo("Default game type: " + this.gameType); + InetAddress var3 = null; + if(this.getServerHostname().length() > 0) { + var3 = InetAddress.getByName(this.getServerHostname()); + } + + if(this.getServerPort() < 0) { + this.setServerPort(this.settings.getIntProperty("server-port", 25565)); + } + + this.getLogAgent().logInfo("Generating keypair"); + this.setKeyPair(CryptManager.createNewKeyPair()); + this.getLogAgent().logInfo("Starting Minecraft server on " + (this.getServerHostname().length() == 0 ? "*" : this.getServerHostname()) + ":" + this.getServerPort()); + + try { + this.networkThread = new DedicatedServerListenThread(this, var3, this.getServerPort()); + } catch (IOException var16) { + this.getLogAgent().logWarning("**** FAILED TO BIND TO PORT!"); + this.getLogAgent().logWarningFormatted("The exception was: {0}", new Object[]{var16.toString()}); + this.getLogAgent().logWarning("Perhaps a server is already running on that port?"); + return false; + } + + if(!this.isServerInOnlineMode()) { + this.getLogAgent().logWarning("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!"); + this.getLogAgent().logWarning("The server will make no attempt to authenticate usernames. Beware."); + this.getLogAgent().logWarning("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."); + this.getLogAgent().logWarning("To change this, set \"online-mode\" to \"true\" in the server.properties file."); + } + + this.setConfigurationManager(new DedicatedPlayerList(this)); + long var4 = System.nanoTime(); + if(this.getFolderName() == null) { + this.setFolderName(this.settings.getProperty("level-name", "world")); + } + + String var6 = this.settings.getProperty("level-seed", ""); + String var7 = this.settings.getProperty("level-type", "DEFAULT"); + String var8 = this.settings.getProperty("generator-settings", ""); + long var9 = (new Random()).nextLong(); + if(var6.length() > 0) { + try { + long var11 = Long.parseLong(var6); + if(var11 != 0L) { + var9 = var11; + } + } catch (NumberFormatException var15) { + var9 = (long)var6.hashCode(); + } + } + + WorldType var17 = WorldType.parseWorldType(var7); + if(var17 == null) { + var17 = WorldType.DEFAULT; + } + + this.setBuildLimit(this.settings.getIntProperty("max-build-height", 256)); + this.setBuildLimit((this.getBuildLimit() + 8) / 16 * 16); + this.setBuildLimit(MathHelper.clamp_int(this.getBuildLimit(), 64, 256)); + this.settings.setProperty("max-build-height", Integer.valueOf(this.getBuildLimit())); + this.getLogAgent().logInfo("Preparing level \"" + this.getFolderName() + "\""); + this.loadAllWorlds(this.getFolderName(), this.getFolderName(), var9, var17, var8); + long var12 = System.nanoTime() - var4; + String var14 = String.format("%.3fs", new Object[]{Double.valueOf((double)var12 / 1.0E9D)}); + this.getLogAgent().logInfo("Done (" + var14 + ")! For help, type \"help\" or \"?\""); + if(this.settings.getBooleanProperty("enable-query", false)) { + this.getLogAgent().logInfo("Starting GS4 status listener"); + this.theRConThreadQuery = new RConThreadQuery(this); + this.theRConThreadQuery.startThread(); + } + + if(this.settings.getBooleanProperty("enable-rcon", false)) { + this.getLogAgent().logInfo("Starting remote control listener"); + this.theRConThreadMain = new RConThreadMain(this); + this.theRConThreadMain.startThread(); + } + + return true; + } + + public boolean canStructuresSpawn() { + return this.canSpawnStructures; + } + + public EnumGameType getGameType() { + return this.gameType; + } + + public int getDifficulty() { + return this.settings.getIntProperty("difficulty", 1); + } + + public boolean isHardcore() { + return this.settings.getBooleanProperty("hardcore", false); + } + + protected void finalTick(CrashReport var1) { + while(this.isServerRunning()) { + this.executePendingCommands(); + + try { + Thread.sleep(10L); + } catch (InterruptedException var3) { + var3.printStackTrace(); + } + } + + } + + public CrashReport addServerInfoToCrashReport(CrashReport var1) { + var1 = super.addServerInfoToCrashReport(var1); + var1.func_85056_g().addCrashSectionCallable("Is Modded", new CallableType(this)); + var1.func_85056_g().addCrashSectionCallable("Type", new CallableServerType(this)); + return var1; + } + + protected void systemExitNow() { + System.exit(0); + } + + protected void updateTimeLightAndEntitiesDedicated() { + 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(PlayerUsageSnooper var1) { + var1.addData("whitelist_enabled", Boolean.valueOf(this.getDedicatedPlayerList().isWhiteListEnabled())); + var1.addData("whitelist_count", Integer.valueOf(this.getDedicatedPlayerList().getWhiteListedPlayers().size())); + super.addServerStatsToSnooper(var1); + } + + public boolean isSnooperEnabled() { + return this.settings.getBooleanProperty("snooper-enabled", true); + } + + public void addPendingCommand(String var1, ICommandSender var2) { + this.pendingCommandList.add(new ServerCommand(var1, var2)); + } + + public void executePendingCommands() { + while(!this.pendingCommandList.isEmpty()) { + ServerCommand var1 = (ServerCommand)this.pendingCommandList.remove(0); + this.getCommandManager().executeCommand(var1.sender, var1.command); + } + + } + + public boolean isDedicatedServer() { + return true; + } + + public DedicatedPlayerList getDedicatedPlayerList() { + return (DedicatedPlayerList)super.getConfigurationManager(); + } + + public NetworkListenThread getNetworkThread() { + return this.networkThread; + } + + public int getIntProperty(String var1, int var2) { + return this.settings.getIntProperty(var1, var2); + } + + public String getStringProperty(String var1, String var2) { + return this.settings.getProperty(var1, var2); + } + + public boolean getBooleanProperty(String var1, boolean var2) { + return this.settings.getBooleanProperty(var1, var2); + } + + public void setProperty(String var1, Object var2) { + this.settings.setProperty(var1, var2); + } + + public void saveProperties() { + this.settings.saveProperties(); + } + + public String getSettingsFilename() { + File var1 = this.settings.getPropertiesFile(); + return var1 != null ? var1.getAbsolutePath() : "No settings file"; + } + + public boolean getGuiEnabled() { + return this.guiIsEnabled; + } + + public String shareToLAN(EnumGameType var1, boolean var2) { + return ""; + } + + public boolean isCommandBlockEnabled() { + return this.settings.getBooleanProperty("enable-command-block", false); + } + + public int getSpawnProtectionSize() { + return this.settings.getIntProperty("spawn-protection", super.getSpawnProtectionSize()); + } + + public boolean func_96290_a(World var1, int var2, int var3, int var4, EntityPlayer var5) { + if(var1.provider.dimensionId != 0) { + return false; + } else if(this.getDedicatedPlayerList().getOps().isEmpty()) { + return false; + } else if(this.getDedicatedPlayerList().areCommandsAllowed(var5.username)) { + return false; + } else if(this.getSpawnProtectionSize() <= 0) { + return false; + } else { + ChunkCoordinates var6 = var1.getSpawnPoint(); + int var7 = MathHelper.abs_int(var2 - var6.posX); + int var8 = MathHelper.abs_int(var4 - var6.posZ); + int var9 = Math.max(var7, var8); + return var9 <= this.getSpawnProtectionSize(); + } + } + + public ILogAgent getLogAgent() { + return this.field_98131_l; + } + + public ServerConfigurationManager getConfigurationManager() { + return this.getDedicatedPlayerList(); + } +} diff --git a/src/net/minecraft/src/DedicatedServerCommandThread.java b/src/net/minecraft/src/DedicatedServerCommandThread.java new file mode 100644 index 0000000..b71e04a --- /dev/null +++ b/src/net/minecraft/src/DedicatedServerCommandThread.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +class DedicatedServerCommandThread extends Thread { + final DedicatedServer server; + + DedicatedServerCommandThread(DedicatedServer var1) { + this.server = var1; + } + + public void run() { + BufferedReader var1 = new BufferedReader(new InputStreamReader(System.in)); + + try { + while(!this.server.isServerStopped() && this.server.isServerRunning()) { + String var2 = var1.readLine(); + if(var2 == null) { + break; + } + + this.server.addPendingCommand(var2, this.server); + } + } catch (IOException var4) { + var4.printStackTrace(); + } + + } +} diff --git a/src/net/minecraft/src/DedicatedServerListenThread.java b/src/net/minecraft/src/DedicatedServerListenThread.java new file mode 100644 index 0000000..fa6244b --- /dev/null +++ b/src/net/minecraft/src/DedicatedServerListenThread.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.net.InetAddress; +import net.minecraft.server.MinecraftServer; + +public class DedicatedServerListenThread extends NetworkListenThread { + private final ServerListenThread theServerListenThread; + + public DedicatedServerListenThread(MinecraftServer var1, InetAddress var2, int var3) throws IOException { + super(var1); + this.theServerListenThread = new ServerListenThread(this, var2, var3); + this.theServerListenThread.start(); + } + + public void stopListening() { + super.stopListening(); + this.theServerListenThread.func_71768_b(); + this.theServerListenThread.interrupt(); + } + + public void networkTick() { + this.theServerListenThread.processPendingConnections(); + super.networkTick(); + } + + public DedicatedServer getDedicatedServer() { + return (DedicatedServer)super.getServer(); + } + + public void func_71761_a(InetAddress var1) { + this.theServerListenThread.func_71769_a(var1); + } + + public MinecraftServer getServer() { + return this.getDedicatedServer(); + } +} diff --git a/src/net/minecraft/src/DedicatedServerSleepThread.java b/src/net/minecraft/src/DedicatedServerSleepThread.java new file mode 100644 index 0000000..bfc7240 --- /dev/null +++ b/src/net/minecraft/src/DedicatedServerSleepThread.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +class DedicatedServerSleepThread extends Thread { + final DedicatedServer theDecitatedServer; + + DedicatedServerSleepThread(DedicatedServer var1) { + this.theDecitatedServer = var1; + this.setDaemon(true); + this.start(); + } + + public void run() { + while(true) { + try { + Thread.sleep(2147483647L); + } catch (InterruptedException var2) { + } + } + } +} diff --git a/src/net/minecraft/src/DemoWorldManager.java b/src/net/minecraft/src/DemoWorldManager.java new file mode 100644 index 0000000..96a78ca --- /dev/null +++ b/src/net/minecraft/src/DemoWorldManager.java @@ -0,0 +1,89 @@ +package net.minecraft.src; + +public class DemoWorldManager extends ItemInWorldManager { + private boolean field_73105_c = false; + private boolean demoTimeExpired = false; + private int field_73104_e = 0; + private int field_73102_f = 0; + + public DemoWorldManager(World var1) { + super(var1); + } + + public void updateBlockRemoving() { + super.updateBlockRemoving(); + ++this.field_73102_f; + long var1 = this.theWorld.getTotalWorldTime(); + long var3 = var1 / 24000L + 1L; + if(!this.field_73105_c && this.field_73102_f > 20) { + this.field_73105_c = true; + this.thisPlayerMP.playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(5, 0)); + } + + this.demoTimeExpired = var1 > 120500L; + if(this.demoTimeExpired) { + ++this.field_73104_e; + } + + if(var1 % 24000L == 500L) { + if(var3 <= 6L) { + this.thisPlayerMP.sendChatToPlayer(this.thisPlayerMP.translateString("demo.day." + var3, new Object[0])); + } + } else if(var3 == 1L) { + if(var1 == 100L) { + this.thisPlayerMP.playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(5, 101)); + } else if(var1 == 175L) { + this.thisPlayerMP.playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(5, 102)); + } else if(var1 == 250L) { + this.thisPlayerMP.playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(5, 103)); + } + } else if(var3 == 5L && var1 % 24000L == 22000L) { + this.thisPlayerMP.sendChatToPlayer(this.thisPlayerMP.translateString("demo.day.warning", new Object[0])); + } + + } + + private void sendDemoReminder() { + if(this.field_73104_e > 100) { + this.thisPlayerMP.sendChatToPlayer(this.thisPlayerMP.translateString("demo.reminder", new Object[0])); + this.field_73104_e = 0; + } + + } + + public void onBlockClicked(int var1, int var2, int var3, int var4) { + if(this.demoTimeExpired) { + this.sendDemoReminder(); + } else { + super.onBlockClicked(var1, var2, var3, var4); + } + } + + public void uncheckedTryHarvestBlock(int var1, int var2, int var3) { + if(!this.demoTimeExpired) { + super.uncheckedTryHarvestBlock(var1, var2, var3); + } + } + + public boolean tryHarvestBlock(int var1, int var2, int var3) { + return this.demoTimeExpired ? false : super.tryHarvestBlock(var1, var2, var3); + } + + public boolean tryUseItem(EntityPlayer var1, World var2, ItemStack var3) { + if(this.demoTimeExpired) { + this.sendDemoReminder(); + return false; + } else { + return super.tryUseItem(var1, var2, var3); + } + } + + public boolean activateBlockOrUseItem(EntityPlayer var1, World var2, ItemStack var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(this.demoTimeExpired) { + this.sendDemoReminder(); + return false; + } else { + return super.activateBlockOrUseItem(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10); + } + } +} diff --git a/src/net/minecraft/src/DemoWorldServer.java b/src/net/minecraft/src/DemoWorldServer.java new file mode 100644 index 0000000..bdcb8ef --- /dev/null +++ b/src/net/minecraft/src/DemoWorldServer.java @@ -0,0 +1,12 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class DemoWorldServer extends WorldServer { + private static final long demoWorldSeed = (long)"North Carolina".hashCode(); + public static final WorldSettings demoWorldSettings = (new WorldSettings(demoWorldSeed, EnumGameType.SURVIVAL, true, false, WorldType.DEFAULT)).enableBonusChest(); + + public DemoWorldServer(MinecraftServer var1, ISaveHandler var2, String var3, int var4, Profiler var5, ILogAgent var6) { + super(var1, var2, var3, var4, demoWorldSettings, var5, var6); + } +} diff --git a/src/net/minecraft/src/DerivedWorldInfo.java b/src/net/minecraft/src/DerivedWorldInfo.java new file mode 100644 index 0000000..0811009 --- /dev/null +++ b/src/net/minecraft/src/DerivedWorldInfo.java @@ -0,0 +1,151 @@ +package net.minecraft.src; + +public class DerivedWorldInfo extends WorldInfo { + private final WorldInfo theWorldInfo; + + public DerivedWorldInfo(WorldInfo var1) { + this.theWorldInfo = var1; + } + + public NBTTagCompound getNBTTagCompound() { + return this.theWorldInfo.getNBTTagCompound(); + } + + public NBTTagCompound cloneNBTCompound(NBTTagCompound var1) { + return this.theWorldInfo.cloneNBTCompound(var1); + } + + public long getSeed() { + return this.theWorldInfo.getSeed(); + } + + public int getSpawnX() { + return this.theWorldInfo.getSpawnX(); + } + + public int getSpawnY() { + return this.theWorldInfo.getSpawnY(); + } + + public int getSpawnZ() { + return this.theWorldInfo.getSpawnZ(); + } + + public long getWorldTotalTime() { + return this.theWorldInfo.getWorldTotalTime(); + } + + public long getWorldTime() { + return this.theWorldInfo.getWorldTime(); + } + + public long getSizeOnDisk() { + return this.theWorldInfo.getSizeOnDisk(); + } + + public NBTTagCompound getPlayerNBTTagCompound() { + return this.theWorldInfo.getPlayerNBTTagCompound(); + } + + public int getDimension() { + return this.theWorldInfo.getDimension(); + } + + public String getWorldName() { + return this.theWorldInfo.getWorldName(); + } + + public int getSaveVersion() { + return this.theWorldInfo.getSaveVersion(); + } + + public long getLastTimePlayed() { + return this.theWorldInfo.getLastTimePlayed(); + } + + public boolean isThundering() { + return this.theWorldInfo.isThundering(); + } + + public int getThunderTime() { + return this.theWorldInfo.getThunderTime(); + } + + public boolean isRaining() { + return this.theWorldInfo.isRaining(); + } + + public int getRainTime() { + return this.theWorldInfo.getRainTime(); + } + + public EnumGameType getGameType() { + return this.theWorldInfo.getGameType(); + } + + public void setSpawnX(int var1) { + } + + public void setSpawnY(int var1) { + } + + public void setSpawnZ(int var1) { + } + + public void incrementTotalWorldTime(long var1) { + } + + public void setWorldTime(long var1) { + } + + public void setSpawnPosition(int var1, int var2, int var3) { + } + + public void setWorldName(String var1) { + } + + public void setSaveVersion(int var1) { + } + + public void setThundering(boolean var1) { + } + + public void setThunderTime(int var1) { + } + + public void setRaining(boolean var1) { + } + + public void setRainTime(int var1) { + } + + public boolean isMapFeaturesEnabled() { + return this.theWorldInfo.isMapFeaturesEnabled(); + } + + public boolean isHardcoreModeEnabled() { + return this.theWorldInfo.isHardcoreModeEnabled(); + } + + public WorldType getTerrainType() { + return this.theWorldInfo.getTerrainType(); + } + + public void setTerrainType(WorldType var1) { + } + + public boolean areCommandsAllowed() { + return this.theWorldInfo.areCommandsAllowed(); + } + + public boolean isInitialized() { + return this.theWorldInfo.isInitialized(); + } + + public void setServerInitialized(boolean var1) { + } + + public GameRules getGameRulesInstance() { + return this.theWorldInfo.getGameRulesInstance(); + } +} diff --git a/src/net/minecraft/src/DestroyBlockProgress.java b/src/net/minecraft/src/DestroyBlockProgress.java new file mode 100644 index 0000000..56f5de3 --- /dev/null +++ b/src/net/minecraft/src/DestroyBlockProgress.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +public class DestroyBlockProgress { + private final int miningPlayerEntId; + private final int partialBlockX; + private final int partialBlockY; + private final int partialBlockZ; + private int partialBlockProgress; + private int createdAtCloudUpdateTick; + + public DestroyBlockProgress(int var1, int var2, int var3, int var4) { + this.miningPlayerEntId = var1; + this.partialBlockX = var2; + this.partialBlockY = var3; + this.partialBlockZ = var4; + } + + public int getPartialBlockX() { + return this.partialBlockX; + } + + public int getPartialBlockY() { + return this.partialBlockY; + } + + public int getPartialBlockZ() { + return this.partialBlockZ; + } + + public void setPartialBlockDamage(int var1) { + if(var1 > 10) { + var1 = 10; + } + + this.partialBlockProgress = var1; + } + + public int getPartialBlockDamage() { + return this.partialBlockProgress; + } + + public void setCloudUpdateTick(int var1) { + this.createdAtCloudUpdateTick = var1; + } + + public int getCreationCloudUpdateTick() { + return this.createdAtCloudUpdateTick; + } +} diff --git a/src/net/minecraft/src/Direction.java b/src/net/minecraft/src/Direction.java new file mode 100644 index 0000000..0ab3edc --- /dev/null +++ b/src/net/minecraft/src/Direction.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class Direction { + public static final int[] offsetX = new int[]{0, -1, 0, 1}; + public static final int[] offsetZ = new int[]{1, 0, -1, 0}; + public static final String[] directions = new String[]{"SOUTH", "WEST", "NORTH", "EAST"}; + public static final int[] directionToFacing = new int[]{3, 4, 2, 5}; + public static final int[] facingToDirection = new int[]{-1, -1, 2, 0, 1, 3}; + public static final int[] rotateOpposite = new int[]{2, 3, 0, 1}; + public static final int[] rotateRight = new int[]{1, 2, 3, 0}; + public static final int[] rotateLeft = new int[]{3, 0, 1, 2}; + public static final int[][] bedDirection = new int[][]{{1, 0, 3, 2, 5, 4}, {1, 0, 5, 4, 2, 3}, {1, 0, 2, 3, 4, 5}, {1, 0, 4, 5, 3, 2}}; + + public static int getMovementDirection(double var0, double var2) { + return MathHelper.abs((float)var0) > MathHelper.abs((float)var2) ? (var0 > 0.0D ? 1 : 3) : (var2 > 0.0D ? 2 : 0); + } +} diff --git a/src/net/minecraft/src/DispenserBehaviorArrow.java b/src/net/minecraft/src/DispenserBehaviorArrow.java new file mode 100644 index 0000000..9a50721 --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviorArrow.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +final class DispenserBehaviorArrow extends BehaviorProjectileDispense { + protected IProjectile getProjectileEntity(World var1, IPosition var2) { + EntityArrow var3 = new EntityArrow(var1, var2.getX(), var2.getY(), var2.getZ()); + var3.canBePickedUp = 1; + return var3; + } +} diff --git a/src/net/minecraft/src/DispenserBehaviorBoat.java b/src/net/minecraft/src/DispenserBehaviorBoat.java new file mode 100644 index 0000000..cadc617 --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviorBoat.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +final class DispenserBehaviorBoat extends BehaviorDefaultDispenseItem { + private final BehaviorDefaultDispenseItem defaultDispenserItemBehavior = new BehaviorDefaultDispenseItem(); + + public ItemStack dispenseStack(IBlockSource var1, ItemStack var2) { + EnumFacing var3 = BlockDispenser.getFacing(var1.getBlockMetadata()); + World var4 = var1.getWorld(); + double var5 = var1.getX() + (double)((float)var3.getFrontOffsetX() * 1.125F); + double var7 = var1.getY() + (double)((float)var3.getFrontOffsetY() * 1.125F); + double var9 = var1.getZ() + (double)((float)var3.getFrontOffsetZ() * 1.125F); + int var11 = var1.getXInt() + var3.getFrontOffsetX(); + int var12 = var1.getYInt() + var3.getFrontOffsetY(); + int var13 = var1.getZInt() + var3.getFrontOffsetZ(); + Material var14 = var4.getBlockMaterial(var11, var12, var13); + double var15; + if(Material.water.equals(var14)) { + var15 = 1.0D; + } else { + if(!Material.air.equals(var14) || !Material.water.equals(var4.getBlockMaterial(var11, var12 - 1, var13))) { + return this.defaultDispenserItemBehavior.dispense(var1, var2); + } + + var15 = 0.0D; + } + + EntityBoat var17 = new EntityBoat(var4, var5, var7 + var15, var9); + var4.spawnEntityInWorld(var17); + var2.splitStack(1); + return var2; + } + + protected void playDispenseSound(IBlockSource var1) { + var1.getWorld().playAuxSFX(1000, var1.getXInt(), var1.getYInt(), var1.getZInt(), 0); + } +} diff --git a/src/net/minecraft/src/DispenserBehaviorDye.java b/src/net/minecraft/src/DispenserBehaviorDye.java new file mode 100644 index 0000000..3fd3dd2 --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviorDye.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +final class DispenserBehaviorDye extends BehaviorDefaultDispenseItem { + private boolean field_96461_b = true; + + protected ItemStack dispenseStack(IBlockSource var1, ItemStack var2) { + if(var2.getItemDamage() == 15) { + EnumFacing var3 = BlockDispenser.getFacing(var1.getBlockMetadata()); + World var4 = var1.getWorld(); + int var5 = var1.getXInt() + var3.getFrontOffsetX(); + int var6 = var1.getYInt() + var3.getFrontOffsetY(); + int var7 = var1.getZInt() + var3.getFrontOffsetZ(); + if(ItemDye.func_96604_a(var2, var4, var5, var6, var7)) { + if(!var4.isRemote) { + var4.playAuxSFX(2005, var5, var6, var7, 0); + } + } else { + this.field_96461_b = false; + } + + return var2; + } else { + return super.dispenseStack(var1, var2); + } + } + + protected void playDispenseSound(IBlockSource var1) { + if(this.field_96461_b) { + var1.getWorld().playAuxSFX(1000, var1.getXInt(), var1.getYInt(), var1.getZInt(), 0); + } else { + var1.getWorld().playAuxSFX(1001, var1.getXInt(), var1.getYInt(), var1.getZInt(), 0); + } + + } +} diff --git a/src/net/minecraft/src/DispenserBehaviorEgg.java b/src/net/minecraft/src/DispenserBehaviorEgg.java new file mode 100644 index 0000000..90923fa --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviorEgg.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +final class DispenserBehaviorEgg extends BehaviorProjectileDispense { + protected IProjectile getProjectileEntity(World var1, IPosition var2) { + return new EntityEgg(var1, var2.getX(), var2.getY(), var2.getZ()); + } +} diff --git a/src/net/minecraft/src/DispenserBehaviorEmptyBucket.java b/src/net/minecraft/src/DispenserBehaviorEmptyBucket.java new file mode 100644 index 0000000..1ceac4b --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviorEmptyBucket.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +final class DispenserBehaviorEmptyBucket extends BehaviorDefaultDispenseItem { + private final BehaviorDefaultDispenseItem defaultDispenserItemBehavior = new BehaviorDefaultDispenseItem(); + + public ItemStack dispenseStack(IBlockSource var1, ItemStack var2) { + EnumFacing var3 = BlockDispenser.getFacing(var1.getBlockMetadata()); + World var4 = var1.getWorld(); + int var5 = var1.getXInt() + var3.getFrontOffsetX(); + int var6 = var1.getYInt() + var3.getFrontOffsetY(); + int var7 = var1.getZInt() + var3.getFrontOffsetZ(); + Material var8 = var4.getBlockMaterial(var5, var6, var7); + int var9 = var4.getBlockMetadata(var5, var6, var7); + Item var10; + if(Material.water.equals(var8) && var9 == 0) { + var10 = Item.bucketWater; + } else { + if(!Material.lava.equals(var8) || var9 != 0) { + return super.dispenseStack(var1, var2); + } + + var10 = Item.bucketLava; + } + + var4.setBlockToAir(var5, var6, var7); + if(--var2.stackSize == 0) { + var2.itemID = var10.itemID; + var2.stackSize = 1; + } else if(((TileEntityDispenser)var1.getBlockTileEntity()).addItem(new ItemStack(var10)) < 0) { + this.defaultDispenserItemBehavior.dispense(var1, new ItemStack(var10)); + } + + return var2; + } +} diff --git a/src/net/minecraft/src/DispenserBehaviorExperience.java b/src/net/minecraft/src/DispenserBehaviorExperience.java new file mode 100644 index 0000000..8da0772 --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviorExperience.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +final class DispenserBehaviorExperience extends BehaviorProjectileDispense { + protected IProjectile getProjectileEntity(World var1, IPosition var2) { + return new EntityExpBottle(var1, var2.getX(), var2.getY(), var2.getZ()); + } + + protected float func_82498_a() { + return super.func_82498_a() * 0.5F; + } + + protected float func_82500_b() { + return super.func_82500_b() * 1.25F; + } +} diff --git a/src/net/minecraft/src/DispenserBehaviorFilledBucket.java b/src/net/minecraft/src/DispenserBehaviorFilledBucket.java new file mode 100644 index 0000000..33c763b --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviorFilledBucket.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +final class DispenserBehaviorFilledBucket extends BehaviorDefaultDispenseItem { + private final BehaviorDefaultDispenseItem defaultDispenserItemBehavior = new BehaviorDefaultDispenseItem(); + + public ItemStack dispenseStack(IBlockSource var1, ItemStack var2) { + ItemBucket var3 = (ItemBucket)var2.getItem(); + int var4 = var1.getXInt(); + int var5 = var1.getYInt(); + int var6 = var1.getZInt(); + EnumFacing var7 = BlockDispenser.getFacing(var1.getBlockMetadata()); + if(var3.tryPlaceContainedLiquid(var1.getWorld(), (double)var4, (double)var5, (double)var6, var4 + var7.getFrontOffsetX(), var5 + var7.getFrontOffsetY(), var6 + var7.getFrontOffsetZ())) { + var2.itemID = Item.bucketEmpty.itemID; + var2.stackSize = 1; + return var2; + } else { + return this.defaultDispenserItemBehavior.dispense(var1, var2); + } + } +} diff --git a/src/net/minecraft/src/DispenserBehaviorFire.java b/src/net/minecraft/src/DispenserBehaviorFire.java new file mode 100644 index 0000000..4418267 --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviorFire.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +final class DispenserBehaviorFire extends BehaviorDefaultDispenseItem { + private boolean field_96466_b = true; + + protected ItemStack dispenseStack(IBlockSource var1, ItemStack var2) { + EnumFacing var3 = BlockDispenser.getFacing(var1.getBlockMetadata()); + World var4 = var1.getWorld(); + int var5 = var1.getXInt() + var3.getFrontOffsetX(); + int var6 = var1.getYInt() + var3.getFrontOffsetY(); + int var7 = var1.getZInt() + var3.getFrontOffsetZ(); + if(var4.isAirBlock(var5, var6, var7)) { + var4.setBlock(var5, var6, var7, Block.fire.blockID); + if(var2.attemptDamageItem(1, var4.rand)) { + var2.stackSize = 0; + } + } else if(var4.getBlockId(var5, var6, var7) == Block.tnt.blockID) { + Block.tnt.onBlockDestroyedByPlayer(var4, var5, var6, var7, 1); + var4.setBlockToAir(var5, var6, var7); + } else { + this.field_96466_b = false; + } + + return var2; + } + + protected void playDispenseSound(IBlockSource var1) { + if(this.field_96466_b) { + var1.getWorld().playAuxSFX(1000, var1.getXInt(), var1.getYInt(), var1.getZInt(), 0); + } else { + var1.getWorld().playAuxSFX(1001, var1.getXInt(), var1.getYInt(), var1.getZInt(), 0); + } + + } +} diff --git a/src/net/minecraft/src/DispenserBehaviorFireball.java b/src/net/minecraft/src/DispenserBehaviorFireball.java new file mode 100644 index 0000000..c09de8e --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviorFireball.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +import java.util.Random; + +final class DispenserBehaviorFireball extends BehaviorDefaultDispenseItem { + public ItemStack dispenseStack(IBlockSource var1, ItemStack var2) { + EnumFacing var3 = BlockDispenser.getFacing(var1.getBlockMetadata()); + IPosition var4 = BlockDispenser.getIPositionFromBlockSource(var1); + double var5 = var4.getX() + (double)((float)var3.getFrontOffsetX() * 0.3F); + double var7 = var4.getY() + (double)((float)var3.getFrontOffsetX() * 0.3F); + double var9 = var4.getZ() + (double)((float)var3.getFrontOffsetZ() * 0.3F); + World var11 = var1.getWorld(); + Random var12 = var11.rand; + double var13 = var12.nextGaussian() * 0.05D + (double)var3.getFrontOffsetX(); + double var15 = var12.nextGaussian() * 0.05D + (double)var3.getFrontOffsetY(); + double var17 = var12.nextGaussian() * 0.05D + (double)var3.getFrontOffsetZ(); + var11.spawnEntityInWorld(new EntitySmallFireball(var11, var5, var7, var9, var13, var15, var17)); + var2.splitStack(1); + return var2; + } + + protected void playDispenseSound(IBlockSource var1) { + var1.getWorld().playAuxSFX(1009, var1.getXInt(), var1.getYInt(), var1.getZInt(), 0); + } +} diff --git a/src/net/minecraft/src/DispenserBehaviorFireworks.java b/src/net/minecraft/src/DispenserBehaviorFireworks.java new file mode 100644 index 0000000..71fdec8 --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviorFireworks.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +final class DispenserBehaviorFireworks extends BehaviorDefaultDispenseItem { + public ItemStack dispenseStack(IBlockSource var1, ItemStack var2) { + EnumFacing var3 = BlockDispenser.getFacing(var1.getBlockMetadata()); + double var4 = var1.getX() + (double)var3.getFrontOffsetX(); + double var6 = (double)((float)var1.getYInt() + 0.2F); + double var8 = var1.getZ() + (double)var3.getFrontOffsetZ(); + EntityFireworkRocket var10 = new EntityFireworkRocket(var1.getWorld(), var4, var6, var8, var2); + var1.getWorld().spawnEntityInWorld(var10); + var2.splitStack(1); + return var2; + } + + protected void playDispenseSound(IBlockSource var1) { + var1.getWorld().playAuxSFX(1002, var1.getXInt(), var1.getYInt(), var1.getZInt(), 0); + } +} diff --git a/src/net/minecraft/src/DispenserBehaviorMobEgg.java b/src/net/minecraft/src/DispenserBehaviorMobEgg.java new file mode 100644 index 0000000..a0b56c0 --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviorMobEgg.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +final class DispenserBehaviorMobEgg extends BehaviorDefaultDispenseItem { + public ItemStack dispenseStack(IBlockSource var1, ItemStack var2) { + EnumFacing var3 = BlockDispenser.getFacing(var1.getBlockMetadata()); + double var4 = var1.getX() + (double)var3.getFrontOffsetX(); + double var6 = (double)((float)var1.getYInt() + 0.2F); + double var8 = var1.getZ() + (double)var3.getFrontOffsetZ(); + Entity var10 = ItemMonsterPlacer.spawnCreature(var1.getWorld(), var2.getItemDamage(), var4, var6, var8); + if(var10 instanceof EntityLiving && var2.hasDisplayName()) { + ((EntityLiving)var10).func_94058_c(var2.getDisplayName()); + } + + var2.splitStack(1); + return var2; + } +} diff --git a/src/net/minecraft/src/DispenserBehaviorPotion.java b/src/net/minecraft/src/DispenserBehaviorPotion.java new file mode 100644 index 0000000..749e71e --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviorPotion.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +final class DispenserBehaviorPotion implements IBehaviorDispenseItem { + private final BehaviorDefaultDispenseItem defaultDispenserItemBehavior = new BehaviorDefaultDispenseItem(); + + public ItemStack dispense(IBlockSource var1, ItemStack var2) { + return ItemPotion.isSplash(var2.getItemDamage()) ? (new DispenserBehaviorPotionProjectile(this, var2)).dispense(var1, var2) : this.defaultDispenserItemBehavior.dispense(var1, var2); + } +} diff --git a/src/net/minecraft/src/DispenserBehaviorPotionProjectile.java b/src/net/minecraft/src/DispenserBehaviorPotionProjectile.java new file mode 100644 index 0000000..052fe63 --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviorPotionProjectile.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +class DispenserBehaviorPotionProjectile extends BehaviorProjectileDispense { + final ItemStack potionItemStack; + final DispenserBehaviorPotion dispenserPotionBehavior; + + DispenserBehaviorPotionProjectile(DispenserBehaviorPotion var1, ItemStack var2) { + this.dispenserPotionBehavior = var1; + this.potionItemStack = var2; + } + + protected IProjectile getProjectileEntity(World var1, IPosition var2) { + return new EntityPotion(var1, var2.getX(), var2.getY(), var2.getZ(), this.potionItemStack.copy()); + } + + protected float func_82498_a() { + return super.func_82498_a() * 0.5F; + } + + protected float func_82500_b() { + return super.func_82500_b() * 1.25F; + } +} diff --git a/src/net/minecraft/src/DispenserBehaviorSnowball.java b/src/net/minecraft/src/DispenserBehaviorSnowball.java new file mode 100644 index 0000000..04dad93 --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviorSnowball.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +final class DispenserBehaviorSnowball extends BehaviorProjectileDispense { + protected IProjectile getProjectileEntity(World var1, IPosition var2) { + return new EntitySnowball(var1, var2.getX(), var2.getY(), var2.getZ()); + } +} diff --git a/src/net/minecraft/src/DispenserBehaviorTNT.java b/src/net/minecraft/src/DispenserBehaviorTNT.java new file mode 100644 index 0000000..9c8dcda --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviorTNT.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +final class DispenserBehaviorTNT extends BehaviorDefaultDispenseItem { + protected ItemStack dispenseStack(IBlockSource var1, ItemStack var2) { + EnumFacing var3 = BlockDispenser.getFacing(var1.getBlockMetadata()); + World var4 = var1.getWorld(); + int var5 = var1.getXInt() + var3.getFrontOffsetX(); + int var6 = var1.getYInt() + var3.getFrontOffsetY(); + int var7 = var1.getZInt() + var3.getFrontOffsetZ(); + EntityTNTPrimed var8 = new EntityTNTPrimed(var4, (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), (double)((float)var7 + 0.5F), (EntityLiving)null); + var4.spawnEntityInWorld(var8); + --var2.stackSize; + return var2; + } +} diff --git a/src/net/minecraft/src/DispenserBehaviors.java b/src/net/minecraft/src/DispenserBehaviors.java new file mode 100644 index 0000000..93d6ac2 --- /dev/null +++ b/src/net/minecraft/src/DispenserBehaviors.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +public class DispenserBehaviors { + public static void func_96467_a() { + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.arrow, new DispenserBehaviorArrow()); + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.egg, new DispenserBehaviorEgg()); + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.snowball, new DispenserBehaviorSnowball()); + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.expBottle, new DispenserBehaviorExperience()); + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.potion, new DispenserBehaviorPotion()); + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.monsterPlacer, new DispenserBehaviorMobEgg()); + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.firework, new DispenserBehaviorFireworks()); + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.fireballCharge, new DispenserBehaviorFireball()); + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.boat, new DispenserBehaviorBoat()); + DispenserBehaviorFilledBucket var0 = new DispenserBehaviorFilledBucket(); + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.bucketLava, var0); + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.bucketWater, var0); + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.bucketEmpty, new DispenserBehaviorEmptyBucket()); + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.flintAndSteel, new DispenserBehaviorFire()); + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.dyePowder, new DispenserBehaviorDye()); + BlockDispenser.dispenseBehaviorRegistry.putObject(Item.itemsList[Block.tnt.blockID], new DispenserBehaviorTNT()); + } +} diff --git a/src/net/minecraft/src/EffectRenderer.java b/src/net/minecraft/src/EffectRenderer.java new file mode 100644 index 0000000..61ea95d --- /dev/null +++ b/src/net/minecraft/src/EffectRenderer.java @@ -0,0 +1,183 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import org.lwjgl.opengl.GL11; + +public class EffectRenderer { + protected World worldObj; + private List[] fxLayers = new List[4]; + private RenderEngine renderer; + private Random rand = new Random(); + + public EffectRenderer(World var1, RenderEngine var2) { + if(var1 != null) { + this.worldObj = var1; + } + + this.renderer = var2; + + for(int var3 = 0; var3 < 4; ++var3) { + this.fxLayers[var3] = new ArrayList(); + } + + } + + public void addEffect(EntityFX var1) { + int var2 = var1.getFXLayer(); + if(this.fxLayers[var2].size() >= 4000) { + this.fxLayers[var2].remove(0); + } + + this.fxLayers[var2].add(var1); + } + + public void updateEffects() { + for(int var1 = 0; var1 < 4; ++var1) { + for(int var2 = 0; var2 < this.fxLayers[var1].size(); ++var2) { + EntityFX var3 = (EntityFX)this.fxLayers[var1].get(var2); + var3.onUpdate(); + if(var3.isDead) { + this.fxLayers[var1].remove(var2--); + } + } + } + + } + + public void renderParticles(Entity var1, float var2) { + float var3 = ActiveRenderInfo.rotationX; + float var4 = ActiveRenderInfo.rotationZ; + float var5 = ActiveRenderInfo.rotationYZ; + float var6 = ActiveRenderInfo.rotationXY; + float var7 = ActiveRenderInfo.rotationXZ; + EntityFX.interpPosX = var1.lastTickPosX + (var1.posX - var1.lastTickPosX) * (double)var2; + EntityFX.interpPosY = var1.lastTickPosY + (var1.posY - var1.lastTickPosY) * (double)var2; + EntityFX.interpPosZ = var1.lastTickPosZ + (var1.posZ - var1.lastTickPosZ) * (double)var2; + + for(int var8 = 0; var8 < 3; ++var8) { + if(!this.fxLayers[var8].isEmpty()) { + switch(var8) { + case 0: + default: + this.renderer.bindTexture("/particles.png"); + break; + case 1: + this.renderer.bindTexture("/terrain.png"); + break; + case 2: + this.renderer.bindTexture("/gui/items.png"); + } + + Tessellator var9 = Tessellator.instance; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.003921569F); + var9.startDrawingQuads(); + + for(int var10 = 0; var10 < this.fxLayers[var8].size(); ++var10) { + EntityFX var11 = (EntityFX)this.fxLayers[var8].get(var10); + var9.setBrightness(var11.getBrightnessForRender(var2)); + var11.renderParticle(var9, var2, var3, var7, var4, var5, var6); + } + + var9.draw(); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthMask(true); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + } + } + + } + + public void renderLitParticles(Entity var1, float var2) { + float var4 = MathHelper.cos(var1.rotationYaw * ((float)Math.PI / 180.0F)); + float var5 = MathHelper.sin(var1.rotationYaw * ((float)Math.PI / 180.0F)); + float var6 = -var5 * MathHelper.sin(var1.rotationPitch * ((float)Math.PI / 180.0F)); + float var7 = var4 * MathHelper.sin(var1.rotationPitch * ((float)Math.PI / 180.0F)); + float var8 = MathHelper.cos(var1.rotationPitch * ((float)Math.PI / 180.0F)); + byte var9 = 3; + if(!this.fxLayers[var9].isEmpty()) { + Tessellator var10 = Tessellator.instance; + + for(int var11 = 0; var11 < this.fxLayers[var9].size(); ++var11) { + EntityFX var12 = (EntityFX)this.fxLayers[var9].get(var11); + var10.setBrightness(var12.getBrightnessForRender(var2)); + var12.renderParticle(var10, var2, var4, var8, var5, var6, var7); + } + + } + } + + public void clearEffects(World var1) { + this.worldObj = var1; + + for(int var2 = 0; var2 < 4; ++var2) { + this.fxLayers[var2].clear(); + } + + } + + public void addBlockDestroyEffects(int var1, int var2, int var3, int var4, int var5) { + if(var4 != 0) { + Block var6 = Block.blocksList[var4]; + byte var7 = 4; + + for(int var8 = 0; var8 < var7; ++var8) { + for(int var9 = 0; var9 < var7; ++var9) { + for(int var10 = 0; var10 < var7; ++var10) { + double var11 = (double)var1 + ((double)var8 + 0.5D) / (double)var7; + double var13 = (double)var2 + ((double)var9 + 0.5D) / (double)var7; + double var15 = (double)var3 + ((double)var10 + 0.5D) / (double)var7; + int var17 = this.rand.nextInt(6); + this.addEffect((new EntityDiggingFX(this.worldObj, var11, var13, var15, var11 - (double)var1 - 0.5D, var13 - (double)var2 - 0.5D, var15 - (double)var3 - 0.5D, var6, var17, var5, this.renderer)).func_70596_a(var1, var2, var3)); + } + } + } + + } + } + + public void addBlockHitEffects(int var1, int var2, int var3, int var4) { + int var5 = this.worldObj.getBlockId(var1, var2, var3); + if(var5 != 0) { + Block var6 = Block.blocksList[var5]; + float var7 = 0.1F; + double var8 = (double)var1 + this.rand.nextDouble() * (var6.getBlockBoundsMaxX() - var6.getBlockBoundsMinX() - (double)(var7 * 2.0F)) + (double)var7 + var6.getBlockBoundsMinX(); + double var10 = (double)var2 + this.rand.nextDouble() * (var6.getBlockBoundsMaxY() - var6.getBlockBoundsMinY() - (double)(var7 * 2.0F)) + (double)var7 + var6.getBlockBoundsMinY(); + double var12 = (double)var3 + this.rand.nextDouble() * (var6.getBlockBoundsMaxZ() - var6.getBlockBoundsMinZ() - (double)(var7 * 2.0F)) + (double)var7 + var6.getBlockBoundsMinZ(); + if(var4 == 0) { + var10 = (double)var2 + var6.getBlockBoundsMinY() - (double)var7; + } + + if(var4 == 1) { + var10 = (double)var2 + var6.getBlockBoundsMaxY() + (double)var7; + } + + if(var4 == 2) { + var12 = (double)var3 + var6.getBlockBoundsMinZ() - (double)var7; + } + + if(var4 == 3) { + var12 = (double)var3 + var6.getBlockBoundsMaxZ() + (double)var7; + } + + if(var4 == 4) { + var8 = (double)var1 + var6.getBlockBoundsMinX() - (double)var7; + } + + if(var4 == 5) { + var8 = (double)var1 + var6.getBlockBoundsMaxX() + (double)var7; + } + + this.addEffect((new EntityDiggingFX(this.worldObj, var8, var10, var12, 0.0D, 0.0D, 0.0D, var6, var4, this.worldObj.getBlockMetadata(var1, var2, var3), this.renderer)).func_70596_a(var1, var2, var3).multiplyVelocity(0.2F).multipleParticleScaleBy(0.6F)); + } + } + + public String getStatistics() { + return "" + (this.fxLayers[0].size() + this.fxLayers[1].size() + this.fxLayers[2].size()); + } +} diff --git a/src/net/minecraft/src/Empty3.java b/src/net/minecraft/src/Empty3.java new file mode 100644 index 0000000..8c4433e --- /dev/null +++ b/src/net/minecraft/src/Empty3.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +class Empty3 { +} diff --git a/src/net/minecraft/src/EmptyChunk.java b/src/net/minecraft/src/EmptyChunk.java new file mode 100644 index 0000000..8a4f111 --- /dev/null +++ b/src/net/minecraft/src/EmptyChunk.java @@ -0,0 +1,112 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class EmptyChunk extends Chunk { + public EmptyChunk(World var1, int var2, int var3) { + super(var1, var2, var3); + } + + public boolean isAtLocation(int var1, int var2) { + return var1 == this.xPosition && var2 == this.zPosition; + } + + public int getHeightValue(int var1, int var2) { + return 0; + } + + public void generateHeightMap() { + } + + public void generateSkylightMap() { + } + + public int getBlockID(int var1, int var2, int var3) { + return 0; + } + + public int getBlockLightOpacity(int var1, int var2, int var3) { + return 255; + } + + public boolean setBlockIDWithMetadata(int var1, int var2, int var3, int var4, int var5) { + return true; + } + + public int getBlockMetadata(int var1, int var2, int var3) { + return 0; + } + + public boolean setBlockMetadata(int var1, int var2, int var3, int var4) { + return false; + } + + public int getSavedLightValue(EnumSkyBlock var1, int var2, int var3, int var4) { + return 0; + } + + public void setLightValue(EnumSkyBlock var1, int var2, int var3, int var4, int var5) { + } + + public int getBlockLightValue(int var1, int var2, int var3, int var4) { + return 0; + } + + public void addEntity(Entity var1) { + } + + public void removeEntity(Entity var1) { + } + + public void removeEntityAtIndex(Entity var1, int var2) { + } + + public boolean canBlockSeeTheSky(int var1, int var2, int var3) { + return false; + } + + public TileEntity getChunkBlockTileEntity(int var1, int var2, int var3) { + return null; + } + + public void addTileEntity(TileEntity var1) { + } + + public void setChunkBlockTileEntity(int var1, int var2, int var3, TileEntity var4) { + } + + public void removeChunkBlockTileEntity(int var1, int var2, int var3) { + } + + public void onChunkLoad() { + } + + public void onChunkUnload() { + } + + public void setChunkModified() { + } + + public void getEntitiesWithinAABBForEntity(Entity var1, AxisAlignedBB var2, List var3, IEntitySelector var4) { + } + + public void getEntitiesOfTypeWithinAAAB(Class var1, AxisAlignedBB var2, List var3, IEntitySelector var4) { + } + + public boolean needsSaving(boolean var1) { + return false; + } + + public Random getRandomWithSeed(long var1) { + return new Random(this.worldObj.getSeed() + (long)(this.xPosition * this.xPosition * 4987142) + (long)(this.xPosition * 5947611) + (long)(this.zPosition * this.zPosition) * 4392871L + (long)(this.zPosition * 389711) ^ var1); + } + + public boolean isEmpty() { + return true; + } + + public boolean getAreLevelsEmpty(int var1, int var2) { + return true; + } +} diff --git a/src/net/minecraft/src/Enchantment.java b/src/net/minecraft/src/Enchantment.java new file mode 100644 index 0000000..ec39275 --- /dev/null +++ b/src/net/minecraft/src/Enchantment.java @@ -0,0 +1,110 @@ +package net.minecraft.src; + +import java.util.ArrayList; + +public abstract class Enchantment { + public static final Enchantment[] enchantmentsList = new Enchantment[256]; + public static final Enchantment[] field_92090_c; + public static final Enchantment protection = new EnchantmentProtection(0, 10, 0); + public static final Enchantment fireProtection = new EnchantmentProtection(1, 5, 1); + public static final Enchantment featherFalling = new EnchantmentProtection(2, 5, 2); + public static final Enchantment blastProtection = new EnchantmentProtection(3, 2, 3); + public static final Enchantment projectileProtection = new EnchantmentProtection(4, 5, 4); + public static final Enchantment respiration = new EnchantmentOxygen(5, 2); + public static final Enchantment aquaAffinity = new EnchantmentWaterWorker(6, 2); + public static final Enchantment thorns = new EnchantmentThorns(7, 1); + public static final Enchantment sharpness = new EnchantmentDamage(16, 10, 0); + public static final Enchantment smite = new EnchantmentDamage(17, 5, 1); + public static final Enchantment baneOfArthropods = new EnchantmentDamage(18, 5, 2); + public static final Enchantment knockback = new EnchantmentKnockback(19, 5); + public static final Enchantment fireAspect = new EnchantmentFireAspect(20, 2); + public static final Enchantment looting = new EnchantmentLootBonus(21, 2, EnumEnchantmentType.weapon); + public static final Enchantment efficiency = new EnchantmentDigging(32, 10); + public static final Enchantment silkTouch = new EnchantmentUntouching(33, 1); + public static final Enchantment unbreaking = new EnchantmentDurability(34, 5); + public static final Enchantment fortune = new EnchantmentLootBonus(35, 2, EnumEnchantmentType.digger); + public static final Enchantment power = new EnchantmentArrowDamage(48, 10); + public static final Enchantment punch = new EnchantmentArrowKnockback(49, 2); + public static final Enchantment flame = new EnchantmentArrowFire(50, 2); + public static final Enchantment infinity = new EnchantmentArrowInfinite(51, 1); + public final int effectId; + private final int weight; + public EnumEnchantmentType type; + protected String name; + + protected Enchantment(int var1, int var2, EnumEnchantmentType var3) { + this.effectId = var1; + this.weight = var2; + this.type = var3; + if(enchantmentsList[var1] != null) { + throw new IllegalArgumentException("Duplicate enchantment id!"); + } else { + enchantmentsList[var1] = this; + } + } + + public int getWeight() { + return this.weight; + } + + public int getMinLevel() { + return 1; + } + + public int getMaxLevel() { + return 1; + } + + public int getMinEnchantability(int var1) { + return 1 + var1 * 10; + } + + public int getMaxEnchantability(int var1) { + return this.getMinEnchantability(var1) + 5; + } + + public int calcModifierDamage(int var1, DamageSource var2) { + return 0; + } + + public int calcModifierLiving(int var1, EntityLiving var2) { + return 0; + } + + public boolean canApplyTogether(Enchantment var1) { + return this != var1; + } + + public Enchantment setName(String var1) { + this.name = var1; + return this; + } + + public String getName() { + return "enchantment." + this.name; + } + + public String getTranslatedName(int var1) { + String var2 = StatCollector.translateToLocal(this.getName()); + return var2 + " " + StatCollector.translateToLocal("enchantment.level." + var1); + } + + public boolean canApply(ItemStack var1) { + return this.type.canEnchantItem(var1.getItem()); + } + + static { + ArrayList var0 = new ArrayList(); + Enchantment[] var1 = enchantmentsList; + int var2 = var1.length; + + for(int var3 = 0; var3 < var2; ++var3) { + Enchantment var4 = var1[var3]; + if(var4 != null) { + var0.add(var4); + } + } + + field_92090_c = (Enchantment[])var0.toArray(new Enchantment[0]); + } +} diff --git a/src/net/minecraft/src/EnchantmentArrowDamage.java b/src/net/minecraft/src/EnchantmentArrowDamage.java new file mode 100644 index 0000000..549b17b --- /dev/null +++ b/src/net/minecraft/src/EnchantmentArrowDamage.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class EnchantmentArrowDamage extends Enchantment { + public EnchantmentArrowDamage(int var1, int var2) { + super(var1, var2, EnumEnchantmentType.bow); + this.setName("arrowDamage"); + } + + public int getMinEnchantability(int var1) { + return 1 + (var1 - 1) * 10; + } + + public int getMaxEnchantability(int var1) { + return this.getMinEnchantability(var1) + 15; + } + + public int getMaxLevel() { + return 5; + } +} diff --git a/src/net/minecraft/src/EnchantmentArrowFire.java b/src/net/minecraft/src/EnchantmentArrowFire.java new file mode 100644 index 0000000..436442c --- /dev/null +++ b/src/net/minecraft/src/EnchantmentArrowFire.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class EnchantmentArrowFire extends Enchantment { + public EnchantmentArrowFire(int var1, int var2) { + super(var1, var2, EnumEnchantmentType.bow); + this.setName("arrowFire"); + } + + public int getMinEnchantability(int var1) { + return 20; + } + + public int getMaxEnchantability(int var1) { + return 50; + } + + public int getMaxLevel() { + return 1; + } +} diff --git a/src/net/minecraft/src/EnchantmentArrowInfinite.java b/src/net/minecraft/src/EnchantmentArrowInfinite.java new file mode 100644 index 0000000..27e254f --- /dev/null +++ b/src/net/minecraft/src/EnchantmentArrowInfinite.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class EnchantmentArrowInfinite extends Enchantment { + public EnchantmentArrowInfinite(int var1, int var2) { + super(var1, var2, EnumEnchantmentType.bow); + this.setName("arrowInfinite"); + } + + public int getMinEnchantability(int var1) { + return 20; + } + + public int getMaxEnchantability(int var1) { + return 50; + } + + public int getMaxLevel() { + return 1; + } +} diff --git a/src/net/minecraft/src/EnchantmentArrowKnockback.java b/src/net/minecraft/src/EnchantmentArrowKnockback.java new file mode 100644 index 0000000..f5b0ee5 --- /dev/null +++ b/src/net/minecraft/src/EnchantmentArrowKnockback.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class EnchantmentArrowKnockback extends Enchantment { + public EnchantmentArrowKnockback(int var1, int var2) { + super(var1, var2, EnumEnchantmentType.bow); + this.setName("arrowKnockback"); + } + + public int getMinEnchantability(int var1) { + return 12 + (var1 - 1) * 20; + } + + public int getMaxEnchantability(int var1) { + return this.getMinEnchantability(var1) + 25; + } + + public int getMaxLevel() { + return 2; + } +} diff --git a/src/net/minecraft/src/EnchantmentDamage.java b/src/net/minecraft/src/EnchantmentDamage.java new file mode 100644 index 0000000..29585b0 --- /dev/null +++ b/src/net/minecraft/src/EnchantmentDamage.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +public class EnchantmentDamage extends Enchantment { + private static final String[] protectionName = new String[]{"all", "undead", "arthropods"}; + private static final int[] baseEnchantability = new int[]{1, 5, 5}; + private static final int[] levelEnchantability = new int[]{11, 8, 8}; + private static final int[] thresholdEnchantability = new int[]{20, 20, 20}; + public final int damageType; + + public EnchantmentDamage(int var1, int var2, int var3) { + super(var1, var2, EnumEnchantmentType.weapon); + this.damageType = var3; + } + + public int getMinEnchantability(int var1) { + return baseEnchantability[this.damageType] + (var1 - 1) * levelEnchantability[this.damageType]; + } + + public int getMaxEnchantability(int var1) { + return this.getMinEnchantability(var1) + thresholdEnchantability[this.damageType]; + } + + public int getMaxLevel() { + return 5; + } + + public int calcModifierLiving(int var1, EntityLiving var2) { + return this.damageType == 0 ? MathHelper.floor_float((float)var1 * 2.75F) : (this.damageType == 1 && var2.getCreatureAttribute() == EnumCreatureAttribute.UNDEAD ? MathHelper.floor_float((float)var1 * 4.5F) : (this.damageType == 2 && var2.getCreatureAttribute() == EnumCreatureAttribute.ARTHROPOD ? MathHelper.floor_float((float)var1 * 4.5F) : 0)); + } + + public String getName() { + return "enchantment.damage." + protectionName[this.damageType]; + } + + public boolean canApplyTogether(Enchantment var1) { + return !(var1 instanceof EnchantmentDamage); + } + + public boolean canApply(ItemStack var1) { + return var1.getItem() instanceof ItemAxe ? true : super.canApply(var1); + } +} diff --git a/src/net/minecraft/src/EnchantmentData.java b/src/net/minecraft/src/EnchantmentData.java new file mode 100644 index 0000000..cb0c85c --- /dev/null +++ b/src/net/minecraft/src/EnchantmentData.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +public class EnchantmentData extends WeightedRandomItem { + public final Enchantment enchantmentobj; + public final int enchantmentLevel; + + public EnchantmentData(Enchantment var1, int var2) { + super(var1.getWeight()); + this.enchantmentobj = var1; + this.enchantmentLevel = var2; + } + + public EnchantmentData(int var1, int var2) { + this(Enchantment.enchantmentsList[var1], var2); + } +} diff --git a/src/net/minecraft/src/EnchantmentDigging.java b/src/net/minecraft/src/EnchantmentDigging.java new file mode 100644 index 0000000..1b306db --- /dev/null +++ b/src/net/minecraft/src/EnchantmentDigging.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +public class EnchantmentDigging extends Enchantment { + protected EnchantmentDigging(int var1, int var2) { + super(var1, var2, EnumEnchantmentType.digger); + this.setName("digging"); + } + + public int getMinEnchantability(int var1) { + return 1 + 10 * (var1 - 1); + } + + public int getMaxEnchantability(int var1) { + return super.getMinEnchantability(var1) + 50; + } + + public int getMaxLevel() { + return 5; + } + + public boolean canApply(ItemStack var1) { + return var1.getItem().itemID == Item.shears.itemID ? true : super.canApply(var1); + } +} diff --git a/src/net/minecraft/src/EnchantmentDurability.java b/src/net/minecraft/src/EnchantmentDurability.java new file mode 100644 index 0000000..20959b0 --- /dev/null +++ b/src/net/minecraft/src/EnchantmentDurability.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +import java.util.Random; + +public class EnchantmentDurability extends Enchantment { + protected EnchantmentDurability(int var1, int var2) { + super(var1, var2, EnumEnchantmentType.digger); + this.setName("durability"); + } + + public int getMinEnchantability(int var1) { + return 5 + (var1 - 1) * 8; + } + + public int getMaxEnchantability(int var1) { + return super.getMinEnchantability(var1) + 50; + } + + public int getMaxLevel() { + return 3; + } + + public boolean canApply(ItemStack var1) { + return var1.isItemStackDamageable() ? true : super.canApply(var1); + } + + public static boolean negateDamage(ItemStack var0, int var1, Random var2) { + return var0.getItem() instanceof ItemArmor && var2.nextFloat() < 0.6F ? false : var2.nextInt(var1 + 1) > 0; + } +} diff --git a/src/net/minecraft/src/EnchantmentFireAspect.java b/src/net/minecraft/src/EnchantmentFireAspect.java new file mode 100644 index 0000000..a2ae2ff --- /dev/null +++ b/src/net/minecraft/src/EnchantmentFireAspect.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class EnchantmentFireAspect extends Enchantment { + protected EnchantmentFireAspect(int var1, int var2) { + super(var1, var2, EnumEnchantmentType.weapon); + this.setName("fire"); + } + + public int getMinEnchantability(int var1) { + return 10 + 20 * (var1 - 1); + } + + public int getMaxEnchantability(int var1) { + return super.getMinEnchantability(var1) + 50; + } + + public int getMaxLevel() { + return 2; + } +} diff --git a/src/net/minecraft/src/EnchantmentHelper.java b/src/net/minecraft/src/EnchantmentHelper.java new file mode 100644 index 0000000..650eb64 --- /dev/null +++ b/src/net/minecraft/src/EnchantmentHelper.java @@ -0,0 +1,309 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +public class EnchantmentHelper { + private static final Random enchantmentRand = new Random(); + private static final EnchantmentModifierDamage enchantmentModifierDamage = new EnchantmentModifierDamage((Empty3)null); + private static final EnchantmentModifierLiving enchantmentModifierLiving = new EnchantmentModifierLiving((Empty3)null); + + public static int getEnchantmentLevel(int var0, ItemStack var1) { + if(var1 == null) { + return 0; + } else { + NBTTagList var2 = var1.getEnchantmentTagList(); + if(var2 == null) { + return 0; + } else { + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + short var4 = ((NBTTagCompound)var2.tagAt(var3)).getShort("id"); + short var5 = ((NBTTagCompound)var2.tagAt(var3)).getShort("lvl"); + if(var4 == var0) { + return var5; + } + } + + return 0; + } + } + } + + public static Map getEnchantments(ItemStack var0) { + LinkedHashMap var1 = new LinkedHashMap(); + NBTTagList var2 = var0.itemID == Item.enchantedBook.itemID ? Item.enchantedBook.func_92110_g(var0) : var0.getEnchantmentTagList(); + if(var2 != null) { + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + short var4 = ((NBTTagCompound)var2.tagAt(var3)).getShort("id"); + short var5 = ((NBTTagCompound)var2.tagAt(var3)).getShort("lvl"); + var1.put(Integer.valueOf(var4), Integer.valueOf(var5)); + } + } + + return var1; + } + + public static void setEnchantments(Map var0, ItemStack var1) { + NBTTagList var2 = new NBTTagList(); + Iterator var3 = var0.keySet().iterator(); + + while(var3.hasNext()) { + int var4 = ((Integer)var3.next()).intValue(); + NBTTagCompound var5 = new NBTTagCompound(); + var5.setShort("id", (short)var4); + var5.setShort("lvl", (short)((Integer)var0.get(Integer.valueOf(var4))).intValue()); + var2.appendTag(var5); + if(var1.itemID == Item.enchantedBook.itemID) { + Item.enchantedBook.func_92115_a(var1, new EnchantmentData(var4, ((Integer)var0.get(Integer.valueOf(var4))).intValue())); + } + } + + if(var2.tagCount() > 0) { + if(var1.itemID != Item.enchantedBook.itemID) { + var1.setTagInfo("ench", var2); + } + } else if(var1.hasTagCompound()) { + var1.getTagCompound().removeTag("ench"); + } + + } + + public static int getMaxEnchantmentLevel(int var0, ItemStack[] var1) { + if(var1 == null) { + return 0; + } else { + int var2 = 0; + ItemStack[] var3 = var1; + int var4 = var1.length; + + for(int var5 = 0; var5 < var4; ++var5) { + ItemStack var6 = var3[var5]; + int var7 = getEnchantmentLevel(var0, var6); + if(var7 > var2) { + var2 = var7; + } + } + + return var2; + } + } + + private static void applyEnchantmentModifier(IEnchantmentModifier var0, ItemStack var1) { + if(var1 != null) { + NBTTagList var2 = var1.getEnchantmentTagList(); + if(var2 != null) { + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + short var4 = ((NBTTagCompound)var2.tagAt(var3)).getShort("id"); + short var5 = ((NBTTagCompound)var2.tagAt(var3)).getShort("lvl"); + if(Enchantment.enchantmentsList[var4] != null) { + var0.calculateModifier(Enchantment.enchantmentsList[var4], var5); + } + } + + } + } + } + + private static void applyEnchantmentModifierArray(IEnchantmentModifier var0, ItemStack[] var1) { + ItemStack[] var2 = var1; + int var3 = var1.length; + + for(int var4 = 0; var4 < var3; ++var4) { + ItemStack var5 = var2[var4]; + applyEnchantmentModifier(var0, var5); + } + + } + + public static int getEnchantmentModifierDamage(ItemStack[] var0, DamageSource var1) { + enchantmentModifierDamage.damageModifier = 0; + enchantmentModifierDamage.source = var1; + applyEnchantmentModifierArray(enchantmentModifierDamage, var0); + if(enchantmentModifierDamage.damageModifier > 25) { + enchantmentModifierDamage.damageModifier = 25; + } + + return (enchantmentModifierDamage.damageModifier + 1 >> 1) + enchantmentRand.nextInt((enchantmentModifierDamage.damageModifier >> 1) + 1); + } + + public static int getEnchantmentModifierLiving(EntityLiving var0, EntityLiving var1) { + enchantmentModifierLiving.livingModifier = 0; + enchantmentModifierLiving.entityLiving = var1; + applyEnchantmentModifier(enchantmentModifierLiving, var0.getHeldItem()); + return enchantmentModifierLiving.livingModifier > 0 ? 1 + enchantmentRand.nextInt(enchantmentModifierLiving.livingModifier) : 0; + } + + public static int getKnockbackModifier(EntityLiving var0, EntityLiving var1) { + return getEnchantmentLevel(Enchantment.knockback.effectId, var0.getHeldItem()); + } + + public static int getFireAspectModifier(EntityLiving var0) { + return getEnchantmentLevel(Enchantment.fireAspect.effectId, var0.getHeldItem()); + } + + public static int getRespiration(EntityLiving var0) { + return getMaxEnchantmentLevel(Enchantment.respiration.effectId, var0.getLastActiveItems()); + } + + public static int getEfficiencyModifier(EntityLiving var0) { + return getEnchantmentLevel(Enchantment.efficiency.effectId, var0.getHeldItem()); + } + + public static boolean getSilkTouchModifier(EntityLiving var0) { + return getEnchantmentLevel(Enchantment.silkTouch.effectId, var0.getHeldItem()) > 0; + } + + public static int getFortuneModifier(EntityLiving var0) { + return getEnchantmentLevel(Enchantment.fortune.effectId, var0.getHeldItem()); + } + + public static int getLootingModifier(EntityLiving var0) { + return getEnchantmentLevel(Enchantment.looting.effectId, var0.getHeldItem()); + } + + public static boolean getAquaAffinityModifier(EntityLiving var0) { + return getMaxEnchantmentLevel(Enchantment.aquaAffinity.effectId, var0.getLastActiveItems()) > 0; + } + + public static int func_92098_i(EntityLiving var0) { + return getMaxEnchantmentLevel(Enchantment.thorns.effectId, var0.getLastActiveItems()); + } + + public static ItemStack func_92099_a(Enchantment var0, EntityLiving var1) { + ItemStack[] var2 = var1.getLastActiveItems(); + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + ItemStack var5 = var2[var4]; + if(var5 != null && getEnchantmentLevel(var0.effectId, var5) > 0) { + return var5; + } + } + + return null; + } + + public static int calcItemStackEnchantability(Random var0, int var1, int var2, ItemStack var3) { + Item var4 = var3.getItem(); + int var5 = var4.getItemEnchantability(); + if(var5 <= 0) { + return 0; + } else { + if(var2 > 15) { + var2 = 15; + } + + int var6 = var0.nextInt(8) + 1 + (var2 >> 1) + var0.nextInt(var2 + 1); + return var1 == 0 ? Math.max(var6 / 3, 1) : (var1 == 1 ? var6 * 2 / 3 + 1 : Math.max(var6, var2 * 2)); + } + } + + public static ItemStack addRandomEnchantment(Random var0, ItemStack var1, int var2) { + List var3 = buildEnchantmentList(var0, var1, var2); + boolean var4 = var1.itemID == Item.book.itemID; + if(var4) { + var1.itemID = Item.enchantedBook.itemID; + } + + if(var3 != null) { + Iterator var5 = var3.iterator(); + + while(var5.hasNext()) { + EnchantmentData var6 = (EnchantmentData)var5.next(); + if(var4) { + Item.enchantedBook.func_92115_a(var1, var6); + } else { + var1.addEnchantment(var6.enchantmentobj, var6.enchantmentLevel); + } + } + } + + return var1; + } + + public static List buildEnchantmentList(Random var0, ItemStack var1, int var2) { + Item var3 = var1.getItem(); + int var4 = var3.getItemEnchantability(); + if(var4 <= 0) { + return null; + } else { + var4 /= 2; + var4 = 1 + var0.nextInt((var4 >> 1) + 1) + var0.nextInt((var4 >> 1) + 1); + int var5 = var4 + var2; + float var6 = (var0.nextFloat() + var0.nextFloat() - 1.0F) * 0.15F; + int var7 = (int)((float)var5 * (1.0F + var6) + 0.5F); + if(var7 < 1) { + var7 = 1; + } + + ArrayList var8 = null; + Map var9 = mapEnchantmentData(var7, var1); + if(var9 != null && !var9.isEmpty()) { + EnchantmentData var10 = (EnchantmentData)WeightedRandom.getRandomItem(var0, var9.values()); + if(var10 != null) { + var8 = new ArrayList(); + var8.add(var10); + + for(int var11 = var7; var0.nextInt(50) <= var11; var11 >>= 1) { + Iterator var12 = var9.keySet().iterator(); + + while(var12.hasNext()) { + Integer var13 = (Integer)var12.next(); + boolean var14 = true; + Iterator var15 = var8.iterator(); + + while(var15.hasNext()) { + EnchantmentData var16 = (EnchantmentData)var15.next(); + if(!var16.enchantmentobj.canApplyTogether(Enchantment.enchantmentsList[var13.intValue()])) { + var14 = false; + break; + } + } + + if(!var14) { + var12.remove(); + } + } + + if(!var9.isEmpty()) { + EnchantmentData var17 = (EnchantmentData)WeightedRandom.getRandomItem(var0, var9.values()); + var8.add(var17); + } + } + } + } + + return var8; + } + } + + public static Map mapEnchantmentData(int var0, ItemStack var1) { + Item var2 = var1.getItem(); + HashMap var3 = null; + boolean var4 = var1.itemID == Item.book.itemID; + Enchantment[] var5 = Enchantment.enchantmentsList; + int var6 = var5.length; + + for(int var7 = 0; var7 < var6; ++var7) { + Enchantment var8 = var5[var7]; + if(var8 != null && (var8.type.canEnchantItem(var2) || var4)) { + for(int var9 = var8.getMinLevel(); var9 <= var8.getMaxLevel(); ++var9) { + if(var0 >= var8.getMinEnchantability(var9) && var0 <= var8.getMaxEnchantability(var9)) { + if(var3 == null) { + var3 = new HashMap(); + } + + var3.put(Integer.valueOf(var8.effectId), new EnchantmentData(var8, var9)); + } + } + } + } + + return var3; + } +} diff --git a/src/net/minecraft/src/EnchantmentKnockback.java b/src/net/minecraft/src/EnchantmentKnockback.java new file mode 100644 index 0000000..386ba18 --- /dev/null +++ b/src/net/minecraft/src/EnchantmentKnockback.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class EnchantmentKnockback extends Enchantment { + protected EnchantmentKnockback(int var1, int var2) { + super(var1, var2, EnumEnchantmentType.weapon); + this.setName("knockback"); + } + + public int getMinEnchantability(int var1) { + return 5 + 20 * (var1 - 1); + } + + public int getMaxEnchantability(int var1) { + return super.getMinEnchantability(var1) + 50; + } + + public int getMaxLevel() { + return 2; + } +} diff --git a/src/net/minecraft/src/EnchantmentLootBonus.java b/src/net/minecraft/src/EnchantmentLootBonus.java new file mode 100644 index 0000000..63a5776 --- /dev/null +++ b/src/net/minecraft/src/EnchantmentLootBonus.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +public class EnchantmentLootBonus extends Enchantment { + protected EnchantmentLootBonus(int var1, int var2, EnumEnchantmentType var3) { + super(var1, var2, var3); + this.setName("lootBonus"); + if(var3 == EnumEnchantmentType.digger) { + this.setName("lootBonusDigger"); + } + + } + + public int getMinEnchantability(int var1) { + return 15 + (var1 - 1) * 9; + } + + public int getMaxEnchantability(int var1) { + return super.getMinEnchantability(var1) + 50; + } + + public int getMaxLevel() { + return 3; + } + + public boolean canApplyTogether(Enchantment var1) { + return super.canApplyTogether(var1) && var1.effectId != silkTouch.effectId; + } +} diff --git a/src/net/minecraft/src/EnchantmentModifierDamage.java b/src/net/minecraft/src/EnchantmentModifierDamage.java new file mode 100644 index 0000000..be1165d --- /dev/null +++ b/src/net/minecraft/src/EnchantmentModifierDamage.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +final class EnchantmentModifierDamage implements IEnchantmentModifier { + public int damageModifier; + public DamageSource source; + + private EnchantmentModifierDamage() { + } + + public void calculateModifier(Enchantment var1, int var2) { + this.damageModifier += var1.calcModifierDamage(var2, this.source); + } + + EnchantmentModifierDamage(Empty3 var1) { + this(); + } +} diff --git a/src/net/minecraft/src/EnchantmentModifierLiving.java b/src/net/minecraft/src/EnchantmentModifierLiving.java new file mode 100644 index 0000000..6dae007 --- /dev/null +++ b/src/net/minecraft/src/EnchantmentModifierLiving.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +final class EnchantmentModifierLiving implements IEnchantmentModifier { + public int livingModifier; + public EntityLiving entityLiving; + + private EnchantmentModifierLiving() { + } + + public void calculateModifier(Enchantment var1, int var2) { + this.livingModifier += var1.calcModifierLiving(var2, this.entityLiving); + } + + EnchantmentModifierLiving(Empty3 var1) { + this(); + } +} diff --git a/src/net/minecraft/src/EnchantmentNameParts.java b/src/net/minecraft/src/EnchantmentNameParts.java new file mode 100644 index 0000000..4e92cd7 --- /dev/null +++ b/src/net/minecraft/src/EnchantmentNameParts.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +import java.util.Random; + +public class EnchantmentNameParts { + public static final EnchantmentNameParts instance = new EnchantmentNameParts(); + private Random rand = new Random(); + private String[] wordList = "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 ".split(" "); + + public String generateRandomEnchantName() { + int var1 = this.rand.nextInt(2) + 3; + String var2 = ""; + + for(int var3 = 0; var3 < var1; ++var3) { + if(var3 > 0) { + var2 = var2 + " "; + } + + var2 = var2 + this.wordList[this.rand.nextInt(this.wordList.length)]; + } + + return var2; + } + + public void setRandSeed(long var1) { + this.rand.setSeed(var1); + } +} diff --git a/src/net/minecraft/src/EnchantmentOxygen.java b/src/net/minecraft/src/EnchantmentOxygen.java new file mode 100644 index 0000000..5cf0444 --- /dev/null +++ b/src/net/minecraft/src/EnchantmentOxygen.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class EnchantmentOxygen extends Enchantment { + public EnchantmentOxygen(int var1, int var2) { + super(var1, var2, EnumEnchantmentType.armor_head); + this.setName("oxygen"); + } + + public int getMinEnchantability(int var1) { + return 10 * var1; + } + + public int getMaxEnchantability(int var1) { + return this.getMinEnchantability(var1) + 30; + } + + public int getMaxLevel() { + return 3; + } +} diff --git a/src/net/minecraft/src/EnchantmentProtection.java b/src/net/minecraft/src/EnchantmentProtection.java new file mode 100644 index 0000000..7d36f93 --- /dev/null +++ b/src/net/minecraft/src/EnchantmentProtection.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +public class EnchantmentProtection extends Enchantment { + private static final String[] protectionName = new String[]{"all", "fire", "fall", "explosion", "projectile"}; + private static final int[] baseEnchantability = new int[]{1, 10, 5, 5, 3}; + private static final int[] levelEnchantability = new int[]{11, 8, 6, 8, 6}; + private static final int[] thresholdEnchantability = new int[]{20, 12, 10, 12, 15}; + public final int protectionType; + + public EnchantmentProtection(int var1, int var2, int var3) { + super(var1, var2, EnumEnchantmentType.armor); + this.protectionType = var3; + if(var3 == 2) { + this.type = EnumEnchantmentType.armor_feet; + } + + } + + public int getMinEnchantability(int var1) { + return baseEnchantability[this.protectionType] + (var1 - 1) * levelEnchantability[this.protectionType]; + } + + public int getMaxEnchantability(int var1) { + return this.getMinEnchantability(var1) + thresholdEnchantability[this.protectionType]; + } + + public int getMaxLevel() { + return 4; + } + + public int calcModifierDamage(int var1, DamageSource var2) { + if(var2.canHarmInCreative()) { + return 0; + } else { + float var3 = (float)(6 + var1 * var1) / 3.0F; + return this.protectionType == 0 ? MathHelper.floor_float(var3 * (12.0F / 16.0F)) : (this.protectionType == 1 && var2.isFireDamage() ? MathHelper.floor_float(var3 * 1.25F) : (this.protectionType == 2 && var2 == DamageSource.fall ? MathHelper.floor_float(var3 * 2.5F) : (this.protectionType == 3 && var2.isExplosion() ? MathHelper.floor_float(var3 * 1.5F) : (this.protectionType == 4 && var2.isProjectile() ? MathHelper.floor_float(var3 * 1.5F) : 0)))); + } + } + + public String getName() { + return "enchantment.protect." + protectionName[this.protectionType]; + } + + public boolean canApplyTogether(Enchantment var1) { + if(var1 instanceof EnchantmentProtection) { + EnchantmentProtection var2 = (EnchantmentProtection)var1; + return var2.protectionType == this.protectionType ? false : this.protectionType == 2 || var2.protectionType == 2; + } else { + return super.canApplyTogether(var1); + } + } + + public static int func_92093_a(Entity var0, int var1) { + int var2 = EnchantmentHelper.getMaxEnchantmentLevel(Enchantment.fireProtection.effectId, var0.getLastActiveItems()); + if(var2 > 0) { + var1 -= MathHelper.floor_float((float)var1 * (float)var2 * 0.15F); + } + + return var1; + } + + public static double func_92092_a(Entity var0, double var1) { + int var3 = EnchantmentHelper.getMaxEnchantmentLevel(Enchantment.blastProtection.effectId, var0.getLastActiveItems()); + if(var3 > 0) { + var1 -= (double)MathHelper.floor_double(var1 * (double)((float)var3 * 0.15F)); + } + + return var1; + } +} diff --git a/src/net/minecraft/src/EnchantmentThorns.java b/src/net/minecraft/src/EnchantmentThorns.java new file mode 100644 index 0000000..7998936 --- /dev/null +++ b/src/net/minecraft/src/EnchantmentThorns.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +import java.util.Random; + +public class EnchantmentThorns extends Enchantment { + public EnchantmentThorns(int var1, int var2) { + super(var1, var2, EnumEnchantmentType.armor_torso); + this.setName("thorns"); + } + + public int getMinEnchantability(int var1) { + return 10 + 20 * (var1 - 1); + } + + public int getMaxEnchantability(int var1) { + return super.getMinEnchantability(var1) + 50; + } + + public int getMaxLevel() { + return 3; + } + + public boolean canApply(ItemStack var1) { + return var1.getItem() instanceof ItemArmor ? true : super.canApply(var1); + } + + public static boolean func_92094_a(int var0, Random var1) { + return var0 <= 0 ? false : var1.nextFloat() < 0.15F * (float)var0; + } + + public static int func_92095_b(int var0, Random var1) { + return var0 > 10 ? var0 - 10 : 1 + var1.nextInt(4); + } + + public static void func_92096_a(Entity var0, EntityLiving var1, Random var2) { + int var3 = EnchantmentHelper.func_92098_i(var1); + ItemStack var4 = EnchantmentHelper.func_92099_a(Enchantment.thorns, var1); + if(func_92094_a(var3, var2)) { + var0.attackEntityFrom(DamageSource.causeThornsDamage(var1), func_92095_b(var3, var2)); + var0.playSound("damage.thorns", 0.5F, 1.0F); + if(var4 != null) { + var4.damageItem(3, var1); + } + } else if(var4 != null) { + var4.damageItem(1, var1); + } + + } +} diff --git a/src/net/minecraft/src/EnchantmentUntouching.java b/src/net/minecraft/src/EnchantmentUntouching.java new file mode 100644 index 0000000..d909a55 --- /dev/null +++ b/src/net/minecraft/src/EnchantmentUntouching.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +public class EnchantmentUntouching extends Enchantment { + protected EnchantmentUntouching(int var1, int var2) { + super(var1, var2, EnumEnchantmentType.digger); + this.setName("untouching"); + } + + public int getMinEnchantability(int var1) { + return 15; + } + + public int getMaxEnchantability(int var1) { + return super.getMinEnchantability(var1) + 50; + } + + public int getMaxLevel() { + return 1; + } + + public boolean canApplyTogether(Enchantment var1) { + return super.canApplyTogether(var1) && var1.effectId != fortune.effectId; + } + + public boolean canApply(ItemStack var1) { + return var1.getItem().itemID == Item.shears.itemID ? true : super.canApply(var1); + } +} diff --git a/src/net/minecraft/src/EnchantmentWaterWorker.java b/src/net/minecraft/src/EnchantmentWaterWorker.java new file mode 100644 index 0000000..343b0cc --- /dev/null +++ b/src/net/minecraft/src/EnchantmentWaterWorker.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class EnchantmentWaterWorker extends Enchantment { + public EnchantmentWaterWorker(int var1, int var2) { + super(var1, var2, EnumEnchantmentType.armor_head); + this.setName("waterWorker"); + } + + public int getMinEnchantability(int var1) { + return 1; + } + + public int getMaxEnchantability(int var1) { + return this.getMinEnchantability(var1) + 40; + } + + public int getMaxLevel() { + return 1; + } +} diff --git a/src/net/minecraft/src/Entity.java b/src/net/minecraft/src/Entity.java new file mode 100644 index 0000000..612b95f --- /dev/null +++ b/src/net/minecraft/src/Entity.java @@ -0,0 +1,1562 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; +import java.util.UUID; +import net.minecraft.server.MinecraftServer; + +public abstract class Entity { + private static int nextEntityID = 0; + public int entityId = nextEntityID++; + public double renderDistanceWeight = 1.0D; + public boolean preventEntitySpawning = false; + public Entity riddenByEntity; + public Entity ridingEntity; + public boolean field_98038_p; + public World worldObj; + public double prevPosX; + public double prevPosY; + public double prevPosZ; + public double posX; + public double posY; + public double posZ; + public double motionX; + public double motionY; + public double motionZ; + public float rotationYaw; + public float rotationPitch; + public float prevRotationYaw; + public float prevRotationPitch; + public final AxisAlignedBB boundingBox = AxisAlignedBB.getBoundingBox(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D); + public boolean onGround = false; + public boolean isCollidedHorizontally; + public boolean isCollidedVertically; + public boolean isCollided = false; + public boolean velocityChanged = false; + protected boolean isInWeb; + public boolean field_70135_K = true; + public boolean isDead = false; + public float yOffset = 0.0F; + public float width = 0.6F; + public float height = 1.8F; + public float prevDistanceWalkedModified = 0.0F; + public float distanceWalkedModified = 0.0F; + public float distanceWalkedOnStepModified = 0.0F; + public float fallDistance = 0.0F; + private int nextStepDistance = 1; + public double lastTickPosX; + public double lastTickPosY; + public double lastTickPosZ; + public float ySize = 0.0F; + public float stepHeight = 0.0F; + public boolean noClip = false; + public float entityCollisionReduction = 0.0F; + protected Random rand = new Random(); + public int ticksExisted = 0; + public int fireResistance = 1; + private int fire = 0; + protected boolean inWater = false; + public int hurtResistantTime = 0; + private boolean firstUpdate = true; + public String skinUrl; + public String cloakUrl; + protected boolean isImmuneToFire = false; + protected DataWatcher dataWatcher = new DataWatcher(); + private double entityRiderPitchDelta; + private double entityRiderYawDelta; + public boolean addedToChunk = false; + public int chunkCoordX; + public int chunkCoordY; + public int chunkCoordZ; + public int serverPosX; + public int serverPosY; + public int serverPosZ; + public boolean ignoreFrustumCheck; + public boolean isAirBorne; + public int timeUntilPortal; + protected boolean inPortal; + protected int field_82153_h; + public int dimension; + protected int teleportDirection = 0; + private boolean invulnerable = false; + private UUID entityUniqueID = UUID.randomUUID(); + public EnumEntitySize myEntitySize = EnumEntitySize.SIZE_2; + + public Entity(World var1) { + this.worldObj = var1; + this.setPosition(0.0D, 0.0D, 0.0D); + if(var1 != null) { + this.dimension = var1.provider.dimensionId; + } + + this.dataWatcher.addObject(0, Byte.valueOf((byte)0)); + this.dataWatcher.addObject(1, Short.valueOf((short)300)); + this.entityInit(); + } + + protected abstract void entityInit(); + + public DataWatcher getDataWatcher() { + return this.dataWatcher; + } + + public boolean equals(Object var1) { + return var1 instanceof Entity ? ((Entity)var1).entityId == this.entityId : false; + } + + public int hashCode() { + return this.entityId; + } + + protected void preparePlayerToSpawn() { + if(this.worldObj != null) { + while(this.posY > 0.0D) { + this.setPosition(this.posX, this.posY, this.posZ); + if(this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).isEmpty()) { + break; + } + + ++this.posY; + } + + this.motionX = this.motionY = this.motionZ = 0.0D; + this.rotationPitch = 0.0F; + } + } + + public void setDead() { + this.isDead = true; + } + + protected void setSize(float var1, float var2) { + if(var1 != this.width || var2 != this.height) { + this.width = var1; + this.height = var2; + this.boundingBox.maxX = this.boundingBox.minX + (double)this.width; + this.boundingBox.maxZ = this.boundingBox.minZ + (double)this.width; + this.boundingBox.maxY = this.boundingBox.minY + (double)this.height; + } + + float var3 = var1 % 2.0F; + if((double)var3 < 0.375D) { + this.myEntitySize = EnumEntitySize.SIZE_1; + } else if((double)var3 < 0.75D) { + this.myEntitySize = EnumEntitySize.SIZE_2; + } else if((double)var3 < 1.0D) { + this.myEntitySize = EnumEntitySize.SIZE_3; + } else if((double)var3 < 1.375D) { + this.myEntitySize = EnumEntitySize.SIZE_4; + } else if((double)var3 < 1.75D) { + this.myEntitySize = EnumEntitySize.SIZE_5; + } else { + this.myEntitySize = EnumEntitySize.SIZE_6; + } + + } + + protected void setRotation(float var1, float var2) { + this.rotationYaw = var1 % 360.0F; + this.rotationPitch = var2 % 360.0F; + } + + public void setPosition(double var1, double var3, double var5) { + this.posX = var1; + this.posY = var3; + this.posZ = var5; + float var7 = this.width / 2.0F; + float var8 = this.height; + this.boundingBox.setBounds(var1 - (double)var7, var3 - (double)this.yOffset + (double)this.ySize, var5 - (double)var7, var1 + (double)var7, var3 - (double)this.yOffset + (double)this.ySize + (double)var8, var5 + (double)var7); + } + + public void setAngles(float var1, float var2) { + float var3 = this.rotationPitch; + float var4 = this.rotationYaw; + this.rotationYaw = (float)((double)this.rotationYaw + (double)var1 * 0.15D); + this.rotationPitch = (float)((double)this.rotationPitch - (double)var2 * 0.15D); + if(this.rotationPitch < -90.0F) { + this.rotationPitch = -90.0F; + } + + if(this.rotationPitch > 90.0F) { + this.rotationPitch = 90.0F; + } + + this.prevRotationPitch += this.rotationPitch - var3; + this.prevRotationYaw += this.rotationYaw - var4; + } + + public void onUpdate() { + this.onEntityUpdate(); + } + + public void onEntityUpdate() { + this.worldObj.theProfiler.startSection("entityBaseTick"); + if(this.ridingEntity != null && this.ridingEntity.isDead) { + this.ridingEntity = null; + } + + this.prevDistanceWalkedModified = this.distanceWalkedModified; + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.prevRotationPitch = this.rotationPitch; + this.prevRotationYaw = this.rotationYaw; + int var2; + if(!this.worldObj.isRemote && this.worldObj instanceof WorldServer) { + this.worldObj.theProfiler.startSection("portal"); + MinecraftServer var1 = ((WorldServer)this.worldObj).getMinecraftServer(); + var2 = this.getMaxInPortalTime(); + if(this.inPortal) { + if(var1.getAllowNether()) { + if(this.ridingEntity == null && this.field_82153_h++ >= var2) { + this.field_82153_h = var2; + this.timeUntilPortal = this.getPortalCooldown(); + byte var3; + if(this.worldObj.provider.dimensionId == -1) { + var3 = 0; + } else { + var3 = -1; + } + + this.travelToDimension(var3); + } + + this.inPortal = false; + } + } else { + if(this.field_82153_h > 0) { + this.field_82153_h -= 4; + } + + if(this.field_82153_h < 0) { + this.field_82153_h = 0; + } + } + + if(this.timeUntilPortal > 0) { + --this.timeUntilPortal; + } + + this.worldObj.theProfiler.endSection(); + } + + if(this.isSprinting() && !this.isInWater()) { + int var5 = MathHelper.floor_double(this.posX); + var2 = MathHelper.floor_double(this.posY - (double)0.2F - (double)this.yOffset); + int var6 = MathHelper.floor_double(this.posZ); + int var4 = this.worldObj.getBlockId(var5, var2, var6); + if(var4 > 0) { + this.worldObj.spawnParticle("tilecrack_" + var4 + "_" + this.worldObj.getBlockMetadata(var5, var2, var6), this.posX + ((double)this.rand.nextFloat() - 0.5D) * (double)this.width, this.boundingBox.minY + 0.1D, this.posZ + ((double)this.rand.nextFloat() - 0.5D) * (double)this.width, -this.motionX * 4.0D, 1.5D, -this.motionZ * 4.0D); + } + } + + this.handleWaterMovement(); + if(this.worldObj.isRemote) { + this.fire = 0; + } else if(this.fire > 0) { + if(this.isImmuneToFire) { + this.fire -= 4; + if(this.fire < 0) { + this.fire = 0; + } + } else { + if(this.fire % 20 == 0) { + this.attackEntityFrom(DamageSource.onFire, 1); + } + + --this.fire; + } + } + + if(this.handleLavaMovement()) { + this.setOnFireFromLava(); + this.fallDistance *= 0.5F; + } + + if(this.posY < -64.0D) { + this.kill(); + } + + if(!this.worldObj.isRemote) { + this.setFlag(0, this.fire > 0); + this.setFlag(2, this.ridingEntity != null); + } + + this.firstUpdate = false; + this.worldObj.theProfiler.endSection(); + } + + public int getMaxInPortalTime() { + return 0; + } + + protected void setOnFireFromLava() { + if(!this.isImmuneToFire) { + this.attackEntityFrom(DamageSource.lava, 4); + this.setFire(15); + } + + } + + public void setFire(int var1) { + int var2 = var1 * 20; + var2 = EnchantmentProtection.func_92093_a(this, var2); + if(this.fire < var2) { + this.fire = var2; + } + + } + + public void extinguish() { + this.fire = 0; + } + + protected void kill() { + this.setDead(); + } + + public boolean isOffsetPositionInLiquid(double var1, double var3, double var5) { + AxisAlignedBB var7 = this.boundingBox.getOffsetBoundingBox(var1, var3, var5); + List var8 = this.worldObj.getCollidingBoundingBoxes(this, var7); + return !var8.isEmpty() ? false : !this.worldObj.isAnyLiquid(var7); + } + + public void moveEntity(double var1, double var3, double var5) { + if(this.noClip) { + this.boundingBox.offset(var1, var3, var5); + this.posX = (this.boundingBox.minX + this.boundingBox.maxX) / 2.0D; + this.posY = this.boundingBox.minY + (double)this.yOffset - (double)this.ySize; + this.posZ = (this.boundingBox.minZ + this.boundingBox.maxZ) / 2.0D; + } else { + this.worldObj.theProfiler.startSection("move"); + this.ySize *= 0.4F; + double var7 = this.posX; + double var9 = this.posY; + double var11 = this.posZ; + if(this.isInWeb) { + this.isInWeb = false; + var1 *= 0.25D; + var3 *= (double)0.05F; + var5 *= 0.25D; + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + } + + double var13 = var1; + double var15 = var3; + double var17 = var5; + AxisAlignedBB var19 = this.boundingBox.copy(); + boolean var20 = this.onGround && this.isSneaking() && this instanceof EntityPlayer; + if(var20) { + double var21; + for(var21 = 0.05D; var1 != 0.0D && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.getOffsetBoundingBox(var1, -1.0D, 0.0D)).isEmpty(); var13 = var1) { + if(var1 < var21 && var1 >= -var21) { + var1 = 0.0D; + } else if(var1 > 0.0D) { + var1 -= var21; + } else { + var1 += var21; + } + } + + for(; var5 != 0.0D && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.getOffsetBoundingBox(0.0D, -1.0D, var5)).isEmpty(); var17 = var5) { + if(var5 < var21 && var5 >= -var21) { + var5 = 0.0D; + } else if(var5 > 0.0D) { + var5 -= var21; + } else { + var5 += var21; + } + } + + while(var1 != 0.0D && var5 != 0.0D && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.getOffsetBoundingBox(var1, -1.0D, var5)).isEmpty()) { + if(var1 < var21 && var1 >= -var21) { + var1 = 0.0D; + } else if(var1 > 0.0D) { + var1 -= var21; + } else { + var1 += var21; + } + + if(var5 < var21 && var5 >= -var21) { + var5 = 0.0D; + } else if(var5 > 0.0D) { + var5 -= var21; + } else { + var5 += var21; + } + + var13 = var1; + var17 = var5; + } + } + + List var34 = this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.addCoord(var1, var3, var5)); + + for(int var22 = 0; var22 < var34.size(); ++var22) { + var3 = ((AxisAlignedBB)var34.get(var22)).calculateYOffset(this.boundingBox, var3); + } + + this.boundingBox.offset(0.0D, var3, 0.0D); + if(!this.field_70135_K && var15 != var3) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + boolean var35 = this.onGround || var15 != var3 && var15 < 0.0D; + + int var23; + for(var23 = 0; var23 < var34.size(); ++var23) { + var1 = ((AxisAlignedBB)var34.get(var23)).calculateXOffset(this.boundingBox, var1); + } + + this.boundingBox.offset(var1, 0.0D, 0.0D); + if(!this.field_70135_K && var13 != var1) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + for(var23 = 0; var23 < var34.size(); ++var23) { + var5 = ((AxisAlignedBB)var34.get(var23)).calculateZOffset(this.boundingBox, var5); + } + + this.boundingBox.offset(0.0D, 0.0D, var5); + if(!this.field_70135_K && var17 != var5) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + double var25; + double var27; + int var30; + double var36; + if(this.stepHeight > 0.0F && var35 && (var20 || this.ySize < 0.05F) && (var13 != var1 || var17 != var5)) { + var36 = var1; + var25 = var3; + var27 = var5; + var1 = var13; + var3 = (double)this.stepHeight; + var5 = var17; + AxisAlignedBB var29 = this.boundingBox.copy(); + this.boundingBox.setBB(var19); + var34 = this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.addCoord(var13, var3, var17)); + + for(var30 = 0; var30 < var34.size(); ++var30) { + var3 = ((AxisAlignedBB)var34.get(var30)).calculateYOffset(this.boundingBox, var3); + } + + this.boundingBox.offset(0.0D, var3, 0.0D); + if(!this.field_70135_K && var15 != var3) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + for(var30 = 0; var30 < var34.size(); ++var30) { + var1 = ((AxisAlignedBB)var34.get(var30)).calculateXOffset(this.boundingBox, var1); + } + + this.boundingBox.offset(var1, 0.0D, 0.0D); + if(!this.field_70135_K && var13 != var1) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + for(var30 = 0; var30 < var34.size(); ++var30) { + var5 = ((AxisAlignedBB)var34.get(var30)).calculateZOffset(this.boundingBox, var5); + } + + this.boundingBox.offset(0.0D, 0.0D, var5); + if(!this.field_70135_K && var17 != var5) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + if(!this.field_70135_K && var15 != var3) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } else { + var3 = (double)(-this.stepHeight); + + for(var30 = 0; var30 < var34.size(); ++var30) { + var3 = ((AxisAlignedBB)var34.get(var30)).calculateYOffset(this.boundingBox, var3); + } + + this.boundingBox.offset(0.0D, var3, 0.0D); + } + + if(var36 * var36 + var27 * var27 >= var1 * var1 + var5 * var5) { + var1 = var36; + var3 = var25; + var5 = var27; + this.boundingBox.setBB(var29); + } + } + + this.worldObj.theProfiler.endSection(); + this.worldObj.theProfiler.startSection("rest"); + this.posX = (this.boundingBox.minX + this.boundingBox.maxX) / 2.0D; + this.posY = this.boundingBox.minY + (double)this.yOffset - (double)this.ySize; + this.posZ = (this.boundingBox.minZ + this.boundingBox.maxZ) / 2.0D; + this.isCollidedHorizontally = var13 != var1 || var17 != var5; + this.isCollidedVertically = var15 != var3; + this.onGround = var15 != var3 && var15 < 0.0D; + this.isCollided = this.isCollidedHorizontally || this.isCollidedVertically; + this.updateFallState(var3, this.onGround); + if(var13 != var1) { + this.motionX = 0.0D; + } + + if(var15 != var3) { + this.motionY = 0.0D; + } + + if(var17 != var5) { + this.motionZ = 0.0D; + } + + var36 = this.posX - var7; + var25 = this.posY - var9; + var27 = this.posZ - var11; + if(this.canTriggerWalking() && !var20 && this.ridingEntity == null) { + int var37 = MathHelper.floor_double(this.posX); + var30 = MathHelper.floor_double(this.posY - (double)0.2F - (double)this.yOffset); + int var31 = MathHelper.floor_double(this.posZ); + int var32 = this.worldObj.getBlockId(var37, var30, var31); + if(var32 == 0) { + int var33 = this.worldObj.blockGetRenderType(var37, var30 - 1, var31); + if(var33 == 11 || var33 == 32 || var33 == 21) { + var32 = this.worldObj.getBlockId(var37, var30 - 1, var31); + } + } + + if(var32 != Block.ladder.blockID) { + var25 = 0.0D; + } + + this.distanceWalkedModified = (float)((double)this.distanceWalkedModified + (double)MathHelper.sqrt_double(var36 * var36 + var27 * var27) * 0.6D); + this.distanceWalkedOnStepModified = (float)((double)this.distanceWalkedOnStepModified + (double)MathHelper.sqrt_double(var36 * var36 + var25 * var25 + var27 * var27) * 0.6D); + if(this.distanceWalkedOnStepModified > (float)this.nextStepDistance && var32 > 0) { + this.nextStepDistance = (int)this.distanceWalkedOnStepModified + 1; + if(this.isInWater()) { + float var39 = MathHelper.sqrt_double(this.motionX * this.motionX * (double)0.2F + this.motionY * this.motionY + this.motionZ * this.motionZ * (double)0.2F) * 0.35F; + if(var39 > 1.0F) { + var39 = 1.0F; + } + + this.playSound("liquid.swim", var39, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.4F); + } + + this.playStepSound(var37, var30, var31, var32); + Block.blocksList[var32].onEntityWalking(this.worldObj, var37, var30, var31, this); + } + } + + this.doBlockCollisions(); + boolean var38 = this.isWet(); + if(this.worldObj.isBoundingBoxBurning(this.boundingBox.contract(0.001D, 0.001D, 0.001D))) { + this.dealFireDamage(1); + if(!var38) { + ++this.fire; + if(this.fire == 0) { + this.setFire(8); + } + } + } else if(this.fire <= 0) { + this.fire = -this.fireResistance; + } + + if(var38 && this.fire > 0) { + this.playSound("random.fizz", 0.7F, 1.6F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.4F); + this.fire = -this.fireResistance; + } + + this.worldObj.theProfiler.endSection(); + } + } + + protected void doBlockCollisions() { + int var1 = MathHelper.floor_double(this.boundingBox.minX + 0.001D); + int var2 = MathHelper.floor_double(this.boundingBox.minY + 0.001D); + int var3 = MathHelper.floor_double(this.boundingBox.minZ + 0.001D); + int var4 = MathHelper.floor_double(this.boundingBox.maxX - 0.001D); + int var5 = MathHelper.floor_double(this.boundingBox.maxY - 0.001D); + int var6 = MathHelper.floor_double(this.boundingBox.maxZ - 0.001D); + if(this.worldObj.checkChunksExist(var1, var2, var3, var4, var5, var6)) { + for(int var7 = var1; var7 <= var4; ++var7) { + for(int var8 = var2; var8 <= var5; ++var8) { + for(int var9 = var3; var9 <= var6; ++var9) { + int var10 = this.worldObj.getBlockId(var7, var8, var9); + if(var10 > 0) { + Block.blocksList[var10].onEntityCollidedWithBlock(this.worldObj, var7, var8, var9, this); + } + } + } + } + } + + } + + protected void playStepSound(int var1, int var2, int var3, int var4) { + StepSound var5 = Block.blocksList[var4].stepSound; + if(this.worldObj.getBlockId(var1, var2 + 1, var3) == Block.snow.blockID) { + var5 = Block.snow.stepSound; + this.playSound(var5.getStepSound(), var5.getVolume() * 0.15F, var5.getPitch()); + } else if(!Block.blocksList[var4].blockMaterial.isLiquid()) { + this.playSound(var5.getStepSound(), var5.getVolume() * 0.15F, var5.getPitch()); + } + + } + + public void playSound(String var1, float var2, float var3) { + this.worldObj.playSoundAtEntity(this, var1, var2, var3); + } + + protected boolean canTriggerWalking() { + return true; + } + + protected void updateFallState(double var1, boolean var3) { + if(var3) { + if(this.fallDistance > 0.0F) { + this.fall(this.fallDistance); + this.fallDistance = 0.0F; + } + } else if(var1 < 0.0D) { + this.fallDistance = (float)((double)this.fallDistance - var1); + } + + } + + public AxisAlignedBB getBoundingBox() { + return null; + } + + protected void dealFireDamage(int var1) { + if(!this.isImmuneToFire) { + this.attackEntityFrom(DamageSource.inFire, var1); + } + + } + + public final boolean isImmuneToFire() { + return this.isImmuneToFire; + } + + protected void fall(float var1) { + if(this.riddenByEntity != null) { + this.riddenByEntity.fall(var1); + } + + } + + public boolean isWet() { + return this.inWater || this.worldObj.canLightningStrikeAt(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)) || this.worldObj.canLightningStrikeAt(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY + (double)this.height), MathHelper.floor_double(this.posZ)); + } + + public boolean isInWater() { + return this.inWater; + } + + public boolean handleWaterMovement() { + if(this.worldObj.handleMaterialAcceleration(this.boundingBox.expand(0.0D, (double)-0.4F, 0.0D).contract(0.001D, 0.001D, 0.001D), Material.water, this)) { + if(!this.inWater && !this.firstUpdate) { + float var1 = MathHelper.sqrt_double(this.motionX * this.motionX * (double)0.2F + this.motionY * this.motionY + this.motionZ * this.motionZ * (double)0.2F) * 0.2F; + if(var1 > 1.0F) { + var1 = 1.0F; + } + + this.playSound("liquid.splash", var1, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.4F); + float var2 = (float)MathHelper.floor_double(this.boundingBox.minY); + + int var3; + float var4; + float var5; + for(var3 = 0; (float)var3 < 1.0F + this.width * 20.0F; ++var3) { + var4 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + var5 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + this.worldObj.spawnParticle("bubble", this.posX + (double)var4, (double)(var2 + 1.0F), this.posZ + (double)var5, this.motionX, this.motionY - (double)(this.rand.nextFloat() * 0.2F), this.motionZ); + } + + for(var3 = 0; (float)var3 < 1.0F + this.width * 20.0F; ++var3) { + var4 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + var5 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + this.worldObj.spawnParticle("splash", this.posX + (double)var4, (double)(var2 + 1.0F), this.posZ + (double)var5, this.motionX, this.motionY, this.motionZ); + } + } + + this.fallDistance = 0.0F; + this.inWater = true; + this.fire = 0; + } else { + this.inWater = false; + } + + return this.inWater; + } + + public boolean isInsideOfMaterial(Material var1) { + double var2 = this.posY + (double)this.getEyeHeight(); + int var4 = MathHelper.floor_double(this.posX); + int var5 = MathHelper.floor_float((float)MathHelper.floor_double(var2)); + int var6 = MathHelper.floor_double(this.posZ); + int var7 = this.worldObj.getBlockId(var4, var5, var6); + if(var7 != 0 && Block.blocksList[var7].blockMaterial == var1) { + float var8 = BlockFluid.getFluidHeightPercent(this.worldObj.getBlockMetadata(var4, var5, var6)) - 1.0F / 9.0F; + float var9 = (float)(var5 + 1) - var8; + return var2 < (double)var9; + } else { + return false; + } + } + + public float getEyeHeight() { + return 0.0F; + } + + public boolean handleLavaMovement() { + return this.worldObj.isMaterialInBB(this.boundingBox.expand((double)-0.1F, (double)-0.4F, (double)-0.1F), Material.lava); + } + + public void moveFlying(float var1, float var2, float var3) { + float var4 = var1 * var1 + var2 * var2; + if(var4 >= 1.0E-4F) { + var4 = MathHelper.sqrt_float(var4); + if(var4 < 1.0F) { + var4 = 1.0F; + } + + var4 = var3 / var4; + var1 *= var4; + var2 *= var4; + float var5 = MathHelper.sin(this.rotationYaw * (float)Math.PI / 180.0F); + float var6 = MathHelper.cos(this.rotationYaw * (float)Math.PI / 180.0F); + this.motionX += (double)(var1 * var6 - var2 * var5); + this.motionZ += (double)(var2 * var6 + var1 * var5); + } + } + + public int getBrightnessForRender(float var1) { + int var2 = MathHelper.floor_double(this.posX); + int var3 = MathHelper.floor_double(this.posZ); + if(this.worldObj.blockExists(var2, 0, var3)) { + double var4 = (this.boundingBox.maxY - this.boundingBox.minY) * 0.66D; + int var6 = MathHelper.floor_double(this.posY - (double)this.yOffset + var4); + return this.worldObj.getLightBrightnessForSkyBlocks(var2, var6, var3, 0); + } else { + return 0; + } + } + + public float getBrightness(float var1) { + int var2 = MathHelper.floor_double(this.posX); + int var3 = MathHelper.floor_double(this.posZ); + if(this.worldObj.blockExists(var2, 0, var3)) { + double var4 = (this.boundingBox.maxY - this.boundingBox.minY) * 0.66D; + int var6 = MathHelper.floor_double(this.posY - (double)this.yOffset + var4); + return this.worldObj.getLightBrightness(var2, var6, var3); + } else { + return 0.0F; + } + } + + public void setWorld(World var1) { + this.worldObj = var1; + } + + public void setPositionAndRotation(double var1, double var3, double var5, float var7, float var8) { + this.prevPosX = this.posX = var1; + this.prevPosY = this.posY = var3; + this.prevPosZ = this.posZ = var5; + this.prevRotationYaw = this.rotationYaw = var7; + this.prevRotationPitch = this.rotationPitch = var8; + this.ySize = 0.0F; + double var9 = (double)(this.prevRotationYaw - var7); + if(var9 < -180.0D) { + this.prevRotationYaw += 360.0F; + } + + if(var9 >= 180.0D) { + this.prevRotationYaw -= 360.0F; + } + + this.setPosition(this.posX, this.posY, this.posZ); + this.setRotation(var7, var8); + } + + public void setLocationAndAngles(double var1, double var3, double var5, float var7, float var8) { + this.lastTickPosX = this.prevPosX = this.posX = var1; + this.lastTickPosY = this.prevPosY = this.posY = var3 + (double)this.yOffset; + this.lastTickPosZ = this.prevPosZ = this.posZ = var5; + this.rotationYaw = var7; + this.rotationPitch = var8; + this.setPosition(this.posX, this.posY, this.posZ); + } + + public float getDistanceToEntity(Entity var1) { + float var2 = (float)(this.posX - var1.posX); + float var3 = (float)(this.posY - var1.posY); + float var4 = (float)(this.posZ - var1.posZ); + return MathHelper.sqrt_float(var2 * var2 + var3 * var3 + var4 * var4); + } + + public double getDistanceSq(double var1, double var3, double var5) { + double var7 = this.posX - var1; + double var9 = this.posY - var3; + double var11 = this.posZ - var5; + return var7 * var7 + var9 * var9 + var11 * var11; + } + + public double getDistance(double var1, double var3, double var5) { + double var7 = this.posX - var1; + double var9 = this.posY - var3; + double var11 = this.posZ - var5; + return (double)MathHelper.sqrt_double(var7 * var7 + var9 * var9 + var11 * var11); + } + + public double getDistanceSqToEntity(Entity var1) { + double var2 = this.posX - var1.posX; + double var4 = this.posY - var1.posY; + double var6 = this.posZ - var1.posZ; + return var2 * var2 + var4 * var4 + var6 * var6; + } + + public void onCollideWithPlayer(EntityPlayer var1) { + } + + public void applyEntityCollision(Entity var1) { + if(var1.riddenByEntity != this && var1.ridingEntity != this) { + double var2 = var1.posX - this.posX; + double var4 = var1.posZ - this.posZ; + double var6 = MathHelper.abs_max(var2, var4); + if(var6 >= (double)0.01F) { + var6 = (double)MathHelper.sqrt_double(var6); + var2 /= var6; + var4 /= var6; + double var8 = 1.0D / var6; + if(var8 > 1.0D) { + var8 = 1.0D; + } + + var2 *= var8; + var4 *= var8; + var2 *= (double)0.05F; + var4 *= (double)0.05F; + var2 *= (double)(1.0F - this.entityCollisionReduction); + var4 *= (double)(1.0F - this.entityCollisionReduction); + this.addVelocity(-var2, 0.0D, -var4); + var1.addVelocity(var2, 0.0D, var4); + } + + } + } + + public void addVelocity(double var1, double var3, double var5) { + this.motionX += var1; + this.motionY += var3; + this.motionZ += var5; + this.isAirBorne = true; + } + + protected void setBeenAttacked() { + this.velocityChanged = true; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else { + this.setBeenAttacked(); + return false; + } + } + + public boolean canBeCollidedWith() { + return false; + } + + public boolean canBePushed() { + return false; + } + + public void addToPlayerScore(Entity var1, int var2) { + } + + public boolean isInRangeToRenderVec3D(Vec3 var1) { + double var2 = this.posX - var1.xCoord; + double var4 = this.posY - var1.yCoord; + double var6 = this.posZ - var1.zCoord; + double var8 = var2 * var2 + var4 * var4 + var6 * var6; + return this.isInRangeToRenderDist(var8); + } + + public boolean isInRangeToRenderDist(double var1) { + double var3 = this.boundingBox.getAverageEdgeLength(); + var3 *= 64.0D * this.renderDistanceWeight; + return var1 < var3 * var3; + } + + public String getTexture() { + return null; + } + + public boolean addNotRiddenEntityID(NBTTagCompound var1) { + String var2 = this.getEntityString(); + if(!this.isDead && var2 != null) { + var1.setString("id", var2); + this.writeToNBT(var1); + return true; + } else { + return false; + } + } + + public boolean addEntityID(NBTTagCompound var1) { + String var2 = this.getEntityString(); + if(!this.isDead && var2 != null && this.riddenByEntity == null) { + var1.setString("id", var2); + this.writeToNBT(var1); + return true; + } else { + return false; + } + } + + public void writeToNBT(NBTTagCompound var1) { + try { + var1.setTag("Pos", this.newDoubleNBTList(new double[]{this.posX, this.posY + (double)this.ySize, this.posZ})); + var1.setTag("Motion", this.newDoubleNBTList(new double[]{this.motionX, this.motionY, this.motionZ})); + var1.setTag("Rotation", this.newFloatNBTList(new float[]{this.rotationYaw, this.rotationPitch})); + var1.setFloat("FallDistance", this.fallDistance); + var1.setShort("Fire", (short)this.fire); + var1.setShort("Air", (short)this.getAir()); + var1.setBoolean("OnGround", this.onGround); + var1.setInteger("Dimension", this.dimension); + var1.setBoolean("Invulnerable", this.invulnerable); + var1.setInteger("PortalCooldown", this.timeUntilPortal); + var1.setLong("UUIDMost", this.entityUniqueID.getMostSignificantBits()); + var1.setLong("UUIDLeast", this.entityUniqueID.getLeastSignificantBits()); + this.writeEntityToNBT(var1); + if(this.ridingEntity != null) { + NBTTagCompound var2 = new NBTTagCompound("Riding"); + if(this.ridingEntity.addNotRiddenEntityID(var2)) { + var1.setTag("Riding", var2); + } + } + + } catch (Throwable var5) { + CrashReport var3 = CrashReport.makeCrashReport(var5, "Saving entity NBT"); + CrashReportCategory var4 = var3.makeCategory("Entity being saved"); + this.func_85029_a(var4); + throw new ReportedException(var3); + } + } + + public void readFromNBT(NBTTagCompound var1) { + try { + NBTTagList var2 = var1.getTagList("Pos"); + NBTTagList var6 = var1.getTagList("Motion"); + NBTTagList var7 = var1.getTagList("Rotation"); + this.motionX = ((NBTTagDouble)var6.tagAt(0)).data; + this.motionY = ((NBTTagDouble)var6.tagAt(1)).data; + this.motionZ = ((NBTTagDouble)var6.tagAt(2)).data; + 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.prevPosX = this.lastTickPosX = this.posX = ((NBTTagDouble)var2.tagAt(0)).data; + this.prevPosY = this.lastTickPosY = this.posY = ((NBTTagDouble)var2.tagAt(1)).data; + this.prevPosZ = this.lastTickPosZ = this.posZ = ((NBTTagDouble)var2.tagAt(2)).data; + this.prevRotationYaw = this.rotationYaw = ((NBTTagFloat)var7.tagAt(0)).data; + this.prevRotationPitch = this.rotationPitch = ((NBTTagFloat)var7.tagAt(1)).data; + this.fallDistance = var1.getFloat("FallDistance"); + this.fire = var1.getShort("Fire"); + this.setAir(var1.getShort("Air")); + this.onGround = var1.getBoolean("OnGround"); + this.dimension = var1.getInteger("Dimension"); + this.invulnerable = var1.getBoolean("Invulnerable"); + this.timeUntilPortal = var1.getInteger("PortalCooldown"); + if(var1.hasKey("UUIDMost") && var1.hasKey("UUIDLeast")) { + this.entityUniqueID = new UUID(var1.getLong("UUIDMost"), var1.getLong("UUIDLeast")); + } + + this.setPosition(this.posX, this.posY, this.posZ); + this.setRotation(this.rotationYaw, this.rotationPitch); + this.readEntityFromNBT(var1); + } catch (Throwable var5) { + CrashReport var3 = CrashReport.makeCrashReport(var5, "Loading entity NBT"); + CrashReportCategory var4 = var3.makeCategory("Entity being loaded"); + this.func_85029_a(var4); + throw new ReportedException(var3); + } + } + + protected final String getEntityString() { + return EntityList.getEntityString(this); + } + + protected abstract void readEntityFromNBT(NBTTagCompound var1); + + protected abstract void writeEntityToNBT(NBTTagCompound var1); + + protected NBTTagList newDoubleNBTList(double... var1) { + NBTTagList var2 = new NBTTagList(); + double[] var3 = var1; + int var4 = var1.length; + + for(int var5 = 0; var5 < var4; ++var5) { + double var6 = var3[var5]; + var2.appendTag(new NBTTagDouble((String)null, var6)); + } + + return var2; + } + + protected NBTTagList newFloatNBTList(float... var1) { + NBTTagList var2 = new NBTTagList(); + float[] var3 = var1; + int var4 = var1.length; + + for(int var5 = 0; var5 < var4; ++var5) { + float var6 = var3[var5]; + var2.appendTag(new NBTTagFloat((String)null, var6)); + } + + return var2; + } + + public float getShadowSize() { + return this.height / 2.0F; + } + + public EntityItem dropItem(int var1, int var2) { + return this.dropItemWithOffset(var1, var2, 0.0F); + } + + public EntityItem dropItemWithOffset(int var1, int var2, float var3) { + return this.entityDropItem(new ItemStack(var1, var2, 0), var3); + } + + public EntityItem entityDropItem(ItemStack var1, float var2) { + EntityItem var3 = new EntityItem(this.worldObj, this.posX, this.posY + (double)var2, this.posZ, var1); + var3.delayBeforeCanPickup = 10; + this.worldObj.spawnEntityInWorld(var3); + return var3; + } + + public boolean isEntityAlive() { + return !this.isDead; + } + + public boolean isEntityInsideOpaqueBlock() { + for(int var1 = 0; var1 < 8; ++var1) { + float var2 = ((float)((var1 >> 0) % 2) - 0.5F) * this.width * 0.8F; + float var3 = ((float)((var1 >> 1) % 2) - 0.5F) * 0.1F; + float var4 = ((float)((var1 >> 2) % 2) - 0.5F) * this.width * 0.8F; + int var5 = MathHelper.floor_double(this.posX + (double)var2); + int var6 = MathHelper.floor_double(this.posY + (double)this.getEyeHeight() + (double)var3); + int var7 = MathHelper.floor_double(this.posZ + (double)var4); + if(this.worldObj.isBlockNormalCube(var5, var6, var7)) { + return true; + } + } + + return false; + } + + public boolean interact(EntityPlayer var1) { + return false; + } + + public AxisAlignedBB getCollisionBox(Entity var1) { + return null; + } + + public void updateRidden() { + if(this.ridingEntity.isDead) { + this.ridingEntity = null; + } else { + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.onUpdate(); + if(this.ridingEntity != null) { + this.ridingEntity.updateRiderPosition(); + this.entityRiderYawDelta += (double)(this.ridingEntity.rotationYaw - this.ridingEntity.prevRotationYaw); + + for(this.entityRiderPitchDelta += (double)(this.ridingEntity.rotationPitch - this.ridingEntity.prevRotationPitch); this.entityRiderYawDelta >= 180.0D; this.entityRiderYawDelta -= 360.0D) { + } + + while(this.entityRiderYawDelta < -180.0D) { + this.entityRiderYawDelta += 360.0D; + } + + while(this.entityRiderPitchDelta >= 180.0D) { + this.entityRiderPitchDelta -= 360.0D; + } + + while(this.entityRiderPitchDelta < -180.0D) { + this.entityRiderPitchDelta += 360.0D; + } + + double var1 = this.entityRiderYawDelta * 0.5D; + double var3 = this.entityRiderPitchDelta * 0.5D; + float var5 = 10.0F; + if(var1 > (double)var5) { + var1 = (double)var5; + } + + if(var1 < (double)(-var5)) { + var1 = (double)(-var5); + } + + if(var3 > (double)var5) { + var3 = (double)var5; + } + + if(var3 < (double)(-var5)) { + var3 = (double)(-var5); + } + + this.entityRiderYawDelta -= var1; + this.entityRiderPitchDelta -= var3; + this.rotationYaw = (float)((double)this.rotationYaw + var1); + this.rotationPitch = (float)((double)this.rotationPitch + var3); + } + } + } + + public void updateRiderPosition() { + if(this.riddenByEntity != null) { + if(!(this.riddenByEntity instanceof EntityPlayer) || !((EntityPlayer)this.riddenByEntity).func_71066_bF()) { + this.riddenByEntity.lastTickPosX = this.lastTickPosX; + this.riddenByEntity.lastTickPosY = this.lastTickPosY + this.getMountedYOffset() + this.riddenByEntity.getYOffset(); + this.riddenByEntity.lastTickPosZ = this.lastTickPosZ; + } + + this.riddenByEntity.setPosition(this.posX, this.posY + this.getMountedYOffset() + this.riddenByEntity.getYOffset(), this.posZ); + } + } + + public double getYOffset() { + return (double)this.yOffset; + } + + public double getMountedYOffset() { + return (double)this.height * 0.75D; + } + + public void mountEntity(Entity var1) { + this.entityRiderPitchDelta = 0.0D; + this.entityRiderYawDelta = 0.0D; + if(var1 == null) { + if(this.ridingEntity != null) { + this.setLocationAndAngles(this.ridingEntity.posX, this.ridingEntity.boundingBox.minY + (double)this.ridingEntity.height, this.ridingEntity.posZ, this.rotationYaw, this.rotationPitch); + this.ridingEntity.riddenByEntity = null; + } + + this.ridingEntity = null; + } else { + if(this.ridingEntity != null) { + this.ridingEntity.riddenByEntity = null; + } + + this.ridingEntity = var1; + var1.riddenByEntity = this; + } + } + + public void unmountEntity(Entity var1) { + double var3 = this.posX; + double var5 = this.posY; + double var7 = this.posZ; + if(var1 != null) { + var3 = var1.posX; + var5 = var1.boundingBox.minY + (double)var1.height; + var7 = var1.posZ; + } + + for(double var9 = -1.5D; var9 < 2.0D; ++var9) { + for(double var11 = -1.5D; var11 < 2.0D; ++var11) { + if(var9 != 0.0D || var11 != 0.0D) { + int var13 = (int)(this.posX + var9); + int var14 = (int)(this.posZ + var11); + AxisAlignedBB var2 = this.boundingBox.getOffsetBoundingBox(var9, 1.0D, var11); + if(this.worldObj.getCollidingBlockBounds(var2).isEmpty()) { + if(this.worldObj.doesBlockHaveSolidTopSurface(var13, (int)this.posY, var14)) { + this.setLocationAndAngles(this.posX + var9, this.posY + 1.0D, this.posZ + var11, this.rotationYaw, this.rotationPitch); + return; + } + + if(this.worldObj.doesBlockHaveSolidTopSurface(var13, (int)this.posY - 1, var14) || this.worldObj.getBlockMaterial(var13, (int)this.posY - 1, var14) == Material.water) { + var3 = this.posX + var9; + var5 = this.posY + 1.0D; + var7 = this.posZ + var11; + } + } + } + } + } + + this.setLocationAndAngles(var3, var5, var7, this.rotationYaw, this.rotationPitch); + } + + public void setPositionAndRotation2(double var1, double var3, double var5, float var7, float var8, int var9) { + this.setPosition(var1, var3, var5); + this.setRotation(var7, var8); + List var10 = this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.contract(1.0D / 32.0D, 0.0D, 1.0D / 32.0D)); + if(!var10.isEmpty()) { + double var11 = 0.0D; + + for(int var13 = 0; var13 < var10.size(); ++var13) { + AxisAlignedBB var14 = (AxisAlignedBB)var10.get(var13); + if(var14.maxY > var11) { + var11 = var14.maxY; + } + } + + var3 += var11 - this.boundingBox.minY; + this.setPosition(var1, var3, var5); + } + + } + + public float getCollisionBorderSize() { + return 0.1F; + } + + public Vec3 getLookVec() { + return null; + } + + public void setInPortal() { + if(this.timeUntilPortal > 0) { + this.timeUntilPortal = this.getPortalCooldown(); + } else { + double var1 = this.prevPosX - this.posX; + double var3 = this.prevPosZ - this.posZ; + if(!this.worldObj.isRemote && !this.inPortal) { + this.teleportDirection = Direction.getMovementDirection(var1, var3); + } + + this.inPortal = true; + } + } + + public int getPortalCooldown() { + return 900; + } + + public void setVelocity(double var1, double var3, double var5) { + this.motionX = var1; + this.motionY = var3; + this.motionZ = var5; + } + + public void handleHealthUpdate(byte var1) { + } + + public void performHurtAnimation() { + } + + public void updateCloak() { + } + + public ItemStack[] getLastActiveItems() { + return null; + } + + public void setCurrentItemOrArmor(int var1, ItemStack var2) { + } + + public boolean isBurning() { + return this.fire > 0 || this.getFlag(0); + } + + public boolean isRiding() { + return this.ridingEntity != null || this.getFlag(2); + } + + public boolean isSneaking() { + return this.getFlag(1); + } + + public void setSneaking(boolean var1) { + this.setFlag(1, var1); + } + + public boolean isSprinting() { + return this.getFlag(3); + } + + public void setSprinting(boolean var1) { + this.setFlag(3, var1); + } + + public boolean isInvisible() { + return this.getFlag(5); + } + + public boolean func_98034_c(EntityPlayer var1) { + return this.isInvisible(); + } + + public void setInvisible(boolean var1) { + this.setFlag(5, var1); + } + + public boolean isEating() { + return this.getFlag(4); + } + + public void setEating(boolean var1) { + this.setFlag(4, var1); + } + + protected boolean getFlag(int var1) { + return (this.dataWatcher.getWatchableObjectByte(0) & 1 << var1) != 0; + } + + protected void setFlag(int var1, boolean var2) { + byte var3 = this.dataWatcher.getWatchableObjectByte(0); + if(var2) { + this.dataWatcher.updateObject(0, Byte.valueOf((byte)(var3 | 1 << var1))); + } else { + this.dataWatcher.updateObject(0, Byte.valueOf((byte)(var3 & ~(1 << var1)))); + } + + } + + public int getAir() { + return this.dataWatcher.getWatchableObjectShort(1); + } + + public void setAir(int var1) { + this.dataWatcher.updateObject(1, Short.valueOf((short)var1)); + } + + public void onStruckByLightning(EntityLightningBolt var1) { + this.dealFireDamage(5); + ++this.fire; + if(this.fire == 0) { + this.setFire(8); + } + + } + + public void onKillEntity(EntityLiving var1) { + } + + protected boolean pushOutOfBlocks(double var1, double var3, double var5) { + int var7 = MathHelper.floor_double(var1); + int var8 = MathHelper.floor_double(var3); + int var9 = MathHelper.floor_double(var5); + double var10 = var1 - (double)var7; + double var12 = var3 - (double)var8; + double var14 = var5 - (double)var9; + List var16 = this.worldObj.getCollidingBlockBounds(this.boundingBox); + if(var16.isEmpty() && !this.worldObj.func_85174_u(var7, var8, var9)) { + return false; + } else { + boolean var17 = !this.worldObj.func_85174_u(var7 - 1, var8, var9); + boolean var18 = !this.worldObj.func_85174_u(var7 + 1, var8, var9); + boolean var19 = !this.worldObj.func_85174_u(var7, var8 - 1, var9); + boolean var20 = !this.worldObj.func_85174_u(var7, var8 + 1, var9); + boolean var21 = !this.worldObj.func_85174_u(var7, var8, var9 - 1); + boolean var22 = !this.worldObj.func_85174_u(var7, var8, var9 + 1); + byte var23 = 3; + double var24 = 9999.0D; + if(var17 && var10 < var24) { + var24 = var10; + var23 = 0; + } + + if(var18 && 1.0D - var10 < var24) { + var24 = 1.0D - var10; + var23 = 1; + } + + if(var20 && 1.0D - var12 < var24) { + var24 = 1.0D - var12; + var23 = 3; + } + + if(var21 && var14 < var24) { + var24 = var14; + var23 = 4; + } + + if(var22 && 1.0D - var14 < var24) { + var24 = 1.0D - var14; + var23 = 5; + } + + float var26 = this.rand.nextFloat() * 0.2F + 0.1F; + if(var23 == 0) { + this.motionX = (double)(-var26); + } + + if(var23 == 1) { + this.motionX = (double)var26; + } + + if(var23 == 2) { + this.motionY = (double)(-var26); + } + + if(var23 == 3) { + this.motionY = (double)var26; + } + + if(var23 == 4) { + this.motionZ = (double)(-var26); + } + + if(var23 == 5) { + this.motionZ = (double)var26; + } + + return true; + } + } + + public void setInWeb() { + this.isInWeb = true; + this.fallDistance = 0.0F; + } + + public String getEntityName() { + String var1 = EntityList.getEntityString(this); + if(var1 == null) { + var1 = "generic"; + } + + return StatCollector.translateToLocal("entity." + var1 + ".name"); + } + + public Entity[] getParts() { + return null; + } + + public boolean isEntityEqual(Entity var1) { + return this == var1; + } + + public float getRotationYawHead() { + return 0.0F; + } + + public void setRotationYawHead(float var1) { + } + + public boolean canAttackWithItem() { + return true; + } + + public boolean func_85031_j(Entity var1) { + return false; + } + + public String toString() { + return String.format("%s[\'%s\'/%d, l=\'%s\', x=%.2f, y=%.2f, z=%.2f]", new Object[]{this.getClass().getSimpleName(), this.getEntityName(), Integer.valueOf(this.entityId), this.worldObj == null ? "~NULL~" : this.worldObj.getWorldInfo().getWorldName(), Double.valueOf(this.posX), Double.valueOf(this.posY), Double.valueOf(this.posZ)}); + } + + public boolean isEntityInvulnerable() { + return this.invulnerable; + } + + public void func_82149_j(Entity var1) { + this.setLocationAndAngles(var1.posX, var1.posY, var1.posZ, var1.rotationYaw, var1.rotationPitch); + } + + public void copyDataFrom(Entity var1, boolean var2) { + NBTTagCompound var3 = new NBTTagCompound(); + var1.writeToNBT(var3); + this.readFromNBT(var3); + this.timeUntilPortal = var1.timeUntilPortal; + this.teleportDirection = var1.teleportDirection; + } + + public void travelToDimension(int var1) { + if(!this.worldObj.isRemote && !this.isDead) { + this.worldObj.theProfiler.startSection("changeDimension"); + MinecraftServer var2 = MinecraftServer.getServer(); + int var3 = this.dimension; + WorldServer var4 = var2.worldServerForDimension(var3); + WorldServer var5 = var2.worldServerForDimension(var1); + this.dimension = var1; + this.worldObj.removeEntity(this); + this.isDead = false; + this.worldObj.theProfiler.startSection("reposition"); + var2.getConfigurationManager().transferEntityToWorld(this, var3, var4, var5); + this.worldObj.theProfiler.endStartSection("reloading"); + Entity var6 = EntityList.createEntityByName(EntityList.getEntityString(this), var5); + if(var6 != null) { + var6.copyDataFrom(this, true); + var5.spawnEntityInWorld(var6); + } + + this.isDead = true; + this.worldObj.theProfiler.endSection(); + var4.resetUpdateEntityTick(); + var5.resetUpdateEntityTick(); + this.worldObj.theProfiler.endSection(); + } + } + + public float func_82146_a(Explosion var1, World var2, int var3, int var4, int var5, Block var6) { + return var6.getExplosionResistance(this); + } + + public boolean func_96091_a(Explosion var1, World var2, int var3, int var4, int var5, int var6, float var7) { + return true; + } + + public int func_82143_as() { + return 3; + } + + public int getTeleportDirection() { + return this.teleportDirection; + } + + public boolean doesEntityNotTriggerPressurePlate() { + return false; + } + + public void func_85029_a(CrashReportCategory var1) { + var1.addCrashSectionCallable("Entity Type", new CallableEntityType(this)); + var1.addCrashSection("Entity ID", Integer.valueOf(this.entityId)); + var1.addCrashSectionCallable("Entity Name", new CallableEntityName(this)); + var1.addCrashSection("Entity\'s Exact location", String.format("%.2f, %.2f, %.2f", new Object[]{Double.valueOf(this.posX), Double.valueOf(this.posY), Double.valueOf(this.posZ)})); + var1.addCrashSection("Entity\'s Block location", CrashReportCategory.getLocationInfo(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ))); + var1.addCrashSection("Entity\'s Momentum", String.format("%.2f, %.2f, %.2f", new Object[]{Double.valueOf(this.motionX), Double.valueOf(this.motionY), Double.valueOf(this.motionZ)})); + } + + public boolean canRenderOnFire() { + return this.isBurning(); + } + + public boolean func_96092_aw() { + return true; + } + + public String getTranslatedEntityName() { + return this.getEntityName(); + } +} diff --git a/src/net/minecraft/src/EntityAIArrowAttack.java b/src/net/minecraft/src/EntityAIArrowAttack.java new file mode 100644 index 0000000..e1bd1b0 --- /dev/null +++ b/src/net/minecraft/src/EntityAIArrowAttack.java @@ -0,0 +1,96 @@ +package net.minecraft.src; + +public class EntityAIArrowAttack extends EntityAIBase { + private final EntityLiving entityHost; + private final IRangedAttackMob rangedAttackEntityHost; + private EntityLiving attackTarget; + private int rangedAttackTime; + private float entityMoveSpeed; + private int field_75318_f; + private int field_96561_g; + private int maxRangedAttackTime; + private float field_96562_i; + private float field_82642_h; + + public EntityAIArrowAttack(IRangedAttackMob var1, float var2, int var3, float var4) { + this(var1, var2, var3, var3, var4); + } + + public EntityAIArrowAttack(IRangedAttackMob var1, float var2, int var3, int var4, float var5) { + this.rangedAttackTime = -1; + this.field_75318_f = 0; + if(!(var1 instanceof EntityLiving)) { + throw new IllegalArgumentException("ArrowAttackGoal requires Mob implements RangedAttackMob"); + } else { + this.rangedAttackEntityHost = var1; + this.entityHost = (EntityLiving)var1; + this.entityMoveSpeed = var2; + this.field_96561_g = var3; + this.maxRangedAttackTime = var4; + this.field_96562_i = var5; + this.field_82642_h = var5 * var5; + this.setMutexBits(3); + } + } + + public boolean shouldExecute() { + EntityLiving var1 = this.entityHost.getAttackTarget(); + if(var1 == null) { + return false; + } else { + this.attackTarget = var1; + return true; + } + } + + public boolean continueExecuting() { + return this.shouldExecute() || !this.entityHost.getNavigator().noPath(); + } + + public void resetTask() { + this.attackTarget = null; + this.field_75318_f = 0; + this.rangedAttackTime = -1; + } + + public void updateTask() { + double var1 = this.entityHost.getDistanceSq(this.attackTarget.posX, this.attackTarget.boundingBox.minY, this.attackTarget.posZ); + boolean var3 = this.entityHost.getEntitySenses().canSee(this.attackTarget); + if(var3) { + ++this.field_75318_f; + } else { + this.field_75318_f = 0; + } + + if(var1 <= (double)this.field_82642_h && this.field_75318_f >= 20) { + this.entityHost.getNavigator().clearPathEntity(); + } else { + this.entityHost.getNavigator().tryMoveToEntityLiving(this.attackTarget, this.entityMoveSpeed); + } + + this.entityHost.getLookHelper().setLookPositionWithEntity(this.attackTarget, 30.0F, 30.0F); + float var4; + if(--this.rangedAttackTime == 0) { + if(var1 > (double)this.field_82642_h || !var3) { + return; + } + + var4 = MathHelper.sqrt_double(var1) / this.field_96562_i; + float var5 = var4; + if(var4 < 0.1F) { + var5 = 0.1F; + } + + if(var5 > 1.0F) { + var5 = 1.0F; + } + + this.rangedAttackEntityHost.attackEntityWithRangedAttack(this.attackTarget, var5); + this.rangedAttackTime = MathHelper.floor_float(var4 * (float)(this.maxRangedAttackTime - this.field_96561_g) + (float)this.field_96561_g); + } else if(this.rangedAttackTime < 0) { + var4 = MathHelper.sqrt_double(var1) / this.field_96562_i; + this.rangedAttackTime = MathHelper.floor_float(var4 * (float)(this.maxRangedAttackTime - this.field_96561_g) + (float)this.field_96561_g); + } + + } +} diff --git a/src/net/minecraft/src/EntityAIAttackOnCollide.java b/src/net/minecraft/src/EntityAIAttackOnCollide.java new file mode 100644 index 0000000..1eefccb --- /dev/null +++ b/src/net/minecraft/src/EntityAIAttackOnCollide.java @@ -0,0 +1,76 @@ +package net.minecraft.src; + +public class EntityAIAttackOnCollide extends EntityAIBase { + World worldObj; + EntityLiving attacker; + EntityLiving entityTarget; + int attackTick; + float field_75440_e; + boolean field_75437_f; + PathEntity entityPathEntity; + Class classTarget; + private int field_75445_i; + + public EntityAIAttackOnCollide(EntityLiving var1, Class var2, float var3, boolean var4) { + this(var1, var3, var4); + this.classTarget = var2; + } + + public EntityAIAttackOnCollide(EntityLiving var1, float var2, boolean var3) { + this.attackTick = 0; + this.attacker = var1; + this.worldObj = var1.worldObj; + this.field_75440_e = var2; + this.field_75437_f = var3; + this.setMutexBits(3); + } + + public boolean shouldExecute() { + EntityLiving var1 = this.attacker.getAttackTarget(); + if(var1 == null) { + return false; + } else if(this.classTarget != null && !this.classTarget.isAssignableFrom(var1.getClass())) { + return false; + } else { + this.entityTarget = var1; + this.entityPathEntity = this.attacker.getNavigator().getPathToEntityLiving(this.entityTarget); + return this.entityPathEntity != null; + } + } + + public boolean continueExecuting() { + EntityLiving var1 = this.attacker.getAttackTarget(); + return var1 == null ? false : (!this.entityTarget.isEntityAlive() ? false : (!this.field_75437_f ? !this.attacker.getNavigator().noPath() : this.attacker.isWithinHomeDistance(MathHelper.floor_double(this.entityTarget.posX), MathHelper.floor_double(this.entityTarget.posY), MathHelper.floor_double(this.entityTarget.posZ)))); + } + + public void startExecuting() { + this.attacker.getNavigator().setPath(this.entityPathEntity, this.field_75440_e); + this.field_75445_i = 0; + } + + public void resetTask() { + this.entityTarget = null; + this.attacker.getNavigator().clearPathEntity(); + } + + public void updateTask() { + this.attacker.getLookHelper().setLookPositionWithEntity(this.entityTarget, 30.0F, 30.0F); + if((this.field_75437_f || this.attacker.getEntitySenses().canSee(this.entityTarget)) && --this.field_75445_i <= 0) { + this.field_75445_i = 4 + this.attacker.getRNG().nextInt(7); + this.attacker.getNavigator().tryMoveToEntityLiving(this.entityTarget, this.field_75440_e); + } + + this.attackTick = Math.max(this.attackTick - 1, 0); + double var1 = (double)(this.attacker.width * 2.0F * this.attacker.width * 2.0F); + if(this.attacker.getDistanceSq(this.entityTarget.posX, this.entityTarget.boundingBox.minY, this.entityTarget.posZ) <= var1) { + if(this.attackTick <= 0) { + this.attackTick = 20; + if(this.attacker.getHeldItem() != null) { + this.attacker.swingItem(); + } + + this.attacker.attackEntityAsMob(this.entityTarget); + } + } + } +} diff --git a/src/net/minecraft/src/EntityAIAvoidEntity.java b/src/net/minecraft/src/EntityAIAvoidEntity.java new file mode 100644 index 0000000..40e1d1f --- /dev/null +++ b/src/net/minecraft/src/EntityAIAvoidEntity.java @@ -0,0 +1,80 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityAIAvoidEntity extends EntityAIBase { + public final IEntitySelector field_98218_a = new EntityAIAvoidEntitySelector(this); + private EntityCreature theEntity; + private float farSpeed; + private float nearSpeed; + private Entity closestLivingEntity; + private float distanceFromEntity; + private PathEntity entityPathEntity; + private PathNavigate entityPathNavigate; + private Class targetEntityClass; + + public EntityAIAvoidEntity(EntityCreature var1, Class var2, float var3, float var4, float var5) { + this.theEntity = var1; + this.targetEntityClass = var2; + this.distanceFromEntity = var3; + this.farSpeed = var4; + this.nearSpeed = var5; + this.entityPathNavigate = var1.getNavigator(); + this.setMutexBits(1); + } + + public boolean shouldExecute() { + if(this.targetEntityClass == EntityPlayer.class) { + if(this.theEntity instanceof EntityTameable && ((EntityTameable)this.theEntity).isTamed()) { + return false; + } + + this.closestLivingEntity = this.theEntity.worldObj.getClosestPlayerToEntity(this.theEntity, (double)this.distanceFromEntity); + if(this.closestLivingEntity == null) { + return false; + } + } else { + List var1 = this.theEntity.worldObj.selectEntitiesWithinAABB(this.targetEntityClass, this.theEntity.boundingBox.expand((double)this.distanceFromEntity, 3.0D, (double)this.distanceFromEntity), this.field_98218_a); + if(var1.isEmpty()) { + return false; + } + + this.closestLivingEntity = (Entity)var1.get(0); + } + + Vec3 var2 = RandomPositionGenerator.findRandomTargetBlockAwayFrom(this.theEntity, 16, 7, this.theEntity.worldObj.getWorldVec3Pool().getVecFromPool(this.closestLivingEntity.posX, this.closestLivingEntity.posY, this.closestLivingEntity.posZ)); + if(var2 == null) { + return false; + } else if(this.closestLivingEntity.getDistanceSq(var2.xCoord, var2.yCoord, var2.zCoord) < this.closestLivingEntity.getDistanceSqToEntity(this.theEntity)) { + return false; + } else { + this.entityPathEntity = this.entityPathNavigate.getPathToXYZ(var2.xCoord, var2.yCoord, var2.zCoord); + return this.entityPathEntity == null ? false : this.entityPathEntity.isDestinationSame(var2); + } + } + + public boolean continueExecuting() { + return !this.entityPathNavigate.noPath(); + } + + public void startExecuting() { + this.entityPathNavigate.setPath(this.entityPathEntity, this.farSpeed); + } + + public void resetTask() { + this.closestLivingEntity = null; + } + + public void updateTask() { + if(this.theEntity.getDistanceSqToEntity(this.closestLivingEntity) < 49.0D) { + this.theEntity.getNavigator().setSpeed(this.nearSpeed); + } else { + this.theEntity.getNavigator().setSpeed(this.farSpeed); + } + + } + + static EntityCreature func_98217_a(EntityAIAvoidEntity var0) { + return var0.theEntity; + } +} diff --git a/src/net/minecraft/src/EntityAIAvoidEntitySelector.java b/src/net/minecraft/src/EntityAIAvoidEntitySelector.java new file mode 100644 index 0000000..08cf0bd --- /dev/null +++ b/src/net/minecraft/src/EntityAIAvoidEntitySelector.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +class EntityAIAvoidEntitySelector implements IEntitySelector { + final EntityAIAvoidEntity entityAvoiderAI; + + EntityAIAvoidEntitySelector(EntityAIAvoidEntity var1) { + this.entityAvoiderAI = var1; + } + + public boolean isEntityApplicable(Entity var1) { + return var1.isEntityAlive() && EntityAIAvoidEntity.func_98217_a(this.entityAvoiderAI).getEntitySenses().canSee(var1); + } +} diff --git a/src/net/minecraft/src/EntityAIBase.java b/src/net/minecraft/src/EntityAIBase.java new file mode 100644 index 0000000..4318d39 --- /dev/null +++ b/src/net/minecraft/src/EntityAIBase.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +public abstract class EntityAIBase { + private int mutexBits = 0; + + public abstract boolean shouldExecute(); + + public boolean continueExecuting() { + return this.shouldExecute(); + } + + public boolean isInterruptible() { + return true; + } + + public void startExecuting() { + } + + public void resetTask() { + } + + public void updateTask() { + } + + public void setMutexBits(int var1) { + this.mutexBits = var1; + } + + public int getMutexBits() { + return this.mutexBits; + } +} diff --git a/src/net/minecraft/src/EntityAIBeg.java b/src/net/minecraft/src/EntityAIBeg.java new file mode 100644 index 0000000..60d8bea --- /dev/null +++ b/src/net/minecraft/src/EntityAIBeg.java @@ -0,0 +1,45 @@ +package net.minecraft.src; + +public class EntityAIBeg extends EntityAIBase { + private EntityWolf theWolf; + private EntityPlayer thePlayer; + private World worldObject; + private float minPlayerDistance; + private int field_75384_e; + + public EntityAIBeg(EntityWolf var1, float var2) { + this.theWolf = var1; + this.worldObject = var1.worldObj; + this.minPlayerDistance = var2; + this.setMutexBits(2); + } + + public boolean shouldExecute() { + this.thePlayer = this.worldObject.getClosestPlayerToEntity(this.theWolf, (double)this.minPlayerDistance); + return this.thePlayer == null ? false : this.hasPlayerGotBoneInHand(this.thePlayer); + } + + public boolean continueExecuting() { + return !this.thePlayer.isEntityAlive() ? false : (this.theWolf.getDistanceSqToEntity(this.thePlayer) > (double)(this.minPlayerDistance * this.minPlayerDistance) ? false : this.field_75384_e > 0 && this.hasPlayerGotBoneInHand(this.thePlayer)); + } + + public void startExecuting() { + this.theWolf.func_70918_i(true); + this.field_75384_e = 40 + this.theWolf.getRNG().nextInt(40); + } + + public void resetTask() { + this.theWolf.func_70918_i(false); + this.thePlayer = null; + } + + public void updateTask() { + this.theWolf.getLookHelper().setLookPosition(this.thePlayer.posX, this.thePlayer.posY + (double)this.thePlayer.getEyeHeight(), this.thePlayer.posZ, 10.0F, (float)this.theWolf.getVerticalFaceSpeed()); + --this.field_75384_e; + } + + private boolean hasPlayerGotBoneInHand(EntityPlayer var1) { + ItemStack var2 = var1.inventory.getCurrentItem(); + return var2 == null ? false : (!this.theWolf.isTamed() && var2.itemID == Item.bone.itemID ? true : this.theWolf.isBreedingItem(var2)); + } +} diff --git a/src/net/minecraft/src/EntityAIBreakDoor.java b/src/net/minecraft/src/EntityAIBreakDoor.java new file mode 100644 index 0000000..3b53d2b --- /dev/null +++ b/src/net/minecraft/src/EntityAIBreakDoor.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +public class EntityAIBreakDoor extends EntityAIDoorInteract { + private int breakingTime; + private int field_75358_j = -1; + + public EntityAIBreakDoor(EntityLiving var1) { + super(var1); + } + + public boolean shouldExecute() { + return !super.shouldExecute() ? false : (!this.theEntity.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing") ? false : !this.targetDoor.isDoorOpen(this.theEntity.worldObj, this.entityPosX, this.entityPosY, this.entityPosZ)); + } + + public void startExecuting() { + super.startExecuting(); + this.breakingTime = 0; + } + + public boolean continueExecuting() { + double var1 = this.theEntity.getDistanceSq((double)this.entityPosX, (double)this.entityPosY, (double)this.entityPosZ); + return this.breakingTime <= 240 && !this.targetDoor.isDoorOpen(this.theEntity.worldObj, this.entityPosX, this.entityPosY, this.entityPosZ) && var1 < 4.0D; + } + + public void resetTask() { + super.resetTask(); + this.theEntity.worldObj.destroyBlockInWorldPartially(this.theEntity.entityId, this.entityPosX, this.entityPosY, this.entityPosZ, -1); + } + + public void updateTask() { + super.updateTask(); + if(this.theEntity.getRNG().nextInt(20) == 0) { + this.theEntity.worldObj.playAuxSFX(1010, this.entityPosX, this.entityPosY, this.entityPosZ, 0); + } + + ++this.breakingTime; + int var1 = (int)((float)this.breakingTime / 240.0F * 10.0F); + if(var1 != this.field_75358_j) { + this.theEntity.worldObj.destroyBlockInWorldPartially(this.theEntity.entityId, this.entityPosX, this.entityPosY, this.entityPosZ, var1); + this.field_75358_j = var1; + } + + if(this.breakingTime == 240 && this.theEntity.worldObj.difficultySetting == 3) { + this.theEntity.worldObj.setBlockToAir(this.entityPosX, this.entityPosY, this.entityPosZ); + this.theEntity.worldObj.playAuxSFX(1012, this.entityPosX, this.entityPosY, this.entityPosZ, 0); + this.theEntity.worldObj.playAuxSFX(2001, this.entityPosX, this.entityPosY, this.entityPosZ, this.targetDoor.blockID); + } + + } +} diff --git a/src/net/minecraft/src/EntityAIControlledByPlayer.java b/src/net/minecraft/src/EntityAIControlledByPlayer.java new file mode 100644 index 0000000..7380ff0 --- /dev/null +++ b/src/net/minecraft/src/EntityAIControlledByPlayer.java @@ -0,0 +1,146 @@ +package net.minecraft.src; + +public class EntityAIControlledByPlayer extends EntityAIBase { + private final EntityLiving thisEntity; + private final float maxSpeed; + private float currentSpeed = 0.0F; + private boolean speedBoosted = false; + private int speedBoostTime = 0; + private int maxSpeedBoostTime = 0; + + public EntityAIControlledByPlayer(EntityLiving var1, float var2) { + this.thisEntity = var1; + this.maxSpeed = var2; + this.setMutexBits(7); + } + + public void startExecuting() { + this.currentSpeed = 0.0F; + } + + public void resetTask() { + this.speedBoosted = false; + this.currentSpeed = 0.0F; + } + + public boolean shouldExecute() { + return this.thisEntity.isEntityAlive() && this.thisEntity.riddenByEntity != null && this.thisEntity.riddenByEntity instanceof EntityPlayer && (this.speedBoosted || this.thisEntity.canBeSteered()); + } + + public void updateTask() { + EntityPlayer var1 = (EntityPlayer)this.thisEntity.riddenByEntity; + EntityCreature var2 = (EntityCreature)this.thisEntity; + float var3 = MathHelper.wrapAngleTo180_float(var1.rotationYaw - this.thisEntity.rotationYaw) * 0.5F; + if(var3 > 5.0F) { + var3 = 5.0F; + } + + if(var3 < -5.0F) { + var3 = -5.0F; + } + + this.thisEntity.rotationYaw = MathHelper.wrapAngleTo180_float(this.thisEntity.rotationYaw + var3); + if(this.currentSpeed < this.maxSpeed) { + this.currentSpeed += (this.maxSpeed - this.currentSpeed) * 0.01F; + } + + if(this.currentSpeed > this.maxSpeed) { + this.currentSpeed = this.maxSpeed; + } + + int var4 = MathHelper.floor_double(this.thisEntity.posX); + int var5 = MathHelper.floor_double(this.thisEntity.posY); + int var6 = MathHelper.floor_double(this.thisEntity.posZ); + float var7 = this.currentSpeed; + if(this.speedBoosted) { + if(this.speedBoostTime++ > this.maxSpeedBoostTime) { + this.speedBoosted = false; + } + + var7 += var7 * 1.15F * MathHelper.sin((float)this.speedBoostTime / (float)this.maxSpeedBoostTime * (float)Math.PI); + } + + float var8 = 0.91F; + if(this.thisEntity.onGround) { + var8 = 546.0F * 0.1F * 0.1F * 0.1F; + int var9 = this.thisEntity.worldObj.getBlockId(MathHelper.floor_float((float)var4), MathHelper.floor_float((float)var5) - 1, MathHelper.floor_float((float)var6)); + if(var9 > 0) { + var8 = Block.blocksList[var9].slipperiness * 0.91F; + } + } + + float var23 = 0.16277136F / (var8 * var8 * var8); + float var10 = MathHelper.sin(var2.rotationYaw * (float)Math.PI / 180.0F); + float var11 = MathHelper.cos(var2.rotationYaw * (float)Math.PI / 180.0F); + float var12 = var2.getAIMoveSpeed() * var23; + float var13 = Math.max(var7, 1.0F); + var13 = var12 / var13; + float var14 = var7 * var13; + float var15 = -(var14 * var10); + float var16 = var14 * var11; + if(MathHelper.abs(var15) > MathHelper.abs(var16)) { + if(var15 < 0.0F) { + var15 -= this.thisEntity.width / 2.0F; + } + + if(var15 > 0.0F) { + var15 += this.thisEntity.width / 2.0F; + } + + var16 = 0.0F; + } else { + var15 = 0.0F; + if(var16 < 0.0F) { + var16 -= this.thisEntity.width / 2.0F; + } + + if(var16 > 0.0F) { + var16 += this.thisEntity.width / 2.0F; + } + } + + int var17 = MathHelper.floor_double(this.thisEntity.posX + (double)var15); + int var18 = MathHelper.floor_double(this.thisEntity.posZ + (double)var16); + PathPoint var19 = new PathPoint(MathHelper.floor_float(this.thisEntity.width + 1.0F), MathHelper.floor_float(this.thisEntity.height + var1.height + 1.0F), MathHelper.floor_float(this.thisEntity.width + 1.0F)); + if(var4 != var17 || var6 != var18) { + int var20 = this.thisEntity.worldObj.getBlockId(var4, var5, var6); + int var21 = this.thisEntity.worldObj.getBlockId(var4, var5 - 1, var6); + boolean var22 = this.func_98216_b(var20) || Block.blocksList[var20] == null && this.func_98216_b(var21); + if(!var22 && PathFinder.func_82565_a(this.thisEntity, var17, var5, var18, var19, false, false, true) == 0 && PathFinder.func_82565_a(this.thisEntity, var4, var5 + 1, var6, var19, false, false, true) == 1 && PathFinder.func_82565_a(this.thisEntity, var17, var5 + 1, var18, var19, false, false, true) == 1) { + var2.getJumpHelper().setJumping(); + } + } + + if(!var1.capabilities.isCreativeMode && this.currentSpeed >= this.maxSpeed * 0.5F && this.thisEntity.getRNG().nextFloat() < 0.006F && !this.speedBoosted) { + ItemStack var24 = var1.getHeldItem(); + if(var24 != null && var24.itemID == Item.carrotOnAStick.itemID) { + var24.damageItem(1, var1); + if(var24.stackSize == 0) { + ItemStack var25 = new ItemStack(Item.fishingRod); + var25.setTagCompound(var24.stackTagCompound); + var1.inventory.mainInventory[var1.inventory.currentItem] = var25; + } + } + } + + this.thisEntity.moveEntityWithHeading(0.0F, var7); + } + + private boolean func_98216_b(int var1) { + return Block.blocksList[var1] != null && (Block.blocksList[var1].getRenderType() == 10 || Block.blocksList[var1] instanceof BlockHalfSlab); + } + + public boolean isSpeedBoosted() { + return this.speedBoosted; + } + + public void boostSpeed() { + this.speedBoosted = true; + this.speedBoostTime = 0; + this.maxSpeedBoostTime = this.thisEntity.getRNG().nextInt(841) + 140; + } + + public boolean isControlledByPlayer() { + return !this.isSpeedBoosted() && this.currentSpeed > this.maxSpeed * 0.3F; + } +} diff --git a/src/net/minecraft/src/EntityAICreeperSwell.java b/src/net/minecraft/src/EntityAICreeperSwell.java new file mode 100644 index 0000000..0180329 --- /dev/null +++ b/src/net/minecraft/src/EntityAICreeperSwell.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +public class EntityAICreeperSwell extends EntityAIBase { + EntityCreeper swellingCreeper; + EntityLiving creeperAttackTarget; + + public EntityAICreeperSwell(EntityCreeper var1) { + this.swellingCreeper = var1; + this.setMutexBits(1); + } + + public boolean shouldExecute() { + EntityLiving var1 = this.swellingCreeper.getAttackTarget(); + return this.swellingCreeper.getCreeperState() > 0 || var1 != null && this.swellingCreeper.getDistanceSqToEntity(var1) < 9.0D; + } + + public void startExecuting() { + this.swellingCreeper.getNavigator().clearPathEntity(); + this.creeperAttackTarget = this.swellingCreeper.getAttackTarget(); + } + + public void resetTask() { + this.creeperAttackTarget = null; + } + + public void updateTask() { + if(this.creeperAttackTarget == null) { + this.swellingCreeper.setCreeperState(-1); + } else if(this.swellingCreeper.getDistanceSqToEntity(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); + } + } +} diff --git a/src/net/minecraft/src/EntityAIDefendVillage.java b/src/net/minecraft/src/EntityAIDefendVillage.java new file mode 100644 index 0000000..127af84 --- /dev/null +++ b/src/net/minecraft/src/EntityAIDefendVillage.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +public class EntityAIDefendVillage extends EntityAITarget { + EntityIronGolem irongolem; + EntityLiving villageAgressorTarget; + + public EntityAIDefendVillage(EntityIronGolem var1) { + super(var1, 16.0F, false, true); + this.irongolem = var1; + this.setMutexBits(1); + } + + public boolean shouldExecute() { + Village var1 = this.irongolem.getVillage(); + if(var1 == null) { + return false; + } else { + this.villageAgressorTarget = var1.findNearestVillageAggressor(this.irongolem); + if(!this.isSuitableTarget(this.villageAgressorTarget, false)) { + if(this.taskOwner.getRNG().nextInt(20) == 0) { + this.villageAgressorTarget = var1.func_82685_c(this.irongolem); + return this.isSuitableTarget(this.villageAgressorTarget, false); + } else { + return false; + } + } else { + return true; + } + } + } + + public void startExecuting() { + this.irongolem.setAttackTarget(this.villageAgressorTarget); + super.startExecuting(); + } +} diff --git a/src/net/minecraft/src/EntityAIDoorInteract.java b/src/net/minecraft/src/EntityAIDoorInteract.java new file mode 100644 index 0000000..2c202b0 --- /dev/null +++ b/src/net/minecraft/src/EntityAIDoorInteract.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +public abstract class EntityAIDoorInteract extends EntityAIBase { + protected EntityLiving theEntity; + protected int entityPosX; + protected int entityPosY; + protected int entityPosZ; + protected BlockDoor targetDoor; + boolean hasStoppedDoorInteraction; + float entityPositionX; + float entityPositionZ; + + public EntityAIDoorInteract(EntityLiving var1) { + this.theEntity = var1; + } + + public boolean shouldExecute() { + if(!this.theEntity.isCollidedHorizontally) { + return false; + } else { + PathNavigate var1 = this.theEntity.getNavigator(); + PathEntity var2 = var1.getPath(); + if(var2 != null && !var2.isFinished() && var1.getCanBreakDoors()) { + for(int var3 = 0; var3 < Math.min(var2.getCurrentPathIndex() + 2, var2.getCurrentPathLength()); ++var3) { + PathPoint var4 = var2.getPathPointFromIndex(var3); + this.entityPosX = var4.xCoord; + this.entityPosY = var4.yCoord + 1; + this.entityPosZ = var4.zCoord; + if(this.theEntity.getDistanceSq((double)this.entityPosX, this.theEntity.posY, (double)this.entityPosZ) <= 2.25D) { + this.targetDoor = this.findUsableDoor(this.entityPosX, this.entityPosY, this.entityPosZ); + if(this.targetDoor != null) { + return true; + } + } + } + + this.entityPosX = MathHelper.floor_double(this.theEntity.posX); + this.entityPosY = MathHelper.floor_double(this.theEntity.posY + 1.0D); + this.entityPosZ = MathHelper.floor_double(this.theEntity.posZ); + this.targetDoor = this.findUsableDoor(this.entityPosX, this.entityPosY, this.entityPosZ); + return this.targetDoor != null; + } else { + return false; + } + } + } + + public boolean continueExecuting() { + return !this.hasStoppedDoorInteraction; + } + + public void startExecuting() { + this.hasStoppedDoorInteraction = false; + this.entityPositionX = (float)((double)((float)this.entityPosX + 0.5F) - this.theEntity.posX); + this.entityPositionZ = (float)((double)((float)this.entityPosZ + 0.5F) - this.theEntity.posZ); + } + + public void updateTask() { + float var1 = (float)((double)((float)this.entityPosX + 0.5F) - this.theEntity.posX); + float var2 = (float)((double)((float)this.entityPosZ + 0.5F) - this.theEntity.posZ); + float var3 = this.entityPositionX * var1 + this.entityPositionZ * var2; + if(var3 < 0.0F) { + this.hasStoppedDoorInteraction = true; + } + + } + + private BlockDoor findUsableDoor(int var1, int var2, int var3) { + int var4 = this.theEntity.worldObj.getBlockId(var1, var2, var3); + return var4 != Block.doorWood.blockID ? null : (BlockDoor)Block.blocksList[var4]; + } +} diff --git a/src/net/minecraft/src/EntityAIEatGrass.java b/src/net/minecraft/src/EntityAIEatGrass.java new file mode 100644 index 0000000..a580a7b --- /dev/null +++ b/src/net/minecraft/src/EntityAIEatGrass.java @@ -0,0 +1,60 @@ +package net.minecraft.src; + +public class EntityAIEatGrass extends EntityAIBase { + private EntityLiving theEntity; + private World theWorld; + int eatGrassTick = 0; + + public EntityAIEatGrass(EntityLiving var1) { + this.theEntity = var1; + this.theWorld = var1.worldObj; + this.setMutexBits(7); + } + + public boolean shouldExecute() { + if(this.theEntity.getRNG().nextInt(this.theEntity.isChild() ? 50 : 1000) != 0) { + return false; + } else { + int var1 = MathHelper.floor_double(this.theEntity.posX); + int var2 = MathHelper.floor_double(this.theEntity.posY); + int var3 = MathHelper.floor_double(this.theEntity.posZ); + return this.theWorld.getBlockId(var1, var2, var3) == Block.tallGrass.blockID && this.theWorld.getBlockMetadata(var1, var2, var3) == 1 ? true : this.theWorld.getBlockId(var1, var2 - 1, var3) == Block.grass.blockID; + } + } + + public void startExecuting() { + this.eatGrassTick = 40; + this.theWorld.setEntityState(this.theEntity, (byte)10); + this.theEntity.getNavigator().clearPathEntity(); + } + + public void resetTask() { + this.eatGrassTick = 0; + } + + public boolean continueExecuting() { + return this.eatGrassTick > 0; + } + + public int getEatGrassTick() { + return this.eatGrassTick; + } + + public void updateTask() { + this.eatGrassTick = Math.max(0, this.eatGrassTick - 1); + if(this.eatGrassTick == 4) { + int var1 = MathHelper.floor_double(this.theEntity.posX); + int var2 = MathHelper.floor_double(this.theEntity.posY); + int var3 = MathHelper.floor_double(this.theEntity.posZ); + if(this.theWorld.getBlockId(var1, var2, var3) == Block.tallGrass.blockID) { + this.theWorld.destroyBlock(var1, var2, var3, false); + this.theEntity.eatGrassBonus(); + } else if(this.theWorld.getBlockId(var1, var2 - 1, var3) == Block.grass.blockID) { + this.theWorld.playAuxSFX(2001, var1, var2 - 1, var3, Block.grass.blockID); + this.theWorld.setBlock(var1, var2 - 1, var3, Block.dirt.blockID, 0, 2); + this.theEntity.eatGrassBonus(); + } + + } + } +} diff --git a/src/net/minecraft/src/EntityAIFleeSun.java b/src/net/minecraft/src/EntityAIFleeSun.java new file mode 100644 index 0000000..b11a464 --- /dev/null +++ b/src/net/minecraft/src/EntityAIFleeSun.java @@ -0,0 +1,62 @@ +package net.minecraft.src; + +import java.util.Random; + +public class EntityAIFleeSun extends EntityAIBase { + private EntityCreature theCreature; + private double shelterX; + private double shelterY; + private double shelterZ; + private float movementSpeed; + private World theWorld; + + public EntityAIFleeSun(EntityCreature var1, float var2) { + this.theCreature = var1; + this.movementSpeed = var2; + this.theWorld = var1.worldObj; + this.setMutexBits(1); + } + + public boolean shouldExecute() { + if(!this.theWorld.isDaytime()) { + return false; + } else if(!this.theCreature.isBurning()) { + return false; + } else if(!this.theWorld.canBlockSeeTheSky(MathHelper.floor_double(this.theCreature.posX), (int)this.theCreature.boundingBox.minY, MathHelper.floor_double(this.theCreature.posZ))) { + return false; + } else { + Vec3 var1 = this.findPossibleShelter(); + if(var1 == null) { + return false; + } else { + this.shelterX = var1.xCoord; + this.shelterY = var1.yCoord; + this.shelterZ = var1.zCoord; + return true; + } + } + } + + public boolean continueExecuting() { + return !this.theCreature.getNavigator().noPath(); + } + + public void startExecuting() { + this.theCreature.getNavigator().tryMoveToXYZ(this.shelterX, this.shelterY, this.shelterZ, this.movementSpeed); + } + + private Vec3 findPossibleShelter() { + Random var1 = this.theCreature.getRNG(); + + for(int var2 = 0; var2 < 10; ++var2) { + int var3 = MathHelper.floor_double(this.theCreature.posX + (double)var1.nextInt(20) - 10.0D); + int var4 = MathHelper.floor_double(this.theCreature.boundingBox.minY + (double)var1.nextInt(6) - 3.0D); + int var5 = MathHelper.floor_double(this.theCreature.posZ + (double)var1.nextInt(20) - 10.0D); + if(!this.theWorld.canBlockSeeTheSky(var3, var4, var5) && this.theCreature.getBlockPathWeight(var3, var4, var5) < 0.0F) { + return this.theWorld.getWorldVec3Pool().getVecFromPool((double)var3, (double)var4, (double)var5); + } + } + + return null; + } +} diff --git a/src/net/minecraft/src/EntityAIFollowGolem.java b/src/net/minecraft/src/EntityAIFollowGolem.java new file mode 100644 index 0000000..c9d1463 --- /dev/null +++ b/src/net/minecraft/src/EntityAIFollowGolem.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class EntityAIFollowGolem extends EntityAIBase { + private EntityVillager theVillager; + private EntityIronGolem theGolem; + private int takeGolemRoseTick; + private boolean tookGolemRose = false; + + public EntityAIFollowGolem(EntityVillager var1) { + this.theVillager = var1; + this.setMutexBits(3); + } + + public boolean shouldExecute() { + if(this.theVillager.getGrowingAge() >= 0) { + return false; + } else if(!this.theVillager.worldObj.isDaytime()) { + return false; + } else { + List var1 = this.theVillager.worldObj.getEntitiesWithinAABB(EntityIronGolem.class, this.theVillager.boundingBox.expand(6.0D, 2.0D, 6.0D)); + if(var1.isEmpty()) { + return false; + } else { + Iterator var2 = var1.iterator(); + + while(var2.hasNext()) { + EntityIronGolem var3 = (EntityIronGolem)var2.next(); + if(var3.getHoldRoseTick() > 0) { + this.theGolem = var3; + break; + } + } + + return this.theGolem != null; + } + } + } + + public boolean continueExecuting() { + return this.theGolem.getHoldRoseTick() > 0; + } + + public void startExecuting() { + this.takeGolemRoseTick = this.theVillager.getRNG().nextInt(320); + this.tookGolemRose = false; + this.theGolem.getNavigator().clearPathEntity(); + } + + public void resetTask() { + this.theGolem = null; + this.theVillager.getNavigator().clearPathEntity(); + } + + public void updateTask() { + this.theVillager.getLookHelper().setLookPositionWithEntity(this.theGolem, 30.0F, 30.0F); + if(this.theGolem.getHoldRoseTick() == this.takeGolemRoseTick) { + this.theVillager.getNavigator().tryMoveToEntityLiving(this.theGolem, 0.15F); + this.tookGolemRose = true; + } + + if(this.tookGolemRose && this.theVillager.getDistanceSqToEntity(this.theGolem) < 4.0D) { + this.theGolem.setHoldingRose(false); + this.theVillager.getNavigator().clearPathEntity(); + } + + } +} diff --git a/src/net/minecraft/src/EntityAIFollowOwner.java b/src/net/minecraft/src/EntityAIFollowOwner.java new file mode 100644 index 0000000..7545421 --- /dev/null +++ b/src/net/minecraft/src/EntityAIFollowOwner.java @@ -0,0 +1,80 @@ +package net.minecraft.src; + +public class EntityAIFollowOwner extends EntityAIBase { + private EntityTameable thePet; + private EntityLiving theOwner; + World theWorld; + private float field_75336_f; + private PathNavigate petPathfinder; + private int field_75343_h; + float maxDist; + float minDist; + private boolean field_75344_i; + + public EntityAIFollowOwner(EntityTameable var1, float var2, float var3, float var4) { + this.thePet = var1; + this.theWorld = var1.worldObj; + this.field_75336_f = var2; + this.petPathfinder = var1.getNavigator(); + this.minDist = var3; + this.maxDist = var4; + this.setMutexBits(3); + } + + public boolean shouldExecute() { + EntityLiving var1 = this.thePet.getOwner(); + if(var1 == null) { + return false; + } else if(this.thePet.isSitting()) { + return false; + } else if(this.thePet.getDistanceSqToEntity(var1) < (double)(this.minDist * this.minDist)) { + return false; + } else { + this.theOwner = var1; + return true; + } + } + + public boolean continueExecuting() { + return !this.petPathfinder.noPath() && this.thePet.getDistanceSqToEntity(this.theOwner) > (double)(this.maxDist * this.maxDist) && !this.thePet.isSitting(); + } + + public void startExecuting() { + this.field_75343_h = 0; + this.field_75344_i = this.thePet.getNavigator().getAvoidsWater(); + this.thePet.getNavigator().setAvoidsWater(false); + } + + public void resetTask() { + this.theOwner = null; + this.petPathfinder.clearPathEntity(); + this.thePet.getNavigator().setAvoidsWater(this.field_75344_i); + } + + public void updateTask() { + this.thePet.getLookHelper().setLookPositionWithEntity(this.theOwner, 10.0F, (float)this.thePet.getVerticalFaceSpeed()); + if(!this.thePet.isSitting()) { + if(--this.field_75343_h <= 0) { + this.field_75343_h = 10; + if(!this.petPathfinder.tryMoveToEntityLiving(this.theOwner, this.field_75336_f)) { + if(this.thePet.getDistanceSqToEntity(this.theOwner) >= 144.0D) { + int var1 = MathHelper.floor_double(this.theOwner.posX) - 2; + int var2 = MathHelper.floor_double(this.theOwner.posZ) - 2; + int var3 = MathHelper.floor_double(this.theOwner.boundingBox.minY); + + for(int var4 = 0; var4 <= 4; ++var4) { + for(int var5 = 0; var5 <= 4; ++var5) { + if((var4 < 1 || var5 < 1 || var4 > 3 || var5 > 3) && this.theWorld.doesBlockHaveSolidTopSurface(var1 + var4, var3 - 1, var2 + var5) && !this.theWorld.isBlockNormalCube(var1 + var4, var3, var2 + var5) && !this.theWorld.isBlockNormalCube(var1 + var4, var3 + 1, var2 + var5)) { + this.thePet.setLocationAndAngles((double)((float)(var1 + var4) + 0.5F), (double)var3, (double)((float)(var2 + var5) + 0.5F), this.thePet.rotationYaw, this.thePet.rotationPitch); + this.petPathfinder.clearPathEntity(); + return; + } + } + } + + } + } + } + } + } +} diff --git a/src/net/minecraft/src/EntityAIFollowParent.java b/src/net/minecraft/src/EntityAIFollowParent.java new file mode 100644 index 0000000..ee6defc --- /dev/null +++ b/src/net/minecraft/src/EntityAIFollowParent.java @@ -0,0 +1,71 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class EntityAIFollowParent extends EntityAIBase { + EntityAnimal childAnimal; + EntityAnimal parentAnimal; + float field_75347_c; + private int field_75345_d; + + public EntityAIFollowParent(EntityAnimal var1, float var2) { + this.childAnimal = var1; + this.field_75347_c = var2; + } + + public boolean shouldExecute() { + if(this.childAnimal.getGrowingAge() >= 0) { + return false; + } else { + List var1 = this.childAnimal.worldObj.getEntitiesWithinAABB(this.childAnimal.getClass(), this.childAnimal.boundingBox.expand(8.0D, 4.0D, 8.0D)); + EntityAnimal var2 = null; + double var3 = Double.MAX_VALUE; + Iterator var5 = var1.iterator(); + + while(var5.hasNext()) { + EntityAnimal var6 = (EntityAnimal)var5.next(); + if(var6.getGrowingAge() >= 0) { + double var7 = this.childAnimal.getDistanceSqToEntity(var6); + if(var7 <= var3) { + var3 = var7; + var2 = var6; + } + } + } + + if(var2 == null) { + return false; + } else if(var3 < 9.0D) { + return false; + } else { + this.parentAnimal = var2; + return true; + } + } + } + + public boolean continueExecuting() { + if(!this.parentAnimal.isEntityAlive()) { + return false; + } else { + double var1 = this.childAnimal.getDistanceSqToEntity(this.parentAnimal); + return var1 >= 9.0D && var1 <= 256.0D; + } + } + + public void startExecuting() { + this.field_75345_d = 0; + } + + public void resetTask() { + this.parentAnimal = null; + } + + public void updateTask() { + if(--this.field_75345_d <= 0) { + this.field_75345_d = 10; + this.childAnimal.getNavigator().tryMoveToEntityLiving(this.parentAnimal, this.field_75347_c); + } + } +} diff --git a/src/net/minecraft/src/EntityAIHurtByTarget.java b/src/net/minecraft/src/EntityAIHurtByTarget.java new file mode 100644 index 0000000..d2fad9c --- /dev/null +++ b/src/net/minecraft/src/EntityAIHurtByTarget.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class EntityAIHurtByTarget extends EntityAITarget { + boolean field_75312_a; + EntityLiving entityPathNavigate; + + public EntityAIHurtByTarget(EntityLiving var1, boolean var2) { + super(var1, 16.0F, false); + this.field_75312_a = var2; + this.setMutexBits(1); + } + + public boolean shouldExecute() { + return this.isSuitableTarget(this.taskOwner.getAITarget(), true); + } + + public boolean continueExecuting() { + return this.taskOwner.getAITarget() != null && this.taskOwner.getAITarget() != this.entityPathNavigate; + } + + public void startExecuting() { + this.taskOwner.setAttackTarget(this.taskOwner.getAITarget()); + this.entityPathNavigate = this.taskOwner.getAITarget(); + if(this.field_75312_a) { + List var1 = this.taskOwner.worldObj.getEntitiesWithinAABB(this.taskOwner.getClass(), AxisAlignedBB.getAABBPool().getAABB(this.taskOwner.posX, this.taskOwner.posY, this.taskOwner.posZ, this.taskOwner.posX + 1.0D, this.taskOwner.posY + 1.0D, this.taskOwner.posZ + 1.0D).expand((double)this.targetDistance, 10.0D, (double)this.targetDistance)); + Iterator var2 = var1.iterator(); + + while(var2.hasNext()) { + EntityLiving var3 = (EntityLiving)var2.next(); + if(this.taskOwner != var3 && var3.getAttackTarget() == null) { + var3.setAttackTarget(this.taskOwner.getAITarget()); + } + } + } + + super.startExecuting(); + } + + public void resetTask() { + if(this.taskOwner.getAttackTarget() != null && this.taskOwner.getAttackTarget() instanceof EntityPlayer && ((EntityPlayer)this.taskOwner.getAttackTarget()).capabilities.disableDamage) { + super.resetTask(); + } + + } +} diff --git a/src/net/minecraft/src/EntityAILeapAtTarget.java b/src/net/minecraft/src/EntityAILeapAtTarget.java new file mode 100644 index 0000000..c5c5692 --- /dev/null +++ b/src/net/minecraft/src/EntityAILeapAtTarget.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +public class EntityAILeapAtTarget extends EntityAIBase { + EntityLiving leaper; + EntityLiving leapTarget; + float leapMotionY; + + public EntityAILeapAtTarget(EntityLiving var1, float var2) { + this.leaper = var1; + this.leapMotionY = var2; + this.setMutexBits(5); + } + + public boolean shouldExecute() { + this.leapTarget = this.leaper.getAttackTarget(); + if(this.leapTarget == null) { + return false; + } else { + double var1 = this.leaper.getDistanceSqToEntity(this.leapTarget); + return var1 >= 4.0D && var1 <= 16.0D ? (!this.leaper.onGround ? false : this.leaper.getRNG().nextInt(5) == 0) : false; + } + } + + public boolean continueExecuting() { + return !this.leaper.onGround; + } + + public void startExecuting() { + double var1 = this.leapTarget.posX - this.leaper.posX; + double var3 = this.leapTarget.posZ - this.leaper.posZ; + float var5 = MathHelper.sqrt_double(var1 * var1 + var3 * var3); + this.leaper.motionX += var1 / (double)var5 * 0.5D * (double)0.8F + this.leaper.motionX * (double)0.2F; + this.leaper.motionZ += var3 / (double)var5 * 0.5D * (double)0.8F + this.leaper.motionZ * (double)0.2F; + this.leaper.motionY = (double)this.leapMotionY; + } +} diff --git a/src/net/minecraft/src/EntityAILookAtTradePlayer.java b/src/net/minecraft/src/EntityAILookAtTradePlayer.java new file mode 100644 index 0000000..d20962f --- /dev/null +++ b/src/net/minecraft/src/EntityAILookAtTradePlayer.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class EntityAILookAtTradePlayer extends EntityAIWatchClosest { + private final EntityVillager theMerchant; + + public EntityAILookAtTradePlayer(EntityVillager var1) { + super(var1, EntityPlayer.class, 8.0F); + this.theMerchant = var1; + } + + public boolean shouldExecute() { + if(this.theMerchant.isTrading()) { + this.closestEntity = this.theMerchant.getCustomer(); + return true; + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/EntityAILookAtVillager.java b/src/net/minecraft/src/EntityAILookAtVillager.java new file mode 100644 index 0000000..764538b --- /dev/null +++ b/src/net/minecraft/src/EntityAILookAtVillager.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +public class EntityAILookAtVillager extends EntityAIBase { + private EntityIronGolem theGolem; + private EntityVillager theVillager; + private int lookTime; + + public EntityAILookAtVillager(EntityIronGolem var1) { + this.theGolem = var1; + this.setMutexBits(3); + } + + public boolean shouldExecute() { + if(!this.theGolem.worldObj.isDaytime()) { + return false; + } else if(this.theGolem.getRNG().nextInt(8000) != 0) { + return false; + } else { + this.theVillager = (EntityVillager)this.theGolem.worldObj.findNearestEntityWithinAABB(EntityVillager.class, this.theGolem.boundingBox.expand(6.0D, 2.0D, 6.0D), this.theGolem); + return this.theVillager != null; + } + } + + public boolean continueExecuting() { + return this.lookTime > 0; + } + + public void startExecuting() { + this.lookTime = 400; + this.theGolem.setHoldingRose(true); + } + + public void resetTask() { + this.theGolem.setHoldingRose(false); + this.theVillager = null; + } + + public void updateTask() { + this.theGolem.getLookHelper().setLookPositionWithEntity(this.theVillager, 30.0F, 30.0F); + --this.lookTime; + } +} diff --git a/src/net/minecraft/src/EntityAILookIdle.java b/src/net/minecraft/src/EntityAILookIdle.java new file mode 100644 index 0000000..3cdf199 --- /dev/null +++ b/src/net/minecraft/src/EntityAILookIdle.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +public class EntityAILookIdle extends EntityAIBase { + private EntityLiving idleEntity; + private double lookX; + private double lookZ; + private int idleTime = 0; + + public EntityAILookIdle(EntityLiving var1) { + this.idleEntity = var1; + this.setMutexBits(3); + } + + public boolean shouldExecute() { + return this.idleEntity.getRNG().nextFloat() < 0.02F; + } + + public boolean continueExecuting() { + return this.idleTime >= 0; + } + + public void startExecuting() { + double var1 = Math.PI * 2.0D * this.idleEntity.getRNG().nextDouble(); + this.lookX = Math.cos(var1); + this.lookZ = Math.sin(var1); + this.idleTime = 20 + this.idleEntity.getRNG().nextInt(20); + } + + 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, 10.0F, (float)this.idleEntity.getVerticalFaceSpeed()); + } +} diff --git a/src/net/minecraft/src/EntityAIMate.java b/src/net/minecraft/src/EntityAIMate.java new file mode 100644 index 0000000..3d89a79 --- /dev/null +++ b/src/net/minecraft/src/EntityAIMate.java @@ -0,0 +1,89 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +public class EntityAIMate extends EntityAIBase { + private EntityAnimal theAnimal; + World theWorld; + private EntityAnimal targetMate; + int spawnBabyDelay = 0; + float moveSpeed; + + public EntityAIMate(EntityAnimal var1, float var2) { + this.theAnimal = var1; + this.theWorld = var1.worldObj; + this.moveSpeed = var2; + this.setMutexBits(3); + } + + public boolean shouldExecute() { + if(!this.theAnimal.isInLove()) { + return false; + } else { + this.targetMate = this.getNearbyMate(); + return this.targetMate != null; + } + } + + public boolean continueExecuting() { + return this.targetMate.isEntityAlive() && this.targetMate.isInLove() && this.spawnBabyDelay < 60; + } + + public void resetTask() { + this.targetMate = null; + this.spawnBabyDelay = 0; + } + + public void updateTask() { + this.theAnimal.getLookHelper().setLookPositionWithEntity(this.targetMate, 10.0F, (float)this.theAnimal.getVerticalFaceSpeed()); + this.theAnimal.getNavigator().tryMoveToEntityLiving(this.targetMate, this.moveSpeed); + ++this.spawnBabyDelay; + if(this.spawnBabyDelay >= 60 && this.theAnimal.getDistanceSqToEntity(this.targetMate) < 9.0D) { + this.spawnBaby(); + } + + } + + private EntityAnimal getNearbyMate() { + float var1 = 8.0F; + List var2 = this.theWorld.getEntitiesWithinAABB(this.theAnimal.getClass(), this.theAnimal.boundingBox.expand((double)var1, (double)var1, (double)var1)); + double var3 = Double.MAX_VALUE; + EntityAnimal var5 = null; + Iterator var6 = var2.iterator(); + + while(var6.hasNext()) { + EntityAnimal var7 = (EntityAnimal)var6.next(); + if(this.theAnimal.canMateWith(var7) && this.theAnimal.getDistanceSqToEntity(var7) < var3) { + var5 = var7; + var3 = this.theAnimal.getDistanceSqToEntity(var7); + } + } + + return var5; + } + + private void spawnBaby() { + EntityAgeable var1 = this.theAnimal.createChild(this.targetMate); + if(var1 != null) { + this.theAnimal.setGrowingAge(6000); + this.targetMate.setGrowingAge(6000); + this.theAnimal.resetInLove(); + this.targetMate.resetInLove(); + var1.setGrowingAge(-24000); + var1.setLocationAndAngles(this.theAnimal.posX, this.theAnimal.posY, this.theAnimal.posZ, 0.0F, 0.0F); + this.theWorld.spawnEntityInWorld(var1); + Random var2 = this.theAnimal.getRNG(); + + for(int var3 = 0; var3 < 7; ++var3) { + double var4 = var2.nextGaussian() * 0.02D; + double var6 = var2.nextGaussian() * 0.02D; + double var8 = var2.nextGaussian() * 0.02D; + this.theWorld.spawnParticle("heart", this.theAnimal.posX + (double)(var2.nextFloat() * this.theAnimal.width * 2.0F) - (double)this.theAnimal.width, this.theAnimal.posY + 0.5D + (double)(var2.nextFloat() * this.theAnimal.height), this.theAnimal.posZ + (double)(var2.nextFloat() * this.theAnimal.width * 2.0F) - (double)this.theAnimal.width, var4, var6, var8); + } + + this.theWorld.spawnEntityInWorld(new EntityXPOrb(this.theWorld, this.theAnimal.posX, this.theAnimal.posY, this.theAnimal.posZ, var2.nextInt(7) + 1)); + } + } +} diff --git a/src/net/minecraft/src/EntityAIMoveIndoors.java b/src/net/minecraft/src/EntityAIMoveIndoors.java new file mode 100644 index 0000000..f484ad7 --- /dev/null +++ b/src/net/minecraft/src/EntityAIMoveIndoors.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +public class EntityAIMoveIndoors extends EntityAIBase { + private EntityCreature entityObj; + private VillageDoorInfo doorInfo; + private int insidePosX = -1; + private int insidePosZ = -1; + + public EntityAIMoveIndoors(EntityCreature var1) { + this.entityObj = var1; + this.setMutexBits(1); + } + + public boolean shouldExecute() { + if((!this.entityObj.worldObj.isDaytime() || this.entityObj.worldObj.isRaining()) && !this.entityObj.worldObj.provider.hasNoSky) { + if(this.entityObj.getRNG().nextInt(50) != 0) { + return false; + } else if(this.insidePosX != -1 && this.entityObj.getDistanceSq((double)this.insidePosX, this.entityObj.posY, (double)this.insidePosZ) < 4.0D) { + return false; + } else { + Village var1 = this.entityObj.worldObj.villageCollectionObj.findNearestVillage(MathHelper.floor_double(this.entityObj.posX), MathHelper.floor_double(this.entityObj.posY), MathHelper.floor_double(this.entityObj.posZ), 14); + if(var1 == null) { + return false; + } else { + this.doorInfo = var1.findNearestDoorUnrestricted(MathHelper.floor_double(this.entityObj.posX), MathHelper.floor_double(this.entityObj.posY), MathHelper.floor_double(this.entityObj.posZ)); + return this.doorInfo != null; + } + } + } else { + return false; + } + } + + public boolean continueExecuting() { + return !this.entityObj.getNavigator().noPath(); + } + + public void startExecuting() { + this.insidePosX = -1; + if(this.entityObj.getDistanceSq((double)this.doorInfo.getInsidePosX(), (double)this.doorInfo.posY, (double)this.doorInfo.getInsidePosZ()) > 256.0D) { + Vec3 var1 = RandomPositionGenerator.findRandomTargetBlockTowards(this.entityObj, 14, 3, this.entityObj.worldObj.getWorldVec3Pool().getVecFromPool((double)this.doorInfo.getInsidePosX() + 0.5D, (double)this.doorInfo.getInsidePosY(), (double)this.doorInfo.getInsidePosZ() + 0.5D)); + if(var1 != null) { + this.entityObj.getNavigator().tryMoveToXYZ(var1.xCoord, var1.yCoord, var1.zCoord, 0.3F); + } + } else { + this.entityObj.getNavigator().tryMoveToXYZ((double)this.doorInfo.getInsidePosX() + 0.5D, (double)this.doorInfo.getInsidePosY(), (double)this.doorInfo.getInsidePosZ() + 0.5D, 0.3F); + } + + } + + public void resetTask() { + this.insidePosX = this.doorInfo.getInsidePosX(); + this.insidePosZ = this.doorInfo.getInsidePosZ(); + this.doorInfo = null; + } +} diff --git a/src/net/minecraft/src/EntityAIMoveThroughVillage.java b/src/net/minecraft/src/EntityAIMoveThroughVillage.java new file mode 100644 index 0000000..0361b1b --- /dev/null +++ b/src/net/minecraft/src/EntityAIMoveThroughVillage.java @@ -0,0 +1,116 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class EntityAIMoveThroughVillage extends EntityAIBase { + private EntityCreature theEntity; + private float movementSpeed; + private PathEntity entityPathNavigate; + private VillageDoorInfo doorInfo; + private boolean isNocturnal; + private List doorList = new ArrayList(); + + public EntityAIMoveThroughVillage(EntityCreature var1, float var2, boolean var3) { + this.theEntity = var1; + this.movementSpeed = var2; + this.isNocturnal = var3; + this.setMutexBits(1); + } + + public boolean shouldExecute() { + this.func_75414_f(); + if(this.isNocturnal && this.theEntity.worldObj.isDaytime()) { + return false; + } else { + Village var1 = this.theEntity.worldObj.villageCollectionObj.findNearestVillage(MathHelper.floor_double(this.theEntity.posX), MathHelper.floor_double(this.theEntity.posY), MathHelper.floor_double(this.theEntity.posZ), 0); + if(var1 == null) { + return false; + } else { + this.doorInfo = this.func_75412_a(var1); + if(this.doorInfo == null) { + return false; + } else { + boolean var2 = this.theEntity.getNavigator().getCanBreakDoors(); + this.theEntity.getNavigator().setBreakDoors(false); + this.entityPathNavigate = this.theEntity.getNavigator().getPathToXYZ((double)this.doorInfo.posX, (double)this.doorInfo.posY, (double)this.doorInfo.posZ); + this.theEntity.getNavigator().setBreakDoors(var2); + if(this.entityPathNavigate != null) { + return true; + } else { + Vec3 var3 = RandomPositionGenerator.findRandomTargetBlockTowards(this.theEntity, 10, 7, this.theEntity.worldObj.getWorldVec3Pool().getVecFromPool((double)this.doorInfo.posX, (double)this.doorInfo.posY, (double)this.doorInfo.posZ)); + if(var3 == null) { + return false; + } else { + this.theEntity.getNavigator().setBreakDoors(false); + this.entityPathNavigate = this.theEntity.getNavigator().getPathToXYZ(var3.xCoord, var3.yCoord, var3.zCoord); + this.theEntity.getNavigator().setBreakDoors(var2); + return this.entityPathNavigate != null; + } + } + } + } + } + } + + public boolean continueExecuting() { + if(this.theEntity.getNavigator().noPath()) { + return false; + } else { + float var1 = this.theEntity.width + 4.0F; + return this.theEntity.getDistanceSq((double)this.doorInfo.posX, (double)this.doorInfo.posY, (double)this.doorInfo.posZ) > (double)(var1 * var1); + } + } + + public void startExecuting() { + this.theEntity.getNavigator().setPath(this.entityPathNavigate, this.movementSpeed); + } + + public void resetTask() { + if(this.theEntity.getNavigator().noPath() || this.theEntity.getDistanceSq((double)this.doorInfo.posX, (double)this.doorInfo.posY, (double)this.doorInfo.posZ) < 16.0D) { + this.doorList.add(this.doorInfo); + } + + } + + private VillageDoorInfo func_75412_a(Village var1) { + VillageDoorInfo var2 = null; + int var3 = Integer.MAX_VALUE; + List var4 = var1.getVillageDoorInfoList(); + Iterator var5 = var4.iterator(); + + while(var5.hasNext()) { + VillageDoorInfo var6 = (VillageDoorInfo)var5.next(); + int var7 = var6.getDistanceSquared(MathHelper.floor_double(this.theEntity.posX), MathHelper.floor_double(this.theEntity.posY), MathHelper.floor_double(this.theEntity.posZ)); + if(var7 < var3 && !this.func_75413_a(var6)) { + var2 = var6; + var3 = var7; + } + } + + return var2; + } + + private boolean func_75413_a(VillageDoorInfo var1) { + Iterator var2 = this.doorList.iterator(); + + VillageDoorInfo var3; + do { + if(!var2.hasNext()) { + return false; + } + + var3 = (VillageDoorInfo)var2.next(); + } while(var1.posX != var3.posX || var1.posY != var3.posY || var1.posZ != var3.posZ); + + return true; + } + + private void func_75414_f() { + if(this.doorList.size() > 15) { + this.doorList.remove(0); + } + + } +} diff --git a/src/net/minecraft/src/EntityAIMoveTowardsTarget.java b/src/net/minecraft/src/EntityAIMoveTowardsTarget.java new file mode 100644 index 0000000..0b3560c --- /dev/null +++ b/src/net/minecraft/src/EntityAIMoveTowardsTarget.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +public class EntityAIMoveTowardsTarget extends EntityAIBase { + private EntityCreature theEntity; + private EntityLiving targetEntity; + private double movePosX; + private double movePosY; + private double movePosZ; + private float field_75425_f; + private float field_75426_g; + + public EntityAIMoveTowardsTarget(EntityCreature var1, float var2, float var3) { + this.theEntity = var1; + this.field_75425_f = var2; + this.field_75426_g = var3; + this.setMutexBits(1); + } + + public boolean shouldExecute() { + this.targetEntity = this.theEntity.getAttackTarget(); + if(this.targetEntity == null) { + return false; + } else if(this.targetEntity.getDistanceSqToEntity(this.theEntity) > (double)(this.field_75426_g * this.field_75426_g)) { + return false; + } else { + Vec3 var1 = RandomPositionGenerator.findRandomTargetBlockTowards(this.theEntity, 16, 7, this.theEntity.worldObj.getWorldVec3Pool().getVecFromPool(this.targetEntity.posX, this.targetEntity.posY, this.targetEntity.posZ)); + if(var1 == null) { + return false; + } else { + this.movePosX = var1.xCoord; + this.movePosY = var1.yCoord; + this.movePosZ = var1.zCoord; + return true; + } + } + } + + public boolean continueExecuting() { + return !this.theEntity.getNavigator().noPath() && this.targetEntity.isEntityAlive() && this.targetEntity.getDistanceSqToEntity(this.theEntity) < (double)(this.field_75426_g * this.field_75426_g); + } + + public void resetTask() { + this.targetEntity = null; + } + + public void startExecuting() { + this.theEntity.getNavigator().tryMoveToXYZ(this.movePosX, this.movePosY, this.movePosZ, this.field_75425_f); + } +} diff --git a/src/net/minecraft/src/EntityAIMoveTwardsRestriction.java b/src/net/minecraft/src/EntityAIMoveTwardsRestriction.java new file mode 100644 index 0000000..5af1a35 --- /dev/null +++ b/src/net/minecraft/src/EntityAIMoveTwardsRestriction.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +public class EntityAIMoveTwardsRestriction extends EntityAIBase { + private EntityCreature theEntity; + private double movePosX; + private double movePosY; + private double movePosZ; + private float movementSpeed; + + public EntityAIMoveTwardsRestriction(EntityCreature var1, float var2) { + this.theEntity = var1; + this.movementSpeed = var2; + this.setMutexBits(1); + } + + public boolean shouldExecute() { + if(this.theEntity.isWithinHomeDistanceCurrentPosition()) { + return false; + } else { + ChunkCoordinates var1 = this.theEntity.getHomePosition(); + Vec3 var2 = RandomPositionGenerator.findRandomTargetBlockTowards(this.theEntity, 16, 7, this.theEntity.worldObj.getWorldVec3Pool().getVecFromPool((double)var1.posX, (double)var1.posY, (double)var1.posZ)); + if(var2 == null) { + return false; + } else { + this.movePosX = var2.xCoord; + this.movePosY = var2.yCoord; + this.movePosZ = var2.zCoord; + return true; + } + } + } + + public boolean continueExecuting() { + return !this.theEntity.getNavigator().noPath(); + } + + public void startExecuting() { + this.theEntity.getNavigator().tryMoveToXYZ(this.movePosX, this.movePosY, this.movePosZ, this.movementSpeed); + } +} diff --git a/src/net/minecraft/src/EntityAINearestAttackableTarget.java b/src/net/minecraft/src/EntityAINearestAttackableTarget.java new file mode 100644 index 0000000..5ee91d0 --- /dev/null +++ b/src/net/minecraft/src/EntityAINearestAttackableTarget.java @@ -0,0 +1,65 @@ +package net.minecraft.src; + +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + +public class EntityAINearestAttackableTarget extends EntityAITarget { + EntityLiving targetEntity; + Class targetClass; + int targetChance; + private final IEntitySelector field_82643_g; + private EntityAINearestAttackableTargetSorter theNearestAttackableTargetSorter; + + public EntityAINearestAttackableTarget(EntityLiving var1, Class var2, float var3, int var4, boolean var5) { + this(var1, var2, var3, var4, var5, false); + } + + public EntityAINearestAttackableTarget(EntityLiving var1, Class var2, float var3, int var4, boolean var5, boolean var6) { + this(var1, var2, var3, var4, var5, var6, (IEntitySelector)null); + } + + public EntityAINearestAttackableTarget(EntityLiving var1, Class var2, float var3, int var4, boolean var5, boolean var6, IEntitySelector var7) { + super(var1, var3, var5, var6); + this.targetClass = var2; + this.targetDistance = var3; + this.targetChance = var4; + this.theNearestAttackableTargetSorter = new EntityAINearestAttackableTargetSorter(this, var1); + this.field_82643_g = var7; + this.setMutexBits(1); + } + + public boolean shouldExecute() { + if(this.targetChance > 0 && this.taskOwner.getRNG().nextInt(this.targetChance) != 0) { + return false; + } else { + if(this.targetClass == EntityPlayer.class) { + EntityPlayer var1 = this.taskOwner.worldObj.getClosestVulnerablePlayerToEntity(this.taskOwner, (double)this.targetDistance); + if(this.isSuitableTarget(var1, false)) { + this.targetEntity = var1; + return true; + } + } else { + List var5 = this.taskOwner.worldObj.selectEntitiesWithinAABB(this.targetClass, this.taskOwner.boundingBox.expand((double)this.targetDistance, 4.0D, (double)this.targetDistance), this.field_82643_g); + Collections.sort(var5, this.theNearestAttackableTargetSorter); + Iterator var2 = var5.iterator(); + + while(var2.hasNext()) { + Entity var3 = (Entity)var2.next(); + EntityLiving var4 = (EntityLiving)var3; + if(this.isSuitableTarget(var4, false)) { + this.targetEntity = var4; + return true; + } + } + } + + return false; + } + } + + public void startExecuting() { + this.taskOwner.setAttackTarget(this.targetEntity); + super.startExecuting(); + } +} diff --git a/src/net/minecraft/src/EntityAINearestAttackableTargetSorter.java b/src/net/minecraft/src/EntityAINearestAttackableTargetSorter.java new file mode 100644 index 0000000..8a74148 --- /dev/null +++ b/src/net/minecraft/src/EntityAINearestAttackableTargetSorter.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +import java.util.Comparator; + +public class EntityAINearestAttackableTargetSorter implements Comparator { + private Entity theEntity; + final EntityAINearestAttackableTarget parent; + + public EntityAINearestAttackableTargetSorter(EntityAINearestAttackableTarget var1, Entity var2) { + this.parent = var1; + this.theEntity = var2; + } + + public int compareDistanceSq(Entity var1, Entity var2) { + double var3 = this.theEntity.getDistanceSqToEntity(var1); + double var5 = this.theEntity.getDistanceSqToEntity(var2); + return var3 < var5 ? -1 : (var3 > var5 ? 1 : 0); + } + + public int compare(Object var1, Object var2) { + return this.compareDistanceSq((Entity)var1, (Entity)var2); + } +} diff --git a/src/net/minecraft/src/EntityAIOcelotAttack.java b/src/net/minecraft/src/EntityAIOcelotAttack.java new file mode 100644 index 0000000..9b7d59e --- /dev/null +++ b/src/net/minecraft/src/EntityAIOcelotAttack.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +public class EntityAIOcelotAttack extends EntityAIBase { + World theWorld; + EntityLiving theEntity; + EntityLiving theVictim; + int attackCountdown = 0; + + public EntityAIOcelotAttack(EntityLiving var1) { + this.theEntity = var1; + this.theWorld = var1.worldObj; + this.setMutexBits(3); + } + + public boolean shouldExecute() { + EntityLiving var1 = this.theEntity.getAttackTarget(); + if(var1 == null) { + return false; + } else { + this.theVictim = var1; + return true; + } + } + + public boolean continueExecuting() { + return !this.theVictim.isEntityAlive() ? false : (this.theEntity.getDistanceSqToEntity(this.theVictim) > 225.0D ? false : !this.theEntity.getNavigator().noPath() || this.shouldExecute()); + } + + public void resetTask() { + this.theVictim = null; + this.theEntity.getNavigator().clearPathEntity(); + } + + public void updateTask() { + this.theEntity.getLookHelper().setLookPositionWithEntity(this.theVictim, 30.0F, 30.0F); + double var1 = (double)(this.theEntity.width * 2.0F * this.theEntity.width * 2.0F); + double var3 = this.theEntity.getDistanceSq(this.theVictim.posX, this.theVictim.boundingBox.minY, this.theVictim.posZ); + float var5 = 0.23F; + if(var3 > var1 && var3 < 16.0D) { + var5 = 0.4F; + } else if(var3 < 225.0D) { + var5 = 0.18F; + } + + this.theEntity.getNavigator().tryMoveToEntityLiving(this.theVictim, var5); + this.attackCountdown = Math.max(this.attackCountdown - 1, 0); + if(var3 <= var1) { + if(this.attackCountdown <= 0) { + this.attackCountdown = 20; + this.theEntity.attackEntityAsMob(this.theVictim); + } + } + } +} diff --git a/src/net/minecraft/src/EntityAIOcelotSit.java b/src/net/minecraft/src/EntityAIOcelotSit.java new file mode 100644 index 0000000..6909e7b --- /dev/null +++ b/src/net/minecraft/src/EntityAIOcelotSit.java @@ -0,0 +1,95 @@ +package net.minecraft.src; + +public class EntityAIOcelotSit extends EntityAIBase { + private final EntityOcelot theOcelot; + private final float field_75404_b; + private int currentTick = 0; + private int field_75402_d = 0; + private int maxSittingTicks = 0; + private int sitableBlockX = 0; + private int sitableBlockY = 0; + private int sitableBlockZ = 0; + + public EntityAIOcelotSit(EntityOcelot var1, float var2) { + this.theOcelot = var1; + this.field_75404_b = var2; + this.setMutexBits(5); + } + + public boolean shouldExecute() { + return this.theOcelot.isTamed() && !this.theOcelot.isSitting() && this.theOcelot.getRNG().nextDouble() <= (double)0.0065F && this.getNearbySitableBlockDistance(); + } + + public boolean continueExecuting() { + return this.currentTick <= this.maxSittingTicks && this.field_75402_d <= 60 && this.isSittableBlock(this.theOcelot.worldObj, this.sitableBlockX, this.sitableBlockY, this.sitableBlockZ); + } + + public void startExecuting() { + this.theOcelot.getNavigator().tryMoveToXYZ((double)((float)this.sitableBlockX) + 0.5D, (double)(this.sitableBlockY + 1), (double)((float)this.sitableBlockZ) + 0.5D, this.field_75404_b); + this.currentTick = 0; + this.field_75402_d = 0; + this.maxSittingTicks = this.theOcelot.getRNG().nextInt(this.theOcelot.getRNG().nextInt(1200) + 1200) + 1200; + this.theOcelot.func_70907_r().setSitting(false); + } + + public void resetTask() { + this.theOcelot.setSitting(false); + } + + public void updateTask() { + ++this.currentTick; + this.theOcelot.func_70907_r().setSitting(false); + if(this.theOcelot.getDistanceSq((double)this.sitableBlockX, (double)(this.sitableBlockY + 1), (double)this.sitableBlockZ) > 1.0D) { + this.theOcelot.setSitting(false); + this.theOcelot.getNavigator().tryMoveToXYZ((double)((float)this.sitableBlockX) + 0.5D, (double)(this.sitableBlockY + 1), (double)((float)this.sitableBlockZ) + 0.5D, this.field_75404_b); + ++this.field_75402_d; + } else if(!this.theOcelot.isSitting()) { + this.theOcelot.setSitting(true); + } else { + --this.field_75402_d; + } + + } + + private boolean getNearbySitableBlockDistance() { + int var1 = (int)this.theOcelot.posY; + double var2 = (double)Integer.MAX_VALUE; + + for(int var4 = (int)this.theOcelot.posX - 8; (double)var4 < this.theOcelot.posX + 8.0D; ++var4) { + for(int var5 = (int)this.theOcelot.posZ - 8; (double)var5 < this.theOcelot.posZ + 8.0D; ++var5) { + if(this.isSittableBlock(this.theOcelot.worldObj, var4, var1, var5) && this.theOcelot.worldObj.isAirBlock(var4, var1 + 1, var5)) { + double var6 = this.theOcelot.getDistanceSq((double)var4, (double)var1, (double)var5); + if(var6 < var2) { + this.sitableBlockX = var4; + this.sitableBlockY = var1; + this.sitableBlockZ = var5; + var2 = var6; + } + } + } + } + + return var2 < (double)Integer.MAX_VALUE; + } + + private boolean isSittableBlock(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3, var4); + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var5 == Block.chest.blockID) { + TileEntityChest var7 = (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4); + if(var7.numUsingPlayers < 1) { + return true; + } + } else { + if(var5 == Block.furnaceBurning.blockID) { + return true; + } + + if(var5 == Block.bed.blockID && !BlockBed.isBlockHeadOfBed(var6)) { + return true; + } + } + + return false; + } +} diff --git a/src/net/minecraft/src/EntityAIOpenDoor.java b/src/net/minecraft/src/EntityAIOpenDoor.java new file mode 100644 index 0000000..6954630 --- /dev/null +++ b/src/net/minecraft/src/EntityAIOpenDoor.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +public class EntityAIOpenDoor extends EntityAIDoorInteract { + boolean field_75361_i; + int field_75360_j; + + public EntityAIOpenDoor(EntityLiving var1, boolean var2) { + super(var1); + this.theEntity = var1; + this.field_75361_i = var2; + } + + public boolean continueExecuting() { + return this.field_75361_i && this.field_75360_j > 0 && super.continueExecuting(); + } + + public void startExecuting() { + this.field_75360_j = 20; + this.targetDoor.onPoweredBlockChange(this.theEntity.worldObj, this.entityPosX, this.entityPosY, this.entityPosZ, true); + } + + public void resetTask() { + if(this.field_75361_i) { + this.targetDoor.onPoweredBlockChange(this.theEntity.worldObj, this.entityPosX, this.entityPosY, this.entityPosZ, false); + } + + } + + public void updateTask() { + --this.field_75360_j; + super.updateTask(); + } +} diff --git a/src/net/minecraft/src/EntityAIOwnerHurtByTarget.java b/src/net/minecraft/src/EntityAIOwnerHurtByTarget.java new file mode 100644 index 0000000..f4e4398 --- /dev/null +++ b/src/net/minecraft/src/EntityAIOwnerHurtByTarget.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +public class EntityAIOwnerHurtByTarget extends EntityAITarget { + EntityTameable theDefendingTameable; + EntityLiving theOwnerAttacker; + + public EntityAIOwnerHurtByTarget(EntityTameable var1) { + super(var1, 32.0F, false); + this.theDefendingTameable = var1; + this.setMutexBits(1); + } + + public boolean shouldExecute() { + if(!this.theDefendingTameable.isTamed()) { + return false; + } else { + EntityLiving var1 = this.theDefendingTameable.getOwner(); + if(var1 == null) { + return false; + } else { + this.theOwnerAttacker = var1.getAITarget(); + return this.isSuitableTarget(this.theOwnerAttacker, false); + } + } + } + + public void startExecuting() { + this.taskOwner.setAttackTarget(this.theOwnerAttacker); + super.startExecuting(); + } +} diff --git a/src/net/minecraft/src/EntityAIOwnerHurtTarget.java b/src/net/minecraft/src/EntityAIOwnerHurtTarget.java new file mode 100644 index 0000000..329b7ff --- /dev/null +++ b/src/net/minecraft/src/EntityAIOwnerHurtTarget.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +public class EntityAIOwnerHurtTarget extends EntityAITarget { + EntityTameable theEntityTameable; + EntityLiving theTarget; + + public EntityAIOwnerHurtTarget(EntityTameable var1) { + super(var1, 32.0F, false); + this.theEntityTameable = var1; + this.setMutexBits(1); + } + + public boolean shouldExecute() { + if(!this.theEntityTameable.isTamed()) { + return false; + } else { + EntityLiving var1 = this.theEntityTameable.getOwner(); + if(var1 == null) { + return false; + } else { + this.theTarget = var1.getLastAttackingEntity(); + return this.isSuitableTarget(this.theTarget, false); + } + } + } + + public void startExecuting() { + this.taskOwner.setAttackTarget(this.theTarget); + super.startExecuting(); + } +} diff --git a/src/net/minecraft/src/EntityAIPanic.java b/src/net/minecraft/src/EntityAIPanic.java new file mode 100644 index 0000000..42af90d --- /dev/null +++ b/src/net/minecraft/src/EntityAIPanic.java @@ -0,0 +1,39 @@ +package net.minecraft.src; + +public class EntityAIPanic extends EntityAIBase { + private EntityCreature theEntityCreature; + private float speed; + private double randPosX; + private double randPosY; + private double randPosZ; + + public EntityAIPanic(EntityCreature var1, float var2) { + this.theEntityCreature = var1; + this.speed = var2; + this.setMutexBits(1); + } + + public boolean shouldExecute() { + if(this.theEntityCreature.getAITarget() == null && !this.theEntityCreature.isBurning()) { + return false; + } else { + Vec3 var1 = RandomPositionGenerator.findRandomTarget(this.theEntityCreature, 5, 4); + if(var1 == null) { + return false; + } else { + this.randPosX = var1.xCoord; + this.randPosY = var1.yCoord; + this.randPosZ = var1.zCoord; + return true; + } + } + } + + public void startExecuting() { + this.theEntityCreature.getNavigator().tryMoveToXYZ(this.randPosX, this.randPosY, this.randPosZ, this.speed); + } + + public boolean continueExecuting() { + return !this.theEntityCreature.getNavigator().noPath(); + } +} diff --git a/src/net/minecraft/src/EntityAIPlay.java b/src/net/minecraft/src/EntityAIPlay.java new file mode 100644 index 0000000..924ebf8 --- /dev/null +++ b/src/net/minecraft/src/EntityAIPlay.java @@ -0,0 +1,83 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class EntityAIPlay extends EntityAIBase { + private EntityVillager villagerObj; + private EntityLiving targetVillager; + private float field_75261_c; + private int playTime; + + public EntityAIPlay(EntityVillager var1, float var2) { + this.villagerObj = var1; + this.field_75261_c = var2; + this.setMutexBits(1); + } + + public boolean shouldExecute() { + if(this.villagerObj.getGrowingAge() >= 0) { + return false; + } else if(this.villagerObj.getRNG().nextInt(400) != 0) { + return false; + } else { + List var1 = this.villagerObj.worldObj.getEntitiesWithinAABB(EntityVillager.class, this.villagerObj.boundingBox.expand(6.0D, 3.0D, 6.0D)); + double var2 = Double.MAX_VALUE; + Iterator var4 = var1.iterator(); + + while(var4.hasNext()) { + EntityVillager var5 = (EntityVillager)var4.next(); + if(var5 != this.villagerObj && !var5.isPlaying() && var5.getGrowingAge() < 0) { + double var6 = var5.getDistanceSqToEntity(this.villagerObj); + if(var6 <= var2) { + var2 = var6; + this.targetVillager = var5; + } + } + } + + if(this.targetVillager == null) { + Vec3 var8 = RandomPositionGenerator.findRandomTarget(this.villagerObj, 16, 3); + if(var8 == null) { + return false; + } + } + + return true; + } + } + + public boolean continueExecuting() { + return this.playTime > 0; + } + + public void startExecuting() { + if(this.targetVillager != null) { + this.villagerObj.setPlaying(true); + } + + this.playTime = 1000; + } + + public void resetTask() { + this.villagerObj.setPlaying(false); + this.targetVillager = null; + } + + public void updateTask() { + --this.playTime; + if(this.targetVillager != null) { + if(this.villagerObj.getDistanceSqToEntity(this.targetVillager) > 4.0D) { + this.villagerObj.getNavigator().tryMoveToEntityLiving(this.targetVillager, this.field_75261_c); + } + } else if(this.villagerObj.getNavigator().noPath()) { + Vec3 var1 = RandomPositionGenerator.findRandomTarget(this.villagerObj, 16, 3); + if(var1 == null) { + return; + } + + this.villagerObj.getNavigator().tryMoveToXYZ(var1.xCoord, var1.yCoord, var1.zCoord, this.field_75261_c); + } + + } +} diff --git a/src/net/minecraft/src/EntityAIRestrictOpenDoor.java b/src/net/minecraft/src/EntityAIRestrictOpenDoor.java new file mode 100644 index 0000000..a628f40 --- /dev/null +++ b/src/net/minecraft/src/EntityAIRestrictOpenDoor.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +public class EntityAIRestrictOpenDoor extends EntityAIBase { + private EntityCreature entityObj; + private VillageDoorInfo frontDoor; + + public EntityAIRestrictOpenDoor(EntityCreature var1) { + this.entityObj = var1; + } + + public boolean shouldExecute() { + if(this.entityObj.worldObj.isDaytime()) { + return false; + } else { + Village var1 = this.entityObj.worldObj.villageCollectionObj.findNearestVillage(MathHelper.floor_double(this.entityObj.posX), MathHelper.floor_double(this.entityObj.posY), MathHelper.floor_double(this.entityObj.posZ), 16); + if(var1 == null) { + return false; + } else { + this.frontDoor = var1.findNearestDoor(MathHelper.floor_double(this.entityObj.posX), MathHelper.floor_double(this.entityObj.posY), MathHelper.floor_double(this.entityObj.posZ)); + return this.frontDoor == null ? false : (double)this.frontDoor.getInsideDistanceSquare(MathHelper.floor_double(this.entityObj.posX), MathHelper.floor_double(this.entityObj.posY), MathHelper.floor_double(this.entityObj.posZ)) < 2.25D; + } + } + } + + public boolean continueExecuting() { + return this.entityObj.worldObj.isDaytime() ? false : !this.frontDoor.isDetachedFromVillageFlag && this.frontDoor.isInside(MathHelper.floor_double(this.entityObj.posX), MathHelper.floor_double(this.entityObj.posZ)); + } + + public void startExecuting() { + this.entityObj.getNavigator().setBreakDoors(false); + this.entityObj.getNavigator().setEnterDoors(false); + } + + public void resetTask() { + this.entityObj.getNavigator().setBreakDoors(true); + this.entityObj.getNavigator().setEnterDoors(true); + this.frontDoor = null; + } + + public void updateTask() { + this.frontDoor.incrementDoorOpeningRestrictionCounter(); + } +} diff --git a/src/net/minecraft/src/EntityAIRestrictSun.java b/src/net/minecraft/src/EntityAIRestrictSun.java new file mode 100644 index 0000000..4d73aee --- /dev/null +++ b/src/net/minecraft/src/EntityAIRestrictSun.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +public class EntityAIRestrictSun extends EntityAIBase { + private EntityCreature theEntity; + + public EntityAIRestrictSun(EntityCreature var1) { + this.theEntity = var1; + } + + public boolean shouldExecute() { + return this.theEntity.worldObj.isDaytime(); + } + + public void startExecuting() { + this.theEntity.getNavigator().setAvoidSun(true); + } + + public void resetTask() { + this.theEntity.getNavigator().setAvoidSun(false); + } +} diff --git a/src/net/minecraft/src/EntityAISit.java b/src/net/minecraft/src/EntityAISit.java new file mode 100644 index 0000000..b65cc7d --- /dev/null +++ b/src/net/minecraft/src/EntityAISit.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +public class EntityAISit extends EntityAIBase { + private EntityTameable theEntity; + private boolean isSitting = false; + + public EntityAISit(EntityTameable var1) { + this.theEntity = var1; + this.setMutexBits(5); + } + + public boolean shouldExecute() { + if(!this.theEntity.isTamed()) { + return false; + } else if(this.theEntity.isInWater()) { + return false; + } else if(!this.theEntity.onGround) { + return false; + } else { + EntityLiving var1 = this.theEntity.getOwner(); + return var1 == null ? true : (this.theEntity.getDistanceSqToEntity(var1) < 144.0D && var1.getAITarget() != null ? false : this.isSitting); + } + } + + public void startExecuting() { + this.theEntity.getNavigator().clearPathEntity(); + this.theEntity.setSitting(true); + } + + public void resetTask() { + this.theEntity.setSitting(false); + } + + public void setSitting(boolean var1) { + this.isSitting = var1; + } +} diff --git a/src/net/minecraft/src/EntityAISwimming.java b/src/net/minecraft/src/EntityAISwimming.java new file mode 100644 index 0000000..9b49978 --- /dev/null +++ b/src/net/minecraft/src/EntityAISwimming.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +public class EntityAISwimming extends EntityAIBase { + private EntityLiving theEntity; + + public EntityAISwimming(EntityLiving var1) { + this.theEntity = var1; + this.setMutexBits(4); + var1.getNavigator().setCanSwim(true); + } + + public boolean shouldExecute() { + return this.theEntity.isInWater() || this.theEntity.handleLavaMovement(); + } + + public void updateTask() { + if(this.theEntity.getRNG().nextFloat() < 0.8F) { + this.theEntity.getJumpHelper().setJumping(); + } + + } +} diff --git a/src/net/minecraft/src/EntityAITarget.java b/src/net/minecraft/src/EntityAITarget.java new file mode 100644 index 0000000..fe1c639 --- /dev/null +++ b/src/net/minecraft/src/EntityAITarget.java @@ -0,0 +1,119 @@ +package net.minecraft.src; + +public abstract class EntityAITarget extends EntityAIBase { + protected EntityLiving taskOwner; + protected float targetDistance; + protected boolean shouldCheckSight; + private boolean field_75303_a; + private int field_75301_b; + private int field_75302_c; + private int field_75298_g; + + public EntityAITarget(EntityLiving var1, float var2, boolean var3) { + this(var1, var2, var3, false); + } + + public EntityAITarget(EntityLiving var1, float var2, boolean var3, boolean var4) { + this.field_75301_b = 0; + this.field_75302_c = 0; + this.field_75298_g = 0; + this.taskOwner = var1; + this.targetDistance = var2; + this.shouldCheckSight = var3; + this.field_75303_a = var4; + } + + public boolean continueExecuting() { + EntityLiving var1 = this.taskOwner.getAttackTarget(); + if(var1 == null) { + return false; + } else if(!var1.isEntityAlive()) { + return false; + } else if(this.taskOwner.getDistanceSqToEntity(var1) > (double)(this.targetDistance * this.targetDistance)) { + return false; + } else { + if(this.shouldCheckSight) { + if(this.taskOwner.getEntitySenses().canSee(var1)) { + this.field_75298_g = 0; + } else if(++this.field_75298_g > 60) { + return false; + } + } + + return true; + } + } + + public void startExecuting() { + this.field_75301_b = 0; + this.field_75302_c = 0; + this.field_75298_g = 0; + } + + public void resetTask() { + this.taskOwner.setAttackTarget((EntityLiving)null); + } + + protected boolean isSuitableTarget(EntityLiving var1, boolean var2) { + if(var1 == null) { + return false; + } else if(var1 == this.taskOwner) { + return false; + } else if(!var1.isEntityAlive()) { + return false; + } else if(!this.taskOwner.canAttackClass(var1.getClass())) { + return false; + } else { + if(this.taskOwner instanceof EntityTameable && ((EntityTameable)this.taskOwner).isTamed()) { + if(var1 instanceof EntityTameable && ((EntityTameable)var1).isTamed()) { + return false; + } + + if(var1 == ((EntityTameable)this.taskOwner).getOwner()) { + return false; + } + } else if(var1 instanceof EntityPlayer && !var2 && ((EntityPlayer)var1).capabilities.disableDamage) { + return false; + } + + if(!this.taskOwner.isWithinHomeDistance(MathHelper.floor_double(var1.posX), MathHelper.floor_double(var1.posY), MathHelper.floor_double(var1.posZ))) { + return false; + } else if(this.shouldCheckSight && !this.taskOwner.getEntitySenses().canSee(var1)) { + return false; + } else { + if(this.field_75303_a) { + if(--this.field_75302_c <= 0) { + this.field_75301_b = 0; + } + + if(this.field_75301_b == 0) { + this.field_75301_b = this.func_75295_a(var1) ? 1 : 2; + } + + if(this.field_75301_b == 2) { + return false; + } + } + + return true; + } + } + } + + private boolean func_75295_a(EntityLiving var1) { + this.field_75302_c = 10 + this.taskOwner.getRNG().nextInt(5); + PathEntity var2 = this.taskOwner.getNavigator().getPathToEntityLiving(var1); + if(var2 == null) { + return false; + } else { + PathPoint var3 = var2.getFinalPathPoint(); + if(var3 == null) { + return false; + } else { + int var4 = var3.xCoord - MathHelper.floor_double(var1.posX); + int var5 = var3.zCoord - MathHelper.floor_double(var1.posZ); + return (double)(var4 * var4 + var5 * var5) <= 2.25D; + } + } + } +} diff --git a/src/net/minecraft/src/EntityAITargetNonTamed.java b/src/net/minecraft/src/EntityAITargetNonTamed.java new file mode 100644 index 0000000..08e4f06 --- /dev/null +++ b/src/net/minecraft/src/EntityAITargetNonTamed.java @@ -0,0 +1,14 @@ +package net.minecraft.src; + +public class EntityAITargetNonTamed extends EntityAINearestAttackableTarget { + private EntityTameable theTameable; + + public EntityAITargetNonTamed(EntityTameable var1, Class var2, float var3, int var4, boolean var5) { + super(var1, var2, var3, var4, var5); + this.theTameable = var1; + } + + public boolean shouldExecute() { + return this.theTameable.isTamed() ? false : super.shouldExecute(); + } +} diff --git a/src/net/minecraft/src/EntityAITaskEntry.java b/src/net/minecraft/src/EntityAITaskEntry.java new file mode 100644 index 0000000..8c314cf --- /dev/null +++ b/src/net/minecraft/src/EntityAITaskEntry.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +class EntityAITaskEntry { + public EntityAIBase action; + public int priority; + final EntityAITasks tasks; + + public EntityAITaskEntry(EntityAITasks var1, int var2, EntityAIBase var3) { + this.tasks = var1; + this.priority = var2; + this.action = var3; + } +} diff --git a/src/net/minecraft/src/EntityAITasks.java b/src/net/minecraft/src/EntityAITasks.java new file mode 100644 index 0000000..52c59d8 --- /dev/null +++ b/src/net/minecraft/src/EntityAITasks.java @@ -0,0 +1,139 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class EntityAITasks { + private List taskEntries = new ArrayList(); + private List executingTaskEntries = new ArrayList(); + private final Profiler theProfiler; + private int field_75778_d = 0; + private int field_75779_e = 3; + + public EntityAITasks(Profiler var1) { + this.theProfiler = var1; + } + + public void addTask(int var1, EntityAIBase var2) { + this.taskEntries.add(new EntityAITaskEntry(this, var1, var2)); + } + + public void removeTask(EntityAIBase var1) { + Iterator var2 = this.taskEntries.iterator(); + + while(var2.hasNext()) { + EntityAITaskEntry var3 = (EntityAITaskEntry)var2.next(); + EntityAIBase var4 = var3.action; + if(var4 == var1) { + if(this.executingTaskEntries.contains(var3)) { + var4.resetTask(); + this.executingTaskEntries.remove(var3); + } + + var2.remove(); + } + } + + } + + public void onUpdateTasks() { + ArrayList var1 = new ArrayList(); + Iterator var2; + EntityAITaskEntry var3; + if(this.field_75778_d++ % this.field_75779_e == 0) { + var2 = this.taskEntries.iterator(); + + label59: + while(true) { + while(true) { + if(!var2.hasNext()) { + break label59; + } + + var3 = (EntityAITaskEntry)var2.next(); + boolean var4 = this.executingTaskEntries.contains(var3); + if(!var4) { + break; + } + + if(!this.canUse(var3) || !this.canContinue(var3)) { + var3.action.resetTask(); + this.executingTaskEntries.remove(var3); + break; + } + } + + if(this.canUse(var3) && var3.action.shouldExecute()) { + var1.add(var3); + this.executingTaskEntries.add(var3); + } + } + } else { + var2 = this.executingTaskEntries.iterator(); + + while(var2.hasNext()) { + var3 = (EntityAITaskEntry)var2.next(); + if(!var3.action.continueExecuting()) { + var3.action.resetTask(); + var2.remove(); + } + } + } + + this.theProfiler.startSection("goalStart"); + var2 = var1.iterator(); + + while(var2.hasNext()) { + var3 = (EntityAITaskEntry)var2.next(); + this.theProfiler.startSection(var3.action.getClass().getSimpleName()); + var3.action.startExecuting(); + this.theProfiler.endSection(); + } + + this.theProfiler.endSection(); + this.theProfiler.startSection("goalTick"); + var2 = this.executingTaskEntries.iterator(); + + while(var2.hasNext()) { + var3 = (EntityAITaskEntry)var2.next(); + var3.action.updateTask(); + } + + this.theProfiler.endSection(); + } + + private boolean canContinue(EntityAITaskEntry var1) { + this.theProfiler.startSection("canContinue"); + boolean var2 = var1.action.continueExecuting(); + this.theProfiler.endSection(); + return var2; + } + + private boolean canUse(EntityAITaskEntry var1) { + this.theProfiler.startSection("canUse"); + Iterator var2 = this.taskEntries.iterator(); + + while(var2.hasNext()) { + EntityAITaskEntry var3 = (EntityAITaskEntry)var2.next(); + if(var3 != var1) { + if(var1.priority >= var3.priority) { + if(this.executingTaskEntries.contains(var3) && !this.areTasksCompatible(var1, var3)) { + this.theProfiler.endSection(); + return false; + } + } else if(this.executingTaskEntries.contains(var3) && !var3.action.isInterruptible()) { + this.theProfiler.endSection(); + return false; + } + } + } + + this.theProfiler.endSection(); + return true; + } + + private boolean areTasksCompatible(EntityAITaskEntry var1, EntityAITaskEntry var2) { + return (var1.action.getMutexBits() & var2.action.getMutexBits()) == 0; + } +} diff --git a/src/net/minecraft/src/EntityAITempt.java b/src/net/minecraft/src/EntityAITempt.java new file mode 100644 index 0000000..92f269e --- /dev/null +++ b/src/net/minecraft/src/EntityAITempt.java @@ -0,0 +1,94 @@ +package net.minecraft.src; + +public class EntityAITempt extends EntityAIBase { + private EntityCreature temptedEntity; + private float field_75282_b; + private double field_75283_c; + private double field_75280_d; + private double field_75281_e; + private double field_75278_f; + private double field_75279_g; + private EntityPlayer temptingPlayer; + private int delayTemptCounter = 0; + private boolean field_75287_j; + private int breedingFood; + private boolean scaredByPlayerMovement; + private boolean field_75286_m; + + public EntityAITempt(EntityCreature var1, float var2, int var3, boolean var4) { + this.temptedEntity = var1; + this.field_75282_b = var2; + this.breedingFood = var3; + this.scaredByPlayerMovement = var4; + this.setMutexBits(3); + } + + public boolean shouldExecute() { + if(this.delayTemptCounter > 0) { + --this.delayTemptCounter; + return false; + } else { + this.temptingPlayer = this.temptedEntity.worldObj.getClosestPlayerToEntity(this.temptedEntity, 10.0D); + if(this.temptingPlayer == null) { + return false; + } else { + ItemStack var1 = this.temptingPlayer.getCurrentEquippedItem(); + return var1 == null ? false : var1.itemID == this.breedingFood; + } + } + } + + public boolean continueExecuting() { + if(this.scaredByPlayerMovement) { + if(this.temptedEntity.getDistanceSqToEntity(this.temptingPlayer) < 36.0D) { + if(this.temptingPlayer.getDistanceSq(this.field_75283_c, this.field_75280_d, this.field_75281_e) > 0.1D * 0.1D) { + return false; + } + + if(Math.abs((double)this.temptingPlayer.rotationPitch - this.field_75278_f) > 5.0D || Math.abs((double)this.temptingPlayer.rotationYaw - this.field_75279_g) > 5.0D) { + return false; + } + } else { + this.field_75283_c = this.temptingPlayer.posX; + this.field_75280_d = this.temptingPlayer.posY; + this.field_75281_e = this.temptingPlayer.posZ; + } + + this.field_75278_f = (double)this.temptingPlayer.rotationPitch; + this.field_75279_g = (double)this.temptingPlayer.rotationYaw; + } + + return this.shouldExecute(); + } + + public void startExecuting() { + this.field_75283_c = this.temptingPlayer.posX; + this.field_75280_d = this.temptingPlayer.posY; + this.field_75281_e = this.temptingPlayer.posZ; + this.field_75287_j = true; + this.field_75286_m = this.temptedEntity.getNavigator().getAvoidsWater(); + this.temptedEntity.getNavigator().setAvoidsWater(false); + } + + public void resetTask() { + this.temptingPlayer = null; + this.temptedEntity.getNavigator().clearPathEntity(); + this.delayTemptCounter = 100; + this.field_75287_j = false; + this.temptedEntity.getNavigator().setAvoidsWater(this.field_75286_m); + } + + public void updateTask() { + this.temptedEntity.getLookHelper().setLookPositionWithEntity(this.temptingPlayer, 30.0F, (float)this.temptedEntity.getVerticalFaceSpeed()); + if(this.temptedEntity.getDistanceSqToEntity(this.temptingPlayer) < 6.25D) { + this.temptedEntity.getNavigator().clearPathEntity(); + } else { + this.temptedEntity.getNavigator().tryMoveToEntityLiving(this.temptingPlayer, this.field_75282_b); + } + + } + + public boolean func_75277_f() { + return this.field_75287_j; + } +} diff --git a/src/net/minecraft/src/EntityAITradePlayer.java b/src/net/minecraft/src/EntityAITradePlayer.java new file mode 100644 index 0000000..29f4279 --- /dev/null +++ b/src/net/minecraft/src/EntityAITradePlayer.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +public class EntityAITradePlayer extends EntityAIBase { + private EntityVillager villager; + + public EntityAITradePlayer(EntityVillager var1) { + this.villager = var1; + this.setMutexBits(5); + } + + 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 var1 = this.villager.getCustomer(); + return var1 == null ? false : (this.villager.getDistanceSqToEntity(var1) > 16.0D ? false : var1.openContainer instanceof Container); + } + } + + public void startExecuting() { + this.villager.getNavigator().clearPathEntity(); + } + + public void resetTask() { + this.villager.setCustomer((EntityPlayer)null); + } +} diff --git a/src/net/minecraft/src/EntityAIVillagerMate.java b/src/net/minecraft/src/EntityAIVillagerMate.java new file mode 100644 index 0000000..ec3ac28 --- /dev/null +++ b/src/net/minecraft/src/EntityAIVillagerMate.java @@ -0,0 +1,87 @@ +package net.minecraft.src; + +public class EntityAIVillagerMate extends EntityAIBase { + private EntityVillager villagerObj; + private EntityVillager mate; + private World worldObj; + private int matingTimeout = 0; + Village villageObj; + + public EntityAIVillagerMate(EntityVillager var1) { + this.villagerObj = var1; + this.worldObj = var1.worldObj; + this.setMutexBits(3); + } + + public boolean shouldExecute() { + if(this.villagerObj.getGrowingAge() != 0) { + return false; + } else if(this.villagerObj.getRNG().nextInt(500) != 0) { + return false; + } else { + this.villageObj = this.worldObj.villageCollectionObj.findNearestVillage(MathHelper.floor_double(this.villagerObj.posX), MathHelper.floor_double(this.villagerObj.posY), MathHelper.floor_double(this.villagerObj.posZ), 0); + if(this.villageObj == null) { + return false; + } else if(!this.checkSufficientDoorsPresentForNewVillager()) { + return false; + } else { + Entity var1 = this.worldObj.findNearestEntityWithinAABB(EntityVillager.class, this.villagerObj.boundingBox.expand(8.0D, 3.0D, 8.0D), this.villagerObj); + if(var1 == null) { + return false; + } else { + this.mate = (EntityVillager)var1; + return this.mate.getGrowingAge() == 0; + } + } + } + } + + public void startExecuting() { + this.matingTimeout = 300; + this.villagerObj.setMating(true); + } + + public void resetTask() { + this.villageObj = null; + this.mate = null; + this.villagerObj.setMating(false); + } + + public boolean continueExecuting() { + return this.matingTimeout >= 0 && this.checkSufficientDoorsPresentForNewVillager() && this.villagerObj.getGrowingAge() == 0; + } + + public void updateTask() { + --this.matingTimeout; + this.villagerObj.getLookHelper().setLookPositionWithEntity(this.mate, 10.0F, 30.0F); + if(this.villagerObj.getDistanceSqToEntity(this.mate) > 2.25D) { + this.villagerObj.getNavigator().tryMoveToEntityLiving(this.mate, 0.25F); + } else if(this.matingTimeout == 0 && this.mate.isMating()) { + this.giveBirth(); + } + + if(this.villagerObj.getRNG().nextInt(35) == 0) { + this.worldObj.setEntityState(this.villagerObj, (byte)12); + } + + } + + private boolean checkSufficientDoorsPresentForNewVillager() { + if(!this.villageObj.isMatingSeason()) { + return false; + } else { + int var1 = (int)((double)((float)this.villageObj.getNumVillageDoors()) * 0.35D); + return this.villageObj.getNumVillagers() < var1; + } + } + + private void giveBirth() { + EntityVillager var1 = this.villagerObj.func_90012_b(this.mate); + this.mate.setGrowingAge(6000); + this.villagerObj.setGrowingAge(6000); + var1.setGrowingAge(-24000); + var1.setLocationAndAngles(this.villagerObj.posX, this.villagerObj.posY, this.villagerObj.posZ, 0.0F, 0.0F); + this.worldObj.spawnEntityInWorld(var1); + this.worldObj.setEntityState(var1, (byte)12); + } +} diff --git a/src/net/minecraft/src/EntityAIWander.java b/src/net/minecraft/src/EntityAIWander.java new file mode 100644 index 0000000..aa28dfa --- /dev/null +++ b/src/net/minecraft/src/EntityAIWander.java @@ -0,0 +1,41 @@ +package net.minecraft.src; + +public class EntityAIWander extends EntityAIBase { + private EntityCreature entity; + private double xPosition; + private double yPosition; + private double zPosition; + private float speed; + + public EntityAIWander(EntityCreature var1, float var2) { + this.entity = var1; + this.speed = var2; + this.setMutexBits(1); + } + + public boolean shouldExecute() { + if(this.entity.getAge() >= 100) { + return false; + } else if(this.entity.getRNG().nextInt(120) != 0) { + return false; + } else { + Vec3 var1 = RandomPositionGenerator.findRandomTarget(this.entity, 10, 7); + if(var1 == null) { + return false; + } else { + this.xPosition = var1.xCoord; + this.yPosition = var1.yCoord; + this.zPosition = var1.zCoord; + return true; + } + } + } + + public boolean continueExecuting() { + return !this.entity.getNavigator().noPath(); + } + + public void startExecuting() { + this.entity.getNavigator().tryMoveToXYZ(this.xPosition, this.yPosition, this.zPosition, this.speed); + } +} diff --git a/src/net/minecraft/src/EntityAIWatchClosest.java b/src/net/minecraft/src/EntityAIWatchClosest.java new file mode 100644 index 0000000..818780b --- /dev/null +++ b/src/net/minecraft/src/EntityAIWatchClosest.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +public class EntityAIWatchClosest extends EntityAIBase { + private EntityLiving theWatcher; + protected Entity closestEntity; + private float field_75333_c; + private int lookTime; + private float field_75331_e; + private Class watchedClass; + + public EntityAIWatchClosest(EntityLiving var1, Class var2, float var3) { + this.theWatcher = var1; + this.watchedClass = var2; + this.field_75333_c = var3; + this.field_75331_e = 0.02F; + this.setMutexBits(2); + } + + public EntityAIWatchClosest(EntityLiving var1, Class var2, float var3, float var4) { + this.theWatcher = var1; + this.watchedClass = var2; + this.field_75333_c = var3; + this.field_75331_e = var4; + this.setMutexBits(2); + } + + public boolean shouldExecute() { + if(this.theWatcher.getRNG().nextFloat() >= this.field_75331_e) { + return false; + } else { + if(this.watchedClass == EntityPlayer.class) { + this.closestEntity = this.theWatcher.worldObj.getClosestPlayerToEntity(this.theWatcher, (double)this.field_75333_c); + } else { + this.closestEntity = this.theWatcher.worldObj.findNearestEntityWithinAABB(this.watchedClass, this.theWatcher.boundingBox.expand((double)this.field_75333_c, 3.0D, (double)this.field_75333_c), this.theWatcher); + } + + return this.closestEntity != null; + } + } + + public boolean continueExecuting() { + return !this.closestEntity.isEntityAlive() ? false : (this.theWatcher.getDistanceSqToEntity(this.closestEntity) > (double)(this.field_75333_c * this.field_75333_c) ? false : this.lookTime > 0); + } + + public void startExecuting() { + this.lookTime = 40 + this.theWatcher.getRNG().nextInt(40); + } + + public void resetTask() { + this.closestEntity = null; + } + + public void updateTask() { + this.theWatcher.getLookHelper().setLookPosition(this.closestEntity.posX, this.closestEntity.posY + (double)this.closestEntity.getEyeHeight(), this.closestEntity.posZ, 10.0F, (float)this.theWatcher.getVerticalFaceSpeed()); + --this.lookTime; + } +} diff --git a/src/net/minecraft/src/EntityAIWatchClosest2.java b/src/net/minecraft/src/EntityAIWatchClosest2.java new file mode 100644 index 0000000..7ba762d --- /dev/null +++ b/src/net/minecraft/src/EntityAIWatchClosest2.java @@ -0,0 +1,8 @@ +package net.minecraft.src; + +public class EntityAIWatchClosest2 extends EntityAIWatchClosest { + public EntityAIWatchClosest2(EntityLiving var1, Class var2, float var3, float var4) { + super(var1, var2, var3, var4); + this.setMutexBits(3); + } +} diff --git a/src/net/minecraft/src/EntityAgeable.java b/src/net/minecraft/src/EntityAgeable.java new file mode 100644 index 0000000..88d27ec --- /dev/null +++ b/src/net/minecraft/src/EntityAgeable.java @@ -0,0 +1,102 @@ +package net.minecraft.src; + +public abstract class EntityAgeable extends EntityCreature { + private float field_98056_d = -1.0F; + private float field_98057_e; + + public EntityAgeable(World var1) { + super(var1); + } + + public abstract EntityAgeable createChild(EntityAgeable var1); + + public boolean interact(EntityPlayer var1) { + ItemStack var2 = var1.inventory.getCurrentItem(); + if(var2 != null && var2.itemID == Item.monsterPlacer.itemID && !this.worldObj.isRemote) { + Class var3 = EntityList.getClassFromID(var2.getItemDamage()); + if(var3 != null && var3.isAssignableFrom(this.getClass())) { + EntityAgeable var4 = this.createChild(this); + if(var4 != null) { + var4.setGrowingAge(-24000); + var4.setLocationAndAngles(this.posX, this.posY, this.posZ, 0.0F, 0.0F); + this.worldObj.spawnEntityInWorld(var4); + if(var2.hasDisplayName()) { + var4.func_94058_c(var2.getDisplayName()); + } + + if(!var1.capabilities.isCreativeMode) { + --var2.stackSize; + if(var2.stackSize <= 0) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, (ItemStack)null); + } + } + } + } + } + + return super.interact(var1); + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(12, new Integer(0)); + } + + public int getGrowingAge() { + return this.dataWatcher.getWatchableObjectInt(12); + } + + public void setGrowingAge(int var1) { + this.dataWatcher.updateObject(12, Integer.valueOf(var1)); + this.func_98054_a(this.isChild()); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setInteger("Age", this.getGrowingAge()); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.setGrowingAge(var1.getInteger("Age")); + } + + public void onLivingUpdate() { + super.onLivingUpdate(); + if(this.worldObj.isRemote) { + this.func_98054_a(this.isChild()); + } else { + int var1 = this.getGrowingAge(); + if(var1 < 0) { + ++var1; + this.setGrowingAge(var1); + } else if(var1 > 0) { + --var1; + this.setGrowingAge(var1); + } + } + + } + + public boolean isChild() { + return this.getGrowingAge() < 0; + } + + public void func_98054_a(boolean var1) { + this.func_98055_j(var1 ? 0.5F : 1.0F); + } + + protected final void setSize(float var1, float var2) { + boolean var3 = this.field_98056_d > 0.0F; + this.field_98056_d = var1; + this.field_98057_e = var2; + if(!var3) { + this.func_98055_j(1.0F); + } + + } + + private void func_98055_j(float var1) { + super.setSize(this.field_98056_d * var1, this.field_98057_e * var1); + } +} diff --git a/src/net/minecraft/src/EntityAmbientCreature.java b/src/net/minecraft/src/EntityAmbientCreature.java new file mode 100644 index 0000000..1cde1c6 --- /dev/null +++ b/src/net/minecraft/src/EntityAmbientCreature.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public abstract class EntityAmbientCreature extends EntityLiving implements IAnimals { + public EntityAmbientCreature(World var1) { + super(var1); + } +} diff --git a/src/net/minecraft/src/EntityAnimal.java b/src/net/minecraft/src/EntityAnimal.java new file mode 100644 index 0000000..f33ec74 --- /dev/null +++ b/src/net/minecraft/src/EntityAnimal.java @@ -0,0 +1,240 @@ +package net.minecraft.src; + +import java.util.List; + +public abstract class EntityAnimal extends EntityAgeable implements IAnimals { + private int inLove; + private int breeding = 0; + + public EntityAnimal(World var1) { + super(var1); + } + + protected void updateAITick() { + if(this.getGrowingAge() != 0) { + this.inLove = 0; + } + + super.updateAITick(); + } + + public void onLivingUpdate() { + super.onLivingUpdate(); + if(this.getGrowingAge() != 0) { + this.inLove = 0; + } + + if(this.inLove > 0) { + --this.inLove; + String var1 = "heart"; + if(this.inLove % 10 == 0) { + double var2 = this.rand.nextGaussian() * 0.02D; + double var4 = this.rand.nextGaussian() * 0.02D; + double var6 = this.rand.nextGaussian() * 0.02D; + this.worldObj.spawnParticle(var1, 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, var2, var4, var6); + } + } else { + this.breeding = 0; + } + + } + + protected void attackEntity(Entity var1, float var2) { + if(var1 instanceof EntityPlayer) { + if(var2 < 3.0F) { + double var3 = var1.posX - this.posX; + double var5 = var1.posZ - this.posZ; + this.rotationYaw = (float)(Math.atan2(var5, var3) * 180.0D / (double)((float)Math.PI)) - 90.0F; + this.hasAttacked = true; + } + + EntityPlayer var7 = (EntityPlayer)var1; + if(var7.getCurrentEquippedItem() == null || !this.isBreedingItem(var7.getCurrentEquippedItem())) { + this.entityToAttack = null; + } + } else if(var1 instanceof EntityAnimal) { + EntityAnimal var8 = (EntityAnimal)var1; + if(this.getGrowingAge() > 0 && var8.getGrowingAge() < 0) { + if((double)var2 < 2.5D) { + this.hasAttacked = true; + } + } else if(this.inLove > 0 && var8.inLove > 0) { + if(var8.entityToAttack == null) { + var8.entityToAttack = this; + } + + if(var8.entityToAttack == this && (double)var2 < 3.5D) { + ++var8.inLove; + ++this.inLove; + ++this.breeding; + if(this.breeding % 4 == 0) { + this.worldObj.spawnParticle("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, 0.0D, 0.0D, 0.0D); + } + + if(this.breeding == 60) { + this.procreate((EntityAnimal)var1); + } + } else { + this.breeding = 0; + } + } else { + this.breeding = 0; + this.entityToAttack = null; + } + } + + } + + private void procreate(EntityAnimal var1) { + EntityAgeable var2 = this.createChild(var1); + if(var2 != null) { + this.setGrowingAge(6000); + var1.setGrowingAge(6000); + this.inLove = 0; + this.breeding = 0; + this.entityToAttack = null; + var1.entityToAttack = null; + var1.breeding = 0; + var1.inLove = 0; + var2.setGrowingAge(-24000); + var2.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + + for(int var3 = 0; var3 < 7; ++var3) { + double var4 = this.rand.nextGaussian() * 0.02D; + double var6 = this.rand.nextGaussian() * 0.02D; + double var8 = this.rand.nextGaussian() * 0.02D; + this.worldObj.spawnParticle("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, var4, var6, var8); + } + + this.worldObj.spawnEntityInWorld(var2); + } + + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else { + this.fleeingTick = 60; + this.entityToAttack = null; + this.inLove = 0; + return super.attackEntityFrom(var1, var2); + } + } + + public float getBlockPathWeight(int var1, int var2, int var3) { + return this.worldObj.getBlockId(var1, var2 - 1, var3) == Block.grass.blockID ? 10.0F : this.worldObj.getLightBrightness(var1, var2, var3) - 0.5F; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setInteger("InLove", this.inLove); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.inLove = var1.getInteger("InLove"); + } + + protected Entity findPlayerToAttack() { + if(this.fleeingTick > 0) { + return null; + } else { + float var1 = 8.0F; + List var2; + int var3; + EntityAnimal var4; + if(this.inLove > 0) { + var2 = this.worldObj.getEntitiesWithinAABB(this.getClass(), this.boundingBox.expand((double)var1, (double)var1, (double)var1)); + + for(var3 = 0; var3 < var2.size(); ++var3) { + var4 = (EntityAnimal)var2.get(var3); + if(var4 != this && var4.inLove > 0) { + return var4; + } + } + } else if(this.getGrowingAge() == 0) { + var2 = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, this.boundingBox.expand((double)var1, (double)var1, (double)var1)); + + for(var3 = 0; var3 < var2.size(); ++var3) { + EntityPlayer var5 = (EntityPlayer)var2.get(var3); + if(var5.getCurrentEquippedItem() != null && this.isBreedingItem(var5.getCurrentEquippedItem())) { + return var5; + } + } + } else if(this.getGrowingAge() > 0) { + var2 = this.worldObj.getEntitiesWithinAABB(this.getClass(), this.boundingBox.expand((double)var1, (double)var1, (double)var1)); + + for(var3 = 0; var3 < var2.size(); ++var3) { + var4 = (EntityAnimal)var2.get(var3); + if(var4 != this && var4.getGrowingAge() < 0) { + return var4; + } + } + } + + return null; + } + } + + public boolean getCanSpawnHere() { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.boundingBox.minY); + int var3 = MathHelper.floor_double(this.posZ); + return this.worldObj.getBlockId(var1, var2 - 1, var3) == Block.grass.blockID && this.worldObj.getFullBlockLightValue(var1, var2, var3) > 8 && super.getCanSpawnHere(); + } + + public int getTalkInterval() { + return 120; + } + + protected boolean canDespawn() { + return false; + } + + protected int getExperiencePoints(EntityPlayer var1) { + return 1 + this.worldObj.rand.nextInt(3); + } + + public boolean isBreedingItem(ItemStack var1) { + return var1.itemID == Item.wheat.itemID; + } + + public boolean interact(EntityPlayer var1) { + ItemStack var2 = var1.inventory.getCurrentItem(); + if(var2 != null && this.isBreedingItem(var2) && this.getGrowingAge() == 0 && this.inLove <= 0) { + if(!var1.capabilities.isCreativeMode) { + --var2.stackSize; + if(var2.stackSize <= 0) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, (ItemStack)null); + } + } + + this.inLove = 600; + this.entityToAttack = null; + + for(int var3 = 0; var3 < 7; ++var3) { + double var4 = this.rand.nextGaussian() * 0.02D; + double var6 = this.rand.nextGaussian() * 0.02D; + double var8 = this.rand.nextGaussian() * 0.02D; + this.worldObj.spawnParticle("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, var4, var6, var8); + } + + return true; + } else { + return super.interact(var1); + } + } + + public boolean isInLove() { + return this.inLove > 0; + } + + public void resetInLove() { + this.inLove = 0; + } + + public boolean canMateWith(EntityAnimal var1) { + return var1 == this ? false : (var1.getClass() != this.getClass() ? false : this.isInLove() && var1.isInLove()); + } +} diff --git a/src/net/minecraft/src/EntityArrow.java b/src/net/minecraft/src/EntityArrow.java new file mode 100644 index 0000000..d2de559 --- /dev/null +++ b/src/net/minecraft/src/EntityArrow.java @@ -0,0 +1,421 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityArrow extends Entity implements IProjectile { + private int xTile = -1; + private int yTile = -1; + private int zTile = -1; + private int inTile = 0; + private int inData = 0; + private boolean inGround = false; + public int canBePickedUp = 0; + public int arrowShake = 0; + public Entity shootingEntity; + private int ticksInGround; + private int ticksInAir = 0; + private double damage = 2.0D; + private int knockbackStrength; + + public EntityArrow(World var1) { + super(var1); + this.renderDistanceWeight = 10.0D; + this.setSize(0.5F, 0.5F); + } + + public EntityArrow(World var1, double var2, double var4, double var6) { + super(var1); + this.renderDistanceWeight = 10.0D; + this.setSize(0.5F, 0.5F); + this.setPosition(var2, var4, var6); + this.yOffset = 0.0F; + } + + public EntityArrow(World var1, EntityLiving var2, EntityLiving var3, float var4, float var5) { + super(var1); + this.renderDistanceWeight = 10.0D; + this.shootingEntity = var2; + if(var2 instanceof EntityPlayer) { + this.canBePickedUp = 1; + } + + this.posY = var2.posY + (double)var2.getEyeHeight() - (double)0.1F; + double var6 = var3.posX - var2.posX; + double var8 = var3.boundingBox.minY + (double)(var3.height / 3.0F) - this.posY; + double var10 = var3.posZ - var2.posZ; + double var12 = (double)MathHelper.sqrt_double(var6 * var6 + var10 * var10); + if(var12 >= 1.0E-7D) { + float var14 = (float)(Math.atan2(var10, var6) * 180.0D / (double)((float)Math.PI)) - 90.0F; + float var15 = (float)(-(Math.atan2(var8, var12) * 180.0D / (double)((float)Math.PI))); + double var16 = var6 / var12; + double var18 = var10 / var12; + this.setLocationAndAngles(var2.posX + var16, this.posY, var2.posZ + var18, var14, var15); + this.yOffset = 0.0F; + float var20 = (float)var12 * 0.2F; + this.setThrowableHeading(var6, var8 + (double)var20, var10, var4, var5); + } + } + + public EntityArrow(World var1, EntityLiving var2, float var3) { + super(var1); + this.renderDistanceWeight = 10.0D; + this.shootingEntity = var2; + if(var2 instanceof EntityPlayer) { + this.canBePickedUp = 1; + } + + this.setSize(0.5F, 0.5F); + this.setLocationAndAngles(var2.posX, var2.posY + (double)var2.getEyeHeight(), var2.posZ, var2.rotationYaw, var2.rotationPitch); + this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.posY -= (double)0.1F; + this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.setPosition(this.posX, this.posY, this.posZ); + this.yOffset = 0.0F; + this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI)); + this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI)); + this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI)); + this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, var3 * 1.5F, 1.0F); + } + + protected void entityInit() { + this.dataWatcher.addObject(16, Byte.valueOf((byte)0)); + } + + public void setThrowableHeading(double var1, double var3, double var5, float var7, float var8) { + float var9 = MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5); + var1 /= (double)var9; + var3 /= (double)var9; + var5 /= (double)var9; + var1 += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * (double)0.0075F * (double)var8; + var3 += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * (double)0.0075F * (double)var8; + var5 += this.rand.nextGaussian() * (double)(this.rand.nextBoolean() ? -1 : 1) * (double)0.0075F * (double)var8; + var1 *= (double)var7; + var3 *= (double)var7; + var5 *= (double)var7; + this.motionX = var1; + this.motionY = var3; + this.motionZ = var5; + float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(var1, var5) * 180.0D / (double)((float)Math.PI)); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(var3, (double)var10) * 180.0D / (double)((float)Math.PI)); + this.ticksInGround = 0; + } + + public void setPositionAndRotation2(double var1, double var3, double var5, float var7, float var8, int var9) { + this.setPosition(var1, var3, var5); + this.setRotation(var7, var8); + } + + public void setVelocity(double var1, double var3, double var5) { + this.motionX = var1; + this.motionY = var3; + this.motionZ = var5; + if(this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) { + float var7 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(var1, var5) * 180.0D / (double)((float)Math.PI)); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(var3, (double)var7) * 180.0D / (double)((float)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; + } + + } + + public void onUpdate() { + super.onUpdate(); + if(this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) { + float var1 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI)); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var1) * 180.0D / (double)((float)Math.PI)); + } + + int var16 = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); + if(var16 > 0) { + Block.blocksList[var16].setBlockBoundsBasedOnState(this.worldObj, this.xTile, this.yTile, this.zTile); + AxisAlignedBB var2 = Block.blocksList[var16].getCollisionBoundingBoxFromPool(this.worldObj, this.xTile, this.yTile, this.zTile); + if(var2 != null && var2.isVecInside(this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ))) { + this.inGround = true; + } + } + + if(this.arrowShake > 0) { + --this.arrowShake; + } + + if(this.inGround) { + int var18 = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); + int var19 = this.worldObj.getBlockMetadata(this.xTile, this.yTile, this.zTile); + if(var18 == this.inTile && var19 == this.inData) { + ++this.ticksInGround; + if(this.ticksInGround == 1200) { + this.setDead(); + } + + } else { + 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; + Vec3 var17 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ); + Vec3 var3 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + MovingObjectPosition var4 = this.worldObj.rayTraceBlocks_do_do(var17, var3, false, true); + var17 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ); + var3 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + if(var4 != null) { + var3 = this.worldObj.getWorldVec3Pool().getVecFromPool(var4.hitVec.xCoord, var4.hitVec.yCoord, var4.hitVec.zCoord); + } + + Entity var5 = null; + List var6 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); + double var7 = 0.0D; + + int var9; + float var11; + for(var9 = 0; var9 < var6.size(); ++var9) { + Entity var10 = (Entity)var6.get(var9); + if(var10.canBeCollidedWith() && (var10 != this.shootingEntity || this.ticksInAir >= 5)) { + var11 = 0.3F; + AxisAlignedBB var12 = var10.boundingBox.expand((double)var11, (double)var11, (double)var11); + MovingObjectPosition var13 = var12.calculateIntercept(var17, var3); + if(var13 != null) { + double var14 = var17.distanceTo(var13.hitVec); + if(var14 < var7 || var7 == 0.0D) { + var5 = var10; + var7 = var14; + } + } + } + } + + if(var5 != null) { + var4 = new MovingObjectPosition(var5); + } + + if(var4 != null && var4.entityHit != null && var4.entityHit instanceof EntityPlayer) { + EntityPlayer var20 = (EntityPlayer)var4.entityHit; + if(var20.capabilities.disableDamage || this.shootingEntity instanceof EntityPlayer && !((EntityPlayer)this.shootingEntity).func_96122_a(var20)) { + var4 = null; + } + } + + float var21; + float var27; + if(var4 != null) { + if(var4.entityHit != null) { + var21 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + int var22 = MathHelper.ceiling_double_int((double)var21 * this.damage); + if(this.getIsCritical()) { + var22 += this.rand.nextInt(var22 / 2 + 2); + } + + DamageSource var23 = null; + if(this.shootingEntity == null) { + var23 = DamageSource.causeArrowDamage(this, this); + } else { + var23 = DamageSource.causeArrowDamage(this, this.shootingEntity); + } + + if(this.isBurning() && !(var4.entityHit instanceof EntityEnderman)) { + var4.entityHit.setFire(5); + } + + if(var4.entityHit.attackEntityFrom(var23, var22)) { + if(var4.entityHit instanceof EntityLiving) { + EntityLiving var25 = (EntityLiving)var4.entityHit; + if(!this.worldObj.isRemote) { + var25.setArrowCountInEntity(var25.getArrowCountInEntity() + 1); + } + + if(this.knockbackStrength > 0) { + var27 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + if(var27 > 0.0F) { + var4.entityHit.addVelocity(this.motionX * (double)this.knockbackStrength * (double)0.6F / (double)var27, 0.1D, this.motionZ * (double)this.knockbackStrength * (double)0.6F / (double)var27); + } + } + + if(this.shootingEntity != null) { + EnchantmentThorns.func_92096_a(this.shootingEntity, var25, this.rand); + } + + if(this.shootingEntity != null && var4.entityHit != this.shootingEntity && var4.entityHit instanceof EntityPlayer && this.shootingEntity instanceof EntityPlayerMP) { + ((EntityPlayerMP)this.shootingEntity).playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(6, 0)); + } + } + + this.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + if(!(var4.entityHit instanceof EntityEnderman)) { + this.setDead(); + } + } else { + this.motionX *= (double)-0.1F; + this.motionY *= (double)-0.1F; + this.motionZ *= (double)-0.1F; + this.rotationYaw += 180.0F; + this.prevRotationYaw += 180.0F; + this.ticksInAir = 0; + } + } else { + this.xTile = var4.blockX; + this.yTile = var4.blockY; + this.zTile = var4.blockZ; + this.inTile = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); + this.inData = this.worldObj.getBlockMetadata(this.xTile, this.yTile, this.zTile); + this.motionX = (double)((float)(var4.hitVec.xCoord - this.posX)); + this.motionY = (double)((float)(var4.hitVec.yCoord - this.posY)); + this.motionZ = (double)((float)(var4.hitVec.zCoord - this.posZ)); + var21 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / (double)var21 * (double)0.05F; + this.posY -= this.motionY / (double)var21 * (double)0.05F; + this.posZ -= this.motionZ / (double)var21 * (double)0.05F; + this.playSound("random.bowhit", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.inGround = true; + this.arrowShake = 7; + this.setIsCritical(false); + if(this.inTile != 0) { + Block.blocksList[this.inTile].onEntityCollidedWithBlock(this.worldObj, this.xTile, this.yTile, this.zTile, this); + } + } + } + + if(this.getIsCritical()) { + for(var9 = 0; var9 < 4; ++var9) { + this.worldObj.spawnParticle("crit", this.posX + this.motionX * (double)var9 / 4.0D, this.posY + this.motionY * (double)var9 / 4.0D, this.posZ + this.motionZ * (double)var9 / 4.0D, -this.motionX, -this.motionY + 0.2D, -this.motionZ); + } + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + var21 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI)); + + for(this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var21) * 180.0D / (double)((float)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 var24 = 0.99F; + var11 = 0.05F; + if(this.isInWater()) { + for(int var26 = 0; var26 < 4; ++var26) { + var27 = 0.25F; + this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)var27, this.posY - this.motionY * (double)var27, this.posZ - this.motionZ * (double)var27, this.motionX, this.motionY, this.motionZ); + } + + var24 = 0.8F; + } + + this.motionX *= (double)var24; + this.motionY *= (double)var24; + this.motionZ *= (double)var24; + this.motionY -= (double)var11; + this.setPosition(this.posX, this.posY, this.posZ); + this.doBlockCollisions(); + } + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("xTile", (short)this.xTile); + var1.setShort("yTile", (short)this.yTile); + var1.setShort("zTile", (short)this.zTile); + var1.setByte("inTile", (byte)this.inTile); + var1.setByte("inData", (byte)this.inData); + var1.setByte("shake", (byte)this.arrowShake); + var1.setByte("inGround", (byte)(this.inGround ? 1 : 0)); + var1.setByte("pickup", (byte)this.canBePickedUp); + var1.setDouble("damage", this.damage); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.xTile = var1.getShort("xTile"); + this.yTile = var1.getShort("yTile"); + this.zTile = var1.getShort("zTile"); + this.inTile = var1.getByte("inTile") & 255; + this.inData = var1.getByte("inData") & 255; + this.arrowShake = var1.getByte("shake") & 255; + this.inGround = var1.getByte("inGround") == 1; + if(var1.hasKey("damage")) { + this.damage = var1.getDouble("damage"); + } + + if(var1.hasKey("pickup")) { + this.canBePickedUp = var1.getByte("pickup"); + } else if(var1.hasKey("player")) { + this.canBePickedUp = var1.getBoolean("player") ? 1 : 0; + } + + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(!this.worldObj.isRemote && this.inGround && this.arrowShake <= 0) { + boolean var2 = this.canBePickedUp == 1 || this.canBePickedUp == 2 && var1.capabilities.isCreativeMode; + if(this.canBePickedUp == 1 && !var1.inventory.addItemStackToInventory(new ItemStack(Item.arrow, 1))) { + var2 = false; + } + + if(var2) { + this.playSound("random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + var1.onItemPickup(this, 1); + this.setDead(); + } + + } + } + + protected boolean canTriggerWalking() { + return false; + } + + public float getShadowSize() { + return 0.0F; + } + + public void setDamage(double var1) { + this.damage = var1; + } + + public double getDamage() { + return this.damage; + } + + public void setKnockbackStrength(int var1) { + this.knockbackStrength = var1; + } + + public boolean canAttackWithItem() { + return false; + } + + public void setIsCritical(boolean var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(16); + if(var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 | 1))); + } else { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 & -2))); + } + + } + + public boolean getIsCritical() { + byte var1 = this.dataWatcher.getWatchableObjectByte(16); + return (var1 & 1) != 0; + } +} diff --git a/src/net/minecraft/src/EntityAuraFX.java b/src/net/minecraft/src/EntityAuraFX.java new file mode 100644 index 0000000..102841b --- /dev/null +++ b/src/net/minecraft/src/EntityAuraFX.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +public class EntityAuraFX extends EntityFX { + public EntityAuraFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1, var2, var4, var6, var8, var10, var12); + float var14 = this.rand.nextFloat() * 0.1F + 0.2F; + this.particleRed = var14; + this.particleGreen = var14; + this.particleBlue = var14; + this.setParticleTextureIndex(0); + this.setSize(0.02F, 0.02F); + this.particleScale *= this.rand.nextFloat() * 0.6F + 0.5F; + this.motionX *= (double)0.02F; + this.motionY *= (double)0.02F; + this.motionZ *= (double)0.02F; + this.particleMaxAge = (int)(20.0D / (Math.random() * 0.8D + 0.2D)); + this.noClip = true; + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.99D; + this.motionY *= 0.99D; + this.motionZ *= 0.99D; + if(this.particleMaxAge-- <= 0) { + this.setDead(); + } + + } +} diff --git a/src/net/minecraft/src/EntityBat.java b/src/net/minecraft/src/EntityBat.java new file mode 100644 index 0000000..d46c129 --- /dev/null +++ b/src/net/minecraft/src/EntityBat.java @@ -0,0 +1,185 @@ +package net.minecraft.src; + +import java.util.Calendar; + +public class EntityBat extends EntityAmbientCreature { + private ChunkCoordinates currentFlightTarget; + + public EntityBat(World var1) { + super(var1); + this.texture = "/mob/bat.png"; + this.setSize(0.5F, 0.9F); + this.setIsBatHanging(true); + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, new Byte((byte)0)); + } + + protected float getSoundVolume() { + return 0.1F; + } + + protected float getSoundPitch() { + return super.getSoundPitch() * 0.95F; + } + + protected String getLivingSound() { + return this.getIsBatHanging() && this.rand.nextInt(4) != 0 ? null : "mob.bat.idle"; + } + + protected String getHurtSound() { + return "mob.bat.hurt"; + } + + protected String getDeathSound() { + return "mob.bat.death"; + } + + public boolean canBePushed() { + return false; + } + + protected void collideWithEntity(Entity var1) { + } + + protected void func_85033_bc() { + } + + public int getMaxHealth() { + return 6; + } + + public boolean getIsBatHanging() { + return (this.dataWatcher.getWatchableObjectByte(16) & 1) != 0; + } + + public void setIsBatHanging(boolean var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(16); + if(var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 | 1))); + } else { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 & -2))); + } + + } + + protected boolean isAIEnabled() { + return true; + } + + public void onUpdate() { + super.onUpdate(); + if(this.getIsBatHanging()) { + this.motionX = this.motionY = this.motionZ = 0.0D; + this.posY = (double)MathHelper.floor_double(this.posY) + 1.0D - (double)this.height; + } else { + this.motionY *= (double)0.6F; + } + + } + + protected void updateAITasks() { + super.updateAITasks(); + if(this.getIsBatHanging()) { + if(!this.worldObj.isBlockNormalCube(MathHelper.floor_double(this.posX), (int)this.posY + 1, MathHelper.floor_double(this.posZ))) { + this.setIsBatHanging(false); + this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1015, (int)this.posX, (int)this.posY, (int)this.posZ, 0); + } else { + if(this.rand.nextInt(200) == 0) { + this.rotationYawHead = (float)this.rand.nextInt(360); + } + + if(this.worldObj.getClosestPlayerToEntity(this, 4.0D) != null) { + this.setIsBatHanging(false); + this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1015, (int)this.posX, (int)this.posY, (int)this.posZ, 0); + } + } + } else { + if(this.currentFlightTarget != null && (!this.worldObj.isAirBlock(this.currentFlightTarget.posX, this.currentFlightTarget.posY, this.currentFlightTarget.posZ) || this.currentFlightTarget.posY < 1)) { + this.currentFlightTarget = null; + } + + if(this.currentFlightTarget == null || this.rand.nextInt(30) == 0 || this.currentFlightTarget.getDistanceSquared((int)this.posX, (int)this.posY, (int)this.posZ) < 4.0F) { + this.currentFlightTarget = new ChunkCoordinates((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 var1 = (double)this.currentFlightTarget.posX + 0.5D - this.posX; + double var3 = (double)this.currentFlightTarget.posY + 0.1D - this.posY; + double var5 = (double)this.currentFlightTarget.posZ + 0.5D - this.posZ; + this.motionX += (Math.signum(var1) * 0.5D - this.motionX) * (double)0.1F; + this.motionY += (Math.signum(var3) * (double)0.7F - this.motionY) * (double)0.1F; + this.motionZ += (Math.signum(var5) * 0.5D - this.motionZ) * (double)0.1F; + float var7 = (float)(Math.atan2(this.motionZ, this.motionX) * 180.0D / (double)((float)Math.PI)) - 90.0F; + float var8 = MathHelper.wrapAngleTo180_float(var7 - this.rotationYaw); + this.moveForward = 0.5F; + this.rotationYaw += var8; + if(this.rand.nextInt(100) == 0 && this.worldObj.isBlockNormalCube(MathHelper.floor_double(this.posX), (int)this.posY + 1, MathHelper.floor_double(this.posZ))) { + this.setIsBatHanging(true); + } + } + + } + + protected boolean canTriggerWalking() { + return false; + } + + protected void fall(float var1) { + } + + protected void updateFallState(double var1, boolean var3) { + } + + public boolean doesEntityNotTriggerPressurePlate() { + return true; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else { + if(!this.worldObj.isRemote && this.getIsBatHanging()) { + this.setIsBatHanging(false); + } + + return super.attackEntityFrom(var1, var2); + } + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.dataWatcher.updateObject(16, Byte.valueOf(var1.getByte("BatFlags"))); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setByte("BatFlags", this.dataWatcher.getWatchableObjectByte(16)); + } + + public boolean getCanSpawnHere() { + int var1 = MathHelper.floor_double(this.boundingBox.minY); + if(var1 >= 63) { + return false; + } else { + int var2 = MathHelper.floor_double(this.posX); + int var3 = MathHelper.floor_double(this.posZ); + int var4 = this.worldObj.getBlockLightValue(var2, var1, var3); + byte var5 = 4; + Calendar var6 = this.worldObj.getCurrentDate(); + if((var6.get(2) + 1 != 10 || var6.get(5) < 20) && (var6.get(2) + 1 != 11 || var6.get(5) > 3)) { + if(this.rand.nextBoolean()) { + return false; + } + } else { + var5 = 7; + } + + return var4 > this.rand.nextInt(var5) ? false : super.getCanSpawnHere(); + } + } + + public void initCreature() { + } +} diff --git a/src/net/minecraft/src/EntityBlaze.java b/src/net/minecraft/src/EntityBlaze.java new file mode 100644 index 0000000..9da41f1 --- /dev/null +++ b/src/net/minecraft/src/EntityBlaze.java @@ -0,0 +1,159 @@ +package net.minecraft.src; + +public class EntityBlaze extends EntityMob { + private float heightOffset = 0.5F; + private int heightOffsetUpdateTime; + private int field_70846_g; + + public EntityBlaze(World var1) { + super(var1); + this.texture = "/mob/fire.png"; + this.isImmuneToFire = true; + this.experienceValue = 10; + } + + public int getMaxHealth() { + return 20; + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, new Byte((byte)0)); + } + + protected String getLivingSound() { + return "mob.blaze.breathe"; + } + + protected String getHurtSound() { + return "mob.blaze.hit"; + } + + protected String getDeathSound() { + return "mob.blaze.death"; + } + + public int getBrightnessForRender(float var1) { + return 15728880; + } + + public float getBrightness(float var1) { + return 1.0F; + } + + public void onLivingUpdate() { + if(!this.worldObj.isRemote) { + if(this.isWet()) { + this.attackEntityFrom(DamageSource.drown, 1); + } + + --this.heightOffsetUpdateTime; + if(this.heightOffsetUpdateTime <= 0) { + this.heightOffsetUpdateTime = 100; + this.heightOffset = 0.5F + (float)this.rand.nextGaussian() * 3.0F; + } + + if(this.getEntityToAttack() != null && this.getEntityToAttack().posY + (double)this.getEntityToAttack().getEyeHeight() > this.posY + (double)this.getEyeHeight() + (double)this.heightOffset) { + this.motionY += ((double)0.3F - this.motionY) * (double)0.3F; + } + } + + if(this.rand.nextInt(24) == 0) { + this.worldObj.playSoundEffect(this.posX + 0.5D, this.posY + 0.5D, this.posZ + 0.5D, "fire.fire", 1.0F + this.rand.nextFloat(), this.rand.nextFloat() * 0.7F + 0.3F); + } + + if(!this.onGround && this.motionY < 0.0D) { + this.motionY *= 0.6D; + } + + for(int var1 = 0; var1 < 2; ++var1) { + this.worldObj.spawnParticle("largesmoke", 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 attackEntity(Entity var1, float var2) { + if(this.attackTime <= 0 && var2 < 2.0F && var1.boundingBox.maxY > this.boundingBox.minY && var1.boundingBox.minY < this.boundingBox.maxY) { + this.attackTime = 20; + this.attackEntityAsMob(var1); + } else if(var2 < 30.0F) { + double var3 = var1.posX - this.posX; + double var5 = var1.boundingBox.minY + (double)(var1.height / 2.0F) - (this.posY + (double)(this.height / 2.0F)); + double var7 = var1.posZ - this.posZ; + if(this.attackTime == 0) { + ++this.field_70846_g; + if(this.field_70846_g == 1) { + this.attackTime = 60; + this.func_70844_e(true); + } else if(this.field_70846_g <= 4) { + this.attackTime = 6; + } else { + this.attackTime = 100; + this.field_70846_g = 0; + this.func_70844_e(false); + } + + if(this.field_70846_g > 1) { + float var9 = MathHelper.sqrt_float(var2) * 0.5F; + this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1009, (int)this.posX, (int)this.posY, (int)this.posZ, 0); + + for(int var10 = 0; var10 < 1; ++var10) { + EntitySmallFireball var11 = new EntitySmallFireball(this.worldObj, this, var3 + this.rand.nextGaussian() * (double)var9, var5, var7 + this.rand.nextGaussian() * (double)var9); + var11.posY = this.posY + (double)(this.height / 2.0F) + 0.5D; + this.worldObj.spawnEntityInWorld(var11); + } + } + } + + this.rotationYaw = (float)(Math.atan2(var7, var3) * 180.0D / (double)((float)Math.PI)) - 90.0F; + this.hasAttacked = true; + } + + } + + protected void fall(float var1) { + } + + protected int getDropItemId() { + return Item.blazeRod.itemID; + } + + public boolean isBurning() { + return this.func_70845_n(); + } + + protected void dropFewItems(boolean var1, int var2) { + if(var1) { + int var3 = this.rand.nextInt(2 + var2); + + for(int var4 = 0; var4 < var3; ++var4) { + this.dropItem(Item.blazeRod.itemID, 1); + } + } + + } + + public boolean func_70845_n() { + return (this.dataWatcher.getWatchableObjectByte(16) & 1) != 0; + } + + public void func_70844_e(boolean var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(16); + if(var1) { + var2 = (byte)(var2 | 1); + } else { + var2 &= -2; + } + + this.dataWatcher.updateObject(16, Byte.valueOf(var2)); + } + + protected boolean isValidLightLevel() { + return true; + } + + public int getAttackStrength(Entity var1) { + return 6; + } +} diff --git a/src/net/minecraft/src/EntityBoat.java b/src/net/minecraft/src/EntityBoat.java new file mode 100644 index 0000000..2840b1d --- /dev/null +++ b/src/net/minecraft/src/EntityBoat.java @@ -0,0 +1,384 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityBoat extends Entity { + private boolean field_70279_a; + private double speedMultiplier; + private int boatPosRotationIncrements; + private double boatX; + private double boatY; + private double boatZ; + private double boatYaw; + private double boatPitch; + private double velocityX; + private double velocityY; + private double velocityZ; + + public EntityBoat(World var1) { + super(var1); + this.field_70279_a = true; + this.speedMultiplier = 0.07D; + this.preventEntitySpawning = true; + this.setSize(1.5F, 0.6F); + this.yOffset = this.height / 2.0F; + } + + protected boolean canTriggerWalking() { + return false; + } + + protected void entityInit() { + this.dataWatcher.addObject(17, new Integer(0)); + this.dataWatcher.addObject(18, new Integer(1)); + this.dataWatcher.addObject(19, new Integer(0)); + } + + public AxisAlignedBB getCollisionBox(Entity var1) { + return var1.boundingBox; + } + + public AxisAlignedBB getBoundingBox() { + return this.boundingBox; + } + + public boolean canBePushed() { + return true; + } + + public EntityBoat(World var1, double var2, double var4, double var6) { + this(var1); + this.setPosition(var2, var4 + (double)this.yOffset, var6); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.prevPosX = var2; + this.prevPosY = var4; + this.prevPosZ = var6; + } + + public double getMountedYOffset() { + return (double)this.height * 0.0D - (double)0.3F; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else if(!this.worldObj.isRemote && !this.isDead) { + this.setForwardDirection(-this.getForwardDirection()); + this.setTimeSinceHit(10); + this.setDamageTaken(this.getDamageTaken() + var2 * 10); + this.setBeenAttacked(); + boolean var3 = var1.getEntity() instanceof EntityPlayer && ((EntityPlayer)var1.getEntity()).capabilities.isCreativeMode; + if(var3 || this.getDamageTaken() > 40) { + if(this.riddenByEntity != null) { + this.riddenByEntity.mountEntity(this); + } + + if(!var3) { + this.dropItemWithOffset(Item.boat.itemID, 1, 0.0F); + } + + this.setDead(); + } + + return true; + } else { + return true; + } + } + + public void performHurtAnimation() { + this.setForwardDirection(-this.getForwardDirection()); + this.setTimeSinceHit(10); + this.setDamageTaken(this.getDamageTaken() * 11); + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public void setPositionAndRotation2(double var1, double var3, double var5, float var7, float var8, int var9) { + if(this.field_70279_a) { + this.boatPosRotationIncrements = var9 + 5; + } else { + double var10 = var1 - this.posX; + double var12 = var3 - this.posY; + double var14 = var5 - this.posZ; + double var16 = var10 * var10 + var12 * var12 + var14 * var14; + if(var16 <= 1.0D) { + return; + } + + this.boatPosRotationIncrements = 3; + } + + this.boatX = var1; + this.boatY = var3; + this.boatZ = var5; + this.boatYaw = (double)var7; + this.boatPitch = (double)var8; + this.motionX = this.velocityX; + this.motionY = this.velocityY; + this.motionZ = this.velocityZ; + } + + public void setVelocity(double var1, double var3, double var5) { + this.velocityX = this.motionX = var1; + this.velocityY = this.motionY = var3; + this.velocityZ = this.motionZ = var5; + } + + public void onUpdate() { + super.onUpdate(); + if(this.getTimeSinceHit() > 0) { + this.setTimeSinceHit(this.getTimeSinceHit() - 1); + } + + if(this.getDamageTaken() > 0) { + this.setDamageTaken(this.getDamageTaken() - 1); + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + byte var1 = 5; + double var2 = 0.0D; + + for(int var4 = 0; var4 < var1; ++var4) { + double var5 = this.boundingBox.minY + (this.boundingBox.maxY - this.boundingBox.minY) * (double)(var4 + 0) / (double)var1 - 0.125D; + double var7 = this.boundingBox.minY + (this.boundingBox.maxY - this.boundingBox.minY) * (double)(var4 + 1) / (double)var1 - 0.125D; + AxisAlignedBB var9 = AxisAlignedBB.getAABBPool().getAABB(this.boundingBox.minX, var5, this.boundingBox.minZ, this.boundingBox.maxX, var7, this.boundingBox.maxZ); + if(this.worldObj.isAABBInMaterial(var9, Material.water)) { + var2 += 1.0D / (double)var1; + } + } + + double var23 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + double var6; + double var8; + if(var23 > 0.26249999999999996D) { + var6 = Math.cos((double)this.rotationYaw * Math.PI / 180.0D); + var8 = Math.sin((double)this.rotationYaw * Math.PI / 180.0D); + + for(int var10 = 0; (double)var10 < 1.0D + var23 * 60.0D; ++var10) { + double var11 = (double)(this.rand.nextFloat() * 2.0F - 1.0F); + double var13 = (double)(this.rand.nextInt(2) * 2 - 1) * 0.7D; + double var15; + double var17; + if(this.rand.nextBoolean()) { + var15 = this.posX - var6 * var11 * 0.8D + var8 * var13; + var17 = this.posZ - var8 * var11 * 0.8D - var6 * var13; + this.worldObj.spawnParticle("splash", var15, this.posY - 0.125D, var17, this.motionX, this.motionY, this.motionZ); + } else { + var15 = this.posX + var6 + var8 * var11 * 0.7D; + var17 = this.posZ + var8 - var6 * var11 * 0.7D; + this.worldObj.spawnParticle("splash", var15, this.posY - 0.125D, var17, this.motionX, this.motionY, this.motionZ); + } + } + } + + double var12; + double var25; + if(this.worldObj.isRemote && this.field_70279_a) { + if(this.boatPosRotationIncrements > 0) { + var6 = this.posX + (this.boatX - this.posX) / (double)this.boatPosRotationIncrements; + var8 = this.posY + (this.boatY - this.posY) / (double)this.boatPosRotationIncrements; + var25 = this.posZ + (this.boatZ - this.posZ) / (double)this.boatPosRotationIncrements; + var12 = MathHelper.wrapAngleTo180_double(this.boatYaw - (double)this.rotationYaw); + this.rotationYaw = (float)((double)this.rotationYaw + var12 / (double)this.boatPosRotationIncrements); + this.rotationPitch = (float)((double)this.rotationPitch + (this.boatPitch - (double)this.rotationPitch) / (double)this.boatPosRotationIncrements); + --this.boatPosRotationIncrements; + this.setPosition(var6, var8, var25); + this.setRotation(this.rotationYaw, this.rotationPitch); + } else { + var6 = this.posX + this.motionX; + var8 = this.posY + this.motionY; + var25 = this.posZ + this.motionZ; + this.setPosition(var6, var8, var25); + if(this.onGround) { + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + } + + this.motionX *= (double)0.99F; + this.motionY *= (double)0.95F; + this.motionZ *= (double)0.99F; + } + + } else { + if(var2 < 1.0D) { + var6 = var2 * 2.0D - 1.0D; + this.motionY += (double)0.04F * var6; + } else { + if(this.motionY < 0.0D) { + this.motionY /= 2.0D; + } + + this.motionY += (double)0.007F; + } + + if(this.riddenByEntity != null) { + this.motionX += this.riddenByEntity.motionX * this.speedMultiplier; + this.motionZ += this.riddenByEntity.motionZ * this.speedMultiplier; + } + + var6 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + if(var6 > 0.35D) { + var8 = 0.35D / var6; + this.motionX *= var8; + this.motionZ *= var8; + var6 = 0.35D; + } + + if(var6 > var23 && this.speedMultiplier < 0.35D) { + this.speedMultiplier += (0.35D - this.speedMultiplier) / 35.0D; + if(this.speedMultiplier > 0.35D) { + this.speedMultiplier = 0.35D; + } + } else { + this.speedMultiplier -= (this.speedMultiplier - 0.07D) / 35.0D; + if(this.speedMultiplier < 0.07D) { + this.speedMultiplier = 0.07D; + } + } + + if(this.onGround) { + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + if(this.isCollidedHorizontally && var23 > 0.2D) { + if(!this.worldObj.isRemote && !this.isDead) { + this.setDead(); + + int var24; + for(var24 = 0; var24 < 3; ++var24) { + this.dropItemWithOffset(Block.planks.blockID, 1, 0.0F); + } + + for(var24 = 0; var24 < 2; ++var24) { + this.dropItemWithOffset(Item.stick.itemID, 1, 0.0F); + } + } + } else { + this.motionX *= (double)0.99F; + this.motionY *= (double)0.95F; + this.motionZ *= (double)0.99F; + } + + this.rotationPitch = 0.0F; + var8 = (double)this.rotationYaw; + var25 = this.prevPosX - this.posX; + var12 = this.prevPosZ - this.posZ; + if(var25 * var25 + var12 * var12 > 0.001D) { + var8 = (double)((float)(Math.atan2(var12, var25) * 180.0D / Math.PI)); + } + + double var14 = MathHelper.wrapAngleTo180_double(var8 - (double)this.rotationYaw); + if(var14 > 20.0D) { + var14 = 20.0D; + } + + if(var14 < -20.0D) { + var14 = -20.0D; + } + + this.rotationYaw = (float)((double)this.rotationYaw + var14); + this.setRotation(this.rotationYaw, this.rotationPitch); + if(!this.worldObj.isRemote) { + List var16 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand((double)0.2F, 0.0D, (double)0.2F)); + int var26; + if(var16 != null && !var16.isEmpty()) { + for(var26 = 0; var26 < var16.size(); ++var26) { + Entity var18 = (Entity)var16.get(var26); + if(var18 != this.riddenByEntity && var18.canBePushed() && var18 instanceof EntityBoat) { + var18.applyEntityCollision(this); + } + } + } + + for(var26 = 0; var26 < 4; ++var26) { + int var27 = MathHelper.floor_double(this.posX + ((double)(var26 % 2) - 0.5D) * 0.8D); + int var19 = MathHelper.floor_double(this.posZ + ((double)(var26 / 2) - 0.5D) * 0.8D); + + for(int var20 = 0; var20 < 2; ++var20) { + int var21 = MathHelper.floor_double(this.posY) + var20; + int var22 = this.worldObj.getBlockId(var27, var21, var19); + if(var22 == Block.snow.blockID) { + this.worldObj.setBlockToAir(var27, var21, var19); + } else if(var22 == Block.waterlily.blockID) { + this.worldObj.destroyBlock(var27, var21, var19, true); + } + } + } + + if(this.riddenByEntity != null && this.riddenByEntity.isDead) { + this.riddenByEntity = null; + } + + } + } + } + + public void updateRiderPosition() { + if(this.riddenByEntity != null) { + double var1 = Math.cos((double)this.rotationYaw * Math.PI / 180.0D) * 0.4D; + double var3 = Math.sin((double)this.rotationYaw * Math.PI / 180.0D) * 0.4D; + this.riddenByEntity.setPosition(this.posX + var1, this.posY + this.getMountedYOffset() + this.riddenByEntity.getYOffset(), this.posZ + var3); + } + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + } + + public float getShadowSize() { + return 0.0F; + } + + public boolean interact(EntityPlayer var1) { + if(this.riddenByEntity != null && this.riddenByEntity instanceof EntityPlayer && this.riddenByEntity != var1) { + return true; + } else { + if(!this.worldObj.isRemote) { + var1.mountEntity(this); + } + + return true; + } + } + + public void setDamageTaken(int var1) { + this.dataWatcher.updateObject(19, Integer.valueOf(var1)); + } + + public int getDamageTaken() { + return this.dataWatcher.getWatchableObjectInt(19); + } + + public void setTimeSinceHit(int var1) { + this.dataWatcher.updateObject(17, Integer.valueOf(var1)); + } + + public int getTimeSinceHit() { + return this.dataWatcher.getWatchableObjectInt(17); + } + + public void setForwardDirection(int var1) { + this.dataWatcher.updateObject(18, Integer.valueOf(var1)); + } + + public int getForwardDirection() { + return this.dataWatcher.getWatchableObjectInt(18); + } + + public void func_70270_d(boolean var1) { + this.field_70279_a = var1; + } +} diff --git a/src/net/minecraft/src/EntityBodyHelper.java b/src/net/minecraft/src/EntityBodyHelper.java new file mode 100644 index 0000000..05cd81d --- /dev/null +++ b/src/net/minecraft/src/EntityBodyHelper.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +public class EntityBodyHelper { + private EntityLiving theLiving; + private int field_75666_b = 0; + private float field_75667_c = 0.0F; + + public EntityBodyHelper(EntityLiving var1) { + this.theLiving = var1; + } + + public void func_75664_a() { + double var1 = this.theLiving.posX - this.theLiving.prevPosX; + double var3 = this.theLiving.posZ - this.theLiving.prevPosZ; + if(var1 * var1 + var3 * var3 > (double)2.5000003E-7F) { + this.theLiving.renderYawOffset = this.theLiving.rotationYaw; + this.theLiving.rotationYawHead = this.func_75665_a(this.theLiving.renderYawOffset, this.theLiving.rotationYawHead, 75.0F); + this.field_75667_c = this.theLiving.rotationYawHead; + this.field_75666_b = 0; + } else { + float var5 = 75.0F; + if(Math.abs(this.theLiving.rotationYawHead - this.field_75667_c) > 15.0F) { + this.field_75666_b = 0; + this.field_75667_c = this.theLiving.rotationYawHead; + } else { + ++this.field_75666_b; + if(this.field_75666_b > 10) { + var5 = Math.max(1.0F - (float)(this.field_75666_b - 10) / 10.0F, 0.0F) * 75.0F; + } + } + + this.theLiving.renderYawOffset = this.func_75665_a(this.theLiving.rotationYawHead, this.theLiving.renderYawOffset, var5); + } + } + + private float func_75665_a(float var1, float var2, float var3) { + float var4 = MathHelper.wrapAngleTo180_float(var1 - var2); + if(var4 < -var3) { + var4 = -var3; + } + + if(var4 >= var3) { + var4 = var3; + } + + return var1 - var4; + } +} diff --git a/src/net/minecraft/src/EntityBreakingFX.java b/src/net/minecraft/src/EntityBreakingFX.java new file mode 100644 index 0000000..64a526c --- /dev/null +++ b/src/net/minecraft/src/EntityBreakingFX.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +public class EntityBreakingFX extends EntityFX { + public EntityBreakingFX(World var1, double var2, double var4, double var6, Item var8, RenderEngine var9) { + super(var1, var2, var4, var6, 0.0D, 0.0D, 0.0D); + this.setParticleIcon(var9, var8.getIconFromDamage(0)); + this.particleRed = this.particleGreen = this.particleBlue = 1.0F; + this.particleGravity = Block.blockSnow.blockParticleGravity; + this.particleScale /= 2.0F; + } + + public EntityBreakingFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12, Item var14, RenderEngine var15) { + this(var1, var2, var4, var6, var14, var15); + this.motionX *= (double)0.1F; + this.motionY *= (double)0.1F; + this.motionZ *= (double)0.1F; + this.motionX += var8; + this.motionY += var10; + this.motionZ += var12; + } + + public int getFXLayer() { + return 2; + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = ((float)this.particleTextureIndexX + this.particleTextureJitterX / 4.0F) / 16.0F; + float var9 = var8 + 0.999F / 64.0F; + float var10 = ((float)this.particleTextureIndexY + this.particleTextureJitterY / 4.0F) / 16.0F; + float var11 = var10 + 0.999F / 64.0F; + float var12 = 0.1F * this.particleScale; + if(this.particleIcon != null) { + var8 = this.particleIcon.getInterpolatedU((double)(this.particleTextureJitterX / 4.0F * 16.0F)); + var9 = this.particleIcon.getInterpolatedU((double)((this.particleTextureJitterX + 1.0F) / 4.0F * 16.0F)); + var10 = this.particleIcon.getInterpolatedV((double)(this.particleTextureJitterY / 4.0F * 16.0F)); + var11 = this.particleIcon.getInterpolatedV((double)((this.particleTextureJitterY + 1.0F) / 4.0F * 16.0F)); + } + + float var13 = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)var2 - interpPosX); + float var14 = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)var2 - interpPosY); + float var15 = (float)(this.prevPosZ + (this.posZ - this.prevPosZ) * (double)var2 - interpPosZ); + float var16 = 1.0F; + var1.setColorOpaque_F(var16 * this.particleRed, var16 * this.particleGreen, var16 * this.particleBlue); + var1.addVertexWithUV((double)(var13 - var3 * var12 - var6 * var12), (double)(var14 - var4 * var12), (double)(var15 - var5 * var12 - var7 * var12), (double)var8, (double)var11); + var1.addVertexWithUV((double)(var13 - var3 * var12 + var6 * var12), (double)(var14 + var4 * var12), (double)(var15 - var5 * var12 + var7 * var12), (double)var8, (double)var10); + var1.addVertexWithUV((double)(var13 + var3 * var12 + var6 * var12), (double)(var14 + var4 * var12), (double)(var15 + var5 * var12 + var7 * var12), (double)var9, (double)var10); + var1.addVertexWithUV((double)(var13 + var3 * var12 - var6 * var12), (double)(var14 - var4 * var12), (double)(var15 + var5 * var12 - var7 * var12), (double)var9, (double)var11); + } +} diff --git a/src/net/minecraft/src/EntityBubbleFX.java b/src/net/minecraft/src/EntityBubbleFX.java new file mode 100644 index 0000000..f972722 --- /dev/null +++ b/src/net/minecraft/src/EntityBubbleFX.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +public class EntityBubbleFX extends EntityFX { + public EntityBubbleFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1, var2, var4, var6, var8, var10, var12); + 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 = var8 * (double)0.2F + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.02F); + this.motionY = var10 * (double)0.2F + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.02F); + this.motionZ = var12 * (double)0.2F + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.02F); + 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.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.85F; + this.motionY *= (double)0.85F; + this.motionZ *= (double)0.85F; + if(this.worldObj.getBlockMaterial(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)) != Material.water) { + this.setDead(); + } + + if(this.particleMaxAge-- <= 0) { + this.setDead(); + } + + } +} diff --git a/src/net/minecraft/src/EntityCaveSpider.java b/src/net/minecraft/src/EntityCaveSpider.java new file mode 100644 index 0000000..ad6b094 --- /dev/null +++ b/src/net/minecraft/src/EntityCaveSpider.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +public class EntityCaveSpider extends EntitySpider { + public EntityCaveSpider(World var1) { + super(var1); + this.texture = "/mob/cavespider.png"; + this.setSize(0.7F, 0.5F); + } + + public int getMaxHealth() { + return 12; + } + + public float spiderScaleAmount() { + return 0.7F; + } + + public boolean attackEntityAsMob(Entity var1) { + if(super.attackEntityAsMob(var1)) { + if(var1 instanceof EntityLiving) { + byte var2 = 0; + if(this.worldObj.difficultySetting > 1) { + if(this.worldObj.difficultySetting == 2) { + var2 = 7; + } else if(this.worldObj.difficultySetting == 3) { + var2 = 15; + } + } + + if(var2 > 0) { + ((EntityLiving)var1).addPotionEffect(new PotionEffect(Potion.poison.id, var2 * 20, 0)); + } + } + + return true; + } else { + return false; + } + } + + public void initCreature() { + } +} diff --git a/src/net/minecraft/src/EntityChicken.java b/src/net/minecraft/src/EntityChicken.java new file mode 100644 index 0000000..50f2fc3 --- /dev/null +++ b/src/net/minecraft/src/EntityChicken.java @@ -0,0 +1,116 @@ +package net.minecraft.src; + +public class EntityChicken extends EntityAnimal { + public boolean field_70885_d = false; + public float field_70886_e = 0.0F; + public float destPos = 0.0F; + public float field_70884_g; + public float field_70888_h; + public float field_70889_i = 1.0F; + public int timeUntilNextEgg; + + public EntityChicken(World var1) { + super(var1); + this.texture = "/mob/chicken.png"; + this.setSize(0.3F, 0.7F); + this.timeUntilNextEgg = this.rand.nextInt(6000) + 6000; + float var2 = 0.25F; + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIPanic(this, 0.38F)); + this.tasks.addTask(2, new EntityAIMate(this, var2)); + this.tasks.addTask(3, new EntityAITempt(this, 0.25F, Item.seeds.itemID, false)); + this.tasks.addTask(4, new EntityAIFollowParent(this, 0.28F)); + this.tasks.addTask(5, new EntityAIWander(this, var2)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); + this.tasks.addTask(7, new EntityAILookIdle(this)); + } + + public boolean isAIEnabled() { + return true; + } + + public int getMaxHealth() { + return 4; + } + + public void onLivingUpdate() { + super.onLivingUpdate(); + this.field_70888_h = this.field_70886_e; + this.field_70884_g = this.destPos; + this.destPos = (float)((double)this.destPos + (double)(this.onGround ? -1 : 4) * 0.3D); + if(this.destPos < 0.0F) { + this.destPos = 0.0F; + } + + if(this.destPos > 1.0F) { + this.destPos = 1.0F; + } + + if(!this.onGround && this.field_70889_i < 1.0F) { + this.field_70889_i = 1.0F; + } + + this.field_70889_i = (float)((double)this.field_70889_i * 0.9D); + if(!this.onGround && this.motionY < 0.0D) { + this.motionY *= 0.6D; + } + + this.field_70886_e += this.field_70889_i * 2.0F; + if(!this.isChild() && !this.worldObj.isRemote && --this.timeUntilNextEgg <= 0) { + this.playSound("mob.chicken.plop", 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + this.dropItem(Item.egg.itemID, 1); + this.timeUntilNextEgg = this.rand.nextInt(6000) + 6000; + } + + } + + protected void fall(float var1) { + } + + protected String getLivingSound() { + return "mob.chicken.say"; + } + + protected String getHurtSound() { + return "mob.chicken.hurt"; + } + + protected String getDeathSound() { + return "mob.chicken.hurt"; + } + + protected void playStepSound(int var1, int var2, int var3, int var4) { + this.playSound("mob.chicken.step", 0.15F, 1.0F); + } + + protected int getDropItemId() { + return Item.feather.itemID; + } + + protected void dropFewItems(boolean var1, int var2) { + int var3 = this.rand.nextInt(3) + this.rand.nextInt(1 + var2); + + for(int var4 = 0; var4 < var3; ++var4) { + this.dropItem(Item.feather.itemID, 1); + } + + if(this.isBurning()) { + this.dropItem(Item.chickenCooked.itemID, 1); + } else { + this.dropItem(Item.chickenRaw.itemID, 1); + } + + } + + public EntityChicken spawnBabyAnimal(EntityAgeable var1) { + return new EntityChicken(this.worldObj); + } + + public boolean isBreedingItem(ItemStack var1) { + return var1 != null && var1.getItem() instanceof ItemSeeds; + } + + public EntityAgeable createChild(EntityAgeable var1) { + return this.spawnBabyAnimal(var1); + } +} diff --git a/src/net/minecraft/src/EntityClientPlayerMP.java b/src/net/minecraft/src/EntityClientPlayerMP.java new file mode 100644 index 0000000..dcc79dc --- /dev/null +++ b/src/net/minecraft/src/EntityClientPlayerMP.java @@ -0,0 +1,171 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +public class EntityClientPlayerMP extends EntityPlayerSP { + public NetClientHandler sendQueue; + private double oldPosX; + private double oldMinY; + private double oldPosY; + private double oldPosZ; + private float oldRotationYaw; + private float oldRotationPitch; + private boolean wasOnGround = false; + private boolean shouldStopSneaking = false; + private boolean wasSneaking = false; + private int field_71168_co = 0; + private boolean hasSetHealth = false; + + public EntityClientPlayerMP(Minecraft var1, World var2, Session var3, NetClientHandler var4) { + super(var1, var2, var3, 0); + this.sendQueue = var4; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + return false; + } + + public void heal(int var1) { + } + + public void onUpdate() { + if(this.worldObj.blockExists(MathHelper.floor_double(this.posX), 0, MathHelper.floor_double(this.posZ))) { + super.onUpdate(); + this.sendMotionUpdates(); + } + } + + public void sendMotionUpdates() { + boolean var1 = this.isSprinting(); + if(var1 != this.wasSneaking) { + if(var1) { + this.sendQueue.addToSendQueue(new Packet19EntityAction(this, 4)); + } else { + this.sendQueue.addToSendQueue(new Packet19EntityAction(this, 5)); + } + + this.wasSneaking = var1; + } + + boolean var2 = this.isSneaking(); + if(var2 != this.shouldStopSneaking) { + if(var2) { + this.sendQueue.addToSendQueue(new Packet19EntityAction(this, 1)); + } else { + this.sendQueue.addToSendQueue(new Packet19EntityAction(this, 2)); + } + + this.shouldStopSneaking = var2; + } + + double var3 = this.posX - this.oldPosX; + double var5 = this.boundingBox.minY - this.oldMinY; + double var7 = this.posZ - this.oldPosZ; + double var9 = (double)(this.rotationYaw - this.oldRotationYaw); + double var11 = (double)(this.rotationPitch - this.oldRotationPitch); + boolean var13 = var3 * var3 + var5 * var5 + var7 * var7 > 9.0E-4D || this.field_71168_co >= 20; + boolean var14 = var9 != 0.0D || var11 != 0.0D; + if(this.ridingEntity != null) { + this.sendQueue.addToSendQueue(new Packet13PlayerLookMove(this.motionX, -999.0D, -999.0D, this.motionZ, this.rotationYaw, this.rotationPitch, this.onGround)); + var13 = false; + } else if(var13 && var14) { + this.sendQueue.addToSendQueue(new Packet13PlayerLookMove(this.posX, this.boundingBox.minY, this.posY, this.posZ, this.rotationYaw, this.rotationPitch, this.onGround)); + } else if(var13) { + this.sendQueue.addToSendQueue(new Packet11PlayerPosition(this.posX, this.boundingBox.minY, this.posY, this.posZ, this.onGround)); + } else if(var14) { + this.sendQueue.addToSendQueue(new Packet12PlayerLook(this.rotationYaw, this.rotationPitch, this.onGround)); + } else { + this.sendQueue.addToSendQueue(new Packet10Flying(this.onGround)); + } + + ++this.field_71168_co; + this.wasOnGround = this.onGround; + if(var13) { + this.oldPosX = this.posX; + this.oldMinY = this.boundingBox.minY; + this.oldPosY = this.posY; + this.oldPosZ = this.posZ; + this.field_71168_co = 0; + } + + if(var14) { + this.oldRotationYaw = this.rotationYaw; + this.oldRotationPitch = this.rotationPitch; + } + + } + + public EntityItem dropOneItem(boolean var1) { + int var2 = var1 ? 3 : 4; + this.sendQueue.addToSendQueue(new Packet14BlockDig(var2, 0, 0, 0, 0)); + return null; + } + + protected void joinEntityItemWithWorld(EntityItem var1) { + } + + public void sendChatMessage(String var1) { + this.sendQueue.addToSendQueue(new Packet3Chat(var1)); + } + + public void swingItem() { + super.swingItem(); + this.sendQueue.addToSendQueue(new Packet18Animation(this, 1)); + } + + public void respawnPlayer() { + this.sendQueue.addToSendQueue(new Packet205ClientCommand(1)); + } + + protected void damageEntity(DamageSource var1, int var2) { + if(!this.isEntityInvulnerable()) { + this.setEntityHealth(this.getHealth() - var2); + } + } + + public void closeScreen() { + this.sendQueue.addToSendQueue(new Packet101CloseWindow(this.openContainer.windowId)); + this.func_92015_f(); + } + + public void func_92015_f() { + this.inventory.setItemStack((ItemStack)null); + super.closeScreen(); + } + + public void setHealth(int var1) { + if(this.hasSetHealth) { + super.setHealth(var1); + } else { + this.setEntityHealth(var1); + this.hasSetHealth = true; + } + + } + + public void addStat(StatBase var1, int var2) { + if(var1 != null) { + if(var1.isIndependent) { + super.addStat(var1, var2); + } + + } + } + + public void incrementStat(StatBase var1, int var2) { + if(var1 != null) { + if(!var1.isIndependent) { + super.addStat(var1, var2); + } + + } + } + + public void sendPlayerAbilities() { + this.sendQueue.addToSendQueue(new Packet202PlayerAbilities(this.capabilities)); + } + + public boolean func_71066_bF() { + return true; + } +} diff --git a/src/net/minecraft/src/EntityCloudFX.java b/src/net/minecraft/src/EntityCloudFX.java new file mode 100644 index 0000000..74f9df6 --- /dev/null +++ b/src/net/minecraft/src/EntityCloudFX.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +public class EntityCloudFX extends EntityFX { + float field_70569_a; + + public EntityCloudFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1, var2, var4, var6, 0.0D, 0.0D, 0.0D); + float var14 = 2.5F; + this.motionX *= (double)0.1F; + this.motionY *= (double)0.1F; + this.motionZ *= (double)0.1F; + this.motionX += var8; + this.motionY += var10; + this.motionZ += var12; + this.particleRed = this.particleGreen = this.particleBlue = 1.0F - (float)(Math.random() * (double)0.3F); + this.particleScale *= 12.0F / 16.0F; + this.particleScale *= var14; + this.field_70569_a = this.particleScale; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.3D)); + this.particleMaxAge = (int)((float)this.particleMaxAge * var14); + this.noClip = false; + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = ((float)this.particleAge + var2) / (float)this.particleMaxAge * 32.0F; + if(var8 < 0.0F) { + var8 = 0.0F; + } + + if(var8 > 1.0F) { + var8 = 1.0F; + } + + this.particleScale = this.field_70569_a * var8; + super.renderParticle(var1, var2, var3, var4, var5, var6, var7); + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + if(this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.96F; + this.motionY *= (double)0.96F; + this.motionZ *= (double)0.96F; + EntityPlayer var1 = this.worldObj.getClosestPlayerToEntity(this, 2.0D); + if(var1 != null && this.posY > var1.boundingBox.minY) { + this.posY += (var1.boundingBox.minY - this.posY) * 0.2D; + this.motionY += (var1.motionY - this.motionY) * 0.2D; + this.setPosition(this.posX, this.posY, this.posZ); + } + + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + } +} diff --git a/src/net/minecraft/src/EntityCow.java b/src/net/minecraft/src/EntityCow.java new file mode 100644 index 0000000..72606d0 --- /dev/null +++ b/src/net/minecraft/src/EntityCow.java @@ -0,0 +1,93 @@ +package net.minecraft.src; + +public class EntityCow extends EntityAnimal { + public EntityCow(World var1) { + super(var1); + this.texture = "/mob/cow.png"; + this.setSize(0.9F, 1.3F); + this.getNavigator().setAvoidsWater(true); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIPanic(this, 0.38F)); + this.tasks.addTask(2, new EntityAIMate(this, 0.2F)); + this.tasks.addTask(3, new EntityAITempt(this, 0.25F, Item.wheat.itemID, false)); + this.tasks.addTask(4, new EntityAIFollowParent(this, 0.25F)); + this.tasks.addTask(5, new EntityAIWander(this, 0.2F)); + this.tasks.addTask(6, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); + this.tasks.addTask(7, new EntityAILookIdle(this)); + } + + public boolean isAIEnabled() { + return true; + } + + public int getMaxHealth() { + return 10; + } + + protected String getLivingSound() { + return "mob.cow.say"; + } + + protected String getHurtSound() { + return "mob.cow.hurt"; + } + + protected String getDeathSound() { + return "mob.cow.hurt"; + } + + protected void playStepSound(int var1, int var2, int var3, int var4) { + this.playSound("mob.cow.step", 0.15F, 1.0F); + } + + protected float getSoundVolume() { + return 0.4F; + } + + protected int getDropItemId() { + return Item.leather.itemID; + } + + protected void dropFewItems(boolean var1, int var2) { + int var3 = this.rand.nextInt(3) + this.rand.nextInt(1 + var2); + + int var4; + for(var4 = 0; var4 < var3; ++var4) { + this.dropItem(Item.leather.itemID, 1); + } + + var3 = this.rand.nextInt(3) + 1 + this.rand.nextInt(1 + var2); + + for(var4 = 0; var4 < var3; ++var4) { + if(this.isBurning()) { + this.dropItem(Item.beefCooked.itemID, 1); + } else { + this.dropItem(Item.beefRaw.itemID, 1); + } + } + + } + + public boolean interact(EntityPlayer var1) { + ItemStack var2 = var1.inventory.getCurrentItem(); + if(var2 != null && var2.itemID == Item.bucketEmpty.itemID) { + if(--var2.stackSize <= 0) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, new ItemStack(Item.bucketMilk)); + } else if(!var1.inventory.addItemStackToInventory(new ItemStack(Item.bucketMilk))) { + var1.dropPlayerItem(new ItemStack(Item.bucketMilk.itemID, 1, 0)); + } + + return true; + } else { + return super.interact(var1); + } + } + + public EntityCow spawnBabyAnimal(EntityAgeable var1) { + return new EntityCow(this.worldObj); + } + + public EntityAgeable createChild(EntityAgeable var1) { + return this.spawnBabyAnimal(var1); + } +} diff --git a/src/net/minecraft/src/EntityCreature.java b/src/net/minecraft/src/EntityCreature.java new file mode 100644 index 0000000..25daddb --- /dev/null +++ b/src/net/minecraft/src/EntityCreature.java @@ -0,0 +1,189 @@ +package net.minecraft.src; + +public abstract class EntityCreature extends EntityLiving { + private PathEntity pathToEntity; + protected Entity entityToAttack; + protected boolean hasAttacked = false; + protected int fleeingTick = 0; + + public EntityCreature(World var1) { + super(var1); + } + + protected boolean isMovementCeased() { + return false; + } + + protected void updateEntityActionState() { + this.worldObj.theProfiler.startSection("ai"); + if(this.fleeingTick > 0) { + --this.fleeingTick; + } + + this.hasAttacked = this.isMovementCeased(); + float var1 = 16.0F; + if(this.entityToAttack == null) { + this.entityToAttack = this.findPlayerToAttack(); + if(this.entityToAttack != null) { + this.pathToEntity = this.worldObj.getPathEntityToEntity(this, this.entityToAttack, var1, true, false, false, true); + } + } else if(this.entityToAttack.isEntityAlive()) { + float var2 = this.entityToAttack.getDistanceToEntity(this); + if(this.canEntityBeSeen(this.entityToAttack)) { + this.attackEntity(this.entityToAttack, var2); + } + } else { + this.entityToAttack = null; + } + + this.worldObj.theProfiler.endSection(); + if(this.hasAttacked || this.entityToAttack == null || this.pathToEntity != null && this.rand.nextInt(20) != 0) { + if(!this.hasAttacked && (this.pathToEntity == null && this.rand.nextInt(180) == 0 || this.rand.nextInt(120) == 0 || this.fleeingTick > 0) && this.entityAge < 100) { + this.updateWanderPath(); + } + } else { + this.pathToEntity = this.worldObj.getPathEntityToEntity(this, this.entityToAttack, var1, true, false, false, true); + } + + int var21 = MathHelper.floor_double(this.boundingBox.minY + 0.5D); + boolean var3 = this.isInWater(); + boolean var4 = this.handleLavaMovement(); + this.rotationPitch = 0.0F; + if(this.pathToEntity != null && this.rand.nextInt(100) != 0) { + this.worldObj.theProfiler.startSection("followpath"); + Vec3 var5 = this.pathToEntity.getPosition(this); + double var6 = (double)(this.width * 2.0F); + + while(var5 != null && var5.squareDistanceTo(this.posX, var5.yCoord, this.posZ) < var6 * var6) { + this.pathToEntity.incrementPathIndex(); + if(this.pathToEntity.isFinished()) { + var5 = null; + this.pathToEntity = null; + } else { + var5 = this.pathToEntity.getPosition(this); + } + } + + this.isJumping = false; + if(var5 != null) { + double var8 = var5.xCoord - this.posX; + double var10 = var5.zCoord - this.posZ; + double var12 = var5.yCoord - (double)var21; + float var14 = (float)(Math.atan2(var10, var8) * 180.0D / (double)((float)Math.PI)) - 90.0F; + float var15 = MathHelper.wrapAngleTo180_float(var14 - this.rotationYaw); + this.moveForward = this.moveSpeed; + if(var15 > 30.0F) { + var15 = 30.0F; + } + + if(var15 < -30.0F) { + var15 = -30.0F; + } + + this.rotationYaw += var15; + if(this.hasAttacked && this.entityToAttack != null) { + double var16 = this.entityToAttack.posX - this.posX; + double var18 = this.entityToAttack.posZ - this.posZ; + float var20 = this.rotationYaw; + this.rotationYaw = (float)(Math.atan2(var18, var16) * 180.0D / (double)((float)Math.PI)) - 90.0F; + var15 = (var20 - this.rotationYaw + 90.0F) * (float)Math.PI / 180.0F; + this.moveStrafing = -MathHelper.sin(var15) * this.moveForward * 1.0F; + this.moveForward = MathHelper.cos(var15) * this.moveForward * 1.0F; + } + + if(var12 > 0.0D) { + this.isJumping = true; + } + } + + if(this.entityToAttack != null) { + this.faceEntity(this.entityToAttack, 30.0F, 30.0F); + } + + if(this.isCollidedHorizontally && !this.hasPath()) { + this.isJumping = true; + } + + if(this.rand.nextFloat() < 0.8F && (var3 || var4)) { + this.isJumping = true; + } + + this.worldObj.theProfiler.endSection(); + } else { + super.updateEntityActionState(); + this.pathToEntity = null; + } + } + + protected void updateWanderPath() { + this.worldObj.theProfiler.startSection("stroll"); + boolean var1 = false; + int var2 = -1; + int var3 = -1; + int var4 = -1; + float var5 = -99999.0F; + + for(int var6 = 0; var6 < 10; ++var6) { + int var7 = MathHelper.floor_double(this.posX + (double)this.rand.nextInt(13) - 6.0D); + int var8 = MathHelper.floor_double(this.posY + (double)this.rand.nextInt(7) - 3.0D); + int var9 = MathHelper.floor_double(this.posZ + (double)this.rand.nextInt(13) - 6.0D); + float var10 = this.getBlockPathWeight(var7, var8, var9); + if(var10 > var5) { + var5 = var10; + var2 = var7; + var3 = var8; + var4 = var9; + var1 = true; + } + } + + if(var1) { + this.pathToEntity = this.worldObj.getEntityPathToXYZ(this, var2, var3, var4, 10.0F, true, false, false, true); + } + + this.worldObj.theProfiler.endSection(); + } + + protected void attackEntity(Entity var1, float var2) { + } + + public float getBlockPathWeight(int var1, int var2, int var3) { + return 0.0F; + } + + protected Entity findPlayerToAttack() { + return null; + } + + public boolean getCanSpawnHere() { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.boundingBox.minY); + int var3 = MathHelper.floor_double(this.posZ); + return super.getCanSpawnHere() && this.getBlockPathWeight(var1, var2, var3) >= 0.0F; + } + + public boolean hasPath() { + return this.pathToEntity != null; + } + + public void setPathToEntity(PathEntity var1) { + this.pathToEntity = var1; + } + + public Entity getEntityToAttack() { + return this.entityToAttack; + } + + public void setTarget(Entity var1) { + this.entityToAttack = var1; + } + + public float getSpeedModifier() { + float var1 = super.getSpeedModifier(); + if(this.fleeingTick > 0 && !this.isAIEnabled()) { + var1 *= 2.0F; + } + + return var1; + } +} diff --git a/src/net/minecraft/src/EntityCreeper.java b/src/net/minecraft/src/EntityCreeper.java new file mode 100644 index 0000000..4550dcb --- /dev/null +++ b/src/net/minecraft/src/EntityCreeper.java @@ -0,0 +1,149 @@ +package net.minecraft.src; + +public class EntityCreeper extends EntityMob { + private int lastActiveTime; + private int timeSinceIgnited; + private int fuseTime = 30; + private int explosionRadius = 3; + + public EntityCreeper(World var1) { + super(var1); + this.texture = "/mob/creeper.png"; + 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, 0.25F, 0.3F)); + this.tasks.addTask(4, new EntityAIAttackOnCollide(this, 0.25F, false)); + this.tasks.addTask(5, new EntityAIWander(this, 0.2F)); + 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, 16.0F, 0, true)); + this.targetTasks.addTask(2, new EntityAIHurtByTarget(this, false)); + } + + public boolean isAIEnabled() { + return true; + } + + public int func_82143_as() { + return this.getAttackTarget() == null ? 3 : 3 + (this.health - 1); + } + + protected void fall(float var1) { + super.fall(var1); + this.timeSinceIgnited = (int)((float)this.timeSinceIgnited + var1 * 1.5F); + if(this.timeSinceIgnited > this.fuseTime - 5) { + this.timeSinceIgnited = this.fuseTime - 5; + } + + } + + public int getMaxHealth() { + return 20; + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, Byte.valueOf((byte)-1)); + this.dataWatcher.addObject(17, Byte.valueOf((byte)0)); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + if(this.dataWatcher.getWatchableObjectByte(17) == 1) { + var1.setBoolean("powered", true); + } + + var1.setShort("Fuse", (short)this.fuseTime); + var1.setByte("ExplosionRadius", (byte)this.explosionRadius); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.dataWatcher.updateObject(17, Byte.valueOf((byte)(var1.getBoolean("powered") ? 1 : 0))); + if(var1.hasKey("Fuse")) { + this.fuseTime = var1.getShort("Fuse"); + } + + if(var1.hasKey("ExplosionRadius")) { + this.explosionRadius = var1.getByte("ExplosionRadius"); + } + + } + + public void onUpdate() { + if(this.isEntityAlive()) { + this.lastActiveTime = this.timeSinceIgnited; + int var1 = this.getCreeperState(); + if(var1 > 0 && this.timeSinceIgnited == 0) { + this.playSound("random.fuse", 1.0F, 0.5F); + } + + this.timeSinceIgnited += var1; + if(this.timeSinceIgnited < 0) { + this.timeSinceIgnited = 0; + } + + if(this.timeSinceIgnited >= this.fuseTime) { + this.timeSinceIgnited = this.fuseTime; + if(!this.worldObj.isRemote) { + boolean var2 = this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing"); + if(this.getPowered()) { + this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, (float)(this.explosionRadius * 2), var2); + } else { + this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, (float)this.explosionRadius, var2); + } + + this.setDead(); + } + } + } + + super.onUpdate(); + } + + protected String getHurtSound() { + return "mob.creeper.say"; + } + + protected String getDeathSound() { + return "mob.creeper.death"; + } + + public void onDeath(DamageSource var1) { + super.onDeath(var1); + if(var1.getEntity() instanceof EntitySkeleton) { + int var2 = Item.record13.itemID + this.rand.nextInt(Item.recordWait.itemID - Item.record13.itemID + 1); + this.dropItem(var2, 1); + } + + } + + public boolean attackEntityAsMob(Entity var1) { + return true; + } + + public boolean getPowered() { + return this.dataWatcher.getWatchableObjectByte(17) == 1; + } + + public float getCreeperFlashIntensity(float var1) { + return ((float)this.lastActiveTime + (float)(this.timeSinceIgnited - this.lastActiveTime) * var1) / (float)(this.fuseTime - 2); + } + + protected int getDropItemId() { + return Item.gunpowder.itemID; + } + + public int getCreeperState() { + return this.dataWatcher.getWatchableObjectByte(16); + } + + public void setCreeperState(int var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)var1)); + } + + public void onStruckByLightning(EntityLightningBolt var1) { + super.onStruckByLightning(var1); + this.dataWatcher.updateObject(17, Byte.valueOf((byte)1)); + } +} diff --git a/src/net/minecraft/src/EntityCrit2FX.java b/src/net/minecraft/src/EntityCrit2FX.java new file mode 100644 index 0000000..8dce0b3 --- /dev/null +++ b/src/net/minecraft/src/EntityCrit2FX.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +public class EntityCrit2FX extends EntityFX { + private Entity theEntity; + private int currentLife; + private int maximumLife; + private String particleName; + + public EntityCrit2FX(World var1, Entity var2) { + this(var1, var2, "crit"); + } + + public EntityCrit2FX(World var1, Entity var2, String var3) { + super(var1, var2.posX, var2.boundingBox.minY + (double)(var2.height / 2.0F), var2.posZ, var2.motionX, var2.motionY, var2.motionZ); + this.currentLife = 0; + this.maximumLife = 0; + this.theEntity = var2; + this.maximumLife = 3; + this.particleName = var3; + this.onUpdate(); + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + } + + public void onUpdate() { + for(int var1 = 0; var1 < 16; ++var1) { + double var2 = (double)(this.rand.nextFloat() * 2.0F - 1.0F); + double var4 = (double)(this.rand.nextFloat() * 2.0F - 1.0F); + double var6 = (double)(this.rand.nextFloat() * 2.0F - 1.0F); + if(var2 * var2 + var4 * var4 + var6 * var6 <= 1.0D) { + double var8 = this.theEntity.posX + var2 * (double)this.theEntity.width / 4.0D; + double var10 = this.theEntity.boundingBox.minY + (double)(this.theEntity.height / 2.0F) + var4 * (double)this.theEntity.height / 4.0D; + double var12 = this.theEntity.posZ + var6 * (double)this.theEntity.width / 4.0D; + this.worldObj.spawnParticle(this.particleName, var8, var10, var12, var2, var4 + 0.2D, var6); + } + } + + ++this.currentLife; + if(this.currentLife >= this.maximumLife) { + this.setDead(); + } + + } + + public int getFXLayer() { + return 3; + } +} diff --git a/src/net/minecraft/src/EntityCritFX.java b/src/net/minecraft/src/EntityCritFX.java new file mode 100644 index 0000000..47150bd --- /dev/null +++ b/src/net/minecraft/src/EntityCritFX.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +public class EntityCritFX extends EntityFX { + float field_70561_a; + + public EntityCritFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + this(var1, var2, var4, var6, var8, var10, var12, 1.0F); + } + + public EntityCritFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12, float var14) { + super(var1, var2, var4, var6, 0.0D, 0.0D, 0.0D); + this.motionX *= (double)0.1F; + this.motionY *= (double)0.1F; + this.motionZ *= (double)0.1F; + this.motionX += var8 * 0.4D; + this.motionY += var10 * 0.4D; + this.motionZ += var12 * 0.4D; + this.particleRed = this.particleGreen = this.particleBlue = (float)(Math.random() * (double)0.3F + (double)0.6F); + this.particleScale *= 12.0F / 16.0F; + this.particleScale *= var14; + this.field_70561_a = this.particleScale; + this.particleMaxAge = (int)(6.0D / (Math.random() * 0.8D + 0.6D)); + this.particleMaxAge = (int)((float)this.particleMaxAge * var14); + this.noClip = false; + this.setParticleTextureIndex(65); + this.onUpdate(); + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = ((float)this.particleAge + var2) / (float)this.particleMaxAge * 32.0F; + if(var8 < 0.0F) { + var8 = 0.0F; + } + + if(var8 > 1.0F) { + var8 = 1.0F; + } + + this.particleScale = this.field_70561_a * var8; + super.renderParticle(var1, var2, var3, var4, var5, var6, var7); + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + if(this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.particleGreen = (float)((double)this.particleGreen * 0.96D); + this.particleBlue = (float)((double)this.particleBlue * 0.9D); + this.motionX *= (double)0.7F; + this.motionY *= (double)0.7F; + this.motionZ *= (double)0.7F; + this.motionY -= (double)0.02F; + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + } +} diff --git a/src/net/minecraft/src/EntityDamageSource.java b/src/net/minecraft/src/EntityDamageSource.java new file mode 100644 index 0000000..0e57f47 --- /dev/null +++ b/src/net/minecraft/src/EntityDamageSource.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class EntityDamageSource extends DamageSource { + protected Entity damageSourceEntity; + + public EntityDamageSource(String var1, Entity var2) { + super(var1); + this.damageSourceEntity = var2; + } + + public Entity getEntity() { + return this.damageSourceEntity; + } + + public String getDeathMessage(EntityLiving var1) { + ItemStack var2 = this.damageSourceEntity instanceof EntityLiving ? ((EntityLiving)this.damageSourceEntity).getHeldItem() : null; + String var3 = "death.attack." + this.damageType; + String var4 = var3 + ".item"; + return var2 != null && var2.hasDisplayName() && StatCollector.func_94522_b(var4) ? StatCollector.translateToLocalFormatted(var4, new Object[]{var1.getTranslatedEntityName(), this.damageSourceEntity.getTranslatedEntityName(), var2.getDisplayName()}) : StatCollector.translateToLocalFormatted(var3, new Object[]{var1.getTranslatedEntityName(), this.damageSourceEntity.getTranslatedEntityName()}); + } + + public boolean isDifficultyScaled() { + return this.damageSourceEntity != null && this.damageSourceEntity instanceof EntityLiving && !(this.damageSourceEntity instanceof EntityPlayer); + } +} diff --git a/src/net/minecraft/src/EntityDamageSourceIndirect.java b/src/net/minecraft/src/EntityDamageSourceIndirect.java new file mode 100644 index 0000000..7b418bd --- /dev/null +++ b/src/net/minecraft/src/EntityDamageSourceIndirect.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class EntityDamageSourceIndirect extends EntityDamageSource { + private Entity indirectEntity; + + public EntityDamageSourceIndirect(String var1, Entity var2, Entity var3) { + super(var1, var2); + this.indirectEntity = var3; + } + + public Entity getSourceOfDamage() { + return this.damageSourceEntity; + } + + public Entity getEntity() { + return this.indirectEntity; + } + + public String getDeathMessage(EntityLiving var1) { + String var2 = this.indirectEntity == null ? this.damageSourceEntity.getTranslatedEntityName() : this.indirectEntity.getTranslatedEntityName(); + ItemStack var3 = this.indirectEntity instanceof EntityLiving ? ((EntityLiving)this.indirectEntity).getHeldItem() : null; + String var4 = "death.attack." + this.damageType; + String var5 = var4 + ".item"; + return var3 != null && var3.hasDisplayName() && StatCollector.func_94522_b(var5) ? StatCollector.translateToLocalFormatted(var5, new Object[]{var1.getTranslatedEntityName(), var2, var3.getDisplayName()}) : StatCollector.translateToLocalFormatted(var4, new Object[]{var1.getTranslatedEntityName(), var2}); + } +} diff --git a/src/net/minecraft/src/EntityDiggingFX.java b/src/net/minecraft/src/EntityDiggingFX.java new file mode 100644 index 0000000..e6dfffd --- /dev/null +++ b/src/net/minecraft/src/EntityDiggingFX.java @@ -0,0 +1,66 @@ +package net.minecraft.src; + +public class EntityDiggingFX extends EntityFX { + private Block blockInstance; + + public EntityDiggingFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12, Block var14, int var15, int var16, RenderEngine var17) { + super(var1, var2, var4, var6, var8, var10, var12); + this.blockInstance = var14; + this.setParticleIcon(var17, var14.getIcon(0, var16)); + this.particleGravity = var14.blockParticleGravity; + this.particleRed = this.particleGreen = this.particleBlue = 0.6F; + this.particleScale /= 2.0F; + } + + public EntityDiggingFX func_70596_a(int var1, int var2, int var3) { + if(this.blockInstance == Block.grass) { + return this; + } else { + int var4 = this.blockInstance.colorMultiplier(this.worldObj, var1, var2, var3); + this.particleRed *= (float)(var4 >> 16 & 255) / 255.0F; + this.particleGreen *= (float)(var4 >> 8 & 255) / 255.0F; + this.particleBlue *= (float)(var4 & 255) / 255.0F; + return this; + } + } + + public EntityDiggingFX applyRenderColor(int var1) { + if(this.blockInstance == Block.grass) { + return this; + } else { + int var2 = this.blockInstance.getRenderColor(var1); + this.particleRed *= (float)(var2 >> 16 & 255) / 255.0F; + this.particleGreen *= (float)(var2 >> 8 & 255) / 255.0F; + this.particleBlue *= (float)(var2 & 255) / 255.0F; + return this; + } + } + + public int getFXLayer() { + return 1; + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = ((float)this.particleTextureIndexX + this.particleTextureJitterX / 4.0F) / 16.0F; + float var9 = var8 + 0.999F / 64.0F; + float var10 = ((float)this.particleTextureIndexY + this.particleTextureJitterY / 4.0F) / 16.0F; + float var11 = var10 + 0.999F / 64.0F; + float var12 = 0.1F * this.particleScale; + if(this.particleIcon != null) { + var8 = this.particleIcon.getInterpolatedU((double)(this.particleTextureJitterX / 4.0F * 16.0F)); + var9 = this.particleIcon.getInterpolatedU((double)((this.particleTextureJitterX + 1.0F) / 4.0F * 16.0F)); + var10 = this.particleIcon.getInterpolatedV((double)(this.particleTextureJitterY / 4.0F * 16.0F)); + var11 = this.particleIcon.getInterpolatedV((double)((this.particleTextureJitterY + 1.0F) / 4.0F * 16.0F)); + } + + float var13 = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)var2 - interpPosX); + float var14 = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)var2 - interpPosY); + float var15 = (float)(this.prevPosZ + (this.posZ - this.prevPosZ) * (double)var2 - interpPosZ); + float var16 = 1.0F; + var1.setColorOpaque_F(var16 * this.particleRed, var16 * this.particleGreen, var16 * this.particleBlue); + var1.addVertexWithUV((double)(var13 - var3 * var12 - var6 * var12), (double)(var14 - var4 * var12), (double)(var15 - var5 * var12 - var7 * var12), (double)var8, (double)var11); + var1.addVertexWithUV((double)(var13 - var3 * var12 + var6 * var12), (double)(var14 + var4 * var12), (double)(var15 - var5 * var12 + var7 * var12), (double)var8, (double)var10); + var1.addVertexWithUV((double)(var13 + var3 * var12 + var6 * var12), (double)(var14 + var4 * var12), (double)(var15 + var5 * var12 + var7 * var12), (double)var9, (double)var10); + var1.addVertexWithUV((double)(var13 + var3 * var12 - var6 * var12), (double)(var14 - var4 * var12), (double)(var15 + var5 * var12 - var7 * var12), (double)var9, (double)var11); + } +} diff --git a/src/net/minecraft/src/EntityDragon.java b/src/net/minecraft/src/EntityDragon.java new file mode 100644 index 0000000..88b76bc --- /dev/null +++ b/src/net/minecraft/src/EntityDragon.java @@ -0,0 +1,541 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class EntityDragon extends EntityLiving implements IBossDisplayData, IEntityMultiPart { + public double targetX; + public double targetY; + public double targetZ; + public double[][] ringBuffer = new double[64][3]; + public int ringBufferIndex = -1; + public EntityDragonPart[] dragonPartArray = new EntityDragonPart[]{this.dragonPartHead = new EntityDragonPart(this, "head", 6.0F, 6.0F), this.dragonPartBody = new EntityDragonPart(this, "body", 8.0F, 8.0F), this.dragonPartTail1 = new EntityDragonPart(this, "tail", 4.0F, 4.0F), this.dragonPartTail2 = new EntityDragonPart(this, "tail", 4.0F, 4.0F), this.dragonPartTail3 = new EntityDragonPart(this, "tail", 4.0F, 4.0F), this.dragonPartWing1 = new EntityDragonPart(this, "wing", 4.0F, 4.0F), this.dragonPartWing2 = new EntityDragonPart(this, "wing", 4.0F, 4.0F)}; + public EntityDragonPart dragonPartHead; + public EntityDragonPart dragonPartBody; + public EntityDragonPart dragonPartTail1; + public EntityDragonPart dragonPartTail2; + public EntityDragonPart dragonPartTail3; + public EntityDragonPart dragonPartWing1; + public EntityDragonPart dragonPartWing2; + public float prevAnimTime = 0.0F; + public float animTime = 0.0F; + public boolean forceNewTarget = false; + public boolean slowed = false; + private Entity target; + public int deathTicks = 0; + public EntityEnderCrystal healingEnderCrystal = null; + + public EntityDragon(World var1) { + super(var1); + this.setEntityHealth(this.getMaxHealth()); + this.texture = "/mob/enderdragon/ender.png"; + this.setSize(16.0F, 8.0F); + this.noClip = true; + this.isImmuneToFire = true; + this.targetY = 100.0D; + this.ignoreFrustumCheck = true; + } + + public int getMaxHealth() { + return 200; + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, new Integer(this.getMaxHealth())); + } + + public double[] getMovementOffsets(int var1, float var2) { + if(this.health <= 0) { + var2 = 0.0F; + } + + var2 = 1.0F - var2; + int var3 = this.ringBufferIndex - var1 * 1 & 63; + int var4 = this.ringBufferIndex - var1 * 1 - 1 & 63; + double[] var5 = new double[3]; + double var6 = this.ringBuffer[var3][0]; + double var8 = MathHelper.wrapAngleTo180_double(this.ringBuffer[var4][0] - var6); + var5[0] = var6 + var8 * (double)var2; + var6 = this.ringBuffer[var3][1]; + var8 = this.ringBuffer[var4][1] - var6; + var5[1] = var6 + var8 * (double)var2; + var5[2] = this.ringBuffer[var3][2] + (this.ringBuffer[var4][2] - this.ringBuffer[var3][2]) * (double)var2; + return var5; + } + + public void onLivingUpdate() { + float var1; + float var2; + if(!this.worldObj.isRemote) { + this.dataWatcher.updateObject(16, Integer.valueOf(this.health)); + } else { + var1 = MathHelper.cos(this.animTime * (float)Math.PI * 2.0F); + var2 = MathHelper.cos(this.prevAnimTime * (float)Math.PI * 2.0F); + if(var2 <= -0.3F && var1 >= -0.3F) { + this.worldObj.playSound(this.posX, this.posY, this.posZ, "mob.enderdragon.wings", 5.0F, 0.8F + this.rand.nextFloat() * 0.3F, false); + } + } + + this.prevAnimTime = this.animTime; + float var3; + if(this.health <= 0) { + var1 = (this.rand.nextFloat() - 0.5F) * 8.0F; + var2 = (this.rand.nextFloat() - 0.5F) * 4.0F; + var3 = (this.rand.nextFloat() - 0.5F) * 8.0F; + this.worldObj.spawnParticle("largeexplode", this.posX + (double)var1, this.posY + 2.0D + (double)var2, this.posZ + (double)var3, 0.0D, 0.0D, 0.0D); + } else { + this.updateDragonEnderCrystal(); + var1 = 0.2F / (MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ) * 10.0F + 1.0F); + var1 *= (float)Math.pow(2.0D, this.motionY); + if(this.slowed) { + this.animTime += var1 * 0.5F; + } else { + this.animTime += var1; + } + + this.rotationYaw = MathHelper.wrapAngleTo180_float(this.rotationYaw); + if(this.ringBufferIndex < 0) { + for(int var25 = 0; var25 < this.ringBuffer.length; ++var25) { + this.ringBuffer[var25][0] = (double)this.rotationYaw; + this.ringBuffer[var25][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; + double var4; + double var6; + double var8; + double var26; + float var31; + if(this.worldObj.isRemote) { + if(this.newPosRotationIncrements > 0) { + var26 = this.posX + (this.newPosX - this.posX) / (double)this.newPosRotationIncrements; + var4 = this.posY + (this.newPosY - this.posY) / (double)this.newPosRotationIncrements; + var6 = this.posZ + (this.newPosZ - this.posZ) / (double)this.newPosRotationIncrements; + var8 = MathHelper.wrapAngleTo180_double(this.newRotationYaw - (double)this.rotationYaw); + this.rotationYaw = (float)((double)this.rotationYaw + var8 / (double)this.newPosRotationIncrements); + this.rotationPitch = (float)((double)this.rotationPitch + (this.newRotationPitch - (double)this.rotationPitch) / (double)this.newPosRotationIncrements); + --this.newPosRotationIncrements; + this.setPosition(var26, var4, var6); + this.setRotation(this.rotationYaw, this.rotationPitch); + } + } else { + var26 = this.targetX - this.posX; + var4 = this.targetY - this.posY; + var6 = this.targetZ - this.posZ; + var8 = var26 * var26 + var4 * var4 + var6 * var6; + if(this.target != null) { + this.targetX = this.target.posX; + this.targetZ = this.target.posZ; + double var10 = this.targetX - this.posX; + double var12 = this.targetZ - this.posZ; + double var14 = Math.sqrt(var10 * var10 + var12 * var12); + double var16 = (double)0.4F + var14 / 80.0D - 1.0D; + if(var16 > 10.0D) { + var16 = 10.0D; + } + + this.targetY = this.target.boundingBox.minY + var16; + } else { + this.targetX += this.rand.nextGaussian() * 2.0D; + this.targetZ += this.rand.nextGaussian() * 2.0D; + } + + if(this.forceNewTarget || var8 < 100.0D || var8 > 22500.0D || this.isCollidedHorizontally || this.isCollidedVertically) { + this.setNewTarget(); + } + + var4 /= (double)MathHelper.sqrt_double(var26 * var26 + var6 * var6); + var31 = 0.6F; + if(var4 < (double)(-var31)) { + var4 = (double)(-var31); + } + + if(var4 > (double)var31) { + var4 = (double)var31; + } + + this.motionY += var4 * (double)0.1F; + this.rotationYaw = MathHelper.wrapAngleTo180_float(this.rotationYaw); + double var11 = 180.0D - Math.atan2(var26, var6) * 180.0D / (double)((float)Math.PI); + double var13 = MathHelper.wrapAngleTo180_double(var11 - (double)this.rotationYaw); + if(var13 > 50.0D) { + var13 = 50.0D; + } + + if(var13 < -50.0D) { + var13 = -50.0D; + } + + Vec3 var15 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.targetX - this.posX, this.targetY - this.posY, this.targetZ - this.posZ).normalize(); + Vec3 var39 = this.worldObj.getWorldVec3Pool().getVecFromPool((double)MathHelper.sin(this.rotationYaw * (float)Math.PI / 180.0F), this.motionY, (double)(-MathHelper.cos(this.rotationYaw * (float)Math.PI / 180.0F))).normalize(); + float var17 = (float)(var39.dotProduct(var15) + 0.5D) / 1.5F; + if(var17 < 0.0F) { + var17 = 0.0F; + } + + this.randomYawVelocity *= 0.8F; + float var18 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ) * 1.0F + 1.0F; + double var19 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ) * 1.0D + 1.0D; + if(var19 > 40.0D) { + var19 = 40.0D; + } + + this.randomYawVelocity = (float)((double)this.randomYawVelocity + var13 * ((double)0.7F / var19 / (double)var18)); + this.rotationYaw += this.randomYawVelocity * 0.1F; + float var21 = (float)(2.0D / (var19 + 1.0D)); + float var22 = 0.06F; + this.moveFlying(0.0F, -1.0F, var22 * (var17 * var21 + (1.0F - var21))); + if(this.slowed) { + this.moveEntity(this.motionX * (double)0.8F, this.motionY * (double)0.8F, this.motionZ * (double)0.8F); + } else { + this.moveEntity(this.motionX, this.motionY, this.motionZ); + } + + Vec3 var23 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.motionX, this.motionY, this.motionZ).normalize(); + float var24 = (float)(var23.dotProduct(var39) + 1.0D) / 2.0F; + var24 = 0.8F + 0.15F * var24; + this.motionX *= (double)var24; + this.motionZ *= (double)var24; + this.motionY *= (double)0.91F; + } + + this.renderYawOffset = this.rotationYaw; + this.dragonPartHead.width = this.dragonPartHead.height = 3.0F; + this.dragonPartTail1.width = this.dragonPartTail1.height = 2.0F; + this.dragonPartTail2.width = this.dragonPartTail2.height = 2.0F; + this.dragonPartTail3.width = 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; + var2 = (float)(this.getMovementOffsets(5, 1.0F)[1] - this.getMovementOffsets(10, 1.0F)[1]) * 10.0F / 180.0F * (float)Math.PI; + var3 = MathHelper.cos(var2); + float var27 = -MathHelper.sin(var2); + float var5 = this.rotationYaw * (float)Math.PI / 180.0F; + float var28 = MathHelper.sin(var5); + float var7 = MathHelper.cos(var5); + this.dragonPartBody.onUpdate(); + this.dragonPartBody.setLocationAndAngles(this.posX + (double)(var28 * 0.5F), this.posY, this.posZ - (double)(var7 * 0.5F), 0.0F, 0.0F); + this.dragonPartWing1.onUpdate(); + this.dragonPartWing1.setLocationAndAngles(this.posX + (double)(var7 * 4.5F), this.posY + 2.0D, this.posZ + (double)(var28 * 4.5F), 0.0F, 0.0F); + this.dragonPartWing2.onUpdate(); + this.dragonPartWing2.setLocationAndAngles(this.posX - (double)(var7 * 4.5F), this.posY + 2.0D, this.posZ - (double)(var28 * 4.5F), 0.0F, 0.0F); + if(!this.worldObj.isRemote && this.hurtTime == 0) { + this.collideWithEntities(this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.dragonPartWing1.boundingBox.expand(4.0D, 2.0D, 4.0D).offset(0.0D, -2.0D, 0.0D))); + this.collideWithEntities(this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.dragonPartWing2.boundingBox.expand(4.0D, 2.0D, 4.0D).offset(0.0D, -2.0D, 0.0D))); + this.attackEntitiesInList(this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.dragonPartHead.boundingBox.expand(1.0D, 1.0D, 1.0D))); + } + + double[] var29 = this.getMovementOffsets(5, 1.0F); + double[] var9 = this.getMovementOffsets(0, 1.0F); + var31 = MathHelper.sin(this.rotationYaw * (float)Math.PI / 180.0F - this.randomYawVelocity * 0.01F); + float var33 = MathHelper.cos(this.rotationYaw * (float)Math.PI / 180.0F - this.randomYawVelocity * 0.01F); + this.dragonPartHead.onUpdate(); + this.dragonPartHead.setLocationAndAngles(this.posX + (double)(var31 * 5.5F * var3), this.posY + (var9[1] - var29[1]) * 1.0D + (double)(var27 * 5.5F), this.posZ - (double)(var33 * 5.5F * var3), 0.0F, 0.0F); + + for(int var30 = 0; var30 < 3; ++var30) { + EntityDragonPart var32 = null; + if(var30 == 0) { + var32 = this.dragonPartTail1; + } + + if(var30 == 1) { + var32 = this.dragonPartTail2; + } + + if(var30 == 2) { + var32 = this.dragonPartTail3; + } + + double[] var34 = this.getMovementOffsets(12 + var30 * 2, 1.0F); + float var35 = this.rotationYaw * (float)Math.PI / 180.0F + this.simplifyAngle(var34[0] - var29[0]) * (float)Math.PI / 180.0F * 1.0F; + float var37 = MathHelper.sin(var35); + float var36 = MathHelper.cos(var35); + float var38 = 1.5F; + float var40 = (float)(var30 + 1) * 2.0F; + var32.onUpdate(); + var32.setLocationAndAngles(this.posX - (double)((var28 * var38 + var37 * var40) * var3), this.posY + (var34[1] - var29[1]) * 1.0D - (double)((var40 + var38) * var27) + 1.5D, this.posZ + (double)((var7 * var38 + var36 * var40) * var3), 0.0F, 0.0F); + } + + if(!this.worldObj.isRemote) { + this.slowed = this.destroyBlocksInAABB(this.dragonPartHead.boundingBox) | this.destroyBlocksInAABB(this.dragonPartBody.boundingBox); + } + + } + } + + private void updateDragonEnderCrystal() { + if(this.healingEnderCrystal != null) { + if(this.healingEnderCrystal.isDead) { + if(!this.worldObj.isRemote) { + this.attackEntityFromPart(this.dragonPartHead, DamageSource.setExplosionSource((Explosion)null), 10); + } + + this.healingEnderCrystal = null; + } else if(this.ticksExisted % 10 == 0 && this.getHealth() < this.getMaxHealth()) { + this.setEntityHealth(this.getHealth() + 1); + } + } + + if(this.rand.nextInt(10) == 0) { + float var1 = 32.0F; + List var2 = this.worldObj.getEntitiesWithinAABB(EntityEnderCrystal.class, this.boundingBox.expand((double)var1, (double)var1, (double)var1)); + EntityEnderCrystal var3 = null; + double var4 = Double.MAX_VALUE; + Iterator var6 = var2.iterator(); + + while(var6.hasNext()) { + EntityEnderCrystal var7 = (EntityEnderCrystal)var6.next(); + double var8 = var7.getDistanceSqToEntity(this); + if(var8 < var4) { + var4 = var8; + var3 = var7; + } + } + + this.healingEnderCrystal = var3; + } + + } + + private void collideWithEntities(List var1) { + double var2 = (this.dragonPartBody.boundingBox.minX + this.dragonPartBody.boundingBox.maxX) / 2.0D; + double var4 = (this.dragonPartBody.boundingBox.minZ + this.dragonPartBody.boundingBox.maxZ) / 2.0D; + Iterator var6 = var1.iterator(); + + while(var6.hasNext()) { + Entity var7 = (Entity)var6.next(); + if(var7 instanceof EntityLiving) { + double var8 = var7.posX - var2; + double var10 = var7.posZ - var4; + double var12 = var8 * var8 + var10 * var10; + var7.addVelocity(var8 / var12 * 4.0D, (double)0.2F, var10 / var12 * 4.0D); + } + } + + } + + private void attackEntitiesInList(List var1) { + for(int var2 = 0; var2 < var1.size(); ++var2) { + Entity var3 = (Entity)var1.get(var2); + if(var3 instanceof EntityLiving) { + var3.attackEntityFrom(DamageSource.causeMobDamage(this), 10); + } + } + + } + + private void setNewTarget() { + this.forceNewTarget = false; + if(this.rand.nextInt(2) == 0 && !this.worldObj.playerEntities.isEmpty()) { + this.target = (Entity)this.worldObj.playerEntities.get(this.rand.nextInt(this.worldObj.playerEntities.size())); + } else { + boolean var1 = false; + + do { + this.targetX = 0.0D; + this.targetY = (double)(70.0F + this.rand.nextFloat() * 50.0F); + this.targetZ = 0.0D; + this.targetX += (double)(this.rand.nextFloat() * 120.0F - 60.0F); + this.targetZ += (double)(this.rand.nextFloat() * 120.0F - 60.0F); + double var2 = this.posX - this.targetX; + double var4 = this.posY - this.targetY; + double var6 = this.posZ - this.targetZ; + var1 = var2 * var2 + var4 * var4 + var6 * var6 > 100.0D; + } while(!var1); + + this.target = null; + } + + } + + private float simplifyAngle(double var1) { + return (float)MathHelper.wrapAngleTo180_double(var1); + } + + private boolean destroyBlocksInAABB(AxisAlignedBB var1) { + int var2 = MathHelper.floor_double(var1.minX); + int var3 = MathHelper.floor_double(var1.minY); + int var4 = MathHelper.floor_double(var1.minZ); + int var5 = MathHelper.floor_double(var1.maxX); + int var6 = MathHelper.floor_double(var1.maxY); + int var7 = MathHelper.floor_double(var1.maxZ); + boolean var8 = false; + boolean var9 = false; + + for(int var10 = var2; var10 <= var5; ++var10) { + for(int var11 = var3; var11 <= var6; ++var11) { + for(int var12 = var4; var12 <= var7; ++var12) { + int var13 = this.worldObj.getBlockId(var10, var11, var12); + if(var13 != 0) { + if(var13 != Block.obsidian.blockID && var13 != Block.whiteStone.blockID && var13 != Block.bedrock.blockID && this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing")) { + var9 = this.worldObj.setBlockToAir(var10, var11, var12) || var9; + } else { + var8 = true; + } + } + } + } + } + + if(var9) { + double var16 = var1.minX + (var1.maxX - var1.minX) * (double)this.rand.nextFloat(); + double var17 = var1.minY + (var1.maxY - var1.minY) * (double)this.rand.nextFloat(); + double var14 = var1.minZ + (var1.maxZ - var1.minZ) * (double)this.rand.nextFloat(); + this.worldObj.spawnParticle("largeexplode", var16, var17, var14, 0.0D, 0.0D, 0.0D); + } + + return var8; + } + + public boolean attackEntityFromPart(EntityDragonPart var1, DamageSource var2, int var3) { + if(var1 != this.dragonPartHead) { + var3 = var3 / 4 + 1; + } + + float var4 = this.rotationYaw * (float)Math.PI / 180.0F; + float var5 = MathHelper.sin(var4); + float var6 = MathHelper.cos(var4); + this.targetX = this.posX + (double)(var5 * 5.0F) + (double)((this.rand.nextFloat() - 0.5F) * 2.0F); + this.targetY = this.posY + (double)(this.rand.nextFloat() * 3.0F) + 1.0D; + this.targetZ = this.posZ - (double)(var6 * 5.0F) + (double)((this.rand.nextFloat() - 0.5F) * 2.0F); + this.target = null; + if(var2.getEntity() instanceof EntityPlayer || var2.isExplosion()) { + this.func_82195_e(var2, var3); + } + + return true; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + return false; + } + + protected boolean func_82195_e(DamageSource var1, int var2) { + return super.attackEntityFrom(var1, var2); + } + + protected void onDeathUpdate() { + ++this.deathTicks; + if(this.deathTicks >= 180 && this.deathTicks <= 200) { + float var1 = (this.rand.nextFloat() - 0.5F) * 8.0F; + float var2 = (this.rand.nextFloat() - 0.5F) * 4.0F; + float var3 = (this.rand.nextFloat() - 0.5F) * 8.0F; + this.worldObj.spawnParticle("hugeexplosion", this.posX + (double)var1, this.posY + 2.0D + (double)var2, this.posZ + (double)var3, 0.0D, 0.0D, 0.0D); + } + + int var4; + int var5; + if(!this.worldObj.isRemote) { + if(this.deathTicks > 150 && this.deathTicks % 5 == 0) { + var4 = 1000; + + while(var4 > 0) { + var5 = EntityXPOrb.getXPSplit(var4); + var4 -= var5; + this.worldObj.spawnEntityInWorld(new EntityXPOrb(this.worldObj, this.posX, this.posY, this.posZ, var5)); + } + } + + if(this.deathTicks == 1) { + this.worldObj.func_82739_e(1018, (int)this.posX, (int)this.posY, (int)this.posZ, 0); + } + } + + this.moveEntity(0.0D, (double)0.1F, 0.0D); + this.renderYawOffset = this.rotationYaw += 20.0F; + if(this.deathTicks == 200 && !this.worldObj.isRemote) { + var4 = 2000; + + while(var4 > 0) { + var5 = EntityXPOrb.getXPSplit(var4); + var4 -= var5; + this.worldObj.spawnEntityInWorld(new EntityXPOrb(this.worldObj, this.posX, this.posY, this.posZ, var5)); + } + + this.createEnderPortal(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posZ)); + this.setDead(); + } + + } + + private void createEnderPortal(int var1, int var2) { + byte var3 = 64; + BlockEndPortal.bossDefeated = true; + byte var4 = 4; + + for(int var5 = var3 - 1; var5 <= var3 + 32; ++var5) { + for(int var6 = var1 - var4; var6 <= var1 + var4; ++var6) { + for(int var7 = var2 - var4; var7 <= var2 + var4; ++var7) { + double var8 = (double)(var6 - var1); + double var10 = (double)(var7 - var2); + double var12 = var8 * var8 + var10 * var10; + if(var12 <= ((double)var4 - 0.5D) * ((double)var4 - 0.5D)) { + if(var5 < var3) { + if(var12 <= ((double)(var4 - 1) - 0.5D) * ((double)(var4 - 1) - 0.5D)) { + this.worldObj.setBlock(var6, var5, var7, Block.bedrock.blockID); + } + } else if(var5 > var3) { + this.worldObj.setBlock(var6, var5, var7, 0); + } else if(var12 > ((double)(var4 - 1) - 0.5D) * ((double)(var4 - 1) - 0.5D)) { + this.worldObj.setBlock(var6, var5, var7, Block.bedrock.blockID); + } else { + this.worldObj.setBlock(var6, var5, var7, Block.endPortal.blockID); + } + } + } + } + } + + this.worldObj.setBlock(var1, var3 + 0, var2, Block.bedrock.blockID); + this.worldObj.setBlock(var1, var3 + 1, var2, Block.bedrock.blockID); + this.worldObj.setBlock(var1, var3 + 2, var2, Block.bedrock.blockID); + this.worldObj.setBlock(var1 - 1, var3 + 2, var2, Block.torchWood.blockID); + this.worldObj.setBlock(var1 + 1, var3 + 2, var2, Block.torchWood.blockID); + this.worldObj.setBlock(var1, var3 + 2, var2 - 1, Block.torchWood.blockID); + this.worldObj.setBlock(var1, var3 + 2, var2 + 1, Block.torchWood.blockID); + this.worldObj.setBlock(var1, var3 + 3, var2, Block.bedrock.blockID); + this.worldObj.setBlock(var1, var3 + 4, var2, Block.dragonEgg.blockID); + BlockEndPortal.bossDefeated = false; + } + + protected void despawnEntity() { + } + + public Entity[] getParts() { + return this.dragonPartArray; + } + + public boolean canBeCollidedWith() { + return false; + } + + public int getBossHealth() { + return this.dataWatcher.getWatchableObjectInt(16); + } + + public World func_82194_d() { + return this.worldObj; + } + + protected String getLivingSound() { + return "mob.enderdragon.growl"; + } + + protected String getHurtSound() { + return "mob.enderdragon.hit"; + } + + protected float getSoundVolume() { + return 5.0F; + } +} diff --git a/src/net/minecraft/src/EntityDragonPart.java b/src/net/minecraft/src/EntityDragonPart.java new file mode 100644 index 0000000..e373a7d --- /dev/null +++ b/src/net/minecraft/src/EntityDragonPart.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +public class EntityDragonPart extends Entity { + public final IEntityMultiPart entityDragonObj; + public final String name; + + public EntityDragonPart(IEntityMultiPart var1, String var2, float var3, float var4) { + super(var1.func_82194_d()); + this.setSize(var3, var4); + this.entityDragonObj = var1; + this.name = var2; + } + + protected void entityInit() { + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + } + + public boolean canBeCollidedWith() { + return true; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + return this.isEntityInvulnerable() ? false : this.entityDragonObj.attackEntityFromPart(this, var1, var2); + } + + public boolean isEntityEqual(Entity var1) { + return this == var1 || this.entityDragonObj == var1; + } +} diff --git a/src/net/minecraft/src/EntityDropParticleFX.java b/src/net/minecraft/src/EntityDropParticleFX.java new file mode 100644 index 0000000..408fe81 --- /dev/null +++ b/src/net/minecraft/src/EntityDropParticleFX.java @@ -0,0 +1,90 @@ +package net.minecraft.src; + +public class EntityDropParticleFX extends EntityFX { + private Material materialType; + private int bobTimer; + + public EntityDropParticleFX(World var1, double var2, double var4, double var6, Material var8) { + super(var1, var2, var4, var6, 0.0D, 0.0D, 0.0D); + this.motionX = this.motionY = this.motionZ = 0.0D; + if(var8 == 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 = var8; + this.bobTimer = 40; + this.particleMaxAge = (int)(64.0D / (Math.random() * 0.8D + 0.2D)); + this.motionX = this.motionY = this.motionZ = 0.0D; + } + + public int getBrightnessForRender(float var1) { + return this.materialType == Material.water ? super.getBrightnessForRender(var1) : 257; + } + + public float getBrightness(float var1) { + return this.materialType == Material.water ? super.getBrightness(var1) : 1.0F; + } + + 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.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.98F; + this.motionY *= (double)0.98F; + this.motionZ *= (double)0.98F; + if(this.particleMaxAge-- <= 0) { + this.setDead(); + } + + if(this.onGround) { + if(this.materialType == Material.water) { + this.setDead(); + this.worldObj.spawnParticle("splash", this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D); + } else { + this.setParticleTextureIndex(114); + } + + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + Material var1 = this.worldObj.getBlockMaterial(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)); + if(var1.isLiquid() || var1.isSolid()) { + double var2 = (double)((float)(MathHelper.floor_double(this.posY) + 1) - BlockFluid.getFluidHeightPercent(this.worldObj.getBlockMetadata(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)))); + if(this.posY < var2) { + this.setDead(); + } + } + + } +} diff --git a/src/net/minecraft/src/EntityEgg.java b/src/net/minecraft/src/EntityEgg.java new file mode 100644 index 0000000..128a314 --- /dev/null +++ b/src/net/minecraft/src/EntityEgg.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +public class EntityEgg extends EntityThrowable { + public EntityEgg(World var1) { + super(var1); + } + + public EntityEgg(World var1, EntityLiving var2) { + super(var1, var2); + } + + public EntityEgg(World var1, double var2, double var4, double var6) { + super(var1, var2, var4, var6); + } + + protected void onImpact(MovingObjectPosition var1) { + if(var1.entityHit != null) { + var1.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), 0); + } + + if(!this.worldObj.isRemote && this.rand.nextInt(8) == 0) { + byte var2 = 1; + if(this.rand.nextInt(32) == 0) { + var2 = 4; + } + + for(int var3 = 0; var3 < var2; ++var3) { + EntityChicken var4 = new EntityChicken(this.worldObj); + var4.setGrowingAge(-24000); + var4.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 0.0F); + this.worldObj.spawnEntityInWorld(var4); + } + } + + for(int var5 = 0; var5 < 8; ++var5) { + this.worldObj.spawnParticle("snowballpoof", this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D); + } + + if(!this.worldObj.isRemote) { + this.setDead(); + } + + } +} diff --git a/src/net/minecraft/src/EntityEggInfo.java b/src/net/minecraft/src/EntityEggInfo.java new file mode 100644 index 0000000..33eca1c --- /dev/null +++ b/src/net/minecraft/src/EntityEggInfo.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class EntityEggInfo { + public int spawnedID; + public int primaryColor; + public int secondaryColor; + + public EntityEggInfo(int var1, int var2, int var3) { + this.spawnedID = var1; + this.primaryColor = var2; + this.secondaryColor = var3; + } +} diff --git a/src/net/minecraft/src/EntityEnchantmentTableParticleFX.java b/src/net/minecraft/src/EntityEnchantmentTableParticleFX.java new file mode 100644 index 0000000..d6acf0d --- /dev/null +++ b/src/net/minecraft/src/EntityEnchantmentTableParticleFX.java @@ -0,0 +1,67 @@ +package net.minecraft.src; + +public class EntityEnchantmentTableParticleFX extends EntityFX { + private float field_70565_a; + private double field_70568_aq; + private double field_70567_ar; + private double field_70566_as; + + public EntityEnchantmentTableParticleFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1, var2, var4, var6, var8, var10, var12); + this.motionX = var8; + this.motionY = var10; + this.motionZ = var12; + this.field_70568_aq = this.posX = var2; + this.field_70567_ar = this.posY = var4; + this.field_70566_as = this.posZ = var6; + float var14 = this.rand.nextFloat() * 0.6F + 0.4F; + this.field_70565_a = this.particleScale = this.rand.nextFloat() * 0.5F + 0.2F; + this.particleRed = this.particleGreen = this.particleBlue = 1.0F * var14; + this.particleGreen *= 0.9F; + this.particleRed *= 0.9F; + this.particleMaxAge = (int)(Math.random() * 10.0D) + 30; + this.noClip = true; + this.setParticleTextureIndex((int)(Math.random() * 26.0D + 1.0D + 224.0D)); + } + + public int getBrightnessForRender(float var1) { + int var2 = super.getBrightnessForRender(var1); + float var3 = (float)this.particleAge / (float)this.particleMaxAge; + var3 *= var3; + var3 *= var3; + int var4 = var2 & 255; + int var5 = var2 >> 16 & 255; + var5 += (int)(var3 * 15.0F * 16.0F); + if(var5 > 240) { + var5 = 240; + } + + return var4 | var5 << 16; + } + + public float getBrightness(float var1) { + float var2 = super.getBrightness(var1); + float var3 = (float)this.particleAge / (float)this.particleMaxAge; + var3 *= var3; + var3 *= var3; + return var2 * (1.0F - var3) + var3; + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + float var1 = (float)this.particleAge / (float)this.particleMaxAge; + var1 = 1.0F - var1; + float var2 = 1.0F - var1; + var2 *= var2; + var2 *= var2; + this.posX = this.field_70568_aq + this.motionX * (double)var1; + this.posY = this.field_70567_ar + this.motionY * (double)var1 - (double)(var2 * 1.2F); + this.posZ = this.field_70566_as + this.motionZ * (double)var1; + if(this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } + + } +} diff --git a/src/net/minecraft/src/EntityEnderCrystal.java b/src/net/minecraft/src/EntityEnderCrystal.java new file mode 100644 index 0000000..095efed --- /dev/null +++ b/src/net/minecraft/src/EntityEnderCrystal.java @@ -0,0 +1,76 @@ +package net.minecraft.src; + +public class EntityEnderCrystal extends Entity { + public int innerRotation; + public int health; + + public EntityEnderCrystal(World var1) { + super(var1); + this.innerRotation = 0; + this.preventEntitySpawning = true; + this.setSize(2.0F, 2.0F); + this.yOffset = this.height / 2.0F; + this.health = 5; + this.innerRotation = this.rand.nextInt(100000); + } + + public EntityEnderCrystal(World var1, double var2, double var4, double var6) { + this(var1); + this.setPosition(var2, var4, var6); + } + + protected boolean canTriggerWalking() { + return false; + } + + protected void entityInit() { + this.dataWatcher.addObject(8, Integer.valueOf(this.health)); + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + ++this.innerRotation; + this.dataWatcher.updateObject(8, Integer.valueOf(this.health)); + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.posY); + int var3 = MathHelper.floor_double(this.posZ); + if(this.worldObj.getBlockId(var1, var2, var3) != Block.fire.blockID) { + this.worldObj.setBlock(var1, var2, var3, Block.fire.blockID); + } + + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + } + + public float getShadowSize() { + return 0.0F; + } + + public boolean canBeCollidedWith() { + return true; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else { + if(!this.isDead && !this.worldObj.isRemote) { + this.health = 0; + if(this.health <= 0) { + this.setDead(); + if(!this.worldObj.isRemote) { + this.worldObj.createExplosion((Entity)null, this.posX, this.posY, this.posZ, 6.0F, true); + } + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/EntityEnderEye.java b/src/net/minecraft/src/EntityEnderEye.java new file mode 100644 index 0000000..a0b3194 --- /dev/null +++ b/src/net/minecraft/src/EntityEnderEye.java @@ -0,0 +1,156 @@ +package net.minecraft.src; + +public class EntityEnderEye extends Entity { + public int field_70226_a = 0; + private double targetX; + private double targetY; + private double targetZ; + private int despawnTimer; + private boolean shatterOrDrop; + + public EntityEnderEye(World var1) { + super(var1); + this.setSize(0.25F, 0.25F); + } + + protected void entityInit() { + } + + public boolean isInRangeToRenderDist(double var1) { + double var3 = this.boundingBox.getAverageEdgeLength() * 4.0D; + var3 *= 64.0D; + return var1 < var3 * var3; + } + + public EntityEnderEye(World var1, double var2, double var4, double var6) { + super(var1); + this.despawnTimer = 0; + this.setSize(0.25F, 0.25F); + this.setPosition(var2, var4, var6); + this.yOffset = 0.0F; + } + + public void moveTowards(double var1, int var3, double var4) { + double var6 = var1 - this.posX; + double var8 = var4 - this.posZ; + float var10 = MathHelper.sqrt_double(var6 * var6 + var8 * var8); + if(var10 > 12.0F) { + this.targetX = this.posX + var6 / (double)var10 * 12.0D; + this.targetZ = this.posZ + var8 / (double)var10 * 12.0D; + this.targetY = this.posY + 8.0D; + } else { + this.targetX = var1; + this.targetY = (double)var3; + this.targetZ = var4; + } + + this.despawnTimer = 0; + this.shatterOrDrop = this.rand.nextInt(5) > 0; + } + + public void setVelocity(double var1, double var3, double var5) { + this.motionX = var1; + this.motionY = var3; + this.motionZ = var5; + if(this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) { + float var7 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(var1, var5) * 180.0D / (double)((float)Math.PI)); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(var3, (double)var7) * 180.0D / (double)((float)Math.PI)); + } + + } + + 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 var1 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI)); + + for(this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var1) * 180.0D / (double)((float)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.worldObj.isRemote) { + double var2 = this.targetX - this.posX; + double var4 = this.targetZ - this.posZ; + float var6 = (float)Math.sqrt(var2 * var2 + var4 * var4); + float var7 = (float)Math.atan2(var4, var2); + double var8 = (double)var1 + (double)(var6 - var1) * 0.0025D; + if(var6 < 1.0F) { + var8 *= 0.8D; + this.motionY *= 0.8D; + } + + this.motionX = Math.cos((double)var7) * var8; + this.motionZ = Math.sin((double)var7) * var8; + if(this.posY < this.targetY) { + this.motionY += (1.0D - this.motionY) * (double)0.015F; + } else { + this.motionY += (-1.0D - this.motionY) * (double)0.015F; + } + } + + float var10 = 0.25F; + if(this.isInWater()) { + for(int var3 = 0; var3 < 4; ++var3) { + this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)var10, this.posY - this.motionY * (double)var10, this.posZ - this.motionZ * (double)var10, this.motionX, this.motionY, this.motionZ); + } + } else { + this.worldObj.spawnParticle("portal", this.posX - this.motionX * (double)var10 + this.rand.nextDouble() * 0.6D - 0.3D, this.posY - this.motionY * (double)var10 - 0.5D, this.posZ - this.motionZ * (double)var10 + this.rand.nextDouble() * 0.6D - 0.3D, this.motionX, this.motionY, this.motionZ); + } + + if(!this.worldObj.isRemote) { + this.setPosition(this.posX, this.posY, this.posZ); + ++this.despawnTimer; + if(this.despawnTimer > 80 && !this.worldObj.isRemote) { + this.setDead(); + if(this.shatterOrDrop) { + this.worldObj.spawnEntityInWorld(new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, new ItemStack(Item.eyeOfEnder))); + } else { + this.worldObj.playAuxSFX(2003, (int)Math.round(this.posX), (int)Math.round(this.posY), (int)Math.round(this.posZ), 0); + } + } + } + + } + + public void writeEntityToNBT(NBTTagCompound var1) { + } + + public void readEntityFromNBT(NBTTagCompound var1) { + } + + public float getShadowSize() { + return 0.0F; + } + + public float getBrightness(float var1) { + return 1.0F; + } + + public int getBrightnessForRender(float var1) { + return 15728880; + } + + public boolean canAttackWithItem() { + return false; + } +} diff --git a/src/net/minecraft/src/EntityEnderPearl.java b/src/net/minecraft/src/EntityEnderPearl.java new file mode 100644 index 0000000..891c8d6 --- /dev/null +++ b/src/net/minecraft/src/EntityEnderPearl.java @@ -0,0 +1,39 @@ +package net.minecraft.src; + +public class EntityEnderPearl extends EntityThrowable { + public EntityEnderPearl(World var1) { + super(var1); + } + + public EntityEnderPearl(World var1, EntityLiving var2) { + super(var1, var2); + } + + public EntityEnderPearl(World var1, double var2, double var4, double var6) { + super(var1, var2, var4, var6); + } + + protected void onImpact(MovingObjectPosition var1) { + if(var1.entityHit != null) { + var1.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), 0); + } + + for(int var2 = 0; var2 < 32; ++var2) { + this.worldObj.spawnParticle("portal", this.posX, this.posY + this.rand.nextDouble() * 2.0D, this.posZ, this.rand.nextGaussian(), 0.0D, this.rand.nextGaussian()); + } + + if(!this.worldObj.isRemote) { + if(this.getThrower() != null && this.getThrower() instanceof EntityPlayerMP) { + EntityPlayerMP var3 = (EntityPlayerMP)this.getThrower(); + if(!var3.playerNetServerHandler.connectionClosed && var3.worldObj == this.worldObj) { + this.getThrower().setPositionAndUpdate(this.posX, this.posY, this.posZ); + this.getThrower().fallDistance = 0.0F; + this.getThrower().attackEntityFrom(DamageSource.fall, 5); + } + } + + this.setDead(); + } + + } +} diff --git a/src/net/minecraft/src/EntityEnderman.java b/src/net/minecraft/src/EntityEnderman.java new file mode 100644 index 0000000..be1ac9d --- /dev/null +++ b/src/net/minecraft/src/EntityEnderman.java @@ -0,0 +1,337 @@ +package net.minecraft.src; + +public class EntityEnderman extends EntityMob { + private static boolean[] carriableBlocks = new boolean[256]; + private int teleportDelay = 0; + private int field_70826_g = 0; + private boolean field_104003_g; + + public EntityEnderman(World var1) { + super(var1); + this.texture = "/mob/enderman.png"; + this.moveSpeed = 0.2F; + this.setSize(0.6F, 2.9F); + this.stepHeight = 1.0F; + } + + public int getMaxHealth() { + return 40; + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, new Byte((byte)0)); + this.dataWatcher.addObject(17, new Byte((byte)0)); + this.dataWatcher.addObject(18, new Byte((byte)0)); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setShort("carried", (short)this.getCarried()); + var1.setShort("carriedData", (short)this.getCarryingData()); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.setCarried(var1.getShort("carried")); + this.setCarryingData(var1.getShort("carriedData")); + } + + protected Entity findPlayerToAttack() { + EntityPlayer var1 = this.worldObj.getClosestVulnerablePlayerToEntity(this, 64.0D); + if(var1 != null) { + if(this.shouldAttackPlayer(var1)) { + this.field_104003_g = true; + if(this.field_70826_g == 0) { + this.worldObj.playSoundAtEntity(var1, "mob.endermen.stare", 1.0F, 1.0F); + } + + if(this.field_70826_g++ == 5) { + this.field_70826_g = 0; + this.setScreaming(true); + return var1; + } + } else { + this.field_70826_g = 0; + } + } + + return null; + } + + private boolean shouldAttackPlayer(EntityPlayer var1) { + ItemStack var2 = var1.inventory.armorInventory[3]; + if(var2 != null && var2.itemID == Block.pumpkin.blockID) { + return false; + } else { + Vec3 var3 = var1.getLook(1.0F).normalize(); + Vec3 var4 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX - var1.posX, this.boundingBox.minY + (double)(this.height / 2.0F) - (var1.posY + (double)var1.getEyeHeight()), this.posZ - var1.posZ); + double var5 = var4.lengthVector(); + var4 = var4.normalize(); + double var7 = var3.dotProduct(var4); + return var7 > 1.0D - 0.025D / var5 ? var1.canEntityBeSeen(this) : false; + } + } + + public void onLivingUpdate() { + if(this.isWet()) { + this.attackEntityFrom(DamageSource.drown, 1); + } + + this.moveSpeed = this.entityToAttack != null ? 6.5F : 0.3F; + int var1; + if(!this.worldObj.isRemote && this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing")) { + int var2; + int var3; + int var4; + if(this.getCarried() == 0) { + if(this.rand.nextInt(20) == 0) { + var1 = MathHelper.floor_double(this.posX - 2.0D + this.rand.nextDouble() * 4.0D); + var2 = MathHelper.floor_double(this.posY + this.rand.nextDouble() * 3.0D); + var3 = MathHelper.floor_double(this.posZ - 2.0D + this.rand.nextDouble() * 4.0D); + var4 = this.worldObj.getBlockId(var1, var2, var3); + if(carriableBlocks[var4]) { + this.setCarried(this.worldObj.getBlockId(var1, var2, var3)); + this.setCarryingData(this.worldObj.getBlockMetadata(var1, var2, var3)); + this.worldObj.setBlock(var1, var2, var3, 0); + } + } + } else if(this.rand.nextInt(2000) == 0) { + var1 = MathHelper.floor_double(this.posX - 1.0D + this.rand.nextDouble() * 2.0D); + var2 = MathHelper.floor_double(this.posY + this.rand.nextDouble() * 2.0D); + var3 = MathHelper.floor_double(this.posZ - 1.0D + this.rand.nextDouble() * 2.0D); + var4 = this.worldObj.getBlockId(var1, var2, var3); + int var5 = this.worldObj.getBlockId(var1, var2 - 1, var3); + if(var4 == 0 && var5 > 0 && Block.blocksList[var5].renderAsNormalBlock()) { + this.worldObj.setBlock(var1, var2, var3, this.getCarried(), this.getCarryingData(), 3); + this.setCarried(0); + } + } + } + + for(var1 = 0; var1 < 2; ++var1) { + this.worldObj.spawnParticle("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); + } + + if(this.worldObj.isDaytime() && !this.worldObj.isRemote) { + float var6 = this.getBrightness(1.0F); + if(var6 > 0.5F && this.worldObj.canBlockSeeTheSky(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)) && this.rand.nextFloat() * 30.0F < (var6 - 0.4F) * 2.0F) { + this.entityToAttack = null; + this.setScreaming(false); + this.field_104003_g = false; + this.teleportRandomly(); + } + } + + if(this.isWet() || this.isBurning()) { + this.entityToAttack = null; + this.setScreaming(false); + this.field_104003_g = false; + this.teleportRandomly(); + } + + if(this.isScreaming() && !this.field_104003_g && this.rand.nextInt(100) == 0) { + this.setScreaming(false); + } + + this.isJumping = false; + if(this.entityToAttack != null) { + this.faceEntity(this.entityToAttack, 100.0F, 100.0F); + } + + if(!this.worldObj.isRemote && this.isEntityAlive()) { + if(this.entityToAttack != null) { + if(this.entityToAttack instanceof EntityPlayer && this.shouldAttackPlayer((EntityPlayer)this.entityToAttack)) { + this.moveStrafing = this.moveForward = 0.0F; + this.moveSpeed = 0.0F; + if(this.entityToAttack.getDistanceSqToEntity(this) < 16.0D) { + this.teleportRandomly(); + } + + this.teleportDelay = 0; + } else if(this.entityToAttack.getDistanceSqToEntity(this) > 256.0D && this.teleportDelay++ >= 30 && this.teleportToEntity(this.entityToAttack)) { + this.teleportDelay = 0; + } + } else { + this.setScreaming(false); + this.teleportDelay = 0; + } + } + + super.onLivingUpdate(); + } + + protected boolean teleportRandomly() { + double var1 = this.posX + (this.rand.nextDouble() - 0.5D) * 64.0D; + double var3 = this.posY + (double)(this.rand.nextInt(64) - 32); + double var5 = this.posZ + (this.rand.nextDouble() - 0.5D) * 64.0D; + return this.teleportTo(var1, var3, var5); + } + + protected boolean teleportToEntity(Entity var1) { + Vec3 var2 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX - var1.posX, this.boundingBox.minY + (double)(this.height / 2.0F) - var1.posY + (double)var1.getEyeHeight(), this.posZ - var1.posZ); + var2 = var2.normalize(); + double var3 = 16.0D; + double var5 = this.posX + (this.rand.nextDouble() - 0.5D) * 8.0D - var2.xCoord * var3; + double var7 = this.posY + (double)(this.rand.nextInt(16) - 8) - var2.yCoord * var3; + double var9 = this.posZ + (this.rand.nextDouble() - 0.5D) * 8.0D - var2.zCoord * var3; + return this.teleportTo(var5, var7, var9); + } + + protected boolean teleportTo(double var1, double var3, double var5) { + double var7 = this.posX; + double var9 = this.posY; + double var11 = this.posZ; + this.posX = var1; + this.posY = var3; + this.posZ = var5; + boolean var13 = false; + int var14 = MathHelper.floor_double(this.posX); + int var15 = MathHelper.floor_double(this.posY); + int var16 = MathHelper.floor_double(this.posZ); + int var18; + if(this.worldObj.blockExists(var14, var15, var16)) { + boolean var17 = false; + + while(true) { + while(!var17 && var15 > 0) { + var18 = this.worldObj.getBlockId(var14, var15 - 1, var16); + if(var18 != 0 && Block.blocksList[var18].blockMaterial.blocksMovement()) { + var17 = true; + } else { + --this.posY; + --var15; + } + } + + if(var17) { + this.setPosition(this.posX, this.posY, this.posZ); + if(this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).isEmpty() && !this.worldObj.isAnyLiquid(this.boundingBox)) { + var13 = true; + } + } + break; + } + } + + if(!var13) { + this.setPosition(var7, var9, var11); + return false; + } else { + short var30 = 128; + + for(var18 = 0; var18 < var30; ++var18) { + double var19 = (double)var18 / ((double)var30 - 1.0D); + float var21 = (this.rand.nextFloat() - 0.5F) * 0.2F; + float var22 = (this.rand.nextFloat() - 0.5F) * 0.2F; + float var23 = (this.rand.nextFloat() - 0.5F) * 0.2F; + double var24 = var7 + (this.posX - var7) * var19 + (this.rand.nextDouble() - 0.5D) * (double)this.width * 2.0D; + double var26 = var9 + (this.posY - var9) * var19 + this.rand.nextDouble() * (double)this.height; + double var28 = var11 + (this.posZ - var11) * var19 + (this.rand.nextDouble() - 0.5D) * (double)this.width * 2.0D; + this.worldObj.spawnParticle("portal", var24, var26, var28, (double)var21, (double)var22, (double)var23); + } + + this.worldObj.playSoundEffect(var7, var9, var11, "mob.endermen.portal", 1.0F, 1.0F); + this.playSound("mob.endermen.portal", 1.0F, 1.0F); + return true; + } + } + + protected String getLivingSound() { + return this.isScreaming() ? "mob.endermen.scream" : "mob.endermen.idle"; + } + + protected String getHurtSound() { + return "mob.endermen.hit"; + } + + protected String getDeathSound() { + return "mob.endermen.death"; + } + + protected int getDropItemId() { + return Item.enderPearl.itemID; + } + + protected void dropFewItems(boolean var1, int var2) { + int var3 = this.getDropItemId(); + if(var3 > 0) { + int var4 = this.rand.nextInt(2 + var2); + + for(int var5 = 0; var5 < var4; ++var5) { + this.dropItem(var3, 1); + } + } + + } + + public void setCarried(int var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var1 & 255))); + } + + public int getCarried() { + return this.dataWatcher.getWatchableObjectByte(16); + } + + public void setCarryingData(int var1) { + this.dataWatcher.updateObject(17, Byte.valueOf((byte)(var1 & 255))); + } + + public int getCarryingData() { + return this.dataWatcher.getWatchableObjectByte(17); + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else { + this.setScreaming(true); + if(var1 instanceof EntityDamageSource && var1.getEntity() instanceof EntityPlayer) { + this.field_104003_g = true; + } + + if(var1 instanceof EntityDamageSourceIndirect) { + this.field_104003_g = false; + + for(int var3 = 0; var3 < 64; ++var3) { + if(this.teleportRandomly()) { + return true; + } + } + + return false; + } else { + return super.attackEntityFrom(var1, var2); + } + } + } + + public boolean isScreaming() { + return this.dataWatcher.getWatchableObjectByte(18) > 0; + } + + public void setScreaming(boolean var1) { + this.dataWatcher.updateObject(18, Byte.valueOf((byte)(var1 ? 1 : 0))); + } + + public int getAttackStrength(Entity var1) { + return 7; + } + + static { + carriableBlocks[Block.grass.blockID] = true; + carriableBlocks[Block.dirt.blockID] = true; + carriableBlocks[Block.sand.blockID] = true; + carriableBlocks[Block.gravel.blockID] = true; + carriableBlocks[Block.plantYellow.blockID] = true; + carriableBlocks[Block.plantRed.blockID] = true; + carriableBlocks[Block.mushroomBrown.blockID] = true; + carriableBlocks[Block.mushroomRed.blockID] = true; + carriableBlocks[Block.tnt.blockID] = true; + carriableBlocks[Block.cactus.blockID] = true; + carriableBlocks[Block.blockClay.blockID] = true; + carriableBlocks[Block.pumpkin.blockID] = true; + carriableBlocks[Block.melon.blockID] = true; + carriableBlocks[Block.mycelium.blockID] = true; + } +} diff --git a/src/net/minecraft/src/EntityExpBottle.java b/src/net/minecraft/src/EntityExpBottle.java new file mode 100644 index 0000000..d193c4e --- /dev/null +++ b/src/net/minecraft/src/EntityExpBottle.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +public class EntityExpBottle extends EntityThrowable { + public EntityExpBottle(World var1) { + super(var1); + } + + public EntityExpBottle(World var1, EntityLiving var2) { + super(var1, var2); + } + + public EntityExpBottle(World var1, double var2, double var4, double var6) { + super(var1, var2, var4, var6); + } + + protected float getGravityVelocity() { + return 0.07F; + } + + protected float func_70182_d() { + return 0.7F; + } + + protected float func_70183_g() { + return -20.0F; + } + + protected void onImpact(MovingObjectPosition var1) { + if(!this.worldObj.isRemote) { + this.worldObj.playAuxSFX(2002, (int)Math.round(this.posX), (int)Math.round(this.posY), (int)Math.round(this.posZ), 0); + int var2 = 3 + this.worldObj.rand.nextInt(5) + this.worldObj.rand.nextInt(5); + + while(var2 > 0) { + int var3 = EntityXPOrb.getXPSplit(var2); + var2 -= var3; + this.worldObj.spawnEntityInWorld(new EntityXPOrb(this.worldObj, this.posX, this.posY, this.posZ, var3)); + } + + this.setDead(); + } + + } +} diff --git a/src/net/minecraft/src/EntityExplodeFX.java b/src/net/minecraft/src/EntityExplodeFX.java new file mode 100644 index 0000000..d8e287d --- /dev/null +++ b/src/net/minecraft/src/EntityExplodeFX.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +public class EntityExplodeFX extends EntityFX { + public EntityExplodeFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1, var2, var4, var6, var8, var10, var12); + this.motionX = var8 + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.05F); + this.motionY = var10 + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.05F); + this.motionZ = var12 + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.05F); + this.particleRed = this.particleGreen = this.particleBlue = this.rand.nextFloat() * 0.3F + 0.7F; + 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.setDead(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.motionY += 0.004D; + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.9F; + this.motionY *= (double)0.9F; + this.motionZ *= (double)0.9F; + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + } +} diff --git a/src/net/minecraft/src/EntityFX.java b/src/net/minecraft/src/EntityFX.java new file mode 100644 index 0000000..dc14fef --- /dev/null +++ b/src/net/minecraft/src/EntityFX.java @@ -0,0 +1,182 @@ +package net.minecraft.src; + +public class EntityFX extends Entity { + protected int particleTextureIndexX; + protected int particleTextureIndexY; + protected float particleTextureJitterX; + protected float particleTextureJitterY; + protected int particleAge; + protected int particleMaxAge; + protected float particleScale; + protected float particleGravity; + protected float particleRed; + protected float particleGreen; + protected float particleBlue; + protected float particleAlpha; + protected Icon particleIcon; + public static double interpPosX; + public static double interpPosY; + public static double interpPosZ; + + protected EntityFX(World var1, double var2, double var4, double var6) { + super(var1); + this.particleAge = 0; + this.particleMaxAge = 0; + this.particleAlpha = 1.0F; + this.particleIcon = null; + this.setSize(0.2F, 0.2F); + this.yOffset = this.height / 2.0F; + this.setPosition(var2, var4, var6); + this.lastTickPosX = var2; + this.lastTickPosY = var4; + this.lastTickPosZ = var6; + this.particleRed = this.particleGreen = 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; + } + + public EntityFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + this(var1, var2, var4, var6); + this.motionX = var8 + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.4F); + this.motionY = var10 + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.4F); + this.motionZ = var12 + (double)((float)(Math.random() * 2.0D - 1.0D) * 0.4F); + float var14 = (float)(Math.random() + Math.random() + 1.0D) * 0.15F; + float var15 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.motionX = this.motionX / (double)var15 * (double)var14 * (double)0.4F; + this.motionY = this.motionY / (double)var15 * (double)var14 * (double)0.4F + (double)0.1F; + this.motionZ = this.motionZ / (double)var15 * (double)var14 * (double)0.4F; + } + + public EntityFX multiplyVelocity(float var1) { + this.motionX *= (double)var1; + this.motionY = (this.motionY - (double)0.1F) * (double)var1 + (double)0.1F; + this.motionZ *= (double)var1; + return this; + } + + public EntityFX multipleParticleScaleBy(float var1) { + this.setSize(0.2F * var1, 0.2F * var1); + this.particleScale *= var1; + return this; + } + + public void setRBGColorF(float var1, float var2, float var3) { + this.particleRed = var1; + this.particleGreen = var2; + this.particleBlue = var3; + } + + public void setAlphaF(float var1) { + this.particleAlpha = var1; + } + + public float getRedColorF() { + return this.particleRed; + } + + public float getGreenColorF() { + return this.particleGreen; + } + + public float getBlueColorF() { + return this.particleBlue; + } + + protected boolean canTriggerWalking() { + return false; + } + + protected void entityInit() { + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + if(this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } + + this.motionY -= 0.04D * (double)this.particleGravity; + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.98F; + this.motionY *= (double)0.98F; + this.motionZ *= (double)0.98F; + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = (float)this.particleTextureIndexX / 16.0F; + float var9 = var8 + 0.999F / 16.0F; + float var10 = (float)this.particleTextureIndexY / 16.0F; + float var11 = var10 + 0.999F / 16.0F; + float var12 = 0.1F * this.particleScale; + if(this.particleIcon != null) { + var8 = this.particleIcon.getMinU(); + var9 = this.particleIcon.getMaxU(); + var10 = this.particleIcon.getMinV(); + var11 = this.particleIcon.getMaxV(); + } + + float var13 = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)var2 - interpPosX); + float var14 = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)var2 - interpPosY); + float var15 = (float)(this.prevPosZ + (this.posZ - this.prevPosZ) * (double)var2 - interpPosZ); + float var16 = 1.0F; + var1.setColorRGBA_F(this.particleRed * var16, this.particleGreen * var16, this.particleBlue * var16, this.particleAlpha); + var1.addVertexWithUV((double)(var13 - var3 * var12 - var6 * var12), (double)(var14 - var4 * var12), (double)(var15 - var5 * var12 - var7 * var12), (double)var9, (double)var11); + var1.addVertexWithUV((double)(var13 - var3 * var12 + var6 * var12), (double)(var14 + var4 * var12), (double)(var15 - var5 * var12 + var7 * var12), (double)var9, (double)var10); + var1.addVertexWithUV((double)(var13 + var3 * var12 + var6 * var12), (double)(var14 + var4 * var12), (double)(var15 + var5 * var12 + var7 * var12), (double)var8, (double)var10); + var1.addVertexWithUV((double)(var13 + var3 * var12 - var6 * var12), (double)(var14 - var4 * var12), (double)(var15 + var5 * var12 - var7 * var12), (double)var8, (double)var11); + } + + public int getFXLayer() { + return 0; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + } + + public void readEntityFromNBT(NBTTagCompound var1) { + } + + public void setParticleIcon(RenderEngine var1, Icon var2) { + if(this.getFXLayer() == 1) { + this.particleIcon = var2; + } else { + if(this.getFXLayer() != 2) { + throw new RuntimeException("Invalid call to Particle.setTex, use coordinate methods"); + } + + this.particleIcon = var2; + } + + } + + public void setParticleTextureIndex(int var1) { + if(this.getFXLayer() != 0) { + throw new RuntimeException("Invalid call to Particle.setMiscTex"); + } else { + this.particleTextureIndexX = var1 % 16; + this.particleTextureIndexY = var1 / 16; + } + } + + public void nextTextureIndexX() { + ++this.particleTextureIndexX; + } + + public boolean canAttackWithItem() { + return false; + } + + 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; + } +} diff --git a/src/net/minecraft/src/EntityFallingSand.java b/src/net/minecraft/src/EntityFallingSand.java new file mode 100644 index 0000000..f291294 --- /dev/null +++ b/src/net/minecraft/src/EntityFallingSand.java @@ -0,0 +1,232 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; + +public class EntityFallingSand extends Entity { + public int blockID; + public int metadata; + public int fallTime; + public boolean shouldDropItem; + private boolean isBreakingAnvil; + private boolean isAnvil; + private int fallHurtMax; + private float fallHurtAmount; + public NBTTagCompound fallingBlockTileEntityData; + + public EntityFallingSand(World var1) { + super(var1); + this.fallTime = 0; + this.shouldDropItem = true; + this.isBreakingAnvil = false; + this.isAnvil = false; + this.fallHurtMax = 40; + this.fallHurtAmount = 2.0F; + this.fallingBlockTileEntityData = null; + } + + public EntityFallingSand(World var1, double var2, double var4, double var6, int var8) { + this(var1, var2, var4, var6, var8, 0); + } + + public EntityFallingSand(World var1, double var2, double var4, double var6, int var8, int var9) { + super(var1); + this.fallTime = 0; + this.shouldDropItem = true; + this.isBreakingAnvil = false; + this.isAnvil = false; + this.fallHurtMax = 40; + this.fallHurtAmount = 2.0F; + this.fallingBlockTileEntityData = null; + this.blockID = var8; + this.metadata = var9; + this.preventEntitySpawning = true; + this.setSize(0.98F, 0.98F); + this.yOffset = this.height / 2.0F; + this.setPosition(var2, var4, var6); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.prevPosX = var2; + this.prevPosY = var4; + this.prevPosZ = var6; + } + + protected boolean canTriggerWalking() { + return false; + } + + protected void entityInit() { + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public void onUpdate() { + if(this.blockID == 0) { + this.setDead(); + } else { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + ++this.fallTime; + this.motionY -= (double)0.04F; + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.98F; + this.motionY *= (double)0.98F; + this.motionZ *= (double)0.98F; + if(!this.worldObj.isRemote) { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.posY); + int var3 = MathHelper.floor_double(this.posZ); + if(this.fallTime == 1) { + if(this.worldObj.getBlockId(var1, var2, var3) != this.blockID) { + this.setDead(); + return; + } + + this.worldObj.setBlockToAir(var1, var2, var3); + } + + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + this.motionY *= -0.5D; + if(this.worldObj.getBlockId(var1, var2, var3) != Block.pistonMoving.blockID) { + this.setDead(); + if(!this.isBreakingAnvil && this.worldObj.canPlaceEntityOnSide(this.blockID, var1, var2, var3, true, 1, (Entity)null, (ItemStack)null) && !BlockSand.canFallBelow(this.worldObj, var1, var2 - 1, var3) && this.worldObj.setBlock(var1, var2, var3, this.blockID, this.metadata, 3)) { + if(Block.blocksList[this.blockID] instanceof BlockSand) { + ((BlockSand)Block.blocksList[this.blockID]).onFinishFalling(this.worldObj, var1, var2, var3, this.metadata); + } + + if(this.fallingBlockTileEntityData != null && Block.blocksList[this.blockID] instanceof ITileEntityProvider) { + TileEntity var4 = this.worldObj.getBlockTileEntity(var1, var2, var3); + if(var4 != null) { + NBTTagCompound var5 = new NBTTagCompound(); + var4.writeToNBT(var5); + Iterator var6 = this.fallingBlockTileEntityData.getTags().iterator(); + + while(var6.hasNext()) { + NBTBase var7 = (NBTBase)var6.next(); + if(!var7.getName().equals("x") && !var7.getName().equals("y") && !var7.getName().equals("z")) { + var5.setTag(var7.getName(), var7.copy()); + } + } + + var4.readFromNBT(var5); + var4.onInventoryChanged(); + } + } + } else if(this.shouldDropItem && !this.isBreakingAnvil) { + this.entityDropItem(new ItemStack(this.blockID, 1, Block.blocksList[this.blockID].damageDropped(this.metadata)), 0.0F); + } + } + } else if(this.fallTime > 100 && !this.worldObj.isRemote && (var2 < 1 || var2 > 256) || this.fallTime > 600) { + if(this.shouldDropItem) { + this.entityDropItem(new ItemStack(this.blockID, 1, Block.blocksList[this.blockID].damageDropped(this.metadata)), 0.0F); + } + + this.setDead(); + } + } + + } + } + + protected void fall(float var1) { + if(this.isAnvil) { + int var2 = MathHelper.ceiling_float_int(var1 - 1.0F); + if(var2 > 0) { + ArrayList var3 = new ArrayList(this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox)); + DamageSource var4 = this.blockID == Block.anvil.blockID ? DamageSource.anvil : DamageSource.fallingBlock; + Iterator var5 = var3.iterator(); + + while(var5.hasNext()) { + Entity var6 = (Entity)var5.next(); + var6.attackEntityFrom(var4, Math.min(MathHelper.floor_float((float)var2 * this.fallHurtAmount), this.fallHurtMax)); + } + + if(this.blockID == Block.anvil.blockID && (double)this.rand.nextFloat() < (double)0.05F + (double)var2 * 0.05D) { + int var7 = this.metadata >> 2; + int var8 = this.metadata & 3; + ++var7; + if(var7 > 2) { + this.isBreakingAnvil = true; + } else { + this.metadata = var8 | var7 << 2; + } + } + } + } + + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + var1.setByte("Tile", (byte)this.blockID); + var1.setInteger("TileID", this.blockID); + var1.setByte("Data", (byte)this.metadata); + var1.setByte("Time", (byte)this.fallTime); + var1.setBoolean("DropItem", this.shouldDropItem); + var1.setBoolean("HurtEntities", this.isAnvil); + var1.setFloat("FallHurtAmount", this.fallHurtAmount); + var1.setInteger("FallHurtMax", this.fallHurtMax); + if(this.fallingBlockTileEntityData != null) { + var1.setCompoundTag("TileEntityData", this.fallingBlockTileEntityData); + } + + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + if(var1.hasKey("TileID")) { + this.blockID = var1.getInteger("TileID"); + } else { + this.blockID = var1.getByte("Tile") & 255; + } + + this.metadata = var1.getByte("Data") & 255; + this.fallTime = var1.getByte("Time") & 255; + if(var1.hasKey("HurtEntities")) { + this.isAnvil = var1.getBoolean("HurtEntities"); + this.fallHurtAmount = var1.getFloat("FallHurtAmount"); + this.fallHurtMax = var1.getInteger("FallHurtMax"); + } else if(this.blockID == Block.anvil.blockID) { + this.isAnvil = true; + } + + if(var1.hasKey("DropItem")) { + this.shouldDropItem = var1.getBoolean("DropItem"); + } + + if(var1.hasKey("TileEntityData")) { + this.fallingBlockTileEntityData = var1.getCompoundTag("TileEntityData"); + } + + if(this.blockID == 0) { + this.blockID = Block.sand.blockID; + } + + } + + public float getShadowSize() { + return 0.0F; + } + + public World getWorld() { + return this.worldObj; + } + + public void setIsAnvil(boolean var1) { + this.isAnvil = var1; + } + + public boolean canRenderOnFire() { + return false; + } + + public void func_85029_a(CrashReportCategory var1) { + super.func_85029_a(var1); + var1.addCrashSection("Immitating block ID", Integer.valueOf(this.blockID)); + var1.addCrashSection("Immitating block data", Integer.valueOf(this.metadata)); + } +} diff --git a/src/net/minecraft/src/EntityFireball.java b/src/net/minecraft/src/EntityFireball.java new file mode 100644 index 0000000..fcc9bfe --- /dev/null +++ b/src/net/minecraft/src/EntityFireball.java @@ -0,0 +1,246 @@ +package net.minecraft.src; + +import java.util.List; + +public abstract class EntityFireball extends Entity { + private int xTile = -1; + private int yTile = -1; + private int zTile = -1; + private int inTile = 0; + private boolean inGround = false; + public EntityLiving shootingEntity; + private int ticksAlive; + private int ticksInAir = 0; + public double accelerationX; + public double accelerationY; + public double accelerationZ; + + public EntityFireball(World var1) { + super(var1); + this.setSize(1.0F, 1.0F); + } + + protected void entityInit() { + } + + public boolean isInRangeToRenderDist(double var1) { + double var3 = this.boundingBox.getAverageEdgeLength() * 4.0D; + var3 *= 64.0D; + return var1 < var3 * var3; + } + + public EntityFireball(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1); + this.setSize(1.0F, 1.0F); + this.setLocationAndAngles(var2, var4, var6, this.rotationYaw, this.rotationPitch); + this.setPosition(var2, var4, var6); + double var14 = (double)MathHelper.sqrt_double(var8 * var8 + var10 * var10 + var12 * var12); + this.accelerationX = var8 / var14 * 0.1D; + this.accelerationY = var10 / var14 * 0.1D; + this.accelerationZ = var12 / var14 * 0.1D; + } + + public EntityFireball(World var1, EntityLiving var2, double var3, double var5, double var7) { + super(var1); + this.shootingEntity = var2; + this.setSize(1.0F, 1.0F); + this.setLocationAndAngles(var2.posX, var2.posY, var2.posZ, var2.rotationYaw, var2.rotationPitch); + this.setPosition(this.posX, this.posY, this.posZ); + this.yOffset = 0.0F; + this.motionX = this.motionY = this.motionZ = 0.0D; + var3 += this.rand.nextGaussian() * 0.4D; + var5 += this.rand.nextGaussian() * 0.4D; + var7 += this.rand.nextGaussian() * 0.4D; + double var9 = (double)MathHelper.sqrt_double(var3 * var3 + var5 * var5 + var7 * var7); + this.accelerationX = var3 / var9 * 0.1D; + this.accelerationY = var5 / var9 * 0.1D; + this.accelerationZ = var7 / var9 * 0.1D; + } + + public void onUpdate() { + if(this.worldObj.isRemote || (this.shootingEntity == null || !this.shootingEntity.isDead) && this.worldObj.blockExists((int)this.posX, (int)this.posY, (int)this.posZ)) { + super.onUpdate(); + this.setFire(1); + if(this.inGround) { + int var1 = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); + if(var1 == this.inTile) { + ++this.ticksAlive; + if(this.ticksAlive == 600) { + 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.ticksAlive = 0; + this.ticksInAir = 0; + } else { + ++this.ticksInAir; + } + + Vec3 var15 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ); + Vec3 var2 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + MovingObjectPosition var3 = this.worldObj.rayTraceBlocks(var15, var2); + var15 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ); + var2 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + if(var3 != null) { + var2 = this.worldObj.getWorldVec3Pool().getVecFromPool(var3.hitVec.xCoord, var3.hitVec.yCoord, var3.hitVec.zCoord); + } + + Entity var4 = null; + List var5 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); + double var6 = 0.0D; + + for(int var8 = 0; var8 < var5.size(); ++var8) { + Entity var9 = (Entity)var5.get(var8); + if(var9.canBeCollidedWith() && (!var9.isEntityEqual(this.shootingEntity) || this.ticksInAir >= 25)) { + float var10 = 0.3F; + AxisAlignedBB var11 = var9.boundingBox.expand((double)var10, (double)var10, (double)var10); + MovingObjectPosition var12 = var11.calculateIntercept(var15, var2); + if(var12 != null) { + double var13 = var15.distanceTo(var12.hitVec); + if(var13 < var6 || var6 == 0.0D) { + var4 = var9; + var6 = var13; + } + } + } + } + + if(var4 != null) { + var3 = new MovingObjectPosition(var4); + } + + if(var3 != null) { + this.onImpact(var3); + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + float var16 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(Math.atan2(this.motionZ, this.motionX) * 180.0D / (double)((float)Math.PI)) + 90.0F; + + for(this.rotationPitch = (float)(Math.atan2((double)var16, this.motionY) * 180.0D / (double)((float)Math.PI)) - 90.0F; 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 var17 = this.getMotionFactor(); + if(this.isInWater()) { + for(int var18 = 0; var18 < 4; ++var18) { + float var19 = 0.25F; + this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)var19, this.posY - this.motionY * (double)var19, this.posZ - this.motionZ * (double)var19, this.motionX, this.motionY, this.motionZ); + } + + var17 = 0.8F; + } + + this.motionX += this.accelerationX; + this.motionY += this.accelerationY; + this.motionZ += this.accelerationZ; + this.motionX *= (double)var17; + this.motionY *= (double)var17; + this.motionZ *= (double)var17; + this.worldObj.spawnParticle("smoke", 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 float getMotionFactor() { + return 0.95F; + } + + protected abstract void onImpact(MovingObjectPosition var1); + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("xTile", (short)this.xTile); + var1.setShort("yTile", (short)this.yTile); + var1.setShort("zTile", (short)this.zTile); + var1.setByte("inTile", (byte)this.inTile); + var1.setByte("inGround", (byte)(this.inGround ? 1 : 0)); + var1.setTag("direction", this.newDoubleNBTList(new double[]{this.motionX, this.motionY, this.motionZ})); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.xTile = var1.getShort("xTile"); + this.yTile = var1.getShort("yTile"); + this.zTile = var1.getShort("zTile"); + this.inTile = var1.getByte("inTile") & 255; + this.inGround = var1.getByte("inGround") == 1; + if(var1.hasKey("direction")) { + NBTTagList var2 = var1.getTagList("direction"); + this.motionX = ((NBTTagDouble)var2.tagAt(0)).data; + this.motionY = ((NBTTagDouble)var2.tagAt(1)).data; + this.motionZ = ((NBTTagDouble)var2.tagAt(2)).data; + } else { + this.setDead(); + } + + } + + public boolean canBeCollidedWith() { + return true; + } + + public float getCollisionBorderSize() { + return 1.0F; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else { + this.setBeenAttacked(); + if(var1.getEntity() != null) { + Vec3 var3 = var1.getEntity().getLookVec(); + if(var3 != null) { + this.motionX = var3.xCoord; + this.motionY = var3.yCoord; + this.motionZ = var3.zCoord; + this.accelerationX = this.motionX * 0.1D; + this.accelerationY = this.motionY * 0.1D; + this.accelerationZ = this.motionZ * 0.1D; + } + + if(var1.getEntity() instanceof EntityLiving) { + this.shootingEntity = (EntityLiving)var1.getEntity(); + } + + return true; + } else { + return false; + } + } + } + + public float getShadowSize() { + return 0.0F; + } + + public float getBrightness(float var1) { + return 1.0F; + } + + public int getBrightnessForRender(float var1) { + return 15728880; + } +} diff --git a/src/net/minecraft/src/EntityFireworkOverlayFX.java b/src/net/minecraft/src/EntityFireworkOverlayFX.java new file mode 100644 index 0000000..ec27be7 --- /dev/null +++ b/src/net/minecraft/src/EntityFireworkOverlayFX.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class EntityFireworkOverlayFX extends EntityFX { + protected EntityFireworkOverlayFX(World var1, double var2, double var4, double var6) { + super(var1, var2, var4, var6); + this.particleMaxAge = 4; + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = 0.25F; + float var9 = var8 + 0.25F; + float var10 = 2.0F / 16.0F; + float var11 = var10 + 0.25F; + float var12 = 7.1F * MathHelper.sin(((float)this.particleAge + var2 - 1.0F) * 0.25F * (float)Math.PI); + this.particleAlpha = 0.6F - ((float)this.particleAge + var2 - 1.0F) * 0.25F * 0.5F; + float var13 = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)var2 - interpPosX); + float var14 = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)var2 - interpPosY); + float var15 = (float)(this.prevPosZ + (this.posZ - this.prevPosZ) * (double)var2 - interpPosZ); + var1.setColorRGBA_F(this.particleRed, this.particleGreen, this.particleBlue, this.particleAlpha); + var1.addVertexWithUV((double)(var13 - var3 * var12 - var6 * var12), (double)(var14 - var4 * var12), (double)(var15 - var5 * var12 - var7 * var12), (double)var9, (double)var11); + var1.addVertexWithUV((double)(var13 - var3 * var12 + var6 * var12), (double)(var14 + var4 * var12), (double)(var15 - var5 * var12 + var7 * var12), (double)var9, (double)var10); + var1.addVertexWithUV((double)(var13 + var3 * var12 + var6 * var12), (double)(var14 + var4 * var12), (double)(var15 + var5 * var12 + var7 * var12), (double)var8, (double)var10); + var1.addVertexWithUV((double)(var13 + var3 * var12 - var6 * var12), (double)(var14 - var4 * var12), (double)(var15 + var5 * var12 - var7 * var12), (double)var8, (double)var11); + } +} diff --git a/src/net/minecraft/src/EntityFireworkRocket.java b/src/net/minecraft/src/EntityFireworkRocket.java new file mode 100644 index 0000000..4240bfe --- /dev/null +++ b/src/net/minecraft/src/EntityFireworkRocket.java @@ -0,0 +1,153 @@ +package net.minecraft.src; + +public class EntityFireworkRocket extends Entity { + private int fireworkAge; + private int lifetime; + + public EntityFireworkRocket(World var1) { + super(var1); + this.setSize(0.25F, 0.25F); + } + + protected void entityInit() { + this.dataWatcher.addObjectByDataType(8, 5); + } + + public boolean isInRangeToRenderDist(double var1) { + return var1 < 4096.0D; + } + + public EntityFireworkRocket(World var1, double var2, double var4, double var6, ItemStack var8) { + super(var1); + this.fireworkAge = 0; + this.setSize(0.25F, 0.25F); + this.setPosition(var2, var4, var6); + this.yOffset = 0.0F; + int var9 = 1; + if(var8 != null && var8.hasTagCompound()) { + this.dataWatcher.updateObject(8, var8); + NBTTagCompound var10 = var8.getTagCompound(); + NBTTagCompound var11 = var10.getCompoundTag("Fireworks"); + if(var11 != null) { + var9 += var11.getByte("Flight"); + } + } + + this.motionX = this.rand.nextGaussian() * 0.001D; + this.motionZ = this.rand.nextGaussian() * 0.001D; + this.motionY = 0.05D; + this.lifetime = 10 * var9 + this.rand.nextInt(6) + this.rand.nextInt(7); + } + + public void setVelocity(double var1, double var3, double var5) { + this.motionX = var1; + this.motionY = var3; + this.motionZ = var5; + if(this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) { + float var7 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(var1, var5) * 180.0D / (double)((float)Math.PI)); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(var3, (double)var7) * 180.0D / (double)((float)Math.PI)); + } + + } + + public void onUpdate() { + this.lastTickPosX = this.posX; + this.lastTickPosY = this.posY; + this.lastTickPosZ = this.posZ; + super.onUpdate(); + this.motionX *= 1.15D; + this.motionZ *= 1.15D; + this.motionY += 0.04D; + this.moveEntity(this.motionX, this.motionY, this.motionZ); + float var1 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI)); + + for(this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var1) * 180.0D / (double)((float)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.worldObj.playSoundAtEntity(this, "fireworks.launch", 3.0F, 1.0F); + } + + ++this.fireworkAge; + if(this.worldObj.isRemote && this.fireworkAge % 2 < 2) { + this.worldObj.spawnParticle("fireworksSpark", this.posX, this.posY - 0.3D, this.posZ, this.rand.nextGaussian() * 0.05D, -this.motionY * 0.5D, this.rand.nextGaussian() * 0.05D); + } + + if(!this.worldObj.isRemote && this.fireworkAge > this.lifetime) { + this.worldObj.setEntityState(this, (byte)17); + this.setDead(); + } + + } + + public void handleHealthUpdate(byte var1) { + if(var1 == 17 && this.worldObj.isRemote) { + ItemStack var2 = this.dataWatcher.getWatchableObjectItemStack(8); + NBTTagCompound var3 = null; + if(var2 != null && var2.hasTagCompound()) { + var3 = var2.getTagCompound().getCompoundTag("Fireworks"); + } + + this.worldObj.func_92088_a(this.posX, this.posY, this.posZ, this.motionX, this.motionY, this.motionZ, var3); + } + + super.handleHealthUpdate(var1); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setInteger("Life", this.fireworkAge); + var1.setInteger("LifeTime", this.lifetime); + ItemStack var2 = this.dataWatcher.getWatchableObjectItemStack(8); + if(var2 != null) { + NBTTagCompound var3 = new NBTTagCompound(); + var2.writeToNBT(var3); + var1.setCompoundTag("FireworksItem", var3); + } + + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.fireworkAge = var1.getInteger("Life"); + this.lifetime = var1.getInteger("LifeTime"); + NBTTagCompound var2 = var1.getCompoundTag("FireworksItem"); + if(var2 != null) { + ItemStack var3 = ItemStack.loadItemStackFromNBT(var2); + if(var3 != null) { + this.dataWatcher.updateObject(8, var3); + } + } + + } + + public float getShadowSize() { + return 0.0F; + } + + public float getBrightness(float var1) { + return super.getBrightness(var1); + } + + public int getBrightnessForRender(float var1) { + return super.getBrightnessForRender(var1); + } + + public boolean canAttackWithItem() { + return false; + } +} diff --git a/src/net/minecraft/src/EntityFireworkSparkFX.java b/src/net/minecraft/src/EntityFireworkSparkFX.java new file mode 100644 index 0000000..9e103fc --- /dev/null +++ b/src/net/minecraft/src/EntityFireworkSparkFX.java @@ -0,0 +1,114 @@ +package net.minecraft.src; + +public class EntityFireworkSparkFX extends EntityFX { + private int field_92049_a = 160; + private boolean field_92054_ax; + private boolean field_92048_ay; + private final EffectRenderer field_92047_az; + private float field_92050_aA; + private float field_92051_aB; + private float field_92052_aC; + private boolean field_92053_aD; + + public EntityFireworkSparkFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12, EffectRenderer var14) { + super(var1, var2, var4, var6); + this.motionX = var8; + this.motionY = var10; + this.motionZ = var12; + this.field_92047_az = var14; + this.particleScale *= 12.0F / 16.0F; + this.particleMaxAge = 48 + this.rand.nextInt(12); + this.noClip = false; + } + + public void func_92045_e(boolean var1) { + this.field_92054_ax = var1; + } + + public void func_92043_f(boolean var1) { + this.field_92048_ay = var1; + } + + public void func_92044_a(int var1) { + float var2 = (float)((var1 & 16711680) >> 16) / 255.0F; + float var3 = (float)((var1 & '\uff00') >> 8) / 255.0F; + float var4 = (float)((var1 & 255) >> 0) / 255.0F; + float var5 = 1.0F; + this.setRBGColorF(var2 * var5, var3 * var5, var4 * var5); + } + + public void func_92046_g(int var1) { + this.field_92050_aA = (float)((var1 & 16711680) >> 16) / 255.0F; + this.field_92051_aB = (float)((var1 & '\uff00') >> 8) / 255.0F; + this.field_92052_aC = (float)((var1 & 255) >> 0) / 255.0F; + this.field_92053_aD = true; + } + + public AxisAlignedBB getBoundingBox() { + return null; + } + + public boolean canBePushed() { + return false; + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + if(!this.field_92048_ay || this.particleAge < this.particleMaxAge / 3 || (this.particleAge + this.particleMaxAge) / 3 % 2 == 0) { + super.renderParticle(var1, var2, var3, var4, var5, var6, var7); + } + + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + if(this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } + + if(this.particleAge > this.particleMaxAge / 2) { + this.setAlphaF(1.0F - ((float)this.particleAge - (float)(this.particleMaxAge / 2)) / (float)this.particleMaxAge); + if(this.field_92053_aD) { + this.particleRed += (this.field_92050_aA - this.particleRed) * 0.2F; + this.particleGreen += (this.field_92051_aB - this.particleGreen) * 0.2F; + this.particleBlue += (this.field_92052_aC - this.particleBlue) * 0.2F; + } + } + + this.setParticleTextureIndex(this.field_92049_a + (7 - this.particleAge * 8 / this.particleMaxAge)); + this.motionY -= 0.004D; + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.91F; + this.motionY *= (double)0.91F; + this.motionZ *= (double)0.91F; + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + if(this.field_92054_ax && this.particleAge < this.particleMaxAge / 2 && (this.particleAge + this.particleMaxAge) % 2 == 0) { + EntityFireworkSparkFX var1 = new EntityFireworkSparkFX(this.worldObj, this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D, this.field_92047_az); + var1.setRBGColorF(this.particleRed, this.particleGreen, this.particleBlue); + var1.particleAge = var1.particleMaxAge / 2; + if(this.field_92053_aD) { + var1.field_92053_aD = true; + var1.field_92050_aA = this.field_92050_aA; + var1.field_92051_aB = this.field_92051_aB; + var1.field_92052_aC = this.field_92052_aC; + } + + var1.field_92048_ay = this.field_92048_ay; + this.field_92047_az.addEffect(var1); + } + + } + + public int getBrightnessForRender(float var1) { + return 15728880; + } + + public float getBrightness(float var1) { + return 1.0F; + } +} diff --git a/src/net/minecraft/src/EntityFireworkStarterFX.java b/src/net/minecraft/src/EntityFireworkStarterFX.java new file mode 100644 index 0000000..784c455 --- /dev/null +++ b/src/net/minecraft/src/EntityFireworkStarterFX.java @@ -0,0 +1,194 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +public class EntityFireworkStarterFX extends EntityFX { + private int field_92042_ax = 0; + private final EffectRenderer field_92040_ay; + private NBTTagList fireworkExplosions; + boolean field_92041_a; + + public EntityFireworkStarterFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12, EffectRenderer var14, NBTTagCompound var15) { + super(var1, var2, var4, var6, 0.0D, 0.0D, 0.0D); + this.motionX = var8; + this.motionY = var10; + this.motionZ = var12; + this.field_92040_ay = var14; + this.particleMaxAge = 8; + if(var15 != null) { + this.fireworkExplosions = var15.getTagList("Explosions"); + if(this.fireworkExplosions.tagCount() == 0) { + this.fireworkExplosions = null; + } else { + this.particleMaxAge = this.fireworkExplosions.tagCount() * 2 - 1; + + for(int var16 = 0; var16 < this.fireworkExplosions.tagCount(); ++var16) { + NBTTagCompound var17 = (NBTTagCompound)this.fireworkExplosions.tagAt(var16); + if(var17.getBoolean("Flicker")) { + this.field_92041_a = true; + this.particleMaxAge += 15; + break; + } + } + } + } + + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + } + + public void onUpdate() { + boolean var1; + if(this.field_92042_ax == 0 && this.fireworkExplosions != null) { + var1 = this.func_92037_i(); + boolean var2 = false; + if(this.fireworkExplosions.tagCount() >= 3) { + var2 = true; + } else { + for(int var3 = 0; var3 < this.fireworkExplosions.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)this.fireworkExplosions.tagAt(var3); + if(var4.getByte("Type") == 1) { + var2 = true; + break; + } + } + } + + String var15 = "fireworks." + (var2 ? "largeBlast" : "blast") + (var1 ? "_far" : ""); + this.worldObj.playSound(this.posX, this.posY, this.posZ, var15, 20.0F, 0.95F + this.rand.nextFloat() * 0.1F, true); + } + + if(this.field_92042_ax % 2 == 0 && this.fireworkExplosions != null && this.field_92042_ax / 2 < this.fireworkExplosions.tagCount()) { + int var13 = this.field_92042_ax / 2; + NBTTagCompound var14 = (NBTTagCompound)this.fireworkExplosions.tagAt(var13); + byte var17 = var14.getByte("Type"); + boolean var18 = var14.getBoolean("Trail"); + boolean var5 = var14.getBoolean("Flicker"); + int[] var6 = var14.getIntArray("Colors"); + int[] var7 = var14.getIntArray("FadeColors"); + if(var17 == 1) { + this.func_92035_a(0.5D, 4, var6, var7, var18, var5); + } else if(var17 == 2) { + this.func_92038_a(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}}, var6, var7, var18, var5, false); + } else if(var17 == 3) { + this.func_92038_a(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}}, var6, var7, var18, var5, true); + } else if(var17 == 4) { + this.func_92036_a(var6, var7, var18, var5); + } else { + this.func_92035_a(0.25D, 2, var6, var7, var18, var5); + } + + int var8 = var6[0]; + float var9 = (float)((var8 & 16711680) >> 16) / 255.0F; + float var10 = (float)((var8 & '\uff00') >> 8) / 255.0F; + float var11 = (float)((var8 & 255) >> 0) / 255.0F; + EntityFireworkOverlayFX var12 = new EntityFireworkOverlayFX(this.worldObj, this.posX, this.posY, this.posZ); + var12.setRBGColorF(var9, var10, var11); + this.field_92040_ay.addEffect(var12); + } + + ++this.field_92042_ax; + if(this.field_92042_ax > this.particleMaxAge) { + if(this.field_92041_a) { + var1 = this.func_92037_i(); + String var16 = "fireworks." + (var1 ? "twinkle_far" : "twinkle"); + this.worldObj.playSound(this.posX, this.posY, this.posZ, var16, 20.0F, 0.9F + this.rand.nextFloat() * 0.15F, true); + } + + this.setDead(); + } + + } + + private boolean func_92037_i() { + Minecraft var1 = Minecraft.getMinecraft(); + return var1 == null || var1.renderViewEntity == null || var1.renderViewEntity.getDistanceSq(this.posX, this.posY, this.posZ) >= 256.0D; + } + + private void func_92034_a(double var1, double var3, double var5, double var7, double var9, double var11, int[] var13, int[] var14, boolean var15, boolean var16) { + EntityFireworkSparkFX var17 = new EntityFireworkSparkFX(this.worldObj, var1, var3, var5, var7, var9, var11, this.field_92040_ay); + var17.func_92045_e(var15); + var17.func_92043_f(var16); + int var18 = this.rand.nextInt(var13.length); + var17.func_92044_a(var13[var18]); + if(var14 != null && var14.length > 0) { + var17.func_92046_g(var14[this.rand.nextInt(var14.length)]); + } + + this.field_92040_ay.addEffect(var17); + } + + private void func_92035_a(double var1, int var3, int[] var4, int[] var5, boolean var6, boolean var7) { + double var8 = this.posX; + double var10 = this.posY; + double var12 = this.posZ; + + for(int var14 = -var3; var14 <= var3; ++var14) { + for(int var15 = -var3; var15 <= var3; ++var15) { + for(int var16 = -var3; var16 <= var3; ++var16) { + double var17 = (double)var15 + (this.rand.nextDouble() - this.rand.nextDouble()) * 0.5D; + double var19 = (double)var14 + (this.rand.nextDouble() - this.rand.nextDouble()) * 0.5D; + double var21 = (double)var16 + (this.rand.nextDouble() - this.rand.nextDouble()) * 0.5D; + double var23 = (double)MathHelper.sqrt_double(var17 * var17 + var19 * var19 + var21 * var21) / var1 + this.rand.nextGaussian() * 0.05D; + this.func_92034_a(var8, var10, var12, var17 / var23, var19 / var23, var21 / var23, var4, var5, var6, var7); + if(var14 != -var3 && var14 != var3 && var15 != -var3 && var15 != var3) { + var16 += var3 * 2 - 1; + } + } + } + } + + } + + private void func_92038_a(double var1, double[][] var3, int[] var4, int[] var5, boolean var6, boolean var7, boolean var8) { + double var9 = var3[0][0]; + double var11 = var3[0][1]; + this.func_92034_a(this.posX, this.posY, this.posZ, var9 * var1, var11 * var1, 0.0D, var4, var5, var6, var7); + float var13 = this.rand.nextFloat() * (float)Math.PI; + double var14 = var8 ? 0.034D : 0.34D; + + for(int var16 = 0; var16 < 3; ++var16) { + double var17 = (double)var13 + (double)((float)var16 * (float)Math.PI) * var14; + double var19 = var9; + double var21 = var11; + + for(int var23 = 1; var23 < var3.length; ++var23) { + double var24 = var3[var23][0]; + double var26 = var3[var23][1]; + + for(double var28 = 0.25D; var28 <= 1.0D; var28 += 0.25D) { + double var30 = (var19 + (var24 - var19) * var28) * var1; + double var32 = (var21 + (var26 - var21) * var28) * var1; + double var34 = var30 * Math.sin(var17); + var30 *= Math.cos(var17); + + for(double var36 = -1.0D; var36 <= 1.0D; var36 += 2.0D) { + this.func_92034_a(this.posX, this.posY, this.posZ, var30 * var36, var32, var34 * var36, var4, var5, var6, var7); + } + } + + var19 = var24; + var21 = var26; + } + } + + } + + private void func_92036_a(int[] var1, int[] var2, boolean var3, boolean var4) { + double var5 = this.rand.nextGaussian() * 0.05D; + double var7 = this.rand.nextGaussian() * 0.05D; + + for(int var9 = 0; var9 < 70; ++var9) { + double var10 = this.motionX * 0.5D + this.rand.nextGaussian() * 0.15D + var5; + double var12 = this.motionZ * 0.5D + this.rand.nextGaussian() * 0.15D + var7; + double var14 = this.motionY * 0.5D + this.rand.nextDouble() * 0.5D; + this.func_92034_a(this.posX, this.posY, this.posZ, var10, var14, var12, var1, var2, var3, var4); + } + + } + + public int getFXLayer() { + return 0; + } +} diff --git a/src/net/minecraft/src/EntityFishHook.java b/src/net/minecraft/src/EntityFishHook.java new file mode 100644 index 0000000..5763eed --- /dev/null +++ b/src/net/minecraft/src/EntityFishHook.java @@ -0,0 +1,388 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityFishHook extends Entity { + private int xTile; + private int yTile; + private int zTile; + private int inTile; + private boolean inGround; + public int shake; + public EntityPlayer angler; + private int ticksInGround; + private int ticksInAir; + private int ticksCatchable; + public Entity bobber; + private int fishPosRotationIncrements; + private double fishX; + private double fishY; + private double fishZ; + private double fishYaw; + private double fishPitch; + private double velocityX; + private double velocityY; + private double velocityZ; + + public EntityFishHook(World var1) { + super(var1); + this.xTile = -1; + this.yTile = -1; + this.zTile = -1; + this.inTile = 0; + this.inGround = false; + this.shake = 0; + this.ticksInAir = 0; + this.ticksCatchable = 0; + this.bobber = null; + this.setSize(0.25F, 0.25F); + this.ignoreFrustumCheck = true; + } + + public EntityFishHook(World var1, double var2, double var4, double var6, EntityPlayer var8) { + this(var1); + this.setPosition(var2, var4, var6); + this.ignoreFrustumCheck = true; + this.angler = var8; + var8.fishEntity = this; + } + + public EntityFishHook(World var1, EntityPlayer var2) { + super(var1); + this.xTile = -1; + this.yTile = -1; + this.zTile = -1; + this.inTile = 0; + this.inGround = false; + this.shake = 0; + this.ticksInAir = 0; + this.ticksCatchable = 0; + this.bobber = null; + this.ignoreFrustumCheck = true; + this.angler = var2; + this.angler.fishEntity = this; + this.setSize(0.25F, 0.25F); + this.setLocationAndAngles(var2.posX, var2.posY + 1.62D - (double)var2.yOffset, var2.posZ, var2.rotationYaw, var2.rotationPitch); + this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.posY -= (double)0.1F; + this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.setPosition(this.posX, this.posY, this.posZ); + this.yOffset = 0.0F; + float var3 = 0.4F; + this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.calculateVelocity(this.motionX, this.motionY, this.motionZ, 1.5F, 1.0F); + } + + protected void entityInit() { + } + + public boolean isInRangeToRenderDist(double var1) { + double var3 = this.boundingBox.getAverageEdgeLength() * 4.0D; + var3 *= 64.0D; + return var1 < var3 * var3; + } + + public void calculateVelocity(double var1, double var3, double var5, float var7, float var8) { + float var9 = MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5); + var1 /= (double)var9; + var3 /= (double)var9; + var5 /= (double)var9; + var1 += this.rand.nextGaussian() * (double)0.0075F * (double)var8; + var3 += this.rand.nextGaussian() * (double)0.0075F * (double)var8; + var5 += this.rand.nextGaussian() * (double)0.0075F * (double)var8; + var1 *= (double)var7; + var3 *= (double)var7; + var5 *= (double)var7; + this.motionX = var1; + this.motionY = var3; + this.motionZ = var5; + float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(var1, var5) * 180.0D / (double)((float)Math.PI)); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(var3, (double)var10) * 180.0D / (double)((float)Math.PI)); + this.ticksInGround = 0; + } + + public void setPositionAndRotation2(double var1, double var3, double var5, float var7, float var8, int var9) { + this.fishX = var1; + this.fishY = var3; + this.fishZ = var5; + this.fishYaw = (double)var7; + this.fishPitch = (double)var8; + this.fishPosRotationIncrements = var9; + this.motionX = this.velocityX; + this.motionY = this.velocityY; + this.motionZ = this.velocityZ; + } + + public void setVelocity(double var1, double var3, double var5) { + this.velocityX = this.motionX = var1; + this.velocityY = this.motionY = var3; + this.velocityZ = this.motionZ = var5; + } + + public void onUpdate() { + super.onUpdate(); + if(this.fishPosRotationIncrements > 0) { + double var21 = this.posX + (this.fishX - this.posX) / (double)this.fishPosRotationIncrements; + double var22 = this.posY + (this.fishY - this.posY) / (double)this.fishPosRotationIncrements; + double var23 = this.posZ + (this.fishZ - this.posZ) / (double)this.fishPosRotationIncrements; + double var7 = MathHelper.wrapAngleTo180_double(this.fishYaw - (double)this.rotationYaw); + this.rotationYaw = (float)((double)this.rotationYaw + var7 / (double)this.fishPosRotationIncrements); + this.rotationPitch = (float)((double)this.rotationPitch + (this.fishPitch - (double)this.rotationPitch) / (double)this.fishPosRotationIncrements); + --this.fishPosRotationIncrements; + this.setPosition(var21, var22, var23); + this.setRotation(this.rotationYaw, this.rotationPitch); + } else { + if(!this.worldObj.isRemote) { + ItemStack var1 = this.angler.getCurrentEquippedItem(); + if(this.angler.isDead || !this.angler.isEntityAlive() || var1 == null || var1.getItem() != Item.fishingRod || this.getDistanceSqToEntity(this.angler) > 1024.0D) { + this.setDead(); + this.angler.fishEntity = null; + return; + } + + if(this.bobber != null) { + if(!this.bobber.isDead) { + this.posX = this.bobber.posX; + this.posY = this.bobber.boundingBox.minY + (double)this.bobber.height * 0.8D; + this.posZ = this.bobber.posZ; + return; + } + + this.bobber = null; + } + } + + if(this.shake > 0) { + --this.shake; + } + + if(this.inGround) { + int var19 = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); + if(var19 == 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; + } + + Vec3 var20 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ); + Vec3 var2 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + MovingObjectPosition var3 = this.worldObj.rayTraceBlocks(var20, var2); + var20 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ); + var2 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + if(var3 != null) { + var2 = this.worldObj.getWorldVec3Pool().getVecFromPool(var3.hitVec.xCoord, var3.hitVec.yCoord, var3.hitVec.zCoord); + } + + Entity var4 = null; + List var5 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); + double var6 = 0.0D; + + double var13; + for(int var8 = 0; var8 < var5.size(); ++var8) { + Entity var9 = (Entity)var5.get(var8); + if(var9.canBeCollidedWith() && (var9 != this.angler || this.ticksInAir >= 5)) { + float var10 = 0.3F; + AxisAlignedBB var11 = var9.boundingBox.expand((double)var10, (double)var10, (double)var10); + MovingObjectPosition var12 = var11.calculateIntercept(var20, var2); + if(var12 != null) { + var13 = var20.distanceTo(var12.hitVec); + if(var13 < var6 || var6 == 0.0D) { + var4 = var9; + var6 = var13; + } + } + } + } + + if(var4 != null) { + var3 = new MovingObjectPosition(var4); + } + + if(var3 != null) { + if(var3.entityHit != null) { + if(var3.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.angler), 0)) { + this.bobber = var3.entityHit; + } + } else { + this.inGround = true; + } + } + + if(!this.inGround) { + this.moveEntity(this.motionX, this.motionY, this.motionZ); + float var24 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI)); + + for(this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var24) * 180.0D / (double)((float)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 var25 = 0.92F; + if(this.onGround || this.isCollidedHorizontally) { + var25 = 0.5F; + } + + byte var26 = 5; + double var27 = 0.0D; + + for(int var28 = 0; var28 < var26; ++var28) { + double var14 = this.boundingBox.minY + (this.boundingBox.maxY - this.boundingBox.minY) * (double)(var28 + 0) / (double)var26 - 0.125D + 0.125D; + double var16 = this.boundingBox.minY + (this.boundingBox.maxY - this.boundingBox.minY) * (double)(var28 + 1) / (double)var26 - 0.125D + 0.125D; + AxisAlignedBB var18 = AxisAlignedBB.getAABBPool().getAABB(this.boundingBox.minX, var14, this.boundingBox.minZ, this.boundingBox.maxX, var16, this.boundingBox.maxZ); + if(this.worldObj.isAABBInMaterial(var18, Material.water)) { + var27 += 1.0D / (double)var26; + } + } + + if(var27 > 0.0D) { + if(this.ticksCatchable > 0) { + --this.ticksCatchable; + } else { + short var29 = 500; + if(this.worldObj.canLightningStrikeAt(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY) + 1, MathHelper.floor_double(this.posZ))) { + var29 = 300; + } + + if(this.rand.nextInt(var29) == 0) { + this.ticksCatchable = this.rand.nextInt(30) + 10; + this.motionY -= (double)0.2F; + this.playSound("random.splash", 0.25F, 1.0F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.4F); + float var30 = (float)MathHelper.floor_double(this.boundingBox.minY); + + int var15; + float var17; + float var31; + for(var15 = 0; (float)var15 < 1.0F + this.width * 20.0F; ++var15) { + var31 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + var17 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + this.worldObj.spawnParticle("bubble", this.posX + (double)var31, (double)(var30 + 1.0F), this.posZ + (double)var17, this.motionX, this.motionY - (double)(this.rand.nextFloat() * 0.2F), this.motionZ); + } + + for(var15 = 0; (float)var15 < 1.0F + this.width * 20.0F; ++var15) { + var31 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + var17 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width; + this.worldObj.spawnParticle("splash", this.posX + (double)var31, (double)(var30 + 1.0F), this.posZ + (double)var17, this.motionX, this.motionY, this.motionZ); + } + } + } + } + + if(this.ticksCatchable > 0) { + this.motionY -= (double)(this.rand.nextFloat() * this.rand.nextFloat() * this.rand.nextFloat()) * 0.2D; + } + + var13 = var27 * 2.0D - 1.0D; + this.motionY += (double)0.04F * var13; + if(var27 > 0.0D) { + var25 = (float)((double)var25 * 0.9D); + this.motionY *= 0.8D; + } + + this.motionX *= (double)var25; + this.motionY *= (double)var25; + this.motionZ *= (double)var25; + this.setPosition(this.posX, this.posY, this.posZ); + } + } + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("xTile", (short)this.xTile); + var1.setShort("yTile", (short)this.yTile); + var1.setShort("zTile", (short)this.zTile); + var1.setByte("inTile", (byte)this.inTile); + var1.setByte("shake", (byte)this.shake); + var1.setByte("inGround", (byte)(this.inGround ? 1 : 0)); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.xTile = var1.getShort("xTile"); + this.yTile = var1.getShort("yTile"); + this.zTile = var1.getShort("zTile"); + this.inTile = var1.getByte("inTile") & 255; + this.shake = var1.getByte("shake") & 255; + this.inGround = var1.getByte("inGround") == 1; + } + + public float getShadowSize() { + return 0.0F; + } + + public int catchFish() { + if(this.worldObj.isRemote) { + return 0; + } else { + byte var1 = 0; + if(this.bobber != null) { + double var2 = this.angler.posX - this.posX; + double var4 = this.angler.posY - this.posY; + double var6 = this.angler.posZ - this.posZ; + double var8 = (double)MathHelper.sqrt_double(var2 * var2 + var4 * var4 + var6 * var6); + double var10 = 0.1D; + this.bobber.motionX += var2 * var10; + this.bobber.motionY += var4 * var10 + (double)MathHelper.sqrt_double(var8) * 0.08D; + this.bobber.motionZ += var6 * var10; + var1 = 3; + } else if(this.ticksCatchable > 0) { + EntityItem var13 = new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, new ItemStack(Item.fishRaw)); + double var3 = this.angler.posX - this.posX; + double var5 = this.angler.posY - this.posY; + double var7 = this.angler.posZ - this.posZ; + double var9 = (double)MathHelper.sqrt_double(var3 * var3 + var5 * var5 + var7 * var7); + double var11 = 0.1D; + var13.motionX = var3 * var11; + var13.motionY = var5 * var11 + (double)MathHelper.sqrt_double(var9) * 0.08D; + var13.motionZ = var7 * var11; + this.worldObj.spawnEntityInWorld(var13); + this.angler.addStat(StatList.fishCaughtStat, 1); + this.angler.worldObj.spawnEntityInWorld(new EntityXPOrb(this.angler.worldObj, this.angler.posX, this.angler.posY + 0.5D, this.angler.posZ + 0.5D, this.rand.nextInt(6) + 1)); + var1 = 1; + } + + if(this.inGround) { + var1 = 2; + } + + this.setDead(); + this.angler.fishEntity = null; + return var1; + } + } + + public void setDead() { + super.setDead(); + if(this.angler != null) { + this.angler.fishEntity = null; + } + + } +} diff --git a/src/net/minecraft/src/EntityFlameFX.java b/src/net/minecraft/src/EntityFlameFX.java new file mode 100644 index 0000000..ac193cb --- /dev/null +++ b/src/net/minecraft/src/EntityFlameFX.java @@ -0,0 +1,80 @@ +package net.minecraft.src; + +public class EntityFlameFX extends EntityFX { + private float flameScale; + + public EntityFlameFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1, var2, var4, var6, var8, var10, var12); + this.motionX = this.motionX * (double)0.01F + var8; + this.motionY = this.motionY * (double)0.01F + var10; + this.motionZ = this.motionZ * (double)0.01F + var12; + double var10000 = var2 + (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.05F); + var10000 = var4 + (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.05F); + var10000 = var6 + (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.05F); + this.flameScale = this.particleScale; + this.particleRed = this.particleGreen = this.particleBlue = 1.0F; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)) + 4; + this.noClip = true; + this.setParticleTextureIndex(48); + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = ((float)this.particleAge + var2) / (float)this.particleMaxAge; + this.particleScale = this.flameScale * (1.0F - var8 * var8 * 0.5F); + super.renderParticle(var1, var2, var3, var4, var5, var6, var7); + } + + public int getBrightnessForRender(float var1) { + float var2 = ((float)this.particleAge + var1) / (float)this.particleMaxAge; + if(var2 < 0.0F) { + var2 = 0.0F; + } + + if(var2 > 1.0F) { + var2 = 1.0F; + } + + int var3 = super.getBrightnessForRender(var1); + int var4 = var3 & 255; + int var5 = var3 >> 16 & 255; + var4 += (int)(var2 * 15.0F * 16.0F); + if(var4 > 240) { + var4 = 240; + } + + return var4 | var5 << 16; + } + + public float getBrightness(float var1) { + float var2 = ((float)this.particleAge + var1) / (float)this.particleMaxAge; + if(var2 < 0.0F) { + var2 = 0.0F; + } + + if(var2 > 1.0F) { + var2 = 1.0F; + } + + float var3 = super.getBrightness(var1); + return var3 * var2 + (1.0F - var2); + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + if(this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.96F; + this.motionY *= (double)0.96F; + this.motionZ *= (double)0.96F; + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + } +} diff --git a/src/net/minecraft/src/EntityFlying.java b/src/net/minecraft/src/EntityFlying.java new file mode 100644 index 0000000..46d1ea1 --- /dev/null +++ b/src/net/minecraft/src/EntityFlying.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +public abstract class EntityFlying extends EntityLiving { + public EntityFlying(World var1) { + super(var1); + } + + protected void fall(float var1) { + } + + protected void updateFallState(double var1, boolean var3) { + } + + public void moveEntityWithHeading(float var1, float var2) { + if(this.isInWater()) { + this.moveFlying(var1, var2, 0.02F); + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.8F; + this.motionY *= (double)0.8F; + this.motionZ *= (double)0.8F; + } else if(this.handleLavaMovement()) { + this.moveFlying(var1, var2, 0.02F); + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + } else { + float var3 = 0.91F; + if(this.onGround) { + var3 = 546.0F * 0.1F * 0.1F * 0.1F; + int var4 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ)); + if(var4 > 0) { + var3 = Block.blocksList[var4].slipperiness * 0.91F; + } + } + + float var8 = 0.16277136F / (var3 * var3 * var3); + this.moveFlying(var1, var2, this.onGround ? 0.1F * var8 : 0.02F); + var3 = 0.91F; + if(this.onGround) { + var3 = 546.0F * 0.1F * 0.1F * 0.1F; + int var5 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ)); + if(var5 > 0) { + var3 = Block.blocksList[var5].slipperiness * 0.91F; + } + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)var3; + this.motionY *= (double)var3; + this.motionZ *= (double)var3; + } + + this.prevLimbYaw = this.limbYaw; + double var10 = this.posX - this.prevPosX; + double var9 = this.posZ - this.prevPosZ; + float var7 = MathHelper.sqrt_double(var10 * var10 + var9 * var9) * 4.0F; + if(var7 > 1.0F) { + var7 = 1.0F; + } + + this.limbYaw += (var7 - this.limbYaw) * 0.4F; + this.limbSwing += this.limbYaw; + } + + public boolean isOnLadder() { + return false; + } +} diff --git a/src/net/minecraft/src/EntityFootStepFX.java b/src/net/minecraft/src/EntityFootStepFX.java new file mode 100644 index 0000000..98ac696 --- /dev/null +++ b/src/net/minecraft/src/EntityFootStepFX.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class EntityFootStepFX extends EntityFX { + private int field_70576_a = 0; + private int field_70578_aq = 0; + private RenderEngine currentFootSteps; + + public EntityFootStepFX(RenderEngine var1, World var2, double var3, double var5, double var7) { + super(var2, var3, var5, var7, 0.0D, 0.0D, 0.0D); + this.currentFootSteps = var1; + this.motionX = this.motionY = this.motionZ = 0.0D; + this.field_70578_aq = 200; + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = ((float)this.field_70576_a + var2) / (float)this.field_70578_aq; + var8 *= var8; + float var9 = 2.0F - var8 * 2.0F; + if(var9 > 1.0F) { + var9 = 1.0F; + } + + var9 *= 0.2F; + GL11.glDisable(GL11.GL_LIGHTING); + float var10 = 2.0F / 16.0F; + float var11 = (float)(this.posX - interpPosX); + float var12 = (float)(this.posY - interpPosY); + float var13 = (float)(this.posZ - interpPosZ); + float var14 = this.worldObj.getLightBrightness(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)); + this.currentFootSteps.bindTexture("/misc/footprint.png"); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + var1.startDrawingQuads(); + var1.setColorRGBA_F(var14, var14, var14, var9); + var1.addVertexWithUV((double)(var11 - var10), (double)var12, (double)(var13 + var10), 0.0D, 1.0D); + var1.addVertexWithUV((double)(var11 + var10), (double)var12, (double)(var13 + var10), 1.0D, 1.0D); + var1.addVertexWithUV((double)(var11 + var10), (double)var12, (double)(var13 - var10), 1.0D, 0.0D); + var1.addVertexWithUV((double)(var11 - var10), (double)var12, (double)(var13 - var10), 0.0D, 0.0D); + var1.draw(); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + } + + public void onUpdate() { + ++this.field_70576_a; + if(this.field_70576_a == this.field_70578_aq) { + this.setDead(); + } + + } + + public int getFXLayer() { + return 3; + } +} diff --git a/src/net/minecraft/src/EntityGhast.java b/src/net/minecraft/src/EntityGhast.java new file mode 100644 index 0000000..117e518 --- /dev/null +++ b/src/net/minecraft/src/EntityGhast.java @@ -0,0 +1,207 @@ +package net.minecraft.src; + +public class EntityGhast extends EntityFlying implements IMob { + public int courseChangeCooldown = 0; + public double waypointX; + public double waypointY; + public double waypointZ; + private Entity targetedEntity = null; + private int aggroCooldown = 0; + public int prevAttackCounter = 0; + public int attackCounter = 0; + private int explosionStrength = 1; + + public EntityGhast(World var1) { + super(var1); + this.texture = "/mob/ghast.png"; + this.setSize(4.0F, 4.0F); + this.isImmuneToFire = true; + this.experienceValue = 5; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else if("fireball".equals(var1.getDamageType()) && var1.getEntity() instanceof EntityPlayer) { + super.attackEntityFrom(var1, 1000); + ((EntityPlayer)var1.getEntity()).triggerAchievement(AchievementList.ghast); + return true; + } else { + return super.attackEntityFrom(var1, var2); + } + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, Byte.valueOf((byte)0)); + } + + public int getMaxHealth() { + return 10; + } + + public void onUpdate() { + super.onUpdate(); + byte var1 = this.dataWatcher.getWatchableObjectByte(16); + this.texture = var1 == 1 ? "/mob/ghast_fire.png" : "/mob/ghast.png"; + } + + protected void updateEntityActionState() { + if(!this.worldObj.isRemote && this.worldObj.difficultySetting == 0) { + this.setDead(); + } + + this.despawnEntity(); + this.prevAttackCounter = this.attackCounter; + double var1 = this.waypointX - this.posX; + double var3 = this.waypointY - this.posY; + double var5 = this.waypointZ - this.posZ; + double var7 = var1 * var1 + var3 * var3 + var5 * var5; + if(var7 < 1.0D || var7 > 3600.0D) { + this.waypointX = this.posX + (double)((this.rand.nextFloat() * 2.0F - 1.0F) * 16.0F); + this.waypointY = this.posY + (double)((this.rand.nextFloat() * 2.0F - 1.0F) * 16.0F); + this.waypointZ = this.posZ + (double)((this.rand.nextFloat() * 2.0F - 1.0F) * 16.0F); + } + + if(this.courseChangeCooldown-- <= 0) { + this.courseChangeCooldown += this.rand.nextInt(5) + 2; + var7 = (double)MathHelper.sqrt_double(var7); + if(this.isCourseTraversable(this.waypointX, this.waypointY, this.waypointZ, var7)) { + this.motionX += var1 / var7 * 0.1D; + this.motionY += var3 / var7 * 0.1D; + this.motionZ += var5 / var7 * 0.1D; + } else { + this.waypointX = this.posX; + this.waypointY = this.posY; + this.waypointZ = this.posZ; + } + } + + if(this.targetedEntity != null && this.targetedEntity.isDead) { + this.targetedEntity = null; + } + + if(this.targetedEntity == null || this.aggroCooldown-- <= 0) { + this.targetedEntity = this.worldObj.getClosestVulnerablePlayerToEntity(this, 100.0D); + if(this.targetedEntity != null) { + this.aggroCooldown = 20; + } + } + + double var9 = 64.0D; + if(this.targetedEntity != null && this.targetedEntity.getDistanceSqToEntity(this) < var9 * var9) { + double var11 = this.targetedEntity.posX - this.posX; + double var13 = this.targetedEntity.boundingBox.minY + (double)(this.targetedEntity.height / 2.0F) - (this.posY + (double)(this.height / 2.0F)); + double var15 = this.targetedEntity.posZ - this.posZ; + this.renderYawOffset = this.rotationYaw = -((float)Math.atan2(var11, var15)) * 180.0F / (float)Math.PI; + if(this.canEntityBeSeen(this.targetedEntity)) { + if(this.attackCounter == 10) { + this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1007, (int)this.posX, (int)this.posY, (int)this.posZ, 0); + } + + ++this.attackCounter; + if(this.attackCounter == 20) { + this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1008, (int)this.posX, (int)this.posY, (int)this.posZ, 0); + EntityLargeFireball var17 = new EntityLargeFireball(this.worldObj, this, var11, var13, var15); + var17.field_92057_e = this.explosionStrength; + double var18 = 4.0D; + Vec3 var20 = this.getLook(1.0F); + var17.posX = this.posX + var20.xCoord * var18; + var17.posY = this.posY + (double)(this.height / 2.0F) + 0.5D; + var17.posZ = this.posZ + var20.zCoord * var18; + this.worldObj.spawnEntityInWorld(var17); + this.attackCounter = -40; + } + } else if(this.attackCounter > 0) { + --this.attackCounter; + } + } else { + this.renderYawOffset = this.rotationYaw = -((float)Math.atan2(this.motionX, this.motionZ)) * 180.0F / (float)Math.PI; + if(this.attackCounter > 0) { + --this.attackCounter; + } + } + + if(!this.worldObj.isRemote) { + byte var21 = this.dataWatcher.getWatchableObjectByte(16); + byte var12 = (byte)(this.attackCounter > 10 ? 1 : 0); + if(var21 != var12) { + this.dataWatcher.updateObject(16, Byte.valueOf(var12)); + } + } + + } + + private boolean isCourseTraversable(double var1, double var3, double var5, double var7) { + double var9 = (this.waypointX - this.posX) / var7; + double var11 = (this.waypointY - this.posY) / var7; + double var13 = (this.waypointZ - this.posZ) / var7; + AxisAlignedBB var15 = this.boundingBox.copy(); + + for(int var16 = 1; (double)var16 < var7; ++var16) { + var15.offset(var9, var11, var13); + if(!this.worldObj.getCollidingBoundingBoxes(this, var15).isEmpty()) { + return false; + } + } + + return true; + } + + protected String getLivingSound() { + return "mob.ghast.moan"; + } + + protected String getHurtSound() { + return "mob.ghast.scream"; + } + + protected String getDeathSound() { + return "mob.ghast.death"; + } + + protected int getDropItemId() { + return Item.gunpowder.itemID; + } + + protected void dropFewItems(boolean var1, int var2) { + int var3 = this.rand.nextInt(2) + this.rand.nextInt(1 + var2); + + int var4; + for(var4 = 0; var4 < var3; ++var4) { + this.dropItem(Item.ghastTear.itemID, 1); + } + + var3 = this.rand.nextInt(3) + this.rand.nextInt(1 + var2); + + for(var4 = 0; var4 < var3; ++var4) { + this.dropItem(Item.gunpowder.itemID, 1); + } + + } + + protected float getSoundVolume() { + return 10.0F; + } + + public boolean getCanSpawnHere() { + return this.rand.nextInt(20) == 0 && super.getCanSpawnHere() && this.worldObj.difficultySetting > 0; + } + + public int getMaxSpawnedInChunk() { + return 1; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setInteger("ExplosionPower", this.explosionStrength); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + if(var1.hasKey("ExplosionPower")) { + this.explosionStrength = var1.getInteger("ExplosionPower"); + } + + } +} diff --git a/src/net/minecraft/src/EntityGiantZombie.java b/src/net/minecraft/src/EntityGiantZombie.java new file mode 100644 index 0000000..a15cb1a --- /dev/null +++ b/src/net/minecraft/src/EntityGiantZombie.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +public class EntityGiantZombie extends EntityMob { + public EntityGiantZombie(World var1) { + super(var1); + this.texture = "/mob/zombie.png"; + this.moveSpeed = 0.5F; + this.yOffset *= 6.0F; + this.setSize(this.width * 6.0F, this.height * 6.0F); + } + + public int getMaxHealth() { + return 100; + } + + public float getBlockPathWeight(int var1, int var2, int var3) { + return this.worldObj.getLightBrightness(var1, var2, var3) - 0.5F; + } + + public int getAttackStrength(Entity var1) { + return 50; + } +} diff --git a/src/net/minecraft/src/EntityGolem.java b/src/net/minecraft/src/EntityGolem.java new file mode 100644 index 0000000..e68391f --- /dev/null +++ b/src/net/minecraft/src/EntityGolem.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +public abstract class EntityGolem extends EntityCreature implements IAnimals { + public EntityGolem(World var1) { + super(var1); + } + + protected void fall(float var1) { + } + + protected String getLivingSound() { + return "none"; + } + + protected String getHurtSound() { + return "none"; + } + + protected String getDeathSound() { + return "none"; + } + + public int getTalkInterval() { + return 120; + } + + protected boolean canDespawn() { + return false; + } +} diff --git a/src/net/minecraft/src/EntityHanging.java b/src/net/minecraft/src/EntityHanging.java new file mode 100644 index 0000000..b7a3828 --- /dev/null +++ b/src/net/minecraft/src/EntityHanging.java @@ -0,0 +1,260 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public abstract class EntityHanging extends Entity { + private int tickCounter1; + public int hangingDirection; + public int xPosition; + public int yPosition; + public int zPosition; + + public EntityHanging(World var1) { + super(var1); + this.tickCounter1 = 0; + this.hangingDirection = 0; + this.yOffset = 0.0F; + this.setSize(0.5F, 0.5F); + } + + public EntityHanging(World var1, int var2, int var3, int var4, int var5) { + this(var1); + this.xPosition = var2; + this.yPosition = var3; + this.zPosition = var4; + } + + protected void entityInit() { + } + + public void setDirection(int var1) { + this.hangingDirection = var1; + this.prevRotationYaw = this.rotationYaw = (float)(var1 * 90); + float var2 = (float)this.func_82329_d(); + float var3 = (float)this.func_82330_g(); + float var4 = (float)this.func_82329_d(); + if(var1 != 2 && var1 != 0) { + var2 = 0.5F; + } else { + var4 = 0.5F; + this.rotationYaw = this.prevRotationYaw = (float)(Direction.rotateOpposite[var1] * 90); + } + + var2 /= 32.0F; + var3 /= 32.0F; + var4 /= 32.0F; + float var5 = (float)this.xPosition + 0.5F; + float var6 = (float)this.yPosition + 0.5F; + float var7 = (float)this.zPosition + 0.5F; + float var8 = 9.0F / 16.0F; + if(var1 == 2) { + var7 -= var8; + } + + if(var1 == 1) { + var5 -= var8; + } + + if(var1 == 0) { + var7 += var8; + } + + if(var1 == 3) { + var5 += var8; + } + + if(var1 == 2) { + var5 -= this.func_70517_b(this.func_82329_d()); + } + + if(var1 == 1) { + var7 += this.func_70517_b(this.func_82329_d()); + } + + if(var1 == 0) { + var5 += this.func_70517_b(this.func_82329_d()); + } + + if(var1 == 3) { + var7 -= this.func_70517_b(this.func_82329_d()); + } + + var6 += this.func_70517_b(this.func_82330_g()); + this.setPosition((double)var5, (double)var6, (double)var7); + float var9 = -0.03125F; + this.boundingBox.setBounds((double)(var5 - var2 - var9), (double)(var6 - var3 - var9), (double)(var7 - var4 - var9), (double)(var5 + var2 + var9), (double)(var6 + var3 + var9), (double)(var7 + var4 + var9)); + } + + private float func_70517_b(int var1) { + return var1 == 32 ? 0.5F : (var1 == 64 ? 0.5F : 0.0F); + } + + public void onUpdate() { + if(this.tickCounter1++ == 100 && !this.worldObj.isRemote) { + this.tickCounter1 = 0; + if(!this.isDead && !this.onValidSurface()) { + this.setDead(); + this.dropItemStack(); + } + } + + } + + public boolean onValidSurface() { + if(!this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).isEmpty()) { + return false; + } else { + int var1 = Math.max(1, this.func_82329_d() / 16); + int var2 = Math.max(1, this.func_82330_g() / 16); + int var3 = this.xPosition; + int var4 = this.yPosition; + int var5 = this.zPosition; + if(this.hangingDirection == 2) { + var3 = MathHelper.floor_double(this.posX - (double)((float)this.func_82329_d() / 32.0F)); + } + + if(this.hangingDirection == 1) { + var5 = MathHelper.floor_double(this.posZ - (double)((float)this.func_82329_d() / 32.0F)); + } + + if(this.hangingDirection == 0) { + var3 = MathHelper.floor_double(this.posX - (double)((float)this.func_82329_d() / 32.0F)); + } + + if(this.hangingDirection == 3) { + var5 = MathHelper.floor_double(this.posZ - (double)((float)this.func_82329_d() / 32.0F)); + } + + var4 = MathHelper.floor_double(this.posY - (double)((float)this.func_82330_g() / 32.0F)); + + for(int var6 = 0; var6 < var1; ++var6) { + for(int var7 = 0; var7 < var2; ++var7) { + Material var8; + if(this.hangingDirection != 2 && this.hangingDirection != 0) { + var8 = this.worldObj.getBlockMaterial(this.xPosition, var4 + var7, var5 + var6); + } else { + var8 = this.worldObj.getBlockMaterial(var3 + var6, var4 + var7, this.zPosition); + } + + if(!var8.isSolid()) { + return false; + } + } + } + + List var9 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox); + Iterator var10 = var9.iterator(); + + Entity var11; + do { + if(!var10.hasNext()) { + return true; + } + + var11 = (Entity)var10.next(); + } while(!(var11 instanceof EntityHanging)); + + return false; + } + } + + public boolean canBeCollidedWith() { + return true; + } + + public boolean func_85031_j(Entity var1) { + return var1 instanceof EntityPlayer ? this.attackEntityFrom(DamageSource.causePlayerDamage((EntityPlayer)var1), 0) : false; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else { + if(!this.isDead && !this.worldObj.isRemote) { + this.setDead(); + this.setBeenAttacked(); + EntityPlayer var3 = null; + if(var1.getEntity() instanceof EntityPlayer) { + var3 = (EntityPlayer)var1.getEntity(); + } + + if(var3 != null && var3.capabilities.isCreativeMode) { + return true; + } + + this.dropItemStack(); + } + + return true; + } + } + + public void moveEntity(double var1, double var3, double var5) { + if(!this.worldObj.isRemote && !this.isDead && var1 * var1 + var3 * var3 + var5 * var5 > 0.0D) { + this.setDead(); + this.dropItemStack(); + } + + } + + public void addVelocity(double var1, double var3, double var5) { + if(!this.worldObj.isRemote && !this.isDead && var1 * var1 + var3 * var3 + var5 * var5 > 0.0D) { + this.setDead(); + this.dropItemStack(); + } + + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setByte("Direction", (byte)this.hangingDirection); + var1.setInteger("TileX", this.xPosition); + var1.setInteger("TileY", this.yPosition); + var1.setInteger("TileZ", this.zPosition); + switch(this.hangingDirection) { + case 0: + var1.setByte("Dir", (byte)2); + break; + case 1: + var1.setByte("Dir", (byte)1); + break; + case 2: + var1.setByte("Dir", (byte)0); + break; + case 3: + var1.setByte("Dir", (byte)3); + } + + } + + public void readEntityFromNBT(NBTTagCompound var1) { + if(var1.hasKey("Direction")) { + this.hangingDirection = var1.getByte("Direction"); + } else { + switch(var1.getByte("Dir")) { + case 0: + this.hangingDirection = 2; + break; + case 1: + this.hangingDirection = 1; + break; + case 2: + this.hangingDirection = 0; + break; + case 3: + this.hangingDirection = 3; + } + } + + this.xPosition = var1.getInteger("TileX"); + this.yPosition = var1.getInteger("TileY"); + this.zPosition = var1.getInteger("TileZ"); + this.setDirection(this.hangingDirection); + } + + public abstract int func_82329_d(); + + public abstract int func_82330_g(); + + public abstract void dropItemStack(); +} diff --git a/src/net/minecraft/src/EntityHeartFX.java b/src/net/minecraft/src/EntityHeartFX.java new file mode 100644 index 0000000..ca2dc26 --- /dev/null +++ b/src/net/minecraft/src/EntityHeartFX.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +public class EntityHeartFX extends EntityFX { + float particleScaleOverTime; + + public EntityHeartFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + this(var1, var2, var4, var6, var8, var10, var12, 2.0F); + } + + public EntityHeartFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12, float var14) { + super(var1, var2, var4, var6, 0.0D, 0.0D, 0.0D); + this.motionX *= (double)0.01F; + this.motionY *= (double)0.01F; + this.motionZ *= (double)0.01F; + this.motionY += 0.1D; + this.particleScale *= 12.0F / 16.0F; + this.particleScale *= var14; + this.particleScaleOverTime = this.particleScale; + this.particleMaxAge = 16; + this.noClip = false; + this.setParticleTextureIndex(80); + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = ((float)this.particleAge + var2) / (float)this.particleMaxAge * 32.0F; + if(var8 < 0.0F) { + var8 = 0.0F; + } + + if(var8 > 1.0F) { + var8 = 1.0F; + } + + this.particleScale = this.particleScaleOverTime * var8; + super.renderParticle(var1, var2, var3, var4, var5, var6, var7); + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + if(this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + if(this.posY == this.prevPosY) { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= (double)0.86F; + this.motionY *= (double)0.86F; + this.motionZ *= (double)0.86F; + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + } +} diff --git a/src/net/minecraft/src/EntityHugeExplodeFX.java b/src/net/minecraft/src/EntityHugeExplodeFX.java new file mode 100644 index 0000000..cfd5043 --- /dev/null +++ b/src/net/minecraft/src/EntityHugeExplodeFX.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +public class EntityHugeExplodeFX extends EntityFX { + private int timeSinceStart = 0; + private int maximumTime = 0; + + public EntityHugeExplodeFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1, var2, var4, var6, 0.0D, 0.0D, 0.0D); + this.maximumTime = 8; + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + } + + public void onUpdate() { + for(int var1 = 0; var1 < 6; ++var1) { + double var2 = this.posX + (this.rand.nextDouble() - this.rand.nextDouble()) * 4.0D; + double var4 = this.posY + (this.rand.nextDouble() - this.rand.nextDouble()) * 4.0D; + double var6 = this.posZ + (this.rand.nextDouble() - this.rand.nextDouble()) * 4.0D; + this.worldObj.spawnParticle("largeexplode", var2, var4, var6, (double)((float)this.timeSinceStart / (float)this.maximumTime), 0.0D, 0.0D); + } + + ++this.timeSinceStart; + if(this.timeSinceStart == this.maximumTime) { + this.setDead(); + } + + } + + public int getFXLayer() { + return 1; + } +} diff --git a/src/net/minecraft/src/EntityIronGolem.java b/src/net/minecraft/src/EntityIronGolem.java new file mode 100644 index 0000000..58797ed --- /dev/null +++ b/src/net/minecraft/src/EntityIronGolem.java @@ -0,0 +1,197 @@ +package net.minecraft.src; + +public class EntityIronGolem extends EntityGolem { + private int homeCheckTimer = 0; + Village villageObj = null; + private int attackTimer; + private int holdRoseTick; + + public EntityIronGolem(World var1) { + super(var1); + this.texture = "/mob/villager_golem.png"; + this.setSize(1.4F, 2.9F); + this.getNavigator().setAvoidsWater(true); + this.tasks.addTask(1, new EntityAIAttackOnCollide(this, 0.25F, true)); + this.tasks.addTask(2, new EntityAIMoveTowardsTarget(this, 0.22F, 32.0F)); + this.tasks.addTask(3, new EntityAIMoveThroughVillage(this, 0.16F, true)); + this.tasks.addTask(4, new EntityAIMoveTwardsRestriction(this, 0.16F)); + this.tasks.addTask(5, new EntityAILookAtVillager(this)); + this.tasks.addTask(6, new EntityAIWander(this, 0.16F)); + 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)); + this.targetTasks.addTask(3, new EntityAINearestAttackableTarget(this, EntityLiving.class, 16.0F, 0, false, true, IMob.mobSelector)); + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, Byte.valueOf((byte)0)); + } + + public boolean isAIEnabled() { + return true; + } + + protected void updateAITick() { + if(--this.homeCheckTimer <= 0) { + this.homeCheckTimer = 70 + this.rand.nextInt(50); + this.villageObj = this.worldObj.villageCollectionObj.findNearestVillage(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ), 32); + if(this.villageObj == null) { + this.detachHome(); + } else { + ChunkCoordinates var1 = this.villageObj.getCenter(); + this.setHomeArea(var1.posX, var1.posY, var1.posZ, (int)((float)this.villageObj.getVillageRadius() * 0.6F)); + } + } + + super.updateAITick(); + } + + public int getMaxHealth() { + return 100; + } + + protected int decreaseAirSupply(int var1) { + return var1; + } + + protected void collideWithEntity(Entity var1) { + if(var1 instanceof IMob && this.getRNG().nextInt(20) == 0) { + this.setAttackTarget((EntityLiving)var1); + } + + super.collideWithEntity(var1); + } + + 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 > (double)2.5000003E-7F && this.rand.nextInt(5) == 0) { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.posY - (double)0.2F - (double)this.yOffset); + int var3 = MathHelper.floor_double(this.posZ); + int var4 = this.worldObj.getBlockId(var1, var2, var3); + if(var4 > 0) { + this.worldObj.spawnParticle("tilecrack_" + var4 + "_" + this.worldObj.getBlockMetadata(var1, var2, var3), this.posX + ((double)this.rand.nextFloat() - 0.5D) * (double)this.width, this.boundingBox.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); + } + } + + } + + public boolean canAttackClass(Class var1) { + return this.isPlayerCreated() && EntityPlayer.class.isAssignableFrom(var1) ? false : super.canAttackClass(var1); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setBoolean("PlayerCreated", this.isPlayerCreated()); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.setPlayerCreated(var1.getBoolean("PlayerCreated")); + } + + public boolean attackEntityAsMob(Entity var1) { + this.attackTimer = 10; + this.worldObj.setEntityState(this, (byte)4); + boolean var2 = var1.attackEntityFrom(DamageSource.causeMobDamage(this), 7 + this.rand.nextInt(15)); + if(var2) { + var1.motionY += (double)0.4F; + } + + this.playSound("mob.irongolem.throw", 1.0F, 1.0F); + return var2; + } + + public void handleHealthUpdate(byte var1) { + if(var1 == 4) { + this.attackTimer = 10; + this.playSound("mob.irongolem.throw", 1.0F, 1.0F); + } else if(var1 == 11) { + this.holdRoseTick = 400; + } else { + super.handleHealthUpdate(var1); + } + + } + + public Village getVillage() { + return this.villageObj; + } + + public int getAttackTimer() { + return this.attackTimer; + } + + public void setHoldingRose(boolean var1) { + this.holdRoseTick = var1 ? 400 : 0; + this.worldObj.setEntityState(this, (byte)11); + } + + protected String getLivingSound() { + return "none"; + } + + protected String getHurtSound() { + return "mob.irongolem.hit"; + } + + protected String getDeathSound() { + return "mob.irongolem.death"; + } + + protected void playStepSound(int var1, int var2, int var3, int var4) { + this.playSound("mob.irongolem.walk", 1.0F, 1.0F); + } + + protected void dropFewItems(boolean var1, int var2) { + int var3 = this.rand.nextInt(3); + + int var4; + for(var4 = 0; var4 < var3; ++var4) { + this.dropItem(Block.plantRed.blockID, 1); + } + + var4 = 3 + this.rand.nextInt(3); + + for(int var5 = 0; var5 < var4; ++var5) { + this.dropItem(Item.ingotIron.itemID, 1); + } + + } + + public int getHoldRoseTick() { + return this.holdRoseTick; + } + + public boolean isPlayerCreated() { + return (this.dataWatcher.getWatchableObjectByte(16) & 1) != 0; + } + + public void setPlayerCreated(boolean var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(16); + if(var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 | 1))); + } else { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 & -2))); + } + + } + + public void onDeath(DamageSource var1) { + if(!this.isPlayerCreated() && this.attackingPlayer != null && this.villageObj != null) { + this.villageObj.setReputationForPlayer(this.attackingPlayer.getCommandSenderName(), -5); + } + + super.onDeath(var1); + } +} diff --git a/src/net/minecraft/src/EntityItem.java b/src/net/minecraft/src/EntityItem.java new file mode 100644 index 0000000..a7d1b46 --- /dev/null +++ b/src/net/minecraft/src/EntityItem.java @@ -0,0 +1,249 @@ +package net.minecraft.src; + +import java.util.Iterator; + +public class EntityItem extends Entity { + public int age; + public int delayBeforeCanPickup; + private int health; + public float hoverStart; + + public EntityItem(World var1, double var2, double var4, double var6) { + super(var1); + this.age = 0; + this.health = 5; + this.hoverStart = (float)(Math.random() * Math.PI * 2.0D); + this.setSize(0.25F, 0.25F); + this.yOffset = this.height / 2.0F; + this.setPosition(var2, var4, var6); + this.rotationYaw = (float)(Math.random() * 360.0D); + this.motionX = (double)((float)(Math.random() * (double)0.2F - (double)0.1F)); + this.motionY = (double)0.2F; + this.motionZ = (double)((float)(Math.random() * (double)0.2F - (double)0.1F)); + } + + public EntityItem(World var1, double var2, double var4, double var6, ItemStack var8) { + this(var1, var2, var4, var6); + this.setEntityItemStack(var8); + } + + protected boolean canTriggerWalking() { + return false; + } + + public EntityItem(World var1) { + super(var1); + this.age = 0; + this.health = 5; + this.hoverStart = (float)(Math.random() * Math.PI * 2.0D); + this.setSize(0.25F, 0.25F); + this.yOffset = this.height / 2.0F; + } + + protected void entityInit() { + this.getDataWatcher().addObjectByDataType(10, 5); + } + + public void onUpdate() { + super.onUpdate(); + if(this.delayBeforeCanPickup > 0) { + --this.delayBeforeCanPickup; + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.motionY -= (double)0.04F; + this.noClip = this.pushOutOfBlocks(this.posX, (this.boundingBox.minY + this.boundingBox.maxY) / 2.0D, this.posZ); + this.moveEntity(this.motionX, this.motionY, this.motionZ); + boolean var1 = (int)this.prevPosX != (int)this.posX || (int)this.prevPosY != (int)this.posY || (int)this.prevPosZ != (int)this.posZ; + if(var1 || this.ticksExisted % 25 == 0) { + if(this.worldObj.getBlockMaterial(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)) == Material.lava) { + this.motionY = (double)0.2F; + this.motionX = (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); + this.motionZ = (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); + this.playSound("random.fizz", 0.4F, 2.0F + this.rand.nextFloat() * 0.4F); + } + + if(!this.worldObj.isRemote) { + this.searchForOtherItemsNearby(); + } + } + + float var2 = 0.98F; + if(this.onGround) { + var2 = 0.1F * 0.1F * 58.8F; + int var3 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ)); + if(var3 > 0) { + var2 = Block.blocksList[var3].slipperiness * 0.98F; + } + } + + this.motionX *= (double)var2; + this.motionY *= (double)0.98F; + this.motionZ *= (double)var2; + if(this.onGround) { + this.motionY *= -0.5D; + } + + ++this.age; + if(!this.worldObj.isRemote && this.age >= 6000) { + this.setDead(); + } + + } + + private void searchForOtherItemsNearby() { + Iterator var1 = this.worldObj.getEntitiesWithinAABB(EntityItem.class, this.boundingBox.expand(0.5D, 0.0D, 0.5D)).iterator(); + + while(var1.hasNext()) { + EntityItem var2 = (EntityItem)var1.next(); + this.combineItems(var2); + } + + } + + public boolean combineItems(EntityItem var1) { + if(var1 == this) { + return false; + } else if(var1.isEntityAlive() && this.isEntityAlive()) { + ItemStack var2 = this.getEntityItem(); + ItemStack var3 = var1.getEntityItem(); + if(var3.getItem() != var2.getItem()) { + return false; + } else if(var3.hasTagCompound() ^ var2.hasTagCompound()) { + return false; + } else if(var3.hasTagCompound() && !var3.getTagCompound().equals(var2.getTagCompound())) { + return false; + } else if(var3.getItem().getHasSubtypes() && var3.getItemDamage() != var2.getItemDamage()) { + return false; + } else if(var3.stackSize < var2.stackSize) { + return var1.combineItems(this); + } else if(var3.stackSize + var2.stackSize > var3.getMaxStackSize()) { + return false; + } else { + var3.stackSize += var2.stackSize; + var1.delayBeforeCanPickup = Math.max(var1.delayBeforeCanPickup, this.delayBeforeCanPickup); + var1.age = Math.min(var1.age, this.age); + var1.setEntityItemStack(var3); + this.setDead(); + return true; + } + } else { + return false; + } + } + + public void setAgeToCreativeDespawnTime() { + this.age = 4800; + } + + public boolean handleWaterMovement() { + return this.worldObj.handleMaterialAcceleration(this.boundingBox, Material.water, this); + } + + protected void dealFireDamage(int var1) { + this.attackEntityFrom(DamageSource.inFire, var1); + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else if(this.getEntityItem() != null && this.getEntityItem().itemID == Item.netherStar.itemID && var1.isExplosion()) { + return false; + } else { + this.setBeenAttacked(); + this.health -= var2; + if(this.health <= 0) { + this.setDead(); + } + + return false; + } + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("Health", (short)((byte)this.health)); + var1.setShort("Age", (short)this.age); + if(this.getEntityItem() != null) { + var1.setCompoundTag("Item", this.getEntityItem().writeToNBT(new NBTTagCompound())); + } + + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.health = var1.getShort("Health") & 255; + this.age = var1.getShort("Age"); + NBTTagCompound var2 = var1.getCompoundTag("Item"); + this.setEntityItemStack(ItemStack.loadItemStackFromNBT(var2)); + if(this.getEntityItem() == null) { + this.setDead(); + } + + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(!this.worldObj.isRemote) { + ItemStack var2 = this.getEntityItem(); + int var3 = var2.stackSize; + if(this.delayBeforeCanPickup == 0 && var1.inventory.addItemStackToInventory(var2)) { + if(var2.itemID == Block.wood.blockID) { + var1.triggerAchievement(AchievementList.mineWood); + } + + if(var2.itemID == Item.leather.itemID) { + var1.triggerAchievement(AchievementList.killCow); + } + + if(var2.itemID == Item.diamond.itemID) { + var1.triggerAchievement(AchievementList.diamonds); + } + + if(var2.itemID == Item.blazeRod.itemID) { + var1.triggerAchievement(AchievementList.blazeRod); + } + + this.playSound("random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + var1.onItemPickup(this, var3); + if(var2.stackSize <= 0) { + this.setDead(); + } + } + + } + } + + public String getEntityName() { + return StatCollector.translateToLocal("item." + this.getEntityItem().getItemName()); + } + + public boolean canAttackWithItem() { + return false; + } + + public void travelToDimension(int var1) { + super.travelToDimension(var1); + if(!this.worldObj.isRemote) { + this.searchForOtherItemsNearby(); + } + + } + + public ItemStack getEntityItem() { + ItemStack var1 = this.getDataWatcher().getWatchableObjectItemStack(10); + if(var1 == null) { + if(this.worldObj != null) { + this.worldObj.getWorldLogAgent().logSevere("Item entity " + this.entityId + " has no item?!"); + } + + return new ItemStack(Block.stone); + } else { + return var1; + } + } + + public void setEntityItemStack(ItemStack var1) { + this.getDataWatcher().updateObject(10, var1); + this.getDataWatcher().setObjectWatched(10); + } +} diff --git a/src/net/minecraft/src/EntityItemFrame.java b/src/net/minecraft/src/EntityItemFrame.java new file mode 100644 index 0000000..1ba3a5c --- /dev/null +++ b/src/net/minecraft/src/EntityItemFrame.java @@ -0,0 +1,103 @@ +package net.minecraft.src; + +public class EntityItemFrame extends EntityHanging { + private float itemDropChance = 1.0F; + + public EntityItemFrame(World var1) { + super(var1); + } + + public EntityItemFrame(World var1, int var2, int var3, int var4, int var5) { + super(var1, var2, var3, var4, var5); + this.setDirection(var5); + } + + protected void entityInit() { + this.getDataWatcher().addObjectByDataType(2, 5); + this.getDataWatcher().addObject(3, Byte.valueOf((byte)0)); + } + + public int func_82329_d() { + return 9; + } + + public int func_82330_g() { + return 9; + } + + public boolean isInRangeToRenderDist(double var1) { + double var3 = 16.0D; + var3 *= 64.0D * this.renderDistanceWeight; + return var1 < var3 * var3; + } + + public void dropItemStack() { + this.entityDropItem(new ItemStack(Item.itemFrame), 0.0F); + ItemStack var1 = this.getDisplayedItem(); + if(var1 != null && this.rand.nextFloat() < this.itemDropChance) { + var1 = var1.copy(); + var1.setItemFrame((EntityItemFrame)null); + this.entityDropItem(var1, 0.0F); + } + + } + + public ItemStack getDisplayedItem() { + return this.getDataWatcher().getWatchableObjectItemStack(2); + } + + public void setDisplayedItem(ItemStack var1) { + var1 = var1.copy(); + var1.stackSize = 1; + var1.setItemFrame(this); + this.getDataWatcher().updateObject(2, var1); + this.getDataWatcher().setObjectWatched(2); + } + + public int getRotation() { + return this.getDataWatcher().getWatchableObjectByte(3); + } + + public void setItemRotation(int var1) { + this.getDataWatcher().updateObject(3, Byte.valueOf((byte)(var1 % 4))); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + if(this.getDisplayedItem() != null) { + var1.setCompoundTag("Item", this.getDisplayedItem().writeToNBT(new NBTTagCompound())); + var1.setByte("ItemRotation", (byte)this.getRotation()); + var1.setFloat("ItemDropChance", this.itemDropChance); + } + + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + NBTTagCompound var2 = var1.getCompoundTag("Item"); + if(var2 != null && !var2.hasNoTags()) { + this.setDisplayedItem(ItemStack.loadItemStackFromNBT(var2)); + this.setItemRotation(var1.getByte("ItemRotation")); + if(var1.hasKey("ItemDropChance")) { + this.itemDropChance = var1.getFloat("ItemDropChance"); + } + } + + super.readEntityFromNBT(var1); + } + + public boolean interact(EntityPlayer var1) { + if(this.getDisplayedItem() == null) { + ItemStack var2 = var1.getHeldItem(); + if(var2 != null && !this.worldObj.isRemote) { + this.setDisplayedItem(var2); + if(!var1.capabilities.isCreativeMode && --var2.stackSize <= 0) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, (ItemStack)null); + } + } + } else if(!this.worldObj.isRemote) { + this.setItemRotation(this.getRotation() + 1); + } + + return true; + } +} diff --git a/src/net/minecraft/src/EntityJumpHelper.java b/src/net/minecraft/src/EntityJumpHelper.java new file mode 100644 index 0000000..adc9891 --- /dev/null +++ b/src/net/minecraft/src/EntityJumpHelper.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class EntityJumpHelper { + private EntityLiving entity; + private boolean isJumping = false; + + public EntityJumpHelper(EntityLiving var1) { + this.entity = var1; + } + + public void setJumping() { + this.isJumping = true; + } + + public void doJump() { + this.entity.setJumping(this.isJumping); + this.isJumping = false; + } +} diff --git a/src/net/minecraft/src/EntityLargeExplodeFX.java b/src/net/minecraft/src/EntityLargeExplodeFX.java new file mode 100644 index 0000000..be3b920 --- /dev/null +++ b/src/net/minecraft/src/EntityLargeExplodeFX.java @@ -0,0 +1,66 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class EntityLargeExplodeFX extends EntityFX { + private int field_70581_a = 0; + private int field_70584_aq = 0; + private RenderEngine theRenderEngine; + private float field_70582_as; + + public EntityLargeExplodeFX(RenderEngine var1, World var2, double var3, double var5, double var7, double var9, double var11, double var13) { + super(var2, var3, var5, var7, 0.0D, 0.0D, 0.0D); + this.theRenderEngine = var1; + this.field_70584_aq = 6 + this.rand.nextInt(4); + this.particleRed = this.particleGreen = this.particleBlue = this.rand.nextFloat() * 0.6F + 0.4F; + this.field_70582_as = 1.0F - (float)var9 * 0.5F; + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + int var8 = (int)(((float)this.field_70581_a + var2) * 15.0F / (float)this.field_70584_aq); + if(var8 <= 15) { + this.theRenderEngine.bindTexture("/misc/explosion.png"); + float var9 = (float)(var8 % 4) / 4.0F; + float var10 = var9 + 0.999F / 4.0F; + float var11 = (float)(var8 / 4) / 4.0F; + float var12 = var11 + 0.999F / 4.0F; + float var13 = 2.0F * this.field_70582_as; + float var14 = (float)(this.prevPosX + (this.posX - this.prevPosX) * (double)var2 - interpPosX); + float var15 = (float)(this.prevPosY + (this.posY - this.prevPosY) * (double)var2 - interpPosY); + float var16 = (float)(this.prevPosZ + (this.posZ - this.prevPosZ) * (double)var2 - interpPosZ); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_LIGHTING); + RenderHelper.disableStandardItemLighting(); + var1.startDrawingQuads(); + var1.setColorRGBA_F(this.particleRed, this.particleGreen, this.particleBlue, 1.0F); + var1.setNormal(0.0F, 1.0F, 0.0F); + var1.setBrightness(240); + var1.addVertexWithUV((double)(var14 - var3 * var13 - var6 * var13), (double)(var15 - var4 * var13), (double)(var16 - var5 * var13 - var7 * var13), (double)var10, (double)var12); + var1.addVertexWithUV((double)(var14 - var3 * var13 + var6 * var13), (double)(var15 + var4 * var13), (double)(var16 - var5 * var13 + var7 * var13), (double)var10, (double)var11); + var1.addVertexWithUV((double)(var14 + var3 * var13 + var6 * var13), (double)(var15 + var4 * var13), (double)(var16 + var5 * var13 + var7 * var13), (double)var9, (double)var11); + var1.addVertexWithUV((double)(var14 + var3 * var13 - var6 * var13), (double)(var15 - var4 * var13), (double)(var16 + var5 * var13 - var7 * var13), (double)var9, (double)var12); + var1.draw(); + GL11.glPolygonOffset(0.0F, 0.0F); + GL11.glEnable(GL11.GL_LIGHTING); + } + } + + public int getBrightnessForRender(float var1) { + return '\uf0f0'; + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + ++this.field_70581_a; + if(this.field_70581_a == this.field_70584_aq) { + this.setDead(); + } + + } + + public int getFXLayer() { + return 3; + } +} diff --git a/src/net/minecraft/src/EntityLargeFireball.java b/src/net/minecraft/src/EntityLargeFireball.java new file mode 100644 index 0000000..f4ba262 --- /dev/null +++ b/src/net/minecraft/src/EntityLargeFireball.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +public class EntityLargeFireball extends EntityFireball { + public int field_92057_e = 1; + + public EntityLargeFireball(World var1) { + super(var1); + } + + public EntityLargeFireball(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1, var2, var4, var6, var8, var10, var12); + } + + public EntityLargeFireball(World var1, EntityLiving var2, double var3, double var5, double var7) { + super(var1, var2, var3, var5, var7); + } + + protected void onImpact(MovingObjectPosition var1) { + if(!this.worldObj.isRemote) { + if(var1.entityHit != null) { + var1.entityHit.attackEntityFrom(DamageSource.causeFireballDamage(this, this.shootingEntity), 6); + } + + this.worldObj.newExplosion((Entity)null, this.posX, this.posY, this.posZ, (float)this.field_92057_e, true, this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing")); + this.setDead(); + } + + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setInteger("ExplosionPower", this.field_92057_e); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + if(var1.hasKey("ExplosionPower")) { + this.field_92057_e = var1.getInteger("ExplosionPower"); + } + + } +} diff --git a/src/net/minecraft/src/EntityLavaFX.java b/src/net/minecraft/src/EntityLavaFX.java new file mode 100644 index 0000000..e9019d0 --- /dev/null +++ b/src/net/minecraft/src/EntityLavaFX.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +public class EntityLavaFX extends EntityFX { + private float lavaParticleScale; + + public EntityLavaFX(World var1, double var2, double var4, double var6) { + super(var1, var2, var4, var6, 0.0D, 0.0D, 0.0D); + this.motionX *= (double)0.8F; + this.motionY *= (double)0.8F; + this.motionZ *= (double)0.8F; + this.motionY = (double)(this.rand.nextFloat() * 0.4F + 0.05F); + this.particleRed = this.particleGreen = 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.noClip = false; + this.setParticleTextureIndex(49); + } + + public int getBrightnessForRender(float var1) { + float var2 = ((float)this.particleAge + var1) / (float)this.particleMaxAge; + if(var2 < 0.0F) { + var2 = 0.0F; + } + + if(var2 > 1.0F) { + var2 = 1.0F; + } + + int var3 = super.getBrightnessForRender(var1); + short var4 = 240; + int var5 = var3 >> 16 & 255; + return var4 | var5 << 16; + } + + public float getBrightness(float var1) { + return 1.0F; + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = ((float)this.particleAge + var2) / (float)this.particleMaxAge; + this.particleScale = this.lavaParticleScale * (1.0F - var8 * var8); + super.renderParticle(var1, var2, var3, var4, var5, var6, var7); + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + if(this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } + + float var1 = (float)this.particleAge / (float)this.particleMaxAge; + if(this.rand.nextFloat() > var1) { + this.worldObj.spawnParticle("smoke", this.posX, this.posY, this.posZ, this.motionX, this.motionY, this.motionZ); + } + + this.motionY -= 0.03D; + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.999F; + this.motionY *= (double)0.999F; + this.motionZ *= (double)0.999F; + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + } +} diff --git a/src/net/minecraft/src/EntityLightningBolt.java b/src/net/minecraft/src/EntityLightningBolt.java new file mode 100644 index 0000000..c676ca0 --- /dev/null +++ b/src/net/minecraft/src/EntityLightningBolt.java @@ -0,0 +1,90 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityLightningBolt extends EntityWeatherEffect { + private int lightningState; + public long boltVertex = 0L; + private int boltLivingTime; + + public EntityLightningBolt(World var1, double var2, double var4, double var6) { + super(var1); + this.setLocationAndAngles(var2, var4, var6, 0.0F, 0.0F); + this.lightningState = 2; + this.boltVertex = this.rand.nextLong(); + this.boltLivingTime = this.rand.nextInt(3) + 1; + if(!var1.isRemote && var1.difficultySetting >= 2 && var1.doChunksNearChunkExist(MathHelper.floor_double(var2), MathHelper.floor_double(var4), MathHelper.floor_double(var6), 10)) { + int var8 = MathHelper.floor_double(var2); + int var9 = MathHelper.floor_double(var4); + int var10 = MathHelper.floor_double(var6); + if(var1.getBlockId(var8, var9, var10) == 0 && Block.fire.canPlaceBlockAt(var1, var8, var9, var10)) { + var1.setBlock(var8, var9, var10, Block.fire.blockID); + } + + for(var8 = 0; var8 < 4; ++var8) { + var9 = MathHelper.floor_double(var2) + this.rand.nextInt(3) - 1; + var10 = MathHelper.floor_double(var4) + this.rand.nextInt(3) - 1; + int var11 = MathHelper.floor_double(var6) + this.rand.nextInt(3) - 1; + if(var1.getBlockId(var9, var10, var11) == 0 && Block.fire.canPlaceBlockAt(var1, var9, var10, var11)) { + var1.setBlock(var9, var10, var11, Block.fire.blockID); + } + } + } + + } + + public void onUpdate() { + super.onUpdate(); + if(this.lightningState == 2) { + this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "ambient.weather.thunder", 10000.0F, 0.8F + this.rand.nextFloat() * 0.2F); + this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "random.explode", 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; + this.boltVertex = this.rand.nextLong(); + if(!this.worldObj.isRemote && this.worldObj.doChunksNearChunkExist(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ), 10)) { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.posY); + int var3 = MathHelper.floor_double(this.posZ); + if(this.worldObj.getBlockId(var1, var2, var3) == 0 && Block.fire.canPlaceBlockAt(this.worldObj, var1, var2, var3)) { + this.worldObj.setBlock(var1, var2, var3, Block.fire.blockID); + } + } + } + } + + if(this.lightningState >= 0) { + if(this.worldObj.isRemote) { + this.worldObj.lastLightningBolt = 2; + } else { + double var6 = 3.0D; + List var7 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, AxisAlignedBB.getAABBPool().getAABB(this.posX - var6, this.posY - var6, this.posZ - var6, this.posX + var6, this.posY + 6.0D + var6, this.posZ + var6)); + + for(int var4 = 0; var4 < var7.size(); ++var4) { + Entity var5 = (Entity)var7.get(var4); + var5.onStruckByLightning(this); + } + } + } + + } + + protected void entityInit() { + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + } + + public boolean isInRangeToRenderVec3D(Vec3 var1) { + return this.lightningState >= 0; + } +} diff --git a/src/net/minecraft/src/EntityList.java b/src/net/minecraft/src/EntityList.java new file mode 100644 index 0000000..902f294 --- /dev/null +++ b/src/net/minecraft/src/EntityList.java @@ -0,0 +1,171 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +public class EntityList { + private static Map stringToClassMapping = new HashMap(); + private static Map classToStringMapping = new HashMap(); + private static Map IDtoClassMapping = new HashMap(); + private static Map classToIDMapping = new HashMap(); + private static Map stringToIDMapping = new HashMap(); + public static HashMap entityEggs = new LinkedHashMap(); + + private static void addMapping(Class var0, String var1, int var2) { + stringToClassMapping.put(var1, var0); + classToStringMapping.put(var0, var1); + IDtoClassMapping.put(Integer.valueOf(var2), var0); + classToIDMapping.put(var0, Integer.valueOf(var2)); + stringToIDMapping.put(var1, Integer.valueOf(var2)); + } + + private static void addMapping(Class var0, String var1, int var2, int var3, int var4) { + addMapping(var0, var1, var2); + entityEggs.put(Integer.valueOf(var2), new EntityEggInfo(var2, var3, var4)); + } + + public static Entity createEntityByName(String var0, World var1) { + Entity var2 = null; + + try { + Class var3 = (Class)stringToClassMapping.get(var0); + if(var3 != null) { + var2 = (Entity)var3.getConstructor(new Class[]{World.class}).newInstance(new Object[]{var1}); + } + } catch (Exception var4) { + var4.printStackTrace(); + } + + return var2; + } + + public static Entity createEntityFromNBT(NBTTagCompound var0, World var1) { + Entity var2 = null; + if("Minecart".equals(var0.getString("id"))) { + switch(var0.getInteger("Type")) { + case 0: + var0.setString("id", "MinecartRideable"); + break; + case 1: + var0.setString("id", "MinecartChest"); + break; + case 2: + var0.setString("id", "MinecartFurnace"); + } + + var0.removeTag("Type"); + } + + try { + Class var3 = (Class)stringToClassMapping.get(var0.getString("id")); + if(var3 != null) { + var2 = (Entity)var3.getConstructor(new Class[]{World.class}).newInstance(new Object[]{var1}); + } + } catch (Exception var4) { + var4.printStackTrace(); + } + + if(var2 != null) { + var2.readFromNBT(var0); + } else { + var1.getWorldLogAgent().logWarning("Skipping Entity with id " + var0.getString("id")); + } + + return var2; + } + + public static Entity createEntityByID(int var0, World var1) { + Entity var2 = null; + + try { + Class var3 = getClassFromID(var0); + if(var3 != null) { + var2 = (Entity)var3.getConstructor(new Class[]{World.class}).newInstance(new Object[]{var1}); + } + } catch (Exception var4) { + var4.printStackTrace(); + } + + if(var2 == null) { + var1.getWorldLogAgent().logWarning("Skipping Entity with id " + var0); + } + + return var2; + } + + public static int getEntityID(Entity var0) { + Class var1 = var0.getClass(); + return classToIDMapping.containsKey(var1) ? ((Integer)classToIDMapping.get(var1)).intValue() : 0; + } + + public static Class getClassFromID(int var0) { + return (Class)IDtoClassMapping.get(Integer.valueOf(var0)); + } + + public static String getEntityString(Entity var0) { + return (String)classToStringMapping.get(var0.getClass()); + } + + public static String getStringFromID(int var0) { + Class var1 = getClassFromID(var0); + return var1 != null ? (String)classToStringMapping.get(var1) : null; + } + + static { + addMapping(EntityItem.class, "Item", 1); + addMapping(EntityXPOrb.class, "XPOrb", 2); + addMapping(EntityPainting.class, "Painting", 9); + addMapping(EntityArrow.class, "Arrow", 10); + addMapping(EntitySnowball.class, "Snowball", 11); + addMapping(EntityLargeFireball.class, "Fireball", 12); + addMapping(EntitySmallFireball.class, "SmallFireball", 13); + addMapping(EntityEnderPearl.class, "ThrownEnderpearl", 14); + addMapping(EntityEnderEye.class, "EyeOfEnderSignal", 15); + addMapping(EntityPotion.class, "ThrownPotion", 16); + addMapping(EntityExpBottle.class, "ThrownExpBottle", 17); + addMapping(EntityItemFrame.class, "ItemFrame", 18); + addMapping(EntityWitherSkull.class, "WitherSkull", 19); + addMapping(EntityTNTPrimed.class, "PrimedTnt", 20); + addMapping(EntityFallingSand.class, "FallingSand", 21); + addMapping(EntityFireworkRocket.class, "FireworksRocketEntity", 22); + addMapping(EntityBoat.class, "Boat", 41); + addMapping(EntityMinecartEmpty.class, "MinecartRideable", 42); + addMapping(EntityMinecartChest.class, "MinecartChest", 43); + addMapping(EntityMinecartFurnace.class, "MinecartFurnace", 44); + addMapping(EntityMinecartTNT.class, "MinecartTNT", 45); + addMapping(EntityMinecartHopper.class, "MinecartHopper", 46); + addMapping(EntityMinecartMobSpawner.class, "MinecartSpawner", 47); + addMapping(EntityLiving.class, "Mob", 48); + addMapping(EntityMob.class, "Monster", 49); + addMapping(EntityCreeper.class, "Creeper", 50, 894731, 0); + addMapping(EntitySkeleton.class, "Skeleton", 51, 12698049, 4802889); + addMapping(EntitySpider.class, "Spider", 52, 3419431, 11013646); + addMapping(EntityGiantZombie.class, "Giant", 53); + addMapping(EntityZombie.class, "Zombie", 54, '\uafaf', 7969893); + addMapping(EntitySlime.class, "Slime", 55, 5349438, 8306542); + addMapping(EntityGhast.class, "Ghast", 56, 16382457, 12369084); + addMapping(EntityPigZombie.class, "PigZombie", 57, 15373203, 5009705); + addMapping(EntityEnderman.class, "Enderman", 58, 1447446, 0); + addMapping(EntityCaveSpider.class, "CaveSpider", 59, 803406, 11013646); + addMapping(EntitySilverfish.class, "Silverfish", 60, 7237230, 3158064); + addMapping(EntityBlaze.class, "Blaze", 61, 16167425, 16775294); + addMapping(EntityMagmaCube.class, "LavaSlime", 62, 3407872, 16579584); + addMapping(EntityDragon.class, "EnderDragon", 63); + addMapping(EntityWither.class, "WitherBoss", 64); + addMapping(EntityBat.class, "Bat", 65, 4996656, 986895); + addMapping(EntityWitch.class, "Witch", 66, 3407872, 5349438); + addMapping(EntityPig.class, "Pig", 90, 15771042, 14377823); + addMapping(EntitySheep.class, "Sheep", 91, 15198183, 16758197); + addMapping(EntityCow.class, "Cow", 92, 4470310, 10592673); + addMapping(EntityChicken.class, "Chicken", 93, 10592673, 16711680); + addMapping(EntitySquid.class, "Squid", 94, 2243405, 7375001); + addMapping(EntityWolf.class, "Wolf", 95, 14144467, 13545366); + addMapping(EntityMooshroom.class, "MushroomCow", 96, 10489616, 12040119); + addMapping(EntitySnowman.class, "SnowMan", 97); + addMapping(EntityOcelot.class, "Ozelot", 98, 15720061, 5653556); + addMapping(EntityIronGolem.class, "VillagerGolem", 99); + addMapping(EntityVillager.class, "Villager", 120, 5651507, 12422002); + addMapping(EntityEnderCrystal.class, "EnderCrystal", 200); + } +} diff --git a/src/net/minecraft/src/EntityLiving.java b/src/net/minecraft/src/EntityLiving.java new file mode 100644 index 0000000..a8bae0c --- /dev/null +++ b/src/net/minecraft/src/EntityLiving.java @@ -0,0 +1,2051 @@ +package net.minecraft.src; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +public abstract class EntityLiving extends Entity { + private static final float[] enchantmentProbability = new float[]{0.0F, 0.0F, 0.1F, 0.2F}; + private static final float[] armorEnchantmentProbability = new float[]{0.0F, 0.0F, 0.25F, 0.5F}; + private static final float[] armorProbability = new float[]{0.0F, 0.0F, 0.05F, 0.07F}; + public static final float[] pickUpLootProability = new float[]{0.0F, 0.1F, 0.15F, 0.45F}; + public int maxHurtResistantTime = 20; + public float field_70769_ao; + public float field_70770_ap; + public float renderYawOffset = 0.0F; + public float prevRenderYawOffset = 0.0F; + public float rotationYawHead = 0.0F; + public float prevRotationYawHead = 0.0F; + protected float field_70768_au; + protected float field_70766_av; + protected float field_70764_aw; + protected float field_70763_ax; + protected boolean field_70753_ay = true; + protected String texture = "/mob/char.png"; + protected boolean field_70740_aA = true; + protected float field_70741_aB = 0.0F; + protected String entityType = null; + protected float field_70743_aD = 1.0F; + protected int scoreValue = 0; + protected float field_70745_aF = 0.0F; + public float landMovementFactor = 0.1F; + public float jumpMovementFactor = 0.02F; + public float prevSwingProgress; + public float swingProgress; + protected int health = this.getMaxHealth(); + public int prevHealth; + protected int carryoverDamage; + public int livingSoundTime; + public int hurtTime; + public int maxHurtTime; + public float attackedAtYaw = 0.0F; + public int deathTime = 0; + public int attackTime = 0; + public float prevCameraPitch; + public float cameraPitch; + protected boolean dead = false; + protected int experienceValue; + public int field_70731_aW = -1; + public float field_70730_aX = (float)(Math.random() * (double)0.9F + (double)0.1F); + public float prevLimbYaw; + public float limbYaw; + public float limbSwing; + protected EntityPlayer attackingPlayer = null; + protected int recentlyHit = 0; + private EntityLiving entityLivingToAttack = null; + private int revengeTimer = 0; + private EntityLiving lastAttackingEntity = null; + public int arrowHitTimer = 0; + protected HashMap activePotionsMap = new HashMap(); + private boolean potionsNeedUpdate = true; + private int field_70748_f; + private EntityLookHelper lookHelper; + private EntityMoveHelper moveHelper; + private EntityJumpHelper jumpHelper; + private EntityBodyHelper bodyHelper; + private PathNavigate navigator; + protected final EntityAITasks tasks; + protected final EntityAITasks targetTasks; + private EntityLiving attackTarget; + private EntitySenses senses; + private float AIMoveSpeed; + private ChunkCoordinates homePosition = new ChunkCoordinates(0, 0, 0); + private float maximumHomeDistance = -1.0F; + private ItemStack[] equipment = new ItemStack[5]; + protected float[] equipmentDropChances = new float[5]; + private ItemStack[] previousEquipment = new ItemStack[5]; + public boolean isSwingInProgress = false; + public int swingProgressInt = 0; + private boolean canPickUpLoot = false; + private boolean persistenceRequired = false; + protected final CombatTracker field_94063_bt = new CombatTracker(this); + protected int newPosRotationIncrements; + protected double newPosX; + protected double newPosY; + protected double newPosZ; + protected double newRotationYaw; + protected double newRotationPitch; + float field_70706_bo = 0.0F; + protected int lastDamage = 0; + protected int entityAge = 0; + protected float moveStrafing; + protected float moveForward; + protected float randomYawVelocity; + protected boolean isJumping = false; + protected float defaultPitch = 0.0F; + protected float moveSpeed = 0.7F; + private int jumpTicks = 0; + private Entity currentTarget; + protected int numTicksToChaseTarget = 0; + + public EntityLiving(World var1) { + super(var1); + this.preventEntitySpawning = true; + this.tasks = new EntityAITasks(var1 != null && var1.theProfiler != null ? var1.theProfiler : null); + this.targetTasks = new EntityAITasks(var1 != null && var1.theProfiler != null ? var1.theProfiler : null); + this.lookHelper = new EntityLookHelper(this); + this.moveHelper = new EntityMoveHelper(this); + this.jumpHelper = new EntityJumpHelper(this); + this.bodyHelper = new EntityBodyHelper(this); + this.navigator = new PathNavigate(this, var1, (float)this.func_96121_ay()); + this.senses = new EntitySenses(this); + this.field_70770_ap = (float)(Math.random() + 1.0D) * 0.01F; + this.setPosition(this.posX, this.posY, this.posZ); + this.field_70769_ao = (float)Math.random() * 12398.0F; + this.rotationYaw = (float)(Math.random() * (double)((float)Math.PI) * 2.0D); + this.rotationYawHead = this.rotationYaw; + + for(int var2 = 0; var2 < this.equipmentDropChances.length; ++var2) { + this.equipmentDropChances[var2] = 0.085F; + } + + this.stepHeight = 0.5F; + } + + protected int func_96121_ay() { + return 16; + } + + public EntityLookHelper getLookHelper() { + return this.lookHelper; + } + + public EntityMoveHelper getMoveHelper() { + return this.moveHelper; + } + + public EntityJumpHelper getJumpHelper() { + return this.jumpHelper; + } + + public PathNavigate getNavigator() { + return this.navigator; + } + + public EntitySenses getEntitySenses() { + return this.senses; + } + + public Random getRNG() { + return this.rand; + } + + public EntityLiving getAITarget() { + return this.entityLivingToAttack; + } + + public EntityLiving getLastAttackingEntity() { + return this.lastAttackingEntity; + } + + public void setLastAttackingEntity(Entity var1) { + if(var1 instanceof EntityLiving) { + this.lastAttackingEntity = (EntityLiving)var1; + } + + } + + public int getAge() { + return this.entityAge; + } + + public float getRotationYawHead() { + return this.rotationYawHead; + } + + public void setRotationYawHead(float var1) { + this.rotationYawHead = var1; + } + + public float getAIMoveSpeed() { + return this.AIMoveSpeed; + } + + public void setAIMoveSpeed(float var1) { + this.AIMoveSpeed = var1; + this.setMoveForward(var1); + } + + public boolean attackEntityAsMob(Entity var1) { + this.setLastAttackingEntity(var1); + return false; + } + + public EntityLiving getAttackTarget() { + return this.attackTarget; + } + + public void setAttackTarget(EntityLiving var1) { + this.attackTarget = var1; + } + + public boolean canAttackClass(Class var1) { + return EntityCreeper.class != var1 && EntityGhast.class != var1; + } + + public void eatGrassBonus() { + } + + protected void updateFallState(double var1, boolean var3) { + if(!this.isInWater()) { + this.handleWaterMovement(); + } + + if(var3 && this.fallDistance > 0.0F) { + int var4 = MathHelper.floor_double(this.posX); + int var5 = MathHelper.floor_double(this.posY - (double)0.2F - (double)this.yOffset); + int var6 = MathHelper.floor_double(this.posZ); + int var7 = this.worldObj.getBlockId(var4, var5, var6); + if(var7 == 0) { + int var8 = this.worldObj.blockGetRenderType(var4, var5 - 1, var6); + if(var8 == 11 || var8 == 32 || var8 == 21) { + var7 = this.worldObj.getBlockId(var4, var5 - 1, var6); + } + } + + if(var7 > 0) { + Block.blocksList[var7].onFallenUpon(this.worldObj, var4, var5, var6, this, this.fallDistance); + } + } + + super.updateFallState(var1, var3); + } + + public boolean isWithinHomeDistanceCurrentPosition() { + return this.isWithinHomeDistance(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)); + } + + public boolean isWithinHomeDistance(int var1, int var2, int var3) { + return this.maximumHomeDistance == -1.0F ? true : this.homePosition.getDistanceSquared(var1, var2, var3) < this.maximumHomeDistance * this.maximumHomeDistance; + } + + public void setHomeArea(int var1, int var2, int var3, int var4) { + this.homePosition.set(var1, var2, var3); + this.maximumHomeDistance = (float)var4; + } + + public ChunkCoordinates getHomePosition() { + return this.homePosition; + } + + public float getMaximumHomeDistance() { + return this.maximumHomeDistance; + } + + public void detachHome() { + this.maximumHomeDistance = -1.0F; + } + + public boolean hasHome() { + return this.maximumHomeDistance != -1.0F; + } + + public void setRevengeTarget(EntityLiving var1) { + this.entityLivingToAttack = var1; + this.revengeTimer = this.entityLivingToAttack != null ? 100 : 0; + } + + protected void entityInit() { + this.dataWatcher.addObject(8, Integer.valueOf(this.field_70748_f)); + this.dataWatcher.addObject(9, Byte.valueOf((byte)0)); + this.dataWatcher.addObject(10, Byte.valueOf((byte)0)); + this.dataWatcher.addObject(6, Byte.valueOf((byte)0)); + this.dataWatcher.addObject(5, ""); + } + + public boolean canEntityBeSeen(Entity var1) { + return this.worldObj.rayTraceBlocks(this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY + (double)this.getEyeHeight(), this.posZ), this.worldObj.getWorldVec3Pool().getVecFromPool(var1.posX, var1.posY + (double)var1.getEyeHeight(), var1.posZ)) == null; + } + + public String getTexture() { + return this.texture; + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public boolean canBePushed() { + return !this.isDead; + } + + public float getEyeHeight() { + return this.height * 0.85F; + } + + public int getTalkInterval() { + return 80; + } + + public void playLivingSound() { + String var1 = this.getLivingSound(); + if(var1 != null) { + this.playSound(var1, this.getSoundVolume(), this.getSoundPitch()); + } + + } + + public void onEntityUpdate() { + this.prevSwingProgress = this.swingProgress; + super.onEntityUpdate(); + this.worldObj.theProfiler.startSection("mobBaseTick"); + if(this.isEntityAlive() && this.rand.nextInt(1000) < this.livingSoundTime++) { + this.livingSoundTime = -this.getTalkInterval(); + this.playLivingSound(); + } + + if(this.isEntityAlive() && this.isEntityInsideOpaqueBlock()) { + this.attackEntityFrom(DamageSource.inWall, 1); + } + + if(this.isImmuneToFire() || this.worldObj.isRemote) { + this.extinguish(); + } + + boolean var1 = this instanceof EntityPlayer && ((EntityPlayer)this).capabilities.disableDamage; + if(this.isEntityAlive() && this.isInsideOfMaterial(Material.water) && !this.canBreatheUnderwater() && !this.activePotionsMap.containsKey(Integer.valueOf(Potion.waterBreathing.id)) && !var1) { + this.setAir(this.decreaseAirSupply(this.getAir())); + if(this.getAir() == -20) { + this.setAir(0); + + for(int var2 = 0; var2 < 8; ++var2) { + float var3 = this.rand.nextFloat() - this.rand.nextFloat(); + float var4 = this.rand.nextFloat() - this.rand.nextFloat(); + float var5 = this.rand.nextFloat() - this.rand.nextFloat(); + this.worldObj.spawnParticle("bubble", this.posX + (double)var3, this.posY + (double)var4, this.posZ + (double)var5, this.motionX, this.motionY, this.motionZ); + } + + this.attackEntityFrom(DamageSource.drown, 2); + } + + this.extinguish(); + } else { + this.setAir(300); + } + + this.prevCameraPitch = this.cameraPitch; + if(this.attackTime > 0) { + --this.attackTime; + } + + if(this.hurtTime > 0) { + --this.hurtTime; + } + + if(this.hurtResistantTime > 0) { + --this.hurtResistantTime; + } + + if(this.health <= 0) { + this.onDeathUpdate(); + } + + if(this.recentlyHit > 0) { + --this.recentlyHit; + } else { + this.attackingPlayer = null; + } + + if(this.lastAttackingEntity != null && !this.lastAttackingEntity.isEntityAlive()) { + this.lastAttackingEntity = null; + } + + if(this.entityLivingToAttack != null) { + if(!this.entityLivingToAttack.isEntityAlive()) { + this.setRevengeTarget((EntityLiving)null); + } else if(this.revengeTimer > 0) { + --this.revengeTimer; + } else { + this.setRevengeTarget((EntityLiving)null); + } + } + + this.updatePotionEffects(); + this.field_70763_ax = this.field_70764_aw; + this.prevRenderYawOffset = this.renderYawOffset; + this.prevRotationYawHead = this.rotationYawHead; + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + this.worldObj.theProfiler.endSection(); + } + + protected void onDeathUpdate() { + ++this.deathTime; + if(this.deathTime == 20) { + int var1; + if(!this.worldObj.isRemote && (this.recentlyHit > 0 || this.isPlayer()) && !this.isChild() && this.worldObj.getGameRules().getGameRuleBooleanValue("doMobLoot")) { + var1 = this.getExperiencePoints(this.attackingPlayer); + + while(var1 > 0) { + int var2 = EntityXPOrb.getXPSplit(var1); + var1 -= var2; + this.worldObj.spawnEntityInWorld(new EntityXPOrb(this.worldObj, this.posX, this.posY, this.posZ, var2)); + } + } + + this.setDead(); + + for(var1 = 0; var1 < 20; ++var1) { + double var8 = this.rand.nextGaussian() * 0.02D; + double var4 = this.rand.nextGaussian() * 0.02D; + double var6 = this.rand.nextGaussian() * 0.02D; + this.worldObj.spawnParticle("explode", 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, var8, var4, var6); + } + } + + } + + protected int decreaseAirSupply(int var1) { + int var2 = EnchantmentHelper.getRespiration(this); + return var2 > 0 && this.rand.nextInt(var2 + 1) > 0 ? var1 : var1 - 1; + } + + protected int getExperiencePoints(EntityPlayer var1) { + if(this.experienceValue > 0) { + int var2 = this.experienceValue; + ItemStack[] var3 = this.getLastActiveItems(); + + for(int var4 = 0; var4 < var3.length; ++var4) { + if(var3[var4] != null && this.equipmentDropChances[var4] <= 1.0F) { + var2 += 1 + this.rand.nextInt(3); + } + } + + return var2; + } else { + return this.experienceValue; + } + } + + protected boolean isPlayer() { + return false; + } + + public void spawnExplosionParticle() { + for(int var1 = 0; var1 < 20; ++var1) { + double var2 = this.rand.nextGaussian() * 0.02D; + double var4 = this.rand.nextGaussian() * 0.02D; + double var6 = this.rand.nextGaussian() * 0.02D; + double var8 = 10.0D; + this.worldObj.spawnParticle("explode", this.posX + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width - var2 * var8, this.posY + (double)(this.rand.nextFloat() * this.height) - var4 * var8, this.posZ + (double)(this.rand.nextFloat() * this.width * 2.0F) - (double)this.width - var6 * var8, var2, var4, var6); + } + + } + + public void updateRidden() { + super.updateRidden(); + this.field_70768_au = this.field_70766_av; + this.field_70766_av = 0.0F; + this.fallDistance = 0.0F; + } + + public void setPositionAndRotation2(double var1, double var3, double var5, float var7, float var8, int var9) { + this.yOffset = 0.0F; + this.newPosX = var1; + this.newPosY = var3; + this.newPosZ = var5; + this.newRotationYaw = (double)var7; + this.newRotationPitch = (double)var8; + this.newPosRotationIncrements = var9; + } + + public void onUpdate() { + super.onUpdate(); + if(!this.worldObj.isRemote) { + int var1; + for(var1 = 0; var1 < 5; ++var1) { + ItemStack var2 = this.getCurrentItemOrArmor(var1); + if(!ItemStack.areItemStacksEqual(var2, this.previousEquipment[var1])) { + ((WorldServer)this.worldObj).getEntityTracker().sendPacketToAllPlayersTrackingEntity(this, new Packet5PlayerInventory(this.entityId, var1, var2)); + this.previousEquipment[var1] = var2 == null ? null : var2.copy(); + } + } + + var1 = this.getArrowCountInEntity(); + if(var1 > 0) { + if(this.arrowHitTimer <= 0) { + this.arrowHitTimer = 20 * (30 - var1); + } + + --this.arrowHitTimer; + if(this.arrowHitTimer <= 0) { + this.setArrowCountInEntity(var1 - 1); + } + } + } + + this.onLivingUpdate(); + double var12 = this.posX - this.prevPosX; + double var3 = this.posZ - this.prevPosZ; + float var5 = (float)(var12 * var12 + var3 * var3); + float var6 = this.renderYawOffset; + float var7 = 0.0F; + this.field_70768_au = this.field_70766_av; + float var8 = 0.0F; + if(var5 > 0.0025000002F) { + var8 = 1.0F; + var7 = (float)Math.sqrt((double)var5) * 3.0F; + var6 = (float)Math.atan2(var3, var12) * 180.0F / (float)Math.PI - 90.0F; + } + + if(this.swingProgress > 0.0F) { + var6 = this.rotationYaw; + } + + if(!this.onGround) { + var8 = 0.0F; + } + + this.field_70766_av += (var8 - this.field_70766_av) * 0.3F; + this.worldObj.theProfiler.startSection("headTurn"); + if(this.isAIEnabled()) { + this.bodyHelper.func_75664_a(); + } else { + float var9 = MathHelper.wrapAngleTo180_float(var6 - this.renderYawOffset); + this.renderYawOffset += var9 * 0.3F; + float var10 = MathHelper.wrapAngleTo180_float(this.rotationYaw - this.renderYawOffset); + boolean var11 = var10 < -90.0F || var10 >= 90.0F; + if(var10 < -75.0F) { + var10 = -75.0F; + } + + if(var10 >= 75.0F) { + var10 = 75.0F; + } + + this.renderYawOffset = this.rotationYaw - var10; + if(var10 * var10 > 2500.0F) { + this.renderYawOffset += var10 * 0.2F; + } + + if(var11) { + var7 *= -1.0F; + } + } + + this.worldObj.theProfiler.endSection(); + this.worldObj.theProfiler.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.worldObj.theProfiler.endSection(); + this.field_70764_aw += var7; + } + + public void heal(int var1) { + if(this.health > 0) { + this.setEntityHealth(this.getHealth() + var1); + if(this.health > this.getMaxHealth()) { + this.setEntityHealth(this.getMaxHealth()); + } + + this.hurtResistantTime = this.maxHurtResistantTime / 2; + } + } + + public abstract int getMaxHealth(); + + public int getHealth() { + return this.health; + } + + public void setEntityHealth(int var1) { + this.health = var1; + if(var1 > this.getMaxHealth()) { + var1 = this.getMaxHealth(); + } + + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else if(this.worldObj.isRemote) { + return false; + } else { + this.entityAge = 0; + if(this.health <= 0) { + return false; + } else if(var1.isFireDamage() && this.isPotionActive(Potion.fireResistance)) { + return false; + } else { + if((var1 == DamageSource.anvil || var1 == DamageSource.fallingBlock) && this.getCurrentItemOrArmor(4) != null) { + this.getCurrentItemOrArmor(4).damageItem(var2 * 4 + this.rand.nextInt(var2 * 2), this); + var2 = (int)((float)var2 * (12.0F / 16.0F)); + } + + this.limbYaw = 1.5F; + boolean var3 = true; + if((float)this.hurtResistantTime > (float)this.maxHurtResistantTime / 2.0F) { + if(var2 <= this.lastDamage) { + return false; + } + + this.damageEntity(var1, var2 - this.lastDamage); + this.lastDamage = var2; + var3 = false; + } else { + this.lastDamage = var2; + this.prevHealth = this.health; + this.hurtResistantTime = this.maxHurtResistantTime; + this.damageEntity(var1, var2); + this.hurtTime = this.maxHurtTime = 10; + } + + this.attackedAtYaw = 0.0F; + Entity var4 = var1.getEntity(); + if(var4 != null) { + if(var4 instanceof EntityLiving) { + this.setRevengeTarget((EntityLiving)var4); + } + + if(var4 instanceof EntityPlayer) { + this.recentlyHit = 100; + this.attackingPlayer = (EntityPlayer)var4; + } else if(var4 instanceof EntityWolf) { + EntityWolf var5 = (EntityWolf)var4; + if(var5.isTamed()) { + this.recentlyHit = 100; + this.attackingPlayer = null; + } + } + } + + if(var3) { + this.worldObj.setEntityState(this, (byte)2); + if(var1 != DamageSource.drown) { + this.setBeenAttacked(); + } + + if(var4 != null) { + double var9 = var4.posX - this.posX; + + double var7; + for(var7 = var4.posZ - this.posZ; var9 * var9 + var7 * var7 < 1.0E-4D; var7 = (Math.random() - Math.random()) * 0.01D) { + var9 = (Math.random() - Math.random()) * 0.01D; + } + + this.attackedAtYaw = (float)(Math.atan2(var7, var9) * 180.0D / (double)((float)Math.PI)) - this.rotationYaw; + this.knockBack(var4, var2, var9, var7); + } else { + this.attackedAtYaw = (float)((int)(Math.random() * 2.0D) * 180); + } + } + + if(this.health <= 0) { + if(var3) { + this.playSound(this.getDeathSound(), this.getSoundVolume(), this.getSoundPitch()); + } + + this.onDeath(var1); + } else if(var3) { + this.playSound(this.getHurtSound(), this.getSoundVolume(), this.getSoundPitch()); + } + + return true; + } + } + } + + 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; + } + + public void performHurtAnimation() { + this.hurtTime = this.maxHurtTime = 10; + this.attackedAtYaw = 0.0F; + } + + public int getTotalArmorValue() { + int var1 = 0; + ItemStack[] var2 = this.getLastActiveItems(); + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + ItemStack var5 = var2[var4]; + if(var5 != null && var5.getItem() instanceof ItemArmor) { + int var6 = ((ItemArmor)var5.getItem()).damageReduceAmount; + var1 += var6; + } + } + + return var1; + } + + protected void damageArmor(int var1) { + } + + protected int applyArmorCalculations(DamageSource var1, int var2) { + if(!var1.isUnblockable()) { + int var3 = 25 - this.getTotalArmorValue(); + int var4 = var2 * var3 + this.carryoverDamage; + this.damageArmor(var2); + var2 = var4 / 25; + this.carryoverDamage = var4 % 25; + } + + return var2; + } + + protected int applyPotionDamageCalculations(DamageSource var1, int var2) { + int var3; + int var4; + int var5; + if(this.isPotionActive(Potion.resistance)) { + var3 = (this.getActivePotionEffect(Potion.resistance).getAmplifier() + 1) * 5; + var4 = 25 - var3; + var5 = var2 * var4 + this.carryoverDamage; + var2 = var5 / 25; + this.carryoverDamage = var5 % 25; + } + + if(var2 <= 0) { + return 0; + } else { + var3 = EnchantmentHelper.getEnchantmentModifierDamage(this.getLastActiveItems(), var1); + if(var3 > 20) { + var3 = 20; + } + + if(var3 > 0 && var3 <= 20) { + var4 = 25 - var3; + var5 = var2 * var4 + this.carryoverDamage; + var2 = var5 / 25; + this.carryoverDamage = var5 % 25; + } + + return var2; + } + } + + protected void damageEntity(DamageSource var1, int var2) { + if(!this.isEntityInvulnerable()) { + var2 = this.applyArmorCalculations(var1, var2); + var2 = this.applyPotionDamageCalculations(var1, var2); + int var3 = this.getHealth(); + this.health -= var2; + this.field_94063_bt.func_94547_a(var1, var3, var2); + } + } + + protected float getSoundVolume() { + return 1.0F; + } + + protected String getLivingSound() { + return null; + } + + protected String getHurtSound() { + return "damage.hit"; + } + + protected String getDeathSound() { + return "damage.hit"; + } + + public void knockBack(Entity var1, int var2, double var3, double var5) { + this.isAirBorne = true; + float var7 = MathHelper.sqrt_double(var3 * var3 + var5 * var5); + float var8 = 0.4F; + this.motionX /= 2.0D; + this.motionY /= 2.0D; + this.motionZ /= 2.0D; + this.motionX -= var3 / (double)var7 * (double)var8; + this.motionY += (double)var8; + this.motionZ -= var5 / (double)var7 * (double)var8; + if(this.motionY > (double)0.4F) { + this.motionY = (double)0.4F; + } + + } + + public void onDeath(DamageSource var1) { + Entity var2 = var1.getEntity(); + EntityLiving var3 = this.func_94060_bK(); + if(this.scoreValue >= 0 && var3 != null) { + var3.addToPlayerScore(this, this.scoreValue); + } + + if(var2 != null) { + var2.onKillEntity(this); + } + + this.dead = true; + if(!this.worldObj.isRemote) { + int var4 = 0; + if(var2 instanceof EntityPlayer) { + var4 = EnchantmentHelper.getLootingModifier((EntityLiving)var2); + } + + if(!this.isChild() && this.worldObj.getGameRules().getGameRuleBooleanValue("doMobLoot")) { + this.dropFewItems(this.recentlyHit > 0, var4); + this.dropEquipment(this.recentlyHit > 0, var4); + if(this.recentlyHit > 0) { + int var5 = this.rand.nextInt(200) - var4; + if(var5 < 5) { + this.dropRareDrop(var5 <= 0 ? 1 : 0); + } + } + } + } + + this.worldObj.setEntityState(this, (byte)3); + } + + protected void dropRareDrop(int var1) { + } + + protected void dropFewItems(boolean var1, int var2) { + int var3 = this.getDropItemId(); + if(var3 > 0) { + int var4 = this.rand.nextInt(3); + if(var2 > 0) { + var4 += this.rand.nextInt(var2 + 1); + } + + for(int var5 = 0; var5 < var4; ++var5) { + this.dropItem(var3, 1); + } + } + + } + + protected int getDropItemId() { + return 0; + } + + protected void fall(float var1) { + super.fall(var1); + int var2 = MathHelper.ceiling_float_int(var1 - 3.0F); + if(var2 > 0) { + if(var2 > 4) { + this.playSound("damage.fallbig", 1.0F, 1.0F); + } else { + this.playSound("damage.fallsmall", 1.0F, 1.0F); + } + + this.attackEntityFrom(DamageSource.fall, var2); + int var3 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY - (double)0.2F - (double)this.yOffset), MathHelper.floor_double(this.posZ)); + if(var3 > 0) { + StepSound var4 = Block.blocksList[var3].stepSound; + this.playSound(var4.getStepSound(), var4.getVolume() * 0.5F, var4.getPitch() * (12.0F / 16.0F)); + } + } + + } + + public void moveEntityWithHeading(float var1, float var2) { + double var3; + if(!this.isInWater() || this instanceof EntityPlayer && ((EntityPlayer)this).capabilities.isFlying) { + if(!this.handleLavaMovement() || this instanceof EntityPlayer && ((EntityPlayer)this).capabilities.isFlying) { + float var8 = 0.91F; + if(this.onGround) { + var8 = 546.0F * 0.1F * 0.1F * 0.1F; + int var4 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ)); + if(var4 > 0) { + var8 = Block.blocksList[var4].slipperiness * 0.91F; + } + } + + float var9 = 0.16277136F / (var8 * var8 * var8); + float var5; + if(this.onGround) { + if(this.isAIEnabled()) { + var5 = this.getAIMoveSpeed(); + } else { + var5 = this.landMovementFactor; + } + + var5 *= var9; + } else { + var5 = this.jumpMovementFactor; + } + + this.moveFlying(var1, var2, var5); + var8 = 0.91F; + if(this.onGround) { + var8 = 546.0F * 0.1F * 0.1F * 0.1F; + int var6 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ)); + if(var6 > 0) { + var8 = Block.blocksList[var6].slipperiness * 0.91F; + } + } + + if(this.isOnLadder()) { + float var10 = 0.15F; + if(this.motionX < (double)(-var10)) { + this.motionX = (double)(-var10); + } + + if(this.motionX > (double)var10) { + this.motionX = (double)var10; + } + + if(this.motionZ < (double)(-var10)) { + this.motionZ = (double)(-var10); + } + + if(this.motionZ > (double)var10) { + this.motionZ = (double)var10; + } + + this.fallDistance = 0.0F; + if(this.motionY < -0.15D) { + this.motionY = -0.15D; + } + + boolean var7 = this.isSneaking() && this instanceof EntityPlayer; + if(var7 && this.motionY < 0.0D) { + this.motionY = 0.0D; + } + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + if(this.isCollidedHorizontally && this.isOnLadder()) { + this.motionY = 0.2D; + } + + if(this.worldObj.isRemote && (!this.worldObj.blockExists((int)this.posX, 0, (int)this.posZ) || !this.worldObj.getChunkFromBlockCoords((int)this.posX, (int)this.posZ).isChunkLoaded)) { + if(this.posY > 0.0D) { + this.motionY = -0.1D; + } else { + this.motionY = 0.0D; + } + } else { + this.motionY -= 0.08D; + } + + this.motionY *= (double)0.98F; + this.motionX *= (double)var8; + this.motionZ *= (double)var8; + } else { + var3 = this.posY; + this.moveFlying(var1, var2, 0.02F); + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + this.motionY -= 0.02D; + if(this.isCollidedHorizontally && this.isOffsetPositionInLiquid(this.motionX, this.motionY + (double)0.6F - this.posY + var3, this.motionZ)) { + this.motionY = (double)0.3F; + } + } + } else { + var3 = this.posY; + this.moveFlying(var1, var2, this.isAIEnabled() ? 0.04F : 0.02F); + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.8F; + this.motionY *= (double)0.8F; + this.motionZ *= (double)0.8F; + this.motionY -= 0.02D; + if(this.isCollidedHorizontally && this.isOffsetPositionInLiquid(this.motionX, this.motionY + (double)0.6F - this.posY + var3, this.motionZ)) { + this.motionY = (double)0.3F; + } + } + + this.prevLimbYaw = this.limbYaw; + var3 = this.posX - this.prevPosX; + double var11 = this.posZ - this.prevPosZ; + float var12 = MathHelper.sqrt_double(var3 * var3 + var11 * var11) * 4.0F; + if(var12 > 1.0F) { + var12 = 1.0F; + } + + this.limbYaw += (var12 - this.limbYaw) * 0.4F; + this.limbSwing += this.limbYaw; + } + + public boolean isOnLadder() { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.boundingBox.minY); + int var3 = MathHelper.floor_double(this.posZ); + int var4 = this.worldObj.getBlockId(var1, var2, var3); + return var4 == Block.ladder.blockID || var4 == Block.vine.blockID; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + if(this.health < Short.MIN_VALUE) { + this.health = Short.MIN_VALUE; + } + + var1.setShort("Health", (short)this.health); + var1.setShort("HurtTime", (short)this.hurtTime); + var1.setShort("DeathTime", (short)this.deathTime); + var1.setShort("AttackTime", (short)this.attackTime); + var1.setBoolean("CanPickUpLoot", this.canPickUpLoot()); + var1.setBoolean("PersistenceRequired", this.persistenceRequired); + NBTTagList var2 = new NBTTagList(); + + for(int var3 = 0; var3 < this.equipment.length; ++var3) { + NBTTagCompound var4 = new NBTTagCompound(); + if(this.equipment[var3] != null) { + this.equipment[var3].writeToNBT(var4); + } + + var2.appendTag(var4); + } + + var1.setTag("Equipment", var2); + NBTTagList var6; + if(!this.activePotionsMap.isEmpty()) { + var6 = new NBTTagList(); + Iterator var7 = this.activePotionsMap.values().iterator(); + + while(var7.hasNext()) { + PotionEffect var5 = (PotionEffect)var7.next(); + var6.appendTag(var5.writeCustomPotionEffectToNBT(new NBTTagCompound())); + } + + var1.setTag("ActiveEffects", var6); + } + + var6 = new NBTTagList(); + + for(int var8 = 0; var8 < this.equipmentDropChances.length; ++var8) { + var6.appendTag(new NBTTagFloat(var8 + "", this.equipmentDropChances[var8])); + } + + var1.setTag("DropChances", var6); + var1.setString("CustomName", this.func_94057_bL()); + var1.setBoolean("CustomNameVisible", this.func_94062_bN()); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.health = var1.getShort("Health"); + if(!var1.hasKey("Health")) { + this.health = this.getMaxHealth(); + } + + this.hurtTime = var1.getShort("HurtTime"); + this.deathTime = var1.getShort("DeathTime"); + this.attackTime = var1.getShort("AttackTime"); + this.setCanPickUpLoot(var1.getBoolean("CanPickUpLoot")); + this.persistenceRequired = var1.getBoolean("PersistenceRequired"); + if(var1.hasKey("CustomName") && var1.getString("CustomName").length() > 0) { + this.func_94058_c(var1.getString("CustomName")); + } + + this.func_94061_f(var1.getBoolean("CustomNameVisible")); + NBTTagList var2; + int var3; + if(var1.hasKey("Equipment")) { + var2 = var1.getTagList("Equipment"); + + for(var3 = 0; var3 < this.equipment.length; ++var3) { + this.equipment[var3] = ItemStack.loadItemStackFromNBT((NBTTagCompound)var2.tagAt(var3)); + } + } + + if(var1.hasKey("ActiveEffects")) { + var2 = var1.getTagList("ActiveEffects"); + + for(var3 = 0; var3 < var2.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + PotionEffect var5 = PotionEffect.readCustomPotionEffectFromNBT(var4); + this.activePotionsMap.put(Integer.valueOf(var5.getPotionID()), var5); + } + } + + if(var1.hasKey("DropChances")) { + var2 = var1.getTagList("DropChances"); + + for(var3 = 0; var3 < var2.tagCount(); ++var3) { + this.equipmentDropChances[var3] = ((NBTTagFloat)var2.tagAt(var3)).data; + } + } + + } + + public boolean isEntityAlive() { + return !this.isDead && this.health > 0; + } + + public boolean canBreatheUnderwater() { + return false; + } + + public void setMoveForward(float var1) { + this.moveForward = var1; + } + + public void setJumping(boolean var1) { + this.isJumping = var1; + } + + public void onLivingUpdate() { + if(this.jumpTicks > 0) { + --this.jumpTicks; + } + + if(this.newPosRotationIncrements > 0) { + double var1 = this.posX + (this.newPosX - this.posX) / (double)this.newPosRotationIncrements; + double var3 = this.posY + (this.newPosY - this.posY) / (double)this.newPosRotationIncrements; + double var5 = this.posZ + (this.newPosZ - this.posZ) / (double)this.newPosRotationIncrements; + double var7 = MathHelper.wrapAngleTo180_double(this.newRotationYaw - (double)this.rotationYaw); + this.rotationYaw = (float)((double)this.rotationYaw + var7 / (double)this.newPosRotationIncrements); + this.rotationPitch = (float)((double)this.rotationPitch + (this.newRotationPitch - (double)this.rotationPitch) / (double)this.newPosRotationIncrements); + --this.newPosRotationIncrements; + this.setPosition(var1, var3, var5); + this.setRotation(this.rotationYaw, this.rotationPitch); + } else if(!this.isClientWorld()) { + this.motionX *= 0.98D; + this.motionY *= 0.98D; + this.motionZ *= 0.98D; + } + + if(Math.abs(this.motionX) < 0.005D) { + this.motionX = 0.0D; + } + + if(Math.abs(this.motionY) < 0.005D) { + this.motionY = 0.0D; + } + + if(Math.abs(this.motionZ) < 0.005D) { + this.motionZ = 0.0D; + } + + this.worldObj.theProfiler.startSection("ai"); + if(this.isMovementBlocked()) { + this.isJumping = false; + this.moveStrafing = 0.0F; + this.moveForward = 0.0F; + this.randomYawVelocity = 0.0F; + } else if(this.isClientWorld()) { + if(this.isAIEnabled()) { + this.worldObj.theProfiler.startSection("newAi"); + this.updateAITasks(); + this.worldObj.theProfiler.endSection(); + } else { + this.worldObj.theProfiler.startSection("oldAi"); + this.updateEntityActionState(); + this.worldObj.theProfiler.endSection(); + this.rotationYawHead = this.rotationYaw; + } + } + + this.worldObj.theProfiler.endSection(); + this.worldObj.theProfiler.startSection("jump"); + if(this.isJumping) { + if(!this.isInWater() && !this.handleLavaMovement()) { + if(this.onGround && this.jumpTicks == 0) { + this.jump(); + this.jumpTicks = 10; + } + } else { + this.motionY += (double)0.04F; + } + } else { + this.jumpTicks = 0; + } + + this.worldObj.theProfiler.endSection(); + this.worldObj.theProfiler.startSection("travel"); + this.moveStrafing *= 0.98F; + this.moveForward *= 0.98F; + this.randomYawVelocity *= 0.9F; + float var11 = this.landMovementFactor; + this.landMovementFactor *= this.getSpeedModifier(); + this.moveEntityWithHeading(this.moveStrafing, this.moveForward); + this.landMovementFactor = var11; + this.worldObj.theProfiler.endSection(); + this.worldObj.theProfiler.startSection("push"); + if(!this.worldObj.isRemote) { + this.func_85033_bc(); + } + + this.worldObj.theProfiler.endSection(); + this.worldObj.theProfiler.startSection("looting"); + if(!this.worldObj.isRemote && this.canPickUpLoot() && !this.dead && this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing")) { + List var2 = this.worldObj.getEntitiesWithinAABB(EntityItem.class, this.boundingBox.expand(1.0D, 0.0D, 1.0D)); + Iterator var12 = var2.iterator(); + + label159: + while(true) { + EntityItem var4; + int var6; + ItemStack var13; + do { + do { + do { + if(!var12.hasNext()) { + break label159; + } + + var4 = (EntityItem)var12.next(); + } while(var4.isDead); + } while(var4.getEntityItem() == null); + + var13 = var4.getEntityItem(); + var6 = getArmorPosition(var13); + } while(var6 <= -1); + + boolean var14 = true; + ItemStack var8 = this.getCurrentItemOrArmor(var6); + if(var8 != null) { + if(var6 == 0) { + if(var13.getItem() instanceof ItemSword && !(var8.getItem() instanceof ItemSword)) { + var14 = true; + } else if(var13.getItem() instanceof ItemSword && var8.getItem() instanceof ItemSword) { + ItemSword var15 = (ItemSword)var13.getItem(); + ItemSword var16 = (ItemSword)var8.getItem(); + if(var15.func_82803_g() != var16.func_82803_g()) { + var14 = var15.func_82803_g() > var16.func_82803_g(); + } else { + var14 = var13.getItemDamage() > var8.getItemDamage() || var13.hasTagCompound() && !var8.hasTagCompound(); + } + } else { + var14 = false; + } + } else if(var13.getItem() instanceof ItemArmor && !(var8.getItem() instanceof ItemArmor)) { + var14 = true; + } else if(var13.getItem() instanceof ItemArmor && var8.getItem() instanceof ItemArmor) { + ItemArmor var9 = (ItemArmor)var13.getItem(); + ItemArmor var10 = (ItemArmor)var8.getItem(); + if(var9.damageReduceAmount != var10.damageReduceAmount) { + var14 = var9.damageReduceAmount > var10.damageReduceAmount; + } else { + var14 = var13.getItemDamage() > var8.getItemDamage() || var13.hasTagCompound() && !var8.hasTagCompound(); + } + } else { + var14 = false; + } + } + + if(var14) { + if(var8 != null && this.rand.nextFloat() - 0.1F < this.equipmentDropChances[var6]) { + this.entityDropItem(var8, 0.0F); + } + + this.setCurrentItemOrArmor(var6, var13); + this.equipmentDropChances[var6] = 2.0F; + this.persistenceRequired = true; + this.onItemPickup(var4, 1); + var4.setDead(); + } + } + } + + this.worldObj.theProfiler.endSection(); + } + + protected void func_85033_bc() { + List var1 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand((double)0.2F, 0.0D, (double)0.2F)); + if(var1 != null && !var1.isEmpty()) { + for(int var2 = 0; var2 < var1.size(); ++var2) { + Entity var3 = (Entity)var1.get(var2); + if(var3.canBePushed()) { + this.collideWithEntity(var3); + } + } + } + + } + + protected void collideWithEntity(Entity var1) { + var1.applyEntityCollision(this); + } + + protected boolean isAIEnabled() { + return false; + } + + protected boolean isClientWorld() { + return !this.worldObj.isRemote; + } + + protected boolean isMovementBlocked() { + return this.health <= 0; + } + + public boolean isBlocking() { + return false; + } + + protected void jump() { + this.motionY = (double)0.42F; + if(this.isPotionActive(Potion.jump)) { + this.motionY += (double)((float)(this.getActivePotionEffect(Potion.jump).getAmplifier() + 1) * 0.1F); + } + + if(this.isSprinting()) { + float var1 = this.rotationYaw * ((float)Math.PI / 180.0F); + this.motionX -= (double)(MathHelper.sin(var1) * 0.2F); + this.motionZ += (double)(MathHelper.cos(var1) * 0.2F); + } + + this.isAirBorne = true; + } + + protected boolean canDespawn() { + return true; + } + + protected void despawnEntity() { + if(!this.persistenceRequired) { + EntityPlayer var1 = this.worldObj.getClosestPlayerToEntity(this, -1.0D); + if(var1 != null) { + double var2 = var1.posX - this.posX; + double var4 = var1.posY - this.posY; + double var6 = var1.posZ - this.posZ; + double var8 = var2 * var2 + var4 * var4 + var6 * var6; + if(this.canDespawn() && var8 > 16384.0D) { + this.setDead(); + } + + if(this.entityAge > 600 && this.rand.nextInt(800) == 0 && var8 > 1024.0D && this.canDespawn()) { + this.setDead(); + } else if(var8 < 1024.0D) { + this.entityAge = 0; + } + } + + } + } + + protected void updateAITasks() { + ++this.entityAge; + this.worldObj.theProfiler.startSection("checkDespawn"); + this.despawnEntity(); + this.worldObj.theProfiler.endSection(); + this.worldObj.theProfiler.startSection("sensing"); + this.senses.clearSensingCache(); + this.worldObj.theProfiler.endSection(); + this.worldObj.theProfiler.startSection("targetSelector"); + this.targetTasks.onUpdateTasks(); + this.worldObj.theProfiler.endSection(); + this.worldObj.theProfiler.startSection("goalSelector"); + this.tasks.onUpdateTasks(); + this.worldObj.theProfiler.endSection(); + this.worldObj.theProfiler.startSection("navigation"); + this.navigator.onUpdateNavigation(); + this.worldObj.theProfiler.endSection(); + this.worldObj.theProfiler.startSection("mob tick"); + this.updateAITick(); + this.worldObj.theProfiler.endSection(); + this.worldObj.theProfiler.startSection("controls"); + this.worldObj.theProfiler.startSection("move"); + this.moveHelper.onUpdateMoveHelper(); + this.worldObj.theProfiler.endStartSection("look"); + this.lookHelper.onUpdateLook(); + this.worldObj.theProfiler.endStartSection("jump"); + this.jumpHelper.doJump(); + this.worldObj.theProfiler.endSection(); + this.worldObj.theProfiler.endSection(); + } + + protected void updateAITick() { + } + + protected void updateEntityActionState() { + ++this.entityAge; + this.despawnEntity(); + this.moveStrafing = 0.0F; + this.moveForward = 0.0F; + float var1 = 8.0F; + if(this.rand.nextFloat() < 0.02F) { + EntityPlayer var2 = this.worldObj.getClosestPlayerToEntity(this, (double)var1); + if(var2 != null) { + this.currentTarget = var2; + this.numTicksToChaseTarget = 10 + this.rand.nextInt(20); + } else { + this.randomYawVelocity = (this.rand.nextFloat() - 0.5F) * 20.0F; + } + } + + if(this.currentTarget != null) { + this.faceEntity(this.currentTarget, 10.0F, (float)this.getVerticalFaceSpeed()); + if(this.numTicksToChaseTarget-- <= 0 || this.currentTarget.isDead || this.currentTarget.getDistanceSqToEntity(this) > (double)(var1 * var1)) { + this.currentTarget = null; + } + } else { + if(this.rand.nextFloat() < 0.05F) { + this.randomYawVelocity = (this.rand.nextFloat() - 0.5F) * 20.0F; + } + + this.rotationYaw += this.randomYawVelocity; + this.rotationPitch = this.defaultPitch; + } + + boolean var4 = this.isInWater(); + boolean var3 = this.handleLavaMovement(); + if(var4 || var3) { + this.isJumping = this.rand.nextFloat() < 0.8F; + } + + } + + protected void updateArmSwingProgress() { + int var1 = this.getArmSwingAnimationEnd(); + if(this.isSwingInProgress) { + ++this.swingProgressInt; + if(this.swingProgressInt >= var1) { + this.swingProgressInt = 0; + this.isSwingInProgress = false; + } + } else { + this.swingProgressInt = 0; + } + + this.swingProgress = (float)this.swingProgressInt / (float)var1; + } + + public int getVerticalFaceSpeed() { + return 40; + } + + public void faceEntity(Entity var1, float var2, float var3) { + double var4 = var1.posX - this.posX; + double var8 = var1.posZ - this.posZ; + double var6; + if(var1 instanceof EntityLiving) { + EntityLiving var10 = (EntityLiving)var1; + var6 = var10.posY + (double)var10.getEyeHeight() - (this.posY + (double)this.getEyeHeight()); + } else { + var6 = (var1.boundingBox.minY + var1.boundingBox.maxY) / 2.0D - (this.posY + (double)this.getEyeHeight()); + } + + double var14 = (double)MathHelper.sqrt_double(var4 * var4 + var8 * var8); + float var12 = (float)(Math.atan2(var8, var4) * 180.0D / (double)((float)Math.PI)) - 90.0F; + float var13 = (float)(-(Math.atan2(var6, var14) * 180.0D / (double)((float)Math.PI))); + this.rotationPitch = this.updateRotation(this.rotationPitch, var13, var3); + this.rotationYaw = this.updateRotation(this.rotationYaw, var12, var2); + } + + private float updateRotation(float var1, float var2, float var3) { + float var4 = MathHelper.wrapAngleTo180_float(var2 - var1); + if(var4 > var3) { + var4 = var3; + } + + if(var4 < -var3) { + var4 = -var3; + } + + return var1 + var4; + } + + public boolean getCanSpawnHere() { + return this.worldObj.checkNoEntityCollision(this.boundingBox) && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).isEmpty() && !this.worldObj.isAnyLiquid(this.boundingBox); + } + + protected void kill() { + this.attackEntityFrom(DamageSource.outOfWorld, 4); + } + + public float getSwingProgress(float var1) { + float var2 = this.swingProgress - this.prevSwingProgress; + if(var2 < 0.0F) { + ++var2; + } + + return this.prevSwingProgress + var2 * var1; + } + + public Vec3 getPosition(float var1) { + if(var1 == 1.0F) { + return this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ); + } else { + double var2 = this.prevPosX + (this.posX - this.prevPosX) * (double)var1; + double var4 = this.prevPosY + (this.posY - this.prevPosY) * (double)var1; + double var6 = this.prevPosZ + (this.posZ - this.prevPosZ) * (double)var1; + return this.worldObj.getWorldVec3Pool().getVecFromPool(var2, var4, var6); + } + } + + public Vec3 getLookVec() { + return this.getLook(1.0F); + } + + public Vec3 getLook(float var1) { + float var2; + float var3; + float var4; + float var5; + if(var1 == 1.0F) { + var2 = MathHelper.cos(-this.rotationYaw * ((float)Math.PI / 180.0F) - (float)Math.PI); + var3 = MathHelper.sin(-this.rotationYaw * ((float)Math.PI / 180.0F) - (float)Math.PI); + var4 = -MathHelper.cos(-this.rotationPitch * ((float)Math.PI / 180.0F)); + var5 = MathHelper.sin(-this.rotationPitch * ((float)Math.PI / 180.0F)); + return this.worldObj.getWorldVec3Pool().getVecFromPool((double)(var3 * var4), (double)var5, (double)(var2 * var4)); + } else { + var2 = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * var1; + var3 = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * var1; + var4 = MathHelper.cos(-var3 * ((float)Math.PI / 180.0F) - (float)Math.PI); + var5 = MathHelper.sin(-var3 * ((float)Math.PI / 180.0F) - (float)Math.PI); + float var6 = -MathHelper.cos(-var2 * ((float)Math.PI / 180.0F)); + float var7 = MathHelper.sin(-var2 * ((float)Math.PI / 180.0F)); + return this.worldObj.getWorldVec3Pool().getVecFromPool((double)(var5 * var6), (double)var7, (double)(var4 * var6)); + } + } + + public float getRenderSizeModifier() { + return 1.0F; + } + + public MovingObjectPosition rayTrace(double var1, float var3) { + Vec3 var4 = this.getPosition(var3); + Vec3 var5 = this.getLook(var3); + Vec3 var6 = var4.addVector(var5.xCoord * var1, var5.yCoord * var1, var5.zCoord * var1); + return this.worldObj.rayTraceBlocks(var4, var6); + } + + public int getMaxSpawnedInChunk() { + return 4; + } + + public void handleHealthUpdate(byte var1) { + if(var1 == 2) { + this.limbYaw = 1.5F; + this.hurtResistantTime = this.maxHurtResistantTime; + this.hurtTime = this.maxHurtTime = 10; + this.attackedAtYaw = 0.0F; + this.playSound(this.getHurtSound(), this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + this.attackEntityFrom(DamageSource.generic, 0); + } else if(var1 == 3) { + this.playSound(this.getDeathSound(), this.getSoundVolume(), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + this.health = 0; + this.onDeath(DamageSource.generic); + } else { + super.handleHealthUpdate(var1); + } + + } + + public boolean isPlayerSleeping() { + return false; + } + + public Icon getItemIcon(ItemStack var1, int var2) { + return var1.getIconIndex(); + } + + protected void updatePotionEffects() { + Iterator var1 = this.activePotionsMap.keySet().iterator(); + + while(var1.hasNext()) { + Integer var2 = (Integer)var1.next(); + PotionEffect var3 = (PotionEffect)this.activePotionsMap.get(var2); + + try { + if(!var3.onUpdate(this)) { + if(!this.worldObj.isRemote) { + var1.remove(); + this.onFinishedPotionEffect(var3); + } + } else if(var3.getDuration() % 600 == 0) { + this.onChangedPotionEffect(var3); + } + } catch (Throwable var11) { + CrashReport var5 = CrashReport.makeCrashReport(var11, "Ticking mob effect instance"); + CrashReportCategory var6 = var5.makeCategory("Mob effect being ticked"); + var6.addCrashSectionCallable("Effect Name", new CallableEffectName(this, var3)); + var6.addCrashSectionCallable("Effect ID", new CallableEffectID(this, var3)); + var6.addCrashSectionCallable("Effect Duration", new CallableEffectDuration(this, var3)); + var6.addCrashSectionCallable("Effect Amplifier", new CallableEffectAmplifier(this, var3)); + var6.addCrashSectionCallable("Effect is Splash", new CallableEffectIsSplash(this, var3)); + var6.addCrashSectionCallable("Effect is Ambient", new CallableEffectIsAmbient(this, var3)); + throw new ReportedException(var5); + } + } + + int var12; + if(this.potionsNeedUpdate) { + if(!this.worldObj.isRemote) { + if(this.activePotionsMap.isEmpty()) { + this.dataWatcher.updateObject(9, Byte.valueOf((byte)0)); + this.dataWatcher.updateObject(8, Integer.valueOf(0)); + this.setInvisible(false); + } else { + var12 = PotionHelper.calcPotionLiquidColor(this.activePotionsMap.values()); + this.dataWatcher.updateObject(9, Byte.valueOf((byte)(PotionHelper.func_82817_b(this.activePotionsMap.values()) ? 1 : 0))); + this.dataWatcher.updateObject(8, Integer.valueOf(var12)); + this.setInvisible(this.isPotionActive(Potion.invisibility.id)); + } + } + + this.potionsNeedUpdate = false; + } + + var12 = this.dataWatcher.getWatchableObjectInt(8); + boolean var13 = this.dataWatcher.getWatchableObjectByte(9) > 0; + if(var12 > 0) { + boolean var4 = false; + if(!this.isInvisible()) { + var4 = this.rand.nextBoolean(); + } else { + var4 = this.rand.nextInt(15) == 0; + } + + if(var13) { + var4 &= this.rand.nextInt(5) == 0; + } + + if(var4 && var12 > 0) { + double var14 = (double)(var12 >> 16 & 255) / 255.0D; + double var7 = (double)(var12 >> 8 & 255) / 255.0D; + double var9 = (double)(var12 >> 0 & 255) / 255.0D; + this.worldObj.spawnParticle(var13 ? "mobSpellAmbient" : "mobSpell", this.posX + (this.rand.nextDouble() - 0.5D) * (double)this.width, this.posY + this.rand.nextDouble() * (double)this.height - (double)this.yOffset, this.posZ + (this.rand.nextDouble() - 0.5D) * (double)this.width, var14, var7, var9); + } + } + + } + + public void clearActivePotions() { + Iterator var1 = this.activePotionsMap.keySet().iterator(); + + while(var1.hasNext()) { + Integer var2 = (Integer)var1.next(); + PotionEffect var3 = (PotionEffect)this.activePotionsMap.get(var2); + if(!this.worldObj.isRemote) { + var1.remove(); + this.onFinishedPotionEffect(var3); + } + } + + } + + public Collection getActivePotionEffects() { + return this.activePotionsMap.values(); + } + + public boolean isPotionActive(int var1) { + return this.activePotionsMap.containsKey(Integer.valueOf(var1)); + } + + public boolean isPotionActive(Potion var1) { + return this.activePotionsMap.containsKey(Integer.valueOf(var1.id)); + } + + public PotionEffect getActivePotionEffect(Potion var1) { + return (PotionEffect)this.activePotionsMap.get(Integer.valueOf(var1.id)); + } + + public void addPotionEffect(PotionEffect var1) { + if(this.isPotionApplicable(var1)) { + if(this.activePotionsMap.containsKey(Integer.valueOf(var1.getPotionID()))) { + ((PotionEffect)this.activePotionsMap.get(Integer.valueOf(var1.getPotionID()))).combine(var1); + this.onChangedPotionEffect((PotionEffect)this.activePotionsMap.get(Integer.valueOf(var1.getPotionID()))); + } else { + this.activePotionsMap.put(Integer.valueOf(var1.getPotionID()), var1); + this.onNewPotionEffect(var1); + } + + } + } + + public boolean isPotionApplicable(PotionEffect var1) { + if(this.getCreatureAttribute() == EnumCreatureAttribute.UNDEAD) { + int var2 = var1.getPotionID(); + if(var2 == Potion.regeneration.id || var2 == Potion.poison.id) { + return false; + } + } + + return true; + } + + public boolean isEntityUndead() { + return this.getCreatureAttribute() == EnumCreatureAttribute.UNDEAD; + } + + public void removePotionEffectClient(int var1) { + this.activePotionsMap.remove(Integer.valueOf(var1)); + } + + public void removePotionEffect(int var1) { + PotionEffect var2 = (PotionEffect)this.activePotionsMap.remove(Integer.valueOf(var1)); + if(var2 != null) { + this.onFinishedPotionEffect(var2); + } + + } + + protected void onNewPotionEffect(PotionEffect var1) { + this.potionsNeedUpdate = true; + } + + protected void onChangedPotionEffect(PotionEffect var1) { + this.potionsNeedUpdate = true; + } + + protected void onFinishedPotionEffect(PotionEffect var1) { + this.potionsNeedUpdate = true; + } + + public float getSpeedModifier() { + float var1 = 1.0F; + if(this.isPotionActive(Potion.moveSpeed)) { + var1 *= 1.0F + 0.2F * (float)(this.getActivePotionEffect(Potion.moveSpeed).getAmplifier() + 1); + } + + if(this.isPotionActive(Potion.moveSlowdown)) { + var1 *= 1.0F - 0.15F * (float)(this.getActivePotionEffect(Potion.moveSlowdown).getAmplifier() + 1); + } + + if(var1 < 0.0F) { + var1 = 0.0F; + } + + return var1; + } + + public void setPositionAndUpdate(double var1, double var3, double var5) { + this.setLocationAndAngles(var1, var3, var5, this.rotationYaw, this.rotationPitch); + } + + public boolean isChild() { + return false; + } + + public EnumCreatureAttribute getCreatureAttribute() { + return EnumCreatureAttribute.UNDEFINED; + } + + public void renderBrokenItemStack(ItemStack var1) { + this.playSound("random.break", 0.8F, 0.8F + this.worldObj.rand.nextFloat() * 0.4F); + + for(int var2 = 0; var2 < 5; ++var2) { + Vec3 var3 = this.worldObj.getWorldVec3Pool().getVecFromPool(((double)this.rand.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D); + var3.rotateAroundX(-this.rotationPitch * (float)Math.PI / 180.0F); + var3.rotateAroundY(-this.rotationYaw * (float)Math.PI / 180.0F); + Vec3 var4 = this.worldObj.getWorldVec3Pool().getVecFromPool(((double)this.rand.nextFloat() - 0.5D) * 0.3D, (double)(-this.rand.nextFloat()) * 0.6D - 0.3D, 0.6D); + var4.rotateAroundX(-this.rotationPitch * (float)Math.PI / 180.0F); + var4.rotateAroundY(-this.rotationYaw * (float)Math.PI / 180.0F); + var4 = var4.addVector(this.posX, this.posY + (double)this.getEyeHeight(), this.posZ); + this.worldObj.spawnParticle("iconcrack_" + var1.getItem().itemID, var4.xCoord, var4.yCoord, var4.zCoord, var3.xCoord, var3.yCoord + 0.05D, var3.zCoord); + } + + } + + public int func_82143_as() { + if(this.getAttackTarget() == null) { + return 3; + } else { + int var1 = (int)((float)this.health - (float)this.getMaxHealth() * 0.33F); + var1 -= (3 - this.worldObj.difficultySetting) * 4; + if(var1 < 0) { + var1 = 0; + } + + return var1 + 3; + } + } + + public ItemStack getHeldItem() { + return this.equipment[0]; + } + + public ItemStack getCurrentItemOrArmor(int var1) { + return this.equipment[var1]; + } + + public ItemStack getCurrentArmor(int var1) { + return this.equipment[var1 + 1]; + } + + public void setCurrentItemOrArmor(int var1, ItemStack var2) { + this.equipment[var1] = var2; + } + + public ItemStack[] getLastActiveItems() { + return this.equipment; + } + + protected void dropEquipment(boolean var1, int var2) { + for(int var3 = 0; var3 < this.getLastActiveItems().length; ++var3) { + ItemStack var4 = this.getCurrentItemOrArmor(var3); + boolean var5 = this.equipmentDropChances[var3] > 1.0F; + if(var4 != null && (var1 || var5) && this.rand.nextFloat() - (float)var2 * 0.01F < this.equipmentDropChances[var3]) { + if(!var5 && var4.isItemStackDamageable()) { + int var6 = Math.max(var4.getMaxDamage() - 25, 1); + int var7 = var4.getMaxDamage() - this.rand.nextInt(this.rand.nextInt(var6) + 1); + if(var7 > var6) { + var7 = var6; + } + + if(var7 < 1) { + var7 = 1; + } + + var4.setItemDamage(var7); + } + + this.entityDropItem(var4, 0.0F); + } + } + + } + + protected void addRandomArmor() { + if(this.rand.nextFloat() < armorProbability[this.worldObj.difficultySetting]) { + int var1 = this.rand.nextInt(2); + float var2 = this.worldObj.difficultySetting == 3 ? 0.1F : 0.25F; + if(this.rand.nextFloat() < 0.095F) { + ++var1; + } + + if(this.rand.nextFloat() < 0.095F) { + ++var1; + } + + if(this.rand.nextFloat() < 0.095F) { + ++var1; + } + + for(int var3 = 3; var3 >= 0; --var3) { + ItemStack var4 = this.getCurrentArmor(var3); + if(var3 < 3 && this.rand.nextFloat() < var2) { + break; + } + + if(var4 == null) { + Item var5 = getArmorItemForSlot(var3 + 1, var1); + if(var5 != null) { + this.setCurrentItemOrArmor(var3 + 1, new ItemStack(var5)); + } + } + } + } + + } + + public void onItemPickup(Entity var1, int var2) { + if(!var1.isDead && !this.worldObj.isRemote) { + EntityTracker var3 = ((WorldServer)this.worldObj).getEntityTracker(); + if(var1 instanceof EntityItem) { + var3.sendPacketToAllPlayersTrackingEntity(var1, new Packet22Collect(var1.entityId, this.entityId)); + } + + if(var1 instanceof EntityArrow) { + var3.sendPacketToAllPlayersTrackingEntity(var1, new Packet22Collect(var1.entityId, this.entityId)); + } + + if(var1 instanceof EntityXPOrb) { + var3.sendPacketToAllPlayersTrackingEntity(var1, new Packet22Collect(var1.entityId, this.entityId)); + } + } + + } + + public static int getArmorPosition(ItemStack var0) { + if(var0.itemID != Block.pumpkin.blockID && var0.itemID != Item.skull.itemID) { + if(var0.getItem() instanceof ItemArmor) { + switch(((ItemArmor)var0.getItem()).armorType) { + case 0: + return 4; + case 1: + return 3; + case 2: + return 2; + case 3: + return 1; + } + } + + return 0; + } else { + return 4; + } + } + + public static Item getArmorItemForSlot(int var0, int var1) { + switch(var0) { + case 4: + if(var1 == 0) { + return Item.helmetLeather; + } else if(var1 == 1) { + return Item.helmetGold; + } else if(var1 == 2) { + return Item.helmetChain; + } else if(var1 == 3) { + return Item.helmetIron; + } else if(var1 == 4) { + return Item.helmetDiamond; + } + case 3: + if(var1 == 0) { + return Item.plateLeather; + } else if(var1 == 1) { + return Item.plateGold; + } else if(var1 == 2) { + return Item.plateChain; + } else if(var1 == 3) { + return Item.plateIron; + } else if(var1 == 4) { + return Item.plateDiamond; + } + case 2: + if(var1 == 0) { + return Item.legsLeather; + } else if(var1 == 1) { + return Item.legsGold; + } else if(var1 == 2) { + return Item.legsChain; + } else if(var1 == 3) { + return Item.legsIron; + } else if(var1 == 4) { + return Item.legsDiamond; + } + case 1: + if(var1 == 0) { + return Item.bootsLeather; + } else if(var1 == 1) { + return Item.bootsGold; + } else if(var1 == 2) { + return Item.bootsChain; + } else if(var1 == 3) { + return Item.bootsIron; + } else if(var1 == 4) { + return Item.bootsDiamond; + } + default: + return null; + } + } + + protected void func_82162_bC() { + if(this.getHeldItem() != null && this.rand.nextFloat() < enchantmentProbability[this.worldObj.difficultySetting]) { + EnchantmentHelper.addRandomEnchantment(this.rand, this.getHeldItem(), 5 + this.worldObj.difficultySetting * this.rand.nextInt(6)); + } + + for(int var1 = 0; var1 < 4; ++var1) { + ItemStack var2 = this.getCurrentArmor(var1); + if(var2 != null && this.rand.nextFloat() < armorEnchantmentProbability[this.worldObj.difficultySetting]) { + EnchantmentHelper.addRandomEnchantment(this.rand, var2, 5 + this.worldObj.difficultySetting * this.rand.nextInt(6)); + } + } + + } + + public void initCreature() { + } + + private int getArmSwingAnimationEnd() { + return this.isPotionActive(Potion.digSpeed) ? 6 - (1 + this.getActivePotionEffect(Potion.digSpeed).getAmplifier()) * 1 : (this.isPotionActive(Potion.digSlowdown) ? 6 + (1 + this.getActivePotionEffect(Potion.digSlowdown).getAmplifier()) * 2 : 6); + } + + public void swingItem() { + if(!this.isSwingInProgress || this.swingProgressInt >= this.getArmSwingAnimationEnd() / 2 || this.swingProgressInt < 0) { + this.swingProgressInt = -1; + this.isSwingInProgress = true; + if(this.worldObj instanceof WorldServer) { + ((WorldServer)this.worldObj).getEntityTracker().sendPacketToAllPlayersTrackingEntity(this, new Packet18Animation(this, 1)); + } + } + + } + + public boolean canBeSteered() { + return false; + } + + public final int getArrowCountInEntity() { + return this.dataWatcher.getWatchableObjectByte(10); + } + + public final void setArrowCountInEntity(int var1) { + this.dataWatcher.updateObject(10, Byte.valueOf((byte)var1)); + } + + public EntityLiving func_94060_bK() { + return (EntityLiving)(this.field_94063_bt.func_94550_c() != null ? this.field_94063_bt.func_94550_c() : (this.attackingPlayer != null ? this.attackingPlayer : (this.entityLivingToAttack != null ? this.entityLivingToAttack : null))); + } + + public String getEntityName() { + return this.func_94056_bM() ? this.func_94057_bL() : super.getEntityName(); + } + + public void func_94058_c(String var1) { + this.dataWatcher.updateObject(5, var1); + } + + public String func_94057_bL() { + return this.dataWatcher.getWatchableObjectString(5); + } + + public boolean func_94056_bM() { + return this.dataWatcher.getWatchableObjectString(5).length() > 0; + } + + public void func_94061_f(boolean var1) { + this.dataWatcher.updateObject(6, Byte.valueOf((byte)(var1 ? 1 : 0))); + } + + public boolean func_94062_bN() { + return this.dataWatcher.getWatchableObjectByte(6) == 1; + } + + public boolean func_94059_bO() { + return this.func_94062_bN(); + } + + public void func_96120_a(int var1, float var2) { + this.equipmentDropChances[var1] = var2; + } + + public boolean canPickUpLoot() { + return this.canPickUpLoot; + } + + public void setCanPickUpLoot(boolean var1) { + this.canPickUpLoot = var1; + } + + public boolean func_104002_bU() { + return this.persistenceRequired; + } +} diff --git a/src/net/minecraft/src/EntityLookHelper.java b/src/net/minecraft/src/EntityLookHelper.java new file mode 100644 index 0000000..48e03cf --- /dev/null +++ b/src/net/minecraft/src/EntityLookHelper.java @@ -0,0 +1,80 @@ +package net.minecraft.src; + +public class EntityLookHelper { + private EntityLiving entity; + private float deltaLookYaw; + private float deltaLookPitch; + private boolean isLooking = false; + private double posX; + private double posY; + private double posZ; + + public EntityLookHelper(EntityLiving var1) { + this.entity = var1; + } + + public void setLookPositionWithEntity(Entity var1, float var2, float var3) { + this.posX = var1.posX; + if(var1 instanceof EntityLiving) { + this.posY = var1.posY + (double)var1.getEyeHeight(); + } else { + this.posY = (var1.boundingBox.minY + var1.boundingBox.maxY) / 2.0D; + } + + this.posZ = var1.posZ; + this.deltaLookYaw = var2; + this.deltaLookPitch = var3; + this.isLooking = true; + } + + public void setLookPosition(double var1, double var3, double var5, float var7, float var8) { + this.posX = var1; + this.posY = var3; + this.posZ = var5; + this.deltaLookYaw = var7; + this.deltaLookPitch = var8; + this.isLooking = true; + } + + public void onUpdateLook() { + this.entity.rotationPitch = 0.0F; + if(this.isLooking) { + this.isLooking = false; + double var1 = this.posX - this.entity.posX; + double var3 = this.posY - (this.entity.posY + (double)this.entity.getEyeHeight()); + double var5 = this.posZ - this.entity.posZ; + double var7 = (double)MathHelper.sqrt_double(var1 * var1 + var5 * var5); + float var9 = (float)(Math.atan2(var5, var1) * 180.0D / (double)((float)Math.PI)) - 90.0F; + float var10 = (float)(-(Math.atan2(var3, var7) * 180.0D / (double)((float)Math.PI))); + this.entity.rotationPitch = this.updateRotation(this.entity.rotationPitch, var10, this.deltaLookPitch); + this.entity.rotationYawHead = this.updateRotation(this.entity.rotationYawHead, var9, this.deltaLookYaw); + } else { + this.entity.rotationYawHead = this.updateRotation(this.entity.rotationYawHead, this.entity.renderYawOffset, 10.0F); + } + + float var11 = MathHelper.wrapAngleTo180_float(this.entity.rotationYawHead - this.entity.renderYawOffset); + if(!this.entity.getNavigator().noPath()) { + if(var11 < -75.0F) { + this.entity.rotationYawHead = this.entity.renderYawOffset - 75.0F; + } + + if(var11 > 75.0F) { + this.entity.rotationYawHead = this.entity.renderYawOffset + 75.0F; + } + } + + } + + private float updateRotation(float var1, float var2, float var3) { + float var4 = MathHelper.wrapAngleTo180_float(var2 - var1); + if(var4 > var3) { + var4 = var3; + } + + if(var4 < -var3) { + var4 = -var3; + } + + return var1 + var4; + } +} diff --git a/src/net/minecraft/src/EntityMagmaCube.java b/src/net/minecraft/src/EntityMagmaCube.java new file mode 100644 index 0000000..1695c72 --- /dev/null +++ b/src/net/minecraft/src/EntityMagmaCube.java @@ -0,0 +1,101 @@ +package net.minecraft.src; + +public class EntityMagmaCube extends EntitySlime { + public EntityMagmaCube(World var1) { + super(var1); + this.texture = "/mob/lava.png"; + this.isImmuneToFire = true; + this.landMovementFactor = 0.2F; + } + + public boolean getCanSpawnHere() { + return this.worldObj.difficultySetting > 0 && this.worldObj.checkNoEntityCollision(this.boundingBox) && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).isEmpty() && !this.worldObj.isAnyLiquid(this.boundingBox); + } + + public int getTotalArmorValue() { + return this.getSlimeSize() * 3; + } + + public int getBrightnessForRender(float var1) { + return 15728880; + } + + public float getBrightness(float var1) { + return 1.0F; + } + + protected String getSlimeParticle() { + return "flame"; + } + + protected EntitySlime createInstance() { + return new EntityMagmaCube(this.worldObj); + } + + protected int getDropItemId() { + return Item.magmaCream.itemID; + } + + protected void dropFewItems(boolean var1, int var2) { + int var3 = this.getDropItemId(); + if(var3 > 0 && this.getSlimeSize() > 1) { + int var4 = this.rand.nextInt(4) - 2; + if(var2 > 0) { + var4 += this.rand.nextInt(var2 + 1); + } + + for(int var5 = 0; var5 < var4; ++var5) { + this.dropItem(var3, 1); + } + } + + } + + public boolean isBurning() { + return false; + } + + protected int getJumpDelay() { + return super.getJumpDelay() * 4; + } + + protected void func_70808_l() { + this.field_70813_a *= 0.9F; + } + + protected void jump() { + this.motionY = (double)(0.42F + (float)this.getSlimeSize() * 0.1F); + this.isAirBorne = true; + } + + protected void fall(float var1) { + } + + protected boolean canDamagePlayer() { + return true; + } + + protected int getAttackStrength() { + return super.getAttackStrength() + 2; + } + + protected String getHurtSound() { + return "mob.slime." + (this.getSlimeSize() > 1 ? "big" : "small"); + } + + protected String getDeathSound() { + return "mob.slime." + (this.getSlimeSize() > 1 ? "big" : "small"); + } + + protected String getJumpSound() { + return this.getSlimeSize() > 1 ? "mob.magmacube.big" : "mob.magmacube.small"; + } + + public boolean handleLavaMovement() { + return false; + } + + protected boolean makesSoundOnLand() { + return true; + } +} diff --git a/src/net/minecraft/src/EntityMinecart.java b/src/net/minecraft/src/EntityMinecart.java new file mode 100644 index 0000000..d124c2d --- /dev/null +++ b/src/net/minecraft/src/EntityMinecart.java @@ -0,0 +1,818 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public abstract class EntityMinecart extends Entity { + private boolean isInReverse; + private final IUpdatePlayerListBox field_82344_g; + private String entityName; + 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}}}; + private int turnProgress; + private double minecartX; + private double minecartY; + private double minecartZ; + private double minecartYaw; + private double minecartPitch; + private double velocityX; + private double velocityY; + private double velocityZ; + + public EntityMinecart(World var1) { + super(var1); + this.isInReverse = false; + this.preventEntitySpawning = true; + this.setSize(0.98F, 0.7F); + this.yOffset = this.height / 2.0F; + this.field_82344_g = var1 != null ? var1.func_82735_a(this) : null; + } + + public static EntityMinecart createMinecart(World var0, double var1, double var3, double var5, int var7) { + switch(var7) { + case 1: + return new EntityMinecartChest(var0, var1, var3, var5); + case 2: + return new EntityMinecartFurnace(var0, var1, var3, var5); + case 3: + return new EntityMinecartTNT(var0, var1, var3, var5); + case 4: + return new EntityMinecartMobSpawner(var0, var1, var3, var5); + case 5: + return new EntityMinecartHopper(var0, var1, var3, var5); + default: + return new EntityMinecartEmpty(var0, var1, var3, var5); + } + } + + protected boolean canTriggerWalking() { + return false; + } + + protected void entityInit() { + this.dataWatcher.addObject(17, new Integer(0)); + this.dataWatcher.addObject(18, new Integer(1)); + this.dataWatcher.addObject(19, new Integer(0)); + this.dataWatcher.addObject(20, new Integer(0)); + this.dataWatcher.addObject(21, new Integer(6)); + this.dataWatcher.addObject(22, Byte.valueOf((byte)0)); + } + + public AxisAlignedBB getCollisionBox(Entity var1) { + return var1.canBePushed() ? var1.boundingBox : null; + } + + public AxisAlignedBB getBoundingBox() { + return null; + } + + public boolean canBePushed() { + return true; + } + + public EntityMinecart(World var1, double var2, double var4, double var6) { + this(var1); + this.setPosition(var2, var4 + (double)this.yOffset, var6); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.prevPosX = var2; + this.prevPosY = var4; + this.prevPosZ = var6; + } + + public double getMountedYOffset() { + return (double)this.height * 0.0D - (double)0.3F; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(!this.worldObj.isRemote && !this.isDead) { + if(this.isEntityInvulnerable()) { + return false; + } else { + this.setRollingDirection(-this.getRollingDirection()); + this.setRollingAmplitude(10); + this.setBeenAttacked(); + this.setDamage(this.getDamage() + var2 * 10); + boolean var3 = var1.getEntity() instanceof EntityPlayer && ((EntityPlayer)var1.getEntity()).capabilities.isCreativeMode; + if(var3 || this.getDamage() > 40) { + if(this.riddenByEntity != null) { + this.riddenByEntity.mountEntity(this); + } + + if(var3 && !this.isInvNameLocalized()) { + this.setDead(); + } else { + this.killMinecart(var1); + } + } + + return true; + } + } else { + return true; + } + } + + public void killMinecart(DamageSource var1) { + this.setDead(); + ItemStack var2 = new ItemStack(Item.minecartEmpty, 1); + if(this.entityName != null) { + var2.setItemName(this.entityName); + } + + this.entityDropItem(var2, 0.0F); + } + + public void performHurtAnimation() { + this.setRollingDirection(-this.getRollingDirection()); + this.setRollingAmplitude(10); + this.setDamage(this.getDamage() + this.getDamage() * 10); + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public void setDead() { + super.setDead(); + if(this.field_82344_g != null) { + this.field_82344_g.update(); + } + + } + + public void onUpdate() { + if(this.field_82344_g != null) { + this.field_82344_g.update(); + } + + if(this.getRollingAmplitude() > 0) { + this.setRollingAmplitude(this.getRollingAmplitude() - 1); + } + + if(this.getDamage() > 0) { + this.setDamage(this.getDamage() - 1); + } + + if(this.posY < -64.0D) { + this.kill(); + } + + int var2; + if(!this.worldObj.isRemote && this.worldObj instanceof WorldServer) { + this.worldObj.theProfiler.startSection("portal"); + MinecraftServer var1 = ((WorldServer)this.worldObj).getMinecraftServer(); + var2 = this.getMaxInPortalTime(); + if(this.inPortal) { + if(var1.getAllowNether()) { + if(this.ridingEntity == null && this.field_82153_h++ >= var2) { + this.field_82153_h = var2; + this.timeUntilPortal = this.getPortalCooldown(); + byte var3; + if(this.worldObj.provider.dimensionId == -1) { + var3 = 0; + } else { + var3 = -1; + } + + this.travelToDimension(var3); + } + + this.inPortal = false; + } + } else { + if(this.field_82153_h > 0) { + this.field_82153_h -= 4; + } + + if(this.field_82153_h < 0) { + this.field_82153_h = 0; + } + } + + if(this.timeUntilPortal > 0) { + --this.timeUntilPortal; + } + + this.worldObj.theProfiler.endSection(); + } + + if(this.worldObj.isRemote) { + if(this.turnProgress > 0) { + double var19 = this.posX + (this.minecartX - this.posX) / (double)this.turnProgress; + double var21 = this.posY + (this.minecartY - this.posY) / (double)this.turnProgress; + double var5 = this.posZ + (this.minecartZ - this.posZ) / (double)this.turnProgress; + double var7 = MathHelper.wrapAngleTo180_double(this.minecartYaw - (double)this.rotationYaw); + this.rotationYaw = (float)((double)this.rotationYaw + var7 / (double)this.turnProgress); + this.rotationPitch = (float)((double)this.rotationPitch + (this.minecartPitch - (double)this.rotationPitch) / (double)this.turnProgress); + --this.turnProgress; + this.setPosition(var19, var21, var5); + 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; + this.motionY -= (double)0.04F; + int var18 = MathHelper.floor_double(this.posX); + var2 = MathHelper.floor_double(this.posY); + int var20 = MathHelper.floor_double(this.posZ); + if(BlockRailBase.isRailBlockAt(this.worldObj, var18, var2 - 1, var20)) { + --var2; + } + + double var4 = 0.4D; + double var6 = 1.0D / 128.0D; + int var8 = this.worldObj.getBlockId(var18, var2, var20); + if(BlockRailBase.isRailBlock(var8)) { + int var9 = this.worldObj.getBlockMetadata(var18, var2, var20); + this.updateOnTrack(var18, var2, var20, var4, var6, var8, var9); + if(var8 == Block.railActivator.blockID) { + this.onActivatorRailPass(var18, var2, var20, (var9 & 8) != 0); + } + } else { + this.func_94088_b(var4); + } + + this.doBlockCollisions(); + this.rotationPitch = 0.0F; + double var22 = this.prevPosX - this.posX; + double var11 = this.prevPosZ - this.posZ; + if(var22 * var22 + var11 * var11 > 0.001D) { + this.rotationYaw = (float)(Math.atan2(var11, var22) * 180.0D / Math.PI); + if(this.isInReverse) { + this.rotationYaw += 180.0F; + } + } + + double var13 = (double)MathHelper.wrapAngleTo180_float(this.rotationYaw - this.prevRotationYaw); + if(var13 < -170.0D || var13 >= 170.0D) { + this.rotationYaw += 180.0F; + this.isInReverse = !this.isInReverse; + } + + this.setRotation(this.rotationYaw, this.rotationPitch); + List var15 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand((double)0.2F, 0.0D, (double)0.2F)); + if(var15 != null && !var15.isEmpty()) { + for(int var16 = 0; var16 < var15.size(); ++var16) { + Entity var17 = (Entity)var15.get(var16); + if(var17 != this.riddenByEntity && var17.canBePushed() && var17 instanceof EntityMinecart) { + var17.applyEntityCollision(this); + } + } + } + + if(this.riddenByEntity != null && this.riddenByEntity.isDead) { + if(this.riddenByEntity.ridingEntity == this) { + this.riddenByEntity.ridingEntity = null; + } + + this.riddenByEntity = null; + } + + } + } + + public void onActivatorRailPass(int var1, int var2, int var3, boolean var4) { + } + + protected void func_94088_b(double var1) { + if(this.motionX < -var1) { + this.motionX = -var1; + } + + if(this.motionX > var1) { + this.motionX = var1; + } + + if(this.motionZ < -var1) { + this.motionZ = -var1; + } + + if(this.motionZ > var1) { + this.motionZ = var1; + } + + if(this.onGround) { + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + if(!this.onGround) { + this.motionX *= (double)0.95F; + this.motionY *= (double)0.95F; + this.motionZ *= (double)0.95F; + } + + } + + protected void updateOnTrack(int var1, int var2, int var3, double var4, double var6, int var8, int var9) { + this.fallDistance = 0.0F; + Vec3 var10 = this.func_70489_a(this.posX, this.posY, this.posZ); + this.posY = (double)var2; + boolean var11 = false; + boolean var12 = false; + if(var8 == Block.railPowered.blockID) { + var11 = (var9 & 8) != 0; + var12 = !var11; + } + + if(((BlockRailBase)Block.blocksList[var8]).isPowered()) { + var9 &= 7; + } + + if(var9 >= 2 && var9 <= 5) { + this.posY = (double)(var2 + 1); + } + + if(var9 == 2) { + this.motionX -= var6; + } + + if(var9 == 3) { + this.motionX += var6; + } + + if(var9 == 4) { + this.motionZ += var6; + } + + if(var9 == 5) { + this.motionZ -= var6; + } + + int[][] var13 = matrix[var9]; + double var14 = (double)(var13[1][0] - var13[0][0]); + double var16 = (double)(var13[1][2] - var13[0][2]); + double var18 = Math.sqrt(var14 * var14 + var16 * var16); + double var20 = this.motionX * var14 + this.motionZ * var16; + if(var20 < 0.0D) { + var14 = -var14; + var16 = -var16; + } + + double var22 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + if(var22 > 2.0D) { + var22 = 2.0D; + } + + this.motionX = var22 * var14 / var18; + this.motionZ = var22 * var16 / var18; + double var24; + double var26; + if(this.riddenByEntity != null) { + var24 = this.riddenByEntity.motionX * this.riddenByEntity.motionX + this.riddenByEntity.motionZ * this.riddenByEntity.motionZ; + var26 = this.motionX * this.motionX + this.motionZ * this.motionZ; + if(var24 > 1.0E-4D && var26 < 0.01D) { + this.motionX += this.riddenByEntity.motionX * 0.1D; + this.motionZ += this.riddenByEntity.motionZ * 0.1D; + var12 = false; + } + } + + if(var12) { + var24 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + if(var24 < 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; + } + } + + var24 = 0.0D; + var26 = (double)var1 + 0.5D + (double)var13[0][0] * 0.5D; + double var28 = (double)var3 + 0.5D + (double)var13[0][2] * 0.5D; + double var30 = (double)var1 + 0.5D + (double)var13[1][0] * 0.5D; + double var32 = (double)var3 + 0.5D + (double)var13[1][2] * 0.5D; + var14 = var30 - var26; + var16 = var32 - var28; + double var34; + double var36; + if(var14 == 0.0D) { + this.posX = (double)var1 + 0.5D; + var24 = this.posZ - (double)var3; + } else if(var16 == 0.0D) { + this.posZ = (double)var3 + 0.5D; + var24 = this.posX - (double)var1; + } else { + var34 = this.posX - var26; + var36 = this.posZ - var28; + var24 = (var34 * var14 + var36 * var16) * 2.0D; + } + + this.posX = var26 + var14 * var24; + this.posZ = var28 + var16 * var24; + this.setPosition(this.posX, this.posY + (double)this.yOffset, this.posZ); + var34 = this.motionX; + var36 = this.motionZ; + if(this.riddenByEntity != null) { + var34 *= 0.75D; + var36 *= 0.75D; + } + + if(var34 < -var4) { + var34 = -var4; + } + + if(var34 > var4) { + var34 = var4; + } + + if(var36 < -var4) { + var36 = -var4; + } + + if(var36 > var4) { + var36 = var4; + } + + this.moveEntity(var34, 0.0D, var36); + if(var13[0][1] != 0 && MathHelper.floor_double(this.posX) - var1 == var13[0][0] && MathHelper.floor_double(this.posZ) - var3 == var13[0][2]) { + this.setPosition(this.posX, this.posY + (double)var13[0][1], this.posZ); + } else if(var13[1][1] != 0 && MathHelper.floor_double(this.posX) - var1 == var13[1][0] && MathHelper.floor_double(this.posZ) - var3 == var13[1][2]) { + this.setPosition(this.posX, this.posY + (double)var13[1][1], this.posZ); + } + + this.applyDrag(); + Vec3 var38 = this.func_70489_a(this.posX, this.posY, this.posZ); + if(var38 != null && var10 != null) { + double var39 = (var10.yCoord - var38.yCoord) * 0.05D; + var22 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + if(var22 > 0.0D) { + this.motionX = this.motionX / var22 * (var22 + var39); + this.motionZ = this.motionZ / var22 * (var22 + var39); + } + + this.setPosition(this.posX, var38.yCoord, this.posZ); + } + + int var45 = MathHelper.floor_double(this.posX); + int var40 = MathHelper.floor_double(this.posZ); + if(var45 != var1 || var40 != var3) { + var22 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.motionX = var22 * (double)(var45 - var1); + this.motionZ = var22 * (double)(var40 - var3); + } + + if(var11) { + double var41 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + if(var41 > 0.01D) { + double var43 = 0.06D; + this.motionX += this.motionX / var41 * var43; + this.motionZ += this.motionZ / var41 * var43; + } else if(var9 == 1) { + if(this.worldObj.isBlockNormalCube(var1 - 1, var2, var3)) { + this.motionX = 0.02D; + } else if(this.worldObj.isBlockNormalCube(var1 + 1, var2, var3)) { + this.motionX = -0.02D; + } + } else if(var9 == 0) { + if(this.worldObj.isBlockNormalCube(var1, var2, var3 - 1)) { + this.motionZ = 0.02D; + } else if(this.worldObj.isBlockNormalCube(var1, var2, var3 + 1)) { + this.motionZ = -0.02D; + } + } + } + + } + + protected void applyDrag() { + if(this.riddenByEntity != null) { + this.motionX *= (double)0.997F; + this.motionY *= 0.0D; + this.motionZ *= (double)0.997F; + } else { + this.motionX *= (double)0.96F; + this.motionY *= 0.0D; + this.motionZ *= (double)0.96F; + } + + } + + public Vec3 func_70495_a(double var1, double var3, double var5, double var7) { + int var9 = MathHelper.floor_double(var1); + int var10 = MathHelper.floor_double(var3); + int var11 = MathHelper.floor_double(var5); + if(BlockRailBase.isRailBlockAt(this.worldObj, var9, var10 - 1, var11)) { + --var10; + } + + int var12 = this.worldObj.getBlockId(var9, var10, var11); + if(!BlockRailBase.isRailBlock(var12)) { + return null; + } else { + int var13 = this.worldObj.getBlockMetadata(var9, var10, var11); + if(((BlockRailBase)Block.blocksList[var12]).isPowered()) { + var13 &= 7; + } + + var3 = (double)var10; + if(var13 >= 2 && var13 <= 5) { + var3 = (double)(var10 + 1); + } + + int[][] var14 = matrix[var13]; + double var15 = (double)(var14[1][0] - var14[0][0]); + double var17 = (double)(var14[1][2] - var14[0][2]); + double var19 = Math.sqrt(var15 * var15 + var17 * var17); + var15 /= var19; + var17 /= var19; + var1 += var15 * var7; + var5 += var17 * var7; + if(var14[0][1] != 0 && MathHelper.floor_double(var1) - var9 == var14[0][0] && MathHelper.floor_double(var5) - var11 == var14[0][2]) { + var3 += (double)var14[0][1]; + } else if(var14[1][1] != 0 && MathHelper.floor_double(var1) - var9 == var14[1][0] && MathHelper.floor_double(var5) - var11 == var14[1][2]) { + var3 += (double)var14[1][1]; + } + + return this.func_70489_a(var1, var3, var5); + } + } + + public Vec3 func_70489_a(double var1, double var3, double var5) { + int var7 = MathHelper.floor_double(var1); + int var8 = MathHelper.floor_double(var3); + int var9 = MathHelper.floor_double(var5); + if(BlockRailBase.isRailBlockAt(this.worldObj, var7, var8 - 1, var9)) { + --var8; + } + + int var10 = this.worldObj.getBlockId(var7, var8, var9); + if(BlockRailBase.isRailBlock(var10)) { + int var11 = this.worldObj.getBlockMetadata(var7, var8, var9); + var3 = (double)var8; + if(((BlockRailBase)Block.blocksList[var10]).isPowered()) { + var11 &= 7; + } + + if(var11 >= 2 && var11 <= 5) { + var3 = (double)(var8 + 1); + } + + int[][] var12 = matrix[var11]; + double var13 = 0.0D; + double var15 = (double)var7 + 0.5D + (double)var12[0][0] * 0.5D; + double var17 = (double)var8 + 0.5D + (double)var12[0][1] * 0.5D; + double var19 = (double)var9 + 0.5D + (double)var12[0][2] * 0.5D; + double var21 = (double)var7 + 0.5D + (double)var12[1][0] * 0.5D; + double var23 = (double)var8 + 0.5D + (double)var12[1][1] * 0.5D; + double var25 = (double)var9 + 0.5D + (double)var12[1][2] * 0.5D; + double var27 = var21 - var15; + double var29 = (var23 - var17) * 2.0D; + double var31 = var25 - var19; + if(var27 == 0.0D) { + var1 = (double)var7 + 0.5D; + var13 = var5 - (double)var9; + } else if(var31 == 0.0D) { + var5 = (double)var9 + 0.5D; + var13 = var1 - (double)var7; + } else { + double var33 = var1 - var15; + double var35 = var5 - var19; + var13 = (var33 * var27 + var35 * var31) * 2.0D; + } + + var1 = var15 + var27 * var13; + var3 = var17 + var29 * var13; + var5 = var19 + var31 * var13; + if(var29 < 0.0D) { + ++var3; + } + + if(var29 > 0.0D) { + var3 += 0.5D; + } + + return this.worldObj.getWorldVec3Pool().getVecFromPool(var1, var3, var5); + } else { + return null; + } + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + if(var1.getBoolean("CustomDisplayTile")) { + this.setDisplayTile(var1.getInteger("DisplayTile")); + this.setDisplayTileData(var1.getInteger("DisplayData")); + this.setDisplayTileOffset(var1.getInteger("DisplayOffset")); + } + + if(var1.hasKey("CustomName") && var1.getString("CustomName").length() > 0) { + this.entityName = var1.getString("CustomName"); + } + + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + if(this.hasDisplayTile()) { + var1.setBoolean("CustomDisplayTile", true); + var1.setInteger("DisplayTile", this.getDisplayTile() == null ? 0 : this.getDisplayTile().blockID); + var1.setInteger("DisplayData", this.getDisplayTileData()); + var1.setInteger("DisplayOffset", this.getDisplayTileOffset()); + } + + if(this.entityName != null && this.entityName.length() > 0) { + var1.setString("CustomName", this.entityName); + } + + } + + public float getShadowSize() { + return 0.0F; + } + + public void applyEntityCollision(Entity var1) { + if(!this.worldObj.isRemote) { + if(var1 != this.riddenByEntity) { + if(var1 instanceof EntityLiving && !(var1 instanceof EntityPlayer) && !(var1 instanceof EntityIronGolem) && this.getMinecartType() == 0 && this.motionX * this.motionX + this.motionZ * this.motionZ > 0.01D && this.riddenByEntity == null && var1.ridingEntity == null) { + var1.mountEntity(this); + } + + double var2 = var1.posX - this.posX; + double var4 = var1.posZ - this.posZ; + double var6 = var2 * var2 + var4 * var4; + if(var6 >= (double)1.0E-4F) { + var6 = (double)MathHelper.sqrt_double(var6); + var2 /= var6; + var4 /= var6; + double var8 = 1.0D / var6; + if(var8 > 1.0D) { + var8 = 1.0D; + } + + var2 *= var8; + var4 *= var8; + var2 *= (double)0.1F; + var4 *= (double)0.1F; + var2 *= (double)(1.0F - this.entityCollisionReduction); + var4 *= (double)(1.0F - this.entityCollisionReduction); + var2 *= 0.5D; + var4 *= 0.5D; + if(var1 instanceof EntityMinecart) { + double var10 = var1.posX - this.posX; + double var12 = var1.posZ - this.posZ; + Vec3 var14 = this.worldObj.getWorldVec3Pool().getVecFromPool(var10, 0.0D, var12).normalize(); + Vec3 var15 = this.worldObj.getWorldVec3Pool().getVecFromPool((double)MathHelper.cos(this.rotationYaw * (float)Math.PI / 180.0F), 0.0D, (double)MathHelper.sin(this.rotationYaw * (float)Math.PI / 180.0F)).normalize(); + double var16 = Math.abs(var14.dotProduct(var15)); + if(var16 < (double)0.8F) { + return; + } + + double var18 = var1.motionX + this.motionX; + double var20 = var1.motionZ + this.motionZ; + if(((EntityMinecart)var1).getMinecartType() == 2 && this.getMinecartType() != 2) { + this.motionX *= (double)0.2F; + this.motionZ *= (double)0.2F; + this.addVelocity(var1.motionX - var2, 0.0D, var1.motionZ - var4); + var1.motionX *= (double)0.95F; + var1.motionZ *= (double)0.95F; + } else if(((EntityMinecart)var1).getMinecartType() != 2 && this.getMinecartType() == 2) { + var1.motionX *= (double)0.2F; + var1.motionZ *= (double)0.2F; + var1.addVelocity(this.motionX + var2, 0.0D, this.motionZ + var4); + this.motionX *= (double)0.95F; + this.motionZ *= (double)0.95F; + } else { + var18 /= 2.0D; + var20 /= 2.0D; + this.motionX *= (double)0.2F; + this.motionZ *= (double)0.2F; + this.addVelocity(var18 - var2, 0.0D, var20 - var4); + var1.motionX *= (double)0.2F; + var1.motionZ *= (double)0.2F; + var1.addVelocity(var18 + var2, 0.0D, var20 + var4); + } + } else { + this.addVelocity(-var2, 0.0D, -var4); + var1.addVelocity(var2 / 4.0D, 0.0D, var4 / 4.0D); + } + } + + } + } + } + + public void setPositionAndRotation2(double var1, double var3, double var5, float var7, float var8, int var9) { + this.minecartX = var1; + this.minecartY = var3; + this.minecartZ = var5; + this.minecartYaw = (double)var7; + this.minecartPitch = (double)var8; + this.turnProgress = var9 + 2; + this.motionX = this.velocityX; + this.motionY = this.velocityY; + this.motionZ = this.velocityZ; + } + + public void setVelocity(double var1, double var3, double var5) { + this.velocityX = this.motionX = var1; + this.velocityY = this.motionY = var3; + this.velocityZ = this.motionZ = var5; + } + + public void setDamage(int var1) { + this.dataWatcher.updateObject(19, Integer.valueOf(var1)); + } + + public int getDamage() { + return this.dataWatcher.getWatchableObjectInt(19); + } + + public void setRollingAmplitude(int var1) { + this.dataWatcher.updateObject(17, Integer.valueOf(var1)); + } + + public int getRollingAmplitude() { + return this.dataWatcher.getWatchableObjectInt(17); + } + + public void setRollingDirection(int var1) { + this.dataWatcher.updateObject(18, Integer.valueOf(var1)); + } + + public int getRollingDirection() { + return this.dataWatcher.getWatchableObjectInt(18); + } + + public abstract int getMinecartType(); + + public Block getDisplayTile() { + if(!this.hasDisplayTile()) { + return this.getDefaultDisplayTile(); + } else { + int var1 = this.getDataWatcher().getWatchableObjectInt(20) & '\uffff'; + return var1 > 0 && var1 < Block.blocksList.length ? Block.blocksList[var1] : null; + } + } + + public Block getDefaultDisplayTile() { + return null; + } + + public int getDisplayTileData() { + return !this.hasDisplayTile() ? this.getDefaultDisplayTileData() : this.getDataWatcher().getWatchableObjectInt(20) >> 16; + } + + public int getDefaultDisplayTileData() { + return 0; + } + + public int getDisplayTileOffset() { + return !this.hasDisplayTile() ? this.getDefaultDisplayTileOffset() : this.getDataWatcher().getWatchableObjectInt(21); + } + + public int getDefaultDisplayTileOffset() { + return 6; + } + + public void setDisplayTile(int var1) { + this.getDataWatcher().updateObject(20, Integer.valueOf(var1 & '\uffff' | this.getDisplayTileData() << 16)); + this.setHasDisplayTile(true); + } + + public void setDisplayTileData(int var1) { + Block var2 = this.getDisplayTile(); + int var3 = var2 == null ? 0 : var2.blockID; + this.getDataWatcher().updateObject(20, Integer.valueOf(var3 & '\uffff' | var1 << 16)); + this.setHasDisplayTile(true); + } + + public void setDisplayTileOffset(int var1) { + this.getDataWatcher().updateObject(21, Integer.valueOf(var1)); + this.setHasDisplayTile(true); + } + + public boolean hasDisplayTile() { + return this.getDataWatcher().getWatchableObjectByte(22) == 1; + } + + public void setHasDisplayTile(boolean var1) { + this.getDataWatcher().updateObject(22, Byte.valueOf((byte)(var1 ? 1 : 0))); + } + + public void func_96094_a(String var1) { + this.entityName = var1; + } + + public String getEntityName() { + return this.entityName != null ? this.entityName : super.getEntityName(); + } + + public boolean isInvNameLocalized() { + return this.entityName != null; + } + + public String func_95999_t() { + return this.entityName; + } +} diff --git a/src/net/minecraft/src/EntityMinecartChest.java b/src/net/minecraft/src/EntityMinecartChest.java new file mode 100644 index 0000000..29c793d --- /dev/null +++ b/src/net/minecraft/src/EntityMinecartChest.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +public class EntityMinecartChest extends EntityMinecartContainer { + public EntityMinecartChest(World var1) { + super(var1); + } + + public EntityMinecartChest(World var1, double var2, double var4, double var6) { + super(var1, var2, var4, var6); + } + + public void killMinecart(DamageSource var1) { + super.killMinecart(var1); + this.dropItemWithOffset(Block.chest.blockID, 1, 0.0F); + } + + public int getSizeInventory() { + return 27; + } + + public int getMinecartType() { + return 1; + } + + public Block getDefaultDisplayTile() { + return Block.chest; + } + + public int getDefaultDisplayTileOffset() { + return 8; + } +} diff --git a/src/net/minecraft/src/EntityMinecartContainer.java b/src/net/minecraft/src/EntityMinecartContainer.java new file mode 100644 index 0000000..4521a4d --- /dev/null +++ b/src/net/minecraft/src/EntityMinecartContainer.java @@ -0,0 +1,196 @@ +package net.minecraft.src; + +public abstract class EntityMinecartContainer extends EntityMinecart implements IInventory { + private ItemStack[] minecartContainerItems = new ItemStack[36]; + private boolean dropContentsWhenDead = true; + + public EntityMinecartContainer(World var1) { + super(var1); + } + + public EntityMinecartContainer(World var1, double var2, double var4, double var6) { + super(var1, var2, var4, var6); + } + + public void killMinecart(DamageSource var1) { + super.killMinecart(var1); + + for(int var2 = 0; var2 < this.getSizeInventory(); ++var2) { + ItemStack var3 = this.getStackInSlot(var2); + if(var3 != null) { + float var4 = this.rand.nextFloat() * 0.8F + 0.1F; + float var5 = this.rand.nextFloat() * 0.8F + 0.1F; + float var6 = this.rand.nextFloat() * 0.8F + 0.1F; + + while(var3.stackSize > 0) { + int var7 = this.rand.nextInt(21) + 10; + if(var7 > var3.stackSize) { + var7 = var3.stackSize; + } + + var3.stackSize -= var7; + EntityItem var8 = new EntityItem(this.worldObj, this.posX + (double)var4, this.posY + (double)var5, this.posZ + (double)var6, new ItemStack(var3.itemID, var7, var3.getItemDamage())); + float var9 = 0.05F; + var8.motionX = (double)((float)this.rand.nextGaussian() * var9); + var8.motionY = (double)((float)this.rand.nextGaussian() * var9 + 0.2F); + var8.motionZ = (double)((float)this.rand.nextGaussian() * var9); + this.worldObj.spawnEntityInWorld(var8); + } + } + } + + } + + public ItemStack getStackInSlot(int var1) { + return this.minecartContainerItems[var1]; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.minecartContainerItems[var1] != null) { + ItemStack var3; + if(this.minecartContainerItems[var1].stackSize <= var2) { + var3 = this.minecartContainerItems[var1]; + this.minecartContainerItems[var1] = null; + return var3; + } else { + var3 = this.minecartContainerItems[var1].splitStack(var2); + if(this.minecartContainerItems[var1].stackSize == 0) { + this.minecartContainerItems[var1] = null; + } + + return var3; + } + } else { + return null; + } + } + + public ItemStack getStackInSlotOnClosing(int var1) { + if(this.minecartContainerItems[var1] != null) { + ItemStack var2 = this.minecartContainerItems[var1]; + this.minecartContainerItems[var1] = null; + return var2; + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.minecartContainerItems[var1] = var2; + if(var2 != null && var2.stackSize > this.getInventoryStackLimit()) { + var2.stackSize = this.getInventoryStackLimit(); + } + + } + + public void onInventoryChanged() { + } + + public boolean isUseableByPlayer(EntityPlayer var1) { + return this.isDead ? false : var1.getDistanceSqToEntity(this) <= 64.0D; + } + + public void openChest() { + } + + public void closeChest() { + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return true; + } + + public String getInvName() { + return this.isInvNameLocalized() ? this.func_95999_t() : "container.minecart"; + } + + public int getInventoryStackLimit() { + return 64; + } + + public void travelToDimension(int var1) { + this.dropContentsWhenDead = false; + super.travelToDimension(var1); + } + + public void setDead() { + if(this.dropContentsWhenDead) { + for(int var1 = 0; var1 < this.getSizeInventory(); ++var1) { + ItemStack var2 = this.getStackInSlot(var1); + if(var2 != null) { + float var3 = this.rand.nextFloat() * 0.8F + 0.1F; + float var4 = this.rand.nextFloat() * 0.8F + 0.1F; + float var5 = this.rand.nextFloat() * 0.8F + 0.1F; + + while(var2.stackSize > 0) { + int var6 = this.rand.nextInt(21) + 10; + if(var6 > var2.stackSize) { + var6 = var2.stackSize; + } + + var2.stackSize -= var6; + EntityItem var7 = new EntityItem(this.worldObj, this.posX + (double)var3, this.posY + (double)var4, this.posZ + (double)var5, new ItemStack(var2.itemID, var6, var2.getItemDamage())); + if(var2.hasTagCompound()) { + var7.getEntityItem().setTagCompound((NBTTagCompound)var2.getTagCompound().copy()); + } + + float var8 = 0.05F; + var7.motionX = (double)((float)this.rand.nextGaussian() * var8); + var7.motionY = (double)((float)this.rand.nextGaussian() * var8 + 0.2F); + var7.motionZ = (double)((float)this.rand.nextGaussian() * var8); + this.worldObj.spawnEntityInWorld(var7); + } + } + } + } + + super.setDead(); + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + NBTTagList var2 = new NBTTagList(); + + for(int var3 = 0; var3 < this.minecartContainerItems.length; ++var3) { + if(this.minecartContainerItems[var3] != null) { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.minecartContainerItems[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + + var1.setTag("Items", var2); + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + NBTTagList var2 = var1.getTagList("Items"); + this.minecartContainerItems = new ItemStack[this.getSizeInventory()]; + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + int var5 = var4.getByte("Slot") & 255; + if(var5 >= 0 && var5 < this.minecartContainerItems.length) { + this.minecartContainerItems[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + + } + + public boolean interact(EntityPlayer var1) { + if(!this.worldObj.isRemote) { + var1.displayGUIChest(this); + } + + return true; + } + + protected void applyDrag() { + int var1 = 15 - Container.calcRedstoneFromInventory(this); + float var2 = 0.98F + (float)var1 * 0.001F; + this.motionX *= (double)var2; + this.motionY *= 0.0D; + this.motionZ *= (double)var2; + } +} diff --git a/src/net/minecraft/src/EntityMinecartEmpty.java b/src/net/minecraft/src/EntityMinecartEmpty.java new file mode 100644 index 0000000..bfeaef4 --- /dev/null +++ b/src/net/minecraft/src/EntityMinecartEmpty.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +public class EntityMinecartEmpty extends EntityMinecart { + public EntityMinecartEmpty(World var1) { + super(var1); + } + + public EntityMinecartEmpty(World var1, double var2, double var4, double var6) { + super(var1, var2, var4, var6); + } + + public boolean interact(EntityPlayer var1) { + if(this.riddenByEntity != null && this.riddenByEntity instanceof EntityPlayer && this.riddenByEntity != var1) { + return true; + } else if(this.riddenByEntity != null && this.riddenByEntity != var1) { + return false; + } else { + if(!this.worldObj.isRemote) { + var1.mountEntity(this); + } + + return true; + } + } + + public int getMinecartType() { + return 0; + } +} diff --git a/src/net/minecraft/src/EntityMinecartFurnace.java b/src/net/minecraft/src/EntityMinecartFurnace.java new file mode 100644 index 0000000..fca7ee5 --- /dev/null +++ b/src/net/minecraft/src/EntityMinecartFurnace.java @@ -0,0 +1,138 @@ +package net.minecraft.src; + +public class EntityMinecartFurnace extends EntityMinecart { + private int fuel = 0; + public double pushX; + public double pushZ; + + public EntityMinecartFurnace(World var1) { + super(var1); + } + + public EntityMinecartFurnace(World var1, double var2, double var4, double var6) { + super(var1, var2, var4, var6); + } + + public int getMinecartType() { + return 2; + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, new Byte((byte)0)); + } + + public void onUpdate() { + super.onUpdate(); + if(this.fuel > 0) { + --this.fuel; + } + + if(this.fuel <= 0) { + this.pushX = this.pushZ = 0.0D; + } + + this.setMinecartPowered(this.fuel > 0); + if(this.isMinecartPowered() && this.rand.nextInt(4) == 0) { + this.worldObj.spawnParticle("largesmoke", this.posX, this.posY + 0.8D, this.posZ, 0.0D, 0.0D, 0.0D); + } + + } + + public void killMinecart(DamageSource var1) { + super.killMinecart(var1); + if(!var1.isExplosion()) { + this.entityDropItem(new ItemStack(Block.furnaceIdle, 1), 0.0F); + } + + } + + protected void updateOnTrack(int var1, int var2, int var3, double var4, double var6, int var8, int var9) { + super.updateOnTrack(var1, var2, var3, var4, var6, var8, var9); + double var10 = this.pushX * this.pushX + this.pushZ * this.pushZ; + if(var10 > 1.0E-4D && this.motionX * this.motionX + this.motionZ * this.motionZ > 0.001D) { + var10 = (double)MathHelper.sqrt_double(var10); + this.pushX /= var10; + this.pushZ /= var10; + if(this.pushX * this.motionX + this.pushZ * this.motionZ < 0.0D) { + this.pushX = 0.0D; + this.pushZ = 0.0D; + } else { + this.pushX = this.motionX; + this.pushZ = this.motionZ; + } + } + + } + + protected void applyDrag() { + double var1 = this.pushX * this.pushX + this.pushZ * this.pushZ; + if(var1 > 1.0E-4D) { + var1 = (double)MathHelper.sqrt_double(var1); + this.pushX /= var1; + this.pushZ /= var1; + double var3 = 0.05D; + this.motionX *= (double)0.8F; + this.motionY *= 0.0D; + this.motionZ *= (double)0.8F; + this.motionX += this.pushX * var3; + this.motionZ += this.pushZ * var3; + } else { + this.motionX *= (double)0.98F; + this.motionY *= 0.0D; + this.motionZ *= (double)0.98F; + } + + super.applyDrag(); + } + + public boolean interact(EntityPlayer var1) { + ItemStack var2 = var1.inventory.getCurrentItem(); + if(var2 != null && var2.itemID == Item.coal.itemID) { + if(--var2.stackSize == 0) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, (ItemStack)null); + } + + this.fuel += 3600; + } + + this.pushX = this.posX - var1.posX; + this.pushZ = this.posZ - var1.posZ; + return true; + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setDouble("PushX", this.pushX); + var1.setDouble("PushZ", this.pushZ); + var1.setShort("Fuel", (short)this.fuel); + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.pushX = var1.getDouble("PushX"); + this.pushZ = var1.getDouble("PushZ"); + this.fuel = var1.getShort("Fuel"); + } + + protected boolean isMinecartPowered() { + return (this.dataWatcher.getWatchableObjectByte(16) & 1) != 0; + } + + protected void setMinecartPowered(boolean var1) { + if(var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(this.dataWatcher.getWatchableObjectByte(16) | 1))); + } else { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(this.dataWatcher.getWatchableObjectByte(16) & -2))); + } + + } + + public Block getDefaultDisplayTile() { + return Block.furnaceBurning; + } + + public int getDefaultDisplayTileData() { + return 2; + } +} diff --git a/src/net/minecraft/src/EntityMinecartHopper.java b/src/net/minecraft/src/EntityMinecartHopper.java new file mode 100644 index 0000000..415cb16 --- /dev/null +++ b/src/net/minecraft/src/EntityMinecartHopper.java @@ -0,0 +1,123 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityMinecartHopper extends EntityMinecartContainer implements Hopper { + private boolean isBlocked = true; + private int transferTicker = -1; + + public EntityMinecartHopper(World var1) { + super(var1); + } + + public EntityMinecartHopper(World var1, double var2, double var4, double var6) { + super(var1, var2, var4, var6); + } + + public int getMinecartType() { + return 5; + } + + public Block getDefaultDisplayTile() { + return Block.hopperBlock; + } + + public int getDefaultDisplayTileOffset() { + return 1; + } + + public int getSizeInventory() { + return 5; + } + + public boolean interact(EntityPlayer var1) { + if(!this.worldObj.isRemote) { + var1.displayGUIHopperMinecart(this); + } + + return true; + } + + public void onActivatorRailPass(int var1, int var2, int var3, boolean var4) { + boolean var5 = !var4; + if(var5 != this.getBlocked()) { + this.setBlocked(var5); + } + + } + + public boolean getBlocked() { + return this.isBlocked; + } + + public void setBlocked(boolean var1) { + this.isBlocked = var1; + } + + public World getWorldObj() { + return this.worldObj; + } + + public double getXPos() { + return this.posX; + } + + public double getYPos() { + return this.posY; + } + + public double getZPos() { + return this.posZ; + } + + public void onUpdate() { + super.onUpdate(); + if(!this.worldObj.isRemote && this.isEntityAlive() && this.getBlocked()) { + --this.transferTicker; + if(!this.canTransfer()) { + this.setTransferTicker(0); + if(this.func_96112_aD()) { + this.setTransferTicker(4); + this.onInventoryChanged(); + } + } + } + + } + + public boolean func_96112_aD() { + if(TileEntityHopper.suckItemsIntoHopper(this)) { + return true; + } else { + List var1 = this.worldObj.selectEntitiesWithinAABB(EntityItem.class, this.boundingBox.expand(0.25D, 0.0D, 0.25D), IEntitySelector.selectAnything); + if(var1.size() > 0) { + TileEntityHopper.func_96114_a(this, (EntityItem)var1.get(0)); + } + + return false; + } + } + + public void killMinecart(DamageSource var1) { + super.killMinecart(var1); + this.dropItemWithOffset(Block.hopperBlock.blockID, 1, 0.0F); + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setInteger("TransferCooldown", this.transferTicker); + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.transferTicker = var1.getInteger("TransferCooldown"); + } + + public void setTransferTicker(int var1) { + this.transferTicker = var1; + } + + public boolean canTransfer() { + return this.transferTicker > 0; + } +} diff --git a/src/net/minecraft/src/EntityMinecartMobSpawner.java b/src/net/minecraft/src/EntityMinecartMobSpawner.java new file mode 100644 index 0000000..fcae75c --- /dev/null +++ b/src/net/minecraft/src/EntityMinecartMobSpawner.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +public class EntityMinecartMobSpawner extends EntityMinecart { + private final MobSpawnerBaseLogic mobSpawnerLogic = new EntityMinecartMobSpawnerLogic(this); + + public EntityMinecartMobSpawner(World var1) { + super(var1); + } + + public EntityMinecartMobSpawner(World var1, double var2, double var4, double var6) { + super(var1, var2, var4, var6); + } + + public int getMinecartType() { + return 4; + } + + public Block getDefaultDisplayTile() { + return Block.mobSpawner; + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.mobSpawnerLogic.readFromNBT(var1); + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + this.mobSpawnerLogic.writeToNBT(var1); + } + + public void handleHealthUpdate(byte var1) { + this.mobSpawnerLogic.setDelayToMin(var1); + } + + public void onUpdate() { + super.onUpdate(); + this.mobSpawnerLogic.updateSpawner(); + } + + public MobSpawnerBaseLogic func_98039_d() { + return this.mobSpawnerLogic; + } +} diff --git a/src/net/minecraft/src/EntityMinecartMobSpawnerLogic.java b/src/net/minecraft/src/EntityMinecartMobSpawnerLogic.java new file mode 100644 index 0000000..6f3f773 --- /dev/null +++ b/src/net/minecraft/src/EntityMinecartMobSpawnerLogic.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +class EntityMinecartMobSpawnerLogic extends MobSpawnerBaseLogic { + final EntityMinecartMobSpawner spawnerMinecart; + + EntityMinecartMobSpawnerLogic(EntityMinecartMobSpawner var1) { + this.spawnerMinecart = var1; + } + + public void func_98267_a(int var1) { + this.spawnerMinecart.worldObj.setEntityState(this.spawnerMinecart, (byte)var1); + } + + public World getSpawnerWorld() { + return this.spawnerMinecart.worldObj; + } + + public int getSpawnerX() { + return MathHelper.floor_double(this.spawnerMinecart.posX); + } + + public int getSpawnerY() { + return MathHelper.floor_double(this.spawnerMinecart.posY); + } + + public int getSpawnerZ() { + return MathHelper.floor_double(this.spawnerMinecart.posZ); + } +} diff --git a/src/net/minecraft/src/EntityMinecartTNT.java b/src/net/minecraft/src/EntityMinecartTNT.java new file mode 100644 index 0000000..2a70dac --- /dev/null +++ b/src/net/minecraft/src/EntityMinecartTNT.java @@ -0,0 +1,128 @@ +package net.minecraft.src; + +public class EntityMinecartTNT extends EntityMinecart { + private int minecartTNTFuse = -1; + + public EntityMinecartTNT(World var1) { + super(var1); + } + + public EntityMinecartTNT(World var1, double var2, double var4, double var6) { + super(var1, var2, var4, var6); + } + + public int getMinecartType() { + return 3; + } + + public Block getDefaultDisplayTile() { + return Block.tnt; + } + + public void onUpdate() { + super.onUpdate(); + if(this.minecartTNTFuse > 0) { + --this.minecartTNTFuse; + this.worldObj.spawnParticle("smoke", 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.isCollidedHorizontally) { + double var1 = this.motionX * this.motionX + this.motionZ * this.motionZ; + if(var1 >= (double)0.01F) { + this.explodeCart(var1); + } + } + + } + + public void killMinecart(DamageSource var1) { + super.killMinecart(var1); + double var2 = this.motionX * this.motionX + this.motionZ * this.motionZ; + if(!var1.isExplosion()) { + this.entityDropItem(new ItemStack(Block.tnt, 1), 0.0F); + } + + if(var1.isFireDamage() || var1.isExplosion() || var2 >= (double)0.01F) { + this.explodeCart(var2); + } + + } + + protected void explodeCart(double var1) { + if(!this.worldObj.isRemote) { + double var3 = Math.sqrt(var1); + if(var3 > 5.0D) { + var3 = 5.0D; + } + + this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, (float)(4.0D + this.rand.nextDouble() * 1.5D * var3), true); + this.setDead(); + } + + } + + protected void fall(float var1) { + if(var1 >= 3.0F) { + float var2 = var1 / 10.0F; + this.explodeCart((double)(var2 * var2)); + } + + super.fall(var1); + } + + public void onActivatorRailPass(int var1, int var2, int var3, boolean var4) { + if(var4 && this.minecartTNTFuse < 0) { + this.ignite(); + } + + } + + public void handleHealthUpdate(byte var1) { + if(var1 == 10) { + this.ignite(); + } else { + super.handleHealthUpdate(var1); + } + + } + + public void ignite() { + this.minecartTNTFuse = 80; + if(!this.worldObj.isRemote) { + this.worldObj.setEntityState(this, (byte)10); + this.worldObj.playSoundAtEntity(this, "random.fuse", 1.0F, 1.0F); + } + + } + + public int func_94104_d() { + return this.minecartTNTFuse; + } + + public boolean isIgnited() { + return this.minecartTNTFuse > -1; + } + + public float func_82146_a(Explosion var1, World var2, int var3, int var4, int var5, Block var6) { + return !this.isIgnited() || !BlockRailBase.isRailBlock(var6.blockID) && !BlockRailBase.isRailBlockAt(var2, var3, var4 + 1, var5) ? super.func_82146_a(var1, var2, var3, var4, var5, var6) : 0.0F; + } + + public boolean func_96091_a(Explosion var1, World var2, int var3, int var4, int var5, int var6, float var7) { + return !this.isIgnited() || !BlockRailBase.isRailBlock(var6) && !BlockRailBase.isRailBlockAt(var2, var3, var4 + 1, var5) ? super.func_96091_a(var1, var2, var3, var4, var5, var6, var7) : false; + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + if(var1.hasKey("TNTFuse")) { + this.minecartTNTFuse = var1.getInteger("TNTFuse"); + } + + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setInteger("TNTFuse", this.minecartTNTFuse); + } +} diff --git a/src/net/minecraft/src/EntityMob.java b/src/net/minecraft/src/EntityMob.java new file mode 100644 index 0000000..f9de2f7 --- /dev/null +++ b/src/net/minecraft/src/EntityMob.java @@ -0,0 +1,126 @@ +package net.minecraft.src; + +public abstract class EntityMob extends EntityCreature implements IMob { + public EntityMob(World var1) { + super(var1); + this.experienceValue = 5; + } + + public void onLivingUpdate() { + this.updateArmSwingProgress(); + float var1 = this.getBrightness(1.0F); + if(var1 > 0.5F) { + this.entityAge += 2; + } + + super.onLivingUpdate(); + } + + public void onUpdate() { + super.onUpdate(); + if(!this.worldObj.isRemote && this.worldObj.difficultySetting == 0) { + this.setDead(); + } + + } + + protected Entity findPlayerToAttack() { + EntityPlayer var1 = this.worldObj.getClosestVulnerablePlayerToEntity(this, 16.0D); + return var1 != null && this.canEntityBeSeen(var1) ? var1 : null; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else if(super.attackEntityFrom(var1, var2)) { + Entity var3 = var1.getEntity(); + if(this.riddenByEntity != var3 && this.ridingEntity != var3) { + if(var3 != this) { + this.entityToAttack = var3; + } + + return true; + } else { + return true; + } + } else { + return false; + } + } + + public boolean attackEntityAsMob(Entity var1) { + int var2 = this.getAttackStrength(var1); + if(this.isPotionActive(Potion.damageBoost)) { + var2 += 3 << this.getActivePotionEffect(Potion.damageBoost).getAmplifier(); + } + + if(this.isPotionActive(Potion.weakness)) { + var2 -= 2 << this.getActivePotionEffect(Potion.weakness).getAmplifier(); + } + + int var3 = 0; + if(var1 instanceof EntityLiving) { + var2 += EnchantmentHelper.getEnchantmentModifierLiving(this, (EntityLiving)var1); + var3 += EnchantmentHelper.getKnockbackModifier(this, (EntityLiving)var1); + } + + boolean var4 = var1.attackEntityFrom(DamageSource.causeMobDamage(this), var2); + if(var4) { + if(var3 > 0) { + var1.addVelocity((double)(-MathHelper.sin(this.rotationYaw * (float)Math.PI / 180.0F) * (float)var3 * 0.5F), 0.1D, (double)(MathHelper.cos(this.rotationYaw * (float)Math.PI / 180.0F) * (float)var3 * 0.5F)); + this.motionX *= 0.6D; + this.motionZ *= 0.6D; + } + + int var5 = EnchantmentHelper.getFireAspectModifier(this); + if(var5 > 0) { + var1.setFire(var5 * 4); + } + + if(var1 instanceof EntityLiving) { + EnchantmentThorns.func_92096_a(this, (EntityLiving)var1, this.rand); + } + } + + return var4; + } + + protected void attackEntity(Entity var1, float var2) { + if(this.attackTime <= 0 && var2 < 2.0F && var1.boundingBox.maxY > this.boundingBox.minY && var1.boundingBox.minY < this.boundingBox.maxY) { + this.attackTime = 20; + this.attackEntityAsMob(var1); + } + + } + + public float getBlockPathWeight(int var1, int var2, int var3) { + return 0.5F - this.worldObj.getLightBrightness(var1, var2, var3); + } + + protected boolean isValidLightLevel() { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.boundingBox.minY); + int var3 = MathHelper.floor_double(this.posZ); + if(this.worldObj.getSavedLightValue(EnumSkyBlock.Sky, var1, var2, var3) > this.rand.nextInt(32)) { + return false; + } else { + int var4 = this.worldObj.getBlockLightValue(var1, var2, var3); + if(this.worldObj.isThundering()) { + int var5 = this.worldObj.skylightSubtracted; + this.worldObj.skylightSubtracted = 10; + var4 = this.worldObj.getBlockLightValue(var1, var2, var3); + this.worldObj.skylightSubtracted = var5; + } + + return var4 <= this.rand.nextInt(8); + } + } + + public boolean getCanSpawnHere() { + return this.isValidLightLevel() && super.getCanSpawnHere(); + } + + public int getAttackStrength(Entity var1) { + return 2; + } +} diff --git a/src/net/minecraft/src/EntityMooshroom.java b/src/net/minecraft/src/EntityMooshroom.java new file mode 100644 index 0000000..e84c2b4 --- /dev/null +++ b/src/net/minecraft/src/EntityMooshroom.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +public class EntityMooshroom extends EntityCow { + public EntityMooshroom(World var1) { + super(var1); + this.texture = "/mob/redcow.png"; + this.setSize(0.9F, 1.3F); + } + + public boolean interact(EntityPlayer var1) { + ItemStack var2 = var1.inventory.getCurrentItem(); + if(var2 != null && var2.itemID == Item.bowlEmpty.itemID && this.getGrowingAge() >= 0) { + if(var2.stackSize == 1) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, new ItemStack(Item.bowlSoup)); + return true; + } + + if(var1.inventory.addItemStackToInventory(new ItemStack(Item.bowlSoup)) && !var1.capabilities.isCreativeMode) { + var1.inventory.decrStackSize(var1.inventory.currentItem, 1); + return true; + } + } + + if(var2 != null && var2.itemID == Item.shears.itemID && this.getGrowingAge() >= 0) { + this.setDead(); + this.worldObj.spawnParticle("largeexplode", this.posX, this.posY + (double)(this.height / 2.0F), this.posZ, 0.0D, 0.0D, 0.0D); + if(!this.worldObj.isRemote) { + EntityCow var3 = new EntityCow(this.worldObj); + var3.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + var3.setEntityHealth(this.getHealth()); + var3.renderYawOffset = this.renderYawOffset; + this.worldObj.spawnEntityInWorld(var3); + + for(int var4 = 0; var4 < 5; ++var4) { + this.worldObj.spawnEntityInWorld(new EntityItem(this.worldObj, this.posX, this.posY + (double)this.height, this.posZ, new ItemStack(Block.mushroomRed))); + } + } + + return true; + } else { + return super.interact(var1); + } + } + + public EntityMooshroom func_94900_c(EntityAgeable var1) { + return new EntityMooshroom(this.worldObj); + } + + public EntityCow spawnBabyAnimal(EntityAgeable var1) { + return this.func_94900_c(var1); + } + + public EntityAgeable createChild(EntityAgeable var1) { + return this.func_94900_c(var1); + } +} diff --git a/src/net/minecraft/src/EntityMoveHelper.java b/src/net/minecraft/src/EntityMoveHelper.java new file mode 100644 index 0000000..5f4c894 --- /dev/null +++ b/src/net/minecraft/src/EntityMoveHelper.java @@ -0,0 +1,67 @@ +package net.minecraft.src; + +public class EntityMoveHelper { + private EntityLiving entity; + private double posX; + private double posY; + private double posZ; + private float speed; + private boolean update = false; + + public EntityMoveHelper(EntityLiving var1) { + this.entity = var1; + this.posX = var1.posX; + this.posY = var1.posY; + this.posZ = var1.posZ; + } + + public boolean isUpdating() { + return this.update; + } + + public float getSpeed() { + return this.speed; + } + + public void setMoveTo(double var1, double var3, double var5, float var7) { + this.posX = var1; + this.posY = var3; + this.posZ = var5; + this.speed = var7; + this.update = true; + } + + public void onUpdateMoveHelper() { + this.entity.setMoveForward(0.0F); + if(this.update) { + this.update = false; + int var1 = MathHelper.floor_double(this.entity.boundingBox.minY + 0.5D); + double var2 = this.posX - this.entity.posX; + double var4 = this.posZ - this.entity.posZ; + double var6 = this.posY - (double)var1; + double var8 = var2 * var2 + var6 * var6 + var4 * var4; + if(var8 >= (double)2.5000003E-7F) { + float var10 = (float)(Math.atan2(var4, var2) * 180.0D / (double)((float)Math.PI)) - 90.0F; + this.entity.rotationYaw = this.limitAngle(this.entity.rotationYaw, var10, 30.0F); + this.entity.setAIMoveSpeed(this.speed * this.entity.getSpeedModifier()); + if(var6 > 0.0D && var2 * var2 + var4 * var4 < 1.0D) { + this.entity.getJumpHelper().setJumping(); + } + + } + } + } + + private float limitAngle(float var1, float var2, float var3) { + float var4 = MathHelper.wrapAngleTo180_float(var2 - var1); + if(var4 > var3) { + var4 = var3; + } + + if(var4 < -var3) { + var4 = -var3; + } + + return var1 + var4; + } +} diff --git a/src/net/minecraft/src/EntityNoteFX.java b/src/net/minecraft/src/EntityNoteFX.java new file mode 100644 index 0000000..f3393f0 --- /dev/null +++ b/src/net/minecraft/src/EntityNoteFX.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +public class EntityNoteFX extends EntityFX { + float noteParticleScale; + + public EntityNoteFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + this(var1, var2, var4, var6, var8, var10, var12, 2.0F); + } + + public EntityNoteFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12, float var14) { + super(var1, var2, var4, var6, 0.0D, 0.0D, 0.0D); + this.motionX *= (double)0.01F; + this.motionY *= (double)0.01F; + this.motionZ *= (double)0.01F; + this.motionY += 0.2D; + this.particleRed = MathHelper.sin(((float)var8 + 0.0F) * (float)Math.PI * 2.0F) * 0.65F + 0.35F; + this.particleGreen = MathHelper.sin(((float)var8 + 1.0F / 3.0F) * (float)Math.PI * 2.0F) * 0.65F + 0.35F; + this.particleBlue = MathHelper.sin(((float)var8 + 2.0F / 3.0F) * (float)Math.PI * 2.0F) * 0.65F + 0.35F; + this.particleScale *= 12.0F / 16.0F; + this.particleScale *= var14; + this.noteParticleScale = this.particleScale; + this.particleMaxAge = 6; + this.noClip = false; + this.setParticleTextureIndex(64); + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = ((float)this.particleAge + var2) / (float)this.particleMaxAge * 32.0F; + if(var8 < 0.0F) { + var8 = 0.0F; + } + + if(var8 > 1.0F) { + var8 = 1.0F; + } + + this.particleScale = this.noteParticleScale * var8; + super.renderParticle(var1, var2, var3, var4, var5, var6, var7); + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + if(this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + if(this.posY == this.prevPosY) { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= (double)0.66F; + this.motionY *= (double)0.66F; + this.motionZ *= (double)0.66F; + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + } +} diff --git a/src/net/minecraft/src/EntityOcelot.java b/src/net/minecraft/src/EntityOcelot.java new file mode 100644 index 0000000..e5b60cb --- /dev/null +++ b/src/net/minecraft/src/EntityOcelot.java @@ -0,0 +1,238 @@ +package net.minecraft.src; + +public class EntityOcelot extends EntityTameable { + private EntityAITempt aiTempt; + + public EntityOcelot(World var1) { + super(var1); + this.texture = "/mob/ozelot.png"; + this.setSize(0.6F, 0.8F); + this.getNavigator().setAvoidsWater(true); + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, this.aiSit); + this.tasks.addTask(3, this.aiTempt = new EntityAITempt(this, 0.18F, Item.fishRaw.itemID, true)); + this.tasks.addTask(4, new EntityAIAvoidEntity(this, EntityPlayer.class, 16.0F, 0.23F, 0.4F)); + this.tasks.addTask(5, new EntityAIFollowOwner(this, 0.3F, 10.0F, 5.0F)); + this.tasks.addTask(6, new EntityAIOcelotSit(this, 0.4F)); + this.tasks.addTask(7, new EntityAILeapAtTarget(this, 0.3F)); + this.tasks.addTask(8, new EntityAIOcelotAttack(this)); + this.tasks.addTask(9, new EntityAIMate(this, 0.23F)); + this.tasks.addTask(10, new EntityAIWander(this, 0.23F)); + this.tasks.addTask(11, new EntityAIWatchClosest(this, EntityPlayer.class, 10.0F)); + this.targetTasks.addTask(1, new EntityAITargetNonTamed(this, EntityChicken.class, 14.0F, 750, false)); + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(18, Byte.valueOf((byte)0)); + } + + public void updateAITick() { + if(this.getMoveHelper().isUpdating()) { + float var1 = this.getMoveHelper().getSpeed(); + if(var1 == 0.18F) { + this.setSneaking(true); + this.setSprinting(false); + } else if(var1 == 0.4F) { + this.setSneaking(false); + this.setSprinting(true); + } else { + this.setSneaking(false); + this.setSprinting(false); + } + } else { + this.setSneaking(false); + this.setSprinting(false); + } + + } + + protected boolean canDespawn() { + return !this.isTamed(); + } + + public String getTexture() { + switch(this.getTameSkin()) { + case 0: + return "/mob/ozelot.png"; + case 1: + return "/mob/cat_black.png"; + case 2: + return "/mob/cat_red.png"; + case 3: + return "/mob/cat_siamese.png"; + default: + return super.getTexture(); + } + } + + public boolean isAIEnabled() { + return true; + } + + public int getMaxHealth() { + return 10; + } + + protected void fall(float var1) { + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setInteger("CatType", this.getTameSkin()); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.setTameSkin(var1.getInteger("CatType")); + } + + protected String getLivingSound() { + return this.isTamed() ? (this.isInLove() ? "mob.cat.purr" : (this.rand.nextInt(4) == 0 ? "mob.cat.purreow" : "mob.cat.meow")) : ""; + } + + protected String getHurtSound() { + return "mob.cat.hitt"; + } + + protected String getDeathSound() { + return "mob.cat.hitt"; + } + + protected float getSoundVolume() { + return 0.4F; + } + + protected int getDropItemId() { + return Item.leather.itemID; + } + + public boolean attackEntityAsMob(Entity var1) { + return var1.attackEntityFrom(DamageSource.causeMobDamage(this), 3); + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else { + this.aiSit.setSitting(false); + return super.attackEntityFrom(var1, var2); + } + } + + protected void dropFewItems(boolean var1, int var2) { + } + + public boolean interact(EntityPlayer var1) { + ItemStack var2 = var1.inventory.getCurrentItem(); + if(this.isTamed()) { + if(var1.username.equalsIgnoreCase(this.getOwnerName()) && !this.worldObj.isRemote && !this.isBreedingItem(var2)) { + this.aiSit.setSitting(!this.isSitting()); + } + } else if(this.aiTempt.func_75277_f() && var2 != null && var2.itemID == Item.fishRaw.itemID && var1.getDistanceSqToEntity(this) < 9.0D) { + if(!var1.capabilities.isCreativeMode) { + --var2.stackSize; + } + + if(var2.stackSize <= 0) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, (ItemStack)null); + } + + if(!this.worldObj.isRemote) { + if(this.rand.nextInt(3) == 0) { + this.setTamed(true); + this.setTameSkin(1 + this.worldObj.rand.nextInt(3)); + this.setOwner(var1.username); + this.playTameEffect(true); + this.aiSit.setSitting(true); + this.worldObj.setEntityState(this, (byte)7); + } else { + this.playTameEffect(false); + this.worldObj.setEntityState(this, (byte)6); + } + } + + return true; + } + + return super.interact(var1); + } + + public EntityOcelot spawnBabyAnimal(EntityAgeable var1) { + EntityOcelot var2 = new EntityOcelot(this.worldObj); + if(this.isTamed()) { + var2.setOwner(this.getOwnerName()); + var2.setTamed(true); + var2.setTameSkin(this.getTameSkin()); + } + + return var2; + } + + public boolean isBreedingItem(ItemStack var1) { + return var1 != null && var1.itemID == Item.fishRaw.itemID; + } + + public boolean canMateWith(EntityAnimal var1) { + if(var1 == this) { + return false; + } else if(!this.isTamed()) { + return false; + } else if(!(var1 instanceof EntityOcelot)) { + return false; + } else { + EntityOcelot var2 = (EntityOcelot)var1; + return !var2.isTamed() ? false : this.isInLove() && var2.isInLove(); + } + } + + public int getTameSkin() { + return this.dataWatcher.getWatchableObjectByte(18); + } + + public void setTameSkin(int var1) { + this.dataWatcher.updateObject(18, Byte.valueOf((byte)var1)); + } + + public boolean getCanSpawnHere() { + if(this.worldObj.rand.nextInt(3) == 0) { + return false; + } else { + if(this.worldObj.checkNoEntityCollision(this.boundingBox) && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).isEmpty() && !this.worldObj.isAnyLiquid(this.boundingBox)) { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.boundingBox.minY); + int var3 = MathHelper.floor_double(this.posZ); + if(var2 < 63) { + return false; + } + + int var4 = this.worldObj.getBlockId(var1, var2 - 1, var3); + if(var4 == Block.grass.blockID || var4 == Block.leaves.blockID) { + return true; + } + } + + return false; + } + } + + public String getEntityName() { + return this.func_94056_bM() ? this.func_94057_bL() : (this.isTamed() ? "entity.Cat.name" : super.getEntityName()); + } + + public void initCreature() { + if(this.worldObj.rand.nextInt(7) == 0) { + for(int var1 = 0; var1 < 2; ++var1) { + EntityOcelot var2 = new EntityOcelot(this.worldObj); + var2.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 0.0F); + var2.setGrowingAge(-24000); + this.worldObj.spawnEntityInWorld(var2); + } + } + + } + + public EntityAgeable createChild(EntityAgeable var1) { + return this.spawnBabyAnimal(var1); + } +} diff --git a/src/net/minecraft/src/EntityOtherPlayerMP.java b/src/net/minecraft/src/EntityOtherPlayerMP.java new file mode 100644 index 0000000..c478933 --- /dev/null +++ b/src/net/minecraft/src/EntityOtherPlayerMP.java @@ -0,0 +1,142 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +public class EntityOtherPlayerMP extends EntityPlayer { + private boolean isItemInUse = false; + private int otherPlayerMPPosRotationIncrements; + private double otherPlayerMPX; + private double otherPlayerMPY; + private double otherPlayerMPZ; + private double otherPlayerMPYaw; + private double otherPlayerMPPitch; + + public EntityOtherPlayerMP(World var1, String var2) { + super(var1); + this.username = var2; + this.yOffset = 0.0F; + this.stepHeight = 0.0F; + if(var2 != null && var2.length() > 0) { + this.skinUrl = "http://skins.minecraft.net/MinecraftSkins/" + StringUtils.stripControlCodes(var2) + ".png"; + } + + this.noClip = true; + this.field_71082_cx = 0.25F; + this.renderDistanceWeight = 10.0D; + } + + protected void resetHeight() { + this.yOffset = 0.0F; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + return true; + } + + public void setPositionAndRotation2(double var1, double var3, double var5, float var7, float var8, int var9) { + this.otherPlayerMPX = var1; + this.otherPlayerMPY = var3; + this.otherPlayerMPZ = var5; + this.otherPlayerMPYaw = (double)var7; + this.otherPlayerMPPitch = (double)var8; + this.otherPlayerMPPosRotationIncrements = var9; + } + + public void updateCloak() { + this.cloakUrl = "http://skins.minecraft.net/MinecraftCloaks/" + StringUtils.stripControlCodes(this.username) + ".png"; + } + + public void onUpdate() { + this.field_71082_cx = 0.0F; + super.onUpdate(); + this.prevLimbYaw = this.limbYaw; + double var1 = this.posX - this.prevPosX; + double var3 = this.posZ - this.prevPosZ; + float var5 = MathHelper.sqrt_double(var1 * var1 + var3 * var3) * 4.0F; + if(var5 > 1.0F) { + var5 = 1.0F; + } + + this.limbYaw += (var5 - this.limbYaw) * 0.4F; + this.limbSwing += this.limbYaw; + if(!this.isItemInUse && this.isEating() && this.inventory.mainInventory[this.inventory.currentItem] != null) { + ItemStack var6 = this.inventory.mainInventory[this.inventory.currentItem]; + this.setItemInUse(this.inventory.mainInventory[this.inventory.currentItem], Item.itemsList[var6.itemID].getMaxItemUseDuration(var6)); + this.isItemInUse = true; + } else if(this.isItemInUse && !this.isEating()) { + this.clearItemInUse(); + this.isItemInUse = false; + } + + } + + public float getShadowSize() { + return 0.0F; + } + + public void onLivingUpdate() { + super.updateEntityActionState(); + if(this.otherPlayerMPPosRotationIncrements > 0) { + double var1 = this.posX + (this.otherPlayerMPX - this.posX) / (double)this.otherPlayerMPPosRotationIncrements; + double var3 = this.posY + (this.otherPlayerMPY - this.posY) / (double)this.otherPlayerMPPosRotationIncrements; + double var5 = this.posZ + (this.otherPlayerMPZ - this.posZ) / (double)this.otherPlayerMPPosRotationIncrements; + + double var7; + for(var7 = this.otherPlayerMPYaw - (double)this.rotationYaw; var7 < -180.0D; var7 += 360.0D) { + } + + while(var7 >= 180.0D) { + var7 -= 360.0D; + } + + this.rotationYaw = (float)((double)this.rotationYaw + var7 / (double)this.otherPlayerMPPosRotationIncrements); + this.rotationPitch = (float)((double)this.rotationPitch + (this.otherPlayerMPPitch - (double)this.rotationPitch) / (double)this.otherPlayerMPPosRotationIncrements); + --this.otherPlayerMPPosRotationIncrements; + this.setPosition(var1, var3, var5); + this.setRotation(this.rotationYaw, this.rotationPitch); + } + + this.prevCameraYaw = this.cameraYaw; + float var9 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + float var2 = (float)Math.atan(-this.motionY * (double)0.2F) * 15.0F; + if(var9 > 0.1F) { + var9 = 0.1F; + } + + if(!this.onGround || this.getHealth() <= 0) { + var9 = 0.0F; + } + + if(this.onGround || this.getHealth() <= 0) { + var2 = 0.0F; + } + + this.cameraYaw += (var9 - this.cameraYaw) * 0.4F; + this.cameraPitch += (var2 - this.cameraPitch) * 0.8F; + } + + public void setCurrentItemOrArmor(int var1, ItemStack var2) { + if(var1 == 0) { + this.inventory.mainInventory[this.inventory.currentItem] = var2; + } else { + this.inventory.armorInventory[var1 - 1] = var2; + } + + } + + public float getEyeHeight() { + return 1.82F; + } + + public void sendChatToPlayer(String var1) { + Minecraft.getMinecraft().ingameGUI.getChatGUI().printChatMessage(var1); + } + + public boolean canCommandSenderUseCommand(int var1, String var2) { + return false; + } + + public ChunkCoordinates getPlayerCoordinates() { + return new ChunkCoordinates(MathHelper.floor_double(this.posX + 0.5D), MathHelper.floor_double(this.posY + 0.5D), MathHelper.floor_double(this.posZ + 0.5D)); + } +} diff --git a/src/net/minecraft/src/EntityPainting.java b/src/net/minecraft/src/EntityPainting.java new file mode 100644 index 0000000..1cc8ed2 --- /dev/null +++ b/src/net/minecraft/src/EntityPainting.java @@ -0,0 +1,85 @@ +package net.minecraft.src; + +import java.util.ArrayList; + +public class EntityPainting extends EntityHanging { + public EnumArt art; + + public EntityPainting(World var1) { + super(var1); + } + + public EntityPainting(World var1, int var2, int var3, int var4, int var5) { + super(var1, var2, var3, var4, var5); + ArrayList var6 = new ArrayList(); + EnumArt[] var7 = EnumArt.values(); + int var8 = var7.length; + + for(int var9 = 0; var9 < var8; ++var9) { + EnumArt var10 = var7[var9]; + this.art = var10; + this.setDirection(var5); + if(this.onValidSurface()) { + var6.add(var10); + } + } + + if(!var6.isEmpty()) { + this.art = (EnumArt)var6.get(this.rand.nextInt(var6.size())); + } + + this.setDirection(var5); + } + + public EntityPainting(World var1, int var2, int var3, int var4, int var5, String var6) { + this(var1, var2, var3, var4, var5); + EnumArt[] var7 = EnumArt.values(); + int var8 = var7.length; + + for(int var9 = 0; var9 < var8; ++var9) { + EnumArt var10 = var7[var9]; + if(var10.title.equals(var6)) { + this.art = var10; + break; + } + } + + this.setDirection(var5); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setString("Motive", this.art.title); + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + String var2 = var1.getString("Motive"); + EnumArt[] var3 = EnumArt.values(); + int var4 = var3.length; + + for(int var5 = 0; var5 < var4; ++var5) { + EnumArt var6 = var3[var5]; + if(var6.title.equals(var2)) { + this.art = var6; + } + } + + if(this.art == null) { + this.art = EnumArt.Kebab; + } + + super.readEntityFromNBT(var1); + } + + public int func_82329_d() { + return this.art.sizeX; + } + + public int func_82330_g() { + return this.art.sizeY; + } + + public void dropItemStack() { + this.entityDropItem(new ItemStack(Item.painting), 0.0F); + } +} diff --git a/src/net/minecraft/src/EntityPickupFX.java b/src/net/minecraft/src/EntityPickupFX.java new file mode 100644 index 0000000..bef14a4 --- /dev/null +++ b/src/net/minecraft/src/EntityPickupFX.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class EntityPickupFX extends EntityFX { + private Entity entityToPickUp; + private Entity entityPickingUp; + private int age = 0; + private int maxAge = 0; + private float yOffs; + + public EntityPickupFX(World var1, Entity var2, Entity var3, float var4) { + super(var1, var2.posX, var2.posY, var2.posZ, var2.motionX, var2.motionY, var2.motionZ); + this.entityToPickUp = var2; + this.entityPickingUp = var3; + this.maxAge = 3; + this.yOffs = var4; + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = ((float)this.age + var2) / (float)this.maxAge; + var8 *= var8; + double var9 = this.entityToPickUp.posX; + double var11 = this.entityToPickUp.posY; + double var13 = this.entityToPickUp.posZ; + double var15 = this.entityPickingUp.lastTickPosX + (this.entityPickingUp.posX - this.entityPickingUp.lastTickPosX) * (double)var2; + double var17 = this.entityPickingUp.lastTickPosY + (this.entityPickingUp.posY - this.entityPickingUp.lastTickPosY) * (double)var2 + (double)this.yOffs; + double var19 = this.entityPickingUp.lastTickPosZ + (this.entityPickingUp.posZ - this.entityPickingUp.lastTickPosZ) * (double)var2; + double var21 = var9 + (var15 - var9) * (double)var8; + double var23 = var11 + (var17 - var11) * (double)var8; + double var25 = var13 + (var19 - var13) * (double)var8; + int var27 = MathHelper.floor_double(var21); + int var28 = MathHelper.floor_double(var23 + (double)(this.yOffset / 2.0F)); + int var29 = MathHelper.floor_double(var25); + int var30 = this.getBrightnessForRender(var2); + int var31 = var30 % 65536; + int var32 = var30 / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var31 / 1.0F, (float)var32 / 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var21 -= interpPosX; + var23 -= interpPosY; + var25 -= interpPosZ; + RenderManager.instance.renderEntityWithPosYaw(this.entityToPickUp, (double)((float)var21), (double)((float)var23), (double)((float)var25), this.entityToPickUp.rotationYaw, var2); + } + + public void onUpdate() { + ++this.age; + if(this.age == this.maxAge) { + this.setDead(); + } + + } + + public int getFXLayer() { + return 3; + } +} diff --git a/src/net/minecraft/src/EntityPig.java b/src/net/minecraft/src/EntityPig.java new file mode 100644 index 0000000..b585776 --- /dev/null +++ b/src/net/minecraft/src/EntityPig.java @@ -0,0 +1,149 @@ +package net.minecraft.src; + +public class EntityPig extends EntityAnimal { + private final EntityAIControlledByPlayer aiControlledByPlayer; + + public EntityPig(World var1) { + super(var1); + this.texture = "/mob/pig.png"; + this.setSize(0.9F, 0.9F); + this.getNavigator().setAvoidsWater(true); + float var2 = 0.25F; + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIPanic(this, 0.38F)); + this.tasks.addTask(2, this.aiControlledByPlayer = new EntityAIControlledByPlayer(this, 0.34F)); + this.tasks.addTask(3, new EntityAIMate(this, var2)); + this.tasks.addTask(4, new EntityAITempt(this, 0.3F, Item.carrotOnAStick.itemID, false)); + this.tasks.addTask(4, new EntityAITempt(this, 0.3F, Item.carrot.itemID, false)); + this.tasks.addTask(5, new EntityAIFollowParent(this, 0.28F)); + this.tasks.addTask(6, new EntityAIWander(this, var2)); + this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); + this.tasks.addTask(8, new EntityAILookIdle(this)); + } + + public boolean isAIEnabled() { + return true; + } + + public int getMaxHealth() { + return 10; + } + + protected void updateAITasks() { + super.updateAITasks(); + } + + public boolean canBeSteered() { + ItemStack var1 = ((EntityPlayer)this.riddenByEntity).getHeldItem(); + return var1 != null && var1.itemID == Item.carrotOnAStick.itemID; + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, Byte.valueOf((byte)0)); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setBoolean("Saddle", this.getSaddled()); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.setSaddled(var1.getBoolean("Saddle")); + } + + protected String getLivingSound() { + return "mob.pig.say"; + } + + protected String getHurtSound() { + return "mob.pig.say"; + } + + protected String getDeathSound() { + return "mob.pig.death"; + } + + protected void playStepSound(int var1, int var2, int var3, int var4) { + this.playSound("mob.pig.step", 0.15F, 1.0F); + } + + public boolean interact(EntityPlayer var1) { + if(super.interact(var1)) { + return true; + } else if(!this.getSaddled() || this.worldObj.isRemote || this.riddenByEntity != null && this.riddenByEntity != var1) { + return false; + } else { + var1.mountEntity(this); + return true; + } + } + + protected int getDropItemId() { + return this.isBurning() ? Item.porkCooked.itemID : Item.porkRaw.itemID; + } + + protected void dropFewItems(boolean var1, int var2) { + int var3 = this.rand.nextInt(3) + 1 + this.rand.nextInt(1 + var2); + + for(int var4 = 0; var4 < var3; ++var4) { + if(this.isBurning()) { + this.dropItem(Item.porkCooked.itemID, 1); + } else { + this.dropItem(Item.porkRaw.itemID, 1); + } + } + + if(this.getSaddled()) { + this.dropItem(Item.saddle.itemID, 1); + } + + } + + public boolean getSaddled() { + return (this.dataWatcher.getWatchableObjectByte(16) & 1) != 0; + } + + public void setSaddled(boolean var1) { + if(var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)1)); + } else { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)0)); + } + + } + + public void onStruckByLightning(EntityLightningBolt var1) { + if(!this.worldObj.isRemote) { + EntityPigZombie var2 = new EntityPigZombie(this.worldObj); + var2.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + this.worldObj.spawnEntityInWorld(var2); + this.setDead(); + } + } + + protected void fall(float var1) { + super.fall(var1); + if(var1 > 5.0F && this.riddenByEntity instanceof EntityPlayer) { + ((EntityPlayer)this.riddenByEntity).triggerAchievement(AchievementList.flyPig); + } + + } + + public EntityPig spawnBabyAnimal(EntityAgeable var1) { + return new EntityPig(this.worldObj); + } + + public boolean isBreedingItem(ItemStack var1) { + return var1 != null && var1.itemID == Item.carrot.itemID; + } + + public EntityAIControlledByPlayer getAIControlledByPlayer() { + return this.aiControlledByPlayer; + } + + public EntityAgeable createChild(EntityAgeable var1) { + return this.spawnBabyAnimal(var1); + } +} diff --git a/src/net/minecraft/src/EntityPigZombie.java b/src/net/minecraft/src/EntityPigZombie.java new file mode 100644 index 0000000..53cc449 --- /dev/null +++ b/src/net/minecraft/src/EntityPigZombie.java @@ -0,0 +1,138 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityPigZombie extends EntityZombie { + private int angerLevel = 0; + private int randomSoundDelay = 0; + + public EntityPigZombie(World var1) { + super(var1); + this.texture = "/mob/pigzombie.png"; + this.moveSpeed = 0.5F; + this.isImmuneToFire = true; + } + + protected boolean isAIEnabled() { + return false; + } + + public void onUpdate() { + this.moveSpeed = this.entityToAttack != null ? 0.95F : 0.5F; + if(this.randomSoundDelay > 0 && --this.randomSoundDelay == 0) { + this.playSound("mob.zombiepig.zpigangry", this.getSoundVolume() * 2.0F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F) * 1.8F); + } + + super.onUpdate(); + } + + public String getTexture() { + return "/mob/pigzombie.png"; + } + + public boolean getCanSpawnHere() { + return this.worldObj.difficultySetting > 0 && this.worldObj.checkNoEntityCollision(this.boundingBox) && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).isEmpty() && !this.worldObj.isAnyLiquid(this.boundingBox); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setShort("Anger", (short)this.angerLevel); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.angerLevel = var1.getShort("Anger"); + } + + protected Entity findPlayerToAttack() { + return this.angerLevel == 0 ? null : super.findPlayerToAttack(); + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else { + Entity var3 = var1.getEntity(); + if(var3 instanceof EntityPlayer) { + List var4 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand(32.0D, 32.0D, 32.0D)); + + for(int var5 = 0; var5 < var4.size(); ++var5) { + Entity var6 = (Entity)var4.get(var5); + if(var6 instanceof EntityPigZombie) { + EntityPigZombie var7 = (EntityPigZombie)var6; + var7.becomeAngryAt(var3); + } + } + + this.becomeAngryAt(var3); + } + + return super.attackEntityFrom(var1, var2); + } + } + + private void becomeAngryAt(Entity var1) { + this.entityToAttack = var1; + this.angerLevel = 400 + this.rand.nextInt(400); + this.randomSoundDelay = this.rand.nextInt(40); + } + + protected String getLivingSound() { + return "mob.zombiepig.zpig"; + } + + protected String getHurtSound() { + return "mob.zombiepig.zpighurt"; + } + + protected String getDeathSound() { + return "mob.zombiepig.zpigdeath"; + } + + protected void dropFewItems(boolean var1, int var2) { + int var3 = this.rand.nextInt(2 + var2); + + int var4; + for(var4 = 0; var4 < var3; ++var4) { + this.dropItem(Item.rottenFlesh.itemID, 1); + } + + var3 = this.rand.nextInt(2 + var2); + + for(var4 = 0; var4 < var3; ++var4) { + this.dropItem(Item.goldNugget.itemID, 1); + } + + } + + public boolean interact(EntityPlayer var1) { + return false; + } + + protected void dropRareDrop(int var1) { + this.dropItem(Item.ingotGold.itemID, 1); + } + + protected int getDropItemId() { + return Item.rottenFlesh.itemID; + } + + protected void addRandomArmor() { + this.setCurrentItemOrArmor(0, new ItemStack(Item.swordGold)); + } + + public void initCreature() { + super.initCreature(); + this.setVillager(false); + } + + public int getAttackStrength(Entity var1) { + ItemStack var2 = this.getHeldItem(); + int var3 = 5; + if(var2 != null) { + var3 += var2.getDamageVsEntity(this); + } + + return var3; + } +} diff --git a/src/net/minecraft/src/EntityPlayer.java b/src/net/minecraft/src/EntityPlayer.java new file mode 100644 index 0000000..28c252c --- /dev/null +++ b/src/net/minecraft/src/EntityPlayer.java @@ -0,0 +1,1469 @@ +package net.minecraft.src; + +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +public abstract class EntityPlayer extends EntityLiving implements ICommandSender { + public InventoryPlayer inventory = new InventoryPlayer(this); + private InventoryEnderChest theInventoryEnderChest = new InventoryEnderChest(); + public Container inventoryContainer; + public Container openContainer; + protected FoodStats foodStats = new FoodStats(); + protected int flyToggleTimer = 0; + public byte field_71098_bD = 0; + public float prevCameraYaw; + public float cameraYaw; + public String username; + public int xpCooldown = 0; + public double field_71091_bM; + public double field_71096_bN; + public double field_71097_bO; + public double field_71094_bP; + public double field_71095_bQ; + public double field_71085_bR; + protected boolean sleeping; + public ChunkCoordinates playerLocation; + private int sleepTimer; + public float field_71079_bU; + public float field_71082_cx; + public float field_71089_bV; + private ChunkCoordinates spawnChunk; + private boolean spawnForced; + private ChunkCoordinates startMinecartRidingCoordinate; + public PlayerCapabilities capabilities = new PlayerCapabilities(); + public int experienceLevel; + public int experienceTotal; + public float experience; + private ItemStack itemInUse; + private int itemInUseCount; + protected float speedOnGround = 0.1F; + protected float speedInAir = 0.02F; + private int field_82249_h = 0; + public EntityFishHook fishEntity = null; + + public EntityPlayer(World var1) { + super(var1); + this.inventoryContainer = new ContainerPlayer(this.inventory, !var1.isRemote, this); + this.openContainer = this.inventoryContainer; + this.yOffset = 1.62F; + ChunkCoordinates var2 = var1.getSpawnPoint(); + this.setLocationAndAngles((double)var2.posX + 0.5D, (double)(var2.posY + 1), (double)var2.posZ + 0.5D, 0.0F, 0.0F); + this.entityType = "humanoid"; + this.field_70741_aB = 180.0F; + this.fireResistance = 20; + this.texture = "/mob/char.png"; + } + + public int getMaxHealth() { + return 20; + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, Byte.valueOf((byte)0)); + this.dataWatcher.addObject(17, Byte.valueOf((byte)0)); + this.dataWatcher.addObject(18, Integer.valueOf(0)); + } + + public ItemStack getItemInUse() { + return this.itemInUse; + } + + public int getItemInUseCount() { + return this.itemInUseCount; + } + + public boolean isUsingItem() { + return this.itemInUse != null; + } + + public int getItemInUseDuration() { + return this.isUsingItem() ? this.itemInUse.getMaxItemUseDuration() - this.itemInUseCount : 0; + } + + public void stopUsingItem() { + if(this.itemInUse != null) { + this.itemInUse.onPlayerStoppedUsing(this.worldObj, this, this.itemInUseCount); + } + + this.clearItemInUse(); + } + + public void clearItemInUse() { + this.itemInUse = null; + this.itemInUseCount = 0; + if(!this.worldObj.isRemote) { + this.setEating(false); + } + + } + + public boolean isBlocking() { + return this.isUsingItem() && Item.itemsList[this.itemInUse.itemID].getItemUseAction(this.itemInUse) == EnumAction.block; + } + + public void onUpdate() { + if(this.itemInUse != null) { + ItemStack var1 = this.inventory.getCurrentItem(); + if(var1 == this.itemInUse) { + if(this.itemInUseCount <= 25 && this.itemInUseCount % 4 == 0) { + this.updateItemUse(var1, 5); + } + + if(--this.itemInUseCount == 0 && !this.worldObj.isRemote) { + this.onItemUseFinish(); + } + } else { + this.clearItemInUse(); + } + } + + if(this.xpCooldown > 0) { + --this.xpCooldown; + } + + if(this.isPlayerSleeping()) { + ++this.sleepTimer; + if(this.sleepTimer > 100) { + this.sleepTimer = 100; + } + + if(!this.worldObj.isRemote) { + if(!this.isInBed()) { + this.wakeUpPlayer(true, true, false); + } else if(this.worldObj.isDaytime()) { + this.wakeUpPlayer(false, true, true); + } + } + } else if(this.sleepTimer > 0) { + ++this.sleepTimer; + if(this.sleepTimer >= 110) { + this.sleepTimer = 0; + } + } + + super.onUpdate(); + if(!this.worldObj.isRemote && this.openContainer != null && !this.openContainer.canInteractWith(this)) { + this.closeScreen(); + this.openContainer = this.inventoryContainer; + } + + if(this.isBurning() && this.capabilities.disableDamage) { + this.extinguish(); + } + + this.field_71091_bM = this.field_71094_bP; + this.field_71096_bN = this.field_71095_bQ; + this.field_71097_bO = this.field_71085_bR; + double var9 = this.posX - this.field_71094_bP; + double var3 = this.posY - this.field_71095_bQ; + double var5 = this.posZ - this.field_71085_bR; + double var7 = 10.0D; + if(var9 > var7) { + this.field_71091_bM = this.field_71094_bP = this.posX; + } + + if(var5 > var7) { + this.field_71097_bO = this.field_71085_bR = this.posZ; + } + + if(var3 > var7) { + this.field_71096_bN = this.field_71095_bQ = this.posY; + } + + if(var9 < -var7) { + this.field_71091_bM = this.field_71094_bP = this.posX; + } + + if(var5 < -var7) { + this.field_71097_bO = this.field_71085_bR = this.posZ; + } + + if(var3 < -var7) { + this.field_71096_bN = this.field_71095_bQ = this.posY; + } + + this.field_71094_bP += var9 * 0.25D; + this.field_71085_bR += var5 * 0.25D; + this.field_71095_bQ += var3 * 0.25D; + this.addStat(StatList.minutesPlayedStat, 1); + if(this.ridingEntity == null) { + this.startMinecartRidingCoordinate = null; + } + + if(!this.worldObj.isRemote) { + this.foodStats.onUpdate(this); + } + + } + + public int getMaxInPortalTime() { + return this.capabilities.disableDamage ? 0 : 80; + } + + public int getPortalCooldown() { + return 10; + } + + public void playSound(String var1, float var2, float var3) { + this.worldObj.playSoundToNearExcept(this, var1, var2, var3); + } + + protected void updateItemUse(ItemStack var1, int var2) { + if(var1.getItemUseAction() == EnumAction.drink) { + this.playSound("random.drink", 0.5F, this.worldObj.rand.nextFloat() * 0.1F + 0.9F); + } + + if(var1.getItemUseAction() == EnumAction.eat) { + for(int var3 = 0; var3 < var2; ++var3) { + Vec3 var4 = this.worldObj.getWorldVec3Pool().getVecFromPool(((double)this.rand.nextFloat() - 0.5D) * 0.1D, Math.random() * 0.1D + 0.1D, 0.0D); + var4.rotateAroundX(-this.rotationPitch * (float)Math.PI / 180.0F); + var4.rotateAroundY(-this.rotationYaw * (float)Math.PI / 180.0F); + Vec3 var5 = this.worldObj.getWorldVec3Pool().getVecFromPool(((double)this.rand.nextFloat() - 0.5D) * 0.3D, (double)(-this.rand.nextFloat()) * 0.6D - 0.3D, 0.6D); + var5.rotateAroundX(-this.rotationPitch * (float)Math.PI / 180.0F); + var5.rotateAroundY(-this.rotationYaw * (float)Math.PI / 180.0F); + var5 = var5.addVector(this.posX, this.posY + (double)this.getEyeHeight(), this.posZ); + this.worldObj.spawnParticle("iconcrack_" + var1.getItem().itemID, var5.xCoord, var5.yCoord, var5.zCoord, var4.xCoord, var4.yCoord + 0.05D, var4.zCoord); + } + + this.playSound("random.eat", 0.5F + 0.5F * (float)this.rand.nextInt(2), (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + + } + + protected void onItemUseFinish() { + if(this.itemInUse != null) { + this.updateItemUse(this.itemInUse, 16); + int var1 = this.itemInUse.stackSize; + ItemStack var2 = this.itemInUse.onFoodEaten(this.worldObj, this); + if(var2 != this.itemInUse || var2 != null && var2.stackSize != var1) { + this.inventory.mainInventory[this.inventory.currentItem] = var2; + if(var2.stackSize == 0) { + this.inventory.mainInventory[this.inventory.currentItem] = null; + } + } + + this.clearItemInUse(); + } + + } + + public void handleHealthUpdate(byte var1) { + if(var1 == 9) { + this.onItemUseFinish(); + } else { + super.handleHealthUpdate(var1); + } + + } + + protected boolean isMovementBlocked() { + return this.getHealth() <= 0 || this.isPlayerSleeping(); + } + + protected void closeScreen() { + this.openContainer = this.inventoryContainer; + } + + public void mountEntity(Entity var1) { + if(this.ridingEntity == var1) { + this.unmountEntity(var1); + if(this.ridingEntity != null) { + this.ridingEntity.riddenByEntity = null; + } + + this.ridingEntity = null; + } else { + super.mountEntity(var1); + } + } + + public void updateRidden() { + double var1 = this.posX; + double var3 = this.posY; + double var5 = this.posZ; + float var7 = this.rotationYaw; + float var8 = this.rotationPitch; + super.updateRidden(); + this.prevCameraYaw = this.cameraYaw; + this.cameraYaw = 0.0F; + this.addMountedMovementStat(this.posX - var1, this.posY - var3, this.posZ - var5); + if(this.ridingEntity instanceof EntityPig) { + this.rotationPitch = var8; + this.rotationYaw = var7; + this.renderYawOffset = ((EntityPig)this.ridingEntity).renderYawOffset; + } + + } + + public void preparePlayerToSpawn() { + this.yOffset = 1.62F; + this.setSize(0.6F, 1.8F); + super.preparePlayerToSpawn(); + this.setEntityHealth(this.getMaxHealth()); + this.deathTime = 0; + } + + protected void updateEntityActionState() { + this.updateArmSwingProgress(); + } + + public void onLivingUpdate() { + if(this.flyToggleTimer > 0) { + --this.flyToggleTimer; + } + + if(this.worldObj.difficultySetting == 0 && this.getHealth() < this.getMaxHealth() && this.ticksExisted % 20 * 12 == 0) { + this.heal(1); + } + + this.inventory.decrementAnimations(); + this.prevCameraYaw = this.cameraYaw; + super.onLivingUpdate(); + this.landMovementFactor = this.capabilities.getWalkSpeed(); + this.jumpMovementFactor = this.speedInAir; + if(this.isSprinting()) { + this.landMovementFactor = (float)((double)this.landMovementFactor + (double)this.capabilities.getWalkSpeed() * 0.3D); + this.jumpMovementFactor = (float)((double)this.jumpMovementFactor + (double)this.speedInAir * 0.3D); + } + + float var1 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + float var2 = (float)Math.atan(-this.motionY * (double)0.2F) * 15.0F; + if(var1 > 0.1F) { + var1 = 0.1F; + } + + if(!this.onGround || this.getHealth() <= 0) { + var1 = 0.0F; + } + + if(this.onGround || this.getHealth() <= 0) { + var2 = 0.0F; + } + + this.cameraYaw += (var1 - this.cameraYaw) * 0.4F; + this.cameraPitch += (var2 - this.cameraPitch) * 0.8F; + if(this.getHealth() > 0) { + List var3 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand(1.0D, 0.5D, 1.0D)); + if(var3 != null) { + for(int var4 = 0; var4 < var3.size(); ++var4) { + Entity var5 = (Entity)var3.get(var4); + if(!var5.isDead) { + this.collideWithPlayer(var5); + } + } + } + } + + } + + private void collideWithPlayer(Entity var1) { + var1.onCollideWithPlayer(this); + } + + public int getScore() { + return this.dataWatcher.getWatchableObjectInt(18); + } + + public void setScore(int var1) { + this.dataWatcher.updateObject(18, Integer.valueOf(var1)); + } + + public void addScore(int var1) { + int var2 = this.getScore(); + this.dataWatcher.updateObject(18, Integer.valueOf(var2 + var1)); + } + + public void onDeath(DamageSource var1) { + super.onDeath(var1); + this.setSize(0.2F, 0.2F); + this.setPosition(this.posX, this.posY, this.posZ); + this.motionY = (double)0.1F; + if(this.username.equals("Notch")) { + this.dropPlayerItemWithRandomChoice(new ItemStack(Item.appleRed, 1), true); + } + + if(!this.worldObj.getGameRules().getGameRuleBooleanValue("keepInventory")) { + this.inventory.dropAllItems(); + } + + if(var1 != null) { + this.motionX = (double)(-MathHelper.cos((this.attackedAtYaw + this.rotationYaw) * (float)Math.PI / 180.0F) * 0.1F); + this.motionZ = (double)(-MathHelper.sin((this.attackedAtYaw + this.rotationYaw) * (float)Math.PI / 180.0F) * 0.1F); + } else { + this.motionX = this.motionZ = 0.0D; + } + + this.yOffset = 0.1F; + this.addStat(StatList.deathsStat, 1); + } + + public void addToPlayerScore(Entity var1, int var2) { + this.addScore(var2); + Collection var3 = this.getWorldScoreboard().func_96520_a(ScoreObjectiveCriteria.field_96640_e); + if(var1 instanceof EntityPlayer) { + this.addStat(StatList.playerKillsStat, 1); + var3.addAll(this.getWorldScoreboard().func_96520_a(ScoreObjectiveCriteria.field_96639_d)); + } else { + this.addStat(StatList.mobKillsStat, 1); + } + + Iterator var4 = var3.iterator(); + + while(var4.hasNext()) { + ScoreObjective var5 = (ScoreObjective)var4.next(); + Score var6 = this.getWorldScoreboard().func_96529_a(this.getEntityName(), var5); + var6.func_96648_a(); + } + + } + + public EntityItem dropOneItem(boolean var1) { + return this.dropPlayerItemWithRandomChoice(this.inventory.decrStackSize(this.inventory.currentItem, var1 && this.inventory.getCurrentItem() != null ? this.inventory.getCurrentItem().stackSize : 1), false); + } + + public EntityItem dropPlayerItem(ItemStack var1) { + return this.dropPlayerItemWithRandomChoice(var1, false); + } + + public EntityItem dropPlayerItemWithRandomChoice(ItemStack var1, boolean var2) { + if(var1 == null) { + return null; + } else { + EntityItem var3 = new EntityItem(this.worldObj, this.posX, this.posY - (double)0.3F + (double)this.getEyeHeight(), this.posZ, var1); + var3.delayBeforeCanPickup = 40; + float var4 = 0.1F; + float var5; + if(var2) { + var5 = this.rand.nextFloat() * 0.5F; + float var6 = this.rand.nextFloat() * (float)Math.PI * 2.0F; + var3.motionX = (double)(-MathHelper.sin(var6) * var5); + var3.motionZ = (double)(MathHelper.cos(var6) * var5); + var3.motionY = (double)0.2F; + } else { + var4 = 0.3F; + var3.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var4); + var3.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var4); + var3.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI) * var4 + 0.1F); + var4 = 0.02F; + var5 = this.rand.nextFloat() * (float)Math.PI * 2.0F; + var4 *= this.rand.nextFloat(); + var3.motionX += Math.cos((double)var5) * (double)var4; + var3.motionY += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F); + var3.motionZ += Math.sin((double)var5) * (double)var4; + } + + this.joinEntityItemWithWorld(var3); + this.addStat(StatList.dropStat, 1); + return var3; + } + } + + protected void joinEntityItemWithWorld(EntityItem var1) { + this.worldObj.spawnEntityInWorld(var1); + } + + public float getCurrentPlayerStrVsBlock(Block var1, boolean var2) { + float var3 = this.inventory.getStrVsBlock(var1); + if(var3 > 1.0F) { + int var4 = EnchantmentHelper.getEfficiencyModifier(this); + ItemStack var5 = this.inventory.getCurrentItem(); + if(var4 > 0 && var5 != null) { + float var6 = (float)(var4 * var4 + 1); + if(!var5.canHarvestBlock(var1) && var3 <= 1.0F) { + var3 += var6 * 0.08F; + } else { + var3 += var6; + } + } + } + + if(this.isPotionActive(Potion.digSpeed)) { + var3 *= 1.0F + (float)(this.getActivePotionEffect(Potion.digSpeed).getAmplifier() + 1) * 0.2F; + } + + if(this.isPotionActive(Potion.digSlowdown)) { + var3 *= 1.0F - (float)(this.getActivePotionEffect(Potion.digSlowdown).getAmplifier() + 1) * 0.2F; + } + + if(this.isInsideOfMaterial(Material.water) && !EnchantmentHelper.getAquaAffinityModifier(this)) { + var3 /= 5.0F; + } + + if(!this.onGround) { + var3 /= 5.0F; + } + + return var3; + } + + public boolean canHarvestBlock(Block var1) { + return this.inventory.canHarvestBlock(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + NBTTagList var2 = var1.getTagList("Inventory"); + this.inventory.readFromNBT(var2); + this.inventory.currentItem = var1.getInteger("SelectedItemSlot"); + this.sleeping = var1.getBoolean("Sleeping"); + this.sleepTimer = var1.getShort("SleepTimer"); + this.experience = var1.getFloat("XpP"); + this.experienceLevel = var1.getInteger("XpLevel"); + this.experienceTotal = var1.getInteger("XpTotal"); + this.setScore(var1.getInteger("Score")); + if(this.sleeping) { + this.playerLocation = new ChunkCoordinates(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)); + this.wakeUpPlayer(true, true, false); + } + + if(var1.hasKey("SpawnX") && var1.hasKey("SpawnY") && var1.hasKey("SpawnZ")) { + this.spawnChunk = new ChunkCoordinates(var1.getInteger("SpawnX"), var1.getInteger("SpawnY"), var1.getInteger("SpawnZ")); + this.spawnForced = var1.getBoolean("SpawnForced"); + } + + this.foodStats.readNBT(var1); + this.capabilities.readCapabilitiesFromNBT(var1); + if(var1.hasKey("EnderItems")) { + NBTTagList var3 = var1.getTagList("EnderItems"); + this.theInventoryEnderChest.loadInventoryFromNBT(var3); + } + + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setTag("Inventory", this.inventory.writeToNBT(new NBTTagList())); + var1.setInteger("SelectedItemSlot", this.inventory.currentItem); + var1.setBoolean("Sleeping", this.sleeping); + var1.setShort("SleepTimer", (short)this.sleepTimer); + var1.setFloat("XpP", this.experience); + var1.setInteger("XpLevel", this.experienceLevel); + var1.setInteger("XpTotal", this.experienceTotal); + var1.setInteger("Score", this.getScore()); + if(this.spawnChunk != null) { + var1.setInteger("SpawnX", this.spawnChunk.posX); + var1.setInteger("SpawnY", this.spawnChunk.posY); + var1.setInteger("SpawnZ", this.spawnChunk.posZ); + var1.setBoolean("SpawnForced", this.spawnForced); + } + + this.foodStats.writeNBT(var1); + this.capabilities.writeCapabilitiesToNBT(var1); + var1.setTag("EnderItems", this.theInventoryEnderChest.saveInventoryToNBT()); + } + + public void displayGUIChest(IInventory var1) { + } + + public void displayGUIHopper(TileEntityHopper var1) { + } + + public void displayGUIHopperMinecart(EntityMinecartHopper var1) { + } + + public void displayGUIEnchantment(int var1, int var2, int var3, String var4) { + } + + public void displayGUIAnvil(int var1, int var2, int var3) { + } + + public void displayGUIWorkbench(int var1, int var2, int var3) { + } + + public float getEyeHeight() { + return 0.12F; + } + + protected void resetHeight() { + this.yOffset = 1.62F; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else if(this.capabilities.disableDamage && !var1.canHarmInCreative()) { + return false; + } else { + this.entityAge = 0; + if(this.getHealth() <= 0) { + return false; + } else { + if(this.isPlayerSleeping() && !this.worldObj.isRemote) { + this.wakeUpPlayer(true, true, false); + } + + if(var1.isDifficultyScaled()) { + if(this.worldObj.difficultySetting == 0) { + var2 = 0; + } + + if(this.worldObj.difficultySetting == 1) { + var2 = var2 / 2 + 1; + } + + if(this.worldObj.difficultySetting == 3) { + var2 = var2 * 3 / 2; + } + } + + if(var2 == 0) { + return false; + } else { + Entity var3 = var1.getEntity(); + if(var3 instanceof EntityArrow && ((EntityArrow)var3).shootingEntity != null) { + var3 = ((EntityArrow)var3).shootingEntity; + } + + if(var3 instanceof EntityLiving) { + this.alertWolves((EntityLiving)var3, false); + } + + this.addStat(StatList.damageTakenStat, var2); + return super.attackEntityFrom(var1, var2); + } + } + } + } + + public boolean func_96122_a(EntityPlayer var1) { + ScorePlayerTeam var2 = this.getTeam(); + ScorePlayerTeam var3 = var1.getTeam(); + return var2 != var3 ? true : (var2 != null ? var2.func_96665_g() : true); + } + + protected void alertWolves(EntityLiving var1, boolean var2) { + if(!(var1 instanceof EntityCreeper) && !(var1 instanceof EntityGhast)) { + if(var1 instanceof EntityWolf) { + EntityWolf var3 = (EntityWolf)var1; + if(var3.isTamed() && this.username.equals(var3.getOwnerName())) { + return; + } + } + + if(!(var1 instanceof EntityPlayer) || this.func_96122_a((EntityPlayer)var1)) { + List var6 = this.worldObj.getEntitiesWithinAABB(EntityWolf.class, AxisAlignedBB.getAABBPool().getAABB(this.posX, this.posY, this.posZ, this.posX + 1.0D, this.posY + 1.0D, this.posZ + 1.0D).expand(16.0D, 4.0D, 16.0D)); + Iterator var4 = var6.iterator(); + + while(true) { + EntityWolf var5; + do { + do { + do { + do { + if(!var4.hasNext()) { + return; + } + + var5 = (EntityWolf)var4.next(); + } while(!var5.isTamed()); + } while(var5.getEntityToAttack() != null); + } while(!this.username.equals(var5.getOwnerName())); + } while(var2 && var5.isSitting()); + + var5.setSitting(false); + var5.setTarget(var1); + } + } + } + } + + protected void damageArmor(int var1) { + this.inventory.damageArmor(var1); + } + + public int getTotalArmorValue() { + return this.inventory.getTotalArmorValue(); + } + + public float func_82243_bO() { + int var1 = 0; + ItemStack[] var2 = this.inventory.armorInventory; + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + ItemStack var5 = var2[var4]; + if(var5 != null) { + ++var1; + } + } + + return (float)var1 / (float)this.inventory.armorInventory.length; + } + + protected void damageEntity(DamageSource var1, int var2) { + if(!this.isEntityInvulnerable()) { + if(!var1.isUnblockable() && this.isBlocking()) { + var2 = 1 + var2 >> 1; + } + + var2 = this.applyArmorCalculations(var1, var2); + var2 = this.applyPotionDamageCalculations(var1, var2); + this.addExhaustion(var1.getHungerDamage()); + int var3 = this.getHealth(); + this.setEntityHealth(this.getHealth() - var2); + this.field_94063_bt.func_94547_a(var1, var3, var2); + } + } + + public void displayGUIFurnace(TileEntityFurnace var1) { + } + + public void displayGUIDispenser(TileEntityDispenser var1) { + } + + public void displayGUIEditSign(TileEntity var1) { + } + + public void displayGUIBrewingStand(TileEntityBrewingStand var1) { + } + + public void displayGUIBeacon(TileEntityBeacon var1) { + } + + public void displayGUIMerchant(IMerchant var1, String var2) { + } + + public void displayGUIBook(ItemStack var1) { + } + + public boolean interactWith(Entity var1) { + if(var1.interact(this)) { + return true; + } else { + ItemStack var2 = this.getCurrentEquippedItem(); + if(var2 != null && var1 instanceof EntityLiving) { + if(this.capabilities.isCreativeMode) { + var2 = var2.copy(); + } + + if(var2.interactWith((EntityLiving)var1)) { + if(var2.stackSize <= 0 && !this.capabilities.isCreativeMode) { + this.destroyCurrentEquippedItem(); + } + + return true; + } + } + + return false; + } + } + + public ItemStack getCurrentEquippedItem() { + return this.inventory.getCurrentItem(); + } + + public void destroyCurrentEquippedItem() { + this.inventory.setInventorySlotContents(this.inventory.currentItem, (ItemStack)null); + } + + public double getYOffset() { + return (double)(this.yOffset - 0.5F); + } + + public void attackTargetEntityWithCurrentItem(Entity var1) { + if(var1.canAttackWithItem()) { + if(!var1.func_85031_j(this)) { + int var2 = this.inventory.getDamageVsEntity(var1); + if(this.isPotionActive(Potion.damageBoost)) { + var2 += 3 << this.getActivePotionEffect(Potion.damageBoost).getAmplifier(); + } + + if(this.isPotionActive(Potion.weakness)) { + var2 -= 2 << this.getActivePotionEffect(Potion.weakness).getAmplifier(); + } + + int var3 = 0; + int var4 = 0; + if(var1 instanceof EntityLiving) { + var4 = EnchantmentHelper.getEnchantmentModifierLiving(this, (EntityLiving)var1); + var3 += EnchantmentHelper.getKnockbackModifier(this, (EntityLiving)var1); + } + + if(this.isSprinting()) { + ++var3; + } + + if(var2 > 0 || var4 > 0) { + boolean var5 = this.fallDistance > 0.0F && !this.onGround && !this.isOnLadder() && !this.isInWater() && !this.isPotionActive(Potion.blindness) && this.ridingEntity == null && var1 instanceof EntityLiving; + if(var5 && var2 > 0) { + var2 += this.rand.nextInt(var2 / 2 + 2); + } + + var2 += var4; + boolean var6 = false; + int var7 = EnchantmentHelper.getFireAspectModifier(this); + if(var1 instanceof EntityLiving && var7 > 0 && !var1.isBurning()) { + var6 = true; + var1.setFire(1); + } + + boolean var8 = var1.attackEntityFrom(DamageSource.causePlayerDamage(this), var2); + if(var8) { + if(var3 > 0) { + var1.addVelocity((double)(-MathHelper.sin(this.rotationYaw * (float)Math.PI / 180.0F) * (float)var3 * 0.5F), 0.1D, (double)(MathHelper.cos(this.rotationYaw * (float)Math.PI / 180.0F) * (float)var3 * 0.5F)); + this.motionX *= 0.6D; + this.motionZ *= 0.6D; + this.setSprinting(false); + } + + if(var5) { + this.onCriticalHit(var1); + } + + if(var4 > 0) { + this.onEnchantmentCritical(var1); + } + + if(var2 >= 18) { + this.triggerAchievement(AchievementList.overkill); + } + + this.setLastAttackingEntity(var1); + if(var1 instanceof EntityLiving) { + EnchantmentThorns.func_92096_a(this, (EntityLiving)var1, this.rand); + } + } + + ItemStack var9 = this.getCurrentEquippedItem(); + Object var10 = var1; + if(var1 instanceof EntityDragonPart) { + IEntityMultiPart var11 = ((EntityDragonPart)var1).entityDragonObj; + if(var11 != null && var11 instanceof EntityLiving) { + var10 = (EntityLiving)var11; + } + } + + if(var9 != null && var10 instanceof EntityLiving) { + var9.hitEntity((EntityLiving)var10, this); + if(var9.stackSize <= 0) { + this.destroyCurrentEquippedItem(); + } + } + + if(var1 instanceof EntityLiving) { + if(var1.isEntityAlive()) { + this.alertWolves((EntityLiving)var1, true); + } + + this.addStat(StatList.damageDealtStat, var2); + if(var7 > 0 && var8) { + var1.setFire(var7 * 4); + } else if(var6) { + var1.extinguish(); + } + } + + this.addExhaustion(0.3F); + } + + } + } + } + + public void onCriticalHit(Entity var1) { + } + + public void onEnchantmentCritical(Entity var1) { + } + + public void respawnPlayer() { + } + + public void setDead() { + super.setDead(); + this.inventoryContainer.onCraftGuiClosed(this); + if(this.openContainer != null) { + this.openContainer.onCraftGuiClosed(this); + } + + } + + public boolean isEntityInsideOpaqueBlock() { + return !this.sleeping && super.isEntityInsideOpaqueBlock(); + } + + public boolean func_71066_bF() { + return false; + } + + public EnumStatus sleepInBedAt(int var1, int var2, int var3) { + if(!this.worldObj.isRemote) { + if(this.isPlayerSleeping() || !this.isEntityAlive()) { + return EnumStatus.OTHER_PROBLEM; + } + + if(!this.worldObj.provider.isSurfaceWorld()) { + return EnumStatus.NOT_POSSIBLE_HERE; + } + + if(this.worldObj.isDaytime()) { + return EnumStatus.NOT_POSSIBLE_NOW; + } + + if(Math.abs(this.posX - (double)var1) > 3.0D || Math.abs(this.posY - (double)var2) > 2.0D || Math.abs(this.posZ - (double)var3) > 3.0D) { + return EnumStatus.TOO_FAR_AWAY; + } + + double var4 = 8.0D; + double var6 = 5.0D; + List var8 = this.worldObj.getEntitiesWithinAABB(EntityMob.class, AxisAlignedBB.getAABBPool().getAABB((double)var1 - var4, (double)var2 - var6, (double)var3 - var4, (double)var1 + var4, (double)var2 + var6, (double)var3 + var4)); + if(!var8.isEmpty()) { + return EnumStatus.NOT_SAFE; + } + } + + this.setSize(0.2F, 0.2F); + this.yOffset = 0.2F; + if(this.worldObj.blockExists(var1, var2, var3)) { + int var9 = this.worldObj.getBlockMetadata(var1, var2, var3); + int var5 = BlockBed.getDirection(var9); + float var10 = 0.5F; + float var7 = 0.5F; + switch(var5) { + case 0: + var7 = 0.9F; + break; + case 1: + var10 = 0.1F; + break; + case 2: + var7 = 0.1F; + break; + case 3: + var10 = 0.9F; + } + + this.func_71013_b(var5); + this.setPosition((double)((float)var1 + var10), (double)((float)var2 + 15.0F / 16.0F), (double)((float)var3 + var7)); + } else { + this.setPosition((double)((float)var1 + 0.5F), (double)((float)var2 + 15.0F / 16.0F), (double)((float)var3 + 0.5F)); + } + + this.sleeping = true; + this.sleepTimer = 0; + this.playerLocation = new ChunkCoordinates(var1, var2, var3); + this.motionX = this.motionZ = this.motionY = 0.0D; + if(!this.worldObj.isRemote) { + this.worldObj.updateAllPlayersSleepingFlag(); + } + + return EnumStatus.OK; + } + + private void func_71013_b(int var1) { + this.field_71079_bU = 0.0F; + this.field_71089_bV = 0.0F; + switch(var1) { + case 0: + this.field_71089_bV = -1.8F; + break; + case 1: + this.field_71079_bU = 1.8F; + break; + case 2: + this.field_71089_bV = 1.8F; + break; + case 3: + this.field_71079_bU = -1.8F; + } + + } + + public void wakeUpPlayer(boolean var1, boolean var2, boolean var3) { + this.setSize(0.6F, 1.8F); + this.resetHeight(); + ChunkCoordinates var4 = this.playerLocation; + ChunkCoordinates var5 = this.playerLocation; + if(var4 != null && this.worldObj.getBlockId(var4.posX, var4.posY, var4.posZ) == Block.bed.blockID) { + BlockBed.setBedOccupied(this.worldObj, var4.posX, var4.posY, var4.posZ, false); + var5 = BlockBed.getNearestEmptyChunkCoordinates(this.worldObj, var4.posX, var4.posY, var4.posZ, 0); + if(var5 == null) { + var5 = new ChunkCoordinates(var4.posX, var4.posY + 1, var4.posZ); + } + + this.setPosition((double)((float)var5.posX + 0.5F), (double)((float)var5.posY + this.yOffset + 0.1F), (double)((float)var5.posZ + 0.5F)); + } + + this.sleeping = false; + if(!this.worldObj.isRemote && var2) { + this.worldObj.updateAllPlayersSleepingFlag(); + } + + if(var1) { + this.sleepTimer = 0; + } else { + this.sleepTimer = 100; + } + + if(var3) { + this.setSpawnChunk(this.playerLocation, false); + } + + } + + private boolean isInBed() { + return this.worldObj.getBlockId(this.playerLocation.posX, this.playerLocation.posY, this.playerLocation.posZ) == Block.bed.blockID; + } + + public static ChunkCoordinates verifyRespawnCoordinates(World var0, ChunkCoordinates var1, boolean var2) { + IChunkProvider var3 = var0.getChunkProvider(); + var3.loadChunk(var1.posX - 3 >> 4, var1.posZ - 3 >> 4); + var3.loadChunk(var1.posX + 3 >> 4, var1.posZ - 3 >> 4); + var3.loadChunk(var1.posX - 3 >> 4, var1.posZ + 3 >> 4); + var3.loadChunk(var1.posX + 3 >> 4, var1.posZ + 3 >> 4); + if(var0.getBlockId(var1.posX, var1.posY, var1.posZ) == Block.bed.blockID) { + ChunkCoordinates var8 = BlockBed.getNearestEmptyChunkCoordinates(var0, var1.posX, var1.posY, var1.posZ, 0); + return var8; + } else { + Material var4 = var0.getBlockMaterial(var1.posX, var1.posY, var1.posZ); + Material var5 = var0.getBlockMaterial(var1.posX, var1.posY + 1, var1.posZ); + boolean var6 = !var4.isSolid() && !var4.isLiquid(); + boolean var7 = !var5.isSolid() && !var5.isLiquid(); + return var2 && var6 && var7 ? var1 : null; + } + } + + public float getBedOrientationInDegrees() { + if(this.playerLocation != null) { + int var1 = this.worldObj.getBlockMetadata(this.playerLocation.posX, this.playerLocation.posY, this.playerLocation.posZ); + int var2 = BlockBed.getDirection(var1); + switch(var2) { + case 0: + return 90.0F; + case 1: + return 0.0F; + case 2: + return 270.0F; + case 3: + return 180.0F; + } + } + + return 0.0F; + } + + public boolean isPlayerSleeping() { + return this.sleeping; + } + + public boolean isPlayerFullyAsleep() { + return this.sleeping && this.sleepTimer >= 100; + } + + public int getSleepTimer() { + return this.sleepTimer; + } + + protected boolean getHideCape(int var1) { + return (this.dataWatcher.getWatchableObjectByte(16) & 1 << var1) != 0; + } + + protected void setHideCape(int var1, boolean var2) { + byte var3 = this.dataWatcher.getWatchableObjectByte(16); + if(var2) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var3 | 1 << var1))); + } else { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var3 & ~(1 << var1)))); + } + + } + + public void addChatMessage(String var1) { + } + + public ChunkCoordinates getBedLocation() { + return this.spawnChunk; + } + + public boolean isSpawnForced() { + return this.spawnForced; + } + + public void setSpawnChunk(ChunkCoordinates var1, boolean var2) { + if(var1 != null) { + this.spawnChunk = new ChunkCoordinates(var1); + this.spawnForced = var2; + } else { + this.spawnChunk = null; + this.spawnForced = false; + } + + } + + public void triggerAchievement(StatBase var1) { + this.addStat(var1, 1); + } + + public void addStat(StatBase var1, int var2) { + } + + protected void jump() { + super.jump(); + this.addStat(StatList.jumpStat, 1); + if(this.isSprinting()) { + this.addExhaustion(0.8F); + } else { + this.addExhaustion(0.2F); + } + + } + + public void moveEntityWithHeading(float var1, float var2) { + double var3 = this.posX; + double var5 = this.posY; + double var7 = this.posZ; + if(this.capabilities.isFlying && this.ridingEntity == null) { + double var9 = this.motionY; + float var11 = this.jumpMovementFactor; + this.jumpMovementFactor = this.capabilities.getFlySpeed(); + super.moveEntityWithHeading(var1, var2); + this.motionY = var9 * 0.6D; + this.jumpMovementFactor = var11; + } else { + super.moveEntityWithHeading(var1, var2); + } + + this.addMovementStat(this.posX - var3, this.posY - var5, this.posZ - var7); + } + + public void addMovementStat(double var1, double var3, double var5) { + if(this.ridingEntity == null) { + int var7; + if(this.isInsideOfMaterial(Material.water)) { + var7 = Math.round(MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5) * 100.0F); + if(var7 > 0) { + this.addStat(StatList.distanceDoveStat, var7); + this.addExhaustion(0.015F * (float)var7 * 0.01F); + } + } else if(this.isInWater()) { + var7 = Math.round(MathHelper.sqrt_double(var1 * var1 + var5 * var5) * 100.0F); + if(var7 > 0) { + this.addStat(StatList.distanceSwumStat, var7); + this.addExhaustion(0.015F * (float)var7 * 0.01F); + } + } else if(this.isOnLadder()) { + if(var3 > 0.0D) { + this.addStat(StatList.distanceClimbedStat, (int)Math.round(var3 * 100.0D)); + } + } else if(this.onGround) { + var7 = Math.round(MathHelper.sqrt_double(var1 * var1 + var5 * var5) * 100.0F); + if(var7 > 0) { + this.addStat(StatList.distanceWalkedStat, var7); + if(this.isSprinting()) { + this.addExhaustion(10.0F * 0.01F * (float)var7 * 0.01F); + } else { + this.addExhaustion(0.01F * (float)var7 * 0.01F); + } + } + } else { + var7 = Math.round(MathHelper.sqrt_double(var1 * var1 + var5 * var5) * 100.0F); + if(var7 > 25) { + this.addStat(StatList.distanceFlownStat, var7); + } + } + + } + } + + private void addMountedMovementStat(double var1, double var3, double var5) { + if(this.ridingEntity != null) { + int var7 = Math.round(MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5) * 100.0F); + if(var7 > 0) { + if(this.ridingEntity instanceof EntityMinecart) { + this.addStat(StatList.distanceByMinecartStat, var7); + if(this.startMinecartRidingCoordinate == null) { + this.startMinecartRidingCoordinate = new ChunkCoordinates(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)); + } else if((double)this.startMinecartRidingCoordinate.getDistanceSquared(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)) >= 1000000.0D) { + this.addStat(AchievementList.onARail, 1); + } + } else if(this.ridingEntity instanceof EntityBoat) { + this.addStat(StatList.distanceByBoatStat, var7); + } else if(this.ridingEntity instanceof EntityPig) { + this.addStat(StatList.distanceByPigStat, var7); + } + } + } + + } + + protected void fall(float var1) { + if(!this.capabilities.allowFlying) { + if(var1 >= 2.0F) { + this.addStat(StatList.distanceFallenStat, (int)Math.round((double)var1 * 100.0D)); + } + + super.fall(var1); + } + } + + public void onKillEntity(EntityLiving var1) { + if(var1 instanceof IMob) { + this.triggerAchievement(AchievementList.killEnemy); + } + + } + + public void setInWeb() { + if(!this.capabilities.isFlying) { + super.setInWeb(); + } + + } + + public Icon getItemIcon(ItemStack var1, int var2) { + Icon var3 = super.getItemIcon(var1, var2); + if(var1.itemID == Item.fishingRod.itemID && this.fishEntity != null) { + var3 = Item.fishingRod.func_94597_g(); + } else { + if(var1.getItem().requiresMultipleRenderPasses()) { + return var1.getItem().getIconFromDamageForRenderPass(var1.getItemDamage(), var2); + } + + if(this.itemInUse != null && var1.itemID == Item.bow.itemID) { + int var4 = var1.getMaxItemUseDuration() - this.itemInUseCount; + if(var4 >= 18) { + return Item.bow.getItemIconForUseDuration(2); + } + + if(var4 > 13) { + return Item.bow.getItemIconForUseDuration(1); + } + + if(var4 > 0) { + return Item.bow.getItemIconForUseDuration(0); + } + } + } + + return var3; + } + + public ItemStack getCurrentArmor(int var1) { + return this.inventory.armorItemInSlot(var1); + } + + protected void addRandomArmor() { + } + + protected void func_82162_bC() { + } + + public void addExperience(int var1) { + this.addScore(var1); + int var2 = Integer.MAX_VALUE - this.experienceTotal; + if(var1 > var2) { + var1 = var2; + } + + this.experience += (float)var1 / (float)this.xpBarCap(); + + for(this.experienceTotal += var1; this.experience >= 1.0F; this.experience /= (float)this.xpBarCap()) { + this.experience = (this.experience - 1.0F) * (float)this.xpBarCap(); + this.addExperienceLevel(1); + } + + } + + public void addExperienceLevel(int var1) { + this.experienceLevel += var1; + if(this.experienceLevel < 0) { + this.experienceLevel = 0; + this.experience = 0.0F; + this.experienceTotal = 0; + } + + if(var1 > 0 && this.experienceLevel % 5 == 0 && (float)this.field_82249_h < (float)this.ticksExisted - 100.0F) { + float var2 = this.experienceLevel > 30 ? 1.0F : (float)this.experienceLevel / 30.0F; + this.worldObj.playSoundAtEntity(this, "random.levelup", var2 * (12.0F / 16.0F), 1.0F); + this.field_82249_h = this.ticksExisted; + } + + } + + public int xpBarCap() { + return this.experienceLevel >= 30 ? 62 + (this.experienceLevel - 30) * 7 : (this.experienceLevel >= 15 ? 17 + (this.experienceLevel - 15) * 3 : 17); + } + + public void addExhaustion(float var1) { + if(!this.capabilities.disableDamage) { + if(!this.worldObj.isRemote) { + this.foodStats.addExhaustion(var1); + } + + } + } + + public FoodStats getFoodStats() { + return this.foodStats; + } + + public boolean canEat(boolean var1) { + return (var1 || this.foodStats.needFood()) && !this.capabilities.disableDamage; + } + + public boolean shouldHeal() { + return this.getHealth() > 0 && this.getHealth() < this.getMaxHealth(); + } + + public void setItemInUse(ItemStack var1, int var2) { + if(var1 != this.itemInUse) { + this.itemInUse = var1; + this.itemInUseCount = var2; + if(!this.worldObj.isRemote) { + this.setEating(true); + } + + } + } + + public boolean canCurrentToolHarvestBlock(int var1, int var2, int var3) { + if(this.capabilities.allowEdit) { + return true; + } else { + int var4 = this.worldObj.getBlockId(var1, var2, var3); + if(var4 > 0) { + Block var5 = Block.blocksList[var4]; + if(var5.blockMaterial.isAlwaysHarvested()) { + return true; + } + + if(this.getCurrentEquippedItem() != null) { + ItemStack var6 = this.getCurrentEquippedItem(); + if(var6.canHarvestBlock(var5) || var6.getStrVsBlock(var5) > 1.0F) { + return true; + } + } + } + + return false; + } + } + + public boolean canPlayerEdit(int var1, int var2, int var3, int var4, ItemStack var5) { + return this.capabilities.allowEdit ? true : (var5 != null ? var5.func_82835_x() : false); + } + + protected int getExperiencePoints(EntityPlayer var1) { + if(this.worldObj.getGameRules().getGameRuleBooleanValue("keepInventory")) { + return 0; + } else { + int var2 = this.experienceLevel * 7; + return var2 > 100 ? 100 : var2; + } + } + + protected boolean isPlayer() { + return true; + } + + public String getEntityName() { + return this.username; + } + + public boolean func_94062_bN() { + return super.func_94062_bN(); + } + + public boolean func_94059_bO() { + return true; + } + + public boolean canPickUpLoot() { + return false; + } + + public void clonePlayer(EntityPlayer var1, boolean var2) { + if(var2) { + this.inventory.copyInventory(var1.inventory); + this.health = var1.health; + this.foodStats = var1.foodStats; + this.experienceLevel = var1.experienceLevel; + this.experienceTotal = var1.experienceTotal; + this.experience = var1.experience; + this.setScore(var1.getScore()); + this.teleportDirection = var1.teleportDirection; + } else if(this.worldObj.getGameRules().getGameRuleBooleanValue("keepInventory")) { + this.inventory.copyInventory(var1.inventory); + this.experienceLevel = var1.experienceLevel; + this.experienceTotal = var1.experienceTotal; + this.experience = var1.experience; + this.setScore(var1.getScore()); + } + + this.theInventoryEnderChest = var1.theInventoryEnderChest; + } + + protected boolean canTriggerWalking() { + return !this.capabilities.isFlying; + } + + public void sendPlayerAbilities() { + } + + public void setGameType(EnumGameType var1) { + } + + public String getCommandSenderName() { + return this.username; + } + + public StringTranslate getTranslator() { + return StringTranslate.getInstance(); + } + + public String translateString(String var1, Object... var2) { + return this.getTranslator().translateKeyFormat(var1, var2); + } + + public InventoryEnderChest getInventoryEnderChest() { + return this.theInventoryEnderChest; + } + + public ItemStack getCurrentItemOrArmor(int var1) { + return var1 == 0 ? this.inventory.getCurrentItem() : this.inventory.armorInventory[var1 - 1]; + } + + public ItemStack getHeldItem() { + return this.inventory.getCurrentItem(); + } + + public void setCurrentItemOrArmor(int var1, ItemStack var2) { + this.inventory.armorInventory[var1] = var2; + } + + public boolean func_98034_c(EntityPlayer var1) { + if(!this.isInvisible()) { + return false; + } else { + ScorePlayerTeam var2 = this.getTeam(); + return var2 == null || var1 == null || var1.getTeam() != var2 || !var2.func_98297_h(); + } + } + + public ItemStack[] getLastActiveItems() { + return this.inventory.armorInventory; + } + + public boolean getHideCape() { + return this.getHideCape(1); + } + + public boolean func_96092_aw() { + return !this.capabilities.isFlying; + } + + public Scoreboard getWorldScoreboard() { + return this.worldObj.getScoreboard(); + } + + public ScorePlayerTeam getTeam() { + return this.getWorldScoreboard().getPlayersTeam(this.username); + } + + public String getTranslatedEntityName() { + return ScorePlayerTeam.func_96667_a(this.getTeam(), this.username); + } +} diff --git a/src/net/minecraft/src/EntityPlayerMP.java b/src/net/minecraft/src/EntityPlayerMP.java new file mode 100644 index 0000000..a649faa --- /dev/null +++ b/src/net/minecraft/src/EntityPlayerMP.java @@ -0,0 +1,624 @@ +package net.minecraft.src; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class EntityPlayerMP extends EntityPlayer implements ICrafting { + private StringTranslate translator = new StringTranslate("en_US"); + public NetServerHandler playerNetServerHandler; + public MinecraftServer mcServer; + public ItemInWorldManager theItemInWorldManager; + public double managedPosX; + public double managedPosZ; + public final List loadedChunks = new LinkedList(); + public final List destroyedItemsNetCache = new LinkedList(); + private int lastHealth = -99999999; + private int lastFoodLevel = -99999999; + private boolean wasHungry = true; + private int lastExperience = -99999999; + private int initialInvulnerability = 60; + private int renderDistance = 0; + private int chatVisibility = 0; + private boolean chatColours = true; + private int currentWindowId = 0; + public boolean playerInventoryBeingManipulated; + public int ping; + public boolean playerConqueredTheEnd = false; + + public EntityPlayerMP(MinecraftServer var1, World var2, String var3, ItemInWorldManager var4) { + super(var2); + var4.thisPlayerMP = this; + this.theItemInWorldManager = var4; + this.renderDistance = var1.getConfigurationManager().getViewDistance(); + ChunkCoordinates var5 = var2.getSpawnPoint(); + int var6 = var5.posX; + int var7 = var5.posZ; + int var8 = var5.posY; + if(!var2.provider.hasNoSky && var2.getWorldInfo().getGameType() != EnumGameType.ADVENTURE) { + int var9 = Math.max(5, var1.getSpawnProtectionSize() - 6); + var6 += this.rand.nextInt(var9 * 2) - var9; + var7 += this.rand.nextInt(var9 * 2) - var9; + var8 = var2.getTopSolidOrLiquidBlock(var6, var7); + } + + this.mcServer = var1; + this.stepHeight = 0.0F; + this.username = var3; + this.yOffset = 0.0F; + this.setLocationAndAngles((double)var6 + 0.5D, (double)var8, (double)var7 + 0.5D, 0.0F, 0.0F); + + while(!var2.getCollidingBoundingBoxes(this, this.boundingBox).isEmpty()) { + this.setPosition(this.posX, this.posY + 1.0D, this.posZ); + } + + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + if(var1.hasKey("playerGameType")) { + if(MinecraftServer.getServer().func_104056_am()) { + this.theItemInWorldManager.setGameType(MinecraftServer.getServer().getGameType()); + } else { + this.theItemInWorldManager.setGameType(EnumGameType.getByID(var1.getInteger("playerGameType"))); + } + } + + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setInteger("playerGameType", this.theItemInWorldManager.getGameType().getID()); + } + + public void addExperienceLevel(int var1) { + super.addExperienceLevel(var1); + this.lastExperience = -1; + } + + public void addSelfToInternalCraftingInventory() { + this.openContainer.addCraftingToCrafters(this); + } + + protected void resetHeight() { + this.yOffset = 0.0F; + } + + public float getEyeHeight() { + return 1.62F; + } + + public void onUpdate() { + this.theItemInWorldManager.updateBlockRemoving(); + --this.initialInvulnerability; + this.openContainer.detectAndSendChanges(); + + while(!this.destroyedItemsNetCache.isEmpty()) { + int var1 = Math.min(this.destroyedItemsNetCache.size(), 127); + int[] var2 = new int[var1]; + Iterator var3 = this.destroyedItemsNetCache.iterator(); + int var4 = 0; + + while(var3.hasNext() && var4 < var1) { + var2[var4++] = ((Integer)var3.next()).intValue(); + var3.remove(); + } + + this.playerNetServerHandler.sendPacketToPlayer(new Packet29DestroyEntity(var2)); + } + + if(!this.loadedChunks.isEmpty()) { + ArrayList var6 = new ArrayList(); + Iterator var7 = this.loadedChunks.iterator(); + ArrayList var8 = new ArrayList(); + + while(var7.hasNext() && var6.size() < 5) { + ChunkCoordIntPair var9 = (ChunkCoordIntPair)var7.next(); + var7.remove(); + if(var9 != null && this.worldObj.blockExists(var9.chunkXPos << 4, 0, var9.chunkZPos << 4)) { + var6.add(this.worldObj.getChunkFromChunkCoords(var9.chunkXPos, var9.chunkZPos)); + var8.addAll(((WorldServer)this.worldObj).getAllTileEntityInBox(var9.chunkXPos * 16, 0, var9.chunkZPos * 16, var9.chunkXPos * 16 + 16, 256, var9.chunkZPos * 16 + 16)); + } + } + + if(!var6.isEmpty()) { + this.playerNetServerHandler.sendPacketToPlayer(new Packet56MapChunks(var6)); + Iterator var10 = var8.iterator(); + + while(var10.hasNext()) { + TileEntity var5 = (TileEntity)var10.next(); + this.sendTileEntityToPlayer(var5); + } + + var10 = var6.iterator(); + + while(var10.hasNext()) { + Chunk var11 = (Chunk)var10.next(); + this.getServerForPlayer().getEntityTracker().func_85172_a(this, var11); + } + } + } + + } + + public void setEntityHealth(int var1) { + super.setEntityHealth(var1); + Collection var2 = this.getWorldScoreboard().func_96520_a(ScoreObjectiveCriteria.field_96638_f); + Iterator var3 = var2.iterator(); + + while(var3.hasNext()) { + ScoreObjective var4 = (ScoreObjective)var3.next(); + this.getWorldScoreboard().func_96529_a(this.getEntityName(), var4).func_96651_a(Arrays.asList(new EntityPlayer[]{this})); + } + + } + + public void onUpdateEntity() { + try { + super.onUpdate(); + + for(int var1 = 0; var1 < this.inventory.getSizeInventory(); ++var1) { + ItemStack var5 = this.inventory.getStackInSlot(var1); + if(var5 != null && Item.itemsList[var5.itemID].isMap() && this.playerNetServerHandler.packetSize() <= 5) { + Packet var6 = ((ItemMapBase)Item.itemsList[var5.itemID]).createMapDataPacket(var5, this.worldObj, this); + if(var6 != null) { + this.playerNetServerHandler.sendPacketToPlayer(var6); + } + } + } + + if(this.getHealth() != this.lastHealth || this.lastFoodLevel != this.foodStats.getFoodLevel() || this.foodStats.getSaturationLevel() == 0.0F != this.wasHungry) { + this.playerNetServerHandler.sendPacketToPlayer(new Packet8UpdateHealth(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.experienceTotal != this.lastExperience) { + this.lastExperience = this.experienceTotal; + this.playerNetServerHandler.sendPacketToPlayer(new Packet43Experience(this.experience, this.experienceTotal, this.experienceLevel)); + } + + } catch (Throwable var4) { + CrashReport var2 = CrashReport.makeCrashReport(var4, "Ticking player"); + CrashReportCategory var3 = var2.makeCategory("Player being ticked"); + this.func_85029_a(var3); + throw new ReportedException(var2); + } + } + + public void onDeath(DamageSource var1) { + this.mcServer.getConfigurationManager().sendChatMsg(this.field_94063_bt.func_94546_b()); + if(!this.worldObj.getGameRules().getGameRuleBooleanValue("keepInventory")) { + this.inventory.dropAllItems(); + } + + Collection var2 = this.worldObj.getScoreboard().func_96520_a(ScoreObjectiveCriteria.field_96642_c); + Iterator var3 = var2.iterator(); + + while(var3.hasNext()) { + ScoreObjective var4 = (ScoreObjective)var3.next(); + Score var5 = this.getWorldScoreboard().func_96529_a(this.getEntityName(), var4); + var5.func_96648_a(); + } + + EntityLiving var6 = this.func_94060_bK(); + if(var6 != null) { + var6.addToPlayerScore(this, this.scoreValue); + } + + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else { + boolean var3 = this.mcServer.isDedicatedServer() && this.mcServer.isPVPEnabled() && "fall".equals(var1.damageType); + if(!var3 && this.initialInvulnerability > 0 && var1 != DamageSource.outOfWorld) { + return false; + } else { + if(var1 instanceof EntityDamageSource) { + Entity var4 = var1.getEntity(); + if(var4 instanceof EntityPlayer && !this.func_96122_a((EntityPlayer)var4)) { + return false; + } + + if(var4 instanceof EntityArrow) { + EntityArrow var5 = (EntityArrow)var4; + if(var5.shootingEntity instanceof EntityPlayer && !this.func_96122_a((EntityPlayer)var5.shootingEntity)) { + return false; + } + } + } + + return super.attackEntityFrom(var1, var2); + } + } + } + + public boolean func_96122_a(EntityPlayer var1) { + return !this.mcServer.isPVPEnabled() ? false : super.func_96122_a(var1); + } + + public void travelToDimension(int var1) { + if(this.dimension == 1 && var1 == 1) { + this.triggerAchievement(AchievementList.theEnd2); + this.worldObj.removeEntity(this); + this.playerConqueredTheEnd = true; + this.playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(4, 0)); + } else { + if(this.dimension == 1 && var1 == 0) { + this.triggerAchievement(AchievementList.theEnd); + ChunkCoordinates var2 = this.mcServer.worldServerForDimension(var1).getEntrancePortalLocation(); + if(var2 != null) { + this.playerNetServerHandler.setPlayerLocation((double)var2.posX, (double)var2.posY, (double)var2.posZ, 0.0F, 0.0F); + } + + var1 = 1; + } else { + this.triggerAchievement(AchievementList.portal); + } + + this.mcServer.getConfigurationManager().transferPlayerToDimension(this, var1); + this.lastExperience = -1; + this.lastHealth = -1; + this.lastFoodLevel = -1; + } + + } + + private void sendTileEntityToPlayer(TileEntity var1) { + if(var1 != null) { + Packet var2 = var1.getDescriptionPacket(); + if(var2 != null) { + this.playerNetServerHandler.sendPacketToPlayer(var2); + } + } + + } + + public void onItemPickup(Entity var1, int var2) { + super.onItemPickup(var1, var2); + this.openContainer.detectAndSendChanges(); + } + + public EnumStatus sleepInBedAt(int var1, int var2, int var3) { + EnumStatus var4 = super.sleepInBedAt(var1, var2, var3); + if(var4 == EnumStatus.OK) { + Packet17Sleep var5 = new Packet17Sleep(this, 0, var1, var2, var3); + this.getServerForPlayer().getEntityTracker().sendPacketToAllPlayersTrackingEntity(this, var5); + this.playerNetServerHandler.setPlayerLocation(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + this.playerNetServerHandler.sendPacketToPlayer(var5); + } + + return var4; + } + + public void wakeUpPlayer(boolean var1, boolean var2, boolean var3) { + if(this.isPlayerSleeping()) { + this.getServerForPlayer().getEntityTracker().sendPacketToAllAssociatedPlayers(this, new Packet18Animation(this, 3)); + } + + super.wakeUpPlayer(var1, var2, var3); + if(this.playerNetServerHandler != null) { + this.playerNetServerHandler.setPlayerLocation(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + } + + } + + public void mountEntity(Entity var1) { + super.mountEntity(var1); + this.playerNetServerHandler.sendPacketToPlayer(new Packet39AttachEntity(this, this.ridingEntity)); + this.playerNetServerHandler.setPlayerLocation(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + } + + protected void updateFallState(double var1, boolean var3) { + } + + public void updateFlyingState(double var1, boolean var3) { + super.updateFallState(var1, var3); + } + + private void incrementWindowID() { + this.currentWindowId = this.currentWindowId % 100 + 1; + } + + public void displayGUIWorkbench(int var1, int var2, int var3) { + this.incrementWindowID(); + this.playerNetServerHandler.sendPacketToPlayer(new Packet100OpenWindow(this.currentWindowId, 1, "Crafting", 9, true)); + this.openContainer = new ContainerWorkbench(this.inventory, this.worldObj, var1, var2, var3); + this.openContainer.windowId = this.currentWindowId; + this.openContainer.addCraftingToCrafters(this); + } + + public void displayGUIEnchantment(int var1, int var2, int var3, String var4) { + this.incrementWindowID(); + this.playerNetServerHandler.sendPacketToPlayer(new Packet100OpenWindow(this.currentWindowId, 4, var4 == null ? "" : var4, 9, var4 != null)); + this.openContainer = new ContainerEnchantment(this.inventory, this.worldObj, var1, var2, var3); + this.openContainer.windowId = this.currentWindowId; + this.openContainer.addCraftingToCrafters(this); + } + + public void displayGUIAnvil(int var1, int var2, int var3) { + this.incrementWindowID(); + this.playerNetServerHandler.sendPacketToPlayer(new Packet100OpenWindow(this.currentWindowId, 8, "Repairing", 9, true)); + this.openContainer = new ContainerRepair(this.inventory, this.worldObj, var1, var2, var3, this); + this.openContainer.windowId = this.currentWindowId; + this.openContainer.addCraftingToCrafters(this); + } + + public void displayGUIChest(IInventory var1) { + if(this.openContainer != this.inventoryContainer) { + this.closeScreen(); + } + + this.incrementWindowID(); + this.playerNetServerHandler.sendPacketToPlayer(new Packet100OpenWindow(this.currentWindowId, 0, var1.getInvName(), var1.getSizeInventory(), var1.isInvNameLocalized())); + this.openContainer = new ContainerChest(this.inventory, var1); + this.openContainer.windowId = this.currentWindowId; + this.openContainer.addCraftingToCrafters(this); + } + + public void displayGUIHopper(TileEntityHopper var1) { + this.incrementWindowID(); + this.playerNetServerHandler.sendPacketToPlayer(new Packet100OpenWindow(this.currentWindowId, 9, var1.getInvName(), var1.getSizeInventory(), var1.isInvNameLocalized())); + this.openContainer = new ContainerHopper(this.inventory, var1); + this.openContainer.windowId = this.currentWindowId; + this.openContainer.addCraftingToCrafters(this); + } + + public void displayGUIHopperMinecart(EntityMinecartHopper var1) { + this.incrementWindowID(); + this.playerNetServerHandler.sendPacketToPlayer(new Packet100OpenWindow(this.currentWindowId, 9, var1.getInvName(), var1.getSizeInventory(), var1.isInvNameLocalized())); + this.openContainer = new ContainerHopper(this.inventory, var1); + this.openContainer.windowId = this.currentWindowId; + this.openContainer.addCraftingToCrafters(this); + } + + public void displayGUIFurnace(TileEntityFurnace var1) { + this.incrementWindowID(); + this.playerNetServerHandler.sendPacketToPlayer(new Packet100OpenWindow(this.currentWindowId, 2, var1.getInvName(), var1.getSizeInventory(), var1.isInvNameLocalized())); + this.openContainer = new ContainerFurnace(this.inventory, var1); + this.openContainer.windowId = this.currentWindowId; + this.openContainer.addCraftingToCrafters(this); + } + + public void displayGUIDispenser(TileEntityDispenser var1) { + this.incrementWindowID(); + this.playerNetServerHandler.sendPacketToPlayer(new Packet100OpenWindow(this.currentWindowId, var1 instanceof TileEntityDropper ? 10 : 3, var1.getInvName(), var1.getSizeInventory(), var1.isInvNameLocalized())); + this.openContainer = new ContainerDispenser(this.inventory, var1); + this.openContainer.windowId = this.currentWindowId; + this.openContainer.addCraftingToCrafters(this); + } + + public void displayGUIBrewingStand(TileEntityBrewingStand var1) { + this.incrementWindowID(); + this.playerNetServerHandler.sendPacketToPlayer(new Packet100OpenWindow(this.currentWindowId, 5, var1.getInvName(), var1.getSizeInventory(), var1.isInvNameLocalized())); + this.openContainer = new ContainerBrewingStand(this.inventory, var1); + this.openContainer.windowId = this.currentWindowId; + this.openContainer.addCraftingToCrafters(this); + } + + public void displayGUIBeacon(TileEntityBeacon var1) { + this.incrementWindowID(); + this.playerNetServerHandler.sendPacketToPlayer(new Packet100OpenWindow(this.currentWindowId, 7, var1.getInvName(), var1.getSizeInventory(), var1.isInvNameLocalized())); + this.openContainer = new ContainerBeacon(this.inventory, var1); + this.openContainer.windowId = this.currentWindowId; + this.openContainer.addCraftingToCrafters(this); + } + + public void displayGUIMerchant(IMerchant var1, String var2) { + this.incrementWindowID(); + this.openContainer = new ContainerMerchant(this.inventory, var1, this.worldObj); + this.openContainer.windowId = this.currentWindowId; + this.openContainer.addCraftingToCrafters(this); + InventoryMerchant var3 = ((ContainerMerchant)this.openContainer).getMerchantInventory(); + this.playerNetServerHandler.sendPacketToPlayer(new Packet100OpenWindow(this.currentWindowId, 6, var2 == null ? "" : var2, var3.getSizeInventory(), var2 != null)); + MerchantRecipeList var4 = var1.getRecipes(this); + if(var4 != null) { + try { + ByteArrayOutputStream var5 = new ByteArrayOutputStream(); + DataOutputStream var6 = new DataOutputStream(var5); + var6.writeInt(this.currentWindowId); + var4.writeRecipiesToStream(var6); + this.playerNetServerHandler.sendPacketToPlayer(new Packet250CustomPayload("MC|TrList", var5.toByteArray())); + } catch (IOException var7) { + var7.printStackTrace(); + } + } + + } + + public void sendSlotContents(Container var1, int var2, ItemStack var3) { + if(!(var1.getSlot(var2) instanceof SlotCrafting)) { + if(!this.playerInventoryBeingManipulated) { + this.playerNetServerHandler.sendPacketToPlayer(new Packet103SetSlot(var1.windowId, var2, var3)); + } + } + } + + public void sendContainerToPlayer(Container var1) { + this.sendContainerAndContentsToPlayer(var1, var1.getInventory()); + } + + public void sendContainerAndContentsToPlayer(Container var1, List var2) { + this.playerNetServerHandler.sendPacketToPlayer(new Packet104WindowItems(var1.windowId, var2)); + this.playerNetServerHandler.sendPacketToPlayer(new Packet103SetSlot(-1, -1, this.inventory.getItemStack())); + } + + public void sendProgressBarUpdate(Container var1, int var2, int var3) { + this.playerNetServerHandler.sendPacketToPlayer(new Packet105UpdateProgressbar(var1.windowId, var2, var3)); + } + + public void closeScreen() { + this.playerNetServerHandler.sendPacketToPlayer(new Packet101CloseWindow(this.openContainer.windowId)); + this.closeInventory(); + } + + public void updateHeldItem() { + if(!this.playerInventoryBeingManipulated) { + this.playerNetServerHandler.sendPacketToPlayer(new Packet103SetSlot(-1, -1, this.inventory.getItemStack())); + } + } + + public void closeInventory() { + this.openContainer.onCraftGuiClosed(this); + this.openContainer = this.inventoryContainer; + } + + public void addStat(StatBase var1, int var2) { + if(var1 != null) { + if(!var1.isIndependent) { + while(var2 > 100) { + this.playerNetServerHandler.sendPacketToPlayer(new Packet200Statistic(var1.statId, 100)); + var2 -= 100; + } + + this.playerNetServerHandler.sendPacketToPlayer(new Packet200Statistic(var1.statId, var2)); + } + + } + } + + public void mountEntityAndWakeUp() { + if(this.riddenByEntity != null) { + this.riddenByEntity.mountEntity(this); + } + + if(this.sleeping) { + this.wakeUpPlayer(true, false, false); + } + + } + + public void setPlayerHealthUpdated() { + this.lastHealth = -99999999; + } + + public void addChatMessage(String var1) { + StringTranslate var2 = StringTranslate.getInstance(); + String var3 = var2.translateKey(var1); + this.playerNetServerHandler.sendPacketToPlayer(new Packet3Chat(var3)); + } + + protected void onItemUseFinish() { + this.playerNetServerHandler.sendPacketToPlayer(new Packet38EntityStatus(this.entityId, (byte)9)); + super.onItemUseFinish(); + } + + public void setItemInUse(ItemStack var1, int var2) { + super.setItemInUse(var1, var2); + if(var1 != null && var1.getItem() != null && var1.getItem().getItemUseAction(var1) == EnumAction.eat) { + this.getServerForPlayer().getEntityTracker().sendPacketToAllAssociatedPlayers(this, new Packet18Animation(this, 5)); + } + + } + + public void clonePlayer(EntityPlayer var1, boolean var2) { + super.clonePlayer(var1, var2); + this.lastExperience = -1; + this.lastHealth = -1; + this.lastFoodLevel = -1; + this.destroyedItemsNetCache.addAll(((EntityPlayerMP)var1).destroyedItemsNetCache); + } + + protected void onNewPotionEffect(PotionEffect var1) { + super.onNewPotionEffect(var1); + this.playerNetServerHandler.sendPacketToPlayer(new Packet41EntityEffect(this.entityId, var1)); + } + + protected void onChangedPotionEffect(PotionEffect var1) { + super.onChangedPotionEffect(var1); + this.playerNetServerHandler.sendPacketToPlayer(new Packet41EntityEffect(this.entityId, var1)); + } + + protected void onFinishedPotionEffect(PotionEffect var1) { + super.onFinishedPotionEffect(var1); + this.playerNetServerHandler.sendPacketToPlayer(new Packet42RemoveEntityEffect(this.entityId, var1)); + } + + public void setPositionAndUpdate(double var1, double var3, double var5) { + this.playerNetServerHandler.setPlayerLocation(var1, var3, var5, this.rotationYaw, this.rotationPitch); + } + + public void onCriticalHit(Entity var1) { + this.getServerForPlayer().getEntityTracker().sendPacketToAllAssociatedPlayers(this, new Packet18Animation(var1, 6)); + } + + public void onEnchantmentCritical(Entity var1) { + this.getServerForPlayer().getEntityTracker().sendPacketToAllAssociatedPlayers(this, new Packet18Animation(var1, 7)); + } + + public void sendPlayerAbilities() { + if(this.playerNetServerHandler != null) { + this.playerNetServerHandler.sendPacketToPlayer(new Packet202PlayerAbilities(this.capabilities)); + } + } + + public WorldServer getServerForPlayer() { + return (WorldServer)this.worldObj; + } + + public void setGameType(EnumGameType var1) { + this.theItemInWorldManager.setGameType(var1); + this.playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(3, var1.getID())); + } + + public void sendChatToPlayer(String var1) { + this.playerNetServerHandler.sendPacketToPlayer(new Packet3Chat(var1)); + } + + public boolean canCommandSenderUseCommand(int var1, String var2) { + return "seed".equals(var2) && !this.mcServer.isDedicatedServer() ? true : (!"tell".equals(var2) && !"help".equals(var2) && !"me".equals(var2) ? this.mcServer.getConfigurationManager().areCommandsAllowed(this.username) : true); + } + + public String getPlayerIP() { + String var1 = this.playerNetServerHandler.netManager.getSocketAddress().toString(); + var1 = var1.substring(var1.indexOf("/") + 1); + var1 = var1.substring(0, var1.indexOf(":")); + return var1; + } + + public void updateClientInfo(Packet204ClientInfo var1) { + if(this.translator.getLanguageList().containsKey(var1.getLanguage())) { + this.translator.setLanguage(var1.getLanguage(), false); + } + + int var2 = 256 >> var1.getRenderDistance(); + if(var2 > 3 && var2 < 15) { + this.renderDistance = var2; + } + + this.chatVisibility = var1.getChatVisibility(); + this.chatColours = var1.getChatColours(); + if(this.mcServer.isSinglePlayer() && this.mcServer.getServerOwner().equals(this.username)) { + this.mcServer.setDifficultyForAllWorlds(var1.getDifficulty()); + } + + this.setHideCape(1, !var1.getShowCape()); + } + + public StringTranslate getTranslator() { + return this.translator; + } + + public int getChatVisibility() { + return this.chatVisibility; + } + + public void requestTexturePackLoad(String var1, int var2) { + String var3 = var1 + "\u0000" + var2; + this.playerNetServerHandler.sendPacketToPlayer(new Packet250CustomPayload("MC|TPack", var3.getBytes())); + } + + public ChunkCoordinates getPlayerCoordinates() { + return new ChunkCoordinates(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY + 0.5D), MathHelper.floor_double(this.posZ)); + } +} diff --git a/src/net/minecraft/src/EntityPlayerSP.java b/src/net/minecraft/src/EntityPlayerSP.java new file mode 100644 index 0000000..3f2151d --- /dev/null +++ b/src/net/minecraft/src/EntityPlayerSP.java @@ -0,0 +1,412 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +public class EntityPlayerSP extends EntityPlayer { + public MovementInput movementInput; + protected Minecraft mc; + protected int sprintToggleTimer = 0; + public int sprintingTicksLeft = 0; + public float renderArmYaw; + public float renderArmPitch; + public float prevRenderArmYaw; + public float prevRenderArmPitch; + private MouseFilter field_71162_ch = new MouseFilter(); + private MouseFilter field_71160_ci = new MouseFilter(); + private MouseFilter field_71161_cj = new MouseFilter(); + public float timeInPortal; + public float prevTimeInPortal; + + public EntityPlayerSP(Minecraft var1, World var2, Session var3, int var4) { + super(var2); + this.mc = var1; + this.dimension = var4; + if(var3 != null && var3.username != null && var3.username.length() > 0) { + this.skinUrl = "http://skins.minecraft.net/MinecraftSkins/" + StringUtils.stripControlCodes(var3.username) + ".png"; + } + + this.username = var3.username; + } + + public void moveEntity(double var1, double var3, double var5) { + super.moveEntity(var1, var3, var5); + } + + public void updateEntityActionState() { + super.updateEntityActionState(); + 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 isClientWorld() { + return true; + } + + public void onLivingUpdate() { + if(this.sprintingTicksLeft > 0) { + --this.sprintingTicksLeft; + if(this.sprintingTicksLeft == 0) { + this.setSprinting(false); + } + } + + if(this.sprintToggleTimer > 0) { + --this.sprintToggleTimer; + } + + if(this.mc.playerController.enableEverythingIsScrewedUpMode()) { + this.posX = this.posZ = 0.5D; + this.posX = 0.0D; + this.posZ = 0.0D; + this.rotationYaw = (float)this.ticksExisted / 12.0F; + this.rotationPitch = 10.0F; + this.posY = 68.5D; + } else { + if(!this.mc.statFileWriter.hasAchievementUnlocked(AchievementList.openInventory)) { + this.mc.guiAchievement.queueAchievementInformation(AchievementList.openInventory); + } + + this.prevTimeInPortal = this.timeInPortal; + if(this.inPortal) { + if(this.mc.currentScreen != null) { + this.mc.displayGuiScreen((GuiScreen)null); + } + + if(this.timeInPortal == 0.0F) { + this.mc.sndManager.playSoundFX("portal.trigger", 1.0F, 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(Potion.confusion) && this.getActivePotionEffect(Potion.confusion).getDuration() > 60) { + this.timeInPortal += 2.0F / 3.0F * 0.01F; + 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 var1 = this.movementInput.jump; + float var2 = 0.8F; + boolean var3 = this.movementInput.moveForward >= var2; + this.movementInput.updatePlayerMoveState(); + if(this.isUsingItem()) { + this.movementInput.moveStrafe *= 0.2F; + this.movementInput.moveForward *= 0.2F; + this.sprintToggleTimer = 0; + } + + if(this.movementInput.sneak && this.ySize < 0.2F) { + this.ySize = 0.2F; + } + + this.pushOutOfBlocks(this.posX - (double)this.width * 0.35D, this.boundingBox.minY + 0.5D, this.posZ + (double)this.width * 0.35D); + this.pushOutOfBlocks(this.posX - (double)this.width * 0.35D, this.boundingBox.minY + 0.5D, this.posZ - (double)this.width * 0.35D); + this.pushOutOfBlocks(this.posX + (double)this.width * 0.35D, this.boundingBox.minY + 0.5D, this.posZ - (double)this.width * 0.35D); + this.pushOutOfBlocks(this.posX + (double)this.width * 0.35D, this.boundingBox.minY + 0.5D, this.posZ + (double)this.width * 0.35D); + boolean var4 = (float)this.getFoodStats().getFoodLevel() > 6.0F || this.capabilities.allowFlying; + if(this.onGround && !var3 && this.movementInput.moveForward >= var2 && !this.isSprinting() && var4 && !this.isUsingItem() && !this.isPotionActive(Potion.blindness)) { + if(this.sprintToggleTimer == 0) { + this.sprintToggleTimer = 7; + } else { + this.setSprinting(true); + this.sprintToggleTimer = 0; + } + } + + if(this.isSneaking()) { + this.sprintToggleTimer = 0; + } + + if(this.isSprinting() && (this.movementInput.moveForward < var2 || this.isCollidedHorizontally || !var4)) { + this.setSprinting(false); + } + + if(this.capabilities.allowFlying && !var1 && this.movementInput.jump) { + if(this.flyToggleTimer == 0) { + this.flyToggleTimer = 7; + } else { + this.capabilities.isFlying = !this.capabilities.isFlying; + this.sendPlayerAbilities(); + this.flyToggleTimer = 0; + } + } + + if(this.capabilities.isFlying) { + if(this.movementInput.sneak) { + this.motionY -= 0.15D; + } + + if(this.movementInput.jump) { + this.motionY += 0.15D; + } + } + + super.onLivingUpdate(); + if(this.onGround && this.capabilities.isFlying) { + this.capabilities.isFlying = false; + this.sendPlayerAbilities(); + } + + } + } + + public float getFOVMultiplier() { + float var1 = 1.0F; + if(this.capabilities.isFlying) { + var1 *= 1.1F; + } + + var1 *= (this.landMovementFactor * this.getSpeedModifier() / this.speedOnGround + 1.0F) / 2.0F; + if(this.isUsingItem() && this.getItemInUse().itemID == Item.bow.itemID) { + int var2 = this.getItemInUseDuration(); + float var3 = (float)var2 / 20.0F; + if(var3 > 1.0F) { + var3 = 1.0F; + } else { + var3 *= var3; + } + + var1 *= 1.0F - var3 * 0.15F; + } + + return var1; + } + + public void updateCloak() { + this.cloakUrl = "http://skins.minecraft.net/MinecraftCloaks/" + StringUtils.stripControlCodes(this.username) + ".png"; + } + + public void closeScreen() { + super.closeScreen(); + this.mc.displayGuiScreen((GuiScreen)null); + } + + public void displayGUIEditSign(TileEntity var1) { + if(var1 instanceof TileEntitySign) { + this.mc.displayGuiScreen(new GuiEditSign((TileEntitySign)var1)); + } else if(var1 instanceof TileEntityCommandBlock) { + this.mc.displayGuiScreen(new GuiCommandBlock((TileEntityCommandBlock)var1)); + } + + } + + public void displayGUIBook(ItemStack var1) { + Item var2 = var1.getItem(); + if(var2 == Item.writtenBook) { + this.mc.displayGuiScreen(new GuiScreenBook(this, var1, false)); + } else if(var2 == Item.writableBook) { + this.mc.displayGuiScreen(new GuiScreenBook(this, var1, true)); + } + + } + + public void displayGUIChest(IInventory var1) { + this.mc.displayGuiScreen(new GuiChest(this.inventory, var1)); + } + + public void displayGUIHopper(TileEntityHopper var1) { + this.mc.displayGuiScreen(new GuiHopper(this.inventory, var1)); + } + + public void displayGUIHopperMinecart(EntityMinecartHopper var1) { + this.mc.displayGuiScreen(new GuiHopper(this.inventory, var1)); + } + + public void displayGUIWorkbench(int var1, int var2, int var3) { + this.mc.displayGuiScreen(new GuiCrafting(this.inventory, this.worldObj, var1, var2, var3)); + } + + public void displayGUIEnchantment(int var1, int var2, int var3, String var4) { + this.mc.displayGuiScreen(new GuiEnchantment(this.inventory, this.worldObj, var1, var2, var3, var4)); + } + + public void displayGUIAnvil(int var1, int var2, int var3) { + this.mc.displayGuiScreen(new GuiRepair(this.inventory, this.worldObj, var1, var2, var3)); + } + + public void displayGUIFurnace(TileEntityFurnace var1) { + this.mc.displayGuiScreen(new GuiFurnace(this.inventory, var1)); + } + + public void displayGUIBrewingStand(TileEntityBrewingStand var1) { + this.mc.displayGuiScreen(new GuiBrewingStand(this.inventory, var1)); + } + + public void displayGUIBeacon(TileEntityBeacon var1) { + this.mc.displayGuiScreen(new GuiBeacon(this.inventory, var1)); + } + + public void displayGUIDispenser(TileEntityDispenser var1) { + this.mc.displayGuiScreen(new GuiDispenser(this.inventory, var1)); + } + + public void displayGUIMerchant(IMerchant var1, String var2) { + this.mc.displayGuiScreen(new GuiMerchant(this.inventory, var1, this.worldObj, var2)); + } + + public void onCriticalHit(Entity var1) { + this.mc.effectRenderer.addEffect(new EntityCrit2FX(this.mc.theWorld, var1)); + } + + public void onEnchantmentCritical(Entity var1) { + EntityCrit2FX var2 = new EntityCrit2FX(this.mc.theWorld, var1, "magicCrit"); + this.mc.effectRenderer.addEffect(var2); + } + + public void onItemPickup(Entity var1, int var2) { + this.mc.effectRenderer.addEffect(new EntityPickupFX(this.mc.theWorld, var1, this, -0.5F)); + } + + public boolean isSneaking() { + return this.movementInput.sneak && !this.sleeping; + } + + public void setHealth(int var1) { + int var2 = this.getHealth() - var1; + if(var2 <= 0) { + this.setEntityHealth(var1); + if(var2 < 0) { + this.hurtResistantTime = this.maxHurtResistantTime / 2; + } + } else { + this.lastDamage = var2; + this.setEntityHealth(this.getHealth()); + this.hurtResistantTime = this.maxHurtResistantTime; + this.damageEntity(DamageSource.generic, var2); + this.hurtTime = this.maxHurtTime = 10; + } + + } + + public void addChatMessage(String var1) { + this.mc.ingameGUI.getChatGUI().addTranslatedMessage(var1, new Object[0]); + } + + public void addStat(StatBase var1, int var2) { + if(var1 != null) { + if(var1.isAchievement()) { + Achievement var3 = (Achievement)var1; + if(var3.parentAchievement == null || this.mc.statFileWriter.hasAchievementUnlocked(var3.parentAchievement)) { + if(!this.mc.statFileWriter.hasAchievementUnlocked(var3)) { + this.mc.guiAchievement.queueTakenAchievement(var3); + } + + this.mc.statFileWriter.readStat(var1, var2); + } + } else { + this.mc.statFileWriter.readStat(var1, var2); + } + + } + } + + private boolean isBlockTranslucent(int var1, int var2, int var3) { + return this.worldObj.isBlockNormalCube(var1, var2, var3); + } + + protected boolean pushOutOfBlocks(double var1, double var3, double var5) { + int var7 = MathHelper.floor_double(var1); + int var8 = MathHelper.floor_double(var3); + int var9 = MathHelper.floor_double(var5); + double var10 = var1 - (double)var7; + double var12 = var5 - (double)var9; + if(this.isBlockTranslucent(var7, var8, var9) || this.isBlockTranslucent(var7, var8 + 1, var9)) { + boolean var14 = !this.isBlockTranslucent(var7 - 1, var8, var9) && !this.isBlockTranslucent(var7 - 1, var8 + 1, var9); + boolean var15 = !this.isBlockTranslucent(var7 + 1, var8, var9) && !this.isBlockTranslucent(var7 + 1, var8 + 1, var9); + boolean var16 = !this.isBlockTranslucent(var7, var8, var9 - 1) && !this.isBlockTranslucent(var7, var8 + 1, var9 - 1); + boolean var17 = !this.isBlockTranslucent(var7, var8, var9 + 1) && !this.isBlockTranslucent(var7, var8 + 1, var9 + 1); + byte var18 = -1; + double var19 = 9999.0D; + if(var14 && var10 < var19) { + var19 = var10; + var18 = 0; + } + + if(var15 && 1.0D - var10 < var19) { + var19 = 1.0D - var10; + var18 = 1; + } + + if(var16 && var12 < var19) { + var19 = var12; + var18 = 4; + } + + if(var17 && 1.0D - var12 < var19) { + var19 = 1.0D - var12; + var18 = 5; + } + + float var21 = 0.1F; + if(var18 == 0) { + this.motionX = (double)(-var21); + } + + if(var18 == 1) { + this.motionX = (double)var21; + } + + if(var18 == 4) { + this.motionZ = (double)(-var21); + } + + if(var18 == 5) { + this.motionZ = (double)var21; + } + } + + return false; + } + + public void setSprinting(boolean var1) { + super.setSprinting(var1); + this.sprintingTicksLeft = var1 ? 600 : 0; + } + + public void setXPStats(float var1, int var2, int var3) { + this.experience = var1; + this.experienceTotal = var2; + this.experienceLevel = var3; + } + + public void sendChatToPlayer(String var1) { + this.mc.ingameGUI.getChatGUI().printChatMessage(var1); + } + + public boolean canCommandSenderUseCommand(int var1, String var2) { + return var1 <= 0; + } + + public ChunkCoordinates getPlayerCoordinates() { + return new ChunkCoordinates(MathHelper.floor_double(this.posX + 0.5D), MathHelper.floor_double(this.posY + 0.5D), MathHelper.floor_double(this.posZ + 0.5D)); + } + + public ItemStack getHeldItem() { + return this.inventory.getCurrentItem(); + } + + public void playSound(String var1, float var2, float var3) { + this.worldObj.playSound(this.posX, this.posY - (double)this.yOffset, this.posZ, var1, var2, var3, false); + } +} diff --git a/src/net/minecraft/src/EntityPortalFX.java b/src/net/minecraft/src/EntityPortalFX.java new file mode 100644 index 0000000..2afd1aa --- /dev/null +++ b/src/net/minecraft/src/EntityPortalFX.java @@ -0,0 +1,74 @@ +package net.minecraft.src; + +public class EntityPortalFX extends EntityFX { + private float portalParticleScale; + private double portalPosX; + private double portalPosY; + private double portalPosZ; + + public EntityPortalFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1, var2, var4, var6, var8, var10, var12); + this.motionX = var8; + this.motionY = var10; + this.motionZ = var12; + this.portalPosX = this.posX = var2; + this.portalPosY = this.posY = var4; + this.portalPosZ = this.posZ = var6; + float var14 = this.rand.nextFloat() * 0.6F + 0.4F; + this.portalParticleScale = this.particleScale = this.rand.nextFloat() * 0.2F + 0.5F; + this.particleRed = this.particleGreen = this.particleBlue = 1.0F * var14; + this.particleGreen *= 0.3F; + this.particleRed *= 0.9F; + this.particleMaxAge = (int)(Math.random() * 10.0D) + 40; + this.noClip = true; + this.setParticleTextureIndex((int)(Math.random() * 8.0D)); + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = ((float)this.particleAge + var2) / (float)this.particleMaxAge; + var8 = 1.0F - var8; + var8 *= var8; + var8 = 1.0F - var8; + this.particleScale = this.portalParticleScale * var8; + super.renderParticle(var1, var2, var3, var4, var5, var6, var7); + } + + public int getBrightnessForRender(float var1) { + int var2 = super.getBrightnessForRender(var1); + float var3 = (float)this.particleAge / (float)this.particleMaxAge; + var3 *= var3; + var3 *= var3; + int var4 = var2 & 255; + int var5 = var2 >> 16 & 255; + var5 += (int)(var3 * 15.0F * 16.0F); + if(var5 > 240) { + var5 = 240; + } + + return var4 | var5 << 16; + } + + public float getBrightness(float var1) { + float var2 = super.getBrightness(var1); + float var3 = (float)this.particleAge / (float)this.particleMaxAge; + var3 = var3 * var3 * var3 * var3; + return var2 * (1.0F - var3) + var3; + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + float var1 = (float)this.particleAge / (float)this.particleMaxAge; + float var2 = var1; + var1 = -var1 + var1 * var1 * 2.0F; + var1 = 1.0F - var1; + this.posX = this.portalPosX + this.motionX * (double)var1; + this.posY = this.portalPosY + this.motionY * (double)var1 + (double)(1.0F - var2); + this.posZ = this.portalPosZ + this.motionZ * (double)var1; + if(this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } + + } +} diff --git a/src/net/minecraft/src/EntityPotion.java b/src/net/minecraft/src/EntityPotion.java new file mode 100644 index 0000000..c90bc25 --- /dev/null +++ b/src/net/minecraft/src/EntityPotion.java @@ -0,0 +1,131 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class EntityPotion extends EntityThrowable { + private ItemStack potionDamage; + + public EntityPotion(World var1) { + super(var1); + } + + public EntityPotion(World var1, EntityLiving var2, int var3) { + this(var1, var2, new ItemStack(Item.potion, 1, var3)); + } + + public EntityPotion(World var1, EntityLiving var2, ItemStack var3) { + super(var1, var2); + this.potionDamage = var3; + } + + public EntityPotion(World var1, double var2, double var4, double var6, int var8) { + this(var1, var2, var4, var6, new ItemStack(Item.potion, 1, var8)); + } + + public EntityPotion(World var1, double var2, double var4, double var6, ItemStack var8) { + super(var1, var2, var4, var6); + this.potionDamage = var8; + } + + protected float getGravityVelocity() { + return 0.05F; + } + + protected float func_70182_d() { + return 0.5F; + } + + protected float func_70183_g() { + return -20.0F; + } + + public void setPotionDamage(int var1) { + if(this.potionDamage == null) { + this.potionDamage = new ItemStack(Item.potion, 1, 0); + } + + this.potionDamage.setItemDamage(var1); + } + + public int getPotionDamage() { + if(this.potionDamage == null) { + this.potionDamage = new ItemStack(Item.potion, 1, 0); + } + + return this.potionDamage.getItemDamage(); + } + + protected void onImpact(MovingObjectPosition var1) { + if(!this.worldObj.isRemote) { + List var2 = Item.potion.getEffects(this.potionDamage); + if(var2 != null && !var2.isEmpty()) { + AxisAlignedBB var3 = this.boundingBox.expand(4.0D, 2.0D, 4.0D); + List var4 = this.worldObj.getEntitiesWithinAABB(EntityLiving.class, var3); + if(var4 != null && !var4.isEmpty()) { + Iterator var5 = var4.iterator(); + + label48: + while(true) { + EntityLiving var6; + double var7; + do { + if(!var5.hasNext()) { + break label48; + } + + var6 = (EntityLiving)var5.next(); + var7 = this.getDistanceSqToEntity(var6); + } while(var7 >= 16.0D); + + double var9 = 1.0D - Math.sqrt(var7) / 4.0D; + if(var6 == var1.entityHit) { + var9 = 1.0D; + } + + Iterator var11 = var2.iterator(); + + while(var11.hasNext()) { + PotionEffect var12 = (PotionEffect)var11.next(); + int var13 = var12.getPotionID(); + if(Potion.potionTypes[var13].isInstant()) { + Potion.potionTypes[var13].affectEntity(this.getThrower(), var6, var12.getAmplifier(), var9); + } else { + int var14 = (int)(var9 * (double)var12.getDuration() + 0.5D); + if(var14 > 20) { + var6.addPotionEffect(new PotionEffect(var13, var14, var12.getAmplifier())); + } + } + } + } + } + } + + this.worldObj.playAuxSFX(2002, (int)Math.round(this.posX), (int)Math.round(this.posY), (int)Math.round(this.posZ), this.getPotionDamage()); + this.setDead(); + } + + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + if(var1.hasKey("Potion")) { + this.potionDamage = ItemStack.loadItemStackFromNBT(var1.getCompoundTag("Potion")); + } else { + this.setPotionDamage(var1.getInteger("potionValue")); + } + + if(this.potionDamage == null) { + this.setDead(); + } + + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + if(this.potionDamage != null) { + var1.setCompoundTag("Potion", this.potionDamage.writeToNBT(new NBTTagCompound())); + } + + } +} diff --git a/src/net/minecraft/src/EntityRainFX.java b/src/net/minecraft/src/EntityRainFX.java new file mode 100644 index 0000000..1d87a9b --- /dev/null +++ b/src/net/minecraft/src/EntityRainFX.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +public class EntityRainFX extends EntityFX { + public EntityRainFX(World var1, double var2, double var4, double var6) { + super(var1, var2, var4, var6, 0.0D, 0.0D, 0.0D); + this.motionX *= (double)0.3F; + this.motionY = (double)((float)Math.random() * 0.2F + 0.1F); + this.motionZ *= (double)0.3F; + 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.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.98F; + this.motionY *= (double)0.98F; + this.motionZ *= (double)0.98F; + if(this.particleMaxAge-- <= 0) { + this.setDead(); + } + + if(this.onGround) { + if(Math.random() < 0.5D) { + this.setDead(); + } + + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + Material var1 = this.worldObj.getBlockMaterial(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)); + if(var1.isLiquid() || var1.isSolid()) { + double var2 = (double)((float)(MathHelper.floor_double(this.posY) + 1) - BlockFluid.getFluidHeightPercent(this.worldObj.getBlockMetadata(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)))); + if(this.posY < var2) { + this.setDead(); + } + } + + } +} diff --git a/src/net/minecraft/src/EntityReddustFX.java b/src/net/minecraft/src/EntityReddustFX.java new file mode 100644 index 0000000..4945b85 --- /dev/null +++ b/src/net/minecraft/src/EntityReddustFX.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +public class EntityReddustFX extends EntityFX { + float reddustParticleScale; + + public EntityReddustFX(World var1, double var2, double var4, double var6, float var8, float var9, float var10) { + this(var1, var2, var4, var6, 1.0F, var8, var9, var10); + } + + public EntityReddustFX(World var1, double var2, double var4, double var6, float var8, float var9, float var10, float var11) { + super(var1, var2, var4, var6, 0.0D, 0.0D, 0.0D); + this.motionX *= (double)0.1F; + this.motionY *= (double)0.1F; + this.motionZ *= (double)0.1F; + if(var9 == 0.0F) { + var9 = 1.0F; + } + + float var12 = (float)Math.random() * 0.4F + 0.6F; + this.particleRed = ((float)(Math.random() * (double)0.2F) + 0.8F) * var9 * var12; + this.particleGreen = ((float)(Math.random() * (double)0.2F) + 0.8F) * var10 * var12; + this.particleBlue = ((float)(Math.random() * (double)0.2F) + 0.8F) * var11 * var12; + this.particleScale *= 12.0F / 16.0F; + this.particleScale *= var8; + this.reddustParticleScale = this.particleScale; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); + this.particleMaxAge = (int)((float)this.particleMaxAge * var8); + this.noClip = false; + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = ((float)this.particleAge + var2) / (float)this.particleMaxAge * 32.0F; + if(var8 < 0.0F) { + var8 = 0.0F; + } + + if(var8 > 1.0F) { + var8 = 1.0F; + } + + this.particleScale = this.reddustParticleScale * var8; + super.renderParticle(var1, var2, var3, var4, var5, var6, var7); + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + if(this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.moveEntity(this.motionX, this.motionY, this.motionZ); + if(this.posY == this.prevPosY) { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= (double)0.96F; + this.motionY *= (double)0.96F; + this.motionZ *= (double)0.96F; + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + } +} diff --git a/src/net/minecraft/src/EntityRenderer.java b/src/net/minecraft/src/EntityRenderer.java new file mode 100644 index 0000000..99e14fe --- /dev/null +++ b/src/net/minecraft/src/EntityRenderer.java @@ -0,0 +1,1422 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; +import java.nio.FloatBuffer; +import java.util.List; +import java.util.Random; +import net.minecraft.client.Minecraft; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.Display; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GLContext; +import org.lwjgl.opengl.NVFogDistance; +import org.lwjgl.util.glu.GLU; + +public class EntityRenderer { + public static boolean anaglyphEnable = false; + public static int anaglyphField; + private Minecraft mc; + private float farPlaneDistance = 0.0F; + public ItemRenderer itemRenderer; + private int rendererUpdateCount; + private Entity pointedEntity = null; + private MouseFilter mouseFilterXAxis = new MouseFilter(); + private MouseFilter mouseFilterYAxis = new MouseFilter(); + private MouseFilter mouseFilterDummy1 = new MouseFilter(); + private MouseFilter mouseFilterDummy2 = new MouseFilter(); + private MouseFilter mouseFilterDummy3 = new MouseFilter(); + private MouseFilter mouseFilterDummy4 = new MouseFilter(); + private float thirdPersonDistance = 4.0F; + private float thirdPersonDistanceTemp = 4.0F; + private float debugCamYaw = 0.0F; + private float prevDebugCamYaw = 0.0F; + private float debugCamPitch = 0.0F; + private float prevDebugCamPitch = 0.0F; + private float smoothCamYaw; + private float smoothCamPitch; + private float smoothCamFilterX; + private float smoothCamFilterY; + private float smoothCamPartialTicks; + private float debugCamFOV = 0.0F; + private float prevDebugCamFOV = 0.0F; + private float camRoll = 0.0F; + private float prevCamRoll = 0.0F; + public int lightmapTexture; + private int[] lightmapColors; + private float fovModifierHand; + private float fovModifierHandPrev; + private float fovMultiplierTemp; + private float field_82831_U; + private float field_82832_V; + private boolean cloudFog = false; + private double cameraZoom = 1.0D; + private double cameraYaw = 0.0D; + private double cameraPitch = 0.0D; + private long prevFrameTime = Minecraft.getSystemTime(); + private long renderEndNanoTime = 0L; + private boolean lightmapUpdateNeeded = false; + float torchFlickerX = 0.0F; + float torchFlickerDX = 0.0F; + float torchFlickerY = 0.0F; + float torchFlickerDY = 0.0F; + private Random random = new Random(); + private int rainSoundCounter = 0; + float[] rainXCoords; + float[] rainYCoords; + volatile int field_78523_k = 0; + volatile int field_78520_l = 0; + FloatBuffer fogColorBuffer = GLAllocation.createDirectFloatBuffer(16); + float fogColorRed; + float fogColorGreen; + float fogColorBlue; + private float fogColor2; + private float fogColor1; + public int debugViewDirection; + + public EntityRenderer(Minecraft var1) { + this.mc = var1; + this.itemRenderer = new ItemRenderer(var1); + this.lightmapTexture = var1.renderEngine.allocateAndSetupTexture(new BufferedImage(16, 16, 1)); + this.lightmapColors = new int[256]; + } + + public void updateRenderer() { + this.updateFovModifierHand(); + this.updateTorchFlicker(); + this.fogColor2 = this.fogColor1; + this.thirdPersonDistanceTemp = this.thirdPersonDistance; + this.prevDebugCamYaw = this.debugCamYaw; + this.prevDebugCamPitch = this.debugCamPitch; + this.prevDebugCamFOV = this.debugCamFOV; + this.prevCamRoll = this.camRoll; + float var1; + float var2; + if(this.mc.gameSettings.smoothCamera) { + var1 = this.mc.gameSettings.mouseSensitivity * 0.6F + 0.2F; + var2 = var1 * var1 * var1 * 8.0F; + this.smoothCamFilterX = this.mouseFilterXAxis.smooth(this.smoothCamYaw, 0.05F * var2); + this.smoothCamFilterY = this.mouseFilterYAxis.smooth(this.smoothCamPitch, 0.05F * var2); + this.smoothCamPartialTicks = 0.0F; + this.smoothCamYaw = 0.0F; + this.smoothCamPitch = 0.0F; + } + + if(this.mc.renderViewEntity == null) { + this.mc.renderViewEntity = this.mc.thePlayer; + } + + var1 = this.mc.theWorld.getLightBrightness(MathHelper.floor_double(this.mc.renderViewEntity.posX), MathHelper.floor_double(this.mc.renderViewEntity.posY), MathHelper.floor_double(this.mc.renderViewEntity.posZ)); + var2 = (float)(3 - this.mc.gameSettings.renderDistance) / 3.0F; + float var3 = var1 * (1.0F - var2) + var2; + this.fogColor1 += (var3 - this.fogColor1) * 0.1F; + ++this.rendererUpdateCount; + this.itemRenderer.updateEquippedItem(); + this.addRainParticles(); + this.field_82832_V = this.field_82831_U; + if(BossStatus.field_82825_d) { + this.field_82831_U += 0.05F; + if(this.field_82831_U > 1.0F) { + this.field_82831_U = 1.0F; + } + + BossStatus.field_82825_d = false; + } else if(this.field_82831_U > 0.0F) { + this.field_82831_U -= 0.0125F; + } + + } + + public void getMouseOver(float var1) { + if(this.mc.renderViewEntity != null) { + if(this.mc.theWorld != null) { + this.mc.pointedEntityLiving = null; + double var2 = (double)this.mc.playerController.getBlockReachDistance(); + this.mc.objectMouseOver = this.mc.renderViewEntity.rayTrace(var2, var1); + double var4 = var2; + Vec3 var6 = this.mc.renderViewEntity.getPosition(var1); + if(this.mc.playerController.extendedReach()) { + var2 = 6.0D; + var4 = var2; + } else { + if(var2 > 3.0D) { + var4 = 3.0D; + } + + var2 = var4; + } + + if(this.mc.objectMouseOver != null) { + var4 = this.mc.objectMouseOver.hitVec.distanceTo(var6); + } + + Vec3 var7 = this.mc.renderViewEntity.getLook(var1); + Vec3 var8 = var6.addVector(var7.xCoord * var2, var7.yCoord * var2, var7.zCoord * var2); + this.pointedEntity = null; + float var9 = 1.0F; + List var10 = this.mc.theWorld.getEntitiesWithinAABBExcludingEntity(this.mc.renderViewEntity, this.mc.renderViewEntity.boundingBox.addCoord(var7.xCoord * var2, var7.yCoord * var2, var7.zCoord * var2).expand((double)var9, (double)var9, (double)var9)); + double var11 = var4; + + for(int var13 = 0; var13 < var10.size(); ++var13) { + Entity var14 = (Entity)var10.get(var13); + if(var14.canBeCollidedWith()) { + float var15 = var14.getCollisionBorderSize(); + AxisAlignedBB var16 = var14.boundingBox.expand((double)var15, (double)var15, (double)var15); + MovingObjectPosition var17 = var16.calculateIntercept(var6, var8); + if(var16.isVecInside(var6)) { + if(0.0D < var11 || var11 == 0.0D) { + this.pointedEntity = var14; + var11 = 0.0D; + } + } else if(var17 != null) { + double var18 = var6.distanceTo(var17.hitVec); + if(var18 < var11 || var11 == 0.0D) { + this.pointedEntity = var14; + var11 = var18; + } + } + } + } + + if(this.pointedEntity != null && (var11 < var4 || this.mc.objectMouseOver == null)) { + this.mc.objectMouseOver = new MovingObjectPosition(this.pointedEntity); + if(this.pointedEntity instanceof EntityLiving) { + this.mc.pointedEntityLiving = (EntityLiving)this.pointedEntity; + } + } + + } + } + } + + private void updateFovModifierHand() { + EntityPlayerSP var1 = (EntityPlayerSP)this.mc.renderViewEntity; + this.fovMultiplierTemp = var1.getFOVMultiplier(); + this.fovModifierHandPrev = this.fovModifierHand; + this.fovModifierHand += (this.fovMultiplierTemp - this.fovModifierHand) * 0.5F; + if(this.fovModifierHand > 1.5F) { + this.fovModifierHand = 1.5F; + } + + if(this.fovModifierHand < 0.1F) { + this.fovModifierHand = 0.1F; + } + + } + + private float getFOVModifier(float var1, boolean var2) { + if(this.debugViewDirection > 0) { + return 90.0F; + } else { + EntityPlayer var3 = (EntityPlayer)this.mc.renderViewEntity; + float var4 = 70.0F; + if(var2) { + var4 += this.mc.gameSettings.fovSetting * 40.0F; + var4 *= this.fovModifierHandPrev + (this.fovModifierHand - this.fovModifierHandPrev) * var1; + } + + if(var3.getHealth() <= 0) { + float var5 = (float)var3.deathTime + var1; + var4 /= (1.0F - 500.0F / (var5 + 500.0F)) * 2.0F + 1.0F; + } + + int var6 = ActiveRenderInfo.getBlockIdAtEntityViewpoint(this.mc.theWorld, var3, var1); + if(var6 != 0 && Block.blocksList[var6].blockMaterial == Material.water) { + var4 = var4 * 60.0F / 70.0F; + } + + return var4 + this.prevDebugCamFOV + (this.debugCamFOV - this.prevDebugCamFOV) * var1; + } + } + + private void hurtCameraEffect(float var1) { + EntityLiving var2 = this.mc.renderViewEntity; + float var3 = (float)var2.hurtTime - var1; + float var4; + if(var2.getHealth() <= 0) { + var4 = (float)var2.deathTime + var1; + GL11.glRotatef(40.0F - 8000.0F / (var4 + 200.0F), 0.0F, 0.0F, 1.0F); + } + + if(var3 >= 0.0F) { + var3 /= (float)var2.maxHurtTime; + var3 = MathHelper.sin(var3 * var3 * var3 * var3 * (float)Math.PI); + var4 = var2.attackedAtYaw; + GL11.glRotatef(-var4, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var3 * 14.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(var4, 0.0F, 1.0F, 0.0F); + } + } + + private void setupViewBobbing(float var1) { + if(this.mc.renderViewEntity instanceof EntityPlayer) { + EntityPlayer var2 = (EntityPlayer)this.mc.renderViewEntity; + float var3 = var2.distanceWalkedModified - var2.prevDistanceWalkedModified; + float var4 = -(var2.distanceWalkedModified + var3 * var1); + float var5 = var2.prevCameraYaw + (var2.cameraYaw - var2.prevCameraYaw) * var1; + float var6 = var2.prevCameraPitch + (var2.cameraPitch - var2.prevCameraPitch) * var1; + GL11.glTranslatef(MathHelper.sin(var4 * (float)Math.PI) * var5 * 0.5F, -Math.abs(MathHelper.cos(var4 * (float)Math.PI) * var5), 0.0F); + GL11.glRotatef(MathHelper.sin(var4 * (float)Math.PI) * var5 * 3.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(Math.abs(MathHelper.cos(var4 * (float)Math.PI - 0.2F) * var5) * 5.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(var6, 1.0F, 0.0F, 0.0F); + } + } + + private void orientCamera(float var1) { + EntityLiving var2 = this.mc.renderViewEntity; + float var3 = var2.yOffset - 1.62F; + double var4 = var2.prevPosX + (var2.posX - var2.prevPosX) * (double)var1; + double var6 = var2.prevPosY + (var2.posY - var2.prevPosY) * (double)var1 - (double)var3; + double var8 = var2.prevPosZ + (var2.posZ - var2.prevPosZ) * (double)var1; + GL11.glRotatef(this.prevCamRoll + (this.camRoll - this.prevCamRoll) * var1, 0.0F, 0.0F, 1.0F); + if(var2.isPlayerSleeping()) { + var3 = (float)((double)var3 + 1.0D); + GL11.glTranslatef(0.0F, 0.3F, 0.0F); + if(!this.mc.gameSettings.debugCamEnable) { + int var10 = this.mc.theWorld.getBlockId(MathHelper.floor_double(var2.posX), MathHelper.floor_double(var2.posY), MathHelper.floor_double(var2.posZ)); + if(var10 == Block.bed.blockID) { + int var11 = this.mc.theWorld.getBlockMetadata(MathHelper.floor_double(var2.posX), MathHelper.floor_double(var2.posY), MathHelper.floor_double(var2.posZ)); + int var12 = var11 & 3; + GL11.glRotatef((float)(var12 * 90), 0.0F, 1.0F, 0.0F); + } + + GL11.glRotatef(var2.prevRotationYaw + (var2.rotationYaw - var2.prevRotationYaw) * var1 + 180.0F, 0.0F, -1.0F, 0.0F); + GL11.glRotatef(var2.prevRotationPitch + (var2.rotationPitch - var2.prevRotationPitch) * var1, -1.0F, 0.0F, 0.0F); + } + } else if(this.mc.gameSettings.thirdPersonView > 0) { + double var27 = (double)(this.thirdPersonDistanceTemp + (this.thirdPersonDistance - this.thirdPersonDistanceTemp) * var1); + float var13; + float var28; + if(this.mc.gameSettings.debugCamEnable) { + var28 = this.prevDebugCamYaw + (this.debugCamYaw - this.prevDebugCamYaw) * var1; + var13 = this.prevDebugCamPitch + (this.debugCamPitch - this.prevDebugCamPitch) * var1; + GL11.glTranslatef(0.0F, 0.0F, (float)(-var27)); + GL11.glRotatef(var13, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(var28, 0.0F, 1.0F, 0.0F); + } else { + var28 = var2.rotationYaw; + var13 = var2.rotationPitch; + if(this.mc.gameSettings.thirdPersonView == 2) { + var13 += 180.0F; + } + + double var14 = (double)(-MathHelper.sin(var28 / 180.0F * (float)Math.PI) * MathHelper.cos(var13 / 180.0F * (float)Math.PI)) * var27; + double var16 = (double)(MathHelper.cos(var28 / 180.0F * (float)Math.PI) * MathHelper.cos(var13 / 180.0F * (float)Math.PI)) * var27; + double var18 = (double)(-MathHelper.sin(var13 / 180.0F * (float)Math.PI)) * var27; + + for(int var20 = 0; var20 < 8; ++var20) { + float var21 = (float)((var20 & 1) * 2 - 1); + float var22 = (float)((var20 >> 1 & 1) * 2 - 1); + float var23 = (float)((var20 >> 2 & 1) * 2 - 1); + var21 *= 0.1F; + var22 *= 0.1F; + var23 *= 0.1F; + MovingObjectPosition var24 = this.mc.theWorld.rayTraceBlocks(this.mc.theWorld.getWorldVec3Pool().getVecFromPool(var4 + (double)var21, var6 + (double)var22, var8 + (double)var23), this.mc.theWorld.getWorldVec3Pool().getVecFromPool(var4 - var14 + (double)var21 + (double)var23, var6 - var18 + (double)var22, var8 - var16 + (double)var23)); + if(var24 != null) { + double var25 = var24.hitVec.distanceTo(this.mc.theWorld.getWorldVec3Pool().getVecFromPool(var4, var6, var8)); + if(var25 < var27) { + var27 = var25; + } + } + } + + if(this.mc.gameSettings.thirdPersonView == 2) { + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + } + + GL11.glRotatef(var2.rotationPitch - var13, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(var2.rotationYaw - var28, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, 0.0F, (float)(-var27)); + GL11.glRotatef(var28 - var2.rotationYaw, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(var13 - var2.rotationPitch, 1.0F, 0.0F, 0.0F); + } + } else { + GL11.glTranslatef(0.0F, 0.0F, -0.1F); + } + + if(!this.mc.gameSettings.debugCamEnable) { + GL11.glRotatef(var2.prevRotationPitch + (var2.rotationPitch - var2.prevRotationPitch) * var1, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(var2.prevRotationYaw + (var2.rotationYaw - var2.prevRotationYaw) * var1 + 180.0F, 0.0F, 1.0F, 0.0F); + } + + GL11.glTranslatef(0.0F, var3, 0.0F); + var4 = var2.prevPosX + (var2.posX - var2.prevPosX) * (double)var1; + var6 = var2.prevPosY + (var2.posY - var2.prevPosY) * (double)var1 - (double)var3; + var8 = var2.prevPosZ + (var2.posZ - var2.prevPosZ) * (double)var1; + this.cloudFog = this.mc.renderGlobal.hasCloudFog(var4, var6, var8, var1); + } + + private void setupCameraTransform(float var1, int var2) { + this.farPlaneDistance = (float)(256 >> this.mc.gameSettings.renderDistance); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + float var3 = 0.07F; + if(this.mc.gameSettings.anaglyph) { + GL11.glTranslatef((float)(-(var2 * 2 - 1)) * var3, 0.0F, 0.0F); + } + + if(this.cameraZoom != 1.0D) { + GL11.glTranslatef((float)this.cameraYaw, (float)(-this.cameraPitch), 0.0F); + GL11.glScaled(this.cameraZoom, this.cameraZoom, 1.0D); + } + + GLU.gluPerspective(this.getFOVModifier(var1, true), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance * 2.0F); + float var4; + if(this.mc.playerController.enableEverythingIsScrewedUpMode()) { + var4 = 2.0F / 3.0F; + GL11.glScalef(1.0F, var4, 1.0F); + } + + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + if(this.mc.gameSettings.anaglyph) { + GL11.glTranslatef((float)(var2 * 2 - 1) * 0.1F, 0.0F, 0.0F); + } + + this.hurtCameraEffect(var1); + if(this.mc.gameSettings.viewBobbing) { + this.setupViewBobbing(var1); + } + + var4 = this.mc.thePlayer.prevTimeInPortal + (this.mc.thePlayer.timeInPortal - this.mc.thePlayer.prevTimeInPortal) * var1; + if(var4 > 0.0F) { + byte var5 = 20; + if(this.mc.thePlayer.isPotionActive(Potion.confusion)) { + var5 = 7; + } + + float var6 = 5.0F / (var4 * var4 + 5.0F) - var4 * 0.04F; + var6 *= var6; + GL11.glRotatef(((float)this.rendererUpdateCount + var1) * (float)var5, 0.0F, 1.0F, 1.0F); + GL11.glScalef(1.0F / var6, 1.0F, 1.0F); + GL11.glRotatef(-((float)this.rendererUpdateCount + var1) * (float)var5, 0.0F, 1.0F, 1.0F); + } + + this.orientCamera(var1); + if(this.debugViewDirection > 0) { + int var7 = this.debugViewDirection - 1; + if(var7 == 1) { + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + } + + if(var7 == 2) { + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + } + + if(var7 == 3) { + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + } + + if(var7 == 4) { + GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F); + } + + if(var7 == 5) { + GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F); + } + } + + } + + private void renderHand(float var1, int var2) { + if(this.debugViewDirection <= 0) { + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + float var3 = 0.07F; + if(this.mc.gameSettings.anaglyph) { + GL11.glTranslatef((float)(-(var2 * 2 - 1)) * var3, 0.0F, 0.0F); + } + + if(this.cameraZoom != 1.0D) { + GL11.glTranslatef((float)this.cameraYaw, (float)(-this.cameraPitch), 0.0F); + GL11.glScaled(this.cameraZoom, this.cameraZoom, 1.0D); + } + + GLU.gluPerspective(this.getFOVModifier(var1, false), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance * 2.0F); + if(this.mc.playerController.enableEverythingIsScrewedUpMode()) { + float var4 = 2.0F / 3.0F; + GL11.glScalef(1.0F, var4, 1.0F); + } + + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + if(this.mc.gameSettings.anaglyph) { + GL11.glTranslatef((float)(var2 * 2 - 1) * 0.1F, 0.0F, 0.0F); + } + + GL11.glPushMatrix(); + this.hurtCameraEffect(var1); + if(this.mc.gameSettings.viewBobbing) { + this.setupViewBobbing(var1); + } + + if(this.mc.gameSettings.thirdPersonView == 0 && !this.mc.renderViewEntity.isPlayerSleeping() && !this.mc.gameSettings.hideGUI && !this.mc.playerController.enableEverythingIsScrewedUpMode()) { + this.enableLightmap((double)var1); + this.itemRenderer.renderItemInFirstPerson(var1); + this.disableLightmap((double)var1); + } + + GL11.glPopMatrix(); + if(this.mc.gameSettings.thirdPersonView == 0 && !this.mc.renderViewEntity.isPlayerSleeping()) { + this.itemRenderer.renderOverlays(var1); + this.hurtCameraEffect(var1); + } + + if(this.mc.gameSettings.viewBobbing) { + this.setupViewBobbing(var1); + } + + } + } + + public void disableLightmap(double var1) { + OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GL11.glDisable(GL11.GL_TEXTURE_2D); + OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); + } + + public void enableLightmap(double var1) { + OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + float var3 = 0.00390625F; + GL11.glScalef(var3, var3, var3); + GL11.glTranslatef(8.0F, 8.0F, 8.0F); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.lightmapTexture); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + 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_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL11.GL_TEXTURE_2D); + this.mc.renderEngine.resetBoundTexture(); + OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); + } + + private void updateTorchFlicker() { + this.torchFlickerDX = (float)((double)this.torchFlickerDX + (Math.random() - Math.random()) * Math.random() * Math.random()); + this.torchFlickerDY = (float)((double)this.torchFlickerDY + (Math.random() - Math.random()) * Math.random() * Math.random()); + this.torchFlickerDX = (float)((double)this.torchFlickerDX * 0.9D); + this.torchFlickerDY = (float)((double)this.torchFlickerDY * 0.9D); + this.torchFlickerX += (this.torchFlickerDX - this.torchFlickerX) * 1.0F; + this.torchFlickerY += (this.torchFlickerDY - this.torchFlickerY) * 1.0F; + this.lightmapUpdateNeeded = true; + } + + private void updateLightmap(float var1) { + WorldClient var2 = this.mc.theWorld; + if(var2 != null) { + for(int var3 = 0; var3 < 256; ++var3) { + float var4 = var2.getSunBrightness(1.0F) * 0.95F + 0.05F; + float var5 = var2.provider.lightBrightnessTable[var3 / 16] * var4; + float var6 = var2.provider.lightBrightnessTable[var3 % 16] * (this.torchFlickerX * 0.1F + 1.5F); + if(var2.lastLightningBolt > 0) { + var5 = var2.provider.lightBrightnessTable[var3 / 16]; + } + + float var7 = var5 * (var2.getSunBrightness(1.0F) * 0.65F + 0.35F); + float var8 = var5 * (var2.getSunBrightness(1.0F) * 0.65F + 0.35F); + float var11 = var6 * ((var6 * 0.6F + 0.4F) * 0.6F + 0.4F); + float var12 = var6 * (var6 * var6 * 0.6F + 0.4F); + float var13 = var7 + var6; + float var14 = var8 + var11; + float var15 = var5 + var12; + var13 = var13 * 0.96F + 0.03F; + var14 = var14 * 0.96F + 0.03F; + var15 = var15 * 0.96F + 0.03F; + float var16; + if(this.field_82831_U > 0.0F) { + var16 = this.field_82832_V + (this.field_82831_U - this.field_82832_V) * var1; + var13 = var13 * (1.0F - var16) + var13 * 0.7F * var16; + var14 = var14 * (1.0F - var16) + var14 * 0.6F * var16; + var15 = var15 * (1.0F - var16) + var15 * 0.6F * var16; + } + + if(var2.provider.dimensionId == 1) { + var13 = 0.22F + var6 * (12.0F / 16.0F); + var14 = 0.28F + var11 * (12.0F / 16.0F); + var15 = 0.25F + var12 * (12.0F / 16.0F); + } + + float var17; + if(this.mc.thePlayer.isPotionActive(Potion.nightVision)) { + var16 = this.getNightVisionBrightness(this.mc.thePlayer, var1); + var17 = 1.0F / var13; + if(var17 > 1.0F / var14) { + var17 = 1.0F / var14; + } + + if(var17 > 1.0F / var15) { + var17 = 1.0F / var15; + } + + var13 = var13 * (1.0F - var16) + var13 * var17 * var16; + var14 = var14 * (1.0F - var16) + var14 * var17 * var16; + var15 = var15 * (1.0F - var16) + var15 * var17 * var16; + } + + if(var13 > 1.0F) { + var13 = 1.0F; + } + + if(var14 > 1.0F) { + var14 = 1.0F; + } + + if(var15 > 1.0F) { + var15 = 1.0F; + } + + var16 = this.mc.gameSettings.gammaSetting; + var17 = 1.0F - var13; + float var18 = 1.0F - var14; + float var19 = 1.0F - var15; + var17 = 1.0F - var17 * var17 * var17 * var17; + var18 = 1.0F - var18 * var18 * var18 * var18; + var19 = 1.0F - var19 * var19 * var19 * var19; + var13 = var13 * (1.0F - var16) + var17 * var16; + var14 = var14 * (1.0F - var16) + var18 * var16; + var15 = var15 * (1.0F - var16) + var19 * var16; + var13 = var13 * 0.96F + 0.03F; + var14 = var14 * 0.96F + 0.03F; + var15 = var15 * 0.96F + 0.03F; + if(var13 > 1.0F) { + var13 = 1.0F; + } + + if(var14 > 1.0F) { + var14 = 1.0F; + } + + if(var15 > 1.0F) { + var15 = 1.0F; + } + + if(var13 < 0.0F) { + var13 = 0.0F; + } + + if(var14 < 0.0F) { + var14 = 0.0F; + } + + if(var15 < 0.0F) { + var15 = 0.0F; + } + + short var20 = 255; + int var21 = (int)(var13 * 255.0F); + int var22 = (int)(var14 * 255.0F); + int var23 = (int)(var15 * 255.0F); + this.lightmapColors[var3] = var20 << 24 | var21 << 16 | var22 << 8 | var23; + } + + this.mc.renderEngine.createTextureFromBytes(this.lightmapColors, 16, 16, this.lightmapTexture); + } + } + + private float getNightVisionBrightness(EntityPlayer var1, float var2) { + int var3 = var1.getActivePotionEffect(Potion.nightVision).getDuration(); + return var3 > 200 ? 1.0F : 0.7F + MathHelper.sin(((float)var3 - var2) * (float)Math.PI * 0.2F) * 0.3F; + } + + public void updateCameraAndRender(float var1) { + this.mc.mcProfiler.startSection("lightTex"); + if(this.lightmapUpdateNeeded) { + this.updateLightmap(var1); + } + + this.mc.mcProfiler.endSection(); + boolean var2 = Display.isActive(); + if(!var2 && 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(this.mc.inGameHasFocus && var2) { + this.mc.mouseHelper.mouseXYChange(); + float var3 = this.mc.gameSettings.mouseSensitivity * 0.6F + 0.2F; + float var4 = var3 * var3 * var3 * 8.0F; + float var5 = (float)this.mc.mouseHelper.deltaX * var4; + float var6 = (float)this.mc.mouseHelper.deltaY * var4; + byte var7 = 1; + if(this.mc.gameSettings.invertMouse) { + var7 = -1; + } + + if(this.mc.gameSettings.smoothCamera) { + this.smoothCamYaw += var5; + this.smoothCamPitch += var6; + float var8 = var1 - this.smoothCamPartialTicks; + this.smoothCamPartialTicks = var1; + var5 = this.smoothCamFilterX * var8; + var6 = this.smoothCamFilterY * var8; + this.mc.thePlayer.setAngles(var5, var6 * (float)var7); + } else { + this.mc.thePlayer.setAngles(var5, var6 * (float)var7); + } + } + + this.mc.mcProfiler.endSection(); + if(!this.mc.skipRenderWorld) { + anaglyphEnable = this.mc.gameSettings.anaglyph; + ScaledResolution var13 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight); + int var14 = var13.getScaledWidth(); + int var15 = var13.getScaledHeight(); + int var16 = Mouse.getX() * var14 / this.mc.displayWidth; + int var17 = var15 - Mouse.getY() * var15 / this.mc.displayHeight - 1; + int var18 = performanceToFps(this.mc.gameSettings.limitFramerate); + if(this.mc.theWorld != null) { + this.mc.mcProfiler.startSection("level"); + if(this.mc.gameSettings.limitFramerate == 0) { + this.renderWorld(var1, 0L); + } else { + this.renderWorld(var1, this.renderEndNanoTime + (long)(1000000000 / var18)); + } + + this.renderEndNanoTime = System.nanoTime(); + this.mc.mcProfiler.endStartSection("gui"); + if(!this.mc.gameSettings.hideGUI || this.mc.currentScreen != null) { + this.mc.ingameGUI.renderGameOverlay(var1, this.mc.currentScreen != null, var16, var17); + } + + this.mc.mcProfiler.endSection(); + } else { + GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + this.setupOverlayRendering(); + this.renderEndNanoTime = System.nanoTime(); + } + + if(this.mc.currentScreen != null) { + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + + try { + this.mc.currentScreen.drawScreen(var16, var17, var1); + } catch (Throwable var12) { + CrashReport var10 = CrashReport.makeCrashReport(var12, "Rendering screen"); + CrashReportCategory var11 = var10.makeCategory("Screen render details"); + var11.addCrashSectionCallable("Screen name", new CallableScreenName(this)); + var11.addCrashSectionCallable("Mouse location", new CallableMouseLocation(this, var16, var17)); + var11.addCrashSectionCallable("Screen size", new CallableScreenSize(this, var13)); + throw new ReportedException(var10); + } + + if(this.mc.currentScreen != null && this.mc.currentScreen.guiParticles != null) { + this.mc.currentScreen.guiParticles.draw(var1); + } + } + + } + } + + public void renderWorld(float var1, long var2) { + this.mc.mcProfiler.startSection("lightTex"); + if(this.lightmapUpdateNeeded) { + this.updateLightmap(var1); + } + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_DEPTH_TEST); + if(this.mc.renderViewEntity == null) { + this.mc.renderViewEntity = this.mc.thePlayer; + } + + this.mc.mcProfiler.endStartSection("pick"); + this.getMouseOver(var1); + EntityLiving var4 = this.mc.renderViewEntity; + RenderGlobal var5 = this.mc.renderGlobal; + EffectRenderer var6 = this.mc.effectRenderer; + double var7 = var4.lastTickPosX + (var4.posX - var4.lastTickPosX) * (double)var1; + double var9 = var4.lastTickPosY + (var4.posY - var4.lastTickPosY) * (double)var1; + double var11 = var4.lastTickPosZ + (var4.posZ - var4.lastTickPosZ) * (double)var1; + this.mc.mcProfiler.endStartSection("center"); + + for(int var13 = 0; var13 < 2; ++var13) { + if(this.mc.gameSettings.anaglyph) { + anaglyphField = var13; + if(anaglyphField == 0) { + GL11.glColorMask(false, true, true, false); + } else { + GL11.glColorMask(true, false, false, false); + } + } + + this.mc.mcProfiler.endStartSection("clear"); + GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); + this.updateFogColor(var1); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT | GL11.GL_COLOR_BUFFER_BIT); + GL11.glEnable(GL11.GL_CULL_FACE); + this.mc.mcProfiler.endStartSection("camera"); + this.setupCameraTransform(var1, var13); + ActiveRenderInfo.updateRenderInfo(this.mc.thePlayer, this.mc.gameSettings.thirdPersonView == 2); + this.mc.mcProfiler.endStartSection("frustrum"); + ClippingHelperImpl.getInstance(); + if(this.mc.gameSettings.renderDistance < 2) { + this.setupFog(-1, var1); + this.mc.mcProfiler.endStartSection("sky"); + var5.renderSky(var1); + } + + GL11.glEnable(GL11.GL_FOG); + this.setupFog(1, var1); + if(this.mc.gameSettings.ambientOcclusion != 0) { + GL11.glShadeModel(GL11.GL_SMOOTH); + } + + this.mc.mcProfiler.endStartSection("culling"); + Frustrum var14 = new Frustrum(); + var14.setPosition(var7, var9, var11); + this.mc.renderGlobal.clipRenderersByFrustum(var14, var1); + if(var13 == 0) { + this.mc.mcProfiler.endStartSection("updatechunks"); + + while(!this.mc.renderGlobal.updateRenderers(var4, false) && var2 != 0L) { + long var15 = var2 - System.nanoTime(); + if(var15 < 0L || var15 > 1000000000L) { + break; + } + } + } + + if(var4.posY < 128.0D) { + this.renderCloudsCheck(var5, var1); + } + + this.mc.mcProfiler.endStartSection("prepareterrain"); + this.setupFog(0, var1); + GL11.glEnable(GL11.GL_FOG); + this.mc.renderEngine.bindTexture("/terrain.png"); + RenderHelper.disableStandardItemLighting(); + this.mc.mcProfiler.endStartSection("terrain"); + var5.sortAndRender(var4, 0, (double)var1); + GL11.glShadeModel(GL11.GL_FLAT); + EntityPlayer var17; + if(this.debugViewDirection == 0) { + RenderHelper.enableStandardItemLighting(); + this.mc.mcProfiler.endStartSection("entities"); + var5.renderEntities(var4.getPosition(var1), var14, var1); + this.enableLightmap((double)var1); + this.mc.mcProfiler.endStartSection("litParticles"); + var6.renderLitParticles(var4, var1); + RenderHelper.disableStandardItemLighting(); + this.setupFog(0, var1); + this.mc.mcProfiler.endStartSection("particles"); + var6.renderParticles(var4, var1); + this.disableLightmap((double)var1); + if(this.mc.objectMouseOver != null && var4.isInsideOfMaterial(Material.water) && var4 instanceof EntityPlayer && !this.mc.gameSettings.hideGUI) { + var17 = (EntityPlayer)var4; + GL11.glDisable(GL11.GL_ALPHA_TEST); + this.mc.mcProfiler.endStartSection("outline"); + var5.drawBlockBreaking(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), var1); + var5.drawSelectionBox(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), var1); + GL11.glEnable(GL11.GL_ALPHA_TEST); + } + } + + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDepthMask(true); + this.setupFog(0, var1); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_CULL_FACE); + this.mc.renderEngine.bindTexture("/terrain.png"); + if(this.mc.gameSettings.fancyGraphics) { + this.mc.mcProfiler.endStartSection("water"); + if(this.mc.gameSettings.ambientOcclusion != 0) { + GL11.glShadeModel(GL11.GL_SMOOTH); + } + + GL11.glColorMask(false, false, false, false); + int var18 = var5.sortAndRender(var4, 1, (double)var1); + if(this.mc.gameSettings.anaglyph) { + if(anaglyphField == 0) { + GL11.glColorMask(false, true, true, true); + } else { + GL11.glColorMask(true, false, false, true); + } + } else { + GL11.glColorMask(true, true, true, true); + } + + if(var18 > 0) { + var5.renderAllRenderLists(1, (double)var1); + } + + GL11.glShadeModel(GL11.GL_FLAT); + } else { + this.mc.mcProfiler.endStartSection("water"); + var5.sortAndRender(var4, 1, (double)var1); + } + + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_BLEND); + if(this.cameraZoom == 1.0D && var4 instanceof EntityPlayer && !this.mc.gameSettings.hideGUI && this.mc.objectMouseOver != null && !var4.isInsideOfMaterial(Material.water)) { + var17 = (EntityPlayer)var4; + GL11.glDisable(GL11.GL_ALPHA_TEST); + this.mc.mcProfiler.endStartSection("outline"); + var5.drawBlockBreaking(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), var1); + var5.drawSelectionBox(var17, this.mc.objectMouseOver, 0, var17.inventory.getCurrentItem(), var1); + GL11.glEnable(GL11.GL_ALPHA_TEST); + } + + this.mc.mcProfiler.endStartSection("destroyProgress"); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + var5.drawBlockDamageTexture(Tessellator.instance, (EntityPlayer)var4, var1); + GL11.glDisable(GL11.GL_BLEND); + this.mc.mcProfiler.endStartSection("weather"); + this.renderRainSnow(var1); + GL11.glDisable(GL11.GL_FOG); + if(var4.posY >= 128.0D) { + this.renderCloudsCheck(var5, var1); + } + + this.mc.mcProfiler.endStartSection("hand"); + if(this.cameraZoom == 1.0D) { + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + this.renderHand(var1, var13); + } + + if(!this.mc.gameSettings.anaglyph) { + this.mc.mcProfiler.endSection(); + return; + } + } + + GL11.glColorMask(true, true, true, false); + this.mc.mcProfiler.endSection(); + } + + private void renderCloudsCheck(RenderGlobal var1, float var2) { + if(this.mc.gameSettings.shouldRenderClouds()) { + this.mc.mcProfiler.endStartSection("clouds"); + GL11.glPushMatrix(); + this.setupFog(0, var2); + GL11.glEnable(GL11.GL_FOG); + var1.renderClouds(var2); + GL11.glDisable(GL11.GL_FOG); + this.setupFog(1, var2); + GL11.glPopMatrix(); + } + + } + + private void addRainParticles() { + float var1 = this.mc.theWorld.getRainStrength(1.0F); + if(!this.mc.gameSettings.fancyGraphics) { + var1 /= 2.0F; + } + + if(var1 != 0.0F) { + this.random.setSeed((long)this.rendererUpdateCount * 312987231L); + EntityLiving var2 = this.mc.renderViewEntity; + WorldClient var3 = this.mc.theWorld; + int var4 = MathHelper.floor_double(var2.posX); + int var5 = MathHelper.floor_double(var2.posY); + int var6 = MathHelper.floor_double(var2.posZ); + byte var7 = 10; + double var8 = 0.0D; + double var10 = 0.0D; + double var12 = 0.0D; + int var14 = 0; + int var15 = (int)(100.0F * var1 * var1); + if(this.mc.gameSettings.particleSetting == 1) { + var15 >>= 1; + } else if(this.mc.gameSettings.particleSetting == 2) { + var15 = 0; + } + + for(int var16 = 0; var16 < var15; ++var16) { + int var17 = var4 + this.random.nextInt(var7) - this.random.nextInt(var7); + int var18 = var6 + this.random.nextInt(var7) - this.random.nextInt(var7); + int var19 = var3.getPrecipitationHeight(var17, var18); + int var20 = var3.getBlockId(var17, var19 - 1, var18); + BiomeGenBase var21 = var3.getBiomeGenForCoords(var17, var18); + if(var19 <= var5 + var7 && var19 >= var5 - var7 && var21.canSpawnLightningBolt() && var21.getFloatTemperature() >= 0.2F) { + float var22 = this.random.nextFloat(); + float var23 = this.random.nextFloat(); + if(var20 > 0) { + if(Block.blocksList[var20].blockMaterial == Material.lava) { + this.mc.effectRenderer.addEffect(new EntitySmokeFX(var3, (double)((float)var17 + var22), (double)((float)var19 + 0.1F) - Block.blocksList[var20].getBlockBoundsMinY(), (double)((float)var18 + var23), 0.0D, 0.0D, 0.0D)); + } else { + ++var14; + if(this.random.nextInt(var14) == 0) { + var8 = (double)((float)var17 + var22); + var10 = (double)((float)var19 + 0.1F) - Block.blocksList[var20].getBlockBoundsMinY(); + var12 = (double)((float)var18 + var23); + } + + this.mc.effectRenderer.addEffect(new EntityRainFX(var3, (double)((float)var17 + var22), (double)((float)var19 + 0.1F) - Block.blocksList[var20].getBlockBoundsMinY(), (double)((float)var18 + var23))); + } + } + } + } + + if(var14 > 0 && this.random.nextInt(3) < this.rainSoundCounter++) { + this.rainSoundCounter = 0; + if(var10 > var2.posY + 1.0D && var3.getPrecipitationHeight(MathHelper.floor_double(var2.posX), MathHelper.floor_double(var2.posZ)) > MathHelper.floor_double(var2.posY)) { + this.mc.theWorld.playSound(var8, var10, var12, "ambient.weather.rain", 0.1F, 0.5F, false); + } else { + this.mc.theWorld.playSound(var8, var10, var12, "ambient.weather.rain", 0.2F, 1.0F, false); + } + } + + } + } + + protected void renderRainSnow(float var1) { + float var2 = this.mc.theWorld.getRainStrength(var1); + if(var2 > 0.0F) { + this.enableLightmap((double)var1); + if(this.rainXCoords == null) { + this.rainXCoords = new float[1024]; + this.rainYCoords = new float[1024]; + + for(int var3 = 0; var3 < 32; ++var3) { + for(int var4 = 0; var4 < 32; ++var4) { + float var5 = (float)(var4 - 16); + float var6 = (float)(var3 - 16); + float var7 = MathHelper.sqrt_float(var5 * var5 + var6 * var6); + this.rainXCoords[var3 << 5 | var4] = -var6 / var7; + this.rainYCoords[var3 << 5 | var4] = var5 / var7; + } + } + } + + EntityLiving var41 = this.mc.renderViewEntity; + WorldClient var42 = this.mc.theWorld; + int var43 = MathHelper.floor_double(var41.posX); + int var44 = MathHelper.floor_double(var41.posY); + int var45 = MathHelper.floor_double(var41.posZ); + Tessellator var8 = Tessellator.instance; + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glNormal3f(0.0F, 1.0F, 0.0F); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.01F); + this.mc.renderEngine.bindTexture("/environment/snow.png"); + double var9 = var41.lastTickPosX + (var41.posX - var41.lastTickPosX) * (double)var1; + double var11 = var41.lastTickPosY + (var41.posY - var41.lastTickPosY) * (double)var1; + double var13 = var41.lastTickPosZ + (var41.posZ - var41.lastTickPosZ) * (double)var1; + int var15 = MathHelper.floor_double(var11); + byte var16 = 5; + if(this.mc.gameSettings.fancyGraphics) { + var16 = 10; + } + + boolean var17 = false; + byte var18 = -1; + float var19 = (float)this.rendererUpdateCount + var1; + if(this.mc.gameSettings.fancyGraphics) { + var16 = 10; + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var17 = false; + + for(int var20 = var45 - var16; var20 <= var45 + var16; ++var20) { + for(int var21 = var43 - var16; var21 <= var43 + var16; ++var21) { + int var22 = (var20 - var45 + 16) * 32 + var21 - var43 + 16; + float var23 = this.rainXCoords[var22] * 0.5F; + float var24 = this.rainYCoords[var22] * 0.5F; + BiomeGenBase var25 = var42.getBiomeGenForCoords(var21, var20); + if(var25.canSpawnLightningBolt() || var25.getEnableSnow()) { + int var26 = var42.getPrecipitationHeight(var21, var20); + int var27 = var44 - var16; + int var28 = var44 + var16; + if(var27 < var26) { + var27 = var26; + } + + if(var28 < var26) { + var28 = var26; + } + + float var29 = 1.0F; + int var30 = var26; + if(var26 < var15) { + var30 = var15; + } + + if(var27 != var28) { + this.random.setSeed((long)(var21 * var21 * 3121 + var21 * 45238971 ^ var20 * var20 * 418711 + var20 * 13761)); + float var31 = var25.getFloatTemperature(); + float var32; + double var35; + if(var42.getWorldChunkManager().getTemperatureAtHeight(var31, var26) >= 0.15F) { + if(var18 != 0) { + if(var18 >= 0) { + var8.draw(); + } + + var18 = 0; + this.mc.renderEngine.bindTexture("/environment/rain.png"); + var8.startDrawingQuads(); + } + + var32 = ((float)(this.rendererUpdateCount + var21 * var21 * 3121 + var21 * 45238971 + var20 * var20 * 418711 + var20 * 13761 & 31) + var1) / 32.0F * (3.0F + this.random.nextFloat()); + double var33 = (double)((float)var21 + 0.5F) - var41.posX; + var35 = (double)((float)var20 + 0.5F) - var41.posZ; + float var37 = MathHelper.sqrt_double(var33 * var33 + var35 * var35) / (float)var16; + float var38 = 1.0F; + var8.setBrightness(var42.getLightBrightnessForSkyBlocks(var21, var30, var20, 0)); + var8.setColorRGBA_F(var38, var38, var38, ((1.0F - var37 * var37) * 0.5F + 0.5F) * var2); + var8.setTranslation(-var9 * 1.0D, -var11 * 1.0D, -var13 * 1.0D); + var8.addVertexWithUV((double)((float)var21 - var23) + 0.5D, (double)var27, (double)((float)var20 - var24) + 0.5D, (double)(0.0F * var29), (double)((float)var27 * var29 / 4.0F + var32 * var29)); + var8.addVertexWithUV((double)((float)var21 + var23) + 0.5D, (double)var27, (double)((float)var20 + var24) + 0.5D, (double)(1.0F * var29), (double)((float)var27 * var29 / 4.0F + var32 * var29)); + var8.addVertexWithUV((double)((float)var21 + var23) + 0.5D, (double)var28, (double)((float)var20 + var24) + 0.5D, (double)(1.0F * var29), (double)((float)var28 * var29 / 4.0F + var32 * var29)); + var8.addVertexWithUV((double)((float)var21 - var23) + 0.5D, (double)var28, (double)((float)var20 - var24) + 0.5D, (double)(0.0F * var29), (double)((float)var28 * var29 / 4.0F + var32 * var29)); + var8.setTranslation(0.0D, 0.0D, 0.0D); + } else { + if(var18 != 1) { + if(var18 >= 0) { + var8.draw(); + } + + var18 = 1; + this.mc.renderEngine.bindTexture("/environment/snow.png"); + var8.startDrawingQuads(); + } + + var32 = ((float)(this.rendererUpdateCount & 511) + var1) / 512.0F; + float var46 = this.random.nextFloat() + var19 * 0.01F * (float)this.random.nextGaussian(); + float var34 = this.random.nextFloat() + var19 * (float)this.random.nextGaussian() * 0.001F; + var35 = (double)((float)var21 + 0.5F) - var41.posX; + double var47 = (double)((float)var20 + 0.5F) - var41.posZ; + float var39 = MathHelper.sqrt_double(var35 * var35 + var47 * var47) / (float)var16; + float var40 = 1.0F; + var8.setBrightness((var42.getLightBrightnessForSkyBlocks(var21, var30, var20, 0) * 3 + 15728880) / 4); + var8.setColorRGBA_F(var40, var40, var40, ((1.0F - var39 * var39) * 0.3F + 0.5F) * var2); + var8.setTranslation(-var9 * 1.0D, -var11 * 1.0D, -var13 * 1.0D); + var8.addVertexWithUV((double)((float)var21 - var23) + 0.5D, (double)var27, (double)((float)var20 - var24) + 0.5D, (double)(0.0F * var29 + var46), (double)((float)var27 * var29 / 4.0F + var32 * var29 + var34)); + var8.addVertexWithUV((double)((float)var21 + var23) + 0.5D, (double)var27, (double)((float)var20 + var24) + 0.5D, (double)(1.0F * var29 + var46), (double)((float)var27 * var29 / 4.0F + var32 * var29 + var34)); + var8.addVertexWithUV((double)((float)var21 + var23) + 0.5D, (double)var28, (double)((float)var20 + var24) + 0.5D, (double)(1.0F * var29 + var46), (double)((float)var28 * var29 / 4.0F + var32 * var29 + var34)); + var8.addVertexWithUV((double)((float)var21 - var23) + 0.5D, (double)var28, (double)((float)var20 - var24) + 0.5D, (double)(0.0F * var29 + var46), (double)((float)var28 * var29 / 4.0F + var32 * var29 + var34)); + var8.setTranslation(0.0D, 0.0D, 0.0D); + } + } + } + } + } + + if(var18 >= 0) { + var8.draw(); + } + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_BLEND); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + this.disableLightmap((double)var1); + } + } + + public void setupOverlayRendering() { + ScaledResolution var1 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glOrtho(0.0D, var1.getScaledWidth_double(), var1.getScaledHeight_double(), 0.0D, 1000.0D, 3000.0D); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + GL11.glTranslatef(0.0F, 0.0F, -2000.0F); + } + + private void updateFogColor(float var1) { + WorldClient var2 = this.mc.theWorld; + EntityLiving var3 = this.mc.renderViewEntity; + float var4 = 1.0F / (float)(4 - this.mc.gameSettings.renderDistance); + var4 = 1.0F - (float)Math.pow((double)var4, 0.25D); + Vec3 var5 = var2.getSkyColor(this.mc.renderViewEntity, var1); + float var6 = (float)var5.xCoord; + float var7 = (float)var5.yCoord; + float var8 = (float)var5.zCoord; + Vec3 var9 = var2.getFogColor(var1); + this.fogColorRed = (float)var9.xCoord; + this.fogColorGreen = (float)var9.yCoord; + this.fogColorBlue = (float)var9.zCoord; + float var11; + if(this.mc.gameSettings.renderDistance < 2) { + Vec3 var10 = MathHelper.sin(var2.getCelestialAngleRadians(var1)) > 0.0F ? var2.getWorldVec3Pool().getVecFromPool(-1.0D, 0.0D, 0.0D) : var2.getWorldVec3Pool().getVecFromPool(1.0D, 0.0D, 0.0D); + var11 = (float)var3.getLook(var1).dotProduct(var10); + if(var11 < 0.0F) { + var11 = 0.0F; + } + + if(var11 > 0.0F) { + float[] var12 = var2.provider.calcSunriseSunsetColors(var2.getCelestialAngle(var1), var1); + if(var12 != null) { + var11 *= var12[3]; + this.fogColorRed = this.fogColorRed * (1.0F - var11) + var12[0] * var11; + this.fogColorGreen = this.fogColorGreen * (1.0F - var11) + var12[1] * var11; + this.fogColorBlue = this.fogColorBlue * (1.0F - var11) + var12[2] * var11; + } + } + } + + this.fogColorRed += (var6 - this.fogColorRed) * var4; + this.fogColorGreen += (var7 - this.fogColorGreen) * var4; + this.fogColorBlue += (var8 - this.fogColorBlue) * var4; + float var19 = var2.getRainStrength(var1); + float var20; + if(var19 > 0.0F) { + var11 = 1.0F - var19 * 0.5F; + var20 = 1.0F - var19 * 0.4F; + this.fogColorRed *= var11; + this.fogColorGreen *= var11; + this.fogColorBlue *= var20; + } + + var11 = var2.getWeightedThunderStrength(var1); + if(var11 > 0.0F) { + var20 = 1.0F - var11 * 0.5F; + this.fogColorRed *= var20; + this.fogColorGreen *= var20; + this.fogColorBlue *= var20; + } + + int var21 = ActiveRenderInfo.getBlockIdAtEntityViewpoint(this.mc.theWorld, var3, var1); + if(this.cloudFog) { + Vec3 var13 = var2.getCloudColour(var1); + this.fogColorRed = (float)var13.xCoord; + this.fogColorGreen = (float)var13.yCoord; + this.fogColorBlue = (float)var13.zCoord; + } else if(var21 != 0 && Block.blocksList[var21].blockMaterial == Material.water) { + this.fogColorRed = 0.02F; + this.fogColorGreen = 0.02F; + this.fogColorBlue = 0.2F; + } else if(var21 != 0 && Block.blocksList[var21].blockMaterial == Material.lava) { + this.fogColorRed = 0.6F; + this.fogColorGreen = 0.1F; + this.fogColorBlue = 0.0F; + } + + float var22 = this.fogColor2 + (this.fogColor1 - this.fogColor2) * var1; + this.fogColorRed *= var22; + this.fogColorGreen *= var22; + this.fogColorBlue *= var22; + double var14 = (var3.lastTickPosY + (var3.posY - var3.lastTickPosY) * (double)var1) * var2.provider.getVoidFogYFactor(); + if(var3.isPotionActive(Potion.blindness)) { + int var16 = var3.getActivePotionEffect(Potion.blindness).getDuration(); + if(var16 < 20) { + var14 *= (double)(1.0F - (float)var16 / 20.0F); + } else { + var14 = 0.0D; + } + } + + if(var14 < 1.0D) { + if(var14 < 0.0D) { + var14 = 0.0D; + } + + var14 *= var14; + this.fogColorRed = (float)((double)this.fogColorRed * var14); + this.fogColorGreen = (float)((double)this.fogColorGreen * var14); + this.fogColorBlue = (float)((double)this.fogColorBlue * var14); + } + + float var23; + if(this.field_82831_U > 0.0F) { + var23 = this.field_82832_V + (this.field_82831_U - this.field_82832_V) * var1; + this.fogColorRed = this.fogColorRed * (1.0F - var23) + this.fogColorRed * 0.7F * var23; + this.fogColorGreen = this.fogColorGreen * (1.0F - var23) + this.fogColorGreen * 0.6F * var23; + this.fogColorBlue = this.fogColorBlue * (1.0F - var23) + this.fogColorBlue * 0.6F * var23; + } + + float var17; + if(var3.isPotionActive(Potion.nightVision)) { + var23 = this.getNightVisionBrightness(this.mc.thePlayer, var1); + var17 = 1.0F / this.fogColorRed; + if(var17 > 1.0F / this.fogColorGreen) { + var17 = 1.0F / this.fogColorGreen; + } + + if(var17 > 1.0F / this.fogColorBlue) { + var17 = 1.0F / this.fogColorBlue; + } + + this.fogColorRed = this.fogColorRed * (1.0F - var23) + this.fogColorRed * var17 * var23; + this.fogColorGreen = this.fogColorGreen * (1.0F - var23) + this.fogColorGreen * var17 * var23; + this.fogColorBlue = this.fogColorBlue * (1.0F - var23) + this.fogColorBlue * var17 * var23; + } + + if(this.mc.gameSettings.anaglyph) { + var23 = (this.fogColorRed * 30.0F + this.fogColorGreen * 59.0F + this.fogColorBlue * 11.0F) / 100.0F; + var17 = (this.fogColorRed * 30.0F + this.fogColorGreen * 70.0F) / 100.0F; + float var18 = (this.fogColorRed * 30.0F + this.fogColorBlue * 70.0F) / 100.0F; + this.fogColorRed = var23; + this.fogColorGreen = var17; + this.fogColorBlue = var18; + } + + GL11.glClearColor(this.fogColorRed, this.fogColorGreen, this.fogColorBlue, 0.0F); + } + + private void setupFog(int var1, float var2) { + EntityLiving var3 = this.mc.renderViewEntity; + boolean var4 = false; + if(var3 instanceof EntityPlayer) { + var4 = ((EntityPlayer)var3).capabilities.isCreativeMode; + } + + if(var1 == 999) { + GL11.glFog(GL11.GL_FOG_COLOR, this.setFogColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); + GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_LINEAR); + GL11.glFogf(GL11.GL_FOG_START, 0.0F); + GL11.glFogf(GL11.GL_FOG_END, 8.0F); + if(GLContext.getCapabilities().GL_NV_fog_distance) { + GL11.glFogi(NVFogDistance.GL_FOG_DISTANCE_MODE_NV, NVFogDistance.GL_EYE_RADIAL_NV); + } + + GL11.glFogf(GL11.GL_FOG_START, 0.0F); + } else { + GL11.glFog(GL11.GL_FOG_COLOR, this.setFogColorBuffer(this.fogColorRed, this.fogColorGreen, this.fogColorBlue, 1.0F)); + GL11.glNormal3f(0.0F, -1.0F, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + int var5 = ActiveRenderInfo.getBlockIdAtEntityViewpoint(this.mc.theWorld, var3, var2); + float var6; + if(var3.isPotionActive(Potion.blindness)) { + var6 = 5.0F; + int var7 = var3.getActivePotionEffect(Potion.blindness).getDuration(); + if(var7 < 20) { + var6 = 5.0F + (this.farPlaneDistance - 5.0F) * (1.0F - (float)var7 / 20.0F); + } + + GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_LINEAR); + if(var1 < 0) { + GL11.glFogf(GL11.GL_FOG_START, 0.0F); + GL11.glFogf(GL11.GL_FOG_END, var6 * 0.8F); + } else { + GL11.glFogf(GL11.GL_FOG_START, var6 * 0.25F); + GL11.glFogf(GL11.GL_FOG_END, var6); + } + + if(GLContext.getCapabilities().GL_NV_fog_distance) { + GL11.glFogi(NVFogDistance.GL_FOG_DISTANCE_MODE_NV, NVFogDistance.GL_EYE_RADIAL_NV); + } + } else { + float var8; + float var9; + float var10; + float var11; + float var12; + if(this.cloudFog) { + GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP); + GL11.glFogf(GL11.GL_FOG_DENSITY, 0.1F); + var6 = 1.0F; + var12 = 1.0F; + var8 = 1.0F; + if(this.mc.gameSettings.anaglyph) { + var9 = (var6 * 30.0F + var12 * 59.0F + var8 * 11.0F) / 100.0F; + var10 = (var6 * 30.0F + var12 * 70.0F) / 100.0F; + var11 = (var6 * 30.0F + var8 * 70.0F) / 100.0F; + } + } else if(var5 > 0 && Block.blocksList[var5].blockMaterial == Material.water) { + GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP); + if(var3.isPotionActive(Potion.waterBreathing)) { + GL11.glFogf(GL11.GL_FOG_DENSITY, 0.05F); + } else { + GL11.glFogf(GL11.GL_FOG_DENSITY, 0.1F); + } + + var6 = 0.4F; + var12 = 0.4F; + var8 = 0.9F; + if(this.mc.gameSettings.anaglyph) { + var9 = (var6 * 30.0F + var12 * 59.0F + var8 * 11.0F) / 100.0F; + var10 = (var6 * 30.0F + var12 * 70.0F) / 100.0F; + var11 = (var6 * 30.0F + var8 * 70.0F) / 100.0F; + } + } else if(var5 > 0 && Block.blocksList[var5].blockMaterial == Material.lava) { + GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP); + GL11.glFogf(GL11.GL_FOG_DENSITY, 2.0F); + var6 = 0.4F; + var12 = 0.3F; + var8 = 0.3F; + if(this.mc.gameSettings.anaglyph) { + var9 = (var6 * 30.0F + var12 * 59.0F + var8 * 11.0F) / 100.0F; + var10 = (var6 * 30.0F + var12 * 70.0F) / 100.0F; + var11 = (var6 * 30.0F + var8 * 70.0F) / 100.0F; + } + } else { + var6 = this.farPlaneDistance; + if(this.mc.theWorld.provider.getWorldHasVoidParticles() && !var4) { + double var13 = (double)((var3.getBrightnessForRender(var2) & 15728640) >> 20) / 16.0D + (var3.lastTickPosY + (var3.posY - var3.lastTickPosY) * (double)var2 + 4.0D) / 32.0D; + if(var13 < 1.0D) { + if(var13 < 0.0D) { + var13 = 0.0D; + } + + var13 *= var13; + var9 = 100.0F * (float)var13; + if(var9 < 5.0F) { + var9 = 5.0F; + } + + if(var6 > var9) { + var6 = var9; + } + } + } + + GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_LINEAR); + if(var1 < 0) { + GL11.glFogf(GL11.GL_FOG_START, 0.0F); + GL11.glFogf(GL11.GL_FOG_END, var6 * 0.8F); + } else { + GL11.glFogf(GL11.GL_FOG_START, var6 * 0.25F); + GL11.glFogf(GL11.GL_FOG_END, var6); + } + + if(GLContext.getCapabilities().GL_NV_fog_distance) { + GL11.glFogi(NVFogDistance.GL_FOG_DISTANCE_MODE_NV, NVFogDistance.GL_EYE_RADIAL_NV); + } + + if(this.mc.theWorld.provider.doesXZShowFog((int)var3.posX, (int)var3.posZ)) { + GL11.glFogf(GL11.GL_FOG_START, var6 * 0.05F); + GL11.glFogf(GL11.GL_FOG_END, Math.min(var6, 192.0F) * 0.5F); + } + } + } + + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glColorMaterial(GL11.GL_FRONT, GL11.GL_AMBIENT); + } + } + + private FloatBuffer setFogColorBuffer(float var1, float var2, float var3, float var4) { + this.fogColorBuffer.clear(); + this.fogColorBuffer.put(var1).put(var2).put(var3).put(var4); + this.fogColorBuffer.flip(); + return this.fogColorBuffer; + } + + public static int performanceToFps(int var0) { + short var1 = 200; + if(var0 == 1) { + var1 = 120; + } + + if(var0 == 2) { + var1 = 35; + } + + return var1; + } + + static Minecraft getRendererMinecraft(EntityRenderer var0) { + return var0.mc; + } +} diff --git a/src/net/minecraft/src/EntitySelectorAlive.java b/src/net/minecraft/src/EntitySelectorAlive.java new file mode 100644 index 0000000..2a02d44 --- /dev/null +++ b/src/net/minecraft/src/EntitySelectorAlive.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +final class EntitySelectorAlive implements IEntitySelector { + public boolean isEntityApplicable(Entity var1) { + return var1.isEntityAlive(); + } +} diff --git a/src/net/minecraft/src/EntitySelectorArmoredMob.java b/src/net/minecraft/src/EntitySelectorArmoredMob.java new file mode 100644 index 0000000..ce051ab --- /dev/null +++ b/src/net/minecraft/src/EntitySelectorArmoredMob.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class EntitySelectorArmoredMob implements IEntitySelector { + private final ItemStack field_96567_c; + + public EntitySelectorArmoredMob(ItemStack var1) { + this.field_96567_c = var1; + } + + public boolean isEntityApplicable(Entity var1) { + if(!var1.isEntityAlive()) { + return false; + } else if(!(var1 instanceof EntityLiving)) { + return false; + } else { + EntityLiving var2 = (EntityLiving)var1; + return var2.getCurrentItemOrArmor(EntityLiving.getArmorPosition(this.field_96567_c)) != null ? false : var2.canPickUpLoot() || var2 instanceof EntityPlayer; + } + } +} diff --git a/src/net/minecraft/src/EntitySelectorInventory.java b/src/net/minecraft/src/EntitySelectorInventory.java new file mode 100644 index 0000000..0e923c5 --- /dev/null +++ b/src/net/minecraft/src/EntitySelectorInventory.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +final class EntitySelectorInventory implements IEntitySelector { + public boolean isEntityApplicable(Entity var1) { + return var1 instanceof IInventory && var1.isEntityAlive(); + } +} diff --git a/src/net/minecraft/src/EntitySenses.java b/src/net/minecraft/src/EntitySenses.java new file mode 100644 index 0000000..20d4fbf --- /dev/null +++ b/src/net/minecraft/src/EntitySenses.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class EntitySenses { + EntityLiving entityObj; + List seenEntities = new ArrayList(); + List unseenEntities = new ArrayList(); + + public EntitySenses(EntityLiving var1) { + this.entityObj = var1; + } + + public void clearSensingCache() { + this.seenEntities.clear(); + this.unseenEntities.clear(); + } + + public boolean canSee(Entity var1) { + if(this.seenEntities.contains(var1)) { + return true; + } else if(this.unseenEntities.contains(var1)) { + return false; + } else { + this.entityObj.worldObj.theProfiler.startSection("canSee"); + boolean var2 = this.entityObj.canEntityBeSeen(var1); + this.entityObj.worldObj.theProfiler.endSection(); + if(var2) { + this.seenEntities.add(var1); + } else { + this.unseenEntities.add(var1); + } + + return var2; + } + } +} diff --git a/src/net/minecraft/src/EntitySheep.java b/src/net/minecraft/src/EntitySheep.java new file mode 100644 index 0000000..1a13f61 --- /dev/null +++ b/src/net/minecraft/src/EntitySheep.java @@ -0,0 +1,215 @@ +package net.minecraft.src; + +import java.util.Random; + +public class EntitySheep extends EntityAnimal { + private final InventoryCrafting field_90016_e = new InventoryCrafting(new ContainerSheep(this), 2, 1); + public static final float[][] fleeceColorTable = new float[][]{{1.0F, 1.0F, 1.0F}, {0.85F, 0.5F, 0.2F}, {0.7F, 0.3F, 0.85F}, {0.4F, 0.6F, 0.85F}, {0.9F, 0.9F, 0.2F}, {0.5F, 0.8F, 0.1F}, {0.95F, 0.5F, 0.65F}, {0.3F, 0.3F, 0.3F}, {0.6F, 0.6F, 0.6F}, {0.3F, 0.5F, 0.6F}, {0.5F, 0.25F, 0.7F}, {0.2F, 0.3F, 0.7F}, {0.4F, 0.3F, 0.2F}, {0.4F, 0.5F, 0.2F}, {0.6F, 0.2F, 0.2F}, {0.1F, 0.1F, 0.1F}}; + private int sheepTimer; + private EntityAIEatGrass aiEatGrass = new EntityAIEatGrass(this); + + public EntitySheep(World var1) { + super(var1); + this.texture = "/mob/sheep.png"; + this.setSize(0.9F, 1.3F); + float var2 = 0.23F; + this.getNavigator().setAvoidsWater(true); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIPanic(this, 0.38F)); + this.tasks.addTask(2, new EntityAIMate(this, var2)); + this.tasks.addTask(3, new EntityAITempt(this, 0.25F, Item.wheat.itemID, false)); + this.tasks.addTask(4, new EntityAIFollowParent(this, 0.25F)); + this.tasks.addTask(5, this.aiEatGrass); + this.tasks.addTask(6, new EntityAIWander(this, var2)); + this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 6.0F)); + this.tasks.addTask(8, new EntityAILookIdle(this)); + this.field_90016_e.setInventorySlotContents(0, new ItemStack(Item.dyePowder, 1, 0)); + this.field_90016_e.setInventorySlotContents(1, new ItemStack(Item.dyePowder, 1, 0)); + } + + protected boolean isAIEnabled() { + return true; + } + + protected void updateAITasks() { + this.sheepTimer = this.aiEatGrass.getEatGrassTick(); + super.updateAITasks(); + } + + public void onLivingUpdate() { + if(this.worldObj.isRemote) { + this.sheepTimer = Math.max(0, this.sheepTimer - 1); + } + + super.onLivingUpdate(); + } + + public int getMaxHealth() { + return 8; + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, new Byte((byte)0)); + } + + protected void dropFewItems(boolean var1, int var2) { + if(!this.getSheared()) { + this.entityDropItem(new ItemStack(Block.cloth.blockID, 1, this.getFleeceColor()), 0.0F); + } + + } + + protected int getDropItemId() { + return Block.cloth.blockID; + } + + public void handleHealthUpdate(byte var1) { + if(var1 == 10) { + this.sheepTimer = 40; + } else { + super.handleHealthUpdate(var1); + } + + } + + public float func_70894_j(float var1) { + return this.sheepTimer <= 0 ? 0.0F : (this.sheepTimer >= 4 && this.sheepTimer <= 36 ? 1.0F : (this.sheepTimer < 4 ? ((float)this.sheepTimer - var1) / 4.0F : -((float)(this.sheepTimer - 40) - var1) / 4.0F)); + } + + public float func_70890_k(float var1) { + if(this.sheepTimer > 4 && this.sheepTimer <= 36) { + float var2 = ((float)(this.sheepTimer - 4) - var1) / 32.0F; + return (float)Math.PI * 0.2F + (float)Math.PI * 0.07F * MathHelper.sin(var2 * 28.7F); + } else { + return this.sheepTimer > 0 ? (float)Math.PI * 0.2F : this.rotationPitch / (180.0F / (float)Math.PI); + } + } + + public boolean interact(EntityPlayer var1) { + ItemStack var2 = var1.inventory.getCurrentItem(); + if(var2 != null && var2.itemID == Item.shears.itemID && !this.getSheared() && !this.isChild()) { + if(!this.worldObj.isRemote) { + this.setSheared(true); + int var3 = 1 + this.rand.nextInt(3); + + for(int var4 = 0; var4 < var3; ++var4) { + EntityItem var5 = this.entityDropItem(new ItemStack(Block.cloth.blockID, 1, this.getFleeceColor()), 1.0F); + var5.motionY += (double)(this.rand.nextFloat() * 0.05F); + var5.motionX += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F); + var5.motionZ += (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.1F); + } + } + + var2.damageItem(1, var1); + this.playSound("mob.sheep.shear", 1.0F, 1.0F); + } + + return super.interact(var1); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setBoolean("Sheared", this.getSheared()); + var1.setByte("Color", (byte)this.getFleeceColor()); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.setSheared(var1.getBoolean("Sheared")); + this.setFleeceColor(var1.getByte("Color")); + } + + protected String getLivingSound() { + return "mob.sheep.say"; + } + + protected String getHurtSound() { + return "mob.sheep.say"; + } + + protected String getDeathSound() { + return "mob.sheep.say"; + } + + protected void playStepSound(int var1, int var2, int var3, int var4) { + this.playSound("mob.sheep.step", 0.15F, 1.0F); + } + + public int getFleeceColor() { + return this.dataWatcher.getWatchableObjectByte(16) & 15; + } + + public void setFleeceColor(int var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(16); + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 & 240 | var1 & 15))); + } + + public boolean getSheared() { + return (this.dataWatcher.getWatchableObjectByte(16) & 16) != 0; + } + + public void setSheared(boolean var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(16); + if(var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 | 16))); + } else { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 & -17))); + } + + } + + public static int getRandomFleeceColor(Random var0) { + int var1 = var0.nextInt(100); + return var1 < 5 ? 15 : (var1 < 10 ? 7 : (var1 < 15 ? 8 : (var1 < 18 ? 12 : (var0.nextInt(500) == 0 ? 6 : 0)))); + } + + public EntitySheep func_90015_b(EntityAgeable var1) { + EntitySheep var2 = (EntitySheep)var1; + EntitySheep var3 = new EntitySheep(this.worldObj); + int var4 = this.func_90014_a(this, var2); + var3.setFleeceColor(15 - var4); + return var3; + } + + public void eatGrassBonus() { + this.setSheared(false); + if(this.isChild()) { + int var1 = this.getGrowingAge() + 1200; + if(var1 > 0) { + var1 = 0; + } + + this.setGrowingAge(var1); + } + + } + + public void initCreature() { + this.setFleeceColor(getRandomFleeceColor(this.worldObj.rand)); + } + + private int func_90014_a(EntityAnimal var1, EntityAnimal var2) { + int var3 = this.func_90013_b(var1); + int var4 = this.func_90013_b(var2); + this.field_90016_e.getStackInSlot(0).setItemDamage(var3); + this.field_90016_e.getStackInSlot(1).setItemDamage(var4); + ItemStack var5 = CraftingManager.getInstance().findMatchingRecipe(this.field_90016_e, ((EntitySheep)var1).worldObj); + int var6; + if(var5 != null && var5.getItem().itemID == Item.dyePowder.itemID) { + var6 = var5.getItemDamage(); + } else { + var6 = this.worldObj.rand.nextBoolean() ? var3 : var4; + } + + return var6; + } + + private int func_90013_b(EntityAnimal var1) { + return 15 - ((EntitySheep)var1).getFleeceColor(); + } + + public EntityAgeable createChild(EntityAgeable var1) { + return this.func_90015_b(var1); + } +} diff --git a/src/net/minecraft/src/EntitySilverfish.java b/src/net/minecraft/src/EntitySilverfish.java new file mode 100644 index 0000000..672a97b --- /dev/null +++ b/src/net/minecraft/src/EntitySilverfish.java @@ -0,0 +1,148 @@ +package net.minecraft.src; + +public class EntitySilverfish extends EntityMob { + private int allySummonCooldown; + + public EntitySilverfish(World var1) { + super(var1); + this.texture = "/mob/silverfish.png"; + this.setSize(0.3F, 0.7F); + this.moveSpeed = 0.6F; + } + + public int getMaxHealth() { + return 8; + } + + protected boolean canTriggerWalking() { + return false; + } + + protected Entity findPlayerToAttack() { + double var1 = 8.0D; + return this.worldObj.getClosestVulnerablePlayerToEntity(this, var1); + } + + protected String getLivingSound() { + return "mob.silverfish.say"; + } + + protected String getHurtSound() { + return "mob.silverfish.hit"; + } + + protected String getDeathSound() { + return "mob.silverfish.kill"; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else { + if(this.allySummonCooldown <= 0 && (var1 instanceof EntityDamageSource || var1 == DamageSource.magic)) { + this.allySummonCooldown = 20; + } + + return super.attackEntityFrom(var1, var2); + } + } + + protected void attackEntity(Entity var1, float var2) { + if(this.attackTime <= 0 && var2 < 1.2F && var1.boundingBox.maxY > this.boundingBox.minY && var1.boundingBox.minY < this.boundingBox.maxY) { + this.attackTime = 20; + this.attackEntityAsMob(var1); + } + + } + + protected void playStepSound(int var1, int var2, int var3, int var4) { + this.playSound("mob.silverfish.step", 0.15F, 1.0F); + } + + protected int getDropItemId() { + return 0; + } + + public void onUpdate() { + this.renderYawOffset = this.rotationYaw; + super.onUpdate(); + } + + protected void updateEntityActionState() { + super.updateEntityActionState(); + if(!this.worldObj.isRemote) { + int var1; + int var2; + int var3; + int var5; + if(this.allySummonCooldown > 0) { + --this.allySummonCooldown; + if(this.allySummonCooldown == 0) { + var1 = MathHelper.floor_double(this.posX); + var2 = MathHelper.floor_double(this.posY); + var3 = MathHelper.floor_double(this.posZ); + boolean var4 = false; + + for(var5 = 0; !var4 && var5 <= 5 && var5 >= -5; var5 = var5 <= 0 ? 1 - var5 : 0 - var5) { + for(int var6 = 0; !var4 && var6 <= 10 && var6 >= -10; var6 = var6 <= 0 ? 1 - var6 : 0 - var6) { + for(int var7 = 0; !var4 && var7 <= 10 && var7 >= -10; var7 = var7 <= 0 ? 1 - var7 : 0 - var7) { + int var8 = this.worldObj.getBlockId(var1 + var6, var2 + var5, var3 + var7); + if(var8 == Block.silverfish.blockID) { + this.worldObj.destroyBlock(var1 + var6, var2 + var5, var3 + var7, false); + Block.silverfish.onBlockDestroyedByPlayer(this.worldObj, var1 + var6, var2 + var5, var3 + var7, 0); + if(this.rand.nextBoolean()) { + var4 = true; + break; + } + } + } + } + } + } + } + + if(this.entityToAttack == null && !this.hasPath()) { + var1 = MathHelper.floor_double(this.posX); + var2 = MathHelper.floor_double(this.posY + 0.5D); + var3 = MathHelper.floor_double(this.posZ); + int var9 = this.rand.nextInt(6); + var5 = this.worldObj.getBlockId(var1 + Facing.offsetsXForSide[var9], var2 + Facing.offsetsYForSide[var9], var3 + Facing.offsetsZForSide[var9]); + if(BlockSilverfish.getPosingIdByMetadata(var5)) { + this.worldObj.setBlock(var1 + Facing.offsetsXForSide[var9], var2 + Facing.offsetsYForSide[var9], var3 + Facing.offsetsZForSide[var9], Block.silverfish.blockID, BlockSilverfish.getMetadataForBlockType(var5), 3); + this.spawnExplosionParticle(); + this.setDead(); + } else { + this.updateWanderPath(); + } + } else if(this.entityToAttack != null && !this.hasPath()) { + this.entityToAttack = null; + } + + } + } + + public float getBlockPathWeight(int var1, int var2, int var3) { + return this.worldObj.getBlockId(var1, var2 - 1, var3) == Block.stone.blockID ? 10.0F : super.getBlockPathWeight(var1, var2, var3); + } + + protected boolean isValidLightLevel() { + return true; + } + + public boolean getCanSpawnHere() { + if(super.getCanSpawnHere()) { + EntityPlayer var1 = this.worldObj.getClosestPlayerToEntity(this, 5.0D); + return var1 == null; + } else { + return false; + } + } + + public int getAttackStrength(Entity var1) { + return 1; + } + + public EnumCreatureAttribute getCreatureAttribute() { + return EnumCreatureAttribute.ARTHROPOD; + } +} diff --git a/src/net/minecraft/src/EntitySkeleton.java b/src/net/minecraft/src/EntitySkeleton.java new file mode 100644 index 0000000..1b51da5 --- /dev/null +++ b/src/net/minecraft/src/EntitySkeleton.java @@ -0,0 +1,267 @@ +package net.minecraft.src; + +import java.util.Calendar; + +public class EntitySkeleton extends EntityMob implements IRangedAttackMob { + private EntityAIArrowAttack aiArrowAttack = new EntityAIArrowAttack(this, 0.25F, 20, 60, 15.0F); + private EntityAIAttackOnCollide aiAttackOnCollide = new EntityAIAttackOnCollide(this, EntityPlayer.class, 0.31F, false); + + public EntitySkeleton(World var1) { + super(var1); + this.texture = "/mob/skeleton.png"; + this.moveSpeed = 0.25F; + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIRestrictSun(this)); + this.tasks.addTask(3, new EntityAIFleeSun(this, this.moveSpeed)); + this.tasks.addTask(5, new EntityAIWander(this, this.moveSpeed)); + 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)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 16.0F, 0, true)); + if(var1 != null && !var1.isRemote) { + this.setCombatTask(); + } + + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(13, new Byte((byte)0)); + } + + public boolean isAIEnabled() { + return true; + } + + public int getMaxHealth() { + return 20; + } + + protected String getLivingSound() { + return "mob.skeleton.say"; + } + + protected String getHurtSound() { + return "mob.skeleton.hurt"; + } + + protected String getDeathSound() { + return "mob.skeleton.death"; + } + + protected void playStepSound(int var1, int var2, int var3, int var4) { + this.playSound("mob.skeleton.step", 0.15F, 1.0F); + } + + public boolean attackEntityAsMob(Entity var1) { + if(super.attackEntityAsMob(var1)) { + if(this.getSkeletonType() == 1 && var1 instanceof EntityLiving) { + ((EntityLiving)var1).addPotionEffect(new PotionEffect(Potion.wither.id, 200)); + } + + return true; + } else { + return false; + } + } + + public int getAttackStrength(Entity var1) { + if(this.getSkeletonType() == 1) { + ItemStack var2 = this.getHeldItem(); + int var3 = 4; + if(var2 != null) { + var3 += var2.getDamageVsEntity(this); + } + + return var3; + } else { + return super.getAttackStrength(var1); + } + } + + public EnumCreatureAttribute getCreatureAttribute() { + return EnumCreatureAttribute.UNDEAD; + } + + public void onLivingUpdate() { + if(this.worldObj.isDaytime() && !this.worldObj.isRemote) { + float var1 = this.getBrightness(1.0F); + if(var1 > 0.5F && this.rand.nextFloat() * 30.0F < (var1 - 0.4F) * 2.0F && this.worldObj.canBlockSeeTheSky(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ))) { + boolean var2 = true; + ItemStack var3 = this.getCurrentItemOrArmor(4); + if(var3 != null) { + if(var3.isItemStackDamageable()) { + var3.setItemDamage(var3.getItemDamageForDisplay() + this.rand.nextInt(2)); + if(var3.getItemDamageForDisplay() >= var3.getMaxDamage()) { + this.renderBrokenItemStack(var3); + this.setCurrentItemOrArmor(4, (ItemStack)null); + } + } + + var2 = false; + } + + if(var2) { + this.setFire(8); + } + } + } + + if(this.worldObj.isRemote && this.getSkeletonType() == 1) { + this.setSize(0.72F, 2.34F); + } + + super.onLivingUpdate(); + } + + public void onDeath(DamageSource var1) { + super.onDeath(var1); + if(var1.getSourceOfDamage() instanceof EntityArrow && var1.getEntity() instanceof EntityPlayer) { + EntityPlayer var2 = (EntityPlayer)var1.getEntity(); + double var3 = var2.posX - this.posX; + double var5 = var2.posZ - this.posZ; + if(var3 * var3 + var5 * var5 >= 2500.0D) { + var2.triggerAchievement(AchievementList.snipeSkeleton); + } + } + + } + + protected int getDropItemId() { + return Item.arrow.itemID; + } + + protected void dropFewItems(boolean var1, int var2) { + int var3; + int var4; + if(this.getSkeletonType() == 1) { + var3 = this.rand.nextInt(3 + var2) - 1; + + for(var4 = 0; var4 < var3; ++var4) { + this.dropItem(Item.coal.itemID, 1); + } + } else { + var3 = this.rand.nextInt(3 + var2); + + for(var4 = 0; var4 < var3; ++var4) { + this.dropItem(Item.arrow.itemID, 1); + } + } + + var3 = this.rand.nextInt(3 + var2); + + for(var4 = 0; var4 < var3; ++var4) { + this.dropItem(Item.bone.itemID, 1); + } + + } + + protected void dropRareDrop(int var1) { + if(this.getSkeletonType() == 1) { + this.entityDropItem(new ItemStack(Item.skull.itemID, 1, 1), 0.0F); + } + + } + + protected void addRandomArmor() { + super.addRandomArmor(); + this.setCurrentItemOrArmor(0, new ItemStack(Item.bow)); + } + + public String getTexture() { + return this.getSkeletonType() == 1 ? "/mob/skeleton_wither.png" : super.getTexture(); + } + + public void initCreature() { + if(this.worldObj.provider instanceof WorldProviderHell && this.getRNG().nextInt(5) > 0) { + this.tasks.addTask(4, this.aiAttackOnCollide); + this.setSkeletonType(1); + this.setCurrentItemOrArmor(0, new ItemStack(Item.swordStone)); + } else { + this.tasks.addTask(4, this.aiArrowAttack); + this.addRandomArmor(); + this.func_82162_bC(); + } + + this.setCanPickUpLoot(this.rand.nextFloat() < pickUpLootProability[this.worldObj.difficultySetting]); + if(this.getCurrentItemOrArmor(4) == null) { + Calendar var1 = this.worldObj.getCurrentDate(); + if(var1.get(2) + 1 == 10 && var1.get(5) == 31 && this.rand.nextFloat() < 0.25F) { + this.setCurrentItemOrArmor(4, new ItemStack(this.rand.nextFloat() < 0.1F ? Block.pumpkinLantern : Block.pumpkin)); + this.equipmentDropChances[4] = 0.0F; + } + } + + } + + public void setCombatTask() { + this.tasks.removeTask(this.aiAttackOnCollide); + this.tasks.removeTask(this.aiArrowAttack); + ItemStack var1 = this.getHeldItem(); + if(var1 != null && var1.itemID == Item.bow.itemID) { + this.tasks.addTask(4, this.aiArrowAttack); + } else { + this.tasks.addTask(4, this.aiAttackOnCollide); + } + + } + + public void attackEntityWithRangedAttack(EntityLiving var1, float var2) { + EntityArrow var3 = new EntityArrow(this.worldObj, this, var1, 1.6F, (float)(14 - this.worldObj.difficultySetting * 4)); + int var4 = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, this.getHeldItem()); + int var5 = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, this.getHeldItem()); + var3.setDamage((double)(var2 * 2.0F) + this.rand.nextGaussian() * 0.25D + (double)((float)this.worldObj.difficultySetting * 0.11F)); + if(var4 > 0) { + var3.setDamage(var3.getDamage() + (double)var4 * 0.5D + 0.5D); + } + + if(var5 > 0) { + var3.setKnockbackStrength(var5); + } + + if(EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, this.getHeldItem()) > 0 || this.getSkeletonType() == 1) { + var3.setFire(100); + } + + this.playSound("random.bow", 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F)); + this.worldObj.spawnEntityInWorld(var3); + } + + public int getSkeletonType() { + return this.dataWatcher.getWatchableObjectByte(13); + } + + public void setSkeletonType(int var1) { + this.dataWatcher.updateObject(13, Byte.valueOf((byte)var1)); + this.isImmuneToFire = var1 == 1; + if(var1 == 1) { + this.setSize(0.72F, 2.34F); + } else { + this.setSize(0.6F, 1.8F); + } + + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + if(var1.hasKey("SkeletonType")) { + byte var2 = var1.getByte("SkeletonType"); + this.setSkeletonType(var2); + } + + this.setCombatTask(); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setByte("SkeletonType", (byte)this.getSkeletonType()); + } + + public void setCurrentItemOrArmor(int var1, ItemStack var2) { + super.setCurrentItemOrArmor(var1, var2); + if(!this.worldObj.isRemote && var1 == 0) { + this.setCombatTask(); + } + + } +} diff --git a/src/net/minecraft/src/EntitySlime.java b/src/net/minecraft/src/EntitySlime.java new file mode 100644 index 0000000..3e0e839 --- /dev/null +++ b/src/net/minecraft/src/EntitySlime.java @@ -0,0 +1,221 @@ +package net.minecraft.src; + +public class EntitySlime extends EntityLiving implements IMob { + private static final float[] spawnChances = new float[]{1.0F, 12.0F / 16.0F, 0.5F, 0.25F, 0.0F, 0.25F, 0.5F, 12.0F / 16.0F}; + public float field_70813_a; + public float field_70811_b; + public float field_70812_c; + private int slimeJumpDelay = 0; + + public EntitySlime(World var1) { + super(var1); + this.texture = "/mob/slime.png"; + int var2 = 1 << this.rand.nextInt(3); + this.yOffset = 0.0F; + this.slimeJumpDelay = this.rand.nextInt(20) + 10; + this.setSlimeSize(var2); + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, new Byte((byte)1)); + } + + protected void setSlimeSize(int var1) { + this.dataWatcher.updateObject(16, new Byte((byte)var1)); + this.setSize(0.6F * (float)var1, 0.6F * (float)var1); + this.setPosition(this.posX, this.posY, this.posZ); + this.setEntityHealth(this.getMaxHealth()); + this.experienceValue = var1; + } + + public int getMaxHealth() { + int var1 = this.getSlimeSize(); + return var1 * var1; + } + + public int getSlimeSize() { + return this.dataWatcher.getWatchableObjectByte(16); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setInteger("Size", this.getSlimeSize() - 1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.setSlimeSize(var1.getInteger("Size") + 1); + } + + protected String getSlimeParticle() { + return "slime"; + } + + protected String getJumpSound() { + return "mob.slime." + (this.getSlimeSize() > 1 ? "big" : "small"); + } + + public void onUpdate() { + if(!this.worldObj.isRemote && this.worldObj.difficultySetting == 0 && this.getSlimeSize() > 0) { + this.isDead = true; + } + + this.field_70811_b += (this.field_70813_a - this.field_70811_b) * 0.5F; + this.field_70812_c = this.field_70811_b; + boolean var1 = this.onGround; + super.onUpdate(); + int var2; + if(this.onGround && !var1) { + var2 = this.getSlimeSize(); + + for(int var3 = 0; var3 < var2 * 8; ++var3) { + float var4 = this.rand.nextFloat() * (float)Math.PI * 2.0F; + float var5 = this.rand.nextFloat() * 0.5F + 0.5F; + float var6 = MathHelper.sin(var4) * (float)var2 * 0.5F * var5; + float var7 = MathHelper.cos(var4) * (float)var2 * 0.5F * var5; + this.worldObj.spawnParticle(this.getSlimeParticle(), this.posX + (double)var6, this.boundingBox.minY, this.posZ + (double)var7, 0.0D, 0.0D, 0.0D); + } + + if(this.makesSoundOnLand()) { + this.playSound(this.getJumpSound(), this.getSoundVolume(), ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F) / 0.8F); + } + + this.field_70813_a = -0.5F; + } else if(!this.onGround && var1) { + this.field_70813_a = 1.0F; + } + + this.func_70808_l(); + if(this.worldObj.isRemote) { + var2 = this.getSlimeSize(); + this.setSize(0.6F * (float)var2, 0.6F * (float)var2); + } + + } + + protected void updateEntityActionState() { + this.despawnEntity(); + EntityPlayer var1 = this.worldObj.getClosestVulnerablePlayerToEntity(this, 16.0D); + if(var1 != null) { + this.faceEntity(var1, 10.0F, 20.0F); + } + + if(this.onGround && this.slimeJumpDelay-- <= 0) { + this.slimeJumpDelay = this.getJumpDelay(); + if(var1 != null) { + this.slimeJumpDelay /= 3; + } + + this.isJumping = true; + if(this.makesSoundOnJump()) { + this.playSound(this.getJumpSound(), this.getSoundVolume(), ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F) * 0.8F); + } + + this.moveStrafing = 1.0F - this.rand.nextFloat() * 2.0F; + this.moveForward = (float)(1 * this.getSlimeSize()); + } else { + this.isJumping = false; + if(this.onGround) { + this.moveStrafing = this.moveForward = 0.0F; + } + } + + } + + protected void func_70808_l() { + this.field_70813_a *= 0.6F; + } + + protected int getJumpDelay() { + return this.rand.nextInt(20) + 10; + } + + protected EntitySlime createInstance() { + return new EntitySlime(this.worldObj); + } + + public void setDead() { + int var1 = this.getSlimeSize(); + if(!this.worldObj.isRemote && var1 > 1 && this.getHealth() <= 0) { + int var2 = 2 + this.rand.nextInt(3); + + for(int var3 = 0; var3 < var2; ++var3) { + float var4 = ((float)(var3 % 2) - 0.5F) * (float)var1 / 4.0F; + float var5 = ((float)(var3 / 2) - 0.5F) * (float)var1 / 4.0F; + EntitySlime var6 = this.createInstance(); + var6.setSlimeSize(var1 / 2); + var6.setLocationAndAngles(this.posX + (double)var4, this.posY + 0.5D, this.posZ + (double)var5, this.rand.nextFloat() * 360.0F, 0.0F); + this.worldObj.spawnEntityInWorld(var6); + } + } + + super.setDead(); + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(this.canDamagePlayer()) { + int var2 = this.getSlimeSize(); + if(this.canEntityBeSeen(var1) && this.getDistanceSqToEntity(var1) < 0.6D * (double)var2 * 0.6D * (double)var2 && var1.attackEntityFrom(DamageSource.causeMobDamage(this), this.getAttackStrength())) { + this.playSound("mob.attack", 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + } + + } + + protected boolean canDamagePlayer() { + return this.getSlimeSize() > 1; + } + + protected int getAttackStrength() { + return this.getSlimeSize(); + } + + protected String getHurtSound() { + return "mob.slime." + (this.getSlimeSize() > 1 ? "big" : "small"); + } + + protected String getDeathSound() { + return "mob.slime." + (this.getSlimeSize() > 1 ? "big" : "small"); + } + + protected int getDropItemId() { + return this.getSlimeSize() == 1 ? Item.slimeBall.itemID : 0; + } + + public boolean getCanSpawnHere() { + Chunk var1 = this.worldObj.getChunkFromBlockCoords(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posZ)); + if(this.worldObj.getWorldInfo().getTerrainType() == WorldType.FLAT && this.rand.nextInt(4) != 1) { + return false; + } else { + if(this.getSlimeSize() == 1 || this.worldObj.difficultySetting > 0) { + BiomeGenBase var2 = this.worldObj.getBiomeGenForCoords(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posZ)); + if(var2 == BiomeGenBase.swampland && this.posY > 50.0D && this.posY < 70.0D && this.rand.nextFloat() < 0.5F && this.rand.nextFloat() < spawnChances[this.worldObj.getMoonPhase()] && this.worldObj.getBlockLightValue(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)) <= this.rand.nextInt(8)) { + return super.getCanSpawnHere(); + } + + if(this.rand.nextInt(10) == 0 && var1.getRandomWithSeed(987234911L).nextInt(10) == 0 && this.posY < 40.0D) { + return super.getCanSpawnHere(); + } + } + + return false; + } + } + + protected float getSoundVolume() { + return 0.4F * (float)this.getSlimeSize(); + } + + public int getVerticalFaceSpeed() { + return 0; + } + + protected boolean makesSoundOnJump() { + return this.getSlimeSize() > 0; + } + + protected boolean makesSoundOnLand() { + return this.getSlimeSize() > 2; + } +} diff --git a/src/net/minecraft/src/EntitySmallFireball.java b/src/net/minecraft/src/EntitySmallFireball.java new file mode 100644 index 0000000..3acd2ec --- /dev/null +++ b/src/net/minecraft/src/EntitySmallFireball.java @@ -0,0 +1,66 @@ +package net.minecraft.src; + +public class EntitySmallFireball extends EntityFireball { + public EntitySmallFireball(World var1) { + super(var1); + this.setSize(5.0F / 16.0F, 5.0F / 16.0F); + } + + public EntitySmallFireball(World var1, EntityLiving var2, double var3, double var5, double var7) { + super(var1, var2, var3, var5, var7); + this.setSize(5.0F / 16.0F, 5.0F / 16.0F); + } + + public EntitySmallFireball(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1, var2, var4, var6, var8, var10, var12); + this.setSize(5.0F / 16.0F, 5.0F / 16.0F); + } + + protected void onImpact(MovingObjectPosition var1) { + if(!this.worldObj.isRemote) { + if(var1.entityHit != null) { + if(!var1.entityHit.isImmuneToFire() && var1.entityHit.attackEntityFrom(DamageSource.causeFireballDamage(this, this.shootingEntity), 5)) { + var1.entityHit.setFire(5); + } + } else { + int var2 = var1.blockX; + int var3 = var1.blockY; + int var4 = var1.blockZ; + switch(var1.sideHit) { + case 0: + --var3; + break; + case 1: + ++var3; + break; + case 2: + --var4; + break; + case 3: + ++var4; + break; + case 4: + --var2; + break; + case 5: + ++var2; + } + + if(this.worldObj.isAirBlock(var2, var3, var4)) { + this.worldObj.setBlock(var2, var3, var4, Block.fire.blockID); + } + } + + this.setDead(); + } + + } + + public boolean canBeCollidedWith() { + return false; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + return false; + } +} diff --git a/src/net/minecraft/src/EntitySmokeFX.java b/src/net/minecraft/src/EntitySmokeFX.java new file mode 100644 index 0000000..5c8fe85 --- /dev/null +++ b/src/net/minecraft/src/EntitySmokeFX.java @@ -0,0 +1,66 @@ +package net.minecraft.src; + +public class EntitySmokeFX extends EntityFX { + float smokeParticleScale; + + public EntitySmokeFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + this(var1, var2, var4, var6, var8, var10, var12, 1.0F); + } + + public EntitySmokeFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12, float var14) { + super(var1, var2, var4, var6, 0.0D, 0.0D, 0.0D); + this.motionX *= (double)0.1F; + this.motionY *= (double)0.1F; + this.motionZ *= (double)0.1F; + this.motionX += var8; + this.motionY += var10; + this.motionZ += var12; + this.particleRed = this.particleGreen = this.particleBlue = (float)(Math.random() * (double)0.3F); + this.particleScale *= 12.0F / 16.0F; + this.particleScale *= var14; + this.smokeParticleScale = this.particleScale; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); + this.particleMaxAge = (int)((float)this.particleMaxAge * var14); + this.noClip = false; + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = ((float)this.particleAge + var2) / (float)this.particleMaxAge * 32.0F; + if(var8 < 0.0F) { + var8 = 0.0F; + } + + if(var8 > 1.0F) { + var8 = 1.0F; + } + + this.particleScale = this.smokeParticleScale * var8; + super.renderParticle(var1, var2, var3, var4, var5, var6, var7); + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + if(this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.motionY += 0.004D; + this.moveEntity(this.motionX, this.motionY, this.motionZ); + if(this.posY == this.prevPosY) { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= (double)0.96F; + this.motionY *= (double)0.96F; + this.motionZ *= (double)0.96F; + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + } +} diff --git a/src/net/minecraft/src/EntitySnowShovelFX.java b/src/net/minecraft/src/EntitySnowShovelFX.java new file mode 100644 index 0000000..2963cc4 --- /dev/null +++ b/src/net/minecraft/src/EntitySnowShovelFX.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +public class EntitySnowShovelFX extends EntityFX { + float snowDigParticleScale; + + public EntitySnowShovelFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + this(var1, var2, var4, var6, var8, var10, var12, 1.0F); + } + + public EntitySnowShovelFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12, float var14) { + super(var1, var2, var4, var6, var8, var10, var12); + this.motionX *= (double)0.1F; + this.motionY *= (double)0.1F; + this.motionZ *= (double)0.1F; + this.motionX += var8; + this.motionY += var10; + this.motionZ += var12; + this.particleRed = this.particleGreen = this.particleBlue = 1.0F - (float)(Math.random() * (double)0.3F); + this.particleScale *= 12.0F / 16.0F; + this.particleScale *= var14; + this.snowDigParticleScale = this.particleScale; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); + this.particleMaxAge = (int)((float)this.particleMaxAge * var14); + this.noClip = false; + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = ((float)this.particleAge + var2) / (float)this.particleMaxAge * 32.0F; + if(var8 < 0.0F) { + var8 = 0.0F; + } + + if(var8 > 1.0F) { + var8 = 1.0F; + } + + this.particleScale = this.snowDigParticleScale * var8; + super.renderParticle(var1, var2, var3, var4, var5, var6, var7); + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + if(this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } + + this.setParticleTextureIndex(7 - this.particleAge * 8 / this.particleMaxAge); + this.motionY -= 0.03D; + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.99F; + this.motionY *= (double)0.99F; + this.motionZ *= (double)0.99F; + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + } +} diff --git a/src/net/minecraft/src/EntitySnowball.java b/src/net/minecraft/src/EntitySnowball.java new file mode 100644 index 0000000..e3244c8 --- /dev/null +++ b/src/net/minecraft/src/EntitySnowball.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +public class EntitySnowball extends EntityThrowable { + public EntitySnowball(World var1) { + super(var1); + } + + public EntitySnowball(World var1, EntityLiving var2) { + super(var1, var2); + } + + public EntitySnowball(World var1, double var2, double var4, double var6) { + super(var1, var2, var4, var6); + } + + protected void onImpact(MovingObjectPosition var1) { + if(var1.entityHit != null) { + byte var2 = 0; + if(var1.entityHit instanceof EntityBlaze) { + var2 = 3; + } + + var1.entityHit.attackEntityFrom(DamageSource.causeThrownDamage(this, this.getThrower()), var2); + } + + for(int var3 = 0; var3 < 8; ++var3) { + this.worldObj.spawnParticle("snowballpoof", this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D); + } + + if(!this.worldObj.isRemote) { + this.setDead(); + } + + } +} diff --git a/src/net/minecraft/src/EntitySnowman.java b/src/net/minecraft/src/EntitySnowman.java new file mode 100644 index 0000000..bf10ca9 --- /dev/null +++ b/src/net/minecraft/src/EntitySnowman.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +public class EntitySnowman extends EntityGolem implements IRangedAttackMob { + public EntitySnowman(World var1) { + super(var1); + this.texture = "/mob/snowman.png"; + this.setSize(0.4F, 1.8F); + this.getNavigator().setAvoidsWater(true); + this.tasks.addTask(1, new EntityAIArrowAttack(this, 0.25F, 20, 10.0F)); + this.tasks.addTask(2, new EntityAIWander(this, 0.2F)); + 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, 16.0F, 0, true, false, IMob.mobSelector)); + } + + public boolean isAIEnabled() { + return true; + } + + public int getMaxHealth() { + return 4; + } + + public void onLivingUpdate() { + super.onLivingUpdate(); + if(this.isWet()) { + this.attackEntityFrom(DamageSource.drown, 1); + } + + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.posZ); + if(this.worldObj.getBiomeGenForCoords(var1, var2).getFloatTemperature() > 1.0F) { + this.attackEntityFrom(DamageSource.onFire, 1); + } + + for(var1 = 0; var1 < 4; ++var1) { + var2 = MathHelper.floor_double(this.posX + (double)((float)(var1 % 2 * 2 - 1) * 0.25F)); + int var3 = MathHelper.floor_double(this.posY); + int var4 = MathHelper.floor_double(this.posZ + (double)((float)(var1 / 2 % 2 * 2 - 1) * 0.25F)); + if(this.worldObj.getBlockId(var2, var3, var4) == 0 && this.worldObj.getBiomeGenForCoords(var2, var4).getFloatTemperature() < 0.8F && Block.snow.canPlaceBlockAt(this.worldObj, var2, var3, var4)) { + this.worldObj.setBlock(var2, var3, var4, Block.snow.blockID); + } + } + + } + + protected int getDropItemId() { + return Item.snowball.itemID; + } + + protected void dropFewItems(boolean var1, int var2) { + int var3 = this.rand.nextInt(16); + + for(int var4 = 0; var4 < var3; ++var4) { + this.dropItem(Item.snowball.itemID, 1); + } + + } + + public void attackEntityWithRangedAttack(EntityLiving var1, float var2) { + EntitySnowball var3 = new EntitySnowball(this.worldObj, this); + double var4 = var1.posX - this.posX; + double var6 = var1.posY + (double)var1.getEyeHeight() - (double)1.1F - var3.posY; + double var8 = var1.posZ - this.posZ; + float var10 = MathHelper.sqrt_double(var4 * var4 + var8 * var8) * 0.2F; + var3.setThrowableHeading(var4, var6 + (double)var10, var8, 1.6F, 12.0F); + this.playSound("random.bow", 1.0F, 1.0F / (this.getRNG().nextFloat() * 0.4F + 0.8F)); + this.worldObj.spawnEntityInWorld(var3); + } +} diff --git a/src/net/minecraft/src/EntitySorter.java b/src/net/minecraft/src/EntitySorter.java new file mode 100644 index 0000000..671c2e1 --- /dev/null +++ b/src/net/minecraft/src/EntitySorter.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +import java.util.Comparator; + +public class EntitySorter implements Comparator { + private double entityPosX; + private double entityPosY; + private double entityPosZ; + + public EntitySorter(Entity var1) { + this.entityPosX = -var1.posX; + this.entityPosY = -var1.posY; + this.entityPosZ = -var1.posZ; + } + + public int sortByDistanceToEntity(WorldRenderer var1, WorldRenderer var2) { + double var3 = (double)var1.posXPlus + this.entityPosX; + double var5 = (double)var1.posYPlus + this.entityPosY; + double var7 = (double)var1.posZPlus + this.entityPosZ; + double var9 = (double)var2.posXPlus + this.entityPosX; + double var11 = (double)var2.posYPlus + this.entityPosY; + double var13 = (double)var2.posZPlus + this.entityPosZ; + return (int)((var3 * var3 + var5 * var5 + var7 * var7 - (var9 * var9 + var11 * var11 + var13 * var13)) * 1024.0D); + } + + public int compare(Object var1, Object var2) { + return this.sortByDistanceToEntity((WorldRenderer)var1, (WorldRenderer)var2); + } +} diff --git a/src/net/minecraft/src/EntitySpellParticleFX.java b/src/net/minecraft/src/EntitySpellParticleFX.java new file mode 100644 index 0000000..05922bf --- /dev/null +++ b/src/net/minecraft/src/EntitySpellParticleFX.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +public class EntitySpellParticleFX extends EntityFX { + private int baseSpellTextureIndex = 128; + + public EntitySpellParticleFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1, var2, var4, var6, var8, var10, var12); + this.motionY *= (double)0.2F; + if(var8 == 0.0D && var12 == 0.0D) { + this.motionX *= (double)0.1F; + this.motionZ *= (double)0.1F; + } + + this.particleScale *= 12.0F / 16.0F; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); + this.noClip = false; + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + float var8 = ((float)this.particleAge + var2) / (float)this.particleMaxAge * 32.0F; + if(var8 < 0.0F) { + var8 = 0.0F; + } + + if(var8 > 1.0F) { + var8 = 1.0F; + } + + super.renderParticle(var1, var2, var3, var4, var5, var6, var7); + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + if(this.particleAge++ >= this.particleMaxAge) { + this.setDead(); + } + + this.setParticleTextureIndex(this.baseSpellTextureIndex + (7 - this.particleAge * 8 / this.particleMaxAge)); + this.motionY += 0.004D; + this.moveEntity(this.motionX, this.motionY, this.motionZ); + if(this.posY == this.prevPosY) { + this.motionX *= 1.1D; + this.motionZ *= 1.1D; + } + + this.motionX *= (double)0.96F; + this.motionY *= (double)0.96F; + this.motionZ *= (double)0.96F; + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } + + } + + public void setBaseSpellTextureIndex(int var1) { + this.baseSpellTextureIndex = var1; + } +} diff --git a/src/net/minecraft/src/EntitySpider.java b/src/net/minecraft/src/EntitySpider.java new file mode 100644 index 0000000..cd3bfce --- /dev/null +++ b/src/net/minecraft/src/EntitySpider.java @@ -0,0 +1,135 @@ +package net.minecraft.src; + +public class EntitySpider extends EntityMob { + public EntitySpider(World var1) { + super(var1); + this.texture = "/mob/spider.png"; + this.setSize(1.4F, 0.9F); + this.moveSpeed = 0.8F; + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, new Byte((byte)0)); + } + + public void onUpdate() { + super.onUpdate(); + if(!this.worldObj.isRemote) { + this.setBesideClimbableBlock(this.isCollidedHorizontally); + } + + } + + public int getMaxHealth() { + return 16; + } + + public double getMountedYOffset() { + return (double)this.height * 0.75D - 0.5D; + } + + protected Entity findPlayerToAttack() { + float var1 = this.getBrightness(1.0F); + if(var1 < 0.5F) { + double var2 = 16.0D; + return this.worldObj.getClosestVulnerablePlayerToEntity(this, var2); + } else { + return null; + } + } + + protected String getLivingSound() { + return "mob.spider.say"; + } + + protected String getHurtSound() { + return "mob.spider.say"; + } + + protected String getDeathSound() { + return "mob.spider.death"; + } + + protected void playStepSound(int var1, int var2, int var3, int var4) { + this.playSound("mob.spider.step", 0.15F, 1.0F); + } + + protected void attackEntity(Entity var1, float var2) { + float var3 = this.getBrightness(1.0F); + if(var3 > 0.5F && this.rand.nextInt(100) == 0) { + this.entityToAttack = null; + } else { + if(var2 > 2.0F && var2 < 6.0F && this.rand.nextInt(10) == 0) { + if(this.onGround) { + double var4 = var1.posX - this.posX; + double var6 = var1.posZ - this.posZ; + float var8 = MathHelper.sqrt_double(var4 * var4 + var6 * var6); + this.motionX = var4 / (double)var8 * 0.5D * (double)0.8F + this.motionX * (double)0.2F; + this.motionZ = var6 / (double)var8 * 0.5D * (double)0.8F + this.motionZ * (double)0.2F; + this.motionY = (double)0.4F; + } + } else { + super.attackEntity(var1, var2); + } + + } + } + + protected int getDropItemId() { + return Item.silk.itemID; + } + + protected void dropFewItems(boolean var1, int var2) { + super.dropFewItems(var1, var2); + if(var1 && (this.rand.nextInt(3) == 0 || this.rand.nextInt(1 + var2) > 0)) { + this.dropItem(Item.spiderEye.itemID, 1); + } + + } + + public boolean isOnLadder() { + return this.isBesideClimbableBlock(); + } + + public void setInWeb() { + } + + public float spiderScaleAmount() { + return 1.0F; + } + + public EnumCreatureAttribute getCreatureAttribute() { + return EnumCreatureAttribute.ARTHROPOD; + } + + public boolean isPotionApplicable(PotionEffect var1) { + return var1.getPotionID() == Potion.poison.id ? false : super.isPotionApplicable(var1); + } + + public boolean isBesideClimbableBlock() { + return (this.dataWatcher.getWatchableObjectByte(16) & 1) != 0; + } + + public void setBesideClimbableBlock(boolean var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(16); + if(var1) { + var2 = (byte)(var2 | 1); + } else { + var2 &= -2; + } + + this.dataWatcher.updateObject(16, Byte.valueOf(var2)); + } + + public void initCreature() { + if(this.worldObj.rand.nextInt(100) == 0) { + EntitySkeleton var1 = new EntitySkeleton(this.worldObj); + var1.setLocationAndAngles(this.posX, this.posY, this.posZ, this.rotationYaw, 0.0F); + var1.initCreature(); + this.worldObj.spawnEntityInWorld(var1); + var1.mountEntity(this); + } + + } +} diff --git a/src/net/minecraft/src/EntitySplashFX.java b/src/net/minecraft/src/EntitySplashFX.java new file mode 100644 index 0000000..1532be3 --- /dev/null +++ b/src/net/minecraft/src/EntitySplashFX.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class EntitySplashFX extends EntityRainFX { + public EntitySplashFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1, var2, var4, var6); + this.particleGravity = 0.04F; + this.nextTextureIndexX(); + if(var10 == 0.0D && (var8 != 0.0D || var12 != 0.0D)) { + this.motionX = var8; + this.motionY = var10 + 0.1D; + this.motionZ = var12; + } + + } +} diff --git a/src/net/minecraft/src/EntitySquid.java b/src/net/minecraft/src/EntitySquid.java new file mode 100644 index 0000000..ed14f35 --- /dev/null +++ b/src/net/minecraft/src/EntitySquid.java @@ -0,0 +1,140 @@ +package net.minecraft.src; + +public class EntitySquid extends EntityWaterMob { + public float squidPitch = 0.0F; + public float prevSquidPitch = 0.0F; + public float squidYaw = 0.0F; + public float prevSquidYaw = 0.0F; + public float field_70867_h = 0.0F; + public float field_70868_i = 0.0F; + public float tentacleAngle = 0.0F; + public float prevTentacleAngle = 0.0F; + private float randomMotionSpeed = 0.0F; + private float field_70864_bA = 0.0F; + private float field_70871_bB = 0.0F; + private float randomMotionVecX = 0.0F; + private float randomMotionVecY = 0.0F; + private float randomMotionVecZ = 0.0F; + + public EntitySquid(World var1) { + super(var1); + this.texture = "/mob/squid.png"; + this.setSize(0.95F, 0.95F); + this.field_70864_bA = 1.0F / (this.rand.nextFloat() + 1.0F) * 0.2F; + } + + public int getMaxHealth() { + return 10; + } + + protected String getLivingSound() { + return null; + } + + protected String getHurtSound() { + return null; + } + + protected String getDeathSound() { + return null; + } + + protected float getSoundVolume() { + return 0.4F; + } + + protected int getDropItemId() { + return 0; + } + + protected void dropFewItems(boolean var1, int var2) { + int var3 = this.rand.nextInt(3 + var2) + 1; + + for(int var4 = 0; var4 < var3; ++var4) { + this.entityDropItem(new ItemStack(Item.dyePowder, 1, 0), 0.0F); + } + + } + + public boolean isInWater() { + return this.worldObj.handleMaterialAcceleration(this.boundingBox.expand(0.0D, (double)-0.6F, 0.0D), Material.water, this); + } + + public void onLivingUpdate() { + super.onLivingUpdate(); + this.prevSquidPitch = this.squidPitch; + this.prevSquidYaw = this.squidYaw; + this.field_70868_i = this.field_70867_h; + this.prevTentacleAngle = this.tentacleAngle; + this.field_70867_h += this.field_70864_bA; + if(this.field_70867_h > (float)Math.PI * 2.0F) { + this.field_70867_h -= (float)Math.PI * 2.0F; + if(this.rand.nextInt(10) == 0) { + this.field_70864_bA = 1.0F / (this.rand.nextFloat() + 1.0F) * 0.2F; + } + } + + if(this.isInWater()) { + float var1; + if(this.field_70867_h < (float)Math.PI) { + var1 = this.field_70867_h / (float)Math.PI; + this.tentacleAngle = MathHelper.sin(var1 * var1 * (float)Math.PI) * (float)Math.PI * 0.25F; + if((double)var1 > 0.75D) { + this.randomMotionSpeed = 1.0F; + this.field_70871_bB = 1.0F; + } else { + this.field_70871_bB *= 0.8F; + } + } else { + this.tentacleAngle = 0.0F; + this.randomMotionSpeed *= 0.9F; + this.field_70871_bB *= 0.99F; + } + + if(!this.worldObj.isRemote) { + this.motionX = (double)(this.randomMotionVecX * this.randomMotionSpeed); + this.motionY = (double)(this.randomMotionVecY * this.randomMotionSpeed); + this.motionZ = (double)(this.randomMotionVecZ * this.randomMotionSpeed); + } + + var1 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.renderYawOffset += (-((float)Math.atan2(this.motionX, this.motionZ)) * 180.0F / (float)Math.PI - this.renderYawOffset) * 0.1F; + this.rotationYaw = this.renderYawOffset; + this.squidYaw += (float)Math.PI * this.field_70871_bB * 1.5F; + this.squidPitch += (-((float)Math.atan2((double)var1, this.motionY)) * 180.0F / (float)Math.PI - this.squidPitch) * 0.1F; + } else { + this.tentacleAngle = MathHelper.abs(MathHelper.sin(this.field_70867_h)) * (float)Math.PI * 0.25F; + if(!this.worldObj.isRemote) { + this.motionX = 0.0D; + this.motionY -= 0.08D; + this.motionY *= (double)0.98F; + this.motionZ = 0.0D; + } + + this.squidPitch = (float)((double)this.squidPitch + (double)(-90.0F - this.squidPitch) * 0.02D); + } + + } + + public void moveEntityWithHeading(float var1, float var2) { + this.moveEntity(this.motionX, this.motionY, this.motionZ); + } + + protected void updateEntityActionState() { + ++this.entityAge; + if(this.entityAge > 100) { + this.randomMotionVecX = this.randomMotionVecY = this.randomMotionVecZ = 0.0F; + } else if(this.rand.nextInt(50) == 0 || !this.inWater || this.randomMotionVecX == 0.0F && this.randomMotionVecY == 0.0F && this.randomMotionVecZ == 0.0F) { + float var1 = this.rand.nextFloat() * (float)Math.PI * 2.0F; + this.randomMotionVecX = MathHelper.cos(var1) * 0.2F; + this.randomMotionVecY = -0.1F + this.rand.nextFloat() * 0.2F; + this.randomMotionVecZ = MathHelper.sin(var1) * 0.2F; + } + + this.despawnEntity(); + } + + public boolean getCanSpawnHere() { + return this.posY > 45.0D && this.posY < 63.0D && super.getCanSpawnHere(); + } +} diff --git a/src/net/minecraft/src/EntitySuspendFX.java b/src/net/minecraft/src/EntitySuspendFX.java new file mode 100644 index 0000000..f56a930 --- /dev/null +++ b/src/net/minecraft/src/EntitySuspendFX.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +public class EntitySuspendFX extends EntityFX { + public EntitySuspendFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1, var2, var4 - 0.125D, var6, var8, var10, var12); + 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 = var8 * 0.0D; + this.motionY = var10 * 0.0D; + this.motionZ = var12 * 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.moveEntity(this.motionX, this.motionY, this.motionZ); + if(this.worldObj.getBlockMaterial(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)) != Material.water) { + this.setDead(); + } + + if(this.particleMaxAge-- <= 0) { + this.setDead(); + } + + } +} diff --git a/src/net/minecraft/src/EntityTNTPrimed.java b/src/net/minecraft/src/EntityTNTPrimed.java new file mode 100644 index 0000000..24898c6 --- /dev/null +++ b/src/net/minecraft/src/EntityTNTPrimed.java @@ -0,0 +1,86 @@ +package net.minecraft.src; + +public class EntityTNTPrimed extends Entity { + public int fuse; + private EntityLiving tntPlacedBy; + + public EntityTNTPrimed(World var1) { + super(var1); + this.fuse = 0; + this.preventEntitySpawning = true; + this.setSize(0.98F, 0.98F); + this.yOffset = this.height / 2.0F; + } + + public EntityTNTPrimed(World var1, double var2, double var4, double var6, EntityLiving var8) { + this(var1); + this.setPosition(var2, var4, var6); + float var9 = (float)(Math.random() * (double)((float)Math.PI) * 2.0D); + this.motionX = (double)(-((float)Math.sin((double)var9)) * 0.02F); + this.motionY = (double)0.2F; + this.motionZ = (double)(-((float)Math.cos((double)var9)) * 0.02F); + this.fuse = 80; + this.prevPosX = var2; + this.prevPosY = var4; + this.prevPosZ = var6; + this.tntPlacedBy = var8; + } + + protected void entityInit() { + } + + protected boolean canTriggerWalking() { + return false; + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public void onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.motionY -= (double)0.04F; + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.98F; + this.motionY *= (double)0.98F; + this.motionZ *= (double)0.98F; + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + this.motionY *= -0.5D; + } + + if(this.fuse-- <= 0) { + this.setDead(); + if(!this.worldObj.isRemote) { + this.explode(); + } + } else { + this.worldObj.spawnParticle("smoke", this.posX, this.posY + 0.5D, this.posZ, 0.0D, 0.0D, 0.0D); + } + + } + + private void explode() { + float var1 = 4.0F; + this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, var1, true); + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + var1.setByte("Fuse", (byte)this.fuse); + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + this.fuse = var1.getByte("Fuse"); + } + + public float getShadowSize() { + return 0.0F; + } + + public EntityLiving getTntPlacedBy() { + return this.tntPlacedBy; + } +} diff --git a/src/net/minecraft/src/EntityTameable.java b/src/net/minecraft/src/EntityTameable.java new file mode 100644 index 0000000..e5a3162 --- /dev/null +++ b/src/net/minecraft/src/EntityTameable.java @@ -0,0 +1,108 @@ +package net.minecraft.src; + +public abstract class EntityTameable extends EntityAnimal { + protected EntityAISit aiSit = new EntityAISit(this); + + public EntityTameable(World var1) { + super(var1); + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, Byte.valueOf((byte)0)); + this.dataWatcher.addObject(17, ""); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + if(this.getOwnerName() == null) { + var1.setString("Owner", ""); + } else { + var1.setString("Owner", this.getOwnerName()); + } + + var1.setBoolean("Sitting", this.isSitting()); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + String var2 = var1.getString("Owner"); + if(var2.length() > 0) { + this.setOwner(var2); + this.setTamed(true); + } + + this.aiSit.setSitting(var1.getBoolean("Sitting")); + this.setSitting(var1.getBoolean("Sitting")); + } + + protected void playTameEffect(boolean var1) { + String var2 = "heart"; + if(!var1) { + var2 = "smoke"; + } + + for(int var3 = 0; var3 < 7; ++var3) { + double var4 = this.rand.nextGaussian() * 0.02D; + double var6 = this.rand.nextGaussian() * 0.02D; + double var8 = this.rand.nextGaussian() * 0.02D; + this.worldObj.spawnParticle(var2, 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, var4, var6, var8); + } + + } + + public void handleHealthUpdate(byte var1) { + if(var1 == 7) { + this.playTameEffect(true); + } else if(var1 == 6) { + this.playTameEffect(false); + } else { + super.handleHealthUpdate(var1); + } + + } + + public boolean isTamed() { + return (this.dataWatcher.getWatchableObjectByte(16) & 4) != 0; + } + + public void setTamed(boolean var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(16); + if(var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 | 4))); + } else { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 & -5))); + } + + } + + public boolean isSitting() { + return (this.dataWatcher.getWatchableObjectByte(16) & 1) != 0; + } + + public void setSitting(boolean var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(16); + if(var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 | 1))); + } else { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 & -2))); + } + + } + + public String getOwnerName() { + return this.dataWatcher.getWatchableObjectString(17); + } + + public void setOwner(String var1) { + this.dataWatcher.updateObject(17, var1); + } + + public EntityLiving getOwner() { + return this.worldObj.getPlayerEntityByName(this.getOwnerName()); + } + + public EntityAISit func_70907_r() { + return this.aiSit; + } +} diff --git a/src/net/minecraft/src/EntityThrowable.java b/src/net/minecraft/src/EntityThrowable.java new file mode 100644 index 0000000..a4bc793 --- /dev/null +++ b/src/net/minecraft/src/EntityThrowable.java @@ -0,0 +1,256 @@ +package net.minecraft.src; + +import java.util.List; + +public abstract class EntityThrowable extends Entity implements IProjectile { + private int xTile = -1; + private int yTile = -1; + private int zTile = -1; + private int inTile = 0; + protected boolean inGround = false; + public int throwableShake = 0; + private EntityLiving thrower; + private String throwerName = null; + private int ticksInGround; + private int ticksInAir = 0; + + public EntityThrowable(World var1) { + super(var1); + this.setSize(0.25F, 0.25F); + } + + protected void entityInit() { + } + + public boolean isInRangeToRenderDist(double var1) { + double var3 = this.boundingBox.getAverageEdgeLength() * 4.0D; + var3 *= 64.0D; + return var1 < var3 * var3; + } + + public EntityThrowable(World var1, EntityLiving var2) { + super(var1); + this.thrower = var2; + this.setSize(0.25F, 0.25F); + this.setLocationAndAngles(var2.posX, var2.posY + (double)var2.getEyeHeight(), var2.posZ, var2.rotationYaw, var2.rotationPitch); + this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.posY -= (double)0.1F; + this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.setPosition(this.posX, this.posY, this.posZ); + this.yOffset = 0.0F; + float var3 = 0.4F; + this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.motionY = (double)(-MathHelper.sin((this.rotationPitch + this.func_70183_g()) / 180.0F * (float)Math.PI) * var3); + this.setThrowableHeading(this.motionX, this.motionY, this.motionZ, this.func_70182_d(), 1.0F); + } + + public EntityThrowable(World var1, double var2, double var4, double var6) { + super(var1); + this.ticksInGround = 0; + this.setSize(0.25F, 0.25F); + this.setPosition(var2, var4, var6); + this.yOffset = 0.0F; + } + + protected float func_70182_d() { + return 1.5F; + } + + protected float func_70183_g() { + return 0.0F; + } + + public void setThrowableHeading(double var1, double var3, double var5, float var7, float var8) { + float var9 = MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5); + var1 /= (double)var9; + var3 /= (double)var9; + var5 /= (double)var9; + var1 += this.rand.nextGaussian() * (double)0.0075F * (double)var8; + var3 += this.rand.nextGaussian() * (double)0.0075F * (double)var8; + var5 += this.rand.nextGaussian() * (double)0.0075F * (double)var8; + var1 *= (double)var7; + var3 *= (double)var7; + var5 *= (double)var7; + this.motionX = var1; + this.motionY = var3; + this.motionZ = var5; + float var10 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(var1, var5) * 180.0D / (double)((float)Math.PI)); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(var3, (double)var10) * 180.0D / (double)((float)Math.PI)); + this.ticksInGround = 0; + } + + public void setVelocity(double var1, double var3, double var5) { + this.motionX = var1; + this.motionY = var3; + this.motionZ = var5; + if(this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) { + float var7 = MathHelper.sqrt_double(var1 * var1 + var5 * var5); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(var1, var5) * 180.0D / (double)((float)Math.PI)); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(var3, (double)var7) * 180.0D / (double)((float)Math.PI)); + } + + } + + 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) { + int var1 = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); + if(var1 == 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; + } + + Vec3 var16 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ); + Vec3 var2 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + MovingObjectPosition var3 = this.worldObj.rayTraceBlocks(var16, var2); + var16 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX, this.posY, this.posZ); + var2 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + if(var3 != null) { + var2 = this.worldObj.getWorldVec3Pool().getVecFromPool(var3.hitVec.xCoord, var3.hitVec.yCoord, var3.hitVec.zCoord); + } + + if(!this.worldObj.isRemote) { + Entity var4 = null; + List var5 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expand(1.0D, 1.0D, 1.0D)); + double var6 = 0.0D; + EntityLiving var8 = this.getThrower(); + + for(int var9 = 0; var9 < var5.size(); ++var9) { + Entity var10 = (Entity)var5.get(var9); + if(var10.canBeCollidedWith() && (var10 != var8 || this.ticksInAir >= 5)) { + float var11 = 0.3F; + AxisAlignedBB var12 = var10.boundingBox.expand((double)var11, (double)var11, (double)var11); + MovingObjectPosition var13 = var12.calculateIntercept(var16, var2); + if(var13 != null) { + double var14 = var16.distanceTo(var13.hitVec); + if(var14 < var6 || var6 == 0.0D) { + var4 = var10; + var6 = var14; + } + } + } + } + + if(var4 != null) { + var3 = new MovingObjectPosition(var4); + } + } + + if(var3 != null) { + if(var3.typeOfHit == EnumMovingObjectType.TILE && this.worldObj.getBlockId(var3.blockX, var3.blockY, var3.blockZ) == Block.portal.blockID) { + this.setInPortal(); + } else { + this.onImpact(var3); + } + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + float var17 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI)); + + for(this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var17) * 180.0D / (double)((float)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 var18 = 0.99F; + float var19 = this.getGravityVelocity(); + if(this.isInWater()) { + for(int var7 = 0; var7 < 4; ++var7) { + float var20 = 0.25F; + this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)var20, this.posY - this.motionY * (double)var20, this.posZ - this.motionZ * (double)var20, this.motionX, this.motionY, this.motionZ); + } + + var18 = 0.8F; + } + + this.motionX *= (double)var18; + this.motionY *= (double)var18; + this.motionZ *= (double)var18; + this.motionY -= (double)var19; + this.setPosition(this.posX, this.posY, this.posZ); + } + + protected float getGravityVelocity() { + return 0.03F; + } + + protected abstract void onImpact(MovingObjectPosition var1); + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("xTile", (short)this.xTile); + var1.setShort("yTile", (short)this.yTile); + var1.setShort("zTile", (short)this.zTile); + var1.setByte("inTile", (byte)this.inTile); + var1.setByte("shake", (byte)this.throwableShake); + var1.setByte("inGround", (byte)(this.inGround ? 1 : 0)); + if((this.throwerName == null || this.throwerName.length() == 0) && this.thrower != null && this.thrower instanceof EntityPlayer) { + this.throwerName = this.thrower.getEntityName(); + } + + var1.setString("ownerName", this.throwerName == null ? "" : this.throwerName); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.xTile = var1.getShort("xTile"); + this.yTile = var1.getShort("yTile"); + this.zTile = var1.getShort("zTile"); + this.inTile = var1.getByte("inTile") & 255; + this.throwableShake = var1.getByte("shake") & 255; + this.inGround = var1.getByte("inGround") == 1; + this.throwerName = var1.getString("ownerName"); + if(this.throwerName != null && this.throwerName.length() == 0) { + this.throwerName = null; + } + + } + + public float getShadowSize() { + return 0.0F; + } + + public EntityLiving getThrower() { + if(this.thrower == null && this.throwerName != null && this.throwerName.length() > 0) { + this.thrower = this.worldObj.getPlayerEntityByName(this.throwerName); + } + + return this.thrower; + } +} diff --git a/src/net/minecraft/src/EntityTracker.java b/src/net/minecraft/src/EntityTracker.java new file mode 100644 index 0000000..1bf32be --- /dev/null +++ b/src/net/minecraft/src/EntityTracker.java @@ -0,0 +1,204 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +public class EntityTracker { + private final WorldServer theWorld; + private Set trackedEntities = new HashSet(); + private IntHashMap trackedEntityIDs = new IntHashMap(); + private int entityViewDistance; + + public EntityTracker(WorldServer var1) { + this.theWorld = var1; + this.entityViewDistance = var1.getMinecraftServer().getConfigurationManager().getEntityViewDistance(); + } + + public void addEntityToTracker(Entity var1) { + if(var1 instanceof EntityPlayerMP) { + this.addEntityToTracker(var1, 512, 2); + EntityPlayerMP var2 = (EntityPlayerMP)var1; + Iterator var3 = this.trackedEntities.iterator(); + + while(var3.hasNext()) { + EntityTrackerEntry var4 = (EntityTrackerEntry)var3.next(); + if(var4.myEntity != var2) { + var4.tryStartWachingThis(var2); + } + } + } else if(var1 instanceof EntityFishHook) { + this.addEntityToTracker(var1, 64, 5, true); + } else if(var1 instanceof EntityArrow) { + this.addEntityToTracker(var1, 64, 20, false); + } else if(var1 instanceof EntitySmallFireball) { + this.addEntityToTracker(var1, 64, 10, false); + } else if(var1 instanceof EntityFireball) { + this.addEntityToTracker(var1, 64, 10, false); + } else if(var1 instanceof EntitySnowball) { + this.addEntityToTracker(var1, 64, 10, true); + } else if(var1 instanceof EntityEnderPearl) { + this.addEntityToTracker(var1, 64, 10, true); + } else if(var1 instanceof EntityEnderEye) { + this.addEntityToTracker(var1, 64, 4, true); + } else if(var1 instanceof EntityEgg) { + this.addEntityToTracker(var1, 64, 10, true); + } else if(var1 instanceof EntityPotion) { + this.addEntityToTracker(var1, 64, 10, true); + } else if(var1 instanceof EntityExpBottle) { + this.addEntityToTracker(var1, 64, 10, true); + } else if(var1 instanceof EntityFireworkRocket) { + this.addEntityToTracker(var1, 64, 10, true); + } else if(var1 instanceof EntityItem) { + this.addEntityToTracker(var1, 64, 20, true); + } else if(var1 instanceof EntityMinecart) { + this.addEntityToTracker(var1, 80, 3, true); + } else if(var1 instanceof EntityBoat) { + this.addEntityToTracker(var1, 80, 3, true); + } else if(var1 instanceof EntitySquid) { + this.addEntityToTracker(var1, 64, 3, true); + } else if(var1 instanceof EntityWither) { + this.addEntityToTracker(var1, 80, 3, false); + } else if(var1 instanceof EntityBat) { + this.addEntityToTracker(var1, 80, 3, false); + } else if(var1 instanceof IAnimals) { + this.addEntityToTracker(var1, 80, 3, true); + } else if(var1 instanceof EntityDragon) { + this.addEntityToTracker(var1, 160, 3, true); + } else if(var1 instanceof EntityTNTPrimed) { + this.addEntityToTracker(var1, 160, 10, true); + } else if(var1 instanceof EntityFallingSand) { + this.addEntityToTracker(var1, 160, 20, true); + } else if(var1 instanceof EntityPainting) { + this.addEntityToTracker(var1, 160, Integer.MAX_VALUE, false); + } else if(var1 instanceof EntityXPOrb) { + this.addEntityToTracker(var1, 160, 20, true); + } else if(var1 instanceof EntityEnderCrystal) { + this.addEntityToTracker(var1, 256, Integer.MAX_VALUE, false); + } else if(var1 instanceof EntityItemFrame) { + this.addEntityToTracker(var1, 160, Integer.MAX_VALUE, false); + } + + } + + public void addEntityToTracker(Entity var1, int var2, int var3) { + this.addEntityToTracker(var1, var2, var3, false); + } + + public void addEntityToTracker(Entity var1, int var2, int var3, boolean var4) { + if(var2 > this.entityViewDistance) { + var2 = this.entityViewDistance; + } + + try { + if(this.trackedEntityIDs.containsItem(var1.entityId)) { + throw new IllegalStateException("Entity is already tracked!"); + } + + EntityTrackerEntry var5 = new EntityTrackerEntry(var1, var2, var3, var4); + this.trackedEntities.add(var5); + this.trackedEntityIDs.addKey(var1.entityId, var5); + var5.sendEventsToPlayers(this.theWorld.playerEntities); + } catch (Throwable var11) { + CrashReport var6 = CrashReport.makeCrashReport(var11, "Adding entity to track"); + CrashReportCategory var7 = var6.makeCategory("Entity To Track"); + var7.addCrashSection("Tracking range", var2 + " blocks"); + var7.addCrashSectionCallable("Update interval", new CallableEntityTracker(this, var3)); + var1.func_85029_a(var7); + CrashReportCategory var8 = var6.makeCategory("Entity That Is Already Tracked"); + ((EntityTrackerEntry)this.trackedEntityIDs.lookup(var1.entityId)).myEntity.func_85029_a(var8); + + try { + throw new ReportedException(var6); + } catch (ReportedException var10) { + System.err.println("\"Silently\" catching entity tracking error."); + var10.printStackTrace(); + } + } + + } + + public void removeEntityFromAllTrackingPlayers(Entity var1) { + if(var1 instanceof EntityPlayerMP) { + EntityPlayerMP var2 = (EntityPlayerMP)var1; + Iterator var3 = this.trackedEntities.iterator(); + + while(var3.hasNext()) { + EntityTrackerEntry var4 = (EntityTrackerEntry)var3.next(); + var4.removeFromWatchingList(var2); + } + } + + EntityTrackerEntry var5 = (EntityTrackerEntry)this.trackedEntityIDs.removeObject(var1.entityId); + if(var5 != null) { + this.trackedEntities.remove(var5); + var5.informAllAssociatedPlayersOfItemDestruction(); + } + + } + + public void updateTrackedEntities() { + ArrayList var1 = new ArrayList(); + Iterator var2 = this.trackedEntities.iterator(); + + while(var2.hasNext()) { + EntityTrackerEntry var3 = (EntityTrackerEntry)var2.next(); + var3.sendLocationToAllClients(this.theWorld.playerEntities); + if(var3.playerEntitiesUpdated && var3.myEntity instanceof EntityPlayerMP) { + var1.add((EntityPlayerMP)var3.myEntity); + } + } + + for(int var6 = 0; var6 < var1.size(); ++var6) { + EntityPlayerMP var7 = (EntityPlayerMP)var1.get(var6); + Iterator var4 = this.trackedEntities.iterator(); + + while(var4.hasNext()) { + EntityTrackerEntry var5 = (EntityTrackerEntry)var4.next(); + if(var5.myEntity != var7) { + var5.tryStartWachingThis(var7); + } + } + } + + } + + public void sendPacketToAllPlayersTrackingEntity(Entity var1, Packet var2) { + EntityTrackerEntry var3 = (EntityTrackerEntry)this.trackedEntityIDs.lookup(var1.entityId); + if(var3 != null) { + var3.sendPacketToAllTrackingPlayers(var2); + } + + } + + public void sendPacketToAllAssociatedPlayers(Entity var1, Packet var2) { + EntityTrackerEntry var3 = (EntityTrackerEntry)this.trackedEntityIDs.lookup(var1.entityId); + if(var3 != null) { + var3.sendPacketToAllAssociatedPlayers(var2); + } + + } + + public void removePlayerFromTrackers(EntityPlayerMP var1) { + Iterator var2 = this.trackedEntities.iterator(); + + while(var2.hasNext()) { + EntityTrackerEntry var3 = (EntityTrackerEntry)var2.next(); + var3.removePlayerFromTracker(var1); + } + + } + + public void func_85172_a(EntityPlayerMP var1, Chunk var2) { + Iterator var3 = this.trackedEntities.iterator(); + + while(var3.hasNext()) { + EntityTrackerEntry var4 = (EntityTrackerEntry)var3.next(); + if(var4.myEntity != var1 && var4.myEntity.chunkCoordX == var2.xPosition && var4.myEntity.chunkCoordZ == var2.zPosition) { + var4.tryStartWachingThis(var1); + } + } + + } +} diff --git a/src/net/minecraft/src/EntityTrackerEntry.java b/src/net/minecraft/src/EntityTrackerEntry.java new file mode 100644 index 0000000..55bcb5a --- /dev/null +++ b/src/net/minecraft/src/EntityTrackerEntry.java @@ -0,0 +1,395 @@ +package net.minecraft.src; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +public class EntityTrackerEntry { + public Entity myEntity; + public int blocksDistanceThreshold; + public int updateFrequency; + public int lastScaledXPosition; + public int lastScaledYPosition; + public int lastScaledZPosition; + public int lastYaw; + public int lastPitch; + public int lastHeadMotion; + public double motionX; + public double motionY; + public double motionZ; + public int ticks = 0; + private double posX; + private double posY; + private double posZ; + private boolean isDataInitialized = false; + private boolean sendVelocityUpdates; + private int ticksSinceLastForcedTeleport = 0; + private Entity field_85178_v; + private boolean ridingEntity = false; + public boolean playerEntitiesUpdated = false; + public Set trackingPlayers = new HashSet(); + + public EntityTrackerEntry(Entity var1, int var2, int var3, boolean var4) { + this.myEntity = var1; + this.blocksDistanceThreshold = var2; + this.updateFrequency = var3; + this.sendVelocityUpdates = var4; + this.lastScaledXPosition = MathHelper.floor_double(var1.posX * 32.0D); + this.lastScaledYPosition = MathHelper.floor_double(var1.posY * 32.0D); + this.lastScaledZPosition = MathHelper.floor_double(var1.posZ * 32.0D); + this.lastYaw = MathHelper.floor_float(var1.rotationYaw * 256.0F / 360.0F); + this.lastPitch = MathHelper.floor_float(var1.rotationPitch * 256.0F / 360.0F); + this.lastHeadMotion = MathHelper.floor_float(var1.getRotationYawHead() * 256.0F / 360.0F); + } + + public boolean equals(Object var1) { + return var1 instanceof EntityTrackerEntry ? ((EntityTrackerEntry)var1).myEntity.entityId == this.myEntity.entityId : false; + } + + public int hashCode() { + return this.myEntity.entityId; + } + + public void sendLocationToAllClients(List var1) { + this.playerEntitiesUpdated = false; + if(!this.isDataInitialized || this.myEntity.getDistanceSq(this.posX, this.posY, this.posZ) > 16.0D) { + this.posX = this.myEntity.posX; + this.posY = this.myEntity.posY; + this.posZ = this.myEntity.posZ; + this.isDataInitialized = true; + this.playerEntitiesUpdated = true; + this.sendEventsToPlayers(var1); + } + + if(this.field_85178_v != this.myEntity.ridingEntity || this.myEntity.ridingEntity != null && this.ticks % 60 == 0) { + this.field_85178_v = this.myEntity.ridingEntity; + this.sendPacketToAllTrackingPlayers(new Packet39AttachEntity(this.myEntity, this.myEntity.ridingEntity)); + } + + if(this.myEntity instanceof EntityItemFrame && this.ticks % 10 == 0) { + EntityItemFrame var23 = (EntityItemFrame)this.myEntity; + ItemStack var24 = var23.getDisplayedItem(); + if(var24 != null && var24.getItem() instanceof ItemMap) { + MapData var26 = Item.map.getMapData(var24, this.myEntity.worldObj); + Iterator var29 = var1.iterator(); + + while(var29.hasNext()) { + EntityPlayer var30 = (EntityPlayer)var29.next(); + EntityPlayerMP var31 = (EntityPlayerMP)var30; + var26.updateVisiblePlayers(var31, var24); + if(var31.playerNetServerHandler.packetSize() <= 5) { + Packet var32 = Item.map.createMapDataPacket(var24, this.myEntity.worldObj, var31); + if(var32 != null) { + var31.playerNetServerHandler.sendPacketToPlayer(var32); + } + } + } + } + + DataWatcher var27 = this.myEntity.getDataWatcher(); + if(var27.hasChanges()) { + this.sendPacketToAllAssociatedPlayers(new Packet40EntityMetadata(this.myEntity.entityId, var27, false)); + } + } else if(this.ticks % this.updateFrequency == 0 || this.myEntity.isAirBorne || this.myEntity.getDataWatcher().hasChanges()) { + int var2; + int var3; + if(this.myEntity.ridingEntity == null) { + ++this.ticksSinceLastForcedTeleport; + var2 = this.myEntity.myEntitySize.multiplyBy32AndRound(this.myEntity.posX); + var3 = MathHelper.floor_double(this.myEntity.posY * 32.0D); + int var25 = this.myEntity.myEntitySize.multiplyBy32AndRound(this.myEntity.posZ); + int var28 = MathHelper.floor_float(this.myEntity.rotationYaw * 256.0F / 360.0F); + int var6 = MathHelper.floor_float(this.myEntity.rotationPitch * 256.0F / 360.0F); + int var7 = var2 - this.lastScaledXPosition; + int var8 = var3 - this.lastScaledYPosition; + int var9 = var25 - this.lastScaledZPosition; + Object var10 = null; + boolean var11 = Math.abs(var7) >= 4 || Math.abs(var8) >= 4 || Math.abs(var9) >= 4 || this.ticks % 60 == 0; + boolean var12 = Math.abs(var28 - this.lastYaw) >= 4 || Math.abs(var6 - this.lastPitch) >= 4; + if(this.ticks > 0 || this.myEntity instanceof EntityArrow) { + if(var7 >= -128 && var7 < 128 && var8 >= -128 && var8 < 128 && var9 >= -128 && var9 < 128 && this.ticksSinceLastForcedTeleport <= 400 && !this.ridingEntity) { + if(var11 && var12) { + var10 = new Packet33RelEntityMoveLook(this.myEntity.entityId, (byte)var7, (byte)var8, (byte)var9, (byte)var28, (byte)var6); + } else if(var11) { + var10 = new Packet31RelEntityMove(this.myEntity.entityId, (byte)var7, (byte)var8, (byte)var9); + } else if(var12) { + var10 = new Packet32EntityLook(this.myEntity.entityId, (byte)var28, (byte)var6); + } + } else { + this.ticksSinceLastForcedTeleport = 0; + var10 = new Packet34EntityTeleport(this.myEntity.entityId, var2, var3, var25, (byte)var28, (byte)var6); + } + } + + if(this.sendVelocityUpdates) { + double var13 = this.myEntity.motionX - this.motionX; + double var15 = this.myEntity.motionY - this.motionY; + double var17 = this.myEntity.motionZ - this.motionZ; + double var19 = 0.02D; + double var21 = var13 * var13 + var15 * var15 + var17 * var17; + if(var21 > var19 * var19 || var21 > 0.0D && this.myEntity.motionX == 0.0D && this.myEntity.motionY == 0.0D && this.myEntity.motionZ == 0.0D) { + this.motionX = this.myEntity.motionX; + this.motionY = this.myEntity.motionY; + this.motionZ = this.myEntity.motionZ; + this.sendPacketToAllTrackingPlayers(new Packet28EntityVelocity(this.myEntity.entityId, this.motionX, this.motionY, this.motionZ)); + } + } + + if(var10 != null) { + this.sendPacketToAllTrackingPlayers((Packet)var10); + } + + DataWatcher var33 = this.myEntity.getDataWatcher(); + if(var33.hasChanges()) { + this.sendPacketToAllAssociatedPlayers(new Packet40EntityMetadata(this.myEntity.entityId, var33, false)); + } + + if(var11) { + this.lastScaledXPosition = var2; + this.lastScaledYPosition = var3; + this.lastScaledZPosition = var25; + } + + if(var12) { + this.lastYaw = var28; + this.lastPitch = var6; + } + + this.ridingEntity = false; + } else { + var2 = MathHelper.floor_float(this.myEntity.rotationYaw * 256.0F / 360.0F); + var3 = MathHelper.floor_float(this.myEntity.rotationPitch * 256.0F / 360.0F); + boolean var4 = Math.abs(var2 - this.lastYaw) >= 4 || Math.abs(var3 - this.lastPitch) >= 4; + if(var4) { + this.sendPacketToAllTrackingPlayers(new Packet32EntityLook(this.myEntity.entityId, (byte)var2, (byte)var3)); + this.lastYaw = var2; + this.lastPitch = var3; + } + + this.lastScaledXPosition = this.myEntity.myEntitySize.multiplyBy32AndRound(this.myEntity.posX); + this.lastScaledYPosition = MathHelper.floor_double(this.myEntity.posY * 32.0D); + this.lastScaledZPosition = this.myEntity.myEntitySize.multiplyBy32AndRound(this.myEntity.posZ); + DataWatcher var5 = this.myEntity.getDataWatcher(); + if(var5.hasChanges()) { + this.sendPacketToAllAssociatedPlayers(new Packet40EntityMetadata(this.myEntity.entityId, var5, false)); + } + + this.ridingEntity = true; + } + + var2 = MathHelper.floor_float(this.myEntity.getRotationYawHead() * 256.0F / 360.0F); + if(Math.abs(var2 - this.lastHeadMotion) >= 4) { + this.sendPacketToAllTrackingPlayers(new Packet35EntityHeadRotation(this.myEntity.entityId, (byte)var2)); + this.lastHeadMotion = var2; + } + + this.myEntity.isAirBorne = false; + } + + ++this.ticks; + if(this.myEntity.velocityChanged) { + this.sendPacketToAllAssociatedPlayers(new Packet28EntityVelocity(this.myEntity)); + this.myEntity.velocityChanged = false; + } + + } + + public void sendPacketToAllTrackingPlayers(Packet var1) { + Iterator var2 = this.trackingPlayers.iterator(); + + while(var2.hasNext()) { + EntityPlayerMP var3 = (EntityPlayerMP)var2.next(); + var3.playerNetServerHandler.sendPacketToPlayer(var1); + } + + } + + public void sendPacketToAllAssociatedPlayers(Packet var1) { + this.sendPacketToAllTrackingPlayers(var1); + if(this.myEntity instanceof EntityPlayerMP) { + ((EntityPlayerMP)this.myEntity).playerNetServerHandler.sendPacketToPlayer(var1); + } + + } + + public void informAllAssociatedPlayersOfItemDestruction() { + Iterator var1 = this.trackingPlayers.iterator(); + + while(var1.hasNext()) { + EntityPlayerMP var2 = (EntityPlayerMP)var1.next(); + var2.destroyedItemsNetCache.add(Integer.valueOf(this.myEntity.entityId)); + } + + } + + public void removeFromWatchingList(EntityPlayerMP var1) { + if(this.trackingPlayers.contains(var1)) { + var1.destroyedItemsNetCache.add(Integer.valueOf(this.myEntity.entityId)); + this.trackingPlayers.remove(var1); + } + + } + + public void tryStartWachingThis(EntityPlayerMP var1) { + if(var1 != this.myEntity) { + double var2 = var1.posX - (double)(this.lastScaledXPosition / 32); + double var4 = var1.posZ - (double)(this.lastScaledZPosition / 32); + if(var2 >= (double)(-this.blocksDistanceThreshold) && var2 <= (double)this.blocksDistanceThreshold && var4 >= (double)(-this.blocksDistanceThreshold) && var4 <= (double)this.blocksDistanceThreshold) { + if(!this.trackingPlayers.contains(var1) && (this.isPlayerWatchingThisChunk(var1) || this.myEntity.field_98038_p)) { + this.trackingPlayers.add(var1); + Packet var6 = this.getPacketForThisEntity(); + var1.playerNetServerHandler.sendPacketToPlayer(var6); + if(!this.myEntity.getDataWatcher().getIsBlank()) { + var1.playerNetServerHandler.sendPacketToPlayer(new Packet40EntityMetadata(this.myEntity.entityId, this.myEntity.getDataWatcher(), true)); + } + + this.motionX = this.myEntity.motionX; + this.motionY = this.myEntity.motionY; + this.motionZ = this.myEntity.motionZ; + if(this.sendVelocityUpdates && !(var6 instanceof Packet24MobSpawn)) { + var1.playerNetServerHandler.sendPacketToPlayer(new Packet28EntityVelocity(this.myEntity.entityId, this.myEntity.motionX, this.myEntity.motionY, this.myEntity.motionZ)); + } + + if(this.myEntity.ridingEntity != null) { + var1.playerNetServerHandler.sendPacketToPlayer(new Packet39AttachEntity(this.myEntity, this.myEntity.ridingEntity)); + } + + if(this.myEntity instanceof EntityLiving) { + for(int var7 = 0; var7 < 5; ++var7) { + ItemStack var8 = ((EntityLiving)this.myEntity).getCurrentItemOrArmor(var7); + if(var8 != null) { + var1.playerNetServerHandler.sendPacketToPlayer(new Packet5PlayerInventory(this.myEntity.entityId, var7, var8)); + } + } + } + + if(this.myEntity instanceof EntityPlayer) { + EntityPlayer var10 = (EntityPlayer)this.myEntity; + if(var10.isPlayerSleeping()) { + var1.playerNetServerHandler.sendPacketToPlayer(new Packet17Sleep(this.myEntity, 0, MathHelper.floor_double(this.myEntity.posX), MathHelper.floor_double(this.myEntity.posY), MathHelper.floor_double(this.myEntity.posZ))); + } + } + + if(this.myEntity instanceof EntityLiving) { + EntityLiving var11 = (EntityLiving)this.myEntity; + Iterator var12 = var11.getActivePotionEffects().iterator(); + + while(var12.hasNext()) { + PotionEffect var9 = (PotionEffect)var12.next(); + var1.playerNetServerHandler.sendPacketToPlayer(new Packet41EntityEffect(this.myEntity.entityId, var9)); + } + } + } + } else if(this.trackingPlayers.contains(var1)) { + this.trackingPlayers.remove(var1); + var1.destroyedItemsNetCache.add(Integer.valueOf(this.myEntity.entityId)); + } + + } + } + + private boolean isPlayerWatchingThisChunk(EntityPlayerMP var1) { + return var1.getServerForPlayer().getPlayerManager().isPlayerWatchingChunk(var1, this.myEntity.chunkCoordX, this.myEntity.chunkCoordZ); + } + + public void sendEventsToPlayers(List var1) { + for(int var2 = 0; var2 < var1.size(); ++var2) { + this.tryStartWachingThis((EntityPlayerMP)var1.get(var2)); + } + + } + + private Packet getPacketForThisEntity() { + if(this.myEntity.isDead) { + this.myEntity.worldObj.getWorldLogAgent().logWarning("Fetching addPacket for removed entity"); + } + + if(this.myEntity instanceof EntityItem) { + return new Packet23VehicleSpawn(this.myEntity, 2, 1); + } else if(this.myEntity instanceof EntityPlayerMP) { + return new Packet20NamedEntitySpawn((EntityPlayer)this.myEntity); + } else if(this.myEntity instanceof EntityMinecart) { + EntityMinecart var8 = (EntityMinecart)this.myEntity; + return new Packet23VehicleSpawn(this.myEntity, 10, var8.getMinecartType()); + } else if(this.myEntity instanceof EntityBoat) { + return new Packet23VehicleSpawn(this.myEntity, 1); + } else if(!(this.myEntity instanceof IAnimals) && !(this.myEntity instanceof EntityDragon)) { + if(this.myEntity instanceof EntityFishHook) { + EntityPlayer var7 = ((EntityFishHook)this.myEntity).angler; + return new Packet23VehicleSpawn(this.myEntity, 90, var7 != null ? var7.entityId : this.myEntity.entityId); + } else if(this.myEntity instanceof EntityArrow) { + Entity var6 = ((EntityArrow)this.myEntity).shootingEntity; + return new Packet23VehicleSpawn(this.myEntity, 60, var6 != null ? var6.entityId : this.myEntity.entityId); + } else if(this.myEntity instanceof EntitySnowball) { + return new Packet23VehicleSpawn(this.myEntity, 61); + } else if(this.myEntity instanceof EntityPotion) { + return new Packet23VehicleSpawn(this.myEntity, 73, ((EntityPotion)this.myEntity).getPotionDamage()); + } else if(this.myEntity instanceof EntityExpBottle) { + return new Packet23VehicleSpawn(this.myEntity, 75); + } else if(this.myEntity instanceof EntityEnderPearl) { + return new Packet23VehicleSpawn(this.myEntity, 65); + } else if(this.myEntity instanceof EntityEnderEye) { + return new Packet23VehicleSpawn(this.myEntity, 72); + } else if(this.myEntity instanceof EntityFireworkRocket) { + return new Packet23VehicleSpawn(this.myEntity, 76); + } else { + Packet23VehicleSpawn var2; + if(this.myEntity instanceof EntityFireball) { + EntityFireball var5 = (EntityFireball)this.myEntity; + var2 = null; + byte var3 = 63; + if(this.myEntity instanceof EntitySmallFireball) { + var3 = 64; + } else if(this.myEntity instanceof EntityWitherSkull) { + var3 = 66; + } + + if(var5.shootingEntity != null) { + var2 = new Packet23VehicleSpawn(this.myEntity, var3, ((EntityFireball)this.myEntity).shootingEntity.entityId); + } else { + var2 = new Packet23VehicleSpawn(this.myEntity, var3, 0); + } + + var2.speedX = (int)(var5.accelerationX * 8000.0D); + var2.speedY = (int)(var5.accelerationY * 8000.0D); + var2.speedZ = (int)(var5.accelerationZ * 8000.0D); + return var2; + } else if(this.myEntity instanceof EntityEgg) { + return new Packet23VehicleSpawn(this.myEntity, 62); + } else if(this.myEntity instanceof EntityTNTPrimed) { + return new Packet23VehicleSpawn(this.myEntity, 50); + } else if(this.myEntity instanceof EntityEnderCrystal) { + return new Packet23VehicleSpawn(this.myEntity, 51); + } else if(this.myEntity instanceof EntityFallingSand) { + EntityFallingSand var4 = (EntityFallingSand)this.myEntity; + return new Packet23VehicleSpawn(this.myEntity, 70, var4.blockID | var4.metadata << 16); + } else if(this.myEntity instanceof EntityPainting) { + return new Packet25EntityPainting((EntityPainting)this.myEntity); + } else if(this.myEntity instanceof EntityItemFrame) { + EntityItemFrame var1 = (EntityItemFrame)this.myEntity; + var2 = new Packet23VehicleSpawn(this.myEntity, 71, var1.hangingDirection); + var2.xPosition = MathHelper.floor_float((float)(var1.xPosition * 32)); + var2.yPosition = MathHelper.floor_float((float)(var1.yPosition * 32)); + var2.zPosition = MathHelper.floor_float((float)(var1.zPosition * 32)); + return var2; + } else if(this.myEntity instanceof EntityXPOrb) { + return new Packet26EntityExpOrb((EntityXPOrb)this.myEntity); + } else { + throw new IllegalArgumentException("Don\'t know how to add " + this.myEntity.getClass() + "!"); + } + } + } else { + this.lastHeadMotion = MathHelper.floor_float(this.myEntity.getRotationYawHead() * 256.0F / 360.0F); + return new Packet24MobSpawn((EntityLiving)this.myEntity); + } + } + + public void removePlayerFromTracker(EntityPlayerMP var1) { + if(this.trackingPlayers.contains(var1)) { + this.trackingPlayers.remove(var1); + var1.destroyedItemsNetCache.add(Integer.valueOf(this.myEntity.entityId)); + } + + } +} diff --git a/src/net/minecraft/src/EntityVillager.java b/src/net/minecraft/src/EntityVillager.java new file mode 100644 index 0000000..c1fabaa --- /dev/null +++ b/src/net/minecraft/src/EntityVillager.java @@ -0,0 +1,565 @@ +package net.minecraft.src; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Random; + +public class EntityVillager extends EntityAgeable implements INpc, IMerchant { + private int randomTickDivider; + private boolean isMating; + private boolean isPlaying; + Village villageObj; + private EntityPlayer buyingPlayer; + private MerchantRecipeList buyingList; + private int timeUntilReset; + private boolean needsInitilization; + private int wealth; + private String lastBuyingPlayer; + private boolean field_82190_bM; + private float field_82191_bN; + private static final Map villagerStockList = new HashMap(); + private static final Map blacksmithSellingList = new HashMap(); + + public EntityVillager(World var1) { + this(var1, 0); + } + + public EntityVillager(World var1, int var2) { + super(var1); + this.randomTickDivider = 0; + this.isMating = false; + this.isPlaying = false; + this.villageObj = null; + this.setProfession(var2); + this.texture = "/mob/villager/villager.png"; + this.moveSpeed = 0.5F; + this.setSize(0.6F, 1.8F); + this.getNavigator().setBreakDoors(true); + this.getNavigator().setAvoidsWater(true); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIAvoidEntity(this, EntityZombie.class, 8.0F, 0.3F, 0.35F)); + 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 EntityAIMoveTwardsRestriction(this, 0.3F)); + this.tasks.addTask(6, new EntityAIVillagerMate(this)); + this.tasks.addTask(7, new EntityAIFollowGolem(this)); + this.tasks.addTask(8, new EntityAIPlay(this, 0.32F)); + this.tasks.addTask(9, new EntityAIWatchClosest2(this, EntityPlayer.class, 3.0F, 1.0F)); + this.tasks.addTask(9, new EntityAIWatchClosest2(this, EntityVillager.class, 5.0F, 0.02F)); + this.tasks.addTask(9, new EntityAIWander(this, 0.3F)); + this.tasks.addTask(10, new EntityAIWatchClosest(this, EntityLiving.class, 8.0F)); + } + + public boolean isAIEnabled() { + return true; + } + + protected void updateAITick() { + if(--this.randomTickDivider <= 0) { + this.worldObj.villageCollectionObj.addVillagerPosition(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)); + this.randomTickDivider = 70 + this.rand.nextInt(50); + this.villageObj = this.worldObj.villageCollectionObj.findNearestVillage(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ), 32); + if(this.villageObj == null) { + this.detachHome(); + } else { + ChunkCoordinates var1 = this.villageObj.getCenter(); + this.setHomeArea(var1.posX, var1.posY, var1.posZ, (int)((float)this.villageObj.getVillageRadius() * 0.6F)); + if(this.field_82190_bM) { + this.field_82190_bM = false; + this.villageObj.func_82683_b(5); + } + } + } + + if(!this.isTrading() && this.timeUntilReset > 0) { + --this.timeUntilReset; + if(this.timeUntilReset <= 0) { + if(this.needsInitilization) { + if(this.buyingList.size() > 1) { + Iterator var3 = this.buyingList.iterator(); + + while(var3.hasNext()) { + MerchantRecipe var2 = (MerchantRecipe)var3.next(); + if(var2.func_82784_g()) { + var2.func_82783_a(this.rand.nextInt(6) + this.rand.nextInt(6) + 2); + } + } + } + + this.addDefaultEquipmentAndRecipies(1); + this.needsInitilization = false; + if(this.villageObj != null && this.lastBuyingPlayer != null) { + this.worldObj.setEntityState(this, (byte)14); + this.villageObj.setReputationForPlayer(this.lastBuyingPlayer, 1); + } + } + + this.addPotionEffect(new PotionEffect(Potion.regeneration.id, 200, 0)); + } + } + + super.updateAITick(); + } + + public boolean interact(EntityPlayer var1) { + ItemStack var2 = var1.inventory.getCurrentItem(); + boolean var3 = var2 != null && var2.itemID == Item.monsterPlacer.itemID; + if(!var3 && this.isEntityAlive() && !this.isTrading() && !this.isChild()) { + if(!this.worldObj.isRemote) { + this.setCustomer(var1); + var1.displayGUIMerchant(this, this.func_94057_bL()); + } + + return true; + } else { + return super.interact(var1); + } + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, Integer.valueOf(0)); + } + + public int getMaxHealth() { + return 20; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setInteger("Profession", this.getProfession()); + var1.setInteger("Riches", this.wealth); + if(this.buyingList != null) { + var1.setCompoundTag("Offers", this.buyingList.getRecipiesAsTags()); + } + + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.setProfession(var1.getInteger("Profession")); + this.wealth = var1.getInteger("Riches"); + if(var1.hasKey("Offers")) { + NBTTagCompound var2 = var1.getCompoundTag("Offers"); + this.buyingList = new MerchantRecipeList(var2); + } + + } + + public String getTexture() { + switch(this.getProfession()) { + case 0: + return "/mob/villager/farmer.png"; + case 1: + return "/mob/villager/librarian.png"; + case 2: + return "/mob/villager/priest.png"; + case 3: + return "/mob/villager/smith.png"; + case 4: + return "/mob/villager/butcher.png"; + default: + return super.getTexture(); + } + } + + protected boolean canDespawn() { + return false; + } + + protected String getLivingSound() { + return "mob.villager.default"; + } + + protected String getHurtSound() { + return "mob.villager.defaulthurt"; + } + + protected String getDeathSound() { + return "mob.villager.defaultdeath"; + } + + public void setProfession(int var1) { + this.dataWatcher.updateObject(16, Integer.valueOf(var1)); + } + + public int getProfession() { + return this.dataWatcher.getWatchableObjectInt(16); + } + + public boolean isMating() { + return this.isMating; + } + + public void setMating(boolean var1) { + this.isMating = var1; + } + + public void setPlaying(boolean var1) { + this.isPlaying = var1; + } + + public boolean isPlaying() { + return this.isPlaying; + } + + public void setRevengeTarget(EntityLiving var1) { + super.setRevengeTarget(var1); + if(this.villageObj != null && var1 != null) { + this.villageObj.addOrRenewAgressor(var1); + if(var1 instanceof EntityPlayer) { + byte var2 = -1; + if(this.isChild()) { + var2 = -3; + } + + this.villageObj.setReputationForPlayer(((EntityPlayer)var1).getCommandSenderName(), var2); + if(this.isEntityAlive()) { + this.worldObj.setEntityState(this, (byte)13); + } + } + } + + } + + public void onDeath(DamageSource var1) { + if(this.villageObj != null) { + Entity var2 = var1.getEntity(); + if(var2 != null) { + if(var2 instanceof EntityPlayer) { + this.villageObj.setReputationForPlayer(((EntityPlayer)var2).getCommandSenderName(), -2); + } else if(var2 instanceof IMob) { + this.villageObj.endMatingSeason(); + } + } else if(var2 == null) { + EntityPlayer var3 = this.worldObj.getClosestPlayerToEntity(this, 16.0D); + if(var3 != null) { + this.villageObj.endMatingSeason(); + } + } + } + + super.onDeath(var1); + } + + public void setCustomer(EntityPlayer var1) { + this.buyingPlayer = var1; + } + + public EntityPlayer getCustomer() { + return this.buyingPlayer; + } + + public boolean isTrading() { + return this.buyingPlayer != null; + } + + public void useRecipe(MerchantRecipe var1) { + var1.incrementToolUses(); + if(var1.hasSameIDsAs((MerchantRecipe)this.buyingList.get(this.buyingList.size() - 1))) { + this.timeUntilReset = 40; + this.needsInitilization = true; + if(this.buyingPlayer != null) { + this.lastBuyingPlayer = this.buyingPlayer.getCommandSenderName(); + } else { + this.lastBuyingPlayer = null; + } + } + + if(var1.getItemToBuy().itemID == Item.emerald.itemID) { + this.wealth += var1.getItemToBuy().stackSize; + } + + } + + public MerchantRecipeList getRecipes(EntityPlayer var1) { + if(this.buyingList == null) { + this.addDefaultEquipmentAndRecipies(1); + } + + return this.buyingList; + } + + private float func_82188_j(float var1) { + float var2 = var1 + this.field_82191_bN; + return var2 > 0.9F ? 0.9F - (var2 - 0.9F) : var2; + } + + private void addDefaultEquipmentAndRecipies(int var1) { + if(this.buyingList != null) { + this.field_82191_bN = MathHelper.sqrt_float((float)this.buyingList.size()) * 0.2F; + } else { + this.field_82191_bN = 0.0F; + } + + MerchantRecipeList var2; + var2 = new MerchantRecipeList(); + int var6; + label50: + switch(this.getProfession()) { + case 0: + addMerchantItem(var2, Item.wheat.itemID, this.rand, this.func_82188_j(0.9F)); + addMerchantItem(var2, Block.cloth.blockID, this.rand, this.func_82188_j(0.5F)); + addMerchantItem(var2, Item.chickenRaw.itemID, this.rand, this.func_82188_j(0.5F)); + addMerchantItem(var2, Item.fishCooked.itemID, this.rand, this.func_82188_j(0.4F)); + addBlacksmithItem(var2, Item.bread.itemID, this.rand, this.func_82188_j(0.9F)); + addBlacksmithItem(var2, Item.melon.itemID, this.rand, this.func_82188_j(0.3F)); + addBlacksmithItem(var2, Item.appleRed.itemID, this.rand, this.func_82188_j(0.3F)); + addBlacksmithItem(var2, Item.cookie.itemID, this.rand, this.func_82188_j(0.3F)); + addBlacksmithItem(var2, Item.shears.itemID, this.rand, this.func_82188_j(0.3F)); + addBlacksmithItem(var2, Item.flintAndSteel.itemID, this.rand, this.func_82188_j(0.3F)); + addBlacksmithItem(var2, Item.chickenCooked.itemID, this.rand, this.func_82188_j(0.3F)); + addBlacksmithItem(var2, Item.arrow.itemID, this.rand, this.func_82188_j(0.5F)); + if(this.rand.nextFloat() < this.func_82188_j(0.5F)) { + var2.add(new MerchantRecipe(new ItemStack(Block.gravel, 10), new ItemStack(Item.emerald), new ItemStack(Item.flint.itemID, 4 + this.rand.nextInt(2), 0))); + } + break; + case 1: + addMerchantItem(var2, Item.paper.itemID, this.rand, this.func_82188_j(0.8F)); + addMerchantItem(var2, Item.book.itemID, this.rand, this.func_82188_j(0.8F)); + addMerchantItem(var2, Item.writtenBook.itemID, this.rand, this.func_82188_j(0.3F)); + addBlacksmithItem(var2, Block.bookShelf.blockID, this.rand, this.func_82188_j(0.8F)); + addBlacksmithItem(var2, Block.glass.blockID, this.rand, this.func_82188_j(0.2F)); + addBlacksmithItem(var2, Item.compass.itemID, this.rand, this.func_82188_j(0.2F)); + addBlacksmithItem(var2, Item.pocketSundial.itemID, this.rand, this.func_82188_j(0.2F)); + if(this.rand.nextFloat() < this.func_82188_j(0.07F)) { + Enchantment var8 = Enchantment.field_92090_c[this.rand.nextInt(Enchantment.field_92090_c.length)]; + int var10 = MathHelper.getRandomIntegerInRange(this.rand, var8.getMinLevel(), var8.getMaxLevel()); + ItemStack var11 = Item.enchantedBook.func_92111_a(new EnchantmentData(var8, var10)); + var6 = 2 + this.rand.nextInt(5 + var10 * 10) + 3 * var10; + var2.add(new MerchantRecipe(new ItemStack(Item.book), new ItemStack(Item.emerald, var6), var11)); + } + break; + case 2: + addBlacksmithItem(var2, Item.eyeOfEnder.itemID, this.rand, this.func_82188_j(0.3F)); + addBlacksmithItem(var2, Item.expBottle.itemID, this.rand, this.func_82188_j(0.2F)); + addBlacksmithItem(var2, Item.redstone.itemID, this.rand, this.func_82188_j(0.4F)); + addBlacksmithItem(var2, Block.glowStone.blockID, this.rand, this.func_82188_j(0.3F)); + int[] var3 = new int[]{Item.swordIron.itemID, Item.swordDiamond.itemID, Item.plateIron.itemID, Item.plateDiamond.itemID, Item.axeIron.itemID, Item.axeDiamond.itemID, Item.pickaxeIron.itemID, Item.pickaxeDiamond.itemID}; + int[] var4 = var3; + int var5 = var3.length; + var6 = 0; + + while(true) { + if(var6 >= var5) { + break label50; + } + + int var7 = var4[var6]; + if(this.rand.nextFloat() < this.func_82188_j(0.05F)) { + var2.add(new MerchantRecipe(new ItemStack(var7, 1, 0), new ItemStack(Item.emerald, 2 + this.rand.nextInt(3), 0), EnchantmentHelper.addRandomEnchantment(this.rand, new ItemStack(var7, 1, 0), 5 + this.rand.nextInt(15)))); + } + + ++var6; + } + case 3: + addMerchantItem(var2, Item.coal.itemID, this.rand, this.func_82188_j(0.7F)); + addMerchantItem(var2, Item.ingotIron.itemID, this.rand, this.func_82188_j(0.5F)); + addMerchantItem(var2, Item.ingotGold.itemID, this.rand, this.func_82188_j(0.5F)); + addMerchantItem(var2, Item.diamond.itemID, this.rand, this.func_82188_j(0.5F)); + addBlacksmithItem(var2, Item.swordIron.itemID, this.rand, this.func_82188_j(0.5F)); + addBlacksmithItem(var2, Item.swordDiamond.itemID, this.rand, this.func_82188_j(0.5F)); + addBlacksmithItem(var2, Item.axeIron.itemID, this.rand, this.func_82188_j(0.3F)); + addBlacksmithItem(var2, Item.axeDiamond.itemID, this.rand, this.func_82188_j(0.3F)); + addBlacksmithItem(var2, Item.pickaxeIron.itemID, this.rand, this.func_82188_j(0.5F)); + addBlacksmithItem(var2, Item.pickaxeDiamond.itemID, this.rand, this.func_82188_j(0.5F)); + addBlacksmithItem(var2, Item.shovelIron.itemID, this.rand, this.func_82188_j(0.2F)); + addBlacksmithItem(var2, Item.shovelDiamond.itemID, this.rand, this.func_82188_j(0.2F)); + addBlacksmithItem(var2, Item.hoeIron.itemID, this.rand, this.func_82188_j(0.2F)); + addBlacksmithItem(var2, Item.hoeDiamond.itemID, this.rand, this.func_82188_j(0.2F)); + addBlacksmithItem(var2, Item.bootsIron.itemID, this.rand, this.func_82188_j(0.2F)); + addBlacksmithItem(var2, Item.bootsDiamond.itemID, this.rand, this.func_82188_j(0.2F)); + addBlacksmithItem(var2, Item.helmetIron.itemID, this.rand, this.func_82188_j(0.2F)); + addBlacksmithItem(var2, Item.helmetDiamond.itemID, this.rand, this.func_82188_j(0.2F)); + addBlacksmithItem(var2, Item.plateIron.itemID, this.rand, this.func_82188_j(0.2F)); + addBlacksmithItem(var2, Item.plateDiamond.itemID, this.rand, this.func_82188_j(0.2F)); + addBlacksmithItem(var2, Item.legsIron.itemID, this.rand, this.func_82188_j(0.2F)); + addBlacksmithItem(var2, Item.legsDiamond.itemID, this.rand, this.func_82188_j(0.2F)); + addBlacksmithItem(var2, Item.bootsChain.itemID, this.rand, this.func_82188_j(0.1F)); + addBlacksmithItem(var2, Item.helmetChain.itemID, this.rand, this.func_82188_j(0.1F)); + addBlacksmithItem(var2, Item.plateChain.itemID, this.rand, this.func_82188_j(0.1F)); + addBlacksmithItem(var2, Item.legsChain.itemID, this.rand, this.func_82188_j(0.1F)); + break; + case 4: + addMerchantItem(var2, Item.coal.itemID, this.rand, this.func_82188_j(0.7F)); + addMerchantItem(var2, Item.porkRaw.itemID, this.rand, this.func_82188_j(0.5F)); + addMerchantItem(var2, Item.beefRaw.itemID, this.rand, this.func_82188_j(0.5F)); + addBlacksmithItem(var2, Item.saddle.itemID, this.rand, this.func_82188_j(0.1F)); + addBlacksmithItem(var2, Item.plateLeather.itemID, this.rand, this.func_82188_j(0.3F)); + addBlacksmithItem(var2, Item.bootsLeather.itemID, this.rand, this.func_82188_j(0.3F)); + addBlacksmithItem(var2, Item.helmetLeather.itemID, this.rand, this.func_82188_j(0.3F)); + addBlacksmithItem(var2, Item.legsLeather.itemID, this.rand, this.func_82188_j(0.3F)); + addBlacksmithItem(var2, Item.porkCooked.itemID, this.rand, this.func_82188_j(0.3F)); + addBlacksmithItem(var2, Item.beefCooked.itemID, this.rand, this.func_82188_j(0.3F)); + } + + if(var2.isEmpty()) { + addMerchantItem(var2, Item.ingotGold.itemID, this.rand, 1.0F); + } + + Collections.shuffle(var2); + if(this.buyingList == null) { + this.buyingList = new MerchantRecipeList(); + } + + for(int var9 = 0; var9 < var1 && var9 < var2.size(); ++var9) { + this.buyingList.addToListWithCheck((MerchantRecipe)var2.get(var9)); + } + + } + + public void setRecipes(MerchantRecipeList var1) { + } + + private static void addMerchantItem(MerchantRecipeList var0, int var1, Random var2, float var3) { + if(var2.nextFloat() < var3) { + var0.add(new MerchantRecipe(getRandomSizedStack(var1, var2), Item.emerald)); + } + + } + + private static ItemStack getRandomSizedStack(int var0, Random var1) { + return new ItemStack(var0, getRandomCountForItem(var0, var1), 0); + } + + private static int getRandomCountForItem(int var0, Random var1) { + Tuple var2 = (Tuple)villagerStockList.get(Integer.valueOf(var0)); + return var2 == null ? 1 : (((Integer)var2.getFirst()).intValue() >= ((Integer)var2.getSecond()).intValue() ? ((Integer)var2.getFirst()).intValue() : ((Integer)var2.getFirst()).intValue() + var1.nextInt(((Integer)var2.getSecond()).intValue() - ((Integer)var2.getFirst()).intValue())); + } + + private static void addBlacksmithItem(MerchantRecipeList var0, int var1, Random var2, float var3) { + if(var2.nextFloat() < var3) { + int var4 = getRandomCountForBlacksmithItem(var1, var2); + ItemStack var5; + ItemStack var6; + if(var4 < 0) { + var5 = new ItemStack(Item.emerald.itemID, 1, 0); + var6 = new ItemStack(var1, -var4, 0); + } else { + var5 = new ItemStack(Item.emerald.itemID, var4, 0); + var6 = new ItemStack(var1, 1, 0); + } + + var0.add(new MerchantRecipe(var5, var6)); + } + + } + + private static int getRandomCountForBlacksmithItem(int var0, Random var1) { + Tuple var2 = (Tuple)blacksmithSellingList.get(Integer.valueOf(var0)); + return var2 == null ? 1 : (((Integer)var2.getFirst()).intValue() >= ((Integer)var2.getSecond()).intValue() ? ((Integer)var2.getFirst()).intValue() : ((Integer)var2.getFirst()).intValue() + var1.nextInt(((Integer)var2.getSecond()).intValue() - ((Integer)var2.getFirst()).intValue())); + } + + public void handleHealthUpdate(byte var1) { + if(var1 == 12) { + this.generateRandomParticles("heart"); + } else if(var1 == 13) { + this.generateRandomParticles("angryVillager"); + } else if(var1 == 14) { + this.generateRandomParticles("happyVillager"); + } else { + super.handleHealthUpdate(var1); + } + + } + + private void generateRandomParticles(String var1) { + for(int var2 = 0; var2 < 5; ++var2) { + double var3 = this.rand.nextGaussian() * 0.02D; + double var5 = this.rand.nextGaussian() * 0.02D; + double var7 = this.rand.nextGaussian() * 0.02D; + this.worldObj.spawnParticle(var1, 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, var3, var5, var7); + } + + } + + public void initCreature() { + this.setProfession(this.worldObj.rand.nextInt(5)); + } + + public void func_82187_q() { + this.field_82190_bM = true; + } + + public EntityVillager func_90012_b(EntityAgeable var1) { + EntityVillager var2 = new EntityVillager(this.worldObj); + var2.initCreature(); + return var2; + } + + public EntityAgeable createChild(EntityAgeable var1) { + return this.func_90012_b(var1); + } + + static { + villagerStockList.put(Integer.valueOf(Item.coal.itemID), new Tuple(Integer.valueOf(16), Integer.valueOf(24))); + villagerStockList.put(Integer.valueOf(Item.ingotIron.itemID), new Tuple(Integer.valueOf(8), Integer.valueOf(10))); + villagerStockList.put(Integer.valueOf(Item.ingotGold.itemID), new Tuple(Integer.valueOf(8), Integer.valueOf(10))); + villagerStockList.put(Integer.valueOf(Item.diamond.itemID), new Tuple(Integer.valueOf(4), Integer.valueOf(6))); + villagerStockList.put(Integer.valueOf(Item.paper.itemID), new Tuple(Integer.valueOf(24), Integer.valueOf(36))); + villagerStockList.put(Integer.valueOf(Item.book.itemID), new Tuple(Integer.valueOf(11), Integer.valueOf(13))); + villagerStockList.put(Integer.valueOf(Item.writtenBook.itemID), new Tuple(Integer.valueOf(1), Integer.valueOf(1))); + villagerStockList.put(Integer.valueOf(Item.enderPearl.itemID), new Tuple(Integer.valueOf(3), Integer.valueOf(4))); + villagerStockList.put(Integer.valueOf(Item.eyeOfEnder.itemID), new Tuple(Integer.valueOf(2), Integer.valueOf(3))); + villagerStockList.put(Integer.valueOf(Item.porkRaw.itemID), new Tuple(Integer.valueOf(14), Integer.valueOf(18))); + villagerStockList.put(Integer.valueOf(Item.beefRaw.itemID), new Tuple(Integer.valueOf(14), Integer.valueOf(18))); + villagerStockList.put(Integer.valueOf(Item.chickenRaw.itemID), new Tuple(Integer.valueOf(14), Integer.valueOf(18))); + villagerStockList.put(Integer.valueOf(Item.fishCooked.itemID), new Tuple(Integer.valueOf(9), Integer.valueOf(13))); + villagerStockList.put(Integer.valueOf(Item.seeds.itemID), new Tuple(Integer.valueOf(34), Integer.valueOf(48))); + villagerStockList.put(Integer.valueOf(Item.melonSeeds.itemID), new Tuple(Integer.valueOf(30), Integer.valueOf(38))); + villagerStockList.put(Integer.valueOf(Item.pumpkinSeeds.itemID), new Tuple(Integer.valueOf(30), Integer.valueOf(38))); + villagerStockList.put(Integer.valueOf(Item.wheat.itemID), new Tuple(Integer.valueOf(18), Integer.valueOf(22))); + villagerStockList.put(Integer.valueOf(Block.cloth.blockID), new Tuple(Integer.valueOf(14), Integer.valueOf(22))); + villagerStockList.put(Integer.valueOf(Item.rottenFlesh.itemID), new Tuple(Integer.valueOf(36), Integer.valueOf(64))); + blacksmithSellingList.put(Integer.valueOf(Item.flintAndSteel.itemID), new Tuple(Integer.valueOf(3), Integer.valueOf(4))); + blacksmithSellingList.put(Integer.valueOf(Item.shears.itemID), new Tuple(Integer.valueOf(3), Integer.valueOf(4))); + blacksmithSellingList.put(Integer.valueOf(Item.swordIron.itemID), new Tuple(Integer.valueOf(7), Integer.valueOf(11))); + blacksmithSellingList.put(Integer.valueOf(Item.swordDiamond.itemID), new Tuple(Integer.valueOf(12), Integer.valueOf(14))); + blacksmithSellingList.put(Integer.valueOf(Item.axeIron.itemID), new Tuple(Integer.valueOf(6), Integer.valueOf(8))); + blacksmithSellingList.put(Integer.valueOf(Item.axeDiamond.itemID), new Tuple(Integer.valueOf(9), Integer.valueOf(12))); + blacksmithSellingList.put(Integer.valueOf(Item.pickaxeIron.itemID), new Tuple(Integer.valueOf(7), Integer.valueOf(9))); + blacksmithSellingList.put(Integer.valueOf(Item.pickaxeDiamond.itemID), new Tuple(Integer.valueOf(10), Integer.valueOf(12))); + blacksmithSellingList.put(Integer.valueOf(Item.shovelIron.itemID), new Tuple(Integer.valueOf(4), Integer.valueOf(6))); + blacksmithSellingList.put(Integer.valueOf(Item.shovelDiamond.itemID), new Tuple(Integer.valueOf(7), Integer.valueOf(8))); + blacksmithSellingList.put(Integer.valueOf(Item.hoeIron.itemID), new Tuple(Integer.valueOf(4), Integer.valueOf(6))); + blacksmithSellingList.put(Integer.valueOf(Item.hoeDiamond.itemID), new Tuple(Integer.valueOf(7), Integer.valueOf(8))); + blacksmithSellingList.put(Integer.valueOf(Item.bootsIron.itemID), new Tuple(Integer.valueOf(4), Integer.valueOf(6))); + blacksmithSellingList.put(Integer.valueOf(Item.bootsDiamond.itemID), new Tuple(Integer.valueOf(7), Integer.valueOf(8))); + blacksmithSellingList.put(Integer.valueOf(Item.helmetIron.itemID), new Tuple(Integer.valueOf(4), Integer.valueOf(6))); + blacksmithSellingList.put(Integer.valueOf(Item.helmetDiamond.itemID), new Tuple(Integer.valueOf(7), Integer.valueOf(8))); + blacksmithSellingList.put(Integer.valueOf(Item.plateIron.itemID), new Tuple(Integer.valueOf(10), Integer.valueOf(14))); + blacksmithSellingList.put(Integer.valueOf(Item.plateDiamond.itemID), new Tuple(Integer.valueOf(16), Integer.valueOf(19))); + blacksmithSellingList.put(Integer.valueOf(Item.legsIron.itemID), new Tuple(Integer.valueOf(8), Integer.valueOf(10))); + blacksmithSellingList.put(Integer.valueOf(Item.legsDiamond.itemID), new Tuple(Integer.valueOf(11), Integer.valueOf(14))); + blacksmithSellingList.put(Integer.valueOf(Item.bootsChain.itemID), new Tuple(Integer.valueOf(5), Integer.valueOf(7))); + blacksmithSellingList.put(Integer.valueOf(Item.helmetChain.itemID), new Tuple(Integer.valueOf(5), Integer.valueOf(7))); + blacksmithSellingList.put(Integer.valueOf(Item.plateChain.itemID), new Tuple(Integer.valueOf(11), Integer.valueOf(15))); + blacksmithSellingList.put(Integer.valueOf(Item.legsChain.itemID), new Tuple(Integer.valueOf(9), Integer.valueOf(11))); + blacksmithSellingList.put(Integer.valueOf(Item.bread.itemID), new Tuple(Integer.valueOf(-4), Integer.valueOf(-2))); + blacksmithSellingList.put(Integer.valueOf(Item.melon.itemID), new Tuple(Integer.valueOf(-8), Integer.valueOf(-4))); + blacksmithSellingList.put(Integer.valueOf(Item.appleRed.itemID), new Tuple(Integer.valueOf(-8), Integer.valueOf(-4))); + blacksmithSellingList.put(Integer.valueOf(Item.cookie.itemID), new Tuple(Integer.valueOf(-10), Integer.valueOf(-7))); + blacksmithSellingList.put(Integer.valueOf(Block.glass.blockID), new Tuple(Integer.valueOf(-5), Integer.valueOf(-3))); + blacksmithSellingList.put(Integer.valueOf(Block.bookShelf.blockID), new Tuple(Integer.valueOf(3), Integer.valueOf(4))); + blacksmithSellingList.put(Integer.valueOf(Item.plateLeather.itemID), new Tuple(Integer.valueOf(4), Integer.valueOf(5))); + blacksmithSellingList.put(Integer.valueOf(Item.bootsLeather.itemID), new Tuple(Integer.valueOf(2), Integer.valueOf(4))); + blacksmithSellingList.put(Integer.valueOf(Item.helmetLeather.itemID), new Tuple(Integer.valueOf(2), Integer.valueOf(4))); + blacksmithSellingList.put(Integer.valueOf(Item.legsLeather.itemID), new Tuple(Integer.valueOf(2), Integer.valueOf(4))); + blacksmithSellingList.put(Integer.valueOf(Item.saddle.itemID), new Tuple(Integer.valueOf(6), Integer.valueOf(8))); + blacksmithSellingList.put(Integer.valueOf(Item.expBottle.itemID), new Tuple(Integer.valueOf(-4), Integer.valueOf(-1))); + blacksmithSellingList.put(Integer.valueOf(Item.redstone.itemID), new Tuple(Integer.valueOf(-4), Integer.valueOf(-1))); + blacksmithSellingList.put(Integer.valueOf(Item.compass.itemID), new Tuple(Integer.valueOf(10), Integer.valueOf(12))); + blacksmithSellingList.put(Integer.valueOf(Item.pocketSundial.itemID), new Tuple(Integer.valueOf(10), Integer.valueOf(12))); + blacksmithSellingList.put(Integer.valueOf(Block.glowStone.blockID), new Tuple(Integer.valueOf(-3), Integer.valueOf(-1))); + blacksmithSellingList.put(Integer.valueOf(Item.porkCooked.itemID), new Tuple(Integer.valueOf(-7), Integer.valueOf(-5))); + blacksmithSellingList.put(Integer.valueOf(Item.beefCooked.itemID), new Tuple(Integer.valueOf(-7), Integer.valueOf(-5))); + blacksmithSellingList.put(Integer.valueOf(Item.chickenCooked.itemID), new Tuple(Integer.valueOf(-8), Integer.valueOf(-6))); + blacksmithSellingList.put(Integer.valueOf(Item.eyeOfEnder.itemID), new Tuple(Integer.valueOf(7), Integer.valueOf(11))); + blacksmithSellingList.put(Integer.valueOf(Item.arrow.itemID), new Tuple(Integer.valueOf(-12), Integer.valueOf(-8))); + } +} diff --git a/src/net/minecraft/src/EntityWaterMob.java b/src/net/minecraft/src/EntityWaterMob.java new file mode 100644 index 0000000..9b9d5c5 --- /dev/null +++ b/src/net/minecraft/src/EntityWaterMob.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +public abstract class EntityWaterMob extends EntityCreature implements IAnimals { + public EntityWaterMob(World var1) { + super(var1); + } + + public boolean canBreatheUnderwater() { + return true; + } + + public boolean getCanSpawnHere() { + return this.worldObj.checkNoEntityCollision(this.boundingBox); + } + + public int getTalkInterval() { + return 120; + } + + protected boolean canDespawn() { + return true; + } + + protected int getExperiencePoints(EntityPlayer var1) { + return 1 + this.worldObj.rand.nextInt(3); + } + + public void onEntityUpdate() { + int var1 = this.getAir(); + super.onEntityUpdate(); + if(this.isEntityAlive() && !this.isInsideOfMaterial(Material.water)) { + --var1; + this.setAir(var1); + if(this.getAir() == -20) { + this.setAir(0); + this.attackEntityFrom(DamageSource.drown, 2); + } + } else { + this.setAir(300); + } + + } +} diff --git a/src/net/minecraft/src/EntityWeatherEffect.java b/src/net/minecraft/src/EntityWeatherEffect.java new file mode 100644 index 0000000..cef0f6b --- /dev/null +++ b/src/net/minecraft/src/EntityWeatherEffect.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public abstract class EntityWeatherEffect extends Entity { + public EntityWeatherEffect(World var1) { + super(var1); + } +} diff --git a/src/net/minecraft/src/EntityWitch.java b/src/net/minecraft/src/EntityWitch.java new file mode 100644 index 0000000..2b163f2 --- /dev/null +++ b/src/net/minecraft/src/EntityWitch.java @@ -0,0 +1,172 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class EntityWitch extends EntityMob implements IRangedAttackMob { + private static final int[] witchDrops = new int[]{Item.lightStoneDust.itemID, Item.sugar.itemID, Item.redstone.itemID, Item.spiderEye.itemID, Item.glassBottle.itemID, Item.gunpowder.itemID, Item.stick.itemID, Item.stick.itemID}; + private int witchAttackTimer = 0; + + public EntityWitch(World var1) { + super(var1); + this.texture = "/mob/villager/witch.png"; + this.moveSpeed = 0.25F; + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIArrowAttack(this, this.moveSpeed, 60, 10.0F)); + this.tasks.addTask(2, new EntityAIWander(this, this.moveSpeed)); + 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)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 16.0F, 0, true)); + } + + protected void entityInit() { + super.entityInit(); + this.getDataWatcher().addObject(21, Byte.valueOf((byte)0)); + } + + protected String getLivingSound() { + return "mob.witch.idle"; + } + + protected String getHurtSound() { + return "mob.witch.hurt"; + } + + protected String getDeathSound() { + return "mob.witch.death"; + } + + public void setAggressive(boolean var1) { + this.getDataWatcher().updateObject(21, Byte.valueOf((byte)(var1 ? 1 : 0))); + } + + public boolean getAggressive() { + return this.getDataWatcher().getWatchableObjectByte(21) == 1; + } + + public int getMaxHealth() { + return 26; + } + + public boolean isAIEnabled() { + return true; + } + + public void onLivingUpdate() { + if(!this.worldObj.isRemote) { + if(this.getAggressive()) { + if(this.witchAttackTimer-- <= 0) { + this.setAggressive(false); + ItemStack var5 = this.getHeldItem(); + this.setCurrentItemOrArmor(0, (ItemStack)null); + if(var5 != null && var5.itemID == Item.potion.itemID) { + List var2 = Item.potion.getEffects(var5); + if(var2 != null) { + Iterator var3 = var2.iterator(); + + while(var3.hasNext()) { + PotionEffect var4 = (PotionEffect)var3.next(); + this.addPotionEffect(new PotionEffect(var4)); + } + } + } + } + } else { + short var1 = -1; + if(this.rand.nextFloat() < 0.15F && this.isBurning() && !this.isPotionActive(Potion.fireResistance)) { + var1 = 16307; + } else if(this.rand.nextFloat() < 0.05F && this.health < this.getMaxHealth()) { + var1 = 16341; + } else if(this.rand.nextFloat() < 0.25F && this.getAttackTarget() != null && !this.isPotionActive(Potion.moveSpeed) && this.getAttackTarget().getDistanceSqToEntity(this) > 121.0D) { + var1 = 16274; + } else if(this.rand.nextFloat() < 0.25F && this.getAttackTarget() != null && !this.isPotionActive(Potion.moveSpeed) && this.getAttackTarget().getDistanceSqToEntity(this) > 121.0D) { + var1 = 16274; + } + + if(var1 > -1) { + this.setCurrentItemOrArmor(0, new ItemStack(Item.potion, 1, var1)); + this.witchAttackTimer = this.getHeldItem().getMaxItemUseDuration(); + this.setAggressive(true); + } + } + + if(this.rand.nextFloat() < 7.5E-4F) { + this.worldObj.setEntityState(this, (byte)15); + } + } + + super.onLivingUpdate(); + } + + public void handleHealthUpdate(byte var1) { + if(var1 == 15) { + for(int var2 = 0; var2 < this.rand.nextInt(35) + 10; ++var2) { + this.worldObj.spawnParticle("witchMagic", this.posX + this.rand.nextGaussian() * (double)0.13F, this.boundingBox.maxY + 0.5D + this.rand.nextGaussian() * (double)0.13F, this.posZ + this.rand.nextGaussian() * (double)0.13F, 0.0D, 0.0D, 0.0D); + } + } else { + super.handleHealthUpdate(var1); + } + + } + + protected int applyPotionDamageCalculations(DamageSource var1, int var2) { + var2 = super.applyPotionDamageCalculations(var1, var2); + if(var1.getEntity() == this) { + var2 = 0; + } + + if(var1.isMagicDamage()) { + var2 = (int)((double)var2 * 0.15D); + } + + return var2; + } + + public float getSpeedModifier() { + float var1 = super.getSpeedModifier(); + if(this.getAggressive()) { + var1 *= 12.0F / 16.0F; + } + + return var1; + } + + protected void dropFewItems(boolean var1, int var2) { + int var3 = this.rand.nextInt(3) + 1; + + for(int var4 = 0; var4 < var3; ++var4) { + int var5 = this.rand.nextInt(3); + int var6 = witchDrops[this.rand.nextInt(witchDrops.length)]; + if(var2 > 0) { + var5 += this.rand.nextInt(var2 + 1); + } + + for(int var7 = 0; var7 < var5; ++var7) { + this.dropItem(var6, 1); + } + } + + } + + public void attackEntityWithRangedAttack(EntityLiving var1, float var2) { + if(!this.getAggressive()) { + EntityPotion var3 = new EntityPotion(this.worldObj, this, 32732); + var3.rotationPitch -= -20.0F; + double var4 = var1.posX + var1.motionX - this.posX; + double var6 = var1.posY + (double)var1.getEyeHeight() - (double)1.1F - this.posY; + double var8 = var1.posZ + var1.motionZ - this.posZ; + float var10 = MathHelper.sqrt_double(var4 * var4 + var8 * var8); + if(var10 >= 8.0F && !var1.isPotionActive(Potion.moveSlowdown)) { + var3.setPotionDamage(32698); + } else if(var1.getHealth() >= 8 && !var1.isPotionActive(Potion.poison)) { + var3.setPotionDamage(32660); + } else if(var10 <= 3.0F && !var1.isPotionActive(Potion.weakness) && this.rand.nextFloat() < 0.25F) { + var3.setPotionDamage(32696); + } + + var3.setThrowableHeading(var4, var6 + (double)(var10 * 0.2F), var8, 12.0F / 16.0F, 8.0F); + this.worldObj.spawnEntityInWorld(var3); + } + } +} diff --git a/src/net/minecraft/src/EntityWither.java b/src/net/minecraft/src/EntityWither.java new file mode 100644 index 0000000..760bc82 --- /dev/null +++ b/src/net/minecraft/src/EntityWither.java @@ -0,0 +1,449 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityWither extends EntityMob implements IBossDisplayData, IRangedAttackMob { + private float[] field_82220_d = new float[2]; + private float[] field_82221_e = new float[2]; + private float[] field_82217_f = new float[2]; + private float[] field_82218_g = new float[2]; + private int[] field_82223_h = new int[2]; + private int[] field_82224_i = new int[2]; + private int field_82222_j; + private static final IEntitySelector attackEntitySelector = new EntityWitherAttackFilter(); + + public EntityWither(World var1) { + super(var1); + this.setEntityHealth(this.getMaxHealth()); + this.texture = "/mob/wither.png"; + this.setSize(0.9F, 4.0F); + this.isImmuneToFire = true; + this.moveSpeed = 0.6F; + this.getNavigator().setCanSwim(true); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(2, new EntityAIArrowAttack(this, this.moveSpeed, 40, 20.0F)); + this.tasks.addTask(5, new EntityAIWander(this, this.moveSpeed)); + 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)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityLiving.class, 30.0F, 0, false, false, attackEntitySelector)); + this.experienceValue = 50; + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(16, new Integer(100)); + this.dataWatcher.addObject(17, new Integer(0)); + this.dataWatcher.addObject(18, new Integer(0)); + this.dataWatcher.addObject(19, new Integer(0)); + this.dataWatcher.addObject(20, new Integer(0)); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setInteger("Invul", this.func_82212_n()); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.func_82215_s(var1.getInteger("Invul")); + this.dataWatcher.updateObject(16, Integer.valueOf(this.health)); + } + + public float getShadowSize() { + return this.height / 8.0F; + } + + protected String getLivingSound() { + return "mob.wither.idle"; + } + + protected String getHurtSound() { + return "mob.wither.hurt"; + } + + protected String getDeathSound() { + return "mob.wither.death"; + } + + public String getTexture() { + int var1 = this.func_82212_n(); + return var1 > 0 && (var1 > 80 || var1 / 5 % 2 != 1) ? "/mob/wither_invul.png" : "/mob/wither.png"; + } + + public void onLivingUpdate() { + if(!this.worldObj.isRemote) { + this.dataWatcher.updateObject(16, Integer.valueOf(this.health)); + } + + this.motionY *= (double)0.6F; + double var4; + double var6; + double var8; + if(!this.worldObj.isRemote && this.getWatchedTargetId(0) > 0) { + Entity var1 = this.worldObj.getEntityByID(this.getWatchedTargetId(0)); + if(var1 != null) { + if(this.posY < var1.posY || !this.isArmored() && this.posY < var1.posY + 5.0D) { + if(this.motionY < 0.0D) { + this.motionY = 0.0D; + } + + this.motionY += (0.5D - this.motionY) * (double)0.6F; + } + + double var2 = var1.posX - this.posX; + var4 = var1.posZ - this.posZ; + var6 = var2 * var2 + var4 * var4; + if(var6 > 9.0D) { + var8 = (double)MathHelper.sqrt_double(var6); + this.motionX += (var2 / var8 * 0.5D - this.motionX) * (double)0.6F; + this.motionZ += (var4 / var8 * 0.5D - this.motionZ) * (double)0.6F; + } + } + } + + if(this.motionX * this.motionX + this.motionZ * this.motionZ > (double)0.05F) { + this.rotationYaw = (float)Math.atan2(this.motionZ, this.motionX) * (180.0F / (float)Math.PI) - 90.0F; + } + + super.onLivingUpdate(); + + int var20; + for(var20 = 0; var20 < 2; ++var20) { + this.field_82218_g[var20] = this.field_82221_e[var20]; + this.field_82217_f[var20] = this.field_82220_d[var20]; + } + + int var21; + for(var20 = 0; var20 < 2; ++var20) { + var21 = this.getWatchedTargetId(var20 + 1); + Entity var3 = null; + if(var21 > 0) { + var3 = this.worldObj.getEntityByID(var21); + } + + if(var3 != null) { + var4 = this.func_82214_u(var20 + 1); + var6 = this.func_82208_v(var20 + 1); + var8 = this.func_82213_w(var20 + 1); + double var10 = var3.posX - var4; + double var12 = var3.posY + (double)var3.getEyeHeight() - var6; + double var14 = var3.posZ - var8; + double var16 = (double)MathHelper.sqrt_double(var10 * var10 + var14 * var14); + float var18 = (float)(Math.atan2(var14, var10) * 180.0D / (double)((float)Math.PI)) - 90.0F; + float var19 = (float)(-(Math.atan2(var12, var16) * 180.0D / (double)((float)Math.PI))); + this.field_82220_d[var20] = this.func_82204_b(this.field_82220_d[var20], var19, 40.0F); + this.field_82221_e[var20] = this.func_82204_b(this.field_82221_e[var20], var18, 10.0F); + } else { + this.field_82221_e[var20] = this.func_82204_b(this.field_82221_e[var20], this.renderYawOffset, 10.0F); + } + } + + boolean var22 = this.isArmored(); + + for(var21 = 0; var21 < 3; ++var21) { + double var23 = this.func_82214_u(var21); + double var5 = this.func_82208_v(var21); + double var7 = this.func_82213_w(var21); + this.worldObj.spawnParticle("smoke", var23 + this.rand.nextGaussian() * (double)0.3F, var5 + this.rand.nextGaussian() * (double)0.3F, var7 + this.rand.nextGaussian() * (double)0.3F, 0.0D, 0.0D, 0.0D); + if(var22 && this.worldObj.rand.nextInt(4) == 0) { + this.worldObj.spawnParticle("mobSpell", var23 + this.rand.nextGaussian() * (double)0.3F, var5 + this.rand.nextGaussian() * (double)0.3F, var7 + this.rand.nextGaussian() * (double)0.3F, (double)0.7F, (double)0.7F, 0.5D); + } + } + + if(this.func_82212_n() > 0) { + for(var21 = 0; var21 < 3; ++var21) { + this.worldObj.spawnParticle("mobSpell", this.posX + this.rand.nextGaussian() * 1.0D, this.posY + (double)(this.rand.nextFloat() * 3.3F), this.posZ + this.rand.nextGaussian() * 1.0D, (double)0.7F, (double)0.7F, (double)0.9F); + } + } + + } + + protected void updateAITasks() { + int var1; + if(this.func_82212_n() > 0) { + var1 = this.func_82212_n() - 1; + if(var1 <= 0) { + this.worldObj.newExplosion(this, this.posX, this.posY + (double)this.getEyeHeight(), this.posZ, 7.0F, false, this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing")); + this.worldObj.func_82739_e(1013, (int)this.posX, (int)this.posY, (int)this.posZ, 0); + } + + this.func_82215_s(var1); + if(this.ticksExisted % 10 == 0) { + this.heal(10); + } + + } else { + super.updateAITasks(); + + int var12; + for(var1 = 1; var1 < 3; ++var1) { + if(this.ticksExisted >= this.field_82223_h[var1 - 1]) { + this.field_82223_h[var1 - 1] = this.ticksExisted + 10 + this.rand.nextInt(10); + if(this.worldObj.difficultySetting >= 2) { + int var10001 = var1 - 1; + int var10003 = this.field_82224_i[var1 - 1]; + this.field_82224_i[var10001] = this.field_82224_i[var1 - 1] + 1; + if(var10003 > 15) { + float var2 = 10.0F; + float var3 = 5.0F; + double var4 = MathHelper.getRandomDoubleInRange(this.rand, this.posX - (double)var2, this.posX + (double)var2); + double var6 = MathHelper.getRandomDoubleInRange(this.rand, this.posY - (double)var3, this.posY + (double)var3); + double var8 = MathHelper.getRandomDoubleInRange(this.rand, this.posZ - (double)var2, this.posZ + (double)var2); + this.func_82209_a(var1 + 1, var4, var6, var8, true); + this.field_82224_i[var1 - 1] = 0; + } + } + + var12 = this.getWatchedTargetId(var1); + if(var12 > 0) { + Entity var14 = this.worldObj.getEntityByID(var12); + if(var14 != null && var14.isEntityAlive() && this.getDistanceSqToEntity(var14) <= 900.0D && this.canEntityBeSeen(var14)) { + this.func_82216_a(var1 + 1, (EntityLiving)var14); + this.field_82223_h[var1 - 1] = this.ticksExisted + 40 + this.rand.nextInt(20); + this.field_82224_i[var1 - 1] = 0; + } else { + this.func_82211_c(var1, 0); + } + } else { + List var13 = this.worldObj.selectEntitiesWithinAABB(EntityLiving.class, this.boundingBox.expand(20.0D, 8.0D, 20.0D), attackEntitySelector); + + for(int var16 = 0; var16 < 10 && !var13.isEmpty(); ++var16) { + EntityLiving var5 = (EntityLiving)var13.get(this.rand.nextInt(var13.size())); + if(var5 != this && var5.isEntityAlive() && this.canEntityBeSeen(var5)) { + if(var5 instanceof EntityPlayer) { + if(!((EntityPlayer)var5).capabilities.disableDamage) { + this.func_82211_c(var1, var5.entityId); + } + } else { + this.func_82211_c(var1, var5.entityId); + } + break; + } + + var13.remove(var5); + } + } + } + } + + if(this.getAttackTarget() != null) { + this.func_82211_c(0, this.getAttackTarget().entityId); + } else { + this.func_82211_c(0, 0); + } + + if(this.field_82222_j > 0) { + --this.field_82222_j; + if(this.field_82222_j == 0 && this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing")) { + var1 = MathHelper.floor_double(this.posY); + var12 = MathHelper.floor_double(this.posX); + int var15 = MathHelper.floor_double(this.posZ); + boolean var17 = false; + + for(int var18 = -1; var18 <= 1; ++var18) { + for(int var19 = -1; var19 <= 1; ++var19) { + for(int var7 = 0; var7 <= 3; ++var7) { + int var20 = var12 + var18; + int var9 = var1 + var7; + int var10 = var15 + var19; + int var11 = this.worldObj.getBlockId(var20, var9, var10); + if(var11 > 0 && var11 != Block.bedrock.blockID && var11 != Block.endPortal.blockID && var11 != Block.endPortalFrame.blockID) { + var17 = this.worldObj.destroyBlock(var20, var9, var10, true) || var17; + } + } + } + } + + if(var17) { + this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1012, (int)this.posX, (int)this.posY, (int)this.posZ, 0); + } + } + } + + if(this.ticksExisted % 20 == 0) { + this.heal(1); + } + + } + } + + public void func_82206_m() { + this.func_82215_s(220); + this.setEntityHealth(this.getMaxHealth() / 3); + } + + public void setInWeb() { + } + + public int getTotalArmorValue() { + return 4; + } + + private double func_82214_u(int var1) { + if(var1 <= 0) { + return this.posX; + } else { + float var2 = (this.renderYawOffset + (float)(180 * (var1 - 1))) / 180.0F * (float)Math.PI; + float var3 = MathHelper.cos(var2); + return this.posX + (double)var3 * 1.3D; + } + } + + private double func_82208_v(int var1) { + return var1 <= 0 ? this.posY + 3.0D : this.posY + 2.2D; + } + + private double func_82213_w(int var1) { + if(var1 <= 0) { + return this.posZ; + } else { + float var2 = (this.renderYawOffset + (float)(180 * (var1 - 1))) / 180.0F * (float)Math.PI; + float var3 = MathHelper.sin(var2); + return this.posZ + (double)var3 * 1.3D; + } + } + + private float func_82204_b(float var1, float var2, float var3) { + float var4 = MathHelper.wrapAngleTo180_float(var2 - var1); + if(var4 > var3) { + var4 = var3; + } + + if(var4 < -var3) { + var4 = -var3; + } + + return var1 + var4; + } + + private void func_82216_a(int var1, EntityLiving var2) { + this.func_82209_a(var1, var2.posX, var2.posY + (double)var2.getEyeHeight() * 0.5D, var2.posZ, var1 == 0 && this.rand.nextFloat() < 0.001F); + } + + private void func_82209_a(int var1, double var2, double var4, double var6, boolean var8) { + this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1014, (int)this.posX, (int)this.posY, (int)this.posZ, 0); + double var9 = this.func_82214_u(var1); + double var11 = this.func_82208_v(var1); + double var13 = this.func_82213_w(var1); + double var15 = var2 - var9; + double var17 = var4 - var11; + double var19 = var6 - var13; + EntityWitherSkull var21 = new EntityWitherSkull(this.worldObj, this, var15, var17, var19); + if(var8) { + var21.setInvulnerable(true); + } + + var21.posY = var11; + var21.posX = var9; + var21.posZ = var13; + this.worldObj.spawnEntityInWorld(var21); + } + + public void attackEntityWithRangedAttack(EntityLiving var1, float var2) { + this.func_82216_a(0, var1); + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else if(var1 == DamageSource.drown) { + return false; + } else if(this.func_82212_n() > 0) { + return false; + } else { + Entity var3; + if(this.isArmored()) { + var3 = var1.getSourceOfDamage(); + if(var3 instanceof EntityArrow) { + return false; + } + } + + var3 = var1.getEntity(); + if(var3 != null && !(var3 instanceof EntityPlayer) && var3 instanceof EntityLiving && ((EntityLiving)var3).getCreatureAttribute() == this.getCreatureAttribute()) { + return false; + } else { + if(this.field_82222_j <= 0) { + this.field_82222_j = 20; + } + + for(int var4 = 0; var4 < this.field_82224_i.length; ++var4) { + this.field_82224_i[var4] += 3; + } + + return super.attackEntityFrom(var1, var2); + } + } + } + + protected void dropFewItems(boolean var1, int var2) { + this.dropItem(Item.netherStar.itemID, 1); + } + + protected void despawnEntity() { + this.entityAge = 0; + } + + public int getBrightnessForRender(float var1) { + return 15728880; + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public int getBossHealth() { + return this.dataWatcher.getWatchableObjectInt(16); + } + + protected void fall(float var1) { + } + + public void addPotionEffect(PotionEffect var1) { + } + + protected boolean isAIEnabled() { + return true; + } + + public int getMaxHealth() { + return 300; + } + + public float func_82207_a(int var1) { + return this.field_82221_e[var1]; + } + + public float func_82210_r(int var1) { + return this.field_82220_d[var1]; + } + + public int func_82212_n() { + return this.dataWatcher.getWatchableObjectInt(20); + } + + public void func_82215_s(int var1) { + this.dataWatcher.updateObject(20, Integer.valueOf(var1)); + } + + public int getWatchedTargetId(int var1) { + return this.dataWatcher.getWatchableObjectInt(17 + var1); + } + + public void func_82211_c(int var1, int var2) { + this.dataWatcher.updateObject(17 + var1, Integer.valueOf(var2)); + } + + public boolean isArmored() { + return this.getBossHealth() <= this.getMaxHealth() / 2; + } + + public EnumCreatureAttribute getCreatureAttribute() { + return EnumCreatureAttribute.UNDEAD; + } + + public void mountEntity(Entity var1) { + this.ridingEntity = null; + } +} diff --git a/src/net/minecraft/src/EntityWitherAttackFilter.java b/src/net/minecraft/src/EntityWitherAttackFilter.java new file mode 100644 index 0000000..04d7128 --- /dev/null +++ b/src/net/minecraft/src/EntityWitherAttackFilter.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +final class EntityWitherAttackFilter implements IEntitySelector { + public boolean isEntityApplicable(Entity var1) { + return var1 instanceof EntityLiving && ((EntityLiving)var1).getCreatureAttribute() != EnumCreatureAttribute.UNDEAD; + } +} diff --git a/src/net/minecraft/src/EntityWitherSkull.java b/src/net/minecraft/src/EntityWitherSkull.java new file mode 100644 index 0000000..076420d --- /dev/null +++ b/src/net/minecraft/src/EntityWitherSkull.java @@ -0,0 +1,88 @@ +package net.minecraft.src; + +public class EntityWitherSkull extends EntityFireball { + public EntityWitherSkull(World var1) { + super(var1); + this.setSize(5.0F / 16.0F, 5.0F / 16.0F); + } + + public EntityWitherSkull(World var1, EntityLiving var2, double var3, double var5, double var7) { + super(var1, var2, var3, var5, var7); + this.setSize(5.0F / 16.0F, 5.0F / 16.0F); + } + + protected float getMotionFactor() { + return this.isInvulnerable() ? 0.73F : super.getMotionFactor(); + } + + public EntityWitherSkull(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1, var2, var4, var6, var8, var10, var12); + this.setSize(5.0F / 16.0F, 5.0F / 16.0F); + } + + public boolean isBurning() { + return false; + } + + public float func_82146_a(Explosion var1, World var2, int var3, int var4, int var5, Block var6) { + float var7 = super.func_82146_a(var1, var2, var3, var4, var5, var6); + if(this.isInvulnerable() && var6 != Block.bedrock && var6 != Block.endPortal && var6 != Block.endPortalFrame) { + var7 = Math.min(0.8F, var7); + } + + return var7; + } + + protected void onImpact(MovingObjectPosition var1) { + if(!this.worldObj.isRemote) { + if(var1.entityHit != null) { + if(this.shootingEntity != null) { + if(var1.entityHit.attackEntityFrom(DamageSource.causeMobDamage(this.shootingEntity), 8) && !var1.entityHit.isEntityAlive()) { + this.shootingEntity.heal(5); + } + } else { + var1.entityHit.attackEntityFrom(DamageSource.magic, 5); + } + + if(var1.entityHit instanceof EntityLiving) { + byte var2 = 0; + if(this.worldObj.difficultySetting > 1) { + if(this.worldObj.difficultySetting == 2) { + var2 = 10; + } else if(this.worldObj.difficultySetting == 3) { + var2 = 40; + } + } + + if(var2 > 0) { + ((EntityLiving)var1.entityHit).addPotionEffect(new PotionEffect(Potion.wither.id, 20 * var2, 1)); + } + } + } + + this.worldObj.newExplosion(this, this.posX, this.posY, this.posZ, 1.0F, false, this.worldObj.getGameRules().getGameRuleBooleanValue("mobGriefing")); + this.setDead(); + } + + } + + public boolean canBeCollidedWith() { + return false; + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + return false; + } + + protected void entityInit() { + this.dataWatcher.addObject(10, Byte.valueOf((byte)0)); + } + + public boolean isInvulnerable() { + return this.dataWatcher.getWatchableObjectByte(10) == 1; + } + + public void setInvulnerable(boolean var1) { + this.dataWatcher.updateObject(10, Byte.valueOf((byte)(var1 ? 1 : 0))); + } +} diff --git a/src/net/minecraft/src/EntityWolf.java b/src/net/minecraft/src/EntityWolf.java new file mode 100644 index 0000000..a0c3fa5 --- /dev/null +++ b/src/net/minecraft/src/EntityWolf.java @@ -0,0 +1,367 @@ +package net.minecraft.src; + +public class EntityWolf extends EntityTameable { + private float field_70926_e; + private float field_70924_f; + private boolean isShaking; + private boolean field_70928_h; + private float timeWolfIsShaking; + private float prevTimeWolfIsShaking; + + public EntityWolf(World var1) { + super(var1); + this.texture = "/mob/wolf.png"; + this.setSize(0.6F, 0.8F); + this.moveSpeed = 0.3F; + this.getNavigator().setAvoidsWater(true); + this.tasks.addTask(1, new EntityAISwimming(this)); + this.tasks.addTask(2, this.aiSit); + this.tasks.addTask(3, new EntityAILeapAtTarget(this, 0.4F)); + this.tasks.addTask(4, new EntityAIAttackOnCollide(this, this.moveSpeed, true)); + this.tasks.addTask(5, new EntityAIFollowOwner(this, this.moveSpeed, 10.0F, 2.0F)); + this.tasks.addTask(6, new EntityAIMate(this, this.moveSpeed)); + this.tasks.addTask(7, new EntityAIWander(this, this.moveSpeed)); + this.tasks.addTask(8, new EntityAIBeg(this, 8.0F)); + this.tasks.addTask(9, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(9, 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)); + this.targetTasks.addTask(4, new EntityAITargetNonTamed(this, EntitySheep.class, 16.0F, 200, false)); + } + + public boolean isAIEnabled() { + return true; + } + + public void setAttackTarget(EntityLiving var1) { + super.setAttackTarget(var1); + if(var1 instanceof EntityPlayer) { + this.setAngry(true); + } + + } + + protected void updateAITick() { + this.dataWatcher.updateObject(18, Integer.valueOf(this.getHealth())); + } + + public int getMaxHealth() { + return this.isTamed() ? 20 : 8; + } + + protected void entityInit() { + super.entityInit(); + this.dataWatcher.addObject(18, new Integer(this.getHealth())); + this.dataWatcher.addObject(19, new Byte((byte)0)); + this.dataWatcher.addObject(20, new Byte((byte)BlockCloth.getBlockFromDye(1))); + } + + protected void playStepSound(int var1, int var2, int var3, int var4) { + this.playSound("mob.wolf.step", 0.15F, 1.0F); + } + + public String getTexture() { + return this.isTamed() ? "/mob/wolf_tame.png" : (this.isAngry() ? "/mob/wolf_angry.png" : super.getTexture()); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setBoolean("Angry", this.isAngry()); + var1.setByte("CollarColor", (byte)this.getCollarColor()); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.setAngry(var1.getBoolean("Angry")); + if(var1.hasKey("CollarColor")) { + this.setCollarColor(var1.getByte("CollarColor")); + } + + } + + protected boolean canDespawn() { + return this.isAngry() && !this.isTamed(); + } + + protected String getLivingSound() { + return this.isAngry() ? "mob.wolf.growl" : (this.rand.nextInt(3) == 0 ? (this.isTamed() && this.dataWatcher.getWatchableObjectInt(18) < 10 ? "mob.wolf.whine" : "mob.wolf.panting") : "mob.wolf.bark"); + } + + protected String getHurtSound() { + return "mob.wolf.hurt"; + } + + protected String getDeathSound() { + return "mob.wolf.death"; + } + + protected float getSoundVolume() { + return 0.4F; + } + + protected int getDropItemId() { + return -1; + } + + public void onLivingUpdate() { + super.onLivingUpdate(); + if(!this.worldObj.isRemote && this.isShaking && !this.field_70928_h && !this.hasPath() && this.onGround) { + this.field_70928_h = true; + this.timeWolfIsShaking = 0.0F; + this.prevTimeWolfIsShaking = 0.0F; + this.worldObj.setEntityState(this, (byte)8); + } + + } + + public void onUpdate() { + super.onUpdate(); + this.field_70924_f = this.field_70926_e; + if(this.func_70922_bv()) { + this.field_70926_e += (1.0F - this.field_70926_e) * 0.4F; + } else { + this.field_70926_e += (0.0F - this.field_70926_e) * 0.4F; + } + + if(this.func_70922_bv()) { + this.numTicksToChaseTarget = 10; + } + + if(this.isWet()) { + this.isShaking = true; + this.field_70928_h = false; + this.timeWolfIsShaking = 0.0F; + this.prevTimeWolfIsShaking = 0.0F; + } else if((this.isShaking || this.field_70928_h) && this.field_70928_h) { + if(this.timeWolfIsShaking == 0.0F) { + this.playSound("mob.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.isShaking = false; + this.field_70928_h = false; + this.prevTimeWolfIsShaking = 0.0F; + this.timeWolfIsShaking = 0.0F; + } + + if(this.timeWolfIsShaking > 0.4F) { + float var1 = (float)this.boundingBox.minY; + int var2 = (int)(MathHelper.sin((this.timeWolfIsShaking - 0.4F) * (float)Math.PI) * 7.0F); + + for(int var3 = 0; var3 < var2; ++var3) { + float var4 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width * 0.5F; + float var5 = (this.rand.nextFloat() * 2.0F - 1.0F) * this.width * 0.5F; + this.worldObj.spawnParticle("splash", this.posX + (double)var4, (double)(var1 + 0.8F), this.posZ + (double)var5, this.motionX, this.motionY, this.motionZ); + } + } + } + + } + + public boolean getWolfShaking() { + return this.isShaking; + } + + public float getShadingWhileShaking(float var1) { + return 12.0F / 16.0F + (this.prevTimeWolfIsShaking + (this.timeWolfIsShaking - this.prevTimeWolfIsShaking) * var1) / 2.0F * 0.25F; + } + + public float getShakeAngle(float var1, float var2) { + float var3 = (this.prevTimeWolfIsShaking + (this.timeWolfIsShaking - this.prevTimeWolfIsShaking) * var1 + var2) / 1.8F; + if(var3 < 0.0F) { + var3 = 0.0F; + } else if(var3 > 1.0F) { + var3 = 1.0F; + } + + return MathHelper.sin(var3 * (float)Math.PI) * MathHelper.sin(var3 * (float)Math.PI * 11.0F) * 0.15F * (float)Math.PI; + } + + public float getInterestedAngle(float var1) { + return (this.field_70924_f + (this.field_70926_e - this.field_70924_f) * var1) * 0.15F * (float)Math.PI; + } + + public float getEyeHeight() { + return this.height * 0.8F; + } + + public int getVerticalFaceSpeed() { + return this.isSitting() ? 20 : super.getVerticalFaceSpeed(); + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else { + Entity var3 = var1.getEntity(); + this.aiSit.setSitting(false); + if(var3 != null && !(var3 instanceof EntityPlayer) && !(var3 instanceof EntityArrow)) { + var2 = (var2 + 1) / 2; + } + + return super.attackEntityFrom(var1, var2); + } + } + + public boolean attackEntityAsMob(Entity var1) { + int var2 = this.isTamed() ? 4 : 2; + return var1.attackEntityFrom(DamageSource.causeMobDamage(this), var2); + } + + public boolean interact(EntityPlayer var1) { + ItemStack var2 = var1.inventory.getCurrentItem(); + if(this.isTamed()) { + if(var2 != null) { + if(Item.itemsList[var2.itemID] instanceof ItemFood) { + ItemFood var3 = (ItemFood)Item.itemsList[var2.itemID]; + if(var3.isWolfsFavoriteMeat() && this.dataWatcher.getWatchableObjectInt(18) < 20) { + if(!var1.capabilities.isCreativeMode) { + --var2.stackSize; + } + + this.heal(var3.getHealAmount()); + if(var2.stackSize <= 0) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, (ItemStack)null); + } + + return true; + } + } else if(var2.itemID == Item.dyePowder.itemID) { + int var4 = BlockCloth.getBlockFromDye(var2.getItemDamage()); + if(var4 != this.getCollarColor()) { + this.setCollarColor(var4); + if(!var1.capabilities.isCreativeMode && --var2.stackSize <= 0) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, (ItemStack)null); + } + + return true; + } + } + } + + if(var1.username.equalsIgnoreCase(this.getOwnerName()) && !this.worldObj.isRemote && !this.isBreedingItem(var2)) { + this.aiSit.setSitting(!this.isSitting()); + this.isJumping = false; + this.setPathToEntity((PathEntity)null); + } + } else if(var2 != null && var2.itemID == Item.bone.itemID && !this.isAngry()) { + if(!var1.capabilities.isCreativeMode) { + --var2.stackSize; + } + + if(var2.stackSize <= 0) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, (ItemStack)null); + } + + if(!this.worldObj.isRemote) { + if(this.rand.nextInt(3) == 0) { + this.setTamed(true); + this.setPathToEntity((PathEntity)null); + this.setAttackTarget((EntityLiving)null); + this.aiSit.setSitting(true); + this.setEntityHealth(20); + this.setOwner(var1.username); + this.playTameEffect(true); + this.worldObj.setEntityState(this, (byte)7); + } else { + this.playTameEffect(false); + this.worldObj.setEntityState(this, (byte)6); + } + } + + return true; + } + + return super.interact(var1); + } + + public void handleHealthUpdate(byte var1) { + if(var1 == 8) { + this.field_70928_h = true; + this.timeWolfIsShaking = 0.0F; + this.prevTimeWolfIsShaking = 0.0F; + } else { + super.handleHealthUpdate(var1); + } + + } + + public float getTailRotation() { + return this.isAngry() ? (float)Math.PI * 0.49F : (this.isTamed() ? (0.55F - (float)(20 - this.dataWatcher.getWatchableObjectInt(18)) * 0.02F) * (float)Math.PI : (float)Math.PI * 0.2F); + } + + public boolean isBreedingItem(ItemStack var1) { + return var1 == null ? false : (!(Item.itemsList[var1.itemID] instanceof ItemFood) ? false : ((ItemFood)Item.itemsList[var1.itemID]).isWolfsFavoriteMeat()); + } + + public int getMaxSpawnedInChunk() { + return 8; + } + + public boolean isAngry() { + return (this.dataWatcher.getWatchableObjectByte(16) & 2) != 0; + } + + public void setAngry(boolean var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(16); + if(var1) { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 | 2))); + } else { + this.dataWatcher.updateObject(16, Byte.valueOf((byte)(var2 & -3))); + } + + } + + public int getCollarColor() { + return this.dataWatcher.getWatchableObjectByte(20) & 15; + } + + public void setCollarColor(int var1) { + this.dataWatcher.updateObject(20, Byte.valueOf((byte)(var1 & 15))); + } + + public EntityWolf spawnBabyAnimal(EntityAgeable var1) { + EntityWolf var2 = new EntityWolf(this.worldObj); + String var3 = this.getOwnerName(); + if(var3 != null && var3.trim().length() > 0) { + var2.setOwner(var3); + var2.setTamed(true); + } + + return var2; + } + + public void func_70918_i(boolean var1) { + byte var2 = this.dataWatcher.getWatchableObjectByte(19); + if(var1) { + this.dataWatcher.updateObject(19, Byte.valueOf((byte)1)); + } else { + this.dataWatcher.updateObject(19, Byte.valueOf((byte)0)); + } + + } + + public boolean canMateWith(EntityAnimal var1) { + if(var1 == this) { + return false; + } else if(!this.isTamed()) { + return false; + } else if(!(var1 instanceof EntityWolf)) { + return false; + } else { + EntityWolf var2 = (EntityWolf)var1; + return !var2.isTamed() ? false : (var2.isSitting() ? false : this.isInLove() && var2.isInLove()); + } + } + + public boolean func_70922_bv() { + return this.dataWatcher.getWatchableObjectByte(19) == 1; + } + + public EntityAgeable createChild(EntityAgeable var1) { + return this.spawnBabyAnimal(var1); + } +} diff --git a/src/net/minecraft/src/EntityXPOrb.java b/src/net/minecraft/src/EntityXPOrb.java new file mode 100644 index 0000000..3ddc2af --- /dev/null +++ b/src/net/minecraft/src/EntityXPOrb.java @@ -0,0 +1,186 @@ +package net.minecraft.src; + +public class EntityXPOrb extends Entity { + public int xpColor; + public int xpOrbAge = 0; + public int field_70532_c; + private int xpOrbHealth = 5; + private int xpValue; + private EntityPlayer closestPlayer; + private int xpTargetColor; + + public EntityXPOrb(World var1, double var2, double var4, double var6, int var8) { + super(var1); + this.setSize(0.5F, 0.5F); + this.yOffset = this.height / 2.0F; + this.setPosition(var2, var4, var6); + this.rotationYaw = (float)(Math.random() * 360.0D); + this.motionX = (double)((float)(Math.random() * (double)0.2F - (double)0.1F) * 2.0F); + this.motionY = (double)((float)(Math.random() * 0.2D) * 2.0F); + this.motionZ = (double)((float)(Math.random() * (double)0.2F - (double)0.1F) * 2.0F); + this.xpValue = var8; + } + + protected boolean canTriggerWalking() { + return false; + } + + public EntityXPOrb(World var1) { + super(var1); + this.setSize(0.25F, 0.25F); + this.yOffset = this.height / 2.0F; + } + + protected void entityInit() { + } + + public int getBrightnessForRender(float var1) { + float var2 = 0.5F; + if(var2 < 0.0F) { + var2 = 0.0F; + } + + if(var2 > 1.0F) { + var2 = 1.0F; + } + + int var3 = super.getBrightnessForRender(var1); + int var4 = var3 & 255; + int var5 = var3 >> 16 & 255; + var4 += (int)(var2 * 15.0F * 16.0F); + if(var4 > 240) { + var4 = 240; + } + + return var4 | var5 << 16; + } + + public void onUpdate() { + super.onUpdate(); + if(this.field_70532_c > 0) { + --this.field_70532_c; + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.motionY -= (double)0.03F; + if(this.worldObj.getBlockMaterial(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)) == Material.lava) { + this.motionY = (double)0.2F; + this.motionX = (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); + this.motionZ = (double)((this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F); + this.playSound("random.fizz", 0.4F, 2.0F + this.rand.nextFloat() * 0.4F); + } + + this.pushOutOfBlocks(this.posX, (this.boundingBox.minY + this.boundingBox.maxY) / 2.0D, this.posZ); + double var1 = 8.0D; + if(this.xpTargetColor < this.xpColor - 20 + this.entityId % 100) { + if(this.closestPlayer == null || this.closestPlayer.getDistanceSqToEntity(this) > var1 * var1) { + this.closestPlayer = this.worldObj.getClosestPlayerToEntity(this, var1); + } + + this.xpTargetColor = this.xpColor; + } + + if(this.closestPlayer != null) { + double var3 = (this.closestPlayer.posX - this.posX) / var1; + double var5 = (this.closestPlayer.posY + (double)this.closestPlayer.getEyeHeight() - this.posY) / var1; + double var7 = (this.closestPlayer.posZ - this.posZ) / var1; + double var9 = Math.sqrt(var3 * var3 + var5 * var5 + var7 * var7); + double var11 = 1.0D - var9; + if(var11 > 0.0D) { + var11 *= var11; + this.motionX += var3 / var9 * var11 * 0.1D; + this.motionY += var5 / var9 * var11 * 0.1D; + this.motionZ += var7 / var9 * var11 * 0.1D; + } + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + float var13 = 0.98F; + if(this.onGround) { + var13 = 0.1F * 0.1F * 58.8F; + int var4 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ)); + if(var4 > 0) { + var13 = Block.blocksList[var4].slipperiness * 0.98F; + } + } + + this.motionX *= (double)var13; + this.motionY *= (double)0.98F; + this.motionZ *= (double)var13; + if(this.onGround) { + this.motionY *= (double)-0.9F; + } + + ++this.xpColor; + ++this.xpOrbAge; + if(this.xpOrbAge >= 6000) { + this.setDead(); + } + + } + + public boolean handleWaterMovement() { + return this.worldObj.handleMaterialAcceleration(this.boundingBox, Material.water, this); + } + + protected void dealFireDamage(int var1) { + this.attackEntityFrom(DamageSource.inFire, var1); + } + + public boolean attackEntityFrom(DamageSource var1, int var2) { + if(this.isEntityInvulnerable()) { + return false; + } else { + this.setBeenAttacked(); + this.xpOrbHealth -= var2; + if(this.xpOrbHealth <= 0) { + this.setDead(); + } + + return false; + } + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("Health", (short)((byte)this.xpOrbHealth)); + var1.setShort("Age", (short)this.xpOrbAge); + var1.setShort("Value", (short)this.xpValue); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.xpOrbHealth = var1.getShort("Health") & 255; + this.xpOrbAge = var1.getShort("Age"); + this.xpValue = var1.getShort("Value"); + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(!this.worldObj.isRemote) { + if(this.field_70532_c == 0 && var1.xpCooldown == 0) { + var1.xpCooldown = 2; + this.playSound("random.orb", 0.1F, 0.5F * ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.8F)); + var1.onItemPickup(this, 1); + var1.addExperience(this.xpValue); + this.setDead(); + } + + } + } + + public int getXpValue() { + return this.xpValue; + } + + public int getTextureByXP() { + return this.xpValue >= 2477 ? 10 : (this.xpValue >= 1237 ? 9 : (this.xpValue >= 617 ? 8 : (this.xpValue >= 307 ? 7 : (this.xpValue >= 149 ? 6 : (this.xpValue >= 73 ? 5 : (this.xpValue >= 37 ? 4 : (this.xpValue >= 17 ? 3 : (this.xpValue >= 7 ? 2 : (this.xpValue >= 3 ? 1 : 0))))))))); + } + + public static int getXPSplit(int var0) { + return var0 >= 2477 ? 2477 : (var0 >= 1237 ? 1237 : (var0 >= 617 ? 617 : (var0 >= 307 ? 307 : (var0 >= 149 ? 149 : (var0 >= 73 ? 73 : (var0 >= 37 ? 37 : (var0 >= 17 ? 17 : (var0 >= 7 ? 7 : (var0 >= 3 ? 3 : 1))))))))); + } + + public boolean canAttackWithItem() { + return false; + } +} diff --git a/src/net/minecraft/src/EntityZombie.java b/src/net/minecraft/src/EntityZombie.java new file mode 100644 index 0000000..940f946 --- /dev/null +++ b/src/net/minecraft/src/EntityZombie.java @@ -0,0 +1,338 @@ +package net.minecraft.src; + +import java.util.Calendar; + +public class EntityZombie extends EntityMob { + private int conversionTime = 0; + + public EntityZombie(World var1) { + super(var1); + this.texture = "/mob/zombie.png"; + this.moveSpeed = 0.23F; + this.getNavigator().setBreakDoors(true); + this.tasks.addTask(0, new EntityAISwimming(this)); + this.tasks.addTask(1, new EntityAIBreakDoor(this)); + this.tasks.addTask(2, new EntityAIAttackOnCollide(this, EntityPlayer.class, this.moveSpeed, false)); + this.tasks.addTask(3, new EntityAIAttackOnCollide(this, EntityVillager.class, this.moveSpeed, true)); + this.tasks.addTask(4, new EntityAIMoveTwardsRestriction(this, this.moveSpeed)); + this.tasks.addTask(5, new EntityAIMoveThroughVillage(this, this.moveSpeed, false)); + this.tasks.addTask(6, new EntityAIWander(this, this.moveSpeed)); + this.tasks.addTask(7, new EntityAIWatchClosest(this, EntityPlayer.class, 8.0F)); + this.tasks.addTask(7, new EntityAILookIdle(this)); + this.targetTasks.addTask(1, new EntityAIHurtByTarget(this, true)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityPlayer.class, 16.0F, 0, true)); + this.targetTasks.addTask(2, new EntityAINearestAttackableTarget(this, EntityVillager.class, 16.0F, 0, false)); + } + + protected int func_96121_ay() { + return 40; + } + + public float getSpeedModifier() { + return super.getSpeedModifier() * (this.isChild() ? 1.5F : 1.0F); + } + + protected void entityInit() { + super.entityInit(); + this.getDataWatcher().addObject(12, Byte.valueOf((byte)0)); + this.getDataWatcher().addObject(13, Byte.valueOf((byte)0)); + this.getDataWatcher().addObject(14, Byte.valueOf((byte)0)); + } + + public String getTexture() { + return this.isVillager() ? "/mob/zombie_villager.png" : "/mob/zombie.png"; + } + + public int getMaxHealth() { + return 20; + } + + public int getTotalArmorValue() { + int var1 = super.getTotalArmorValue() + 2; + if(var1 > 20) { + var1 = 20; + } + + return var1; + } + + protected boolean isAIEnabled() { + return true; + } + + public boolean isChild() { + return this.getDataWatcher().getWatchableObjectByte(12) == 1; + } + + public void setChild(boolean var1) { + this.getDataWatcher().updateObject(12, Byte.valueOf((byte)1)); + } + + public boolean isVillager() { + return this.getDataWatcher().getWatchableObjectByte(13) == 1; + } + + public void setVillager(boolean var1) { + this.getDataWatcher().updateObject(13, Byte.valueOf((byte)(var1 ? 1 : 0))); + } + + public void onLivingUpdate() { + if(this.worldObj.isDaytime() && !this.worldObj.isRemote && !this.isChild()) { + float var1 = this.getBrightness(1.0F); + if(var1 > 0.5F && this.rand.nextFloat() * 30.0F < (var1 - 0.4F) * 2.0F && this.worldObj.canBlockSeeTheSky(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ))) { + boolean var2 = true; + ItemStack var3 = this.getCurrentItemOrArmor(4); + if(var3 != null) { + if(var3.isItemStackDamageable()) { + var3.setItemDamage(var3.getItemDamageForDisplay() + this.rand.nextInt(2)); + if(var3.getItemDamageForDisplay() >= var3.getMaxDamage()) { + this.renderBrokenItemStack(var3); + this.setCurrentItemOrArmor(4, (ItemStack)null); + } + } + + var2 = false; + } + + if(var2) { + this.setFire(8); + } + } + } + + super.onLivingUpdate(); + } + + public void onUpdate() { + if(!this.worldObj.isRemote && this.isConverting()) { + int var1 = this.getConversionTimeBoost(); + this.conversionTime -= var1; + if(this.conversionTime <= 0) { + this.convertToVillager(); + } + } + + super.onUpdate(); + } + + public boolean attackEntityAsMob(Entity var1) { + boolean var2 = super.attackEntityAsMob(var1); + if(var2 && this.getHeldItem() == null && this.isBurning() && this.rand.nextFloat() < (float)this.worldObj.difficultySetting * 0.3F) { + var1.setFire(2 * this.worldObj.difficultySetting); + } + + return var2; + } + + public int getAttackStrength(Entity var1) { + ItemStack var2 = this.getHeldItem(); + float var3 = (float)(this.getMaxHealth() - this.getHealth()) / (float)this.getMaxHealth(); + int var4 = 3 + MathHelper.floor_float(var3 * 4.0F); + if(var2 != null) { + var4 += var2.getDamageVsEntity(this); + } + + return var4; + } + + protected String getLivingSound() { + return "mob.zombie.say"; + } + + protected String getHurtSound() { + return "mob.zombie.hurt"; + } + + protected String getDeathSound() { + return "mob.zombie.death"; + } + + protected void playStepSound(int var1, int var2, int var3, int var4) { + this.playSound("mob.zombie.step", 0.15F, 1.0F); + } + + protected int getDropItemId() { + return Item.rottenFlesh.itemID; + } + + public EnumCreatureAttribute getCreatureAttribute() { + return EnumCreatureAttribute.UNDEAD; + } + + protected void dropRareDrop(int var1) { + switch(this.rand.nextInt(3)) { + case 0: + this.dropItem(Item.ingotIron.itemID, 1); + break; + case 1: + this.dropItem(Item.carrot.itemID, 1); + break; + case 2: + this.dropItem(Item.potato.itemID, 1); + } + + } + + protected void addRandomArmor() { + super.addRandomArmor(); + if(this.rand.nextFloat() < (this.worldObj.difficultySetting == 3 ? 0.05F : 0.01F)) { + int var1 = this.rand.nextInt(3); + if(var1 == 0) { + this.setCurrentItemOrArmor(0, new ItemStack(Item.swordIron)); + } else { + this.setCurrentItemOrArmor(0, new ItemStack(Item.shovelIron)); + } + } + + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + if(this.isChild()) { + var1.setBoolean("IsBaby", true); + } + + if(this.isVillager()) { + var1.setBoolean("IsVillager", true); + } + + var1.setInteger("ConversionTime", this.isConverting() ? this.conversionTime : -1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + if(var1.getBoolean("IsBaby")) { + this.setChild(true); + } + + if(var1.getBoolean("IsVillager")) { + this.setVillager(true); + } + + if(var1.hasKey("ConversionTime") && var1.getInteger("ConversionTime") > -1) { + this.startConversion(var1.getInteger("ConversionTime")); + } + + } + + public void onKillEntity(EntityLiving var1) { + super.onKillEntity(var1); + if(this.worldObj.difficultySetting >= 2 && var1 instanceof EntityVillager) { + if(this.worldObj.difficultySetting == 2 && this.rand.nextBoolean()) { + return; + } + + EntityZombie var2 = new EntityZombie(this.worldObj); + var2.func_82149_j(var1); + this.worldObj.removeEntity(var1); + var2.initCreature(); + var2.setVillager(true); + if(var1.isChild()) { + var2.setChild(true); + } + + this.worldObj.spawnEntityInWorld(var2); + this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1016, (int)this.posX, (int)this.posY, (int)this.posZ, 0); + } + + } + + public void initCreature() { + this.setCanPickUpLoot(this.rand.nextFloat() < pickUpLootProability[this.worldObj.difficultySetting]); + if(this.worldObj.rand.nextFloat() < 0.05F) { + this.setVillager(true); + } + + this.addRandomArmor(); + this.func_82162_bC(); + if(this.getCurrentItemOrArmor(4) == null) { + Calendar var1 = this.worldObj.getCurrentDate(); + if(var1.get(2) + 1 == 10 && var1.get(5) == 31 && this.rand.nextFloat() < 0.25F) { + this.setCurrentItemOrArmor(4, new ItemStack(this.rand.nextFloat() < 0.1F ? Block.pumpkinLantern : Block.pumpkin)); + this.equipmentDropChances[4] = 0.0F; + } + } + + } + + public boolean interact(EntityPlayer var1) { + ItemStack var2 = var1.getCurrentEquippedItem(); + if(var2 != null && var2.getItem() == Item.appleGold && var2.getItemDamage() == 0 && this.isVillager() && this.isPotionActive(Potion.weakness)) { + if(!var1.capabilities.isCreativeMode) { + --var2.stackSize; + } + + if(var2.stackSize <= 0) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, (ItemStack)null); + } + + if(!this.worldObj.isRemote) { + this.startConversion(this.rand.nextInt(2401) + 3600); + } + + return true; + } else { + return false; + } + } + + protected void startConversion(int var1) { + this.conversionTime = var1; + this.getDataWatcher().updateObject(14, Byte.valueOf((byte)1)); + this.removePotionEffect(Potion.weakness.id); + this.addPotionEffect(new PotionEffect(Potion.damageBoost.id, var1, Math.min(this.worldObj.difficultySetting - 1, 0))); + this.worldObj.setEntityState(this, (byte)16); + } + + public void handleHealthUpdate(byte var1) { + if(var1 == 16) { + this.worldObj.playSound(this.posX + 0.5D, this.posY + 0.5D, this.posZ + 0.5D, "mob.zombie.remedy", 1.0F + this.rand.nextFloat(), this.rand.nextFloat() * 0.7F + 0.3F, false); + } else { + super.handleHealthUpdate(var1); + } + + } + + public boolean isConverting() { + return this.getDataWatcher().getWatchableObjectByte(14) == 1; + } + + protected void convertToVillager() { + EntityVillager var1 = new EntityVillager(this.worldObj); + var1.func_82149_j(this); + var1.initCreature(); + var1.func_82187_q(); + if(this.isChild()) { + var1.setGrowingAge(-24000); + } + + this.worldObj.removeEntity(this); + this.worldObj.spawnEntityInWorld(var1); + var1.addPotionEffect(new PotionEffect(Potion.confusion.id, 200, 0)); + this.worldObj.playAuxSFXAtEntity((EntityPlayer)null, 1017, (int)this.posX, (int)this.posY, (int)this.posZ, 0); + } + + protected int getConversionTimeBoost() { + int var1 = 1; + if(this.rand.nextFloat() < 0.01F) { + int var2 = 0; + + for(int var3 = (int)this.posX - 4; var3 < (int)this.posX + 4 && var2 < 14; ++var3) { + for(int var4 = (int)this.posY - 4; var4 < (int)this.posY + 4 && var2 < 14; ++var4) { + for(int var5 = (int)this.posZ - 4; var5 < (int)this.posZ + 4 && var2 < 14; ++var5) { + int var6 = this.worldObj.getBlockId(var3, var4, var5); + if(var6 == Block.fenceIron.blockID || var6 == Block.bed.blockID) { + if(this.rand.nextFloat() < 0.3F) { + ++var1; + } + + ++var2; + } + } + } + } + } + + return var1; + } +} diff --git a/src/net/minecraft/src/EnumAction.java b/src/net/minecraft/src/EnumAction.java new file mode 100644 index 0000000..a16870e --- /dev/null +++ b/src/net/minecraft/src/EnumAction.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public enum EnumAction { + none, + eat, + drink, + block, + bow; +} diff --git a/src/net/minecraft/src/EnumArmorMaterial.java b/src/net/minecraft/src/EnumArmorMaterial.java new file mode 100644 index 0000000..81aa487 --- /dev/null +++ b/src/net/minecraft/src/EnumArmorMaterial.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +public enum EnumArmorMaterial { + CLOTH(5, new int[]{1, 3, 2, 1}, 15), + CHAIN(15, new int[]{2, 5, 4, 1}, 12), + IRON(15, new int[]{2, 6, 5, 2}, 9), + GOLD(7, new int[]{2, 5, 3, 1}, 25), + DIAMOND(33, new int[]{3, 8, 6, 3}, 10); + + private int maxDamageFactor; + private int[] damageReductionAmountArray; + private int enchantability; + + private EnumArmorMaterial(int var3, int[] var4, int var5) { + this.maxDamageFactor = var3; + this.damageReductionAmountArray = var4; + this.enchantability = var5; + } + + public int getDurability(int var1) { + return ItemArmor.getMaxDamageArray()[var1] * this.maxDamageFactor; + } + + public int getDamageReductionAmount(int var1) { + return this.damageReductionAmountArray[var1]; + } + + public int getEnchantability() { + return this.enchantability; + } + + public int getArmorCraftingMaterial() { + return this == CLOTH ? Item.leather.itemID : (this == CHAIN ? Item.ingotIron.itemID : (this == GOLD ? Item.ingotGold.itemID : (this == IRON ? Item.ingotIron.itemID : (this == DIAMOND ? Item.diamond.itemID : 0)))); + } +} diff --git a/src/net/minecraft/src/EnumArt.java b/src/net/minecraft/src/EnumArt.java new file mode 100644 index 0000000..6d8e186 --- /dev/null +++ b/src/net/minecraft/src/EnumArt.java @@ -0,0 +1,45 @@ +package net.minecraft.src; + +public enum EnumArt { + Kebab("Kebab", 16, 16, 0, 0), + Aztec("Aztec", 16, 16, 16, 0), + Alban("Alban", 16, 16, 32, 0), + Aztec2("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), + SkullAndRoses("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), + BurningSkull("BurningSkull", 64, 64, 128, 192), + Skeleton("Skeleton", 64, 48, 192, 64), + DonkeyKong("DonkeyKong", 64, 48, 192, 112); + + public static final int maxArtTitleLength = "SkullAndRoses".length(); + public final String title; + public final int sizeX; + public final int sizeY; + public final int offsetX; + public final int offsetY; + + private EnumArt(String var3, int var4, int var5, int var6, int var7) { + this.title = var3; + this.sizeX = var4; + this.sizeY = var5; + this.offsetX = var6; + this.offsetY = var7; + } +} diff --git a/src/net/minecraft/src/EnumChatFormatting.java b/src/net/minecraft/src/EnumChatFormatting.java new file mode 100644 index 0000000..5cde755 --- /dev/null +++ b/src/net/minecraft/src/EnumChatFormatting.java @@ -0,0 +1,100 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; +import java.util.regex.Pattern; + +public enum EnumChatFormatting { + BLACK('0'), + DARK_BLUE('1'), + DARK_GREEN('2'), + DARK_AQUA('3'), + DARK_RED('4'), + DARK_PURPLE('5'), + GOLD('6'), + GRAY('7'), + DARK_GRAY('8'), + BLUE('9'), + GREEN('a'), + AQUA('b'), + RED('c'), + LIGHT_PURPLE('d'), + YELLOW('e'), + WHITE('f'), + OBFUSCATED('k', true), + BOLD('l', true), + STRIKETHROUGH('m', true), + UNDERLINE('n', true), + ITALIC('o', true), + RESET('r'); + + private static final Map field_96321_w = new HashMap(); + private static final Map field_96331_x = new HashMap(); + private static final Pattern field_96330_y = Pattern.compile("(?i)" + String.valueOf('\u00a7') + "[0-9A-FK-OR]"); + private final char field_96329_z; + private final boolean field_96303_A; + private final String field_96304_B; + + private EnumChatFormatting(char var3) { + this(var3, false); + } + + private EnumChatFormatting(char var3, boolean var4) { + this.field_96329_z = var3; + this.field_96303_A = var4; + this.field_96304_B = "\u00a7" + var3; + } + + public char func_96298_a() { + return this.field_96329_z; + } + + public boolean func_96301_b() { + return this.field_96303_A; + } + + public boolean func_96302_c() { + return !this.field_96303_A && this != RESET; + } + + public String func_96297_d() { + return this.name().toLowerCase(); + } + + public String toString() { + return this.field_96304_B; + } + + public static EnumChatFormatting func_96300_b(String var0) { + return var0 == null ? null : (EnumChatFormatting)field_96331_x.get(var0.toLowerCase()); + } + + public static Collection func_96296_a(boolean var0, boolean var1) { + ArrayList var2 = new ArrayList(); + EnumChatFormatting[] var3 = values(); + int var4 = var3.length; + + for(int var5 = 0; var5 < var4; ++var5) { + EnumChatFormatting var6 = var3[var5]; + if((!var6.func_96302_c() || var0) && (!var6.func_96301_b() || var1)) { + var2.add(var6.func_96297_d()); + } + } + + return var2; + } + + static { + EnumChatFormatting[] var0 = values(); + int var1 = var0.length; + + for(int var2 = 0; var2 < var1; ++var2) { + EnumChatFormatting var3 = var0[var2]; + field_96321_w.put(Character.valueOf(var3.func_96298_a()), var3); + field_96331_x.put(var3.func_96297_d(), var3); + } + + } +} diff --git a/src/net/minecraft/src/EnumCreatureAttribute.java b/src/net/minecraft/src/EnumCreatureAttribute.java new file mode 100644 index 0000000..133f4ce --- /dev/null +++ b/src/net/minecraft/src/EnumCreatureAttribute.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public enum EnumCreatureAttribute { + UNDEFINED, + UNDEAD, + ARTHROPOD; +} diff --git a/src/net/minecraft/src/EnumCreatureType.java b/src/net/minecraft/src/EnumCreatureType.java new file mode 100644 index 0000000..3163266 --- /dev/null +++ b/src/net/minecraft/src/EnumCreatureType.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +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), + waterCreature(EntityWaterMob.class, 5, Material.water, true, false); + + private final Class creatureClass; + private final int maxNumberOfCreature; + private final Material creatureMaterial; + private final boolean isPeacefulCreature; + private final boolean isAnimal; + + private EnumCreatureType(Class var3, int var4, Material var5, boolean var6, boolean var7) { + this.creatureClass = var3; + this.maxNumberOfCreature = var4; + this.creatureMaterial = var5; + this.isPeacefulCreature = var6; + this.isAnimal = var7; + } + + public Class getCreatureClass() { + return this.creatureClass; + } + + public int getMaxNumberOfCreature() { + return this.maxNumberOfCreature; + } + + public Material getCreatureMaterial() { + return this.creatureMaterial; + } + + public boolean getPeacefulCreature() { + return this.isPeacefulCreature; + } + + public boolean getAnimal() { + return this.isAnimal; + } +} diff --git a/src/net/minecraft/src/EnumDoor.java b/src/net/minecraft/src/EnumDoor.java new file mode 100644 index 0000000..87b8e0e --- /dev/null +++ b/src/net/minecraft/src/EnumDoor.java @@ -0,0 +1,8 @@ +package net.minecraft.src; + +public enum EnumDoor { + OPENING, + WOOD_DOOR, + GRATES, + IRON_DOOR; +} diff --git a/src/net/minecraft/src/EnumDoorHelper.java b/src/net/minecraft/src/EnumDoorHelper.java new file mode 100644 index 0000000..8c60b4c --- /dev/null +++ b/src/net/minecraft/src/EnumDoorHelper.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +class EnumDoorHelper { + static final int[] doorEnum = new int[EnumDoor.values().length]; + + static { + try { + doorEnum[EnumDoor.OPENING.ordinal()] = 1; + } catch (NoSuchFieldError var4) { + } + + try { + doorEnum[EnumDoor.WOOD_DOOR.ordinal()] = 2; + } catch (NoSuchFieldError var3) { + } + + try { + doorEnum[EnumDoor.GRATES.ordinal()] = 3; + } catch (NoSuchFieldError var2) { + } + + try { + doorEnum[EnumDoor.IRON_DOOR.ordinal()] = 4; + } catch (NoSuchFieldError var1) { + } + + } +} diff --git a/src/net/minecraft/src/EnumEnchantmentType.java b/src/net/minecraft/src/EnumEnchantmentType.java new file mode 100644 index 0000000..727567d --- /dev/null +++ b/src/net/minecraft/src/EnumEnchantmentType.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +public enum EnumEnchantmentType { + all, + armor, + armor_feet, + armor_legs, + armor_torso, + armor_head, + weapon, + digger, + bow; + + public boolean canEnchantItem(Item var1) { + if(this == all) { + return true; + } else if(var1 instanceof ItemArmor) { + if(this == armor) { + return true; + } else { + ItemArmor var2 = (ItemArmor)var1; + return var2.armorType == 0 ? this == armor_head : (var2.armorType == 2 ? this == armor_legs : (var2.armorType == 1 ? this == armor_torso : (var2.armorType == 3 ? this == armor_feet : false))); + } + } else { + return var1 instanceof ItemSword ? this == weapon : (var1 instanceof ItemTool ? this == digger : (var1 instanceof ItemBow ? this == bow : false)); + } + } +} diff --git a/src/net/minecraft/src/EnumEntitySize.java b/src/net/minecraft/src/EnumEntitySize.java new file mode 100644 index 0000000..8f0f2c7 --- /dev/null +++ b/src/net/minecraft/src/EnumEntitySize.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +public enum EnumEntitySize { + SIZE_1, + SIZE_2, + SIZE_3, + SIZE_4, + SIZE_5, + SIZE_6; + + public int multiplyBy32AndRound(double var1) { + double var3 = var1 - ((double)MathHelper.floor_double(var1) + 0.5D); + switch(EnumEntitySizeHelper.field_96565_a[this.ordinal()]) { + case 1: + if(var3 < 0.0D) { + if(var3 < -0.3125D) { + return MathHelper.ceiling_double_int(var1 * 32.0D); + } + } else if(var3 < 0.3125D) { + return MathHelper.ceiling_double_int(var1 * 32.0D); + } + + return MathHelper.floor_double(var1 * 32.0D); + case 2: + if(var3 < 0.0D) { + if(var3 < -0.3125D) { + return MathHelper.floor_double(var1 * 32.0D); + } + } else if(var3 < 0.3125D) { + return MathHelper.floor_double(var1 * 32.0D); + } + + return MathHelper.ceiling_double_int(var1 * 32.0D); + case 3: + if(var3 > 0.0D) { + return MathHelper.floor_double(var1 * 32.0D); + } + + return MathHelper.ceiling_double_int(var1 * 32.0D); + case 4: + if(var3 < 0.0D) { + if(var3 < -0.1875D) { + return MathHelper.ceiling_double_int(var1 * 32.0D); + } + } else if(var3 < 0.1875D) { + return MathHelper.ceiling_double_int(var1 * 32.0D); + } + + return MathHelper.floor_double(var1 * 32.0D); + case 5: + if(var3 < 0.0D) { + if(var3 < -0.1875D) { + return MathHelper.floor_double(var1 * 32.0D); + } + } else if(var3 < 0.1875D) { + return MathHelper.floor_double(var1 * 32.0D); + } + + return MathHelper.ceiling_double_int(var1 * 32.0D); + case 6: + default: + if(var3 > 0.0D) { + return MathHelper.ceiling_double_int(var1 * 32.0D); + } else { + return MathHelper.floor_double(var1 * 32.0D); + } + } + } +} diff --git a/src/net/minecraft/src/EnumEntitySizeHelper.java b/src/net/minecraft/src/EnumEntitySizeHelper.java new file mode 100644 index 0000000..a1ce2a2 --- /dev/null +++ b/src/net/minecraft/src/EnumEntitySizeHelper.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +class EnumEntitySizeHelper { + static final int[] field_96565_a = new int[EnumEntitySize.values().length]; + + static { + try { + field_96565_a[EnumEntitySize.SIZE_1.ordinal()] = 1; + } catch (NoSuchFieldError var6) { + } + + try { + field_96565_a[EnumEntitySize.SIZE_2.ordinal()] = 2; + } catch (NoSuchFieldError var5) { + } + + try { + field_96565_a[EnumEntitySize.SIZE_3.ordinal()] = 3; + } catch (NoSuchFieldError var4) { + } + + try { + field_96565_a[EnumEntitySize.SIZE_4.ordinal()] = 4; + } catch (NoSuchFieldError var3) { + } + + try { + field_96565_a[EnumEntitySize.SIZE_5.ordinal()] = 5; + } catch (NoSuchFieldError var2) { + } + + try { + field_96565_a[EnumEntitySize.SIZE_6.ordinal()] = 6; + } catch (NoSuchFieldError var1) { + } + + } +} diff --git a/src/net/minecraft/src/EnumFacing.java b/src/net/minecraft/src/EnumFacing.java new file mode 100644 index 0000000..3583a59 --- /dev/null +++ b/src/net/minecraft/src/EnumFacing.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +public enum EnumFacing { + DOWN(0, 1, 0, -1, 0), + UP(1, 0, 0, 1, 0), + NORTH(2, 3, 0, 0, -1), + SOUTH(3, 2, 0, 0, 1), + EAST(4, 5, -1, 0, 0), + WEST(5, 4, 1, 0, 0); + + private final int order_a; + private final int order_b; + private final int frontOffsetX; + private final int frontOffsetY; + private final int frontOffsetZ; + private static final EnumFacing[] faceList = new EnumFacing[6]; + + private EnumFacing(int var3, int var4, int var5, int var6, int var7) { + this.order_a = var3; + this.order_b = var4; + this.frontOffsetX = var5; + this.frontOffsetY = var6; + this.frontOffsetZ = var7; + } + + public int getFrontOffsetX() { + return this.frontOffsetX; + } + + public int getFrontOffsetY() { + return this.frontOffsetY; + } + + public int getFrontOffsetZ() { + return this.frontOffsetZ; + } + + public static EnumFacing getFront(int var0) { + return faceList[var0 % faceList.length]; + } + + static { + EnumFacing[] var0 = values(); + int var1 = var0.length; + + for(int var2 = 0; var2 < var1; ++var2) { + EnumFacing var3 = var0[var2]; + faceList[var3.order_a] = var3; + } + + } +} diff --git a/src/net/minecraft/src/EnumGameType.java b/src/net/minecraft/src/EnumGameType.java new file mode 100644 index 0000000..eeade70 --- /dev/null +++ b/src/net/minecraft/src/EnumGameType.java @@ -0,0 +1,79 @@ +package net.minecraft.src; + +public enum EnumGameType { + NOT_SET(-1, ""), + SURVIVAL(0, "survival"), + CREATIVE(1, "creative"), + ADVENTURE(2, "adventure"); + + int id; + String name; + + private EnumGameType(int var3, String var4) { + this.id = var3; + this.name = var4; + } + + public int getID() { + return this.id; + } + + public String getName() { + return this.name; + } + + public void configurePlayerCapabilities(PlayerCapabilities var1) { + if(this == CREATIVE) { + var1.allowFlying = true; + var1.isCreativeMode = true; + var1.disableDamage = true; + } else { + var1.allowFlying = false; + var1.isCreativeMode = false; + var1.disableDamage = false; + var1.isFlying = false; + } + + var1.allowEdit = !this.isAdventure(); + } + + public boolean isAdventure() { + return this == ADVENTURE; + } + + public boolean isCreative() { + return this == CREATIVE; + } + + public boolean isSurvivalOrAdventure() { + return this == SURVIVAL || this == ADVENTURE; + } + + public static EnumGameType getByID(int var0) { + EnumGameType[] var1 = values(); + int var2 = var1.length; + + for(int var3 = 0; var3 < var2; ++var3) { + EnumGameType var4 = var1[var3]; + if(var4.id == var0) { + return var4; + } + } + + return SURVIVAL; + } + + public static EnumGameType getByName(String var0) { + EnumGameType[] var1 = values(); + int var2 = var1.length; + + for(int var3 = 0; var3 < var2; ++var3) { + EnumGameType var4 = var1[var3]; + if(var4.name.equals(var0)) { + return var4; + } + } + + return SURVIVAL; + } +} diff --git a/src/net/minecraft/src/EnumMobType.java b/src/net/minecraft/src/EnumMobType.java new file mode 100644 index 0000000..a4a69b6 --- /dev/null +++ b/src/net/minecraft/src/EnumMobType.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public enum EnumMobType { + everything, + mobs, + players; +} diff --git a/src/net/minecraft/src/EnumMovingObjectType.java b/src/net/minecraft/src/EnumMovingObjectType.java new file mode 100644 index 0000000..ace74a2 --- /dev/null +++ b/src/net/minecraft/src/EnumMovingObjectType.java @@ -0,0 +1,6 @@ +package net.minecraft.src; + +public enum EnumMovingObjectType { + TILE, + ENTITY; +} diff --git a/src/net/minecraft/src/EnumOS.java b/src/net/minecraft/src/EnumOS.java new file mode 100644 index 0000000..4954b9c --- /dev/null +++ b/src/net/minecraft/src/EnumOS.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public enum EnumOS { + LINUX, + SOLARIS, + WINDOWS, + MACOS, + UNKNOWN; +} diff --git a/src/net/minecraft/src/EnumOSHelper.java b/src/net/minecraft/src/EnumOSHelper.java new file mode 100644 index 0000000..f2d6c9a --- /dev/null +++ b/src/net/minecraft/src/EnumOSHelper.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +public class EnumOSHelper { + public static final int[] field_90049_a = new int[EnumOS.values().length]; + + static { + try { + field_90049_a[EnumOS.LINUX.ordinal()] = 1; + } catch (NoSuchFieldError var4) { + } + + try { + field_90049_a[EnumOS.SOLARIS.ordinal()] = 2; + } catch (NoSuchFieldError var3) { + } + + try { + field_90049_a[EnumOS.WINDOWS.ordinal()] = 3; + } catch (NoSuchFieldError var2) { + } + + try { + field_90049_a[EnumOS.MACOS.ordinal()] = 4; + } catch (NoSuchFieldError var1) { + } + + } +} diff --git a/src/net/minecraft/src/EnumOptions.java b/src/net/minecraft/src/EnumOptions.java new file mode 100644 index 0000000..d34aa14 --- /dev/null +++ b/src/net/minecraft/src/EnumOptions.java @@ -0,0 +1,76 @@ +package net.minecraft.src; + +public enum EnumOptions { + MUSIC("options.music", true, false), + SOUND("options.sound", true, false), + INVERT_MOUSE("options.invertMouse", false, true), + SENSITIVITY("options.sensitivity", true, false), + FOV("options.fov", true, false), + GAMMA("options.gamma", true, false), + RENDER_DISTANCE("options.renderDistance", false, false), + VIEW_BOBBING("options.viewBobbing", false, true), + ANAGLYPH("options.anaglyph", false, true), + ADVANCED_OPENGL("options.advancedOpengl", false, true), + FRAMERATE_LIMIT("options.framerateLimit", false, false), + DIFFICULTY("options.difficulty", false, false), + GRAPHICS("options.graphics", false, false), + AMBIENT_OCCLUSION("options.ao", false, false), + GUI_SCALE("options.guiScale", false, false), + RENDER_CLOUDS("options.renderClouds", false, true), + 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), + USE_SERVER_TEXTURES("options.serverTextures", false, true), + SNOOPER_ENABLED("options.snooper", false, true), + USE_FULLSCREEN("options.fullscreen", false, true), + ENABLE_VSYNC("options.vsync", false, true), + SHOW_CAPE("options.showCape", 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); + + private final boolean enumFloat; + private final boolean enumBoolean; + private final String enumString; + + public static EnumOptions getEnumOptions(int var0) { + EnumOptions[] var1 = values(); + int var2 = var1.length; + + for(int var3 = 0; var3 < var2; ++var3) { + EnumOptions var4 = var1[var3]; + if(var4.returnEnumOrdinal() == var0) { + return var4; + } + } + + return null; + } + + private EnumOptions(String var3, boolean var4, boolean var5) { + this.enumString = var3; + this.enumFloat = var4; + this.enumBoolean = var5; + } + + public boolean getEnumFloat() { + return this.enumFloat; + } + + public boolean getEnumBoolean() { + return this.enumBoolean; + } + + public int returnEnumOrdinal() { + return this.ordinal(); + } + + public String getEnumString() { + return this.enumString; + } +} diff --git a/src/net/minecraft/src/EnumOptionsHelper.java b/src/net/minecraft/src/EnumOptionsHelper.java new file mode 100644 index 0000000..bc620d3 --- /dev/null +++ b/src/net/minecraft/src/EnumOptionsHelper.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +class EnumOptionsHelper { + static final int[] enumOptionsMappingHelperArray = new int[EnumOptions.values().length]; + + static { + try { + enumOptionsMappingHelperArray[EnumOptions.INVERT_MOUSE.ordinal()] = 1; + } catch (NoSuchFieldError var14) { + } + + try { + enumOptionsMappingHelperArray[EnumOptions.VIEW_BOBBING.ordinal()] = 2; + } catch (NoSuchFieldError var13) { + } + + try { + enumOptionsMappingHelperArray[EnumOptions.ANAGLYPH.ordinal()] = 3; + } catch (NoSuchFieldError var12) { + } + + try { + enumOptionsMappingHelperArray[EnumOptions.ADVANCED_OPENGL.ordinal()] = 4; + } catch (NoSuchFieldError var11) { + } + + try { + enumOptionsMappingHelperArray[EnumOptions.RENDER_CLOUDS.ordinal()] = 5; + } catch (NoSuchFieldError var10) { + } + + try { + enumOptionsMappingHelperArray[EnumOptions.CHAT_COLOR.ordinal()] = 6; + } catch (NoSuchFieldError var9) { + } + + try { + enumOptionsMappingHelperArray[EnumOptions.CHAT_LINKS.ordinal()] = 7; + } catch (NoSuchFieldError var8) { + } + + try { + enumOptionsMappingHelperArray[EnumOptions.CHAT_LINKS_PROMPT.ordinal()] = 8; + } catch (NoSuchFieldError var7) { + } + + try { + enumOptionsMappingHelperArray[EnumOptions.USE_SERVER_TEXTURES.ordinal()] = 9; + } catch (NoSuchFieldError var6) { + } + + try { + enumOptionsMappingHelperArray[EnumOptions.SNOOPER_ENABLED.ordinal()] = 10; + } catch (NoSuchFieldError var5) { + } + + try { + enumOptionsMappingHelperArray[EnumOptions.USE_FULLSCREEN.ordinal()] = 11; + } catch (NoSuchFieldError var4) { + } + + try { + enumOptionsMappingHelperArray[EnumOptions.ENABLE_VSYNC.ordinal()] = 12; + } catch (NoSuchFieldError var3) { + } + + try { + enumOptionsMappingHelperArray[EnumOptions.SHOW_CAPE.ordinal()] = 13; + } catch (NoSuchFieldError var2) { + } + + try { + enumOptionsMappingHelperArray[EnumOptions.TOUCHSCREEN.ordinal()] = 14; + } catch (NoSuchFieldError var1) { + } + + } +} diff --git a/src/net/minecraft/src/EnumRarity.java b/src/net/minecraft/src/EnumRarity.java new file mode 100644 index 0000000..f7060bf --- /dev/null +++ b/src/net/minecraft/src/EnumRarity.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +public enum EnumRarity { + common(15, "Common"), + uncommon(14, "Uncommon"), + rare(11, "Rare"), + epic(13, "Epic"); + + public final int rarityColor; + public final String rarityName; + + private EnumRarity(int var3, String var4) { + this.rarityColor = var3; + this.rarityName = var4; + } +} diff --git a/src/net/minecraft/src/EnumSkyBlock.java b/src/net/minecraft/src/EnumSkyBlock.java new file mode 100644 index 0000000..92da84b --- /dev/null +++ b/src/net/minecraft/src/EnumSkyBlock.java @@ -0,0 +1,12 @@ +package net.minecraft.src; + +public enum EnumSkyBlock { + Sky(15), + Block(0); + + public final int defaultLightValue; + + private EnumSkyBlock(int var3) { + this.defaultLightValue = var3; + } +} diff --git a/src/net/minecraft/src/EnumStatus.java b/src/net/minecraft/src/EnumStatus.java new file mode 100644 index 0000000..21f03e7 --- /dev/null +++ b/src/net/minecraft/src/EnumStatus.java @@ -0,0 +1,10 @@ +package net.minecraft.src; + +public enum EnumStatus { + OK, + NOT_POSSIBLE_HERE, + NOT_POSSIBLE_NOW, + TOO_FAR_AWAY, + OTHER_PROBLEM, + NOT_SAFE; +} diff --git a/src/net/minecraft/src/EnumToolMaterial.java b/src/net/minecraft/src/EnumToolMaterial.java new file mode 100644 index 0000000..31342a8 --- /dev/null +++ b/src/net/minecraft/src/EnumToolMaterial.java @@ -0,0 +1,47 @@ +package net.minecraft.src; + +public enum EnumToolMaterial { + WOOD(0, 59, 2.0F, 0, 15), + STONE(1, 131, 4.0F, 1, 5), + IRON(2, 250, 6.0F, 2, 14), + EMERALD(3, 1561, 8.0F, 3, 10), + GOLD(0, 32, 12.0F, 0, 22); + + private final int harvestLevel; + private final int maxUses; + private final float efficiencyOnProperMaterial; + private final int damageVsEntity; + private final int enchantability; + + private EnumToolMaterial(int var3, int var4, float var5, int var6, int var7) { + this.harvestLevel = var3; + this.maxUses = var4; + this.efficiencyOnProperMaterial = var5; + this.damageVsEntity = var6; + this.enchantability = var7; + } + + public int getMaxUses() { + return this.maxUses; + } + + public float getEfficiencyOnProperMaterial() { + return this.efficiencyOnProperMaterial; + } + + public int getDamageVsEntity() { + return this.damageVsEntity; + } + + public int getHarvestLevel() { + return this.harvestLevel; + } + + public int getEnchantability() { + return this.enchantability; + } + + public int getToolCraftingMaterial() { + return this == WOOD ? Block.planks.blockID : (this == STONE ? Block.cobblestone.blockID : (this == GOLD ? Item.ingotGold.itemID : (this == IRON ? Item.ingotIron.itemID : (this == EMERALD ? Item.diamond.itemID : 0)))); + } +} diff --git a/src/net/minecraft/src/ExceptionMcoHttp.java b/src/net/minecraft/src/ExceptionMcoHttp.java new file mode 100644 index 0000000..9f3c00b --- /dev/null +++ b/src/net/minecraft/src/ExceptionMcoHttp.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class ExceptionMcoHttp extends RuntimeException { + public ExceptionMcoHttp(String var1, Exception var2) { + super(var1, var2); + } +} diff --git a/src/net/minecraft/src/ExceptionMcoService.java b/src/net/minecraft/src/ExceptionMcoService.java new file mode 100644 index 0000000..74ef1fd --- /dev/null +++ b/src/net/minecraft/src/ExceptionMcoService.java @@ -0,0 +1,12 @@ +package net.minecraft.src; + +public class ExceptionMcoService extends Exception { + public final int field_96392_a; + public final String field_96391_b; + + public ExceptionMcoService(int var1, String var2) { + super(var2); + this.field_96392_a = var1; + this.field_96391_b = var2; + } +} diff --git a/src/net/minecraft/src/ExceptionRetryCall.java b/src/net/minecraft/src/ExceptionRetryCall.java new file mode 100644 index 0000000..da160cb --- /dev/null +++ b/src/net/minecraft/src/ExceptionRetryCall.java @@ -0,0 +1,10 @@ +package net.minecraft.src; + +public class ExceptionRetryCall extends ExceptionMcoService { + public final int field_96393_c; + + public ExceptionRetryCall(int var1) { + super(503, "Retry operation"); + this.field_96393_c = var1; + } +} diff --git a/src/net/minecraft/src/Explosion.java b/src/net/minecraft/src/Explosion.java new file mode 100644 index 0000000..53301cb --- /dev/null +++ b/src/net/minecraft/src/Explosion.java @@ -0,0 +1,204 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; + +public class Explosion { + public boolean isFlaming = false; + public boolean isSmoking = true; + private int field_77289_h = 16; + private Random explosionRNG = new Random(); + private World worldObj; + public double explosionX; + public double explosionY; + public double explosionZ; + public Entity exploder; + public float explosionSize; + public List affectedBlockPositions = new ArrayList(); + private Map field_77288_k = new HashMap(); + + public Explosion(World var1, Entity var2, double var3, double var5, double var7, float var9) { + this.worldObj = var1; + this.exploder = var2; + this.explosionSize = var9; + this.explosionX = var3; + this.explosionY = var5; + this.explosionZ = var7; + } + + public void doExplosionA() { + float var1 = this.explosionSize; + HashSet var2 = new HashSet(); + + int var3; + int var4; + int var5; + double var15; + double var17; + double var19; + for(var3 = 0; var3 < this.field_77289_h; ++var3) { + for(var4 = 0; var4 < this.field_77289_h; ++var4) { + for(var5 = 0; var5 < this.field_77289_h; ++var5) { + if(var3 == 0 || var3 == this.field_77289_h - 1 || var4 == 0 || var4 == this.field_77289_h - 1 || var5 == 0 || var5 == this.field_77289_h - 1) { + double var6 = (double)((float)var3 / ((float)this.field_77289_h - 1.0F) * 2.0F - 1.0F); + double var8 = (double)((float)var4 / ((float)this.field_77289_h - 1.0F) * 2.0F - 1.0F); + double var10 = (double)((float)var5 / ((float)this.field_77289_h - 1.0F) * 2.0F - 1.0F); + double var12 = Math.sqrt(var6 * var6 + var8 * var8 + var10 * var10); + var6 /= var12; + var8 /= var12; + var10 /= var12; + float var14 = this.explosionSize * (0.7F + this.worldObj.rand.nextFloat() * 0.6F); + var15 = this.explosionX; + var17 = this.explosionY; + var19 = this.explosionZ; + + for(float var21 = 0.3F; var14 > 0.0F; var14 -= var21 * (12.0F / 16.0F)) { + int var22 = MathHelper.floor_double(var15); + int var23 = MathHelper.floor_double(var17); + int var24 = MathHelper.floor_double(var19); + int var25 = this.worldObj.getBlockId(var22, var23, var24); + if(var25 > 0) { + Block var26 = Block.blocksList[var25]; + float var27 = this.exploder != null ? this.exploder.func_82146_a(this, this.worldObj, var22, var23, var24, var26) : var26.getExplosionResistance(this.exploder); + var14 -= (var27 + 0.3F) * var21; + } + + if(var14 > 0.0F && (this.exploder == null || this.exploder.func_96091_a(this, this.worldObj, var22, var23, var24, var25, var14))) { + var2.add(new ChunkPosition(var22, var23, var24)); + } + + var15 += var6 * (double)var21; + var17 += var8 * (double)var21; + var19 += var10 * (double)var21; + } + } + } + } + } + + this.affectedBlockPositions.addAll(var2); + this.explosionSize *= 2.0F; + var3 = MathHelper.floor_double(this.explosionX - (double)this.explosionSize - 1.0D); + var4 = MathHelper.floor_double(this.explosionX + (double)this.explosionSize + 1.0D); + var5 = MathHelper.floor_double(this.explosionY - (double)this.explosionSize - 1.0D); + int var29 = MathHelper.floor_double(this.explosionY + (double)this.explosionSize + 1.0D); + int var7 = MathHelper.floor_double(this.explosionZ - (double)this.explosionSize - 1.0D); + int var30 = MathHelper.floor_double(this.explosionZ + (double)this.explosionSize + 1.0D); + List var9 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this.exploder, AxisAlignedBB.getAABBPool().getAABB((double)var3, (double)var5, (double)var7, (double)var4, (double)var29, (double)var30)); + Vec3 var31 = this.worldObj.getWorldVec3Pool().getVecFromPool(this.explosionX, this.explosionY, this.explosionZ); + + for(int var11 = 0; var11 < var9.size(); ++var11) { + Entity var32 = (Entity)var9.get(var11); + double var13 = var32.getDistance(this.explosionX, this.explosionY, this.explosionZ) / (double)this.explosionSize; + if(var13 <= 1.0D) { + var15 = var32.posX - this.explosionX; + var17 = var32.posY + (double)var32.getEyeHeight() - this.explosionY; + var19 = var32.posZ - this.explosionZ; + double var33 = (double)MathHelper.sqrt_double(var15 * var15 + var17 * var17 + var19 * var19); + if(var33 != 0.0D) { + var15 /= var33; + var17 /= var33; + var19 /= var33; + double var34 = (double)this.worldObj.getBlockDensity(var31, var32.boundingBox); + double var35 = (1.0D - var13) * var34; + var32.attackEntityFrom(DamageSource.setExplosionSource(this), (int)((var35 * var35 + var35) / 2.0D * 8.0D * (double)this.explosionSize + 1.0D)); + double var36 = EnchantmentProtection.func_92092_a(var32, var35); + var32.motionX += var15 * var36; + var32.motionY += var17 * var36; + var32.motionZ += var19 * var36; + if(var32 instanceof EntityPlayer) { + this.field_77288_k.put((EntityPlayer)var32, this.worldObj.getWorldVec3Pool().getVecFromPool(var15 * var35, var17 * var35, var19 * var35)); + } + } + } + } + + this.explosionSize = var1; + } + + public void doExplosionB(boolean var1) { + this.worldObj.playSoundEffect(this.explosionX, this.explosionY, this.explosionZ, "random.explode", 4.0F, (1.0F + (this.worldObj.rand.nextFloat() - this.worldObj.rand.nextFloat()) * 0.2F) * 0.7F); + if(this.explosionSize >= 2.0F && this.isSmoking) { + this.worldObj.spawnParticle("hugeexplosion", this.explosionX, this.explosionY, this.explosionZ, 1.0D, 0.0D, 0.0D); + } else { + this.worldObj.spawnParticle("largeexplode", this.explosionX, this.explosionY, this.explosionZ, 1.0D, 0.0D, 0.0D); + } + + Iterator var2; + ChunkPosition var3; + int var4; + int var5; + int var6; + int var7; + if(this.isSmoking) { + var2 = this.affectedBlockPositions.iterator(); + + while(var2.hasNext()) { + var3 = (ChunkPosition)var2.next(); + var4 = var3.x; + var5 = var3.y; + var6 = var3.z; + var7 = this.worldObj.getBlockId(var4, var5, var6); + if(var1) { + double var8 = (double)((float)var4 + this.worldObj.rand.nextFloat()); + double var10 = (double)((float)var5 + this.worldObj.rand.nextFloat()); + double var12 = (double)((float)var6 + this.worldObj.rand.nextFloat()); + double var14 = var8 - this.explosionX; + double var16 = var10 - this.explosionY; + double var18 = var12 - this.explosionZ; + double var20 = (double)MathHelper.sqrt_double(var14 * var14 + var16 * var16 + var18 * var18); + var14 /= var20; + var16 /= var20; + var18 /= var20; + double var22 = 0.5D / (var20 / (double)this.explosionSize + 0.1D); + var22 *= (double)(this.worldObj.rand.nextFloat() * this.worldObj.rand.nextFloat() + 0.3F); + var14 *= var22; + var16 *= var22; + var18 *= var22; + this.worldObj.spawnParticle("explode", (var8 + this.explosionX * 1.0D) / 2.0D, (var10 + this.explosionY * 1.0D) / 2.0D, (var12 + this.explosionZ * 1.0D) / 2.0D, var14, var16, var18); + this.worldObj.spawnParticle("smoke", var8, var10, var12, var14, var16, var18); + } + + if(var7 > 0) { + Block var24 = Block.blocksList[var7]; + if(var24.canDropFromExplosion(this)) { + var24.dropBlockAsItemWithChance(this.worldObj, var4, var5, var6, this.worldObj.getBlockMetadata(var4, var5, var6), 1.0F / this.explosionSize, 0); + } + + this.worldObj.setBlock(var4, var5, var6, 0, 0, 3); + var24.onBlockDestroyedByExplosion(this.worldObj, var4, var5, var6, this); + } + } + } + + if(this.isFlaming) { + var2 = this.affectedBlockPositions.iterator(); + + while(var2.hasNext()) { + var3 = (ChunkPosition)var2.next(); + var4 = var3.x; + var5 = var3.y; + var6 = var3.z; + var7 = this.worldObj.getBlockId(var4, var5, var6); + int var25 = this.worldObj.getBlockId(var4, var5 - 1, var6); + if(var7 == 0 && Block.opaqueCubeLookup[var25] && this.explosionRNG.nextInt(3) == 0) { + this.worldObj.setBlock(var4, var5, var6, Block.fire.blockID); + } + } + } + + } + + public Map func_77277_b() { + return this.field_77288_k; + } + + public EntityLiving func_94613_c() { + return this.exploder == null ? null : (this.exploder instanceof EntityTNTPrimed ? ((EntityTNTPrimed)this.exploder).getTntPlacedBy() : (this.exploder instanceof EntityLiving ? (EntityLiving)this.exploder : null)); + } +} diff --git a/src/net/minecraft/src/ExtendedBlockStorage.java b/src/net/minecraft/src/ExtendedBlockStorage.java new file mode 100644 index 0000000..fa63ac1 --- /dev/null +++ b/src/net/minecraft/src/ExtendedBlockStorage.java @@ -0,0 +1,177 @@ +package net.minecraft.src; + +public class ExtendedBlockStorage { + private int yBase; + private int blockRefCount; + private int tickRefCount; + private byte[] blockLSBArray; + private NibbleArray blockMSBArray; + private NibbleArray blockMetadataArray; + private NibbleArray blocklightArray; + private NibbleArray skylightArray; + + public ExtendedBlockStorage(int var1, boolean var2) { + this.yBase = var1; + this.blockLSBArray = new byte[4096]; + this.blockMetadataArray = new NibbleArray(this.blockLSBArray.length, 4); + this.blocklightArray = new NibbleArray(this.blockLSBArray.length, 4); + if(var2) { + this.skylightArray = new NibbleArray(this.blockLSBArray.length, 4); + } + + } + + public int getExtBlockID(int var1, int var2, int var3) { + int var4 = this.blockLSBArray[var2 << 8 | var3 << 4 | var1] & 255; + return this.blockMSBArray != null ? this.blockMSBArray.get(var1, var2, var3) << 8 | var4 : var4; + } + + public void setExtBlockID(int var1, int var2, int var3, int var4) { + int var5 = this.blockLSBArray[var2 << 8 | var3 << 4 | var1] & 255; + if(this.blockMSBArray != null) { + var5 |= this.blockMSBArray.get(var1, var2, var3) << 8; + } + + if(var5 == 0 && var4 != 0) { + ++this.blockRefCount; + if(Block.blocksList[var4] != null && Block.blocksList[var4].getTickRandomly()) { + ++this.tickRefCount; + } + } else if(var5 != 0 && var4 == 0) { + --this.blockRefCount; + if(Block.blocksList[var5] != null && Block.blocksList[var5].getTickRandomly()) { + --this.tickRefCount; + } + } else if(Block.blocksList[var5] == null || !Block.blocksList[var5].getTickRandomly() || Block.blocksList[var4] != null && Block.blocksList[var4].getTickRandomly()) { + if((Block.blocksList[var5] == null || !Block.blocksList[var5].getTickRandomly()) && Block.blocksList[var4] != null && Block.blocksList[var4].getTickRandomly()) { + ++this.tickRefCount; + } + } else { + --this.tickRefCount; + } + + this.blockLSBArray[var2 << 8 | var3 << 4 | var1] = (byte)(var4 & 255); + if(var4 > 255) { + if(this.blockMSBArray == null) { + this.blockMSBArray = new NibbleArray(this.blockLSBArray.length, 4); + } + + this.blockMSBArray.set(var1, var2, var3, (var4 & 3840) >> 8); + } else if(this.blockMSBArray != null) { + this.blockMSBArray.set(var1, var2, var3, 0); + } + + } + + public int getExtBlockMetadata(int var1, int var2, int var3) { + return this.blockMetadataArray.get(var1, var2, var3); + } + + public void setExtBlockMetadata(int var1, int var2, int var3, int var4) { + this.blockMetadataArray.set(var1, var2, var3, var4); + } + + public boolean isEmpty() { + return this.blockRefCount == 0; + } + + public boolean getNeedsRandomTick() { + return this.tickRefCount > 0; + } + + public int getYLocation() { + return this.yBase; + } + + public void setExtSkylightValue(int var1, int var2, int var3, int var4) { + this.skylightArray.set(var1, var2, var3, var4); + } + + public int getExtSkylightValue(int var1, int var2, int var3) { + return this.skylightArray.get(var1, var2, var3); + } + + public void setExtBlocklightValue(int var1, int var2, int var3, int var4) { + this.blocklightArray.set(var1, var2, var3, var4); + } + + public int getExtBlocklightValue(int var1, int var2, int var3) { + return this.blocklightArray.get(var1, var2, var3); + } + + public void removeInvalidBlocks() { + this.blockRefCount = 0; + this.tickRefCount = 0; + + for(int var1 = 0; var1 < 16; ++var1) { + for(int var2 = 0; var2 < 16; ++var2) { + for(int var3 = 0; var3 < 16; ++var3) { + int var4 = this.getExtBlockID(var1, var2, var3); + if(var4 > 0) { + if(Block.blocksList[var4] == null) { + this.blockLSBArray[var2 << 8 | var3 << 4 | var1] = 0; + if(this.blockMSBArray != null) { + this.blockMSBArray.set(var1, var2, var3, 0); + } + } else { + ++this.blockRefCount; + if(Block.blocksList[var4].getTickRandomly()) { + ++this.tickRefCount; + } + } + } + } + } + } + + } + + public byte[] getBlockLSBArray() { + return this.blockLSBArray; + } + + public void clearMSBArray() { + this.blockMSBArray = null; + } + + public NibbleArray getBlockMSBArray() { + return this.blockMSBArray; + } + + public NibbleArray getMetadataArray() { + return this.blockMetadataArray; + } + + public NibbleArray getBlocklightArray() { + return this.blocklightArray; + } + + public NibbleArray getSkylightArray() { + return this.skylightArray; + } + + public void setBlockLSBArray(byte[] var1) { + this.blockLSBArray = var1; + } + + public void setBlockMSBArray(NibbleArray var1) { + this.blockMSBArray = var1; + } + + public void setBlockMetadataArray(NibbleArray var1) { + this.blockMetadataArray = var1; + } + + public void setBlocklightArray(NibbleArray var1) { + this.blocklightArray = var1; + } + + public void setSkylightArray(NibbleArray var1) { + this.skylightArray = var1; + } + + public NibbleArray createBlockMSBArray() { + this.blockMSBArray = new NibbleArray(this.blockLSBArray.length, 4); + return this.blockMSBArray; + } +} diff --git a/src/net/minecraft/src/Facing.java b/src/net/minecraft/src/Facing.java new file mode 100644 index 0000000..4055b64 --- /dev/null +++ b/src/net/minecraft/src/Facing.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public class Facing { + public static final int[] oppositeSide = new int[]{1, 0, 3, 2, 5, 4}; + public static final int[] offsetsXForSide = new int[]{0, 0, 0, 0, -1, 1}; + public static final int[] offsetsYForSide = new int[]{-1, 1, 0, 0, 0, 0}; + public static final int[] offsetsZForSide = new int[]{0, 0, -1, 1, 0, 0}; + public static final String[] facings = new String[]{"DOWN", "UP", "NORTH", "SOUTH", "WEST", "EAST"}; +} diff --git a/src/net/minecraft/src/FilterIMob.java b/src/net/minecraft/src/FilterIMob.java new file mode 100644 index 0000000..8d929ba --- /dev/null +++ b/src/net/minecraft/src/FilterIMob.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +final class FilterIMob implements IEntitySelector { + public boolean isEntityApplicable(Entity var1) { + return var1 instanceof IMob; + } +} diff --git a/src/net/minecraft/src/FlatGeneratorInfo.java b/src/net/minecraft/src/FlatGeneratorInfo.java new file mode 100644 index 0000000..124446f --- /dev/null +++ b/src/net/minecraft/src/FlatGeneratorInfo.java @@ -0,0 +1,238 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +public class FlatGeneratorInfo { + private final List flatLayers = new ArrayList(); + private final Map worldFeatures = new HashMap(); + private int biomeToUse = 0; + + public int getBiome() { + return this.biomeToUse; + } + + public void setBiome(int var1) { + this.biomeToUse = var1; + } + + public Map getWorldFeatures() { + return this.worldFeatures; + } + + public List getFlatLayers() { + return this.flatLayers; + } + + public void func_82645_d() { + int var1 = 0; + + FlatLayerInfo var3; + for(Iterator var2 = this.flatLayers.iterator(); var2.hasNext(); var1 += var3.getLayerCount()) { + var3 = (FlatLayerInfo)var2.next(); + var3.setMinY(var1); + } + + } + + public String toString() { + StringBuilder var1 = new StringBuilder(); + var1.append(2); + var1.append(";"); + + int var2; + for(var2 = 0; var2 < this.flatLayers.size(); ++var2) { + if(var2 > 0) { + var1.append(","); + } + + var1.append(((FlatLayerInfo)this.flatLayers.get(var2)).toString()); + } + + var1.append(";"); + var1.append(this.biomeToUse); + if(!this.worldFeatures.isEmpty()) { + var1.append(";"); + var2 = 0; + Iterator var3 = this.worldFeatures.entrySet().iterator(); + + while(true) { + Map var5; + do { + if(!var3.hasNext()) { + return var1.toString(); + } + + Entry var4 = (Entry)var3.next(); + if(var2++ > 0) { + var1.append(","); + } + + var1.append(((String)var4.getKey()).toLowerCase()); + var5 = (Map)var4.getValue(); + } while(var5.isEmpty()); + + var1.append("("); + int var6 = 0; + Iterator var7 = var5.entrySet().iterator(); + + while(var7.hasNext()) { + Entry var8 = (Entry)var7.next(); + if(var6++ > 0) { + var1.append(" "); + } + + var1.append((String)var8.getKey()); + var1.append("="); + var1.append((String)var8.getValue()); + } + + var1.append(")"); + } + } else { + var1.append(";"); + return var1.toString(); + } + } + + private static FlatLayerInfo func_82646_a(String var0, int var1) { + String[] var2 = var0.split("x", 2); + int var3 = 1; + int var5 = 0; + if(var2.length == 2) { + try { + var3 = Integer.parseInt(var2[0]); + if(var1 + var3 >= 256) { + var3 = 256 - var1; + } + + if(var3 < 0) { + var3 = 0; + } + } catch (Throwable var7) { + return null; + } + } + + int var4; + try { + String var6 = var2[var2.length - 1]; + var2 = var6.split(":", 2); + var4 = Integer.parseInt(var2[0]); + if(var2.length > 1) { + var5 = Integer.parseInt(var2[1]); + } + + if(Block.blocksList[var4] == null) { + var4 = 0; + var5 = 0; + } + + if(var5 < 0 || var5 > 15) { + var5 = 0; + } + } catch (Throwable var8) { + return null; + } + + FlatLayerInfo var9 = new FlatLayerInfo(var3, var4, var5); + var9.setMinY(var1); + return var9; + } + + private static List func_82652_b(String var0) { + if(var0 != null && var0.length() >= 1) { + ArrayList var1 = new ArrayList(); + String[] var2 = var0.split(","); + int var3 = 0; + String[] var4 = var2; + int var5 = var2.length; + + for(int var6 = 0; var6 < var5; ++var6) { + String var7 = var4[var6]; + FlatLayerInfo var8 = func_82646_a(var7, var3); + if(var8 == null) { + return null; + } + + var1.add(var8); + var3 += var8.getLayerCount(); + } + + return var1; + } else { + return null; + } + } + + public static FlatGeneratorInfo createFlatGeneratorFromString(String var0) { + if(var0 == null) { + return getDefaultFlatGenerator(); + } else { + String[] var1 = var0.split(";", -1); + int var2 = var1.length == 1 ? 0 : MathHelper.parseIntWithDefault(var1[0], 0); + if(var2 >= 0 && var2 <= 2) { + FlatGeneratorInfo var3 = new FlatGeneratorInfo(); + int var4 = var1.length == 1 ? 0 : 1; + List var5 = func_82652_b(var1[var4++]); + if(var5 != null && !var5.isEmpty()) { + var3.getFlatLayers().addAll(var5); + var3.func_82645_d(); + int var6 = BiomeGenBase.plains.biomeID; + if(var2 > 0 && var1.length > var4) { + var6 = MathHelper.parseIntWithDefault(var1[var4++], var6); + } + + var3.setBiome(var6); + if(var2 > 0 && var1.length > var4) { + String[] var7 = var1[var4++].toLowerCase().split(","); + String[] var8 = var7; + int var9 = var7.length; + + for(int var10 = 0; var10 < var9; ++var10) { + String var11 = var8[var10]; + String[] var12 = var11.split("\\(", 2); + HashMap var13 = new HashMap(); + if(var12[0].length() > 0) { + var3.getWorldFeatures().put(var12[0], var13); + if(var12.length > 1 && var12[1].endsWith(")") && var12[1].length() > 1) { + String[] var14 = var12[1].substring(0, var12[1].length() - 1).split(" "); + + for(int var15 = 0; var15 < var14.length; ++var15) { + String[] var16 = var14[var15].split("=", 2); + if(var16.length == 2) { + var13.put(var16[0], var16[1]); + } + } + } + } + } + } else { + var3.getWorldFeatures().put("village", new HashMap()); + } + + return var3; + } else { + return getDefaultFlatGenerator(); + } + } else { + return getDefaultFlatGenerator(); + } + } + } + + public static FlatGeneratorInfo getDefaultFlatGenerator() { + FlatGeneratorInfo var0 = new FlatGeneratorInfo(); + var0.setBiome(BiomeGenBase.plains.biomeID); + var0.getFlatLayers().add(new FlatLayerInfo(1, Block.bedrock.blockID)); + var0.getFlatLayers().add(new FlatLayerInfo(2, Block.dirt.blockID)); + var0.getFlatLayers().add(new FlatLayerInfo(1, Block.grass.blockID)); + var0.func_82645_d(); + var0.getWorldFeatures().put("village", new HashMap()); + return var0; + } +} diff --git a/src/net/minecraft/src/FlatLayerInfo.java b/src/net/minecraft/src/FlatLayerInfo.java new file mode 100644 index 0000000..d2a9d41 --- /dev/null +++ b/src/net/minecraft/src/FlatLayerInfo.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +public class FlatLayerInfo { + private int layerCount; + private int layerFillBlock; + private int layerFillBlockMeta; + private int layerMinimumY; + + public FlatLayerInfo(int var1, int var2) { + this.layerCount = 1; + this.layerFillBlock = 0; + this.layerFillBlockMeta = 0; + this.layerMinimumY = 0; + this.layerCount = var1; + this.layerFillBlock = var2; + } + + public FlatLayerInfo(int var1, int var2, int var3) { + this(var1, var2); + this.layerFillBlockMeta = var3; + } + + public int getLayerCount() { + return this.layerCount; + } + + public int getFillBlock() { + return this.layerFillBlock; + } + + public int getFillBlockMeta() { + return this.layerFillBlockMeta; + } + + public int getMinY() { + return this.layerMinimumY; + } + + public void setMinY(int var1) { + this.layerMinimumY = var1; + } + + public String toString() { + String var1 = Integer.toString(this.layerFillBlock); + if(this.layerCount > 1) { + var1 = this.layerCount + "x" + var1; + } + + if(this.layerFillBlockMeta > 0) { + var1 = var1 + ":" + this.layerFillBlockMeta; + } + + return var1; + } +} diff --git a/src/net/minecraft/src/FontRenderer.java b/src/net/minecraft/src/FontRenderer.java new file mode 100644 index 0000000..01b5129 --- /dev/null +++ b/src/net/minecraft/src/FontRenderer.java @@ -0,0 +1,674 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.text.Bidi; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import javax.imageio.ImageIO; +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +public class FontRenderer { + private int[] charWidth = new int[256]; + public int FONT_HEIGHT = 9; + public Random fontRandom = new Random(); + private byte[] glyphWidth = new byte[65536]; + private int[] colorCode = new int[32]; + private final String fontTextureName; + private final RenderEngine renderEngine; + private float posX; + private float posY; + private boolean unicodeFlag; + private boolean bidiFlag; + private float red; + private float blue; + private float green; + private float alpha; + private int textColor; + private boolean randomStyle = false; + private boolean boldStyle = false; + private boolean italicStyle = false; + private boolean underlineStyle = false; + private boolean strikethroughStyle = false; + + FontRenderer() { + this.renderEngine = null; + this.fontTextureName = null; + } + + public FontRenderer(GameSettings var1, String var2, RenderEngine var3, boolean var4) { + this.fontTextureName = var2; + this.renderEngine = var3; + this.unicodeFlag = var4; + this.readFontData(); + var3.bindTexture(var2); + + for(int var5 = 0; var5 < 32; ++var5) { + int var6 = (var5 >> 3 & 1) * 85; + int var7 = (var5 >> 2 & 1) * 170 + var6; + int var8 = (var5 >> 1 & 1) * 170 + var6; + int var9 = (var5 >> 0 & 1) * 170 + var6; + if(var5 == 6) { + var7 += 85; + } + + if(var1.anaglyph) { + int var10 = (var7 * 30 + var8 * 59 + var9 * 11) / 100; + int var11 = (var7 * 30 + var8 * 70) / 100; + int var12 = (var7 * 30 + var9 * 70) / 100; + var7 = var10; + var8 = var11; + var9 = var12; + } + + if(var5 >= 16) { + var7 /= 4; + var8 /= 4; + var9 /= 4; + } + + this.colorCode[var5] = (var7 & 255) << 16 | (var8 & 255) << 8 | var9 & 255; + } + + } + + public void readFontData() { + this.readGlyphSizes(); + this.readFontTexture(this.fontTextureName); + } + + private void readFontTexture(String var1) { + BufferedImage var2; + try { + var2 = ImageIO.read(RenderEngine.class.getResourceAsStream(var1)); + } catch (IOException var15) { + throw new RuntimeException(var15); + } + + int var3 = var2.getWidth(); + int var4 = var2.getHeight(); + int[] var5 = new int[var3 * var4]; + var2.getRGB(0, 0, var3, var4, var5, 0, var3); + + for(int var6 = 0; var6 < 256; ++var6) { + int var7 = var6 % 16; + int var8 = var6 / 16; + + int var9; + for(var9 = 7; var9 >= 0; --var9) { + int var10 = var7 * 8 + var9; + boolean var11 = true; + + for(int var12 = 0; var12 < 8 && var11; ++var12) { + int var13 = (var8 * 8 + var12) * var3; + int var14 = var5[var10 + var13] & 255; + if(var14 > 0) { + var11 = false; + } + } + + if(!var11) { + break; + } + } + + if(var6 == 32) { + var9 = 2; + } + + this.charWidth[var6] = var9 + 2; + } + + } + + private void readGlyphSizes() { + try { + InputStream var1 = Minecraft.getMinecraft().texturePackList.getSelectedTexturePack().getResourceAsStream("/font/glyph_sizes.bin"); + var1.read(this.glyphWidth); + } catch (IOException var2) { + throw new RuntimeException(var2); + } + } + + private float renderCharAtPos(int var1, char var2, boolean var3) { + return var2 == 32 ? 4.0F : (var1 > 0 && !this.unicodeFlag ? this.renderDefaultChar(var1 + 32, var3) : this.renderUnicodeChar(var2, var3)); + } + + private float renderDefaultChar(int var1, boolean var2) { + float var3 = (float)(var1 % 16 * 8); + float var4 = (float)(var1 / 16 * 8); + float var5 = var2 ? 1.0F : 0.0F; + this.renderEngine.bindTexture(this.fontTextureName); + float var6 = (float)this.charWidth[var1] - 0.01F; + GL11.glBegin(GL11.GL_TRIANGLE_STRIP); + GL11.glTexCoord2f(var3 / 128.0F, var4 / 128.0F); + GL11.glVertex3f(this.posX + var5, this.posY, 0.0F); + GL11.glTexCoord2f(var3 / 128.0F, (var4 + 7.99F) / 128.0F); + GL11.glVertex3f(this.posX - var5, this.posY + 7.99F, 0.0F); + GL11.glTexCoord2f((var3 + var6) / 128.0F, var4 / 128.0F); + GL11.glVertex3f(this.posX + var6 + var5, this.posY, 0.0F); + GL11.glTexCoord2f((var3 + var6) / 128.0F, (var4 + 7.99F) / 128.0F); + GL11.glVertex3f(this.posX + var6 - var5, this.posY + 7.99F, 0.0F); + GL11.glEnd(); + return (float)this.charWidth[var1]; + } + + private void loadGlyphTexture(int var1) { + String var2 = String.format("/font/glyph_%02X.png", new Object[]{Integer.valueOf(var1)}); + this.renderEngine.bindTexture(var2); + } + + private float renderUnicodeChar(char var1, boolean var2) { + if(this.glyphWidth[var1] == 0) { + return 0.0F; + } else { + int var3 = var1 / 256; + this.loadGlyphTexture(var3); + int var4 = this.glyphWidth[var1] >>> 4; + int var5 = this.glyphWidth[var1] & 15; + float var6 = (float)var4; + float var7 = (float)(var5 + 1); + float var8 = (float)(var1 % 16 * 16) + var6; + float var9 = (float)((var1 & 255) / 16 * 16); + float var10 = var7 - var6 - 0.02F; + float var11 = var2 ? 1.0F : 0.0F; + GL11.glBegin(GL11.GL_TRIANGLE_STRIP); + GL11.glTexCoord2f(var8 / 256.0F, var9 / 256.0F); + GL11.glVertex3f(this.posX + var11, this.posY, 0.0F); + GL11.glTexCoord2f(var8 / 256.0F, (var9 + 15.98F) / 256.0F); + GL11.glVertex3f(this.posX - var11, this.posY + 7.99F, 0.0F); + GL11.glTexCoord2f((var8 + var10) / 256.0F, var9 / 256.0F); + GL11.glVertex3f(this.posX + var10 / 2.0F + var11, this.posY, 0.0F); + GL11.glTexCoord2f((var8 + var10) / 256.0F, (var9 + 15.98F) / 256.0F); + GL11.glVertex3f(this.posX + var10 / 2.0F - var11, this.posY + 7.99F, 0.0F); + GL11.glEnd(); + return (var7 - var6) / 2.0F + 1.0F; + } + } + + public int drawStringWithShadow(String var1, int var2, int var3, int var4) { + return this.drawString(var1, var2, var3, var4, true); + } + + public int drawString(String var1, int var2, int var3, int var4) { + return this.drawString(var1, var2, var3, var4, false); + } + + public int drawString(String var1, int var2, int var3, int var4, boolean var5) { + this.resetStyles(); + if(this.bidiFlag) { + var1 = this.bidiReorder(var1); + } + + int var6; + if(var5) { + var6 = this.renderString(var1, var2 + 1, var3 + 1, var4, true); + var6 = Math.max(var6, this.renderString(var1, var2, var3, var4, false)); + } else { + var6 = this.renderString(var1, var2, var3, var4, false); + } + + return var6; + } + + private String bidiReorder(String var1) { + if(var1 != null && Bidi.requiresBidi(var1.toCharArray(), 0, var1.length())) { + Bidi var2 = new Bidi(var1, -2); + byte[] var3 = new byte[var2.getRunCount()]; + String[] var4 = new String[var3.length]; + + int var7; + for(int var5 = 0; var5 < var3.length; ++var5) { + int var6 = var2.getRunStart(var5); + var7 = var2.getRunLimit(var5); + int var8 = var2.getRunLevel(var5); + String var9 = var1.substring(var6, var7); + var3[var5] = (byte)var8; + var4[var5] = var9; + } + + String[] var11 = (String[])var4.clone(); + Bidi.reorderVisually(var3, 0, var4, 0, var3.length); + StringBuilder var12 = new StringBuilder(); + + for(var7 = 0; var7 < var4.length; ++var7) { + byte var13 = var3[var7]; + + int var14; + for(var14 = 0; var14 < var11.length; ++var14) { + if(var11[var14].equals(var4[var7])) { + var13 = var3[var14]; + break; + } + } + + if((var13 & 1) == 0) { + var12.append(var4[var7]); + } else { + for(var14 = var4[var7].length() - 1; var14 >= 0; --var14) { + char var10 = var4[var7].charAt(var14); + if(var10 == 40) { + var10 = 41; + } else if(var10 == 41) { + var10 = 40; + } + + var12.append(var10); + } + } + } + + return var12.toString(); + } else { + return var1; + } + } + + private void resetStyles() { + this.randomStyle = false; + this.boldStyle = false; + this.italicStyle = false; + this.underlineStyle = false; + this.strikethroughStyle = false; + } + + private void renderStringAtPos(String var1, boolean var2) { + for(int var3 = 0; var3 < var1.length(); ++var3) { + char var4 = var1.charAt(var3); + int var5; + int var6; + if(var4 == 167 && var3 + 1 < var1.length()) { + var5 = "0123456789abcdefklmnor".indexOf(var1.toLowerCase().charAt(var3 + 1)); + if(var5 < 16) { + this.randomStyle = false; + this.boldStyle = false; + this.strikethroughStyle = false; + this.underlineStyle = false; + this.italicStyle = false; + if(var5 < 0 || var5 > 15) { + var5 = 15; + } + + if(var2) { + var5 += 16; + } + + var6 = this.colorCode[var5]; + this.textColor = var6; + GL11.glColor4f((float)(var6 >> 16) / 255.0F, (float)(var6 >> 8 & 255) / 255.0F, (float)(var6 & 255) / 255.0F, this.alpha); + } else if(var5 == 16) { + this.randomStyle = true; + } else if(var5 == 17) { + this.boldStyle = true; + } else if(var5 == 18) { + this.strikethroughStyle = true; + } else if(var5 == 19) { + this.underlineStyle = true; + } else if(var5 == 20) { + this.italicStyle = true; + } else if(var5 == 21) { + this.randomStyle = false; + this.boldStyle = false; + this.strikethroughStyle = false; + this.underlineStyle = false; + this.italicStyle = false; + GL11.glColor4f(this.red, this.blue, this.green, this.alpha); + } + + ++var3; + } else { + var5 = ChatAllowedCharacters.allowedCharacters.indexOf(var4); + if(this.randomStyle && var5 > 0) { + do { + var6 = this.fontRandom.nextInt(ChatAllowedCharacters.allowedCharacters.length()); + } while(this.charWidth[var5 + 32] != this.charWidth[var6 + 32]); + + var5 = var6; + } + + float var11 = this.unicodeFlag ? 0.5F : 1.0F; + boolean var7 = (var5 <= 0 || this.unicodeFlag) && var2; + if(var7) { + this.posX -= var11; + this.posY -= var11; + } + + float var8 = this.renderCharAtPos(var5, var4, this.italicStyle); + if(var7) { + this.posX += var11; + this.posY += var11; + } + + if(this.boldStyle) { + this.posX += var11; + if(var7) { + this.posX -= var11; + this.posY -= var11; + } + + this.renderCharAtPos(var5, var4, this.italicStyle); + this.posX -= var11; + if(var7) { + this.posX += var11; + this.posY += var11; + } + + ++var8; + } + + Tessellator var9; + if(this.strikethroughStyle) { + var9 = Tessellator.instance; + GL11.glDisable(GL11.GL_TEXTURE_2D); + var9.startDrawingQuads(); + var9.addVertex((double)this.posX, (double)(this.posY + (float)(this.FONT_HEIGHT / 2)), 0.0D); + var9.addVertex((double)(this.posX + var8), (double)(this.posY + (float)(this.FONT_HEIGHT / 2)), 0.0D); + var9.addVertex((double)(this.posX + var8), (double)(this.posY + (float)(this.FONT_HEIGHT / 2) - 1.0F), 0.0D); + var9.addVertex((double)this.posX, (double)(this.posY + (float)(this.FONT_HEIGHT / 2) - 1.0F), 0.0D); + var9.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + if(this.underlineStyle) { + var9 = Tessellator.instance; + GL11.glDisable(GL11.GL_TEXTURE_2D); + var9.startDrawingQuads(); + int var10 = this.underlineStyle ? -1 : 0; + var9.addVertex((double)(this.posX + (float)var10), (double)(this.posY + (float)this.FONT_HEIGHT), 0.0D); + var9.addVertex((double)(this.posX + var8), (double)(this.posY + (float)this.FONT_HEIGHT), 0.0D); + var9.addVertex((double)(this.posX + var8), (double)(this.posY + (float)this.FONT_HEIGHT - 1.0F), 0.0D); + var9.addVertex((double)(this.posX + (float)var10), (double)(this.posY + (float)this.FONT_HEIGHT - 1.0F), 0.0D); + var9.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + this.posX += (float)((int)var8); + } + } + + } + + private int renderStringAligned(String var1, int var2, int var3, int var4, int var5, boolean var6) { + if(this.bidiFlag) { + var1 = this.bidiReorder(var1); + int var7 = this.getStringWidth(var1); + var2 = var2 + var4 - var7; + } + + return this.renderString(var1, var2, var3, var5, var6); + } + + private int renderString(String var1, int var2, int var3, int var4, boolean var5) { + if(var1 == null) { + return 0; + } else { + if((var4 & -67108864) == 0) { + var4 |= -16777216; + } + + if(var5) { + var4 = (var4 & 16579836) >> 2 | var4 & -16777216; + } + + this.red = (float)(var4 >> 16 & 255) / 255.0F; + this.blue = (float)(var4 >> 8 & 255) / 255.0F; + this.green = (float)(var4 & 255) / 255.0F; + this.alpha = (float)(var4 >> 24 & 255) / 255.0F; + GL11.glColor4f(this.red, this.blue, this.green, this.alpha); + this.posX = (float)var2; + this.posY = (float)var3; + this.renderStringAtPos(var1, var5); + return (int)this.posX; + } + } + + public int getStringWidth(String var1) { + if(var1 == null) { + return 0; + } else { + int var2 = 0; + boolean var3 = false; + + for(int var4 = 0; var4 < var1.length(); ++var4) { + char var5 = var1.charAt(var4); + int var6 = this.getCharWidth(var5); + if(var6 < 0 && var4 < var1.length() - 1) { + ++var4; + var5 = var1.charAt(var4); + if(var5 != 108 && var5 != 76) { + if(var5 == 114 || var5 == 82) { + var3 = false; + } + } else { + var3 = true; + } + + var6 = 0; + } + + var2 += var6; + if(var3) { + ++var2; + } + } + + return var2; + } + } + + public int getCharWidth(char var1) { + if(var1 == 167) { + return -1; + } else if(var1 == 32) { + return 4; + } else { + int var2 = ChatAllowedCharacters.allowedCharacters.indexOf(var1); + if(var2 >= 0 && !this.unicodeFlag) { + return this.charWidth[var2 + 32]; + } else if(this.glyphWidth[var1] != 0) { + int var3 = this.glyphWidth[var1] >>> 4; + int var4 = this.glyphWidth[var1] & 15; + if(var4 > 7) { + var4 = 15; + var3 = 0; + } + + ++var4; + return (var4 - var3) / 2 + 1; + } else { + return 0; + } + } + } + + public String trimStringToWidth(String var1, int var2) { + return this.trimStringToWidth(var1, var2, false); + } + + public String trimStringToWidth(String var1, int var2, boolean var3) { + StringBuilder var4 = new StringBuilder(); + int var5 = 0; + int var6 = var3 ? var1.length() - 1 : 0; + int var7 = var3 ? -1 : 1; + boolean var8 = false; + boolean var9 = false; + + for(int var10 = var6; var10 >= 0 && var10 < var1.length() && var5 < var2; var10 += var7) { + char var11 = var1.charAt(var10); + int var12 = this.getCharWidth(var11); + if(var8) { + var8 = false; + if(var11 != 108 && var11 != 76) { + if(var11 == 114 || var11 == 82) { + var9 = false; + } + } else { + var9 = true; + } + } else if(var12 < 0) { + var8 = true; + } else { + var5 += var12; + if(var9) { + ++var5; + } + } + + if(var5 > var2) { + break; + } + + if(var3) { + var4.insert(0, var11); + } else { + var4.append(var11); + } + } + + return var4.toString(); + } + + private String trimStringNewline(String var1) { + while(var1 != null && var1.endsWith("\n")) { + var1 = var1.substring(0, var1.length() - 1); + } + + return var1; + } + + public void drawSplitString(String var1, int var2, int var3, int var4, int var5) { + this.resetStyles(); + this.textColor = var5; + var1 = this.trimStringNewline(var1); + this.renderSplitString(var1, var2, var3, var4, false); + } + + private void renderSplitString(String var1, int var2, int var3, int var4, boolean var5) { + List var6 = this.listFormattedStringToWidth(var1, var4); + + for(Iterator var7 = var6.iterator(); var7.hasNext(); var3 += this.FONT_HEIGHT) { + String var8 = (String)var7.next(); + this.renderStringAligned(var8, var2, var3, var4, this.textColor, var5); + } + + } + + public int splitStringWidth(String var1, int var2) { + return this.FONT_HEIGHT * this.listFormattedStringToWidth(var1, var2).size(); + } + + public void setUnicodeFlag(boolean var1) { + this.unicodeFlag = var1; + } + + public boolean getUnicodeFlag() { + return this.unicodeFlag; + } + + public void setBidiFlag(boolean var1) { + this.bidiFlag = var1; + } + + public List listFormattedStringToWidth(String var1, int var2) { + return Arrays.asList(this.wrapFormattedStringToWidth(var1, var2).split("\n")); + } + + String wrapFormattedStringToWidth(String var1, int var2) { + int var3 = this.sizeStringToWidth(var1, var2); + if(var1.length() <= var3) { + return var1; + } else { + String var4 = var1.substring(0, var3); + char var5 = var1.charAt(var3); + boolean var6 = var5 == 32 || var5 == 10; + String var7 = getFormatFromString(var4) + var1.substring(var3 + (var6 ? 1 : 0)); + return var4 + "\n" + this.wrapFormattedStringToWidth(var7, var2); + } + } + + private int sizeStringToWidth(String var1, int var2) { + int var3 = var1.length(); + int var4 = 0; + int var5 = 0; + int var6 = -1; + + for(boolean var7 = false; var5 < var3; ++var5) { + char var8 = var1.charAt(var5); + switch(var8) { + case '\n': + --var5; + break; + case ' ': + var6 = var5; + default: + var4 += this.getCharWidth(var8); + if(var7) { + ++var4; + } + break; + case '\u00a7': + if(var5 < var3 - 1) { + ++var5; + char var9 = var1.charAt(var5); + if(var9 != 108 && var9 != 76) { + if(var9 == 114 || var9 == 82 || isFormatColor(var9)) { + var7 = false; + } + } else { + var7 = true; + } + } + } + + if(var8 == 10) { + ++var5; + var6 = var5; + break; + } + + if(var4 > var2) { + break; + } + } + + return var5 != var3 && var6 != -1 && var6 < var5 ? var6 : var5; + } + + private static boolean isFormatColor(char var0) { + return var0 >= 48 && var0 <= 57 || var0 >= 97 && var0 <= 102 || var0 >= 65 && var0 <= 70; + } + + private static boolean isFormatSpecial(char var0) { + return var0 >= 107 && var0 <= 111 || var0 >= 75 && var0 <= 79 || var0 == 114 || var0 == 82; + } + + private static String getFormatFromString(String var0) { + String var1 = ""; + int var2 = -1; + int var3 = var0.length(); + + while(true) { + var2 = var0.indexOf(167, var2 + 1); + if(var2 == -1) { + return var1; + } + + if(var2 < var3 - 1) { + char var4 = var0.charAt(var2 + 1); + if(isFormatColor(var4)) { + var1 = "\u00a7" + var4; + } else if(isFormatSpecial(var4)) { + var1 = var1 + "\u00a7" + var4; + } + } + } + } + + public boolean getBidiFlag() { + return this.bidiFlag; + } +} diff --git a/src/net/minecraft/src/FoodStats.java b/src/net/minecraft/src/FoodStats.java new file mode 100644 index 0000000..08cfe78 --- /dev/null +++ b/src/net/minecraft/src/FoodStats.java @@ -0,0 +1,96 @@ +package net.minecraft.src; + +public class FoodStats { + private int foodLevel = 20; + private float foodSaturationLevel = 5.0F; + private float foodExhaustionLevel; + private int foodTimer = 0; + private int prevFoodLevel = 20; + + public void addStats(int var1, float var2) { + this.foodLevel = Math.min(var1 + this.foodLevel, 20); + this.foodSaturationLevel = Math.min(this.foodSaturationLevel + (float)var1 * var2 * 2.0F, (float)this.foodLevel); + } + + public void addStats(ItemFood var1) { + this.addStats(var1.getHealAmount(), var1.getSaturationModifier()); + } + + public void onUpdate(EntityPlayer var1) { + int var2 = var1.worldObj.difficultySetting; + 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(var2 > 0) { + this.foodLevel = Math.max(this.foodLevel - 1, 0); + } + } + + if(this.foodLevel >= 18 && var1.shouldHeal()) { + ++this.foodTimer; + if(this.foodTimer >= 80) { + var1.heal(1); + this.foodTimer = 0; + } + } else if(this.foodLevel <= 0) { + ++this.foodTimer; + if(this.foodTimer >= 80) { + if(var1.getHealth() > 10 || var2 >= 3 || var1.getHealth() > 1 && var2 >= 2) { + var1.attackEntityFrom(DamageSource.starve, 1); + } + + this.foodTimer = 0; + } + } else { + this.foodTimer = 0; + } + + } + + public void readNBT(NBTTagCompound var1) { + if(var1.hasKey("foodLevel")) { + this.foodLevel = var1.getInteger("foodLevel"); + this.foodTimer = var1.getInteger("foodTickTimer"); + this.foodSaturationLevel = var1.getFloat("foodSaturationLevel"); + this.foodExhaustionLevel = var1.getFloat("foodExhaustionLevel"); + } + + } + + public void writeNBT(NBTTagCompound var1) { + var1.setInteger("foodLevel", this.foodLevel); + var1.setInteger("foodTickTimer", this.foodTimer); + var1.setFloat("foodSaturationLevel", this.foodSaturationLevel); + var1.setFloat("foodExhaustionLevel", this.foodExhaustionLevel); + } + + public int getFoodLevel() { + return this.foodLevel; + } + + public int getPrevFoodLevel() { + return this.prevFoodLevel; + } + + public boolean needFood() { + return this.foodLevel < 20; + } + + public void addExhaustion(float var1) { + this.foodExhaustionLevel = Math.min(this.foodExhaustionLevel + var1, 40.0F); + } + + public float getSaturationLevel() { + return this.foodSaturationLevel; + } + + public void setFoodLevel(int var1) { + this.foodLevel = var1; + } + + public void setFoodSaturationLevel(float var1) { + this.foodSaturationLevel = var1; + } +} diff --git a/src/net/minecraft/src/Frustrum.java b/src/net/minecraft/src/Frustrum.java new file mode 100644 index 0000000..2f3af1a --- /dev/null +++ b/src/net/minecraft/src/Frustrum.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +public class Frustrum implements ICamera { + private ClippingHelper clippingHelper = ClippingHelperImpl.getInstance(); + private double xPosition; + private double yPosition; + private double zPosition; + + public void setPosition(double var1, double var3, double var5) { + this.xPosition = var1; + this.yPosition = var3; + this.zPosition = var5; + } + + public boolean isBoxInFrustum(double var1, double var3, double var5, double var7, double var9, double var11) { + return this.clippingHelper.isBoxInFrustum(var1 - this.xPosition, var3 - this.yPosition, var5 - this.zPosition, var7 - this.xPosition, var9 - this.yPosition, var11 - this.zPosition); + } + + public boolean isBoundingBoxInFrustum(AxisAlignedBB var1) { + return this.isBoxInFrustum(var1.minX, var1.minY, var1.minZ, var1.maxX, var1.maxY, var1.maxZ); + } +} diff --git a/src/net/minecraft/src/FurnaceRecipes.java b/src/net/minecraft/src/FurnaceRecipes.java new file mode 100644 index 0000000..05fcfff --- /dev/null +++ b/src/net/minecraft/src/FurnaceRecipes.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; + +public class FurnaceRecipes { + private static final FurnaceRecipes smeltingBase = new FurnaceRecipes(); + private Map smeltingList = new HashMap(); + private Map experienceList = new HashMap(); + + public static final FurnaceRecipes smelting() { + return smeltingBase; + } + + private FurnaceRecipes() { + this.addSmelting(Block.oreIron.blockID, new ItemStack(Item.ingotIron), 0.7F); + this.addSmelting(Block.oreGold.blockID, new ItemStack(Item.ingotGold), 1.0F); + this.addSmelting(Block.oreDiamond.blockID, new ItemStack(Item.diamond), 1.0F); + this.addSmelting(Block.sand.blockID, new ItemStack(Block.glass), 0.1F); + this.addSmelting(Item.porkRaw.itemID, new ItemStack(Item.porkCooked), 0.35F); + this.addSmelting(Item.beefRaw.itemID, new ItemStack(Item.beefCooked), 0.35F); + this.addSmelting(Item.chickenRaw.itemID, new ItemStack(Item.chickenCooked), 0.35F); + this.addSmelting(Item.fishRaw.itemID, new ItemStack(Item.fishCooked), 0.35F); + this.addSmelting(Block.cobblestone.blockID, new ItemStack(Block.stone), 0.1F); + this.addSmelting(Item.clay.itemID, new ItemStack(Item.brick), 0.3F); + this.addSmelting(Block.cactus.blockID, new ItemStack(Item.dyePowder, 1, 2), 0.2F); + this.addSmelting(Block.wood.blockID, new ItemStack(Item.coal, 1, 1), 0.15F); + this.addSmelting(Block.oreEmerald.blockID, new ItemStack(Item.emerald), 1.0F); + this.addSmelting(Item.potato.itemID, new ItemStack(Item.bakedPotato), 0.35F); + this.addSmelting(Block.netherrack.blockID, new ItemStack(Item.netherrackBrick), 0.1F); + this.addSmelting(Block.oreCoal.blockID, new ItemStack(Item.coal), 0.1F); + this.addSmelting(Block.oreRedstone.blockID, new ItemStack(Item.redstone), 0.7F); + this.addSmelting(Block.oreLapis.blockID, new ItemStack(Item.dyePowder, 1, 4), 0.2F); + this.addSmelting(Block.oreNetherQuartz.blockID, new ItemStack(Item.netherQuartz), 0.2F); + } + + public void addSmelting(int var1, ItemStack var2, float var3) { + this.smeltingList.put(Integer.valueOf(var1), var2); + this.experienceList.put(Integer.valueOf(var2.itemID), Float.valueOf(var3)); + } + + public ItemStack getSmeltingResult(int var1) { + return (ItemStack)this.smeltingList.get(Integer.valueOf(var1)); + } + + public Map getSmeltingList() { + return this.smeltingList; + } + + public float getExperience(int var1) { + return this.experienceList.containsKey(Integer.valueOf(var1)) ? ((Float)this.experienceList.get(Integer.valueOf(var1))).floatValue() : 0.0F; + } +} diff --git a/src/net/minecraft/src/GLAllocation.java b/src/net/minecraft/src/GLAllocation.java new file mode 100644 index 0000000..e080ea7 --- /dev/null +++ b/src/net/minecraft/src/GLAllocation.java @@ -0,0 +1,66 @@ +package net.minecraft.src; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import org.lwjgl.opengl.GL11; + +public class GLAllocation { + private static final Map field_74531_a = new HashMap(); + private static final List field_74530_b = new ArrayList(); + + public static synchronized int generateDisplayLists(int var0) { + int var1 = GL11.glGenLists(var0); + field_74531_a.put(Integer.valueOf(var1), Integer.valueOf(var0)); + return var1; + } + + public static synchronized int generateTextureNames() { + int var0 = GL11.glGenTextures(); + field_74530_b.add(Integer.valueOf(var0)); + return var0; + } + + public static synchronized void deleteDisplayLists(int var0) { + GL11.glDeleteLists(var0, ((Integer)field_74531_a.remove(Integer.valueOf(var0))).intValue()); + } + + public static synchronized void func_98302_b() { + for(int var0 = 0; var0 < field_74530_b.size(); ++var0) { + GL11.glDeleteTextures(((Integer)field_74530_b.get(var0)).intValue()); + } + + field_74530_b.clear(); + } + + public static synchronized void deleteTexturesAndDisplayLists() { + Iterator var0 = field_74531_a.entrySet().iterator(); + + while(var0.hasNext()) { + Entry var1 = (Entry)var0.next(); + GL11.glDeleteLists(((Integer)var1.getKey()).intValue(), ((Integer)var1.getValue()).intValue()); + } + + field_74531_a.clear(); + func_98302_b(); + } + + public static synchronized ByteBuffer createDirectByteBuffer(int var0) { + return ByteBuffer.allocateDirect(var0).order(ByteOrder.nativeOrder()); + } + + public static IntBuffer createDirectIntBuffer(int var0) { + return createDirectByteBuffer(var0 << 2).asIntBuffer(); + } + + public static FloatBuffer createDirectFloatBuffer(int var0) { + return createDirectByteBuffer(var0 << 2).asFloatBuffer(); + } +} diff --git a/src/net/minecraft/src/GameRuleValue.java b/src/net/minecraft/src/GameRuleValue.java new file mode 100644 index 0000000..f20e56c --- /dev/null +++ b/src/net/minecraft/src/GameRuleValue.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +class GameRuleValue { + private String valueString; + private boolean valueBoolean; + private int valueInteger; + private double valueDouble; + + public GameRuleValue(String var1) { + this.setValue(var1); + } + + public void setValue(String var1) { + this.valueString = var1; + this.valueBoolean = Boolean.parseBoolean(var1); + + try { + this.valueInteger = Integer.parseInt(var1); + } catch (NumberFormatException var4) { + } + + try { + this.valueDouble = Double.parseDouble(var1); + } catch (NumberFormatException var3) { + } + + } + + public String getGameRuleStringValue() { + return this.valueString; + } + + public boolean getGameRuleBooleanValue() { + return this.valueBoolean; + } +} diff --git a/src/net/minecraft/src/GameRules.java b/src/net/minecraft/src/GameRules.java new file mode 100644 index 0000000..87f21af --- /dev/null +++ b/src/net/minecraft/src/GameRules.java @@ -0,0 +1,77 @@ +package net.minecraft.src; + +import java.util.Collection; +import java.util.Iterator; +import java.util.TreeMap; + +public class GameRules { + private TreeMap theGameRules = new TreeMap(); + + public GameRules() { + this.addGameRule("doFireTick", "true"); + this.addGameRule("mobGriefing", "true"); + this.addGameRule("keepInventory", "false"); + this.addGameRule("doMobSpawning", "true"); + this.addGameRule("doMobLoot", "true"); + this.addGameRule("doTileDrops", "true"); + this.addGameRule("commandBlockOutput", "true"); + } + + public void addGameRule(String var1, String var2) { + this.theGameRules.put(var1, new GameRuleValue(var2)); + } + + public void setOrCreateGameRule(String var1, String var2) { + GameRuleValue var3 = (GameRuleValue)this.theGameRules.get(var1); + if(var3 != null) { + var3.setValue(var2); + } else { + this.addGameRule(var1, var2); + } + + } + + public String getGameRuleStringValue(String var1) { + GameRuleValue var2 = (GameRuleValue)this.theGameRules.get(var1); + return var2 != null ? var2.getGameRuleStringValue() : ""; + } + + public boolean getGameRuleBooleanValue(String var1) { + GameRuleValue var2 = (GameRuleValue)this.theGameRules.get(var1); + return var2 != null ? var2.getGameRuleBooleanValue() : false; + } + + public NBTTagCompound writeGameRulesToNBT() { + NBTTagCompound var1 = new NBTTagCompound("GameRules"); + Iterator var2 = this.theGameRules.keySet().iterator(); + + while(var2.hasNext()) { + String var3 = (String)var2.next(); + GameRuleValue var4 = (GameRuleValue)this.theGameRules.get(var3); + var1.setString(var3, var4.getGameRuleStringValue()); + } + + return var1; + } + + public void readGameRulesFromNBT(NBTTagCompound var1) { + Collection var2 = var1.getTags(); + Iterator var3 = var2.iterator(); + + while(var3.hasNext()) { + NBTBase var4 = (NBTBase)var3.next(); + String var5 = var4.getName(); + String var6 = var1.getString(var4.getName()); + this.setOrCreateGameRule(var5, var6); + } + + } + + public String[] getRules() { + return (String[])this.theGameRules.keySet().toArray(new String[0]); + } + + public boolean hasRule(String var1) { + return this.theGameRules.containsKey(var1); + } +} diff --git a/src/net/minecraft/src/GameSettings.java b/src/net/minecraft/src/GameSettings.java new file mode 100644 index 0000000..ec946a7 --- /dev/null +++ b/src/net/minecraft/src/GameSettings.java @@ -0,0 +1,610 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.PrintWriter; +import net.minecraft.client.Minecraft; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.Display; + +public class GameSettings { + private static final String[] RENDER_DISTANCES = new String[]{"options.renderDistance.far", "options.renderDistance.normal", "options.renderDistance.short", "options.renderDistance.tiny"}; + private static final String[] DIFFICULTIES = new String[]{"options.difficulty.peaceful", "options.difficulty.easy", "options.difficulty.normal", "options.difficulty.hard"}; + private static final String[] GUISCALES = new String[]{"options.guiScale.auto", "options.guiScale.small", "options.guiScale.normal", "options.guiScale.large"}; + private static final String[] CHAT_VISIBILITIES = new String[]{"options.chat.visibility.full", "options.chat.visibility.system", "options.chat.visibility.hidden"}; + private static final String[] PARTICLES = new String[]{"options.particles.all", "options.particles.decreased", "options.particles.minimal"}; + private static final String[] LIMIT_FRAMERATES = new String[]{"performance.max", "performance.balanced", "performance.powersaver"}; + private static final String[] AMBIENT_OCCLUSIONS = new String[]{"options.ao.off", "options.ao.min", "options.ao.max"}; + public float musicVolume = 1.0F; + public float soundVolume = 1.0F; + public float mouseSensitivity = 0.5F; + public boolean invertMouse = false; + public int renderDistance = 0; + public boolean viewBobbing = true; + public boolean anaglyph = false; + public boolean advancedOpengl = false; + public int limitFramerate = 1; + public boolean fancyGraphics = true; + public int ambientOcclusion = 2; + public boolean clouds = true; + public String skin = "Default"; + public int chatVisibility = 0; + public boolean chatColours = true; + public boolean chatLinks = true; + public boolean chatLinksPrompt = true; + public float chatOpacity = 1.0F; + public boolean serverTextures = true; + public boolean snooperEnabled = true; + public boolean fullScreen = false; + public boolean enableVsync = true; + public boolean hideServerAddress = false; + public boolean advancedItemTooltips = false; + public boolean pauseOnLostFocus = true; + public boolean showCape = true; + public boolean touchscreen = false; + public int overrideWidth = 0; + public int overrideHeight = 0; + 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 KeyBinding keyBindForward = new KeyBinding("key.forward", 17); + public KeyBinding keyBindLeft = new KeyBinding("key.left", 30); + public KeyBinding keyBindBack = new KeyBinding("key.back", 31); + public KeyBinding keyBindRight = new KeyBinding("key.right", 32); + public KeyBinding keyBindJump = new KeyBinding("key.jump", 57); + public KeyBinding keyBindInventory = new KeyBinding("key.inventory", 18); + public KeyBinding keyBindDrop = new KeyBinding("key.drop", 16); + public KeyBinding keyBindChat = new KeyBinding("key.chat", 20); + public KeyBinding keyBindSneak = new KeyBinding("key.sneak", 42); + public KeyBinding keyBindAttack = new KeyBinding("key.attack", -100); + public KeyBinding keyBindUseItem = new KeyBinding("key.use", -99); + public KeyBinding keyBindPlayerList = new KeyBinding("key.playerlist", 15); + public KeyBinding keyBindPickBlock = new KeyBinding("key.pickItem", -98); + public KeyBinding keyBindCommand = new KeyBinding("key.command", 53); + public KeyBinding[] keyBindings = new KeyBinding[]{this.keyBindAttack, this.keyBindUseItem, this.keyBindForward, this.keyBindLeft, this.keyBindBack, this.keyBindRight, this.keyBindJump, this.keyBindSneak, this.keyBindDrop, this.keyBindInventory, this.keyBindChat, this.keyBindPlayerList, this.keyBindPickBlock, this.keyBindCommand}; + protected Minecraft mc; + private File optionsFile; + public int difficulty = 2; + public boolean hideGUI = false; + public int thirdPersonView = 0; + public boolean showDebugInfo = false; + public boolean showDebugProfilerChart = false; + public String lastServer = ""; + public boolean noclip = false; + public boolean smoothCamera = false; + public boolean debugCamEnable = false; + public float noclipRate = 1.0F; + public float debugCamRate = 1.0F; + public float fovSetting = 0.0F; + public float gammaSetting = 0.0F; + public int guiScale = 0; + public int particleSetting = 0; + public String language = "en_US"; + + public GameSettings(Minecraft var1, File var2) { + this.mc = var1; + this.optionsFile = new File(var2, "options.txt"); + this.loadOptions(); + } + + public GameSettings() { + } + + public String getKeyBindingDescription(int var1) { + StringTranslate var2 = StringTranslate.getInstance(); + return var2.translateKey(this.keyBindings[var1].keyDescription); + } + + public String getOptionDisplayString(int var1) { + int var2 = this.keyBindings[var1].keyCode; + return getKeyDisplayString(var2); + } + + public static String getKeyDisplayString(int var0) { + return var0 < 0 ? StatCollector.translateToLocalFormatted("key.mouseButton", new Object[]{Integer.valueOf(var0 + 101)}) : Keyboard.getKeyName(var0); + } + + public static boolean isKeyDown(KeyBinding var0) { + return var0.keyCode < 0 ? Mouse.isButtonDown(var0.keyCode + 100) : Keyboard.isKeyDown(var0.keyCode); + } + + public void setKeyBinding(int var1, int var2) { + this.keyBindings[var1].keyCode = var2; + this.saveOptions(); + } + + public void setOptionFloatValue(EnumOptions var1, float var2) { + if(var1 == EnumOptions.MUSIC) { + this.musicVolume = var2; + this.mc.sndManager.onSoundOptionsChanged(); + } + + if(var1 == EnumOptions.SOUND) { + this.soundVolume = var2; + this.mc.sndManager.onSoundOptionsChanged(); + } + + if(var1 == EnumOptions.SENSITIVITY) { + this.mouseSensitivity = var2; + } + + if(var1 == EnumOptions.FOV) { + this.fovSetting = var2; + } + + if(var1 == EnumOptions.GAMMA) { + this.gammaSetting = var2; + } + + if(var1 == EnumOptions.CHAT_OPACITY) { + this.chatOpacity = var2; + this.mc.ingameGUI.getChatGUI().func_96132_b(); + } + + if(var1 == EnumOptions.CHAT_HEIGHT_FOCUSED) { + this.chatHeightFocused = var2; + this.mc.ingameGUI.getChatGUI().func_96132_b(); + } + + if(var1 == EnumOptions.CHAT_HEIGHT_UNFOCUSED) { + this.chatHeightUnfocused = var2; + this.mc.ingameGUI.getChatGUI().func_96132_b(); + } + + if(var1 == EnumOptions.CHAT_WIDTH) { + this.chatWidth = var2; + this.mc.ingameGUI.getChatGUI().func_96132_b(); + } + + if(var1 == EnumOptions.CHAT_SCALE) { + this.chatScale = var2; + this.mc.ingameGUI.getChatGUI().func_96132_b(); + } + + } + + public void setOptionValue(EnumOptions var1, int var2) { + if(var1 == EnumOptions.INVERT_MOUSE) { + this.invertMouse = !this.invertMouse; + } + + if(var1 == EnumOptions.RENDER_DISTANCE) { + this.renderDistance = this.renderDistance + var2 & 3; + } + + if(var1 == EnumOptions.GUI_SCALE) { + this.guiScale = this.guiScale + var2 & 3; + } + + if(var1 == EnumOptions.PARTICLES) { + this.particleSetting = (this.particleSetting + var2) % 3; + } + + if(var1 == EnumOptions.VIEW_BOBBING) { + this.viewBobbing = !this.viewBobbing; + } + + if(var1 == EnumOptions.RENDER_CLOUDS) { + this.clouds = !this.clouds; + } + + if(var1 == EnumOptions.ADVANCED_OPENGL) { + this.advancedOpengl = !this.advancedOpengl; + this.mc.renderGlobal.loadRenderers(); + } + + if(var1 == EnumOptions.ANAGLYPH) { + this.anaglyph = !this.anaglyph; + this.mc.renderEngine.refreshTextures(); + } + + if(var1 == EnumOptions.FRAMERATE_LIMIT) { + this.limitFramerate = (this.limitFramerate + var2 + 3) % 3; + } + + if(var1 == EnumOptions.DIFFICULTY) { + this.difficulty = this.difficulty + var2 & 3; + } + + if(var1 == EnumOptions.GRAPHICS) { + this.fancyGraphics = !this.fancyGraphics; + this.mc.renderGlobal.loadRenderers(); + } + + if(var1 == EnumOptions.AMBIENT_OCCLUSION) { + this.ambientOcclusion = (this.ambientOcclusion + var2) % 3; + this.mc.renderGlobal.loadRenderers(); + } + + if(var1 == EnumOptions.CHAT_VISIBILITY) { + this.chatVisibility = (this.chatVisibility + var2) % 3; + } + + if(var1 == EnumOptions.CHAT_COLOR) { + this.chatColours = !this.chatColours; + } + + if(var1 == EnumOptions.CHAT_LINKS) { + this.chatLinks = !this.chatLinks; + } + + if(var1 == EnumOptions.CHAT_LINKS_PROMPT) { + this.chatLinksPrompt = !this.chatLinksPrompt; + } + + if(var1 == EnumOptions.USE_SERVER_TEXTURES) { + this.serverTextures = !this.serverTextures; + } + + if(var1 == EnumOptions.SNOOPER_ENABLED) { + this.snooperEnabled = !this.snooperEnabled; + } + + if(var1 == EnumOptions.SHOW_CAPE) { + this.showCape = !this.showCape; + } + + if(var1 == EnumOptions.TOUCHSCREEN) { + this.touchscreen = !this.touchscreen; + } + + if(var1 == EnumOptions.USE_FULLSCREEN) { + this.fullScreen = !this.fullScreen; + if(this.mc.isFullScreen() != this.fullScreen) { + this.mc.toggleFullscreen(); + } + } + + if(var1 == EnumOptions.ENABLE_VSYNC) { + this.enableVsync = !this.enableVsync; + Display.setVSyncEnabled(this.enableVsync); + } + + this.saveOptions(); + } + + public float getOptionFloatValue(EnumOptions var1) { + return var1 == EnumOptions.FOV ? this.fovSetting : (var1 == EnumOptions.GAMMA ? this.gammaSetting : (var1 == EnumOptions.MUSIC ? this.musicVolume : (var1 == EnumOptions.SOUND ? this.soundVolume : (var1 == EnumOptions.SENSITIVITY ? this.mouseSensitivity : (var1 == EnumOptions.CHAT_OPACITY ? this.chatOpacity : (var1 == EnumOptions.CHAT_HEIGHT_FOCUSED ? this.chatHeightFocused : (var1 == EnumOptions.CHAT_HEIGHT_UNFOCUSED ? this.chatHeightUnfocused : (var1 == EnumOptions.CHAT_SCALE ? this.chatScale : (var1 == EnumOptions.CHAT_WIDTH ? this.chatWidth : 0.0F))))))))); + } + + public boolean getOptionOrdinalValue(EnumOptions var1) { + switch(EnumOptionsHelper.enumOptionsMappingHelperArray[var1.ordinal()]) { + case 1: + return this.invertMouse; + case 2: + return this.viewBobbing; + case 3: + return this.anaglyph; + case 4: + return this.advancedOpengl; + case 5: + return this.clouds; + case 6: + return this.chatColours; + case 7: + return this.chatLinks; + case 8: + return this.chatLinksPrompt; + case 9: + return this.serverTextures; + case 10: + return this.snooperEnabled; + case 11: + return this.fullScreen; + case 12: + return this.enableVsync; + case 13: + return this.showCape; + case 14: + return this.touchscreen; + default: + return false; + } + } + + private static String getTranslation(String[] var0, int var1) { + if(var1 < 0 || var1 >= var0.length) { + var1 = 0; + } + + StringTranslate var2 = StringTranslate.getInstance(); + return var2.translateKey(var0[var1]); + } + + public String getKeyBinding(EnumOptions var1) { + StringTranslate var2 = StringTranslate.getInstance(); + String var3 = var2.translateKey(var1.getEnumString()) + ": "; + if(var1.getEnumFloat()) { + float var5 = this.getOptionFloatValue(var1); + return var1 == EnumOptions.SENSITIVITY ? (var5 == 0.0F ? var3 + var2.translateKey("options.sensitivity.min") : (var5 == 1.0F ? var3 + var2.translateKey("options.sensitivity.max") : var3 + (int)(var5 * 200.0F) + "%")) : (var1 == EnumOptions.FOV ? (var5 == 0.0F ? var3 + var2.translateKey("options.fov.min") : (var5 == 1.0F ? var3 + var2.translateKey("options.fov.max") : var3 + (int)(70.0F + var5 * 40.0F))) : (var1 == EnumOptions.GAMMA ? (var5 == 0.0F ? var3 + var2.translateKey("options.gamma.min") : (var5 == 1.0F ? var3 + var2.translateKey("options.gamma.max") : var3 + "+" + (int)(var5 * 100.0F) + "%")) : (var1 == EnumOptions.CHAT_OPACITY ? var3 + (int)(var5 * 90.0F + 10.0F) + "%" : (var1 == EnumOptions.CHAT_HEIGHT_UNFOCUSED ? var3 + GuiNewChat.func_96130_b(var5) + "px" : (var1 == EnumOptions.CHAT_HEIGHT_FOCUSED ? var3 + GuiNewChat.func_96130_b(var5) + "px" : (var1 == EnumOptions.CHAT_WIDTH ? var3 + GuiNewChat.func_96128_a(var5) + "px" : (var5 == 0.0F ? var3 + var2.translateKey("options.off") : var3 + (int)(var5 * 100.0F) + "%"))))))); + } else if(var1.getEnumBoolean()) { + boolean var4 = this.getOptionOrdinalValue(var1); + return var4 ? var3 + var2.translateKey("options.on") : var3 + var2.translateKey("options.off"); + } else { + return var1 == EnumOptions.RENDER_DISTANCE ? var3 + getTranslation(RENDER_DISTANCES, this.renderDistance) : (var1 == EnumOptions.DIFFICULTY ? var3 + getTranslation(DIFFICULTIES, this.difficulty) : (var1 == EnumOptions.GUI_SCALE ? var3 + getTranslation(GUISCALES, this.guiScale) : (var1 == EnumOptions.CHAT_VISIBILITY ? var3 + getTranslation(CHAT_VISIBILITIES, this.chatVisibility) : (var1 == EnumOptions.PARTICLES ? var3 + getTranslation(PARTICLES, this.particleSetting) : (var1 == EnumOptions.FRAMERATE_LIMIT ? var3 + getTranslation(LIMIT_FRAMERATES, this.limitFramerate) : (var1 == EnumOptions.AMBIENT_OCCLUSION ? var3 + getTranslation(AMBIENT_OCCLUSIONS, this.ambientOcclusion) : (var1 == EnumOptions.GRAPHICS ? (this.fancyGraphics ? var3 + var2.translateKey("options.graphics.fancy") : var3 + var2.translateKey("options.graphics.fast")) : var3))))))); + } + } + + public void loadOptions() { + try { + if(!this.optionsFile.exists()) { + return; + } + + BufferedReader var1 = new BufferedReader(new FileReader(this.optionsFile)); + String var2 = ""; + + while(true) { + var2 = var1.readLine(); + if(var2 == null) { + KeyBinding.resetKeyBindingArrayAndHash(); + var1.close(); + break; + } + + try { + String[] var3 = var2.split(":"); + if(var3[0].equals("music")) { + this.musicVolume = this.parseFloat(var3[1]); + } + + if(var3[0].equals("sound")) { + this.soundVolume = this.parseFloat(var3[1]); + } + + if(var3[0].equals("mouseSensitivity")) { + this.mouseSensitivity = this.parseFloat(var3[1]); + } + + if(var3[0].equals("fov")) { + this.fovSetting = this.parseFloat(var3[1]); + } + + if(var3[0].equals("gamma")) { + this.gammaSetting = this.parseFloat(var3[1]); + } + + if(var3[0].equals("invertYMouse")) { + this.invertMouse = var3[1].equals("true"); + } + + if(var3[0].equals("viewDistance")) { + this.renderDistance = Integer.parseInt(var3[1]); + } + + if(var3[0].equals("guiScale")) { + this.guiScale = Integer.parseInt(var3[1]); + } + + if(var3[0].equals("particles")) { + this.particleSetting = Integer.parseInt(var3[1]); + } + + if(var3[0].equals("bobView")) { + this.viewBobbing = var3[1].equals("true"); + } + + if(var3[0].equals("anaglyph3d")) { + this.anaglyph = var3[1].equals("true"); + } + + if(var3[0].equals("advancedOpengl")) { + this.advancedOpengl = var3[1].equals("true"); + } + + if(var3[0].equals("fpsLimit")) { + this.limitFramerate = Integer.parseInt(var3[1]); + } + + if(var3[0].equals("difficulty")) { + this.difficulty = Integer.parseInt(var3[1]); + } + + if(var3[0].equals("fancyGraphics")) { + this.fancyGraphics = var3[1].equals("true"); + } + + if(var3[0].equals("ao")) { + if(var3[1].equals("true")) { + this.ambientOcclusion = 2; + } else if(var3[1].equals("false")) { + this.ambientOcclusion = 0; + } else { + this.ambientOcclusion = Integer.parseInt(var3[1]); + } + } + + if(var3[0].equals("clouds")) { + this.clouds = var3[1].equals("true"); + } + + if(var3[0].equals("skin")) { + this.skin = var3[1]; + } + + if(var3[0].equals("lastServer") && var3.length >= 2) { + this.lastServer = var3[1]; + } + + if(var3[0].equals("lang") && var3.length >= 2) { + this.language = var3[1]; + } + + if(var3[0].equals("chatVisibility")) { + this.chatVisibility = Integer.parseInt(var3[1]); + } + + if(var3[0].equals("chatColors")) { + this.chatColours = var3[1].equals("true"); + } + + if(var3[0].equals("chatLinks")) { + this.chatLinks = var3[1].equals("true"); + } + + if(var3[0].equals("chatLinksPrompt")) { + this.chatLinksPrompt = var3[1].equals("true"); + } + + if(var3[0].equals("chatOpacity")) { + this.chatOpacity = this.parseFloat(var3[1]); + } + + if(var3[0].equals("serverTextures")) { + this.serverTextures = var3[1].equals("true"); + } + + if(var3[0].equals("snooperEnabled")) { + this.snooperEnabled = var3[1].equals("true"); + } + + if(var3[0].equals("fullscreen")) { + this.fullScreen = var3[1].equals("true"); + } + + if(var3[0].equals("enableVsync")) { + this.enableVsync = var3[1].equals("true"); + } + + if(var3[0].equals("hideServerAddress")) { + this.hideServerAddress = var3[1].equals("true"); + } + + if(var3[0].equals("advancedItemTooltips")) { + this.advancedItemTooltips = var3[1].equals("true"); + } + + if(var3[0].equals("pauseOnLostFocus")) { + this.pauseOnLostFocus = var3[1].equals("true"); + } + + if(var3[0].equals("showCape")) { + this.showCape = var3[1].equals("true"); + } + + if(var3[0].equals("touchscreen")) { + this.touchscreen = var3[1].equals("true"); + } + + if(var3[0].equals("overrideHeight")) { + this.overrideHeight = Integer.parseInt(var3[1]); + } + + if(var3[0].equals("overrideWidth")) { + this.overrideWidth = Integer.parseInt(var3[1]); + } + + if(var3[0].equals("heldItemTooltips")) { + this.heldItemTooltips = var3[1].equals("true"); + } + + if(var3[0].equals("chatHeightFocused")) { + this.chatHeightFocused = this.parseFloat(var3[1]); + } + + if(var3[0].equals("chatHeightUnfocused")) { + this.chatHeightUnfocused = this.parseFloat(var3[1]); + } + + if(var3[0].equals("chatScale")) { + this.chatScale = this.parseFloat(var3[1]); + } + + if(var3[0].equals("chatWidth")) { + this.chatWidth = this.parseFloat(var3[1]); + } + + for(int var4 = 0; var4 < this.keyBindings.length; ++var4) { + if(var3[0].equals("key_" + this.keyBindings[var4].keyDescription)) { + this.keyBindings[var4].keyCode = Integer.parseInt(var3[1]); + } + } + } catch (Exception var5) { + this.mc.getLogAgent().logWarning("Skipping bad option: " + var2); + } + } + } catch (Exception var6) { + this.mc.getLogAgent().logWarning("Failed to load options"); + var6.printStackTrace(); + } + + } + + private float parseFloat(String var1) { + return var1.equals("true") ? 1.0F : (var1.equals("false") ? 0.0F : Float.parseFloat(var1)); + } + + public void saveOptions() { + try { + PrintWriter var1 = new PrintWriter(new FileWriter(this.optionsFile)); + var1.println("music:" + this.musicVolume); + var1.println("sound:" + this.soundVolume); + var1.println("invertYMouse:" + this.invertMouse); + var1.println("mouseSensitivity:" + this.mouseSensitivity); + var1.println("fov:" + this.fovSetting); + var1.println("gamma:" + this.gammaSetting); + var1.println("viewDistance:" + this.renderDistance); + var1.println("guiScale:" + this.guiScale); + var1.println("particles:" + this.particleSetting); + var1.println("bobView:" + this.viewBobbing); + var1.println("anaglyph3d:" + this.anaglyph); + var1.println("advancedOpengl:" + this.advancedOpengl); + var1.println("fpsLimit:" + this.limitFramerate); + var1.println("difficulty:" + this.difficulty); + var1.println("fancyGraphics:" + this.fancyGraphics); + var1.println("ao:" + this.ambientOcclusion); + var1.println("clouds:" + this.clouds); + var1.println("skin:" + this.skin); + var1.println("lastServer:" + this.lastServer); + var1.println("lang:" + this.language); + var1.println("chatVisibility:" + this.chatVisibility); + var1.println("chatColors:" + this.chatColours); + var1.println("chatLinks:" + this.chatLinks); + var1.println("chatLinksPrompt:" + this.chatLinksPrompt); + var1.println("chatOpacity:" + this.chatOpacity); + var1.println("serverTextures:" + this.serverTextures); + var1.println("snooperEnabled:" + this.snooperEnabled); + var1.println("fullscreen:" + this.fullScreen); + var1.println("enableVsync:" + this.enableVsync); + var1.println("hideServerAddress:" + this.hideServerAddress); + var1.println("advancedItemTooltips:" + this.advancedItemTooltips); + var1.println("pauseOnLostFocus:" + this.pauseOnLostFocus); + var1.println("showCape:" + this.showCape); + var1.println("touchscreen:" + this.touchscreen); + var1.println("overrideWidth:" + this.overrideWidth); + var1.println("overrideHeight:" + this.overrideHeight); + var1.println("heldItemTooltips:" + this.heldItemTooltips); + var1.println("chatHeightFocused:" + this.chatHeightFocused); + var1.println("chatHeightUnfocused:" + this.chatHeightUnfocused); + var1.println("chatScale:" + this.chatScale); + var1.println("chatWidth:" + this.chatWidth); + + for(int var2 = 0; var2 < this.keyBindings.length; ++var2) { + var1.println("key_" + this.keyBindings[var2].keyDescription + ":" + this.keyBindings[var2].keyCode); + } + + var1.close(); + } catch (Exception var3) { + this.mc.getLogAgent().logWarning("Failed to save options"); + var3.printStackTrace(); + } + + this.sendSettingsToServer(); + } + + public void sendSettingsToServer() { + if(this.mc.thePlayer != null) { + this.mc.thePlayer.sendQueue.addToSendQueue(new Packet204ClientInfo(this.language, this.renderDistance, this.chatVisibility, this.chatColours, this.difficulty, this.showCape)); + } + + } + + public boolean shouldRenderClouds() { + return this.renderDistance < 2 && this.clouds; + } +} diff --git a/src/net/minecraft/src/GameWindowListener.java b/src/net/minecraft/src/GameWindowListener.java new file mode 100644 index 0000000..6c14949 --- /dev/null +++ b/src/net/minecraft/src/GameWindowListener.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; + +public final class GameWindowListener extends WindowAdapter { + public void windowClosing(WindowEvent var1) { + System.err.println("Someone is closing me!"); + System.exit(1); + } +} diff --git a/src/net/minecraft/src/GenLayer.java b/src/net/minecraft/src/GenLayer.java new file mode 100644 index 0000000..4b1ac16 --- /dev/null +++ b/src/net/minecraft/src/GenLayer.java @@ -0,0 +1,107 @@ +package net.minecraft.src; + +public abstract class GenLayer { + private long worldGenSeed; + protected GenLayer parent; + private long chunkSeed; + private long baseSeed; + + public static GenLayer[] initializeAllBiomeGenerators(long var0, WorldType var2) { + GenLayerIsland var3 = new GenLayerIsland(1L); + GenLayerFuzzyZoom var9 = new GenLayerFuzzyZoom(2000L, var3); + GenLayerAddIsland var10 = new GenLayerAddIsland(1L, var9); + GenLayerZoom var11 = new GenLayerZoom(2001L, var10); + var10 = new GenLayerAddIsland(2L, var11); + GenLayerAddSnow var12 = new GenLayerAddSnow(2L, var10); + var11 = new GenLayerZoom(2002L, var12); + var10 = new GenLayerAddIsland(3L, var11); + var11 = new GenLayerZoom(2003L, var10); + var10 = new GenLayerAddIsland(4L, var11); + GenLayerAddMushroomIsland var15 = new GenLayerAddMushroomIsland(5L, var10); + byte var4 = 4; + if(var2 == WorldType.LARGE_BIOMES) { + var4 = 6; + } + + GenLayer var5 = GenLayerZoom.magnify(1000L, var15, 0); + GenLayerRiverInit var13 = new GenLayerRiverInit(100L, var5); + var5 = GenLayerZoom.magnify(1000L, var13, var4 + 2); + GenLayerRiver var14 = new GenLayerRiver(1L, var5); + GenLayerSmooth var16 = new GenLayerSmooth(1000L, var14); + GenLayer var6 = GenLayerZoom.magnify(1000L, var15, 0); + GenLayerBiome var17 = new GenLayerBiome(200L, var6, var2); + var6 = GenLayerZoom.magnify(1000L, var17, 2); + Object var18 = new GenLayerHills(1000L, var6); + + for(int var7 = 0; var7 < var4; ++var7) { + var18 = new GenLayerZoom((long)(1000 + var7), (GenLayer)var18); + if(var7 == 0) { + var18 = new GenLayerAddIsland(3L, (GenLayer)var18); + } + + if(var7 == 1) { + var18 = new GenLayerShore(1000L, (GenLayer)var18); + } + + if(var7 == 1) { + var18 = new GenLayerSwampRivers(1000L, (GenLayer)var18); + } + } + + GenLayerSmooth var19 = new GenLayerSmooth(1000L, (GenLayer)var18); + GenLayerRiverMix var20 = new GenLayerRiverMix(100L, var19, var16); + GenLayerVoronoiZoom var8 = new GenLayerVoronoiZoom(10L, var20); + var20.initWorldGenSeed(var0); + var8.initWorldGenSeed(var0); + return new GenLayer[]{var20, var8, var20}; + } + + public GenLayer(long var1) { + this.baseSeed = var1; + this.baseSeed *= this.baseSeed * 6364136223846793005L + 1442695040888963407L; + this.baseSeed += var1; + this.baseSeed *= this.baseSeed * 6364136223846793005L + 1442695040888963407L; + this.baseSeed += var1; + this.baseSeed *= this.baseSeed * 6364136223846793005L + 1442695040888963407L; + this.baseSeed += var1; + } + + public void initWorldGenSeed(long var1) { + this.worldGenSeed = var1; + if(this.parent != null) { + this.parent.initWorldGenSeed(var1); + } + + this.worldGenSeed *= this.worldGenSeed * 6364136223846793005L + 1442695040888963407L; + this.worldGenSeed += this.baseSeed; + this.worldGenSeed *= this.worldGenSeed * 6364136223846793005L + 1442695040888963407L; + this.worldGenSeed += this.baseSeed; + this.worldGenSeed *= this.worldGenSeed * 6364136223846793005L + 1442695040888963407L; + this.worldGenSeed += this.baseSeed; + } + + public void initChunkSeed(long var1, long var3) { + this.chunkSeed = this.worldGenSeed; + this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L; + this.chunkSeed += var1; + this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L; + this.chunkSeed += var3; + this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L; + this.chunkSeed += var1; + this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L; + this.chunkSeed += var3; + } + + protected int nextInt(int var1) { + int var2 = (int)((this.chunkSeed >> 24) % (long)var1); + if(var2 < 0) { + var2 += var1; + } + + this.chunkSeed *= this.chunkSeed * 6364136223846793005L + 1442695040888963407L; + this.chunkSeed += this.worldGenSeed; + return var2; + } + + public abstract int[] getInts(int var1, int var2, int var3, int var4); +} diff --git a/src/net/minecraft/src/GenLayerAddIsland.java b/src/net/minecraft/src/GenLayerAddIsland.java new file mode 100644 index 0000000..ee168c7 --- /dev/null +++ b/src/net/minecraft/src/GenLayerAddIsland.java @@ -0,0 +1,71 @@ +package net.minecraft.src; + +public class GenLayerAddIsland extends GenLayer { + public GenLayerAddIsland(long var1, GenLayer var3) { + super(var1); + this.parent = var3; + } + + public int[] getInts(int var1, int var2, int var3, int var4) { + int var5 = var1 - 1; + int var6 = var2 - 1; + int var7 = var3 + 2; + int var8 = var4 + 2; + int[] var9 = this.parent.getInts(var5, var6, var7, var8); + int[] var10 = IntCache.getIntCache(var3 * var4); + + for(int var11 = 0; var11 < var4; ++var11) { + for(int var12 = 0; var12 < var3; ++var12) { + int var13 = var9[var12 + 0 + (var11 + 0) * var7]; + int var14 = var9[var12 + 2 + (var11 + 0) * var7]; + int var15 = var9[var12 + 0 + (var11 + 2) * var7]; + int var16 = var9[var12 + 2 + (var11 + 2) * var7]; + int var17 = var9[var12 + 1 + (var11 + 1) * var7]; + this.initChunkSeed((long)(var12 + var1), (long)(var11 + var2)); + if(var17 != 0 || var13 == 0 && var14 == 0 && var15 == 0 && var16 == 0) { + if(var17 > 0 && (var13 == 0 || var14 == 0 || var15 == 0 || var16 == 0)) { + if(this.nextInt(5) == 0) { + if(var17 == BiomeGenBase.icePlains.biomeID) { + var10[var12 + var11 * var3] = BiomeGenBase.frozenOcean.biomeID; + } else { + var10[var12 + var11 * var3] = 0; + } + } else { + var10[var12 + var11 * var3] = var17; + } + } else { + var10[var12 + var11 * var3] = var17; + } + } else { + int var18 = 1; + int var19 = 1; + if(var13 != 0 && this.nextInt(var18++) == 0) { + var19 = var13; + } + + if(var14 != 0 && this.nextInt(var18++) == 0) { + var19 = var14; + } + + if(var15 != 0 && this.nextInt(var18++) == 0) { + var19 = var15; + } + + if(var16 != 0 && this.nextInt(var18++) == 0) { + var19 = var16; + } + + if(this.nextInt(3) == 0) { + var10[var12 + var11 * var3] = var19; + } else if(var19 == BiomeGenBase.icePlains.biomeID) { + var10[var12 + var11 * var3] = BiomeGenBase.frozenOcean.biomeID; + } else { + var10[var12 + var11 * var3] = 0; + } + } + } + } + + return var10; + } +} diff --git a/src/net/minecraft/src/GenLayerAddMushroomIsland.java b/src/net/minecraft/src/GenLayerAddMushroomIsland.java new file mode 100644 index 0000000..6bc64df --- /dev/null +++ b/src/net/minecraft/src/GenLayerAddMushroomIsland.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +public class GenLayerAddMushroomIsland extends GenLayer { + public GenLayerAddMushroomIsland(long var1, GenLayer var3) { + super(var1); + this.parent = var3; + } + + public int[] getInts(int var1, int var2, int var3, int var4) { + int var5 = var1 - 1; + int var6 = var2 - 1; + int var7 = var3 + 2; + int var8 = var4 + 2; + int[] var9 = this.parent.getInts(var5, var6, var7, var8); + int[] var10 = IntCache.getIntCache(var3 * var4); + + for(int var11 = 0; var11 < var4; ++var11) { + for(int var12 = 0; var12 < var3; ++var12) { + int var13 = var9[var12 + 0 + (var11 + 0) * var7]; + int var14 = var9[var12 + 2 + (var11 + 0) * var7]; + int var15 = var9[var12 + 0 + (var11 + 2) * var7]; + int var16 = var9[var12 + 2 + (var11 + 2) * var7]; + int var17 = var9[var12 + 1 + (var11 + 1) * var7]; + this.initChunkSeed((long)(var12 + var1), (long)(var11 + var2)); + if(var17 == 0 && var13 == 0 && var14 == 0 && var15 == 0 && var16 == 0 && this.nextInt(100) == 0) { + var10[var12 + var11 * var3] = BiomeGenBase.mushroomIsland.biomeID; + } else { + var10[var12 + var11 * var3] = var17; + } + } + } + + return var10; + } +} diff --git a/src/net/minecraft/src/GenLayerAddSnow.java b/src/net/minecraft/src/GenLayerAddSnow.java new file mode 100644 index 0000000..933e4fa --- /dev/null +++ b/src/net/minecraft/src/GenLayerAddSnow.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +public class GenLayerAddSnow extends GenLayer { + public GenLayerAddSnow(long var1, GenLayer var3) { + super(var1); + this.parent = var3; + } + + public int[] getInts(int var1, int var2, int var3, int var4) { + int var5 = var1 - 1; + int var6 = var2 - 1; + int var7 = var3 + 2; + int var8 = var4 + 2; + int[] var9 = this.parent.getInts(var5, var6, var7, var8); + int[] var10 = IntCache.getIntCache(var3 * var4); + + for(int var11 = 0; var11 < var4; ++var11) { + for(int var12 = 0; var12 < var3; ++var12) { + int var13 = var9[var12 + 1 + (var11 + 1) * var7]; + this.initChunkSeed((long)(var12 + var1), (long)(var11 + var2)); + if(var13 == 0) { + var10[var12 + var11 * var3] = 0; + } else { + int var14 = this.nextInt(5); + if(var14 == 0) { + var14 = BiomeGenBase.icePlains.biomeID; + } else { + var14 = 1; + } + + var10[var12 + var11 * var3] = var14; + } + } + } + + return var10; + } +} diff --git a/src/net/minecraft/src/GenLayerBiome.java b/src/net/minecraft/src/GenLayerBiome.java new file mode 100644 index 0000000..f0d020d --- /dev/null +++ b/src/net/minecraft/src/GenLayerBiome.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +public class GenLayerBiome extends GenLayer { + private BiomeGenBase[] allowedBiomes = new BiomeGenBase[]{BiomeGenBase.desert, BiomeGenBase.forest, BiomeGenBase.extremeHills, BiomeGenBase.swampland, BiomeGenBase.plains, BiomeGenBase.taiga, BiomeGenBase.jungle}; + + public GenLayerBiome(long var1, GenLayer var3, WorldType var4) { + super(var1); + this.parent = var3; + if(var4 == WorldType.DEFAULT_1_1) { + this.allowedBiomes = new BiomeGenBase[]{BiomeGenBase.desert, BiomeGenBase.forest, BiomeGenBase.extremeHills, BiomeGenBase.swampland, BiomeGenBase.plains, BiomeGenBase.taiga}; + } + + } + + public int[] getInts(int var1, int var2, int var3, int var4) { + int[] var5 = this.parent.getInts(var1, var2, var3, var4); + int[] var6 = IntCache.getIntCache(var3 * var4); + + for(int var7 = 0; var7 < var4; ++var7) { + for(int var8 = 0; var8 < var3; ++var8) { + this.initChunkSeed((long)(var8 + var1), (long)(var7 + var2)); + int var9 = var5[var8 + var7 * var3]; + if(var9 == 0) { + var6[var8 + var7 * var3] = 0; + } else if(var9 == BiomeGenBase.mushroomIsland.biomeID) { + var6[var8 + var7 * var3] = var9; + } else if(var9 == 1) { + var6[var8 + var7 * var3] = this.allowedBiomes[this.nextInt(this.allowedBiomes.length)].biomeID; + } else { + int var10 = this.allowedBiomes[this.nextInt(this.allowedBiomes.length)].biomeID; + if(var10 == BiomeGenBase.taiga.biomeID) { + var6[var8 + var7 * var3] = var10; + } else { + var6[var8 + var7 * var3] = BiomeGenBase.icePlains.biomeID; + } + } + } + } + + return var6; + } +} diff --git a/src/net/minecraft/src/GenLayerFuzzyZoom.java b/src/net/minecraft/src/GenLayerFuzzyZoom.java new file mode 100644 index 0000000..7fb2fba --- /dev/null +++ b/src/net/minecraft/src/GenLayerFuzzyZoom.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +public class GenLayerFuzzyZoom extends GenLayer { + public GenLayerFuzzyZoom(long var1, GenLayer var3) { + super(var1); + super.parent = var3; + } + + public int[] getInts(int var1, int var2, int var3, int var4) { + int var5 = var1 >> 1; + int var6 = var2 >> 1; + int var7 = (var3 >> 1) + 3; + int var8 = (var4 >> 1) + 3; + int[] var9 = this.parent.getInts(var5, var6, var7, var8); + int[] var10 = IntCache.getIntCache(var7 * 2 * var8 * 2); + int var11 = var7 << 1; + + int var13; + for(int var12 = 0; var12 < var8 - 1; ++var12) { + var13 = var12 << 1; + int var14 = var13 * var11; + int var15 = var9[0 + (var12 + 0) * var7]; + int var16 = var9[0 + (var12 + 1) * var7]; + + for(int var17 = 0; var17 < var7 - 1; ++var17) { + this.initChunkSeed((long)(var17 + var5 << 1), (long)(var12 + var6 << 1)); + int var18 = var9[var17 + 1 + (var12 + 0) * var7]; + int var19 = var9[var17 + 1 + (var12 + 1) * var7]; + var10[var14] = var15; + var10[var14++ + var11] = this.choose(var15, var16); + var10[var14] = this.choose(var15, var18); + var10[var14++ + var11] = this.choose(var15, var18, var16, var19); + var15 = var18; + var16 = var19; + } + } + + int[] var20 = IntCache.getIntCache(var3 * var4); + + for(var13 = 0; var13 < var4; ++var13) { + System.arraycopy(var10, (var13 + (var2 & 1)) * (var7 << 1) + (var1 & 1), var20, var13 * var3, var3); + } + + return var20; + } + + protected int choose(int var1, int var2) { + return this.nextInt(2) == 0 ? var1 : var2; + } + + protected int choose(int var1, int var2, int var3, int var4) { + int var5 = this.nextInt(4); + return var5 == 0 ? var1 : (var5 == 1 ? var2 : (var5 == 2 ? var3 : var4)); + } +} diff --git a/src/net/minecraft/src/GenLayerHills.java b/src/net/minecraft/src/GenLayerHills.java new file mode 100644 index 0000000..77972fc --- /dev/null +++ b/src/net/minecraft/src/GenLayerHills.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +public class GenLayerHills extends GenLayer { + public GenLayerHills(long var1, GenLayer var3) { + super(var1); + this.parent = var3; + } + + public int[] getInts(int var1, int var2, int var3, int var4) { + int[] var5 = this.parent.getInts(var1 - 1, var2 - 1, var3 + 2, var4 + 2); + int[] var6 = IntCache.getIntCache(var3 * var4); + + for(int var7 = 0; var7 < var4; ++var7) { + for(int var8 = 0; var8 < var3; ++var8) { + this.initChunkSeed((long)(var8 + var1), (long)(var7 + var2)); + int var9 = var5[var8 + 1 + (var7 + 1) * (var3 + 2)]; + if(this.nextInt(3) == 0) { + int var10 = var9; + if(var9 == BiomeGenBase.desert.biomeID) { + var10 = BiomeGenBase.desertHills.biomeID; + } else if(var9 == BiomeGenBase.forest.biomeID) { + var10 = BiomeGenBase.forestHills.biomeID; + } else if(var9 == BiomeGenBase.taiga.biomeID) { + var10 = BiomeGenBase.taigaHills.biomeID; + } else if(var9 == BiomeGenBase.plains.biomeID) { + var10 = BiomeGenBase.forest.biomeID; + } else if(var9 == BiomeGenBase.icePlains.biomeID) { + var10 = BiomeGenBase.iceMountains.biomeID; + } else if(var9 == BiomeGenBase.jungle.biomeID) { + var10 = BiomeGenBase.jungleHills.biomeID; + } + + if(var10 == var9) { + var6[var8 + var7 * var3] = var9; + } else { + int var11 = var5[var8 + 1 + (var7 + 1 - 1) * (var3 + 2)]; + int var12 = var5[var8 + 1 + 1 + (var7 + 1) * (var3 + 2)]; + int var13 = var5[var8 + 1 - 1 + (var7 + 1) * (var3 + 2)]; + int var14 = var5[var8 + 1 + (var7 + 1 + 1) * (var3 + 2)]; + if(var11 == var9 && var12 == var9 && var13 == var9 && var14 == var9) { + var6[var8 + var7 * var3] = var10; + } else { + var6[var8 + var7 * var3] = var9; + } + } + } else { + var6[var8 + var7 * var3] = var9; + } + } + } + + return var6; + } +} diff --git a/src/net/minecraft/src/GenLayerIsland.java b/src/net/minecraft/src/GenLayerIsland.java new file mode 100644 index 0000000..1e9a457 --- /dev/null +++ b/src/net/minecraft/src/GenLayerIsland.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +public class GenLayerIsland extends GenLayer { + public GenLayerIsland(long var1) { + super(var1); + } + + public int[] getInts(int var1, int var2, int var3, int var4) { + int[] var5 = IntCache.getIntCache(var3 * var4); + + for(int var6 = 0; var6 < var4; ++var6) { + for(int var7 = 0; var7 < var3; ++var7) { + this.initChunkSeed((long)(var1 + var7), (long)(var2 + var6)); + var5[var7 + var6 * var3] = this.nextInt(10) == 0 ? 1 : 0; + } + } + + if(var1 > -var3 && var1 <= 0 && var2 > -var4 && var2 <= 0) { + var5[-var1 + -var2 * var3] = 1; + } + + return var5; + } +} diff --git a/src/net/minecraft/src/GenLayerRiver.java b/src/net/minecraft/src/GenLayerRiver.java new file mode 100644 index 0000000..4e96a43 --- /dev/null +++ b/src/net/minecraft/src/GenLayerRiver.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +public class GenLayerRiver extends GenLayer { + public GenLayerRiver(long var1, GenLayer var3) { + super(var1); + super.parent = var3; + } + + public int[] getInts(int var1, int var2, int var3, int var4) { + int var5 = var1 - 1; + int var6 = var2 - 1; + int var7 = var3 + 2; + int var8 = var4 + 2; + int[] var9 = this.parent.getInts(var5, var6, var7, var8); + int[] var10 = IntCache.getIntCache(var3 * var4); + + for(int var11 = 0; var11 < var4; ++var11) { + for(int var12 = 0; var12 < var3; ++var12) { + int var13 = var9[var12 + 0 + (var11 + 1) * var7]; + int var14 = var9[var12 + 2 + (var11 + 1) * var7]; + int var15 = var9[var12 + 1 + (var11 + 0) * var7]; + int var16 = var9[var12 + 1 + (var11 + 2) * var7]; + int var17 = var9[var12 + 1 + (var11 + 1) * var7]; + if(var17 != 0 && var13 != 0 && var14 != 0 && var15 != 0 && var16 != 0 && var17 == var13 && var17 == var15 && var17 == var14 && var17 == var16) { + var10[var12 + var11 * var3] = -1; + } else { + var10[var12 + var11 * var3] = BiomeGenBase.river.biomeID; + } + } + } + + return var10; + } +} diff --git a/src/net/minecraft/src/GenLayerRiverInit.java b/src/net/minecraft/src/GenLayerRiverInit.java new file mode 100644 index 0000000..6b50e15 --- /dev/null +++ b/src/net/minecraft/src/GenLayerRiverInit.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +public class GenLayerRiverInit extends GenLayer { + public GenLayerRiverInit(long var1, GenLayer var3) { + super(var1); + this.parent = var3; + } + + public int[] getInts(int var1, int var2, int var3, int var4) { + int[] var5 = this.parent.getInts(var1, var2, var3, var4); + int[] var6 = IntCache.getIntCache(var3 * var4); + + for(int var7 = 0; var7 < var4; ++var7) { + for(int var8 = 0; var8 < var3; ++var8) { + this.initChunkSeed((long)(var8 + var1), (long)(var7 + var2)); + var6[var8 + var7 * var3] = var5[var8 + var7 * var3] > 0 ? this.nextInt(2) + 2 : 0; + } + } + + return var6; + } +} diff --git a/src/net/minecraft/src/GenLayerRiverMix.java b/src/net/minecraft/src/GenLayerRiverMix.java new file mode 100644 index 0000000..b3bf4fb --- /dev/null +++ b/src/net/minecraft/src/GenLayerRiverMix.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +public class GenLayerRiverMix extends GenLayer { + private GenLayer biomePatternGeneratorChain; + private GenLayer riverPatternGeneratorChain; + + public GenLayerRiverMix(long var1, GenLayer var3, GenLayer var4) { + super(var1); + this.biomePatternGeneratorChain = var3; + this.riverPatternGeneratorChain = var4; + } + + public void initWorldGenSeed(long var1) { + this.biomePatternGeneratorChain.initWorldGenSeed(var1); + this.riverPatternGeneratorChain.initWorldGenSeed(var1); + super.initWorldGenSeed(var1); + } + + public int[] getInts(int var1, int var2, int var3, int var4) { + int[] var5 = this.biomePatternGeneratorChain.getInts(var1, var2, var3, var4); + int[] var6 = this.riverPatternGeneratorChain.getInts(var1, var2, var3, var4); + int[] var7 = IntCache.getIntCache(var3 * var4); + + for(int var8 = 0; var8 < var3 * var4; ++var8) { + if(var5[var8] == BiomeGenBase.ocean.biomeID) { + var7[var8] = var5[var8]; + } else if(var6[var8] >= 0) { + if(var5[var8] == BiomeGenBase.icePlains.biomeID) { + var7[var8] = BiomeGenBase.frozenRiver.biomeID; + } else if(var5[var8] != BiomeGenBase.mushroomIsland.biomeID && var5[var8] != BiomeGenBase.mushroomIslandShore.biomeID) { + var7[var8] = var6[var8]; + } else { + var7[var8] = BiomeGenBase.mushroomIslandShore.biomeID; + } + } else { + var7[var8] = var5[var8]; + } + } + + return var7; + } +} diff --git a/src/net/minecraft/src/GenLayerShore.java b/src/net/minecraft/src/GenLayerShore.java new file mode 100644 index 0000000..ee4ea5b --- /dev/null +++ b/src/net/minecraft/src/GenLayerShore.java @@ -0,0 +1,59 @@ +package net.minecraft.src; + +public class GenLayerShore extends GenLayer { + public GenLayerShore(long var1, GenLayer var3) { + super(var1); + this.parent = var3; + } + + public int[] getInts(int var1, int var2, int var3, int var4) { + int[] var5 = this.parent.getInts(var1 - 1, var2 - 1, var3 + 2, var4 + 2); + int[] var6 = IntCache.getIntCache(var3 * var4); + + for(int var7 = 0; var7 < var4; ++var7) { + for(int var8 = 0; var8 < var3; ++var8) { + this.initChunkSeed((long)(var8 + var1), (long)(var7 + var2)); + int var9 = var5[var8 + 1 + (var7 + 1) * (var3 + 2)]; + int var10; + int var11; + int var12; + int var13; + if(var9 == BiomeGenBase.mushroomIsland.biomeID) { + var10 = var5[var8 + 1 + (var7 + 1 - 1) * (var3 + 2)]; + var11 = var5[var8 + 1 + 1 + (var7 + 1) * (var3 + 2)]; + var12 = var5[var8 + 1 - 1 + (var7 + 1) * (var3 + 2)]; + var13 = var5[var8 + 1 + (var7 + 1 + 1) * (var3 + 2)]; + if(var10 != BiomeGenBase.ocean.biomeID && var11 != BiomeGenBase.ocean.biomeID && var12 != BiomeGenBase.ocean.biomeID && var13 != BiomeGenBase.ocean.biomeID) { + var6[var8 + var7 * var3] = var9; + } else { + var6[var8 + var7 * var3] = BiomeGenBase.mushroomIslandShore.biomeID; + } + } else if(var9 != BiomeGenBase.ocean.biomeID && var9 != BiomeGenBase.river.biomeID && var9 != BiomeGenBase.swampland.biomeID && var9 != BiomeGenBase.extremeHills.biomeID) { + var10 = var5[var8 + 1 + (var7 + 1 - 1) * (var3 + 2)]; + var11 = var5[var8 + 1 + 1 + (var7 + 1) * (var3 + 2)]; + var12 = var5[var8 + 1 - 1 + (var7 + 1) * (var3 + 2)]; + var13 = var5[var8 + 1 + (var7 + 1 + 1) * (var3 + 2)]; + if(var10 != BiomeGenBase.ocean.biomeID && var11 != BiomeGenBase.ocean.biomeID && var12 != BiomeGenBase.ocean.biomeID && var13 != BiomeGenBase.ocean.biomeID) { + var6[var8 + var7 * var3] = var9; + } else { + var6[var8 + var7 * var3] = BiomeGenBase.beach.biomeID; + } + } else if(var9 == BiomeGenBase.extremeHills.biomeID) { + var10 = var5[var8 + 1 + (var7 + 1 - 1) * (var3 + 2)]; + var11 = var5[var8 + 1 + 1 + (var7 + 1) * (var3 + 2)]; + var12 = var5[var8 + 1 - 1 + (var7 + 1) * (var3 + 2)]; + var13 = var5[var8 + 1 + (var7 + 1 + 1) * (var3 + 2)]; + if(var10 == BiomeGenBase.extremeHills.biomeID && var11 == BiomeGenBase.extremeHills.biomeID && var12 == BiomeGenBase.extremeHills.biomeID && var13 == BiomeGenBase.extremeHills.biomeID) { + var6[var8 + var7 * var3] = var9; + } else { + var6[var8 + var7 * var3] = BiomeGenBase.extremeHillsEdge.biomeID; + } + } else { + var6[var8 + var7 * var3] = var9; + } + } + } + + return var6; + } +} diff --git a/src/net/minecraft/src/GenLayerSmooth.java b/src/net/minecraft/src/GenLayerSmooth.java new file mode 100644 index 0000000..ad253f7 --- /dev/null +++ b/src/net/minecraft/src/GenLayerSmooth.java @@ -0,0 +1,47 @@ +package net.minecraft.src; + +public class GenLayerSmooth extends GenLayer { + public GenLayerSmooth(long var1, GenLayer var3) { + super(var1); + super.parent = var3; + } + + public int[] getInts(int var1, int var2, int var3, int var4) { + int var5 = var1 - 1; + int var6 = var2 - 1; + int var7 = var3 + 2; + int var8 = var4 + 2; + int[] var9 = this.parent.getInts(var5, var6, var7, var8); + int[] var10 = IntCache.getIntCache(var3 * var4); + + for(int var11 = 0; var11 < var4; ++var11) { + for(int var12 = 0; var12 < var3; ++var12) { + int var13 = var9[var12 + 0 + (var11 + 1) * var7]; + int var14 = var9[var12 + 2 + (var11 + 1) * var7]; + int var15 = var9[var12 + 1 + (var11 + 0) * var7]; + int var16 = var9[var12 + 1 + (var11 + 2) * var7]; + int var17 = var9[var12 + 1 + (var11 + 1) * var7]; + if(var13 == var14 && var15 == var16) { + this.initChunkSeed((long)(var12 + var1), (long)(var11 + var2)); + if(this.nextInt(2) == 0) { + var17 = var13; + } else { + var17 = var15; + } + } else { + if(var13 == var14) { + var17 = var13; + } + + if(var15 == var16) { + var17 = var15; + } + } + + var10[var12 + var11 * var3] = var17; + } + } + + return var10; + } +} diff --git a/src/net/minecraft/src/GenLayerSwampRivers.java b/src/net/minecraft/src/GenLayerSwampRivers.java new file mode 100644 index 0000000..6892d23 --- /dev/null +++ b/src/net/minecraft/src/GenLayerSwampRivers.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public class GenLayerSwampRivers extends GenLayer { + public GenLayerSwampRivers(long var1, GenLayer var3) { + super(var1); + this.parent = var3; + } + + public int[] getInts(int var1, int var2, int var3, int var4) { + int[] var5 = this.parent.getInts(var1 - 1, var2 - 1, var3 + 2, var4 + 2); + int[] var6 = IntCache.getIntCache(var3 * var4); + + for(int var7 = 0; var7 < var4; ++var7) { + for(int var8 = 0; var8 < var3; ++var8) { + this.initChunkSeed((long)(var8 + var1), (long)(var7 + var2)); + int var9 = var5[var8 + 1 + (var7 + 1) * (var3 + 2)]; + if((var9 != BiomeGenBase.swampland.biomeID || this.nextInt(6) != 0) && (var9 != BiomeGenBase.jungle.biomeID && var9 != BiomeGenBase.jungleHills.biomeID || this.nextInt(8) != 0)) { + var6[var8 + var7 * var3] = var9; + } else { + var6[var8 + var7 * var3] = BiomeGenBase.river.biomeID; + } + } + } + + return var6; + } +} diff --git a/src/net/minecraft/src/GenLayerVoronoiZoom.java b/src/net/minecraft/src/GenLayerVoronoiZoom.java new file mode 100644 index 0000000..437b1da --- /dev/null +++ b/src/net/minecraft/src/GenLayerVoronoiZoom.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +public class GenLayerVoronoiZoom extends GenLayer { + public GenLayerVoronoiZoom(long var1, GenLayer var3) { + super(var1); + super.parent = var3; + } + + public int[] getInts(int var1, int var2, int var3, int var4) { + var1 -= 2; + var2 -= 2; + byte var5 = 2; + int var6 = 1 << var5; + int var7 = var1 >> var5; + int var8 = var2 >> var5; + int var9 = (var3 >> var5) + 3; + int var10 = (var4 >> var5) + 3; + int[] var11 = this.parent.getInts(var7, var8, var9, var10); + int var12 = var9 << var5; + int var13 = var10 << var5; + int[] var14 = IntCache.getIntCache(var12 * var13); + + int var16; + for(int var15 = 0; var15 < var10 - 1; ++var15) { + var16 = var11[0 + (var15 + 0) * var9]; + int var17 = var11[0 + (var15 + 1) * var9]; + + for(int var18 = 0; var18 < var9 - 1; ++var18) { + double var19 = (double)var6 * 0.9D; + this.initChunkSeed((long)(var18 + var7 << var5), (long)(var15 + var8 << var5)); + double var21 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * var19; + double var23 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * var19; + this.initChunkSeed((long)(var18 + var7 + 1 << var5), (long)(var15 + var8 << var5)); + double var25 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * var19 + (double)var6; + double var27 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * var19; + this.initChunkSeed((long)(var18 + var7 << var5), (long)(var15 + var8 + 1 << var5)); + double var29 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * var19; + double var31 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * var19 + (double)var6; + this.initChunkSeed((long)(var18 + var7 + 1 << var5), (long)(var15 + var8 + 1 << var5)); + double var33 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * var19 + (double)var6; + double var35 = ((double)this.nextInt(1024) / 1024.0D - 0.5D) * var19 + (double)var6; + int var37 = var11[var18 + 1 + (var15 + 0) * var9]; + int var38 = var11[var18 + 1 + (var15 + 1) * var9]; + + for(int var39 = 0; var39 < var6; ++var39) { + int var40 = ((var15 << var5) + var39) * var12 + (var18 << var5); + + for(int var41 = 0; var41 < var6; ++var41) { + double var42 = ((double)var39 - var23) * ((double)var39 - var23) + ((double)var41 - var21) * ((double)var41 - var21); + double var44 = ((double)var39 - var27) * ((double)var39 - var27) + ((double)var41 - var25) * ((double)var41 - var25); + double var46 = ((double)var39 - var31) * ((double)var39 - var31) + ((double)var41 - var29) * ((double)var41 - var29); + double var48 = ((double)var39 - var35) * ((double)var39 - var35) + ((double)var41 - var33) * ((double)var41 - var33); + if(var42 < var44 && var42 < var46 && var42 < var48) { + var14[var40++] = var16; + } else if(var44 < var42 && var44 < var46 && var44 < var48) { + var14[var40++] = var37; + } else if(var46 < var42 && var46 < var44 && var46 < var48) { + var14[var40++] = var17; + } else { + var14[var40++] = var38; + } + } + } + + var16 = var37; + var17 = var38; + } + } + + int[] var50 = IntCache.getIntCache(var3 * var4); + + for(var16 = 0; var16 < var4; ++var16) { + System.arraycopy(var14, (var16 + (var2 & var6 - 1)) * (var9 << var5) + (var1 & var6 - 1), var50, var16 * var3, var3); + } + + return var50; + } +} diff --git a/src/net/minecraft/src/GenLayerZoom.java b/src/net/minecraft/src/GenLayerZoom.java new file mode 100644 index 0000000..625bccc --- /dev/null +++ b/src/net/minecraft/src/GenLayerZoom.java @@ -0,0 +1,99 @@ +package net.minecraft.src; + +public class GenLayerZoom extends GenLayer { + public GenLayerZoom(long var1, GenLayer var3) { + super(var1); + super.parent = var3; + } + + public int[] getInts(int var1, int var2, int var3, int var4) { + int var5 = var1 >> 1; + int var6 = var2 >> 1; + int var7 = (var3 >> 1) + 3; + int var8 = (var4 >> 1) + 3; + int[] var9 = this.parent.getInts(var5, var6, var7, var8); + int[] var10 = IntCache.getIntCache(var7 * 2 * var8 * 2); + int var11 = var7 << 1; + + int var13; + for(int var12 = 0; var12 < var8 - 1; ++var12) { + var13 = var12 << 1; + int var14 = var13 * var11; + int var15 = var9[0 + (var12 + 0) * var7]; + int var16 = var9[0 + (var12 + 1) * var7]; + + for(int var17 = 0; var17 < var7 - 1; ++var17) { + this.initChunkSeed((long)(var17 + var5 << 1), (long)(var12 + var6 << 1)); + int var18 = var9[var17 + 1 + (var12 + 0) * var7]; + int var19 = var9[var17 + 1 + (var12 + 1) * var7]; + var10[var14] = var15; + var10[var14++ + var11] = this.choose(var15, var16); + var10[var14] = this.choose(var15, var18); + var10[var14++ + var11] = this.modeOrRandom(var15, var18, var16, var19); + var15 = var18; + var16 = var19; + } + } + + int[] var20 = IntCache.getIntCache(var3 * var4); + + for(var13 = 0; var13 < var4; ++var13) { + System.arraycopy(var10, (var13 + (var2 & 1)) * (var7 << 1) + (var1 & 1), var20, var13 * var3, var3); + } + + return var20; + } + + protected int choose(int var1, int var2) { + return this.nextInt(2) == 0 ? var1 : var2; + } + + protected int modeOrRandom(int var1, int var2, int var3, int var4) { + if(var2 == var3 && var3 == var4) { + return var2; + } else if(var1 == var2 && var1 == var3) { + return var1; + } else if(var1 == var2 && var1 == var4) { + return var1; + } else if(var1 == var3 && var1 == var4) { + return var1; + } else if(var1 == var2 && var3 != var4) { + return var1; + } else if(var1 == var3 && var2 != var4) { + return var1; + } else if(var1 == var4 && var2 != var3) { + return var1; + } else if(var2 == var1 && var3 != var4) { + return var2; + } else if(var2 == var3 && var1 != var4) { + return var2; + } else if(var2 == var4 && var1 != var3) { + return var2; + } else if(var3 == var1 && var2 != var4) { + return var3; + } else if(var3 == var2 && var1 != var4) { + return var3; + } else if(var3 == var4 && var1 != var2) { + return var3; + } else if(var4 == var1 && var2 != var3) { + return var3; + } else if(var4 == var2 && var1 != var3) { + return var3; + } else if(var4 == var3 && var1 != var2) { + return var3; + } else { + int var5 = this.nextInt(4); + return var5 == 0 ? var1 : (var5 == 1 ? var2 : (var5 == 2 ? var3 : var4)); + } + } + + public static GenLayer magnify(long var0, GenLayer var2, int var3) { + Object var4 = var2; + + for(int var5 = 0; var5 < var3; ++var5) { + var4 = new GenLayerZoom(var0 + (long)var5, (GenLayer)var4); + } + + return (GenLayer)var4; + } +} diff --git a/src/net/minecraft/src/Gui.java b/src/net/minecraft/src/Gui.java new file mode 100644 index 0000000..0fc928a --- /dev/null +++ b/src/net/minecraft/src/Gui.java @@ -0,0 +1,119 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class Gui { + protected float zLevel = 0.0F; + + protected void drawHorizontalLine(int var1, int var2, int var3, int var4) { + if(var2 < var1) { + int var5 = var1; + var1 = var2; + var2 = var5; + } + + drawRect(var1, var3, var2 + 1, var3 + 1, var4); + } + + protected void drawVerticalLine(int var1, int var2, int var3, int var4) { + if(var3 < var2) { + int var5 = var2; + var2 = var3; + var3 = var5; + } + + drawRect(var1, var2 + 1, var1 + 1, var3, var4); + } + + public static void drawRect(int var0, int var1, int var2, int var3, int var4) { + int var5; + if(var0 < var2) { + var5 = var0; + var0 = var2; + var2 = var5; + } + + if(var1 < var3) { + var5 = var1; + var1 = var3; + var3 = var5; + } + + float var10 = (float)(var4 >> 24 & 255) / 255.0F; + float var6 = (float)(var4 >> 16 & 255) / 255.0F; + float var7 = (float)(var4 >> 8 & 255) / 255.0F; + float var8 = (float)(var4 & 255) / 255.0F; + Tessellator var9 = Tessellator.instance; + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(var6, var7, var8, var10); + var9.startDrawingQuads(); + var9.addVertex((double)var0, (double)var3, 0.0D); + var9.addVertex((double)var2, (double)var3, 0.0D); + var9.addVertex((double)var2, (double)var1, 0.0D); + var9.addVertex((double)var0, (double)var1, 0.0D); + var9.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_BLEND); + } + + protected void drawGradientRect(int var1, int var2, int var3, int var4, int var5, int var6) { + float var7 = (float)(var5 >> 24 & 255) / 255.0F; + float var8 = (float)(var5 >> 16 & 255) / 255.0F; + float var9 = (float)(var5 >> 8 & 255) / 255.0F; + float var10 = (float)(var5 & 255) / 255.0F; + float var11 = (float)(var6 >> 24 & 255) / 255.0F; + float var12 = (float)(var6 >> 16 & 255) / 255.0F; + float var13 = (float)(var6 >> 8 & 255) / 255.0F; + float var14 = (float)(var6 & 255) / 255.0F; + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glShadeModel(GL11.GL_SMOOTH); + Tessellator var15 = Tessellator.instance; + var15.startDrawingQuads(); + var15.setColorRGBA_F(var8, var9, var10, var7); + var15.addVertex((double)var3, (double)var2, (double)this.zLevel); + var15.addVertex((double)var1, (double)var2, (double)this.zLevel); + var15.setColorRGBA_F(var12, var13, var14, var11); + var15.addVertex((double)var1, (double)var4, (double)this.zLevel); + var15.addVertex((double)var3, (double)var4, (double)this.zLevel); + var15.draw(); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + public void drawCenteredString(FontRenderer var1, String var2, int var3, int var4, int var5) { + var1.drawStringWithShadow(var2, var3 - var1.getStringWidth(var2) / 2, var4, var5); + } + + public void drawString(FontRenderer var1, String var2, int var3, int var4, int var5) { + var1.drawStringWithShadow(var2, var3, var4, var5); + } + + public void drawTexturedModalRect(int var1, int var2, int var3, int var4, int var5, int var6) { + float var7 = 0.00390625F; + float var8 = 0.00390625F; + Tessellator var9 = Tessellator.instance; + var9.startDrawingQuads(); + var9.addVertexWithUV((double)(var1 + 0), (double)(var2 + var6), (double)this.zLevel, (double)((float)(var3 + 0) * var7), (double)((float)(var4 + var6) * var8)); + var9.addVertexWithUV((double)(var1 + var5), (double)(var2 + var6), (double)this.zLevel, (double)((float)(var3 + var5) * var7), (double)((float)(var4 + var6) * var8)); + var9.addVertexWithUV((double)(var1 + var5), (double)(var2 + 0), (double)this.zLevel, (double)((float)(var3 + var5) * var7), (double)((float)(var4 + 0) * var8)); + var9.addVertexWithUV((double)(var1 + 0), (double)(var2 + 0), (double)this.zLevel, (double)((float)(var3 + 0) * var7), (double)((float)(var4 + 0) * var8)); + var9.draw(); + } + + public void drawTexturedModelRectFromIcon(int var1, int var2, Icon var3, int var4, int var5) { + Tessellator var6 = Tessellator.instance; + var6.startDrawingQuads(); + var6.addVertexWithUV((double)(var1 + 0), (double)(var2 + var5), (double)this.zLevel, (double)var3.getMinU(), (double)var3.getMaxV()); + var6.addVertexWithUV((double)(var1 + var4), (double)(var2 + var5), (double)this.zLevel, (double)var3.getMaxU(), (double)var3.getMaxV()); + var6.addVertexWithUV((double)(var1 + var4), (double)(var2 + 0), (double)this.zLevel, (double)var3.getMaxU(), (double)var3.getMinV()); + var6.addVertexWithUV((double)(var1 + 0), (double)(var2 + 0), (double)this.zLevel, (double)var3.getMinU(), (double)var3.getMinV()); + var6.draw(); + } +} diff --git a/src/net/minecraft/src/GuiAchievement.java b/src/net/minecraft/src/GuiAchievement.java new file mode 100644 index 0000000..8165304 --- /dev/null +++ b/src/net/minecraft/src/GuiAchievement.java @@ -0,0 +1,107 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class GuiAchievement extends Gui { + private Minecraft theGame; + private int achievementWindowWidth; + private int achievementWindowHeight; + private String achievementGetLocalText; + private String achievementStatName; + private Achievement theAchievement; + private long achievementTime; + private RenderItem itemRender; + private boolean haveAchiement; + + public GuiAchievement(Minecraft var1) { + this.theGame = var1; + this.itemRender = new RenderItem(); + } + + public void queueTakenAchievement(Achievement var1) { + this.achievementGetLocalText = StatCollector.translateToLocal("achievement.get"); + this.achievementStatName = StatCollector.translateToLocal(var1.getName()); + this.achievementTime = Minecraft.getSystemTime(); + this.theAchievement = var1; + this.haveAchiement = false; + } + + public void queueAchievementInformation(Achievement var1) { + this.achievementGetLocalText = StatCollector.translateToLocal(var1.getName()); + this.achievementStatName = var1.getDescription(); + this.achievementTime = Minecraft.getSystemTime() - 2500L; + this.theAchievement = var1; + this.haveAchiement = true; + } + + private void updateAchievementWindowScale() { + GL11.glViewport(0, 0, this.theGame.displayWidth, this.theGame.displayHeight); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + this.achievementWindowWidth = this.theGame.displayWidth; + this.achievementWindowHeight = this.theGame.displayHeight; + ScaledResolution var1 = new ScaledResolution(this.theGame.gameSettings, this.theGame.displayWidth, this.theGame.displayHeight); + this.achievementWindowWidth = var1.getScaledWidth(); + this.achievementWindowHeight = var1.getScaledHeight(); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glOrtho(0.0D, (double)this.achievementWindowWidth, (double)this.achievementWindowHeight, 0.0D, 1000.0D, 3000.0D); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + GL11.glTranslatef(0.0F, 0.0F, -2000.0F); + } + + public void updateAchievementWindow() { + if(this.theAchievement != null && this.achievementTime != 0L) { + double var1 = (double)(Minecraft.getSystemTime() - this.achievementTime) / 3000.0D; + if(this.haveAchiement || var1 >= 0.0D && var1 <= 1.0D) { + this.updateAchievementWindowScale(); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(false); + double var3 = var1 * 2.0D; + if(var3 > 1.0D) { + var3 = 2.0D - var3; + } + + var3 *= 4.0D; + var3 = 1.0D - var3; + if(var3 < 0.0D) { + var3 = 0.0D; + } + + var3 *= var3; + var3 *= var3; + int var5 = this.achievementWindowWidth - 160; + int var6 = 0 - (int)(var3 * 36.0D); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL11.GL_TEXTURE_2D); + this.theGame.renderEngine.bindTexture("/achievement/bg.png"); + GL11.glDisable(GL11.GL_LIGHTING); + this.drawTexturedModalRect(var5, var6, 96, 202, 160, 32); + if(this.haveAchiement) { + this.theGame.fontRenderer.drawSplitString(this.achievementStatName, var5 + 30, var6 + 7, 120, -1); + } else { + this.theGame.fontRenderer.drawString(this.achievementGetLocalText, var5 + 30, var6 + 7, -256); + this.theGame.fontRenderer.drawString(this.achievementStatName, var5 + 30, var6 + 18, -1); + } + + RenderHelper.enableGUIStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glEnable(GL11.GL_LIGHTING); + this.itemRender.renderItemAndEffectIntoGUI(this.theGame.fontRenderer, this.theGame.renderEngine, this.theAchievement.theItemStack, var5 + 8, var6 + 8); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_DEPTH_TEST); + } else { + this.achievementTime = 0L; + } + } + } +} diff --git a/src/net/minecraft/src/GuiAchievements.java b/src/net/minecraft/src/GuiAchievements.java new file mode 100644 index 0000000..b3372e4 --- /dev/null +++ b/src/net/minecraft/src/GuiAchievements.java @@ -0,0 +1,334 @@ +package net.minecraft.src; + +import java.util.Random; +import net.minecraft.client.Minecraft; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class GuiAchievements extends GuiScreen { + private static final int guiMapTop = AchievementList.minDisplayColumn * 24 - 112; + private static final int guiMapLeft = AchievementList.minDisplayRow * 24 - 112; + private static final int guiMapBottom = AchievementList.maxDisplayColumn * 24 - 77; + private static final int guiMapRight = AchievementList.maxDisplayRow * 24 - 77; + protected int achievementsPaneWidth = 256; + protected int achievementsPaneHeight = 202; + protected int mouseX = 0; + protected int mouseY = 0; + protected double field_74117_m; + protected double field_74115_n; + protected double guiMapX; + protected double guiMapY; + protected double field_74124_q; + protected double field_74123_r; + private int isMouseButtonDown = 0; + private StatFileWriter statFileWriter; + + public GuiAchievements(StatFileWriter var1) { + this.statFileWriter = var1; + short var2 = 141; + short var3 = 141; + this.field_74117_m = this.guiMapX = this.field_74124_q = (double)(AchievementList.openInventory.displayColumn * 24 - var2 / 2 - 12); + this.field_74115_n = this.guiMapY = this.field_74123_r = (double)(AchievementList.openInventory.displayRow * 24 - var3 / 2); + } + + public void initGui() { + this.buttonList.clear(); + this.buttonList.add(new GuiSmallButton(1, this.width / 2 + 24, this.height / 2 + 74, 80, 20, StatCollector.translateToLocal("gui.done"))); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 1) { + this.mc.displayGuiScreen((GuiScreen)null); + this.mc.setIngameFocus(); + } + + super.actionPerformed(var1); + } + + protected void keyTyped(char var1, int var2) { + if(var2 == this.mc.gameSettings.keyBindInventory.keyCode) { + this.mc.displayGuiScreen((GuiScreen)null); + this.mc.setIngameFocus(); + } else { + super.keyTyped(var1, var2); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + if(Mouse.isButtonDown(0)) { + int var4 = (this.width - this.achievementsPaneWidth) / 2; + int var5 = (this.height - this.achievementsPaneHeight) / 2; + int var6 = var4 + 8; + int var7 = var5 + 17; + if((this.isMouseButtonDown == 0 || this.isMouseButtonDown == 1) && var1 >= var6 && var1 < var6 + 224 && var2 >= var7 && var2 < var7 + 155) { + if(this.isMouseButtonDown == 0) { + this.isMouseButtonDown = 1; + } else { + this.guiMapX -= (double)(var1 - this.mouseX); + this.guiMapY -= (double)(var2 - this.mouseY); + this.field_74124_q = this.field_74117_m = this.guiMapX; + this.field_74123_r = this.field_74115_n = this.guiMapY; + } + + this.mouseX = var1; + this.mouseY = var2; + } + + if(this.field_74124_q < (double)guiMapTop) { + this.field_74124_q = (double)guiMapTop; + } + + if(this.field_74123_r < (double)guiMapLeft) { + this.field_74123_r = (double)guiMapLeft; + } + + if(this.field_74124_q >= (double)guiMapBottom) { + this.field_74124_q = (double)(guiMapBottom - 1); + } + + if(this.field_74123_r >= (double)guiMapRight) { + this.field_74123_r = (double)(guiMapRight - 1); + } + } else { + this.isMouseButtonDown = 0; + } + + this.drawDefaultBackground(); + this.genAchievementBackground(var1, var2, var3); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + this.drawTitle(); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + } + + public void updateScreen() { + this.field_74117_m = this.guiMapX; + this.field_74115_n = this.guiMapY; + double var1 = this.field_74124_q - this.guiMapX; + double var3 = this.field_74123_r - this.guiMapY; + if(var1 * var1 + var3 * var3 < 4.0D) { + this.guiMapX += var1; + this.guiMapY += var3; + } else { + this.guiMapX += var1 * 0.85D; + this.guiMapY += var3 * 0.85D; + } + + } + + protected void drawTitle() { + int var1 = (this.width - this.achievementsPaneWidth) / 2; + int var2 = (this.height - this.achievementsPaneHeight) / 2; + this.fontRenderer.drawString("Achievements", var1 + 15, var2 + 5, 4210752); + } + + protected void genAchievementBackground(int var1, int var2, float var3) { + int var4 = MathHelper.floor_double(this.field_74117_m + (this.guiMapX - this.field_74117_m) * (double)var3); + int var5 = MathHelper.floor_double(this.field_74115_n + (this.guiMapY - this.field_74115_n) * (double)var3); + if(var4 < guiMapTop) { + var4 = guiMapTop; + } + + if(var5 < guiMapLeft) { + var5 = guiMapLeft; + } + + if(var4 >= guiMapBottom) { + var4 = guiMapBottom - 1; + } + + if(var5 >= guiMapRight) { + var5 = guiMapRight - 1; + } + + int var6 = (this.width - this.achievementsPaneWidth) / 2; + int var7 = (this.height - this.achievementsPaneHeight) / 2; + int var8 = var6 + 16; + int var9 = var7 + 17; + this.zLevel = 0.0F; + GL11.glDepthFunc(GL11.GL_GEQUAL); + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 0.0F, -200.0F); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + this.mc.renderEngine.bindTexture("/terrain.png"); + int var10 = var4 + 288 >> 4; + int var11 = var5 + 288 >> 4; + int var12 = (var4 + 288) % 16; + int var13 = (var5 + 288) % 16; + Random var19 = new Random(); + + int var20; + int var22; + int var23; + for(var20 = 0; var20 * 16 - var13 < 155; ++var20) { + float var21 = 0.6F - (float)(var11 + var20) / 25.0F * 0.3F; + GL11.glColor4f(var21, var21, var21, 1.0F); + + for(var22 = 0; var22 * 16 - var12 < 224; ++var22) { + var19.setSeed((long)(1234 + var10 + var22)); + var19.nextInt(); + var23 = var19.nextInt(1 + var11 + var20) + (var11 + var20) / 2; + Icon var24 = Block.sand.getIcon(0, 0); + if(var23 <= 37 && var11 + var20 != 35) { + if(var23 == 22) { + if(var19.nextInt(2) == 0) { + var24 = Block.oreDiamond.getIcon(0, 0); + } else { + var24 = Block.oreRedstone.getIcon(0, 0); + } + } else if(var23 == 10) { + var24 = Block.oreIron.getIcon(0, 0); + } else if(var23 == 8) { + var24 = Block.oreCoal.getIcon(0, 0); + } else if(var23 > 4) { + var24 = Block.stone.getIcon(0, 0); + } else if(var23 > 0) { + var24 = Block.dirt.getIcon(0, 0); + } + } else { + var24 = Block.bedrock.getIcon(0, 0); + } + + this.drawTexturedModelRectFromIcon(var8 + var22 * 16 - var12, var9 + var20 * 16 - var13, var24, 16, 16); + } + } + + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDepthFunc(GL11.GL_LEQUAL); + GL11.glDisable(GL11.GL_TEXTURE_2D); + + int var25; + int var28; + int var37; + for(var20 = 0; var20 < AchievementList.achievementList.size(); ++var20) { + Achievement var31 = (Achievement)AchievementList.achievementList.get(var20); + if(var31.parentAchievement != null) { + var22 = var31.displayColumn * 24 - var4 + 11 + var8; + var23 = var31.displayRow * 24 - var5 + 11 + var9; + var37 = var31.parentAchievement.displayColumn * 24 - var4 + 11 + var8; + var25 = var31.parentAchievement.displayRow * 24 - var5 + 11 + var9; + boolean var26 = this.statFileWriter.hasAchievementUnlocked(var31); + boolean var27 = this.statFileWriter.canUnlockAchievement(var31); + var28 = Math.sin((double)(Minecraft.getSystemTime() % 600L) / 600.0D * Math.PI * 2.0D) > 0.6D ? 255 : 130; + int var29 = -16777216; + if(var26) { + var29 = -9408400; + } else if(var27) { + var29 = '\uff00' + (var28 << 24); + } + + this.drawHorizontalLine(var22, var37, var23, var29); + this.drawVerticalLine(var37, var23, var25, var29); + } + } + + Achievement var30 = null; + RenderItem var32 = new RenderItem(); + RenderHelper.enableGUIStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + + int var38; + int var39; + for(var22 = 0; var22 < AchievementList.achievementList.size(); ++var22) { + Achievement var33 = (Achievement)AchievementList.achievementList.get(var22); + var37 = var33.displayColumn * 24 - var4; + var25 = var33.displayRow * 24 - var5; + if(var37 >= -24 && var25 >= -24 && var37 <= 224 && var25 <= 155) { + float var36; + if(this.statFileWriter.hasAchievementUnlocked(var33)) { + var36 = 1.0F; + GL11.glColor4f(var36, var36, var36, 1.0F); + } else if(this.statFileWriter.canUnlockAchievement(var33)) { + var36 = Math.sin((double)(Minecraft.getSystemTime() % 600L) / 600.0D * Math.PI * 2.0D) < 0.6D ? 0.6F : 0.8F; + GL11.glColor4f(var36, var36, var36, 1.0F); + } else { + var36 = 0.3F; + GL11.glColor4f(var36, var36, var36, 1.0F); + } + + this.mc.renderEngine.bindTexture("/achievement/bg.png"); + var38 = var8 + var37; + var39 = var9 + var25; + if(var33.getSpecial()) { + this.drawTexturedModalRect(var38 - 2, var39 - 2, 26, 202, 26, 26); + } else { + this.drawTexturedModalRect(var38 - 2, var39 - 2, 0, 202, 26, 26); + } + + if(!this.statFileWriter.canUnlockAchievement(var33)) { + float var40 = 0.1F; + GL11.glColor4f(var40, var40, var40, 1.0F); + var32.renderWithColor = false; + } + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + var32.renderItemAndEffectIntoGUI(this.mc.fontRenderer, this.mc.renderEngine, var33.theItemStack, var38 + 3, var39 + 3); + GL11.glDisable(GL11.GL_LIGHTING); + if(!this.statFileWriter.canUnlockAchievement(var33)) { + var32.renderWithColor = true; + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + if(var1 >= var8 && var2 >= var9 && var1 < var8 + 224 && var2 < var9 + 155 && var1 >= var38 && var1 <= var38 + 22 && var2 >= var39 && var2 <= var39 + 22) { + var30 = var33; + } + } + } + + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/achievement/bg.png"); + this.drawTexturedModalRect(var6, var7, 0, 0, this.achievementsPaneWidth, this.achievementsPaneHeight); + GL11.glPopMatrix(); + this.zLevel = 0.0F; + GL11.glDepthFunc(GL11.GL_LEQUAL); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + super.drawScreen(var1, var2, var3); + if(var30 != null) { + String var34 = StatCollector.translateToLocal(var30.getName()); + String var35 = var30.getDescription(); + var37 = var1 + 12; + var25 = var2 - 4; + if(this.statFileWriter.canUnlockAchievement(var30)) { + var38 = Math.max(this.fontRenderer.getStringWidth(var34), 120); + var39 = this.fontRenderer.splitStringWidth(var35, var38); + if(this.statFileWriter.hasAchievementUnlocked(var30)) { + var39 += 12; + } + + this.drawGradientRect(var37 - 3, var25 - 3, var37 + var38 + 3, var25 + var39 + 3 + 12, -1073741824, -1073741824); + this.fontRenderer.drawSplitString(var35, var37, var25 + 12, var38, -6250336); + if(this.statFileWriter.hasAchievementUnlocked(var30)) { + this.fontRenderer.drawStringWithShadow(StatCollector.translateToLocal("achievement.taken"), var37, var25 + var39 + 4, -7302913); + } + } else { + var38 = Math.max(this.fontRenderer.getStringWidth(var34), 120); + String var41 = StatCollector.translateToLocalFormatted("achievement.requires", new Object[]{StatCollector.translateToLocal(var30.parentAchievement.getName())}); + var28 = this.fontRenderer.splitStringWidth(var41, var38); + this.drawGradientRect(var37 - 3, var25 - 3, var37 + var38 + 3, var25 + var28 + 12 + 3, -1073741824, -1073741824); + this.fontRenderer.drawSplitString(var41, var37, var25 + 12, var38, -9416624); + } + + this.fontRenderer.drawStringWithShadow(var34, var37, var25, this.statFileWriter.canUnlockAchievement(var30) ? (var30.getSpecial() ? -128 : -1) : (var30.getSpecial() ? -8355776 : -8355712)); + } + + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glEnable(GL11.GL_LIGHTING); + RenderHelper.disableStandardItemLighting(); + } + + public boolean doesGuiPauseGame() { + return true; + } +} diff --git a/src/net/minecraft/src/GuiBeacon.java b/src/net/minecraft/src/GuiBeacon.java new file mode 100644 index 0000000..2444deb --- /dev/null +++ b/src/net/minecraft/src/GuiBeacon.java @@ -0,0 +1,151 @@ +package net.minecraft.src; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.util.Iterator; +import org.lwjgl.opengl.GL11; + +public class GuiBeacon extends GuiContainer { + private TileEntityBeacon beacon; + private GuiBeaconButtonConfirm beaconConfirmButton; + private boolean buttonsNotDrawn; + + public GuiBeacon(InventoryPlayer var1, TileEntityBeacon var2) { + super(new ContainerBeacon(var1, var2)); + this.beacon = var2; + this.xSize = 230; + this.ySize = 219; + } + + public void initGui() { + super.initGui(); + this.buttonList.add(this.beaconConfirmButton = new GuiBeaconButtonConfirm(this, -1, this.guiLeft + 164, this.guiTop + 107)); + this.buttonList.add(new GuiBeaconButtonCancel(this, -2, this.guiLeft + 190, this.guiTop + 107)); + this.buttonsNotDrawn = true; + this.beaconConfirmButton.enabled = false; + } + + public void updateScreen() { + super.updateScreen(); + if(this.buttonsNotDrawn && this.beacon.getLevels() >= 0) { + this.buttonsNotDrawn = false; + + int var2; + int var3; + int var4; + int var5; + GuiBeaconButtonPower var6; + for(int var1 = 0; var1 <= 2; ++var1) { + var2 = TileEntityBeacon.effectsList[var1].length; + var3 = var2 * 22 + (var2 - 1) * 2; + + for(var4 = 0; var4 < var2; ++var4) { + var5 = TileEntityBeacon.effectsList[var1][var4].id; + var6 = new GuiBeaconButtonPower(this, var1 << 8 | var5, this.guiLeft + 76 + var4 * 24 - var3 / 2, this.guiTop + 22 + var1 * 25, var5, var1); + this.buttonList.add(var6); + if(var1 >= this.beacon.getLevels()) { + var6.enabled = false; + } else if(var5 == this.beacon.getPrimaryEffect()) { + var6.func_82254_b(true); + } + } + } + + byte var7 = 3; + var2 = TileEntityBeacon.effectsList[var7].length + 1; + var3 = var2 * 22 + (var2 - 1) * 2; + + for(var4 = 0; var4 < var2 - 1; ++var4) { + var5 = TileEntityBeacon.effectsList[var7][var4].id; + var6 = new GuiBeaconButtonPower(this, var7 << 8 | var5, this.guiLeft + 167 + var4 * 24 - var3 / 2, this.guiTop + 47, var5, var7); + this.buttonList.add(var6); + if(var7 >= this.beacon.getLevels()) { + var6.enabled = false; + } else if(var5 == this.beacon.getSecondaryEffect()) { + var6.func_82254_b(true); + } + } + + if(this.beacon.getPrimaryEffect() > 0) { + GuiBeaconButtonPower var8 = new GuiBeaconButtonPower(this, var7 << 8 | this.beacon.getPrimaryEffect(), this.guiLeft + 167 + (var2 - 1) * 24 - var3 / 2, this.guiTop + 47, this.beacon.getPrimaryEffect(), var7); + this.buttonList.add(var8); + if(var7 >= this.beacon.getLevels()) { + var8.enabled = false; + } else if(this.beacon.getPrimaryEffect() == this.beacon.getSecondaryEffect()) { + var8.func_82254_b(true); + } + } + } + + this.beaconConfirmButton.enabled = this.beacon.getStackInSlot(0) != null && this.beacon.getPrimaryEffect() > 0; + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == -2) { + this.mc.displayGuiScreen((GuiScreen)null); + } else if(var1.id == -1) { + String var2 = "MC|Beacon"; + ByteArrayOutputStream var3 = new ByteArrayOutputStream(); + DataOutputStream var4 = new DataOutputStream(var3); + + try { + var4.writeInt(this.beacon.getPrimaryEffect()); + var4.writeInt(this.beacon.getSecondaryEffect()); + this.mc.getNetHandler().addToSendQueue(new Packet250CustomPayload(var2, var3.toByteArray())); + } catch (Exception var6) { + var6.printStackTrace(); + } + + this.mc.displayGuiScreen((GuiScreen)null); + } else if(var1 instanceof GuiBeaconButtonPower) { + if(((GuiBeaconButtonPower)var1).func_82255_b()) { + return; + } + + int var7 = var1.id; + int var8 = var7 & 255; + int var9 = var7 >> 8; + if(var9 < 3) { + this.beacon.setPrimaryEffect(var8); + } else { + this.beacon.setSecondaryEffect(var8); + } + + this.buttonList.clear(); + this.initGui(); + this.updateScreen(); + } + + } + + protected void drawGuiContainerForegroundLayer(int var1, int var2) { + RenderHelper.disableStandardItemLighting(); + this.drawCenteredString(this.fontRenderer, StatCollector.translateToLocal("tile.beacon.primary"), 62, 10, 14737632); + this.drawCenteredString(this.fontRenderer, StatCollector.translateToLocal("tile.beacon.secondary"), 169, 10, 14737632); + Iterator var3 = this.buttonList.iterator(); + + while(var3.hasNext()) { + GuiButton var4 = (GuiButton)var3.next(); + if(var4.func_82252_a()) { + var4.func_82251_b(var1 - this.guiLeft, var2 - this.guiTop); + break; + } + } + + RenderHelper.enableGUIStandardItemLighting(); + } + + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/beacon.png"); + int var4 = (this.width - this.xSize) / 2; + int var5 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var4, var5, 0, 0, this.xSize, this.ySize); + itemRenderer.zLevel = 100.0F; + itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, new ItemStack(Item.emerald), var4 + 42, var5 + 109); + itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, new ItemStack(Item.diamond), var4 + 42 + 22, var5 + 109); + itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, new ItemStack(Item.ingotGold), var4 + 42 + 44, var5 + 109); + itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, new ItemStack(Item.ingotIron), var4 + 42 + 66, var5 + 109); + itemRenderer.zLevel = 0.0F; + } +} diff --git a/src/net/minecraft/src/GuiBeaconButton.java b/src/net/minecraft/src/GuiBeaconButton.java new file mode 100644 index 0000000..ef13832 --- /dev/null +++ b/src/net/minecraft/src/GuiBeaconButton.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +class GuiBeaconButton extends GuiButton { + private final String buttonTexture; + private final int field_82257_l; + private final int field_82258_m; + private boolean field_82256_n; + + protected GuiBeaconButton(int var1, int var2, int var3, String var4, int var5, int var6) { + super(var1, var2, var3, 22, 22, ""); + this.buttonTexture = var4; + this.field_82257_l = var5; + this.field_82258_m = var6; + } + + public void drawButton(Minecraft var1, int var2, int var3) { + if(this.drawButton) { + var1.renderEngine.bindTexture("/gui/beacon.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.field_82253_i = var2 >= this.xPosition && var3 >= this.yPosition && var2 < this.xPosition + this.width && var3 < this.yPosition + this.height; + short var4 = 219; + int var5 = 0; + if(!this.enabled) { + var5 += this.width * 2; + } else if(this.field_82256_n) { + var5 += this.width * 1; + } else if(this.field_82253_i) { + var5 += this.width * 3; + } + + this.drawTexturedModalRect(this.xPosition, this.yPosition, var5, var4, this.width, this.height); + if(!"/gui/beacon.png".equals(this.buttonTexture)) { + var1.renderEngine.bindTexture(this.buttonTexture); + } + + this.drawTexturedModalRect(this.xPosition + 2, this.yPosition + 2, this.field_82257_l, this.field_82258_m, 18, 18); + } + } + + public boolean func_82255_b() { + return this.field_82256_n; + } + + public void func_82254_b(boolean var1) { + this.field_82256_n = var1; + } +} diff --git a/src/net/minecraft/src/GuiBeaconButtonCancel.java b/src/net/minecraft/src/GuiBeaconButtonCancel.java new file mode 100644 index 0000000..56368d6 --- /dev/null +++ b/src/net/minecraft/src/GuiBeaconButtonCancel.java @@ -0,0 +1,14 @@ +package net.minecraft.src; + +class GuiBeaconButtonCancel extends GuiBeaconButton { + final GuiBeacon beaconGui; + + public GuiBeaconButtonCancel(GuiBeacon var1, int var2, int var3, int var4) { + super(var2, var3, var4, "/gui/beacon.png", 112, 220); + this.beaconGui = var1; + } + + public void func_82251_b(int var1, int var2) { + this.beaconGui.drawCreativeTabHoveringText(StatCollector.translateToLocal("gui.cancel"), var1, var2); + } +} diff --git a/src/net/minecraft/src/GuiBeaconButtonConfirm.java b/src/net/minecraft/src/GuiBeaconButtonConfirm.java new file mode 100644 index 0000000..6563573 --- /dev/null +++ b/src/net/minecraft/src/GuiBeaconButtonConfirm.java @@ -0,0 +1,14 @@ +package net.minecraft.src; + +class GuiBeaconButtonConfirm extends GuiBeaconButton { + final GuiBeacon beaconGui; + + public GuiBeaconButtonConfirm(GuiBeacon var1, int var2, int var3, int var4) { + super(var2, var3, var4, "/gui/beacon.png", 90, 220); + this.beaconGui = var1; + } + + public void func_82251_b(int var1, int var2) { + this.beaconGui.drawCreativeTabHoveringText(StatCollector.translateToLocal("gui.done"), var1, var2); + } +} diff --git a/src/net/minecraft/src/GuiBeaconButtonPower.java b/src/net/minecraft/src/GuiBeaconButtonPower.java new file mode 100644 index 0000000..6b36a63 --- /dev/null +++ b/src/net/minecraft/src/GuiBeaconButtonPower.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +class GuiBeaconButtonPower extends GuiBeaconButton { + private final int field_82261_l; + private final int field_82262_m; + final GuiBeacon beaconGui; + + public GuiBeaconButtonPower(GuiBeacon var1, int var2, int var3, int var4, int var5, int var6) { + super(var2, var3, var4, "/gui/inventory.png", 0 + Potion.potionTypes[var5].getStatusIconIndex() % 8 * 18, 198 + Potion.potionTypes[var5].getStatusIconIndex() / 8 * 18); + this.beaconGui = var1; + this.field_82261_l = var5; + this.field_82262_m = var6; + } + + public void func_82251_b(int var1, int var2) { + String var3 = StatCollector.translateToLocal(Potion.potionTypes[this.field_82261_l].getName()); + if(this.field_82262_m >= 3 && this.field_82261_l != Potion.regeneration.id) { + var3 = var3 + " II"; + } + + this.beaconGui.drawCreativeTabHoveringText(var3, var1, var2); + } +} diff --git a/src/net/minecraft/src/GuiBrewingStand.java b/src/net/minecraft/src/GuiBrewingStand.java new file mode 100644 index 0000000..9666763 --- /dev/null +++ b/src/net/minecraft/src/GuiBrewingStand.java @@ -0,0 +1,62 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiBrewingStand extends GuiContainer { + private TileEntityBrewingStand brewingStand; + + public GuiBrewingStand(InventoryPlayer var1, TileEntityBrewingStand var2) { + super(new ContainerBrewingStand(var1, var2)); + this.brewingStand = var2; + } + + protected void drawGuiContainerForegroundLayer(int var1, int var2) { + String var3 = this.brewingStand.isInvNameLocalized() ? this.brewingStand.getInvName() : StatCollector.translateToLocal(this.brewingStand.getInvName()); + this.fontRenderer.drawString(var3, this.xSize / 2 - this.fontRenderer.getStringWidth(var3) / 2, 6, 4210752); + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/alchemy.png"); + int var4 = (this.width - this.xSize) / 2; + int var5 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var4, var5, 0, 0, this.xSize, this.ySize); + int var6 = this.brewingStand.getBrewTime(); + if(var6 > 0) { + int var7 = (int)(28.0F * (1.0F - (float)var6 / 400.0F)); + if(var7 > 0) { + this.drawTexturedModalRect(var4 + 97, var5 + 16, 176, 0, 9, var7); + } + + int var8 = var6 / 2 % 7; + switch(var8) { + case 0: + var7 = 29; + break; + case 1: + var7 = 24; + break; + case 2: + var7 = 20; + break; + case 3: + var7 = 16; + break; + case 4: + var7 = 11; + break; + case 5: + var7 = 6; + break; + case 6: + var7 = 0; + } + + if(var7 > 0) { + this.drawTexturedModalRect(var4 + 65, var5 + 14 + 29 - var7, 185, 29 - var7, 12, var7); + } + } + + } +} diff --git a/src/net/minecraft/src/GuiButton.java b/src/net/minecraft/src/GuiButton.java new file mode 100644 index 0000000..8a60f13 --- /dev/null +++ b/src/net/minecraft/src/GuiButton.java @@ -0,0 +1,82 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +public class GuiButton extends Gui { + protected int width; + protected int height; + public int xPosition; + public int yPosition; + public String displayString; + public int id; + public boolean enabled; + public boolean drawButton; + protected boolean field_82253_i; + + public GuiButton(int var1, int var2, int var3, String var4) { + this(var1, var2, var3, 200, 20, var4); + } + + public GuiButton(int var1, int var2, int var3, int var4, int var5, String var6) { + this.width = 200; + this.height = 20; + this.enabled = true; + this.drawButton = true; + this.id = var1; + this.xPosition = var2; + this.yPosition = var3; + this.width = var4; + this.height = var5; + this.displayString = var6; + } + + protected int getHoverState(boolean var1) { + byte var2 = 1; + if(!this.enabled) { + var2 = 0; + } else if(var1) { + var2 = 2; + } + + return var2; + } + + public void drawButton(Minecraft var1, int var2, int var3) { + if(this.drawButton) { + FontRenderer var4 = var1.fontRenderer; + var1.renderEngine.bindTexture("/gui/gui.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.field_82253_i = var2 >= this.xPosition && var3 >= this.yPosition && var2 < this.xPosition + this.width && var3 < this.yPosition + this.height; + int var5 = this.getHoverState(this.field_82253_i); + this.drawTexturedModalRect(this.xPosition, this.yPosition, 0, 46 + var5 * 20, this.width / 2, this.height); + this.drawTexturedModalRect(this.xPosition + this.width / 2, this.yPosition, 200 - this.width / 2, 46 + var5 * 20, this.width / 2, this.height); + this.mouseDragged(var1, var2, var3); + int var6 = 14737632; + if(!this.enabled) { + var6 = -6250336; + } else if(this.field_82253_i) { + var6 = 16777120; + } + + this.drawCenteredString(var4, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, var6); + } + } + + protected void mouseDragged(Minecraft var1, int var2, int var3) { + } + + public void mouseReleased(int var1, int var2) { + } + + public boolean mousePressed(Minecraft var1, int var2, int var3) { + return this.enabled && this.drawButton && var2 >= this.xPosition && var3 >= this.yPosition && var2 < this.xPosition + this.width && var3 < this.yPosition + this.height; + } + + public boolean func_82252_a() { + return this.field_82253_i; + } + + public void func_82251_b(int var1, int var2) { + } +} diff --git a/src/net/minecraft/src/GuiButtonLanguage.java b/src/net/minecraft/src/GuiButtonLanguage.java new file mode 100644 index 0000000..11190b6 --- /dev/null +++ b/src/net/minecraft/src/GuiButtonLanguage.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +public class GuiButtonLanguage extends GuiButton { + public GuiButtonLanguage(int var1, int var2, int var3) { + super(var1, var2, var3, 20, 20, ""); + } + + public void drawButton(Minecraft var1, int var2, int var3) { + if(this.drawButton) { + var1.renderEngine.bindTexture("/gui/gui.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + boolean var4 = var2 >= this.xPosition && var3 >= this.yPosition && var2 < this.xPosition + this.width && var3 < this.yPosition + this.height; + int var5 = 106; + if(var4) { + var5 += this.height; + } + + this.drawTexturedModalRect(this.xPosition, this.yPosition, 0, var5, this.width, this.height); + } + } +} diff --git a/src/net/minecraft/src/GuiButtonLink.java b/src/net/minecraft/src/GuiButtonLink.java new file mode 100644 index 0000000..3f85cdb --- /dev/null +++ b/src/net/minecraft/src/GuiButtonLink.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.net.URI; + +public class GuiButtonLink extends GuiButton { + public GuiButtonLink(int var1, int var2, int var3, int var4, int var5, String var6) { + super(var1, var2, var3, var4, var5, var6); + } + + public void func_96135_a(String var1) { + try { + URI var2 = new URI(var1); + Class var3 = Class.forName("java.awt.Desktop"); + Object var4 = var3.getMethod("getDesktop", new Class[0]).invoke((Object)null, new Object[0]); + var3.getMethod("browse", new Class[]{URI.class}).invoke(var4, new Object[]{var2}); + } catch (Throwable var5) { + var5.printStackTrace(); + } + + } +} diff --git a/src/net/minecraft/src/GuiButtonMerchant.java b/src/net/minecraft/src/GuiButtonMerchant.java new file mode 100644 index 0000000..59bb5c0 --- /dev/null +++ b/src/net/minecraft/src/GuiButtonMerchant.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +class GuiButtonMerchant extends GuiButton { + private final boolean mirrored; + + public GuiButtonMerchant(int var1, int var2, int var3, boolean var4) { + super(var1, var2, var3, 12, 19, ""); + this.mirrored = var4; + } + + public void drawButton(Minecraft var1, int var2, int var3) { + if(this.drawButton) { + var1.renderEngine.bindTexture("/gui/trading.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + boolean var4 = var2 >= this.xPosition && var3 >= this.yPosition && var2 < this.xPosition + this.width && var3 < this.yPosition + this.height; + int var5 = 0; + int var6 = 176; + if(!this.enabled) { + var6 += this.width * 2; + } else if(var4) { + var6 += this.width; + } + + if(!this.mirrored) { + var5 += this.height; + } + + this.drawTexturedModalRect(this.xPosition, this.yPosition, var6, var5, this.width, this.height); + } + } +} diff --git a/src/net/minecraft/src/GuiButtonNextPage.java b/src/net/minecraft/src/GuiButtonNextPage.java new file mode 100644 index 0000000..c9bf654 --- /dev/null +++ b/src/net/minecraft/src/GuiButtonNextPage.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +class GuiButtonNextPage extends GuiButton { + private final boolean nextPage; + + public GuiButtonNextPage(int var1, int var2, int var3, boolean var4) { + super(var1, var2, var3, 23, 13, ""); + this.nextPage = var4; + } + + public void drawButton(Minecraft var1, int var2, int var3) { + if(this.drawButton) { + boolean var4 = var2 >= this.xPosition && var3 >= this.yPosition && var2 < this.xPosition + this.width && var3 < this.yPosition + this.height; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var1.renderEngine.bindTexture("/gui/book.png"); + int var5 = 0; + int var6 = 192; + if(var4) { + var5 += 23; + } + + if(!this.nextPage) { + var6 += 13; + } + + this.drawTexturedModalRect(this.xPosition, this.yPosition, var5, var6, 23, 13); + } + } +} diff --git a/src/net/minecraft/src/GuiChat.java b/src/net/minecraft/src/GuiChat.java new file mode 100644 index 0000000..97080cb --- /dev/null +++ b/src/net/minecraft/src/GuiChat.java @@ -0,0 +1,249 @@ +package net.minecraft.src; + +import java.net.URI; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; + +public class GuiChat extends GuiScreen { + private String field_73898_b = ""; + private int sentHistoryCursor = -1; + private boolean field_73897_d = false; + private boolean field_73905_m = false; + private int field_73903_n = 0; + private List field_73904_o = new ArrayList(); + private URI clickedURI = null; + protected GuiTextField inputField; + private String defaultInputFieldText = ""; + + public GuiChat() { + } + + public GuiChat(String var1) { + this.defaultInputFieldText = var1; + } + + public void initGui() { + Keyboard.enableRepeatEvents(true); + this.sentHistoryCursor = this.mc.ingameGUI.getChatGUI().getSentMessages().size(); + this.inputField = new GuiTextField(this.fontRenderer, 4, this.height - 12, this.width - 4, 12); + this.inputField.setMaxStringLength(100); + this.inputField.setEnableBackgroundDrawing(false); + this.inputField.setFocused(true); + this.inputField.setText(this.defaultInputFieldText); + this.inputField.setCanLoseFocus(false); + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + this.mc.ingameGUI.getChatGUI().resetScroll(); + } + + public void updateScreen() { + this.inputField.updateCursorCounter(); + } + + protected void keyTyped(char var1, int var2) { + this.field_73905_m = false; + if(var2 == 15) { + this.completePlayerName(); + } else { + this.field_73897_d = false; + } + + if(var2 == 1) { + this.mc.displayGuiScreen((GuiScreen)null); + } else if(var2 == 28) { + String var3 = this.inputField.getText().trim(); + if(var3.length() > 0) { + this.mc.ingameGUI.getChatGUI().addToSentMessages(var3); + if(!this.mc.handleClientCommand(var3)) { + this.mc.thePlayer.sendChatMessage(var3); + } + } + + this.mc.displayGuiScreen((GuiScreen)null); + } else if(var2 == 200) { + this.getSentHistory(-1); + } else if(var2 == 208) { + this.getSentHistory(1); + } else if(var2 == 201) { + this.mc.ingameGUI.getChatGUI().scroll(this.mc.ingameGUI.getChatGUI().func_96127_i() - 1); + } else if(var2 == 209) { + this.mc.ingameGUI.getChatGUI().scroll(-this.mc.ingameGUI.getChatGUI().func_96127_i() + 1); + } else { + this.inputField.textboxKeyTyped(var1, var2); + } + + } + + public void handleMouseInput() { + super.handleMouseInput(); + int var1 = Mouse.getEventDWheel(); + if(var1 != 0) { + if(var1 > 1) { + var1 = 1; + } + + if(var1 < -1) { + var1 = -1; + } + + if(!isShiftKeyDown()) { + var1 *= 7; + } + + this.mc.ingameGUI.getChatGUI().scroll(var1); + } + + } + + protected void mouseClicked(int var1, int var2, int var3) { + if(var3 == 0 && this.mc.gameSettings.chatLinks) { + ChatClickData var4 = this.mc.ingameGUI.getChatGUI().func_73766_a(Mouse.getX(), Mouse.getY()); + if(var4 != null) { + URI var5 = var4.getURI(); + if(var5 != null) { + if(this.mc.gameSettings.chatLinksPrompt) { + this.clickedURI = var5; + this.mc.displayGuiScreen(new GuiConfirmOpenLink(this, var4.getClickedUrl(), 0, false)); + } else { + this.func_73896_a(var5); + } + + return; + } + } + } + + this.inputField.mouseClicked(var1, var2, var3); + super.mouseClicked(var1, var2, var3); + } + + public void confirmClicked(boolean var1, int var2) { + if(var2 == 0) { + if(var1) { + this.func_73896_a(this.clickedURI); + } + + this.clickedURI = null; + this.mc.displayGuiScreen(this); + } + + } + + private void func_73896_a(URI var1) { + try { + Class var2 = Class.forName("java.awt.Desktop"); + Object var3 = var2.getMethod("getDesktop", new Class[0]).invoke((Object)null, new Object[0]); + var2.getMethod("browse", new Class[]{URI.class}).invoke(var3, new Object[]{var1}); + } catch (Throwable var4) { + var4.printStackTrace(); + } + + } + + public void completePlayerName() { + String var3; + if(this.field_73897_d) { + this.inputField.deleteFromCursor(this.inputField.func_73798_a(-1, this.inputField.getCursorPosition(), false) - this.inputField.getCursorPosition()); + if(this.field_73903_n >= this.field_73904_o.size()) { + this.field_73903_n = 0; + } + } else { + int var1 = this.inputField.func_73798_a(-1, this.inputField.getCursorPosition(), false); + this.field_73904_o.clear(); + this.field_73903_n = 0; + String var2 = this.inputField.getText().substring(var1).toLowerCase(); + var3 = this.inputField.getText().substring(0, this.inputField.getCursorPosition()); + this.func_73893_a(var3, var2); + if(this.field_73904_o.isEmpty()) { + return; + } + + this.field_73897_d = true; + this.inputField.deleteFromCursor(var1 - this.inputField.getCursorPosition()); + } + + if(this.field_73904_o.size() > 1) { + StringBuilder var4 = new StringBuilder(); + + for(Iterator var5 = this.field_73904_o.iterator(); var5.hasNext(); var4.append(var3)) { + var3 = (String)var5.next(); + if(var4.length() > 0) { + var4.append(", "); + } + } + + this.mc.ingameGUI.getChatGUI().printChatMessageWithOptionalDeletion(var4.toString(), 1); + } + + this.inputField.writeText((String)this.field_73904_o.get(this.field_73903_n++)); + } + + private void func_73893_a(String var1, String var2) { + if(var1.length() >= 1) { + this.mc.thePlayer.sendQueue.addToSendQueue(new Packet203AutoComplete(var1)); + this.field_73905_m = true; + } + } + + public void getSentHistory(int var1) { + int var2 = this.sentHistoryCursor + var1; + int var3 = this.mc.ingameGUI.getChatGUI().getSentMessages().size(); + if(var2 < 0) { + var2 = 0; + } + + if(var2 > var3) { + var2 = var3; + } + + if(var2 != this.sentHistoryCursor) { + if(var2 == var3) { + this.sentHistoryCursor = var3; + this.inputField.setText(this.field_73898_b); + } else { + if(this.sentHistoryCursor == var3) { + this.field_73898_b = this.inputField.getText(); + } + + this.inputField.setText((String)this.mc.ingameGUI.getChatGUI().getSentMessages().get(var2)); + this.sentHistoryCursor = var2; + } + } + } + + public void drawScreen(int var1, int var2, float var3) { + drawRect(2, this.height - 14, this.width - 2, this.height - 2, Integer.MIN_VALUE); + this.inputField.drawTextBox(); + super.drawScreen(var1, var2, var3); + } + + public void func_73894_a(String[] var1) { + if(this.field_73905_m) { + this.field_73904_o.clear(); + String[] var2 = var1; + int var3 = var1.length; + + for(int var4 = 0; var4 < var3; ++var4) { + String var5 = var2[var4]; + if(var5.length() > 0) { + this.field_73904_o.add(var5); + } + } + + if(this.field_73904_o.size() > 0) { + this.field_73897_d = true; + this.completePlayerName(); + } + } + + } + + public boolean doesGuiPauseGame() { + return false; + } +} diff --git a/src/net/minecraft/src/GuiChest.java b/src/net/minecraft/src/GuiChest.java new file mode 100644 index 0000000..e983b29 --- /dev/null +++ b/src/net/minecraft/src/GuiChest.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiChest extends GuiContainer { + private IInventory upperChestInventory; + private IInventory lowerChestInventory; + private int inventoryRows = 0; + + public GuiChest(IInventory var1, IInventory var2) { + super(new ContainerChest(var1, var2)); + this.upperChestInventory = var1; + this.lowerChestInventory = var2; + this.allowUserInput = false; + short var3 = 222; + int var4 = var3 - 108; + this.inventoryRows = var2.getSizeInventory() / 9; + this.ySize = var4 + this.inventoryRows * 18; + } + + protected void drawGuiContainerForegroundLayer(int var1, int var2) { + this.fontRenderer.drawString(this.lowerChestInventory.isInvNameLocalized() ? this.lowerChestInventory.getInvName() : StatCollector.translateToLocal(this.lowerChestInventory.getInvName()), 8, 6, 4210752); + this.fontRenderer.drawString(this.upperChestInventory.isInvNameLocalized() ? this.upperChestInventory.getInvName() : StatCollector.translateToLocal(this.upperChestInventory.getInvName()), 8, this.ySize - 96 + 2, 4210752); + } + + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/container.png"); + int var4 = (this.width - this.xSize) / 2; + int var5 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var4, var5, 0, 0, this.xSize, this.inventoryRows * 18 + 17); + this.drawTexturedModalRect(var4, var5 + this.inventoryRows * 18 + 17, 0, 126, this.xSize, 96); + } +} diff --git a/src/net/minecraft/src/GuiCommandBlock.java b/src/net/minecraft/src/GuiCommandBlock.java new file mode 100644 index 0000000..2491278 --- /dev/null +++ b/src/net/minecraft/src/GuiCommandBlock.java @@ -0,0 +1,92 @@ +package net.minecraft.src; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import org.lwjgl.input.Keyboard; + +public class GuiCommandBlock extends GuiScreen { + private GuiTextField commandTextField; + private final TileEntityCommandBlock commandBlock; + private GuiButton doneBtn; + private GuiButton cancelBtn; + + public GuiCommandBlock(TileEntityCommandBlock var1) { + this.commandBlock = var1; + } + + public void updateScreen() { + this.commandTextField.updateCursorCounter(); + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.buttonList.add(this.doneBtn = new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + 12, var1.translateKey("gui.done"))); + this.buttonList.add(this.cancelBtn = new GuiButton(1, this.width / 2 - 100, this.height / 4 + 120 + 12, var1.translateKey("gui.cancel"))); + this.commandTextField = new GuiTextField(this.fontRenderer, this.width / 2 - 150, 60, 300, 20); + this.commandTextField.setMaxStringLength(Short.MAX_VALUE); + this.commandTextField.setFocused(true); + this.commandTextField.setText(this.commandBlock.getCommand()); + this.doneBtn.enabled = this.commandTextField.getText().trim().length() > 0; + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 1) { + this.mc.displayGuiScreen((GuiScreen)null); + } else if(var1.id == 0) { + String var2 = "MC|AdvCdm"; + ByteArrayOutputStream var3 = new ByteArrayOutputStream(); + DataOutputStream var4 = new DataOutputStream(var3); + + try { + var4.writeInt(this.commandBlock.xCoord); + var4.writeInt(this.commandBlock.yCoord); + var4.writeInt(this.commandBlock.zCoord); + Packet.writeString(this.commandTextField.getText(), var4); + this.mc.getNetHandler().addToSendQueue(new Packet250CustomPayload(var2, var3.toByteArray())); + } catch (Exception var6) { + var6.printStackTrace(); + } + + this.mc.displayGuiScreen((GuiScreen)null); + } + + } + } + + protected void keyTyped(char var1, int var2) { + this.commandTextField.textboxKeyTyped(var1, var2); + this.doneBtn.enabled = this.commandTextField.getText().trim().length() > 0; + if(var2 != 28 && var1 != 13) { + if(var2 == 1) { + this.actionPerformed(this.cancelBtn); + } + } else { + this.actionPerformed(this.doneBtn); + } + + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + this.commandTextField.mouseClicked(var1, var2, var3); + } + + public void drawScreen(int var1, int var2, float var3) { + StringTranslate var4 = StringTranslate.getInstance(); + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, var4.translateKey("advMode.setCommand"), this.width / 2, this.height / 4 - 60 + 20, 16777215); + this.drawString(this.fontRenderer, var4.translateKey("advMode.command"), this.width / 2 - 150, 47, 10526880); + this.drawString(this.fontRenderer, var4.translateKey("advMode.nearestPlayer"), this.width / 2 - 150, 97, 10526880); + this.drawString(this.fontRenderer, var4.translateKey("advMode.randomPlayer"), this.width / 2 - 150, 108, 10526880); + this.drawString(this.fontRenderer, var4.translateKey("advMode.allPlayers"), this.width / 2 - 150, 119, 10526880); + this.commandTextField.drawTextBox(); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiConfirmOpenLink.java b/src/net/minecraft/src/GuiConfirmOpenLink.java new file mode 100644 index 0000000..8b505d6 --- /dev/null +++ b/src/net/minecraft/src/GuiConfirmOpenLink.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +public class GuiConfirmOpenLink extends GuiYesNo { + private String openLinkWarning; + private String copyLinkButtonText; + private String field_92028_p; + private boolean field_92027_q = true; + + public GuiConfirmOpenLink(GuiScreen var1, String var2, int var3, boolean var4) { + super(var1, StringTranslate.getInstance().translateKey(var4 ? "chat.link.confirmTrusted" : "chat.link.confirm"), var2, var3); + StringTranslate var5 = StringTranslate.getInstance(); + this.buttonText1 = var5.translateKey(var4 ? "chat.link.open" : "gui.yes"); + this.buttonText2 = var5.translateKey(var4 ? "gui.cancel" : "gui.no"); + this.copyLinkButtonText = var5.translateKey("chat.copy"); + this.openLinkWarning = var5.translateKey("chat.link.warning"); + this.field_92028_p = var2; + } + + public void initGui() { + this.buttonList.add(new GuiButton(0, this.width / 3 - 83 + 0, this.height / 6 + 96, 100, 20, this.buttonText1)); + this.buttonList.add(new GuiButton(2, this.width / 3 - 83 + 105, this.height / 6 + 96, 100, 20, this.copyLinkButtonText)); + this.buttonList.add(new GuiButton(1, this.width / 3 - 83 + 210, this.height / 6 + 96, 100, 20, this.buttonText2)); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 2) { + this.copyLinkToClipboard(); + } + + this.parentScreen.confirmClicked(var1.id == 0, this.worldNumber); + } + + public void copyLinkToClipboard() { + setClipboardString(this.field_92028_p); + } + + public void drawScreen(int var1, int var2, float var3) { + super.drawScreen(var1, var2, var3); + if(this.field_92027_q) { + this.drawCenteredString(this.fontRenderer, this.openLinkWarning, this.width / 2, 110, 16764108); + } + + } + + public void func_92026_h() { + this.field_92027_q = false; + } +} diff --git a/src/net/minecraft/src/GuiConnecting.java b/src/net/minecraft/src/GuiConnecting.java new file mode 100644 index 0000000..50a0d8d --- /dev/null +++ b/src/net/minecraft/src/GuiConnecting.java @@ -0,0 +1,108 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +public class GuiConnecting extends GuiScreen { + private NetClientHandler clientHandler; + private boolean cancelled = false; + private final GuiScreen field_98098_c; + + public GuiConnecting(GuiScreen var1, Minecraft var2, ServerData var3) { + this.mc = var2; + this.field_98098_c = var1; + ServerAddress var4 = ServerAddress.func_78860_a(var3.serverIP); + var2.loadWorld((WorldClient)null); + var2.setServerData(var3); + this.spawnNewServerThread(var4.getIP(), var4.getPort()); + } + + public GuiConnecting(GuiScreen var1, Minecraft var2, String var3, int var4) { + this.mc = var2; + this.field_98098_c = var1; + var2.loadWorld((WorldClient)null); + this.spawnNewServerThread(var3, var4); + } + + private void spawnNewServerThread(String var1, int var2) { + this.mc.getLogAgent().logInfo("Connecting to " + var1 + ", " + var2); + (new ThreadConnectToServer(this, var1, var2)).start(); + } + + public void updateScreen() { + if(this.clientHandler != null) { + this.clientHandler.processReadPackets(); + } + + } + + protected void keyTyped(char var1, int var2) { + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 120 + 12, var1.translateKey("gui.cancel"))); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 0) { + this.cancelled = true; + if(this.clientHandler != null) { + this.clientHandler.disconnect(); + } + + this.mc.displayGuiScreen(this.field_98098_c); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + StringTranslate var4 = StringTranslate.getInstance(); + if(this.clientHandler == null) { + this.drawCenteredString(this.fontRenderer, var4.translateKey("connect.connecting"), this.width / 2, this.height / 2 - 50, 16777215); + this.drawCenteredString(this.fontRenderer, "", this.width / 2, this.height / 2 - 10, 16777215); + } else { + this.drawCenteredString(this.fontRenderer, var4.translateKey("connect.authorizing"), this.width / 2, this.height / 2 - 50, 16777215); + this.drawCenteredString(this.fontRenderer, this.clientHandler.field_72560_a, this.width / 2, this.height / 2 - 10, 16777215); + } + + super.drawScreen(var1, var2, var3); + } + + static NetClientHandler setNetClientHandler(GuiConnecting var0, NetClientHandler var1) { + return var0.clientHandler = var1; + } + + static Minecraft func_74256_a(GuiConnecting var0) { + return var0.mc; + } + + static boolean isCancelled(GuiConnecting var0) { + return var0.cancelled; + } + + static Minecraft func_74254_c(GuiConnecting var0) { + return var0.mc; + } + + static NetClientHandler getNetClientHandler(GuiConnecting var0) { + return var0.clientHandler; + } + + static GuiScreen func_98097_e(GuiConnecting var0) { + return var0.field_98098_c; + } + + static Minecraft func_74250_f(GuiConnecting var0) { + return var0.mc; + } + + static Minecraft func_74251_g(GuiConnecting var0) { + return var0.mc; + } + + static Minecraft func_98096_h(GuiConnecting var0) { + return var0.mc; + } +} diff --git a/src/net/minecraft/src/GuiContainer.java b/src/net/minecraft/src/GuiContainer.java new file mode 100644 index 0000000..d1c1d80 --- /dev/null +++ b/src/net/minecraft/src/GuiContainer.java @@ -0,0 +1,613 @@ +package net.minecraft.src; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import net.minecraft.client.Minecraft; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public abstract class GuiContainer extends GuiScreen { + protected static RenderItem itemRenderer = new RenderItem(); + protected int xSize = 176; + protected int ySize = 166; + public Container inventorySlots; + protected int guiLeft; + protected int guiTop; + private Slot theSlot; + private Slot clickedSlot = null; + private boolean isRightMouseClick = false; + private ItemStack draggedStack = null; + private int field_85049_r = 0; + private int field_85048_s = 0; + private Slot returningStackDestSlot = null; + private long returningStackTime = 0L; + private ItemStack returningStack = null; + private Slot field_92033_y = null; + private long field_92032_z = 0L; + protected final Set field_94077_p = new HashSet(); + protected boolean field_94076_q; + private int field_94071_C = 0; + private int field_94067_D = 0; + private boolean field_94068_E = false; + private int field_94069_F; + private long field_94070_G = 0L; + private Slot field_94072_H = null; + private int field_94073_I = 0; + private boolean field_94074_J; + private ItemStack field_94075_K = null; + + public GuiContainer(Container var1) { + this.inventorySlots = var1; + this.field_94068_E = true; + } + + public void initGui() { + super.initGui(); + this.mc.thePlayer.openContainer = this.inventorySlots; + this.guiLeft = (this.width - this.xSize) / 2; + this.guiTop = (this.height - this.ySize) / 2; + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + int var4 = this.guiLeft; + int var5 = this.guiTop; + this.drawGuiContainerBackgroundLayer(var3, var1, var2); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + super.drawScreen(var1, var2, var3); + RenderHelper.enableGUIStandardItemLighting(); + GL11.glPushMatrix(); + GL11.glTranslatef((float)var4, (float)var5, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + this.theSlot = null; + short var6 = 240; + short var7 = 240; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var6 / 1.0F, (float)var7 / 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + + int var9; + for(int var13 = 0; var13 < this.inventorySlots.inventorySlots.size(); ++var13) { + Slot var15 = (Slot)this.inventorySlots.inventorySlots.get(var13); + this.drawSlotInventory(var15); + if(this.isMouseOverSlot(var15, var1, var2)) { + this.theSlot = var15; + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + int var8 = var15.xDisplayPosition; + var9 = var15.yDisplayPosition; + this.drawGradientRect(var8, var9, var8 + 16, var9 + 16, -2130706433, -2130706433); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + } + } + + this.drawGuiContainerForegroundLayer(var1, var2); + InventoryPlayer var14 = this.mc.thePlayer.inventory; + ItemStack var16 = this.draggedStack == null ? var14.getItemStack() : this.draggedStack; + if(var16 != null) { + byte var17 = 8; + var9 = this.draggedStack == null ? 8 : 16; + String var10 = null; + if(this.draggedStack != null && this.isRightMouseClick) { + var16 = var16.copy(); + var16.stackSize = MathHelper.ceiling_float_int((float)var16.stackSize / 2.0F); + } else if(this.field_94076_q && this.field_94077_p.size() > 1) { + var16 = var16.copy(); + var16.stackSize = this.field_94069_F; + if(var16.stackSize == 0) { + var10 = "" + EnumChatFormatting.YELLOW + "0"; + } + } + + this.drawItemStack(var16, var1 - var4 - var17, var2 - var5 - var9, var10); + } + + if(this.returningStack != null) { + float var18 = (float)(Minecraft.getSystemTime() - this.returningStackTime) / 100.0F; + if(var18 >= 1.0F) { + var18 = 1.0F; + this.returningStack = null; + } + + var9 = this.returningStackDestSlot.xDisplayPosition - this.field_85049_r; + int var20 = this.returningStackDestSlot.yDisplayPosition - this.field_85048_s; + int var11 = this.field_85049_r + (int)((float)var9 * var18); + int var12 = this.field_85048_s + (int)((float)var20 * var18); + this.drawItemStack(this.returningStack, var11, var12, (String)null); + } + + GL11.glPopMatrix(); + if(var14.getItemStack() == null && this.theSlot != null && this.theSlot.getHasStack()) { + ItemStack var19 = this.theSlot.getStack(); + this.drawItemStackTooltip(var19, var1, var2); + } + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + RenderHelper.enableStandardItemLighting(); + } + + private void drawItemStack(ItemStack var1, int var2, int var3, String var4) { + GL11.glTranslatef(0.0F, 0.0F, 32.0F); + this.zLevel = 200.0F; + itemRenderer.zLevel = 200.0F; + itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, var1, var2, var3); + itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, this.mc.renderEngine, var1, var2, var3 - (this.draggedStack == null ? 0 : 8), var4); + this.zLevel = 0.0F; + itemRenderer.zLevel = 0.0F; + } + + protected void drawItemStackTooltip(ItemStack var1, int var2, int var3) { + List var4 = var1.getTooltip(this.mc.thePlayer, this.mc.gameSettings.advancedItemTooltips); + + for(int var5 = 0; var5 < var4.size(); ++var5) { + if(var5 == 0) { + var4.set(var5, "\u00a7" + Integer.toHexString(var1.getRarity().rarityColor) + (String)var4.get(var5)); + } else { + var4.set(var5, EnumChatFormatting.GRAY + (String)var4.get(var5)); + } + } + + this.func_102021_a(var4, var2, var3); + } + + protected void drawCreativeTabHoveringText(String var1, int var2, int var3) { + this.func_102021_a(Arrays.asList(new String[]{var1}), var2, var3); + } + + protected void func_102021_a(List var1, int var2, int var3) { + if(!var1.isEmpty()) { + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + int var4 = 0; + Iterator var5 = var1.iterator(); + + while(var5.hasNext()) { + String var6 = (String)var5.next(); + int var7 = this.fontRenderer.getStringWidth(var6); + if(var7 > var4) { + var4 = var7; + } + } + + int var14 = var2 + 12; + int var15 = var3 - 12; + int var8 = 8; + if(var1.size() > 1) { + var8 += 2 + (var1.size() - 1) * 10; + } + + if(var14 + var4 > this.width) { + var14 -= 28 + var4; + } + + if(var15 + var8 + 6 > this.height) { + var15 = this.height - var8 - 6; + } + + this.zLevel = 300.0F; + itemRenderer.zLevel = 300.0F; + int var9 = -267386864; + this.drawGradientRect(var14 - 3, var15 - 4, var14 + var4 + 3, var15 - 3, var9, var9); + this.drawGradientRect(var14 - 3, var15 + var8 + 3, var14 + var4 + 3, var15 + var8 + 4, var9, var9); + this.drawGradientRect(var14 - 3, var15 - 3, var14 + var4 + 3, var15 + var8 + 3, var9, var9); + this.drawGradientRect(var14 - 4, var15 - 3, var14 - 3, var15 + var8 + 3, var9, var9); + this.drawGradientRect(var14 + var4 + 3, var15 - 3, var14 + var4 + 4, var15 + var8 + 3, var9, var9); + int var10 = 1347420415; + int var11 = (var10 & 16711422) >> 1 | var10 & -16777216; + this.drawGradientRect(var14 - 3, var15 - 3 + 1, var14 - 3 + 1, var15 + var8 + 3 - 1, var10, var11); + this.drawGradientRect(var14 + var4 + 2, var15 - 3 + 1, var14 + var4 + 3, var15 + var8 + 3 - 1, var10, var11); + this.drawGradientRect(var14 - 3, var15 - 3, var14 + var4 + 3, var15 - 3 + 1, var10, var10); + this.drawGradientRect(var14 - 3, var15 + var8 + 2, var14 + var4 + 3, var15 + var8 + 3, var11, var11); + + for(int var12 = 0; var12 < var1.size(); ++var12) { + String var13 = (String)var1.get(var12); + this.fontRenderer.drawStringWithShadow(var13, var14, var15, -1); + if(var12 == 0) { + var15 += 2; + } + + var15 += 10; + } + + this.zLevel = 0.0F; + itemRenderer.zLevel = 0.0F; + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + RenderHelper.enableStandardItemLighting(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + } + } + + protected void drawGuiContainerForegroundLayer(int var1, int var2) { + } + + protected abstract void drawGuiContainerBackgroundLayer(float var1, int var2, int var3); + + private void drawSlotInventory(Slot var1) { + int var2 = var1.xDisplayPosition; + int var3 = var1.yDisplayPosition; + ItemStack var4 = var1.getStack(); + boolean var5 = false; + boolean var6 = var1 == this.clickedSlot && this.draggedStack != null && !this.isRightMouseClick; + ItemStack var7 = this.mc.thePlayer.inventory.getItemStack(); + String var8 = null; + if(var1 == this.clickedSlot && this.draggedStack != null && this.isRightMouseClick && var4 != null) { + var4 = var4.copy(); + var4.stackSize /= 2; + } else if(this.field_94076_q && this.field_94077_p.contains(var1) && var7 != null) { + if(this.field_94077_p.size() == 1) { + return; + } + + if(Container.func_94527_a(var1, var7, true) && this.inventorySlots.func_94531_b(var1)) { + var4 = var7.copy(); + var5 = true; + Container.func_94525_a(this.field_94077_p, this.field_94071_C, var4, var1.getStack() == null ? 0 : var1.getStack().stackSize); + if(var4.stackSize > var4.getMaxStackSize()) { + var8 = EnumChatFormatting.YELLOW + "" + var4.getMaxStackSize(); + var4.stackSize = var4.getMaxStackSize(); + } + + if(var4.stackSize > var1.getSlotStackLimit()) { + var8 = EnumChatFormatting.YELLOW + "" + var1.getSlotStackLimit(); + var4.stackSize = var1.getSlotStackLimit(); + } + } else { + this.field_94077_p.remove(var1); + this.func_94066_g(); + } + } + + this.zLevel = 100.0F; + itemRenderer.zLevel = 100.0F; + if(var4 == null) { + Icon var9 = var1.getBackgroundIconIndex(); + if(var9 != null) { + GL11.glDisable(GL11.GL_LIGHTING); + this.mc.renderEngine.bindTexture("/gui/items.png"); + this.drawTexturedModelRectFromIcon(var2, var3, var9, 16, 16); + GL11.glEnable(GL11.GL_LIGHTING); + var6 = true; + } + } + + if(!var6) { + if(var5) { + drawRect(var2, var3, var2 + 16, var3 + 16, -2130706433); + } + + GL11.glEnable(GL11.GL_DEPTH_TEST); + itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, var4, var2, var3); + itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, this.mc.renderEngine, var4, var2, var3, var8); + } + + itemRenderer.zLevel = 0.0F; + this.zLevel = 0.0F; + } + + private void func_94066_g() { + ItemStack var1 = this.mc.thePlayer.inventory.getItemStack(); + if(var1 != null && this.field_94076_q) { + this.field_94069_F = var1.stackSize; + + ItemStack var4; + int var5; + for(Iterator var2 = this.field_94077_p.iterator(); var2.hasNext(); this.field_94069_F -= var4.stackSize - var5) { + Slot var3 = (Slot)var2.next(); + var4 = var1.copy(); + var5 = var3.getStack() == null ? 0 : var3.getStack().stackSize; + Container.func_94525_a(this.field_94077_p, this.field_94071_C, var4, var5); + if(var4.stackSize > var4.getMaxStackSize()) { + var4.stackSize = var4.getMaxStackSize(); + } + + if(var4.stackSize > var3.getSlotStackLimit()) { + var4.stackSize = var3.getSlotStackLimit(); + } + } + + } + } + + private Slot getSlotAtPosition(int var1, int var2) { + for(int var3 = 0; var3 < this.inventorySlots.inventorySlots.size(); ++var3) { + Slot var4 = (Slot)this.inventorySlots.inventorySlots.get(var3); + if(this.isMouseOverSlot(var4, var1, var2)) { + return var4; + } + } + + return null; + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + boolean var4 = var3 == this.mc.gameSettings.keyBindPickBlock.keyCode + 100; + Slot var5 = this.getSlotAtPosition(var1, var2); + long var6 = Minecraft.getSystemTime(); + this.field_94074_J = this.field_94072_H == var5 && var6 - this.field_94070_G < 250L && this.field_94073_I == var3; + this.field_94068_E = false; + if(var3 == 0 || var3 == 1 || var4) { + int var8 = this.guiLeft; + int var9 = this.guiTop; + boolean var10 = var1 < var8 || var2 < var9 || var1 >= var8 + this.xSize || var2 >= var9 + this.ySize; + int var11 = -1; + if(var5 != null) { + var11 = var5.slotNumber; + } + + if(var10) { + var11 = -999; + } + + if(this.mc.gameSettings.touchscreen && var10 && this.mc.thePlayer.inventory.getItemStack() == null) { + this.mc.displayGuiScreen((GuiScreen)null); + return; + } + + if(var11 != -1) { + if(this.mc.gameSettings.touchscreen) { + if(var5 != null && var5.getHasStack()) { + this.clickedSlot = var5; + this.draggedStack = null; + this.isRightMouseClick = var3 == 1; + } else { + this.clickedSlot = null; + } + } else if(!this.field_94076_q) { + if(this.mc.thePlayer.inventory.getItemStack() == null) { + if(var3 == this.mc.gameSettings.keyBindPickBlock.keyCode + 100) { + this.handleMouseClick(var5, var11, var3, 3); + } else { + boolean var12 = var11 != -999 && (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)); + byte var13 = 0; + if(var12) { + this.field_94075_K = var5 != null && var5.getHasStack() ? var5.getStack() : null; + var13 = 1; + } else if(var11 == -999) { + var13 = 4; + } + + this.handleMouseClick(var5, var11, var3, var13); + } + + this.field_94068_E = true; + } else { + this.field_94076_q = true; + this.field_94067_D = var3; + this.field_94077_p.clear(); + if(var3 == 0) { + this.field_94071_C = 0; + } else if(var3 == 1) { + this.field_94071_C = 1; + } + } + } + } + } + + this.field_94072_H = var5; + this.field_94070_G = var6; + this.field_94073_I = var3; + } + + protected void func_85041_a(int var1, int var2, int var3, long var4) { + Slot var6 = this.getSlotAtPosition(var1, var2); + ItemStack var7 = this.mc.thePlayer.inventory.getItemStack(); + if(this.clickedSlot != null && this.mc.gameSettings.touchscreen) { + if(var3 == 0 || var3 == 1) { + if(this.draggedStack == null) { + if(var6 != this.clickedSlot) { + this.draggedStack = this.clickedSlot.getStack().copy(); + } + } else if(this.draggedStack.stackSize > 1 && var6 != null && Container.func_94527_a(var6, this.draggedStack, false)) { + long var8 = Minecraft.getSystemTime(); + if(this.field_92033_y == var6) { + if(var8 - this.field_92032_z > 500L) { + this.handleMouseClick(this.clickedSlot, this.clickedSlot.slotNumber, 0, 0); + this.handleMouseClick(var6, var6.slotNumber, 1, 0); + this.handleMouseClick(this.clickedSlot, this.clickedSlot.slotNumber, 0, 0); + this.field_92032_z = var8 + 750L; + --this.draggedStack.stackSize; + } + } else { + this.field_92033_y = var6; + this.field_92032_z = var8; + } + } + } + } else if(this.field_94076_q && var6 != null && var7 != null && var7.stackSize > this.field_94077_p.size() && Container.func_94527_a(var6, var7, true) && var6.isItemValid(var7) && this.inventorySlots.func_94531_b(var6)) { + this.field_94077_p.add(var6); + this.func_94066_g(); + } + + } + + protected void mouseMovedOrUp(int var1, int var2, int var3) { + Slot var4 = this.getSlotAtPosition(var1, var2); + int var5 = this.guiLeft; + int var6 = this.guiTop; + boolean var7 = var1 < var5 || var2 < var6 || var1 >= var5 + this.xSize || var2 >= var6 + this.ySize; + int var8 = -1; + if(var4 != null) { + var8 = var4.slotNumber; + } + + if(var7) { + var8 = -999; + } + + Slot var10; + Iterator var11; + if(this.field_94074_J && var4 != null && var3 == 0 && this.inventorySlots.func_94530_a((ItemStack)null, var4)) { + if(isShiftKeyDown()) { + if(var4 != null && var4.inventory != null && this.field_94075_K != null) { + var11 = this.inventorySlots.inventorySlots.iterator(); + + while(var11.hasNext()) { + var10 = (Slot)var11.next(); + if(var10 != null && var10.canTakeStack(this.mc.thePlayer) && var10.getHasStack() && var10.inventory == var4.inventory && Container.func_94527_a(var10, this.field_94075_K, true)) { + this.handleMouseClick(var10, var10.slotNumber, var3, 1); + } + } + } + } else { + this.handleMouseClick(var4, var8, var3, 6); + } + + this.field_94074_J = false; + this.field_94070_G = 0L; + } else { + if(this.field_94076_q && this.field_94067_D != var3) { + this.field_94076_q = false; + this.field_94077_p.clear(); + this.field_94068_E = true; + return; + } + + if(this.field_94068_E) { + this.field_94068_E = false; + return; + } + + boolean var9; + if(this.clickedSlot != null && this.mc.gameSettings.touchscreen) { + if(var3 == 0 || var3 == 1) { + if(this.draggedStack == null && var4 != this.clickedSlot) { + this.draggedStack = this.clickedSlot.getStack(); + } + + var9 = Container.func_94527_a(var4, this.draggedStack, false); + if(var8 != -1 && this.draggedStack != null && var9) { + this.handleMouseClick(this.clickedSlot, this.clickedSlot.slotNumber, var3, 0); + this.handleMouseClick(var4, var8, 0, 0); + if(this.mc.thePlayer.inventory.getItemStack() != null) { + this.handleMouseClick(this.clickedSlot, this.clickedSlot.slotNumber, var3, 0); + this.field_85049_r = var1 - var5; + this.field_85048_s = var2 - var6; + this.returningStackDestSlot = this.clickedSlot; + this.returningStack = this.draggedStack; + this.returningStackTime = Minecraft.getSystemTime(); + } else { + this.returningStack = null; + } + } else if(this.draggedStack != null) { + this.field_85049_r = var1 - var5; + this.field_85048_s = var2 - var6; + this.returningStackDestSlot = this.clickedSlot; + this.returningStack = this.draggedStack; + this.returningStackTime = Minecraft.getSystemTime(); + } + + this.draggedStack = null; + this.clickedSlot = null; + } + } else if(this.field_94076_q && !this.field_94077_p.isEmpty()) { + this.handleMouseClick((Slot)null, -999, Container.func_94534_d(0, this.field_94071_C), 5); + var11 = this.field_94077_p.iterator(); + + while(var11.hasNext()) { + var10 = (Slot)var11.next(); + this.handleMouseClick(var10, var10.slotNumber, Container.func_94534_d(1, this.field_94071_C), 5); + } + + this.handleMouseClick((Slot)null, -999, Container.func_94534_d(2, this.field_94071_C), 5); + } else if(this.mc.thePlayer.inventory.getItemStack() != null) { + if(var3 == this.mc.gameSettings.keyBindPickBlock.keyCode + 100) { + this.handleMouseClick(var4, var8, var3, 3); + } else { + var9 = var8 != -999 && (Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT)); + if(var9) { + this.field_94075_K = var4 != null && var4.getHasStack() ? var4.getStack() : null; + } + + this.handleMouseClick(var4, var8, var3, var9 ? 1 : 0); + } + } + } + + if(this.mc.thePlayer.inventory.getItemStack() == null) { + this.field_94070_G = 0L; + } + + this.field_94076_q = false; + } + + private boolean isMouseOverSlot(Slot var1, int var2, int var3) { + return this.isPointInRegion(var1.xDisplayPosition, var1.yDisplayPosition, 16, 16, var2, var3); + } + + protected boolean isPointInRegion(int var1, int var2, int var3, int var4, int var5, int var6) { + int var7 = this.guiLeft; + int var8 = this.guiTop; + var5 -= var7; + var6 -= var8; + return var5 >= var1 - 1 && var5 < var1 + var3 + 1 && var6 >= var2 - 1 && var6 < var2 + var4 + 1; + } + + protected void handleMouseClick(Slot var1, int var2, int var3, int var4) { + if(var1 != null) { + var2 = var1.slotNumber; + } + + this.mc.playerController.windowClick(this.inventorySlots.windowId, var2, var3, var4, this.mc.thePlayer); + } + + protected void keyTyped(char var1, int var2) { + if(var2 == 1 || var2 == this.mc.gameSettings.keyBindInventory.keyCode) { + this.mc.thePlayer.closeScreen(); + } + + this.checkHotbarKeys(var2); + if(this.theSlot != null && this.theSlot.getHasStack()) { + if(var2 == this.mc.gameSettings.keyBindPickBlock.keyCode) { + this.handleMouseClick(this.theSlot, this.theSlot.slotNumber, 0, 3); + } else if(var2 == this.mc.gameSettings.keyBindDrop.keyCode) { + this.handleMouseClick(this.theSlot, this.theSlot.slotNumber, isCtrlKeyDown() ? 1 : 0, 4); + } + } + + } + + protected boolean checkHotbarKeys(int var1) { + if(this.mc.thePlayer.inventory.getItemStack() == null && this.theSlot != null) { + for(int var2 = 0; var2 < 9; ++var2) { + if(var1 == 2 + var2) { + this.handleMouseClick(this.theSlot, this.theSlot.slotNumber, var2, 2); + return true; + } + } + } + + return false; + } + + public void onGuiClosed() { + if(this.mc.thePlayer != null) { + this.inventorySlots.onCraftGuiClosed(this.mc.thePlayer); + } + } + + public boolean doesGuiPauseGame() { + return false; + } + + public void updateScreen() { + super.updateScreen(); + if(!this.mc.thePlayer.isEntityAlive() || this.mc.thePlayer.isDead) { + this.mc.thePlayer.closeScreen(); + } + + } +} diff --git a/src/net/minecraft/src/GuiContainerCreative.java b/src/net/minecraft/src/GuiContainerCreative.java new file mode 100644 index 0000000..3291e16 --- /dev/null +++ b/src/net/minecraft/src/GuiContainerCreative.java @@ -0,0 +1,597 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class GuiContainerCreative extends InventoryEffectRenderer { + private static InventoryBasic inventory = new InventoryBasic("tmp", true, 45); + private static int selectedTabIndex = CreativeTabs.tabBlock.getTabIndex(); + private float currentScroll = 0.0F; + private boolean isScrolling = false; + private boolean wasClicking; + private GuiTextField searchField; + private List backupContainerSlots; + private Slot field_74235_v = null; + private boolean field_74234_w = false; + private CreativeCrafting field_82324_x; + + public GuiContainerCreative(EntityPlayer var1) { + super(new ContainerCreative(var1)); + var1.openContainer = this.inventorySlots; + this.allowUserInput = true; + var1.addStat(AchievementList.openInventory, 1); + this.ySize = 136; + this.xSize = 195; + } + + public void updateScreen() { + if(!this.mc.playerController.isInCreativeMode()) { + this.mc.displayGuiScreen(new GuiInventory(this.mc.thePlayer)); + } + + } + + protected void handleMouseClick(Slot var1, int var2, int var3, int var4) { + this.field_74234_w = true; + boolean var5 = var4 == 1; + var4 = var2 == -999 && var4 == 0 ? 4 : var4; + ItemStack var7; + InventoryPlayer var11; + if(var1 == null && selectedTabIndex != CreativeTabs.tabInventory.getTabIndex() && var4 != 5) { + var11 = this.mc.thePlayer.inventory; + if(var11.getItemStack() != null) { + if(var3 == 0) { + this.mc.thePlayer.dropPlayerItem(var11.getItemStack()); + this.mc.playerController.func_78752_a(var11.getItemStack()); + var11.setItemStack((ItemStack)null); + } + + if(var3 == 1) { + var7 = var11.getItemStack().splitStack(1); + this.mc.thePlayer.dropPlayerItem(var7); + this.mc.playerController.func_78752_a(var7); + if(var11.getItemStack().stackSize == 0) { + var11.setItemStack((ItemStack)null); + } + } + } + } else { + int var10; + if(var1 == this.field_74235_v && var5) { + for(var10 = 0; var10 < this.mc.thePlayer.inventoryContainer.getInventory().size(); ++var10) { + this.mc.playerController.sendSlotPacket((ItemStack)null, var10); + } + } else { + ItemStack var6; + if(selectedTabIndex == CreativeTabs.tabInventory.getTabIndex()) { + if(var1 == this.field_74235_v) { + this.mc.thePlayer.inventory.setItemStack((ItemStack)null); + } else if(var4 == 4 && var1 != null && var1.getHasStack()) { + var6 = var1.decrStackSize(var3 == 0 ? 1 : var1.getStack().getMaxStackSize()); + this.mc.thePlayer.dropPlayerItem(var6); + this.mc.playerController.func_78752_a(var6); + } else if(var4 == 4 && this.mc.thePlayer.inventory.getItemStack() != null) { + this.mc.thePlayer.dropPlayerItem(this.mc.thePlayer.inventory.getItemStack()); + this.mc.playerController.func_78752_a(this.mc.thePlayer.inventory.getItemStack()); + this.mc.thePlayer.inventory.setItemStack((ItemStack)null); + } else { + this.mc.thePlayer.inventoryContainer.slotClick(var1 == null ? var2 : SlotCreativeInventory.func_75240_a((SlotCreativeInventory)var1).slotNumber, var3, var4, this.mc.thePlayer); + this.mc.thePlayer.inventoryContainer.detectAndSendChanges(); + } + } else if(var4 != 5 && var1.inventory == inventory) { + var11 = this.mc.thePlayer.inventory; + var7 = var11.getItemStack(); + ItemStack var8 = var1.getStack(); + ItemStack var9; + if(var4 == 2) { + if(var8 != null && var3 >= 0 && var3 < 9) { + var9 = var8.copy(); + var9.stackSize = var9.getMaxStackSize(); + this.mc.thePlayer.inventory.setInventorySlotContents(var3, var9); + this.mc.thePlayer.inventoryContainer.detectAndSendChanges(); + } + + return; + } + + if(var4 == 3) { + if(var11.getItemStack() == null && var1.getHasStack()) { + var9 = var1.getStack().copy(); + var9.stackSize = var9.getMaxStackSize(); + var11.setItemStack(var9); + } + + return; + } + + if(var4 == 4) { + if(var8 != null) { + var9 = var8.copy(); + var9.stackSize = var3 == 0 ? 1 : var9.getMaxStackSize(); + this.mc.thePlayer.dropPlayerItem(var9); + this.mc.playerController.func_78752_a(var9); + } + + return; + } + + if(var7 != null && var8 != null && var7.isItemEqual(var8)) { + if(var3 == 0) { + if(var5) { + var7.stackSize = var7.getMaxStackSize(); + } else if(var7.stackSize < var7.getMaxStackSize()) { + ++var7.stackSize; + } + } else if(var7.stackSize <= 1) { + var11.setItemStack((ItemStack)null); + } else { + --var7.stackSize; + } + } else if(var8 != null && var7 == null) { + var11.setItemStack(ItemStack.copyItemStack(var8)); + var7 = var11.getItemStack(); + if(var5) { + var7.stackSize = var7.getMaxStackSize(); + } + } else { + var11.setItemStack((ItemStack)null); + } + } else { + this.inventorySlots.slotClick(var1 == null ? var2 : var1.slotNumber, var3, var4, this.mc.thePlayer); + if(Container.func_94532_c(var3) == 2) { + for(var10 = 0; var10 < 9; ++var10) { + this.mc.playerController.sendSlotPacket(this.inventorySlots.getSlot(45 + var10).getStack(), 36 + var10); + } + } else if(var1 != null) { + var6 = this.inventorySlots.getSlot(var1.slotNumber).getStack(); + this.mc.playerController.sendSlotPacket(var6, var1.slotNumber - this.inventorySlots.inventorySlots.size() + 9 + 36); + } + } + } + } + + } + + public void initGui() { + if(this.mc.playerController.isInCreativeMode()) { + super.initGui(); + this.buttonList.clear(); + Keyboard.enableRepeatEvents(true); + this.searchField = new GuiTextField(this.fontRenderer, this.guiLeft + 82, this.guiTop + 6, 89, this.fontRenderer.FONT_HEIGHT); + this.searchField.setMaxStringLength(15); + this.searchField.setEnableBackgroundDrawing(false); + this.searchField.setVisible(false); + this.searchField.setTextColor(16777215); + int var1 = selectedTabIndex; + selectedTabIndex = -1; + this.setCurrentCreativeTab(CreativeTabs.creativeTabArray[var1]); + this.field_82324_x = new CreativeCrafting(this.mc); + this.mc.thePlayer.inventoryContainer.addCraftingToCrafters(this.field_82324_x); + } else { + this.mc.displayGuiScreen(new GuiInventory(this.mc.thePlayer)); + } + + } + + public void onGuiClosed() { + super.onGuiClosed(); + if(this.mc.thePlayer != null && this.mc.thePlayer.inventory != null) { + this.mc.thePlayer.inventoryContainer.removeCraftingFromCrafters(this.field_82324_x); + } + + Keyboard.enableRepeatEvents(false); + } + + protected void keyTyped(char var1, int var2) { + if(selectedTabIndex != CreativeTabs.tabAllSearch.getTabIndex()) { + if(GameSettings.isKeyDown(this.mc.gameSettings.keyBindChat)) { + this.setCurrentCreativeTab(CreativeTabs.tabAllSearch); + } else { + super.keyTyped(var1, var2); + } + + } else { + if(this.field_74234_w) { + this.field_74234_w = false; + this.searchField.setText(""); + } + + if(!this.checkHotbarKeys(var2)) { + if(this.searchField.textboxKeyTyped(var1, var2)) { + this.updateCreativeSearch(); + } else { + super.keyTyped(var1, var2); + } + + } + } + } + + private void updateCreativeSearch() { + ContainerCreative var1 = (ContainerCreative)this.inventorySlots; + var1.itemList.clear(); + Item[] var2 = Item.itemsList; + int var3 = var2.length; + + int var4; + for(var4 = 0; var4 < var3; ++var4) { + Item var5 = var2[var4]; + if(var5 != null && var5.getCreativeTab() != null) { + var5.getSubItems(var5.itemID, (CreativeTabs)null, var1.itemList); + } + } + + Enchantment[] var8 = Enchantment.enchantmentsList; + var3 = var8.length; + + for(var4 = 0; var4 < var3; ++var4) { + Enchantment var11 = var8[var4]; + if(var11 != null && var11.type != null) { + Item.enchantedBook.func_92113_a(var11, var1.itemList); + } + } + + Iterator var9 = var1.itemList.iterator(); + String var10 = this.searchField.getText().toLowerCase(); + + while(var9.hasNext()) { + ItemStack var12 = (ItemStack)var9.next(); + boolean var13 = false; + Iterator var6 = var12.getTooltip(this.mc.thePlayer, this.mc.gameSettings.advancedItemTooltips).iterator(); + + while(var6.hasNext()) { + String var7 = (String)var6.next(); + if(var7.toLowerCase().contains(var10)) { + var13 = true; + break; + } + } + + if(!var13) { + var9.remove(); + } + } + + this.currentScroll = 0.0F; + var1.scrollTo(0.0F); + } + + protected void drawGuiContainerForegroundLayer(int var1, int var2) { + CreativeTabs var3 = CreativeTabs.creativeTabArray[selectedTabIndex]; + if(var3.drawInForegroundOfTab()) { + this.fontRenderer.drawString(var3.getTranslatedTabLabel(), 8, 6, 4210752); + } + + } + + protected void mouseClicked(int var1, int var2, int var3) { + if(var3 == 0) { + int var4 = var1 - this.guiLeft; + int var5 = var2 - this.guiTop; + CreativeTabs[] var6 = CreativeTabs.creativeTabArray; + int var7 = var6.length; + + for(int var8 = 0; var8 < var7; ++var8) { + CreativeTabs var9 = var6[var8]; + if(this.func_74232_a(var9, var4, var5)) { + return; + } + } + } + + super.mouseClicked(var1, var2, var3); + } + + protected void mouseMovedOrUp(int var1, int var2, int var3) { + if(var3 == 0) { + int var4 = var1 - this.guiLeft; + int var5 = var2 - this.guiTop; + CreativeTabs[] var6 = CreativeTabs.creativeTabArray; + int var7 = var6.length; + + for(int var8 = 0; var8 < var7; ++var8) { + CreativeTabs var9 = var6[var8]; + if(this.func_74232_a(var9, var4, var5)) { + this.setCurrentCreativeTab(var9); + return; + } + } + } + + super.mouseMovedOrUp(var1, var2, var3); + } + + private boolean needsScrollBars() { + return selectedTabIndex != CreativeTabs.tabInventory.getTabIndex() && CreativeTabs.creativeTabArray[selectedTabIndex].shouldHidePlayerInventory() && ((ContainerCreative)this.inventorySlots).hasMoreThan1PageOfItemsInList(); + } + + private void setCurrentCreativeTab(CreativeTabs var1) { + int var2 = selectedTabIndex; + selectedTabIndex = var1.getTabIndex(); + ContainerCreative var3 = (ContainerCreative)this.inventorySlots; + this.field_94077_p.clear(); + var3.itemList.clear(); + var1.displayAllReleventItems(var3.itemList); + if(var1 == CreativeTabs.tabInventory) { + Container var4 = this.mc.thePlayer.inventoryContainer; + if(this.backupContainerSlots == null) { + this.backupContainerSlots = var3.inventorySlots; + } + + var3.inventorySlots = new ArrayList(); + + for(int var5 = 0; var5 < var4.inventorySlots.size(); ++var5) { + SlotCreativeInventory var6 = new SlotCreativeInventory(this, (Slot)var4.inventorySlots.get(var5), var5); + var3.inventorySlots.add(var6); + int var7; + int var8; + int var9; + if(var5 >= 5 && var5 < 9) { + var7 = var5 - 5; + var8 = var7 / 2; + var9 = var7 % 2; + var6.xDisplayPosition = 9 + var8 * 54; + var6.yDisplayPosition = 6 + var9 * 27; + } else if(var5 >= 0 && var5 < 5) { + var6.yDisplayPosition = -2000; + var6.xDisplayPosition = -2000; + } else if(var5 < var4.inventorySlots.size()) { + var7 = var5 - 9; + var8 = var7 % 9; + var9 = var7 / 9; + var6.xDisplayPosition = 9 + var8 * 18; + if(var5 >= 36) { + var6.yDisplayPosition = 112; + } else { + var6.yDisplayPosition = 54 + var9 * 18; + } + } + } + + this.field_74235_v = new Slot(inventory, 0, 173, 112); + var3.inventorySlots.add(this.field_74235_v); + } else if(var2 == CreativeTabs.tabInventory.getTabIndex()) { + var3.inventorySlots = this.backupContainerSlots; + this.backupContainerSlots = null; + } + + if(this.searchField != null) { + if(var1 == CreativeTabs.tabAllSearch) { + this.searchField.setVisible(true); + this.searchField.setCanLoseFocus(false); + this.searchField.setFocused(true); + this.searchField.setText(""); + this.updateCreativeSearch(); + } else { + this.searchField.setVisible(false); + this.searchField.setCanLoseFocus(true); + this.searchField.setFocused(false); + } + } + + this.currentScroll = 0.0F; + var3.scrollTo(0.0F); + } + + public void handleMouseInput() { + super.handleMouseInput(); + int var1 = Mouse.getEventDWheel(); + if(var1 != 0 && this.needsScrollBars()) { + int var2 = ((ContainerCreative)this.inventorySlots).itemList.size() / 9 - 5 + 1; + if(var1 > 0) { + var1 = 1; + } + + if(var1 < 0) { + var1 = -1; + } + + this.currentScroll = (float)((double)this.currentScroll - (double)var1 / (double)var2); + if(this.currentScroll < 0.0F) { + this.currentScroll = 0.0F; + } + + if(this.currentScroll > 1.0F) { + this.currentScroll = 1.0F; + } + + ((ContainerCreative)this.inventorySlots).scrollTo(this.currentScroll); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + boolean var4 = Mouse.isButtonDown(0); + int var5 = this.guiLeft; + int var6 = this.guiTop; + int var7 = var5 + 175; + int var8 = var6 + 18; + int var9 = var7 + 14; + int var10 = var8 + 112; + if(!this.wasClicking && var4 && var1 >= var7 && var2 >= var8 && var1 < var9 && var2 < var10) { + this.isScrolling = this.needsScrollBars(); + } + + if(!var4) { + this.isScrolling = false; + } + + this.wasClicking = var4; + if(this.isScrolling) { + this.currentScroll = ((float)(var2 - var8) - 7.5F) / ((float)(var10 - var8) - 15.0F); + if(this.currentScroll < 0.0F) { + this.currentScroll = 0.0F; + } + + if(this.currentScroll > 1.0F) { + this.currentScroll = 1.0F; + } + + ((ContainerCreative)this.inventorySlots).scrollTo(this.currentScroll); + } + + super.drawScreen(var1, var2, var3); + CreativeTabs[] var11 = CreativeTabs.creativeTabArray; + int var12 = var11.length; + + for(int var13 = 0; var13 < var12; ++var13) { + CreativeTabs var14 = var11[var13]; + if(this.renderCreativeInventoryHoveringText(var14, var1, var2)) { + break; + } + } + + if(this.field_74235_v != null && selectedTabIndex == CreativeTabs.tabInventory.getTabIndex() && this.isPointInRegion(this.field_74235_v.xDisplayPosition, this.field_74235_v.yDisplayPosition, 16, 16, var1, var2)) { + this.drawCreativeTabHoveringText(StringTranslate.getInstance().translateKey("inventory.binSlot"), var1, var2); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_LIGHTING); + } + + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderHelper.enableGUIStandardItemLighting(); + CreativeTabs var4 = CreativeTabs.creativeTabArray[selectedTabIndex]; + CreativeTabs[] var5 = CreativeTabs.creativeTabArray; + int var6 = var5.length; + + int var7; + for(var7 = 0; var7 < var6; ++var7) { + CreativeTabs var8 = var5[var7]; + this.mc.renderEngine.bindTexture("/gui/allitems.png"); + if(var8.getTabIndex() != selectedTabIndex) { + this.renderCreativeTab(var8); + } + } + + this.mc.renderEngine.bindTexture("/gui/creative_inv/" + var4.getBackgroundImageName()); + this.drawTexturedModalRect(this.guiLeft, this.guiTop, 0, 0, this.xSize, this.ySize); + this.searchField.drawTextBox(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + int var9 = this.guiLeft + 175; + var6 = this.guiTop + 18; + var7 = var6 + 112; + this.mc.renderEngine.bindTexture("/gui/allitems.png"); + if(var4.shouldHidePlayerInventory()) { + this.drawTexturedModalRect(var9, var6 + (int)((float)(var7 - var6 - 17) * this.currentScroll), 232 + (this.needsScrollBars() ? 0 : 12), 0, 12, 15); + } + + this.renderCreativeTab(var4); + if(var4 == CreativeTabs.tabInventory) { + GuiInventory.drawPlayerOnGui(this.mc, this.guiLeft + 43, this.guiTop + 45, 20, (float)(this.guiLeft + 43 - var2), (float)(this.guiTop + 45 - 30 - var3)); + } + + } + + protected boolean func_74232_a(CreativeTabs var1, int var2, int var3) { + int var4 = var1.getTabColumn(); + int var5 = 28 * var4; + byte var6 = 0; + if(var4 == 5) { + var5 = this.xSize - 28 + 2; + } else if(var4 > 0) { + var5 += var4; + } + + int var7; + if(var1.isTabInFirstRow()) { + var7 = var6 - 32; + } else { + var7 = var6 + this.ySize; + } + + return var2 >= var5 && var2 <= var5 + 28 && var3 >= var7 && var3 <= var7 + 32; + } + + protected boolean renderCreativeInventoryHoveringText(CreativeTabs var1, int var2, int var3) { + int var4 = var1.getTabColumn(); + int var5 = 28 * var4; + byte var6 = 0; + if(var4 == 5) { + var5 = this.xSize - 28 + 2; + } else if(var4 > 0) { + var5 += var4; + } + + int var7; + if(var1.isTabInFirstRow()) { + var7 = var6 - 32; + } else { + var7 = var6 + this.ySize; + } + + if(this.isPointInRegion(var5 + 3, var7 + 3, 23, 27, var2, var3)) { + this.drawCreativeTabHoveringText(var1.getTranslatedTabLabel(), var2, var3); + return true; + } else { + return false; + } + } + + protected void renderCreativeTab(CreativeTabs var1) { + boolean var2 = var1.getTabIndex() == selectedTabIndex; + boolean var3 = var1.isTabInFirstRow(); + int var4 = var1.getTabColumn(); + int var5 = var4 * 28; + int var6 = 0; + int var7 = this.guiLeft + 28 * var4; + int var8 = this.guiTop; + byte var9 = 32; + if(var2) { + var6 += 32; + } + + if(var4 == 5) { + var7 = this.guiLeft + this.xSize - 28; + } else if(var4 > 0) { + var7 += var4; + } + + if(var3) { + var8 -= 28; + } else { + var6 += 64; + var8 += this.ySize - 4; + } + + GL11.glDisable(GL11.GL_LIGHTING); + this.drawTexturedModalRect(var7, var8, var5, var6, 28, var9); + this.zLevel = 100.0F; + itemRenderer.zLevel = 100.0F; + var7 += 6; + var8 += 8 + (var3 ? 1 : -1); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + ItemStack var10 = new ItemStack(var1.getTabIconItem()); + itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, var10, var7, var8); + itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, this.mc.renderEngine, var10, var7, var8); + GL11.glDisable(GL11.GL_LIGHTING); + itemRenderer.zLevel = 0.0F; + this.zLevel = 0.0F; + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 0) { + this.mc.displayGuiScreen(new GuiAchievements(this.mc.statFileWriter)); + } + + if(var1.id == 1) { + this.mc.displayGuiScreen(new GuiStats(this, this.mc.statFileWriter)); + } + + } + + public int func_74230_h() { + return selectedTabIndex; + } + + static InventoryBasic getInventory() { + return inventory; + } +} diff --git a/src/net/minecraft/src/GuiControls.java b/src/net/minecraft/src/GuiControls.java new file mode 100644 index 0000000..182adb9 --- /dev/null +++ b/src/net/minecraft/src/GuiControls.java @@ -0,0 +1,96 @@ +package net.minecraft.src; + +public class GuiControls extends GuiScreen { + private GuiScreen parentScreen; + protected String screenTitle = "Controls"; + private GameSettings options; + private int buttonId = -1; + + public GuiControls(GuiScreen var1, GameSettings var2) { + this.parentScreen = var1; + this.options = var2; + } + + private int getLeftBorder() { + return this.width / 2 - 155; + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + int var2 = this.getLeftBorder(); + + for(int var3 = 0; var3 < this.options.keyBindings.length; ++var3) { + this.buttonList.add(new GuiSmallButton(var3, var2 + var3 % 2 * 160, this.height / 6 + 24 * (var3 >> 1), 70, 20, this.options.getOptionDisplayString(var3))); + } + + this.buttonList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, var1.translateKey("gui.done"))); + this.screenTitle = var1.translateKey("controls.title"); + } + + protected void actionPerformed(GuiButton var1) { + for(int var2 = 0; var2 < this.options.keyBindings.length; ++var2) { + ((GuiButton)this.buttonList.get(var2)).displayString = this.options.getOptionDisplayString(var2); + } + + if(var1.id == 200) { + this.mc.displayGuiScreen(this.parentScreen); + } else { + this.buttonId = var1.id; + var1.displayString = "> " + this.options.getOptionDisplayString(var1.id) + " <"; + } + + } + + protected void mouseClicked(int var1, int var2, int var3) { + if(this.buttonId >= 0) { + this.options.setKeyBinding(this.buttonId, -100 + var3); + ((GuiButton)this.buttonList.get(this.buttonId)).displayString = this.options.getOptionDisplayString(this.buttonId); + this.buttonId = -1; + KeyBinding.resetKeyBindingArrayAndHash(); + } else { + super.mouseClicked(var1, var2, var3); + } + + } + + protected void keyTyped(char var1, int var2) { + if(this.buttonId >= 0) { + this.options.setKeyBinding(this.buttonId, var2); + ((GuiButton)this.buttonList.get(this.buttonId)).displayString = this.options.getOptionDisplayString(this.buttonId); + this.buttonId = -1; + KeyBinding.resetKeyBindingArrayAndHash(); + } else { + super.keyTyped(var1, var2); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215); + int var4 = this.getLeftBorder(); + + for(int var5 = 0; var5 < this.options.keyBindings.length; ++var5) { + boolean var6 = false; + + for(int var7 = 0; var7 < this.options.keyBindings.length; ++var7) { + if(var7 != var5 && this.options.keyBindings[var5].keyCode == this.options.keyBindings[var7].keyCode) { + var6 = true; + break; + } + } + + if(this.buttonId == var5) { + ((GuiButton)this.buttonList.get(var5)).displayString = "" + EnumChatFormatting.WHITE + "> " + EnumChatFormatting.YELLOW + "??? " + EnumChatFormatting.WHITE + "<"; + } else if(var6) { + ((GuiButton)this.buttonList.get(var5)).displayString = EnumChatFormatting.RED + this.options.getOptionDisplayString(var5); + } else { + ((GuiButton)this.buttonList.get(var5)).displayString = this.options.getOptionDisplayString(var5); + } + + this.drawString(this.fontRenderer, this.options.getKeyBindingDescription(var5), var4 + var5 % 2 * 160 + 70 + 6, this.height / 6 + 24 * (var5 >> 1) + 7, -1); + } + + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiCrafting.java b/src/net/minecraft/src/GuiCrafting.java new file mode 100644 index 0000000..c1536cd --- /dev/null +++ b/src/net/minecraft/src/GuiCrafting.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiCrafting extends GuiContainer { + public GuiCrafting(InventoryPlayer var1, World var2, int var3, int var4, int var5) { + super(new ContainerWorkbench(var1, var2, var3, var4, var5)); + } + + protected void drawGuiContainerForegroundLayer(int var1, int var2) { + this.fontRenderer.drawString(StatCollector.translateToLocal("container.crafting"), 28, 6, 4210752); + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/crafting.png"); + int var4 = (this.width - this.xSize) / 2; + int var5 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var4, var5, 0, 0, this.xSize, this.ySize); + } +} diff --git a/src/net/minecraft/src/GuiCreateFlatWorld.java b/src/net/minecraft/src/GuiCreateFlatWorld.java new file mode 100644 index 0000000..9c1e4e3 --- /dev/null +++ b/src/net/minecraft/src/GuiCreateFlatWorld.java @@ -0,0 +1,92 @@ +package net.minecraft.src; + +public class GuiCreateFlatWorld extends GuiScreen { + private static RenderItem theRenderItem = new RenderItem(); + private final GuiCreateWorld createWorldGui; + private FlatGeneratorInfo theFlatGeneratorInfo = FlatGeneratorInfo.getDefaultFlatGenerator(); + private String customizationTitle; + private String layerMaterialLabel; + private String heightLabel; + private GuiCreateFlatWorldListSlot createFlatWorldListSlotGui; + private GuiButton buttonAddLayer; + private GuiButton buttonEditLayer; + private GuiButton buttonRemoveLayer; + + public GuiCreateFlatWorld(GuiCreateWorld var1, String var2) { + this.createWorldGui = var1; + this.setFlatGeneratorInfo(var2); + } + + public String getFlatGeneratorInfo() { + return this.theFlatGeneratorInfo.toString(); + } + + public void setFlatGeneratorInfo(String var1) { + this.theFlatGeneratorInfo = FlatGeneratorInfo.createFlatGeneratorFromString(var1); + } + + public void initGui() { + this.buttonList.clear(); + this.customizationTitle = StatCollector.translateToLocal("createWorld.customize.flat.title"); + this.layerMaterialLabel = StatCollector.translateToLocal("createWorld.customize.flat.tile"); + this.heightLabel = StatCollector.translateToLocal("createWorld.customize.flat.height"); + this.createFlatWorldListSlotGui = new GuiCreateFlatWorldListSlot(this); + this.buttonList.add(this.buttonAddLayer = new GuiButton(2, this.width / 2 - 154, this.height - 52, 100, 20, StatCollector.translateToLocal("createWorld.customize.flat.addLayer") + " (NYI)")); + this.buttonList.add(this.buttonEditLayer = new GuiButton(3, this.width / 2 - 50, this.height - 52, 100, 20, StatCollector.translateToLocal("createWorld.customize.flat.editLayer") + " (NYI)")); + this.buttonList.add(this.buttonRemoveLayer = new GuiButton(4, this.width / 2 - 155, this.height - 52, 150, 20, StatCollector.translateToLocal("createWorld.customize.flat.removeLayer"))); + this.buttonList.add(new GuiButton(0, this.width / 2 - 155, this.height - 28, 150, 20, StatCollector.translateToLocal("gui.done"))); + this.buttonList.add(new GuiButton(5, this.width / 2 + 5, this.height - 52, 150, 20, StatCollector.translateToLocal("createWorld.customize.presets"))); + this.buttonList.add(new GuiButton(1, this.width / 2 + 5, this.height - 28, 150, 20, StatCollector.translateToLocal("gui.cancel"))); + this.buttonAddLayer.drawButton = this.buttonEditLayer.drawButton = false; + this.theFlatGeneratorInfo.func_82645_d(); + this.func_82270_g(); + } + + protected void actionPerformed(GuiButton var1) { + int var2 = this.theFlatGeneratorInfo.getFlatLayers().size() - this.createFlatWorldListSlotGui.field_82454_a - 1; + if(var1.id == 1) { + this.mc.displayGuiScreen(this.createWorldGui); + } else if(var1.id == 0) { + this.createWorldGui.generatorOptionsToUse = this.getFlatGeneratorInfo(); + this.mc.displayGuiScreen(this.createWorldGui); + } else if(var1.id == 5) { + this.mc.displayGuiScreen(new GuiFlatPresets(this)); + } else if(var1.id == 4 && this.func_82272_i()) { + this.theFlatGeneratorInfo.getFlatLayers().remove(var2); + this.createFlatWorldListSlotGui.field_82454_a = Math.min(this.createFlatWorldListSlotGui.field_82454_a, this.theFlatGeneratorInfo.getFlatLayers().size() - 1); + } + + this.theFlatGeneratorInfo.func_82645_d(); + this.func_82270_g(); + } + + public void func_82270_g() { + boolean var1 = this.func_82272_i(); + this.buttonRemoveLayer.enabled = var1; + this.buttonEditLayer.enabled = var1; + this.buttonEditLayer.enabled = false; + this.buttonAddLayer.enabled = false; + } + + private boolean func_82272_i() { + return this.createFlatWorldListSlotGui.field_82454_a > -1 && this.createFlatWorldListSlotGui.field_82454_a < this.theFlatGeneratorInfo.getFlatLayers().size(); + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.createFlatWorldListSlotGui.drawScreen(var1, var2, var3); + this.drawCenteredString(this.fontRenderer, this.customizationTitle, this.width / 2, 8, 16777215); + int var4 = this.width / 2 - 92 - 16; + this.drawString(this.fontRenderer, this.layerMaterialLabel, var4, 32, 16777215); + this.drawString(this.fontRenderer, this.heightLabel, var4 + 2 + 213 - this.fontRenderer.getStringWidth(this.heightLabel), 32, 16777215); + super.drawScreen(var1, var2, var3); + } + + static RenderItem getRenderItem() { + return theRenderItem; + } + + static FlatGeneratorInfo func_82271_a(GuiCreateFlatWorld var0) { + return var0.theFlatGeneratorInfo; + } +} diff --git a/src/net/minecraft/src/GuiCreateFlatWorldListSlot.java b/src/net/minecraft/src/GuiCreateFlatWorldListSlot.java new file mode 100644 index 0000000..d859991 --- /dev/null +++ b/src/net/minecraft/src/GuiCreateFlatWorldListSlot.java @@ -0,0 +1,81 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +class GuiCreateFlatWorldListSlot extends GuiSlot { + public int field_82454_a; + final GuiCreateFlatWorld createFlatWorldGui; + + public GuiCreateFlatWorldListSlot(GuiCreateFlatWorld var1) { + super(var1.mc, var1.width, var1.height, 43, var1.height - 60, 24); + this.createFlatWorldGui = var1; + this.field_82454_a = -1; + } + + private void func_82452_a(int var1, int var2, ItemStack var3) { + this.func_82451_d(var1 + 1, var2 + 1); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + if(var3 != null) { + RenderHelper.enableGUIStandardItemLighting(); + GuiCreateFlatWorld.getRenderItem().renderItemIntoGUI(this.createFlatWorldGui.fontRenderer, this.createFlatWorldGui.mc.renderEngine, var3, var1 + 2, var2 + 2); + RenderHelper.disableStandardItemLighting(); + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + } + + private void func_82451_d(int var1, int var2) { + this.func_82450_b(var1, var2, 0, 0); + } + + private void func_82450_b(int var1, int var2, int var3, int var4) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.createFlatWorldGui.mc.renderEngine.bindTexture("/gui/slot.png"); + Tessellator var9 = Tessellator.instance; + var9.startDrawingQuads(); + var9.addVertexWithUV((double)(var1 + 0), (double)(var2 + 18), (double)this.createFlatWorldGui.zLevel, (double)((float)(var3 + 0) * 0.0078125F), (double)((float)(var4 + 18) * 0.0078125F)); + var9.addVertexWithUV((double)(var1 + 18), (double)(var2 + 18), (double)this.createFlatWorldGui.zLevel, (double)((float)(var3 + 18) * 0.0078125F), (double)((float)(var4 + 18) * 0.0078125F)); + var9.addVertexWithUV((double)(var1 + 18), (double)(var2 + 0), (double)this.createFlatWorldGui.zLevel, (double)((float)(var3 + 18) * 0.0078125F), (double)((float)(var4 + 0) * 0.0078125F)); + var9.addVertexWithUV((double)(var1 + 0), (double)(var2 + 0), (double)this.createFlatWorldGui.zLevel, (double)((float)(var3 + 0) * 0.0078125F), (double)((float)(var4 + 0) * 0.0078125F)); + var9.draw(); + } + + protected int getSize() { + return GuiCreateFlatWorld.func_82271_a(this.createFlatWorldGui).getFlatLayers().size(); + } + + protected void elementClicked(int var1, boolean var2) { + this.field_82454_a = var1; + this.createFlatWorldGui.func_82270_g(); + } + + protected boolean isSelected(int var1) { + return var1 == this.field_82454_a; + } + + protected void drawBackground() { + } + + protected void drawSlot(int var1, int var2, int var3, int var4, Tessellator var5) { + FlatLayerInfo var6 = (FlatLayerInfo)GuiCreateFlatWorld.func_82271_a(this.createFlatWorldGui).getFlatLayers().get(GuiCreateFlatWorld.func_82271_a(this.createFlatWorldGui).getFlatLayers().size() - var1 - 1); + ItemStack var7 = var6.getFillBlock() == 0 ? null : new ItemStack(var6.getFillBlock(), 1, var6.getFillBlockMeta()); + String var8 = var7 == null ? "Air" : Item.itemsList[var6.getFillBlock()].func_77653_i(var7); + this.func_82452_a(var2, var3, var7); + this.createFlatWorldGui.fontRenderer.drawString(var8, var2 + 18 + 5, var3 + 3, 16777215); + String var9; + if(var1 == 0) { + var9 = StatCollector.translateToLocalFormatted("createWorld.customize.flat.layer.top", new Object[]{Integer.valueOf(var6.getLayerCount())}); + } else if(var1 == GuiCreateFlatWorld.func_82271_a(this.createFlatWorldGui).getFlatLayers().size() - 1) { + var9 = StatCollector.translateToLocalFormatted("createWorld.customize.flat.layer.bottom", new Object[]{Integer.valueOf(var6.getLayerCount())}); + } else { + var9 = StatCollector.translateToLocalFormatted("createWorld.customize.flat.layer", new Object[]{Integer.valueOf(var6.getLayerCount())}); + } + + this.createFlatWorldGui.fontRenderer.drawString(var9, var2 + 2 + 213 - this.createFlatWorldGui.fontRenderer.getStringWidth(var9), var3 + 3, 16777215); + } + + protected int getScrollBarX() { + return this.createFlatWorldGui.width - 70; + } +} diff --git a/src/net/minecraft/src/GuiCreateWorld.java b/src/net/minecraft/src/GuiCreateWorld.java new file mode 100644 index 0000000..4861ffd --- /dev/null +++ b/src/net/minecraft/src/GuiCreateWorld.java @@ -0,0 +1,336 @@ +package net.minecraft.src; + +import java.util.Random; +import org.lwjgl.input.Keyboard; + +public class GuiCreateWorld extends GuiScreen { + private GuiScreen parentGuiScreen; + private GuiTextField textboxWorldName; + private GuiTextField textboxSeed; + private String folderName; + private String gameMode = "survival"; + private boolean generateStructures = true; + private boolean commandsAllowed = false; + private boolean commandsToggled = false; + private boolean bonusItems = false; + private boolean isHardcore = false; + private boolean createClicked; + private boolean moreOptions; + private GuiButton buttonGameMode; + private GuiButton moreWorldOptions; + private GuiButton buttonGenerateStructures; + private GuiButton buttonBonusItems; + private GuiButton buttonWorldType; + private GuiButton buttonAllowCommands; + private GuiButton buttonCustomize; + private String gameModeDescriptionLine1; + private String gameModeDescriptionLine2; + private String seed; + private String localizedNewWorldText; + private int worldTypeId = 0; + public String generatorOptionsToUse = ""; + private static final String[] ILLEGAL_WORLD_NAMES = 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 var1) { + this.parentGuiScreen = var1; + this.seed = ""; + this.localizedNewWorldText = StatCollector.translateToLocal("selectWorld.newWorld"); + } + + public void updateScreen() { + this.textboxWorldName.updateCursorCounter(); + this.textboxSeed.updateCursorCounter(); + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 155, this.height - 28, 150, 20, var1.translateKey("selectWorld.create"))); + this.buttonList.add(new GuiButton(1, this.width / 2 + 5, this.height - 28, 150, 20, var1.translateKey("gui.cancel"))); + this.buttonList.add(this.buttonGameMode = new GuiButton(2, this.width / 2 - 75, 115, 150, 20, var1.translateKey("selectWorld.gameMode"))); + this.buttonList.add(this.moreWorldOptions = new GuiButton(3, this.width / 2 - 75, 187, 150, 20, var1.translateKey("selectWorld.moreWorldOptions"))); + this.buttonList.add(this.buttonGenerateStructures = new GuiButton(4, this.width / 2 - 155, 100, 150, 20, var1.translateKey("selectWorld.mapFeatures"))); + this.buttonGenerateStructures.drawButton = false; + this.buttonList.add(this.buttonBonusItems = new GuiButton(7, this.width / 2 + 5, 151, 150, 20, var1.translateKey("selectWorld.bonusItems"))); + this.buttonBonusItems.drawButton = false; + this.buttonList.add(this.buttonWorldType = new GuiButton(5, this.width / 2 + 5, 100, 150, 20, var1.translateKey("selectWorld.mapType"))); + this.buttonWorldType.drawButton = false; + this.buttonList.add(this.buttonAllowCommands = new GuiButton(6, this.width / 2 - 155, 151, 150, 20, var1.translateKey("selectWorld.allowCommands"))); + this.buttonAllowCommands.drawButton = false; + this.buttonList.add(this.buttonCustomize = new GuiButton(8, this.width / 2 + 5, 120, 150, 20, var1.translateKey("selectWorld.customizeType"))); + this.buttonCustomize.drawButton = false; + this.textboxWorldName = new GuiTextField(this.fontRenderer, this.width / 2 - 100, 60, 200, 20); + this.textboxWorldName.setFocused(true); + this.textboxWorldName.setText(this.localizedNewWorldText); + this.textboxSeed = new GuiTextField(this.fontRenderer, this.width / 2 - 100, 60, 200, 20); + this.textboxSeed.setText(this.seed); + this.func_82288_a(this.moreOptions); + this.makeUseableName(); + this.updateButtonText(); + } + + private void makeUseableName() { + this.folderName = this.textboxWorldName.getText().trim(); + char[] var1 = ChatAllowedCharacters.allowedCharactersArray; + int var2 = var1.length; + + for(int var3 = 0; var3 < var2; ++var3) { + char var4 = var1[var3]; + this.folderName = this.folderName.replace(var4, '_'); + } + + if(MathHelper.stringNullOrLengthZero(this.folderName)) { + this.folderName = "World"; + } + + this.folderName = func_73913_a(this.mc.getSaveLoader(), this.folderName); + } + + private void updateButtonText() { + StringTranslate var1 = StringTranslate.getInstance(); + this.buttonGameMode.displayString = var1.translateKey("selectWorld.gameMode") + " " + var1.translateKey("selectWorld.gameMode." + this.gameMode); + this.gameModeDescriptionLine1 = var1.translateKey("selectWorld.gameMode." + this.gameMode + ".line1"); + this.gameModeDescriptionLine2 = var1.translateKey("selectWorld.gameMode." + this.gameMode + ".line2"); + this.buttonGenerateStructures.displayString = var1.translateKey("selectWorld.mapFeatures") + " "; + if(this.generateStructures) { + this.buttonGenerateStructures.displayString = this.buttonGenerateStructures.displayString + var1.translateKey("options.on"); + } else { + this.buttonGenerateStructures.displayString = this.buttonGenerateStructures.displayString + var1.translateKey("options.off"); + } + + this.buttonBonusItems.displayString = var1.translateKey("selectWorld.bonusItems") + " "; + if(this.bonusItems && !this.isHardcore) { + this.buttonBonusItems.displayString = this.buttonBonusItems.displayString + var1.translateKey("options.on"); + } else { + this.buttonBonusItems.displayString = this.buttonBonusItems.displayString + var1.translateKey("options.off"); + } + + this.buttonWorldType.displayString = var1.translateKey("selectWorld.mapType") + " " + var1.translateKey(WorldType.worldTypes[this.worldTypeId].getTranslateName()); + this.buttonAllowCommands.displayString = var1.translateKey("selectWorld.allowCommands") + " "; + if(this.commandsAllowed && !this.isHardcore) { + this.buttonAllowCommands.displayString = this.buttonAllowCommands.displayString + var1.translateKey("options.on"); + } else { + this.buttonAllowCommands.displayString = this.buttonAllowCommands.displayString + var1.translateKey("options.off"); + } + + } + + public static String func_73913_a(ISaveFormat var0, String var1) { + var1 = var1.replaceAll("[\\./\"]", "_"); + String[] var2 = ILLEGAL_WORLD_NAMES; + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + String var5 = var2[var4]; + if(var1.equalsIgnoreCase(var5)) { + var1 = "_" + var1 + "_"; + } + } + + while(var0.getWorldInfo(var1) != null) { + var1 = var1 + "-"; + } + + return var1; + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 1) { + this.mc.displayGuiScreen(this.parentGuiScreen); + } else if(var1.id == 0) { + this.mc.displayGuiScreen((GuiScreen)null); + if(this.createClicked) { + return; + } + + this.createClicked = true; + long var2 = (new Random()).nextLong(); + String var4 = this.textboxSeed.getText(); + if(!MathHelper.stringNullOrLengthZero(var4)) { + try { + long var5 = Long.parseLong(var4); + if(var5 != 0L) { + var2 = var5; + } + } catch (NumberFormatException var7) { + var2 = (long)var4.hashCode(); + } + } + + EnumGameType var8 = EnumGameType.getByName(this.gameMode); + WorldSettings var6 = new WorldSettings(var2, var8, this.generateStructures, this.isHardcore, WorldType.worldTypes[this.worldTypeId]); + var6.func_82750_a(this.generatorOptionsToUse); + if(this.bonusItems && !this.isHardcore) { + var6.enableBonusChest(); + } + + if(this.commandsAllowed && !this.isHardcore) { + var6.enableCommands(); + } + + this.mc.launchIntegratedServer(this.folderName, this.textboxWorldName.getText().trim(), var6); + } else if(var1.id == 3) { + this.func_82287_i(); + } else if(var1.id == 2) { + if(this.gameMode.equals("survival")) { + if(!this.commandsToggled) { + this.commandsAllowed = false; + } + + this.isHardcore = false; + this.gameMode = "hardcore"; + this.isHardcore = true; + this.buttonAllowCommands.enabled = false; + this.buttonBonusItems.enabled = false; + this.updateButtonText(); + } else if(this.gameMode.equals("hardcore")) { + if(!this.commandsToggled) { + this.commandsAllowed = true; + } + + this.isHardcore = false; + this.gameMode = "creative"; + this.updateButtonText(); + this.isHardcore = false; + this.buttonAllowCommands.enabled = true; + this.buttonBonusItems.enabled = true; + } else { + if(!this.commandsToggled) { + this.commandsAllowed = false; + } + + this.gameMode = "survival"; + this.updateButtonText(); + this.buttonAllowCommands.enabled = true; + this.buttonBonusItems.enabled = true; + this.isHardcore = false; + } + + this.updateButtonText(); + } else if(var1.id == 4) { + this.generateStructures = !this.generateStructures; + this.updateButtonText(); + } else if(var1.id == 7) { + this.bonusItems = !this.bonusItems; + this.updateButtonText(); + } else if(var1.id == 5) { + ++this.worldTypeId; + if(this.worldTypeId >= WorldType.worldTypes.length) { + this.worldTypeId = 0; + } + + while(WorldType.worldTypes[this.worldTypeId] == null || !WorldType.worldTypes[this.worldTypeId].getCanBeCreated()) { + ++this.worldTypeId; + if(this.worldTypeId >= WorldType.worldTypes.length) { + this.worldTypeId = 0; + } + } + + this.generatorOptionsToUse = ""; + this.updateButtonText(); + this.func_82288_a(this.moreOptions); + } else if(var1.id == 6) { + this.commandsToggled = true; + this.commandsAllowed = !this.commandsAllowed; + this.updateButtonText(); + } else if(var1.id == 8) { + this.mc.displayGuiScreen(new GuiCreateFlatWorld(this, this.generatorOptionsToUse)); + } + + } + } + + private void func_82287_i() { + this.func_82288_a(!this.moreOptions); + } + + private void func_82288_a(boolean var1) { + this.moreOptions = var1; + this.buttonGameMode.drawButton = !this.moreOptions; + this.buttonGenerateStructures.drawButton = this.moreOptions; + this.buttonBonusItems.drawButton = this.moreOptions; + this.buttonWorldType.drawButton = this.moreOptions; + this.buttonAllowCommands.drawButton = this.moreOptions; + this.buttonCustomize.drawButton = this.moreOptions && WorldType.worldTypes[this.worldTypeId] == WorldType.FLAT; + StringTranslate var2; + if(this.moreOptions) { + var2 = StringTranslate.getInstance(); + this.moreWorldOptions.displayString = var2.translateKey("gui.done"); + } else { + var2 = StringTranslate.getInstance(); + this.moreWorldOptions.displayString = var2.translateKey("selectWorld.moreWorldOptions"); + } + + } + + protected void keyTyped(char var1, int var2) { + if(this.textboxWorldName.isFocused() && !this.moreOptions) { + this.textboxWorldName.textboxKeyTyped(var1, var2); + this.localizedNewWorldText = this.textboxWorldName.getText(); + } else if(this.textboxSeed.isFocused() && this.moreOptions) { + this.textboxSeed.textboxKeyTyped(var1, var2); + this.seed = this.textboxSeed.getText(); + } + + if(var1 == 13) { + this.actionPerformed((GuiButton)this.buttonList.get(0)); + } + + ((GuiButton)this.buttonList.get(0)).enabled = this.textboxWorldName.getText().length() > 0; + this.makeUseableName(); + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + if(this.moreOptions) { + this.textboxSeed.mouseClicked(var1, var2, var3); + } else { + this.textboxWorldName.mouseClicked(var1, var2, var3); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + StringTranslate var4 = StringTranslate.getInstance(); + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, var4.translateKey("selectWorld.create"), this.width / 2, 20, 16777215); + if(this.moreOptions) { + this.drawString(this.fontRenderer, var4.translateKey("selectWorld.enterSeed"), this.width / 2 - 100, 47, 10526880); + this.drawString(this.fontRenderer, var4.translateKey("selectWorld.seedInfo"), this.width / 2 - 100, 85, 10526880); + this.drawString(this.fontRenderer, var4.translateKey("selectWorld.mapFeatures.info"), this.width / 2 - 150, 122, 10526880); + this.drawString(this.fontRenderer, var4.translateKey("selectWorld.allowCommands.info"), this.width / 2 - 150, 172, 10526880); + this.textboxSeed.drawTextBox(); + } else { + this.drawString(this.fontRenderer, var4.translateKey("selectWorld.enterName"), this.width / 2 - 100, 47, 10526880); + this.drawString(this.fontRenderer, var4.translateKey("selectWorld.resultFolder") + " " + this.folderName, this.width / 2 - 100, 85, 10526880); + this.textboxWorldName.drawTextBox(); + this.drawString(this.fontRenderer, this.gameModeDescriptionLine1, this.width / 2 - 100, 137, 10526880); + this.drawString(this.fontRenderer, this.gameModeDescriptionLine2, this.width / 2 - 100, 149, 10526880); + } + + super.drawScreen(var1, var2, var3); + } + + public void func_82286_a(WorldInfo var1) { + this.localizedNewWorldText = StatCollector.translateToLocalFormatted("selectWorld.newWorld.copyOf", new Object[]{var1.getWorldName()}); + this.seed = var1.getSeed() + ""; + this.worldTypeId = var1.getTerrainType().getWorldTypeID(); + this.generatorOptionsToUse = var1.getGeneratorOptions(); + this.generateStructures = var1.isMapFeaturesEnabled(); + this.commandsAllowed = var1.areCommandsAllowed(); + if(var1.isHardcoreModeEnabled()) { + this.gameMode = "hardcore"; + } else if(var1.getGameType().isSurvivalOrAdventure()) { + this.gameMode = "survival"; + } else if(var1.getGameType().isCreative()) { + this.gameMode = "creative"; + } + + } +} diff --git a/src/net/minecraft/src/GuiDisconnected.java b/src/net/minecraft/src/GuiDisconnected.java new file mode 100644 index 0000000..1813491 --- /dev/null +++ b/src/net/minecraft/src/GuiDisconnected.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class GuiDisconnected extends GuiScreen { + private String errorMessage; + private String errorDetail; + private Object[] field_74247_c; + private List field_74245_d; + private final GuiScreen field_98095_n; + + public GuiDisconnected(GuiScreen var1, String var2, String var3, Object... var4) { + StringTranslate var5 = StringTranslate.getInstance(); + this.field_98095_n = var1; + this.errorMessage = var5.translateKey(var2); + this.errorDetail = var3; + this.field_74247_c = var4; + } + + protected void keyTyped(char var1, int var2) { + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 120 + 12, var1.translateKey("gui.toMenu"))); + if(this.field_74247_c != null) { + this.field_74245_d = this.fontRenderer.listFormattedStringToWidth(var1.translateKeyFormat(this.errorDetail, this.field_74247_c), this.width - 50); + } else { + this.field_74245_d = this.fontRenderer.listFormattedStringToWidth(var1.translateKey(this.errorDetail), this.width - 50); + } + + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 0) { + this.mc.displayGuiScreen(this.field_98095_n); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.errorMessage, this.width / 2, this.height / 2 - 50, 11184810); + int var4 = this.height / 2 - 30; + if(this.field_74245_d != null) { + for(Iterator var5 = this.field_74245_d.iterator(); var5.hasNext(); var4 += this.fontRenderer.FONT_HEIGHT) { + String var6 = (String)var5.next(); + this.drawCenteredString(this.fontRenderer, var6, this.width / 2, var4, 16777215); + } + } + + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiDispenser.java b/src/net/minecraft/src/GuiDispenser.java new file mode 100644 index 0000000..3d85e5b --- /dev/null +++ b/src/net/minecraft/src/GuiDispenser.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiDispenser extends GuiContainer { + public TileEntityDispenser field_94078_r; + + public GuiDispenser(InventoryPlayer var1, TileEntityDispenser var2) { + super(new ContainerDispenser(var1, var2)); + this.field_94078_r = var2; + } + + protected void drawGuiContainerForegroundLayer(int var1, int var2) { + String var3 = this.field_94078_r.isInvNameLocalized() ? this.field_94078_r.getInvName() : StatCollector.translateToLocal(this.field_94078_r.getInvName()); + this.fontRenderer.drawString(var3, this.xSize / 2 - this.fontRenderer.getStringWidth(var3) / 2, 6, 4210752); + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/trap.png"); + int var4 = (this.width - this.xSize) / 2; + int var5 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var4, var5, 0, 0, this.xSize, this.ySize); + } +} diff --git a/src/net/minecraft/src/GuiDownloadTerrain.java b/src/net/minecraft/src/GuiDownloadTerrain.java new file mode 100644 index 0000000..96e6e76 --- /dev/null +++ b/src/net/minecraft/src/GuiDownloadTerrain.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +public class GuiDownloadTerrain extends GuiScreen { + private NetClientHandler netHandler; + private int updateCounter = 0; + + public GuiDownloadTerrain(NetClientHandler var1) { + this.netHandler = var1; + } + + protected void keyTyped(char var1, int var2) { + } + + public void initGui() { + this.buttonList.clear(); + } + + public void updateScreen() { + ++this.updateCounter; + if(this.updateCounter % 20 == 0) { + this.netHandler.addToSendQueue(new Packet0KeepAlive()); + } + + if(this.netHandler != null) { + this.netHandler.processReadPackets(); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawBackground(0); + StringTranslate var4 = StringTranslate.getInstance(); + this.drawCenteredString(this.fontRenderer, var4.translateKey("multiplayer.downloadingTerrain"), this.width / 2, this.height / 2 - 50, 16777215); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiEditSign.java b/src/net/minecraft/src/GuiEditSign.java new file mode 100644 index 0000000..cf15d39 --- /dev/null +++ b/src/net/minecraft/src/GuiEditSign.java @@ -0,0 +1,113 @@ +package net.minecraft.src; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +public class GuiEditSign extends GuiScreen { + private static final String allowedCharacters = ChatAllowedCharacters.allowedCharacters; + protected String screenTitle = "Edit sign message:"; + private TileEntitySign entitySign; + private int updateCounter; + private int editLine = 0; + private GuiButton doneBtn; + + public GuiEditSign(TileEntitySign var1) { + this.entitySign = var1; + } + + public void initGui() { + this.buttonList.clear(); + Keyboard.enableRepeatEvents(true); + this.buttonList.add(this.doneBtn = new GuiButton(0, this.width / 2 - 100, this.height / 4 + 120, "Done")); + this.entitySign.setEditable(false); + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + NetClientHandler var1 = this.mc.getNetHandler(); + if(var1 != null) { + var1.addToSendQueue(new Packet130UpdateSign(this.entitySign.xCoord, this.entitySign.yCoord, this.entitySign.zCoord, this.entitySign.signText)); + } + + this.entitySign.setEditable(true); + } + + public void updateScreen() { + ++this.updateCounter; + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 0) { + this.entitySign.onInventoryChanged(); + this.mc.displayGuiScreen((GuiScreen)null); + } + + } + } + + protected void keyTyped(char var1, int var2) { + if(var2 == 200) { + this.editLine = this.editLine - 1 & 3; + } + + if(var2 == 208 || var2 == 28) { + this.editLine = this.editLine + 1 & 3; + } + + if(var2 == 14 && this.entitySign.signText[this.editLine].length() > 0) { + this.entitySign.signText[this.editLine] = this.entitySign.signText[this.editLine].substring(0, this.entitySign.signText[this.editLine].length() - 1); + } + + if(allowedCharacters.indexOf(var1) >= 0 && this.entitySign.signText[this.editLine].length() < 15) { + this.entitySign.signText[this.editLine] = this.entitySign.signText[this.editLine] + var1; + } + + if(var2 == 1) { + this.actionPerformed(this.doneBtn); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 40, 16777215); + GL11.glPushMatrix(); + GL11.glTranslatef((float)(this.width / 2), 0.0F, 50.0F); + float var4 = 93.75F; + GL11.glScalef(-var4, -var4, -var4); + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + Block var5 = this.entitySign.getBlockType(); + if(var5 == Block.signPost) { + float var6 = (float)(this.entitySign.getBlockMetadata() * 360) / 16.0F; + GL11.glRotatef(var6, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, -1.0625F, 0.0F); + } else { + int var8 = this.entitySign.getBlockMetadata(); + float var7 = 0.0F; + if(var8 == 2) { + var7 = 180.0F; + } + + if(var8 == 4) { + var7 = 90.0F; + } + + if(var8 == 5) { + var7 = -90.0F; + } + + GL11.glRotatef(var7, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, -1.0625F, 0.0F); + } + + if(this.updateCounter / 6 % 2 == 0) { + this.entitySign.lineBeingEdited = this.editLine; + } + + TileEntityRenderer.instance.renderTileEntityAt(this.entitySign, -0.5D, -0.75D, -0.5D, 0.0F); + this.entitySign.lineBeingEdited = -1; + GL11.glPopMatrix(); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiEnchantment.java b/src/net/minecraft/src/GuiEnchantment.java new file mode 100644 index 0000000..0dc731e --- /dev/null +++ b/src/net/minecraft/src/GuiEnchantment.java @@ -0,0 +1,201 @@ +package net.minecraft.src; + +import java.util.Random; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; +import org.lwjgl.util.glu.GLU; + +public class GuiEnchantment extends GuiContainer { + private static ModelBook bookModel = new ModelBook(); + private Random rand = new Random(); + private ContainerEnchantment containerEnchantment = (ContainerEnchantment)this.inventorySlots; + public int field_74214_o; + public float field_74213_p; + public float field_74212_q; + public float field_74211_r; + public float field_74210_s; + public float field_74209_t; + public float field_74208_u; + ItemStack theItemStack; + private String field_94079_C; + + public GuiEnchantment(InventoryPlayer var1, World var2, int var3, int var4, int var5, String var6) { + super(new ContainerEnchantment(var1, var2, var3, var4, var5)); + this.field_94079_C = var6; + } + + protected void drawGuiContainerForegroundLayer(int var1, int var2) { + this.fontRenderer.drawString(this.field_94079_C == null ? StatCollector.translateToLocal("container.enchant") : this.field_94079_C, 12, 5, 4210752); + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + public void updateScreen() { + super.updateScreen(); + this.func_74205_h(); + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + int var4 = (this.width - this.xSize) / 2; + int var5 = (this.height - this.ySize) / 2; + + for(int var6 = 0; var6 < 3; ++var6) { + int var7 = var1 - (var4 + 60); + int var8 = var2 - (var5 + 14 + 19 * var6); + if(var7 >= 0 && var8 >= 0 && var7 < 108 && var8 < 19 && this.containerEnchantment.enchantItem(this.mc.thePlayer, var6)) { + this.mc.playerController.sendEnchantPacket(this.containerEnchantment.windowId, var6); + } + } + + } + + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/enchant.png"); + int var4 = (this.width - this.xSize) / 2; + int var5 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var4, var5, 0, 0, this.xSize, this.ySize); + GL11.glPushMatrix(); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glPushMatrix(); + GL11.glLoadIdentity(); + ScaledResolution var6 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight); + GL11.glViewport((var6.getScaledWidth() - 320) / 2 * var6.getScaleFactor(), (var6.getScaledHeight() - 240) / 2 * var6.getScaleFactor(), 320 * var6.getScaleFactor(), 240 * var6.getScaleFactor()); + GL11.glTranslatef(-0.34F, 0.23F, 0.0F); + GLU.gluPerspective(90.0F, 4.0F / 3.0F, 9.0F, 80.0F); + float var7 = 1.0F; + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + RenderHelper.enableStandardItemLighting(); + GL11.glTranslatef(0.0F, 3.3F, -16.0F); + GL11.glScalef(var7, var7, var7); + float var8 = 5.0F; + GL11.glScalef(var8, var8, var8); + GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); + this.mc.renderEngine.bindTexture("/item/book.png"); + GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F); + float var9 = this.field_74208_u + (this.field_74209_t - this.field_74208_u) * var1; + GL11.glTranslatef((1.0F - var9) * 0.2F, (1.0F - var9) * 0.1F, (1.0F - var9) * 0.25F); + GL11.glRotatef(-(1.0F - var9) * 90.0F - 90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); + float var10 = this.field_74212_q + (this.field_74213_p - this.field_74212_q) * var1 + 0.25F; + float var11 = this.field_74212_q + (this.field_74213_p - this.field_74212_q) * var1 + 12.0F / 16.0F; + var10 = (var10 - (float)MathHelper.truncateDoubleToInt((double)var10)) * 1.6F - 0.3F; + var11 = (var11 - (float)MathHelper.truncateDoubleToInt((double)var11)) * 1.6F - 0.3F; + if(var10 < 0.0F) { + var10 = 0.0F; + } + + if(var11 < 0.0F) { + var11 = 0.0F; + } + + if(var10 > 1.0F) { + var10 = 1.0F; + } + + if(var11 > 1.0F) { + var11 = 1.0F; + } + + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + bookModel.render((Entity)null, 0.0F, var10, var11, var9, 0.0F, 1.0F / 16.0F); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); + GL11.glPopMatrix(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glPopMatrix(); + RenderHelper.disableStandardItemLighting(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/enchant.png"); + EnchantmentNameParts.instance.setRandSeed(this.containerEnchantment.nameSeed); + + for(int var12 = 0; var12 < 3; ++var12) { + String var13 = EnchantmentNameParts.instance.generateRandomEnchantName(); + this.zLevel = 0.0F; + this.mc.renderEngine.bindTexture("/gui/enchant.png"); + int var14 = this.containerEnchantment.enchantLevels[var12]; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + if(var14 == 0) { + this.drawTexturedModalRect(var4 + 60, var5 + 14 + 19 * var12, 0, 185, 108, 19); + } else { + String var15 = "" + var14; + FontRenderer var16 = this.mc.standardGalacticFontRenderer; + int var17 = 6839882; + if(this.mc.thePlayer.experienceLevel < var14 && !this.mc.thePlayer.capabilities.isCreativeMode) { + this.drawTexturedModalRect(var4 + 60, var5 + 14 + 19 * var12, 0, 185, 108, 19); + var16.drawSplitString(var13, var4 + 62, var5 + 16 + 19 * var12, 104, (var17 & 16711422) >> 1); + var16 = this.mc.fontRenderer; + var17 = 4226832; + var16.drawStringWithShadow(var15, var4 + 62 + 104 - var16.getStringWidth(var15), var5 + 16 + 19 * var12 + 7, var17); + } else { + int var18 = var2 - (var4 + 60); + int var19 = var3 - (var5 + 14 + 19 * var12); + if(var18 >= 0 && var19 >= 0 && var18 < 108 && var19 < 19) { + this.drawTexturedModalRect(var4 + 60, var5 + 14 + 19 * var12, 0, 204, 108, 19); + var17 = 16777088; + } else { + this.drawTexturedModalRect(var4 + 60, var5 + 14 + 19 * var12, 0, 166, 108, 19); + } + + var16.drawSplitString(var13, var4 + 62, var5 + 16 + 19 * var12, 104, var17); + var16 = this.mc.fontRenderer; + var17 = 8453920; + var16.drawStringWithShadow(var15, var4 + 62 + 104 - var16.getStringWidth(var15), var5 + 16 + 19 * var12 + 7, var17); + } + } + } + + } + + public void func_74205_h() { + ItemStack var1 = this.inventorySlots.getSlot(0).getStack(); + if(!ItemStack.areItemStacksEqual(var1, this.theItemStack)) { + this.theItemStack = var1; + + do { + this.field_74211_r += (float)(this.rand.nextInt(4) - this.rand.nextInt(4)); + } while(this.field_74213_p <= this.field_74211_r + 1.0F && this.field_74213_p >= this.field_74211_r - 1.0F); + } + + ++this.field_74214_o; + this.field_74212_q = this.field_74213_p; + this.field_74208_u = this.field_74209_t; + boolean var2 = false; + + for(int var3 = 0; var3 < 3; ++var3) { + if(this.containerEnchantment.enchantLevels[var3] != 0) { + var2 = true; + } + } + + if(var2) { + this.field_74209_t += 0.2F; + } else { + this.field_74209_t -= 0.2F; + } + + if(this.field_74209_t < 0.0F) { + this.field_74209_t = 0.0F; + } + + if(this.field_74209_t > 1.0F) { + this.field_74209_t = 1.0F; + } + + float var5 = (this.field_74211_r - this.field_74213_p) * 0.4F; + float var4 = 0.2F; + if(var5 < -var4) { + var5 = -var4; + } + + if(var5 > var4) { + var5 = var4; + } + + this.field_74210_s += (var5 - this.field_74210_s) * 0.9F; + this.field_74213_p += this.field_74210_s; + } +} diff --git a/src/net/minecraft/src/GuiErrorScreen.java b/src/net/minecraft/src/GuiErrorScreen.java new file mode 100644 index 0000000..2067f05 --- /dev/null +++ b/src/net/minecraft/src/GuiErrorScreen.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +public class GuiErrorScreen extends GuiScreen { + private String message1; + private String message2; + + public GuiErrorScreen(String var1, String var2) { + this.message1 = var1; + this.message2 = var2; + } + + public void initGui() { + super.initGui(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, 140, StatCollector.translateToLocal("gui.cancel"))); + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawGradientRect(0, 0, this.width, this.height, -12574688, -11530224); + this.drawCenteredString(this.fontRenderer, this.message1, this.width / 2, 90, 16777215); + this.drawCenteredString(this.fontRenderer, this.message2, this.width / 2, 110, 16777215); + super.drawScreen(var1, var2, var3); + } + + protected void keyTyped(char var1, int var2) { + } + + protected void actionPerformed(GuiButton var1) { + this.mc.displayGuiScreen((GuiScreen)null); + } +} diff --git a/src/net/minecraft/src/GuiFlatPresets.java b/src/net/minecraft/src/GuiFlatPresets.java new file mode 100644 index 0000000..02ffe71 --- /dev/null +++ b/src/net/minecraft/src/GuiFlatPresets.java @@ -0,0 +1,141 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import org.lwjgl.input.Keyboard; + +public class GuiFlatPresets extends GuiScreen { + private static RenderItem presetIconRenderer = new RenderItem(); + private static final List presets = new ArrayList(); + private final GuiCreateFlatWorld createFlatWorldGui; + private String field_82300_d; + private String field_82308_m; + private String field_82306_n; + private GuiFlatPresetsListSlot theFlatPresetsListSlot; + private GuiButton theButton; + private GuiTextField theTextField; + + public GuiFlatPresets(GuiCreateFlatWorld var1) { + this.createFlatWorldGui = var1; + } + + public void initGui() { + this.buttonList.clear(); + Keyboard.enableRepeatEvents(true); + this.field_82300_d = StatCollector.translateToLocal("createWorld.customize.presets.title"); + this.field_82308_m = StatCollector.translateToLocal("createWorld.customize.presets.share"); + this.field_82306_n = StatCollector.translateToLocal("createWorld.customize.presets.list"); + this.theTextField = new GuiTextField(this.fontRenderer, 50, 40, this.width - 100, 20); + this.theFlatPresetsListSlot = new GuiFlatPresetsListSlot(this); + this.theTextField.setMaxStringLength(1230); + this.theTextField.setText(this.createFlatWorldGui.getFlatGeneratorInfo()); + this.buttonList.add(this.theButton = new GuiButton(0, this.width / 2 - 155, this.height - 28, 150, 20, StatCollector.translateToLocal("createWorld.customize.presets.select"))); + this.buttonList.add(new GuiButton(1, this.width / 2 + 5, this.height - 28, 150, 20, StatCollector.translateToLocal("gui.cancel"))); + this.func_82296_g(); + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + protected void mouseClicked(int var1, int var2, int var3) { + this.theTextField.mouseClicked(var1, var2, var3); + super.mouseClicked(var1, var2, var3); + } + + protected void keyTyped(char var1, int var2) { + if(!this.theTextField.textboxKeyTyped(var1, var2)) { + super.keyTyped(var1, var2); + } + + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 0 && this.func_82293_j()) { + this.createFlatWorldGui.setFlatGeneratorInfo(this.theTextField.getText()); + this.mc.displayGuiScreen(this.createFlatWorldGui); + } else if(var1.id == 1) { + this.mc.displayGuiScreen(this.createFlatWorldGui); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.theFlatPresetsListSlot.drawScreen(var1, var2, var3); + this.drawCenteredString(this.fontRenderer, this.field_82300_d, this.width / 2, 8, 16777215); + this.drawString(this.fontRenderer, this.field_82308_m, 50, 30, 10526880); + this.drawString(this.fontRenderer, this.field_82306_n, 50, 70, 10526880); + this.theTextField.drawTextBox(); + super.drawScreen(var1, var2, var3); + } + + public void updateScreen() { + this.theTextField.updateCursorCounter(); + super.updateScreen(); + } + + public void func_82296_g() { + boolean var1 = this.func_82293_j(); + this.theButton.enabled = var1; + } + + private boolean func_82293_j() { + return this.theFlatPresetsListSlot.field_82459_a > -1 && this.theFlatPresetsListSlot.field_82459_a < presets.size() || this.theTextField.getText().length() > 1; + } + + private static void addPresetNoFeatures(String var0, int var1, BiomeGenBase var2, FlatLayerInfo... var3) { + addPreset(var0, var1, var2, (List)null, var3); + } + + private static void addPreset(String var0, int var1, BiomeGenBase var2, List var3, FlatLayerInfo... var4) { + FlatGeneratorInfo var5 = new FlatGeneratorInfo(); + + for(int var6 = var4.length - 1; var6 >= 0; --var6) { + var5.getFlatLayers().add(var4[var6]); + } + + var5.setBiome(var2.biomeID); + var5.func_82645_d(); + if(var3 != null) { + Iterator var8 = var3.iterator(); + + while(var8.hasNext()) { + String var7 = (String)var8.next(); + var5.getWorldFeatures().put(var7, new HashMap()); + } + } + + presets.add(new GuiFlatPresetsItem(var1, var0, var5.toString())); + } + + static RenderItem getPresetIconRenderer() { + return presetIconRenderer; + } + + static List getPresets() { + return presets; + } + + static GuiFlatPresetsListSlot func_82292_a(GuiFlatPresets var0) { + return var0.theFlatPresetsListSlot; + } + + static GuiTextField func_82298_b(GuiFlatPresets var0) { + return var0.theTextField; + } + + static { + addPreset("Classic Flat", Block.grass.blockID, BiomeGenBase.plains, Arrays.asList(new String[]{"village"}), new FlatLayerInfo[]{new FlatLayerInfo(1, Block.grass.blockID), new FlatLayerInfo(2, Block.dirt.blockID), new FlatLayerInfo(1, Block.bedrock.blockID)}); + addPreset("Tunnelers\' Dream", Block.stone.blockID, BiomeGenBase.extremeHills, Arrays.asList(new String[]{"biome_1", "dungeon", "decoration", "stronghold", "mineshaft"}), new FlatLayerInfo[]{new FlatLayerInfo(1, Block.grass.blockID), new FlatLayerInfo(5, Block.dirt.blockID), new FlatLayerInfo(230, Block.stone.blockID), new FlatLayerInfo(1, Block.bedrock.blockID)}); + addPreset("Water World", Block.waterMoving.blockID, BiomeGenBase.plains, Arrays.asList(new String[]{"village", "biome_1"}), new FlatLayerInfo[]{new FlatLayerInfo(90, Block.waterStill.blockID), new FlatLayerInfo(5, Block.sand.blockID), new FlatLayerInfo(5, Block.dirt.blockID), new FlatLayerInfo(5, Block.stone.blockID), new FlatLayerInfo(1, Block.bedrock.blockID)}); + addPreset("Overworld", Block.tallGrass.blockID, BiomeGenBase.plains, Arrays.asList(new String[]{"village", "biome_1", "decoration", "stronghold", "mineshaft", "dungeon", "lake", "lava_lake"}), new FlatLayerInfo[]{new FlatLayerInfo(1, Block.grass.blockID), new FlatLayerInfo(3, Block.dirt.blockID), new FlatLayerInfo(59, Block.stone.blockID), new FlatLayerInfo(1, Block.bedrock.blockID)}); + addPreset("Snowy Kingdom", Block.snow.blockID, BiomeGenBase.icePlains, Arrays.asList(new String[]{"village", "biome_1"}), new FlatLayerInfo[]{new FlatLayerInfo(1, Block.snow.blockID), new FlatLayerInfo(1, Block.grass.blockID), new FlatLayerInfo(3, Block.dirt.blockID), new FlatLayerInfo(59, Block.stone.blockID), new FlatLayerInfo(1, Block.bedrock.blockID)}); + addPreset("Bottomless Pit", Item.feather.itemID, BiomeGenBase.plains, Arrays.asList(new String[]{"village", "biome_1"}), new FlatLayerInfo[]{new FlatLayerInfo(1, Block.grass.blockID), new FlatLayerInfo(3, Block.dirt.blockID), new FlatLayerInfo(2, Block.cobblestone.blockID)}); + addPreset("Desert", Block.sand.blockID, BiomeGenBase.desert, Arrays.asList(new String[]{"village", "biome_1", "decoration", "stronghold", "mineshaft", "dungeon"}), new FlatLayerInfo[]{new FlatLayerInfo(8, Block.sand.blockID), new FlatLayerInfo(52, Block.sandStone.blockID), new FlatLayerInfo(3, Block.stone.blockID), new FlatLayerInfo(1, Block.bedrock.blockID)}); + addPresetNoFeatures("Redstone Ready", Item.redstone.itemID, BiomeGenBase.desert, new FlatLayerInfo[]{new FlatLayerInfo(52, Block.sandStone.blockID), new FlatLayerInfo(3, Block.stone.blockID), new FlatLayerInfo(1, Block.bedrock.blockID)}); + } +} diff --git a/src/net/minecraft/src/GuiFlatPresetsItem.java b/src/net/minecraft/src/GuiFlatPresetsItem.java new file mode 100644 index 0000000..94c6ffb --- /dev/null +++ b/src/net/minecraft/src/GuiFlatPresetsItem.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +class GuiFlatPresetsItem { + public int iconId; + public String presetName; + public String presetData; + + public GuiFlatPresetsItem(int var1, String var2, String var3) { + this.iconId = var1; + this.presetName = var2; + this.presetData = var3; + } +} diff --git a/src/net/minecraft/src/GuiFlatPresetsListSlot.java b/src/net/minecraft/src/GuiFlatPresetsListSlot.java new file mode 100644 index 0000000..c72255c --- /dev/null +++ b/src/net/minecraft/src/GuiFlatPresetsListSlot.java @@ -0,0 +1,63 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +class GuiFlatPresetsListSlot extends GuiSlot { + public int field_82459_a; + final GuiFlatPresets flatPresetsGui; + + public GuiFlatPresetsListSlot(GuiFlatPresets var1) { + super(var1.mc, var1.width, var1.height, 80, var1.height - 37, 24); + this.flatPresetsGui = var1; + this.field_82459_a = -1; + } + + private void func_82457_a(int var1, int var2, int var3) { + this.func_82456_d(var1 + 1, var2 + 1); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + RenderHelper.enableGUIStandardItemLighting(); + GuiFlatPresets.getPresetIconRenderer().renderItemIntoGUI(this.flatPresetsGui.fontRenderer, this.flatPresetsGui.mc.renderEngine, new ItemStack(var3, 1, 0), var1 + 2, var2 + 2); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + } + + private void func_82456_d(int var1, int var2) { + this.func_82455_b(var1, var2, 0, 0); + } + + private void func_82455_b(int var1, int var2, int var3, int var4) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.flatPresetsGui.mc.renderEngine.bindTexture("/gui/slot.png"); + Tessellator var9 = Tessellator.instance; + var9.startDrawingQuads(); + var9.addVertexWithUV((double)(var1 + 0), (double)(var2 + 18), (double)this.flatPresetsGui.zLevel, (double)((float)(var3 + 0) * 0.0078125F), (double)((float)(var4 + 18) * 0.0078125F)); + var9.addVertexWithUV((double)(var1 + 18), (double)(var2 + 18), (double)this.flatPresetsGui.zLevel, (double)((float)(var3 + 18) * 0.0078125F), (double)((float)(var4 + 18) * 0.0078125F)); + var9.addVertexWithUV((double)(var1 + 18), (double)(var2 + 0), (double)this.flatPresetsGui.zLevel, (double)((float)(var3 + 18) * 0.0078125F), (double)((float)(var4 + 0) * 0.0078125F)); + var9.addVertexWithUV((double)(var1 + 0), (double)(var2 + 0), (double)this.flatPresetsGui.zLevel, (double)((float)(var3 + 0) * 0.0078125F), (double)((float)(var4 + 0) * 0.0078125F)); + var9.draw(); + } + + protected int getSize() { + return GuiFlatPresets.getPresets().size(); + } + + protected void elementClicked(int var1, boolean var2) { + this.field_82459_a = var1; + this.flatPresetsGui.func_82296_g(); + GuiFlatPresets.func_82298_b(this.flatPresetsGui).setText(((GuiFlatPresetsItem)GuiFlatPresets.getPresets().get(GuiFlatPresets.func_82292_a(this.flatPresetsGui).field_82459_a)).presetData); + } + + protected boolean isSelected(int var1) { + return var1 == this.field_82459_a; + } + + protected void drawBackground() { + } + + protected void drawSlot(int var1, int var2, int var3, int var4, Tessellator var5) { + GuiFlatPresetsItem var6 = (GuiFlatPresetsItem)GuiFlatPresets.getPresets().get(var1); + this.func_82457_a(var2, var3, var6.iconId); + this.flatPresetsGui.fontRenderer.drawString(var6.presetName, var2 + 18 + 5, var3 + 6, 16777215); + } +} diff --git a/src/net/minecraft/src/GuiFurnace.java b/src/net/minecraft/src/GuiFurnace.java new file mode 100644 index 0000000..e75546c --- /dev/null +++ b/src/net/minecraft/src/GuiFurnace.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiFurnace extends GuiContainer { + private TileEntityFurnace furnaceInventory; + + public GuiFurnace(InventoryPlayer var1, TileEntityFurnace var2) { + super(new ContainerFurnace(var1, var2)); + this.furnaceInventory = var2; + } + + protected void drawGuiContainerForegroundLayer(int var1, int var2) { + String var3 = this.furnaceInventory.isInvNameLocalized() ? this.furnaceInventory.getInvName() : StatCollector.translateToLocal(this.furnaceInventory.getInvName()); + this.fontRenderer.drawString(var3, this.xSize / 2 - this.fontRenderer.getStringWidth(var3) / 2, 6, 4210752); + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/furnace.png"); + int var4 = (this.width - this.xSize) / 2; + int var5 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var4, var5, 0, 0, this.xSize, this.ySize); + int var6; + if(this.furnaceInventory.isBurning()) { + var6 = this.furnaceInventory.getBurnTimeRemainingScaled(12); + this.drawTexturedModalRect(var4 + 56, var5 + 36 + 12 - var6, 176, 12 - var6, 14, var6 + 2); + } + + var6 = this.furnaceInventory.getCookProgressScaled(24); + this.drawTexturedModalRect(var4 + 79, var5 + 34, 176, 14, var6 + 1, 16); + } +} diff --git a/src/net/minecraft/src/GuiGameOver.java b/src/net/minecraft/src/GuiGameOver.java new file mode 100644 index 0000000..ca02140 --- /dev/null +++ b/src/net/minecraft/src/GuiGameOver.java @@ -0,0 +1,80 @@ +package net.minecraft.src; + +import java.util.Iterator; +import org.lwjgl.opengl.GL11; + +public class GuiGameOver extends GuiScreen { + private int cooldownTimer; + + public void initGui() { + this.buttonList.clear(); + if(this.mc.theWorld.getWorldInfo().isHardcoreModeEnabled()) { + if(this.mc.isIntegratedServerRunning()) { + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 96, StatCollector.translateToLocal("deathScreen.deleteWorld"))); + } else { + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 96, StatCollector.translateToLocal("deathScreen.leaveServer"))); + } + } else { + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 72, StatCollector.translateToLocal("deathScreen.respawn"))); + this.buttonList.add(new GuiButton(2, this.width / 2 - 100, this.height / 4 + 96, StatCollector.translateToLocal("deathScreen.titleScreen"))); + if(this.mc.session == null) { + ((GuiButton)this.buttonList.get(1)).enabled = false; + } + } + + GuiButton var2; + for(Iterator var1 = this.buttonList.iterator(); var1.hasNext(); var2.enabled = false) { + var2 = (GuiButton)var1.next(); + } + + } + + protected void keyTyped(char var1, int var2) { + } + + protected void actionPerformed(GuiButton var1) { + switch(var1.id) { + case 1: + this.mc.thePlayer.respawnPlayer(); + this.mc.displayGuiScreen((GuiScreen)null); + break; + case 2: + this.mc.theWorld.sendQuittingDisconnectingPacket(); + this.mc.loadWorld((WorldClient)null); + this.mc.displayGuiScreen(new GuiMainMenu()); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawGradientRect(0, 0, this.width, this.height, 1615855616, -1602211792); + GL11.glPushMatrix(); + GL11.glScalef(2.0F, 2.0F, 2.0F); + boolean var4 = this.mc.theWorld.getWorldInfo().isHardcoreModeEnabled(); + String var5 = var4 ? StatCollector.translateToLocal("deathScreen.title.hardcore") : StatCollector.translateToLocal("deathScreen.title"); + this.drawCenteredString(this.fontRenderer, var5, this.width / 2 / 2, 30, 16777215); + GL11.glPopMatrix(); + if(var4) { + this.drawCenteredString(this.fontRenderer, StatCollector.translateToLocal("deathScreen.hardcoreInfo"), this.width / 2, 144, 16777215); + } + + this.drawCenteredString(this.fontRenderer, StatCollector.translateToLocal("deathScreen.score") + ": " + EnumChatFormatting.YELLOW + this.mc.thePlayer.getScore(), this.width / 2, 100, 16777215); + super.drawScreen(var1, var2, var3); + } + + public boolean doesGuiPauseGame() { + return false; + } + + public void updateScreen() { + super.updateScreen(); + ++this.cooldownTimer; + GuiButton var2; + if(this.cooldownTimer == 20) { + for(Iterator var1 = this.buttonList.iterator(); var1.hasNext(); var2.enabled = true) { + var2 = (GuiButton)var1.next(); + } + } + + } +} diff --git a/src/net/minecraft/src/GuiHopper.java b/src/net/minecraft/src/GuiHopper.java new file mode 100644 index 0000000..169a958 --- /dev/null +++ b/src/net/minecraft/src/GuiHopper.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiHopper extends GuiContainer { + private IInventory field_94081_r; + private IInventory field_94080_s; + + public GuiHopper(InventoryPlayer var1, IInventory var2) { + super(new ContainerHopper(var1, var2)); + this.field_94081_r = var1; + this.field_94080_s = var2; + this.allowUserInput = false; + this.ySize = 133; + } + + protected void drawGuiContainerForegroundLayer(int var1, int var2) { + this.fontRenderer.drawString(this.field_94080_s.isInvNameLocalized() ? this.field_94080_s.getInvName() : StatCollector.translateToLocal(this.field_94080_s.getInvName()), 8, 6, 4210752); + this.fontRenderer.drawString(this.field_94081_r.isInvNameLocalized() ? this.field_94081_r.getInvName() : StatCollector.translateToLocal(this.field_94081_r.getInvName()), 8, this.ySize - 96 + 2, 4210752); + } + + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/hopper.png"); + int var4 = (this.width - this.xSize) / 2; + int var5 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var4, var5, 0, 0, this.xSize, this.ySize); + } +} diff --git a/src/net/minecraft/src/GuiIngame.java b/src/net/minecraft/src/GuiIngame.java new file mode 100644 index 0000000..c7c271e --- /dev/null +++ b/src/net/minecraft/src/GuiIngame.java @@ -0,0 +1,688 @@ +package net.minecraft.src; + +import java.awt.Color; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class GuiIngame extends Gui { + private static final RenderItem itemRenderer = new RenderItem(); + private final Random rand = new Random(); + private final Minecraft mc; + private final GuiNewChat persistantChatGUI; + private int updateCounter = 0; + private String recordPlaying = ""; + private int recordPlayingUpFor = 0; + private boolean recordIsPlaying = false; + public float prevVignetteBrightness = 1.0F; + private int remainingHighlightTicks; + private ItemStack highlightingItemStack; + + public GuiIngame(Minecraft var1) { + this.mc = var1; + this.persistantChatGUI = new GuiNewChat(var1); + } + + public void renderGameOverlay(float var1, boolean var2, int var3, int var4) { + ScaledResolution var5 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight); + int var6 = var5.getScaledWidth(); + int var7 = var5.getScaledHeight(); + FontRenderer var8 = this.mc.fontRenderer; + this.mc.entityRenderer.setupOverlayRendering(); + GL11.glEnable(GL11.GL_BLEND); + if(Minecraft.isFancyGraphicsEnabled()) { + this.renderVignette(this.mc.thePlayer.getBrightness(var1), var6, var7); + } else { + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + } + + ItemStack var9 = this.mc.thePlayer.inventory.armorItemInSlot(3); + if(this.mc.gameSettings.thirdPersonView == 0 && var9 != null && var9.itemID == Block.pumpkin.blockID) { + this.renderPumpkinBlur(var6, var7); + } + + if(!this.mc.thePlayer.isPotionActive(Potion.confusion)) { + float var10 = this.mc.thePlayer.prevTimeInPortal + (this.mc.thePlayer.timeInPortal - this.mc.thePlayer.prevTimeInPortal) * var1; + if(var10 > 0.0F) { + this.renderPortalOverlay(var10, var6, var7); + } + } + + boolean var11; + int var12; + int var13; + int var16; + int var17; + int var18; + int var20; + int var22; + int var23; + int var24; + int var26; + byte var27; + int var47; + int var52; + if(!this.mc.playerController.enableEverythingIsScrewedUpMode()) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/gui.png"); + InventoryPlayer var31 = this.mc.thePlayer.inventory; + this.zLevel = -90.0F; + this.drawTexturedModalRect(var6 / 2 - 91, var7 - 22, 0, 0, 182, 22); + this.drawTexturedModalRect(var6 / 2 - 91 - 1 + var31.currentItem * 20, var7 - 22 - 1, 0, 22, 24, 22); + this.mc.renderEngine.bindTexture("/gui/icons.png"); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_ONE_MINUS_DST_COLOR, GL11.GL_ONE_MINUS_SRC_COLOR); + this.drawTexturedModalRect(var6 / 2 - 7, var7 / 2 - 7, 0, 0, 16, 16); + GL11.glDisable(GL11.GL_BLEND); + var11 = this.mc.thePlayer.hurtResistantTime / 3 % 2 == 1; + if(this.mc.thePlayer.hurtResistantTime < 10) { + var11 = false; + } + + var12 = this.mc.thePlayer.getHealth(); + var13 = this.mc.thePlayer.prevHealth; + this.rand.setSeed((long)(this.updateCounter * 312871)); + boolean var14 = false; + FoodStats var15 = this.mc.thePlayer.getFoodStats(); + var16 = var15.getFoodLevel(); + var17 = var15.getPrevFoodLevel(); + this.mc.mcProfiler.startSection("bossHealth"); + this.renderBossHealth(); + this.mc.mcProfiler.endSection(); + int var19; + if(this.mc.playerController.shouldDrawHUD()) { + var18 = var6 / 2 - 91; + var19 = var6 / 2 + 91; + this.mc.mcProfiler.startSection("expBar"); + var20 = this.mc.thePlayer.xpBarCap(); + if(var20 > 0) { + short var21 = 182; + var22 = (int)(this.mc.thePlayer.experience * (float)(var21 + 1)); + var23 = var7 - 32 + 3; + this.drawTexturedModalRect(var18, var23, 0, 64, var21, 5); + if(var22 > 0) { + this.drawTexturedModalRect(var18, var23, 0, 69, var22, 5); + } + } + + var47 = var7 - 39; + var22 = var47 - 10; + var23 = this.mc.thePlayer.getTotalArmorValue(); + var24 = -1; + if(this.mc.thePlayer.isPotionActive(Potion.regeneration)) { + var24 = this.updateCounter % 25; + } + + this.mc.mcProfiler.endStartSection("healthArmor"); + + int var25; + int var28; + int var29; + for(var25 = 0; var25 < 10; ++var25) { + if(var23 > 0) { + var26 = var18 + var25 * 8; + if(var25 * 2 + 1 < var23) { + this.drawTexturedModalRect(var26, var22, 34, 9, 9, 9); + } + + if(var25 * 2 + 1 == var23) { + this.drawTexturedModalRect(var26, var22, 25, 9, 9, 9); + } + + if(var25 * 2 + 1 > var23) { + this.drawTexturedModalRect(var26, var22, 16, 9, 9, 9); + } + } + + var26 = 16; + if(this.mc.thePlayer.isPotionActive(Potion.poison)) { + var26 += 36; + } else if(this.mc.thePlayer.isPotionActive(Potion.wither)) { + var26 += 72; + } + + var27 = 0; + if(var11) { + var27 = 1; + } + + var28 = var18 + var25 * 8; + var29 = var47; + if(var12 <= 4) { + var29 = var47 + this.rand.nextInt(2); + } + + if(var25 == var24) { + var29 -= 2; + } + + byte var30 = 0; + if(this.mc.theWorld.getWorldInfo().isHardcoreModeEnabled()) { + var30 = 5; + } + + this.drawTexturedModalRect(var28, var29, 16 + var27 * 9, 9 * var30, 9, 9); + if(var11) { + if(var25 * 2 + 1 < var13) { + this.drawTexturedModalRect(var28, var29, var26 + 54, 9 * var30, 9, 9); + } + + if(var25 * 2 + 1 == var13) { + this.drawTexturedModalRect(var28, var29, var26 + 63, 9 * var30, 9, 9); + } + } + + if(var25 * 2 + 1 < var12) { + this.drawTexturedModalRect(var28, var29, var26 + 36, 9 * var30, 9, 9); + } + + if(var25 * 2 + 1 == var12) { + this.drawTexturedModalRect(var28, var29, var26 + 45, 9 * var30, 9, 9); + } + } + + this.mc.mcProfiler.endStartSection("food"); + + for(var25 = 0; var25 < 10; ++var25) { + var26 = var47; + var52 = 16; + byte var53 = 0; + if(this.mc.thePlayer.isPotionActive(Potion.hunger)) { + var52 += 36; + var53 = 13; + } + + if(this.mc.thePlayer.getFoodStats().getSaturationLevel() <= 0.0F && this.updateCounter % (var16 * 3 + 1) == 0) { + var26 = var47 + (this.rand.nextInt(3) - 1); + } + + if(var14) { + var53 = 1; + } + + var29 = var19 - var25 * 8 - 9; + this.drawTexturedModalRect(var29, var26, 16 + var53 * 9, 27, 9, 9); + if(var14) { + if(var25 * 2 + 1 < var17) { + this.drawTexturedModalRect(var29, var26, var52 + 54, 27, 9, 9); + } + + if(var25 * 2 + 1 == var17) { + this.drawTexturedModalRect(var29, var26, var52 + 63, 27, 9, 9); + } + } + + if(var25 * 2 + 1 < var16) { + this.drawTexturedModalRect(var29, var26, var52 + 36, 27, 9, 9); + } + + if(var25 * 2 + 1 == var16) { + this.drawTexturedModalRect(var29, var26, var52 + 45, 27, 9, 9); + } + } + + this.mc.mcProfiler.endStartSection("air"); + if(this.mc.thePlayer.isInsideOfMaterial(Material.water)) { + var25 = this.mc.thePlayer.getAir(); + var26 = MathHelper.ceiling_double_int((double)(var25 - 2) * 10.0D / 300.0D); + var52 = MathHelper.ceiling_double_int((double)var25 * 10.0D / 300.0D) - var26; + + for(var28 = 0; var28 < var26 + var52; ++var28) { + if(var28 < var26) { + this.drawTexturedModalRect(var19 - var28 * 8 - 9, var22, 16, 18, 9, 9); + } else { + this.drawTexturedModalRect(var19 - var28 * 8 - 9, var22, 25, 18, 9, 9); + } + } + } + + this.mc.mcProfiler.endSection(); + } + + GL11.glDisable(GL11.GL_BLEND); + this.mc.mcProfiler.startSection("actionBar"); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + RenderHelper.enableGUIStandardItemLighting(); + + for(var18 = 0; var18 < 9; ++var18) { + var19 = var6 / 2 - 90 + var18 * 20 + 2; + var20 = var7 - 16 - 3; + this.renderInventorySlot(var18, var19, var20, var1); + } + + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + this.mc.mcProfiler.endSection(); + } + + float var33; + if(this.mc.thePlayer.getSleepTimer() > 0) { + this.mc.mcProfiler.startSection("sleep"); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_ALPHA_TEST); + int var32 = this.mc.thePlayer.getSleepTimer(); + var33 = (float)var32 / 100.0F; + if(var33 > 1.0F) { + var33 = 1.0F - (float)(var32 - 100) / 10.0F; + } + + var12 = (int)(220.0F * var33) << 24 | 1052704; + drawRect(0, 0, var6, var7, var12); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_DEPTH_TEST); + this.mc.mcProfiler.endSection(); + } + + int var36; + int var40; + if(this.mc.playerController.func_78763_f() && this.mc.thePlayer.experienceLevel > 0) { + this.mc.mcProfiler.startSection("expLevel"); + var11 = false; + var12 = var11 ? 16777215 : 8453920; + String var34 = "" + this.mc.thePlayer.experienceLevel; + var36 = (var6 - var8.getStringWidth(var34)) / 2; + var40 = var7 - 31 - 4; + var8.drawString(var34, var36 + 1, var40, 0); + var8.drawString(var34, var36 - 1, var40, 0); + var8.drawString(var34, var36, var40 + 1, 0); + var8.drawString(var34, var36, var40 - 1, 0); + var8.drawString(var34, var36, var40, var12); + this.mc.mcProfiler.endSection(); + } + + String var35; + if(this.mc.gameSettings.heldItemTooltips) { + this.mc.mcProfiler.startSection("toolHighlight"); + if(this.remainingHighlightTicks > 0 && this.highlightingItemStack != null) { + var35 = this.highlightingItemStack.getDisplayName(); + var12 = (var6 - var8.getStringWidth(var35)) / 2; + var13 = var7 - 59; + if(!this.mc.playerController.shouldDrawHUD()) { + var13 += 14; + } + + var36 = (int)((float)this.remainingHighlightTicks * 256.0F / 10.0F); + if(var36 > 255) { + var36 = 255; + } + + if(var36 > 0) { + GL11.glPushMatrix(); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + var8.drawStringWithShadow(var35, var12, var13, 16777215 + (var36 << 24)); + GL11.glDisable(GL11.GL_BLEND); + GL11.glPopMatrix(); + } + } + + this.mc.mcProfiler.endSection(); + } + + if(this.mc.isDemo()) { + this.mc.mcProfiler.startSection("demo"); + var35 = ""; + if(this.mc.theWorld.getTotalWorldTime() >= 120500L) { + var35 = StatCollector.translateToLocal("demo.demoExpired"); + } else { + var35 = String.format(StatCollector.translateToLocal("demo.remainingTime"), new Object[]{StringUtils.ticksToElapsedTime((int)(120500L - this.mc.theWorld.getTotalWorldTime()))}); + } + + var12 = var8.getStringWidth(var35); + var8.drawStringWithShadow(var35, var6 - var12 - 10, 5, 16777215); + this.mc.mcProfiler.endSection(); + } + + if(this.mc.gameSettings.showDebugInfo) { + this.mc.mcProfiler.startSection("debug"); + GL11.glPushMatrix(); + var8.drawStringWithShadow("Minecraft 1.5.2 (" + this.mc.debug + ")", 2, 2, 16777215); + var8.drawStringWithShadow(this.mc.debugInfoRenders(), 2, 12, 16777215); + var8.drawStringWithShadow(this.mc.getEntityDebug(), 2, 22, 16777215); + var8.drawStringWithShadow(this.mc.debugInfoEntities(), 2, 32, 16777215); + var8.drawStringWithShadow(this.mc.getWorldProviderName(), 2, 42, 16777215); + long var39 = Runtime.getRuntime().maxMemory(); + long var37 = Runtime.getRuntime().totalMemory(); + long var41 = Runtime.getRuntime().freeMemory(); + long var44 = var37 - var41; + String var45 = "Used memory: " + var44 * 100L / var39 + "% (" + var44 / 1024L / 1024L + "MB) of " + var39 / 1024L / 1024L + "MB"; + this.drawString(var8, var45, var6 - var8.getStringWidth(var45) - 2, 2, 14737632); + var45 = "Allocated memory: " + var37 * 100L / var39 + "% (" + var37 / 1024L / 1024L + "MB)"; + this.drawString(var8, var45, var6 - var8.getStringWidth(var45) - 2, 12, 14737632); + var47 = MathHelper.floor_double(this.mc.thePlayer.posX); + var22 = MathHelper.floor_double(this.mc.thePlayer.posY); + var23 = MathHelper.floor_double(this.mc.thePlayer.posZ); + this.drawString(var8, String.format("x: %.5f (%d) // c: %d (%d)", new Object[]{Double.valueOf(this.mc.thePlayer.posX), Integer.valueOf(var47), Integer.valueOf(var47 >> 4), Integer.valueOf(var47 & 15)}), 2, 64, 14737632); + this.drawString(var8, String.format("y: %.3f (feet pos, %.3f eyes pos)", new Object[]{Double.valueOf(this.mc.thePlayer.boundingBox.minY), Double.valueOf(this.mc.thePlayer.posY)}), 2, 72, 14737632); + this.drawString(var8, String.format("z: %.5f (%d) // c: %d (%d)", new Object[]{Double.valueOf(this.mc.thePlayer.posZ), Integer.valueOf(var23), Integer.valueOf(var23 >> 4), Integer.valueOf(var23 & 15)}), 2, 80, 14737632); + var24 = MathHelper.floor_double((double)(this.mc.thePlayer.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + this.drawString(var8, "f: " + var24 + " (" + Direction.directions[var24] + ") / " + MathHelper.wrapAngleTo180_float(this.mc.thePlayer.rotationYaw), 2, 88, 14737632); + if(this.mc.theWorld != null && this.mc.theWorld.blockExists(var47, var22, var23)) { + Chunk var50 = this.mc.theWorld.getChunkFromBlockCoords(var47, var23); + this.drawString(var8, "lc: " + (var50.getTopFilledSegment() + 15) + " b: " + var50.getBiomeGenForWorldCoords(var47 & 15, var23 & 15, this.mc.theWorld.getWorldChunkManager()).biomeName + " bl: " + var50.getSavedLightValue(EnumSkyBlock.Block, var47 & 15, var22, var23 & 15) + " sl: " + var50.getSavedLightValue(EnumSkyBlock.Sky, var47 & 15, var22, var23 & 15) + " rl: " + var50.getBlockLightValue(var47 & 15, var22, var23 & 15, 0), 2, 96, 14737632); + } + + this.drawString(var8, String.format("ws: %.3f, fs: %.3f, g: %b, fl: %d", new Object[]{Float.valueOf(this.mc.thePlayer.capabilities.getWalkSpeed()), Float.valueOf(this.mc.thePlayer.capabilities.getFlySpeed()), Boolean.valueOf(this.mc.thePlayer.onGround), Integer.valueOf(this.mc.theWorld.getHeightValue(var47, var23))}), 2, 104, 14737632); + GL11.glPopMatrix(); + this.mc.mcProfiler.endSection(); + } + + if(this.recordPlayingUpFor > 0) { + this.mc.mcProfiler.startSection("overlayMessage"); + var33 = (float)this.recordPlayingUpFor - var1; + var12 = (int)(var33 * 256.0F / 20.0F); + if(var12 > 255) { + var12 = 255; + } + + if(var12 > 0) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)(var6 / 2), (float)(var7 - 48), 0.0F); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + var13 = 16777215; + if(this.recordIsPlaying) { + var13 = Color.HSBtoRGB(var33 / 50.0F, 0.7F, 0.6F) & 16777215; + } + + var8.drawString(this.recordPlaying, -var8.getStringWidth(this.recordPlaying) / 2, -4, var13 + (var12 << 24)); + GL11.glDisable(GL11.GL_BLEND); + GL11.glPopMatrix(); + } + + this.mc.mcProfiler.endSection(); + } + + ScoreObjective var42 = this.mc.theWorld.getScoreboard().func_96539_a(1); + if(var42 != null) { + this.func_96136_a(var42, var7, var6, var8); + } + + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, (float)(var7 - 48), 0.0F); + this.mc.mcProfiler.startSection("chat"); + this.persistantChatGUI.drawChat(this.updateCounter); + this.mc.mcProfiler.endSection(); + GL11.glPopMatrix(); + var42 = this.mc.theWorld.getScoreboard().func_96539_a(0); + if(this.mc.gameSettings.keyBindPlayerList.pressed && (!this.mc.isIntegratedServerRunning() || this.mc.thePlayer.sendQueue.playerInfoList.size() > 1 || var42 != null)) { + this.mc.mcProfiler.startSection("playerList"); + NetClientHandler var38 = this.mc.thePlayer.sendQueue; + List var43 = var38.playerInfoList; + var36 = var38.currentServerMaxPlayers; + var40 = var36; + + for(var16 = 1; var40 > 20; var40 = (var36 + var16 - 1) / var16) { + ++var16; + } + + var17 = 300 / var16; + if(var17 > 150) { + var17 = 150; + } + + var18 = (var6 - var16 * var17) / 2; + byte var46 = 10; + drawRect(var18 - 1, var46 - 1, var18 + var17 * var16, var46 + 9 * var40, Integer.MIN_VALUE); + + for(var20 = 0; var20 < var36; ++var20) { + var47 = var18 + var20 % var16 * var17; + var22 = var46 + var20 / var16 * 9; + drawRect(var47, var22, var47 + var17 - 1, var22 + 8, 553648127); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL11.GL_ALPHA_TEST); + if(var20 < var43.size()) { + GuiPlayerInfo var48 = (GuiPlayerInfo)var43.get(var20); + ScorePlayerTeam var49 = this.mc.theWorld.getScoreboard().getPlayersTeam(var48.name); + String var51 = ScorePlayerTeam.func_96667_a(var49, var48.name); + var8.drawStringWithShadow(var51, var47, var22, 16777215); + if(var42 != null) { + var26 = var47 + var8.getStringWidth(var51) + 5; + var52 = var47 + var17 - 12 - 5; + if(var52 - var26 > 5) { + Score var55 = var42.getScoreboard().func_96529_a(var48.name, var42); + String var57 = EnumChatFormatting.YELLOW + "" + var55.func_96652_c(); + var8.drawStringWithShadow(var57, var52 - var8.getStringWidth(var57), var22, 16777215); + } + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/icons.png"); + byte var54 = 0; + boolean var56 = false; + if(var48.responseTime < 0) { + var27 = 5; + } else if(var48.responseTime < 150) { + var27 = 0; + } else if(var48.responseTime < 300) { + var27 = 1; + } else if(var48.responseTime < 600) { + var27 = 2; + } else if(var48.responseTime < 1000) { + var27 = 3; + } else { + var27 = 4; + } + + this.zLevel += 100.0F; + this.drawTexturedModalRect(var47 + var17 - 12, var22, 0 + var54 * 10, 176 + var27 * 8, 10, 8); + this.zLevel -= 100.0F; + } + } + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_ALPHA_TEST); + } + + private void func_96136_a(ScoreObjective var1, int var2, int var3, FontRenderer var4) { + Scoreboard var5 = var1.getScoreboard(); + Collection var6 = var5.func_96534_i(var1); + if(var6.size() <= 15) { + int var7 = var4.getStringWidth(var1.getDisplayName()); + + String var11; + for(Iterator var8 = var6.iterator(); var8.hasNext(); var7 = Math.max(var7, var4.getStringWidth(var11))) { + Score var9 = (Score)var8.next(); + ScorePlayerTeam var10 = var5.getPlayersTeam(var9.func_96653_e()); + var11 = ScorePlayerTeam.func_96667_a(var10, var9.func_96653_e()) + ": " + EnumChatFormatting.RED + var9.func_96652_c(); + } + + int var22 = var6.size() * var4.FONT_HEIGHT; + int var23 = var2 / 2 + var22 / 3; + byte var24 = 3; + int var25 = var3 - var7 - var24; + int var12 = 0; + Iterator var13 = var6.iterator(); + + while(var13.hasNext()) { + Score var14 = (Score)var13.next(); + ++var12; + ScorePlayerTeam var15 = var5.getPlayersTeam(var14.func_96653_e()); + String var16 = ScorePlayerTeam.func_96667_a(var15, var14.func_96653_e()); + String var17 = EnumChatFormatting.RED + "" + var14.func_96652_c(); + int var19 = var23 - var12 * var4.FONT_HEIGHT; + int var20 = var3 - var24 + 2; + drawRect(var25 - 2, var19, var20, var19 + var4.FONT_HEIGHT, 1342177280); + var4.drawString(var16, var25, var19, 553648127); + var4.drawString(var17, var20 - var4.getStringWidth(var17), var19, 553648127); + if(var12 == var6.size()) { + String var21 = var1.getDisplayName(); + drawRect(var25 - 2, var19 - var4.FONT_HEIGHT - 1, var20, var19 - 1, 1610612736); + drawRect(var25 - 2, var19 - 1, var20, var19, 1342177280); + var4.drawString(var21, var25 + var7 / 2 - var4.getStringWidth(var21) / 2, var19 - var4.FONT_HEIGHT, 553648127); + } + } + + } + } + + private void renderBossHealth() { + if(BossStatus.bossName != null && BossStatus.statusBarLength > 0) { + --BossStatus.statusBarLength; + FontRenderer var1 = this.mc.fontRenderer; + ScaledResolution var2 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight); + int var3 = var2.getScaledWidth(); + short var4 = 182; + int var5 = var3 / 2 - var4 / 2; + int var6 = (int)(BossStatus.healthScale * (float)(var4 + 1)); + byte var7 = 12; + this.drawTexturedModalRect(var5, var7, 0, 74, var4, 5); + this.drawTexturedModalRect(var5, var7, 0, 74, var4, 5); + if(var6 > 0) { + this.drawTexturedModalRect(var5, var7, 0, 79, var6, 5); + } + + String var8 = BossStatus.bossName; + var1.drawStringWithShadow(var8, var3 / 2 - var1.getStringWidth(var8) / 2, var7 - 10, 16777215); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/icons.png"); + } + } + + private void renderPumpkinBlur(int var1, int var2) { + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_ALPHA_TEST); + this.mc.renderEngine.bindTexture("%blur%/misc/pumpkinblur.png"); + Tessellator var3 = Tessellator.instance; + var3.startDrawingQuads(); + var3.addVertexWithUV(0.0D, (double)var2, -90.0D, 0.0D, 1.0D); + var3.addVertexWithUV((double)var1, (double)var2, -90.0D, 1.0D, 1.0D); + var3.addVertexWithUV((double)var1, 0.0D, -90.0D, 1.0D, 0.0D); + var3.addVertexWithUV(0.0D, 0.0D, -90.0D, 0.0D, 0.0D); + var3.draw(); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + private void renderVignette(float var1, int var2, int var3) { + var1 = 1.0F - var1; + if(var1 < 0.0F) { + var1 = 0.0F; + } + + if(var1 > 1.0F) { + var1 = 1.0F; + } + + this.prevVignetteBrightness = (float)((double)this.prevVignetteBrightness + (double)(var1 - this.prevVignetteBrightness) * 0.01D); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_ZERO, GL11.GL_ONE_MINUS_SRC_COLOR); + GL11.glColor4f(this.prevVignetteBrightness, this.prevVignetteBrightness, this.prevVignetteBrightness, 1.0F); + this.mc.renderEngine.bindTexture("%blur%/misc/vignette.png"); + Tessellator var4 = Tessellator.instance; + var4.startDrawingQuads(); + var4.addVertexWithUV(0.0D, (double)var3, -90.0D, 0.0D, 1.0D); + var4.addVertexWithUV((double)var2, (double)var3, -90.0D, 1.0D, 1.0D); + var4.addVertexWithUV((double)var2, 0.0D, -90.0D, 1.0D, 0.0D); + var4.addVertexWithUV(0.0D, 0.0D, -90.0D, 0.0D, 0.0D); + var4.draw(); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + } + + private void renderPortalOverlay(float var1, int var2, int var3) { + if(var1 < 1.0F) { + var1 *= var1; + var1 *= var1; + var1 = var1 * 0.8F + 0.2F; + } + + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(1.0F, 1.0F, 1.0F, var1); + this.mc.renderEngine.bindTexture("/terrain.png"); + Icon var4 = Block.portal.getBlockTextureFromSide(1); + float var5 = var4.getMinU(); + float var6 = var4.getMinV(); + float var7 = var4.getMaxU(); + float var8 = var4.getMaxV(); + Tessellator var9 = Tessellator.instance; + var9.startDrawingQuads(); + var9.addVertexWithUV(0.0D, (double)var3, -90.0D, (double)var5, (double)var8); + var9.addVertexWithUV((double)var2, (double)var3, -90.0D, (double)var7, (double)var8); + var9.addVertexWithUV((double)var2, 0.0D, -90.0D, (double)var7, (double)var6); + var9.addVertexWithUV(0.0D, 0.0D, -90.0D, (double)var5, (double)var6); + var9.draw(); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + private void renderInventorySlot(int var1, int var2, int var3, float var4) { + ItemStack var5 = this.mc.thePlayer.inventory.mainInventory[var1]; + if(var5 != null) { + float var6 = (float)var5.animationsToGo - var4; + if(var6 > 0.0F) { + GL11.glPushMatrix(); + float var7 = 1.0F + var6 / 5.0F; + GL11.glTranslatef((float)(var2 + 8), (float)(var3 + 12), 0.0F); + GL11.glScalef(1.0F / var7, (var7 + 1.0F) / 2.0F, 1.0F); + GL11.glTranslatef((float)(-(var2 + 8)), (float)(-(var3 + 12)), 0.0F); + } + + itemRenderer.renderItemAndEffectIntoGUI(this.mc.fontRenderer, this.mc.renderEngine, var5, var2, var3); + if(var6 > 0.0F) { + GL11.glPopMatrix(); + } + + itemRenderer.renderItemOverlayIntoGUI(this.mc.fontRenderer, this.mc.renderEngine, var5, var2, var3); + } + } + + public void updateTick() { + if(this.recordPlayingUpFor > 0) { + --this.recordPlayingUpFor; + } + + ++this.updateCounter; + if(this.mc.thePlayer != null) { + ItemStack var1 = this.mc.thePlayer.inventory.getCurrentItem(); + if(var1 == null) { + this.remainingHighlightTicks = 0; + } else if(this.highlightingItemStack != null && var1.itemID == this.highlightingItemStack.itemID && ItemStack.areItemStackTagsEqual(var1, this.highlightingItemStack) && (var1.isItemStackDamageable() || var1.getItemDamage() == this.highlightingItemStack.getItemDamage())) { + if(this.remainingHighlightTicks > 0) { + --this.remainingHighlightTicks; + } + } else { + this.remainingHighlightTicks = 40; + } + + this.highlightingItemStack = var1; + } + + } + + public void setRecordPlayingMessage(String var1) { + this.recordPlaying = "Now playing: " + var1; + this.recordPlayingUpFor = 60; + this.recordIsPlaying = true; + } + + public GuiNewChat getChatGUI() { + return this.persistantChatGUI; + } + + public int getUpdateCounter() { + return this.updateCounter; + } +} diff --git a/src/net/minecraft/src/GuiIngameMenu.java b/src/net/minecraft/src/GuiIngameMenu.java new file mode 100644 index 0000000..c6fd91d --- /dev/null +++ b/src/net/minecraft/src/GuiIngameMenu.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +import java.util.List; + +public class GuiIngameMenu extends GuiScreen { + private int updateCounter2 = 0; + private int updateCounter = 0; + + public void initGui() { + this.updateCounter2 = 0; + this.buttonList.clear(); + byte var1 = -16; + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 120 + var1, StatCollector.translateToLocal("menu.returnToMenu"))); + if(!this.mc.isIntegratedServerRunning()) { + ((GuiButton)this.buttonList.get(0)).displayString = StatCollector.translateToLocal("menu.disconnect"); + } + + this.buttonList.add(new GuiButton(4, this.width / 2 - 100, this.height / 4 + 24 + var1, StatCollector.translateToLocal("menu.returnToGame"))); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + var1, 98, 20, StatCollector.translateToLocal("menu.options"))); + List var10000 = this.buttonList; + GuiButton var3 = new GuiButton(7, this.width / 2 + 2, this.height / 4 + 96 + var1, 98, 20, StatCollector.translateToLocal("menu.shareToLan")); + var10000.add(var3); + this.buttonList.add(new GuiButton(5, this.width / 2 - 100, this.height / 4 + 48 + var1, 98, 20, StatCollector.translateToLocal("gui.achievements"))); + this.buttonList.add(new GuiButton(6, this.width / 2 + 2, this.height / 4 + 48 + var1, 98, 20, StatCollector.translateToLocal("gui.stats"))); + var3.enabled = this.mc.isSingleplayer() && !this.mc.getIntegratedServer().getPublic(); + } + + protected void actionPerformed(GuiButton var1) { + switch(var1.id) { + case 0: + this.mc.displayGuiScreen(new GuiOptions(this, this.mc.gameSettings)); + break; + case 1: + var1.enabled = false; + this.mc.statFileWriter.readStat(StatList.leaveGameStat, 1); + this.mc.theWorld.sendQuittingDisconnectingPacket(); + this.mc.loadWorld((WorldClient)null); + this.mc.displayGuiScreen(new GuiMainMenu()); + case 2: + case 3: + default: + break; + case 4: + this.mc.displayGuiScreen((GuiScreen)null); + this.mc.setIngameFocus(); + this.mc.sndManager.resumeAllSounds(); + break; + case 5: + this.mc.displayGuiScreen(new GuiAchievements(this.mc.statFileWriter)); + break; + case 6: + this.mc.displayGuiScreen(new GuiStats(this, this.mc.statFileWriter)); + break; + case 7: + this.mc.displayGuiScreen(new GuiShareToLan(this)); + } + + } + + public void updateScreen() { + super.updateScreen(); + ++this.updateCounter; + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, "Game menu", this.width / 2, 40, 16777215); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiInventory.java b/src/net/minecraft/src/GuiInventory.java new file mode 100644 index 0000000..2d90e59 --- /dev/null +++ b/src/net/minecraft/src/GuiInventory.java @@ -0,0 +1,94 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class GuiInventory extends InventoryEffectRenderer { + private float xSize_lo; + private float ySize_lo; + + public GuiInventory(EntityPlayer var1) { + super(var1.inventoryContainer); + this.allowUserInput = true; + var1.addStat(AchievementList.openInventory, 1); + } + + public void updateScreen() { + if(this.mc.playerController.isInCreativeMode()) { + this.mc.displayGuiScreen(new GuiContainerCreative(this.mc.thePlayer)); + } + + } + + public void initGui() { + this.buttonList.clear(); + if(this.mc.playerController.isInCreativeMode()) { + this.mc.displayGuiScreen(new GuiContainerCreative(this.mc.thePlayer)); + } else { + super.initGui(); + } + + } + + protected void drawGuiContainerForegroundLayer(int var1, int var2) { + this.fontRenderer.drawString(StatCollector.translateToLocal("container.crafting"), 86, 16, 4210752); + } + + public void drawScreen(int var1, int var2, float var3) { + super.drawScreen(var1, var2, var3); + this.xSize_lo = (float)var1; + this.ySize_lo = (float)var2; + } + + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/inventory.png"); + int var4 = this.guiLeft; + int var5 = this.guiTop; + this.drawTexturedModalRect(var4, var5, 0, 0, this.xSize, this.ySize); + drawPlayerOnGui(this.mc, var4 + 51, var5 + 75, 30, (float)(var4 + 51) - this.xSize_lo, (float)(var5 + 75 - 50) - this.ySize_lo); + } + + public static void drawPlayerOnGui(Minecraft var0, int var1, int var2, int var3, float var4, float var5) { + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glPushMatrix(); + GL11.glTranslatef((float)var1, (float)var2, 50.0F); + GL11.glScalef((float)(-var3), (float)var3, (float)var3); + GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); + float var6 = var0.thePlayer.renderYawOffset; + float var7 = var0.thePlayer.rotationYaw; + float var8 = var0.thePlayer.rotationPitch; + GL11.glRotatef(135.0F, 0.0F, 1.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GL11.glRotatef(-135.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-((float)Math.atan((double)(var5 / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F); + var0.thePlayer.renderYawOffset = (float)Math.atan((double)(var4 / 40.0F)) * 20.0F; + var0.thePlayer.rotationYaw = (float)Math.atan((double)(var4 / 40.0F)) * 40.0F; + var0.thePlayer.rotationPitch = -((float)Math.atan((double)(var5 / 40.0F))) * 20.0F; + var0.thePlayer.rotationYawHead = var0.thePlayer.rotationYaw; + GL11.glTranslatef(0.0F, var0.thePlayer.yOffset, 0.0F); + RenderManager.instance.playerViewY = 180.0F; + RenderManager.instance.renderEntityWithPosYaw(var0.thePlayer, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F); + var0.thePlayer.renderYawOffset = var6; + var0.thePlayer.rotationYaw = var7; + var0.thePlayer.rotationPitch = var8; + GL11.glPopMatrix(); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GL11.glDisable(GL11.GL_TEXTURE_2D); + OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 0) { + this.mc.displayGuiScreen(new GuiAchievements(this.mc.statFileWriter)); + } + + if(var1.id == 1) { + this.mc.displayGuiScreen(new GuiStats(this, this.mc.statFileWriter)); + } + + } +} diff --git a/src/net/minecraft/src/GuiLanguage.java b/src/net/minecraft/src/GuiLanguage.java new file mode 100644 index 0000000..e5fbd89 --- /dev/null +++ b/src/net/minecraft/src/GuiLanguage.java @@ -0,0 +1,62 @@ +package net.minecraft.src; + +public class GuiLanguage extends GuiScreen { + protected GuiScreen parentGui; + private int updateTimer = -1; + private GuiSlotLanguage languageList; + private final GameSettings theGameSettings; + private GuiSmallButton doneButton; + + public GuiLanguage(GuiScreen var1, GameSettings var2) { + this.parentGui = var1; + this.theGameSettings = var2; + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + this.buttonList.add(this.doneButton = new GuiSmallButton(6, this.width / 2 - 75, this.height - 38, var1.translateKey("gui.done"))); + this.languageList = new GuiSlotLanguage(this); + this.languageList.registerScrollButtons(this.buttonList, 7, 8); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + switch(var1.id) { + case 5: + break; + case 6: + this.mc.displayGuiScreen(this.parentGui); + break; + default: + this.languageList.actionPerformed(var1); + } + + } + } + + public void drawScreen(int var1, int var2, float var3) { + this.languageList.drawScreen(var1, var2, var3); + if(this.updateTimer <= 0) { + this.mc.texturePackList.updateAvaliableTexturePacks(); + this.updateTimer += 20; + } + + StringTranslate var4 = StringTranslate.getInstance(); + this.drawCenteredString(this.fontRenderer, var4.translateKey("options.language"), this.width / 2, 16, 16777215); + this.drawCenteredString(this.fontRenderer, "(" + var4.translateKey("options.languageWarning") + ")", this.width / 2, this.height - 56, 8421504); + super.drawScreen(var1, var2, var3); + } + + public void updateScreen() { + super.updateScreen(); + --this.updateTimer; + } + + static GameSettings getGameSettings(GuiLanguage var0) { + return var0.theGameSettings; + } + + static GuiSmallButton getDoneButton(GuiLanguage var0) { + return var0.doneButton; + } +} diff --git a/src/net/minecraft/src/GuiMainMenu.java b/src/net/minecraft/src/GuiMainMenu.java new file mode 100644 index 0000000..637aee2 --- /dev/null +++ b/src/net/minecraft/src/GuiMainMenu.java @@ -0,0 +1,516 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URI; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.List; +import java.util.Random; +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.glu.GLU; + +public class GuiMainMenu extends GuiScreen { + private static final Random rand = new Random(); + private float updateCounter = 0.0F; + private String splashText = "missingno"; + private GuiButton buttonResetDemo; + private int panoramaTimer = 0; + private int viewportTexture; + private boolean field_96141_q = true; + private static boolean field_96140_r = false; + private static boolean field_96139_s = false; + private final Object field_104025_t = new Object(); + private String field_92025_p; + private String field_104024_v; + private static final String[] titlePanoramaPaths = new String[]{"/title/bg/panorama0.png", "/title/bg/panorama1.png", "/title/bg/panorama2.png", "/title/bg/panorama3.png", "/title/bg/panorama4.png", "/title/bg/panorama5.png"}; + public static final String field_96138_a = "Please click " + EnumChatFormatting.UNDERLINE + "here" + EnumChatFormatting.RESET + " for more information."; + private int field_92024_r; + private int field_92023_s; + private int field_92022_t; + private int field_92021_u; + private int field_92020_v; + private int field_92019_w; + + public GuiMainMenu() { + BufferedReader var1 = null; + + String var3; + try { + ArrayList var2 = new ArrayList(); + var1 = new BufferedReader(new InputStreamReader(GuiMainMenu.class.getResourceAsStream("/title/splashes.txt"), Charset.forName("UTF-8"))); + + while(true) { + var3 = var1.readLine(); + if(var3 == null) { + do { + this.splashText = (String)var2.get(rand.nextInt(var2.size())); + } while(this.splashText.hashCode() == 125780783); + break; + } + + var3 = var3.trim(); + if(var3.length() > 0) { + var2.add(var3); + } + } + } catch (IOException var12) { + } finally { + if(var1 != null) { + try { + var1.close(); + } catch (IOException var11) { + } + } + + } + + this.updateCounter = rand.nextFloat(); + this.field_92025_p = ""; + String var14 = System.getProperty("os_architecture"); + var3 = System.getProperty("java_version"); + if("ppc".equalsIgnoreCase(var14)) { + this.field_92025_p = "" + EnumChatFormatting.BOLD + "Notice!" + EnumChatFormatting.RESET + " PowerPC compatibility will be dropped in Minecraft 1.6"; + this.field_104024_v = "http://tinyurl.com/javappc"; + } else if(var3 != null && var3.startsWith("1.5")) { + this.field_92025_p = "" + EnumChatFormatting.BOLD + "Notice!" + EnumChatFormatting.RESET + " Java 1.5 compatibility will be dropped in Minecraft 1.6"; + this.field_104024_v = "http://tinyurl.com/javappc"; + } + + if(this.field_92025_p.length() == 0) { + (new Thread(new RunnableTitleScreen(this), "1.6 Update Check Thread")).start(); + } + + } + + public void updateScreen() { + ++this.panoramaTimer; + } + + public boolean doesGuiPauseGame() { + return false; + } + + protected void keyTyped(char var1, int var2) { + } + + public void initGui() { + this.viewportTexture = this.mc.renderEngine.allocateAndSetupTexture(new BufferedImage(256, 256, 2)); + Calendar var1 = Calendar.getInstance(); + var1.setTime(new Date()); + if(var1.get(2) + 1 == 11 && var1.get(5) == 9) { + this.splashText = "Happy birthday, ez!"; + } else if(var1.get(2) + 1 == 6 && var1.get(5) == 1) { + this.splashText = "Happy birthday, Notch!"; + } else if(var1.get(2) + 1 == 12 && var1.get(5) == 24) { + this.splashText = "Merry X-mas!"; + } else if(var1.get(2) + 1 == 1 && var1.get(5) == 1) { + this.splashText = "Happy new year!"; + } else if(var1.get(2) + 1 == 10 && var1.get(5) == 31) { + this.splashText = "OOoooOOOoooo! Spooky!"; + } + + StringTranslate var2 = StringTranslate.getInstance(); + int var4 = this.height / 4 + 48; + if(this.mc.isDemo()) { + this.addDemoButtons(var4, 24, var2); + } else { + this.addSingleplayerMultiplayerButtons(var4, 24, var2); + } + + this.func_96137_a(var2, var4, 24); + if(this.mc.hideQuitButton) { + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, var4 + 72, var2.translateKey("menu.options"))); + } else { + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, var4 + 72 + 12, 98, 20, var2.translateKey("menu.options"))); + this.buttonList.add(new GuiButton(4, this.width / 2 + 2, var4 + 72 + 12, 98, 20, var2.translateKey("menu.quit"))); + } + + this.buttonList.add(new GuiButtonLanguage(5, this.width / 2 - 124, var4 + 72 + 12)); + Object var5 = this.field_104025_t; + synchronized(var5) { + this.field_92023_s = this.fontRenderer.getStringWidth(this.field_92025_p); + this.field_92024_r = this.fontRenderer.getStringWidth(field_96138_a); + int var6 = Math.max(this.field_92023_s, this.field_92024_r); + this.field_92022_t = (this.width - var6) / 2; + this.field_92021_u = ((GuiButton)this.buttonList.get(0)).yPosition - 24; + this.field_92020_v = this.field_92022_t + var6; + this.field_92019_w = this.field_92021_u + 24; + } + } + + private void func_96137_a(StringTranslate var1, int var2, int var3) { + if(this.field_96141_q) { + if(!field_96140_r) { + field_96140_r = true; + (new ThreadTitleScreen(this, var1, var2, var3)).start(); + } else if(field_96139_s) { + this.func_98060_b(var1, var2, var3); + } + } + + } + + private void func_98060_b(StringTranslate var1, int var2, int var3) { + this.buttonList.add(new GuiButton(3, this.width / 2 - 100, var2 + var3 * 2, var1.translateKey("menu.online"))); + } + + private void addSingleplayerMultiplayerButtons(int var1, int var2, StringTranslate var3) { + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, var1, var3.translateKey("menu.singleplayer"))); + this.buttonList.add(new GuiButton(2, this.width / 2 - 100, var1 + var2 * 1, var3.translateKey("menu.multiplayer"))); + } + + private void addDemoButtons(int var1, int var2, StringTranslate var3) { + this.buttonList.add(new GuiButton(11, this.width / 2 - 100, var1, var3.translateKey("menu.playdemo"))); + this.buttonList.add(this.buttonResetDemo = new GuiButton(12, this.width / 2 - 100, var1 + var2 * 1, var3.translateKey("menu.resetdemo"))); + ISaveFormat var4 = this.mc.getSaveLoader(); + WorldInfo var5 = var4.getWorldInfo("Demo_World"); + if(var5 == null) { + this.buttonResetDemo.enabled = false; + } + + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 0) { + this.mc.displayGuiScreen(new GuiOptions(this, this.mc.gameSettings)); + } + + if(var1.id == 5) { + this.mc.displayGuiScreen(new GuiLanguage(this, this.mc.gameSettings)); + } + + if(var1.id == 1) { + this.mc.displayGuiScreen(new GuiSelectWorld(this)); + } + + if(var1.id == 2) { + this.mc.displayGuiScreen(new GuiMultiplayer(this)); + } + + if(var1.id == 3) { + this.mc.displayGuiScreen(new GuiScreenOnlineServers(this)); + } + + if(var1.id == 4) { + this.mc.shutdown(); + } + + if(var1.id == 11) { + this.mc.launchIntegratedServer("Demo_World", "Demo_World", DemoWorldServer.demoWorldSettings); + } + + if(var1.id == 12) { + ISaveFormat var2 = this.mc.getSaveLoader(); + WorldInfo var3 = var2.getWorldInfo("Demo_World"); + if(var3 != null) { + GuiYesNo var4 = GuiSelectWorld.getDeleteWorldScreen(this, var3.getWorldName(), 12); + this.mc.displayGuiScreen(var4); + } + } + + } + + public void confirmClicked(boolean var1, int var2) { + if(var1 && var2 == 12) { + ISaveFormat var6 = this.mc.getSaveLoader(); + var6.flushCache(); + var6.deleteWorldDirectory("Demo_World"); + this.mc.displayGuiScreen(this); + } else if(var2 == 13) { + if(var1) { + try { + Class var3 = Class.forName("java.awt.Desktop"); + Object var4 = var3.getMethod("getDesktop", new Class[0]).invoke((Object)null, new Object[0]); + var3.getMethod("browse", new Class[]{URI.class}).invoke(var4, new Object[]{new URI(this.field_104024_v)}); + } catch (Throwable var5) { + var5.printStackTrace(); + } + } + + this.mc.displayGuiScreen(this); + } + + } + + private void drawPanorama(int var1, int var2, float var3) { + Tessellator var4 = Tessellator.instance; + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glPushMatrix(); + GL11.glLoadIdentity(); + GLU.gluPerspective(120.0F, 1.0F, 0.05F, 10.0F); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glPushMatrix(); + GL11.glLoadIdentity(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDepthMask(false); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + byte var5 = 8; + + for(int var6 = 0; var6 < var5 * var5; ++var6) { + GL11.glPushMatrix(); + float var7 = ((float)(var6 % var5) / (float)var5 - 0.5F) / 64.0F; + float var8 = ((float)(var6 / var5) / (float)var5 - 0.5F) / 64.0F; + float var9 = 0.0F; + GL11.glTranslatef(var7, var8, var9); + GL11.glRotatef(MathHelper.sin(((float)this.panoramaTimer + var3) / 400.0F) * 25.0F + 20.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-((float)this.panoramaTimer + var3) * 0.1F, 0.0F, 1.0F, 0.0F); + + for(int var10 = 0; var10 < 6; ++var10) { + GL11.glPushMatrix(); + if(var10 == 1) { + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + } + + if(var10 == 2) { + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + } + + if(var10 == 3) { + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + } + + if(var10 == 4) { + GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F); + } + + if(var10 == 5) { + GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F); + } + + this.mc.renderEngine.bindTexture(titlePanoramaPaths[var10]); + var4.startDrawingQuads(); + var4.setColorRGBA_I(16777215, 255 / (var6 + 1)); + float var11 = 0.0F; + var4.addVertexWithUV(-1.0D, -1.0D, 1.0D, (double)(0.0F + var11), (double)(0.0F + var11)); + var4.addVertexWithUV(1.0D, -1.0D, 1.0D, (double)(1.0F - var11), (double)(0.0F + var11)); + var4.addVertexWithUV(1.0D, 1.0D, 1.0D, (double)(1.0F - var11), (double)(1.0F - var11)); + var4.addVertexWithUV(-1.0D, 1.0D, 1.0D, (double)(0.0F + var11), (double)(1.0F - var11)); + var4.draw(); + GL11.glPopMatrix(); + } + + GL11.glPopMatrix(); + GL11.glColorMask(true, true, true, false); + } + + var4.setTranslation(0.0D, 0.0D, 0.0D); + GL11.glColorMask(true, true, true, true); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glPopMatrix(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glPopMatrix(); + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_DEPTH_TEST); + } + + private void rotateAndBlurSkybox(float var1) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.viewportTexture); + this.mc.renderEngine.resetBoundTexture(); + GL11.glCopyTexSubImage2D(GL11.GL_TEXTURE_2D, 0, 0, 0, 0, 0, 256, 256); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColorMask(true, true, true, false); + Tessellator var2 = Tessellator.instance; + var2.startDrawingQuads(); + byte var3 = 3; + + for(int var4 = 0; var4 < var3; ++var4) { + var2.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F / (float)(var4 + 1)); + int var5 = this.width; + int var6 = this.height; + float var7 = (float)(var4 - var3 / 2) / 256.0F; + var2.addVertexWithUV((double)var5, (double)var6, (double)this.zLevel, (double)(0.0F + var7), 0.0D); + var2.addVertexWithUV((double)var5, 0.0D, (double)this.zLevel, (double)(1.0F + var7), 0.0D); + var2.addVertexWithUV(0.0D, 0.0D, (double)this.zLevel, (double)(1.0F + var7), 1.0D); + var2.addVertexWithUV(0.0D, (double)var6, (double)this.zLevel, (double)(0.0F + var7), 1.0D); + } + + var2.draw(); + GL11.glColorMask(true, true, true, true); + this.mc.renderEngine.resetBoundTexture(); + } + + private void renderSkybox(int var1, int var2, float var3) { + GL11.glViewport(0, 0, 256, 256); + this.drawPanorama(var1, var2, var3); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_TEXTURE_2D); + this.rotateAndBlurSkybox(var3); + this.rotateAndBlurSkybox(var3); + this.rotateAndBlurSkybox(var3); + this.rotateAndBlurSkybox(var3); + this.rotateAndBlurSkybox(var3); + this.rotateAndBlurSkybox(var3); + this.rotateAndBlurSkybox(var3); + this.rotateAndBlurSkybox(var3); + GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); + Tessellator var4 = Tessellator.instance; + var4.startDrawingQuads(); + float var5 = this.width > this.height ? 120.0F / (float)this.width : 120.0F / (float)this.height; + float var6 = (float)this.height * var5 / 256.0F; + float var7 = (float)this.width * var5 / 256.0F; + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + var4.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F); + int var8 = this.width; + int var9 = this.height; + var4.addVertexWithUV(0.0D, (double)var9, (double)this.zLevel, (double)(0.5F - var6), (double)(0.5F + var7)); + var4.addVertexWithUV((double)var8, (double)var9, (double)this.zLevel, (double)(0.5F - var6), (double)(0.5F - var7)); + var4.addVertexWithUV((double)var8, 0.0D, (double)this.zLevel, (double)(0.5F + var6), (double)(0.5F - var7)); + var4.addVertexWithUV(0.0D, 0.0D, (double)this.zLevel, (double)(0.5F + var6), (double)(0.5F + var7)); + var4.draw(); + } + + public void drawScreen(int var1, int var2, float var3) { + this.renderSkybox(var1, var2, var3); + Tessellator var4 = Tessellator.instance; + short var5 = 274; + int var6 = this.width / 2 - var5 / 2; + byte var7 = 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.renderEngine.bindTexture("/title/mclogo.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + if((double)this.updateCounter < 1.0E-4D) { + this.drawTexturedModalRect(var6 + 0, var7 + 0, 0, 0, 99, 44); + this.drawTexturedModalRect(var6 + 99, var7 + 0, 129, 0, 27, 44); + this.drawTexturedModalRect(var6 + 99 + 26, var7 + 0, 126, 0, 3, 44); + this.drawTexturedModalRect(var6 + 99 + 26 + 3, var7 + 0, 99, 0, 26, 44); + this.drawTexturedModalRect(var6 + 155, var7 + 0, 0, 45, 155, 44); + } else { + this.drawTexturedModalRect(var6 + 0, var7 + 0, 0, 0, 155, 44); + this.drawTexturedModalRect(var6 + 155, var7 + 0, 0, 45, 155, 44); + } + + var4.setColorOpaque_I(16777215); + GL11.glPushMatrix(); + GL11.glTranslatef((float)(this.width / 2 + 90), 70.0F, 0.0F); + GL11.glRotatef(-20.0F, 0.0F, 0.0F, 1.0F); + float var8 = 1.8F - MathHelper.abs(MathHelper.sin((float)(Minecraft.getSystemTime() % 1000L) / 1000.0F * (float)Math.PI * 2.0F) * 0.1F); + var8 = var8 * 100.0F / (float)(this.fontRenderer.getStringWidth(this.splashText) + 32); + GL11.glScalef(var8, var8, var8); + this.drawCenteredString(this.fontRenderer, this.splashText, 0, -8, 16776960); + GL11.glPopMatrix(); + String var9 = "Minecraft 1.5.2"; + if(this.mc.isDemo()) { + var9 = var9 + " Demo"; + } + + this.drawString(this.fontRenderer, var9, 2, this.height - 10, 16777215); + String var10 = "Copyright Mojang AB. Do not distribute!"; + this.drawString(this.fontRenderer, var10, this.width - this.fontRenderer.getStringWidth(var10) - 2, this.height - 10, 16777215); + if(this.field_92025_p != null && this.field_92025_p.length() > 0) { + drawRect(this.field_92022_t - 2, this.field_92021_u - 2, this.field_92020_v + 2, this.field_92019_w - 1, 1428160512); + this.drawString(this.fontRenderer, this.field_92025_p, this.field_92022_t, this.field_92021_u, 16777215); + this.drawString(this.fontRenderer, field_96138_a, (this.width - this.field_92024_r) / 2, ((GuiButton)this.buttonList.get(0)).yPosition - 12, 16777215); + } + + super.drawScreen(var1, var2, var3); + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + Object var4 = this.field_104025_t; + synchronized(var4) { + if(this.field_92025_p.length() > 0 && var1 >= this.field_92022_t && var1 <= this.field_92020_v && var2 >= this.field_92021_u && var2 <= this.field_92019_w) { + GuiConfirmOpenLink var5 = new GuiConfirmOpenLink(this, this.field_104024_v, 13, true); + var5.func_92026_h(); + this.mc.displayGuiScreen(var5); + } + + } + } + + static Object func_104004_a(GuiMainMenu var0) { + return var0.field_104025_t; + } + + static String func_104005_a(GuiMainMenu var0, String var1) { + return var0.field_92025_p = var1; + } + + static String func_104013_b(GuiMainMenu var0, String var1) { + return var0.field_104024_v = var1; + } + + static int func_104006_a(GuiMainMenu var0, int var1) { + return var0.field_92023_s = var1; + } + + static String func_104023_b(GuiMainMenu var0) { + return var0.field_92025_p; + } + + static FontRenderer func_104022_c(GuiMainMenu var0) { + return var0.fontRenderer; + } + + static int func_104014_b(GuiMainMenu var0, int var1) { + return var0.field_92024_r = var1; + } + + static FontRenderer func_104007_d(GuiMainMenu var0) { + return var0.fontRenderer; + } + + static int func_104016_e(GuiMainMenu var0) { + return var0.field_92023_s; + } + + static int func_104015_f(GuiMainMenu var0) { + return var0.field_92024_r; + } + + static int func_104008_c(GuiMainMenu var0, int var1) { + return var0.field_92022_t = var1; + } + + static int func_104009_d(GuiMainMenu var0, int var1) { + return var0.field_92021_u = var1; + } + + static List func_104019_g(GuiMainMenu var0) { + return var0.buttonList; + } + + static int func_104011_e(GuiMainMenu var0, int var1) { + return var0.field_92020_v = var1; + } + + static int func_104018_h(GuiMainMenu var0) { + return var0.field_92022_t; + } + + static int func_104012_f(GuiMainMenu var0, int var1) { + return var0.field_92019_w = var1; + } + + static int func_104020_i(GuiMainMenu var0) { + return var0.field_92021_u; + } + + static Minecraft func_98058_a(GuiMainMenu var0) { + return var0.mc; + } + + static void func_98061_a(GuiMainMenu var0, StringTranslate var1, int var2, int var3) { + var0.func_98060_b(var1, var2, var3); + } + + static boolean func_98059_a(boolean var0) { + field_96139_s = var0; + return var0; + } +} diff --git a/src/net/minecraft/src/GuiMemoryErrorScreen.java b/src/net/minecraft/src/GuiMemoryErrorScreen.java new file mode 100644 index 0000000..02d26c8 --- /dev/null +++ b/src/net/minecraft/src/GuiMemoryErrorScreen.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +public class GuiMemoryErrorScreen extends GuiScreen { + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + this.buttonList.clear(); + this.buttonList.add(new GuiSmallButton(0, this.width / 2 - 155, this.height / 4 + 120 + 12, var1.translateKey("gui.toMenu"))); + this.buttonList.add(new GuiSmallButton(1, this.width / 2 - 155 + 160, this.height / 4 + 120 + 12, var1.translateKey("menu.quit"))); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 0) { + this.mc.displayGuiScreen(new GuiMainMenu()); + } else if(var1.id == 1) { + this.mc.shutdown(); + } + + } + + protected void keyTyped(char var1, int var2) { + } + + public void drawScreen(int var1, int var2, float var3) { + 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. If you are playing in a web browser, try", this.width / 2 - 140, this.height / 4 - 60 + 60 + 36, 10526880); + this.drawString(this.fontRenderer, "downloading the game and playing it offline.", this.width / 2 - 140, this.height / 4 - 60 + 60 + 45, 10526880); + this.drawString(this.fontRenderer, "To prevent level corruption, the current game has quit.", this.width / 2 - 140, this.height / 4 - 60 + 60 + 63, 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 + 81, 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 + 90, 10526880); + this.drawString(this.fontRenderer, "Please restart the game if you see this message again.", this.width / 2 - 140, this.height / 4 - 60 + 60 + 99, 10526880); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiMerchant.java b/src/net/minecraft/src/GuiMerchant.java new file mode 100644 index 0000000..c5d8a07 --- /dev/null +++ b/src/net/minecraft/src/GuiMerchant.java @@ -0,0 +1,140 @@ +package net.minecraft.src; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class GuiMerchant extends GuiContainer { + private IMerchant theIMerchant; + private GuiButtonMerchant nextRecipeButtonIndex; + private GuiButtonMerchant previousRecipeButtonIndex; + private int currentRecipeIndex = 0; + private String field_94082_v; + + public GuiMerchant(InventoryPlayer var1, IMerchant var2, World var3, String var4) { + super(new ContainerMerchant(var1, var2, var3)); + this.theIMerchant = var2; + this.field_94082_v = var4 != null && var4.length() >= 1 ? var4 : StatCollector.translateToLocal("entity.Villager.name"); + } + + public void initGui() { + super.initGui(); + int var1 = (this.width - this.xSize) / 2; + int var2 = (this.height - this.ySize) / 2; + this.buttonList.add(this.nextRecipeButtonIndex = new GuiButtonMerchant(1, var1 + 120 + 27, var2 + 24 - 1, true)); + this.buttonList.add(this.previousRecipeButtonIndex = new GuiButtonMerchant(2, var1 + 36 - 19, var2 + 24 - 1, false)); + this.nextRecipeButtonIndex.enabled = false; + this.previousRecipeButtonIndex.enabled = false; + } + + protected void drawGuiContainerForegroundLayer(int var1, int var2) { + this.fontRenderer.drawString(this.field_94082_v, this.xSize / 2 - this.fontRenderer.getStringWidth(this.field_94082_v) / 2, 6, 4210752); + this.fontRenderer.drawString(StatCollector.translateToLocal("container.inventory"), 8, this.ySize - 96 + 2, 4210752); + } + + public void updateScreen() { + super.updateScreen(); + MerchantRecipeList var1 = this.theIMerchant.getRecipes(this.mc.thePlayer); + if(var1 != null) { + this.nextRecipeButtonIndex.enabled = this.currentRecipeIndex < var1.size() - 1; + this.previousRecipeButtonIndex.enabled = this.currentRecipeIndex > 0; + } + + } + + protected void actionPerformed(GuiButton var1) { + boolean var2 = false; + if(var1 == this.nextRecipeButtonIndex) { + ++this.currentRecipeIndex; + var2 = true; + } else if(var1 == this.previousRecipeButtonIndex) { + --this.currentRecipeIndex; + var2 = true; + } + + if(var2) { + ((ContainerMerchant)this.inventorySlots).setCurrentRecipeIndex(this.currentRecipeIndex); + ByteArrayOutputStream var3 = new ByteArrayOutputStream(); + DataOutputStream var4 = new DataOutputStream(var3); + + try { + var4.writeInt(this.currentRecipeIndex); + this.mc.getNetHandler().addToSendQueue(new Packet250CustomPayload("MC|TrSel", var3.toByteArray())); + } catch (Exception var6) { + var6.printStackTrace(); + } + } + + } + + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/trading.png"); + int var4 = (this.width - this.xSize) / 2; + int var5 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var4, var5, 0, 0, this.xSize, this.ySize); + MerchantRecipeList var6 = this.theIMerchant.getRecipes(this.mc.thePlayer); + if(var6 != null && !var6.isEmpty()) { + int var7 = this.currentRecipeIndex; + MerchantRecipe var8 = (MerchantRecipe)var6.get(var7); + if(var8.func_82784_g()) { + this.mc.renderEngine.bindTexture("/gui/trading.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_LIGHTING); + this.drawTexturedModalRect(this.guiLeft + 83, this.guiTop + 21, 212, 0, 28, 21); + this.drawTexturedModalRect(this.guiLeft + 83, this.guiTop + 51, 212, 0, 28, 21); + } + } + + } + + public void drawScreen(int var1, int var2, float var3) { + super.drawScreen(var1, var2, var3); + MerchantRecipeList var4 = this.theIMerchant.getRecipes(this.mc.thePlayer); + if(var4 != null && !var4.isEmpty()) { + int var5 = (this.width - this.xSize) / 2; + int var6 = (this.height - this.ySize) / 2; + int var7 = this.currentRecipeIndex; + MerchantRecipe var8 = (MerchantRecipe)var4.get(var7); + GL11.glPushMatrix(); + ItemStack var9 = var8.getItemToBuy(); + ItemStack var10 = var8.getSecondItemToBuy(); + ItemStack var11 = var8.getItemToSell(); + RenderHelper.enableGUIStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glEnable(GL11.GL_LIGHTING); + itemRenderer.zLevel = 100.0F; + itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, var9, var5 + 36, var6 + 24); + itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, this.mc.renderEngine, var9, var5 + 36, var6 + 24); + if(var10 != null) { + itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, var10, var5 + 62, var6 + 24); + itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, this.mc.renderEngine, var10, var5 + 62, var6 + 24); + } + + itemRenderer.renderItemAndEffectIntoGUI(this.fontRenderer, this.mc.renderEngine, var11, var5 + 120, var6 + 24); + itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, this.mc.renderEngine, var11, var5 + 120, var6 + 24); + itemRenderer.zLevel = 0.0F; + GL11.glDisable(GL11.GL_LIGHTING); + if(this.isPointInRegion(36, 24, 16, 16, var1, var2)) { + this.drawItemStackTooltip(var9, var1, var2); + } else if(var10 != null && this.isPointInRegion(62, 24, 16, 16, var1, var2)) { + this.drawItemStackTooltip(var10, var1, var2); + } else if(this.isPointInRegion(120, 24, 16, 16, var1, var2)) { + this.drawItemStackTooltip(var11, var1, var2); + } + + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + RenderHelper.enableStandardItemLighting(); + } + + } + + public IMerchant getIMerchant() { + return this.theIMerchant; + } +} diff --git a/src/net/minecraft/src/GuiMultiplayer.java b/src/net/minecraft/src/GuiMultiplayer.java new file mode 100644 index 0000000..da3e42c --- /dev/null +++ b/src/net/minecraft/src/GuiMultiplayer.java @@ -0,0 +1,406 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.util.Collections; +import java.util.List; +import org.lwjgl.input.Keyboard; + +public class GuiMultiplayer extends GuiScreen { + private static int threadsPending = 0; + private static Object lock = new Object(); + private GuiScreen parentScreen; + private GuiSlotServer serverSlotContainer; + private ServerList internetServerList; + private int selectedServer = -1; + private GuiButton field_96289_p; + private GuiButton buttonSelect; + private GuiButton buttonDelete; + private boolean deleteClicked = false; + private boolean addClicked = false; + private boolean editClicked = false; + private boolean directClicked = false; + private String lagTooltip = null; + private ServerData theServerData = null; + private LanServerList localNetworkServerList; + private ThreadLanServerFind localServerFindThread; + private int ticksOpened; + private boolean field_74024_A; + private List listofLanServers = Collections.emptyList(); + + public GuiMultiplayer(GuiScreen var1) { + this.parentScreen = var1; + } + + public void initGui() { + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + if(!this.field_74024_A) { + this.field_74024_A = true; + this.internetServerList = new ServerList(this.mc); + this.internetServerList.loadServerList(); + this.localNetworkServerList = new LanServerList(); + + try { + this.localServerFindThread = new ThreadLanServerFind(this.localNetworkServerList); + this.localServerFindThread.start(); + } catch (Exception var2) { + this.mc.getLogAgent().logWarning("Unable to start LAN server detection: " + var2.getMessage()); + } + + this.serverSlotContainer = new GuiSlotServer(this); + } else { + this.serverSlotContainer.func_77207_a(this.width, this.height, 32, this.height - 64); + } + + this.initGuiControls(); + } + + public void initGuiControls() { + StringTranslate var1 = StringTranslate.getInstance(); + this.buttonList.add(this.field_96289_p = new GuiButton(7, this.width / 2 - 154, this.height - 28, 70, 20, var1.translateKey("selectServer.edit"))); + this.buttonList.add(this.buttonDelete = new GuiButton(2, this.width / 2 - 74, this.height - 28, 70, 20, var1.translateKey("selectServer.delete"))); + this.buttonList.add(this.buttonSelect = new GuiButton(1, this.width / 2 - 154, this.height - 52, 100, 20, var1.translateKey("selectServer.select"))); + this.buttonList.add(new GuiButton(4, this.width / 2 - 50, this.height - 52, 100, 20, var1.translateKey("selectServer.direct"))); + this.buttonList.add(new GuiButton(3, this.width / 2 + 4 + 50, this.height - 52, 100, 20, var1.translateKey("selectServer.add"))); + this.buttonList.add(new GuiButton(8, this.width / 2 + 4, this.height - 28, 70, 20, var1.translateKey("selectServer.refresh"))); + this.buttonList.add(new GuiButton(0, this.width / 2 + 4 + 76, this.height - 28, 75, 20, var1.translateKey("gui.cancel"))); + boolean var2 = this.selectedServer >= 0 && this.selectedServer < this.serverSlotContainer.getSize(); + this.buttonSelect.enabled = var2; + this.field_96289_p.enabled = var2; + this.buttonDelete.enabled = var2; + } + + public void updateScreen() { + super.updateScreen(); + ++this.ticksOpened; + if(this.localNetworkServerList.getWasUpdated()) { + this.listofLanServers = this.localNetworkServerList.getLanServers(); + this.localNetworkServerList.setWasNotUpdated(); + } + + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + if(this.localServerFindThread != null) { + this.localServerFindThread.interrupt(); + this.localServerFindThread = null; + } + + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 2) { + String var2 = this.internetServerList.getServerData(this.selectedServer).serverName; + if(var2 != null) { + this.deleteClicked = true; + StringTranslate var3 = StringTranslate.getInstance(); + String var4 = var3.translateKey("selectServer.deleteQuestion"); + String var5 = "\'" + var2 + "\' " + var3.translateKey("selectServer.deleteWarning"); + String var6 = var3.translateKey("selectServer.deleteButton"); + String var7 = var3.translateKey("gui.cancel"); + GuiYesNo var8 = new GuiYesNo(this, var4, var5, var6, var7, this.selectedServer); + this.mc.displayGuiScreen(var8); + } + } else if(var1.id == 1) { + this.joinServer(this.selectedServer); + } else if(var1.id == 4) { + this.directClicked = true; + this.mc.displayGuiScreen(new GuiScreenServerList(this, this.theServerData = new ServerData(StatCollector.translateToLocal("selectServer.defaultName"), ""))); + } else if(var1.id == 3) { + this.addClicked = true; + this.mc.displayGuiScreen(new GuiScreenAddServer(this, this.theServerData = new ServerData(StatCollector.translateToLocal("selectServer.defaultName"), ""))); + } else if(var1.id == 7) { + this.editClicked = true; + ServerData var9 = this.internetServerList.getServerData(this.selectedServer); + this.theServerData = new ServerData(var9.serverName, var9.serverIP); + this.theServerData.setHideAddress(var9.isHidingAddress()); + this.mc.displayGuiScreen(new GuiScreenAddServer(this, this.theServerData)); + } else if(var1.id == 0) { + this.mc.displayGuiScreen(this.parentScreen); + } else if(var1.id == 8) { + this.mc.displayGuiScreen(new GuiMultiplayer(this.parentScreen)); + } else { + this.serverSlotContainer.actionPerformed(var1); + } + + } + } + + public void confirmClicked(boolean var1, int var2) { + if(this.deleteClicked) { + this.deleteClicked = false; + if(var1) { + this.internetServerList.removeServerData(var2); + this.internetServerList.saveServerList(); + this.selectedServer = -1; + } + + this.mc.displayGuiScreen(this); + } else if(this.directClicked) { + this.directClicked = false; + if(var1) { + this.connectToServer(this.theServerData); + } else { + this.mc.displayGuiScreen(this); + } + } else if(this.addClicked) { + this.addClicked = false; + if(var1) { + this.internetServerList.addServerData(this.theServerData); + this.internetServerList.saveServerList(); + this.selectedServer = -1; + } + + this.mc.displayGuiScreen(this); + } else if(this.editClicked) { + this.editClicked = false; + if(var1) { + ServerData var3 = this.internetServerList.getServerData(this.selectedServer); + var3.serverName = this.theServerData.serverName; + var3.serverIP = this.theServerData.serverIP; + var3.setHideAddress(this.theServerData.isHidingAddress()); + this.internetServerList.saveServerList(); + } + + this.mc.displayGuiScreen(this); + } + + } + + protected void keyTyped(char var1, int var2) { + int var3 = this.selectedServer; + if(var2 == 59) { + this.mc.gameSettings.hideServerAddress = !this.mc.gameSettings.hideServerAddress; + this.mc.gameSettings.saveOptions(); + } else { + if(isShiftKeyDown() && var2 == 200) { + if(var3 > 0 && var3 < this.internetServerList.countServers()) { + this.internetServerList.swapServers(var3, var3 - 1); + --this.selectedServer; + if(var3 < this.internetServerList.countServers() - 1) { + this.serverSlotContainer.func_77208_b(-this.serverSlotContainer.slotHeight); + } + } + } else if(isShiftKeyDown() && var2 == 208) { + if(var3 < this.internetServerList.countServers() - 1) { + this.internetServerList.swapServers(var3, var3 + 1); + ++this.selectedServer; + if(var3 > 0) { + this.serverSlotContainer.func_77208_b(this.serverSlotContainer.slotHeight); + } + } + } else if(var1 == 13) { + this.actionPerformed((GuiButton)this.buttonList.get(2)); + } else { + super.keyTyped(var1, var2); + } + + } + } + + public void drawScreen(int var1, int var2, float var3) { + this.lagTooltip = null; + StringTranslate var4 = StringTranslate.getInstance(); + this.drawDefaultBackground(); + this.serverSlotContainer.drawScreen(var1, var2, var3); + this.drawCenteredString(this.fontRenderer, var4.translateKey("multiplayer.title"), this.width / 2, 20, 16777215); + super.drawScreen(var1, var2, var3); + if(this.lagTooltip != null) { + this.func_74007_a(this.lagTooltip, var1, var2); + } + + } + + private void joinServer(int var1) { + if(var1 < this.internetServerList.countServers()) { + this.connectToServer(this.internetServerList.getServerData(var1)); + } else { + var1 -= this.internetServerList.countServers(); + if(var1 < this.listofLanServers.size()) { + LanServer var2 = (LanServer)this.listofLanServers.get(var1); + this.connectToServer(new ServerData(var2.getServerMotd(), var2.getServerIpPort())); + } + + } + } + + private void connectToServer(ServerData var1) { + this.mc.displayGuiScreen(new GuiConnecting(this, this.mc, var1)); + } + + private static void func_74017_b(ServerData var0) throws IOException { + ServerAddress var1 = ServerAddress.func_78860_a(var0.serverIP); + Socket var2 = null; + DataInputStream var3 = null; + DataOutputStream var4 = null; + + try { + var2 = new Socket(); + var2.setSoTimeout(3000); + var2.setTcpNoDelay(true); + var2.setTrafficClass(18); + var2.connect(new InetSocketAddress(var1.getIP(), var1.getPort()), 3000); + var3 = new DataInputStream(var2.getInputStream()); + var4 = new DataOutputStream(var2.getOutputStream()); + var4.write(254); + var4.write(1); + if(var3.read() != 255) { + throw new IOException("Bad message"); + } + + String var5 = Packet.readString(var3, 256); + char[] var6 = var5.toCharArray(); + + for(int var7 = 0; var7 < var6.length; ++var7) { + if(var6[var7] != 167 && var6[var7] != 0 && ChatAllowedCharacters.allowedCharacters.indexOf(var6[var7]) < 0) { + var6[var7] = 63; + } + } + + var5 = new String(var6); + int var8; + int var9; + String[] var26; + if(var5.startsWith("\u00a7") && var5.length() > 1) { + var26 = var5.substring(1).split("\u0000"); + if(MathHelper.parseIntWithDefault(var26[0], 0) == 1) { + var0.serverMOTD = var26[3]; + var0.field_82821_f = MathHelper.parseIntWithDefault(var26[1], var0.field_82821_f); + var0.gameVersion = var26[2]; + var8 = MathHelper.parseIntWithDefault(var26[4], 0); + var9 = MathHelper.parseIntWithDefault(var26[5], 0); + if(var8 >= 0 && var9 >= 0) { + var0.populationInfo = EnumChatFormatting.GRAY + "" + var8 + "" + EnumChatFormatting.DARK_GRAY + "/" + EnumChatFormatting.GRAY + var9; + } else { + var0.populationInfo = "" + EnumChatFormatting.DARK_GRAY + "???"; + } + } else { + var0.gameVersion = "???"; + var0.serverMOTD = "" + EnumChatFormatting.DARK_GRAY + "???"; + var0.field_82821_f = 62; + var0.populationInfo = "" + EnumChatFormatting.DARK_GRAY + "???"; + } + } else { + var26 = var5.split("\u00a7"); + var5 = var26[0]; + var8 = -1; + var9 = -1; + + try { + var8 = Integer.parseInt(var26[1]); + var9 = Integer.parseInt(var26[2]); + } catch (Exception var24) { + } + + var0.serverMOTD = EnumChatFormatting.GRAY + var5; + if(var8 >= 0 && var9 > 0) { + var0.populationInfo = EnumChatFormatting.GRAY + "" + var8 + "" + EnumChatFormatting.DARK_GRAY + "/" + EnumChatFormatting.GRAY + var9; + } else { + var0.populationInfo = "" + EnumChatFormatting.DARK_GRAY + "???"; + } + + var0.gameVersion = "1.3"; + var0.field_82821_f = 60; + } + } finally { + try { + if(var3 != null) { + var3.close(); + } + } catch (Throwable var23) { + } + + try { + if(var4 != null) { + var4.close(); + } + } catch (Throwable var22) { + } + + try { + if(var2 != null) { + var2.close(); + } + } catch (Throwable var21) { + } + + } + + } + + protected void func_74007_a(String var1, int var2, int var3) { + if(var1 != null) { + int var4 = var2 + 12; + int var5 = var3 - 12; + int var6 = this.fontRenderer.getStringWidth(var1); + this.drawGradientRect(var4 - 3, var5 - 3, var4 + var6 + 3, var5 + 8 + 3, -1073741824, -1073741824); + this.fontRenderer.drawStringWithShadow(var1, var4, var5, -1); + } + } + + static ServerList getInternetServerList(GuiMultiplayer var0) { + return var0.internetServerList; + } + + static List getListOfLanServers(GuiMultiplayer var0) { + return var0.listofLanServers; + } + + static int getSelectedServer(GuiMultiplayer var0) { + return var0.selectedServer; + } + + static int getAndSetSelectedServer(GuiMultiplayer var0, int var1) { + return var0.selectedServer = var1; + } + + static GuiButton getButtonSelect(GuiMultiplayer var0) { + return var0.buttonSelect; + } + + static GuiButton getButtonEdit(GuiMultiplayer var0) { + return var0.field_96289_p; + } + + static GuiButton getButtonDelete(GuiMultiplayer var0) { + return var0.buttonDelete; + } + + static void func_74008_b(GuiMultiplayer var0, int var1) { + var0.joinServer(var1); + } + + static int getTicksOpened(GuiMultiplayer var0) { + return var0.ticksOpened; + } + + static Object getLock() { + return lock; + } + + static int getThreadsPending() { + return threadsPending; + } + + static int increaseThreadsPending() { + return threadsPending++; + } + + static void func_82291_a(ServerData var0) throws IOException { + func_74017_b(var0); + } + + static int decreaseThreadsPending() { + return threadsPending--; + } + + static String getAndSetLagTooltip(GuiMultiplayer var0, String var1) { + return var0.lagTooltip = var1; + } +} diff --git a/src/net/minecraft/src/GuiNewChat.java b/src/net/minecraft/src/GuiNewChat.java new file mode 100644 index 0000000..0a86055 --- /dev/null +++ b/src/net/minecraft/src/GuiNewChat.java @@ -0,0 +1,282 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +public class GuiNewChat extends Gui { + private final Minecraft mc; + private final List sentMessages = new ArrayList(); + private final List chatLines = new ArrayList(); + private final List field_96134_d = new ArrayList(); + private int field_73768_d = 0; + private boolean field_73769_e = false; + + public GuiNewChat(Minecraft var1) { + this.mc = var1; + } + + public void drawChat(int var1) { + if(this.mc.gameSettings.chatVisibility != 2) { + int var2 = this.func_96127_i(); + boolean var3 = false; + int var4 = 0; + int var5 = this.field_96134_d.size(); + float var6 = this.mc.gameSettings.chatOpacity * 0.9F + 0.1F; + if(var5 > 0) { + if(this.getChatOpen()) { + var3 = true; + } + + float var7 = this.func_96131_h(); + int var8 = MathHelper.ceiling_float_int((float)this.func_96126_f() / var7); + GL11.glPushMatrix(); + GL11.glTranslatef(2.0F, 20.0F, 0.0F); + GL11.glScalef(var7, var7, 1.0F); + + int var9; + int var11; + int var14; + for(var9 = 0; var9 + this.field_73768_d < this.field_96134_d.size() && var9 < var2; ++var9) { + ChatLine var10 = (ChatLine)this.field_96134_d.get(var9 + this.field_73768_d); + if(var10 != null) { + var11 = var1 - var10.getUpdatedCounter(); + if(var11 < 200 || var3) { + double var12 = (double)var11 / 200.0D; + var12 = 1.0D - var12; + var12 *= 10.0D; + if(var12 < 0.0D) { + var12 = 0.0D; + } + + if(var12 > 1.0D) { + var12 = 1.0D; + } + + var12 *= var12; + var14 = (int)(255.0D * var12); + if(var3) { + var14 = 255; + } + + var14 = (int)((float)var14 * var6); + ++var4; + if(var14 > 3) { + byte var15 = 0; + int var16 = -var9 * 9; + drawRect(var15, var16 - 9, var15 + var8 + 4, var16, var14 / 2 << 24); + GL11.glEnable(GL11.GL_BLEND); + String var17 = var10.getChatLineString(); + if(!this.mc.gameSettings.chatColours) { + var17 = StringUtils.stripControlCodes(var17); + } + + this.mc.fontRenderer.drawStringWithShadow(var17, var15, var16 - 8, 16777215 + (var14 << 24)); + } + } + } + } + + if(var3) { + var9 = this.mc.fontRenderer.FONT_HEIGHT; + GL11.glTranslatef(-3.0F, 0.0F, 0.0F); + int var18 = var5 * var9 + var5; + var11 = var4 * var9 + var4; + int var19 = this.field_73768_d * var11 / var5; + int var13 = var11 * var11 / var18; + if(var18 != var11) { + var14 = var19 > 0 ? 170 : 96; + int var20 = this.field_73769_e ? 13382451 : 3355562; + drawRect(0, -var19, 2, -var19 - var13, var20 + (var14 << 24)); + drawRect(2, -var19, 1, -var19 - var13, 13421772 + (var14 << 24)); + } + } + + GL11.glPopMatrix(); + } + } + } + + public void clearChatMessages() { + this.field_96134_d.clear(); + this.chatLines.clear(); + this.sentMessages.clear(); + } + + public void printChatMessage(String var1) { + this.printChatMessageWithOptionalDeletion(var1, 0); + } + + public void printChatMessageWithOptionalDeletion(String var1, int var2) { + this.func_96129_a(var1, var2, this.mc.ingameGUI.getUpdateCounter(), false); + this.mc.getLogAgent().logInfo("[CHAT] " + var1); + } + + private void func_96129_a(String var1, int var2, int var3, boolean var4) { + boolean var5 = this.getChatOpen(); + boolean var6 = true; + if(var2 != 0) { + this.deleteChatLine(var2); + } + + Iterator var7 = this.mc.fontRenderer.listFormattedStringToWidth(var1, MathHelper.floor_float((float)this.func_96126_f() / this.func_96131_h())).iterator(); + + while(var7.hasNext()) { + String var8 = (String)var7.next(); + if(var5 && this.field_73768_d > 0) { + this.field_73769_e = true; + this.scroll(1); + } + + if(!var6) { + var8 = " " + var8; + } + + var6 = false; + this.field_96134_d.add(0, new ChatLine(var3, var8, var2)); + } + + while(this.field_96134_d.size() > 100) { + this.field_96134_d.remove(this.field_96134_d.size() - 1); + } + + if(!var4) { + this.chatLines.add(0, new ChatLine(var3, var1.trim(), var2)); + + while(this.chatLines.size() > 100) { + this.chatLines.remove(this.chatLines.size() - 1); + } + } + + } + + public void func_96132_b() { + this.field_96134_d.clear(); + this.resetScroll(); + + for(int var1 = this.chatLines.size() - 1; var1 >= 0; --var1) { + ChatLine var2 = (ChatLine)this.chatLines.get(var1); + this.func_96129_a(var2.getChatLineString(), var2.getChatLineID(), var2.getUpdatedCounter(), true); + } + + } + + public List getSentMessages() { + return this.sentMessages; + } + + public void addToSentMessages(String var1) { + if(this.sentMessages.isEmpty() || !((String)this.sentMessages.get(this.sentMessages.size() - 1)).equals(var1)) { + this.sentMessages.add(var1); + } + + } + + public void resetScroll() { + this.field_73768_d = 0; + this.field_73769_e = false; + } + + public void scroll(int var1) { + this.field_73768_d += var1; + int var2 = this.field_96134_d.size(); + if(this.field_73768_d > var2 - this.func_96127_i()) { + this.field_73768_d = var2 - this.func_96127_i(); + } + + if(this.field_73768_d <= 0) { + this.field_73768_d = 0; + this.field_73769_e = false; + } + + } + + public ChatClickData func_73766_a(int var1, int var2) { + if(!this.getChatOpen()) { + return null; + } else { + ScaledResolution var3 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight); + int var4 = var3.getScaleFactor(); + float var5 = this.func_96131_h(); + int var6 = var1 / var4 - 3; + int var7 = var2 / var4 - 25; + var6 = MathHelper.floor_float((float)var6 / var5); + var7 = MathHelper.floor_float((float)var7 / var5); + if(var6 >= 0 && var7 >= 0) { + int var8 = Math.min(this.func_96127_i(), this.field_96134_d.size()); + if(var6 <= MathHelper.floor_float((float)this.func_96126_f() / this.func_96131_h()) && var7 < this.mc.fontRenderer.FONT_HEIGHT * var8 + var8) { + int var9 = var7 / (this.mc.fontRenderer.FONT_HEIGHT + 1) + this.field_73768_d; + return new ChatClickData(this.mc.fontRenderer, (ChatLine)this.field_96134_d.get(var9), var6, var7 - (var9 - this.field_73768_d) * this.mc.fontRenderer.FONT_HEIGHT + var9); + } else { + return null; + } + } else { + return null; + } + } + } + + public void addTranslatedMessage(String var1, Object... var2) { + this.printChatMessage(StringTranslate.getInstance().translateKeyFormat(var1, var2)); + } + + public boolean getChatOpen() { + return this.mc.currentScreen instanceof GuiChat; + } + + public void deleteChatLine(int var1) { + Iterator var2 = this.field_96134_d.iterator(); + + ChatLine var3; + do { + if(!var2.hasNext()) { + var2 = this.chatLines.iterator(); + + do { + if(!var2.hasNext()) { + return; + } + + var3 = (ChatLine)var2.next(); + } while(var3.getChatLineID() != var1); + + var2.remove(); + return; + } + + var3 = (ChatLine)var2.next(); + } while(var3.getChatLineID() != var1); + + var2.remove(); + } + + public int func_96126_f() { + return func_96128_a(this.mc.gameSettings.chatWidth); + } + + public int func_96133_g() { + return func_96130_b(this.getChatOpen() ? this.mc.gameSettings.chatHeightFocused : this.mc.gameSettings.chatHeightUnfocused); + } + + public float func_96131_h() { + return this.mc.gameSettings.chatScale; + } + + public static final int func_96128_a(float var0) { + short var1 = 320; + byte var2 = 40; + return MathHelper.floor_float(var0 * (float)(var1 - var2) + (float)var2); + } + + public static final int func_96130_b(float var0) { + short var1 = 180; + byte var2 = 20; + return MathHelper.floor_float(var0 * (float)(var1 - var2) + (float)var2); + } + + public int func_96127_i() { + return this.func_96133_g() / 9; + } +} diff --git a/src/net/minecraft/src/GuiOptions.java b/src/net/minecraft/src/GuiOptions.java new file mode 100644 index 0000000..a45d4b8 --- /dev/null +++ b/src/net/minecraft/src/GuiOptions.java @@ -0,0 +1,97 @@ +package net.minecraft.src; + +public class GuiOptions extends GuiScreen { + private static final EnumOptions[] relevantOptions = new EnumOptions[]{EnumOptions.MUSIC, EnumOptions.SOUND, EnumOptions.INVERT_MOUSE, EnumOptions.SENSITIVITY, EnumOptions.FOV, EnumOptions.DIFFICULTY, EnumOptions.TOUCHSCREEN}; + private final GuiScreen parentScreen; + private final GameSettings options; + protected String screenTitle = "Options"; + + public GuiOptions(GuiScreen var1, GameSettings var2) { + this.parentScreen = var1; + this.options = var2; + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + int var2 = 0; + this.screenTitle = var1.translateKey("options.title"); + EnumOptions[] var3 = relevantOptions; + int var4 = var3.length; + + for(int var5 = 0; var5 < var4; ++var5) { + EnumOptions var6 = var3[var5]; + if(var6.getEnumFloat()) { + this.buttonList.add(new GuiSlider(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 - 12 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6), this.options.getOptionFloatValue(var6))); + } else { + GuiSmallButton var7 = new GuiSmallButton(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 - 12 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6)); + if(var6 == EnumOptions.DIFFICULTY && this.mc.theWorld != null && this.mc.theWorld.getWorldInfo().isHardcoreModeEnabled()) { + var7.enabled = false; + var7.displayString = StatCollector.translateToLocal("options.difficulty") + ": " + StatCollector.translateToLocal("options.difficulty.hardcore"); + } + + this.buttonList.add(var7); + } + + ++var2; + } + + this.buttonList.add(new GuiButton(101, this.width / 2 - 152, this.height / 6 + 96 - 6, 150, 20, var1.translateKey("options.video"))); + this.buttonList.add(new GuiButton(100, this.width / 2 + 2, this.height / 6 + 96 - 6, 150, 20, var1.translateKey("options.controls"))); + this.buttonList.add(new GuiButton(102, this.width / 2 - 152, this.height / 6 + 120 - 6, 150, 20, var1.translateKey("options.language"))); + this.buttonList.add(new GuiButton(103, this.width / 2 + 2, this.height / 6 + 120 - 6, 150, 20, var1.translateKey("options.multiplayer.title"))); + this.buttonList.add(new GuiButton(105, this.width / 2 - 152, this.height / 6 + 144 - 6, 150, 20, var1.translateKey("options.texture.pack"))); + this.buttonList.add(new GuiButton(104, this.width / 2 + 2, this.height / 6 + 144 - 6, 150, 20, var1.translateKey("options.snooper.view"))); + this.buttonList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, var1.translateKey("gui.done"))); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id < 100 && var1 instanceof GuiSmallButton) { + this.options.setOptionValue(((GuiSmallButton)var1).returnEnumOptions(), 1); + var1.displayString = this.options.getKeyBinding(EnumOptions.getEnumOptions(var1.id)); + } + + if(var1.id == 101) { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiVideoSettings(this, this.options)); + } + + if(var1.id == 100) { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiControls(this, this.options)); + } + + if(var1.id == 102) { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiLanguage(this, this.options)); + } + + if(var1.id == 103) { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new ScreenChatOptions(this, this.options)); + } + + if(var1.id == 104) { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiSnooper(this, this.options)); + } + + if(var1.id == 200) { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(this.parentScreen); + } + + if(var1.id == 105) { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiTexturePacks(this, this.options)); + } + + } + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 15, 16777215); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiParticle.java b/src/net/minecraft/src/GuiParticle.java new file mode 100644 index 0000000..fa14742 --- /dev/null +++ b/src/net/minecraft/src/GuiParticle.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +public class GuiParticle extends Gui { + private List particles = new ArrayList(); + private Minecraft mc; + + public GuiParticle(Minecraft var1) { + this.mc = var1; + } + + public void update() { + for(int var1 = 0; var1 < this.particles.size(); ++var1) { + Particle var2 = (Particle)this.particles.get(var1); + var2.preUpdate(); + var2.update(this); + if(var2.isDead) { + this.particles.remove(var1--); + } + } + + } + + public void draw(float var1) { + this.mc.renderEngine.bindTexture("/gui/particles.png"); + + for(int var2 = 0; var2 < this.particles.size(); ++var2) { + Particle var3 = (Particle)this.particles.get(var2); + int var4 = (int)(var3.prevPosX + (var3.posX - var3.prevPosX) * (double)var1 - 4.0D); + int var5 = (int)(var3.prevPosY + (var3.posY - var3.prevPosY) * (double)var1 - 4.0D); + float var6 = (float)(var3.prevTintAlpha + (var3.tintAlpha - var3.prevTintAlpha) * (double)var1); + float var7 = (float)(var3.prevTintRed + (var3.tintRed - var3.prevTintRed) * (double)var1); + float var8 = (float)(var3.prevTintGreen + (var3.tintGreen - var3.prevTintGreen) * (double)var1); + float var9 = (float)(var3.prevTintBlue + (var3.tintBlue - var3.prevTintBlue) * (double)var1); + GL11.glColor4f(var7, var8, var9, var6); + this.drawTexturedModalRect(var4, var5, 40, 0, 8, 8); + } + + } +} diff --git a/src/net/minecraft/src/GuiPlayerInfo.java b/src/net/minecraft/src/GuiPlayerInfo.java new file mode 100644 index 0000000..7ce648e --- /dev/null +++ b/src/net/minecraft/src/GuiPlayerInfo.java @@ -0,0 +1,12 @@ +package net.minecraft.src; + +public class GuiPlayerInfo { + public final String name; + private final String nameinLowerCase; + public int responseTime; + + public GuiPlayerInfo(String var1) { + this.name = var1; + this.nameinLowerCase = var1.toLowerCase(); + } +} diff --git a/src/net/minecraft/src/GuiProgress.java b/src/net/minecraft/src/GuiProgress.java new file mode 100644 index 0000000..f7ee8e5 --- /dev/null +++ b/src/net/minecraft/src/GuiProgress.java @@ -0,0 +1,41 @@ +package net.minecraft.src; + +public class GuiProgress extends GuiScreen implements IProgressUpdate { + private String progressMessage = ""; + private String workingMessage = ""; + private int currentProgress = 0; + private boolean noMoreProgress; + + public void displayProgressMessage(String var1) { + this.resetProgressAndMessage(var1); + } + + public void resetProgressAndMessage(String var1) { + this.progressMessage = var1; + this.resetProgresAndWorkingMessage("Working..."); + } + + public void resetProgresAndWorkingMessage(String var1) { + this.workingMessage = var1; + this.setLoadingProgress(0); + } + + public void setLoadingProgress(int var1) { + this.currentProgress = var1; + } + + public void onNoMoreProgress() { + this.noMoreProgress = true; + } + + public void drawScreen(int var1, int var2, float var3) { + if(this.noMoreProgress) { + this.mc.displayGuiScreen((GuiScreen)null); + } else { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.progressMessage, this.width / 2, 70, 16777215); + this.drawCenteredString(this.fontRenderer, this.workingMessage + " " + this.currentProgress + "%", this.width / 2, 90, 16777215); + super.drawScreen(var1, var2, var3); + } + } +} diff --git a/src/net/minecraft/src/GuiRenameWorld.java b/src/net/minecraft/src/GuiRenameWorld.java new file mode 100644 index 0000000..df12c9c --- /dev/null +++ b/src/net/minecraft/src/GuiRenameWorld.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +import org.lwjgl.input.Keyboard; + +public class GuiRenameWorld extends GuiScreen { + private GuiScreen parentGuiScreen; + private GuiTextField theGuiTextField; + private final String worldName; + + public GuiRenameWorld(GuiScreen var1, String var2) { + this.parentGuiScreen = var1; + this.worldName = var2; + } + + public void updateScreen() { + this.theGuiTextField.updateCursorCounter(); + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + 12, var1.translateKey("selectWorld.renameButton"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 120 + 12, var1.translateKey("gui.cancel"))); + ISaveFormat var2 = this.mc.getSaveLoader(); + WorldInfo var3 = var2.getWorldInfo(this.worldName); + String var4 = var3.getWorldName(); + this.theGuiTextField = new GuiTextField(this.fontRenderer, this.width / 2 - 100, 60, 200, 20); + this.theGuiTextField.setFocused(true); + this.theGuiTextField.setText(var4); + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 1) { + this.mc.displayGuiScreen(this.parentGuiScreen); + } else if(var1.id == 0) { + ISaveFormat var2 = this.mc.getSaveLoader(); + var2.renameWorld(this.worldName, this.theGuiTextField.getText().trim()); + this.mc.displayGuiScreen(this.parentGuiScreen); + } + + } + } + + protected void keyTyped(char var1, int var2) { + this.theGuiTextField.textboxKeyTyped(var1, var2); + ((GuiButton)this.buttonList.get(0)).enabled = this.theGuiTextField.getText().trim().length() > 0; + if(var1 == 13) { + this.actionPerformed((GuiButton)this.buttonList.get(0)); + } + + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + this.theGuiTextField.mouseClicked(var1, var2, var3); + } + + public void drawScreen(int var1, int var2, float var3) { + StringTranslate var4 = StringTranslate.getInstance(); + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, var4.translateKey("selectWorld.renameTitle"), this.width / 2, this.height / 4 - 60 + 20, 16777215); + this.drawString(this.fontRenderer, var4.translateKey("selectWorld.enterName"), this.width / 2 - 100, 47, 10526880); + this.theGuiTextField.drawTextBox(); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiRepair.java b/src/net/minecraft/src/GuiRepair.java new file mode 100644 index 0000000..9b932d3 --- /dev/null +++ b/src/net/minecraft/src/GuiRepair.java @@ -0,0 +1,127 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.client.Minecraft; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +public class GuiRepair extends GuiContainer implements ICrafting { + private ContainerRepair repairContainer; + private GuiTextField itemNameField; + private InventoryPlayer field_82325_q; + + public GuiRepair(InventoryPlayer var1, World var2, int var3, int var4, int var5) { + super(new ContainerRepair(var1, var2, var3, var4, var5, Minecraft.getMinecraft().thePlayer)); + this.field_82325_q = var1; + this.repairContainer = (ContainerRepair)this.inventorySlots; + } + + public void initGui() { + super.initGui(); + Keyboard.enableRepeatEvents(true); + int var1 = (this.width - this.xSize) / 2; + int var2 = (this.height - this.ySize) / 2; + this.itemNameField = new GuiTextField(this.fontRenderer, var1 + 62, var2 + 24, 103, 12); + this.itemNameField.setTextColor(-1); + this.itemNameField.setDisabledTextColour(-1); + this.itemNameField.setEnableBackgroundDrawing(false); + this.itemNameField.setMaxStringLength(30); + this.inventorySlots.removeCraftingFromCrafters(this); + this.inventorySlots.addCraftingToCrafters(this); + } + + public void onGuiClosed() { + super.onGuiClosed(); + Keyboard.enableRepeatEvents(false); + this.inventorySlots.removeCraftingFromCrafters(this); + } + + protected void drawGuiContainerForegroundLayer(int var1, int var2) { + GL11.glDisable(GL11.GL_LIGHTING); + this.fontRenderer.drawString(StatCollector.translateToLocal("container.repair"), 60, 6, 4210752); + if(this.repairContainer.maximumCost > 0) { + int var3 = 8453920; + boolean var4 = true; + String var5 = StatCollector.translateToLocalFormatted("container.repair.cost", new Object[]{Integer.valueOf(this.repairContainer.maximumCost)}); + if(this.repairContainer.maximumCost >= 40 && !this.mc.thePlayer.capabilities.isCreativeMode) { + var5 = StatCollector.translateToLocal("container.repair.expensive"); + var3 = 16736352; + } else if(!this.repairContainer.getSlot(2).getHasStack()) { + var4 = false; + } else if(!this.repairContainer.getSlot(2).canTakeStack(this.field_82325_q.player)) { + var3 = 16736352; + } + + if(var4) { + int var6 = -16777216 | (var3 & 16579836) >> 2 | var3 & -16777216; + int var7 = this.xSize - 8 - this.fontRenderer.getStringWidth(var5); + byte var8 = 67; + if(this.fontRenderer.getUnicodeFlag()) { + drawRect(var7 - 3, var8 - 2, this.xSize - 7, var8 + 10, -16777216); + drawRect(var7 - 2, var8 - 1, this.xSize - 8, var8 + 9, -12895429); + } else { + this.fontRenderer.drawString(var5, var7, var8 + 1, var6); + this.fontRenderer.drawString(var5, var7 + 1, var8, var6); + this.fontRenderer.drawString(var5, var7 + 1, var8 + 1, var6); + } + + this.fontRenderer.drawString(var5, var7, var8, var3); + } + } + + GL11.glEnable(GL11.GL_LIGHTING); + } + + protected void keyTyped(char var1, int var2) { + if(this.itemNameField.textboxKeyTyped(var1, var2)) { + this.repairContainer.updateItemName(this.itemNameField.getText()); + this.mc.thePlayer.sendQueue.addToSendQueue(new Packet250CustomPayload("MC|ItemName", this.itemNameField.getText().getBytes())); + } else { + super.keyTyped(var1, var2); + } + + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + this.itemNameField.mouseClicked(var1, var2, var3); + } + + public void drawScreen(int var1, int var2, float var3) { + super.drawScreen(var1, var2, var3); + GL11.glDisable(GL11.GL_LIGHTING); + this.itemNameField.drawTextBox(); + } + + protected void drawGuiContainerBackgroundLayer(float var1, int var2, int var3) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/repair.png"); + int var4 = (this.width - this.xSize) / 2; + int var5 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var4, var5, 0, 0, this.xSize, this.ySize); + this.drawTexturedModalRect(var4 + 59, var5 + 20, 0, this.ySize + (this.repairContainer.getSlot(0).getHasStack() ? 0 : 16), 110, 16); + if((this.repairContainer.getSlot(0).getHasStack() || this.repairContainer.getSlot(1).getHasStack()) && !this.repairContainer.getSlot(2).getHasStack()) { + this.drawTexturedModalRect(var4 + 99, var5 + 45, this.xSize, 0, 28, 21); + } + + } + + public void sendContainerAndContentsToPlayer(Container var1, List var2) { + this.sendSlotContents(var1, 0, var1.getSlot(0).getStack()); + } + + public void sendSlotContents(Container var1, int var2, ItemStack var3) { + if(var2 == 0) { + this.itemNameField.setText(var3 == null ? "" : var3.getDisplayName()); + this.itemNameField.setEnabled(var3 != null); + if(var3 != null) { + this.repairContainer.updateItemName(this.itemNameField.getText()); + this.mc.thePlayer.sendQueue.addToSendQueue(new Packet250CustomPayload("MC|ItemName", this.itemNameField.getText().getBytes())); + } + } + + } + + public void sendProgressBarUpdate(Container var1, int var2, int var3) { + } +} diff --git a/src/net/minecraft/src/GuiScreen.java b/src/net/minecraft/src/GuiScreen.java new file mode 100644 index 0000000..5a8b0cd --- /dev/null +++ b/src/net/minecraft/src/GuiScreen.java @@ -0,0 +1,211 @@ +package net.minecraft.src; + +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.util.ArrayList; +import java.util.List; +import net.minecraft.client.Minecraft; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +public class GuiScreen extends Gui { + public static final boolean isMacOs = Minecraft.getOs() == EnumOS.MACOS; + protected Minecraft mc; + public int width; + public int height; + protected List buttonList = new ArrayList(); + public boolean allowUserInput = false; + protected FontRenderer fontRenderer; + public GuiParticle guiParticles; + private GuiButton selectedButton = null; + private int eventButton = 0; + private long field_85043_c = 0L; + private int field_92018_d = 0; + + public void drawScreen(int var1, int var2, float var3) { + for(int var4 = 0; var4 < this.buttonList.size(); ++var4) { + GuiButton var5 = (GuiButton)this.buttonList.get(var4); + var5.drawButton(this.mc, var1, var2); + } + + } + + protected void keyTyped(char var1, int var2) { + if(var2 == 1) { + this.mc.displayGuiScreen((GuiScreen)null); + this.mc.setIngameFocus(); + } + + } + + public static String getClipboardString() { + try { + Transferable var0 = Toolkit.getDefaultToolkit().getSystemClipboard().getContents((Object)null); + if(var0 != null && var0.isDataFlavorSupported(DataFlavor.stringFlavor)) { + return (String)var0.getTransferData(DataFlavor.stringFlavor); + } + } catch (Exception var1) { + } + + return ""; + } + + public static void setClipboardString(String var0) { + try { + StringSelection var1 = new StringSelection(var0); + Toolkit.getDefaultToolkit().getSystemClipboard().setContents(var1, (ClipboardOwner)null); + } catch (Exception var2) { + } + + } + + protected void mouseClicked(int var1, int var2, int var3) { + if(var3 == 0) { + for(int var4 = 0; var4 < this.buttonList.size(); ++var4) { + GuiButton var5 = (GuiButton)this.buttonList.get(var4); + if(var5.mousePressed(this.mc, var1, var2)) { + this.selectedButton = var5; + this.mc.sndManager.playSoundFX("random.click", 1.0F, 1.0F); + this.actionPerformed(var5); + } + } + } + + } + + protected void mouseMovedOrUp(int var1, int var2, int var3) { + if(this.selectedButton != null && var3 == 0) { + this.selectedButton.mouseReleased(var1, var2); + this.selectedButton = null; + } + + } + + protected void func_85041_a(int var1, int var2, int var3, long var4) { + } + + protected void actionPerformed(GuiButton var1) { + } + + public void setWorldAndResolution(Minecraft var1, int var2, int var3) { + this.guiParticles = new GuiParticle(var1); + this.mc = var1; + this.fontRenderer = var1.fontRenderer; + this.width = var2; + this.height = var3; + this.buttonList.clear(); + this.initGui(); + } + + public void initGui() { + } + + public void handleInput() { + while(Mouse.next()) { + this.handleMouseInput(); + } + + while(Keyboard.next()) { + this.handleKeyboardInput(); + } + + } + + public void handleMouseInput() { + int var1 = Mouse.getEventX() * this.width / this.mc.displayWidth; + int var2 = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1; + if(Mouse.getEventButtonState()) { + if(this.mc.gameSettings.touchscreen && this.field_92018_d++ > 0) { + return; + } + + this.eventButton = Mouse.getEventButton(); + this.field_85043_c = Minecraft.getSystemTime(); + this.mouseClicked(var1, var2, this.eventButton); + } else if(Mouse.getEventButton() != -1) { + if(this.mc.gameSettings.touchscreen && --this.field_92018_d > 0) { + return; + } + + this.eventButton = -1; + this.mouseMovedOrUp(var1, var2, Mouse.getEventButton()); + } else if(this.eventButton != -1 && this.field_85043_c > 0L) { + long var3 = Minecraft.getSystemTime() - this.field_85043_c; + this.func_85041_a(var1, var2, this.eventButton, var3); + } + + } + + public void handleKeyboardInput() { + if(Keyboard.getEventKeyState()) { + int var1 = Keyboard.getEventKey(); + char var2 = Keyboard.getEventCharacter(); + if(var1 == 87) { + this.mc.toggleFullscreen(); + return; + } + + if(isMacOs && var1 == 28 && var2 == 0) { + var1 = 29; + } + + this.keyTyped(var2, var1); + } + + } + + public void updateScreen() { + } + + public void onGuiClosed() { + } + + public void drawDefaultBackground() { + this.drawWorldBackground(0); + } + + public void drawWorldBackground(int var1) { + if(this.mc.theWorld != null) { + this.drawGradientRect(0, 0, this.width, this.height, -1072689136, -804253680); + } else { + this.drawBackground(var1); + } + + } + + public void drawBackground(int var1) { + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_FOG); + Tessellator var2 = Tessellator.instance; + this.mc.renderEngine.bindTexture("/gui/background.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + float var3 = 32.0F; + var2.startDrawingQuads(); + var2.setColorOpaque_I(4210752); + var2.addVertexWithUV(0.0D, (double)this.height, 0.0D, 0.0D, (double)((float)this.height / var3 + (float)var1)); + var2.addVertexWithUV((double)this.width, (double)this.height, 0.0D, (double)((float)this.width / var3), (double)((float)this.height / var3 + (float)var1)); + var2.addVertexWithUV((double)this.width, 0.0D, 0.0D, (double)((float)this.width / var3), (double)var1); + var2.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, (double)var1); + var2.draw(); + } + + public boolean doesGuiPauseGame() { + return true; + } + + public void confirmClicked(boolean var1, int var2) { + } + + public static boolean isCtrlKeyDown() { + boolean var0 = Keyboard.isKeyDown(Keyboard.KEY_RETURN) && Keyboard.getEventCharacter() == 0; + return Keyboard.isKeyDown(Keyboard.KEY_LCONTROL) || Keyboard.isKeyDown(Keyboard.KEY_RCONTROL) || isMacOs && (var0 || Keyboard.isKeyDown(Keyboard.KEY_LMETA) || Keyboard.isKeyDown(Keyboard.KEY_RMETA)); + } + + public static boolean isShiftKeyDown() { + return Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) || Keyboard.isKeyDown(Keyboard.KEY_RSHIFT); + } +} diff --git a/src/net/minecraft/src/GuiScreenAddServer.java b/src/net/minecraft/src/GuiScreenAddServer.java new file mode 100644 index 0000000..c55e079 --- /dev/null +++ b/src/net/minecraft/src/GuiScreenAddServer.java @@ -0,0 +1,94 @@ +package net.minecraft.src; + +import org.lwjgl.input.Keyboard; + +public class GuiScreenAddServer extends GuiScreen { + private GuiScreen parentGui; + private GuiTextField serverAddress; + private GuiTextField serverName; + private ServerData newServerData; + + public GuiScreenAddServer(GuiScreen var1, ServerData var2) { + this.parentGui = var1; + this.newServerData = var2; + } + + public void updateScreen() { + this.serverName.updateCursorCounter(); + this.serverAddress.updateCursorCounter(); + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + 12, var1.translateKey("addServer.add"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 120 + 12, var1.translateKey("gui.cancel"))); + this.buttonList.add(new GuiButton(2, this.width / 2 - 100, 142, var1.translateKey("addServer.hideAddress") + ": " + (this.newServerData.isHidingAddress() ? var1.translateKey("gui.yes") : var1.translateKey("gui.no")))); + this.serverName = new GuiTextField(this.fontRenderer, this.width / 2 - 100, 66, 200, 20); + this.serverName.setFocused(true); + this.serverName.setText(this.newServerData.serverName); + this.serverAddress = new GuiTextField(this.fontRenderer, this.width / 2 - 100, 106, 200, 20); + this.serverAddress.setMaxStringLength(128); + this.serverAddress.setText(this.newServerData.serverIP); + ((GuiButton)this.buttonList.get(0)).enabled = this.serverAddress.getText().length() > 0 && this.serverAddress.getText().split(":").length > 0 && this.serverName.getText().length() > 0; + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 1) { + this.parentGui.confirmClicked(false, 0); + } else if(var1.id == 0) { + this.newServerData.serverName = this.serverName.getText(); + this.newServerData.serverIP = this.serverAddress.getText(); + this.parentGui.confirmClicked(true, 0); + } else if(var1.id == 2) { + StringTranslate var2 = StringTranslate.getInstance(); + this.newServerData.setHideAddress(!this.newServerData.isHidingAddress()); + ((GuiButton)this.buttonList.get(2)).displayString = var2.translateKey("addServer.hideAddress") + ": " + (this.newServerData.isHidingAddress() ? var2.translateKey("gui.yes") : var2.translateKey("gui.no")); + } + + } + } + + protected void keyTyped(char var1, int var2) { + this.serverName.textboxKeyTyped(var1, var2); + this.serverAddress.textboxKeyTyped(var1, var2); + if(var1 == 9) { + if(this.serverName.isFocused()) { + this.serverName.setFocused(false); + this.serverAddress.setFocused(true); + } else { + this.serverName.setFocused(true); + this.serverAddress.setFocused(false); + } + } + + if(var1 == 13) { + this.actionPerformed((GuiButton)this.buttonList.get(0)); + } + + ((GuiButton)this.buttonList.get(0)).enabled = this.serverAddress.getText().length() > 0 && this.serverAddress.getText().split(":").length > 0 && this.serverName.getText().length() > 0; + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + this.serverAddress.mouseClicked(var1, var2, var3); + this.serverName.mouseClicked(var1, var2, var3); + } + + public void drawScreen(int var1, int var2, float var3) { + StringTranslate var4 = StringTranslate.getInstance(); + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, var4.translateKey("addServer.title"), this.width / 2, 17, 16777215); + this.drawString(this.fontRenderer, var4.translateKey("addServer.enterName"), this.width / 2 - 100, 53, 10526880); + this.drawString(this.fontRenderer, var4.translateKey("addServer.enterIp"), this.width / 2 - 100, 94, 10526880); + this.serverName.drawTextBox(); + this.serverAddress.drawTextBox(); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiScreenBook.java b/src/net/minecraft/src/GuiScreenBook.java new file mode 100644 index 0000000..131ba6a --- /dev/null +++ b/src/net/minecraft/src/GuiScreenBook.java @@ -0,0 +1,317 @@ +package net.minecraft.src; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +public class GuiScreenBook extends GuiScreen { + private final EntityPlayer editingPlayer; + private final ItemStack itemstackBook; + private final boolean bookIsUnsigned; + private boolean bookModified; + private boolean editingTitle; + private int updateCount; + private int bookImageWidth = 192; + private int bookImageHeight = 192; + private int bookTotalPages = 1; + private int currPage; + private NBTTagList bookPages; + private String bookTitle = ""; + private GuiButtonNextPage buttonNextPage; + private GuiButtonNextPage buttonPreviousPage; + private GuiButton buttonDone; + private GuiButton buttonSign; + private GuiButton buttonFinalize; + private GuiButton buttonCancel; + + public GuiScreenBook(EntityPlayer var1, ItemStack var2, boolean var3) { + this.editingPlayer = var1; + this.itemstackBook = var2; + this.bookIsUnsigned = var3; + if(var2.hasTagCompound()) { + NBTTagCompound var4 = var2.getTagCompound(); + this.bookPages = var4.getTagList("pages"); + if(this.bookPages != null) { + this.bookPages = (NBTTagList)this.bookPages.copy(); + this.bookTotalPages = this.bookPages.tagCount(); + if(this.bookTotalPages < 1) { + this.bookTotalPages = 1; + } + } + } + + if(this.bookPages == null && var3) { + this.bookPages = new NBTTagList("pages"); + this.bookPages.appendTag(new NBTTagString("1", "")); + this.bookTotalPages = 1; + } + + } + + public void updateScreen() { + super.updateScreen(); + ++this.updateCount; + } + + public void initGui() { + this.buttonList.clear(); + Keyboard.enableRepeatEvents(true); + if(this.bookIsUnsigned) { + this.buttonList.add(this.buttonSign = new GuiButton(3, this.width / 2 - 100, 4 + this.bookImageHeight, 98, 20, StatCollector.translateToLocal("book.signButton"))); + this.buttonList.add(this.buttonDone = new GuiButton(0, this.width / 2 + 2, 4 + this.bookImageHeight, 98, 20, StatCollector.translateToLocal("gui.done"))); + this.buttonList.add(this.buttonFinalize = new GuiButton(5, this.width / 2 - 100, 4 + this.bookImageHeight, 98, 20, StatCollector.translateToLocal("book.finalizeButton"))); + this.buttonList.add(this.buttonCancel = new GuiButton(4, this.width / 2 + 2, 4 + this.bookImageHeight, 98, 20, StatCollector.translateToLocal("gui.cancel"))); + } else { + this.buttonList.add(this.buttonDone = new GuiButton(0, this.width / 2 - 100, 4 + this.bookImageHeight, 200, 20, StatCollector.translateToLocal("gui.done"))); + } + + int var1 = (this.width - this.bookImageWidth) / 2; + byte var2 = 2; + this.buttonList.add(this.buttonNextPage = new GuiButtonNextPage(1, var1 + 120, var2 + 154, true)); + this.buttonList.add(this.buttonPreviousPage = new GuiButtonNextPage(2, var1 + 38, var2 + 154, false)); + this.updateButtons(); + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + private void updateButtons() { + this.buttonNextPage.drawButton = !this.editingTitle && (this.currPage < this.bookTotalPages - 1 || this.bookIsUnsigned); + this.buttonPreviousPage.drawButton = !this.editingTitle && this.currPage > 0; + this.buttonDone.drawButton = !this.bookIsUnsigned || !this.editingTitle; + if(this.bookIsUnsigned) { + this.buttonSign.drawButton = !this.editingTitle; + this.buttonCancel.drawButton = this.editingTitle; + this.buttonFinalize.drawButton = this.editingTitle; + this.buttonFinalize.enabled = this.bookTitle.trim().length() > 0; + } + + } + + private void sendBookToServer(boolean var1) { + if(this.bookIsUnsigned && this.bookModified) { + if(this.bookPages != null) { + while(this.bookPages.tagCount() > 1) { + NBTTagString var2 = (NBTTagString)this.bookPages.tagAt(this.bookPages.tagCount() - 1); + if(var2.data != null && var2.data.length() != 0) { + break; + } + + this.bookPages.removeTag(this.bookPages.tagCount() - 1); + } + + if(this.itemstackBook.hasTagCompound()) { + NBTTagCompound var7 = this.itemstackBook.getTagCompound(); + var7.setTag("pages", this.bookPages); + } else { + this.itemstackBook.setTagInfo("pages", this.bookPages); + } + + String var8 = "MC|BEdit"; + if(var1) { + var8 = "MC|BSign"; + this.itemstackBook.setTagInfo("author", new NBTTagString("author", this.editingPlayer.username)); + this.itemstackBook.setTagInfo("title", new NBTTagString("title", this.bookTitle.trim())); + this.itemstackBook.itemID = Item.writtenBook.itemID; + } + + ByteArrayOutputStream var3 = new ByteArrayOutputStream(); + DataOutputStream var4 = new DataOutputStream(var3); + + try { + Packet.writeItemStack(this.itemstackBook, var4); + this.mc.getNetHandler().addToSendQueue(new Packet250CustomPayload(var8, var3.toByteArray())); + } catch (Exception var6) { + var6.printStackTrace(); + } + } + + } + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 0) { + this.mc.displayGuiScreen((GuiScreen)null); + this.sendBookToServer(false); + } else if(var1.id == 3 && this.bookIsUnsigned) { + this.editingTitle = true; + } else if(var1.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(var1.id == 2) { + if(this.currPage > 0) { + --this.currPage; + } + } else if(var1.id == 5 && this.editingTitle) { + this.sendBookToServer(true); + this.mc.displayGuiScreen((GuiScreen)null); + } else if(var1.id == 4 && this.editingTitle) { + this.editingTitle = false; + } + + this.updateButtons(); + } + } + + private void addNewPage() { + if(this.bookPages != null && this.bookPages.tagCount() < 50) { + this.bookPages.appendTag(new NBTTagString("" + (this.bookTotalPages + 1), "")); + ++this.bookTotalPages; + this.bookModified = true; + } + } + + protected void keyTyped(char var1, int var2) { + super.keyTyped(var1, var2); + if(this.bookIsUnsigned) { + if(this.editingTitle) { + this.func_74162_c(var1, var2); + } else { + this.keyTypedInBook(var1, var2); + } + + } + } + + private void keyTypedInBook(char var1, int var2) { + switch(var1) { + case '\u0016': + this.func_74160_b(GuiScreen.getClipboardString()); + return; + default: + switch(var2) { + case 14: + String var3 = this.func_74158_i(); + if(var3.length() > 0) { + this.func_74159_a(var3.substring(0, var3.length() - 1)); + } + + return; + case 28: + this.func_74160_b("\n"); + return; + default: + if(ChatAllowedCharacters.isAllowedCharacter(var1)) { + this.func_74160_b(Character.toString(var1)); + } + } + } + } + + private void func_74162_c(char var1, int var2) { + switch(var2) { + case 14: + if(this.bookTitle.length() > 0) { + this.bookTitle = this.bookTitle.substring(0, this.bookTitle.length() - 1); + this.updateButtons(); + } + + return; + case 28: + if(this.bookTitle.length() > 0) { + this.sendBookToServer(true); + this.mc.displayGuiScreen((GuiScreen)null); + } + + return; + default: + if(this.bookTitle.length() < 16 && ChatAllowedCharacters.isAllowedCharacter(var1)) { + this.bookTitle = this.bookTitle + Character.toString(var1); + this.updateButtons(); + this.bookModified = true; + } + } + } + + private String func_74158_i() { + if(this.bookPages != null && this.currPage >= 0 && this.currPage < this.bookPages.tagCount()) { + NBTTagString var1 = (NBTTagString)this.bookPages.tagAt(this.currPage); + return var1.toString(); + } else { + return ""; + } + } + + private void func_74159_a(String var1) { + if(this.bookPages != null && this.currPage >= 0 && this.currPage < this.bookPages.tagCount()) { + NBTTagString var2 = (NBTTagString)this.bookPages.tagAt(this.currPage); + var2.data = var1; + this.bookModified = true; + } + + } + + private void func_74160_b(String var1) { + String var2 = this.func_74158_i(); + String var3 = var2 + var1; + int var4 = this.fontRenderer.splitStringWidth(var3 + "" + EnumChatFormatting.BLACK + "_", 118); + if(var4 <= 118 && var3.length() < 256) { + this.func_74159_a(var3); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/book.png"); + int var4 = (this.width - this.bookImageWidth) / 2; + byte var5 = 2; + this.drawTexturedModalRect(var4, var5, 0, 0, this.bookImageWidth, this.bookImageHeight); + String var6; + String var7; + int var8; + if(this.editingTitle) { + var6 = this.bookTitle; + if(this.bookIsUnsigned) { + if(this.updateCount / 6 % 2 == 0) { + var6 = var6 + "" + EnumChatFormatting.BLACK + "_"; + } else { + var6 = var6 + "" + EnumChatFormatting.GRAY + "_"; + } + } + + var7 = StatCollector.translateToLocal("book.editTitle"); + var8 = this.fontRenderer.getStringWidth(var7); + this.fontRenderer.drawString(var7, var4 + 36 + (116 - var8) / 2, var5 + 16 + 16, 0); + int var9 = this.fontRenderer.getStringWidth(var6); + this.fontRenderer.drawString(var6, var4 + 36 + (116 - var9) / 2, var5 + 48, 0); + String var10 = String.format(StatCollector.translateToLocal("book.byAuthor"), new Object[]{this.editingPlayer.username}); + int var11 = this.fontRenderer.getStringWidth(var10); + this.fontRenderer.drawString(EnumChatFormatting.DARK_GRAY + var10, var4 + 36 + (116 - var11) / 2, var5 + 48 + 10, 0); + String var12 = StatCollector.translateToLocal("book.finalizeWarning"); + this.fontRenderer.drawSplitString(var12, var4 + 36, var5 + 80, 116, 0); + } else { + var6 = String.format(StatCollector.translateToLocal("book.pageIndicator"), new Object[]{Integer.valueOf(this.currPage + 1), Integer.valueOf(this.bookTotalPages)}); + var7 = ""; + if(this.bookPages != null && this.currPage >= 0 && this.currPage < this.bookPages.tagCount()) { + NBTTagString var13 = (NBTTagString)this.bookPages.tagAt(this.currPage); + var7 = var13.toString(); + } + + if(this.bookIsUnsigned) { + if(this.fontRenderer.getBidiFlag()) { + var7 = var7 + "_"; + } else if(this.updateCount / 6 % 2 == 0) { + var7 = var7 + "" + EnumChatFormatting.BLACK + "_"; + } else { + var7 = var7 + "" + EnumChatFormatting.GRAY + "_"; + } + } + + var8 = this.fontRenderer.getStringWidth(var6); + this.fontRenderer.drawString(var6, var4 - var8 + this.bookImageWidth - 44, var5 + 16, 0); + this.fontRenderer.drawSplitString(var7, var4 + 36, var5 + 16 + 16, 116, 0); + } + + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiScreenConfigureWorld.java b/src/net/minecraft/src/GuiScreenConfigureWorld.java new file mode 100644 index 0000000..e120cd3 --- /dev/null +++ b/src/net/minecraft/src/GuiScreenConfigureWorld.java @@ -0,0 +1,234 @@ +package net.minecraft.src; + +import java.io.IOException; +import net.minecraft.client.Minecraft; +import org.lwjgl.input.Keyboard; + +public class GuiScreenConfigureWorld extends GuiScreen { + private final GuiScreen field_96285_a; + private McoServer field_96280_b; + private SelectionListInvited field_96282_c; + private int field_96277_d; + private int field_96286_n; + private int field_96287_o; + private int field_96284_p = -1; + private String field_96283_q; + private GuiButton field_96281_r; + private GuiButton field_96279_s; + private GuiButton field_96278_t; + private GuiButton field_96276_u; + private GuiButton field_98128_v; + private GuiButton field_98127_w; + private GuiButton field_98129_x; + private boolean field_102020_y; + + public GuiScreenConfigureWorld(GuiScreen var1, McoServer var2) { + this.field_96285_a = var1; + this.field_96280_b = var2; + } + + public void updateScreen() { + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + this.field_96277_d = this.width / 2 - 200; + this.field_96286_n = 180; + this.field_96287_o = this.width / 2; + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + if(this.field_96280_b.field_96404_d.equals("CLOSED")) { + this.buttonList.add(this.field_96281_r = new GuiButton(0, this.field_96277_d, this.func_96264_a(12), this.field_96286_n / 2 - 2, 20, var1.translateKey("mco.configure.world.buttons.open"))); + this.field_96281_r.enabled = !this.field_96280_b.field_98166_h; + } else { + this.buttonList.add(this.field_96279_s = new GuiButton(1, this.field_96277_d, this.func_96264_a(12), this.field_96286_n / 2 - 2, 20, var1.translateKey("mco.configure.world.buttons.close"))); + this.field_96279_s.enabled = !this.field_96280_b.field_98166_h; + } + + this.buttonList.add(this.field_98129_x = new GuiButton(7, this.field_96277_d + this.field_96286_n / 2 + 2, this.func_96264_a(12), this.field_96286_n / 2 - 2, 20, var1.translateKey("mco.configure.world.buttons.subscription"))); + this.buttonList.add(this.field_96278_t = new GuiButton(5, this.field_96277_d, this.func_96264_a(10), this.field_96286_n / 2 - 2, 20, var1.translateKey("mco.configure.world.buttons.edit"))); + this.buttonList.add(this.field_96276_u = new GuiButton(6, this.field_96277_d + this.field_96286_n / 2 + 2, this.func_96264_a(10), this.field_96286_n / 2 - 2, 20, var1.translateKey("mco.configure.world.buttons.reset"))); + this.buttonList.add(this.field_98128_v = new GuiButton(4, this.field_96287_o, this.func_96264_a(10), this.field_96286_n / 2 - 2, 20, var1.translateKey("mco.configure.world.buttons.invite"))); + this.buttonList.add(this.field_98127_w = new GuiButton(3, this.field_96287_o + this.field_96286_n / 2 + 2, this.func_96264_a(10), this.field_96286_n / 2 - 2, 20, var1.translateKey("mco.configure.world.buttons.uninvite"))); + this.buttonList.add(new GuiButton(10, this.field_96287_o, this.func_96264_a(12), this.field_96286_n, 20, var1.translateKey("gui.back"))); + this.field_96282_c = new SelectionListInvited(this); + this.field_96278_t.enabled = !this.field_96280_b.field_98166_h; + this.field_96276_u.enabled = !this.field_96280_b.field_98166_h; + this.field_98128_v.enabled = !this.field_96280_b.field_98166_h; + this.field_98127_w.enabled = !this.field_96280_b.field_98166_h; + } + + private int func_96264_a(int var1) { + return 40 + var1 * 13; + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 10) { + if(this.field_102020_y) { + ((GuiScreenOnlineServers)this.field_96285_a).func_102018_a(this.field_96280_b.field_96408_a); + } + + this.mc.displayGuiScreen(this.field_96285_a); + } else if(var1.id == 5) { + this.mc.displayGuiScreen(new GuiScreenEditOnlineWorld(this, this.field_96285_a, this.field_96280_b)); + } else if(var1.id == 1) { + StringTranslate var2 = StringTranslate.getInstance(); + String var3 = var2.translateKey("mco.configure.world.close.question.line1"); + String var4 = var2.translateKey("mco.configure.world.close.question.line2"); + this.mc.displayGuiScreen(new GuiScreenConfirmation(this, "Warning!", var3, var4, 1)); + } else if(var1.id == 0) { + this.func_96268_g(); + } else if(var1.id == 4) { + this.mc.displayGuiScreen(new GuiScreenInvite(this.field_96285_a, this, this.field_96280_b)); + } else if(var1.id == 3) { + this.func_96272_i(); + } else if(var1.id == 6) { + this.mc.displayGuiScreen(new GuiScreenResetWorld(this, this.field_96280_b)); + } else if(var1.id == 7) { + this.mc.displayGuiScreen(new GuiScreenSubscription(this, this.field_96280_b)); + } + + } + } + + private void func_96268_g() { + McoClient var1 = new McoClient(this.mc.session); + + try { + Boolean var2 = var1.func_96383_b(this.field_96280_b.field_96408_a); + if(var2.booleanValue()) { + this.field_102020_y = true; + this.field_96280_b.field_96404_d = "OPEN"; + this.initGui(); + } + } catch (ExceptionMcoService var3) { + } catch (IOException var4) { + } + + } + + private void func_96275_h() { + McoClient var1 = new McoClient(this.mc.session); + + try { + boolean var2 = var1.func_96378_c(this.field_96280_b.field_96408_a).booleanValue(); + if(var2) { + this.field_102020_y = true; + this.field_96280_b.field_96404_d = "CLOSED"; + this.initGui(); + } + } catch (ExceptionMcoService var3) { + } catch (IOException var4) { + } + + } + + private void func_96272_i() { + if(this.field_96284_p >= 0 && this.field_96284_p < this.field_96280_b.field_96402_f.size()) { + this.field_96283_q = (String)this.field_96280_b.field_96402_f.get(this.field_96284_p); + StringTranslate var1 = StringTranslate.getInstance(); + GuiYesNo var2 = new GuiYesNo(this, "Warning!", var1.translateKey("mco.configure.world.uninvite.question") + " \'" + this.field_96283_q + "\'", 3); + this.mc.displayGuiScreen(var2); + } + + } + + public void confirmClicked(boolean var1, int var2) { + if(var2 == 3) { + if(var1) { + McoClient var3 = new McoClient(this.mc.session); + + try { + var3.func_96381_a(this.field_96280_b.field_96408_a, this.field_96283_q); + } catch (ExceptionMcoService var5) { + System.err.println("Could not uninvite the selected user"); + } + + this.func_96267_d(this.field_96284_p); + } + + this.mc.displayGuiScreen(new GuiScreenConfigureWorld(this.field_96285_a, this.field_96280_b)); + } + + if(var2 == 1) { + if(var1) { + this.func_96275_h(); + } + + this.mc.displayGuiScreen(this); + } + + } + + private void func_96267_d(int var1) { + this.field_96280_b.field_96402_f.remove(var1); + } + + protected void keyTyped(char var1, int var2) { + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + } + + public void drawScreen(int var1, int var2, float var3) { + StringTranslate var4 = StringTranslate.getInstance(); + this.drawDefaultBackground(); + this.field_96282_c.func_96612_a(var1, var2, var3); + this.drawCenteredString(this.fontRenderer, var4.translateKey("mco.configure.world.title"), this.width / 2, 17, 16777215); + this.drawString(this.fontRenderer, var4.translateKey("mco.configure.world.name"), this.field_96277_d, this.func_96264_a(1), 10526880); + this.drawString(this.fontRenderer, this.field_96280_b.func_96398_b(), this.field_96277_d, this.func_96264_a(2), 16777215); + this.drawString(this.fontRenderer, var4.translateKey("mco.configure.world.description"), this.field_96277_d, this.func_96264_a(4), 10526880); + this.drawString(this.fontRenderer, this.field_96280_b.func_96397_a(), this.field_96277_d, this.func_96264_a(5), 16777215); + this.drawString(this.fontRenderer, var4.translateKey("mco.configure.world.status"), this.field_96277_d, this.func_96264_a(7), 10526880); + this.drawString(this.fontRenderer, this.func_104045_j(), this.field_96277_d, this.func_96264_a(8), 16777215); + this.drawString(this.fontRenderer, var4.translateKey("mco.configure.world.invited"), this.field_96287_o, this.func_96264_a(1), 10526880); + super.drawScreen(var1, var2, var3); + } + + private String func_104045_j() { + if(this.field_96280_b.field_98166_h) { + return "Expired"; + } else { + String var1 = this.field_96280_b.field_96404_d.toLowerCase(); + return Character.toUpperCase(var1.charAt(0)) + var1.substring(1); + } + } + + static Minecraft func_96265_a(GuiScreenConfigureWorld var0) { + return var0.mc; + } + + static int func_96271_b(GuiScreenConfigureWorld var0) { + return var0.field_96287_o; + } + + static int func_96274_a(GuiScreenConfigureWorld var0, int var1) { + return var0.func_96264_a(var1); + } + + static int func_96269_c(GuiScreenConfigureWorld var0) { + return var0.field_96286_n; + } + + static McoServer func_96266_d(GuiScreenConfigureWorld var0) { + return var0.field_96280_b; + } + + static int func_96270_b(GuiScreenConfigureWorld var0, int var1) { + return var0.field_96284_p = var1; + } + + static int func_96263_e(GuiScreenConfigureWorld var0) { + return var0.field_96284_p; + } + + static FontRenderer func_96273_f(GuiScreenConfigureWorld var0) { + return var0.fontRenderer; + } +} diff --git a/src/net/minecraft/src/GuiScreenConfirmation.java b/src/net/minecraft/src/GuiScreenConfirmation.java new file mode 100644 index 0000000..bdbdbe4 --- /dev/null +++ b/src/net/minecraft/src/GuiScreenConfirmation.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class GuiScreenConfirmation extends GuiYesNo { + private String field_96288_n; + + public GuiScreenConfirmation(GuiScreen var1, String var2, String var3, String var4, int var5) { + super(var1, var2, var3, var5); + this.field_96288_n = var4; + } + + public void initGui() { + this.buttonList.add(new GuiSmallButton(0, this.width / 2 - 155, this.height / 6 + 112, this.buttonText1)); + this.buttonList.add(new GuiSmallButton(1, this.width / 2 - 155 + 160, this.height / 6 + 112, this.buttonText2)); + } + + public void drawScreen(int var1, int var2, float var3) { + super.drawScreen(var1, var2, var3); + this.drawCenteredString(this.fontRenderer, this.field_96288_n, this.width / 2, 110, 16777215); + } +} diff --git a/src/net/minecraft/src/GuiScreenCreateOnlineWorld.java b/src/net/minecraft/src/GuiScreenCreateOnlineWorld.java new file mode 100644 index 0000000..e8a9551 --- /dev/null +++ b/src/net/minecraft/src/GuiScreenCreateOnlineWorld.java @@ -0,0 +1,126 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Collections; +import net.minecraft.client.Minecraft; +import org.lwjgl.input.Keyboard; + +public class GuiScreenCreateOnlineWorld extends GuiScreen { + private GuiScreen field_96260_a; + private GuiTextField field_96257_c; + private GuiTextField field_96255_b; + private String field_98108_c; + private String field_98109_n; + private static int field_96253_d = 0; + private static int field_96261_n = 1; + private boolean field_96256_r = false; + private String field_96254_s = "You must enter a name!"; + + public GuiScreenCreateOnlineWorld(GuiScreen var1) { + super.buttonList = Collections.synchronizedList(new ArrayList()); + this.field_96260_a = var1; + } + + public void updateScreen() { + this.field_96257_c.updateCursorCounter(); + this.field_98108_c = this.field_96257_c.getText(); + this.field_96255_b.updateCursorCounter(); + this.field_98109_n = this.field_96255_b.getText(); + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(field_96253_d, this.width / 2 - 100, this.height / 4 + 120 + 17, 97, 20, var1.translateKey("mco.create.world"))); + this.buttonList.add(new GuiButton(field_96261_n, this.width / 2 + 5, this.height / 4 + 120 + 17, 95, 20, var1.translateKey("gui.cancel"))); + this.field_96257_c = new GuiTextField(this.fontRenderer, this.width / 2 - 100, 65, 200, 20); + this.field_96257_c.setFocused(true); + if(this.field_98108_c != null) { + this.field_96257_c.setText(this.field_98108_c); + } + + this.field_96255_b = new GuiTextField(this.fontRenderer, this.width / 2 - 100, 111, 200, 20); + if(this.field_98109_n != null) { + this.field_96255_b.setText(this.field_98109_n); + } + + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == field_96261_n) { + this.mc.displayGuiScreen(this.field_96260_a); + } else if(var1.id == field_96253_d) { + this.func_96252_h(); + } + + } + } + + private void func_96252_h() { + if(this.func_96249_i()) { + TaskWorldCreation var1 = new TaskWorldCreation(this, this.field_96257_c.getText(), "Minecraft Realms Server", "NO_LOCATION", this.field_98109_n); + GuiScreenLongRunningTask var2 = new GuiScreenLongRunningTask(this.mc, this.field_96260_a, var1); + var2.func_98117_g(); + this.mc.displayGuiScreen(var2); + } + + } + + private boolean func_96249_i() { + this.field_96256_r = this.field_96257_c.getText() == null || this.field_96257_c.getText().trim().equals(""); + return !this.field_96256_r; + } + + protected void keyTyped(char var1, int var2) { + this.field_96257_c.textboxKeyTyped(var1, var2); + this.field_96255_b.textboxKeyTyped(var1, var2); + if(var1 == 9) { + this.field_96257_c.setFocused(!this.field_96257_c.isFocused()); + this.field_96255_b.setFocused(!this.field_96255_b.isFocused()); + } + + if(var1 == 13) { + this.actionPerformed((GuiButton)this.buttonList.get(0)); + } + + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + this.field_96257_c.mouseClicked(var1, var2, var3); + this.field_96255_b.mouseClicked(var1, var2, var3); + } + + public void drawScreen(int var1, int var2, float var3) { + StringTranslate var4 = StringTranslate.getInstance(); + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, var4.translateKey("mco.selectServer.create"), this.width / 2, 11, 16777215); + this.drawString(this.fontRenderer, var4.translateKey("mco.configure.world.name"), this.width / 2 - 100, 52, 10526880); + this.drawString(this.fontRenderer, var4.translateKey("mco.configure.world.seed"), this.width / 2 - 100, 98, 10526880); + if(this.field_96256_r) { + this.drawCenteredString(this.fontRenderer, this.field_96254_s, this.width / 2, 167, 16711680); + } + + this.field_96257_c.drawTextBox(); + this.field_96255_b.drawTextBox(); + super.drawScreen(var1, var2, var3); + } + + static Minecraft func_96248_a(GuiScreenCreateOnlineWorld var0) { + return var0.mc; + } + + static GuiScreen func_96247_b(GuiScreenCreateOnlineWorld var0) { + return var0.field_96260_a; + } + + static Minecraft func_96246_c(GuiScreenCreateOnlineWorld var0) { + return var0.mc; + } +} diff --git a/src/net/minecraft/src/GuiScreenDemo.java b/src/net/minecraft/src/GuiScreenDemo.java new file mode 100644 index 0000000..46c3422 --- /dev/null +++ b/src/net/minecraft/src/GuiScreenDemo.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +import java.net.URI; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +public class GuiScreenDemo extends GuiScreen { + public void initGui() { + this.buttonList.clear(); + byte var1 = -16; + this.buttonList.add(new GuiButton(1, this.width / 2 - 116, this.height / 2 + 62 + var1, 114, 20, StatCollector.translateToLocal("demo.help.buy"))); + this.buttonList.add(new GuiButton(2, this.width / 2 + 2, this.height / 2 + 62 + var1, 114, 20, StatCollector.translateToLocal("demo.help.later"))); + } + + protected void actionPerformed(GuiButton var1) { + switch(var1.id) { + case 1: + var1.enabled = false; + + try { + Class var2 = Class.forName("java.awt.Desktop"); + Object var3 = var2.getMethod("getDesktop", new Class[0]).invoke((Object)null, new Object[0]); + var2.getMethod("browse", new Class[]{URI.class}).invoke(var3, new Object[]{new URI("http://www.minecraft.net/store?source=demo")}); + } catch (Throwable var4) { + var4.printStackTrace(); + } + break; + case 2: + this.mc.displayGuiScreen((GuiScreen)null); + this.mc.setIngameFocus(); + } + + } + + public void updateScreen() { + super.updateScreen(); + } + + public void drawDefaultBackground() { + super.drawDefaultBackground(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/demo_bg.png"); + int var1 = (this.width - 248) / 2; + int var2 = (this.height - 166) / 2; + this.drawTexturedModalRect(var1, var2, 0, 0, 248, 166); + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + int var4 = (this.width - 248) / 2 + 10; + int var5 = (this.height - 166) / 2 + 8; + this.fontRenderer.drawString(StatCollector.translateToLocal("demo.help.title"), var4, var5, 2039583); + var5 += 12; + GameSettings var7 = this.mc.gameSettings; + String var6 = StatCollector.translateToLocal("demo.help.movementShort"); + var6 = String.format(var6, new Object[]{Keyboard.getKeyName(var7.keyBindForward.keyCode), Keyboard.getKeyName(var7.keyBindLeft.keyCode), Keyboard.getKeyName(var7.keyBindBack.keyCode), Keyboard.getKeyName(var7.keyBindRight.keyCode)}); + this.fontRenderer.drawString(var6, var4, var5, 5197647); + var6 = StatCollector.translateToLocal("demo.help.movementMouse"); + this.fontRenderer.drawString(var6, var4, var5 + 12, 5197647); + var6 = StatCollector.translateToLocal("demo.help.jump"); + var6 = String.format(var6, new Object[]{Keyboard.getKeyName(var7.keyBindJump.keyCode)}); + this.fontRenderer.drawString(var6, var4, var5 + 24, 5197647); + var6 = StatCollector.translateToLocal("demo.help.inventory"); + var6 = String.format(var6, new Object[]{Keyboard.getKeyName(var7.keyBindInventory.keyCode)}); + this.fontRenderer.drawString(var6, var4, var5 + 36, 5197647); + this.fontRenderer.drawSplitString(StatCollector.translateToLocal("demo.help.fullWrapped"), var4, var5 + 68, 218, 2039583); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiScreenDisconnectedOnline.java b/src/net/minecraft/src/GuiScreenDisconnectedOnline.java new file mode 100644 index 0000000..6017a4d --- /dev/null +++ b/src/net/minecraft/src/GuiScreenDisconnectedOnline.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class GuiScreenDisconnectedOnline extends GuiScreen { + private String field_98113_a; + private String field_98111_b; + private Object[] field_98112_c; + private List field_98110_d; + private final GuiScreen field_98114_n; + + public GuiScreenDisconnectedOnline(GuiScreen var1, String var2, String var3, Object... var4) { + StringTranslate var5 = StringTranslate.getInstance(); + this.field_98114_n = var1; + this.field_98113_a = var5.translateKey(var2); + this.field_98111_b = var3; + this.field_98112_c = var4; + } + + protected void keyTyped(char var1, int var2) { + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 120 + 12, var1.translateKey("gui.back"))); + if(this.field_98112_c != null) { + this.field_98110_d = this.fontRenderer.listFormattedStringToWidth(var1.translateKeyFormat(this.field_98111_b, this.field_98112_c), this.width - 50); + } else { + this.field_98110_d = this.fontRenderer.listFormattedStringToWidth(var1.translateKey(this.field_98111_b), this.width - 50); + } + + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 0) { + this.mc.displayGuiScreen(this.field_98114_n); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.field_98113_a, this.width / 2, this.height / 2 - 50, 11184810); + int var4 = this.height / 2 - 30; + if(this.field_98110_d != null) { + for(Iterator var5 = this.field_98110_d.iterator(); var5.hasNext(); var4 += this.fontRenderer.FONT_HEIGHT) { + String var6 = (String)var5.next(); + this.drawCenteredString(this.fontRenderer, var6, this.width / 2, var4, 16777215); + } + } + + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiScreenEditOnlineWorld.java b/src/net/minecraft/src/GuiScreenEditOnlineWorld.java new file mode 100644 index 0000000..a44904b --- /dev/null +++ b/src/net/minecraft/src/GuiScreenEditOnlineWorld.java @@ -0,0 +1,118 @@ +package net.minecraft.src; + +import org.lwjgl.input.Keyboard; + +public class GuiScreenEditOnlineWorld extends GuiScreen { + private GuiScreen field_96204_a; + private GuiScreen field_96202_b; + private GuiTextField field_96203_c; + private GuiTextField field_96201_d; + private McoServer field_96205_n; + private GuiButton field_96206_o; + private int field_104054_p; + private int field_104053_q; + private int field_104052_r; + private GuiScreenOnlineServersSubscreen field_104051_s; + + public GuiScreenEditOnlineWorld(GuiScreen var1, GuiScreen var2, McoServer var3) { + this.field_96204_a = var1; + this.field_96202_b = var2; + this.field_96205_n = var3; + } + + public void updateScreen() { + this.field_96201_d.updateCursorCounter(); + this.field_96203_c.updateCursorCounter(); + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + this.field_104054_p = this.width / 4; + this.field_104053_q = this.width / 4 - 2; + this.field_104052_r = this.width / 2 + 4; + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.buttonList.add(this.field_96206_o = new GuiButton(0, this.field_104054_p, this.height / 4 + 120 + 22, this.field_104053_q, 20, var1.translateKey("mco.configure.world.buttons.done"))); + this.buttonList.add(new GuiButton(1, this.field_104052_r, this.height / 4 + 120 + 22, this.field_104053_q, 20, var1.translateKey("gui.cancel"))); + this.field_96201_d = new GuiTextField(this.fontRenderer, this.field_104054_p, 56, 212, 20); + this.field_96201_d.setFocused(true); + this.field_96201_d.setMaxStringLength(32); + this.field_96201_d.setText(this.field_96205_n.func_96398_b()); + this.field_96203_c = new GuiTextField(this.fontRenderer, this.field_104054_p, 96, 212, 20); + this.field_96203_c.setMaxStringLength(32); + this.field_96203_c.setText(this.field_96205_n.func_96397_a()); + this.field_104051_s = new GuiScreenOnlineServersSubscreen(this.width, this.height, this.field_104054_p, 122); + this.buttonList.addAll(this.field_104051_s.field_104079_a); + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 1) { + this.mc.displayGuiScreen(this.field_96204_a); + } else if(var1.id == 0) { + this.func_96200_g(); + } else if(var1.id == 2) { + this.mc.displayGuiScreen(new GuiScreenResetWorld(this, this.field_96205_n)); + } else { + this.field_104051_s.func_104069_a(var1); + } + + } + } + + private void func_96200_g() { + McoClient var1 = new McoClient(this.mc.session); + + try { + String var2 = this.field_96203_c.getText() != null && !this.field_96203_c.getText().trim().equals("") ? this.field_96203_c.getText() : ""; + var1.func_96384_a(this.field_96205_n.field_96408_a, this.field_96201_d.getText(), var2, this.field_104051_s.field_104076_e, this.field_104051_s.field_104073_f); + this.field_96205_n.func_96399_a(this.field_96201_d.getText()); + this.field_96205_n.func_96400_b(this.field_96203_c.getText()); + this.mc.displayGuiScreen(new GuiScreenConfigureWorld(this.field_96202_b, this.field_96205_n)); + } catch (Exception var3) { + } + + } + + protected void keyTyped(char var1, int var2) { + this.field_96201_d.textboxKeyTyped(var1, var2); + this.field_96203_c.textboxKeyTyped(var1, var2); + if(var1 == 9) { + if(this.field_96201_d.isFocused()) { + this.field_96201_d.setFocused(false); + this.field_96203_c.setFocused(true); + } else { + this.field_96201_d.setFocused(true); + this.field_96203_c.setFocused(false); + } + } + + if(var1 == 13) { + this.func_96200_g(); + } + + this.field_96206_o.enabled = this.field_96201_d.getText() != null && !this.field_96201_d.getText().trim().equals(""); + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + this.field_96203_c.mouseClicked(var1, var2, var3); + this.field_96201_d.mouseClicked(var1, var2, var3); + } + + public void drawScreen(int var1, int var2, float var3) { + StringTranslate var4 = StringTranslate.getInstance(); + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, var4.translateKey("mco.configure.world.edit.title"), this.width / 2, 17, 16777215); + this.drawString(this.fontRenderer, var4.translateKey("mco.configure.world.name"), this.field_104054_p, 43, 10526880); + this.drawString(this.fontRenderer, var4.translateKey("mco.configure.world.description"), this.field_104054_p, 84, 10526880); + this.field_96201_d.drawTextBox(); + this.field_96203_c.drawTextBox(); + this.field_104051_s.func_104071_a(this, this.fontRenderer); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiScreenInvite.java b/src/net/minecraft/src/GuiScreenInvite.java new file mode 100644 index 0000000..665f652 --- /dev/null +++ b/src/net/minecraft/src/GuiScreenInvite.java @@ -0,0 +1,104 @@ +package net.minecraft.src; + +import java.io.IOException; +import org.lwjgl.input.Keyboard; + +public class GuiScreenInvite extends GuiScreen { + private GuiTextField field_96227_a; + private McoServer field_96223_b; + private final GuiScreen field_96224_c; + private final GuiScreenConfigureWorld field_96222_d; + private final int field_96228_n = 0; + private final int field_96229_o = 1; + private String field_101016_p = "Could not invite the provided name"; + private String field_96226_p; + private boolean field_96225_q = false; + + public GuiScreenInvite(GuiScreen var1, GuiScreenConfigureWorld var2, McoServer var3) { + this.field_96224_c = var1; + this.field_96222_d = var2; + this.field_96223_b = var3; + } + + public void updateScreen() { + this.field_96227_a.updateCursorCounter(); + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + 12, var1.translateKey("mco.configure.world.buttons.invite"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 120 + 12, var1.translateKey("gui.cancel"))); + this.field_96227_a = new GuiTextField(this.fontRenderer, this.width / 2 - 100, 66, 200, 20); + this.field_96227_a.setFocused(true); + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 1) { + this.mc.displayGuiScreen(this.field_96222_d); + } else if(var1.id == 0) { + McoClient var2 = new McoClient(this.mc.session); + + try { + McoServer var3 = var2.func_96387_b(this.field_96223_b.field_96408_a, this.field_96227_a.getText()); + if(var3 != null) { + this.field_96223_b.field_96402_f = var3.field_96402_f; + this.mc.displayGuiScreen(new GuiScreenConfigureWorld(this.field_96224_c, this.field_96223_b)); + } else { + this.func_101015_a(this.field_101016_p); + } + } catch (ExceptionMcoService var4) { + this.func_101015_a(var4.field_96391_b); + } catch (IOException var5) { + this.func_101015_a(this.field_101016_p); + } + } + + } + } + + private void func_101015_a(String var1) { + this.field_96225_q = true; + this.field_96226_p = var1; + } + + protected void keyTyped(char var1, int var2) { + this.field_96227_a.textboxKeyTyped(var1, var2); + if(var1 == 9) { + if(this.field_96227_a.isFocused()) { + this.field_96227_a.setFocused(false); + } else { + this.field_96227_a.setFocused(true); + } + } + + if(var1 == 13) { + this.actionPerformed((GuiButton)this.buttonList.get(0)); + } + + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + this.field_96227_a.mouseClicked(var1, var2, var3); + } + + public void drawScreen(int var1, int var2, float var3) { + StringTranslate var4 = StringTranslate.getInstance(); + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, var4.translateKey(""), this.width / 2, 17, 16777215); + this.drawString(this.fontRenderer, var4.translateKey("mco.configure.world.invite.profile.name"), this.width / 2 - 100, 53, 10526880); + if(this.field_96225_q) { + this.drawCenteredString(this.fontRenderer, this.field_96226_p, this.width / 2, 100, 16711680); + } + + this.field_96227_a.drawTextBox(); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiScreenLongRunningTask.java b/src/net/minecraft/src/GuiScreenLongRunningTask.java new file mode 100644 index 0000000..3ee3ddf --- /dev/null +++ b/src/net/minecraft/src/GuiScreenLongRunningTask.java @@ -0,0 +1,87 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Collections; +import net.minecraft.client.Minecraft; + +public class GuiScreenLongRunningTask extends GuiScreen { + private final int field_96213_b = 666; + private final GuiScreen field_96215_c; + private final Thread field_98118_d; + private volatile String field_96212_d = ""; + private volatile boolean field_96219_n = false; + private volatile String field_96220_o; + private volatile boolean field_96218_p = false; + private int field_96216_q = 0; + private TaskLongRunning field_96214_r; + public static final String[] field_96217_a = new String[]{"\u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583", "_ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584", "_ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585", "_ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586", "_ _ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587", "_ _ _ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588", "_ _ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587", "_ _ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586", "_ _ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585", "_ \u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584", "\u2583 \u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583", "\u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _", "\u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _", "\u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _", "\u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _ _", "\u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _ _ _", "\u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _ _", "\u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _ _", "\u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _ _", "\u2584 \u2585 \u2586 \u2587 \u2588 \u2587 \u2586 \u2585 \u2584 \u2583 _"}; + + public GuiScreenLongRunningTask(Minecraft var1, GuiScreen var2, TaskLongRunning var3) { + super.buttonList = Collections.synchronizedList(new ArrayList()); + this.mc = var1; + this.field_96215_c = var2; + this.field_96214_r = var3; + var3.func_96574_a(this); + this.field_98118_d = new Thread(var3); + } + + public void func_98117_g() { + this.field_98118_d.start(); + } + + public void updateScreen() { + super.updateScreen(); + ++this.field_96216_q; + this.field_96214_r.func_96573_a(); + } + + protected void keyTyped(char var1, int var2) { + } + + public void initGui() { + this.field_96214_r.func_96571_d(); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 666) { + this.field_96218_p = true; + this.mc.displayGuiScreen(this.field_96215_c); + } + + this.field_96214_r.func_96572_a(var1); + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.field_96212_d, this.width / 2, this.height / 2 - 50, 16777215); + this.drawCenteredString(this.fontRenderer, "", this.width / 2, this.height / 2 - 10, 16777215); + if(!this.field_96219_n) { + this.drawCenteredString(this.fontRenderer, field_96217_a[this.field_96216_q % field_96217_a.length], this.width / 2, this.height / 2 + 15, 8421504); + } + + if(this.field_96219_n) { + this.drawCenteredString(this.fontRenderer, this.field_96220_o, this.width / 2, this.height / 2 + 15, 16711680); + } + + super.drawScreen(var1, var2, var3); + } + + public void func_96209_a(String var1) { + this.field_96219_n = true; + this.field_96220_o = var1; + this.buttonList.clear(); + this.buttonList.add(new GuiButton(666, this.width / 2 - 100, this.height / 4 + 120 + 12, "Back")); + } + + public Minecraft func_96208_g() { + return this.mc; + } + + public void func_96210_b(String var1) { + this.field_96212_d = var1; + } + + public boolean func_96207_h() { + return this.field_96218_p; + } +} diff --git a/src/net/minecraft/src/GuiScreenOnlineServers.java b/src/net/minecraft/src/GuiScreenOnlineServers.java new file mode 100644 index 0000000..4b37181 --- /dev/null +++ b/src/net/minecraft/src/GuiScreenOnlineServers.java @@ -0,0 +1,478 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.Socket; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import net.minecraft.client.Minecraft; +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +public class GuiScreenOnlineServers extends GuiScreen { + private GuiScreen field_96188_a; + private GuiSlotOnlineServerList field_96186_b; + private static int field_96187_c = 0; + private static final Object field_96185_d = new Object(); + private int field_96189_n = -1; + private GuiButton field_96190_o; + private GuiButton field_96198_p; + private GuiButtonLink field_96197_q; + private GuiButton field_96196_r; + private String field_96195_s = null; + private McoServerList field_96194_t; + private boolean field_96193_u; + private List field_96192_v = Collections.emptyList(); + private volatile int field_96199_x; + private Long field_102019_y; + private int field_104044_y = 0; + + public GuiScreenOnlineServers(GuiScreen var1) { + this.field_96188_a = var1; + } + + public void initGui() { + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.field_96194_t = new McoServerList(this.mc.session); + if(!this.field_96193_u) { + this.field_96193_u = true; + this.field_96186_b = new GuiSlotOnlineServerList(this); + } else { + this.field_96186_b.func_104084_a(this.width, this.height, 32, this.height - 64); + } + + (new ThreadOnlineScreen(this)).start(); + this.func_96178_g(); + } + + public void func_96178_g() { + StringTranslate var1 = StringTranslate.getInstance(); + this.buttonList.add(this.field_96196_r = new GuiButton(1, this.width / 2 - 154, this.height - 52, 100, 20, var1.translateKey("mco.selectServer.select"))); + this.buttonList.add(this.field_96198_p = new GuiButton(2, this.width / 2 - 48, this.height - 52, 100, 20, var1.translateKey("mco.selectServer.create"))); + this.buttonList.add(this.field_96190_o = new GuiButton(3, this.width / 2 + 58, this.height - 52, 100, 20, var1.translateKey("mco.selectServer.configure"))); + this.buttonList.add(this.field_96197_q = new GuiButtonLink(4, this.width / 2 - 154, this.height - 28, 154, 20, var1.translateKey("mco.selectServer.moreinfo"))); + this.buttonList.add(new GuiButton(0, this.width / 2 + 6, this.height - 28, 153, 20, var1.translateKey("gui.cancel"))); + boolean var2 = this.field_96189_n >= 0 && this.field_96189_n < this.field_96186_b.getSize(); + this.field_96196_r.enabled = var2 && ((McoServer)this.field_96192_v.get(this.field_96189_n)).field_96404_d.equals("OPEN") && !((McoServer)this.field_96192_v.get(this.field_96189_n)).field_98166_h; + this.field_96190_o.enabled = var2 && this.mc.session.username.equals(((McoServer)this.field_96192_v.get(this.field_96189_n)).field_96405_e); + this.field_96198_p.enabled = this.field_96199_x > 0; + } + + public void updateScreen() { + super.updateScreen(); + ++this.field_104044_y; + if(this.field_96194_t.func_98251_a()) { + List var1 = this.field_96194_t.func_98252_c(); + Iterator var2 = var1.iterator(); + + while(true) { + while(var2.hasNext()) { + McoServer var3 = (McoServer)var2.next(); + Iterator var4 = this.field_96192_v.iterator(); + + while(var4.hasNext()) { + McoServer var5 = (McoServer)var4.next(); + if(var3.field_96408_a == var5.field_96408_a) { + var3.func_96401_a(var5); + if(this.field_102019_y != null && this.field_102019_y.longValue() == var3.field_96408_a) { + this.field_102019_y = null; + var3.field_96411_l = false; + } + break; + } + } + } + + this.field_96192_v = var1; + this.field_96194_t.func_98250_b(); + break; + } + } + + this.field_96198_p.enabled = this.field_96199_x > 0; + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 1) { + this.func_96159_a(this.field_96189_n); + } else if(var1.id == 3) { + List var2 = this.field_96194_t.func_98252_c(); + if(this.field_96189_n < var2.size()) { + McoServer var3 = (McoServer)var2.get(this.field_96189_n); + McoServer var4 = this.func_98086_a(var3.field_96408_a); + if(var4 != null) { + this.field_96194_t.func_98248_d(); + this.mc.displayGuiScreen(new GuiScreenConfigureWorld(this, var4)); + } + } + } else if(var1.id == 0) { + this.field_96194_t.func_98248_d(); + this.mc.displayGuiScreen(this.field_96188_a); + } else if(var1.id == 2) { + this.field_96194_t.func_98248_d(); + this.mc.displayGuiScreen(new GuiScreenCreateOnlineWorld(this)); + } else if(var1.id == 4) { + this.field_96197_q.func_96135_a("http://realms.minecraft.net/"); + } else { + this.field_96186_b.actionPerformed(var1); + } + + } + } + + public void func_102018_a(long var1) { + this.field_96189_n = -1; + this.field_102019_y = Long.valueOf(var1); + } + + private McoServer func_98086_a(long var1) { + McoClient var3 = new McoClient(this.mc.session); + + try { + return var3.func_98176_a(var1); + } catch (ExceptionMcoService var5) { + } catch (IOException var6) { + } + + return null; + } + + protected void keyTyped(char var1, int var2) { + if(var2 == 59) { + this.mc.gameSettings.hideServerAddress = !this.mc.gameSettings.hideServerAddress; + this.mc.gameSettings.saveOptions(); + } else { + if(var1 == 13) { + this.actionPerformed((GuiButton)this.buttonList.get(2)); + } else { + super.keyTyped(var1, var2); + } + + } + } + + public void drawScreen(int var1, int var2, float var3) { + this.field_96195_s = null; + StringTranslate var4 = StringTranslate.getInstance(); + this.drawDefaultBackground(); + this.field_96186_b.drawScreen(var1, var2, var3); + this.drawCenteredString(this.fontRenderer, var4.translateKey("mco.title"), this.width / 2, 20, 16777215); + super.drawScreen(var1, var2, var3); + if(this.field_96195_s != null) { + this.func_96165_a(this.field_96195_s, var1, var2); + } + + } + + private void func_96159_a(int var1) { + if(var1 >= 0 && var1 < this.field_96192_v.size()) { + McoServer var2 = (McoServer)this.field_96192_v.get(var1); + this.field_96194_t.func_98248_d(); + GuiScreenLongRunningTask var3 = new GuiScreenLongRunningTask(this.mc, this, new TaskOnlineConnect(this, var2)); + var3.func_98117_g(); + this.mc.displayGuiScreen(var3); + } + + } + + private void func_101008_c(int var1, int var2, int var3, int var4) { + this.mc.renderEngine.bindTexture("/gui/gui.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glPushMatrix(); + GL11.glScalef(0.5F, 0.5F, 0.5F); + this.drawTexturedModalRect(var1 * 2, var2 * 2, 191, 0, 16, 15); + GL11.glPopMatrix(); + if(var3 >= var1 && var3 <= var1 + 9 && var4 >= var2 && var4 <= var2 + 9) { + this.field_96195_s = "Expired World"; + } + + } + + private void func_104039_b(int var1, int var2, int var3, int var4, int var5) { + if(this.field_104044_y % 20 < 10) { + this.mc.renderEngine.bindTexture("/gui/gui.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glPushMatrix(); + GL11.glScalef(0.5F, 0.5F, 0.5F); + this.drawTexturedModalRect(var1 * 2, var2 * 2, 207, 0, 16, 15); + GL11.glPopMatrix(); + } + + if(var3 >= var1 && var3 <= var1 + 9 && var4 >= var2 && var4 <= var2 + 9) { + if(var5 == 0) { + this.field_96195_s = "Expires in < a day"; + } else { + this.field_96195_s = "Expires in " + var5 + (var5 > 1 ? " days" : " day"); + } + } + + } + + private void func_101006_d(int var1, int var2, int var3, int var4) { + this.mc.renderEngine.bindTexture("/gui/gui.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glPushMatrix(); + GL11.glScalef(0.5F, 0.5F, 0.5F); + this.drawTexturedModalRect(var1 * 2, var2 * 2, 207, 0, 16, 15); + GL11.glPopMatrix(); + if(var3 >= var1 && var3 <= var1 + 9 && var4 >= var2 && var4 <= var2 + 9) { + this.field_96195_s = "Open World"; + } + + } + + private void func_101001_e(int var1, int var2, int var3, int var4) { + this.mc.renderEngine.bindTexture("/gui/gui.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glPushMatrix(); + GL11.glScalef(0.5F, 0.5F, 0.5F); + this.drawTexturedModalRect(var1 * 2, var2 * 2, 223, 0, 16, 15); + GL11.glPopMatrix(); + if(var3 >= var1 && var3 <= var1 + 9 && var4 >= var2 && var4 <= var2 + 9) { + this.field_96195_s = "Closed World"; + } + + } + + protected void func_96165_a(String var1, int var2, int var3) { + if(var1 != null) { + int var4 = var2 + 12; + int var5 = var3 - 12; + int var6 = this.fontRenderer.getStringWidth(var1); + this.drawGradientRect(var4 - 3, var5 - 3, var4 + var6 + 3, var5 + 8 + 3, -1073741824, -1073741824); + this.fontRenderer.drawStringWithShadow(var1, var4, var5, -1); + } + } + + private void func_96174_a(McoServer var1) throws IOException { + if(var1.field_96414_k.equals("")) { + var1.field_96414_k = EnumChatFormatting.GRAY + "" + 0; + } + + var1.field_96415_h = 61; + ServerAddress var2 = ServerAddress.func_78860_a(var1.field_96403_g); + Socket var3 = null; + DataInputStream var4 = null; + DataOutputStream var5 = null; + + try { + var3 = new Socket(); + var3.setSoTimeout(3000); + var3.setTcpNoDelay(true); + var3.setTrafficClass(18); + var3.connect(new InetSocketAddress(var2.getIP(), var2.getPort()), 3000); + var4 = new DataInputStream(var3.getInputStream()); + var5 = new DataOutputStream(var3.getOutputStream()); + var5.write(254); + var5.write(1); + if(var4.read() != 255) { + throw new IOException("Bad message"); + } + + String var6 = Packet.readString(var4, 256); + char[] var7 = var6.toCharArray(); + + for(int var8 = 0; var8 < var7.length; ++var8) { + if(var7[var8] != 167 && var7[var8] != 0 && ChatAllowedCharacters.allowedCharacters.indexOf(var7[var8]) < 0) { + var7[var8] = 63; + } + } + + var6 = new String(var7); + int var9; + int var10; + String[] var27; + if(var6.startsWith("\u00a7") && var6.length() > 1) { + var27 = var6.substring(1).split("\u0000"); + if(MathHelper.parseIntWithDefault(var27[0], 0) == 1) { + var1.field_96415_h = MathHelper.parseIntWithDefault(var27[1], var1.field_96415_h); + var1.field_96413_j = var27[2]; + var9 = MathHelper.parseIntWithDefault(var27[4], 0); + var10 = MathHelper.parseIntWithDefault(var27[5], 0); + if(var9 >= 0 && var10 >= 0) { + var1.field_96414_k = EnumChatFormatting.GRAY + "" + var9; + } else { + var1.field_96414_k = "" + EnumChatFormatting.DARK_GRAY + "???"; + } + } else { + var1.field_96413_j = "???"; + var1.field_96415_h = 62; + var1.field_96414_k = "" + EnumChatFormatting.DARK_GRAY + "???"; + } + } else { + var27 = var6.split("\u00a7"); + var6 = var27[0]; + var9 = -1; + var10 = -1; + + try { + var9 = Integer.parseInt(var27[1]); + var10 = Integer.parseInt(var27[2]); + } catch (Exception var25) { + } + + var1.field_96407_c = EnumChatFormatting.GRAY + var6; + if(var9 >= 0 && var10 > 0) { + var1.field_96414_k = EnumChatFormatting.GRAY + "" + var9; + } else { + var1.field_96414_k = "" + EnumChatFormatting.DARK_GRAY + "???"; + } + + var1.field_96413_j = "1.3"; + var1.field_96415_h = 60; + } + } finally { + try { + if(var4 != null) { + var4.close(); + } + } catch (Throwable var24) { + } + + try { + if(var5 != null) { + var5.close(); + } + } catch (Throwable var23) { + } + + try { + if(var3 != null) { + var3.close(); + } + } catch (Throwable var22) { + } + + } + + } + + static Minecraft func_96177_a(GuiScreenOnlineServers var0) { + return var0.mc; + } + + static int func_98081_a(GuiScreenOnlineServers var0, int var1) { + return var0.field_96199_x = var1; + } + + static Minecraft func_98075_b(GuiScreenOnlineServers var0) { + return var0.mc; + } + + static List func_98094_c(GuiScreenOnlineServers var0) { + return var0.field_96192_v; + } + + static int func_98089_b(GuiScreenOnlineServers var0, int var1) { + return var0.field_96189_n = var1; + } + + static int func_98072_d(GuiScreenOnlineServers var0) { + return var0.field_96189_n; + } + + static GuiButton func_96161_f(GuiScreenOnlineServers var0) { + return var0.field_96190_o; + } + + static Minecraft func_98076_f(GuiScreenOnlineServers var0) { + return var0.mc; + } + + static GuiButton func_98092_g(GuiScreenOnlineServers var0) { + return var0.field_96196_r; + } + + static void func_98078_c(GuiScreenOnlineServers var0, int var1) { + var0.func_96159_a(var1); + } + + static Minecraft func_98091_h(GuiScreenOnlineServers var0) { + return var0.mc; + } + + static FontRenderer func_104038_i(GuiScreenOnlineServers var0) { + return var0.fontRenderer; + } + + static void func_101012_b(GuiScreenOnlineServers var0, int var1, int var2, int var3, int var4) { + var0.func_101008_c(var1, var2, var3, var4); + } + + static void func_101009_c(GuiScreenOnlineServers var0, int var1, int var2, int var3, int var4) { + var0.func_101001_e(var1, var2, var3, var4); + } + + static Minecraft func_104032_j(GuiScreenOnlineServers var0) { + return var0.mc; + } + + static void func_104030_a(GuiScreenOnlineServers var0, int var1, int var2, int var3, int var4, int var5) { + var0.func_104039_b(var1, var2, var3, var4, var5); + } + + static void func_104031_c(GuiScreenOnlineServers var0, int var1, int var2, int var3, int var4) { + var0.func_101006_d(var1, var2, var3, var4); + } + + static FontRenderer func_98084_i(GuiScreenOnlineServers var0) { + return var0.fontRenderer; + } + + static FontRenderer func_101005_j(GuiScreenOnlineServers var0) { + return var0.fontRenderer; + } + + static Object func_101007_h() { + return field_96185_d; + } + + static int func_101010_i() { + return field_96187_c; + } + + static int func_101014_j() { + return field_96187_c++; + } + + static void func_101002_a(GuiScreenOnlineServers var0, McoServer var1) throws IOException { + var0.func_96174_a(var1); + } + + static int func_101013_k() { + return field_96187_c--; + } + + static FontRenderer func_98079_k(GuiScreenOnlineServers var0) { + return var0.fontRenderer; + } + + static FontRenderer func_98087_l(GuiScreenOnlineServers var0) { + return var0.fontRenderer; + } + + static FontRenderer func_98074_m(GuiScreenOnlineServers var0) { + return var0.fontRenderer; + } + + static FontRenderer func_101000_n(GuiScreenOnlineServers var0) { + return var0.fontRenderer; + } + + static Minecraft func_101004_o(GuiScreenOnlineServers var0) { + return var0.mc; + } + + static String func_101011_a(GuiScreenOnlineServers var0, String var1) { + return var0.field_96195_s = var1; + } +} diff --git a/src/net/minecraft/src/GuiScreenOnlineServersSubscreen.java b/src/net/minecraft/src/GuiScreenOnlineServersSubscreen.java new file mode 100644 index 0000000..b2ca090 --- /dev/null +++ b/src/net/minecraft/src/GuiScreenOnlineServersSubscreen.java @@ -0,0 +1,68 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class GuiScreenOnlineServersSubscreen { + private final int field_104074_g; + private final int field_104081_h; + private final int field_104082_i; + private final int field_104080_j; + List field_104079_a = new ArrayList(); + String[] field_104077_b; + String[] field_104078_c; + String[][] field_104075_d; + int field_104076_e = 0; + int field_104073_f = 0; + + public GuiScreenOnlineServersSubscreen(int var1, int var2, int var3, int var4) { + this.field_104074_g = var1; + this.field_104081_h = var2; + this.field_104082_i = var3; + this.field_104080_j = var4; + this.func_104068_a(); + } + + private void func_104068_a() { + this.func_104070_b(); + this.field_104079_a.add(new GuiButton(5005, this.field_104082_i, this.field_104080_j + 1, 212, 20, this.func_104072_c())); + this.field_104079_a.add(new GuiButton(5006, this.field_104082_i, this.field_104080_j + 25, 212, 20, this.func_104067_d())); + } + + private void func_104070_b() { + StringTranslate var1 = StringTranslate.getInstance(); + this.field_104077_b = new String[]{var1.translateKey("options.difficulty.normal"), var1.translateKey("options.difficulty.hard"), var1.translateKey("options.difficulty.peaceful"), var1.translateKey("options.difficulty.easy")}; + this.field_104078_c = new String[]{var1.translateKey("mco.gameMode.survival"), var1.translateKey("mco.gameMode.creative"), var1.translateKey("mco.gameMode.adventure")}; + this.field_104075_d = new String[][]{{var1.translateKey("mco.gameMode.survival.line1"), var1.translateKey("mco.gameMode.survival.line2")}, {var1.translateKey("mco.gameMode.creative.line1"), var1.translateKey("mco.gameMode.creative.line2")}, {var1.translateKey("mco.gameMode.adventure.line1"), var1.translateKey("mco.gameMode.adventure.line2")}}; + } + + private String func_104072_c() { + StringTranslate var1 = StringTranslate.getInstance(); + String var2 = var1.translateKey("options.difficulty"); + return var2 + ": " + this.field_104077_b[this.field_104076_e]; + } + + private String func_104067_d() { + StringTranslate var1 = StringTranslate.getInstance(); + String var2 = var1.translateKey("mco.gameMode"); + return var2 + ": " + this.field_104078_c[this.field_104073_f]; + } + + void func_104069_a(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 5005) { + this.field_104076_e = (this.field_104076_e + 1) % this.field_104077_b.length; + var1.displayString = this.func_104072_c(); + } else if(var1.id == 5006) { + this.field_104073_f = (this.field_104073_f + 1) % this.field_104078_c.length; + var1.displayString = this.func_104067_d(); + } + + } + } + + public void func_104071_a(GuiScreen var1, FontRenderer var2) { + var1.drawString(var2, this.field_104075_d[this.field_104073_f][0], this.field_104082_i, this.field_104080_j + 50, 10526880); + var1.drawString(var2, this.field_104075_d[this.field_104073_f][1], this.field_104082_i, this.field_104080_j + 60, 10526880); + } +} diff --git a/src/net/minecraft/src/GuiScreenResetWorld.java b/src/net/minecraft/src/GuiScreenResetWorld.java new file mode 100644 index 0000000..33d4a50 --- /dev/null +++ b/src/net/minecraft/src/GuiScreenResetWorld.java @@ -0,0 +1,83 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.input.Keyboard; + +public class GuiScreenResetWorld extends GuiScreen { + private GuiScreen field_96152_a; + private McoServer field_96150_b; + private GuiTextField field_96151_c; + private final int field_96149_d = 1; + private final int field_96153_n = 2; + private GuiButton field_96154_o; + + public GuiScreenResetWorld(GuiScreen var1, McoServer var2) { + this.field_96152_a = var1; + this.field_96150_b = var2; + } + + public void updateScreen() { + this.field_96151_c.updateCursorCounter(); + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.buttonList.add(this.field_96154_o = new GuiButton(1, this.width / 2 - 100, this.height / 4 + 96 + 12, var1.translateKey("mco.configure.world.buttons.reset"))); + this.buttonList.add(new GuiButton(2, this.width / 2 - 100, this.height / 4 + 120 + 12, var1.translateKey("gui.cancel"))); + this.field_96151_c = new GuiTextField(this.fontRenderer, this.width / 2 - 100, 109, 200, 20); + this.field_96151_c.setFocused(true); + this.field_96151_c.setMaxStringLength(32); + this.field_96151_c.setText(""); + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + protected void keyTyped(char var1, int var2) { + this.field_96151_c.textboxKeyTyped(var1, var2); + if(var1 == 13) { + this.actionPerformed(this.field_96154_o); + } + + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 2) { + this.mc.displayGuiScreen(this.field_96152_a); + } else if(var1.id == 1) { + TaskResetWorld var2 = new TaskResetWorld(this, this.field_96150_b.field_96408_a, this.field_96151_c.getText()); + GuiScreenLongRunningTask var3 = new GuiScreenLongRunningTask(this.mc, this.field_96152_a, var2); + var3.func_98117_g(); + this.mc.displayGuiScreen(var3); + } + + } + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + this.field_96151_c.mouseClicked(var1, var2, var3); + } + + public void drawScreen(int var1, int var2, float var3) { + StringTranslate var4 = StringTranslate.getInstance(); + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, var4.translateKey("mco.reset.world.title"), this.width / 2, 17, 16777215); + this.drawCenteredString(this.fontRenderer, var4.translateKey("mco.reset.world.warning"), this.width / 2, 66, 16711680); + this.drawString(this.fontRenderer, var4.translateKey("mco.reset.world.seed"), this.width / 2 - 100, 96, 10526880); + this.field_96151_c.drawTextBox(); + super.drawScreen(var1, var2, var3); + } + + static GuiScreen func_96148_a(GuiScreenResetWorld var0) { + return var0.field_96152_a; + } + + static Minecraft func_96147_b(GuiScreenResetWorld var0) { + return var0.mc; + } +} diff --git a/src/net/minecraft/src/GuiScreenSelectLocation.java b/src/net/minecraft/src/GuiScreenSelectLocation.java new file mode 100644 index 0000000..011c9c8 --- /dev/null +++ b/src/net/minecraft/src/GuiScreenSelectLocation.java @@ -0,0 +1,346 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +public abstract class GuiScreenSelectLocation { + private final Minecraft field_104092_f; + private int field_104093_g; + private int field_104105_h; + protected int field_104098_a; + protected int field_104096_b; + private int field_104106_i; + private int field_104103_j; + protected final int field_104097_c; + private int field_104104_k; + private int field_104101_l; + protected int field_104094_d; + protected int field_104095_e; + private float field_104102_m = -2.0F; + private float field_104099_n; + private float field_104100_o; + private int field_104111_p = -1; + private long field_104110_q = 0L; + private boolean field_104109_r = true; + private boolean field_104108_s; + private int field_104107_t; + + public GuiScreenSelectLocation(Minecraft var1, int var2, int var3, int var4, int var5, int var6) { + this.field_104092_f = var1; + this.field_104093_g = var2; + this.field_104105_h = var3; + this.field_104098_a = var4; + this.field_104096_b = var5; + this.field_104097_c = var6; + this.field_104103_j = 0; + this.field_104106_i = var2; + } + + public void func_104084_a(int var1, int var2, int var3, int var4) { + this.field_104093_g = var1; + this.field_104105_h = var2; + this.field_104098_a = var3; + this.field_104096_b = var4; + this.field_104103_j = 0; + this.field_104106_i = var1; + } + + protected abstract int getSize(); + + protected abstract void elementClicked(int var1, boolean var2); + + protected abstract boolean isSelected(int var1); + + protected abstract boolean func_104086_b(int var1); + + protected int getContentHeight() { + return this.getSize() * this.field_104097_c + this.field_104107_t; + } + + protected abstract void drawBackground(); + + protected abstract void drawSlot(int var1, int var2, int var3, int var4, Tessellator var5); + + protected void func_104088_a(int var1, int var2, Tessellator var3) { + } + + protected void func_104089_a(int var1, int var2) { + } + + protected void func_104087_b(int var1, int var2) { + } + + private void func_104091_h() { + int var1 = this.func_104085_d(); + if(var1 < 0) { + var1 /= 2; + } + + if(this.field_104100_o < 0.0F) { + this.field_104100_o = 0.0F; + } + + if(this.field_104100_o > (float)var1) { + this.field_104100_o = (float)var1; + } + + } + + public int func_104085_d() { + return this.getContentHeight() - (this.field_104096_b - this.field_104098_a - 4); + } + + public void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == this.field_104104_k) { + this.field_104100_o -= (float)(this.field_104097_c * 2 / 3); + this.field_104102_m = -2.0F; + this.func_104091_h(); + } else if(var1.id == this.field_104101_l) { + this.field_104100_o += (float)(this.field_104097_c * 2 / 3); + this.field_104102_m = -2.0F; + this.func_104091_h(); + } + + } + } + + public void drawScreen(int var1, int var2, float var3) { + this.field_104094_d = var1; + this.field_104095_e = var2; + this.drawBackground(); + int var4 = this.getSize(); + int var5 = this.func_104090_g(); + int var6 = var5 + 6; + int var9; + int var10; + int var11; + int var13; + int var20; + if(Mouse.isButtonDown(0)) { + if(this.field_104102_m == -1.0F) { + boolean var16 = true; + if(var2 >= this.field_104098_a && var2 <= this.field_104096_b) { + int var8 = this.field_104093_g / 2 - 110; + var9 = this.field_104093_g / 2 + 110; + var10 = var2 - this.field_104098_a - this.field_104107_t + (int)this.field_104100_o - 4; + var11 = var10 / this.field_104097_c; + if(var1 >= var8 && var1 <= var9 && var11 >= 0 && var10 >= 0 && var11 < var4) { + boolean var12 = var11 == this.field_104111_p && Minecraft.getSystemTime() - this.field_104110_q < 250L; + this.elementClicked(var11, var12); + this.field_104111_p = var11; + this.field_104110_q = Minecraft.getSystemTime(); + } else if(var1 >= var8 && var1 <= var9 && var10 < 0) { + this.func_104089_a(var1 - var8, var2 - this.field_104098_a + (int)this.field_104100_o - 4); + var16 = false; + } + + if(var1 >= var5 && var1 <= var6) { + this.field_104099_n = -1.0F; + var20 = this.func_104085_d(); + if(var20 < 1) { + var20 = 1; + } + + var13 = (int)((float)((this.field_104096_b - this.field_104098_a) * (this.field_104096_b - this.field_104098_a)) / (float)this.getContentHeight()); + if(var13 < 32) { + var13 = 32; + } + + if(var13 > this.field_104096_b - this.field_104098_a - 8) { + var13 = this.field_104096_b - this.field_104098_a - 8; + } + + this.field_104099_n /= (float)(this.field_104096_b - this.field_104098_a - var13) / (float)var20; + } else { + this.field_104099_n = 1.0F; + } + + if(var16) { + this.field_104102_m = (float)var2; + } else { + this.field_104102_m = -2.0F; + } + } else { + this.field_104102_m = -2.0F; + } + } else if(this.field_104102_m >= 0.0F) { + this.field_104100_o -= ((float)var2 - this.field_104102_m) * this.field_104099_n; + this.field_104102_m = (float)var2; + } + } else { + while(true) { + if(this.field_104092_f.gameSettings.touchscreen || !Mouse.next()) { + this.field_104102_m = -1.0F; + break; + } + + int var7 = Mouse.getEventDWheel(); + if(var7 != 0) { + if(var7 > 0) { + var7 = -1; + } else if(var7 < 0) { + var7 = 1; + } + + this.field_104100_o += (float)(var7 * this.field_104097_c / 2); + } + } + } + + this.func_104091_h(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_FOG); + Tessellator var18 = Tessellator.instance; + this.field_104092_f.renderEngine.bindTexture("/gui/background.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + float var17 = 32.0F; + var18.startDrawingQuads(); + var18.setColorOpaque_I(2105376); + var18.addVertexWithUV((double)this.field_104103_j, (double)this.field_104096_b, 0.0D, (double)((float)this.field_104103_j / var17), (double)((float)(this.field_104096_b + (int)this.field_104100_o) / var17)); + var18.addVertexWithUV((double)this.field_104106_i, (double)this.field_104096_b, 0.0D, (double)((float)this.field_104106_i / var17), (double)((float)(this.field_104096_b + (int)this.field_104100_o) / var17)); + var18.addVertexWithUV((double)this.field_104106_i, (double)this.field_104098_a, 0.0D, (double)((float)this.field_104106_i / var17), (double)((float)(this.field_104098_a + (int)this.field_104100_o) / var17)); + var18.addVertexWithUV((double)this.field_104103_j, (double)this.field_104098_a, 0.0D, (double)((float)this.field_104103_j / var17), (double)((float)(this.field_104098_a + (int)this.field_104100_o) / var17)); + var18.draw(); + var9 = this.field_104093_g / 2 - 92 - 16; + var10 = this.field_104098_a + 4 - (int)this.field_104100_o; + if(this.field_104108_s) { + this.func_104088_a(var9, var10, var18); + } + + int var14; + for(var11 = 0; var11 < var4; ++var11) { + var20 = var10 + var11 * this.field_104097_c + this.field_104107_t; + var13 = this.field_104097_c - 4; + if(var20 <= this.field_104096_b && var20 + var13 >= this.field_104098_a) { + int var15; + if(this.field_104109_r && this.func_104086_b(var11)) { + var14 = this.field_104093_g / 2 - 110; + var15 = this.field_104093_g / 2 + 110; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + var18.startDrawingQuads(); + var18.setColorOpaque_I(0); + var18.addVertexWithUV((double)var14, (double)(var20 + var13 + 2), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)var15, (double)(var20 + var13 + 2), 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)var15, (double)(var20 - 2), 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)var14, (double)(var20 - 2), 0.0D, 0.0D, 0.0D); + var18.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + if(this.field_104109_r && this.isSelected(var11)) { + var14 = this.field_104093_g / 2 - 110; + var15 = this.field_104093_g / 2 + 110; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + var18.startDrawingQuads(); + var18.setColorOpaque_I(8421504); + var18.addVertexWithUV((double)var14, (double)(var20 + var13 + 2), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)var15, (double)(var20 + var13 + 2), 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)var15, (double)(var20 - 2), 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)var14, (double)(var20 - 2), 0.0D, 0.0D, 0.0D); + var18.setColorOpaque_I(0); + var18.addVertexWithUV((double)(var14 + 1), (double)(var20 + var13 + 1), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)(var15 - 1), (double)(var20 + var13 + 1), 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)(var15 - 1), (double)(var20 - 1), 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)(var14 + 1), (double)(var20 - 1), 0.0D, 0.0D, 0.0D); + var18.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + this.drawSlot(var11, var9, var20, var13, var18); + } + } + + GL11.glDisable(GL11.GL_DEPTH_TEST); + byte var19 = 4; + this.func_104083_b(0, this.field_104098_a, 255, 255); + this.func_104083_b(this.field_104096_b, this.field_104105_h, 255, 255); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glDisable(GL11.GL_TEXTURE_2D); + var18.startDrawingQuads(); + var18.setColorRGBA_I(0, 0); + var18.addVertexWithUV((double)this.field_104103_j, (double)(this.field_104098_a + var19), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)this.field_104106_i, (double)(this.field_104098_a + var19), 0.0D, 1.0D, 1.0D); + var18.setColorRGBA_I(0, 255); + var18.addVertexWithUV((double)this.field_104106_i, (double)this.field_104098_a, 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)this.field_104103_j, (double)this.field_104098_a, 0.0D, 0.0D, 0.0D); + var18.draw(); + var18.startDrawingQuads(); + var18.setColorRGBA_I(0, 255); + var18.addVertexWithUV((double)this.field_104103_j, (double)this.field_104096_b, 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)this.field_104106_i, (double)this.field_104096_b, 0.0D, 1.0D, 1.0D); + var18.setColorRGBA_I(0, 0); + var18.addVertexWithUV((double)this.field_104106_i, (double)(this.field_104096_b - var19), 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)this.field_104103_j, (double)(this.field_104096_b - var19), 0.0D, 0.0D, 0.0D); + var18.draw(); + var20 = this.func_104085_d(); + if(var20 > 0) { + var13 = (this.field_104096_b - this.field_104098_a) * (this.field_104096_b - this.field_104098_a) / this.getContentHeight(); + if(var13 < 32) { + var13 = 32; + } + + if(var13 > this.field_104096_b - this.field_104098_a - 8) { + var13 = this.field_104096_b - this.field_104098_a - 8; + } + + var14 = (int)this.field_104100_o * (this.field_104096_b - this.field_104098_a - var13) / var20 + this.field_104098_a; + if(var14 < this.field_104098_a) { + var14 = this.field_104098_a; + } + + var18.startDrawingQuads(); + var18.setColorRGBA_I(0, 255); + var18.addVertexWithUV((double)var5, (double)this.field_104096_b, 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)var6, (double)this.field_104096_b, 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)var6, (double)this.field_104098_a, 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)var5, (double)this.field_104098_a, 0.0D, 0.0D, 0.0D); + var18.draw(); + var18.startDrawingQuads(); + var18.setColorRGBA_I(8421504, 255); + var18.addVertexWithUV((double)var5, (double)(var14 + var13), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)var6, (double)(var14 + var13), 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)var6, (double)var14, 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)var5, (double)var14, 0.0D, 0.0D, 0.0D); + var18.draw(); + var18.startDrawingQuads(); + var18.setColorRGBA_I(12632256, 255); + var18.addVertexWithUV((double)var5, (double)(var14 + var13 - 1), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)(var6 - 1), (double)(var14 + var13 - 1), 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)(var6 - 1), (double)var14, 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)var5, (double)var14, 0.0D, 0.0D, 0.0D); + var18.draw(); + } + + this.func_104087_b(var1, var2); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_BLEND); + } + + protected int func_104090_g() { + return this.field_104093_g / 2 + 124; + } + + private void func_104083_b(int var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + this.field_104092_f.renderEngine.bindTexture("/gui/background.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + float var6 = 32.0F; + var5.startDrawingQuads(); + var5.setColorRGBA_I(4210752, var4); + var5.addVertexWithUV(0.0D, (double)var2, 0.0D, 0.0D, (double)((float)var2 / var6)); + var5.addVertexWithUV((double)this.field_104093_g, (double)var2, 0.0D, (double)((float)this.field_104093_g / var6), (double)((float)var2 / var6)); + var5.setColorRGBA_I(4210752, var3); + var5.addVertexWithUV((double)this.field_104093_g, (double)var1, 0.0D, (double)((float)this.field_104093_g / var6), (double)((float)var1 / var6)); + var5.addVertexWithUV(0.0D, (double)var1, 0.0D, 0.0D, (double)((float)var1 / var6)); + var5.draw(); + } +} diff --git a/src/net/minecraft/src/GuiScreenServerList.java b/src/net/minecraft/src/GuiScreenServerList.java new file mode 100644 index 0000000..f859d5f --- /dev/null +++ b/src/net/minecraft/src/GuiScreenServerList.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +import org.lwjgl.input.Keyboard; + +public class GuiScreenServerList extends GuiScreen { + private final GuiScreen guiScreen; + private final ServerData theServerData; + private GuiTextField serverTextField; + + public GuiScreenServerList(GuiScreen var1, ServerData var2) { + this.guiScreen = var1; + this.theServerData = var2; + } + + public void updateScreen() { + this.serverTextField.updateCursorCounter(); + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + Keyboard.enableRepeatEvents(true); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96 + 12, var1.translateKey("selectServer.select"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 120 + 12, var1.translateKey("gui.cancel"))); + this.serverTextField = new GuiTextField(this.fontRenderer, this.width / 2 - 100, 116, 200, 20); + this.serverTextField.setMaxStringLength(128); + this.serverTextField.setFocused(true); + this.serverTextField.setText(this.mc.gameSettings.lastServer); + ((GuiButton)this.buttonList.get(0)).enabled = this.serverTextField.getText().length() > 0 && this.serverTextField.getText().split(":").length > 0; + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + this.mc.gameSettings.lastServer = this.serverTextField.getText(); + this.mc.gameSettings.saveOptions(); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 1) { + this.guiScreen.confirmClicked(false, 0); + } else if(var1.id == 0) { + this.theServerData.serverIP = this.serverTextField.getText(); + this.guiScreen.confirmClicked(true, 0); + } + + } + } + + protected void keyTyped(char var1, int var2) { + if(this.serverTextField.textboxKeyTyped(var1, var2)) { + ((GuiButton)this.buttonList.get(0)).enabled = this.serverTextField.getText().length() > 0 && this.serverTextField.getText().split(":").length > 0; + } else if(var2 == 28) { + this.actionPerformed((GuiButton)this.buttonList.get(0)); + } + + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + this.serverTextField.mouseClicked(var1, var2, var3); + } + + public void drawScreen(int var1, int var2, float var3) { + StringTranslate var4 = StringTranslate.getInstance(); + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, var4.translateKey("selectServer.direct"), this.width / 2, this.height / 4 - 60 + 20, 16777215); + this.drawString(this.fontRenderer, var4.translateKey("addServer.enterIp"), this.width / 2 - 100, 100, 10526880); + this.serverTextField.drawTextBox(); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiScreenSubscription.java b/src/net/minecraft/src/GuiScreenSubscription.java new file mode 100644 index 0000000..15bfbcd --- /dev/null +++ b/src/net/minecraft/src/GuiScreenSubscription.java @@ -0,0 +1,82 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.text.SimpleDateFormat; +import java.util.GregorianCalendar; +import java.util.TimeZone; +import org.lwjgl.input.Keyboard; + +public class GuiScreenSubscription extends GuiScreen { + private final GuiScreen field_98067_a; + private final McoServer field_98065_b; + private final int field_98066_c = 0; + private final int field_98064_d = 1; + private int field_98068_n; + private String field_98069_o; + + public GuiScreenSubscription(GuiScreen var1, McoServer var2) { + this.field_98067_a = var1; + this.field_98065_b = var2; + } + + public void updateScreen() { + } + + public void initGui() { + this.func_98063_a(this.field_98065_b.field_96408_a); + StringTranslate var1 = StringTranslate.getInstance(); + Keyboard.enableRepeatEvents(true); + this.buttonList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 120 + 12, var1.translateKey("gui.cancel"))); + } + + private void func_98063_a(long var1) { + McoClient var3 = new McoClient(this.mc.session); + + try { + ValueObjectSubscription var4 = var3.func_98177_f(var1); + this.field_98068_n = var4.field_98170_b; + this.field_98069_o = this.func_98062_b(var4.field_98171_a); + } catch (ExceptionMcoService var5) { + } catch (IOException var6) { + } + + } + + private String func_98062_b(long var1) { + GregorianCalendar var3 = new GregorianCalendar(TimeZone.getDefault()); + var3.setTimeInMillis(var1); + return SimpleDateFormat.getDateTimeInstance().format(var3.getTime()); + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 0) { + this.mc.displayGuiScreen(this.field_98067_a); + } else if(var1.id == 1) { + } + + } + } + + protected void keyTyped(char var1, int var2) { + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + } + + public void drawScreen(int var1, int var2, float var3) { + StringTranslate var4 = StringTranslate.getInstance(); + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, var4.translateKey("mco.configure.world.subscription.title"), this.width / 2, 17, 16777215); + this.drawString(this.fontRenderer, var4.translateKey("mco.configure.world.subscription.start"), this.width / 2 - 100, 53, 10526880); + this.drawString(this.fontRenderer, this.field_98069_o, this.width / 2 - 100, 66, 16777215); + this.drawString(this.fontRenderer, var4.translateKey("mco.configure.world.subscription.daysleft"), this.width / 2 - 100, 85, 10526880); + this.drawString(this.fontRenderer, String.valueOf(this.field_98068_n), this.width / 2 - 100, 98, 16777215); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiSelectWorld.java b/src/net/minecraft/src/GuiSelectWorld.java new file mode 100644 index 0000000..b30539e --- /dev/null +++ b/src/net/minecraft/src/GuiSelectWorld.java @@ -0,0 +1,217 @@ +package net.minecraft.src; + +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Collections; +import java.util.List; + +public class GuiSelectWorld extends GuiScreen { + private final DateFormat dateFormatter = new SimpleDateFormat(); + protected GuiScreen parentScreen; + protected String screenTitle = "Select world"; + private boolean selected = false; + private int selectedWorld; + private List saveList; + private GuiWorldSlot worldSlotContainer; + private String localizedWorldText; + private String localizedMustConvertText; + private String[] localizedGameModeText = new String[3]; + private boolean deleting; + private GuiButton buttonDelete; + private GuiButton buttonSelect; + private GuiButton buttonRename; + private GuiButton buttonRecreate; + + public GuiSelectWorld(GuiScreen var1) { + this.parentScreen = var1; + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + this.screenTitle = var1.translateKey("selectWorld.title"); + + try { + this.loadSaves(); + } catch (AnvilConverterException var3) { + var3.printStackTrace(); + this.mc.displayGuiScreen(new GuiErrorScreen("Unable to load words", var3.getMessage())); + return; + } + + this.localizedWorldText = var1.translateKey("selectWorld.world"); + this.localizedMustConvertText = var1.translateKey("selectWorld.conversion"); + this.localizedGameModeText[EnumGameType.SURVIVAL.getID()] = var1.translateKey("gameMode.survival"); + this.localizedGameModeText[EnumGameType.CREATIVE.getID()] = var1.translateKey("gameMode.creative"); + this.localizedGameModeText[EnumGameType.ADVENTURE.getID()] = var1.translateKey("gameMode.adventure"); + this.worldSlotContainer = new GuiWorldSlot(this); + this.worldSlotContainer.registerScrollButtons(this.buttonList, 4, 5); + this.initButtons(); + } + + private void loadSaves() throws AnvilConverterException { + ISaveFormat var1 = this.mc.getSaveLoader(); + this.saveList = var1.getSaveList(); + Collections.sort(this.saveList); + this.selectedWorld = -1; + } + + protected String getSaveFileName(int var1) { + return ((SaveFormatComparator)this.saveList.get(var1)).getFileName(); + } + + protected String getSaveName(int var1) { + String var2 = ((SaveFormatComparator)this.saveList.get(var1)).getDisplayName(); + if(var2 == null || MathHelper.stringNullOrLengthZero(var2)) { + StringTranslate var3 = StringTranslate.getInstance(); + var2 = var3.translateKey("selectWorld.world") + " " + (var1 + 1); + } + + return var2; + } + + public void initButtons() { + StringTranslate var1 = StringTranslate.getInstance(); + this.buttonList.add(this.buttonSelect = new GuiButton(1, this.width / 2 - 154, this.height - 52, 150, 20, var1.translateKey("selectWorld.select"))); + this.buttonList.add(new GuiButton(3, this.width / 2 + 4, this.height - 52, 150, 20, var1.translateKey("selectWorld.create"))); + this.buttonList.add(this.buttonRename = new GuiButton(6, this.width / 2 - 154, this.height - 28, 72, 20, var1.translateKey("selectWorld.rename"))); + this.buttonList.add(this.buttonDelete = new GuiButton(2, this.width / 2 - 76, this.height - 28, 72, 20, var1.translateKey("selectWorld.delete"))); + this.buttonList.add(this.buttonRecreate = new GuiButton(7, this.width / 2 + 4, this.height - 28, 72, 20, var1.translateKey("selectWorld.recreate"))); + this.buttonList.add(new GuiButton(0, this.width / 2 + 82, this.height - 28, 72, 20, var1.translateKey("gui.cancel"))); + this.buttonSelect.enabled = false; + this.buttonDelete.enabled = false; + this.buttonRename.enabled = false; + this.buttonRecreate.enabled = false; + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 2) { + String var2 = this.getSaveName(this.selectedWorld); + if(var2 != null) { + this.deleting = true; + GuiYesNo var3 = getDeleteWorldScreen(this, var2, this.selectedWorld); + this.mc.displayGuiScreen(var3); + } + } else if(var1.id == 1) { + this.selectWorld(this.selectedWorld); + } else if(var1.id == 3) { + this.mc.displayGuiScreen(new GuiCreateWorld(this)); + } else if(var1.id == 6) { + this.mc.displayGuiScreen(new GuiRenameWorld(this, this.getSaveFileName(this.selectedWorld))); + } else if(var1.id == 0) { + this.mc.displayGuiScreen(this.parentScreen); + } else if(var1.id == 7) { + GuiCreateWorld var5 = new GuiCreateWorld(this); + ISaveHandler var6 = this.mc.getSaveLoader().getSaveLoader(this.getSaveFileName(this.selectedWorld), false); + WorldInfo var4 = var6.loadWorldInfo(); + var6.flush(); + var5.func_82286_a(var4); + this.mc.displayGuiScreen(var5); + } else { + this.worldSlotContainer.actionPerformed(var1); + } + + } + } + + public void selectWorld(int var1) { + this.mc.displayGuiScreen((GuiScreen)null); + if(!this.selected) { + this.selected = true; + String var2 = this.getSaveFileName(var1); + if(var2 == null) { + var2 = "World" + var1; + } + + String var3 = this.getSaveName(var1); + if(var3 == null) { + var3 = "World" + var1; + } + + if(this.mc.getSaveLoader().canLoadWorld(var2)) { + this.mc.launchIntegratedServer(var2, var3, (WorldSettings)null); + } + + } + } + + public void confirmClicked(boolean var1, int var2) { + if(this.deleting) { + this.deleting = false; + if(var1) { + ISaveFormat var3 = this.mc.getSaveLoader(); + var3.flushCache(); + var3.deleteWorldDirectory(this.getSaveFileName(var2)); + + try { + this.loadSaves(); + } catch (AnvilConverterException var5) { + var5.printStackTrace(); + } + } + + this.mc.displayGuiScreen(this); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + this.worldSlotContainer.drawScreen(var1, var2, var3); + this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215); + super.drawScreen(var1, var2, var3); + } + + public static GuiYesNo getDeleteWorldScreen(GuiScreen var0, String var1, int var2) { + StringTranslate var3 = StringTranslate.getInstance(); + String var4 = var3.translateKey("selectWorld.deleteQuestion"); + String var5 = "\'" + var1 + "\' " + var3.translateKey("selectWorld.deleteWarning"); + String var6 = var3.translateKey("selectWorld.deleteButton"); + String var7 = var3.translateKey("gui.cancel"); + GuiYesNo var8 = new GuiYesNo(var0, var4, var5, var6, var7, var2); + return var8; + } + + static List getSize(GuiSelectWorld var0) { + return var0.saveList; + } + + static int onElementSelected(GuiSelectWorld var0, int var1) { + return var0.selectedWorld = var1; + } + + static int getSelectedWorld(GuiSelectWorld var0) { + return var0.selectedWorld; + } + + static GuiButton getSelectButton(GuiSelectWorld var0) { + return var0.buttonSelect; + } + + static GuiButton getRenameButton(GuiSelectWorld var0) { + return var0.buttonDelete; + } + + static GuiButton getDeleteButton(GuiSelectWorld var0) { + return var0.buttonRename; + } + + static GuiButton func_82312_f(GuiSelectWorld var0) { + return var0.buttonRecreate; + } + + static String func_82313_g(GuiSelectWorld var0) { + return var0.localizedWorldText; + } + + static DateFormat func_82315_h(GuiSelectWorld var0) { + return var0.dateFormatter; + } + + static String func_82311_i(GuiSelectWorld var0) { + return var0.localizedMustConvertText; + } + + static String[] func_82314_j(GuiSelectWorld var0) { + return var0.localizedGameModeText; + } +} diff --git a/src/net/minecraft/src/GuiShareToLan.java b/src/net/minecraft/src/GuiShareToLan.java new file mode 100644 index 0000000..9045b23 --- /dev/null +++ b/src/net/minecraft/src/GuiShareToLan.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +public class GuiShareToLan extends GuiScreen { + private final GuiScreen parentScreen; + private GuiButton buttonAllowCommandsToggle; + private GuiButton buttonGameMode; + private String gameMode = "survival"; + private boolean allowCommands = false; + + public GuiShareToLan(GuiScreen var1) { + this.parentScreen = var1; + } + + public void initGui() { + this.buttonList.clear(); + this.buttonList.add(new GuiButton(101, this.width / 2 - 155, this.height - 28, 150, 20, StatCollector.translateToLocal("lanServer.start"))); + this.buttonList.add(new GuiButton(102, this.width / 2 + 5, this.height - 28, 150, 20, StatCollector.translateToLocal("gui.cancel"))); + this.buttonList.add(this.buttonGameMode = new GuiButton(104, this.width / 2 - 155, 100, 150, 20, StatCollector.translateToLocal("selectWorld.gameMode"))); + this.buttonList.add(this.buttonAllowCommandsToggle = new GuiButton(103, this.width / 2 + 5, 100, 150, 20, StatCollector.translateToLocal("selectWorld.allowCommands"))); + this.func_74088_g(); + } + + private void func_74088_g() { + StringTranslate var1 = StringTranslate.getInstance(); + this.buttonGameMode.displayString = var1.translateKey("selectWorld.gameMode") + " " + var1.translateKey("selectWorld.gameMode." + this.gameMode); + this.buttonAllowCommandsToggle.displayString = var1.translateKey("selectWorld.allowCommands") + " "; + if(this.allowCommands) { + this.buttonAllowCommandsToggle.displayString = this.buttonAllowCommandsToggle.displayString + var1.translateKey("options.on"); + } else { + this.buttonAllowCommandsToggle.displayString = this.buttonAllowCommandsToggle.displayString + var1.translateKey("options.off"); + } + + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 102) { + this.mc.displayGuiScreen(this.parentScreen); + } else if(var1.id == 104) { + if(this.gameMode.equals("survival")) { + this.gameMode = "creative"; + } else if(this.gameMode.equals("creative")) { + this.gameMode = "adventure"; + } else { + this.gameMode = "survival"; + } + + this.func_74088_g(); + } else if(var1.id == 103) { + this.allowCommands = !this.allowCommands; + this.func_74088_g(); + } else if(var1.id == 101) { + this.mc.displayGuiScreen((GuiScreen)null); + String var2 = this.mc.getIntegratedServer().shareToLAN(EnumGameType.getByName(this.gameMode), this.allowCommands); + String var3 = ""; + if(var2 != null) { + var3 = this.mc.thePlayer.translateString("commands.publish.started", new Object[]{var2}); + } else { + var3 = this.mc.thePlayer.translateString("commands.publish.failed", new Object[0]); + } + + this.mc.ingameGUI.getChatGUI().printChatMessage(var3); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, StatCollector.translateToLocal("lanServer.title"), this.width / 2, 50, 16777215); + this.drawCenteredString(this.fontRenderer, StatCollector.translateToLocal("lanServer.otherPlayers"), this.width / 2, 82, 16777215); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiSleepMP.java b/src/net/minecraft/src/GuiSleepMP.java new file mode 100644 index 0000000..5ee82d6 --- /dev/null +++ b/src/net/minecraft/src/GuiSleepMP.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +public class GuiSleepMP extends GuiChat { + public void initGui() { + super.initGui(); + StringTranslate var1 = StringTranslate.getInstance(); + this.buttonList.add(new GuiButton(1, this.width / 2 - 100, this.height - 40, var1.translateKey("multiplayer.stopSleeping"))); + } + + protected void keyTyped(char var1, int var2) { + if(var2 == 1) { + this.wakeEntity(); + } else if(var2 == 28) { + String var3 = this.inputField.getText().trim(); + if(var3.length() > 0) { + this.mc.thePlayer.sendChatMessage(var3); + } + + this.inputField.setText(""); + this.mc.ingameGUI.getChatGUI().resetScroll(); + } else { + super.keyTyped(var1, var2); + } + + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 1) { + this.wakeEntity(); + } else { + super.actionPerformed(var1); + } + + } + + private void wakeEntity() { + NetClientHandler var1 = this.mc.thePlayer.sendQueue; + var1.addToSendQueue(new Packet19EntityAction(this.mc.thePlayer, 3)); + } +} diff --git a/src/net/minecraft/src/GuiSlider.java b/src/net/minecraft/src/GuiSlider.java new file mode 100644 index 0000000..c90b74a --- /dev/null +++ b/src/net/minecraft/src/GuiSlider.java @@ -0,0 +1,66 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +public class GuiSlider extends GuiButton { + public float sliderValue = 1.0F; + public boolean dragging = false; + private EnumOptions idFloat = null; + + public GuiSlider(int var1, int var2, int var3, EnumOptions var4, String var5, float var6) { + super(var1, var2, var3, 150, 20, var5); + this.idFloat = var4; + this.sliderValue = var6; + } + + protected int getHoverState(boolean var1) { + return 0; + } + + protected void mouseDragged(Minecraft var1, int var2, int var3) { + if(this.drawButton) { + if(this.dragging) { + this.sliderValue = (float)(var2 - (this.xPosition + 4)) / (float)(this.width - 8); + if(this.sliderValue < 0.0F) { + this.sliderValue = 0.0F; + } + + if(this.sliderValue > 1.0F) { + this.sliderValue = 1.0F; + } + + var1.gameSettings.setOptionFloatValue(this.idFloat, this.sliderValue); + this.displayString = var1.gameSettings.getKeyBinding(this.idFloat); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.drawTexturedModalRect(this.xPosition + (int)(this.sliderValue * (float)(this.width - 8)), this.yPosition, 0, 66, 4, 20); + this.drawTexturedModalRect(this.xPosition + (int)(this.sliderValue * (float)(this.width - 8)) + 4, this.yPosition, 196, 66, 4, 20); + } + } + + public boolean mousePressed(Minecraft var1, int var2, int var3) { + if(super.mousePressed(var1, var2, var3)) { + this.sliderValue = (float)(var2 - (this.xPosition + 4)) / (float)(this.width - 8); + if(this.sliderValue < 0.0F) { + this.sliderValue = 0.0F; + } + + if(this.sliderValue > 1.0F) { + this.sliderValue = 1.0F; + } + + var1.gameSettings.setOptionFloatValue(this.idFloat, this.sliderValue); + this.displayString = var1.gameSettings.getKeyBinding(this.idFloat); + this.dragging = true; + return true; + } else { + return false; + } + } + + public void mouseReleased(int var1, int var2) { + this.dragging = false; + } +} diff --git a/src/net/minecraft/src/GuiSlot.java b/src/net/minecraft/src/GuiSlot.java new file mode 100644 index 0000000..0294c76 --- /dev/null +++ b/src/net/minecraft/src/GuiSlot.java @@ -0,0 +1,361 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.client.Minecraft; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +public abstract class GuiSlot { + private final Minecraft mc; + private int width; + private int height; + protected int top; + protected int bottom; + private int right; + private int left; + protected final int slotHeight; + private int scrollUpButtonID; + private int scrollDownButtonID; + protected int mouseX; + protected int mouseY; + private float initialClickY = -2.0F; + private float scrollMultiplier; + private float amountScrolled; + private int selectedElement = -1; + private long lastClicked = 0L; + private boolean showSelectionBox = true; + private boolean field_77243_s; + private int field_77242_t; + + public GuiSlot(Minecraft var1, int var2, int var3, int var4, int var5, int var6) { + this.mc = var1; + this.width = var2; + this.height = var3; + this.top = var4; + this.bottom = var5; + this.slotHeight = var6; + this.left = 0; + this.right = var2; + } + + public void func_77207_a(int var1, int var2, int var3, int var4) { + this.width = var1; + this.height = var2; + this.top = var3; + this.bottom = var4; + this.left = 0; + this.right = var1; + } + + public void setShowSelectionBox(boolean var1) { + this.showSelectionBox = var1; + } + + protected void func_77223_a(boolean var1, int var2) { + this.field_77243_s = var1; + this.field_77242_t = var2; + if(!var1) { + this.field_77242_t = 0; + } + + } + + protected abstract int getSize(); + + protected abstract void elementClicked(int var1, boolean var2); + + protected abstract boolean isSelected(int var1); + + protected int getContentHeight() { + return this.getSize() * this.slotHeight + this.field_77242_t; + } + + protected abstract void drawBackground(); + + protected abstract void drawSlot(int var1, int var2, int var3, int var4, Tessellator var5); + + protected void func_77222_a(int var1, int var2, Tessellator var3) { + } + + protected void func_77224_a(int var1, int var2) { + } + + protected void func_77215_b(int var1, int var2) { + } + + public int func_77210_c(int var1, int var2) { + int var3 = this.width / 2 - 110; + int var4 = this.width / 2 + 110; + int var5 = var2 - this.top - this.field_77242_t + (int)this.amountScrolled - 4; + int var6 = var5 / this.slotHeight; + return var1 >= var3 && var1 <= var4 && var6 >= 0 && var5 >= 0 && var6 < this.getSize() ? var6 : -1; + } + + public void registerScrollButtons(List var1, int var2, int var3) { + this.scrollUpButtonID = var2; + this.scrollDownButtonID = var3; + } + + private void bindAmountScrolled() { + int var1 = this.func_77209_d(); + if(var1 < 0) { + var1 /= 2; + } + + if(this.amountScrolled < 0.0F) { + this.amountScrolled = 0.0F; + } + + if(this.amountScrolled > (float)var1) { + this.amountScrolled = (float)var1; + } + + } + + public int func_77209_d() { + return this.getContentHeight() - (this.bottom - this.top - 4); + } + + public void func_77208_b(int var1) { + this.amountScrolled += (float)var1; + this.bindAmountScrolled(); + this.initialClickY = -2.0F; + } + + public void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == this.scrollUpButtonID) { + this.amountScrolled -= (float)(this.slotHeight * 2 / 3); + this.initialClickY = -2.0F; + this.bindAmountScrolled(); + } else if(var1.id == this.scrollDownButtonID) { + this.amountScrolled += (float)(this.slotHeight * 2 / 3); + this.initialClickY = -2.0F; + this.bindAmountScrolled(); + } + + } + } + + public void drawScreen(int var1, int var2, float var3) { + this.mouseX = var1; + this.mouseY = var2; + this.drawBackground(); + int var4 = this.getSize(); + int var5 = this.getScrollBarX(); + int var6 = var5 + 6; + int var9; + int var10; + int var11; + int var13; + int var20; + if(Mouse.isButtonDown(0)) { + if(this.initialClickY == -1.0F) { + boolean var16 = true; + if(var2 >= this.top && var2 <= this.bottom) { + int var8 = this.width / 2 - 110; + var9 = this.width / 2 + 110; + var10 = var2 - this.top - this.field_77242_t + (int)this.amountScrolled - 4; + var11 = var10 / this.slotHeight; + if(var1 >= var8 && var1 <= var9 && var11 >= 0 && var10 >= 0 && var11 < var4) { + boolean var12 = var11 == this.selectedElement && Minecraft.getSystemTime() - this.lastClicked < 250L; + this.elementClicked(var11, var12); + this.selectedElement = var11; + this.lastClicked = Minecraft.getSystemTime(); + } else if(var1 >= var8 && var1 <= var9 && var10 < 0) { + this.func_77224_a(var1 - var8, var2 - this.top + (int)this.amountScrolled - 4); + var16 = false; + } + + if(var1 >= var5 && var1 <= var6) { + this.scrollMultiplier = -1.0F; + var20 = this.func_77209_d(); + if(var20 < 1) { + var20 = 1; + } + + var13 = (int)((float)((this.bottom - this.top) * (this.bottom - this.top)) / (float)this.getContentHeight()); + if(var13 < 32) { + var13 = 32; + } + + if(var13 > this.bottom - this.top - 8) { + var13 = this.bottom - this.top - 8; + } + + this.scrollMultiplier /= (float)(this.bottom - this.top - var13) / (float)var20; + } else { + this.scrollMultiplier = 1.0F; + } + + if(var16) { + this.initialClickY = (float)var2; + } else { + this.initialClickY = -2.0F; + } + } else { + this.initialClickY = -2.0F; + } + } else if(this.initialClickY >= 0.0F) { + this.amountScrolled -= ((float)var2 - this.initialClickY) * this.scrollMultiplier; + this.initialClickY = (float)var2; + } + } else { + while(true) { + if(this.mc.gameSettings.touchscreen || !Mouse.next()) { + this.initialClickY = -1.0F; + break; + } + + int var7 = Mouse.getEventDWheel(); + if(var7 != 0) { + if(var7 > 0) { + var7 = -1; + } else if(var7 < 0) { + var7 = 1; + } + + this.amountScrolled += (float)(var7 * this.slotHeight / 2); + } + } + } + + this.bindAmountScrolled(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_FOG); + Tessellator var18 = Tessellator.instance; + this.mc.renderEngine.bindTexture("/gui/background.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + float var17 = 32.0F; + var18.startDrawingQuads(); + var18.setColorOpaque_I(2105376); + var18.addVertexWithUV((double)this.left, (double)this.bottom, 0.0D, (double)((float)this.left / var17), (double)((float)(this.bottom + (int)this.amountScrolled) / var17)); + var18.addVertexWithUV((double)this.right, (double)this.bottom, 0.0D, (double)((float)this.right / var17), (double)((float)(this.bottom + (int)this.amountScrolled) / var17)); + var18.addVertexWithUV((double)this.right, (double)this.top, 0.0D, (double)((float)this.right / var17), (double)((float)(this.top + (int)this.amountScrolled) / var17)); + var18.addVertexWithUV((double)this.left, (double)this.top, 0.0D, (double)((float)this.left / var17), (double)((float)(this.top + (int)this.amountScrolled) / var17)); + var18.draw(); + var9 = this.width / 2 - 92 - 16; + var10 = this.top + 4 - (int)this.amountScrolled; + if(this.field_77243_s) { + this.func_77222_a(var9, var10, var18); + } + + int var14; + for(var11 = 0; var11 < var4; ++var11) { + var20 = var10 + var11 * this.slotHeight + this.field_77242_t; + var13 = this.slotHeight - 4; + if(var20 <= this.bottom && var20 + var13 >= this.top) { + if(this.showSelectionBox && this.isSelected(var11)) { + var14 = this.width / 2 - 110; + int var15 = this.width / 2 + 110; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + var18.startDrawingQuads(); + var18.setColorOpaque_I(8421504); + var18.addVertexWithUV((double)var14, (double)(var20 + var13 + 2), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)var15, (double)(var20 + var13 + 2), 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)var15, (double)(var20 - 2), 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)var14, (double)(var20 - 2), 0.0D, 0.0D, 0.0D); + var18.setColorOpaque_I(0); + var18.addVertexWithUV((double)(var14 + 1), (double)(var20 + var13 + 1), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)(var15 - 1), (double)(var20 + var13 + 1), 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)(var15 - 1), (double)(var20 - 1), 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)(var14 + 1), (double)(var20 - 1), 0.0D, 0.0D, 0.0D); + var18.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + this.drawSlot(var11, var9, var20, var13, var18); + } + } + + GL11.glDisable(GL11.GL_DEPTH_TEST); + byte var19 = 4; + this.overlayBackground(0, this.top, 255, 255); + this.overlayBackground(this.bottom, this.height, 255, 255); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glDisable(GL11.GL_TEXTURE_2D); + var18.startDrawingQuads(); + var18.setColorRGBA_I(0, 0); + var18.addVertexWithUV((double)this.left, (double)(this.top + var19), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)this.right, (double)(this.top + var19), 0.0D, 1.0D, 1.0D); + var18.setColorRGBA_I(0, 255); + var18.addVertexWithUV((double)this.right, (double)this.top, 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)this.left, (double)this.top, 0.0D, 0.0D, 0.0D); + var18.draw(); + var18.startDrawingQuads(); + var18.setColorRGBA_I(0, 255); + var18.addVertexWithUV((double)this.left, (double)this.bottom, 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)this.right, (double)this.bottom, 0.0D, 1.0D, 1.0D); + var18.setColorRGBA_I(0, 0); + var18.addVertexWithUV((double)this.right, (double)(this.bottom - var19), 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)this.left, (double)(this.bottom - var19), 0.0D, 0.0D, 0.0D); + var18.draw(); + var20 = this.func_77209_d(); + if(var20 > 0) { + var13 = (this.bottom - this.top) * (this.bottom - this.top) / this.getContentHeight(); + if(var13 < 32) { + var13 = 32; + } + + if(var13 > this.bottom - this.top - 8) { + var13 = this.bottom - this.top - 8; + } + + var14 = (int)this.amountScrolled * (this.bottom - this.top - var13) / var20 + this.top; + if(var14 < this.top) { + var14 = this.top; + } + + var18.startDrawingQuads(); + var18.setColorRGBA_I(0, 255); + var18.addVertexWithUV((double)var5, (double)this.bottom, 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)var6, (double)this.bottom, 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)var6, (double)this.top, 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)var5, (double)this.top, 0.0D, 0.0D, 0.0D); + var18.draw(); + var18.startDrawingQuads(); + var18.setColorRGBA_I(8421504, 255); + var18.addVertexWithUV((double)var5, (double)(var14 + var13), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)var6, (double)(var14 + var13), 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)var6, (double)var14, 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)var5, (double)var14, 0.0D, 0.0D, 0.0D); + var18.draw(); + var18.startDrawingQuads(); + var18.setColorRGBA_I(12632256, 255); + var18.addVertexWithUV((double)var5, (double)(var14 + var13 - 1), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)(var6 - 1), (double)(var14 + var13 - 1), 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)(var6 - 1), (double)var14, 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)var5, (double)var14, 0.0D, 0.0D, 0.0D); + var18.draw(); + } + + this.func_77215_b(var1, var2); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_BLEND); + } + + protected int getScrollBarX() { + return this.width / 2 + 124; + } + + private void overlayBackground(int var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + this.mc.renderEngine.bindTexture("/gui/background.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + float var6 = 32.0F; + var5.startDrawingQuads(); + var5.setColorRGBA_I(4210752, var4); + var5.addVertexWithUV(0.0D, (double)var2, 0.0D, 0.0D, (double)((float)var2 / var6)); + var5.addVertexWithUV((double)this.width, (double)var2, 0.0D, (double)((float)this.width / var6), (double)((float)var2 / var6)); + var5.setColorRGBA_I(4210752, var3); + var5.addVertexWithUV((double)this.width, (double)var1, 0.0D, (double)((float)this.width / var6), (double)((float)var1 / var6)); + var5.addVertexWithUV(0.0D, (double)var1, 0.0D, 0.0D, (double)((float)var1 / var6)); + var5.draw(); + } +} diff --git a/src/net/minecraft/src/GuiSlotLanguage.java b/src/net/minecraft/src/GuiSlotLanguage.java new file mode 100644 index 0000000..a7de197 --- /dev/null +++ b/src/net/minecraft/src/GuiSlotLanguage.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.TreeMap; + +class GuiSlotLanguage extends GuiSlot { + private ArrayList field_77251_g; + private TreeMap field_77253_h; + final GuiLanguage languageGui; + + public GuiSlotLanguage(GuiLanguage var1) { + super(var1.mc, var1.width, var1.height, 32, var1.height - 65 + 4, 18); + this.languageGui = var1; + this.field_77253_h = StringTranslate.getInstance().getLanguageList(); + this.field_77251_g = new ArrayList(); + Iterator var2 = this.field_77253_h.keySet().iterator(); + + while(var2.hasNext()) { + String var3 = (String)var2.next(); + this.field_77251_g.add(var3); + } + + } + + protected int getSize() { + return this.field_77251_g.size(); + } + + protected void elementClicked(int var1, boolean var2) { + StringTranslate.getInstance().setLanguage((String)this.field_77251_g.get(var1), false); + this.languageGui.mc.fontRenderer.setUnicodeFlag(StringTranslate.getInstance().isUnicode()); + GuiLanguage.getGameSettings(this.languageGui).language = (String)this.field_77251_g.get(var1); + this.languageGui.fontRenderer.setBidiFlag(StringTranslate.isBidirectional(GuiLanguage.getGameSettings(this.languageGui).language)); + GuiLanguage.getDoneButton(this.languageGui).displayString = StringTranslate.getInstance().translateKey("gui.done"); + GuiLanguage.getGameSettings(this.languageGui).saveOptions(); + } + + protected boolean isSelected(int var1) { + return ((String)this.field_77251_g.get(var1)).equals(StringTranslate.getInstance().getCurrentLanguage()); + } + + protected int getContentHeight() { + return this.getSize() * 18; + } + + protected void drawBackground() { + this.languageGui.drawDefaultBackground(); + } + + protected void drawSlot(int var1, int var2, int var3, int var4, Tessellator var5) { + this.languageGui.fontRenderer.setBidiFlag(true); + this.languageGui.drawCenteredString(this.languageGui.fontRenderer, (String)this.field_77253_h.get(this.field_77251_g.get(var1)), this.languageGui.width / 2, var3 + 1, 16777215); + this.languageGui.fontRenderer.setBidiFlag(StringTranslate.isBidirectional(GuiLanguage.getGameSettings(this.languageGui).language)); + } +} diff --git a/src/net/minecraft/src/GuiSlotOnlineServerList.java b/src/net/minecraft/src/GuiSlotOnlineServerList.java new file mode 100644 index 0000000..defdad5 --- /dev/null +++ b/src/net/minecraft/src/GuiSlotOnlineServerList.java @@ -0,0 +1,113 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +class GuiSlotOnlineServerList extends GuiScreenSelectLocation { + final GuiScreenOnlineServers field_96294_a; + + public GuiSlotOnlineServerList(GuiScreenOnlineServers var1) { + super(GuiScreenOnlineServers.func_98075_b(var1), var1.width, var1.height, 32, var1.height - 64, 36); + this.field_96294_a = var1; + } + + protected int getSize() { + return GuiScreenOnlineServers.func_98094_c(this.field_96294_a).size() + 1; + } + + protected void elementClicked(int var1, boolean var2) { + if(var1 < GuiScreenOnlineServers.func_98094_c(this.field_96294_a).size()) { + GuiScreenOnlineServers.func_98089_b(this.field_96294_a, var1); + McoServer var3 = (McoServer)GuiScreenOnlineServers.func_98094_c(this.field_96294_a).get(GuiScreenOnlineServers.func_98072_d(this.field_96294_a)); + GuiScreenOnlineServers.func_96161_f(this.field_96294_a).enabled = GuiScreenOnlineServers.func_98076_f(this.field_96294_a).session.username.equals(var3.field_96405_e); + GuiScreenOnlineServers.func_98092_g(this.field_96294_a).enabled = var3.field_96404_d.equals("OPEN") && !var3.field_98166_h; + if(var2 && GuiScreenOnlineServers.func_98092_g(this.field_96294_a).enabled) { + GuiScreenOnlineServers.func_98078_c(this.field_96294_a, GuiScreenOnlineServers.func_98072_d(this.field_96294_a)); + } + + } + } + + protected boolean isSelected(int var1) { + return var1 == GuiScreenOnlineServers.func_98072_d(this.field_96294_a); + } + + protected boolean func_104086_b(int var1) { + return var1 < GuiScreenOnlineServers.func_98094_c(this.field_96294_a).size() && ((McoServer)GuiScreenOnlineServers.func_98094_c(this.field_96294_a).get(var1)).field_96405_e.toLowerCase().equals(GuiScreenOnlineServers.func_98091_h(this.field_96294_a).session.username); + } + + protected int getContentHeight() { + return this.getSize() * 36; + } + + protected void drawBackground() { + this.field_96294_a.drawDefaultBackground(); + } + + protected void drawSlot(int var1, int var2, int var3, int var4, Tessellator var5) { + if(var1 < GuiScreenOnlineServers.func_98094_c(this.field_96294_a).size()) { + this.func_96292_b(var1, var2, var3, var4, var5); + } + + } + + private void func_96292_b(int var1, int var2, int var3, int var4, Tessellator var5) { + McoServer var6 = (McoServer)GuiScreenOnlineServers.func_98094_c(this.field_96294_a).get(var1); + this.field_96294_a.drawString(GuiScreenOnlineServers.func_104038_i(this.field_96294_a), var6.func_96398_b(), var2 + 2, var3 + 1, 16777215); + short var7 = 207; + byte var8 = 1; + if(var6.field_98166_h) { + GuiScreenOnlineServers.func_101012_b(this.field_96294_a, var2 + var7, var3 + var8, this.field_104094_d, this.field_104095_e); + } else if(var6.field_96404_d.equals("CLOSED")) { + GuiScreenOnlineServers.func_101009_c(this.field_96294_a, var2 + var7, var3 + var8, this.field_104094_d, this.field_104095_e); + } else if(var6.field_96405_e.equals(GuiScreenOnlineServers.func_104032_j(this.field_96294_a).session.username) && var6.field_104063_i < 7) { + this.func_96293_a(var1, var2 - 14, var3, var6); + GuiScreenOnlineServers.func_104030_a(this.field_96294_a, var2 + var7, var3 + var8, this.field_104094_d, this.field_104095_e, var6.field_104063_i); + } else if(var6.field_96404_d.equals("OPEN")) { + GuiScreenOnlineServers.func_104031_c(this.field_96294_a, var2 + var7, var3 + var8, this.field_104094_d, this.field_104095_e); + this.func_96293_a(var1, var2 - 14, var3, var6); + } + + this.field_96294_a.drawString(GuiScreenOnlineServers.func_98084_i(this.field_96294_a), var6.func_96397_a(), var2 + 2, var3 + 12, 7105644); + this.field_96294_a.drawString(GuiScreenOnlineServers.func_101005_j(this.field_96294_a), var6.field_96405_e, var2 + 2, var3 + 12 + 11, 5000268); + } + + private void func_96293_a(int var1, int var2, int var3, McoServer var4) { + if(var4.field_96403_g != null) { + Object var5 = GuiScreenOnlineServers.func_101007_h(); + synchronized(var5) { + if(GuiScreenOnlineServers.func_101010_i() < 5 && (!var4.field_96411_l || var4.field_102022_m)) { + (new ThreadConnectToOnlineServer(this, var4)).start(); + } + } + + boolean var13 = var4.field_96415_h > 61; + boolean var6 = var4.field_96415_h < 61; + boolean var7 = var13 || var6; + if(var4.field_96414_k != null) { + this.field_96294_a.drawString(GuiScreenOnlineServers.func_98079_k(this.field_96294_a), var4.field_96414_k, var2 + 215 - GuiScreenOnlineServers.func_98087_l(this.field_96294_a).getStringWidth(var4.field_96414_k), var3 + 1, 8421504); + } + + if(var7) { + String var8 = EnumChatFormatting.DARK_RED + var4.field_96413_j; + this.field_96294_a.drawString(GuiScreenOnlineServers.func_98074_m(this.field_96294_a), var8, var2 + 200 - GuiScreenOnlineServers.func_101000_n(this.field_96294_a).getStringWidth(var8), var3 + 1, 8421504); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GuiScreenOnlineServers.func_101004_o(this.field_96294_a).renderEngine.bindTexture("/gui/icons.png"); + byte var14 = 0; + boolean var9 = false; + String var10 = null; + if(var7) { + var10 = var13 ? "Client out of date!" : "Server out of date!"; + byte var15 = 5; + this.field_96294_a.drawTexturedModalRect(var2 + 205, var3, var14 * 10, 176 + var15 * 8, 10, 8); + } + + byte var11 = 4; + if(this.field_104094_d >= var2 + 205 - var11 && this.field_104095_e >= var3 - var11 && this.field_104094_d <= var2 + 205 + 10 + var11 && this.field_104095_e <= var3 + 8 + var11) { + GuiScreenOnlineServers.func_101011_a(this.field_96294_a, var10); + } + + } + } +} diff --git a/src/net/minecraft/src/GuiSlotServer.java b/src/net/minecraft/src/GuiSlotServer.java new file mode 100644 index 0000000..529d851 --- /dev/null +++ b/src/net/minecraft/src/GuiSlotServer.java @@ -0,0 +1,168 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +class GuiSlotServer extends GuiSlot { + final GuiMultiplayer parentGui; + + public GuiSlotServer(GuiMultiplayer var1) { + super(var1.mc, var1.width, var1.height, 32, var1.height - 64, 36); + this.parentGui = var1; + } + + protected int getSize() { + return GuiMultiplayer.getInternetServerList(this.parentGui).countServers() + GuiMultiplayer.getListOfLanServers(this.parentGui).size() + 1; + } + + protected void elementClicked(int var1, boolean var2) { + if(var1 < GuiMultiplayer.getInternetServerList(this.parentGui).countServers() + GuiMultiplayer.getListOfLanServers(this.parentGui).size()) { + int var3 = GuiMultiplayer.getSelectedServer(this.parentGui); + GuiMultiplayer.getAndSetSelectedServer(this.parentGui, var1); + ServerData var4 = GuiMultiplayer.getInternetServerList(this.parentGui).countServers() > var1 ? GuiMultiplayer.getInternetServerList(this.parentGui).getServerData(var1) : null; + boolean var5 = GuiMultiplayer.getSelectedServer(this.parentGui) >= 0 && GuiMultiplayer.getSelectedServer(this.parentGui) < this.getSize() && (var4 == null || var4.field_82821_f == 61); + boolean var6 = GuiMultiplayer.getSelectedServer(this.parentGui) < GuiMultiplayer.getInternetServerList(this.parentGui).countServers(); + GuiMultiplayer.getButtonSelect(this.parentGui).enabled = var5; + GuiMultiplayer.getButtonEdit(this.parentGui).enabled = var6; + GuiMultiplayer.getButtonDelete(this.parentGui).enabled = var6; + if(var2 && var5) { + GuiMultiplayer.func_74008_b(this.parentGui, var1); + } else if(var6 && GuiScreen.isShiftKeyDown() && var3 >= 0 && var3 < GuiMultiplayer.getInternetServerList(this.parentGui).countServers()) { + GuiMultiplayer.getInternetServerList(this.parentGui).swapServers(var3, GuiMultiplayer.getSelectedServer(this.parentGui)); + } + + } + } + + protected boolean isSelected(int var1) { + return var1 == GuiMultiplayer.getSelectedServer(this.parentGui); + } + + protected int getContentHeight() { + return this.getSize() * 36; + } + + protected void drawBackground() { + this.parentGui.drawDefaultBackground(); + } + + protected void drawSlot(int var1, int var2, int var3, int var4, Tessellator var5) { + if(var1 < GuiMultiplayer.getInternetServerList(this.parentGui).countServers()) { + this.func_77247_d(var1, var2, var3, var4, var5); + } else if(var1 < GuiMultiplayer.getInternetServerList(this.parentGui).countServers() + GuiMultiplayer.getListOfLanServers(this.parentGui).size()) { + this.func_77248_b(var1, var2, var3, var4, var5); + } else { + this.func_77249_c(var1, var2, var3, var4, var5); + } + + } + + private void func_77248_b(int var1, int var2, int var3, int var4, Tessellator var5) { + LanServer var6 = (LanServer)GuiMultiplayer.getListOfLanServers(this.parentGui).get(var1 - GuiMultiplayer.getInternetServerList(this.parentGui).countServers()); + this.parentGui.drawString(this.parentGui.fontRenderer, StatCollector.translateToLocal("lanServer.title"), var2 + 2, var3 + 1, 16777215); + this.parentGui.drawString(this.parentGui.fontRenderer, var6.getServerMotd(), var2 + 2, var3 + 12, 8421504); + if(this.parentGui.mc.gameSettings.hideServerAddress) { + this.parentGui.drawString(this.parentGui.fontRenderer, StatCollector.translateToLocal("selectServer.hiddenAddress"), var2 + 2, var3 + 12 + 11, 3158064); + } else { + this.parentGui.drawString(this.parentGui.fontRenderer, var6.getServerIpPort(), var2 + 2, var3 + 12 + 11, 3158064); + } + + } + + private void func_77249_c(int var1, int var2, int var3, int var4, Tessellator var5) { + this.parentGui.drawCenteredString(this.parentGui.fontRenderer, StatCollector.translateToLocal("lanServer.scanning"), this.parentGui.width / 2, var3 + 1, 16777215); + String var6; + switch(GuiMultiplayer.getTicksOpened(this.parentGui) / 3 % 4) { + case 0: + default: + var6 = "O o o"; + break; + case 1: + case 3: + var6 = "o O o"; + break; + case 2: + var6 = "o o O"; + } + + this.parentGui.drawCenteredString(this.parentGui.fontRenderer, var6, this.parentGui.width / 2, var3 + 12, 8421504); + } + + private void func_77247_d(int var1, int var2, int var3, int var4, Tessellator var5) { + ServerData var6 = GuiMultiplayer.getInternetServerList(this.parentGui).getServerData(var1); + Object var7 = GuiMultiplayer.getLock(); + synchronized(var7) { + if(GuiMultiplayer.getThreadsPending() < 5 && !var6.field_78841_f) { + var6.field_78841_f = true; + var6.pingToServer = -2L; + var6.serverMOTD = ""; + var6.populationInfo = ""; + GuiMultiplayer.increaseThreadsPending(); + (new ThreadPollServers(this, var6)).start(); + } + } + + boolean var15 = var6.field_82821_f > 61; + boolean var8 = var6.field_82821_f < 61; + boolean var9 = var15 || var8; + this.parentGui.drawString(this.parentGui.fontRenderer, var6.serverName, var2 + 2, var3 + 1, 16777215); + this.parentGui.drawString(this.parentGui.fontRenderer, var6.serverMOTD, var2 + 2, var3 + 12, 8421504); + this.parentGui.drawString(this.parentGui.fontRenderer, var6.populationInfo, var2 + 215 - this.parentGui.fontRenderer.getStringWidth(var6.populationInfo), var3 + 12, 8421504); + if(var9) { + String var10 = EnumChatFormatting.DARK_RED + var6.gameVersion; + this.parentGui.drawString(this.parentGui.fontRenderer, var10, var2 + 200 - this.parentGui.fontRenderer.getStringWidth(var10), var3 + 1, 8421504); + } + + if(!this.parentGui.mc.gameSettings.hideServerAddress && !var6.isHidingAddress()) { + this.parentGui.drawString(this.parentGui.fontRenderer, var6.serverIP, var2 + 2, var3 + 12 + 11, 3158064); + } else { + this.parentGui.drawString(this.parentGui.fontRenderer, StatCollector.translateToLocal("selectServer.hiddenAddress"), var2 + 2, var3 + 12 + 11, 3158064); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.parentGui.mc.renderEngine.bindTexture("/gui/icons.png"); + byte var16 = 0; + boolean var11 = false; + String var12 = ""; + int var17; + if(var9) { + var12 = var15 ? "Client out of date!" : "Server out of date!"; + var17 = 5; + } else if(var6.field_78841_f && var6.pingToServer != -2L) { + if(var6.pingToServer < 0L) { + var17 = 5; + } else if(var6.pingToServer < 150L) { + var17 = 0; + } else if(var6.pingToServer < 300L) { + var17 = 1; + } else if(var6.pingToServer < 600L) { + var17 = 2; + } else if(var6.pingToServer < 1000L) { + var17 = 3; + } else { + var17 = 4; + } + + if(var6.pingToServer < 0L) { + var12 = "(no connection)"; + } else { + var12 = var6.pingToServer + "ms"; + } + } else { + var16 = 1; + var17 = (int)(Minecraft.getSystemTime() / 100L + (long)(var1 * 2) & 7L); + if(var17 > 4) { + var17 = 8 - var17; + } + + var12 = "Polling.."; + } + + this.parentGui.drawTexturedModalRect(var2 + 205, var3, 0 + var16 * 10, 176 + var17 * 8, 10, 8); + byte var13 = 4; + if(this.mouseX >= var2 + 205 - var13 && this.mouseY >= var3 - var13 && this.mouseX <= var2 + 205 + 10 + var13 && this.mouseY <= var3 + 8 + var13) { + GuiMultiplayer.getAndSetLagTooltip(this.parentGui, var12); + } + + } +} diff --git a/src/net/minecraft/src/GuiSlotStats.java b/src/net/minecraft/src/GuiSlotStats.java new file mode 100644 index 0000000..38c8d39 --- /dev/null +++ b/src/net/minecraft/src/GuiSlotStats.java @@ -0,0 +1,183 @@ +package net.minecraft.src; + +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import org.lwjgl.input.Mouse; + +abstract class GuiSlotStats extends GuiSlot { + protected int field_77262_g; + protected List field_77266_h; + protected Comparator field_77267_i; + protected int field_77264_j; + protected int field_77265_k; + final GuiStats statsGui; + + protected GuiSlotStats(GuiStats var1) { + super(GuiStats.getMinecraft1(var1), var1.width, var1.height, 32, var1.height - 64, 20); + this.statsGui = var1; + this.field_77262_g = -1; + this.field_77264_j = -1; + this.field_77265_k = 0; + this.setShowSelectionBox(false); + this.func_77223_a(true, 20); + } + + protected void elementClicked(int var1, boolean var2) { + } + + protected boolean isSelected(int var1) { + return false; + } + + protected void drawBackground() { + this.statsGui.drawDefaultBackground(); + } + + protected void func_77222_a(int var1, int var2, Tessellator var3) { + if(!Mouse.isButtonDown(0)) { + this.field_77262_g = -1; + } + + if(this.field_77262_g == 0) { + GuiStats.drawSprite(this.statsGui, var1 + 115 - 18, var2 + 1, 0, 0); + } else { + GuiStats.drawSprite(this.statsGui, var1 + 115 - 18, var2 + 1, 0, 18); + } + + if(this.field_77262_g == 1) { + GuiStats.drawSprite(this.statsGui, var1 + 165 - 18, var2 + 1, 0, 0); + } else { + GuiStats.drawSprite(this.statsGui, var1 + 165 - 18, var2 + 1, 0, 18); + } + + if(this.field_77262_g == 2) { + GuiStats.drawSprite(this.statsGui, var1 + 215 - 18, var2 + 1, 0, 0); + } else { + GuiStats.drawSprite(this.statsGui, var1 + 215 - 18, var2 + 1, 0, 18); + } + + if(this.field_77264_j != -1) { + short var4 = 79; + byte var5 = 18; + if(this.field_77264_j == 1) { + var4 = 129; + } else if(this.field_77264_j == 2) { + var4 = 179; + } + + if(this.field_77265_k == 1) { + var5 = 36; + } + + GuiStats.drawSprite(this.statsGui, var1 + var4, var2 + 1, var5, 0); + } + + } + + protected void func_77224_a(int var1, int var2) { + this.field_77262_g = -1; + if(var1 >= 79 && var1 < 115) { + this.field_77262_g = 0; + } else if(var1 >= 129 && var1 < 165) { + this.field_77262_g = 1; + } else if(var1 >= 179 && var1 < 215) { + this.field_77262_g = 2; + } + + if(this.field_77262_g >= 0) { + this.func_77261_e(this.field_77262_g); + GuiStats.getMinecraft2(this.statsGui).sndManager.playSoundFX("random.click", 1.0F, 1.0F); + } + + } + + protected final int getSize() { + return this.field_77266_h.size(); + } + + protected final StatCrafting func_77257_d(int var1) { + return (StatCrafting)this.field_77266_h.get(var1); + } + + protected abstract String func_77258_c(int var1); + + protected void func_77260_a(StatCrafting var1, int var2, int var3, boolean var4) { + String var5; + if(var1 != null) { + var5 = var1.func_75968_a(GuiStats.getStatsFileWriter(this.statsGui).writeStat(var1)); + this.statsGui.drawString(GuiStats.getFontRenderer4(this.statsGui), var5, var2 - GuiStats.getFontRenderer5(this.statsGui).getStringWidth(var5), var3 + 5, var4 ? 16777215 : 9474192); + } else { + var5 = "-"; + this.statsGui.drawString(GuiStats.getFontRenderer6(this.statsGui), var5, var2 - GuiStats.getFontRenderer7(this.statsGui).getStringWidth(var5), var3 + 5, var4 ? 16777215 : 9474192); + } + + } + + protected void func_77215_b(int var1, int var2) { + if(var2 >= this.top && var2 <= this.bottom) { + int var3 = this.func_77210_c(var1, var2); + int var4 = this.statsGui.width / 2 - 92 - 16; + if(var3 >= 0) { + if(var1 < var4 + 40 || var1 > var4 + 40 + 20) { + return; + } + + StatCrafting var9 = this.func_77257_d(var3); + this.func_77259_a(var9, var1, var2); + } else { + String var5 = ""; + if(var1 >= var4 + 115 - 18 && var1 <= var4 + 115) { + var5 = this.func_77258_c(0); + } else if(var1 >= var4 + 165 - 18 && var1 <= var4 + 165) { + var5 = this.func_77258_c(1); + } else { + if(var1 < var4 + 215 - 18 || var1 > var4 + 215) { + return; + } + + var5 = this.func_77258_c(2); + } + + var5 = ("" + StringTranslate.getInstance().translateKey(var5)).trim(); + if(var5.length() > 0) { + int var6 = var1 + 12; + int var7 = var2 - 12; + int var8 = GuiStats.getFontRenderer8(this.statsGui).getStringWidth(var5); + GuiStats.drawGradientRect(this.statsGui, var6 - 3, var7 - 3, var6 + var8 + 3, var7 + 8 + 3, -1073741824, -1073741824); + GuiStats.getFontRenderer9(this.statsGui).drawStringWithShadow(var5, var6, var7, -1); + } + } + + } + } + + protected void func_77259_a(StatCrafting var1, int var2, int var3) { + if(var1 != null) { + Item var4 = Item.itemsList[var1.getItemID()]; + String var5 = ("" + StringTranslate.getInstance().translateNamedKey(var4.getUnlocalizedName())).trim(); + if(var5.length() > 0) { + int var6 = var2 + 12; + int var7 = var3 - 12; + int var8 = GuiStats.getFontRenderer10(this.statsGui).getStringWidth(var5); + GuiStats.drawGradientRect1(this.statsGui, var6 - 3, var7 - 3, var6 + var8 + 3, var7 + 8 + 3, -1073741824, -1073741824); + GuiStats.getFontRenderer11(this.statsGui).drawStringWithShadow(var5, var6, var7, -1); + } + + } + } + + protected void func_77261_e(int var1) { + if(var1 != this.field_77264_j) { + this.field_77264_j = var1; + this.field_77265_k = -1; + } else if(this.field_77265_k == -1) { + this.field_77265_k = 1; + } else { + this.field_77264_j = -1; + this.field_77265_k = 0; + } + + Collections.sort(this.field_77266_h, this.field_77267_i); + } +} diff --git a/src/net/minecraft/src/GuiSlotStatsBlock.java b/src/net/minecraft/src/GuiSlotStatsBlock.java new file mode 100644 index 0000000..3923d07 --- /dev/null +++ b/src/net/minecraft/src/GuiSlotStatsBlock.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; + +class GuiSlotStatsBlock extends GuiSlotStats { + final GuiStats theStats; + + public GuiSlotStatsBlock(GuiStats var1) { + super(var1); + this.theStats = var1; + this.field_77266_h = new ArrayList(); + Iterator var2 = StatList.objectMineStats.iterator(); + + while(var2.hasNext()) { + StatCrafting var3 = (StatCrafting)var2.next(); + boolean var4 = false; + int var5 = var3.getItemID(); + if(GuiStats.getStatsFileWriter(var1).writeStat(var3) > 0) { + var4 = true; + } else if(StatList.objectUseStats[var5] != null && GuiStats.getStatsFileWriter(var1).writeStat(StatList.objectUseStats[var5]) > 0) { + var4 = true; + } else if(StatList.objectCraftStats[var5] != null && GuiStats.getStatsFileWriter(var1).writeStat(StatList.objectCraftStats[var5]) > 0) { + var4 = true; + } + + if(var4) { + this.field_77266_h.add(var3); + } + } + + this.field_77267_i = new SorterStatsBlock(this, var1); + } + + protected void func_77222_a(int var1, int var2, Tessellator var3) { + super.func_77222_a(var1, var2, var3); + if(this.field_77262_g == 0) { + GuiStats.drawSprite(this.theStats, var1 + 115 - 18 + 1, var2 + 1 + 1, 18, 18); + } else { + GuiStats.drawSprite(this.theStats, var1 + 115 - 18, var2 + 1, 18, 18); + } + + if(this.field_77262_g == 1) { + GuiStats.drawSprite(this.theStats, var1 + 165 - 18 + 1, var2 + 1 + 1, 36, 18); + } else { + GuiStats.drawSprite(this.theStats, var1 + 165 - 18, var2 + 1, 36, 18); + } + + if(this.field_77262_g == 2) { + GuiStats.drawSprite(this.theStats, var1 + 215 - 18 + 1, var2 + 1 + 1, 54, 18); + } else { + GuiStats.drawSprite(this.theStats, var1 + 215 - 18, var2 + 1, 54, 18); + } + + } + + protected void drawSlot(int var1, int var2, int var3, int var4, Tessellator var5) { + StatCrafting var6 = this.func_77257_d(var1); + int var7 = var6.getItemID(); + GuiStats.drawItemSprite(this.theStats, var2 + 40, var3, var7); + this.func_77260_a((StatCrafting)StatList.objectCraftStats[var7], var2 + 115, var3, var1 % 2 == 0); + this.func_77260_a((StatCrafting)StatList.objectUseStats[var7], var2 + 165, var3, var1 % 2 == 0); + this.func_77260_a(var6, var2 + 215, var3, var1 % 2 == 0); + } + + protected String func_77258_c(int var1) { + return var1 == 0 ? "stat.crafted" : (var1 == 1 ? "stat.used" : "stat.mined"); + } +} diff --git a/src/net/minecraft/src/GuiSlotStatsGeneral.java b/src/net/minecraft/src/GuiSlotStatsGeneral.java new file mode 100644 index 0000000..86a815e --- /dev/null +++ b/src/net/minecraft/src/GuiSlotStatsGeneral.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +class GuiSlotStatsGeneral extends GuiSlot { + final GuiStats statsGui; + + public GuiSlotStatsGeneral(GuiStats var1) { + super(GuiStats.getMinecraft(var1), var1.width, var1.height, 32, var1.height - 64, 10); + this.statsGui = var1; + this.setShowSelectionBox(false); + } + + protected int getSize() { + return StatList.generalStats.size(); + } + + protected void elementClicked(int var1, boolean var2) { + } + + protected boolean isSelected(int var1) { + return false; + } + + protected int getContentHeight() { + return this.getSize() * 10; + } + + protected void drawBackground() { + this.statsGui.drawDefaultBackground(); + } + + protected void drawSlot(int var1, int var2, int var3, int var4, Tessellator var5) { + StatBase var6 = (StatBase)StatList.generalStats.get(var1); + this.statsGui.drawString(GuiStats.getFontRenderer1(this.statsGui), StatCollector.translateToLocal(var6.getName()), var2 + 2, var3 + 1, var1 % 2 == 0 ? 16777215 : 9474192); + String var7 = var6.func_75968_a(GuiStats.getStatsFileWriter(this.statsGui).writeStat(var6)); + this.statsGui.drawString(GuiStats.getFontRenderer2(this.statsGui), var7, var2 + 2 + 213 - GuiStats.getFontRenderer3(this.statsGui).getStringWidth(var7), var3 + 1, var1 % 2 == 0 ? 16777215 : 9474192); + } +} diff --git a/src/net/minecraft/src/GuiSlotStatsItem.java b/src/net/minecraft/src/GuiSlotStatsItem.java new file mode 100644 index 0000000..4868b68 --- /dev/null +++ b/src/net/minecraft/src/GuiSlotStatsItem.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; + +class GuiSlotStatsItem extends GuiSlotStats { + final GuiStats slotGuiStats; + + public GuiSlotStatsItem(GuiStats var1) { + super(var1); + this.slotGuiStats = var1; + this.field_77266_h = new ArrayList(); + Iterator var2 = StatList.itemStats.iterator(); + + while(var2.hasNext()) { + StatCrafting var3 = (StatCrafting)var2.next(); + boolean var4 = false; + int var5 = var3.getItemID(); + if(GuiStats.getStatsFileWriter(var1).writeStat(var3) > 0) { + var4 = true; + } else if(StatList.objectBreakStats[var5] != null && GuiStats.getStatsFileWriter(var1).writeStat(StatList.objectBreakStats[var5]) > 0) { + var4 = true; + } else if(StatList.objectCraftStats[var5] != null && GuiStats.getStatsFileWriter(var1).writeStat(StatList.objectCraftStats[var5]) > 0) { + var4 = true; + } + + if(var4) { + this.field_77266_h.add(var3); + } + } + + this.field_77267_i = new SorterStatsItem(this, var1); + } + + protected void func_77222_a(int var1, int var2, Tessellator var3) { + super.func_77222_a(var1, var2, var3); + if(this.field_77262_g == 0) { + GuiStats.drawSprite(this.slotGuiStats, var1 + 115 - 18 + 1, var2 + 1 + 1, 72, 18); + } else { + GuiStats.drawSprite(this.slotGuiStats, var1 + 115 - 18, var2 + 1, 72, 18); + } + + if(this.field_77262_g == 1) { + GuiStats.drawSprite(this.slotGuiStats, var1 + 165 - 18 + 1, var2 + 1 + 1, 18, 18); + } else { + GuiStats.drawSprite(this.slotGuiStats, var1 + 165 - 18, var2 + 1, 18, 18); + } + + if(this.field_77262_g == 2) { + GuiStats.drawSprite(this.slotGuiStats, var1 + 215 - 18 + 1, var2 + 1 + 1, 36, 18); + } else { + GuiStats.drawSprite(this.slotGuiStats, var1 + 215 - 18, var2 + 1, 36, 18); + } + + } + + protected void drawSlot(int var1, int var2, int var3, int var4, Tessellator var5) { + StatCrafting var6 = this.func_77257_d(var1); + int var7 = var6.getItemID(); + GuiStats.drawItemSprite(this.slotGuiStats, var2 + 40, var3, var7); + this.func_77260_a((StatCrafting)StatList.objectBreakStats[var7], var2 + 115, var3, var1 % 2 == 0); + this.func_77260_a((StatCrafting)StatList.objectCraftStats[var7], var2 + 165, var3, var1 % 2 == 0); + this.func_77260_a(var6, var2 + 215, var3, var1 % 2 == 0); + } + + protected String func_77258_c(int var1) { + return var1 == 1 ? "stat.crafted" : (var1 == 2 ? "stat.used" : "stat.depleted"); + } +} diff --git a/src/net/minecraft/src/GuiSmallButton.java b/src/net/minecraft/src/GuiSmallButton.java new file mode 100644 index 0000000..1ee0e18 --- /dev/null +++ b/src/net/minecraft/src/GuiSmallButton.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +public class GuiSmallButton extends GuiButton { + private final EnumOptions enumOptions; + + public GuiSmallButton(int var1, int var2, int var3, String var4) { + this(var1, var2, var3, (EnumOptions)null, var4); + } + + public GuiSmallButton(int var1, int var2, int var3, int var4, int var5, String var6) { + super(var1, var2, var3, var4, var5, var6); + this.enumOptions = null; + } + + public GuiSmallButton(int var1, int var2, int var3, EnumOptions var4, String var5) { + super(var1, var2, var3, 150, 20, var5); + this.enumOptions = var4; + } + + public EnumOptions returnEnumOptions() { + return this.enumOptions; + } +} diff --git a/src/net/minecraft/src/GuiSnooper.java b/src/net/minecraft/src/GuiSnooper.java new file mode 100644 index 0000000..c2de265 --- /dev/null +++ b/src/net/minecraft/src/GuiSnooper.java @@ -0,0 +1,103 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.TreeMap; +import java.util.Map.Entry; + +public class GuiSnooper extends GuiScreen { + private final GuiScreen snooperGuiScreen; + private final GameSettings snooperGameSettings; + private final List field_74098_c = new ArrayList(); + private final List field_74096_d = new ArrayList(); + private String snooperTitle; + private String[] field_74101_n; + private GuiSnooperList snooperList; + private GuiButton buttonAllowSnooping; + + public GuiSnooper(GuiScreen var1, GameSettings var2) { + this.snooperGuiScreen = var1; + this.snooperGameSettings = var2; + } + + public void initGui() { + this.snooperTitle = StatCollector.translateToLocal("options.snooper.title"); + String var1 = StatCollector.translateToLocal("options.snooper.desc"); + ArrayList var2 = new ArrayList(); + Iterator var3 = this.fontRenderer.listFormattedStringToWidth(var1, this.width - 30).iterator(); + + while(var3.hasNext()) { + String var4 = (String)var3.next(); + var2.add(var4); + } + + this.field_74101_n = (String[])var2.toArray(new String[0]); + this.field_74098_c.clear(); + this.field_74096_d.clear(); + this.buttonList.add(this.buttonAllowSnooping = new GuiButton(1, this.width / 2 - 152, this.height - 30, 150, 20, this.snooperGameSettings.getKeyBinding(EnumOptions.SNOOPER_ENABLED))); + this.buttonList.add(new GuiButton(2, this.width / 2 + 2, this.height - 30, 150, 20, StatCollector.translateToLocal("gui.done"))); + boolean var6 = this.mc.getIntegratedServer() != null && this.mc.getIntegratedServer().getPlayerUsageSnooper() != null; + Iterator var7 = (new TreeMap(this.mc.getPlayerUsageSnooper().getCurrentStats())).entrySet().iterator(); + + Entry var5; + while(var7.hasNext()) { + var5 = (Entry)var7.next(); + this.field_74098_c.add((var6 ? "C " : "") + (String)var5.getKey()); + this.field_74096_d.add(this.fontRenderer.trimStringToWidth((String)var5.getValue(), this.width - 220)); + } + + if(var6) { + var7 = (new TreeMap(this.mc.getIntegratedServer().getPlayerUsageSnooper().getCurrentStats())).entrySet().iterator(); + + while(var7.hasNext()) { + var5 = (Entry)var7.next(); + this.field_74098_c.add("S " + (String)var5.getKey()); + this.field_74096_d.add(this.fontRenderer.trimStringToWidth((String)var5.getValue(), this.width - 220)); + } + } + + this.snooperList = new GuiSnooperList(this); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 2) { + this.snooperGameSettings.saveOptions(); + this.snooperGameSettings.saveOptions(); + this.mc.displayGuiScreen(this.snooperGuiScreen); + } + + if(var1.id == 1) { + this.snooperGameSettings.setOptionValue(EnumOptions.SNOOPER_ENABLED, 1); + this.buttonAllowSnooping.displayString = this.snooperGameSettings.getKeyBinding(EnumOptions.SNOOPER_ENABLED); + } + + } + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.snooperList.drawScreen(var1, var2, var3); + this.drawCenteredString(this.fontRenderer, this.snooperTitle, this.width / 2, 8, 16777215); + int var4 = 22; + String[] var5 = this.field_74101_n; + int var6 = var5.length; + + for(int var7 = 0; var7 < var6; ++var7) { + String var8 = var5[var7]; + this.drawCenteredString(this.fontRenderer, var8, this.width / 2, var4, 8421504); + var4 += this.fontRenderer.FONT_HEIGHT; + } + + super.drawScreen(var1, var2, var3); + } + + static List func_74095_a(GuiSnooper var0) { + return var0.field_74098_c; + } + + static List func_74094_b(GuiSnooper var0) { + return var0.field_74096_d; + } +} diff --git a/src/net/minecraft/src/GuiSnooperList.java b/src/net/minecraft/src/GuiSnooperList.java new file mode 100644 index 0000000..5df0047 --- /dev/null +++ b/src/net/minecraft/src/GuiSnooperList.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +class GuiSnooperList extends GuiSlot { + final GuiSnooper snooperGui; + + public GuiSnooperList(GuiSnooper var1) { + super(var1.mc, var1.width, var1.height, 80, var1.height - 40, var1.fontRenderer.FONT_HEIGHT + 1); + this.snooperGui = var1; + } + + protected int getSize() { + return GuiSnooper.func_74095_a(this.snooperGui).size(); + } + + protected void elementClicked(int var1, boolean var2) { + } + + protected boolean isSelected(int var1) { + return false; + } + + protected void drawBackground() { + } + + protected void drawSlot(int var1, int var2, int var3, int var4, Tessellator var5) { + this.snooperGui.fontRenderer.drawString((String)GuiSnooper.func_74095_a(this.snooperGui).get(var1), 10, var3, 16777215); + this.snooperGui.fontRenderer.drawString((String)GuiSnooper.func_74094_b(this.snooperGui).get(var1), 230, var3, 16777215); + } + + protected int getScrollBarX() { + return this.snooperGui.width - 10; + } +} diff --git a/src/net/minecraft/src/GuiStats.java b/src/net/minecraft/src/GuiStats.java new file mode 100644 index 0000000..7a978b4 --- /dev/null +++ b/src/net/minecraft/src/GuiStats.java @@ -0,0 +1,178 @@ +package net.minecraft.src; + +import java.util.List; +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class GuiStats extends GuiScreen { + private static RenderItem renderItem = new RenderItem(); + protected GuiScreen parentGui; + protected String statsTitle = "Select world"; + private GuiSlotStatsGeneral slotGeneral; + private GuiSlotStatsItem slotItem; + private GuiSlotStatsBlock slotBlock; + private StatFileWriter statFileWriter; + private GuiSlot selectedSlot = null; + + public GuiStats(GuiScreen var1, StatFileWriter var2) { + this.parentGui = var1; + this.statFileWriter = var2; + } + + public void initGui() { + this.statsTitle = StatCollector.translateToLocal("gui.stats"); + this.slotGeneral = new GuiSlotStatsGeneral(this); + this.slotGeneral.registerScrollButtons(this.buttonList, 1, 1); + this.slotItem = new GuiSlotStatsItem(this); + this.slotItem.registerScrollButtons(this.buttonList, 1, 1); + this.slotBlock = new GuiSlotStatsBlock(this); + this.slotBlock.registerScrollButtons(this.buttonList, 1, 1); + this.selectedSlot = this.slotGeneral; + this.addHeaderButtons(); + } + + public void addHeaderButtons() { + StringTranslate var1 = StringTranslate.getInstance(); + this.buttonList.add(new GuiButton(0, this.width / 2 + 4, this.height - 28, 150, 20, var1.translateKey("gui.done"))); + this.buttonList.add(new GuiButton(1, this.width / 2 - 154, this.height - 52, 100, 20, var1.translateKey("stat.generalButton"))); + List var10000 = this.buttonList; + GuiButton var2 = new GuiButton(2, this.width / 2 - 46, this.height - 52, 100, 20, var1.translateKey("stat.blocksButton")); + var10000.add(var2); + var10000 = this.buttonList; + GuiButton var3 = new GuiButton(3, this.width / 2 + 62, this.height - 52, 100, 20, var1.translateKey("stat.itemsButton")); + var10000.add(var3); + if(this.slotBlock.getSize() == 0) { + var2.enabled = false; + } + + if(this.slotItem.getSize() == 0) { + var3.enabled = false; + } + + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 0) { + this.mc.displayGuiScreen(this.parentGui); + } else if(var1.id == 1) { + this.selectedSlot = this.slotGeneral; + } else if(var1.id == 3) { + this.selectedSlot = this.slotItem; + } else if(var1.id == 2) { + this.selectedSlot = this.slotBlock; + } else { + this.selectedSlot.actionPerformed(var1); + } + + } + } + + public void drawScreen(int var1, int var2, float var3) { + this.selectedSlot.drawScreen(var1, var2, var3); + this.drawCenteredString(this.fontRenderer, this.statsTitle, this.width / 2, 20, 16777215); + super.drawScreen(var1, var2, var3); + } + + private void drawItemSprite(int var1, int var2, int var3) { + this.drawButtonBackground(var1 + 1, var2 + 1); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + RenderHelper.enableGUIStandardItemLighting(); + renderItem.renderItemIntoGUI(this.fontRenderer, this.mc.renderEngine, new ItemStack(var3, 1, 0), var1 + 2, var2 + 2); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + } + + private void drawButtonBackground(int var1, int var2) { + this.drawSprite(var1, var2, 0, 0); + } + + private void drawSprite(int var1, int var2, int var3, int var4) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/slot.png"); + Tessellator var9 = Tessellator.instance; + var9.startDrawingQuads(); + var9.addVertexWithUV((double)(var1 + 0), (double)(var2 + 18), (double)this.zLevel, (double)((float)(var3 + 0) * 0.0078125F), (double)((float)(var4 + 18) * 0.0078125F)); + var9.addVertexWithUV((double)(var1 + 18), (double)(var2 + 18), (double)this.zLevel, (double)((float)(var3 + 18) * 0.0078125F), (double)((float)(var4 + 18) * 0.0078125F)); + var9.addVertexWithUV((double)(var1 + 18), (double)(var2 + 0), (double)this.zLevel, (double)((float)(var3 + 18) * 0.0078125F), (double)((float)(var4 + 0) * 0.0078125F)); + var9.addVertexWithUV((double)(var1 + 0), (double)(var2 + 0), (double)this.zLevel, (double)((float)(var3 + 0) * 0.0078125F), (double)((float)(var4 + 0) * 0.0078125F)); + var9.draw(); + } + + static Minecraft getMinecraft(GuiStats var0) { + return var0.mc; + } + + static FontRenderer getFontRenderer1(GuiStats var0) { + return var0.fontRenderer; + } + + static StatFileWriter getStatsFileWriter(GuiStats var0) { + return var0.statFileWriter; + } + + static FontRenderer getFontRenderer2(GuiStats var0) { + return var0.fontRenderer; + } + + static FontRenderer getFontRenderer3(GuiStats var0) { + return var0.fontRenderer; + } + + static Minecraft getMinecraft1(GuiStats var0) { + return var0.mc; + } + + static void drawSprite(GuiStats var0, int var1, int var2, int var3, int var4) { + var0.drawSprite(var1, var2, var3, var4); + } + + static Minecraft getMinecraft2(GuiStats var0) { + return var0.mc; + } + + static FontRenderer getFontRenderer4(GuiStats var0) { + return var0.fontRenderer; + } + + static FontRenderer getFontRenderer5(GuiStats var0) { + return var0.fontRenderer; + } + + static FontRenderer getFontRenderer6(GuiStats var0) { + return var0.fontRenderer; + } + + static FontRenderer getFontRenderer7(GuiStats var0) { + return var0.fontRenderer; + } + + static FontRenderer getFontRenderer8(GuiStats var0) { + return var0.fontRenderer; + } + + static void drawGradientRect(GuiStats var0, int var1, int var2, int var3, int var4, int var5, int var6) { + var0.drawGradientRect(var1, var2, var3, var4, var5, var6); + } + + static FontRenderer getFontRenderer9(GuiStats var0) { + return var0.fontRenderer; + } + + static FontRenderer getFontRenderer10(GuiStats var0) { + return var0.fontRenderer; + } + + static void drawGradientRect1(GuiStats var0, int var1, int var2, int var3, int var4, int var5, int var6) { + var0.drawGradientRect(var1, var2, var3, var4, var5, var6); + } + + static FontRenderer getFontRenderer11(GuiStats var0) { + return var0.fontRenderer; + } + + static void drawItemSprite(GuiStats var0, int var1, int var2, int var3) { + var0.drawItemSprite(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiTextField.java b/src/net/minecraft/src/GuiTextField.java new file mode 100644 index 0000000..51b8662 --- /dev/null +++ b/src/net/minecraft/src/GuiTextField.java @@ -0,0 +1,486 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiTextField extends Gui { + private final FontRenderer fontRenderer; + private final int xPos; + private final int yPos; + private final int width; + private final int height; + private String text = ""; + private int maxStringLength = 32; + private int cursorCounter; + private boolean enableBackgroundDrawing = true; + private boolean canLoseFocus = true; + private boolean isFocused = false; + private boolean isEnabled = true; + private int lineScrollOffset = 0; + private int cursorPosition = 0; + private int selectionEnd = 0; + private int enabledColor = 14737632; + private int disabledColor = 7368816; + private boolean visible = true; + + public GuiTextField(FontRenderer var1, int var2, int var3, int var4, int var5) { + this.fontRenderer = var1; + this.xPos = var2; + this.yPos = var3; + this.width = var4; + this.height = var5; + } + + public void updateCursorCounter() { + ++this.cursorCounter; + } + + public void setText(String var1) { + if(var1.length() > this.maxStringLength) { + this.text = var1.substring(0, this.maxStringLength); + } else { + this.text = var1; + } + + this.setCursorPositionEnd(); + } + + public String getText() { + return this.text; + } + + public String getSelectedtext() { + int var1 = this.cursorPosition < this.selectionEnd ? this.cursorPosition : this.selectionEnd; + int var2 = this.cursorPosition < this.selectionEnd ? this.selectionEnd : this.cursorPosition; + return this.text.substring(var1, var2); + } + + public void writeText(String var1) { + String var2 = ""; + String var3 = ChatAllowedCharacters.filerAllowedCharacters(var1); + int var4 = this.cursorPosition < this.selectionEnd ? this.cursorPosition : this.selectionEnd; + int var5 = this.cursorPosition < this.selectionEnd ? this.selectionEnd : this.cursorPosition; + int var6 = this.maxStringLength - this.text.length() - (var4 - this.selectionEnd); + boolean var7 = false; + if(this.text.length() > 0) { + var2 = var2 + this.text.substring(0, var4); + } + + int var8; + if(var6 < var3.length()) { + var2 = var2 + var3.substring(0, var6); + var8 = var6; + } else { + var2 = var2 + var3; + var8 = var3.length(); + } + + if(this.text.length() > 0 && var5 < this.text.length()) { + var2 = var2 + this.text.substring(var5); + } + + this.text = var2; + this.moveCursorBy(var4 - this.selectionEnd + var8); + } + + public void deleteWords(int var1) { + if(this.text.length() != 0) { + if(this.selectionEnd != this.cursorPosition) { + this.writeText(""); + } else { + this.deleteFromCursor(this.getNthWordFromCursor(var1) - this.cursorPosition); + } + } + } + + public void deleteFromCursor(int var1) { + if(this.text.length() != 0) { + if(this.selectionEnd != this.cursorPosition) { + this.writeText(""); + } else { + boolean var2 = var1 < 0; + int var3 = var2 ? this.cursorPosition + var1 : this.cursorPosition; + int var4 = var2 ? this.cursorPosition : this.cursorPosition + var1; + String var5 = ""; + if(var3 >= 0) { + var5 = this.text.substring(0, var3); + } + + if(var4 < this.text.length()) { + var5 = var5 + this.text.substring(var4); + } + + this.text = var5; + if(var2) { + this.moveCursorBy(var1); + } + + } + } + } + + public int getNthWordFromCursor(int var1) { + return this.getNthWordFromPos(var1, this.getCursorPosition()); + } + + public int getNthWordFromPos(int var1, int var2) { + return this.func_73798_a(var1, this.getCursorPosition(), true); + } + + public int func_73798_a(int var1, int var2, boolean var3) { + int var4 = var2; + boolean var5 = var1 < 0; + int var6 = Math.abs(var1); + + for(int var7 = 0; var7 < var6; ++var7) { + if(!var5) { + int var8 = this.text.length(); + var4 = this.text.indexOf(32, var4); + if(var4 == -1) { + var4 = var8; + } else { + while(var3 && var4 < var8 && this.text.charAt(var4) == 32) { + ++var4; + } + } + } else { + while(var3 && var4 > 0 && this.text.charAt(var4 - 1) == 32) { + --var4; + } + + while(var4 > 0 && this.text.charAt(var4 - 1) != 32) { + --var4; + } + } + } + + return var4; + } + + public void moveCursorBy(int var1) { + this.setCursorPosition(this.selectionEnd + var1); + } + + public void setCursorPosition(int var1) { + this.cursorPosition = var1; + int var2 = this.text.length(); + if(this.cursorPosition < 0) { + this.cursorPosition = 0; + } + + if(this.cursorPosition > var2) { + this.cursorPosition = var2; + } + + this.setSelectionPos(this.cursorPosition); + } + + public void setCursorPositionZero() { + this.setCursorPosition(0); + } + + public void setCursorPositionEnd() { + this.setCursorPosition(this.text.length()); + } + + public boolean textboxKeyTyped(char var1, int var2) { + if(this.isEnabled && this.isFocused) { + switch(var1) { + case '\u0001': + this.setCursorPositionEnd(); + this.setSelectionPos(0); + return true; + case '\u0003': + GuiScreen.setClipboardString(this.getSelectedtext()); + return true; + case '\u0016': + this.writeText(GuiScreen.getClipboardString()); + return true; + case '\u0018': + GuiScreen.setClipboardString(this.getSelectedtext()); + this.writeText(""); + return true; + default: + switch(var2) { + case 14: + if(GuiScreen.isCtrlKeyDown()) { + this.deleteWords(-1); + } else { + 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()) { + this.deleteWords(1); + } else { + this.deleteFromCursor(1); + } + + return true; + default: + if(ChatAllowedCharacters.isAllowedCharacter(var1)) { + this.writeText(Character.toString(var1)); + return true; + } else { + return false; + } + } + } + } else { + return false; + } + } + + public void mouseClicked(int var1, int var2, int var3) { + boolean var4 = var1 >= this.xPos && var1 < this.xPos + this.width && var2 >= this.yPos && var2 < this.yPos + this.height; + if(this.canLoseFocus) { + this.setFocused(this.isEnabled && var4); + } + + if(this.isFocused && var3 == 0) { + int var5 = var1 - this.xPos; + if(this.enableBackgroundDrawing) { + var5 -= 4; + } + + String var6 = this.fontRenderer.trimStringToWidth(this.text.substring(this.lineScrollOffset), this.getWidth()); + this.setCursorPosition(this.fontRenderer.trimStringToWidth(var6, var5).length() + this.lineScrollOffset); + } + + } + + public void drawTextBox() { + if(this.getVisible()) { + if(this.getEnableBackgroundDrawing()) { + drawRect(this.xPos - 1, this.yPos - 1, this.xPos + this.width + 1, this.yPos + this.height + 1, -6250336); + drawRect(this.xPos, this.yPos, this.xPos + this.width, this.yPos + this.height, -16777216); + } + + int var1 = this.isEnabled ? this.enabledColor : this.disabledColor; + int var2 = this.cursorPosition - this.lineScrollOffset; + int var3 = this.selectionEnd - this.lineScrollOffset; + String var4 = this.fontRenderer.trimStringToWidth(this.text.substring(this.lineScrollOffset), this.getWidth()); + boolean var5 = var2 >= 0 && var2 <= var4.length(); + boolean var6 = this.isFocused && this.cursorCounter / 6 % 2 == 0 && var5; + int var7 = this.enableBackgroundDrawing ? this.xPos + 4 : this.xPos; + int var8 = this.enableBackgroundDrawing ? this.yPos + (this.height - 8) / 2 : this.yPos; + int var9 = var7; + if(var3 > var4.length()) { + var3 = var4.length(); + } + + if(var4.length() > 0) { + String var10 = var5 ? var4.substring(0, var2) : var4; + var9 = this.fontRenderer.drawStringWithShadow(var10, var7, var8, var1); + } + + boolean var13 = this.cursorPosition < this.text.length() || this.text.length() >= this.getMaxStringLength(); + int var11 = var9; + if(!var5) { + var11 = var2 > 0 ? var7 + this.width : var7; + } else if(var13) { + var11 = var9 - 1; + --var9; + } + + if(var4.length() > 0 && var5 && var2 < var4.length()) { + this.fontRenderer.drawStringWithShadow(var4.substring(var2), var9, var8, var1); + } + + if(var6) { + if(var13) { + Gui.drawRect(var11, var8 - 1, var11 + 1, var8 + 1 + this.fontRenderer.FONT_HEIGHT, -3092272); + } else { + this.fontRenderer.drawStringWithShadow("_", var11, var8, var1); + } + } + + if(var3 != var2) { + int var12 = var7 + this.fontRenderer.getStringWidth(var4.substring(0, var3)); + this.drawCursorVertical(var11, var8 - 1, var12 - 1, var8 + 1 + this.fontRenderer.FONT_HEIGHT); + } + + } + } + + private void drawCursorVertical(int var1, int var2, int var3, int var4) { + int var5; + if(var1 < var3) { + var5 = var1; + var1 = var3; + var3 = var5; + } + + if(var2 < var4) { + var5 = var2; + var2 = var4; + var4 = var5; + } + + Tessellator var6 = Tessellator.instance; + GL11.glColor4f(0.0F, 0.0F, 255.0F, 255.0F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_COLOR_LOGIC_OP); + GL11.glLogicOp(GL11.GL_OR_REVERSE); + var6.startDrawingQuads(); + var6.addVertex((double)var1, (double)var4, 0.0D); + var6.addVertex((double)var3, (double)var4, 0.0D); + var6.addVertex((double)var3, (double)var2, 0.0D); + var6.addVertex((double)var1, (double)var2, 0.0D); + var6.draw(); + GL11.glDisable(GL11.GL_COLOR_LOGIC_OP); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + public void setMaxStringLength(int var1) { + this.maxStringLength = var1; + if(this.text.length() > var1) { + this.text = this.text.substring(0, var1); + } + + } + + public int getMaxStringLength() { + return this.maxStringLength; + } + + public int getCursorPosition() { + return this.cursorPosition; + } + + public boolean getEnableBackgroundDrawing() { + return this.enableBackgroundDrawing; + } + + public void setEnableBackgroundDrawing(boolean var1) { + this.enableBackgroundDrawing = var1; + } + + public void setTextColor(int var1) { + this.enabledColor = var1; + } + + public void setDisabledTextColour(int var1) { + this.disabledColor = var1; + } + + public void setFocused(boolean var1) { + if(var1 && !this.isFocused) { + this.cursorCounter = 0; + } + + this.isFocused = var1; + } + + public boolean isFocused() { + return this.isFocused; + } + + public void setEnabled(boolean var1) { + this.isEnabled = var1; + } + + public int getSelectionEnd() { + return this.selectionEnd; + } + + public int getWidth() { + return this.getEnableBackgroundDrawing() ? this.width - 8 : this.width; + } + + public void setSelectionPos(int var1) { + int var2 = this.text.length(); + if(var1 > var2) { + var1 = var2; + } + + if(var1 < 0) { + var1 = 0; + } + + this.selectionEnd = var1; + if(this.fontRenderer != null) { + if(this.lineScrollOffset > var2) { + this.lineScrollOffset = var2; + } + + int var3 = this.getWidth(); + String var4 = this.fontRenderer.trimStringToWidth(this.text.substring(this.lineScrollOffset), var3); + int var5 = var4.length() + this.lineScrollOffset; + if(var1 == this.lineScrollOffset) { + this.lineScrollOffset -= this.fontRenderer.trimStringToWidth(this.text, var3, true).length(); + } + + if(var1 > var5) { + this.lineScrollOffset += var1 - var5; + } else if(var1 <= this.lineScrollOffset) { + this.lineScrollOffset -= this.lineScrollOffset - var1; + } + + if(this.lineScrollOffset < 0) { + this.lineScrollOffset = 0; + } + + if(this.lineScrollOffset > var2) { + this.lineScrollOffset = var2; + } + } + + } + + public void setCanLoseFocus(boolean var1) { + this.canLoseFocus = var1; + } + + public boolean getVisible() { + return this.visible; + } + + public void setVisible(boolean var1) { + this.visible = var1; + } +} diff --git a/src/net/minecraft/src/GuiTexturePackSlot.java b/src/net/minecraft/src/GuiTexturePackSlot.java new file mode 100644 index 0000000..8d8c8e6 --- /dev/null +++ b/src/net/minecraft/src/GuiTexturePackSlot.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +import java.util.List; +import org.lwjgl.opengl.GL11; + +class GuiTexturePackSlot extends GuiSlot { + final GuiTexturePacks parentTexturePackGui; + + public GuiTexturePackSlot(GuiTexturePacks var1) { + super(GuiTexturePacks.func_73950_a(var1), var1.width, var1.height, 32, var1.height - 55 + 4, 36); + this.parentTexturePackGui = var1; + } + + protected int getSize() { + return GuiTexturePacks.func_73955_b(this.parentTexturePackGui).texturePackList.availableTexturePacks().size(); + } + + protected void elementClicked(int var1, boolean var2) { + List var3 = GuiTexturePacks.func_73958_c(this.parentTexturePackGui).texturePackList.availableTexturePacks(); + + try { + GuiTexturePacks.func_73951_d(this.parentTexturePackGui).texturePackList.setTexturePack((ITexturePack)var3.get(var1)); + GuiTexturePacks.func_73952_e(this.parentTexturePackGui).renderEngine.refreshTextures(); + GuiTexturePacks.func_73962_f(this.parentTexturePackGui).renderGlobal.loadRenderers(); + } catch (Exception var5) { + GuiTexturePacks.func_73959_g(this.parentTexturePackGui).texturePackList.setTexturePack((ITexturePack)var3.get(0)); + GuiTexturePacks.func_73957_h(this.parentTexturePackGui).renderEngine.refreshTextures(); + GuiTexturePacks.func_73956_i(this.parentTexturePackGui).renderGlobal.loadRenderers(); + } + + } + + protected boolean isSelected(int var1) { + List var2 = GuiTexturePacks.func_73953_j(this.parentTexturePackGui).texturePackList.availableTexturePacks(); + return GuiTexturePacks.func_73961_k(this.parentTexturePackGui).texturePackList.getSelectedTexturePack() == var2.get(var1); + } + + protected int getContentHeight() { + return this.getSize() * 36; + } + + protected void drawBackground() { + this.parentTexturePackGui.drawDefaultBackground(); + } + + protected void drawSlot(int var1, int var2, int var3, int var4, Tessellator var5) { + ITexturePack var6 = (ITexturePack)GuiTexturePacks.func_96143_l(this.parentTexturePackGui).texturePackList.availableTexturePacks().get(var1); + var6.bindThumbnailTexture(GuiTexturePacks.func_96142_m(this.parentTexturePackGui).renderEngine); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var5.startDrawingQuads(); + var5.setColorOpaque_I(16777215); + var5.addVertexWithUV((double)var2, (double)(var3 + var4), 0.0D, 0.0D, 1.0D); + var5.addVertexWithUV((double)(var2 + 32), (double)(var3 + var4), 0.0D, 1.0D, 1.0D); + var5.addVertexWithUV((double)(var2 + 32), (double)var3, 0.0D, 1.0D, 0.0D); + var5.addVertexWithUV((double)var2, (double)var3, 0.0D, 0.0D, 0.0D); + var5.draw(); + String var7 = var6.getTexturePackFileName(); + if(!var6.isCompatible()) { + var7 = EnumChatFormatting.DARK_RED + StatCollector.translateToLocal("texturePack.incompatible") + " - " + var7; + } + + if(var7.length() > 32) { + var7 = var7.substring(0, 32).trim() + "..."; + } + + this.parentTexturePackGui.drawString(GuiTexturePacks.func_73954_n(this.parentTexturePackGui), var7, var2 + 32 + 2, var3 + 1, 16777215); + this.parentTexturePackGui.drawString(GuiTexturePacks.func_96145_o(this.parentTexturePackGui), var6.getFirstDescriptionLine(), var2 + 32 + 2, var3 + 12, 8421504); + this.parentTexturePackGui.drawString(GuiTexturePacks.func_96144_p(this.parentTexturePackGui), var6.getSecondDescriptionLine(), var2 + 32 + 2, var3 + 12 + 10, 8421504); + } +} diff --git a/src/net/minecraft/src/GuiTexturePacks.java b/src/net/minecraft/src/GuiTexturePacks.java new file mode 100644 index 0000000..58fb064 --- /dev/null +++ b/src/net/minecraft/src/GuiTexturePacks.java @@ -0,0 +1,166 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.IOException; +import java.net.URI; +import net.minecraft.client.Minecraft; +import org.lwjgl.Sys; + +public class GuiTexturePacks extends GuiScreen { + protected GuiScreen guiScreen; + private int refreshTimer = -1; + private String fileLocation = ""; + private GuiTexturePackSlot guiTexturePackSlot; + private GameSettings field_96146_n; + + public GuiTexturePacks(GuiScreen var1, GameSettings var2) { + this.guiScreen = var1; + this.field_96146_n = var2; + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + this.buttonList.add(new GuiSmallButton(5, this.width / 2 - 154, this.height - 48, var1.translateKey("texturePack.openFolder"))); + this.buttonList.add(new GuiSmallButton(6, this.width / 2 + 4, this.height - 48, var1.translateKey("gui.done"))); + this.mc.texturePackList.updateAvaliableTexturePacks(); + this.fileLocation = (new File(Minecraft.getMinecraftDir(), "texturepacks")).getAbsolutePath(); + this.guiTexturePackSlot = new GuiTexturePackSlot(this); + this.guiTexturePackSlot.registerScrollButtons(this.buttonList, 7, 8); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id == 5) { + if(Minecraft.getOs() == EnumOS.MACOS) { + try { + this.mc.getLogAgent().logInfo(this.fileLocation); + Runtime.getRuntime().exec(new String[]{"/usr/bin/open", this.fileLocation}); + return; + } catch (IOException var7) { + var7.printStackTrace(); + } + } else if(Minecraft.getOs() == EnumOS.WINDOWS) { + String var2 = String.format("cmd.exe /C start \"Open file\" \"%s\"", new Object[]{this.fileLocation}); + + try { + Runtime.getRuntime().exec(var2); + return; + } catch (IOException var6) { + var6.printStackTrace(); + } + } + + boolean var8 = false; + + try { + Class var3 = Class.forName("java.awt.Desktop"); + Object var4 = var3.getMethod("getDesktop", new Class[0]).invoke((Object)null, new Object[0]); + var3.getMethod("browse", new Class[]{URI.class}).invoke(var4, new Object[]{(new File(Minecraft.getMinecraftDir(), "texturepacks")).toURI()}); + } catch (Throwable var5) { + var5.printStackTrace(); + var8 = true; + } + + if(var8) { + this.mc.getLogAgent().logInfo("Opening via system class!"); + Sys.openURL("file://" + this.fileLocation); + } + } else if(var1.id == 6) { + this.mc.displayGuiScreen(this.guiScreen); + } else { + this.guiTexturePackSlot.actionPerformed(var1); + } + + } + } + + protected void mouseClicked(int var1, int var2, int var3) { + super.mouseClicked(var1, var2, var3); + } + + protected void mouseMovedOrUp(int var1, int var2, int var3) { + super.mouseMovedOrUp(var1, var2, var3); + } + + public void drawScreen(int var1, int var2, float var3) { + this.guiTexturePackSlot.drawScreen(var1, var2, var3); + if(this.refreshTimer <= 0) { + this.mc.texturePackList.updateAvaliableTexturePacks(); + this.refreshTimer += 20; + } + + StringTranslate var4 = StringTranslate.getInstance(); + this.drawCenteredString(this.fontRenderer, var4.translateKey("texturePack.title"), this.width / 2, 16, 16777215); + this.drawCenteredString(this.fontRenderer, var4.translateKey("texturePack.folderInfo"), this.width / 2 - 77, this.height - 26, 8421504); + super.drawScreen(var1, var2, var3); + } + + public void updateScreen() { + super.updateScreen(); + --this.refreshTimer; + } + + static Minecraft func_73950_a(GuiTexturePacks var0) { + return var0.mc; + } + + static Minecraft func_73955_b(GuiTexturePacks var0) { + return var0.mc; + } + + static Minecraft func_73958_c(GuiTexturePacks var0) { + return var0.mc; + } + + static Minecraft func_73951_d(GuiTexturePacks var0) { + return var0.mc; + } + + static Minecraft func_73952_e(GuiTexturePacks var0) { + return var0.mc; + } + + static Minecraft func_73962_f(GuiTexturePacks var0) { + return var0.mc; + } + + static Minecraft func_73959_g(GuiTexturePacks var0) { + return var0.mc; + } + + static Minecraft func_73957_h(GuiTexturePacks var0) { + return var0.mc; + } + + static Minecraft func_73956_i(GuiTexturePacks var0) { + return var0.mc; + } + + static Minecraft func_73953_j(GuiTexturePacks var0) { + return var0.mc; + } + + static Minecraft func_73961_k(GuiTexturePacks var0) { + return var0.mc; + } + + static Minecraft func_96143_l(GuiTexturePacks var0) { + return var0.mc; + } + + static Minecraft func_96142_m(GuiTexturePacks var0) { + return var0.mc; + } + + static FontRenderer func_73954_n(GuiTexturePacks var0) { + return var0.fontRenderer; + } + + static FontRenderer func_96145_o(GuiTexturePacks var0) { + return var0.fontRenderer; + } + + static FontRenderer func_96144_p(GuiTexturePacks var0) { + return var0.fontRenderer; + } +} diff --git a/src/net/minecraft/src/GuiVideoSettings.java b/src/net/minecraft/src/GuiVideoSettings.java new file mode 100644 index 0000000..46ddff4 --- /dev/null +++ b/src/net/minecraft/src/GuiVideoSettings.java @@ -0,0 +1,85 @@ +package net.minecraft.src; + +public class GuiVideoSettings extends GuiScreen { + private GuiScreen parentGuiScreen; + protected String screenTitle = "Video Settings"; + private GameSettings guiGameSettings; + private boolean is64bit = false; + private static EnumOptions[] videoOptions = new EnumOptions[]{EnumOptions.GRAPHICS, EnumOptions.RENDER_DISTANCE, EnumOptions.AMBIENT_OCCLUSION, EnumOptions.FRAMERATE_LIMIT, EnumOptions.ANAGLYPH, EnumOptions.VIEW_BOBBING, EnumOptions.GUI_SCALE, EnumOptions.ADVANCED_OPENGL, EnumOptions.GAMMA, EnumOptions.RENDER_CLOUDS, EnumOptions.PARTICLES, EnumOptions.USE_SERVER_TEXTURES, EnumOptions.USE_FULLSCREEN, EnumOptions.ENABLE_VSYNC}; + + public GuiVideoSettings(GuiScreen var1, GameSettings var2) { + this.parentGuiScreen = var1; + this.guiGameSettings = var2; + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + this.screenTitle = var1.translateKey("options.videoTitle"); + this.buttonList.clear(); + this.buttonList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, var1.translateKey("gui.done"))); + this.is64bit = false; + String[] var2 = new String[]{"sun.arch.data.model", "com.ibm.vm.bitmode", "os.arch"}; + String[] var3 = var2; + int var4 = var2.length; + + for(int var5 = 0; var5 < var4; ++var5) { + String var6 = var3[var5]; + String var7 = System.getProperty(var6); + if(var7 != null && var7.contains("64")) { + this.is64bit = true; + break; + } + } + + int var9 = 0; + var4 = this.is64bit ? 0 : -15; + EnumOptions[] var10 = videoOptions; + int var11 = var10.length; + + for(int var12 = 0; var12 < var11; ++var12) { + EnumOptions var8 = var10[var12]; + if(var8.getEnumFloat()) { + this.buttonList.add(new GuiSlider(var8.returnEnumOrdinal(), this.width / 2 - 155 + var9 % 2 * 160, this.height / 7 + var4 + 24 * (var9 >> 1), var8, this.guiGameSettings.getKeyBinding(var8), this.guiGameSettings.getOptionFloatValue(var8))); + } else { + this.buttonList.add(new GuiSmallButton(var8.returnEnumOrdinal(), this.width / 2 - 155 + var9 % 2 * 160, this.height / 7 + var4 + 24 * (var9 >> 1), var8, this.guiGameSettings.getKeyBinding(var8))); + } + + ++var9; + } + + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + int var2 = this.guiGameSettings.guiScale; + if(var1.id < 100 && var1 instanceof GuiSmallButton) { + this.guiGameSettings.setOptionValue(((GuiSmallButton)var1).returnEnumOptions(), 1); + var1.displayString = this.guiGameSettings.getKeyBinding(EnumOptions.getEnumOptions(var1.id)); + } + + if(var1.id == 200) { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(this.parentGuiScreen); + } + + if(this.guiGameSettings.guiScale != var2) { + ScaledResolution var3 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight); + int var4 = var3.getScaledWidth(); + int var5 = var3.getScaledHeight(); + this.setWorldAndResolution(this.mc, var4, var5); + } + + } + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, this.is64bit ? 20 : 5, 16777215); + if(!this.is64bit && this.guiGameSettings.renderDistance == 0) { + this.drawCenteredString(this.fontRenderer, StatCollector.translateToLocal("options.farWarning1"), this.width / 2, this.height / 6 + 144 + 1, 11468800); + this.drawCenteredString(this.fontRenderer, StatCollector.translateToLocal("options.farWarning2"), this.width / 2, this.height / 6 + 144 + 13, 11468800); + } + + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiWinGame.java b/src/net/minecraft/src/GuiWinGame.java new file mode 100644 index 0000000..20f03a7 --- /dev/null +++ b/src/net/minecraft/src/GuiWinGame.java @@ -0,0 +1,178 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import org.lwjgl.opengl.GL11; + +public class GuiWinGame extends GuiScreen { + private int updateCounter = 0; + private List lines; + private int field_73989_c = 0; + private float field_73987_d = 0.5F; + + public void updateScreen() { + ++this.updateCounter; + float var1 = (float)(this.field_73989_c + this.height + this.height + 24) / this.field_73987_d; + if((float)this.updateCounter > var1) { + this.respawnPlayer(); + } + + } + + protected void keyTyped(char var1, int var2) { + if(var2 == 1) { + this.respawnPlayer(); + } + + } + + private void respawnPlayer() { + this.mc.thePlayer.sendQueue.addToSendQueue(new Packet205ClientCommand(1)); + this.mc.displayGuiScreen((GuiScreen)null); + } + + public boolean doesGuiPauseGame() { + return true; + } + + public void initGui() { + if(this.lines == null) { + this.lines = new ArrayList(); + + try { + String var1 = ""; + String var2 = "" + EnumChatFormatting.WHITE + EnumChatFormatting.OBFUSCATED + EnumChatFormatting.GREEN + EnumChatFormatting.AQUA; + short var3 = 274; + BufferedReader var4 = new BufferedReader(new InputStreamReader(GuiWinGame.class.getResourceAsStream("/title/win.txt"), Charset.forName("UTF-8"))); + Random var5 = new Random(8124371L); + + while(true) { + var1 = var4.readLine(); + int var6; + if(var1 == null) { + for(var6 = 0; var6 < 8; ++var6) { + this.lines.add(""); + } + + var4 = new BufferedReader(new InputStreamReader(GuiWinGame.class.getResourceAsStream("/title/credits.txt"), Charset.forName("UTF-8"))); + + while(true) { + var1 = var4.readLine(); + if(var1 == null) { + this.field_73989_c = this.lines.size() * 12; + return; + } + + var1 = var1.replaceAll("PLAYERNAME", this.mc.session.username); + var1 = var1.replaceAll("\t", " "); + this.lines.addAll(this.mc.fontRenderer.listFormattedStringToWidth(var1, var3)); + this.lines.add(""); + } + } + + String var7; + String var8; + for(var1 = var1.replaceAll("PLAYERNAME", this.mc.session.username); var1.contains(var2); var1 = var7 + EnumChatFormatting.WHITE + EnumChatFormatting.OBFUSCATED + "XXXXXXXX".substring(0, var5.nextInt(4) + 3) + var8) { + var6 = var1.indexOf(var2); + var7 = var1.substring(0, var6); + var8 = var1.substring(var6 + var2.length()); + } + + this.lines.addAll(this.mc.fontRenderer.listFormattedStringToWidth(var1, var3)); + this.lines.add(""); + } + } catch (Exception var9) { + var9.printStackTrace(); + } + } + } + + private void func_73986_b(int var1, int var2, float var3) { + Tessellator var4 = Tessellator.instance; + this.mc.renderEngine.bindTexture("%blur%/gui/background.png"); + var4.startDrawingQuads(); + var4.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F); + int var5 = this.width; + float var6 = 0.0F - ((float)this.updateCounter + var3) * 0.5F * this.field_73987_d; + float var7 = (float)this.height - ((float)this.updateCounter + var3) * 0.5F * this.field_73987_d; + float var8 = 0.015625F; + float var9 = ((float)this.updateCounter + var3 - 0.0F) * 0.02F; + float var10 = (float)(this.field_73989_c + this.height + this.height + 24) / this.field_73987_d; + float var11 = (var10 - 20.0F - ((float)this.updateCounter + var3)) * 0.005F; + if(var11 < var9) { + var9 = var11; + } + + if(var9 > 1.0F) { + var9 = 1.0F; + } + + var9 *= var9; + var9 = var9 * 96.0F / 255.0F; + var4.setColorOpaque_F(var9, var9, var9); + var4.addVertexWithUV(0.0D, (double)this.height, (double)this.zLevel, 0.0D, (double)(var6 * var8)); + var4.addVertexWithUV((double)var5, (double)this.height, (double)this.zLevel, (double)((float)var5 * var8), (double)(var6 * var8)); + var4.addVertexWithUV((double)var5, 0.0D, (double)this.zLevel, (double)((float)var5 * var8), (double)(var7 * var8)); + var4.addVertexWithUV(0.0D, 0.0D, (double)this.zLevel, 0.0D, (double)(var7 * var8)); + var4.draw(); + } + + public void drawScreen(int var1, int var2, float var3) { + this.func_73986_b(var1, var2, var3); + Tessellator var4 = Tessellator.instance; + short var5 = 274; + int var6 = this.width / 2 - var5 / 2; + int var7 = this.height + 50; + float var8 = -((float)this.updateCounter + var3) * this.field_73987_d; + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, var8, 0.0F); + this.mc.renderEngine.bindTexture("/title/mclogo.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.drawTexturedModalRect(var6, var7, 0, 0, 155, 44); + this.drawTexturedModalRect(var6 + 155, var7, 0, 45, 155, 44); + var4.setColorOpaque_I(16777215); + int var9 = var7 + 200; + + int var10; + for(var10 = 0; var10 < this.lines.size(); ++var10) { + if(var10 == this.lines.size() - 1) { + float var11 = (float)var9 + var8 - (float)(this.height / 2 - 6); + if(var11 < 0.0F) { + GL11.glTranslatef(0.0F, -var11, 0.0F); + } + } + + if((float)var9 + var8 + 12.0F + 8.0F > 0.0F && (float)var9 + var8 < (float)this.height) { + String var12 = (String)this.lines.get(var10); + if(var12.startsWith("[C]")) { + this.fontRenderer.drawStringWithShadow(var12.substring(3), var6 + (var5 - this.fontRenderer.getStringWidth(var12.substring(3))) / 2, var9, 16777215); + } else { + this.fontRenderer.fontRandom.setSeed((long)var10 * 4238972211L + (long)(this.updateCounter / 4)); + this.fontRenderer.drawStringWithShadow(var12, var6, var9, 16777215); + } + } + + var9 += 12; + } + + GL11.glPopMatrix(); + this.mc.renderEngine.bindTexture("%blur%/misc/vignette.png"); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_ZERO, GL11.GL_ONE_MINUS_SRC_COLOR); + var4.startDrawingQuads(); + var4.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F); + var10 = this.width; + int var13 = this.height; + var4.addVertexWithUV(0.0D, (double)var13, (double)this.zLevel, 0.0D, 1.0D); + var4.addVertexWithUV((double)var10, (double)var13, (double)this.zLevel, 1.0D, 1.0D); + var4.addVertexWithUV((double)var10, 0.0D, (double)this.zLevel, 1.0D, 0.0D); + var4.addVertexWithUV(0.0D, 0.0D, (double)this.zLevel, 0.0D, 0.0D); + var4.draw(); + GL11.glDisable(GL11.GL_BLEND); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiWorldSlot.java b/src/net/minecraft/src/GuiWorldSlot.java new file mode 100644 index 0000000..0b5406d --- /dev/null +++ b/src/net/minecraft/src/GuiWorldSlot.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +import java.util.Date; + +class GuiWorldSlot extends GuiSlot { + final GuiSelectWorld parentWorldGui; + + public GuiWorldSlot(GuiSelectWorld var1) { + super(var1.mc, var1.width, var1.height, 32, var1.height - 64, 36); + this.parentWorldGui = var1; + } + + protected int getSize() { + return GuiSelectWorld.getSize(this.parentWorldGui).size(); + } + + protected void elementClicked(int var1, boolean var2) { + GuiSelectWorld.onElementSelected(this.parentWorldGui, var1); + boolean var3 = GuiSelectWorld.getSelectedWorld(this.parentWorldGui) >= 0 && GuiSelectWorld.getSelectedWorld(this.parentWorldGui) < this.getSize(); + GuiSelectWorld.getSelectButton(this.parentWorldGui).enabled = var3; + GuiSelectWorld.getRenameButton(this.parentWorldGui).enabled = var3; + GuiSelectWorld.getDeleteButton(this.parentWorldGui).enabled = var3; + GuiSelectWorld.func_82312_f(this.parentWorldGui).enabled = var3; + if(var2 && var3) { + this.parentWorldGui.selectWorld(var1); + } + + } + + protected boolean isSelected(int var1) { + return var1 == GuiSelectWorld.getSelectedWorld(this.parentWorldGui); + } + + protected int getContentHeight() { + return GuiSelectWorld.getSize(this.parentWorldGui).size() * 36; + } + + protected void drawBackground() { + this.parentWorldGui.drawDefaultBackground(); + } + + protected void drawSlot(int var1, int var2, int var3, int var4, Tessellator var5) { + SaveFormatComparator var6 = (SaveFormatComparator)GuiSelectWorld.getSize(this.parentWorldGui).get(var1); + String var7 = var6.getDisplayName(); + if(var7 == null || MathHelper.stringNullOrLengthZero(var7)) { + var7 = GuiSelectWorld.func_82313_g(this.parentWorldGui) + " " + (var1 + 1); + } + + String var8 = var6.getFileName(); + var8 = var8 + " (" + GuiSelectWorld.func_82315_h(this.parentWorldGui).format(new Date(var6.getLastTimePlayed())); + var8 = var8 + ")"; + String var9 = ""; + if(var6.requiresConversion()) { + var9 = GuiSelectWorld.func_82311_i(this.parentWorldGui) + " " + var9; + } else { + var9 = GuiSelectWorld.func_82314_j(this.parentWorldGui)[var6.getEnumGameType().getID()]; + if(var6.isHardcoreModeEnabled()) { + var9 = EnumChatFormatting.DARK_RED + StatCollector.translateToLocal("gameMode.hardcore") + EnumChatFormatting.RESET; + } + + if(var6.getCheatsEnabled()) { + var9 = var9 + ", " + StatCollector.translateToLocal("selectWorld.cheats"); + } + } + + this.parentWorldGui.drawString(this.parentWorldGui.fontRenderer, var7, var2 + 2, var3 + 1, 16777215); + this.parentWorldGui.drawString(this.parentWorldGui.fontRenderer, var8, var2 + 2, var3 + 12, 8421504); + this.parentWorldGui.drawString(this.parentWorldGui.fontRenderer, var9, var2 + 2, var3 + 12 + 10, 8421504); + } +} diff --git a/src/net/minecraft/src/GuiYesNo.java b/src/net/minecraft/src/GuiYesNo.java new file mode 100644 index 0000000..5c81fbe --- /dev/null +++ b/src/net/minecraft/src/GuiYesNo.java @@ -0,0 +1,45 @@ +package net.minecraft.src; + +public class GuiYesNo extends GuiScreen { + protected GuiScreen parentScreen; + protected String message1; + private String message2; + protected String buttonText1; + protected String buttonText2; + protected int worldNumber; + + public GuiYesNo(GuiScreen var1, String var2, String var3, int var4) { + this.parentScreen = var1; + this.message1 = var2; + this.message2 = var3; + this.worldNumber = var4; + StringTranslate var5 = StringTranslate.getInstance(); + this.buttonText1 = var5.translateKey("gui.yes"); + this.buttonText2 = var5.translateKey("gui.no"); + } + + public GuiYesNo(GuiScreen var1, String var2, String var3, String var4, String var5, int var6) { + this.parentScreen = var1; + this.message1 = var2; + this.message2 = var3; + this.buttonText1 = var4; + this.buttonText2 = var5; + this.worldNumber = var6; + } + + public void initGui() { + this.buttonList.add(new GuiSmallButton(0, this.width / 2 - 155, this.height / 6 + 96, this.buttonText1)); + this.buttonList.add(new GuiSmallButton(1, this.width / 2 - 155 + 160, this.height / 6 + 96, this.buttonText2)); + } + + protected void actionPerformed(GuiButton var1) { + this.parentScreen.confirmClicked(var1.id == 0, this.worldNumber); + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.message1, this.width / 2, 70, 16777215); + this.drawCenteredString(this.fontRenderer, this.message2, this.width / 2, 90, 16777215); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/Hopper.java b/src/net/minecraft/src/Hopper.java new file mode 100644 index 0000000..a2b31b9 --- /dev/null +++ b/src/net/minecraft/src/Hopper.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public interface Hopper extends IInventory { + World getWorldObj(); + + double getXPos(); + + double getYPos(); + + double getZPos(); +} diff --git a/src/net/minecraft/src/HttpUtil.java b/src/net/minecraft/src/HttpUtil.java new file mode 100644 index 0000000..c52874f --- /dev/null +++ b/src/net/minecraft/src/HttpUtil.java @@ -0,0 +1,178 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.ServerSocket; +import java.net.URL; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class HttpUtil { + public static String buildPostString(Map var0) { + StringBuilder var1 = new StringBuilder(); + Iterator var2 = var0.entrySet().iterator(); + + while(var2.hasNext()) { + Entry var3 = (Entry)var2.next(); + if(var1.length() > 0) { + var1.append('&'); + } + + try { + var1.append(URLEncoder.encode((String)var3.getKey(), "UTF-8")); + } catch (UnsupportedEncodingException var6) { + var6.printStackTrace(); + } + + if(var3.getValue() != null) { + var1.append('='); + + try { + var1.append(URLEncoder.encode(var3.getValue().toString(), "UTF-8")); + } catch (UnsupportedEncodingException var5) { + var5.printStackTrace(); + } + } + } + + return var1.toString(); + } + + public static String sendPost(ILogAgent var0, URL var1, Map var2, boolean var3) { + return sendPost(var0, var1, buildPostString(var2), var3); + } + + public static String sendPost(ILogAgent var0, URL var1, String var2, boolean var3) { + try { + HttpURLConnection var4 = (HttpURLConnection)var1.openConnection(); + var4.setRequestMethod("POST"); + var4.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); + var4.setRequestProperty("Content-Length", "" + var2.getBytes().length); + var4.setRequestProperty("Content-Language", "en-US"); + var4.setUseCaches(false); + var4.setDoInput(true); + var4.setDoOutput(true); + DataOutputStream var5 = new DataOutputStream(var4.getOutputStream()); + var5.writeBytes(var2); + var5.flush(); + var5.close(); + BufferedReader var6 = new BufferedReader(new InputStreamReader(var4.getInputStream())); + StringBuffer var8 = new StringBuffer(); + + while(true) { + String var7 = var6.readLine(); + if(var7 == null) { + var6.close(); + return var8.toString(); + } + + var8.append(var7); + var8.append('\r'); + } + } catch (Exception var9) { + if(!var3) { + if(var0 != null) { + var0.logSevereException("Could not post to " + var1, var9); + } else { + Logger.getAnonymousLogger().log(Level.SEVERE, "Could not post to " + var1, var9); + } + } + + return ""; + } + } + + public static void downloadTexturePack(File var0, String var1, IDownloadSuccess var2, Map var3, int var4, IProgressUpdate var5) { + Thread var6 = new Thread(new HttpUtilRunnable(var5, var1, var3, var0, var2, var4)); + var6.setDaemon(true); + var6.start(); + } + + public static int func_76181_a() throws IOException { + ServerSocket var0 = null; + boolean var1 = true; + + int var10; + try { + var0 = new ServerSocket(0); + var10 = var0.getLocalPort(); + } finally { + try { + if(var0 != null) { + var0.close(); + } + } catch (IOException var8) { + } + + } + + return var10; + } + + public static String[] loginToMinecraft(ILogAgent var0, String var1, String var2) { + HashMap var3 = new HashMap(); + var3.put("user", var1); + var3.put("password", var2); + var3.put("version", Integer.valueOf(13)); + + String var4; + try { + var4 = sendPost(var0, new URL("http://login.minecraft.net/"), (Map)var3, false); + } catch (MalformedURLException var6) { + var6.printStackTrace(); + return null; + } + + if(var4 != null && var4.length() != 0) { + if(!var4.contains(":")) { + if(var0 == null) { + System.out.println("Failed to authenticate: " + var4); + } else { + var0.logWarning("Failed to authenticae: " + var4); + } + + return null; + } else { + String[] var5 = var4.split(":"); + return new String[]{var5[2], var5[3]}; + } + } else { + if(var0 == null) { + System.out.println("Failed to authenticate: Can\'t connect to minecraft.net"); + } else { + var0.logWarning("Failed to authenticate: Can\'t connect to minecraft.net"); + } + + return null; + } + } + + public static String func_104145_a(URL var0) throws IOException { + HttpURLConnection var1 = (HttpURLConnection)var0.openConnection(); + var1.setRequestMethod("GET"); + BufferedReader var2 = new BufferedReader(new InputStreamReader(var1.getInputStream())); + StringBuilder var4 = new StringBuilder(); + + while(true) { + String var3 = var2.readLine(); + if(var3 == null) { + var2.close(); + return var4.toString(); + } + + var4.append(var3); + var4.append('\r'); + } + } +} diff --git a/src/net/minecraft/src/HttpUtilRunnable.java b/src/net/minecraft/src/HttpUtilRunnable.java new file mode 100644 index 0000000..94991cb --- /dev/null +++ b/src/net/minecraft/src/HttpUtilRunnable.java @@ -0,0 +1,135 @@ +package net.minecraft.src; + +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; +import java.net.URLConnection; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +final class HttpUtilRunnable implements Runnable { + final IProgressUpdate feedbackHook; + final String sourceURL; + final Map field_76177_c; + final File destinationFile; + final IDownloadSuccess downloadSuccess; + final int maxFileSize; + + HttpUtilRunnable(IProgressUpdate var1, String var2, Map var3, File var4, IDownloadSuccess var5, int var6) { + this.feedbackHook = var1; + this.sourceURL = var2; + this.field_76177_c = var3; + this.destinationFile = var4; + this.downloadSuccess = var5; + this.maxFileSize = var6; + } + + public void run() { + URLConnection var1 = null; + InputStream var2 = null; + DataOutputStream var3 = null; + if(this.feedbackHook != null) { + this.feedbackHook.resetProgressAndMessage("Downloading Texture Pack"); + this.feedbackHook.resetProgresAndWorkingMessage("Making Request..."); + } + + try { + byte[] var4 = new byte[4096]; + URL var5 = new URL(this.sourceURL); + var1 = var5.openConnection(); + float var6 = 0.0F; + float var7 = (float)this.field_76177_c.entrySet().size(); + Iterator var8 = this.field_76177_c.entrySet().iterator(); + + while(var8.hasNext()) { + Entry var9 = (Entry)var8.next(); + var1.setRequestProperty((String)var9.getKey(), (String)var9.getValue()); + if(this.feedbackHook != null) { + ++var6; + this.feedbackHook.setLoadingProgress((int)(var6 / var7 * 100.0F)); + } + } + + var2 = var1.getInputStream(); + var7 = (float)var1.getContentLength(); + int var28 = var1.getContentLength(); + if(this.feedbackHook != null) { + this.feedbackHook.resetProgresAndWorkingMessage(String.format("Downloading file (%.2f MB)...", new Object[]{Float.valueOf(var7 / 1000.0F / 1000.0F)})); + } + + if(this.destinationFile.exists()) { + long var29 = this.destinationFile.length(); + if(var29 == (long)var28) { + this.downloadSuccess.onSuccess(this.destinationFile); + if(this.feedbackHook != null) { + this.feedbackHook.onNoMoreProgress(); + } + + return; + } + + System.out.println("Deleting " + this.destinationFile + " as it does not match what we currently have (" + var28 + " vs our " + var29 + ")."); + this.destinationFile.delete(); + } + + var3 = new DataOutputStream(new FileOutputStream(this.destinationFile)); + if(this.maxFileSize > 0 && var7 > (float)this.maxFileSize) { + if(this.feedbackHook != null) { + this.feedbackHook.onNoMoreProgress(); + } + + throw new IOException("Filesize is bigger than maximum allowed (file is " + var6 + ", limit is " + this.maxFileSize + ")"); + } + + boolean var30 = false; + + while(true) { + int var31 = var2.read(var4); + if(var31 < 0) { + this.downloadSuccess.onSuccess(this.destinationFile); + if(this.feedbackHook != null) { + this.feedbackHook.onNoMoreProgress(); + } + break; + } + + var6 += (float)var31; + if(this.feedbackHook != null) { + this.feedbackHook.setLoadingProgress((int)(var6 / var7 * 100.0F)); + } + + if(this.maxFileSize > 0 && var6 > (float)this.maxFileSize) { + if(this.feedbackHook != null) { + this.feedbackHook.onNoMoreProgress(); + } + + throw new IOException("Filesize was bigger than maximum allowed (got >= " + var6 + ", limit was " + this.maxFileSize + ")"); + } + + var3.write(var4, 0, var31); + } + } catch (Throwable var26) { + var26.printStackTrace(); + } finally { + try { + if(var2 != null) { + var2.close(); + } + } catch (IOException var25) { + } + + try { + if(var3 != null) { + var3.close(); + } + } catch (IOException var24) { + } + + } + + } +} diff --git a/src/net/minecraft/src/IAdminCommand.java b/src/net/minecraft/src/IAdminCommand.java new file mode 100644 index 0000000..b307ef0 --- /dev/null +++ b/src/net/minecraft/src/IAdminCommand.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +public interface IAdminCommand { + void notifyAdmins(ICommandSender var1, int var2, String var3, Object... var4); +} diff --git a/src/net/minecraft/src/IAnimals.java b/src/net/minecraft/src/IAnimals.java new file mode 100644 index 0000000..61de5b0 --- /dev/null +++ b/src/net/minecraft/src/IAnimals.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public interface IAnimals { +} diff --git a/src/net/minecraft/src/IBehaviorDispenseItem.java b/src/net/minecraft/src/IBehaviorDispenseItem.java new file mode 100644 index 0000000..dee5660 --- /dev/null +++ b/src/net/minecraft/src/IBehaviorDispenseItem.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public interface IBehaviorDispenseItem { + IBehaviorDispenseItem itemDispenseBehaviorProvider = new BehaviorDispenseItemProvider(); + + ItemStack dispense(IBlockSource var1, ItemStack var2); +} diff --git a/src/net/minecraft/src/IBlockAccess.java b/src/net/minecraft/src/IBlockAccess.java new file mode 100644 index 0000000..3f40e11 --- /dev/null +++ b/src/net/minecraft/src/IBlockAccess.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +public interface IBlockAccess { + int getBlockId(int var1, int var2, int var3); + + TileEntity getBlockTileEntity(int var1, int var2, int var3); + + int getLightBrightnessForSkyBlocks(int var1, int var2, int var3, int var4); + + float getBrightness(int var1, int var2, int var3, int var4); + + float getLightBrightness(int var1, int var2, int var3); + + int getBlockMetadata(int var1, int var2, int var3); + + Material getBlockMaterial(int var1, int var2, int var3); + + boolean isBlockOpaqueCube(int var1, int var2, int var3); + + boolean isBlockNormalCube(int var1, int var2, int var3); + + boolean isAirBlock(int var1, int var2, int var3); + + BiomeGenBase getBiomeGenForCoords(int var1, int var2); + + int getHeight(); + + boolean extendedLevelsInChunkCache(); + + boolean doesBlockHaveSolidTopSurface(int var1, int var2, int var3); + + Vec3Pool getWorldVec3Pool(); + + int isBlockProvidingPowerTo(int var1, int var2, int var3, int var4); +} diff --git a/src/net/minecraft/src/IBlockSource.java b/src/net/minecraft/src/IBlockSource.java new file mode 100644 index 0000000..40e788d --- /dev/null +++ b/src/net/minecraft/src/IBlockSource.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public interface IBlockSource extends ILocatableSource { + double getX(); + + double getY(); + + double getZ(); + + int getXInt(); + + int getYInt(); + + int getZInt(); + + int getBlockMetadata(); + + TileEntity getBlockTileEntity(); +} diff --git a/src/net/minecraft/src/IBossDisplayData.java b/src/net/minecraft/src/IBossDisplayData.java new file mode 100644 index 0000000..21931fb --- /dev/null +++ b/src/net/minecraft/src/IBossDisplayData.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public interface IBossDisplayData { + int getMaxHealth(); + + int getBossHealth(); + + String getEntityName(); +} diff --git a/src/net/minecraft/src/ICamera.java b/src/net/minecraft/src/ICamera.java new file mode 100644 index 0000000..fb186f4 --- /dev/null +++ b/src/net/minecraft/src/ICamera.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public interface ICamera { + boolean isBoundingBoxInFrustum(AxisAlignedBB var1); + + void setPosition(double var1, double var3, double var5); +} diff --git a/src/net/minecraft/src/IChunkLoader.java b/src/net/minecraft/src/IChunkLoader.java new file mode 100644 index 0000000..ff92d81 --- /dev/null +++ b/src/net/minecraft/src/IChunkLoader.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +import java.io.IOException; + +public interface IChunkLoader { + Chunk loadChunk(World var1, int var2, int var3) throws IOException; + + void saveChunk(World var1, Chunk var2) throws IOException, MinecraftException; + + void saveExtraChunkData(World var1, Chunk var2); + + void chunkTick(); + + void saveExtraData(); +} diff --git a/src/net/minecraft/src/IChunkProvider.java b/src/net/minecraft/src/IChunkProvider.java new file mode 100644 index 0000000..9ab3b71 --- /dev/null +++ b/src/net/minecraft/src/IChunkProvider.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +import java.util.List; + +public interface IChunkProvider { + boolean chunkExists(int var1, int var2); + + Chunk provideChunk(int var1, int var2); + + Chunk loadChunk(int var1, int var2); + + void populate(IChunkProvider var1, int var2, int var3); + + boolean saveChunks(boolean var1, IProgressUpdate var2); + + boolean unloadQueuedChunks(); + + boolean canSave(); + + String makeString(); + + List getPossibleCreatures(EnumCreatureType var1, int var2, int var3, int var4); + + ChunkPosition findClosestStructure(World var1, String var2, int var3, int var4, int var5); + + int getLoadedChunkCount(); + + void recreateStructures(int var1, int var2); + + void func_104112_b(); +} diff --git a/src/net/minecraft/src/ICommand.java b/src/net/minecraft/src/ICommand.java new file mode 100644 index 0000000..f5065dc --- /dev/null +++ b/src/net/minecraft/src/ICommand.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.List; + +public interface ICommand extends Comparable { + String getCommandName(); + + String getCommandUsage(ICommandSender var1); + + List getCommandAliases(); + + void processCommand(ICommandSender var1, String[] var2); + + boolean canCommandSenderUseCommand(ICommandSender var1); + + List addTabCompletionOptions(ICommandSender var1, String[] var2); + + boolean isUsernameIndex(String[] var1, int var2); +} diff --git a/src/net/minecraft/src/ICommandManager.java b/src/net/minecraft/src/ICommandManager.java new file mode 100644 index 0000000..21f964c --- /dev/null +++ b/src/net/minecraft/src/ICommandManager.java @@ -0,0 +1,14 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Map; + +public interface ICommandManager { + int executeCommand(ICommandSender var1, String var2); + + List getPossibleCommands(ICommandSender var1, String var2); + + List getPossibleCommands(ICommandSender var1); + + Map getCommands(); +} diff --git a/src/net/minecraft/src/ICommandSender.java b/src/net/minecraft/src/ICommandSender.java new file mode 100644 index 0000000..c4939f8 --- /dev/null +++ b/src/net/minecraft/src/ICommandSender.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public interface ICommandSender { + String getCommandSenderName(); + + void sendChatToPlayer(String var1); + + boolean canCommandSenderUseCommand(int var1, String var2); + + String translateString(String var1, Object... var2); + + ChunkCoordinates getPlayerCoordinates(); +} diff --git a/src/net/minecraft/src/ICrafting.java b/src/net/minecraft/src/ICrafting.java new file mode 100644 index 0000000..6aa8cb2 --- /dev/null +++ b/src/net/minecraft/src/ICrafting.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +import java.util.List; + +public interface ICrafting { + void sendContainerAndContentsToPlayer(Container var1, List var2); + + void sendSlotContents(Container var1, int var2, ItemStack var3); + + void sendProgressBarUpdate(Container var1, int var2, int var3); +} diff --git a/src/net/minecraft/src/IDownloadSuccess.java b/src/net/minecraft/src/IDownloadSuccess.java new file mode 100644 index 0000000..9c53fdf --- /dev/null +++ b/src/net/minecraft/src/IDownloadSuccess.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +import java.io.File; + +public interface IDownloadSuccess { + void onSuccess(File var1); +} diff --git a/src/net/minecraft/src/IEnchantmentModifier.java b/src/net/minecraft/src/IEnchantmentModifier.java new file mode 100644 index 0000000..fb5493e --- /dev/null +++ b/src/net/minecraft/src/IEnchantmentModifier.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +interface IEnchantmentModifier { + void calculateModifier(Enchantment var1, int var2); +} diff --git a/src/net/minecraft/src/IEntityMultiPart.java b/src/net/minecraft/src/IEntityMultiPart.java new file mode 100644 index 0000000..236f19f --- /dev/null +++ b/src/net/minecraft/src/IEntityMultiPart.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public interface IEntityMultiPart { + World func_82194_d(); + + boolean attackEntityFromPart(EntityDragonPart var1, DamageSource var2, int var3); +} diff --git a/src/net/minecraft/src/IEntitySelector.java b/src/net/minecraft/src/IEntitySelector.java new file mode 100644 index 0000000..b1f0179 --- /dev/null +++ b/src/net/minecraft/src/IEntitySelector.java @@ -0,0 +1,8 @@ +package net.minecraft.src; + +public interface IEntitySelector { + IEntitySelector selectAnything = new EntitySelectorAlive(); + IEntitySelector selectInventories = new EntitySelectorInventory(); + + boolean isEntityApplicable(Entity var1); +} diff --git a/src/net/minecraft/src/IImageBuffer.java b/src/net/minecraft/src/IImageBuffer.java new file mode 100644 index 0000000..b4ce0cc --- /dev/null +++ b/src/net/minecraft/src/IImageBuffer.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; + +public interface IImageBuffer { + BufferedImage parseUserSkin(BufferedImage var1); +} diff --git a/src/net/minecraft/src/IInvBasic.java b/src/net/minecraft/src/IInvBasic.java new file mode 100644 index 0000000..9ae9fb9 --- /dev/null +++ b/src/net/minecraft/src/IInvBasic.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +public interface IInvBasic { + void onInventoryChanged(InventoryBasic var1); +} diff --git a/src/net/minecraft/src/IInventory.java b/src/net/minecraft/src/IInventory.java new file mode 100644 index 0000000..a18e9e9 --- /dev/null +++ b/src/net/minecraft/src/IInventory.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +public interface IInventory { + int getSizeInventory(); + + ItemStack getStackInSlot(int var1); + + ItemStack decrStackSize(int var1, int var2); + + ItemStack getStackInSlotOnClosing(int var1); + + void setInventorySlotContents(int var1, ItemStack var2); + + String getInvName(); + + boolean isInvNameLocalized(); + + int getInventoryStackLimit(); + + void onInventoryChanged(); + + boolean isUseableByPlayer(EntityPlayer var1); + + void openChest(); + + void closeChest(); + + boolean isStackValidForSlot(int var1, ItemStack var2); +} diff --git a/src/net/minecraft/src/ILocatableSource.java b/src/net/minecraft/src/ILocatableSource.java new file mode 100644 index 0000000..2f081b1 --- /dev/null +++ b/src/net/minecraft/src/ILocatableSource.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public interface ILocatableSource extends ILocation { +} diff --git a/src/net/minecraft/src/ILocation.java b/src/net/minecraft/src/ILocation.java new file mode 100644 index 0000000..fba832c --- /dev/null +++ b/src/net/minecraft/src/ILocation.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +public interface ILocation extends IPosition { + World getWorld(); +} diff --git a/src/net/minecraft/src/ILogAgent.java b/src/net/minecraft/src/ILogAgent.java new file mode 100644 index 0000000..be9c64f --- /dev/null +++ b/src/net/minecraft/src/ILogAgent.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public interface ILogAgent { + void logInfo(String var1); + + void logWarning(String var1); + + void logWarningFormatted(String var1, Object... var2); + + void logWarningException(String var1, Throwable var2); + + void logSevere(String var1); + + void logSevereException(String var1, Throwable var2); + + void logFine(String var1); +} diff --git a/src/net/minecraft/src/IMerchant.java b/src/net/minecraft/src/IMerchant.java new file mode 100644 index 0000000..665d861 --- /dev/null +++ b/src/net/minecraft/src/IMerchant.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public interface IMerchant { + void setCustomer(EntityPlayer var1); + + EntityPlayer getCustomer(); + + MerchantRecipeList getRecipes(EntityPlayer var1); + + void setRecipes(MerchantRecipeList var1); + + void useRecipe(MerchantRecipe var1); +} diff --git a/src/net/minecraft/src/IMob.java b/src/net/minecraft/src/IMob.java new file mode 100644 index 0000000..360888c --- /dev/null +++ b/src/net/minecraft/src/IMob.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +public interface IMob extends IAnimals { + IEntitySelector mobSelector = new FilterIMob(); +} diff --git a/src/net/minecraft/src/INetworkManager.java b/src/net/minecraft/src/INetworkManager.java new file mode 100644 index 0000000..17392d9 --- /dev/null +++ b/src/net/minecraft/src/INetworkManager.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +import java.net.SocketAddress; + +public interface INetworkManager { + void setNetHandler(NetHandler var1); + + void addToSendQueue(Packet var1); + + void wakeThreads(); + + void processReadPackets(); + + SocketAddress getSocketAddress(); + + void serverShutdown(); + + int packetSize(); + + void networkShutdown(String var1, Object... var2); + + void closeConnections(); +} diff --git a/src/net/minecraft/src/INpc.java b/src/net/minecraft/src/INpc.java new file mode 100644 index 0000000..224d1c1 --- /dev/null +++ b/src/net/minecraft/src/INpc.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public interface INpc extends IAnimals { +} diff --git a/src/net/minecraft/src/IPlayerFileData.java b/src/net/minecraft/src/IPlayerFileData.java new file mode 100644 index 0000000..48150e6 --- /dev/null +++ b/src/net/minecraft/src/IPlayerFileData.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public interface IPlayerFileData { + void writePlayerData(EntityPlayer var1); + + NBTTagCompound readPlayerData(EntityPlayer var1); + + String[] getAvailablePlayerDat(); +} diff --git a/src/net/minecraft/src/IPlayerUsage.java b/src/net/minecraft/src/IPlayerUsage.java new file mode 100644 index 0000000..a40e3c0 --- /dev/null +++ b/src/net/minecraft/src/IPlayerUsage.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public interface IPlayerUsage { + void addServerStatsToSnooper(PlayerUsageSnooper var1); + + void addServerTypeToSnooper(PlayerUsageSnooper var1); + + boolean isSnooperEnabled(); + + ILogAgent getLogAgent(); +} diff --git a/src/net/minecraft/src/IPosition.java b/src/net/minecraft/src/IPosition.java new file mode 100644 index 0000000..3da626c --- /dev/null +++ b/src/net/minecraft/src/IPosition.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public interface IPosition { + double getX(); + + double getY(); + + double getZ(); +} diff --git a/src/net/minecraft/src/IProgressUpdate.java b/src/net/minecraft/src/IProgressUpdate.java new file mode 100644 index 0000000..d050fe3 --- /dev/null +++ b/src/net/minecraft/src/IProgressUpdate.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public interface IProgressUpdate { + void displayProgressMessage(String var1); + + void resetProgressAndMessage(String var1); + + void resetProgresAndWorkingMessage(String var1); + + void setLoadingProgress(int var1); + + void onNoMoreProgress(); +} diff --git a/src/net/minecraft/src/IProjectile.java b/src/net/minecraft/src/IProjectile.java new file mode 100644 index 0000000..6413e99 --- /dev/null +++ b/src/net/minecraft/src/IProjectile.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +public interface IProjectile { + void setThrowableHeading(double var1, double var3, double var5, float var7, float var8); +} diff --git a/src/net/minecraft/src/IRangedAttackMob.java b/src/net/minecraft/src/IRangedAttackMob.java new file mode 100644 index 0000000..79d184b --- /dev/null +++ b/src/net/minecraft/src/IRangedAttackMob.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +public interface IRangedAttackMob { + void attackEntityWithRangedAttack(EntityLiving var1, float var2); +} diff --git a/src/net/minecraft/src/IRecipe.java b/src/net/minecraft/src/IRecipe.java new file mode 100644 index 0000000..1b16845 --- /dev/null +++ b/src/net/minecraft/src/IRecipe.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public interface IRecipe { + boolean matches(InventoryCrafting var1, World var2); + + ItemStack getCraftingResult(InventoryCrafting var1); + + int getRecipeSize(); + + ItemStack getRecipeOutput(); +} diff --git a/src/net/minecraft/src/IRegistry.java b/src/net/minecraft/src/IRegistry.java new file mode 100644 index 0000000..e0dc0be --- /dev/null +++ b/src/net/minecraft/src/IRegistry.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public interface IRegistry { + Object func_82594_a(Object var1); + + void putObject(Object var1, Object var2); +} diff --git a/src/net/minecraft/src/ISaveFormat.java b/src/net/minecraft/src/ISaveFormat.java new file mode 100644 index 0000000..e0a1b01 --- /dev/null +++ b/src/net/minecraft/src/ISaveFormat.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +import java.util.List; + +public interface ISaveFormat { + ISaveHandler getSaveLoader(String var1, boolean var2); + + List getSaveList() throws AnvilConverterException; + + void flushCache(); + + WorldInfo getWorldInfo(String var1); + + boolean deleteWorldDirectory(String var1); + + void renameWorld(String var1, String var2); + + boolean isOldMapFormat(String var1); + + boolean convertMapFormat(String var1, IProgressUpdate var2); + + boolean canLoadWorld(String var1); +} diff --git a/src/net/minecraft/src/ISaveHandler.java b/src/net/minecraft/src/ISaveHandler.java new file mode 100644 index 0000000..2e35a0c --- /dev/null +++ b/src/net/minecraft/src/ISaveHandler.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +import java.io.File; + +public interface ISaveHandler { + WorldInfo loadWorldInfo(); + + void checkSessionLock() throws MinecraftException; + + IChunkLoader getChunkLoader(WorldProvider var1); + + void saveWorldInfoWithPlayer(WorldInfo var1, NBTTagCompound var2); + + void saveWorldInfo(WorldInfo var1); + + IPlayerFileData getSaveHandler(); + + void flush(); + + File getMapFileFromName(String var1); + + String getWorldDirectoryName(); +} diff --git a/src/net/minecraft/src/IServer.java b/src/net/minecraft/src/IServer.java new file mode 100644 index 0000000..6335ce8 --- /dev/null +++ b/src/net/minecraft/src/IServer.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +public interface IServer { + int getIntProperty(String var1, int var2); + + String getStringProperty(String var1, String var2); + + void setProperty(String var1, Object var2); + + void saveProperties(); + + String getSettingsFilename(); + + String getHostname(); + + int getPort(); + + String getServerMOTD(); + + String getMinecraftVersion(); + + int getCurrentPlayerCount(); + + int getMaxPlayers(); + + String[] getAllUsernames(); + + String getFolderName(); + + String getPlugins(); + + String executeCommand(String var1); + + boolean isDebuggingEnabled(); + + void logInfo(String var1); + + void logWarning(String var1); + + void logSevere(String var1); + + void logDebug(String var1); +} diff --git a/src/net/minecraft/src/ISidedInventory.java b/src/net/minecraft/src/ISidedInventory.java new file mode 100644 index 0000000..6be4749 --- /dev/null +++ b/src/net/minecraft/src/ISidedInventory.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public interface ISidedInventory extends IInventory { + int[] getAccessibleSlotsFromSide(int var1); + + boolean canInsertItem(int var1, ItemStack var2, int var3); + + boolean canExtractItem(int var1, ItemStack var2, int var3); +} diff --git a/src/net/minecraft/src/IStatStringFormat.java b/src/net/minecraft/src/IStatStringFormat.java new file mode 100644 index 0000000..e4397e4 --- /dev/null +++ b/src/net/minecraft/src/IStatStringFormat.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +public interface IStatStringFormat { + String formatString(String var1); +} diff --git a/src/net/minecraft/src/IStatType.java b/src/net/minecraft/src/IStatType.java new file mode 100644 index 0000000..080ca09 --- /dev/null +++ b/src/net/minecraft/src/IStatType.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +public interface IStatType { + String format(int var1); +} diff --git a/src/net/minecraft/src/ITexturePack.java b/src/net/minecraft/src/ITexturePack.java new file mode 100644 index 0000000..3b0f0e7 --- /dev/null +++ b/src/net/minecraft/src/ITexturePack.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.io.InputStream; + +public interface ITexturePack { + void deleteTexturePack(RenderEngine var1); + + void bindThumbnailTexture(RenderEngine var1); + + InputStream func_98137_a(String var1, boolean var2) throws IOException; + + InputStream getResourceAsStream(String var1) throws IOException; + + String getTexturePackID(); + + String getTexturePackFileName(); + + String getFirstDescriptionLine(); + + String getSecondDescriptionLine(); + + boolean func_98138_b(String var1, boolean var2); + + boolean isCompatible(); +} diff --git a/src/net/minecraft/src/IThreadedFileIO.java b/src/net/minecraft/src/IThreadedFileIO.java new file mode 100644 index 0000000..a7f96d3 --- /dev/null +++ b/src/net/minecraft/src/IThreadedFileIO.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +public interface IThreadedFileIO { + boolean writeNextIO(); +} diff --git a/src/net/minecraft/src/ITileEntityProvider.java b/src/net/minecraft/src/ITileEntityProvider.java new file mode 100644 index 0000000..381d2ca --- /dev/null +++ b/src/net/minecraft/src/ITileEntityProvider.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +public interface ITileEntityProvider { + TileEntity createNewTileEntity(World var1); +} diff --git a/src/net/minecraft/src/IUpdatePlayerListBox.java b/src/net/minecraft/src/IUpdatePlayerListBox.java new file mode 100644 index 0000000..af1e278 --- /dev/null +++ b/src/net/minecraft/src/IUpdatePlayerListBox.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +public interface IUpdatePlayerListBox { + void update(); +} diff --git a/src/net/minecraft/src/IWorldAccess.java b/src/net/minecraft/src/IWorldAccess.java new file mode 100644 index 0000000..404afd9 --- /dev/null +++ b/src/net/minecraft/src/IWorldAccess.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public interface IWorldAccess { + void markBlockForUpdate(int var1, int var2, int var3); + + void markBlockForRenderUpdate(int var1, int var2, int var3); + + void markBlockRangeForRenderUpdate(int var1, int var2, int var3, int var4, int var5, int var6); + + void playSound(String var1, double var2, double var4, double var6, float var8, float var9); + + void playSoundToNearExcept(EntityPlayer var1, String var2, double var3, double var5, double var7, float var9, float var10); + + void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12); + + void onEntityCreate(Entity var1); + + void onEntityDestroy(Entity var1); + + void playRecord(String var1, int var2, int var3, int var4); + + void broadcastSound(int var1, int var2, int var3, int var4, int var5); + + void playAuxSFX(EntityPlayer var1, int var2, int var3, int var4, int var5, int var6); + + void destroyBlockPartially(int var1, int var2, int var3, int var4, int var5); +} diff --git a/src/net/minecraft/src/Icon.java b/src/net/minecraft/src/Icon.java new file mode 100644 index 0000000..0505eca --- /dev/null +++ b/src/net/minecraft/src/Icon.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public interface Icon { + int getOriginX(); + + int getOriginY(); + + float getMinU(); + + float getMaxU(); + + float getInterpolatedU(double var1); + + float getMinV(); + + float getMaxV(); + + float getInterpolatedV(double var1); + + String getIconName(); + + int getSheetWidth(); + + int getSheetHeight(); +} diff --git a/src/net/minecraft/src/IconFlipped.java b/src/net/minecraft/src/IconFlipped.java new file mode 100644 index 0000000..7117703 --- /dev/null +++ b/src/net/minecraft/src/IconFlipped.java @@ -0,0 +1,59 @@ +package net.minecraft.src; + +public class IconFlipped implements Icon { + private final Icon baseIcon; + private final boolean flipU; + private final boolean flipV; + + public IconFlipped(Icon var1, boolean var2, boolean var3) { + this.baseIcon = var1; + this.flipU = var2; + this.flipV = var3; + } + + public int getOriginX() { + return this.baseIcon.getOriginX(); + } + + public int getOriginY() { + return this.baseIcon.getOriginY(); + } + + public float getMinU() { + return this.flipU ? this.baseIcon.getMaxU() : this.baseIcon.getMinU(); + } + + public float getMaxU() { + return this.flipU ? this.baseIcon.getMinU() : this.baseIcon.getMaxU(); + } + + public float getInterpolatedU(double var1) { + float var3 = this.getMaxU() - this.getMinU(); + return this.getMinU() + var3 * ((float)var1 / 16.0F); + } + + public float getMinV() { + return this.flipV ? this.baseIcon.getMinV() : this.baseIcon.getMinV(); + } + + public float getMaxV() { + return this.flipV ? this.baseIcon.getMinV() : this.baseIcon.getMaxV(); + } + + public float getInterpolatedV(double var1) { + float var3 = this.getMaxV() - this.getMinV(); + return this.getMinV() + var3 * ((float)var1 / 16.0F); + } + + public String getIconName() { + return this.baseIcon.getIconName(); + } + + public int getSheetWidth() { + return this.baseIcon.getSheetWidth(); + } + + public int getSheetHeight() { + return this.baseIcon.getSheetHeight(); + } +} diff --git a/src/net/minecraft/src/IconRegister.java b/src/net/minecraft/src/IconRegister.java new file mode 100644 index 0000000..d586542 --- /dev/null +++ b/src/net/minecraft/src/IconRegister.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +public interface IconRegister { + Icon registerIcon(String var1); +} diff --git a/src/net/minecraft/src/ImageBufferDownload.java b/src/net/minecraft/src/ImageBufferDownload.java new file mode 100644 index 0000000..631dc9b --- /dev/null +++ b/src/net/minecraft/src/ImageBufferDownload.java @@ -0,0 +1,88 @@ +package net.minecraft.src; + +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import java.awt.image.DataBufferInt; +import java.awt.image.ImageObserver; + +public class ImageBufferDownload implements IImageBuffer { + private int[] imageData; + private int imageWidth; + private int imageHeight; + + public BufferedImage parseUserSkin(BufferedImage var1) { + if(var1 == null) { + return null; + } else { + this.imageWidth = 64; + this.imageHeight = 32; + BufferedImage var2 = new BufferedImage(this.imageWidth, this.imageHeight, 2); + Graphics var3 = var2.getGraphics(); + var3.drawImage(var1, 0, 0, (ImageObserver)null); + var3.dispose(); + this.imageData = ((DataBufferInt)var2.getRaster().getDataBuffer()).getData(); + this.setAreaOpaque(0, 0, 32, 16); + this.setAreaTransparent(32, 0, 64, 32); + this.setAreaOpaque(0, 16, 64, 32); + boolean var4 = false; + + int var5; + int var6; + int var7; + for(var5 = 32; var5 < 64; ++var5) { + for(var6 = 0; var6 < 16; ++var6) { + var7 = this.imageData[var5 + var6 * 64]; + if((var7 >> 24 & 255) < 128) { + var4 = true; + } + } + } + + if(!var4) { + for(var5 = 32; var5 < 64; ++var5) { + for(var6 = 0; var6 < 16; ++var6) { + var7 = this.imageData[var5 + var6 * 64]; + if((var7 >> 24 & 255) < 128) { + var4 = true; + } + } + } + } + + return var2; + } + } + + private void setAreaTransparent(int var1, int var2, int var3, int var4) { + if(!this.hasTransparency(var1, var2, var3, var4)) { + for(int var5 = var1; var5 < var3; ++var5) { + for(int var6 = var2; var6 < var4; ++var6) { + this.imageData[var5 + var6 * this.imageWidth] &= 16777215; + } + } + + } + } + + private void setAreaOpaque(int var1, int var2, int var3, int var4) { + for(int var5 = var1; var5 < var3; ++var5) { + for(int var6 = var2; var6 < var4; ++var6) { + this.imageData[var5 + var6 * this.imageWidth] |= -16777216; + } + } + + } + + private boolean hasTransparency(int var1, int var2, int var3, int var4) { + for(int var5 = var1; var5 < var3; ++var5) { + for(int var6 = var2; var6 < var4; ++var6) { + int var7 = this.imageData[var5 + var6 * this.imageWidth]; + if((var7 >> 24 & 255) < 128) { + return true; + } + } + } + + return false; + } +} diff --git a/src/net/minecraft/src/IntCache.java b/src/net/minecraft/src/IntCache.java new file mode 100644 index 0000000..f6d38bb --- /dev/null +++ b/src/net/minecraft/src/IntCache.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class IntCache { + private static int intCacheSize = 256; + private static List freeSmallArrays = new ArrayList(); + private static List inUseSmallArrays = new ArrayList(); + private static List freeLargeArrays = new ArrayList(); + private static List inUseLargeArrays = new ArrayList(); + + public static synchronized int[] getIntCache(int var0) { + int[] var1; + if(var0 <= 256) { + if(freeSmallArrays.isEmpty()) { + var1 = new int[256]; + inUseSmallArrays.add(var1); + return var1; + } else { + var1 = (int[])freeSmallArrays.remove(freeSmallArrays.size() - 1); + inUseSmallArrays.add(var1); + return var1; + } + } else if(var0 > intCacheSize) { + intCacheSize = var0; + freeLargeArrays.clear(); + inUseLargeArrays.clear(); + var1 = new int[intCacheSize]; + inUseLargeArrays.add(var1); + return var1; + } else if(freeLargeArrays.isEmpty()) { + var1 = new int[intCacheSize]; + inUseLargeArrays.add(var1); + return var1; + } else { + var1 = (int[])freeLargeArrays.remove(freeLargeArrays.size() - 1); + inUseLargeArrays.add(var1); + return var1; + } + } + + public static synchronized void resetIntCache() { + if(!freeLargeArrays.isEmpty()) { + freeLargeArrays.remove(freeLargeArrays.size() - 1); + } + + if(!freeSmallArrays.isEmpty()) { + freeSmallArrays.remove(freeSmallArrays.size() - 1); + } + + freeLargeArrays.addAll(inUseLargeArrays); + freeSmallArrays.addAll(inUseSmallArrays); + inUseLargeArrays.clear(); + inUseSmallArrays.clear(); + } + + public static synchronized String func_85144_b() { + return "cache: " + freeLargeArrays.size() + ", tcache: " + freeSmallArrays.size() + ", allocated: " + inUseLargeArrays.size() + ", tallocated: " + inUseSmallArrays.size(); + } +} diff --git a/src/net/minecraft/src/IntHashMap.java b/src/net/minecraft/src/IntHashMap.java new file mode 100644 index 0000000..85ad563 --- /dev/null +++ b/src/net/minecraft/src/IntHashMap.java @@ -0,0 +1,162 @@ +package net.minecraft.src; + +import java.util.HashSet; +import java.util.Set; + +public class IntHashMap { + private transient IntHashMapEntry[] slots = new IntHashMapEntry[16]; + private transient int count; + private int threshold = 12; + private final float growFactor = 12.0F / 16.0F; + private transient volatile int versionStamp; + private Set keySet = new HashSet(); + + private static int computeHash(int var0) { + var0 ^= var0 >>> 20 ^ var0 >>> 12; + return var0 ^ var0 >>> 7 ^ var0 >>> 4; + } + + private static int getSlotIndex(int var0, int var1) { + return var0 & var1 - 1; + } + + public Object lookup(int var1) { + int var2 = computeHash(var1); + + for(IntHashMapEntry var3 = this.slots[getSlotIndex(var2, this.slots.length)]; var3 != null; var3 = var3.nextEntry) { + if(var3.hashEntry == var1) { + return var3.valueEntry; + } + } + + return null; + } + + public boolean containsItem(int var1) { + return this.lookupEntry(var1) != null; + } + + final IntHashMapEntry lookupEntry(int var1) { + int var2 = computeHash(var1); + + for(IntHashMapEntry var3 = this.slots[getSlotIndex(var2, this.slots.length)]; var3 != null; var3 = var3.nextEntry) { + if(var3.hashEntry == var1) { + return var3; + } + } + + return null; + } + + public void addKey(int var1, Object var2) { + this.keySet.add(Integer.valueOf(var1)); + int var3 = computeHash(var1); + int var4 = getSlotIndex(var3, this.slots.length); + + for(IntHashMapEntry var5 = this.slots[var4]; var5 != null; var5 = var5.nextEntry) { + if(var5.hashEntry == var1) { + var5.valueEntry = var2; + return; + } + } + + ++this.versionStamp; + this.insert(var3, var1, var2, var4); + } + + private void grow(int var1) { + IntHashMapEntry[] var2 = this.slots; + int var3 = var2.length; + if(var3 == 1073741824) { + this.threshold = Integer.MAX_VALUE; + } else { + IntHashMapEntry[] var4 = new IntHashMapEntry[var1]; + this.copyTo(var4); + this.slots = var4; + this.threshold = (int)((float)var1 * this.growFactor); + } + } + + private void copyTo(IntHashMapEntry[] var1) { + IntHashMapEntry[] var2 = this.slots; + int var3 = var1.length; + + for(int var4 = 0; var4 < var2.length; ++var4) { + IntHashMapEntry var5 = var2[var4]; + if(var5 != null) { + var2[var4] = null; + + IntHashMapEntry var6; + do { + var6 = var5.nextEntry; + int var7 = getSlotIndex(var5.slotHash, var3); + var5.nextEntry = var1[var7]; + var1[var7] = var5; + var5 = var6; + } while(var6 != null); + } + } + + } + + public Object removeObject(int var1) { + this.keySet.remove(Integer.valueOf(var1)); + IntHashMapEntry var2 = this.removeEntry(var1); + return var2 == null ? null : var2.valueEntry; + } + + final IntHashMapEntry removeEntry(int var1) { + int var2 = computeHash(var1); + int var3 = getSlotIndex(var2, this.slots.length); + IntHashMapEntry var4 = this.slots[var3]; + + IntHashMapEntry var5; + IntHashMapEntry var6; + for(var5 = var4; var5 != null; var5 = var6) { + var6 = var5.nextEntry; + if(var5.hashEntry == var1) { + ++this.versionStamp; + --this.count; + if(var4 == var5) { + this.slots[var3] = var6; + } else { + var4.nextEntry = var6; + } + + return var5; + } + + var4 = var5; + } + + return var5; + } + + public void clearMap() { + ++this.versionStamp; + IntHashMapEntry[] var1 = this.slots; + + for(int var2 = 0; var2 < var1.length; ++var2) { + var1[var2] = null; + } + + this.count = 0; + } + + private void insert(int var1, int var2, Object var3, int var4) { + IntHashMapEntry var5 = this.slots[var4]; + this.slots[var4] = new IntHashMapEntry(var1, var2, var3, var5); + if(this.count++ >= this.threshold) { + this.grow(2 * this.slots.length); + } + + } + + public Set getKeySet() { + return this.keySet; + } + + static int getHash(int var0) { + return computeHash(var0); + } +} diff --git a/src/net/minecraft/src/IntHashMapEntry.java b/src/net/minecraft/src/IntHashMapEntry.java new file mode 100644 index 0000000..7931574 --- /dev/null +++ b/src/net/minecraft/src/IntHashMapEntry.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +class IntHashMapEntry { + final int hashEntry; + Object valueEntry; + IntHashMapEntry nextEntry; + final int slotHash; + + IntHashMapEntry(int var1, int var2, Object var3, IntHashMapEntry var4) { + this.valueEntry = var3; + this.nextEntry = var4; + this.hashEntry = var2; + this.slotHash = var1; + } + + public final int getHash() { + return this.hashEntry; + } + + public final Object getValue() { + return this.valueEntry; + } + + public final boolean equals(Object var1) { + if(!(var1 instanceof IntHashMapEntry)) { + return false; + } else { + IntHashMapEntry var2 = (IntHashMapEntry)var1; + Integer var3 = Integer.valueOf(this.getHash()); + Integer var4 = Integer.valueOf(var2.getHash()); + if(var3 == var4 || var3 != null && var3.equals(var4)) { + Object var5 = this.getValue(); + Object var6 = var2.getValue(); + if(var5 == var6 || var5 != null && var5.equals(var6)) { + return true; + } + } + + return false; + } + } + + public final int hashCode() { + return IntHashMap.getHash(this.hashEntry); + } + + public final String toString() { + return this.getHash() + "=" + this.getValue(); + } +} diff --git a/src/net/minecraft/src/IntegratedPlayerList.java b/src/net/minecraft/src/IntegratedPlayerList.java new file mode 100644 index 0000000..1e9f065 --- /dev/null +++ b/src/net/minecraft/src/IntegratedPlayerList.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +import java.net.SocketAddress; +import net.minecraft.server.MinecraftServer; + +public class IntegratedPlayerList extends ServerConfigurationManager { + private NBTTagCompound hostPlayerData = null; + + public IntegratedPlayerList(IntegratedServer var1) { + super(var1); + this.viewDistance = 10; + } + + protected void writePlayerData(EntityPlayerMP var1) { + if(var1.getCommandSenderName().equals(this.getIntegratedServer().getServerOwner())) { + this.hostPlayerData = new NBTTagCompound(); + var1.writeToNBT(this.hostPlayerData); + } + + super.writePlayerData(var1); + } + + public String allowUserToConnect(SocketAddress var1, String var2) { + return var2.equalsIgnoreCase(this.getIntegratedServer().getServerOwner()) ? "That name is already taken." : super.allowUserToConnect(var1, var2); + } + + public IntegratedServer getIntegratedServer() { + return (IntegratedServer)super.getServerInstance(); + } + + public NBTTagCompound getHostPlayerData() { + return this.hostPlayerData; + } + + public MinecraftServer getServerInstance() { + return this.getIntegratedServer(); + } +} diff --git a/src/net/minecraft/src/IntegratedServer.java b/src/net/minecraft/src/IntegratedServer.java new file mode 100644 index 0000000..287d48f --- /dev/null +++ b/src/net/minecraft/src/IntegratedServer.java @@ -0,0 +1,199 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.IOException; +import net.minecraft.client.Minecraft; +import net.minecraft.server.MinecraftServer; + +public class IntegratedServer extends MinecraftServer { + private final Minecraft mc; + private final WorldSettings theWorldSettings; + private final ILogAgent serverLogAgent = new LogAgent("Minecraft-Server", " [SERVER]", (new File(Minecraft.getMinecraftDir(), "output-server.log")).getAbsolutePath()); + private IntegratedServerListenThread theServerListeningThread; + private boolean isGamePaused = false; + private boolean isPublic; + private ThreadLanServerPing lanServerPing; + + public IntegratedServer(Minecraft var1, String var2, String var3, WorldSettings var4) { + super(new File(Minecraft.getMinecraftDir(), "saves")); + this.setServerOwner(var1.session.username); + this.setFolderName(var2); + this.setWorldName(var3); + this.setDemo(var1.isDemo()); + this.canCreateBonusChest(var4.isBonusChestEnabled()); + this.setBuildLimit(256); + this.setConfigurationManager(new IntegratedPlayerList(this)); + this.mc = var1; + this.theWorldSettings = var4; + + try { + this.theServerListeningThread = new IntegratedServerListenThread(this); + } catch (IOException var6) { + throw new Error(); + } + } + + protected void loadAllWorlds(String var1, String var2, long var3, WorldType var5, String var6) { + this.convertMapIfNeeded(var1); + this.worldServers = new WorldServer[3]; + this.timeOfLastDimensionTick = new long[this.worldServers.length][100]; + ISaveHandler var7 = this.getActiveAnvilConverter().getSaveLoader(var1, true); + + for(int var8 = 0; var8 < this.worldServers.length; ++var8) { + byte var9 = 0; + if(var8 == 1) { + var9 = -1; + } + + if(var8 == 2) { + var9 = 1; + } + + if(var8 == 0) { + if(this.isDemo()) { + this.worldServers[var8] = new DemoWorldServer(this, var7, var2, var9, this.theProfiler, this.getLogAgent()); + } else { + this.worldServers[var8] = new WorldServer(this, var7, var2, var9, this.theWorldSettings, this.theProfiler, this.getLogAgent()); + } + } else { + this.worldServers[var8] = new WorldServerMulti(this, var7, var2, var9, this.theWorldSettings, this.worldServers[0], this.theProfiler, this.getLogAgent()); + } + + this.worldServers[var8].addWorldAccess(new WorldManager(this, this.worldServers[var8])); + this.getConfigurationManager().setPlayerManager(this.worldServers); + } + + this.setDifficultyForAllWorlds(this.getDifficulty()); + this.initialWorldChunkLoad(); + } + + protected boolean startServer() throws IOException { + this.serverLogAgent.logInfo("Starting integrated minecraft server version 1.5.2"); + this.setOnlineMode(false); + this.setCanSpawnAnimals(true); + this.setCanSpawnNPCs(true); + this.setAllowPvp(true); + this.setAllowFlight(true); + this.serverLogAgent.logInfo("Generating keypair"); + this.setKeyPair(CryptManager.createNewKeyPair()); + this.loadAllWorlds(this.getFolderName(), this.getWorldName(), this.theWorldSettings.getSeed(), this.theWorldSettings.getTerrainType(), this.theWorldSettings.func_82749_j()); + this.setMOTD(this.getServerOwner() + " - " + this.worldServers[0].getWorldInfo().getWorldName()); + return true; + } + + protected void tickIntegrated() { + boolean var1 = this.isGamePaused; + this.isGamePaused = this.theServerListeningThread.isGamePaused(); + if(!var1 && this.isGamePaused) { + this.serverLogAgent.logInfo("Saving and pausing game..."); + this.getConfigurationManager().saveAllPlayerData(); + this.saveAllWorlds(false); + } + + if(!this.isGamePaused) { + super.tick(); + } + + } + + public boolean canStructuresSpawn() { + return false; + } + + public EnumGameType getGameType() { + return this.theWorldSettings.getGameType(); + } + + public int getDifficulty() { + return this.mc.gameSettings.difficulty; + } + + public boolean isHardcore() { + return this.theWorldSettings.getHardcoreEnabled(); + } + + protected File getDataDirectory() { + return this.mc.mcDataDir; + } + + public boolean isDedicatedServer() { + return false; + } + + public IntegratedServerListenThread getServerListeningThread() { + return this.theServerListeningThread; + } + + protected void finalTick(CrashReport var1) { + this.mc.crashed(var1); + } + + public CrashReport addServerInfoToCrashReport(CrashReport var1) { + var1 = super.addServerInfoToCrashReport(var1); + var1.func_85056_g().addCrashSectionCallable("Type", new CallableType3(this)); + var1.func_85056_g().addCrashSectionCallable("Is Modded", new CallableIsModded(this)); + return var1; + } + + public void addServerStatsToSnooper(PlayerUsageSnooper var1) { + super.addServerStatsToSnooper(var1); + var1.addData("snooper_partner", this.mc.getPlayerUsageSnooper().getUniqueID()); + } + + public boolean isSnooperEnabled() { + return Minecraft.getMinecraft().isSnooperEnabled(); + } + + public String shareToLAN(EnumGameType var1, boolean var2) { + try { + String var3 = this.theServerListeningThread.func_71755_c(); + this.getLogAgent().logInfo("Started on " + var3); + this.isPublic = true; + this.lanServerPing = new ThreadLanServerPing(this.getMOTD(), var3); + this.lanServerPing.start(); + this.getConfigurationManager().setGameType(var1); + this.getConfigurationManager().setCommandsAllowedForAll(var2); + return var3; + } catch (IOException var4) { + return null; + } + } + + public ILogAgent getLogAgent() { + return this.serverLogAgent; + } + + public void stopServer() { + super.stopServer(); + if(this.lanServerPing != null) { + this.lanServerPing.interrupt(); + this.lanServerPing = null; + } + + } + + public void initiateShutdown() { + super.initiateShutdown(); + if(this.lanServerPing != null) { + this.lanServerPing.interrupt(); + this.lanServerPing = null; + } + + } + + public boolean getPublic() { + return this.isPublic; + } + + public void setGameType(EnumGameType var1) { + this.getConfigurationManager().setGameType(var1); + } + + public boolean isCommandBlockEnabled() { + return true; + } + + public NetworkListenThread getNetworkThread() { + return this.getServerListeningThread(); + } +} diff --git a/src/net/minecraft/src/IntegratedServerListenThread.java b/src/net/minecraft/src/IntegratedServerListenThread.java new file mode 100644 index 0000000..49737d2 --- /dev/null +++ b/src/net/minecraft/src/IntegratedServerListenThread.java @@ -0,0 +1,90 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.net.InetAddress; +import net.minecraft.server.MinecraftServer; + +public class IntegratedServerListenThread extends NetworkListenThread { + private final MemoryConnection netMemoryConnection; + private MemoryConnection theMemoryConnection; + private String field_71759_e; + private boolean field_71756_f = false; + private ServerListenThread myServerListenThread; + + public IntegratedServerListenThread(IntegratedServer var1) throws IOException { + super(var1); + this.netMemoryConnection = new MemoryConnection(var1.getLogAgent(), (NetHandler)null); + } + + public void func_71754_a(MemoryConnection var1, String var2) { + this.theMemoryConnection = var1; + this.field_71759_e = var2; + } + + public String func_71755_c() throws IOException { + if(this.myServerListenThread == null) { + int var1 = -1; + + try { + var1 = HttpUtil.func_76181_a(); + } catch (IOException var4) { + } + + if(var1 <= 0) { + var1 = 25564; + } + + try { + this.myServerListenThread = new ServerListenThread(this, (InetAddress)null, var1); + this.myServerListenThread.start(); + } catch (IOException var3) { + throw var3; + } + } + + return this.myServerListenThread.getInetAddress().getHostAddress() + ":" + this.myServerListenThread.getMyPort(); + } + + public void stopListening() { + super.stopListening(); + if(this.myServerListenThread != null) { + this.getIntegratedServer().getLogAgent().logInfo("Stopping server connection"); + this.myServerListenThread.func_71768_b(); + this.myServerListenThread.interrupt(); + this.myServerListenThread = null; + } + + } + + public void networkTick() { + if(this.theMemoryConnection != null) { + EntityPlayerMP var1 = this.getIntegratedServer().getConfigurationManager().createPlayerForUser(this.field_71759_e); + if(var1 != null) { + this.netMemoryConnection.pairWith(this.theMemoryConnection); + this.field_71756_f = true; + this.getIntegratedServer().getConfigurationManager().initializeConnectionToPlayer(this.netMemoryConnection, var1); + } + + this.theMemoryConnection = null; + this.field_71759_e = null; + } + + if(this.myServerListenThread != null) { + this.myServerListenThread.processPendingConnections(); + } + + super.networkTick(); + } + + public IntegratedServer getIntegratedServer() { + return (IntegratedServer)super.getServer(); + } + + public boolean isGamePaused() { + return this.field_71756_f && this.netMemoryConnection.getPairedConnection().isConnectionActive() && this.netMemoryConnection.getPairedConnection().isGamePaused(); + } + + public MinecraftServer getServer() { + return this.getIntegratedServer(); + } +} diff --git a/src/net/minecraft/src/InventoryBasic.java b/src/net/minecraft/src/InventoryBasic.java new file mode 100644 index 0000000..54d4df2 --- /dev/null +++ b/src/net/minecraft/src/InventoryBasic.java @@ -0,0 +1,102 @@ +package net.minecraft.src; + +import java.util.List; + +public class InventoryBasic implements IInventory { + private String inventoryTitle; + private int slotsCount; + private ItemStack[] inventoryContents; + private List field_70480_d; + private boolean field_94051_e; + + public InventoryBasic(String var1, boolean var2, int var3) { + this.inventoryTitle = var1; + this.field_94051_e = var2; + this.slotsCount = var3; + this.inventoryContents = new ItemStack[var3]; + } + + public ItemStack getStackInSlot(int var1) { + return this.inventoryContents[var1]; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.inventoryContents[var1] != null) { + ItemStack var3; + if(this.inventoryContents[var1].stackSize <= var2) { + var3 = this.inventoryContents[var1]; + this.inventoryContents[var1] = null; + this.onInventoryChanged(); + return var3; + } else { + var3 = this.inventoryContents[var1].splitStack(var2); + if(this.inventoryContents[var1].stackSize == 0) { + this.inventoryContents[var1] = null; + } + + this.onInventoryChanged(); + return var3; + } + } else { + return null; + } + } + + public ItemStack getStackInSlotOnClosing(int var1) { + if(this.inventoryContents[var1] != null) { + ItemStack var2 = this.inventoryContents[var1]; + this.inventoryContents[var1] = null; + return var2; + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.inventoryContents[var1] = var2; + if(var2 != null && var2.stackSize > this.getInventoryStackLimit()) { + var2.stackSize = this.getInventoryStackLimit(); + } + + this.onInventoryChanged(); + } + + public int getSizeInventory() { + return this.slotsCount; + } + + public String getInvName() { + return this.inventoryTitle; + } + + public boolean isInvNameLocalized() { + return this.field_94051_e; + } + + public int getInventoryStackLimit() { + return 64; + } + + public void onInventoryChanged() { + if(this.field_70480_d != null) { + for(int var1 = 0; var1 < this.field_70480_d.size(); ++var1) { + ((IInvBasic)this.field_70480_d.get(var1)).onInventoryChanged(this); + } + } + + } + + public boolean isUseableByPlayer(EntityPlayer var1) { + return true; + } + + public void openChest() { + } + + public void closeChest() { + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return true; + } +} diff --git a/src/net/minecraft/src/InventoryCraftResult.java b/src/net/minecraft/src/InventoryCraftResult.java new file mode 100644 index 0000000..c6fd638 --- /dev/null +++ b/src/net/minecraft/src/InventoryCraftResult.java @@ -0,0 +1,66 @@ +package net.minecraft.src; + +public class InventoryCraftResult implements IInventory { + private ItemStack[] stackResult = new ItemStack[1]; + + public int getSizeInventory() { + return 1; + } + + public ItemStack getStackInSlot(int var1) { + return this.stackResult[0]; + } + + public String getInvName() { + return "Result"; + } + + public boolean isInvNameLocalized() { + return false; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.stackResult[0] != null) { + ItemStack var3 = this.stackResult[0]; + this.stackResult[0] = null; + return var3; + } else { + return null; + } + } + + public ItemStack getStackInSlotOnClosing(int var1) { + if(this.stackResult[0] != null) { + ItemStack var2 = this.stackResult[0]; + this.stackResult[0] = null; + return var2; + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.stackResult[0] = var2; + } + + public int getInventoryStackLimit() { + return 64; + } + + public void onInventoryChanged() { + } + + public boolean isUseableByPlayer(EntityPlayer var1) { + return true; + } + + public void openChest() { + } + + public void closeChest() { + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return true; + } +} diff --git a/src/net/minecraft/src/InventoryCrafting.java b/src/net/minecraft/src/InventoryCrafting.java new file mode 100644 index 0000000..2a02dca --- /dev/null +++ b/src/net/minecraft/src/InventoryCrafting.java @@ -0,0 +1,97 @@ +package net.minecraft.src; + +public class InventoryCrafting implements IInventory { + private ItemStack[] stackList; + private int inventoryWidth; + private Container eventHandler; + + public InventoryCrafting(Container var1, int var2, int var3) { + int var4 = var2 * var3; + this.stackList = new ItemStack[var4]; + this.eventHandler = var1; + this.inventoryWidth = var2; + } + + public int getSizeInventory() { + return this.stackList.length; + } + + public ItemStack getStackInSlot(int var1) { + return var1 >= this.getSizeInventory() ? null : this.stackList[var1]; + } + + public ItemStack getStackInRowAndColumn(int var1, int var2) { + if(var1 >= 0 && var1 < this.inventoryWidth) { + int var3 = var1 + var2 * this.inventoryWidth; + return this.getStackInSlot(var3); + } else { + return null; + } + } + + public String getInvName() { + return "container.crafting"; + } + + public boolean isInvNameLocalized() { + return false; + } + + public ItemStack getStackInSlotOnClosing(int var1) { + if(this.stackList[var1] != null) { + ItemStack var2 = this.stackList[var1]; + this.stackList[var1] = null; + return var2; + } else { + return null; + } + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.stackList[var1] != null) { + ItemStack var3; + if(this.stackList[var1].stackSize <= var2) { + var3 = this.stackList[var1]; + this.stackList[var1] = null; + this.eventHandler.onCraftMatrixChanged(this); + return var3; + } else { + var3 = this.stackList[var1].splitStack(var2); + if(this.stackList[var1].stackSize == 0) { + this.stackList[var1] = null; + } + + this.eventHandler.onCraftMatrixChanged(this); + return var3; + } + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.stackList[var1] = var2; + this.eventHandler.onCraftMatrixChanged(this); + } + + public int getInventoryStackLimit() { + return 64; + } + + public void onInventoryChanged() { + } + + public boolean isUseableByPlayer(EntityPlayer var1) { + return true; + } + + public void openChest() { + } + + public void closeChest() { + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return true; + } +} diff --git a/src/net/minecraft/src/InventoryEffectRenderer.java b/src/net/minecraft/src/InventoryEffectRenderer.java new file mode 100644 index 0000000..bf1d15f --- /dev/null +++ b/src/net/minecraft/src/InventoryEffectRenderer.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +import java.util.Collection; +import java.util.Iterator; +import org.lwjgl.opengl.GL11; + +public abstract class InventoryEffectRenderer extends GuiContainer { + private boolean field_74222_o; + + public InventoryEffectRenderer(Container var1) { + super(var1); + } + + public void initGui() { + super.initGui(); + if(!this.mc.thePlayer.getActivePotionEffects().isEmpty()) { + this.guiLeft = 160 + (this.width - this.xSize - 200) / 2; + this.field_74222_o = true; + } + + } + + public void drawScreen(int var1, int var2, float var3) { + super.drawScreen(var1, var2, var3); + if(this.field_74222_o) { + this.displayDebuffEffects(); + } + + } + + private void displayDebuffEffects() { + int var1 = this.guiLeft - 124; + int var2 = this.guiTop; + Collection var4 = this.mc.thePlayer.getActivePotionEffects(); + if(!var4.isEmpty()) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_LIGHTING); + int var5 = 33; + if(var4.size() > 5) { + var5 = 132 / (var4.size() - 1); + } + + for(Iterator var6 = this.mc.thePlayer.getActivePotionEffects().iterator(); var6.hasNext(); var2 += var5) { + PotionEffect var7 = (PotionEffect)var6.next(); + Potion var8 = Potion.potionTypes[var7.getPotionID()]; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture("/gui/inventory.png"); + this.drawTexturedModalRect(var1, var2, 0, 166, 140, 32); + if(var8.hasStatusIcon()) { + int var9 = var8.getStatusIconIndex(); + this.drawTexturedModalRect(var1 + 6, var2 + 7, 0 + var9 % 8 * 18, 198 + var9 / 8 * 18, 18, 18); + } + + String var11 = StatCollector.translateToLocal(var8.getName()); + if(var7.getAmplifier() == 1) { + var11 = var11 + " II"; + } else if(var7.getAmplifier() == 2) { + var11 = var11 + " III"; + } else if(var7.getAmplifier() == 3) { + var11 = var11 + " IV"; + } + + this.fontRenderer.drawStringWithShadow(var11, var1 + 10 + 18, var2 + 6, 16777215); + String var10 = Potion.getDurationString(var7); + this.fontRenderer.drawStringWithShadow(var10, var1 + 10 + 18, var2 + 6 + 10, 8355711); + } + + } + } +} diff --git a/src/net/minecraft/src/InventoryEnderChest.java b/src/net/minecraft/src/InventoryEnderChest.java new file mode 100644 index 0000000..ef6eaaf --- /dev/null +++ b/src/net/minecraft/src/InventoryEnderChest.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +public class InventoryEnderChest extends InventoryBasic { + private TileEntityEnderChest associatedChest; + + public InventoryEnderChest() { + super("container.enderchest", false, 27); + } + + public void setAssociatedChest(TileEntityEnderChest var1) { + this.associatedChest = var1; + } + + public void loadInventoryFromNBT(NBTTagList var1) { + int var2; + for(var2 = 0; var2 < this.getSizeInventory(); ++var2) { + this.setInventorySlotContents(var2, (ItemStack)null); + } + + for(var2 = 0; var2 < var1.tagCount(); ++var2) { + NBTTagCompound var3 = (NBTTagCompound)var1.tagAt(var2); + int var4 = var3.getByte("Slot") & 255; + if(var4 >= 0 && var4 < this.getSizeInventory()) { + this.setInventorySlotContents(var4, ItemStack.loadItemStackFromNBT(var3)); + } + } + + } + + public NBTTagList saveInventoryToNBT() { + NBTTagList var1 = new NBTTagList("EnderItems"); + + for(int var2 = 0; var2 < this.getSizeInventory(); ++var2) { + ItemStack var3 = this.getStackInSlot(var2); + if(var3 != null) { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var2); + var3.writeToNBT(var4); + var1.appendTag(var4); + } + } + + return var1; + } + + public boolean isUseableByPlayer(EntityPlayer var1) { + return this.associatedChest != null && !this.associatedChest.isUseableByPlayer(var1) ? false : super.isUseableByPlayer(var1); + } + + public void openChest() { + if(this.associatedChest != null) { + this.associatedChest.openChest(); + } + + super.openChest(); + } + + public void closeChest() { + if(this.associatedChest != null) { + this.associatedChest.closeChest(); + } + + super.closeChest(); + this.associatedChest = null; + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return true; + } +} diff --git a/src/net/minecraft/src/InventoryLargeChest.java b/src/net/minecraft/src/InventoryLargeChest.java new file mode 100644 index 0000000..b8d0079 --- /dev/null +++ b/src/net/minecraft/src/InventoryLargeChest.java @@ -0,0 +1,85 @@ +package net.minecraft.src; + +public class InventoryLargeChest implements IInventory { + private String name; + private IInventory upperChest; + private IInventory lowerChest; + + public InventoryLargeChest(String var1, IInventory var2, IInventory var3) { + this.name = var1; + if(var2 == null) { + var2 = var3; + } + + if(var3 == null) { + var3 = var2; + } + + this.upperChest = var2; + this.lowerChest = var3; + } + + public int getSizeInventory() { + return this.upperChest.getSizeInventory() + this.lowerChest.getSizeInventory(); + } + + public boolean isPartOfLargeChest(IInventory var1) { + return this.upperChest == var1 || this.lowerChest == var1; + } + + public String getInvName() { + return this.upperChest.isInvNameLocalized() ? this.upperChest.getInvName() : (this.lowerChest.isInvNameLocalized() ? this.lowerChest.getInvName() : this.name); + } + + public boolean isInvNameLocalized() { + return this.upperChest.isInvNameLocalized() || this.lowerChest.isInvNameLocalized(); + } + + public ItemStack getStackInSlot(int var1) { + return var1 >= this.upperChest.getSizeInventory() ? this.lowerChest.getStackInSlot(var1 - this.upperChest.getSizeInventory()) : this.upperChest.getStackInSlot(var1); + } + + public ItemStack decrStackSize(int var1, int var2) { + return var1 >= this.upperChest.getSizeInventory() ? this.lowerChest.decrStackSize(var1 - this.upperChest.getSizeInventory(), var2) : this.upperChest.decrStackSize(var1, var2); + } + + public ItemStack getStackInSlotOnClosing(int var1) { + return var1 >= this.upperChest.getSizeInventory() ? this.lowerChest.getStackInSlotOnClosing(var1 - this.upperChest.getSizeInventory()) : this.upperChest.getStackInSlotOnClosing(var1); + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + if(var1 >= this.upperChest.getSizeInventory()) { + this.lowerChest.setInventorySlotContents(var1 - this.upperChest.getSizeInventory(), var2); + } else { + this.upperChest.setInventorySlotContents(var1, var2); + } + + } + + public int getInventoryStackLimit() { + return this.upperChest.getInventoryStackLimit(); + } + + public void onInventoryChanged() { + this.upperChest.onInventoryChanged(); + this.lowerChest.onInventoryChanged(); + } + + public boolean isUseableByPlayer(EntityPlayer var1) { + return this.upperChest.isUseableByPlayer(var1) && this.lowerChest.isUseableByPlayer(var1); + } + + public void openChest() { + this.upperChest.openChest(); + this.lowerChest.openChest(); + } + + public void closeChest() { + this.upperChest.closeChest(); + this.lowerChest.closeChest(); + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return true; + } +} diff --git a/src/net/minecraft/src/InventoryMerchant.java b/src/net/minecraft/src/InventoryMerchant.java new file mode 100644 index 0000000..572790b --- /dev/null +++ b/src/net/minecraft/src/InventoryMerchant.java @@ -0,0 +1,153 @@ +package net.minecraft.src; + +public class InventoryMerchant implements IInventory { + private final IMerchant theMerchant; + private ItemStack[] theInventory = new ItemStack[3]; + private final EntityPlayer thePlayer; + private MerchantRecipe currentRecipe; + private int currentRecipeIndex; + + public InventoryMerchant(EntityPlayer var1, IMerchant var2) { + this.thePlayer = var1; + this.theMerchant = var2; + } + + public int getSizeInventory() { + return this.theInventory.length; + } + + public ItemStack getStackInSlot(int var1) { + return this.theInventory[var1]; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.theInventory[var1] != null) { + ItemStack var3; + if(var1 == 2) { + var3 = this.theInventory[var1]; + this.theInventory[var1] = null; + return var3; + } else if(this.theInventory[var1].stackSize <= var2) { + var3 = this.theInventory[var1]; + this.theInventory[var1] = null; + if(this.inventoryResetNeededOnSlotChange(var1)) { + this.resetRecipeAndSlots(); + } + + return var3; + } else { + var3 = this.theInventory[var1].splitStack(var2); + if(this.theInventory[var1].stackSize == 0) { + this.theInventory[var1] = null; + } + + if(this.inventoryResetNeededOnSlotChange(var1)) { + this.resetRecipeAndSlots(); + } + + return var3; + } + } else { + return null; + } + } + + private boolean inventoryResetNeededOnSlotChange(int var1) { + return var1 == 0 || var1 == 1; + } + + public ItemStack getStackInSlotOnClosing(int var1) { + if(this.theInventory[var1] != null) { + ItemStack var2 = this.theInventory[var1]; + this.theInventory[var1] = null; + return var2; + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.theInventory[var1] = var2; + if(var2 != null && var2.stackSize > this.getInventoryStackLimit()) { + var2.stackSize = this.getInventoryStackLimit(); + } + + if(this.inventoryResetNeededOnSlotChange(var1)) { + this.resetRecipeAndSlots(); + } + + } + + public String getInvName() { + return "mob.villager"; + } + + public boolean isInvNameLocalized() { + return false; + } + + public int getInventoryStackLimit() { + return 64; + } + + public boolean isUseableByPlayer(EntityPlayer var1) { + return this.theMerchant.getCustomer() == var1; + } + + public void openChest() { + } + + public void closeChest() { + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return true; + } + + public void onInventoryChanged() { + this.resetRecipeAndSlots(); + } + + public void resetRecipeAndSlots() { + this.currentRecipe = null; + ItemStack var1 = this.theInventory[0]; + ItemStack var2 = this.theInventory[1]; + if(var1 == null) { + var1 = var2; + var2 = null; + } + + if(var1 == null) { + this.setInventorySlotContents(2, (ItemStack)null); + } else { + MerchantRecipeList var3 = this.theMerchant.getRecipes(this.thePlayer); + if(var3 != null) { + MerchantRecipe var4 = var3.canRecipeBeUsed(var1, var2, this.currentRecipeIndex); + if(var4 != null && !var4.func_82784_g()) { + this.currentRecipe = var4; + this.setInventorySlotContents(2, var4.getItemToSell().copy()); + } else if(var2 != null) { + var4 = var3.canRecipeBeUsed(var2, var1, this.currentRecipeIndex); + if(var4 != null && !var4.func_82784_g()) { + this.currentRecipe = var4; + this.setInventorySlotContents(2, var4.getItemToSell().copy()); + } else { + this.setInventorySlotContents(2, (ItemStack)null); + } + } else { + this.setInventorySlotContents(2, (ItemStack)null); + } + } + } + + } + + public MerchantRecipe getCurrentRecipe() { + return this.currentRecipe; + } + + public void setCurrentRecipeIndex(int var1) { + this.currentRecipeIndex = var1; + this.resetRecipeAndSlots(); + } +} diff --git a/src/net/minecraft/src/InventoryPlayer.java b/src/net/minecraft/src/InventoryPlayer.java new file mode 100644 index 0000000..de619b9 --- /dev/null +++ b/src/net/minecraft/src/InventoryPlayer.java @@ -0,0 +1,522 @@ +package net.minecraft.src; + +public class InventoryPlayer implements IInventory { + public ItemStack[] mainInventory = new ItemStack[36]; + public ItemStack[] armorInventory = new ItemStack[4]; + public int currentItem = 0; + private ItemStack currentItemStack; + public EntityPlayer player; + private ItemStack itemStack; + public boolean inventoryChanged = false; + + public InventoryPlayer(EntityPlayer var1) { + this.player = var1; + } + + public ItemStack getCurrentItem() { + return this.currentItem < 9 && this.currentItem >= 0 ? this.mainInventory[this.currentItem] : null; + } + + public static int getHotbarSize() { + return 9; + } + + private int getInventorySlotContainItem(int var1) { + for(int var2 = 0; var2 < this.mainInventory.length; ++var2) { + if(this.mainInventory[var2] != null && this.mainInventory[var2].itemID == var1) { + return var2; + } + } + + return -1; + } + + private int getInventorySlotContainItemAndDamage(int var1, int var2) { + for(int var3 = 0; var3 < this.mainInventory.length; ++var3) { + if(this.mainInventory[var3] != null && this.mainInventory[var3].itemID == var1 && this.mainInventory[var3].getItemDamage() == var2) { + return var3; + } + } + + return -1; + } + + private int storeItemStack(ItemStack var1) { + for(int var2 = 0; var2 < this.mainInventory.length; ++var2) { + if(this.mainInventory[var2] != null && this.mainInventory[var2].itemID == var1.itemID && this.mainInventory[var2].isStackable() && this.mainInventory[var2].stackSize < this.mainInventory[var2].getMaxStackSize() && this.mainInventory[var2].stackSize < this.getInventoryStackLimit() && (!this.mainInventory[var2].getHasSubtypes() || this.mainInventory[var2].getItemDamage() == var1.getItemDamage()) && ItemStack.areItemStackTagsEqual(this.mainInventory[var2], var1)) { + return var2; + } + } + + return -1; + } + + public int getFirstEmptyStack() { + for(int var1 = 0; var1 < this.mainInventory.length; ++var1) { + if(this.mainInventory[var1] == null) { + return var1; + } + } + + return -1; + } + + public void setCurrentItem(int var1, int var2, boolean var3, boolean var4) { + boolean var5 = true; + this.currentItemStack = this.getCurrentItem(); + int var7; + if(var3) { + var7 = this.getInventorySlotContainItemAndDamage(var1, var2); + } else { + var7 = this.getInventorySlotContainItem(var1); + } + + if(var7 >= 0 && var7 < 9) { + this.currentItem = var7; + } else { + if(var4 && var1 > 0) { + int var6 = this.getFirstEmptyStack(); + if(var6 >= 0 && var6 < 9) { + this.currentItem = var6; + } + + this.func_70439_a(Item.itemsList[var1], var2); + } + + } + } + + public void changeCurrentItem(int var1) { + if(var1 > 0) { + var1 = 1; + } + + if(var1 < 0) { + var1 = -1; + } + + for(this.currentItem -= var1; this.currentItem < 0; this.currentItem += 9) { + } + + while(this.currentItem >= 9) { + this.currentItem -= 9; + } + + } + + public int clearInventory(int var1, int var2) { + int var3 = 0; + + int var4; + ItemStack var5; + for(var4 = 0; var4 < this.mainInventory.length; ++var4) { + var5 = this.mainInventory[var4]; + if(var5 != null && (var1 <= -1 || var5.itemID == var1) && (var2 <= -1 || var5.getItemDamage() == var2)) { + var3 += var5.stackSize; + this.mainInventory[var4] = null; + } + } + + for(var4 = 0; var4 < this.armorInventory.length; ++var4) { + var5 = this.armorInventory[var4]; + if(var5 != null && (var1 <= -1 || var5.itemID == var1) && (var2 <= -1 || var5.getItemDamage() == var2)) { + var3 += var5.stackSize; + this.armorInventory[var4] = null; + } + } + + return var3; + } + + public void func_70439_a(Item var1, int var2) { + if(var1 != null) { + int var3 = this.getInventorySlotContainItemAndDamage(var1.itemID, var2); + if(var3 >= 0) { + this.mainInventory[var3] = this.mainInventory[this.currentItem]; + } + + if(this.currentItemStack != null && this.currentItemStack.isItemEnchantable() && this.getInventorySlotContainItemAndDamage(this.currentItemStack.itemID, this.currentItemStack.getItemDamageForDisplay()) == this.currentItem) { + return; + } + + this.mainInventory[this.currentItem] = new ItemStack(Item.itemsList[var1.itemID], 1, var2); + } + + } + + private int storePartialItemStack(ItemStack var1) { + int var2 = var1.itemID; + int var3 = var1.stackSize; + int var4; + if(var1.getMaxStackSize() == 1) { + var4 = this.getFirstEmptyStack(); + if(var4 < 0) { + return var3; + } else { + if(this.mainInventory[var4] == null) { + this.mainInventory[var4] = ItemStack.copyItemStack(var1); + } + + return 0; + } + } else { + var4 = this.storeItemStack(var1); + if(var4 < 0) { + var4 = this.getFirstEmptyStack(); + } + + if(var4 < 0) { + return var3; + } else { + if(this.mainInventory[var4] == null) { + this.mainInventory[var4] = new ItemStack(var2, 0, var1.getItemDamage()); + if(var1.hasTagCompound()) { + this.mainInventory[var4].setTagCompound((NBTTagCompound)var1.getTagCompound().copy()); + } + } + + int var5 = var3; + if(var3 > this.mainInventory[var4].getMaxStackSize() - this.mainInventory[var4].stackSize) { + var5 = this.mainInventory[var4].getMaxStackSize() - this.mainInventory[var4].stackSize; + } + + if(var5 > this.getInventoryStackLimit() - this.mainInventory[var4].stackSize) { + var5 = this.getInventoryStackLimit() - this.mainInventory[var4].stackSize; + } + + if(var5 == 0) { + return var3; + } else { + var3 -= var5; + this.mainInventory[var4].stackSize += var5; + this.mainInventory[var4].animationsToGo = 5; + return var3; + } + } + } + } + + public void decrementAnimations() { + for(int var1 = 0; var1 < this.mainInventory.length; ++var1) { + if(this.mainInventory[var1] != null) { + this.mainInventory[var1].updateAnimation(this.player.worldObj, this.player, var1, this.currentItem == var1); + } + } + + } + + public boolean consumeInventoryItem(int var1) { + int var2 = this.getInventorySlotContainItem(var1); + if(var2 < 0) { + return false; + } else { + if(--this.mainInventory[var2].stackSize <= 0) { + this.mainInventory[var2] = null; + } + + return true; + } + } + + public boolean hasItem(int var1) { + int var2 = this.getInventorySlotContainItem(var1); + return var2 >= 0; + } + + public boolean addItemStackToInventory(ItemStack var1) { + if(var1 == null) { + return false; + } else { + try { + int var2; + if(var1.isItemDamaged()) { + var2 = this.getFirstEmptyStack(); + if(var2 >= 0) { + this.mainInventory[var2] = ItemStack.copyItemStack(var1); + this.mainInventory[var2].animationsToGo = 5; + var1.stackSize = 0; + return true; + } else if(this.player.capabilities.isCreativeMode) { + var1.stackSize = 0; + return true; + } else { + return false; + } + } else { + do { + var2 = var1.stackSize; + var1.stackSize = this.storePartialItemStack(var1); + } while(var1.stackSize > 0 && var1.stackSize < var2); + + if(var1.stackSize == var2 && this.player.capabilities.isCreativeMode) { + var1.stackSize = 0; + return true; + } else { + return var1.stackSize < var2; + } + } + } catch (Throwable var5) { + CrashReport var3 = CrashReport.makeCrashReport(var5, "Adding item to inventory"); + CrashReportCategory var4 = var3.makeCategory("Item being added"); + var4.addCrashSection("Item ID", Integer.valueOf(var1.itemID)); + var4.addCrashSection("Item data", Integer.valueOf(var1.getItemDamage())); + var4.addCrashSectionCallable("Item name", new CallableItemName(this, var1)); + throw new ReportedException(var3); + } + } + } + + public ItemStack decrStackSize(int var1, int var2) { + ItemStack[] var3 = this.mainInventory; + if(var1 >= this.mainInventory.length) { + var3 = this.armorInventory; + var1 -= this.mainInventory.length; + } + + if(var3[var1] != null) { + ItemStack var4; + if(var3[var1].stackSize <= var2) { + var4 = var3[var1]; + var3[var1] = null; + return var4; + } else { + var4 = var3[var1].splitStack(var2); + if(var3[var1].stackSize == 0) { + var3[var1] = null; + } + + return var4; + } + } else { + return null; + } + } + + public ItemStack getStackInSlotOnClosing(int var1) { + ItemStack[] var2 = this.mainInventory; + if(var1 >= this.mainInventory.length) { + var2 = this.armorInventory; + var1 -= this.mainInventory.length; + } + + if(var2[var1] != null) { + ItemStack var3 = var2[var1]; + var2[var1] = null; + return var3; + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + ItemStack[] var3 = this.mainInventory; + if(var1 >= var3.length) { + var1 -= var3.length; + var3 = this.armorInventory; + } + + var3[var1] = var2; + } + + public float getStrVsBlock(Block var1) { + float var2 = 1.0F; + if(this.mainInventory[this.currentItem] != null) { + var2 *= this.mainInventory[this.currentItem].getStrVsBlock(var1); + } + + return var2; + } + + public NBTTagList writeToNBT(NBTTagList var1) { + int var2; + NBTTagCompound var3; + for(var2 = 0; var2 < this.mainInventory.length; ++var2) { + if(this.mainInventory[var2] != null) { + var3 = new NBTTagCompound(); + var3.setByte("Slot", (byte)var2); + this.mainInventory[var2].writeToNBT(var3); + var1.appendTag(var3); + } + } + + for(var2 = 0; var2 < this.armorInventory.length; ++var2) { + if(this.armorInventory[var2] != null) { + var3 = new NBTTagCompound(); + var3.setByte("Slot", (byte)(var2 + 100)); + this.armorInventory[var2].writeToNBT(var3); + var1.appendTag(var3); + } + } + + return var1; + } + + public void readFromNBT(NBTTagList var1) { + this.mainInventory = new ItemStack[36]; + this.armorInventory = new ItemStack[4]; + + for(int var2 = 0; var2 < var1.tagCount(); ++var2) { + NBTTagCompound var3 = (NBTTagCompound)var1.tagAt(var2); + int var4 = var3.getByte("Slot") & 255; + ItemStack var5 = ItemStack.loadItemStackFromNBT(var3); + if(var5 != null) { + if(var4 >= 0 && var4 < this.mainInventory.length) { + this.mainInventory[var4] = var5; + } + + if(var4 >= 100 && var4 < this.armorInventory.length + 100) { + this.armorInventory[var4 - 100] = var5; + } + } + } + + } + + public int getSizeInventory() { + return this.mainInventory.length + 4; + } + + public ItemStack getStackInSlot(int var1) { + ItemStack[] var2 = this.mainInventory; + if(var1 >= var2.length) { + var1 -= var2.length; + var2 = this.armorInventory; + } + + return var2[var1]; + } + + public String getInvName() { + return "container.inventory"; + } + + public boolean isInvNameLocalized() { + return false; + } + + public int getInventoryStackLimit() { + return 64; + } + + public int getDamageVsEntity(Entity var1) { + ItemStack var2 = this.getStackInSlot(this.currentItem); + return var2 != null ? var2.getDamageVsEntity(var1) : 1; + } + + public boolean canHarvestBlock(Block var1) { + if(var1.blockMaterial.isToolNotRequired()) { + return true; + } else { + ItemStack var2 = this.getStackInSlot(this.currentItem); + return var2 != null ? var2.canHarvestBlock(var1) : false; + } + } + + public ItemStack armorItemInSlot(int var1) { + return this.armorInventory[var1]; + } + + public int getTotalArmorValue() { + int var1 = 0; + + for(int var2 = 0; var2 < this.armorInventory.length; ++var2) { + if(this.armorInventory[var2] != null && this.armorInventory[var2].getItem() instanceof ItemArmor) { + int var3 = ((ItemArmor)this.armorInventory[var2].getItem()).damageReduceAmount; + var1 += var3; + } + } + + return var1; + } + + public void damageArmor(int var1) { + var1 /= 4; + if(var1 < 1) { + var1 = 1; + } + + for(int var2 = 0; var2 < this.armorInventory.length; ++var2) { + if(this.armorInventory[var2] != null && this.armorInventory[var2].getItem() instanceof ItemArmor) { + this.armorInventory[var2].damageItem(var1, this.player); + if(this.armorInventory[var2].stackSize == 0) { + this.armorInventory[var2] = null; + } + } + } + + } + + public void dropAllItems() { + int var1; + for(var1 = 0; var1 < this.mainInventory.length; ++var1) { + if(this.mainInventory[var1] != null) { + this.player.dropPlayerItemWithRandomChoice(this.mainInventory[var1], true); + this.mainInventory[var1] = null; + } + } + + for(var1 = 0; var1 < this.armorInventory.length; ++var1) { + if(this.armorInventory[var1] != null) { + this.player.dropPlayerItemWithRandomChoice(this.armorInventory[var1], true); + this.armorInventory[var1] = null; + } + } + + } + + public void onInventoryChanged() { + this.inventoryChanged = true; + } + + public void setItemStack(ItemStack var1) { + this.itemStack = var1; + } + + public ItemStack getItemStack() { + return this.itemStack; + } + + public boolean isUseableByPlayer(EntityPlayer var1) { + return this.player.isDead ? false : var1.getDistanceSqToEntity(this.player) <= 64.0D; + } + + public boolean hasItemStack(ItemStack var1) { + int var2; + for(var2 = 0; var2 < this.armorInventory.length; ++var2) { + if(this.armorInventory[var2] != null && this.armorInventory[var2].isItemEqual(var1)) { + return true; + } + } + + for(var2 = 0; var2 < this.mainInventory.length; ++var2) { + if(this.mainInventory[var2] != null && this.mainInventory[var2].isItemEqual(var1)) { + return true; + } + } + + return false; + } + + public void openChest() { + } + + public void closeChest() { + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return true; + } + + public void copyInventory(InventoryPlayer var1) { + int var2; + for(var2 = 0; var2 < this.mainInventory.length; ++var2) { + this.mainInventory[var2] = ItemStack.copyItemStack(var1.mainInventory[var2]); + } + + for(var2 = 0; var2 < this.armorInventory.length; ++var2) { + this.armorInventory[var2] = ItemStack.copyItemStack(var1.armorInventory[var2]); + } + + this.currentItem = var1.currentItem; + } +} diff --git a/src/net/minecraft/src/InventoryRepair.java b/src/net/minecraft/src/InventoryRepair.java new file mode 100644 index 0000000..47fd7b8 --- /dev/null +++ b/src/net/minecraft/src/InventoryRepair.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +class InventoryRepair extends InventoryBasic { + final ContainerRepair theContainer; + + InventoryRepair(ContainerRepair var1, String var2, boolean var3, int var4) { + super(var2, var3, var4); + this.theContainer = var1; + } + + public void onInventoryChanged() { + super.onInventoryChanged(); + this.theContainer.onCraftMatrixChanged(this); + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return true; + } +} diff --git a/src/net/minecraft/src/Item.java b/src/net/minecraft/src/Item.java new file mode 100644 index 0000000..c4f9459 --- /dev/null +++ b/src/net/minecraft/src/Item.java @@ -0,0 +1,453 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class Item { + private CreativeTabs tabToDisplayOn = null; + protected static Random itemRand = new Random(); + public static Item[] itemsList = new Item[32000]; + public static Item shovelIron = (new ItemSpade(0, EnumToolMaterial.IRON)).setUnlocalizedName("shovelIron"); + public static Item pickaxeIron = (new ItemPickaxe(1, EnumToolMaterial.IRON)).setUnlocalizedName("pickaxeIron"); + public static Item axeIron = (new ItemAxe(2, EnumToolMaterial.IRON)).setUnlocalizedName("hatchetIron"); + public static Item flintAndSteel = (new ItemFlintAndSteel(3)).setUnlocalizedName("flintAndSteel"); + public static Item appleRed = (new ItemFood(4, 4, 0.3F, false)).setUnlocalizedName("apple"); + public static ItemBow bow = (ItemBow)(new ItemBow(5)).setUnlocalizedName("bow"); + public static Item arrow = (new Item(6)).setUnlocalizedName("arrow").setCreativeTab(CreativeTabs.tabCombat); + public static Item coal = (new ItemCoal(7)).setUnlocalizedName("coal"); + public static Item diamond = (new Item(8)).setUnlocalizedName("diamond").setCreativeTab(CreativeTabs.tabMaterials); + public static Item ingotIron = (new Item(9)).setUnlocalizedName("ingotIron").setCreativeTab(CreativeTabs.tabMaterials); + public static Item ingotGold = (new Item(10)).setUnlocalizedName("ingotGold").setCreativeTab(CreativeTabs.tabMaterials); + public static Item swordIron = (new ItemSword(11, EnumToolMaterial.IRON)).setUnlocalizedName("swordIron"); + public static Item swordWood = (new ItemSword(12, EnumToolMaterial.WOOD)).setUnlocalizedName("swordWood"); + public static Item shovelWood = (new ItemSpade(13, EnumToolMaterial.WOOD)).setUnlocalizedName("shovelWood"); + public static Item pickaxeWood = (new ItemPickaxe(14, EnumToolMaterial.WOOD)).setUnlocalizedName("pickaxeWood"); + public static Item axeWood = (new ItemAxe(15, EnumToolMaterial.WOOD)).setUnlocalizedName("hatchetWood"); + public static Item swordStone = (new ItemSword(16, EnumToolMaterial.STONE)).setUnlocalizedName("swordStone"); + public static Item shovelStone = (new ItemSpade(17, EnumToolMaterial.STONE)).setUnlocalizedName("shovelStone"); + public static Item pickaxeStone = (new ItemPickaxe(18, EnumToolMaterial.STONE)).setUnlocalizedName("pickaxeStone"); + public static Item axeStone = (new ItemAxe(19, EnumToolMaterial.STONE)).setUnlocalizedName("hatchetStone"); + public static Item swordDiamond = (new ItemSword(20, EnumToolMaterial.EMERALD)).setUnlocalizedName("swordDiamond"); + public static Item shovelDiamond = (new ItemSpade(21, EnumToolMaterial.EMERALD)).setUnlocalizedName("shovelDiamond"); + public static Item pickaxeDiamond = (new ItemPickaxe(22, EnumToolMaterial.EMERALD)).setUnlocalizedName("pickaxeDiamond"); + public static Item axeDiamond = (new ItemAxe(23, EnumToolMaterial.EMERALD)).setUnlocalizedName("hatchetDiamond"); + public static Item stick = (new Item(24)).setFull3D().setUnlocalizedName("stick").setCreativeTab(CreativeTabs.tabMaterials); + public static Item bowlEmpty = (new Item(25)).setUnlocalizedName("bowl").setCreativeTab(CreativeTabs.tabMaterials); + public static Item bowlSoup = (new ItemSoup(26, 6)).setUnlocalizedName("mushroomStew"); + public static Item swordGold = (new ItemSword(27, EnumToolMaterial.GOLD)).setUnlocalizedName("swordGold"); + public static Item shovelGold = (new ItemSpade(28, EnumToolMaterial.GOLD)).setUnlocalizedName("shovelGold"); + public static Item pickaxeGold = (new ItemPickaxe(29, EnumToolMaterial.GOLD)).setUnlocalizedName("pickaxeGold"); + public static Item axeGold = (new ItemAxe(30, EnumToolMaterial.GOLD)).setUnlocalizedName("hatchetGold"); + public static Item silk = (new ItemReed(31, Block.tripWire)).setUnlocalizedName("string").setCreativeTab(CreativeTabs.tabMaterials); + public static Item feather = (new Item(32)).setUnlocalizedName("feather").setCreativeTab(CreativeTabs.tabMaterials); + public static Item gunpowder = (new Item(33)).setUnlocalizedName("sulphur").setPotionEffect(PotionHelper.gunpowderEffect).setCreativeTab(CreativeTabs.tabMaterials); + public static Item hoeWood = (new ItemHoe(34, EnumToolMaterial.WOOD)).setUnlocalizedName("hoeWood"); + public static Item hoeStone = (new ItemHoe(35, EnumToolMaterial.STONE)).setUnlocalizedName("hoeStone"); + public static Item hoeIron = (new ItemHoe(36, EnumToolMaterial.IRON)).setUnlocalizedName("hoeIron"); + public static Item hoeDiamond = (new ItemHoe(37, EnumToolMaterial.EMERALD)).setUnlocalizedName("hoeDiamond"); + public static Item hoeGold = (new ItemHoe(38, EnumToolMaterial.GOLD)).setUnlocalizedName("hoeGold"); + public static Item seeds = (new ItemSeeds(39, Block.crops.blockID, Block.tilledField.blockID)).setUnlocalizedName("seeds"); + public static Item wheat = (new Item(40)).setUnlocalizedName("wheat").setCreativeTab(CreativeTabs.tabMaterials); + public static Item bread = (new ItemFood(41, 5, 0.6F, false)).setUnlocalizedName("bread"); + public static ItemArmor helmetLeather = (ItemArmor)(new ItemArmor(42, EnumArmorMaterial.CLOTH, 0, 0)).setUnlocalizedName("helmetCloth"); + public static ItemArmor plateLeather = (ItemArmor)(new ItemArmor(43, EnumArmorMaterial.CLOTH, 0, 1)).setUnlocalizedName("chestplateCloth"); + public static ItemArmor legsLeather = (ItemArmor)(new ItemArmor(44, EnumArmorMaterial.CLOTH, 0, 2)).setUnlocalizedName("leggingsCloth"); + public static ItemArmor bootsLeather = (ItemArmor)(new ItemArmor(45, EnumArmorMaterial.CLOTH, 0, 3)).setUnlocalizedName("bootsCloth"); + public static ItemArmor helmetChain = (ItemArmor)(new ItemArmor(46, EnumArmorMaterial.CHAIN, 1, 0)).setUnlocalizedName("helmetChain"); + public static ItemArmor plateChain = (ItemArmor)(new ItemArmor(47, EnumArmorMaterial.CHAIN, 1, 1)).setUnlocalizedName("chestplateChain"); + public static ItemArmor legsChain = (ItemArmor)(new ItemArmor(48, EnumArmorMaterial.CHAIN, 1, 2)).setUnlocalizedName("leggingsChain"); + public static ItemArmor bootsChain = (ItemArmor)(new ItemArmor(49, EnumArmorMaterial.CHAIN, 1, 3)).setUnlocalizedName("bootsChain"); + public static ItemArmor helmetIron = (ItemArmor)(new ItemArmor(50, EnumArmorMaterial.IRON, 2, 0)).setUnlocalizedName("helmetIron"); + public static ItemArmor plateIron = (ItemArmor)(new ItemArmor(51, EnumArmorMaterial.IRON, 2, 1)).setUnlocalizedName("chestplateIron"); + public static ItemArmor legsIron = (ItemArmor)(new ItemArmor(52, EnumArmorMaterial.IRON, 2, 2)).setUnlocalizedName("leggingsIron"); + public static ItemArmor bootsIron = (ItemArmor)(new ItemArmor(53, EnumArmorMaterial.IRON, 2, 3)).setUnlocalizedName("bootsIron"); + public static ItemArmor helmetDiamond = (ItemArmor)(new ItemArmor(54, EnumArmorMaterial.DIAMOND, 3, 0)).setUnlocalizedName("helmetDiamond"); + public static ItemArmor plateDiamond = (ItemArmor)(new ItemArmor(55, EnumArmorMaterial.DIAMOND, 3, 1)).setUnlocalizedName("chestplateDiamond"); + public static ItemArmor legsDiamond = (ItemArmor)(new ItemArmor(56, EnumArmorMaterial.DIAMOND, 3, 2)).setUnlocalizedName("leggingsDiamond"); + public static ItemArmor bootsDiamond = (ItemArmor)(new ItemArmor(57, EnumArmorMaterial.DIAMOND, 3, 3)).setUnlocalizedName("bootsDiamond"); + public static ItemArmor helmetGold = (ItemArmor)(new ItemArmor(58, EnumArmorMaterial.GOLD, 4, 0)).setUnlocalizedName("helmetGold"); + public static ItemArmor plateGold = (ItemArmor)(new ItemArmor(59, EnumArmorMaterial.GOLD, 4, 1)).setUnlocalizedName("chestplateGold"); + public static ItemArmor legsGold = (ItemArmor)(new ItemArmor(60, EnumArmorMaterial.GOLD, 4, 2)).setUnlocalizedName("leggingsGold"); + public static ItemArmor bootsGold = (ItemArmor)(new ItemArmor(61, EnumArmorMaterial.GOLD, 4, 3)).setUnlocalizedName("bootsGold"); + public static Item flint = (new Item(62)).setUnlocalizedName("flint").setCreativeTab(CreativeTabs.tabMaterials); + public static Item porkRaw = (new ItemFood(63, 3, 0.3F, true)).setUnlocalizedName("porkchopRaw"); + public static Item porkCooked = (new ItemFood(64, 8, 0.8F, true)).setUnlocalizedName("porkchopCooked"); + public static Item painting = (new ItemHangingEntity(65, EntityPainting.class)).setUnlocalizedName("painting"); + public static Item appleGold = (new ItemAppleGold(66, 4, 1.2F, false)).setAlwaysEdible().setPotionEffect(Potion.regeneration.id, 5, 0, 1.0F).setUnlocalizedName("appleGold"); + public static Item sign = (new ItemSign(67)).setUnlocalizedName("sign"); + public static Item doorWood = (new ItemDoor(68, Material.wood)).setUnlocalizedName("doorWood"); + public static Item bucketEmpty = (new ItemBucket(69, 0)).setUnlocalizedName("bucket").setMaxStackSize(16); + public static Item bucketWater = (new ItemBucket(70, Block.waterMoving.blockID)).setUnlocalizedName("bucketWater").setContainerItem(bucketEmpty); + public static Item bucketLava = (new ItemBucket(71, Block.lavaMoving.blockID)).setUnlocalizedName("bucketLava").setContainerItem(bucketEmpty); + public static Item minecartEmpty = (new ItemMinecart(72, 0)).setUnlocalizedName("minecart"); + public static Item saddle = (new ItemSaddle(73)).setUnlocalizedName("saddle"); + public static Item doorIron = (new ItemDoor(74, Material.iron)).setUnlocalizedName("doorIron"); + public static Item redstone = (new ItemRedstone(75)).setUnlocalizedName("redstone").setPotionEffect(PotionHelper.redstoneEffect); + public static Item snowball = (new ItemSnowball(76)).setUnlocalizedName("snowball"); + public static Item boat = (new ItemBoat(77)).setUnlocalizedName("boat"); + public static Item leather = (new Item(78)).setUnlocalizedName("leather").setCreativeTab(CreativeTabs.tabMaterials); + public static Item bucketMilk = (new ItemBucketMilk(79)).setUnlocalizedName("milk").setContainerItem(bucketEmpty); + public static Item brick = (new Item(80)).setUnlocalizedName("brick").setCreativeTab(CreativeTabs.tabMaterials); + public static Item clay = (new Item(81)).setUnlocalizedName("clay").setCreativeTab(CreativeTabs.tabMaterials); + public static Item reed = (new ItemReed(82, Block.reed)).setUnlocalizedName("reeds").setCreativeTab(CreativeTabs.tabMaterials); + public static Item paper = (new Item(83)).setUnlocalizedName("paper").setCreativeTab(CreativeTabs.tabMisc); + public static Item book = (new ItemBook(84)).setUnlocalizedName("book").setCreativeTab(CreativeTabs.tabMisc); + public static Item slimeBall = (new Item(85)).setUnlocalizedName("slimeball").setCreativeTab(CreativeTabs.tabMisc); + public static Item minecartCrate = (new ItemMinecart(86, 1)).setUnlocalizedName("minecartChest"); + public static Item minecartPowered = (new ItemMinecart(87, 2)).setUnlocalizedName("minecartFurnace"); + public static Item egg = (new ItemEgg(88)).setUnlocalizedName("egg"); + public static Item compass = (new Item(89)).setUnlocalizedName("compass").setCreativeTab(CreativeTabs.tabTools); + public static ItemFishingRod fishingRod = (ItemFishingRod)(new ItemFishingRod(90)).setUnlocalizedName("fishingRod"); + public static Item pocketSundial = (new Item(91)).setUnlocalizedName("clock").setCreativeTab(CreativeTabs.tabTools); + public static Item lightStoneDust = (new Item(92)).setUnlocalizedName("yellowDust").setPotionEffect(PotionHelper.glowstoneEffect).setCreativeTab(CreativeTabs.tabMaterials); + public static Item fishRaw = (new ItemFood(93, 2, 0.3F, false)).setUnlocalizedName("fishRaw"); + public static Item fishCooked = (new ItemFood(94, 5, 0.6F, false)).setUnlocalizedName("fishCooked"); + public static Item dyePowder = (new ItemDye(95)).setUnlocalizedName("dyePowder"); + public static Item bone = (new Item(96)).setUnlocalizedName("bone").setFull3D().setCreativeTab(CreativeTabs.tabMisc); + public static Item sugar = (new Item(97)).setUnlocalizedName("sugar").setPotionEffect(PotionHelper.sugarEffect).setCreativeTab(CreativeTabs.tabMaterials); + public static Item cake = (new ItemReed(98, Block.cake)).setMaxStackSize(1).setUnlocalizedName("cake").setCreativeTab(CreativeTabs.tabFood); + public static Item bed = (new ItemBed(99)).setMaxStackSize(1).setUnlocalizedName("bed"); + public static Item redstoneRepeater = (new ItemReed(100, Block.redstoneRepeaterIdle)).setUnlocalizedName("diode").setCreativeTab(CreativeTabs.tabRedstone); + public static Item cookie = (new ItemFood(101, 2, 0.1F, false)).setUnlocalizedName("cookie"); + public static ItemMap map = (ItemMap)(new ItemMap(102)).setUnlocalizedName("map"); + public static ItemShears shears = (ItemShears)(new ItemShears(103)).setUnlocalizedName("shears"); + public static Item melon = (new ItemFood(104, 2, 0.3F, false)).setUnlocalizedName("melon"); + public static Item pumpkinSeeds = (new ItemSeeds(105, Block.pumpkinStem.blockID, Block.tilledField.blockID)).setUnlocalizedName("seeds_pumpkin"); + public static Item melonSeeds = (new ItemSeeds(106, Block.melonStem.blockID, Block.tilledField.blockID)).setUnlocalizedName("seeds_melon"); + public static Item beefRaw = (new ItemFood(107, 3, 0.3F, true)).setUnlocalizedName("beefRaw"); + public static Item beefCooked = (new ItemFood(108, 8, 0.8F, true)).setUnlocalizedName("beefCooked"); + public static Item chickenRaw = (new ItemFood(109, 2, 0.3F, true)).setPotionEffect(Potion.hunger.id, 30, 0, 0.3F).setUnlocalizedName("chickenRaw"); + public static Item chickenCooked = (new ItemFood(110, 6, 0.6F, true)).setUnlocalizedName("chickenCooked"); + public static Item rottenFlesh = (new ItemFood(111, 4, 0.1F, true)).setPotionEffect(Potion.hunger.id, 30, 0, 0.8F).setUnlocalizedName("rottenFlesh"); + public static Item enderPearl = (new ItemEnderPearl(112)).setUnlocalizedName("enderPearl"); + public static Item blazeRod = (new Item(113)).setUnlocalizedName("blazeRod").setCreativeTab(CreativeTabs.tabMaterials); + public static Item ghastTear = (new Item(114)).setUnlocalizedName("ghastTear").setPotionEffect(PotionHelper.ghastTearEffect).setCreativeTab(CreativeTabs.tabBrewing); + public static Item goldNugget = (new Item(115)).setUnlocalizedName("goldNugget").setCreativeTab(CreativeTabs.tabMaterials); + public static Item netherStalkSeeds = (new ItemSeeds(116, Block.netherStalk.blockID, Block.slowSand.blockID)).setUnlocalizedName("netherStalkSeeds").setPotionEffect("+4"); + public static ItemPotion potion = (ItemPotion)(new ItemPotion(117)).setUnlocalizedName("potion"); + public static Item glassBottle = (new ItemGlassBottle(118)).setUnlocalizedName("glassBottle"); + public static Item spiderEye = (new ItemFood(119, 2, 0.8F, false)).setPotionEffect(Potion.poison.id, 5, 0, 1.0F).setUnlocalizedName("spiderEye").setPotionEffect(PotionHelper.spiderEyeEffect); + public static Item fermentedSpiderEye = (new Item(120)).setUnlocalizedName("fermentedSpiderEye").setPotionEffect(PotionHelper.fermentedSpiderEyeEffect).setCreativeTab(CreativeTabs.tabBrewing); + public static Item blazePowder = (new Item(121)).setUnlocalizedName("blazePowder").setPotionEffect(PotionHelper.blazePowderEffect).setCreativeTab(CreativeTabs.tabBrewing); + public static Item magmaCream = (new Item(122)).setUnlocalizedName("magmaCream").setPotionEffect(PotionHelper.magmaCreamEffect).setCreativeTab(CreativeTabs.tabBrewing); + public static Item brewingStand = (new ItemReed(123, Block.brewingStand)).setUnlocalizedName("brewingStand").setCreativeTab(CreativeTabs.tabBrewing); + public static Item cauldron = (new ItemReed(124, Block.cauldron)).setUnlocalizedName("cauldron").setCreativeTab(CreativeTabs.tabBrewing); + public static Item eyeOfEnder = (new ItemEnderEye(125)).setUnlocalizedName("eyeOfEnder"); + public static Item speckledMelon = (new Item(126)).setUnlocalizedName("speckledMelon").setPotionEffect(PotionHelper.speckledMelonEffect).setCreativeTab(CreativeTabs.tabBrewing); + public static Item monsterPlacer = (new ItemMonsterPlacer(127)).setUnlocalizedName("monsterPlacer"); + public static Item expBottle = (new ItemExpBottle(128)).setUnlocalizedName("expBottle"); + public static Item fireballCharge = (new ItemFireball(129)).setUnlocalizedName("fireball"); + public static Item writableBook = (new ItemWritableBook(130)).setUnlocalizedName("writingBook").setCreativeTab(CreativeTabs.tabMisc); + public static Item writtenBook = (new ItemEditableBook(131)).setUnlocalizedName("writtenBook"); + public static Item emerald = (new Item(132)).setUnlocalizedName("emerald").setCreativeTab(CreativeTabs.tabMaterials); + public static Item itemFrame = (new ItemHangingEntity(133, EntityItemFrame.class)).setUnlocalizedName("frame"); + public static Item flowerPot = (new ItemReed(134, Block.flowerPot)).setUnlocalizedName("flowerPot").setCreativeTab(CreativeTabs.tabDecorations); + public static Item carrot = (new ItemSeedFood(135, 4, 0.6F, Block.carrot.blockID, Block.tilledField.blockID)).setUnlocalizedName("carrots"); + public static Item potato = (new ItemSeedFood(136, 1, 0.3F, Block.potato.blockID, Block.tilledField.blockID)).setUnlocalizedName("potato"); + public static Item bakedPotato = (new ItemFood(137, 6, 0.6F, false)).setUnlocalizedName("potatoBaked"); + public static Item poisonousPotato = (new ItemFood(138, 2, 0.3F, false)).setPotionEffect(Potion.poison.id, 5, 0, 0.6F).setUnlocalizedName("potatoPoisonous"); + public static ItemEmptyMap emptyMap = (ItemEmptyMap)(new ItemEmptyMap(139)).setUnlocalizedName("emptyMap"); + public static Item goldenCarrot = (new ItemFood(140, 6, 1.2F, false)).setUnlocalizedName("carrotGolden").setPotionEffect(PotionHelper.goldenCarrotEffect); + public static Item skull = (new ItemSkull(141)).setUnlocalizedName("skull"); + public static Item carrotOnAStick = (new ItemCarrotOnAStick(142)).setUnlocalizedName("carrotOnAStick"); + public static Item netherStar = (new ItemSimpleFoiled(143)).setUnlocalizedName("netherStar").setCreativeTab(CreativeTabs.tabMaterials); + public static Item pumpkinPie = (new ItemFood(144, 8, 0.3F, false)).setUnlocalizedName("pumpkinPie").setCreativeTab(CreativeTabs.tabFood); + public static Item firework = (new ItemFirework(145)).setUnlocalizedName("fireworks"); + public static Item fireworkCharge = (new ItemFireworkCharge(146)).setUnlocalizedName("fireworksCharge").setCreativeTab(CreativeTabs.tabMisc); + public static ItemEnchantedBook enchantedBook = (ItemEnchantedBook)(new ItemEnchantedBook(147)).setMaxStackSize(1).setUnlocalizedName("enchantedBook"); + public static Item comparator = (new ItemReed(148, Block.redstoneComparatorIdle)).setUnlocalizedName("comparator").setCreativeTab(CreativeTabs.tabRedstone); + public static Item netherrackBrick = (new Item(149)).setUnlocalizedName("netherbrick").setCreativeTab(CreativeTabs.tabMaterials); + public static Item netherQuartz = (new Item(150)).setUnlocalizedName("netherquartz").setCreativeTab(CreativeTabs.tabMaterials); + public static Item minecartTnt = (new ItemMinecart(151, 3)).setUnlocalizedName("minecartTnt"); + public static Item minecartHopper = (new ItemMinecart(152, 5)).setUnlocalizedName("minecartHopper"); + public static Item record13 = (new ItemRecord(2000, "13")).setUnlocalizedName("record"); + public static Item recordCat = (new ItemRecord(2001, "cat")).setUnlocalizedName("record"); + public static Item recordBlocks = (new ItemRecord(2002, "blocks")).setUnlocalizedName("record"); + public static Item recordChirp = (new ItemRecord(2003, "chirp")).setUnlocalizedName("record"); + public static Item recordFar = (new ItemRecord(2004, "far")).setUnlocalizedName("record"); + public static Item recordMall = (new ItemRecord(2005, "mall")).setUnlocalizedName("record"); + public static Item recordMellohi = (new ItemRecord(2006, "mellohi")).setUnlocalizedName("record"); + public static Item recordStal = (new ItemRecord(2007, "stal")).setUnlocalizedName("record"); + public static Item recordStrad = (new ItemRecord(2008, "strad")).setUnlocalizedName("record"); + public static Item recordWard = (new ItemRecord(2009, "ward")).setUnlocalizedName("record"); + public static Item record11 = (new ItemRecord(2010, "11")).setUnlocalizedName("record"); + public static Item recordWait = (new ItemRecord(2011, "wait")).setUnlocalizedName("record"); + public final int itemID; + protected int maxStackSize = 64; + private int maxDamage = 0; + protected boolean bFull3D = false; + protected boolean hasSubtypes = false; + private Item containerItem = null; + private String potionEffect = null; + private String unlocalizedName; + protected Icon itemIcon; + + protected Item(int var1) { + this.itemID = 256 + var1; + if(itemsList[256 + var1] != null) { + System.out.println("CONFLICT @ " + var1); + } + + itemsList[256 + var1] = this; + } + + public Item setMaxStackSize(int var1) { + this.maxStackSize = var1; + return this; + } + + public int getSpriteNumber() { + return 1; + } + + public Icon getIconFromDamage(int var1) { + return this.itemIcon; + } + + public final Icon getIconIndex(ItemStack var1) { + return this.getIconFromDamage(var1.getItemDamage()); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + return false; + } + + public float getStrVsBlock(ItemStack var1, Block var2) { + return 1.0F; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + return var1; + } + + public ItemStack onEaten(ItemStack var1, World var2, EntityPlayer var3) { + return var1; + } + + public int getItemStackLimit() { + return this.maxStackSize; + } + + public int getMetadata(int var1) { + return 0; + } + + public boolean getHasSubtypes() { + return this.hasSubtypes; + } + + protected Item setHasSubtypes(boolean var1) { + this.hasSubtypes = var1; + return this; + } + + public int getMaxDamage() { + return this.maxDamage; + } + + protected Item setMaxDamage(int var1) { + this.maxDamage = var1; + return this; + } + + public boolean isDamageable() { + return this.maxDamage > 0 && !this.hasSubtypes; + } + + public boolean hitEntity(ItemStack var1, EntityLiving var2, EntityLiving var3) { + return false; + } + + public boolean onBlockDestroyed(ItemStack var1, World var2, int var3, int var4, int var5, int var6, EntityLiving var7) { + return false; + } + + public int getDamageVsEntity(Entity var1) { + return 1; + } + + public boolean canHarvestBlock(Block var1) { + return false; + } + + public boolean itemInteractionForEntity(ItemStack var1, EntityLiving var2) { + return false; + } + + public Item setFull3D() { + this.bFull3D = true; + return this; + } + + public boolean isFull3D() { + return this.bFull3D; + } + + public boolean shouldRotateAroundWhenRendering() { + return false; + } + + public Item setUnlocalizedName(String var1) { + this.unlocalizedName = var1; + return this; + } + + public String getLocalizedName(ItemStack var1) { + String var2 = this.getUnlocalizedName(var1); + return var2 == null ? "" : StatCollector.translateToLocal(var2); + } + + public String getUnlocalizedName() { + return "item." + this.unlocalizedName; + } + + public String getUnlocalizedName(ItemStack var1) { + return "item." + this.unlocalizedName; + } + + public Item setContainerItem(Item var1) { + this.containerItem = var1; + return this; + } + + public boolean doesContainerItemLeaveCraftingGrid(ItemStack var1) { + return true; + } + + public boolean getShareTag() { + return true; + } + + public Item getContainerItem() { + return this.containerItem; + } + + public boolean hasContainerItem() { + return this.containerItem != null; + } + + public String getStatName() { + return StatCollector.translateToLocal(this.getUnlocalizedName() + ".name"); + } + + public String func_77653_i(ItemStack var1) { + return StatCollector.translateToLocal(this.getUnlocalizedName(var1) + ".name"); + } + + public int getColorFromItemStack(ItemStack var1, int var2) { + return 16777215; + } + + public void onUpdate(ItemStack var1, World var2, Entity var3, int var4, boolean var5) { + } + + public void onCreated(ItemStack var1, World var2, EntityPlayer var3) { + } + + public boolean isMap() { + return false; + } + + public EnumAction getItemUseAction(ItemStack var1) { + return EnumAction.none; + } + + public int getMaxItemUseDuration(ItemStack var1) { + return 0; + } + + public void onPlayerStoppedUsing(ItemStack var1, World var2, EntityPlayer var3, int var4) { + } + + protected Item setPotionEffect(String var1) { + this.potionEffect = var1; + return this; + } + + public String getPotionEffect() { + return this.potionEffect; + } + + public boolean isPotionIngredient() { + return this.potionEffect != null; + } + + public void addInformation(ItemStack var1, EntityPlayer var2, List var3, boolean var4) { + } + + public String getItemDisplayName(ItemStack var1) { + return ("" + StringTranslate.getInstance().translateNamedKey(this.getLocalizedName(var1))).trim(); + } + + public boolean hasEffect(ItemStack var1) { + return var1.isItemEnchanted(); + } + + public EnumRarity getRarity(ItemStack var1) { + return var1.isItemEnchanted() ? EnumRarity.rare : EnumRarity.common; + } + + public boolean isItemTool(ItemStack var1) { + return this.getItemStackLimit() == 1 && this.isDamageable(); + } + + protected MovingObjectPosition getMovingObjectPositionFromPlayer(World var1, EntityPlayer var2, boolean var3) { + float var4 = 1.0F; + float var5 = var2.prevRotationPitch + (var2.rotationPitch - var2.prevRotationPitch) * var4; + float var6 = var2.prevRotationYaw + (var2.rotationYaw - var2.prevRotationYaw) * var4; + double var7 = var2.prevPosX + (var2.posX - var2.prevPosX) * (double)var4; + double var9 = var2.prevPosY + (var2.posY - var2.prevPosY) * (double)var4 + 1.62D - (double)var2.yOffset; + double var11 = var2.prevPosZ + (var2.posZ - var2.prevPosZ) * (double)var4; + Vec3 var13 = var1.getWorldVec3Pool().getVecFromPool(var7, var9, var11); + float var14 = MathHelper.cos(-var6 * ((float)Math.PI / 180.0F) - (float)Math.PI); + float var15 = MathHelper.sin(-var6 * ((float)Math.PI / 180.0F) - (float)Math.PI); + float var16 = -MathHelper.cos(-var5 * ((float)Math.PI / 180.0F)); + float var17 = MathHelper.sin(-var5 * ((float)Math.PI / 180.0F)); + float var18 = var15 * var16; + float var20 = var14 * var16; + double var21 = 5.0D; + Vec3 var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21); + return var1.rayTraceBlocks_do_do(var13, var23, var3, !var3); + } + + public int getItemEnchantability() { + return 0; + } + + public boolean requiresMultipleRenderPasses() { + return false; + } + + public Icon getIconFromDamageForRenderPass(int var1, int var2) { + return this.getIconFromDamage(var1); + } + + public void getSubItems(int var1, CreativeTabs var2, List var3) { + var3.add(new ItemStack(var1, 1, 0)); + } + + public CreativeTabs getCreativeTab() { + return this.tabToDisplayOn; + } + + public Item setCreativeTab(CreativeTabs var1) { + this.tabToDisplayOn = var1; + return this; + } + + public boolean func_82788_x() { + return true; + } + + public boolean getIsRepairable(ItemStack var1, ItemStack var2) { + return false; + } + + public void registerIcons(IconRegister var1) { + this.itemIcon = var1.registerIcon(this.unlocalizedName); + } + + static { + StatList.initStats(); + } +} diff --git a/src/net/minecraft/src/ItemAnvilBlock.java b/src/net/minecraft/src/ItemAnvilBlock.java new file mode 100644 index 0000000..dff60fe --- /dev/null +++ b/src/net/minecraft/src/ItemAnvilBlock.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class ItemAnvilBlock extends ItemMultiTextureTile { + public ItemAnvilBlock(Block var1) { + super(var1.blockID - 256, var1, BlockAnvil.statuses); + } + + public int getMetadata(int var1) { + return var1 << 2; + } +} diff --git a/src/net/minecraft/src/ItemAppleGold.java b/src/net/minecraft/src/ItemAppleGold.java new file mode 100644 index 0000000..cee9f5e --- /dev/null +++ b/src/net/minecraft/src/ItemAppleGold.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.util.List; + +public class ItemAppleGold extends ItemFood { + public ItemAppleGold(int var1, int var2, float var3, boolean var4) { + super(var1, var2, var3, var4); + this.setHasSubtypes(true); + } + + public boolean hasEffect(ItemStack var1) { + return var1.getItemDamage() > 0; + } + + public EnumRarity getRarity(ItemStack var1) { + return var1.getItemDamage() == 0 ? EnumRarity.rare : EnumRarity.epic; + } + + protected void onFoodEaten(ItemStack var1, World var2, EntityPlayer var3) { + if(var1.getItemDamage() > 0) { + if(!var2.isRemote) { + var3.addPotionEffect(new PotionEffect(Potion.regeneration.id, 600, 3)); + var3.addPotionEffect(new PotionEffect(Potion.resistance.id, 6000, 0)); + var3.addPotionEffect(new PotionEffect(Potion.fireResistance.id, 6000, 0)); + } + } else { + super.onFoodEaten(var1, var2, var3); + } + + } + + public void getSubItems(int var1, CreativeTabs var2, List var3) { + var3.add(new ItemStack(var1, 1, 0)); + var3.add(new ItemStack(var1, 1, 1)); + } +} diff --git a/src/net/minecraft/src/ItemArmor.java b/src/net/minecraft/src/ItemArmor.java new file mode 100644 index 0000000..28922cc --- /dev/null +++ b/src/net/minecraft/src/ItemArmor.java @@ -0,0 +1,148 @@ +package net.minecraft.src; + +public class ItemArmor extends Item { + private static final int[] maxDamageArray = new int[]{11, 16, 15, 13}; + private static final String[] field_94606_cu = new String[]{"helmetCloth_overlay", "chestplateCloth_overlay", "leggingsCloth_overlay", "bootsCloth_overlay"}; + public static final String[] field_94603_a = new String[]{"slot_empty_helmet", "slot_empty_chestplate", "slot_empty_leggings", "slot_empty_boots"}; + private static final IBehaviorDispenseItem field_96605_cw = new BehaviorDispenseArmor(); + public final int armorType; + public final int damageReduceAmount; + public final int renderIndex; + private final EnumArmorMaterial material; + private Icon field_94605_cw; + private Icon field_94604_cx; + + public ItemArmor(int var1, EnumArmorMaterial var2, int var3, int var4) { + super(var1); + this.material = var2; + this.armorType = var4; + this.renderIndex = var3; + this.damageReduceAmount = var2.getDamageReductionAmount(var4); + this.setMaxDamage(var2.getDurability(var4)); + this.maxStackSize = 1; + this.setCreativeTab(CreativeTabs.tabCombat); + BlockDispenser.dispenseBehaviorRegistry.putObject(this, field_96605_cw); + } + + public int getColorFromItemStack(ItemStack var1, int var2) { + if(var2 > 0) { + return 16777215; + } else { + int var3 = this.getColor(var1); + if(var3 < 0) { + var3 = 16777215; + } + + return var3; + } + } + + public boolean requiresMultipleRenderPasses() { + return this.material == EnumArmorMaterial.CLOTH; + } + + public int getItemEnchantability() { + return this.material.getEnchantability(); + } + + public EnumArmorMaterial getArmorMaterial() { + return this.material; + } + + public boolean hasColor(ItemStack var1) { + return this.material != EnumArmorMaterial.CLOTH ? false : (!var1.hasTagCompound() ? false : (!var1.getTagCompound().hasKey("display") ? false : var1.getTagCompound().getCompoundTag("display").hasKey("color"))); + } + + public int getColor(ItemStack var1) { + if(this.material != EnumArmorMaterial.CLOTH) { + return -1; + } else { + NBTTagCompound var2 = var1.getTagCompound(); + if(var2 == null) { + return 10511680; + } else { + NBTTagCompound var3 = var2.getCompoundTag("display"); + return var3 == null ? 10511680 : (var3.hasKey("color") ? var3.getInteger("color") : 10511680); + } + } + } + + public Icon getIconFromDamageForRenderPass(int var1, int var2) { + return var2 == 1 ? this.field_94605_cw : super.getIconFromDamageForRenderPass(var1, var2); + } + + public void removeColor(ItemStack var1) { + if(this.material == EnumArmorMaterial.CLOTH) { + NBTTagCompound var2 = var1.getTagCompound(); + if(var2 != null) { + NBTTagCompound var3 = var2.getCompoundTag("display"); + if(var3.hasKey("color")) { + var3.removeTag("color"); + } + + } + } + } + + public void func_82813_b(ItemStack var1, int var2) { + if(this.material != EnumArmorMaterial.CLOTH) { + throw new UnsupportedOperationException("Can\'t dye non-leather!"); + } else { + NBTTagCompound var3 = var1.getTagCompound(); + if(var3 == null) { + var3 = new NBTTagCompound(); + var1.setTagCompound(var3); + } + + NBTTagCompound var4 = var3.getCompoundTag("display"); + if(!var3.hasKey("display")) { + var3.setCompoundTag("display", var4); + } + + var4.setInteger("color", var2); + } + } + + public boolean getIsRepairable(ItemStack var1, ItemStack var2) { + return this.material.getArmorCraftingMaterial() == var2.itemID ? true : super.getIsRepairable(var1, var2); + } + + public void registerIcons(IconRegister var1) { + super.registerIcons(var1); + if(this.material == EnumArmorMaterial.CLOTH) { + this.field_94605_cw = var1.registerIcon(field_94606_cu[this.armorType]); + } + + this.field_94604_cx = var1.registerIcon(field_94603_a[this.armorType]); + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + int var4 = EntityLiving.getArmorPosition(var1) - 1; + ItemStack var5 = var3.getCurrentArmor(var4); + if(var5 == null) { + var3.setCurrentItemOrArmor(var4, var1.copy()); + var1.stackSize = 0; + } + + return var1; + } + + public static Icon func_94602_b(int var0) { + switch(var0) { + case 0: + return Item.helmetDiamond.field_94604_cx; + case 1: + return Item.plateDiamond.field_94604_cx; + case 2: + return Item.legsDiamond.field_94604_cx; + case 3: + return Item.bootsDiamond.field_94604_cx; + default: + return null; + } + } + + static int[] getMaxDamageArray() { + return maxDamageArray; + } +} diff --git a/src/net/minecraft/src/ItemAxe.java b/src/net/minecraft/src/ItemAxe.java new file mode 100644 index 0000000..3e7476f --- /dev/null +++ b/src/net/minecraft/src/ItemAxe.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class ItemAxe extends ItemTool { + private static Block[] blocksEffectiveAgainst = new Block[]{Block.planks, Block.bookShelf, Block.wood, Block.chest, Block.stoneDoubleSlab, Block.stoneSingleSlab, Block.pumpkin, Block.pumpkinLantern}; + + protected ItemAxe(int var1, EnumToolMaterial var2) { + super(var1, 3, var2, blocksEffectiveAgainst); + } + + public float getStrVsBlock(ItemStack var1, Block var2) { + return var2 == null || var2.blockMaterial != Material.wood && var2.blockMaterial != Material.plants && var2.blockMaterial != Material.vine ? super.getStrVsBlock(var1, var2) : this.efficiencyOnProperMaterial; + } +} diff --git a/src/net/minecraft/src/ItemBed.java b/src/net/minecraft/src/ItemBed.java new file mode 100644 index 0000000..a86824c --- /dev/null +++ b/src/net/minecraft/src/ItemBed.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +public class ItemBed extends Item { + public ItemBed(int var1) { + super(var1); + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(var3.isRemote) { + return true; + } else if(var7 != 1) { + return false; + } else { + ++var5; + BlockBed var11 = (BlockBed)Block.bed; + int var12 = MathHelper.floor_double((double)(var2.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + byte var13 = 0; + byte var14 = 0; + if(var12 == 0) { + var14 = 1; + } + + if(var12 == 1) { + var13 = -1; + } + + if(var12 == 2) { + var14 = -1; + } + + if(var12 == 3) { + var13 = 1; + } + + if(var2.canPlayerEdit(var4, var5, var6, var7, var1) && var2.canPlayerEdit(var4 + var13, var5, var6 + var14, var7, var1)) { + if(var3.isAirBlock(var4, var5, var6) && var3.isAirBlock(var4 + var13, var5, var6 + var14) && var3.doesBlockHaveSolidTopSurface(var4, var5 - 1, var6) && var3.doesBlockHaveSolidTopSurface(var4 + var13, var5 - 1, var6 + var14)) { + var3.setBlock(var4, var5, var6, var11.blockID, var12, 3); + if(var3.getBlockId(var4, var5, var6) == var11.blockID) { + var3.setBlock(var4 + var13, var5, var6 + var14, var11.blockID, var12 + 8, 3); + } + + --var1.stackSize; + return true; + } else { + return false; + } + } else { + return false; + } + } + } +} diff --git a/src/net/minecraft/src/ItemBlock.java b/src/net/minecraft/src/ItemBlock.java new file mode 100644 index 0000000..5812674 --- /dev/null +++ b/src/net/minecraft/src/ItemBlock.java @@ -0,0 +1,138 @@ +package net.minecraft.src; + +import java.util.List; + +public class ItemBlock extends Item { + private int blockID; + private Icon field_94588_b; + + public ItemBlock(int var1) { + super(var1); + this.blockID = var1 + 256; + } + + public int getBlockID() { + return this.blockID; + } + + public int getSpriteNumber() { + return Block.blocksList[this.blockID].getItemIconName() != null ? 1 : 0; + } + + public Icon getIconFromDamage(int var1) { + return this.field_94588_b != null ? this.field_94588_b : Block.blocksList[this.blockID].getBlockTextureFromSide(1); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + int var11 = var3.getBlockId(var4, var5, var6); + if(var11 == Block.snow.blockID && (var3.getBlockMetadata(var4, var5, var6) & 7) < 1) { + var7 = 1; + } else if(var11 != Block.vine.blockID && var11 != Block.tallGrass.blockID && var11 != Block.deadBush.blockID) { + if(var7 == 0) { + --var5; + } + + if(var7 == 1) { + ++var5; + } + + if(var7 == 2) { + --var6; + } + + if(var7 == 3) { + ++var6; + } + + if(var7 == 4) { + --var4; + } + + if(var7 == 5) { + ++var4; + } + } + + if(var1.stackSize == 0) { + return false; + } else if(!var2.canPlayerEdit(var4, var5, var6, var7, var1)) { + return false; + } else if(var5 == 255 && Block.blocksList[this.blockID].blockMaterial.isSolid()) { + return false; + } else if(var3.canPlaceEntityOnSide(this.blockID, var4, var5, var6, false, var7, var2, var1)) { + Block var12 = Block.blocksList[this.blockID]; + int var13 = this.getMetadata(var1.getItemDamage()); + int var14 = Block.blocksList[this.blockID].onBlockPlaced(var3, var4, var5, var6, var7, var8, var9, var10, var13); + if(var3.setBlock(var4, var5, var6, this.blockID, var14, 3)) { + if(var3.getBlockId(var4, var5, var6) == this.blockID) { + Block.blocksList[this.blockID].onBlockPlacedBy(var3, var4, var5, var6, var2, var1); + Block.blocksList[this.blockID].onPostBlockPlaced(var3, var4, var5, var6, var14); + } + + var3.playSoundEffect((double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), var12.stepSound.getPlaceSound(), (var12.stepSound.getVolume() + 1.0F) / 2.0F, var12.stepSound.getPitch() * 0.8F); + --var1.stackSize; + } + + return true; + } else { + return false; + } + } + + public boolean canPlaceItemBlockOnSide(World var1, int var2, int var3, int var4, int var5, EntityPlayer var6, ItemStack var7) { + int var8 = var1.getBlockId(var2, var3, var4); + if(var8 == Block.snow.blockID) { + var5 = 1; + } else if(var8 != Block.vine.blockID && var8 != Block.tallGrass.blockID && var8 != Block.deadBush.blockID) { + if(var5 == 0) { + --var3; + } + + if(var5 == 1) { + ++var3; + } + + if(var5 == 2) { + --var4; + } + + if(var5 == 3) { + ++var4; + } + + if(var5 == 4) { + --var2; + } + + if(var5 == 5) { + ++var2; + } + } + + return var1.canPlaceEntityOnSide(this.getBlockID(), var2, var3, var4, false, var5, (Entity)null, var7); + } + + public String getUnlocalizedName(ItemStack var1) { + return Block.blocksList[this.blockID].getUnlocalizedName(); + } + + public String getUnlocalizedName() { + return Block.blocksList[this.blockID].getUnlocalizedName(); + } + + public CreativeTabs getCreativeTab() { + return Block.blocksList[this.blockID].getCreativeTabToDisplayOn(); + } + + public void getSubItems(int var1, CreativeTabs var2, List var3) { + Block.blocksList[this.blockID].getSubBlocks(var1, var2, var3); + } + + public void registerIcons(IconRegister var1) { + String var2 = Block.blocksList[this.blockID].getItemIconName(); + if(var2 != null) { + this.field_94588_b = var1.registerIcon(var2); + } + + } +} diff --git a/src/net/minecraft/src/ItemBlockWithMetadata.java b/src/net/minecraft/src/ItemBlockWithMetadata.java new file mode 100644 index 0000000..4bbc5fa --- /dev/null +++ b/src/net/minecraft/src/ItemBlockWithMetadata.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class ItemBlockWithMetadata extends ItemBlock { + private Block theBlock; + + public ItemBlockWithMetadata(int var1, Block var2) { + super(var1); + this.theBlock = var2; + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + public Icon getIconFromDamage(int var1) { + return this.theBlock.getIcon(2, var1); + } + + public int getMetadata(int var1) { + return var1; + } +} diff --git a/src/net/minecraft/src/ItemBoat.java b/src/net/minecraft/src/ItemBoat.java new file mode 100644 index 0000000..a253bf2 --- /dev/null +++ b/src/net/minecraft/src/ItemBoat.java @@ -0,0 +1,79 @@ +package net.minecraft.src; + +import java.util.List; + +public class ItemBoat extends Item { + public ItemBoat(int var1) { + super(var1); + this.maxStackSize = 1; + this.setCreativeTab(CreativeTabs.tabTransport); + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + float var4 = 1.0F; + float var5 = var3.prevRotationPitch + (var3.rotationPitch - var3.prevRotationPitch) * var4; + float var6 = var3.prevRotationYaw + (var3.rotationYaw - var3.prevRotationYaw) * var4; + double var7 = var3.prevPosX + (var3.posX - var3.prevPosX) * (double)var4; + double var9 = var3.prevPosY + (var3.posY - var3.prevPosY) * (double)var4 + 1.62D - (double)var3.yOffset; + double var11 = var3.prevPosZ + (var3.posZ - var3.prevPosZ) * (double)var4; + Vec3 var13 = var2.getWorldVec3Pool().getVecFromPool(var7, var9, var11); + float var14 = MathHelper.cos(-var6 * ((float)Math.PI / 180.0F) - (float)Math.PI); + float var15 = MathHelper.sin(-var6 * ((float)Math.PI / 180.0F) - (float)Math.PI); + float var16 = -MathHelper.cos(-var5 * ((float)Math.PI / 180.0F)); + float var17 = MathHelper.sin(-var5 * ((float)Math.PI / 180.0F)); + float var18 = var15 * var16; + float var20 = var14 * var16; + double var21 = 5.0D; + Vec3 var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21); + MovingObjectPosition var24 = var2.rayTraceBlocks_do(var13, var23, true); + if(var24 == null) { + return var1; + } else { + Vec3 var25 = var3.getLook(var4); + boolean var26 = false; + float var27 = 1.0F; + List var28 = var2.getEntitiesWithinAABBExcludingEntity(var3, var3.boundingBox.addCoord(var25.xCoord * var21, var25.yCoord * var21, var25.zCoord * var21).expand((double)var27, (double)var27, (double)var27)); + + int var29; + for(var29 = 0; var29 < var28.size(); ++var29) { + Entity var30 = (Entity)var28.get(var29); + if(var30.canBeCollidedWith()) { + float var31 = var30.getCollisionBorderSize(); + AxisAlignedBB var32 = var30.boundingBox.expand((double)var31, (double)var31, (double)var31); + if(var32.isVecInside(var13)) { + var26 = true; + } + } + } + + if(var26) { + return var1; + } else { + if(var24.typeOfHit == EnumMovingObjectType.TILE) { + var29 = var24.blockX; + int var33 = var24.blockY; + int var34 = var24.blockZ; + if(var2.getBlockId(var29, var33, var34) == Block.snow.blockID) { + --var33; + } + + EntityBoat var35 = new EntityBoat(var2, (double)((float)var29 + 0.5F), (double)((float)var33 + 1.0F), (double)((float)var34 + 0.5F)); + var35.rotationYaw = (float)(((MathHelper.floor_double((double)(var3.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3) - 1) * 90); + if(!var2.getCollidingBoundingBoxes(var35, var35.boundingBox.expand(-0.1D, -0.1D, -0.1D)).isEmpty()) { + return var1; + } + + if(!var2.isRemote) { + var2.spawnEntityInWorld(var35); + } + + if(!var3.capabilities.isCreativeMode) { + --var1.stackSize; + } + } + + return var1; + } + } + } +} diff --git a/src/net/minecraft/src/ItemBook.java b/src/net/minecraft/src/ItemBook.java new file mode 100644 index 0000000..b557303 --- /dev/null +++ b/src/net/minecraft/src/ItemBook.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class ItemBook extends Item { + public ItemBook(int var1) { + super(var1); + } + + public boolean isItemTool(ItemStack var1) { + return var1.stackSize == 1; + } + + public int getItemEnchantability() { + return 1; + } +} diff --git a/src/net/minecraft/src/ItemBow.java b/src/net/minecraft/src/ItemBow.java new file mode 100644 index 0000000..0f41c06 --- /dev/null +++ b/src/net/minecraft/src/ItemBow.java @@ -0,0 +1,99 @@ +package net.minecraft.src; + +public class ItemBow extends Item { + public static final String[] bowPullIconNameArray = new String[]{"bow_pull_0", "bow_pull_1", "bow_pull_2"}; + private Icon[] iconArray; + + public ItemBow(int var1) { + super(var1); + this.maxStackSize = 1; + this.setMaxDamage(384); + this.setCreativeTab(CreativeTabs.tabCombat); + } + + public void onPlayerStoppedUsing(ItemStack var1, World var2, EntityPlayer var3, int var4) { + boolean var5 = var3.capabilities.isCreativeMode || EnchantmentHelper.getEnchantmentLevel(Enchantment.infinity.effectId, var1) > 0; + if(var5 || var3.inventory.hasItem(Item.arrow.itemID)) { + int var6 = this.getMaxItemUseDuration(var1) - var4; + float var7 = (float)var6 / 20.0F; + var7 = (var7 * var7 + var7 * 2.0F) / 3.0F; + if((double)var7 < 0.1D) { + return; + } + + if(var7 > 1.0F) { + var7 = 1.0F; + } + + EntityArrow var8 = new EntityArrow(var2, var3, var7 * 2.0F); + if(var7 == 1.0F) { + var8.setIsCritical(true); + } + + int var9 = EnchantmentHelper.getEnchantmentLevel(Enchantment.power.effectId, var1); + if(var9 > 0) { + var8.setDamage(var8.getDamage() + (double)var9 * 0.5D + 0.5D); + } + + int var10 = EnchantmentHelper.getEnchantmentLevel(Enchantment.punch.effectId, var1); + if(var10 > 0) { + var8.setKnockbackStrength(var10); + } + + if(EnchantmentHelper.getEnchantmentLevel(Enchantment.flame.effectId, var1) > 0) { + var8.setFire(100); + } + + var1.damageItem(1, var3); + var2.playSoundAtEntity(var3, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 1.2F) + var7 * 0.5F); + if(var5) { + var8.canBePickedUp = 2; + } else { + var3.inventory.consumeInventoryItem(Item.arrow.itemID); + } + + if(!var2.isRemote) { + var2.spawnEntityInWorld(var8); + } + } + + } + + public ItemStack onEaten(ItemStack var1, World var2, EntityPlayer var3) { + return var1; + } + + public int getMaxItemUseDuration(ItemStack var1) { + return 72000; + } + + public EnumAction getItemUseAction(ItemStack var1) { + return EnumAction.bow; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + if(var3.capabilities.isCreativeMode || var3.inventory.hasItem(Item.arrow.itemID)) { + var3.setItemInUse(var1, this.getMaxItemUseDuration(var1)); + } + + return var1; + } + + public int getItemEnchantability() { + return 1; + } + + public void registerIcons(IconRegister var1) { + super.registerIcons(var1); + this.iconArray = new Icon[bowPullIconNameArray.length]; + + for(int var2 = 0; var2 < this.iconArray.length; ++var2) { + this.iconArray[var2] = var1.registerIcon(bowPullIconNameArray[var2]); + } + + } + + public Icon getItemIconForUseDuration(int var1) { + return this.iconArray[var1]; + } +} diff --git a/src/net/minecraft/src/ItemBucket.java b/src/net/minecraft/src/ItemBucket.java new file mode 100644 index 0000000..8ddeb23 --- /dev/null +++ b/src/net/minecraft/src/ItemBucket.java @@ -0,0 +1,133 @@ +package net.minecraft.src; + +public class ItemBucket extends Item { + private int isFull; + + public ItemBucket(int var1, int var2) { + super(var1); + this.maxStackSize = 1; + this.isFull = var2; + this.setCreativeTab(CreativeTabs.tabMisc); + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + float var4 = 1.0F; + double var5 = var3.prevPosX + (var3.posX - var3.prevPosX) * (double)var4; + double var7 = var3.prevPosY + (var3.posY - var3.prevPosY) * (double)var4 + 1.62D - (double)var3.yOffset; + double var9 = var3.prevPosZ + (var3.posZ - var3.prevPosZ) * (double)var4; + boolean var11 = this.isFull == 0; + MovingObjectPosition var12 = this.getMovingObjectPositionFromPlayer(var2, var3, var11); + if(var12 == null) { + return var1; + } else { + if(var12.typeOfHit == EnumMovingObjectType.TILE) { + int var13 = var12.blockX; + int var14 = var12.blockY; + int var15 = var12.blockZ; + if(!var2.canMineBlock(var3, var13, var14, var15)) { + return var1; + } + + if(this.isFull == 0) { + if(!var3.canPlayerEdit(var13, var14, var15, var12.sideHit, var1)) { + return var1; + } + + if(var2.getBlockMaterial(var13, var14, var15) == Material.water && var2.getBlockMetadata(var13, var14, var15) == 0) { + var2.setBlockToAir(var13, var14, var15); + if(var3.capabilities.isCreativeMode) { + return var1; + } + + if(--var1.stackSize <= 0) { + return new ItemStack(Item.bucketWater); + } + + if(!var3.inventory.addItemStackToInventory(new ItemStack(Item.bucketWater))) { + var3.dropPlayerItem(new ItemStack(Item.bucketWater.itemID, 1, 0)); + } + + return var1; + } + + if(var2.getBlockMaterial(var13, var14, var15) == Material.lava && var2.getBlockMetadata(var13, var14, var15) == 0) { + var2.setBlockToAir(var13, var14, var15); + if(var3.capabilities.isCreativeMode) { + return var1; + } + + if(--var1.stackSize <= 0) { + return new ItemStack(Item.bucketLava); + } + + if(!var3.inventory.addItemStackToInventory(new ItemStack(Item.bucketLava))) { + var3.dropPlayerItem(new ItemStack(Item.bucketLava.itemID, 1, 0)); + } + + return var1; + } + } else { + if(this.isFull < 0) { + return new ItemStack(Item.bucketEmpty); + } + + if(var12.sideHit == 0) { + --var14; + } + + if(var12.sideHit == 1) { + ++var14; + } + + if(var12.sideHit == 2) { + --var15; + } + + if(var12.sideHit == 3) { + ++var15; + } + + if(var12.sideHit == 4) { + --var13; + } + + if(var12.sideHit == 5) { + ++var13; + } + + if(!var3.canPlayerEdit(var13, var14, var15, var12.sideHit, var1)) { + return var1; + } + + if(this.tryPlaceContainedLiquid(var2, var5, var7, var9, var13, var14, var15) && !var3.capabilities.isCreativeMode) { + return new ItemStack(Item.bucketEmpty); + } + } + } else if(this.isFull == 0 && var12.entityHit instanceof EntityCow) { + return new ItemStack(Item.bucketMilk); + } + + return var1; + } + } + + public boolean tryPlaceContainedLiquid(World var1, double var2, double var4, double var6, int var8, int var9, int var10) { + if(this.isFull <= 0) { + return false; + } else if(!var1.isAirBlock(var8, var9, var10) && var1.getBlockMaterial(var8, var9, var10).isSolid()) { + return false; + } else { + if(var1.provider.isHellWorld && this.isFull == Block.waterMoving.blockID) { + var1.playSoundEffect(var2 + 0.5D, var4 + 0.5D, var6 + 0.5D, "random.fizz", 0.5F, 2.6F + (var1.rand.nextFloat() - var1.rand.nextFloat()) * 0.8F); + + for(int var11 = 0; var11 < 8; ++var11) { + var1.spawnParticle("largesmoke", (double)var8 + Math.random(), (double)var9 + Math.random(), (double)var10 + Math.random(), 0.0D, 0.0D, 0.0D); + } + } else { + var1.setBlock(var8, var9, var10, this.isFull, 0, 3); + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ItemBucketMilk.java b/src/net/minecraft/src/ItemBucketMilk.java new file mode 100644 index 0000000..c113a66 --- /dev/null +++ b/src/net/minecraft/src/ItemBucketMilk.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +public class ItemBucketMilk extends Item { + public ItemBucketMilk(int var1) { + super(var1); + this.setMaxStackSize(1); + this.setCreativeTab(CreativeTabs.tabMisc); + } + + public ItemStack onEaten(ItemStack var1, World var2, EntityPlayer var3) { + if(!var3.capabilities.isCreativeMode) { + --var1.stackSize; + } + + if(!var2.isRemote) { + var3.clearActivePotions(); + } + + return var1.stackSize <= 0 ? new ItemStack(Item.bucketEmpty) : var1; + } + + public int getMaxItemUseDuration(ItemStack var1) { + return 32; + } + + public EnumAction getItemUseAction(ItemStack var1) { + return EnumAction.drink; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + var3.setItemInUse(var1, this.getMaxItemUseDuration(var1)); + return var1; + } +} diff --git a/src/net/minecraft/src/ItemCarrotOnAStick.java b/src/net/minecraft/src/ItemCarrotOnAStick.java new file mode 100644 index 0000000..67b5949 --- /dev/null +++ b/src/net/minecraft/src/ItemCarrotOnAStick.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +public class ItemCarrotOnAStick extends Item { + public ItemCarrotOnAStick(int var1) { + super(var1); + this.setCreativeTab(CreativeTabs.tabTransport); + this.setMaxStackSize(1); + this.setMaxDamage(25); + } + + public boolean isFull3D() { + return true; + } + + public boolean shouldRotateAroundWhenRendering() { + return true; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + if(var3.isRiding() && var3.ridingEntity instanceof EntityPig) { + EntityPig var4 = (EntityPig)var3.ridingEntity; + if(var4.getAIControlledByPlayer().isControlledByPlayer() && var1.getMaxDamage() - var1.getItemDamage() >= 7) { + var4.getAIControlledByPlayer().boostSpeed(); + var1.damageItem(7, var3); + if(var1.stackSize == 0) { + ItemStack var5 = new ItemStack(Item.fishingRod); + var5.setTagCompound(var1.stackTagCompound); + return var5; + } + } + } + + return var1; + } +} diff --git a/src/net/minecraft/src/ItemCloth.java b/src/net/minecraft/src/ItemCloth.java new file mode 100644 index 0000000..7278cf9 --- /dev/null +++ b/src/net/minecraft/src/ItemCloth.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +public class ItemCloth extends ItemBlock { + public ItemCloth(int var1) { + super(var1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + public Icon getIconFromDamage(int var1) { + return Block.cloth.getIcon(2, BlockCloth.getBlockFromDye(var1)); + } + + public int getMetadata(int var1) { + return var1; + } + + public String getUnlocalizedName(ItemStack var1) { + return super.getUnlocalizedName() + "." + ItemDye.dyeColorNames[BlockCloth.getBlockFromDye(var1.getItemDamage())]; + } +} diff --git a/src/net/minecraft/src/ItemCoal.java b/src/net/minecraft/src/ItemCoal.java new file mode 100644 index 0000000..9b66fcf --- /dev/null +++ b/src/net/minecraft/src/ItemCoal.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.List; + +public class ItemCoal extends Item { + public ItemCoal(int var1) { + super(var1); + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.setCreativeTab(CreativeTabs.tabMaterials); + } + + public String getUnlocalizedName(ItemStack var1) { + return var1.getItemDamage() == 1 ? "item.charcoal" : "item.coal"; + } + + public void getSubItems(int var1, CreativeTabs var2, List var3) { + var3.add(new ItemStack(var1, 1, 0)); + var3.add(new ItemStack(var1, 1, 1)); + } +} diff --git a/src/net/minecraft/src/ItemColored.java b/src/net/minecraft/src/ItemColored.java new file mode 100644 index 0000000..1f45e6c --- /dev/null +++ b/src/net/minecraft/src/ItemColored.java @@ -0,0 +1,41 @@ +package net.minecraft.src; + +public class ItemColored extends ItemBlock { + private final Block blockRef = Block.blocksList[this.getBlockID()]; + private String[] blockNames; + + public ItemColored(int var1, boolean var2) { + super(var1); + if(var2) { + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + } + + public int getColorFromItemStack(ItemStack var1, int var2) { + return this.blockRef.getRenderColor(var1.getItemDamage()); + } + + public Icon getIconFromDamage(int var1) { + return this.blockRef.getIcon(0, var1); + } + + public int getMetadata(int var1) { + return var1; + } + + public ItemColored setBlockNames(String[] var1) { + this.blockNames = var1; + return this; + } + + public String getUnlocalizedName(ItemStack var1) { + if(this.blockNames == null) { + return super.getUnlocalizedName(var1); + } else { + int var2 = var1.getItemDamage(); + return var2 >= 0 && var2 < this.blockNames.length ? super.getUnlocalizedName(var1) + "." + this.blockNames[var2] : super.getUnlocalizedName(var1); + } + } +} diff --git a/src/net/minecraft/src/ItemDoor.java b/src/net/minecraft/src/ItemDoor.java new file mode 100644 index 0000000..a5f07b0 --- /dev/null +++ b/src/net/minecraft/src/ItemDoor.java @@ -0,0 +1,75 @@ +package net.minecraft.src; + +public class ItemDoor extends Item { + private Material doorMaterial; + + public ItemDoor(int var1, Material var2) { + super(var1); + this.doorMaterial = var2; + this.maxStackSize = 1; + this.setCreativeTab(CreativeTabs.tabRedstone); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(var7 != 1) { + return false; + } else { + ++var5; + Block var11; + if(this.doorMaterial == Material.wood) { + var11 = Block.doorWood; + } else { + var11 = Block.doorIron; + } + + if(var2.canPlayerEdit(var4, var5, var6, var7, var1) && var2.canPlayerEdit(var4, var5 + 1, var6, var7, var1)) { + if(!var11.canPlaceBlockAt(var3, var4, var5, var6)) { + return false; + } else { + int var12 = MathHelper.floor_double((double)((var2.rotationYaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3; + placeDoorBlock(var3, var4, var5, var6, var12, var11); + --var1.stackSize; + return true; + } + } else { + return false; + } + } + } + + public static void placeDoorBlock(World var0, int var1, int var2, int var3, int var4, Block var5) { + byte var6 = 0; + byte var7 = 0; + if(var4 == 0) { + var7 = 1; + } + + if(var4 == 1) { + var6 = -1; + } + + if(var4 == 2) { + var7 = -1; + } + + if(var4 == 3) { + var6 = 1; + } + + int var8 = (var0.isBlockNormalCube(var1 - var6, var2, var3 - var7) ? 1 : 0) + (var0.isBlockNormalCube(var1 - var6, var2 + 1, var3 - var7) ? 1 : 0); + int var9 = (var0.isBlockNormalCube(var1 + var6, var2, var3 + var7) ? 1 : 0) + (var0.isBlockNormalCube(var1 + var6, var2 + 1, var3 + var7) ? 1 : 0); + boolean var10 = var0.getBlockId(var1 - var6, var2, var3 - var7) == var5.blockID || var0.getBlockId(var1 - var6, var2 + 1, var3 - var7) == var5.blockID; + boolean var11 = var0.getBlockId(var1 + var6, var2, var3 + var7) == var5.blockID || var0.getBlockId(var1 + var6, var2 + 1, var3 + var7) == var5.blockID; + boolean var12 = false; + if(var10 && !var11) { + var12 = true; + } else if(var9 > var8) { + var12 = true; + } + + var0.setBlock(var1, var2, var3, var5.blockID, var4, 2); + var0.setBlock(var1, var2 + 1, var3, var5.blockID, 8 | (var12 ? 1 : 0), 2); + var0.notifyBlocksOfNeighborChange(var1, var2, var3, var5.blockID); + var0.notifyBlocksOfNeighborChange(var1, var2 + 1, var3, var5.blockID); + } +} diff --git a/src/net/minecraft/src/ItemDye.java b/src/net/minecraft/src/ItemDye.java new file mode 100644 index 0000000..9e209fb --- /dev/null +++ b/src/net/minecraft/src/ItemDye.java @@ -0,0 +1,241 @@ +package net.minecraft.src; + +import java.util.List; + +public class ItemDye extends Item { + public static final String[] dyeColorNames = new String[]{"black", "red", "green", "brown", "blue", "purple", "cyan", "silver", "gray", "pink", "lime", "yellow", "lightBlue", "magenta", "orange", "white"}; + public static final String[] field_94595_b = new String[]{"dyePowder_black", "dyePowder_red", "dyePowder_green", "dyePowder_brown", "dyePowder_blue", "dyePowder_purple", "dyePowder_cyan", "dyePowder_silver", "dyePowder_gray", "dyePowder_pink", "dyePowder_lime", "dyePowder_yellow", "dyePowder_lightBlue", "dyePowder_magenta", "dyePowder_orange", "dyePowder_white"}; + public static final int[] dyeColors = new int[]{1973019, 11743532, 3887386, 5320730, 2437522, 8073150, 2651799, 11250603, 4408131, 14188952, 4312372, 14602026, 6719955, 12801229, 15435844, 15790320}; + private Icon[] field_94594_d; + + public ItemDye(int var1) { + super(var1); + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.setCreativeTab(CreativeTabs.tabMaterials); + } + + public Icon getIconFromDamage(int var1) { + int var2 = MathHelper.clamp_int(var1, 0, 15); + return this.field_94594_d[var2]; + } + + public String getUnlocalizedName(ItemStack var1) { + int var2 = MathHelper.clamp_int(var1.getItemDamage(), 0, 15); + return super.getUnlocalizedName() + "." + dyeColorNames[var2]; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(!var2.canPlayerEdit(var4, var5, var6, var7, var1)) { + return false; + } else { + if(var1.getItemDamage() == 15) { + if(func_96604_a(var1, var3, var4, var5, var6)) { + if(!var3.isRemote) { + var3.playAuxSFX(2005, var4, var5, var6, 0); + } + + return true; + } + } else if(var1.getItemDamage() == 3) { + int var11 = var3.getBlockId(var4, var5, var6); + int var12 = var3.getBlockMetadata(var4, var5, var6); + if(var11 == Block.wood.blockID && BlockLog.limitToValidMetadata(var12) == 3) { + if(var7 == 0) { + return false; + } + + if(var7 == 1) { + return false; + } + + if(var7 == 2) { + --var6; + } + + if(var7 == 3) { + ++var6; + } + + if(var7 == 4) { + --var4; + } + + if(var7 == 5) { + ++var4; + } + + if(var3.isAirBlock(var4, var5, var6)) { + int var13 = Block.blocksList[Block.cocoaPlant.blockID].onBlockPlaced(var3, var4, var5, var6, var7, var8, var9, var10, 0); + var3.setBlock(var4, var5, var6, Block.cocoaPlant.blockID, var13, 2); + if(!var2.capabilities.isCreativeMode) { + --var1.stackSize; + } + } + + return true; + } + } + + return false; + } + } + + public static boolean func_96604_a(ItemStack var0, World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3, var4); + if(var5 == Block.sapling.blockID) { + if(!var1.isRemote) { + if((double)var1.rand.nextFloat() < 0.45D) { + ((BlockSapling)Block.sapling).markOrGrowMarked(var1, var2, var3, var4, var1.rand); + } + + --var0.stackSize; + } + + return true; + } else if(var5 != Block.mushroomBrown.blockID && var5 != Block.mushroomRed.blockID) { + if(var5 != Block.melonStem.blockID && var5 != Block.pumpkinStem.blockID) { + if(var5 > 0 && Block.blocksList[var5] instanceof BlockCrops) { + if(var1.getBlockMetadata(var2, var3, var4) == 7) { + return false; + } else { + if(!var1.isRemote) { + ((BlockCrops)Block.blocksList[var5]).fertilize(var1, var2, var3, var4); + --var0.stackSize; + } + + return true; + } + } else { + int var6; + int var7; + int var8; + if(var5 == Block.cocoaPlant.blockID) { + var6 = var1.getBlockMetadata(var2, var3, var4); + var7 = BlockDirectional.getDirection(var6); + var8 = BlockCocoa.func_72219_c(var6); + if(var8 >= 2) { + return false; + } else { + if(!var1.isRemote) { + ++var8; + var1.setBlockMetadataWithNotify(var2, var3, var4, var8 << 2 | var7, 2); + --var0.stackSize; + } + + return true; + } + } else if(var5 != Block.grass.blockID) { + return false; + } else { + if(!var1.isRemote) { + --var0.stackSize; + + label102: + for(var6 = 0; var6 < 128; ++var6) { + var7 = var2; + var8 = var3 + 1; + int var9 = var4; + + for(int var10 = 0; var10 < var6 / 16; ++var10) { + var7 += itemRand.nextInt(3) - 1; + var8 += (itemRand.nextInt(3) - 1) * itemRand.nextInt(3) / 2; + var9 += itemRand.nextInt(3) - 1; + if(var1.getBlockId(var7, var8 - 1, var9) != Block.grass.blockID || var1.isBlockNormalCube(var7, var8, var9)) { + continue label102; + } + } + + if(var1.getBlockId(var7, var8, var9) == 0) { + if(itemRand.nextInt(10) != 0) { + if(Block.tallGrass.canBlockStay(var1, var7, var8, var9)) { + var1.setBlock(var7, var8, var9, Block.tallGrass.blockID, 1, 3); + } + } else if(itemRand.nextInt(3) != 0) { + if(Block.plantYellow.canBlockStay(var1, var7, var8, var9)) { + var1.setBlock(var7, var8, var9, Block.plantYellow.blockID); + } + } else if(Block.plantRed.canBlockStay(var1, var7, var8, var9)) { + var1.setBlock(var7, var8, var9, Block.plantRed.blockID); + } + } + } + } + + return true; + } + } + } else if(var1.getBlockMetadata(var2, var3, var4) == 7) { + return false; + } else { + if(!var1.isRemote) { + ((BlockStem)Block.blocksList[var5]).fertilizeStem(var1, var2, var3, var4); + --var0.stackSize; + } + + return true; + } + } else { + if(!var1.isRemote) { + if((double)var1.rand.nextFloat() < 0.4D) { + ((BlockMushroom)Block.blocksList[var5]).fertilizeMushroom(var1, var2, var3, var4, var1.rand); + } + + --var0.stackSize; + } + + return true; + } + } + + public static void func_96603_a(World var0, int var1, int var2, int var3, int var4) { + int var5 = var0.getBlockId(var1, var2, var3); + if(var4 == 0) { + var4 = 15; + } + + Block var6 = var5 > 0 && var5 < Block.blocksList.length ? Block.blocksList[var5] : null; + if(var6 != null) { + var6.setBlockBoundsBasedOnState(var0, var1, var2, var3); + + for(int var7 = 0; var7 < var4; ++var7) { + double var8 = itemRand.nextGaussian() * 0.02D; + double var10 = itemRand.nextGaussian() * 0.02D; + double var12 = itemRand.nextGaussian() * 0.02D; + var0.spawnParticle("happyVillager", (double)((float)var1 + itemRand.nextFloat()), (double)var2 + (double)itemRand.nextFloat() * var6.getBlockBoundsMaxY(), (double)((float)var3 + itemRand.nextFloat()), var8, var10, var12); + } + + } + } + + public boolean itemInteractionForEntity(ItemStack var1, EntityLiving var2) { + if(var2 instanceof EntitySheep) { + EntitySheep var3 = (EntitySheep)var2; + int var4 = BlockCloth.getBlockFromDye(var1.getItemDamage()); + if(!var3.getSheared() && var3.getFleeceColor() != var4) { + var3.setFleeceColor(var4); + --var1.stackSize; + } + + return true; + } else { + return false; + } + } + + public void getSubItems(int var1, CreativeTabs var2, List var3) { + for(int var4 = 0; var4 < 16; ++var4) { + var3.add(new ItemStack(var1, 1, var4)); + } + + } + + public void registerIcons(IconRegister var1) { + this.field_94594_d = new Icon[field_94595_b.length]; + + for(int var2 = 0; var2 < field_94595_b.length; ++var2) { + this.field_94594_d[var2] = var1.registerIcon(field_94595_b[var2]); + } + + } +} diff --git a/src/net/minecraft/src/ItemEditableBook.java b/src/net/minecraft/src/ItemEditableBook.java new file mode 100644 index 0000000..fd7d973 --- /dev/null +++ b/src/net/minecraft/src/ItemEditableBook.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +import java.util.List; + +public class ItemEditableBook extends Item { + public ItemEditableBook(int var1) { + super(var1); + this.setMaxStackSize(1); + } + + public static boolean validBookTagContents(NBTTagCompound var0) { + if(!ItemWritableBook.validBookTagPages(var0)) { + return false; + } else if(!var0.hasKey("title")) { + return false; + } else { + String var1 = var0.getString("title"); + return var1 != null && var1.length() <= 16 ? var0.hasKey("author") : false; + } + } + + public String getItemDisplayName(ItemStack var1) { + if(var1.hasTagCompound()) { + NBTTagCompound var2 = var1.getTagCompound(); + NBTTagString var3 = (NBTTagString)var2.getTag("title"); + if(var3 != null) { + return var3.toString(); + } + } + + return super.getItemDisplayName(var1); + } + + public void addInformation(ItemStack var1, EntityPlayer var2, List var3, boolean var4) { + if(var1.hasTagCompound()) { + NBTTagCompound var5 = var1.getTagCompound(); + NBTTagString var6 = (NBTTagString)var5.getTag("author"); + if(var6 != null) { + var3.add(EnumChatFormatting.GRAY + String.format(StatCollector.translateToLocalFormatted("book.byAuthor", new Object[]{var6.data}), new Object[0])); + } + } + + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + var3.displayGUIBook(var1); + return var1; + } + + public boolean getShareTag() { + return true; + } + + public boolean hasEffect(ItemStack var1) { + return true; + } +} diff --git a/src/net/minecraft/src/ItemEgg.java b/src/net/minecraft/src/ItemEgg.java new file mode 100644 index 0000000..6608c71 --- /dev/null +++ b/src/net/minecraft/src/ItemEgg.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +public class ItemEgg extends Item { + public ItemEgg(int var1) { + super(var1); + this.maxStackSize = 16; + this.setCreativeTab(CreativeTabs.tabMaterials); + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + if(!var3.capabilities.isCreativeMode) { + --var1.stackSize; + } + + var2.playSoundAtEntity(var3, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + if(!var2.isRemote) { + var2.spawnEntityInWorld(new EntityEgg(var2, var3)); + } + + return var1; + } +} diff --git a/src/net/minecraft/src/ItemEmptyMap.java b/src/net/minecraft/src/ItemEmptyMap.java new file mode 100644 index 0000000..2381bcd --- /dev/null +++ b/src/net/minecraft/src/ItemEmptyMap.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +public class ItemEmptyMap extends ItemMapBase { + protected ItemEmptyMap(int var1) { + super(var1); + this.setCreativeTab(CreativeTabs.tabMisc); + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + ItemStack var4 = new ItemStack(Item.map, 1, var2.getUniqueDataId("map")); + String var5 = "map_" + var4.getItemDamage(); + MapData var6 = new MapData(var5); + var2.setItemData(var5, var6); + var6.scale = 0; + int var7 = 128 * (1 << var6.scale); + var6.xCenter = (int)(Math.round(var3.posX / (double)var7) * (long)var7); + var6.zCenter = (int)(Math.round(var3.posZ / (double)var7) * (long)var7); + var6.dimension = (byte)var2.provider.dimensionId; + var6.markDirty(); + --var1.stackSize; + if(var1.stackSize <= 0) { + return var4; + } else { + if(!var3.inventory.addItemStackToInventory(var4.copy())) { + var3.dropPlayerItem(var4); + } + + return var1; + } + } +} diff --git a/src/net/minecraft/src/ItemEnchantedBook.java b/src/net/minecraft/src/ItemEnchantedBook.java new file mode 100644 index 0000000..c7a71d7 --- /dev/null +++ b/src/net/minecraft/src/ItemEnchantedBook.java @@ -0,0 +1,104 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class ItemEnchantedBook extends Item { + public ItemEnchantedBook(int var1) { + super(var1); + } + + public boolean hasEffect(ItemStack var1) { + return true; + } + + public boolean isItemTool(ItemStack var1) { + return false; + } + + public EnumRarity getRarity(ItemStack var1) { + return this.func_92110_g(var1).tagCount() > 0 ? EnumRarity.uncommon : super.getRarity(var1); + } + + public NBTTagList func_92110_g(ItemStack var1) { + return var1.stackTagCompound != null && var1.stackTagCompound.hasKey("StoredEnchantments") ? (NBTTagList)var1.stackTagCompound.getTag("StoredEnchantments") : new NBTTagList(); + } + + public void addInformation(ItemStack var1, EntityPlayer var2, List var3, boolean var4) { + super.addInformation(var1, var2, var3, var4); + NBTTagList var5 = this.func_92110_g(var1); + if(var5 != null) { + for(int var6 = 0; var6 < var5.tagCount(); ++var6) { + short var7 = ((NBTTagCompound)var5.tagAt(var6)).getShort("id"); + short var8 = ((NBTTagCompound)var5.tagAt(var6)).getShort("lvl"); + if(Enchantment.enchantmentsList[var7] != null) { + var3.add(Enchantment.enchantmentsList[var7].getTranslatedName(var8)); + } + } + } + + } + + public void func_92115_a(ItemStack var1, EnchantmentData var2) { + NBTTagList var3 = this.func_92110_g(var1); + boolean var4 = true; + + for(int var5 = 0; var5 < var3.tagCount(); ++var5) { + NBTTagCompound var6 = (NBTTagCompound)var3.tagAt(var5); + if(var6.getShort("id") == var2.enchantmentobj.effectId) { + if(var6.getShort("lvl") < var2.enchantmentLevel) { + var6.setShort("lvl", (short)var2.enchantmentLevel); + } + + var4 = false; + break; + } + } + + if(var4) { + NBTTagCompound var7 = new NBTTagCompound(); + var7.setShort("id", (short)var2.enchantmentobj.effectId); + var7.setShort("lvl", (short)var2.enchantmentLevel); + var3.appendTag(var7); + } + + if(!var1.hasTagCompound()) { + var1.setTagCompound(new NBTTagCompound()); + } + + var1.getTagCompound().setTag("StoredEnchantments", var3); + } + + public ItemStack func_92111_a(EnchantmentData var1) { + ItemStack var2 = new ItemStack(this); + this.func_92115_a(var2, var1); + return var2; + } + + public void func_92113_a(Enchantment var1, List var2) { + for(int var3 = var1.getMinLevel(); var3 <= var1.getMaxLevel(); ++var3) { + var2.add(this.func_92111_a(new EnchantmentData(var1, var3))); + } + + } + + public ItemStack func_92109_a(Random var1) { + Enchantment var2 = Enchantment.field_92090_c[var1.nextInt(Enchantment.field_92090_c.length)]; + ItemStack var3 = new ItemStack(this.itemID, 1, 0); + int var4 = MathHelper.getRandomIntegerInRange(var1, var2.getMinLevel(), var2.getMaxLevel()); + this.func_92115_a(var3, new EnchantmentData(var2, var4)); + return var3; + } + + public WeightedRandomChestContent func_92114_b(Random var1) { + return this.func_92112_a(var1, 1, 1, 1); + } + + public WeightedRandomChestContent func_92112_a(Random var1, int var2, int var3, int var4) { + Enchantment var5 = Enchantment.field_92090_c[var1.nextInt(Enchantment.field_92090_c.length)]; + ItemStack var6 = new ItemStack(this.itemID, 1, 0); + int var7 = MathHelper.getRandomIntegerInRange(var1, var5.getMinLevel(), var5.getMaxLevel()); + this.func_92115_a(var6, new EnchantmentData(var5, var7)); + return new WeightedRandomChestContent(var6, var2, var3, var4); + } +} diff --git a/src/net/minecraft/src/ItemEnderEye.java b/src/net/minecraft/src/ItemEnderEye.java new file mode 100644 index 0000000..f081359 --- /dev/null +++ b/src/net/minecraft/src/ItemEnderEye.java @@ -0,0 +1,135 @@ +package net.minecraft.src; + +public class ItemEnderEye extends Item { + public ItemEnderEye(int var1) { + super(var1); + this.setCreativeTab(CreativeTabs.tabMisc); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + int var11 = var3.getBlockId(var4, var5, var6); + int var12 = var3.getBlockMetadata(var4, var5, var6); + if(var2.canPlayerEdit(var4, var5, var6, var7, var1) && var11 == Block.endPortalFrame.blockID && !BlockEndPortalFrame.isEnderEyeInserted(var12)) { + if(var3.isRemote) { + return true; + } else { + var3.setBlockMetadataWithNotify(var4, var5, var6, var12 + 4, 2); + --var1.stackSize; + + int var13; + for(var13 = 0; var13 < 16; ++var13) { + double var14 = (double)((float)var4 + (5.0F + itemRand.nextFloat() * 6.0F) / 16.0F); + double var16 = (double)((float)var5 + 13.0F / 16.0F); + double var18 = (double)((float)var6 + (5.0F + itemRand.nextFloat() * 6.0F) / 16.0F); + double var20 = 0.0D; + double var22 = 0.0D; + double var24 = 0.0D; + var3.spawnParticle("smoke", var14, var16, var18, var20, var22, var24); + } + + var13 = var12 & 3; + int var26 = 0; + int var15 = 0; + boolean var27 = false; + boolean var17 = true; + int var28 = Direction.rotateRight[var13]; + + int var19; + int var21; + int var23; + int var29; + int var30; + for(var19 = -2; var19 <= 2; ++var19) { + var29 = var4 + Direction.offsetX[var28] * var19; + var21 = var6 + Direction.offsetZ[var28] * var19; + var30 = var3.getBlockId(var29, var5, var21); + if(var30 == Block.endPortalFrame.blockID) { + var23 = var3.getBlockMetadata(var29, var5, var21); + if(!BlockEndPortalFrame.isEnderEyeInserted(var23)) { + var17 = false; + break; + } + + var15 = var19; + if(!var27) { + var26 = var19; + var27 = true; + } + } + } + + if(var17 && var15 == var26 + 2) { + for(var19 = var26; var19 <= var15; ++var19) { + var29 = var4 + Direction.offsetX[var28] * var19; + var21 = var6 + Direction.offsetZ[var28] * var19; + var29 += Direction.offsetX[var13] * 4; + var21 += Direction.offsetZ[var13] * 4; + var30 = var3.getBlockId(var29, var5, var21); + var23 = var3.getBlockMetadata(var29, var5, var21); + if(var30 != Block.endPortalFrame.blockID || !BlockEndPortalFrame.isEnderEyeInserted(var23)) { + var17 = false; + break; + } + } + + for(var19 = var26 - 1; var19 <= var15 + 1; var19 += 4) { + for(var29 = 1; var29 <= 3; ++var29) { + var21 = var4 + Direction.offsetX[var28] * var19; + var30 = var6 + Direction.offsetZ[var28] * var19; + var21 += Direction.offsetX[var13] * var29; + var30 += Direction.offsetZ[var13] * var29; + var23 = var3.getBlockId(var21, var5, var30); + int var31 = var3.getBlockMetadata(var21, var5, var30); + if(var23 != Block.endPortalFrame.blockID || !BlockEndPortalFrame.isEnderEyeInserted(var31)) { + var17 = false; + break; + } + } + } + + if(var17) { + for(var19 = var26; var19 <= var15; ++var19) { + for(var29 = 1; var29 <= 3; ++var29) { + var21 = var4 + Direction.offsetX[var28] * var19; + var30 = var6 + Direction.offsetZ[var28] * var19; + var21 += Direction.offsetX[var13] * var29; + var30 += Direction.offsetZ[var13] * var29; + var3.setBlock(var21, var5, var30, Block.endPortal.blockID, 0, 2); + } + } + } + } + + return true; + } + } else { + return false; + } + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + MovingObjectPosition var4 = this.getMovingObjectPositionFromPlayer(var2, var3, false); + if(var4 != null && var4.typeOfHit == EnumMovingObjectType.TILE) { + int var5 = var2.getBlockId(var4.blockX, var4.blockY, var4.blockZ); + if(var5 == Block.endPortalFrame.blockID) { + return var1; + } + } + + if(!var2.isRemote) { + ChunkPosition var7 = var2.findClosestStructure("Stronghold", (int)var3.posX, (int)var3.posY, (int)var3.posZ); + if(var7 != null) { + EntityEnderEye var6 = new EntityEnderEye(var2, var3.posX, var3.posY + 1.62D - (double)var3.yOffset, var3.posZ); + var6.moveTowards((double)var7.x, var7.y, (double)var7.z); + var2.spawnEntityInWorld(var6); + var2.playSoundAtEntity(var3, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + var2.playAuxSFXAtEntity((EntityPlayer)null, 1002, (int)var3.posX, (int)var3.posY, (int)var3.posZ, 0); + if(!var3.capabilities.isCreativeMode) { + --var1.stackSize; + } + } + } + + return var1; + } +} diff --git a/src/net/minecraft/src/ItemEnderPearl.java b/src/net/minecraft/src/ItemEnderPearl.java new file mode 100644 index 0000000..749bd8d --- /dev/null +++ b/src/net/minecraft/src/ItemEnderPearl.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class ItemEnderPearl extends Item { + public ItemEnderPearl(int var1) { + super(var1); + this.maxStackSize = 16; + this.setCreativeTab(CreativeTabs.tabMisc); + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + if(var3.capabilities.isCreativeMode) { + return var1; + } else if(var3.ridingEntity != null) { + return var1; + } else { + --var1.stackSize; + var2.playSoundAtEntity(var3, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + if(!var2.isRemote) { + var2.spawnEntityInWorld(new EntityEnderPearl(var2, var3)); + } + + return var1; + } + } +} diff --git a/src/net/minecraft/src/ItemExpBottle.java b/src/net/minecraft/src/ItemExpBottle.java new file mode 100644 index 0000000..af9c6cd --- /dev/null +++ b/src/net/minecraft/src/ItemExpBottle.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class ItemExpBottle extends Item { + public ItemExpBottle(int var1) { + super(var1); + this.setCreativeTab(CreativeTabs.tabMisc); + } + + public boolean hasEffect(ItemStack var1) { + return true; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + if(!var3.capabilities.isCreativeMode) { + --var1.stackSize; + } + + var2.playSoundAtEntity(var3, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + if(!var2.isRemote) { + var2.spawnEntityInWorld(new EntityExpBottle(var2, var3)); + } + + return var1; + } +} diff --git a/src/net/minecraft/src/ItemFireball.java b/src/net/minecraft/src/ItemFireball.java new file mode 100644 index 0000000..b1df58a --- /dev/null +++ b/src/net/minecraft/src/ItemFireball.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +public class ItemFireball extends Item { + public ItemFireball(int var1) { + super(var1); + this.setCreativeTab(CreativeTabs.tabMisc); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(var3.isRemote) { + return true; + } else { + if(var7 == 0) { + --var5; + } + + if(var7 == 1) { + ++var5; + } + + if(var7 == 2) { + --var6; + } + + if(var7 == 3) { + ++var6; + } + + if(var7 == 4) { + --var4; + } + + if(var7 == 5) { + ++var4; + } + + if(!var2.canPlayerEdit(var4, var5, var6, var7, var1)) { + return false; + } else { + int var11 = var3.getBlockId(var4, var5, var6); + if(var11 == 0) { + var3.playSoundEffect((double)var4 + 0.5D, (double)var5 + 0.5D, (double)var6 + 0.5D, "fire.ignite", 1.0F, itemRand.nextFloat() * 0.4F + 0.8F); + var3.setBlock(var4, var5, var6, Block.fire.blockID); + } + + if(!var2.capabilities.isCreativeMode) { + --var1.stackSize; + } + + return true; + } + } + } +} diff --git a/src/net/minecraft/src/ItemFirework.java b/src/net/minecraft/src/ItemFirework.java new file mode 100644 index 0000000..9e1c13b --- /dev/null +++ b/src/net/minecraft/src/ItemFirework.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class ItemFirework extends Item { + public ItemFirework(int var1) { + super(var1); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(!var3.isRemote) { + EntityFireworkRocket var11 = new EntityFireworkRocket(var3, (double)((float)var4 + var8), (double)((float)var5 + var9), (double)((float)var6 + var10), var1); + var3.spawnEntityInWorld(var11); + if(!var2.capabilities.isCreativeMode) { + --var1.stackSize; + } + + return true; + } else { + return false; + } + } + + public void addInformation(ItemStack var1, EntityPlayer var2, List var3, boolean var4) { + if(var1.hasTagCompound()) { + NBTTagCompound var5 = var1.getTagCompound().getCompoundTag("Fireworks"); + if(var5 != null) { + if(var5.hasKey("Flight")) { + var3.add(StatCollector.translateToLocal("item.fireworks.flight") + " " + var5.getByte("Flight")); + } + + NBTTagList var6 = var5.getTagList("Explosions"); + if(var6 != null && var6.tagCount() > 0) { + for(int var7 = 0; var7 < var6.tagCount(); ++var7) { + NBTTagCompound var8 = (NBTTagCompound)var6.tagAt(var7); + ArrayList var9 = new ArrayList(); + ItemFireworkCharge.func_92107_a(var8, var9); + if(var9.size() > 0) { + for(int var10 = 1; var10 < var9.size(); ++var10) { + var9.set(var10, " " + (String)var9.get(var10)); + } + + var3.addAll(var9); + } + } + } + + } + } + } +} diff --git a/src/net/minecraft/src/ItemFireworkCharge.java b/src/net/minecraft/src/ItemFireworkCharge.java new file mode 100644 index 0000000..93cfab4 --- /dev/null +++ b/src/net/minecraft/src/ItemFireworkCharge.java @@ -0,0 +1,166 @@ +package net.minecraft.src; + +import java.util.List; + +public class ItemFireworkCharge extends Item { + private Icon theIcon; + + public ItemFireworkCharge(int var1) { + super(var1); + } + + public Icon getIconFromDamageForRenderPass(int var1, int var2) { + return var2 > 0 ? this.theIcon : super.getIconFromDamageForRenderPass(var1, var2); + } + + public int getColorFromItemStack(ItemStack var1, int var2) { + if(var2 != 1) { + return super.getColorFromItemStack(var1, var2); + } else { + NBTBase var3 = func_92108_a(var1, "Colors"); + if(var3 == null) { + return 9079434; + } else { + NBTTagIntArray var4 = (NBTTagIntArray)var3; + if(var4.intArray.length == 1) { + return var4.intArray[0]; + } else { + int var5 = 0; + int var6 = 0; + int var7 = 0; + int[] var8 = var4.intArray; + int var9 = var8.length; + + for(int var10 = 0; var10 < var9; ++var10) { + int var11 = var8[var10]; + var5 += (var11 & 16711680) >> 16; + var6 += (var11 & '\uff00') >> 8; + var7 += (var11 & 255) >> 0; + } + + var5 /= var4.intArray.length; + var6 /= var4.intArray.length; + var7 /= var4.intArray.length; + return var5 << 16 | var6 << 8 | var7; + } + } + } + } + + public boolean requiresMultipleRenderPasses() { + return true; + } + + public static NBTBase func_92108_a(ItemStack var0, String var1) { + if(var0.hasTagCompound()) { + NBTTagCompound var2 = var0.getTagCompound().getCompoundTag("Explosion"); + if(var2 != null) { + return var2.getTag(var1); + } + } + + return null; + } + + public void addInformation(ItemStack var1, EntityPlayer var2, List var3, boolean var4) { + if(var1.hasTagCompound()) { + NBTTagCompound var5 = var1.getTagCompound().getCompoundTag("Explosion"); + if(var5 != null) { + func_92107_a(var5, var3); + } + } + + } + + public static void func_92107_a(NBTTagCompound var0, List var1) { + byte var2 = var0.getByte("Type"); + if(var2 >= 0 && var2 <= 4) { + var1.add(StatCollector.translateToLocal("item.fireworksCharge.type." + var2).trim()); + } else { + var1.add(StatCollector.translateToLocal("item.fireworksCharge.type").trim()); + } + + int[] var3 = var0.getIntArray("Colors"); + int var8; + int var9; + if(var3.length > 0) { + boolean var4 = true; + String var5 = ""; + int[] var6 = var3; + int var7 = var3.length; + + for(var8 = 0; var8 < var7; ++var8) { + var9 = var6[var8]; + if(!var4) { + var5 = var5 + ", "; + } + + var4 = false; + boolean var10 = false; + + for(int var11 = 0; var11 < 16; ++var11) { + if(var9 == ItemDye.dyeColors[var11]) { + var10 = true; + var5 = var5 + StatCollector.translateToLocal("item.fireworksCharge." + ItemDye.dyeColorNames[var11]); + break; + } + } + + if(!var10) { + var5 = var5 + StatCollector.translateToLocal("item.fireworksCharge.customColor"); + } + } + + var1.add(var5); + } + + int[] var13 = var0.getIntArray("FadeColors"); + boolean var15; + if(var13.length > 0) { + var15 = true; + String var14 = StatCollector.translateToLocal("item.fireworksCharge.fadeTo") + " "; + int[] var16 = var13; + var8 = var13.length; + + for(var9 = 0; var9 < var8; ++var9) { + int var18 = var16[var9]; + if(!var15) { + var14 = var14 + ", "; + } + + var15 = false; + boolean var19 = false; + + for(int var12 = 0; var12 < 16; ++var12) { + if(var18 == ItemDye.dyeColors[var12]) { + var19 = true; + var14 = var14 + StatCollector.translateToLocal("item.fireworksCharge." + ItemDye.dyeColorNames[var12]); + break; + } + } + + if(!var19) { + var14 = var14 + StatCollector.translateToLocal("item.fireworksCharge.customColor"); + } + } + + var1.add(var14); + } + + var15 = var0.getBoolean("Trail"); + if(var15) { + var1.add(StatCollector.translateToLocal("item.fireworksCharge.trail")); + } + + boolean var17 = var0.getBoolean("Flicker"); + if(var17) { + var1.add(StatCollector.translateToLocal("item.fireworksCharge.flicker")); + } + + } + + public void registerIcons(IconRegister var1) { + super.registerIcons(var1); + this.theIcon = var1.registerIcon("fireworksCharge_overlay"); + } +} diff --git a/src/net/minecraft/src/ItemFishingRod.java b/src/net/minecraft/src/ItemFishingRod.java new file mode 100644 index 0000000..df51587 --- /dev/null +++ b/src/net/minecraft/src/ItemFishingRod.java @@ -0,0 +1,46 @@ +package net.minecraft.src; + +public class ItemFishingRod extends Item { + private Icon theIcon; + + public ItemFishingRod(int var1) { + super(var1); + this.setMaxDamage(64); + this.setMaxStackSize(1); + this.setCreativeTab(CreativeTabs.tabTools); + } + + public boolean isFull3D() { + return true; + } + + public boolean shouldRotateAroundWhenRendering() { + return true; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + if(var3.fishEntity != null) { + int var4 = var3.fishEntity.catchFish(); + var1.damageItem(var4, var3); + var3.swingItem(); + } else { + var2.playSoundAtEntity(var3, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + if(!var2.isRemote) { + var2.spawnEntityInWorld(new EntityFishHook(var2, var3)); + } + + var3.swingItem(); + } + + return var1; + } + + public void registerIcons(IconRegister var1) { + super.registerIcons(var1); + this.theIcon = var1.registerIcon("fishingRod_empty"); + } + + public Icon func_94597_g() { + return this.theIcon; + } +} diff --git a/src/net/minecraft/src/ItemFlintAndSteel.java b/src/net/minecraft/src/ItemFlintAndSteel.java new file mode 100644 index 0000000..af19a5c --- /dev/null +++ b/src/net/minecraft/src/ItemFlintAndSteel.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +public class ItemFlintAndSteel extends Item { + public ItemFlintAndSteel(int var1) { + super(var1); + this.maxStackSize = 1; + this.setMaxDamage(64); + this.setCreativeTab(CreativeTabs.tabTools); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(var7 == 0) { + --var5; + } + + if(var7 == 1) { + ++var5; + } + + if(var7 == 2) { + --var6; + } + + if(var7 == 3) { + ++var6; + } + + if(var7 == 4) { + --var4; + } + + if(var7 == 5) { + ++var4; + } + + if(!var2.canPlayerEdit(var4, var5, var6, var7, var1)) { + return false; + } else { + int var11 = var3.getBlockId(var4, var5, var6); + if(var11 == 0) { + var3.playSoundEffect((double)var4 + 0.5D, (double)var5 + 0.5D, (double)var6 + 0.5D, "fire.ignite", 1.0F, itemRand.nextFloat() * 0.4F + 0.8F); + var3.setBlock(var4, var5, var6, Block.fire.blockID); + } + + var1.damageItem(1, var2); + return true; + } + } +} diff --git a/src/net/minecraft/src/ItemFood.java b/src/net/minecraft/src/ItemFood.java new file mode 100644 index 0000000..2b9a773 --- /dev/null +++ b/src/net/minecraft/src/ItemFood.java @@ -0,0 +1,82 @@ +package net.minecraft.src; + +public class ItemFood extends Item { + public final int itemUseDuration; + private final int healAmount; + private final float saturationModifier; + private final boolean isWolfsFavoriteMeat; + private boolean alwaysEdible; + private int potionId; + private int potionDuration; + private int potionAmplifier; + private float potionEffectProbability; + + public ItemFood(int var1, int var2, float var3, boolean var4) { + super(var1); + this.itemUseDuration = 32; + this.healAmount = var2; + this.isWolfsFavoriteMeat = var4; + this.saturationModifier = var3; + this.setCreativeTab(CreativeTabs.tabFood); + } + + public ItemFood(int var1, int var2, boolean var3) { + this(var1, var2, 0.6F, var3); + } + + public ItemStack onEaten(ItemStack var1, World var2, EntityPlayer var3) { + --var1.stackSize; + var3.getFoodStats().addStats(this); + var2.playSoundAtEntity(var3, "random.burp", 0.5F, var2.rand.nextFloat() * 0.1F + 0.9F); + this.onFoodEaten(var1, var2, var3); + return var1; + } + + protected void onFoodEaten(ItemStack var1, World var2, EntityPlayer var3) { + if(!var2.isRemote && this.potionId > 0 && var2.rand.nextFloat() < this.potionEffectProbability) { + var3.addPotionEffect(new PotionEffect(this.potionId, this.potionDuration * 20, this.potionAmplifier)); + } + + } + + public int getMaxItemUseDuration(ItemStack var1) { + return 32; + } + + public EnumAction getItemUseAction(ItemStack var1) { + return EnumAction.eat; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + if(var3.canEat(this.alwaysEdible)) { + var3.setItemInUse(var1, this.getMaxItemUseDuration(var1)); + } + + return var1; + } + + public int getHealAmount() { + return this.healAmount; + } + + public float getSaturationModifier() { + return this.saturationModifier; + } + + public boolean isWolfsFavoriteMeat() { + return this.isWolfsFavoriteMeat; + } + + public ItemFood setPotionEffect(int var1, int var2, int var3, float var4) { + this.potionId = var1; + this.potionDuration = var2; + this.potionAmplifier = var3; + this.potionEffectProbability = var4; + return this; + } + + public ItemFood setAlwaysEdible() { + this.alwaysEdible = true; + return this; + } +} diff --git a/src/net/minecraft/src/ItemGlassBottle.java b/src/net/minecraft/src/ItemGlassBottle.java new file mode 100644 index 0000000..2cb226e --- /dev/null +++ b/src/net/minecraft/src/ItemGlassBottle.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +public class ItemGlassBottle extends Item { + public ItemGlassBottle(int var1) { + super(var1); + this.setCreativeTab(CreativeTabs.tabBrewing); + } + + public Icon getIconFromDamage(int var1) { + return Item.potion.getIconFromDamage(0); + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + MovingObjectPosition var4 = this.getMovingObjectPositionFromPlayer(var2, var3, true); + if(var4 == null) { + return var1; + } else { + if(var4.typeOfHit == EnumMovingObjectType.TILE) { + int var5 = var4.blockX; + int var6 = var4.blockY; + int var7 = var4.blockZ; + if(!var2.canMineBlock(var3, var5, var6, var7)) { + return var1; + } + + if(!var3.canPlayerEdit(var5, var6, var7, var4.sideHit, var1)) { + return var1; + } + + if(var2.getBlockMaterial(var5, var6, var7) == Material.water) { + --var1.stackSize; + if(var1.stackSize <= 0) { + return new ItemStack(Item.potion); + } + + if(!var3.inventory.addItemStackToInventory(new ItemStack(Item.potion))) { + var3.dropPlayerItem(new ItemStack(Item.potion.itemID, 1, 0)); + } + } + } + + return var1; + } + } + + public void registerIcons(IconRegister var1) { + } +} diff --git a/src/net/minecraft/src/ItemHangingEntity.java b/src/net/minecraft/src/ItemHangingEntity.java new file mode 100644 index 0000000..668a8ff --- /dev/null +++ b/src/net/minecraft/src/ItemHangingEntity.java @@ -0,0 +1,39 @@ +package net.minecraft.src; + +public class ItemHangingEntity extends Item { + private final Class hangingEntityClass; + + public ItemHangingEntity(int var1, Class var2) { + super(var1); + this.hangingEntityClass = var2; + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(var7 == 0) { + return false; + } else if(var7 == 1) { + return false; + } else { + int var11 = Direction.facingToDirection[var7]; + EntityHanging var12 = this.createHangingEntity(var3, var4, var5, var6, var11); + if(!var2.canPlayerEdit(var4, var5, var6, var7, var1)) { + return false; + } else { + if(var12 != null && var12.onValidSurface()) { + if(!var3.isRemote) { + var3.spawnEntityInWorld(var12); + } + + --var1.stackSize; + } + + return true; + } + } + } + + private EntityHanging createHangingEntity(World var1, int var2, int var3, int var4, int var5) { + return (EntityHanging)(this.hangingEntityClass == EntityPainting.class ? new EntityPainting(var1, var2, var3, var4, var5) : (this.hangingEntityClass == EntityItemFrame.class ? new EntityItemFrame(var1, var2, var3, var4, var5) : null)); + } +} diff --git a/src/net/minecraft/src/ItemHoe.java b/src/net/minecraft/src/ItemHoe.java new file mode 100644 index 0000000..f8bc0e1 --- /dev/null +++ b/src/net/minecraft/src/ItemHoe.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +public class ItemHoe extends Item { + protected EnumToolMaterial theToolMaterial; + + public ItemHoe(int var1, EnumToolMaterial var2) { + super(var1); + this.theToolMaterial = var2; + this.maxStackSize = 1; + this.setMaxDamage(var2.getMaxUses()); + this.setCreativeTab(CreativeTabs.tabTools); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(!var2.canPlayerEdit(var4, var5, var6, var7, var1)) { + return false; + } else { + int var11 = var3.getBlockId(var4, var5, var6); + int var12 = var3.getBlockId(var4, var5 + 1, var6); + if((var7 == 0 || var12 != 0 || var11 != Block.grass.blockID) && var11 != Block.dirt.blockID) { + return false; + } else { + Block var13 = Block.tilledField; + var3.playSoundEffect((double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), var13.stepSound.getStepSound(), (var13.stepSound.getVolume() + 1.0F) / 2.0F, var13.stepSound.getPitch() * 0.8F); + if(var3.isRemote) { + return true; + } else { + var3.setBlock(var4, var5, var6, var13.blockID); + var1.damageItem(1, var2); + return true; + } + } + } + } + + public boolean isFull3D() { + return true; + } + + public String getMaterialName() { + return this.theToolMaterial.toString(); + } +} diff --git a/src/net/minecraft/src/ItemInWorldManager.java b/src/net/minecraft/src/ItemInWorldManager.java new file mode 100644 index 0000000..650b9e7 --- /dev/null +++ b/src/net/minecraft/src/ItemInWorldManager.java @@ -0,0 +1,249 @@ +package net.minecraft.src; + +public class ItemInWorldManager { + public World theWorld; + public EntityPlayerMP thisPlayerMP; + private EnumGameType gameType = EnumGameType.NOT_SET; + private boolean isDestroyingBlock; + private int initialDamage; + private int partiallyDestroyedBlockX; + private int partiallyDestroyedBlockY; + private int partiallyDestroyedBlockZ; + private int curblockDamage; + private boolean receivedFinishDiggingPacket; + private int posX; + private int posY; + private int posZ; + private int field_73093_n; + private int durabilityRemainingOnBlock = -1; + + public ItemInWorldManager(World var1) { + this.theWorld = var1; + } + + public void setGameType(EnumGameType var1) { + this.gameType = var1; + var1.configurePlayerCapabilities(this.thisPlayerMP.capabilities); + this.thisPlayerMP.sendPlayerAbilities(); + } + + public EnumGameType getGameType() { + return this.gameType; + } + + public boolean isCreative() { + return this.gameType.isCreative(); + } + + public void initializeGameType(EnumGameType var1) { + if(this.gameType == EnumGameType.NOT_SET) { + this.gameType = var1; + } + + this.setGameType(this.gameType); + } + + public void updateBlockRemoving() { + ++this.curblockDamage; + int var1; + float var4; + int var5; + if(this.receivedFinishDiggingPacket) { + var1 = this.curblockDamage - this.field_73093_n; + int var2 = this.theWorld.getBlockId(this.posX, this.posY, this.posZ); + if(var2 == 0) { + this.receivedFinishDiggingPacket = false; + } else { + Block var3 = Block.blocksList[var2]; + var4 = var3.getPlayerRelativeBlockHardness(this.thisPlayerMP, this.thisPlayerMP.worldObj, this.posX, this.posY, this.posZ) * (float)(var1 + 1); + var5 = (int)(var4 * 10.0F); + if(var5 != this.durabilityRemainingOnBlock) { + this.theWorld.destroyBlockInWorldPartially(this.thisPlayerMP.entityId, this.posX, this.posY, this.posZ, var5); + this.durabilityRemainingOnBlock = var5; + } + + if(var4 >= 1.0F) { + this.receivedFinishDiggingPacket = false; + this.tryHarvestBlock(this.posX, this.posY, this.posZ); + } + } + } else if(this.isDestroyingBlock) { + var1 = this.theWorld.getBlockId(this.partiallyDestroyedBlockX, this.partiallyDestroyedBlockY, this.partiallyDestroyedBlockZ); + Block var6 = Block.blocksList[var1]; + if(var6 == null) { + this.theWorld.destroyBlockInWorldPartially(this.thisPlayerMP.entityId, this.partiallyDestroyedBlockX, this.partiallyDestroyedBlockY, this.partiallyDestroyedBlockZ, -1); + this.durabilityRemainingOnBlock = -1; + this.isDestroyingBlock = false; + } else { + int var7 = this.curblockDamage - this.initialDamage; + var4 = var6.getPlayerRelativeBlockHardness(this.thisPlayerMP, this.thisPlayerMP.worldObj, this.partiallyDestroyedBlockX, this.partiallyDestroyedBlockY, this.partiallyDestroyedBlockZ) * (float)(var7 + 1); + var5 = (int)(var4 * 10.0F); + if(var5 != this.durabilityRemainingOnBlock) { + this.theWorld.destroyBlockInWorldPartially(this.thisPlayerMP.entityId, this.partiallyDestroyedBlockX, this.partiallyDestroyedBlockY, this.partiallyDestroyedBlockZ, var5); + this.durabilityRemainingOnBlock = var5; + } + } + } + + } + + public void onBlockClicked(int var1, int var2, int var3, int var4) { + if(!this.gameType.isAdventure() || this.thisPlayerMP.canCurrentToolHarvestBlock(var1, var2, var3)) { + if(this.isCreative()) { + if(!this.theWorld.extinguishFire((EntityPlayer)null, var1, var2, var3, var4)) { + this.tryHarvestBlock(var1, var2, var3); + } + + } else { + this.theWorld.extinguishFire((EntityPlayer)null, var1, var2, var3, var4); + this.initialDamage = this.curblockDamage; + float var5 = 1.0F; + int var6 = this.theWorld.getBlockId(var1, var2, var3); + if(var6 > 0) { + Block.blocksList[var6].onBlockClicked(this.theWorld, var1, var2, var3, this.thisPlayerMP); + var5 = Block.blocksList[var6].getPlayerRelativeBlockHardness(this.thisPlayerMP, this.thisPlayerMP.worldObj, var1, var2, var3); + } + + if(var6 > 0 && var5 >= 1.0F) { + this.tryHarvestBlock(var1, var2, var3); + } else { + this.isDestroyingBlock = true; + this.partiallyDestroyedBlockX = var1; + this.partiallyDestroyedBlockY = var2; + this.partiallyDestroyedBlockZ = var3; + int var7 = (int)(var5 * 10.0F); + this.theWorld.destroyBlockInWorldPartially(this.thisPlayerMP.entityId, var1, var2, var3, var7); + this.durabilityRemainingOnBlock = var7; + } + + } + } + } + + public void uncheckedTryHarvestBlock(int var1, int var2, int var3) { + if(var1 == this.partiallyDestroyedBlockX && var2 == this.partiallyDestroyedBlockY && var3 == this.partiallyDestroyedBlockZ) { + int var4 = this.curblockDamage - this.initialDamage; + int var5 = this.theWorld.getBlockId(var1, var2, var3); + if(var5 != 0) { + Block var6 = Block.blocksList[var5]; + float var7 = var6.getPlayerRelativeBlockHardness(this.thisPlayerMP, this.thisPlayerMP.worldObj, var1, var2, var3) * (float)(var4 + 1); + if(var7 >= 0.7F) { + this.isDestroyingBlock = false; + this.theWorld.destroyBlockInWorldPartially(this.thisPlayerMP.entityId, var1, var2, var3, -1); + this.tryHarvestBlock(var1, var2, var3); + } else if(!this.receivedFinishDiggingPacket) { + this.isDestroyingBlock = false; + this.receivedFinishDiggingPacket = true; + this.posX = var1; + this.posY = var2; + this.posZ = var3; + this.field_73093_n = this.initialDamage; + } + } + } + + } + + public void cancelDestroyingBlock(int var1, int var2, int var3) { + this.isDestroyingBlock = false; + this.theWorld.destroyBlockInWorldPartially(this.thisPlayerMP.entityId, this.partiallyDestroyedBlockX, this.partiallyDestroyedBlockY, this.partiallyDestroyedBlockZ, -1); + } + + private boolean removeBlock(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.theWorld.getBlockId(var1, var2, var3)]; + int var5 = this.theWorld.getBlockMetadata(var1, var2, var3); + if(var4 != null) { + var4.onBlockHarvested(this.theWorld, var1, var2, var3, var5, this.thisPlayerMP); + } + + boolean var6 = this.theWorld.setBlockToAir(var1, var2, var3); + if(var4 != null && var6) { + var4.onBlockDestroyedByPlayer(this.theWorld, var1, var2, var3, var5); + } + + return var6; + } + + public boolean tryHarvestBlock(int var1, int var2, int var3) { + if(this.gameType.isAdventure() && !this.thisPlayerMP.canCurrentToolHarvestBlock(var1, var2, var3)) { + return false; + } else { + int var4 = this.theWorld.getBlockId(var1, var2, var3); + int var5 = this.theWorld.getBlockMetadata(var1, var2, var3); + this.theWorld.playAuxSFXAtEntity(this.thisPlayerMP, 2001, var1, var2, var3, var4 + (this.theWorld.getBlockMetadata(var1, var2, var3) << 12)); + boolean var6 = this.removeBlock(var1, var2, var3); + if(this.isCreative()) { + this.thisPlayerMP.playerNetServerHandler.sendPacketToPlayer(new Packet53BlockChange(var1, var2, var3, this.theWorld)); + } else { + ItemStack var7 = this.thisPlayerMP.getCurrentEquippedItem(); + boolean var8 = this.thisPlayerMP.canHarvestBlock(Block.blocksList[var4]); + if(var7 != null) { + var7.onBlockDestroyed(this.theWorld, var4, var1, var2, var3, this.thisPlayerMP); + if(var7.stackSize == 0) { + this.thisPlayerMP.destroyCurrentEquippedItem(); + } + } + + if(var6 && var8) { + Block.blocksList[var4].harvestBlock(this.theWorld, this.thisPlayerMP, var1, var2, var3, var5); + } + } + + return var6; + } + } + + public boolean tryUseItem(EntityPlayer var1, World var2, ItemStack var3) { + int var4 = var3.stackSize; + int var5 = var3.getItemDamage(); + ItemStack var6 = var3.useItemRightClick(var2, var1); + if(var6 != var3 || var6 != null && (var6.stackSize != var4 || var6.getMaxItemUseDuration() > 0 || var6.getItemDamage() != var5)) { + var1.inventory.mainInventory[var1.inventory.currentItem] = var6; + if(this.isCreative()) { + var6.stackSize = var4; + if(var6.isItemStackDamageable()) { + var6.setItemDamage(var5); + } + } + + if(var6.stackSize == 0) { + var1.inventory.mainInventory[var1.inventory.currentItem] = null; + } + + if(!var1.isUsingItem()) { + ((EntityPlayerMP)var1).sendContainerToPlayer(var1.inventoryContainer); + } + + return true; + } else { + return false; + } + } + + public boolean activateBlockOrUseItem(EntityPlayer var1, World var2, ItemStack var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + int var11; + if(!var1.isSneaking() || var1.getHeldItem() == null) { + var11 = var2.getBlockId(var4, var5, var6); + if(var11 > 0 && Block.blocksList[var11].onBlockActivated(var2, var4, var5, var6, var1, var7, var8, var9, var10)) { + return true; + } + } + + if(var3 == null) { + return false; + } else if(this.isCreative()) { + var11 = var3.getItemDamage(); + int var12 = var3.stackSize; + boolean var13 = var3.tryPlaceItemIntoWorld(var1, var2, var4, var5, var6, var7, var8, var9, var10); + var3.setItemDamage(var11); + var3.stackSize = var12; + return var13; + } else { + return var3.tryPlaceItemIntoWorld(var1, var2, var4, var5, var6, var7, var8, var9, var10); + } + } + + public void setWorld(WorldServer var1) { + this.theWorld = var1; + } +} diff --git a/src/net/minecraft/src/ItemLeaves.java b/src/net/minecraft/src/ItemLeaves.java new file mode 100644 index 0000000..347700c --- /dev/null +++ b/src/net/minecraft/src/ItemLeaves.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +public class ItemLeaves extends ItemBlock { + public ItemLeaves(int var1) { + super(var1); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + public int getMetadata(int var1) { + return var1 | 4; + } + + public Icon getIconFromDamage(int var1) { + return Block.leaves.getIcon(0, var1); + } + + public int getColorFromItemStack(ItemStack var1, int var2) { + int var3 = var1.getItemDamage(); + return (var3 & 1) == 1 ? ColorizerFoliage.getFoliageColorPine() : ((var3 & 2) == 2 ? ColorizerFoliage.getFoliageColorBirch() : ColorizerFoliage.getFoliageColorBasic()); + } + + public String getUnlocalizedName(ItemStack var1) { + int var2 = var1.getItemDamage(); + if(var2 < 0 || var2 >= BlockLeaves.LEAF_TYPES.length) { + var2 = 0; + } + + return super.getUnlocalizedName() + "." + BlockLeaves.LEAF_TYPES[var2]; + } +} diff --git a/src/net/minecraft/src/ItemLilyPad.java b/src/net/minecraft/src/ItemLilyPad.java new file mode 100644 index 0000000..b941b60 --- /dev/null +++ b/src/net/minecraft/src/ItemLilyPad.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +public class ItemLilyPad extends ItemColored { + public ItemLilyPad(int var1) { + super(var1, false); + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + MovingObjectPosition var4 = this.getMovingObjectPositionFromPlayer(var2, var3, true); + if(var4 == null) { + return var1; + } else { + if(var4.typeOfHit == EnumMovingObjectType.TILE) { + int var5 = var4.blockX; + int var6 = var4.blockY; + int var7 = var4.blockZ; + if(!var2.canMineBlock(var3, var5, var6, var7)) { + return var1; + } + + if(!var3.canPlayerEdit(var5, var6, var7, var4.sideHit, var1)) { + return var1; + } + + if(var2.getBlockMaterial(var5, var6, var7) == Material.water && var2.getBlockMetadata(var5, var6, var7) == 0 && var2.isAirBlock(var5, var6 + 1, var7)) { + var2.setBlock(var5, var6 + 1, var7, Block.waterlily.blockID); + if(!var3.capabilities.isCreativeMode) { + --var1.stackSize; + } + } + } + + return var1; + } + } + + public int getColorFromItemStack(ItemStack var1, int var2) { + return Block.waterlily.getRenderColor(var1.getItemDamage()); + } +} diff --git a/src/net/minecraft/src/ItemMap.java b/src/net/minecraft/src/ItemMap.java new file mode 100644 index 0000000..1e70d8f --- /dev/null +++ b/src/net/minecraft/src/ItemMap.java @@ -0,0 +1,255 @@ +package net.minecraft.src; + +import java.util.List; + +public class ItemMap extends ItemMapBase { + protected ItemMap(int var1) { + super(var1); + this.setHasSubtypes(true); + } + + public static MapData getMPMapData(short var0, World var1) { + String var2 = "map_" + var0; + MapData var3 = (MapData)var1.loadItemData(MapData.class, var2); + if(var3 == null) { + var3 = new MapData(var2); + var1.setItemData(var2, var3); + } + + return var3; + } + + public MapData getMapData(ItemStack var1, World var2) { + String var3 = "map_" + var1.getItemDamage(); + MapData var4 = (MapData)var2.loadItemData(MapData.class, var3); + if(var4 == null && !var2.isRemote) { + var1.setItemDamage(var2.getUniqueDataId("map")); + var3 = "map_" + var1.getItemDamage(); + var4 = new MapData(var3); + var4.scale = 3; + int var5 = 128 * (1 << var4.scale); + var4.xCenter = Math.round((float)var2.getWorldInfo().getSpawnX() / (float)var5) * var5; + var4.zCenter = Math.round((float)(var2.getWorldInfo().getSpawnZ() / var5)) * var5; + var4.dimension = (byte)var2.provider.dimensionId; + var4.markDirty(); + var2.setItemData(var3, var4); + } + + return var4; + } + + public void updateMapData(World var1, Entity var2, MapData var3) { + if(var1.provider.dimensionId == var3.dimension && var2 instanceof EntityPlayer) { + short var4 = 128; + short var5 = 128; + int var6 = 1 << var3.scale; + int var7 = var3.xCenter; + int var8 = var3.zCenter; + int var9 = MathHelper.floor_double(var2.posX - (double)var7) / var6 + var4 / 2; + int var10 = MathHelper.floor_double(var2.posZ - (double)var8) / var6 + var5 / 2; + int var11 = 128 / var6; + if(var1.provider.hasNoSky) { + var11 /= 2; + } + + MapInfo var12 = var3.func_82568_a((EntityPlayer)var2); + ++var12.field_82569_d; + + for(int var13 = var9 - var11 + 1; var13 < var9 + var11; ++var13) { + if((var13 & 15) == (var12.field_82569_d & 15)) { + int var14 = 255; + int var15 = 0; + double var16 = 0.0D; + + for(int var18 = var10 - var11 - 1; var18 < var10 + var11; ++var18) { + if(var13 >= 0 && var18 >= -1 && var13 < var4 && var18 < var5) { + int var19 = var13 - var9; + int var20 = var18 - var10; + boolean var21 = var19 * var19 + var20 * var20 > (var11 - 2) * (var11 - 2); + int var22 = (var7 / var6 + var13 - var4 / 2) * var6; + int var23 = (var8 / var6 + var18 - var5 / 2) * var6; + int[] var24 = new int[256]; + Chunk var25 = var1.getChunkFromBlockCoords(var22, var23); + if(!var25.isEmpty()) { + int var26 = var22 & 15; + int var27 = var23 & 15; + int var28 = 0; + double var29 = 0.0D; + int var31; + int var32; + int var33; + int var36; + if(var1.provider.hasNoSky) { + var31 = var22 + var23 * 231871; + var31 = var31 * var31 * 31287121 + var31 * 11; + if((var31 >> 20 & 1) == 0) { + var24[Block.dirt.blockID] += 10; + } else { + var24[Block.stone.blockID] += 10; + } + + var29 = 100.0D; + } else { + for(var31 = 0; var31 < var6; ++var31) { + for(var32 = 0; var32 < var6; ++var32) { + var33 = var25.getHeightValue(var31 + var26, var32 + var27) + 1; + int var34 = 0; + if(var33 > 1) { + boolean var35; + do { + var35 = true; + var34 = var25.getBlockID(var31 + var26, var33 - 1, var32 + var27); + if(var34 == 0) { + var35 = false; + } else if(var33 > 0 && var34 > 0 && Block.blocksList[var34].blockMaterial.materialMapColor == MapColor.airColor) { + var35 = false; + } + + if(!var35) { + --var33; + if(var33 <= 0) { + break; + } + + var34 = var25.getBlockID(var31 + var26, var33 - 1, var32 + var27); + } + } while(var33 > 0 && !var35); + + if(var33 > 0 && var34 != 0 && Block.blocksList[var34].blockMaterial.isLiquid()) { + var36 = var33 - 1; + boolean var37 = false; + + int var41; + do { + var41 = var25.getBlockID(var31 + var26, var36--, var32 + var27); + ++var28; + } while(var36 > 0 && var41 != 0 && Block.blocksList[var41].blockMaterial.isLiquid()); + } + } + + var29 += (double)var33 / (double)(var6 * var6); + ++var24[var34]; + } + } + } + + var28 /= var6 * var6; + var31 = 0; + var32 = 0; + + for(var33 = 0; var33 < 256; ++var33) { + if(var24[var33] > var31) { + var32 = var33; + var31 = var24[var33]; + } + } + + double var39 = (var29 - var16) * 4.0D / (double)(var6 + 4) + ((double)(var13 + var18 & 1) - 0.5D) * 0.4D; + byte var40 = 1; + if(var39 > 0.6D) { + var40 = 2; + } + + if(var39 < -0.6D) { + var40 = 0; + } + + var36 = 0; + if(var32 > 0) { + MapColor var42 = Block.blocksList[var32].blockMaterial.materialMapColor; + if(var42 == MapColor.waterColor) { + var39 = (double)var28 * 0.1D + (double)(var13 + var18 & 1) * 0.2D; + var40 = 1; + if(var39 < 0.5D) { + var40 = 2; + } + + if(var39 > 0.9D) { + var40 = 0; + } + } + + var36 = var42.colorIndex; + } + + var16 = var29; + if(var18 >= 0 && var19 * var19 + var20 * var20 < var11 * var11 && (!var21 || (var13 + var18 & 1) != 0)) { + byte var43 = var3.colors[var13 + var18 * var4]; + byte var38 = (byte)(var36 * 4 + var40); + if(var43 != var38) { + if(var14 > var18) { + var14 = var18; + } + + if(var15 < var18) { + var15 = var18; + } + + var3.colors[var13 + var18 * var4] = var38; + } + } + } + } + } + + if(var14 <= var15) { + var3.setColumnDirty(var13, var14, var15); + } + } + } + + } + } + + public void onUpdate(ItemStack var1, World var2, Entity var3, int var4, boolean var5) { + if(!var2.isRemote) { + MapData var6 = this.getMapData(var1, var2); + if(var3 instanceof EntityPlayer) { + EntityPlayer var7 = (EntityPlayer)var3; + var6.updateVisiblePlayers(var7, var1); + } + + if(var5) { + this.updateMapData(var2, var3, var6); + } + + } + } + + public Packet createMapDataPacket(ItemStack var1, World var2, EntityPlayer var3) { + byte[] var4 = this.getMapData(var1, var2).getUpdatePacketData(var1, var2, var3); + return var4 == null ? null : new Packet131MapData((short)Item.map.itemID, (short)var1.getItemDamage(), var4); + } + + public void onCreated(ItemStack var1, World var2, EntityPlayer var3) { + if(var1.hasTagCompound() && var1.getTagCompound().getBoolean("map_is_scaling")) { + MapData var4 = Item.map.getMapData(var1, var2); + var1.setItemDamage(var2.getUniqueDataId("map")); + MapData var5 = new MapData("map_" + var1.getItemDamage()); + var5.scale = (byte)(var4.scale + 1); + if(var5.scale > 4) { + var5.scale = 4; + } + + var5.xCenter = var4.xCenter; + var5.zCenter = var4.zCenter; + var5.dimension = var4.dimension; + var5.markDirty(); + var2.setItemData("map_" + var1.getItemDamage(), var5); + } + + } + + public void addInformation(ItemStack var1, EntityPlayer var2, List var3, boolean var4) { + MapData var5 = this.getMapData(var1, var2.worldObj); + if(var4) { + if(var5 == null) { + var3.add("Unknown map"); + } else { + var3.add("Scaling at 1:" + (1 << var5.scale)); + var3.add("(Level " + var5.scale + "/" + 4 + ")"); + } + } + + } +} diff --git a/src/net/minecraft/src/ItemMapBase.java b/src/net/minecraft/src/ItemMapBase.java new file mode 100644 index 0000000..2986ec6 --- /dev/null +++ b/src/net/minecraft/src/ItemMapBase.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class ItemMapBase extends Item { + protected ItemMapBase(int var1) { + super(var1); + } + + public boolean isMap() { + return true; + } + + public Packet createMapDataPacket(ItemStack var1, World var2, EntityPlayer var3) { + return null; + } +} diff --git a/src/net/minecraft/src/ItemMinecart.java b/src/net/minecraft/src/ItemMinecart.java new file mode 100644 index 0000000..52db811 --- /dev/null +++ b/src/net/minecraft/src/ItemMinecart.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +public class ItemMinecart extends Item { + private static final IBehaviorDispenseItem dispenserMinecartBehavior = new BehaviorDispenseMinecart(); + public int minecartType; + + public ItemMinecart(int var1, int var2) { + super(var1); + this.maxStackSize = 1; + this.minecartType = var2; + this.setCreativeTab(CreativeTabs.tabTransport); + BlockDispenser.dispenseBehaviorRegistry.putObject(this, dispenserMinecartBehavior); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + int var11 = var3.getBlockId(var4, var5, var6); + if(BlockRailBase.isRailBlock(var11)) { + if(!var3.isRemote) { + EntityMinecart var12 = EntityMinecart.createMinecart(var3, (double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), this.minecartType); + if(var1.hasDisplayName()) { + var12.func_96094_a(var1.getDisplayName()); + } + + var3.spawnEntityInWorld(var12); + } + + --var1.stackSize; + return true; + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/ItemMonsterPlacer.java b/src/net/minecraft/src/ItemMonsterPlacer.java new file mode 100644 index 0000000..4b7fe57 --- /dev/null +++ b/src/net/minecraft/src/ItemMonsterPlacer.java @@ -0,0 +1,103 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class ItemMonsterPlacer extends Item { + private Icon theIcon; + + public ItemMonsterPlacer(int var1) { + super(var1); + this.setHasSubtypes(true); + this.setCreativeTab(CreativeTabs.tabMisc); + } + + public String getItemDisplayName(ItemStack var1) { + String var2 = ("" + StatCollector.translateToLocal(this.getUnlocalizedName() + ".name")).trim(); + String var3 = EntityList.getStringFromID(var1.getItemDamage()); + if(var3 != null) { + var2 = var2 + " " + StatCollector.translateToLocal("entity." + var3 + ".name"); + } + + return var2; + } + + public int getColorFromItemStack(ItemStack var1, int var2) { + EntityEggInfo var3 = (EntityEggInfo)EntityList.entityEggs.get(Integer.valueOf(var1.getItemDamage())); + return var3 != null ? (var2 == 0 ? var3.primaryColor : var3.secondaryColor) : 16777215; + } + + public boolean requiresMultipleRenderPasses() { + return true; + } + + public Icon getIconFromDamageForRenderPass(int var1, int var2) { + return var2 > 0 ? this.theIcon : super.getIconFromDamageForRenderPass(var1, var2); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(var3.isRemote) { + return true; + } else { + int var11 = var3.getBlockId(var4, var5, var6); + var4 += Facing.offsetsXForSide[var7]; + var5 += Facing.offsetsYForSide[var7]; + var6 += Facing.offsetsZForSide[var7]; + double var12 = 0.0D; + if(var7 == 1 && Block.blocksList[var11] != null && Block.blocksList[var11].getRenderType() == 11) { + var12 = 0.5D; + } + + Entity var14 = spawnCreature(var3, var1.getItemDamage(), (double)var4 + 0.5D, (double)var5 + var12, (double)var6 + 0.5D); + if(var14 != null) { + if(var14 instanceof EntityLiving && var1.hasDisplayName()) { + ((EntityLiving)var14).func_94058_c(var1.getDisplayName()); + } + + if(!var2.capabilities.isCreativeMode) { + --var1.stackSize; + } + } + + return true; + } + } + + public static Entity spawnCreature(World var0, int var1, double var2, double var4, double var6) { + if(!EntityList.entityEggs.containsKey(Integer.valueOf(var1))) { + return null; + } else { + Entity var8 = null; + + for(int var9 = 0; var9 < 1; ++var9) { + var8 = EntityList.createEntityByID(var1, var0); + if(var8 != null && var8 instanceof EntityLiving) { + EntityLiving var10 = (EntityLiving)var8; + var8.setLocationAndAngles(var2, var4, var6, MathHelper.wrapAngleTo180_float(var0.rand.nextFloat() * 360.0F), 0.0F); + var10.rotationYawHead = var10.rotationYaw; + var10.renderYawOffset = var10.rotationYaw; + var10.initCreature(); + var0.spawnEntityInWorld(var8); + var10.playLivingSound(); + } + } + + return var8; + } + } + + public void getSubItems(int var1, CreativeTabs var2, List var3) { + Iterator var4 = EntityList.entityEggs.values().iterator(); + + while(var4.hasNext()) { + EntityEggInfo var5 = (EntityEggInfo)var4.next(); + var3.add(new ItemStack(var1, 1, var5.spawnedID)); + } + + } + + public void registerIcons(IconRegister var1) { + super.registerIcons(var1); + this.theIcon = var1.registerIcon("monsterPlacer_overlay"); + } +} diff --git a/src/net/minecraft/src/ItemMultiTextureTile.java b/src/net/minecraft/src/ItemMultiTextureTile.java new file mode 100644 index 0000000..3fe9557 --- /dev/null +++ b/src/net/minecraft/src/ItemMultiTextureTile.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +public class ItemMultiTextureTile extends ItemBlock { + private final Block theBlock; + private final String[] field_82804_b; + + public ItemMultiTextureTile(int var1, Block var2, String[] var3) { + super(var1); + this.theBlock = var2; + this.field_82804_b = var3; + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + public Icon getIconFromDamage(int var1) { + return this.theBlock.getIcon(2, var1); + } + + public int getMetadata(int var1) { + return var1; + } + + public String getUnlocalizedName(ItemStack var1) { + int var2 = var1.getItemDamage(); + if(var2 < 0 || var2 >= this.field_82804_b.length) { + var2 = 0; + } + + return super.getUnlocalizedName() + "." + this.field_82804_b[var2]; + } +} diff --git a/src/net/minecraft/src/ItemPickaxe.java b/src/net/minecraft/src/ItemPickaxe.java new file mode 100644 index 0000000..b723799 --- /dev/null +++ b/src/net/minecraft/src/ItemPickaxe.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class ItemPickaxe extends ItemTool { + private static Block[] blocksEffectiveAgainst = new Block[]{Block.cobblestone, Block.stoneDoubleSlab, Block.stoneSingleSlab, Block.stone, Block.sandStone, Block.cobblestoneMossy, Block.oreIron, Block.blockIron, Block.oreCoal, Block.blockGold, Block.oreGold, Block.oreDiamond, Block.blockDiamond, Block.ice, Block.netherrack, Block.oreLapis, Block.blockLapis, Block.oreRedstone, Block.oreRedstoneGlowing, Block.rail, Block.railDetector, Block.railPowered, Block.railActivator}; + + protected ItemPickaxe(int var1, EnumToolMaterial var2) { + super(var1, 2, var2, blocksEffectiveAgainst); + } + + public boolean canHarvestBlock(Block var1) { + return var1 == Block.obsidian ? this.toolMaterial.getHarvestLevel() == 3 : (var1 != Block.blockDiamond && var1 != Block.oreDiamond ? (var1 != Block.oreEmerald && var1 != Block.blockEmerald ? (var1 != Block.blockGold && var1 != Block.oreGold ? (var1 != Block.blockIron && var1 != Block.oreIron ? (var1 != Block.blockLapis && var1 != Block.oreLapis ? (var1 != Block.oreRedstone && var1 != Block.oreRedstoneGlowing ? (var1.blockMaterial == Material.rock ? true : (var1.blockMaterial == Material.iron ? true : var1.blockMaterial == Material.anvil)) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 1) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2) : this.toolMaterial.getHarvestLevel() >= 2); + } + + public float getStrVsBlock(ItemStack var1, Block var2) { + return var2 == null || var2.blockMaterial != Material.iron && var2.blockMaterial != Material.anvil && var2.blockMaterial != Material.rock ? super.getStrVsBlock(var1, var2) : this.efficiencyOnProperMaterial; + } +} diff --git a/src/net/minecraft/src/ItemPiston.java b/src/net/minecraft/src/ItemPiston.java new file mode 100644 index 0000000..c092e62 --- /dev/null +++ b/src/net/minecraft/src/ItemPiston.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class ItemPiston extends ItemBlock { + public ItemPiston(int var1) { + super(var1); + } + + public int getMetadata(int var1) { + return 7; + } +} diff --git a/src/net/minecraft/src/ItemPotion.java b/src/net/minecraft/src/ItemPotion.java new file mode 100644 index 0000000..ad52d42 --- /dev/null +++ b/src/net/minecraft/src/ItemPotion.java @@ -0,0 +1,267 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +public class ItemPotion extends Item { + private HashMap effectCache = new HashMap(); + private static final Map field_77835_b = new LinkedHashMap(); + private Icon field_94591_c; + private Icon field_94590_d; + private Icon field_94592_ct; + + public ItemPotion(int var1) { + super(var1); + this.setMaxStackSize(1); + this.setHasSubtypes(true); + this.setMaxDamage(0); + this.setCreativeTab(CreativeTabs.tabBrewing); + } + + public List getEffects(ItemStack var1) { + if(var1.hasTagCompound() && var1.getTagCompound().hasKey("CustomPotionEffects")) { + ArrayList var6 = new ArrayList(); + NBTTagList var3 = var1.getTagCompound().getTagList("CustomPotionEffects"); + + for(int var4 = 0; var4 < var3.tagCount(); ++var4) { + NBTTagCompound var5 = (NBTTagCompound)var3.tagAt(var4); + var6.add(PotionEffect.readCustomPotionEffectFromNBT(var5)); + } + + return var6; + } else { + List var2 = (List)this.effectCache.get(Integer.valueOf(var1.getItemDamage())); + if(var2 == null) { + var2 = PotionHelper.getPotionEffects(var1.getItemDamage(), false); + this.effectCache.put(Integer.valueOf(var1.getItemDamage()), var2); + } + + return var2; + } + } + + public List getEffects(int var1) { + List var2 = (List)this.effectCache.get(Integer.valueOf(var1)); + if(var2 == null) { + var2 = PotionHelper.getPotionEffects(var1, false); + this.effectCache.put(Integer.valueOf(var1), var2); + } + + return var2; + } + + public ItemStack onEaten(ItemStack var1, World var2, EntityPlayer var3) { + if(!var3.capabilities.isCreativeMode) { + --var1.stackSize; + } + + if(!var2.isRemote) { + List var4 = this.getEffects(var1); + if(var4 != null) { + Iterator var5 = var4.iterator(); + + while(var5.hasNext()) { + PotionEffect var6 = (PotionEffect)var5.next(); + var3.addPotionEffect(new PotionEffect(var6)); + } + } + } + + if(!var3.capabilities.isCreativeMode) { + if(var1.stackSize <= 0) { + return new ItemStack(Item.glassBottle); + } + + var3.inventory.addItemStackToInventory(new ItemStack(Item.glassBottle)); + } + + return var1; + } + + public int getMaxItemUseDuration(ItemStack var1) { + return 32; + } + + public EnumAction getItemUseAction(ItemStack var1) { + return EnumAction.drink; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + if(isSplash(var1.getItemDamage())) { + if(!var3.capabilities.isCreativeMode) { + --var1.stackSize; + } + + var2.playSoundAtEntity(var3, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + if(!var2.isRemote) { + var2.spawnEntityInWorld(new EntityPotion(var2, var3, var1)); + } + + return var1; + } else { + var3.setItemInUse(var1, this.getMaxItemUseDuration(var1)); + return var1; + } + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + return false; + } + + public Icon getIconFromDamage(int var1) { + return isSplash(var1) ? this.field_94591_c : this.field_94590_d; + } + + public Icon getIconFromDamageForRenderPass(int var1, int var2) { + return var2 == 0 ? this.field_94592_ct : super.getIconFromDamageForRenderPass(var1, var2); + } + + public static boolean isSplash(int var0) { + return (var0 & 16384) != 0; + } + + public int getColorFromDamage(int var1) { + return PotionHelper.func_77915_a(var1, false); + } + + public int getColorFromItemStack(ItemStack var1, int var2) { + return var2 > 0 ? 16777215 : this.getColorFromDamage(var1.getItemDamage()); + } + + public boolean requiresMultipleRenderPasses() { + return true; + } + + public boolean isEffectInstant(int var1) { + List var2 = this.getEffects(var1); + if(var2 != null && !var2.isEmpty()) { + Iterator var3 = var2.iterator(); + + PotionEffect var4; + do { + if(!var3.hasNext()) { + return false; + } + + var4 = (PotionEffect)var3.next(); + } while(!Potion.potionTypes[var4.getPotionID()].isInstant()); + + return true; + } else { + return false; + } + } + + public String getItemDisplayName(ItemStack var1) { + if(var1.getItemDamage() == 0) { + return StatCollector.translateToLocal("item.emptyPotion.name").trim(); + } else { + String var2 = ""; + if(isSplash(var1.getItemDamage())) { + var2 = StatCollector.translateToLocal("potion.prefix.grenade").trim() + " "; + } + + List var3 = Item.potion.getEffects(var1); + String var4; + if(var3 != null && !var3.isEmpty()) { + var4 = ((PotionEffect)var3.get(0)).getEffectName(); + var4 = var4 + ".postfix"; + return var2 + StatCollector.translateToLocal(var4).trim(); + } else { + var4 = PotionHelper.func_77905_c(var1.getItemDamage()); + return StatCollector.translateToLocal(var4).trim() + " " + super.getItemDisplayName(var1); + } + } + } + + public void addInformation(ItemStack var1, EntityPlayer var2, List var3, boolean var4) { + if(var1.getItemDamage() != 0) { + List var5 = Item.potion.getEffects(var1); + if(var5 != null && !var5.isEmpty()) { + Iterator var9 = var5.iterator(); + + while(var9.hasNext()) { + PotionEffect var7 = (PotionEffect)var9.next(); + String var8 = StatCollector.translateToLocal(var7.getEffectName()).trim(); + if(var7.getAmplifier() > 0) { + var8 = var8 + " " + StatCollector.translateToLocal("potion.potency." + var7.getAmplifier()).trim(); + } + + if(var7.getDuration() > 20) { + var8 = var8 + " (" + Potion.getDurationString(var7) + ")"; + } + + if(Potion.potionTypes[var7.getPotionID()].isBadEffect()) { + var3.add(EnumChatFormatting.RED + var8); + } else { + var3.add(EnumChatFormatting.GRAY + var8); + } + } + } else { + String var6 = StatCollector.translateToLocal("potion.empty").trim(); + var3.add(EnumChatFormatting.GRAY + var6); + } + + } + } + + public boolean hasEffect(ItemStack var1) { + List var2 = this.getEffects(var1); + return var2 != null && !var2.isEmpty(); + } + + public void getSubItems(int var1, CreativeTabs var2, List var3) { + super.getSubItems(var1, var2, var3); + int var5; + if(field_77835_b.isEmpty()) { + for(int var4 = 0; var4 <= 15; ++var4) { + for(var5 = 0; var5 <= 1; ++var5) { + int var6; + if(var5 == 0) { + var6 = var4 | 8192; + } else { + var6 = var4 | 16384; + } + + for(int var7 = 0; var7 <= 2; ++var7) { + int var8 = var6; + if(var7 != 0) { + if(var7 == 1) { + var8 = var6 | 32; + } else if(var7 == 2) { + var8 = var6 | 64; + } + } + + List var9 = PotionHelper.getPotionEffects(var8, false); + if(var9 != null && !var9.isEmpty()) { + field_77835_b.put(var9, Integer.valueOf(var8)); + } + } + } + } + } + + Iterator var10 = field_77835_b.values().iterator(); + + while(var10.hasNext()) { + var5 = ((Integer)var10.next()).intValue(); + var3.add(new ItemStack(var1, 1, var5)); + } + + } + + public void registerIcons(IconRegister var1) { + this.field_94590_d = var1.registerIcon("potion"); + this.field_94591_c = var1.registerIcon("potion_splash"); + this.field_94592_ct = var1.registerIcon("potion_contents"); + } + + public static Icon func_94589_d(String var0) { + return var0 == "potion" ? Item.potion.field_94590_d : (var0 == "potion_splash" ? Item.potion.field_94591_c : (var0 == "potion_contents" ? Item.potion.field_94592_ct : null)); + } +} diff --git a/src/net/minecraft/src/ItemRecord.java b/src/net/minecraft/src/ItemRecord.java new file mode 100644 index 0000000..14c0737 --- /dev/null +++ b/src/net/minecraft/src/ItemRecord.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class ItemRecord extends Item { + private static final Map records = new HashMap(); + public final String recordName; + + protected ItemRecord(int var1, String var2) { + super(var1); + this.recordName = var2; + this.maxStackSize = 1; + this.setCreativeTab(CreativeTabs.tabMisc); + records.put(var2, this); + } + + public Icon getIconFromDamage(int var1) { + return this.itemIcon; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(var3.getBlockId(var4, var5, var6) == Block.jukebox.blockID && var3.getBlockMetadata(var4, var5, var6) == 0) { + if(var3.isRemote) { + return true; + } else { + ((BlockJukeBox)Block.jukebox).insertRecord(var3, var4, var5, var6, var1); + var3.playAuxSFXAtEntity((EntityPlayer)null, 1005, var4, var5, var6, this.itemID); + --var1.stackSize; + return true; + } + } else { + return false; + } + } + + public void addInformation(ItemStack var1, EntityPlayer var2, List var3, boolean var4) { + var3.add(this.getRecordTitle()); + } + + public String getRecordTitle() { + return "C418 - " + this.recordName; + } + + public EnumRarity getRarity(ItemStack var1) { + return EnumRarity.rare; + } + + public static ItemRecord getRecord(String var0) { + return (ItemRecord)records.get(var0); + } + + public void registerIcons(IconRegister var1) { + this.itemIcon = var1.registerIcon("record_" + this.recordName); + } +} diff --git a/src/net/minecraft/src/ItemRedstone.java b/src/net/minecraft/src/ItemRedstone.java new file mode 100644 index 0000000..b4c2627 --- /dev/null +++ b/src/net/minecraft/src/ItemRedstone.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +public class ItemRedstone extends Item { + public ItemRedstone(int var1) { + super(var1); + this.setCreativeTab(CreativeTabs.tabRedstone); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(var3.getBlockId(var4, var5, var6) != Block.snow.blockID) { + if(var7 == 0) { + --var5; + } + + if(var7 == 1) { + ++var5; + } + + if(var7 == 2) { + --var6; + } + + if(var7 == 3) { + ++var6; + } + + if(var7 == 4) { + --var4; + } + + if(var7 == 5) { + ++var4; + } + + if(!var3.isAirBlock(var4, var5, var6)) { + return false; + } + } + + if(!var2.canPlayerEdit(var4, var5, var6, var7, var1)) { + return false; + } else { + if(Block.redstoneWire.canPlaceBlockAt(var3, var4, var5, var6)) { + --var1.stackSize; + var3.setBlock(var4, var5, var6, Block.redstoneWire.blockID); + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ItemReed.java b/src/net/minecraft/src/ItemReed.java new file mode 100644 index 0000000..96f5628 --- /dev/null +++ b/src/net/minecraft/src/ItemReed.java @@ -0,0 +1,63 @@ +package net.minecraft.src; + +public class ItemReed extends Item { + private int spawnID; + + public ItemReed(int var1, Block var2) { + super(var1); + this.spawnID = var2.blockID; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + int var11 = var3.getBlockId(var4, var5, var6); + if(var11 == Block.snow.blockID && (var3.getBlockMetadata(var4, var5, var6) & 7) < 1) { + var7 = 1; + } else if(var11 != Block.vine.blockID && var11 != Block.tallGrass.blockID && var11 != Block.deadBush.blockID) { + if(var7 == 0) { + --var5; + } + + if(var7 == 1) { + ++var5; + } + + if(var7 == 2) { + --var6; + } + + if(var7 == 3) { + ++var6; + } + + if(var7 == 4) { + --var4; + } + + if(var7 == 5) { + ++var4; + } + } + + if(!var2.canPlayerEdit(var4, var5, var6, var7, var1)) { + return false; + } else if(var1.stackSize == 0) { + return false; + } else { + if(var3.canPlaceEntityOnSide(this.spawnID, var4, var5, var6, false, var7, (Entity)null, var1)) { + Block var12 = Block.blocksList[this.spawnID]; + int var13 = var12.onBlockPlaced(var3, var4, var5, var6, var7, var8, var9, var10, 0); + if(var3.setBlock(var4, var5, var6, this.spawnID, var13, 3)) { + if(var3.getBlockId(var4, var5, var6) == this.spawnID) { + Block.blocksList[this.spawnID].onBlockPlacedBy(var3, var4, var5, var6, var2, var1); + Block.blocksList[this.spawnID].onPostBlockPlaced(var3, var4, var5, var6, var13); + } + + var3.playSoundEffect((double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), var12.stepSound.getPlaceSound(), (var12.stepSound.getVolume() + 1.0F) / 2.0F, var12.stepSound.getPitch() * 0.8F); + --var1.stackSize; + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ItemRenderer.java b/src/net/minecraft/src/ItemRenderer.java new file mode 100644 index 0000000..be8351d --- /dev/null +++ b/src/net/minecraft/src/ItemRenderer.java @@ -0,0 +1,573 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class ItemRenderer { + private Minecraft mc; + private ItemStack itemToRender = null; + private float equippedProgress = 0.0F; + private float prevEquippedProgress = 0.0F; + private RenderBlocks renderBlocksInstance = new RenderBlocks(); + public final MapItemRenderer mapItemRenderer; + private int equippedItemSlot = -1; + + public ItemRenderer(Minecraft var1) { + this.mc = var1; + this.mapItemRenderer = new MapItemRenderer(var1.fontRenderer, var1.gameSettings, var1.renderEngine); + } + + public void renderItem(EntityLiving var1, ItemStack var2, int var3) { + GL11.glPushMatrix(); + if(var2.getItemSpriteNumber() == 0 && Block.blocksList[var2.itemID] != null && RenderBlocks.renderItemIn3d(Block.blocksList[var2.itemID].getRenderType())) { + this.mc.renderEngine.bindTexture("/terrain.png"); + this.renderBlocksInstance.renderBlockAsItem(Block.blocksList[var2.itemID], var2.getItemDamage(), 1.0F); + } else { + Icon var4 = var1.getItemIcon(var2, var3); + if(var4 == null) { + GL11.glPopMatrix(); + return; + } + + if(var2.getItemSpriteNumber() == 0) { + this.mc.renderEngine.bindTexture("/terrain.png"); + } else { + this.mc.renderEngine.bindTexture("/gui/items.png"); + } + + Tessellator var5 = Tessellator.instance; + float var6 = var4.getMinU(); + float var7 = var4.getMaxU(); + float var8 = var4.getMinV(); + float var9 = var4.getMaxV(); + float var10 = 0.0F; + float var11 = 0.3F; + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glTranslatef(-var10, -var11, 0.0F); + float var12 = 1.5F; + GL11.glScalef(var12, var12, var12); + GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(-(15.0F / 16.0F), -(1.0F / 16.0F), 0.0F); + renderItemIn2D(var5, var7, var8, var6, var9, var4.getSheetWidth(), var4.getSheetHeight(), 1.0F / 16.0F); + if(var2 != null && var2.hasEffect() && var3 == 0) { + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glDisable(GL11.GL_LIGHTING); + this.mc.renderEngine.bindTexture("%blur%/misc/glint.png"); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); + float var13 = 0.76F; + GL11.glColor4f(0.5F * var13, 0.25F * var13, 0.8F * var13, 1.0F); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glPushMatrix(); + float var14 = 2.0F / 16.0F; + GL11.glScalef(var14, var14, var14); + float var15 = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F; + GL11.glTranslatef(var15, 0.0F, 0.0F); + GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F); + renderItemIn2D(var5, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 1.0F / 16.0F); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(var14, var14, var14); + var15 = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F; + GL11.glTranslatef(-var15, 0.0F, 0.0F); + GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F); + renderItemIn2D(var5, 0.0F, 0.0F, 1.0F, 1.0F, 256, 256, 1.0F / 16.0F); + GL11.glPopMatrix(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + } + + GL11.glPopMatrix(); + } + + public static void renderItemIn2D(Tessellator var0, float var1, float var2, float var3, float var4, int var5, int var6, float var7) { + var0.startDrawingQuads(); + var0.setNormal(0.0F, 0.0F, 1.0F); + var0.addVertexWithUV(0.0D, 0.0D, 0.0D, (double)var1, (double)var4); + var0.addVertexWithUV(1.0D, 0.0D, 0.0D, (double)var3, (double)var4); + var0.addVertexWithUV(1.0D, 1.0D, 0.0D, (double)var3, (double)var2); + var0.addVertexWithUV(0.0D, 1.0D, 0.0D, (double)var1, (double)var2); + var0.draw(); + var0.startDrawingQuads(); + var0.setNormal(0.0F, 0.0F, -1.0F); + var0.addVertexWithUV(0.0D, 1.0D, (double)(0.0F - var7), (double)var1, (double)var2); + var0.addVertexWithUV(1.0D, 1.0D, (double)(0.0F - var7), (double)var3, (double)var2); + var0.addVertexWithUV(1.0D, 0.0D, (double)(0.0F - var7), (double)var3, (double)var4); + var0.addVertexWithUV(0.0D, 0.0D, (double)(0.0F - var7), (double)var1, (double)var4); + var0.draw(); + float var8 = (float)var5 * (var1 - var3); + float var9 = (float)var6 * (var4 - var2); + var0.startDrawingQuads(); + var0.setNormal(-1.0F, 0.0F, 0.0F); + + int var10; + float var11; + float var12; + for(var10 = 0; (float)var10 < var8; ++var10) { + var11 = (float)var10 / var8; + var12 = var1 + (var3 - var1) * var11 - 0.5F / (float)var5; + var0.addVertexWithUV((double)var11, 0.0D, (double)(0.0F - var7), (double)var12, (double)var4); + var0.addVertexWithUV((double)var11, 0.0D, 0.0D, (double)var12, (double)var4); + var0.addVertexWithUV((double)var11, 1.0D, 0.0D, (double)var12, (double)var2); + var0.addVertexWithUV((double)var11, 1.0D, (double)(0.0F - var7), (double)var12, (double)var2); + } + + var0.draw(); + var0.startDrawingQuads(); + var0.setNormal(1.0F, 0.0F, 0.0F); + + float var13; + for(var10 = 0; (float)var10 < var8; ++var10) { + var11 = (float)var10 / var8; + var12 = var1 + (var3 - var1) * var11 - 0.5F / (float)var5; + var13 = var11 + 1.0F / var8; + var0.addVertexWithUV((double)var13, 1.0D, (double)(0.0F - var7), (double)var12, (double)var2); + var0.addVertexWithUV((double)var13, 1.0D, 0.0D, (double)var12, (double)var2); + var0.addVertexWithUV((double)var13, 0.0D, 0.0D, (double)var12, (double)var4); + var0.addVertexWithUV((double)var13, 0.0D, (double)(0.0F - var7), (double)var12, (double)var4); + } + + var0.draw(); + var0.startDrawingQuads(); + var0.setNormal(0.0F, 1.0F, 0.0F); + + for(var10 = 0; (float)var10 < var9; ++var10) { + var11 = (float)var10 / var9; + var12 = var4 + (var2 - var4) * var11 - 0.5F / (float)var6; + var13 = var11 + 1.0F / var9; + var0.addVertexWithUV(0.0D, (double)var13, 0.0D, (double)var1, (double)var12); + var0.addVertexWithUV(1.0D, (double)var13, 0.0D, (double)var3, (double)var12); + var0.addVertexWithUV(1.0D, (double)var13, (double)(0.0F - var7), (double)var3, (double)var12); + var0.addVertexWithUV(0.0D, (double)var13, (double)(0.0F - var7), (double)var1, (double)var12); + } + + var0.draw(); + var0.startDrawingQuads(); + var0.setNormal(0.0F, -1.0F, 0.0F); + + for(var10 = 0; (float)var10 < var9; ++var10) { + var11 = (float)var10 / var9; + var12 = var4 + (var2 - var4) * var11 - 0.5F / (float)var6; + var0.addVertexWithUV(1.0D, (double)var11, 0.0D, (double)var3, (double)var12); + var0.addVertexWithUV(0.0D, (double)var11, 0.0D, (double)var1, (double)var12); + var0.addVertexWithUV(0.0D, (double)var11, (double)(0.0F - var7), (double)var1, (double)var12); + var0.addVertexWithUV(1.0D, (double)var11, (double)(0.0F - var7), (double)var3, (double)var12); + } + + var0.draw(); + } + + public void renderItemInFirstPerson(float var1) { + float var2 = this.prevEquippedProgress + (this.equippedProgress - this.prevEquippedProgress) * var1; + EntityClientPlayerMP var3 = this.mc.thePlayer; + float var4 = var3.prevRotationPitch + (var3.rotationPitch - var3.prevRotationPitch) * var1; + GL11.glPushMatrix(); + GL11.glRotatef(var4, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(var3.prevRotationYaw + (var3.rotationYaw - var3.prevRotationYaw) * var1, 0.0F, 1.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GL11.glPopMatrix(); + float var6; + float var7; + if(var3 instanceof EntityPlayerSP) { + EntityPlayerSP var5 = (EntityPlayerSP)var3; + var6 = var5.prevRenderArmPitch + (var5.renderArmPitch - var5.prevRenderArmPitch) * var1; + var7 = var5.prevRenderArmYaw + (var5.renderArmYaw - var5.prevRenderArmYaw) * var1; + GL11.glRotatef((var3.rotationPitch - var6) * 0.1F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef((var3.rotationYaw - var7) * 0.1F, 0.0F, 1.0F, 0.0F); + } + + ItemStack var17 = this.itemToRender; + var6 = this.mc.theWorld.getLightBrightness(MathHelper.floor_double(var3.posX), MathHelper.floor_double(var3.posY), MathHelper.floor_double(var3.posZ)); + var6 = 1.0F; + int var18 = this.mc.theWorld.getLightBrightnessForSkyBlocks(MathHelper.floor_double(var3.posX), MathHelper.floor_double(var3.posY), MathHelper.floor_double(var3.posZ), 0); + int var8 = var18 % 65536; + int var9 = var18 / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var8 / 1.0F, (float)var9 / 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + float var10; + float var19; + float var21; + if(var17 != null) { + var18 = Item.itemsList[var17.itemID].getColorFromItemStack(var17, 0); + var19 = (float)(var18 >> 16 & 255) / 255.0F; + var21 = (float)(var18 >> 8 & 255) / 255.0F; + var10 = (float)(var18 & 255) / 255.0F; + GL11.glColor4f(var6 * var19, var6 * var21, var6 * var10, 1.0F); + } else { + GL11.glColor4f(var6, var6, var6, 1.0F); + } + + float var11; + float var12; + float var13; + Render var24; + RenderPlayer var26; + if(var17 != null && var17.itemID == Item.map.itemID) { + GL11.glPushMatrix(); + var7 = 0.8F; + var19 = var3.getSwingProgress(var1); + var21 = MathHelper.sin(var19 * (float)Math.PI); + var10 = MathHelper.sin(MathHelper.sqrt_float(var19) * (float)Math.PI); + GL11.glTranslatef(-var10 * 0.4F, MathHelper.sin(MathHelper.sqrt_float(var19) * (float)Math.PI * 2.0F) * 0.2F, -var21 * 0.2F); + var19 = 1.0F - var4 / 45.0F + 0.1F; + if(var19 < 0.0F) { + var19 = 0.0F; + } + + if(var19 > 1.0F) { + var19 = 1.0F; + } + + var19 = -MathHelper.cos(var19 * (float)Math.PI) * 0.5F + 0.5F; + GL11.glTranslatef(0.0F, 0.0F * var7 - (1.0F - var2) * 1.2F - var19 * 0.5F + 0.04F, -0.9F * var7); + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(var19 * -85.0F, 0.0F, 0.0F, 1.0F); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTextureForDownloadableImage(this.mc.thePlayer.skinUrl, this.mc.thePlayer.getTexture())); + this.mc.renderEngine.resetBoundTexture(); + + for(var9 = 0; var9 < 2; ++var9) { + int var22 = var9 * 2 - 1; + GL11.glPushMatrix(); + GL11.glTranslatef(-0.0F, -0.6F, 1.1F * (float)var22); + GL11.glRotatef((float)(-45 * var22), 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-90.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(59.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef((float)(-65 * var22), 0.0F, 1.0F, 0.0F); + var24 = RenderManager.instance.getEntityRenderObject(this.mc.thePlayer); + var26 = (RenderPlayer)var24; + var13 = 1.0F; + GL11.glScalef(var13, var13, var13); + var26.renderFirstPersonArm(this.mc.thePlayer); + GL11.glPopMatrix(); + } + + var21 = var3.getSwingProgress(var1); + var10 = MathHelper.sin(var21 * var21 * (float)Math.PI); + var11 = MathHelper.sin(MathHelper.sqrt_float(var21) * (float)Math.PI); + GL11.glRotatef(-var10 * 20.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var11 * 20.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-var11 * 80.0F, 1.0F, 0.0F, 0.0F); + var12 = 0.38F; + GL11.glScalef(var12, var12, var12); + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(-1.0F, -1.0F, 0.0F); + var13 = 0.015625F; + GL11.glScalef(var13, var13, var13); + this.mc.renderEngine.bindTexture("/misc/mapbg.png"); + Tessellator var27 = Tessellator.instance; + GL11.glNormal3f(0.0F, 0.0F, -1.0F); + var27.startDrawingQuads(); + byte var28 = 7; + var27.addVertexWithUV((double)(0 - var28), (double)(128 + var28), 0.0D, 0.0D, 1.0D); + var27.addVertexWithUV((double)(128 + var28), (double)(128 + var28), 0.0D, 1.0D, 1.0D); + var27.addVertexWithUV((double)(128 + var28), (double)(0 - var28), 0.0D, 1.0D, 0.0D); + var27.addVertexWithUV((double)(0 - var28), (double)(0 - var28), 0.0D, 0.0D, 0.0D); + var27.draw(); + MapData var16 = Item.map.getMapData(var17, this.mc.theWorld); + if(var16 != null) { + this.mapItemRenderer.renderMap(this.mc.thePlayer, this.mc.renderEngine, var16); + } + + GL11.glPopMatrix(); + } else if(var17 != null) { + GL11.glPushMatrix(); + var7 = 0.8F; + if(var3.getItemInUseCount() > 0) { + EnumAction var20 = var17.getItemUseAction(); + if(var20 == EnumAction.eat || var20 == EnumAction.drink) { + var21 = (float)var3.getItemInUseCount() - var1 + 1.0F; + var10 = 1.0F - var21 / (float)var17.getMaxItemUseDuration(); + var11 = 1.0F - var10; + var11 = var11 * var11 * var11; + var11 = var11 * var11 * var11; + var11 = var11 * var11 * var11; + var12 = 1.0F - var11; + GL11.glTranslatef(0.0F, MathHelper.abs(MathHelper.cos(var21 / 4.0F * (float)Math.PI) * 0.1F) * (float)((double)var10 > 0.2D ? 1 : 0), 0.0F); + GL11.glTranslatef(var12 * 0.6F, -var12 * 0.5F, 0.0F); + GL11.glRotatef(var12 * 90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(var12 * 10.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(var12 * 30.0F, 0.0F, 0.0F, 1.0F); + } + } else { + var19 = var3.getSwingProgress(var1); + var21 = MathHelper.sin(var19 * (float)Math.PI); + var10 = MathHelper.sin(MathHelper.sqrt_float(var19) * (float)Math.PI); + GL11.glTranslatef(-var10 * 0.4F, MathHelper.sin(MathHelper.sqrt_float(var19) * (float)Math.PI * 2.0F) * 0.2F, -var21 * 0.2F); + } + + GL11.glTranslatef(0.7F * var7, -0.65F * var7 - (1.0F - var2) * 0.6F, -0.9F * var7); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + var19 = var3.getSwingProgress(var1); + var21 = MathHelper.sin(var19 * var19 * (float)Math.PI); + var10 = MathHelper.sin(MathHelper.sqrt_float(var19) * (float)Math.PI); + GL11.glRotatef(-var21 * 20.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var10 * 20.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-var10 * 80.0F, 1.0F, 0.0F, 0.0F); + var11 = 0.4F; + GL11.glScalef(var11, var11, var11); + float var14; + float var15; + if(var3.getItemInUseCount() > 0) { + EnumAction var23 = var17.getItemUseAction(); + if(var23 == EnumAction.block) { + GL11.glTranslatef(-0.5F, 0.2F, 0.0F); + GL11.glRotatef(30.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-80.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(60.0F, 0.0F, 1.0F, 0.0F); + } else if(var23 == EnumAction.bow) { + GL11.glRotatef(-18.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-12.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-8.0F, 1.0F, 0.0F, 0.0F); + GL11.glTranslatef(-0.9F, 0.2F, 0.0F); + var13 = (float)var17.getMaxItemUseDuration() - ((float)var3.getItemInUseCount() - var1 + 1.0F); + var14 = var13 / 20.0F; + var14 = (var14 * var14 + var14 * 2.0F) / 3.0F; + if(var14 > 1.0F) { + var14 = 1.0F; + } + + if(var14 > 0.1F) { + GL11.glTranslatef(0.0F, MathHelper.sin((var13 - 0.1F) * 1.3F) * 0.01F * (var14 - 0.1F), 0.0F); + } + + GL11.glTranslatef(0.0F, 0.0F, var14 * 0.1F); + GL11.glRotatef(-335.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-50.0F, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, 0.5F, 0.0F); + var15 = 1.0F + var14 * 0.2F; + GL11.glScalef(1.0F, 1.0F, var15); + GL11.glTranslatef(0.0F, -0.5F, 0.0F); + GL11.glRotatef(50.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(335.0F, 0.0F, 0.0F, 1.0F); + } + } + + if(var17.getItem().shouldRotateAroundWhenRendering()) { + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + } + + if(var17.getItem().requiresMultipleRenderPasses()) { + this.renderItem(var3, var17, 0); + int var25 = Item.itemsList[var17.itemID].getColorFromItemStack(var17, 1); + var13 = (float)(var25 >> 16 & 255) / 255.0F; + var14 = (float)(var25 >> 8 & 255) / 255.0F; + var15 = (float)(var25 & 255) / 255.0F; + GL11.glColor4f(var6 * var13, var6 * var14, var6 * var15, 1.0F); + this.renderItem(var3, var17, 1); + } else { + this.renderItem(var3, var17, 0); + } + + GL11.glPopMatrix(); + } else if(!var3.isInvisible()) { + GL11.glPushMatrix(); + var7 = 0.8F; + var19 = var3.getSwingProgress(var1); + var21 = MathHelper.sin(var19 * (float)Math.PI); + var10 = MathHelper.sin(MathHelper.sqrt_float(var19) * (float)Math.PI); + GL11.glTranslatef(-var10 * 0.3F, MathHelper.sin(MathHelper.sqrt_float(var19) * (float)Math.PI * 2.0F) * 0.4F, -var21 * 0.4F); + GL11.glTranslatef(0.8F * var7, -(12.0F / 16.0F) * var7 - (1.0F - var2) * 0.6F, -0.9F * var7); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + var19 = var3.getSwingProgress(var1); + var21 = MathHelper.sin(var19 * var19 * (float)Math.PI); + var10 = MathHelper.sin(MathHelper.sqrt_float(var19) * (float)Math.PI); + GL11.glRotatef(var10 * 70.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var21 * 20.0F, 0.0F, 0.0F, 1.0F); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTextureForDownloadableImage(this.mc.thePlayer.skinUrl, this.mc.thePlayer.getTexture())); + this.mc.renderEngine.resetBoundTexture(); + GL11.glTranslatef(-1.0F, 3.6F, 3.5F); + GL11.glRotatef(120.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(200.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-135.0F, 0.0F, 1.0F, 0.0F); + GL11.glScalef(1.0F, 1.0F, 1.0F); + GL11.glTranslatef(5.6F, 0.0F, 0.0F); + var24 = RenderManager.instance.getEntityRenderObject(this.mc.thePlayer); + var26 = (RenderPlayer)var24; + var13 = 1.0F; + GL11.glScalef(var13, var13, var13); + var26.renderFirstPersonArm(this.mc.thePlayer); + GL11.glPopMatrix(); + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + } + + public void renderOverlays(float var1) { + GL11.glDisable(GL11.GL_ALPHA_TEST); + if(this.mc.thePlayer.isBurning()) { + this.mc.renderEngine.bindTexture("/terrain.png"); + this.renderFireInFirstPerson(var1); + } + + if(this.mc.thePlayer.isEntityInsideOpaqueBlock()) { + int var2 = MathHelper.floor_double(this.mc.thePlayer.posX); + int var3 = MathHelper.floor_double(this.mc.thePlayer.posY); + int var4 = MathHelper.floor_double(this.mc.thePlayer.posZ); + this.mc.renderEngine.bindTexture("/terrain.png"); + int var5 = this.mc.theWorld.getBlockId(var2, var3, var4); + if(this.mc.theWorld.isBlockNormalCube(var2, var3, var4)) { + this.renderInsideOfBlock(var1, Block.blocksList[var5].getBlockTextureFromSide(2)); + } else { + for(int var6 = 0; var6 < 8; ++var6) { + float var7 = ((float)((var6 >> 0) % 2) - 0.5F) * this.mc.thePlayer.width * 0.9F; + float var8 = ((float)((var6 >> 1) % 2) - 0.5F) * this.mc.thePlayer.height * 0.2F; + float var9 = ((float)((var6 >> 2) % 2) - 0.5F) * this.mc.thePlayer.width * 0.9F; + int var10 = MathHelper.floor_float((float)var2 + var7); + int var11 = MathHelper.floor_float((float)var3 + var8); + int var12 = MathHelper.floor_float((float)var4 + var9); + if(this.mc.theWorld.isBlockNormalCube(var10, var11, var12)) { + var5 = this.mc.theWorld.getBlockId(var10, var11, var12); + } + } + } + + if(Block.blocksList[var5] != null) { + this.renderInsideOfBlock(var1, Block.blocksList[var5].getBlockTextureFromSide(2)); + } + } + + if(this.mc.thePlayer.isInsideOfMaterial(Material.water)) { + this.mc.renderEngine.bindTexture("/misc/water.png"); + this.renderWarpedTextureOverlay(var1); + } + + GL11.glEnable(GL11.GL_ALPHA_TEST); + } + + private void renderInsideOfBlock(float var1, Icon var2) { + Tessellator var3 = Tessellator.instance; + float var4 = 0.1F; + GL11.glColor4f(var4, var4, var4, 0.5F); + GL11.glPushMatrix(); + float var5 = -1.0F; + float var6 = 1.0F; + float var7 = -1.0F; + float var8 = 1.0F; + float var9 = -0.5F; + float var10 = var2.getMinU(); + float var11 = var2.getMaxU(); + float var12 = var2.getMinV(); + float var13 = var2.getMaxV(); + var3.startDrawingQuads(); + var3.addVertexWithUV((double)var5, (double)var7, (double)var9, (double)var11, (double)var13); + var3.addVertexWithUV((double)var6, (double)var7, (double)var9, (double)var10, (double)var13); + var3.addVertexWithUV((double)var6, (double)var8, (double)var9, (double)var10, (double)var12); + var3.addVertexWithUV((double)var5, (double)var8, (double)var9, (double)var11, (double)var12); + var3.draw(); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + private void renderWarpedTextureOverlay(float var1) { + Tessellator var2 = Tessellator.instance; + float var3 = this.mc.thePlayer.getBrightness(var1); + GL11.glColor4f(var3, var3, var3, 0.5F); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glPushMatrix(); + float var4 = 4.0F; + float var5 = -1.0F; + float var6 = 1.0F; + float var7 = -1.0F; + float var8 = 1.0F; + float var9 = -0.5F; + float var10 = -this.mc.thePlayer.rotationYaw / 64.0F; + float var11 = this.mc.thePlayer.rotationPitch / 64.0F; + var2.startDrawingQuads(); + var2.addVertexWithUV((double)var5, (double)var7, (double)var9, (double)(var4 + var10), (double)(var4 + var11)); + var2.addVertexWithUV((double)var6, (double)var7, (double)var9, (double)(0.0F + var10), (double)(var4 + var11)); + var2.addVertexWithUV((double)var6, (double)var8, (double)var9, (double)(0.0F + var10), (double)(0.0F + var11)); + var2.addVertexWithUV((double)var5, (double)var8, (double)var9, (double)(var4 + var10), (double)(0.0F + var11)); + var2.draw(); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + } + + private void renderFireInFirstPerson(float var1) { + Tessellator var2 = Tessellator.instance; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.9F); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + float var3 = 1.0F; + + for(int var4 = 0; var4 < 2; ++var4) { + GL11.glPushMatrix(); + Icon var5 = Block.fire.func_94438_c(1); + float var6 = var5.getMinU(); + float var7 = var5.getMaxU(); + float var8 = var5.getMinV(); + float var9 = var5.getMaxV(); + float var10 = (0.0F - var3) / 2.0F; + float var11 = var10 + var3; + float var12 = 0.0F - var3 / 2.0F; + float var13 = var12 + var3; + float var14 = -0.5F; + GL11.glTranslatef((float)(-(var4 * 2 - 1)) * 0.24F, -0.3F, 0.0F); + GL11.glRotatef((float)(var4 * 2 - 1) * 10.0F, 0.0F, 1.0F, 0.0F); + var2.startDrawingQuads(); + var2.addVertexWithUV((double)var10, (double)var12, (double)var14, (double)var7, (double)var9); + var2.addVertexWithUV((double)var11, (double)var12, (double)var14, (double)var6, (double)var9); + var2.addVertexWithUV((double)var11, (double)var13, (double)var14, (double)var6, (double)var8); + var2.addVertexWithUV((double)var10, (double)var13, (double)var14, (double)var7, (double)var8); + var2.draw(); + GL11.glPopMatrix(); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + } + + public void updateEquippedItem() { + this.prevEquippedProgress = this.equippedProgress; + EntityClientPlayerMP var1 = this.mc.thePlayer; + ItemStack var2 = var1.inventory.getCurrentItem(); + boolean var3 = this.equippedItemSlot == var1.inventory.currentItem && var2 == this.itemToRender; + if(this.itemToRender == null && var2 == null) { + var3 = true; + } + + if(var2 != null && this.itemToRender != null && var2 != this.itemToRender && var2.itemID == this.itemToRender.itemID && var2.getItemDamage() == this.itemToRender.getItemDamage()) { + this.itemToRender = var2; + var3 = true; + } + + float var4 = 0.4F; + float var5 = var3 ? 1.0F : 0.0F; + float var6 = var5 - this.equippedProgress; + if(var6 < -var4) { + var6 = -var4; + } + + if(var6 > var4) { + var6 = var4; + } + + this.equippedProgress += var6; + if(this.equippedProgress < 0.1F) { + this.itemToRender = var2; + this.equippedItemSlot = var1.inventory.currentItem; + } + + } + + public void resetEquippedProgress() { + this.equippedProgress = 0.0F; + } + + public void resetEquippedProgress2() { + this.equippedProgress = 0.0F; + } +} diff --git a/src/net/minecraft/src/ItemSaddle.java b/src/net/minecraft/src/ItemSaddle.java new file mode 100644 index 0000000..f7949dc --- /dev/null +++ b/src/net/minecraft/src/ItemSaddle.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +public class ItemSaddle extends Item { + public ItemSaddle(int var1) { + super(var1); + this.maxStackSize = 1; + this.setCreativeTab(CreativeTabs.tabTransport); + } + + public boolean itemInteractionForEntity(ItemStack var1, EntityLiving var2) { + if(var2 instanceof EntityPig) { + EntityPig var3 = (EntityPig)var2; + if(!var3.getSaddled() && !var3.isChild()) { + var3.setSaddled(true); + --var1.stackSize; + } + + return true; + } else { + return false; + } + } + + public boolean hitEntity(ItemStack var1, EntityLiving var2, EntityLiving var3) { + this.itemInteractionForEntity(var1, var2); + return true; + } +} diff --git a/src/net/minecraft/src/ItemSeedFood.java b/src/net/minecraft/src/ItemSeedFood.java new file mode 100644 index 0000000..3c6f1cd --- /dev/null +++ b/src/net/minecraft/src/ItemSeedFood.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +public class ItemSeedFood extends ItemFood { + private int cropId; + private int soilId; + + public ItemSeedFood(int var1, int var2, float var3, int var4, int var5) { + super(var1, var2, var3, false); + this.cropId = var4; + this.soilId = var5; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(var7 != 1) { + return false; + } else if(var2.canPlayerEdit(var4, var5, var6, var7, var1) && var2.canPlayerEdit(var4, var5 + 1, var6, var7, var1)) { + int var11 = var3.getBlockId(var4, var5, var6); + if(var11 == this.soilId && var3.isAirBlock(var4, var5 + 1, var6)) { + var3.setBlock(var4, var5 + 1, var6, this.cropId); + --var1.stackSize; + return true; + } else { + return false; + } + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/ItemSeeds.java b/src/net/minecraft/src/ItemSeeds.java new file mode 100644 index 0000000..4791721 --- /dev/null +++ b/src/net/minecraft/src/ItemSeeds.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +public class ItemSeeds extends Item { + private int blockType; + private int soilBlockID; + + public ItemSeeds(int var1, int var2, int var3) { + super(var1); + this.blockType = var2; + this.soilBlockID = var3; + this.setCreativeTab(CreativeTabs.tabMaterials); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(var7 != 1) { + return false; + } else if(var2.canPlayerEdit(var4, var5, var6, var7, var1) && var2.canPlayerEdit(var4, var5 + 1, var6, var7, var1)) { + int var11 = var3.getBlockId(var4, var5, var6); + if(var11 == this.soilBlockID && var3.isAirBlock(var4, var5 + 1, var6)) { + var3.setBlock(var4, var5 + 1, var6, this.blockType); + --var1.stackSize; + return true; + } else { + return false; + } + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/ItemShears.java b/src/net/minecraft/src/ItemShears.java new file mode 100644 index 0000000..007ee24 --- /dev/null +++ b/src/net/minecraft/src/ItemShears.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public class ItemShears extends Item { + public ItemShears(int var1) { + super(var1); + this.setMaxStackSize(1); + this.setMaxDamage(238); + this.setCreativeTab(CreativeTabs.tabTools); + } + + public boolean onBlockDestroyed(ItemStack var1, World var2, int var3, int var4, int var5, int var6, EntityLiving var7) { + if(var3 != Block.leaves.blockID && var3 != Block.web.blockID && var3 != Block.tallGrass.blockID && var3 != Block.vine.blockID && var3 != Block.tripWire.blockID) { + return super.onBlockDestroyed(var1, var2, var3, var4, var5, var6, var7); + } else { + var1.damageItem(1, var7); + return true; + } + } + + public boolean canHarvestBlock(Block var1) { + return var1.blockID == Block.web.blockID || var1.blockID == Block.redstoneWire.blockID || var1.blockID == Block.tripWire.blockID; + } + + public float getStrVsBlock(ItemStack var1, Block var2) { + return var2.blockID != Block.web.blockID && var2.blockID != Block.leaves.blockID ? (var2.blockID == Block.cloth.blockID ? 5.0F : super.getStrVsBlock(var1, var2)) : 15.0F; + } +} diff --git a/src/net/minecraft/src/ItemSign.java b/src/net/minecraft/src/ItemSign.java new file mode 100644 index 0000000..a99ce2b --- /dev/null +++ b/src/net/minecraft/src/ItemSign.java @@ -0,0 +1,58 @@ +package net.minecraft.src; + +public class ItemSign extends Item { + public ItemSign(int var1) { + super(var1); + this.maxStackSize = 16; + this.setCreativeTab(CreativeTabs.tabDecorations); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(var7 == 0) { + return false; + } else if(!var3.getBlockMaterial(var4, var5, var6).isSolid()) { + return false; + } else { + if(var7 == 1) { + ++var5; + } + + if(var7 == 2) { + --var6; + } + + if(var7 == 3) { + ++var6; + } + + if(var7 == 4) { + --var4; + } + + if(var7 == 5) { + ++var4; + } + + if(!var2.canPlayerEdit(var4, var5, var6, var7, var1)) { + return false; + } else if(!Block.signPost.canPlaceBlockAt(var3, var4, var5, var6)) { + return false; + } else { + if(var7 == 1) { + int var11 = MathHelper.floor_double((double)((var2.rotationYaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15; + var3.setBlock(var4, var5, var6, Block.signPost.blockID, var11, 2); + } else { + var3.setBlock(var4, var5, var6, Block.signWall.blockID, var7, 2); + } + + --var1.stackSize; + TileEntitySign var12 = (TileEntitySign)var3.getBlockTileEntity(var4, var5, var6); + if(var12 != null) { + var2.displayGUIEditSign(var12); + } + + return true; + } + } + } +} diff --git a/src/net/minecraft/src/ItemSimpleFoiled.java b/src/net/minecraft/src/ItemSimpleFoiled.java new file mode 100644 index 0000000..15773de --- /dev/null +++ b/src/net/minecraft/src/ItemSimpleFoiled.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class ItemSimpleFoiled extends Item { + public ItemSimpleFoiled(int var1) { + super(var1); + } + + public boolean hasEffect(ItemStack var1) { + return true; + } +} diff --git a/src/net/minecraft/src/ItemSkull.java b/src/net/minecraft/src/ItemSkull.java new file mode 100644 index 0000000..88d67a5 --- /dev/null +++ b/src/net/minecraft/src/ItemSkull.java @@ -0,0 +1,112 @@ +package net.minecraft.src; + +import java.util.List; + +public class ItemSkull extends Item { + private static final String[] skullTypes = new String[]{"skeleton", "wither", "zombie", "char", "creeper"}; + public static final String[] field_94587_a = new String[]{"skull_skeleton", "skull_wither", "skull_zombie", "skull_char", "skull_creeper"}; + private Icon[] field_94586_c; + + public ItemSkull(int var1) { + super(var1); + this.setCreativeTab(CreativeTabs.tabDecorations); + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(var7 == 0) { + return false; + } else if(!var3.getBlockMaterial(var4, var5, var6).isSolid()) { + return false; + } else { + if(var7 == 1) { + ++var5; + } + + if(var7 == 2) { + --var6; + } + + if(var7 == 3) { + ++var6; + } + + if(var7 == 4) { + --var4; + } + + if(var7 == 5) { + ++var4; + } + + if(!var2.canPlayerEdit(var4, var5, var6, var7, var1)) { + return false; + } else if(!Block.skull.canPlaceBlockAt(var3, var4, var5, var6)) { + return false; + } else { + var3.setBlock(var4, var5, var6, Block.skull.blockID, var7, 2); + int var11 = 0; + if(var7 == 1) { + var11 = MathHelper.floor_double((double)(var2.rotationYaw * 16.0F / 360.0F) + 0.5D) & 15; + } + + TileEntity var12 = var3.getBlockTileEntity(var4, var5, var6); + if(var12 != null && var12 instanceof TileEntitySkull) { + String var13 = ""; + if(var1.hasTagCompound() && var1.getTagCompound().hasKey("SkullOwner")) { + var13 = var1.getTagCompound().getString("SkullOwner"); + } + + ((TileEntitySkull)var12).setSkullType(var1.getItemDamage(), var13); + ((TileEntitySkull)var12).setSkullRotation(var11); + ((BlockSkull)Block.skull).makeWither(var3, var4, var5, var6, (TileEntitySkull)var12); + } + + --var1.stackSize; + return true; + } + } + } + + public void getSubItems(int var1, CreativeTabs var2, List var3) { + for(int var4 = 0; var4 < skullTypes.length; ++var4) { + var3.add(new ItemStack(var1, 1, var4)); + } + + } + + public Icon getIconFromDamage(int var1) { + if(var1 < 0 || var1 >= skullTypes.length) { + var1 = 0; + } + + return this.field_94586_c[var1]; + } + + public int getMetadata(int var1) { + return var1; + } + + public String getUnlocalizedName(ItemStack var1) { + int var2 = var1.getItemDamage(); + if(var2 < 0 || var2 >= skullTypes.length) { + var2 = 0; + } + + return super.getUnlocalizedName() + "." + skullTypes[var2]; + } + + public String getItemDisplayName(ItemStack var1) { + return var1.getItemDamage() == 3 && var1.hasTagCompound() && var1.getTagCompound().hasKey("SkullOwner") ? StatCollector.translateToLocalFormatted("item.skull.player.name", new Object[]{var1.getTagCompound().getString("SkullOwner")}) : super.getItemDisplayName(var1); + } + + public void registerIcons(IconRegister var1) { + this.field_94586_c = new Icon[field_94587_a.length]; + + for(int var2 = 0; var2 < field_94587_a.length; ++var2) { + this.field_94586_c[var2] = var1.registerIcon(field_94587_a[var2]); + } + + } +} diff --git a/src/net/minecraft/src/ItemSlab.java b/src/net/minecraft/src/ItemSlab.java new file mode 100644 index 0000000..5cf191f --- /dev/null +++ b/src/net/minecraft/src/ItemSlab.java @@ -0,0 +1,136 @@ +package net.minecraft.src; + +public class ItemSlab extends ItemBlock { + private final boolean isFullBlock; + private final BlockHalfSlab theHalfSlab; + private final BlockHalfSlab doubleSlab; + + public ItemSlab(int var1, BlockHalfSlab var2, BlockHalfSlab var3, boolean var4) { + super(var1); + this.theHalfSlab = var2; + this.doubleSlab = var3; + this.isFullBlock = var4; + this.setMaxDamage(0); + this.setHasSubtypes(true); + } + + public Icon getIconFromDamage(int var1) { + return Block.blocksList[this.itemID].getIcon(2, var1); + } + + public int getMetadata(int var1) { + return var1; + } + + public String getUnlocalizedName(ItemStack var1) { + return this.theHalfSlab.getFullSlabName(var1.getItemDamage()); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(this.isFullBlock) { + return super.onItemUse(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10); + } else if(var1.stackSize == 0) { + return false; + } else if(!var2.canPlayerEdit(var4, var5, var6, var7, var1)) { + return false; + } else { + int var11 = var3.getBlockId(var4, var5, var6); + int var12 = var3.getBlockMetadata(var4, var5, var6); + int var13 = var12 & 7; + boolean var14 = (var12 & 8) != 0; + if((var7 == 1 && !var14 || var7 == 0 && var14) && var11 == this.theHalfSlab.blockID && var13 == var1.getItemDamage()) { + if(var3.checkNoEntityCollision(this.doubleSlab.getCollisionBoundingBoxFromPool(var3, var4, var5, var6)) && var3.setBlock(var4, var5, var6, this.doubleSlab.blockID, var13, 3)) { + var3.playSoundEffect((double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), this.doubleSlab.stepSound.getPlaceSound(), (this.doubleSlab.stepSound.getVolume() + 1.0F) / 2.0F, this.doubleSlab.stepSound.getPitch() * 0.8F); + --var1.stackSize; + } + + return true; + } else { + return this.func_77888_a(var1, var2, var3, var4, var5, var6, var7) ? true : super.onItemUse(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10); + } + } + } + + public boolean canPlaceItemBlockOnSide(World var1, int var2, int var3, int var4, int var5, EntityPlayer var6, ItemStack var7) { + int var8 = var2; + int var9 = var3; + int var10 = var4; + int var11 = var1.getBlockId(var2, var3, var4); + int var12 = var1.getBlockMetadata(var2, var3, var4); + int var13 = var12 & 7; + boolean var14 = (var12 & 8) != 0; + if((var5 == 1 && !var14 || var5 == 0 && var14) && var11 == this.theHalfSlab.blockID && var13 == var7.getItemDamage()) { + return true; + } else { + if(var5 == 0) { + --var3; + } + + if(var5 == 1) { + ++var3; + } + + if(var5 == 2) { + --var4; + } + + if(var5 == 3) { + ++var4; + } + + if(var5 == 4) { + --var2; + } + + if(var5 == 5) { + ++var2; + } + + var11 = var1.getBlockId(var2, var3, var4); + var12 = var1.getBlockMetadata(var2, var3, var4); + var13 = var12 & 7; + var14 = (var12 & 8) != 0; + return var11 == this.theHalfSlab.blockID && var13 == var7.getItemDamage() ? true : super.canPlaceItemBlockOnSide(var1, var8, var9, var10, var5, var6, var7); + } + } + + private boolean func_77888_a(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(var7 == 0) { + --var5; + } + + if(var7 == 1) { + ++var5; + } + + if(var7 == 2) { + --var6; + } + + if(var7 == 3) { + ++var6; + } + + if(var7 == 4) { + --var4; + } + + if(var7 == 5) { + ++var4; + } + + int var8 = var3.getBlockId(var4, var5, var6); + int var9 = var3.getBlockMetadata(var4, var5, var6); + int var10 = var9 & 7; + if(var8 == this.theHalfSlab.blockID && var10 == var1.getItemDamage()) { + if(var3.checkNoEntityCollision(this.doubleSlab.getCollisionBoundingBoxFromPool(var3, var4, var5, var6)) && var3.setBlock(var4, var5, var6, this.doubleSlab.blockID, var10, 3)) { + var3.playSoundEffect((double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), this.doubleSlab.stepSound.getPlaceSound(), (this.doubleSlab.stepSound.getVolume() + 1.0F) / 2.0F, this.doubleSlab.stepSound.getPitch() * 0.8F); + --var1.stackSize; + } + + return true; + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/ItemSnow.java b/src/net/minecraft/src/ItemSnow.java new file mode 100644 index 0000000..5b80580 --- /dev/null +++ b/src/net/minecraft/src/ItemSnow.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +public class ItemSnow extends ItemBlockWithMetadata { + public ItemSnow(int var1, Block var2) { + super(var1, var2); + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7, float var8, float var9, float var10) { + if(var1.stackSize == 0) { + return false; + } else if(!var2.canPlayerEdit(var4, var5, var6, var7, var1)) { + return false; + } else { + int var11 = var3.getBlockId(var4, var5, var6); + if(var11 == Block.snow.blockID) { + Block var12 = Block.blocksList[this.getBlockID()]; + int var13 = var3.getBlockMetadata(var4, var5, var6); + int var14 = var13 & 7; + if(var14 <= 6 && var3.checkNoEntityCollision(var12.getCollisionBoundingBoxFromPool(var3, var4, var5, var6)) && var3.setBlockMetadataWithNotify(var4, var5, var6, var14 + 1 | var13 & -8, 2)) { + var3.playSoundEffect((double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), var12.stepSound.getPlaceSound(), (var12.stepSound.getVolume() + 1.0F) / 2.0F, var12.stepSound.getPitch() * 0.8F); + --var1.stackSize; + return true; + } + } + + return super.onItemUse(var1, var2, var3, var4, var5, var6, var7, var8, var9, var10); + } + } +} diff --git a/src/net/minecraft/src/ItemSnowball.java b/src/net/minecraft/src/ItemSnowball.java new file mode 100644 index 0000000..8fa917e --- /dev/null +++ b/src/net/minecraft/src/ItemSnowball.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +public class ItemSnowball extends Item { + public ItemSnowball(int var1) { + super(var1); + this.maxStackSize = 16; + this.setCreativeTab(CreativeTabs.tabMisc); + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + if(!var3.capabilities.isCreativeMode) { + --var1.stackSize; + } + + var2.playSoundAtEntity(var3, "random.bow", 0.5F, 0.4F / (itemRand.nextFloat() * 0.4F + 0.8F)); + if(!var2.isRemote) { + var2.spawnEntityInWorld(new EntitySnowball(var2, var3)); + } + + return var1; + } +} diff --git a/src/net/minecraft/src/ItemSoup.java b/src/net/minecraft/src/ItemSoup.java new file mode 100644 index 0000000..3ee0b6b --- /dev/null +++ b/src/net/minecraft/src/ItemSoup.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class ItemSoup extends ItemFood { + public ItemSoup(int var1, int var2) { + super(var1, var2, false); + this.setMaxStackSize(1); + } + + public ItemStack onEaten(ItemStack var1, World var2, EntityPlayer var3) { + super.onEaten(var1, var2, var3); + return new ItemStack(Item.bowlEmpty); + } +} diff --git a/src/net/minecraft/src/ItemSpade.java b/src/net/minecraft/src/ItemSpade.java new file mode 100644 index 0000000..ff5b170 --- /dev/null +++ b/src/net/minecraft/src/ItemSpade.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class ItemSpade extends ItemTool { + private static Block[] blocksEffectiveAgainst = new Block[]{Block.grass, Block.dirt, Block.sand, Block.gravel, Block.snow, Block.blockSnow, Block.blockClay, Block.tilledField, Block.slowSand, Block.mycelium}; + + public ItemSpade(int var1, EnumToolMaterial var2) { + super(var1, 1, var2, blocksEffectiveAgainst); + } + + public boolean canHarvestBlock(Block var1) { + return var1 == Block.snow ? true : var1 == Block.blockSnow; + } +} diff --git a/src/net/minecraft/src/ItemStack.java b/src/net/minecraft/src/ItemStack.java new file mode 100644 index 0000000..dec8ea4 --- /dev/null +++ b/src/net/minecraft/src/ItemStack.java @@ -0,0 +1,483 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public final class ItemStack { + public int stackSize; + public int animationsToGo; + public int itemID; + public NBTTagCompound stackTagCompound; + private int itemDamage; + private EntityItemFrame itemFrame; + + public ItemStack(Block var1) { + this((Block)var1, 1); + } + + public ItemStack(Block var1, int var2) { + this(var1.blockID, var2, 0); + } + + public ItemStack(Block var1, int var2, int var3) { + this(var1.blockID, var2, var3); + } + + public ItemStack(Item var1) { + this(var1.itemID, 1, 0); + } + + public ItemStack(Item var1, int var2) { + this(var1.itemID, var2, 0); + } + + public ItemStack(Item var1, int var2, int var3) { + this(var1.itemID, var2, var3); + } + + public ItemStack(int var1, int var2, int var3) { + this.stackSize = 0; + this.itemFrame = null; + this.itemID = var1; + this.stackSize = var2; + this.itemDamage = var3; + if(this.itemDamage < 0) { + this.itemDamage = 0; + } + + } + + public static ItemStack loadItemStackFromNBT(NBTTagCompound var0) { + ItemStack var1 = new ItemStack(); + var1.readFromNBT(var0); + return var1.getItem() != null ? var1 : null; + } + + private ItemStack() { + this.stackSize = 0; + this.itemFrame = null; + } + + public ItemStack splitStack(int var1) { + ItemStack var2 = new ItemStack(this.itemID, var1, this.itemDamage); + if(this.stackTagCompound != null) { + var2.stackTagCompound = (NBTTagCompound)this.stackTagCompound.copy(); + } + + this.stackSize -= var1; + return var2; + } + + public Item getItem() { + return Item.itemsList[this.itemID]; + } + + public Icon getIconIndex() { + return this.getItem().getIconIndex(this); + } + + public int getItemSpriteNumber() { + return this.getItem().getSpriteNumber(); + } + + public boolean tryPlaceItemIntoWorld(EntityPlayer var1, World var2, int var3, int var4, int var5, int var6, float var7, float var8, float var9) { + boolean var10 = this.getItem().onItemUse(this, var1, var2, var3, var4, var5, var6, var7, var8, var9); + if(var10) { + var1.addStat(StatList.objectUseStats[this.itemID], 1); + } + + return var10; + } + + public float getStrVsBlock(Block var1) { + return this.getItem().getStrVsBlock(this, var1); + } + + public ItemStack useItemRightClick(World var1, EntityPlayer var2) { + return this.getItem().onItemRightClick(this, var1, var2); + } + + public ItemStack onFoodEaten(World var1, EntityPlayer var2) { + return this.getItem().onEaten(this, var1, var2); + } + + public NBTTagCompound writeToNBT(NBTTagCompound var1) { + var1.setShort("id", (short)this.itemID); + var1.setByte("Count", (byte)this.stackSize); + var1.setShort("Damage", (short)this.itemDamage); + if(this.stackTagCompound != null) { + var1.setTag("tag", this.stackTagCompound); + } + + return var1; + } + + public void readFromNBT(NBTTagCompound var1) { + this.itemID = var1.getShort("id"); + this.stackSize = var1.getByte("Count"); + this.itemDamage = var1.getShort("Damage"); + if(this.itemDamage < 0) { + this.itemDamage = 0; + } + + if(var1.hasKey("tag")) { + this.stackTagCompound = var1.getCompoundTag("tag"); + } + + } + + public int getMaxStackSize() { + return this.getItem().getItemStackLimit(); + } + + public boolean isStackable() { + return this.getMaxStackSize() > 1 && (!this.isItemStackDamageable() || !this.isItemDamaged()); + } + + public boolean isItemStackDamageable() { + return Item.itemsList[this.itemID].getMaxDamage() > 0; + } + + public boolean getHasSubtypes() { + return Item.itemsList[this.itemID].getHasSubtypes(); + } + + public boolean isItemDamaged() { + return this.isItemStackDamageable() && this.itemDamage > 0; + } + + public int getItemDamageForDisplay() { + return this.itemDamage; + } + + public int getItemDamage() { + return this.itemDamage; + } + + public void setItemDamage(int var1) { + this.itemDamage = var1; + if(this.itemDamage < 0) { + this.itemDamage = 0; + } + + } + + public int getMaxDamage() { + return Item.itemsList[this.itemID].getMaxDamage(); + } + + public boolean attemptDamageItem(int var1, Random var2) { + if(!this.isItemStackDamageable()) { + return false; + } else { + if(var1 > 0) { + int var3 = EnchantmentHelper.getEnchantmentLevel(Enchantment.unbreaking.effectId, this); + int var4 = 0; + + for(int var5 = 0; var3 > 0 && var5 < var1; ++var5) { + if(EnchantmentDurability.negateDamage(this, var3, var2)) { + ++var4; + } + } + + var1 -= var4; + if(var1 <= 0) { + return false; + } + } + + this.itemDamage += var1; + return this.itemDamage > this.getMaxDamage(); + } + } + + public void damageItem(int var1, EntityLiving var2) { + if(!(var2 instanceof EntityPlayer) || !((EntityPlayer)var2).capabilities.isCreativeMode) { + if(this.isItemStackDamageable()) { + if(this.attemptDamageItem(var1, var2.getRNG())) { + var2.renderBrokenItemStack(this); + if(var2 instanceof EntityPlayer) { + ((EntityPlayer)var2).addStat(StatList.objectBreakStats[this.itemID], 1); + } + + --this.stackSize; + if(this.stackSize < 0) { + this.stackSize = 0; + } + + this.itemDamage = 0; + } + + } + } + } + + public void hitEntity(EntityLiving var1, EntityPlayer var2) { + boolean var3 = Item.itemsList[this.itemID].hitEntity(this, var1, var2); + if(var3) { + var2.addStat(StatList.objectUseStats[this.itemID], 1); + } + + } + + public void onBlockDestroyed(World var1, int var2, int var3, int var4, int var5, EntityPlayer var6) { + boolean var7 = Item.itemsList[this.itemID].onBlockDestroyed(this, var1, var2, var3, var4, var5, var6); + if(var7) { + var6.addStat(StatList.objectUseStats[this.itemID], 1); + } + + } + + public int getDamageVsEntity(Entity var1) { + return Item.itemsList[this.itemID].getDamageVsEntity(var1); + } + + public boolean canHarvestBlock(Block var1) { + return Item.itemsList[this.itemID].canHarvestBlock(var1); + } + + public boolean interactWith(EntityLiving var1) { + return Item.itemsList[this.itemID].itemInteractionForEntity(this, var1); + } + + public ItemStack copy() { + ItemStack var1 = new ItemStack(this.itemID, this.stackSize, this.itemDamage); + if(this.stackTagCompound != null) { + var1.stackTagCompound = (NBTTagCompound)this.stackTagCompound.copy(); + } + + return var1; + } + + public static boolean areItemStackTagsEqual(ItemStack var0, ItemStack var1) { + return var0 == null && var1 == null ? true : (var0 != null && var1 != null ? (var0.stackTagCompound == null && var1.stackTagCompound != null ? false : var0.stackTagCompound == null || var0.stackTagCompound.equals(var1.stackTagCompound)) : false); + } + + public static boolean areItemStacksEqual(ItemStack var0, ItemStack var1) { + return var0 == null && var1 == null ? true : (var0 != null && var1 != null ? var0.isItemStackEqual(var1) : false); + } + + private boolean isItemStackEqual(ItemStack var1) { + return this.stackSize != var1.stackSize ? false : (this.itemID != var1.itemID ? false : (this.itemDamage != var1.itemDamage ? false : (this.stackTagCompound == null && var1.stackTagCompound != null ? false : this.stackTagCompound == null || this.stackTagCompound.equals(var1.stackTagCompound)))); + } + + public boolean isItemEqual(ItemStack var1) { + return this.itemID == var1.itemID && this.itemDamage == var1.itemDamage; + } + + public String getItemName() { + return Item.itemsList[this.itemID].getUnlocalizedName(this); + } + + public static ItemStack copyItemStack(ItemStack var0) { + return var0 == null ? null : var0.copy(); + } + + public String toString() { + return this.stackSize + "x" + Item.itemsList[this.itemID].getUnlocalizedName() + "@" + this.itemDamage; + } + + public void updateAnimation(World var1, Entity var2, int var3, boolean var4) { + if(this.animationsToGo > 0) { + --this.animationsToGo; + } + + Item.itemsList[this.itemID].onUpdate(this, var1, var2, var3, var4); + } + + public void onCrafting(World var1, EntityPlayer var2, int var3) { + var2.addStat(StatList.objectCraftStats[this.itemID], var3); + Item.itemsList[this.itemID].onCreated(this, var1, var2); + } + + public int getMaxItemUseDuration() { + return this.getItem().getMaxItemUseDuration(this); + } + + public EnumAction getItemUseAction() { + return this.getItem().getItemUseAction(this); + } + + public void onPlayerStoppedUsing(World var1, EntityPlayer var2, int var3) { + this.getItem().onPlayerStoppedUsing(this, var1, var2, var3); + } + + public boolean hasTagCompound() { + return this.stackTagCompound != null; + } + + public NBTTagCompound getTagCompound() { + return this.stackTagCompound; + } + + public NBTTagList getEnchantmentTagList() { + return this.stackTagCompound == null ? null : (NBTTagList)this.stackTagCompound.getTag("ench"); + } + + public void setTagCompound(NBTTagCompound var1) { + this.stackTagCompound = var1; + } + + public String getDisplayName() { + String var1 = this.getItem().getItemDisplayName(this); + if(this.stackTagCompound != null && this.stackTagCompound.hasKey("display")) { + NBTTagCompound var2 = this.stackTagCompound.getCompoundTag("display"); + if(var2.hasKey("Name")) { + var1 = var2.getString("Name"); + } + } + + return var1; + } + + public void setItemName(String var1) { + if(this.stackTagCompound == null) { + this.stackTagCompound = new NBTTagCompound("tag"); + } + + if(!this.stackTagCompound.hasKey("display")) { + this.stackTagCompound.setCompoundTag("display", new NBTTagCompound()); + } + + this.stackTagCompound.getCompoundTag("display").setString("Name", var1); + } + + public boolean hasDisplayName() { + return this.stackTagCompound == null ? false : (!this.stackTagCompound.hasKey("display") ? false : this.stackTagCompound.getCompoundTag("display").hasKey("Name")); + } + + public List getTooltip(EntityPlayer var1, boolean var2) { + ArrayList var3 = new ArrayList(); + Item var4 = Item.itemsList[this.itemID]; + String var5 = this.getDisplayName(); + if(this.hasDisplayName()) { + var5 = EnumChatFormatting.ITALIC + var5 + EnumChatFormatting.RESET; + } + + if(var2) { + String var6 = ""; + if(var5.length() > 0) { + var5 = var5 + " ("; + var6 = ")"; + } + + if(this.getHasSubtypes()) { + var5 = var5 + String.format("#%04d/%d%s", new Object[]{Integer.valueOf(this.itemID), Integer.valueOf(this.itemDamage), var6}); + } else { + var5 = var5 + String.format("#%04d%s", new Object[]{Integer.valueOf(this.itemID), var6}); + } + } else if(!this.hasDisplayName() && this.itemID == Item.map.itemID) { + var5 = var5 + " #" + this.itemDamage; + } + + var3.add(var5); + var4.addInformation(this, var1, var3, var2); + if(this.hasTagCompound()) { + NBTTagList var10 = this.getEnchantmentTagList(); + if(var10 != null) { + for(int var7 = 0; var7 < var10.tagCount(); ++var7) { + short var8 = ((NBTTagCompound)var10.tagAt(var7)).getShort("id"); + short var9 = ((NBTTagCompound)var10.tagAt(var7)).getShort("lvl"); + if(Enchantment.enchantmentsList[var8] != null) { + var3.add(Enchantment.enchantmentsList[var8].getTranslatedName(var9)); + } + } + } + + if(this.stackTagCompound.hasKey("display")) { + NBTTagCompound var11 = this.stackTagCompound.getCompoundTag("display"); + if(var11.hasKey("color")) { + if(var2) { + var3.add("Color: #" + Integer.toHexString(var11.getInteger("color")).toUpperCase()); + } else { + var3.add(EnumChatFormatting.ITALIC + StatCollector.translateToLocal("item.dyed")); + } + } + + if(var11.hasKey("Lore")) { + NBTTagList var12 = var11.getTagList("Lore"); + if(var12.tagCount() > 0) { + for(int var13 = 0; var13 < var12.tagCount(); ++var13) { + var3.add(EnumChatFormatting.DARK_PURPLE + "" + EnumChatFormatting.ITALIC + ((NBTTagString)var12.tagAt(var13)).data); + } + } + } + } + } + + if(var2 && this.isItemDamaged()) { + var3.add("Durability: " + (this.getMaxDamage() - this.getItemDamageForDisplay()) + " / " + this.getMaxDamage()); + } + + return var3; + } + + public boolean hasEffect() { + return this.getItem().hasEffect(this); + } + + public EnumRarity getRarity() { + return this.getItem().getRarity(this); + } + + public boolean isItemEnchantable() { + return !this.getItem().isItemTool(this) ? false : !this.isItemEnchanted(); + } + + public void addEnchantment(Enchantment var1, int var2) { + if(this.stackTagCompound == null) { + this.setTagCompound(new NBTTagCompound()); + } + + if(!this.stackTagCompound.hasKey("ench")) { + this.stackTagCompound.setTag("ench", new NBTTagList("ench")); + } + + NBTTagList var3 = (NBTTagList)this.stackTagCompound.getTag("ench"); + NBTTagCompound var4 = new NBTTagCompound(); + var4.setShort("id", (short)var1.effectId); + var4.setShort("lvl", (short)((byte)var2)); + var3.appendTag(var4); + } + + public boolean isItemEnchanted() { + return this.stackTagCompound != null && this.stackTagCompound.hasKey("ench"); + } + + public void setTagInfo(String var1, NBTBase var2) { + if(this.stackTagCompound == null) { + this.setTagCompound(new NBTTagCompound()); + } + + this.stackTagCompound.setTag(var1, var2); + } + + public boolean func_82835_x() { + return this.getItem().func_82788_x(); + } + + public boolean isOnItemFrame() { + return this.itemFrame != null; + } + + public void setItemFrame(EntityItemFrame var1) { + this.itemFrame = var1; + } + + public EntityItemFrame getItemFrame() { + return this.itemFrame; + } + + public int getRepairCost() { + return this.hasTagCompound() && this.stackTagCompound.hasKey("RepairCost") ? this.stackTagCompound.getInteger("RepairCost") : 0; + } + + public void setRepairCost(int var1) { + if(!this.hasTagCompound()) { + this.stackTagCompound = new NBTTagCompound("tag"); + } + + this.stackTagCompound.setInteger("RepairCost", var1); + } +} diff --git a/src/net/minecraft/src/ItemSword.java b/src/net/minecraft/src/ItemSword.java new file mode 100644 index 0000000..e04775d --- /dev/null +++ b/src/net/minecraft/src/ItemSword.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +public class ItemSword extends Item { + private int weaponDamage; + private final EnumToolMaterial toolMaterial; + + public ItemSword(int var1, EnumToolMaterial var2) { + super(var1); + this.toolMaterial = var2; + this.maxStackSize = 1; + this.setMaxDamage(var2.getMaxUses()); + this.setCreativeTab(CreativeTabs.tabCombat); + this.weaponDamage = 4 + var2.getDamageVsEntity(); + } + + public int func_82803_g() { + return this.toolMaterial.getDamageVsEntity(); + } + + public float getStrVsBlock(ItemStack var1, Block var2) { + if(var2.blockID == Block.web.blockID) { + return 15.0F; + } else { + Material var3 = var2.blockMaterial; + return var3 != Material.plants && var3 != Material.vine && var3 != Material.coral && var3 != Material.leaves && var3 != Material.pumpkin ? 1.0F : 1.5F; + } + } + + public boolean hitEntity(ItemStack var1, EntityLiving var2, EntityLiving var3) { + var1.damageItem(1, var3); + return true; + } + + public boolean onBlockDestroyed(ItemStack var1, World var2, int var3, int var4, int var5, int var6, EntityLiving var7) { + if((double)Block.blocksList[var3].getBlockHardness(var2, var4, var5, var6) != 0.0D) { + var1.damageItem(2, var7); + } + + return true; + } + + public int getDamageVsEntity(Entity var1) { + return this.weaponDamage; + } + + public boolean isFull3D() { + return true; + } + + public EnumAction getItemUseAction(ItemStack var1) { + return EnumAction.block; + } + + public int getMaxItemUseDuration(ItemStack var1) { + return 72000; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + var3.setItemInUse(var1, this.getMaxItemUseDuration(var1)); + return var1; + } + + public boolean canHarvestBlock(Block var1) { + return var1.blockID == Block.web.blockID; + } + + public int getItemEnchantability() { + return this.toolMaterial.getEnchantability(); + } + + public String getToolMaterialName() { + return this.toolMaterial.toString(); + } + + public boolean getIsRepairable(ItemStack var1, ItemStack var2) { + return this.toolMaterial.getToolCraftingMaterial() == var2.itemID ? true : super.getIsRepairable(var1, var2); + } +} diff --git a/src/net/minecraft/src/ItemTool.java b/src/net/minecraft/src/ItemTool.java new file mode 100644 index 0000000..97f2ccd --- /dev/null +++ b/src/net/minecraft/src/ItemTool.java @@ -0,0 +1,62 @@ +package net.minecraft.src; + +public class ItemTool extends Item { + private Block[] blocksEffectiveAgainst; + protected float efficiencyOnProperMaterial = 4.0F; + private int damageVsEntity; + protected EnumToolMaterial toolMaterial; + + protected ItemTool(int var1, int var2, EnumToolMaterial var3, Block[] var4) { + super(var1); + this.toolMaterial = var3; + this.blocksEffectiveAgainst = var4; + this.maxStackSize = 1; + this.setMaxDamage(var3.getMaxUses()); + this.efficiencyOnProperMaterial = var3.getEfficiencyOnProperMaterial(); + this.damageVsEntity = var2 + var3.getDamageVsEntity(); + this.setCreativeTab(CreativeTabs.tabTools); + } + + public float getStrVsBlock(ItemStack var1, Block var2) { + for(int var3 = 0; var3 < this.blocksEffectiveAgainst.length; ++var3) { + if(this.blocksEffectiveAgainst[var3] == var2) { + return this.efficiencyOnProperMaterial; + } + } + + return 1.0F; + } + + public boolean hitEntity(ItemStack var1, EntityLiving var2, EntityLiving var3) { + var1.damageItem(2, var3); + return true; + } + + public boolean onBlockDestroyed(ItemStack var1, World var2, int var3, int var4, int var5, int var6, EntityLiving var7) { + if((double)Block.blocksList[var3].getBlockHardness(var2, var4, var5, var6) != 0.0D) { + var1.damageItem(1, var7); + } + + return true; + } + + public int getDamageVsEntity(Entity var1) { + return this.damageVsEntity; + } + + public boolean isFull3D() { + return true; + } + + public int getItemEnchantability() { + return this.toolMaterial.getEnchantability(); + } + + public String getToolMaterialName() { + return this.toolMaterial.toString(); + } + + public boolean getIsRepairable(ItemStack var1, ItemStack var2) { + return this.toolMaterial.getToolCraftingMaterial() == var2.itemID ? true : super.getIsRepairable(var1, var2); + } +} diff --git a/src/net/minecraft/src/ItemWritableBook.java b/src/net/minecraft/src/ItemWritableBook.java new file mode 100644 index 0000000..bc39643 --- /dev/null +++ b/src/net/minecraft/src/ItemWritableBook.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +public class ItemWritableBook extends Item { + public ItemWritableBook(int var1) { + super(var1); + this.setMaxStackSize(1); + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + var3.displayGUIBook(var1); + return var1; + } + + public boolean getShareTag() { + return true; + } + + public static boolean validBookTagPages(NBTTagCompound var0) { + if(var0 == null) { + return false; + } else if(!var0.hasKey("pages")) { + return false; + } else { + NBTTagList var1 = (NBTTagList)var0.getTag("pages"); + + for(int var2 = 0; var2 < var1.tagCount(); ++var2) { + NBTTagString var3 = (NBTTagString)var1.tagAt(var2); + if(var3.data == null) { + return false; + } + + if(var3.data.length() > 256) { + return false; + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/KeyBinding.java b/src/net/minecraft/src/KeyBinding.java new file mode 100644 index 0000000..8325962 --- /dev/null +++ b/src/net/minecraft/src/KeyBinding.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class KeyBinding { + public static List keybindArray = new ArrayList(); + public static IntHashMap hash = new IntHashMap(); + public String keyDescription; + public int keyCode; + public boolean pressed; + public int pressTime = 0; + + public static void onTick(int var0) { + KeyBinding var1 = (KeyBinding)hash.lookup(var0); + if(var1 != null) { + ++var1.pressTime; + } + + } + + public static void setKeyBindState(int var0, boolean var1) { + KeyBinding var2 = (KeyBinding)hash.lookup(var0); + if(var2 != null) { + var2.pressed = var1; + } + + } + + public static void unPressAllKeys() { + Iterator var0 = keybindArray.iterator(); + + while(var0.hasNext()) { + KeyBinding var1 = (KeyBinding)var0.next(); + var1.unpressKey(); + } + + } + + public static void resetKeyBindingArrayAndHash() { + hash.clearMap(); + Iterator var0 = keybindArray.iterator(); + + while(var0.hasNext()) { + KeyBinding var1 = (KeyBinding)var0.next(); + hash.addKey(var1.keyCode, var1); + } + + } + + public KeyBinding(String var1, int var2) { + this.keyDescription = var1; + this.keyCode = var2; + keybindArray.add(this); + hash.addKey(var2, this); + } + + public boolean isPressed() { + if(this.pressTime == 0) { + return false; + } else { + --this.pressTime; + return true; + } + } + + private void unpressKey() { + this.pressTime = 0; + this.pressed = false; + } +} diff --git a/src/net/minecraft/src/LanServer.java b/src/net/minecraft/src/LanServer.java new file mode 100644 index 0000000..861f162 --- /dev/null +++ b/src/net/minecraft/src/LanServer.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +public class LanServer { + private String lanServerMotd; + private String lanServerIpPort; + private long timeLastSeen; + + public LanServer(String var1, String var2) { + this.lanServerMotd = var1; + this.lanServerIpPort = var2; + this.timeLastSeen = Minecraft.getSystemTime(); + } + + public String getServerMotd() { + return this.lanServerMotd; + } + + public String getServerIpPort() { + return this.lanServerIpPort; + } + + public void updateLastSeen() { + this.timeLastSeen = Minecraft.getSystemTime(); + } +} diff --git a/src/net/minecraft/src/LanServerList.java b/src/net/minecraft/src/LanServerList.java new file mode 100644 index 0000000..7008f12 --- /dev/null +++ b/src/net/minecraft/src/LanServerList.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.net.InetAddress; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; + +public class LanServerList { + private ArrayList listOfLanServers = new ArrayList(); + 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 func_77551_a(String var1, InetAddress var2) { + String var3 = ThreadLanServerPing.getMotdFromPingResponse(var1); + String var4 = ThreadLanServerPing.getAdFromPingResponse(var1); + if(var4 != null) { + int var5 = var4.indexOf(58); + if(var5 > 0) { + var4 = var2.getHostAddress() + var4.substring(var5); + } + + boolean var6 = false; + Iterator var7 = this.listOfLanServers.iterator(); + + while(var7.hasNext()) { + LanServer var8 = (LanServer)var7.next(); + if(var8.getServerIpPort().equals(var4)) { + var8.updateLastSeen(); + var6 = true; + break; + } + } + + if(!var6) { + this.listOfLanServers.add(new LanServer(var3, var4)); + this.wasUpdated = true; + } + + } + } +} diff --git a/src/net/minecraft/src/LoadingScreenRenderer.java b/src/net/minecraft/src/LoadingScreenRenderer.java new file mode 100644 index 0000000..c698c2e --- /dev/null +++ b/src/net/minecraft/src/LoadingScreenRenderer.java @@ -0,0 +1,125 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.Display; +import org.lwjgl.opengl.GL11; + +public class LoadingScreenRenderer implements IProgressUpdate { + private String field_73727_a = ""; + private Minecraft mc; + private String currentlyDisplayedText = ""; + private long field_73723_d = Minecraft.getSystemTime(); + private boolean field_73724_e = false; + + public LoadingScreenRenderer(Minecraft var1) { + this.mc = var1; + } + + public void resetProgressAndMessage(String var1) { + this.field_73724_e = false; + this.func_73722_d(var1); + } + + public void displayProgressMessage(String var1) { + this.field_73724_e = true; + this.func_73722_d(var1); + } + + public void func_73722_d(String var1) { + this.currentlyDisplayedText = var1; + if(!this.mc.running) { + if(!this.field_73724_e) { + throw new MinecraftError(); + } + } else { + ScaledResolution var2 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glOrtho(0.0D, var2.getScaledWidth_double(), var2.getScaledHeight_double(), 0.0D, 100.0D, 300.0D); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + GL11.glTranslatef(0.0F, 0.0F, -200.0F); + } + } + + public void resetProgresAndWorkingMessage(String var1) { + if(!this.mc.running) { + if(!this.field_73724_e) { + throw new MinecraftError(); + } + } else { + this.field_73723_d = 0L; + this.field_73727_a = var1; + this.setLoadingProgress(-1); + this.field_73723_d = 0L; + } + } + + public void setLoadingProgress(int var1) { + if(!this.mc.running) { + if(!this.field_73724_e) { + throw new MinecraftError(); + } + } else { + long var2 = Minecraft.getSystemTime(); + if(var2 - this.field_73723_d >= 100L) { + this.field_73723_d = var2; + ScaledResolution var4 = new ScaledResolution(this.mc.gameSettings, this.mc.displayWidth, this.mc.displayHeight); + int var5 = var4.getScaledWidth(); + int var6 = var4.getScaledHeight(); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glOrtho(0.0D, var4.getScaledWidth_double(), var4.getScaledHeight_double(), 0.0D, 100.0D, 300.0D); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + GL11.glTranslatef(0.0F, 0.0F, -200.0F); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT | GL11.GL_COLOR_BUFFER_BIT); + Tessellator var7 = Tessellator.instance; + this.mc.renderEngine.bindTexture("/gui/background.png"); + float var8 = 32.0F; + var7.startDrawingQuads(); + var7.setColorOpaque_I(4210752); + var7.addVertexWithUV(0.0D, (double)var6, 0.0D, 0.0D, (double)((float)var6 / var8)); + var7.addVertexWithUV((double)var5, (double)var6, 0.0D, (double)((float)var5 / var8), (double)((float)var6 / var8)); + var7.addVertexWithUV((double)var5, 0.0D, 0.0D, (double)((float)var5 / var8), 0.0D); + var7.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, 0.0D); + var7.draw(); + if(var1 >= 0) { + byte var9 = 100; + byte var10 = 2; + int var11 = var5 / 2 - var9 / 2; + int var12 = var6 / 2 + 16; + GL11.glDisable(GL11.GL_TEXTURE_2D); + var7.startDrawingQuads(); + var7.setColorOpaque_I(8421504); + var7.addVertex((double)var11, (double)var12, 0.0D); + var7.addVertex((double)var11, (double)(var12 + var10), 0.0D); + var7.addVertex((double)(var11 + var9), (double)(var12 + var10), 0.0D); + var7.addVertex((double)(var11 + var9), (double)var12, 0.0D); + var7.setColorOpaque_I(8454016); + var7.addVertex((double)var11, (double)var12, 0.0D); + var7.addVertex((double)var11, (double)(var12 + var10), 0.0D); + var7.addVertex((double)(var11 + var1), (double)(var12 + var10), 0.0D); + var7.addVertex((double)(var11 + var1), (double)var12, 0.0D); + var7.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + this.mc.fontRenderer.drawStringWithShadow(this.currentlyDisplayedText, (var5 - this.mc.fontRenderer.getStringWidth(this.currentlyDisplayedText)) / 2, var6 / 2 - 4 - 16, 16777215); + this.mc.fontRenderer.drawStringWithShadow(this.field_73727_a, (var5 - this.mc.fontRenderer.getStringWidth(this.field_73727_a)) / 2, var6 / 2 - 4 + 8, 16777215); + Display.update(); + + try { + Thread.yield(); + } catch (Exception var13) { + } + + } + } + } + + public void onNoMoreProgress() { + } +} diff --git a/src/net/minecraft/src/LogAgent.java b/src/net/minecraft/src/LogAgent.java new file mode 100644 index 0000000..56f004a --- /dev/null +++ b/src/net/minecraft/src/LogAgent.java @@ -0,0 +1,79 @@ +package net.minecraft.src; + +import java.util.logging.ConsoleHandler; +import java.util.logging.FileHandler; +import java.util.logging.Handler; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class LogAgent implements ILogAgent { + private final Logger serverLogger; + private final String logFile; + private final String loggerName; + private final String loggerPrefix; + + public LogAgent(String var1, String var2, String var3) { + this.serverLogger = Logger.getLogger(var1); + this.loggerName = var1; + this.loggerPrefix = var2; + this.logFile = var3; + this.setupLogger(); + } + + private void setupLogger() { + this.serverLogger.setUseParentHandlers(false); + Handler[] var1 = this.serverLogger.getHandlers(); + int var2 = var1.length; + + for(int var3 = 0; var3 < var2; ++var3) { + Handler var4 = var1[var3]; + this.serverLogger.removeHandler(var4); + } + + LogFormatter var6 = new LogFormatter(this, (LogAgentINNER1)null); + ConsoleHandler var7 = new ConsoleHandler(); + var7.setFormatter(var6); + this.serverLogger.addHandler(var7); + + try { + FileHandler var8 = new FileHandler(this.logFile, true); + var8.setFormatter(var6); + this.serverLogger.addHandler(var8); + } catch (Exception var5) { + this.serverLogger.log(Level.WARNING, "Failed to log " + this.loggerName + " to " + this.logFile, var5); + } + + } + + public void logInfo(String var1) { + this.serverLogger.log(Level.INFO, var1); + } + + public void logWarning(String var1) { + this.serverLogger.log(Level.WARNING, var1); + } + + public void logWarningFormatted(String var1, Object... var2) { + this.serverLogger.log(Level.WARNING, var1, var2); + } + + public void logWarningException(String var1, Throwable var2) { + this.serverLogger.log(Level.WARNING, var1, var2); + } + + public void logSevere(String var1) { + this.serverLogger.log(Level.SEVERE, var1); + } + + public void logSevereException(String var1, Throwable var2) { + this.serverLogger.log(Level.SEVERE, var1, var2); + } + + public void logFine(String var1) { + this.serverLogger.log(Level.FINE, var1); + } + + static String func_98237_a(LogAgent var0) { + return var0.loggerPrefix; + } +} diff --git a/src/net/minecraft/src/LogAgentINNER1.java b/src/net/minecraft/src/LogAgentINNER1.java new file mode 100644 index 0000000..9e23536 --- /dev/null +++ b/src/net/minecraft/src/LogAgentINNER1.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +class LogAgentINNER1 { +} diff --git a/src/net/minecraft/src/LogFormatter.java b/src/net/minecraft/src/LogFormatter.java new file mode 100644 index 0000000..b69d4d2 --- /dev/null +++ b/src/net/minecraft/src/LogFormatter.java @@ -0,0 +1,41 @@ +package net.minecraft.src; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.text.SimpleDateFormat; +import java.util.logging.Formatter; +import java.util.logging.LogRecord; + +class LogFormatter extends Formatter { + private SimpleDateFormat field_98228_b; + final LogAgent field_98229_a; + + private LogFormatter(LogAgent var1) { + this.field_98229_a = var1; + this.field_98228_b = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + } + + public String format(LogRecord var1) { + StringBuilder var2 = new StringBuilder(); + var2.append(this.field_98228_b.format(Long.valueOf(var1.getMillis()))); + if(LogAgent.func_98237_a(this.field_98229_a) != null) { + var2.append(LogAgent.func_98237_a(this.field_98229_a)); + } + + var2.append(" [").append(var1.getLevel().getName()).append("] "); + var2.append(this.formatMessage(var1)); + var2.append('\n'); + Throwable var3 = var1.getThrown(); + if(var3 != null) { + StringWriter var4 = new StringWriter(); + var3.printStackTrace(new PrintWriter(var4)); + var2.append(var4.toString()); + } + + return var2.toString(); + } + + LogFormatter(LogAgent var1, LogAgentINNER1 var2) { + this(var1); + } +} diff --git a/src/net/minecraft/src/LongHashMap.java b/src/net/minecraft/src/LongHashMap.java new file mode 100644 index 0000000..0082a34 --- /dev/null +++ b/src/net/minecraft/src/LongHashMap.java @@ -0,0 +1,149 @@ +package net.minecraft.src; + +public class LongHashMap { + private transient LongHashMapEntry[] hashArray = new LongHashMapEntry[16]; + private transient int numHashElements; + private int capacity = 12; + private final float percentUseable = 12.0F / 16.0F; + private transient volatile int modCount; + + private static int getHashedKey(long var0) { + return hash((int)(var0 ^ var0 >>> 32)); + } + + private static int hash(int var0) { + var0 ^= var0 >>> 20 ^ var0 >>> 12; + return var0 ^ var0 >>> 7 ^ var0 >>> 4; + } + + private static int getHashIndex(int var0, int var1) { + return var0 & var1 - 1; + } + + public int getNumHashElements() { + return this.numHashElements; + } + + public Object getValueByKey(long var1) { + int var3 = getHashedKey(var1); + + for(LongHashMapEntry var4 = this.hashArray[getHashIndex(var3, this.hashArray.length)]; var4 != null; var4 = var4.nextEntry) { + if(var4.key == var1) { + return var4.value; + } + } + + return null; + } + + public boolean containsItem(long var1) { + return this.getEntry(var1) != null; + } + + final LongHashMapEntry getEntry(long var1) { + int var3 = getHashedKey(var1); + + for(LongHashMapEntry var4 = this.hashArray[getHashIndex(var3, this.hashArray.length)]; var4 != null; var4 = var4.nextEntry) { + if(var4.key == var1) { + return var4; + } + } + + return null; + } + + public void add(long var1, Object var3) { + int var4 = getHashedKey(var1); + int var5 = getHashIndex(var4, this.hashArray.length); + + for(LongHashMapEntry var6 = this.hashArray[var5]; var6 != null; var6 = var6.nextEntry) { + if(var6.key == var1) { + var6.value = var3; + return; + } + } + + ++this.modCount; + this.createKey(var4, var1, var3, var5); + } + + private void resizeTable(int var1) { + LongHashMapEntry[] var2 = this.hashArray; + int var3 = var2.length; + if(var3 == 1073741824) { + this.capacity = Integer.MAX_VALUE; + } else { + LongHashMapEntry[] var4 = new LongHashMapEntry[var1]; + this.copyHashTableTo(var4); + this.hashArray = var4; + this.capacity = (int)((float)var1 * this.percentUseable); + } + } + + private void copyHashTableTo(LongHashMapEntry[] var1) { + LongHashMapEntry[] var2 = this.hashArray; + int var3 = var1.length; + + for(int var4 = 0; var4 < var2.length; ++var4) { + LongHashMapEntry var5 = var2[var4]; + if(var5 != null) { + var2[var4] = null; + + LongHashMapEntry var6; + do { + var6 = var5.nextEntry; + int var7 = getHashIndex(var5.hash, var3); + var5.nextEntry = var1[var7]; + var1[var7] = var5; + var5 = var6; + } while(var6 != null); + } + } + + } + + public Object remove(long var1) { + LongHashMapEntry var3 = this.removeKey(var1); + return var3 == null ? null : var3.value; + } + + final LongHashMapEntry removeKey(long var1) { + int var3 = getHashedKey(var1); + int var4 = getHashIndex(var3, this.hashArray.length); + LongHashMapEntry var5 = this.hashArray[var4]; + + LongHashMapEntry var6; + LongHashMapEntry var7; + for(var6 = var5; var6 != null; var6 = var7) { + var7 = var6.nextEntry; + if(var6.key == var1) { + ++this.modCount; + --this.numHashElements; + if(var5 == var6) { + this.hashArray[var4] = var7; + } else { + var5.nextEntry = var7; + } + + return var6; + } + + var5 = var6; + } + + return var6; + } + + private void createKey(int var1, long var2, Object var4, int var5) { + LongHashMapEntry var6 = this.hashArray[var5]; + this.hashArray[var5] = new LongHashMapEntry(var1, var2, var4, var6); + if(this.numHashElements++ >= this.capacity) { + this.resizeTable(2 * this.hashArray.length); + } + + } + + static int getHashCode(long var0) { + return getHashedKey(var0); + } +} diff --git a/src/net/minecraft/src/LongHashMapEntry.java b/src/net/minecraft/src/LongHashMapEntry.java new file mode 100644 index 0000000..675898e --- /dev/null +++ b/src/net/minecraft/src/LongHashMapEntry.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +class LongHashMapEntry { + final long key; + Object value; + LongHashMapEntry nextEntry; + final int hash; + + LongHashMapEntry(int var1, long var2, Object var4, LongHashMapEntry var5) { + this.value = var4; + this.nextEntry = var5; + this.key = var2; + this.hash = var1; + } + + public final long getKey() { + return this.key; + } + + public final Object getValue() { + return this.value; + } + + public final boolean equals(Object var1) { + if(!(var1 instanceof LongHashMapEntry)) { + return false; + } else { + LongHashMapEntry var2 = (LongHashMapEntry)var1; + Long var3 = Long.valueOf(this.getKey()); + Long var4 = Long.valueOf(var2.getKey()); + if(var3 == var4 || var3 != null && var3.equals(var4)) { + Object var5 = this.getValue(); + Object var6 = var2.getValue(); + if(var5 == var6 || var5 != null && var5.equals(var6)) { + return true; + } + } + + return false; + } + } + + public final int hashCode() { + return LongHashMap.getHashCode(this.key); + } + + public final String toString() { + return this.getKey() + "=" + this.getValue(); + } +} diff --git a/src/net/minecraft/src/LowerStringMap.java b/src/net/minecraft/src/LowerStringMap.java new file mode 100644 index 0000000..c998bb1 --- /dev/null +++ b/src/net/minecraft/src/LowerStringMap.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +import java.util.Collection; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; + +public class LowerStringMap implements Map { + private final Map internalMap = new LinkedHashMap(); + + public int size() { + return this.internalMap.size(); + } + + public boolean isEmpty() { + return this.internalMap.isEmpty(); + } + + public boolean containsKey(Object var1) { + return this.internalMap.containsKey(var1.toString().toLowerCase()); + } + + public boolean containsValue(Object var1) { + return this.internalMap.containsKey(var1); + } + + public Object get(Object var1) { + return this.internalMap.get(var1.toString().toLowerCase()); + } + + public Object putLower(String var1, Object var2) { + return this.internalMap.put(var1.toLowerCase(), var2); + } + + public Object remove(Object var1) { + return this.internalMap.remove(var1.toString().toLowerCase()); + } + + public void putAll(Map var1) { + Iterator var2 = var1.entrySet().iterator(); + + while(var2.hasNext()) { + Entry var3 = (Entry)var2.next(); + this.putLower((String)var3.getKey(), var3.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(); + } + + public Object put(Object var1, Object var2) { + return this.putLower((String)var1, var2); + } +} diff --git a/src/net/minecraft/src/MD5String.java b/src/net/minecraft/src/MD5String.java new file mode 100644 index 0000000..cd2d9a1 --- /dev/null +++ b/src/net/minecraft/src/MD5String.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import java.math.BigInteger; +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; + +public class MD5String { + private String salt; + + public MD5String(String var1) { + this.salt = var1; + } + + public String getMD5String(String var1) { + try { + String var2 = this.salt + var1; + MessageDigest var3 = MessageDigest.getInstance("MD5"); + var3.update(var2.getBytes(), 0, var2.length()); + return (new BigInteger(1, var3.digest())).toString(16); + } catch (NoSuchAlgorithmException var4) { + throw new RuntimeException(var4); + } + } +} diff --git a/src/net/minecraft/src/MapColor.java b/src/net/minecraft/src/MapColor.java new file mode 100644 index 0000000..cb39b51 --- /dev/null +++ b/src/net/minecraft/src/MapColor.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public class MapColor { + public static final MapColor[] mapColorArray = new MapColor[16]; + public static final MapColor airColor = new MapColor(0, 0); + public static final MapColor grassColor = new MapColor(1, 8368696); + public static final MapColor sandColor = new MapColor(2, 16247203); + public static final MapColor clothColor = new MapColor(3, 10987431); + public static final MapColor tntColor = new MapColor(4, 16711680); + public static final MapColor iceColor = new MapColor(5, 10526975); + public static final MapColor ironColor = new MapColor(6, 10987431); + public static final MapColor foliageColor = new MapColor(7, 31744); + public static final MapColor snowColor = new MapColor(8, 16777215); + public static final MapColor clayColor = new MapColor(9, 10791096); + public static final MapColor dirtColor = new MapColor(10, 12020271); + public static final MapColor stoneColor = new MapColor(11, 7368816); + public static final MapColor waterColor = new MapColor(12, 4210943); + public static final MapColor woodColor = new MapColor(13, 6837042); + public final int colorValue; + public final int colorIndex; + + private MapColor(int var1, int var2) { + this.colorIndex = var1; + this.colorValue = var2; + mapColorArray[var1] = this; + } +} diff --git a/src/net/minecraft/src/MapCoord.java b/src/net/minecraft/src/MapCoord.java new file mode 100644 index 0000000..f865482 --- /dev/null +++ b/src/net/minecraft/src/MapCoord.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class MapCoord { + public byte iconSize; + public byte centerX; + public byte centerZ; + public byte iconRotation; + final MapData data; + + public MapCoord(MapData var1, byte var2, byte var3, byte var4, byte var5) { + this.data = var1; + this.iconSize = var2; + this.centerX = var3; + this.centerZ = var4; + this.iconRotation = var5; + } +} diff --git a/src/net/minecraft/src/MapData.java b/src/net/minecraft/src/MapData.java new file mode 100644 index 0000000..13b3e1b --- /dev/null +++ b/src/net/minecraft/src/MapData.java @@ -0,0 +1,201 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +public class MapData extends WorldSavedData { + public int xCenter; + public int zCenter; + public byte dimension; + public byte scale; + public byte[] colors = new byte[16384]; + public List playersArrayList = new ArrayList(); + private Map playersHashMap = new HashMap(); + public Map playersVisibleOnMap = new LinkedHashMap(); + + public MapData(String var1) { + super(var1); + } + + public void readFromNBT(NBTTagCompound var1) { + this.dimension = var1.getByte("dimension"); + this.xCenter = var1.getInteger("xCenter"); + this.zCenter = var1.getInteger("zCenter"); + this.scale = var1.getByte("scale"); + if(this.scale < 0) { + this.scale = 0; + } + + if(this.scale > 4) { + this.scale = 4; + } + + short var2 = var1.getShort("width"); + short var3 = var1.getShort("height"); + if(var2 == 128 && var3 == 128) { + this.colors = var1.getByteArray("colors"); + } else { + byte[] var4 = var1.getByteArray("colors"); + this.colors = new byte[16384]; + int var5 = (128 - var2) / 2; + int var6 = (128 - var3) / 2; + + for(int var7 = 0; var7 < var3; ++var7) { + int var8 = var7 + var6; + if(var8 >= 0 || var8 < 128) { + for(int var9 = 0; var9 < var2; ++var9) { + int var10 = var9 + var5; + if(var10 >= 0 || var10 < 128) { + this.colors[var10 + var8 * 128] = var4[var9 + var7 * var2]; + } + } + } + } + } + + } + + public void writeToNBT(NBTTagCompound var1) { + var1.setByte("dimension", this.dimension); + var1.setInteger("xCenter", this.xCenter); + var1.setInteger("zCenter", this.zCenter); + var1.setByte("scale", this.scale); + var1.setShort("width", (short)128); + var1.setShort("height", (short)128); + var1.setByteArray("colors", this.colors); + } + + public void updateVisiblePlayers(EntityPlayer var1, ItemStack var2) { + if(!this.playersHashMap.containsKey(var1)) { + MapInfo var3 = new MapInfo(this, var1); + this.playersHashMap.put(var1, var3); + this.playersArrayList.add(var3); + } + + if(!var1.inventory.hasItemStack(var2)) { + this.playersVisibleOnMap.remove(var1.getCommandSenderName()); + } + + for(int var5 = 0; var5 < this.playersArrayList.size(); ++var5) { + MapInfo var4 = (MapInfo)this.playersArrayList.get(var5); + if(!var4.entityplayerObj.isDead && (var4.entityplayerObj.inventory.hasItemStack(var2) || var2.isOnItemFrame())) { + if(!var2.isOnItemFrame() && var4.entityplayerObj.dimension == this.dimension) { + this.func_82567_a(0, var4.entityplayerObj.worldObj, var4.entityplayerObj.getCommandSenderName(), var4.entityplayerObj.posX, var4.entityplayerObj.posZ, (double)var4.entityplayerObj.rotationYaw); + } + } else { + this.playersHashMap.remove(var4.entityplayerObj); + this.playersArrayList.remove(var4); + } + } + + if(var2.isOnItemFrame()) { + this.func_82567_a(1, var1.worldObj, "frame-" + var2.getItemFrame().entityId, (double)var2.getItemFrame().xPosition, (double)var2.getItemFrame().zPosition, (double)(var2.getItemFrame().hangingDirection * 90)); + } + + } + + private void func_82567_a(int var1, World var2, String var3, double var4, double var6, double var8) { + int var10 = 1 << this.scale; + float var11 = (float)(var4 - (double)this.xCenter) / (float)var10; + float var12 = (float)(var6 - (double)this.zCenter) / (float)var10; + byte var13 = (byte)((int)((double)(var11 * 2.0F) + 0.5D)); + byte var14 = (byte)((int)((double)(var12 * 2.0F) + 0.5D)); + byte var16 = 63; + byte var15; + if(var11 >= (float)(-var16) && var12 >= (float)(-var16) && var11 <= (float)var16 && var12 <= (float)var16) { + var8 += var8 < 0.0D ? -8.0D : 8.0D; + var15 = (byte)((int)(var8 * 16.0D / 360.0D)); + if(this.dimension < 0) { + int var17 = (int)(var2.getWorldInfo().getWorldTime() / 10L); + var15 = (byte)(var17 * var17 * 34187121 + var17 * 121 >> 15 & 15); + } + } else { + if(Math.abs(var11) >= 320.0F || Math.abs(var12) >= 320.0F) { + this.playersVisibleOnMap.remove(var3); + return; + } + + var1 = 6; + var15 = 0; + if(var11 <= (float)(-var16)) { + var13 = (byte)((int)((double)(var16 * 2) + 2.5D)); + } + + if(var12 <= (float)(-var16)) { + var14 = (byte)((int)((double)(var16 * 2) + 2.5D)); + } + + if(var11 >= (float)var16) { + var13 = (byte)(var16 * 2 + 1); + } + + if(var12 >= (float)var16) { + var14 = (byte)(var16 * 2 + 1); + } + } + + this.playersVisibleOnMap.put(var3, new MapCoord(this, (byte)var1, var13, var14, var15)); + } + + public byte[] getUpdatePacketData(ItemStack var1, World var2, EntityPlayer var3) { + MapInfo var4 = (MapInfo)this.playersHashMap.get(var3); + return var4 == null ? null : var4.getPlayersOnMap(var1); + } + + public void setColumnDirty(int var1, int var2, int var3) { + super.markDirty(); + + for(int var4 = 0; var4 < this.playersArrayList.size(); ++var4) { + MapInfo var5 = (MapInfo)this.playersArrayList.get(var4); + if(var5.field_76209_b[var1] < 0 || var5.field_76209_b[var1] > var2) { + var5.field_76209_b[var1] = var2; + } + + if(var5.field_76210_c[var1] < 0 || var5.field_76210_c[var1] < var3) { + var5.field_76210_c[var1] = var3; + } + } + + } + + public void updateMPMapData(byte[] var1) { + int var2; + if(var1[0] == 0) { + var2 = var1[1] & 255; + int var3 = var1[2] & 255; + + for(int var4 = 0; var4 < var1.length - 3; ++var4) { + this.colors[(var4 + var3) * 128 + var2] = var1[var4 + 3]; + } + + this.markDirty(); + } else if(var1[0] == 1) { + this.playersVisibleOnMap.clear(); + + for(var2 = 0; var2 < (var1.length - 1) / 3; ++var2) { + byte var7 = (byte)(var1[var2 * 3 + 1] >> 4); + byte var8 = var1[var2 * 3 + 2]; + byte var5 = var1[var2 * 3 + 3]; + byte var6 = (byte)(var1[var2 * 3 + 1] & 15); + this.playersVisibleOnMap.put("icon-" + var2, new MapCoord(this, var7, var8, var5, var6)); + } + } else if(var1[0] == 2) { + this.scale = var1[1]; + } + + } + + public MapInfo func_82568_a(EntityPlayer var1) { + MapInfo var2 = (MapInfo)this.playersHashMap.get(var1); + if(var2 == null) { + var2 = new MapInfo(this, var1); + this.playersHashMap.put(var1, var2); + this.playersArrayList.add(var2); + } + + return var2; + } +} diff --git a/src/net/minecraft/src/MapGenBase.java b/src/net/minecraft/src/MapGenBase.java new file mode 100644 index 0000000..6330513 --- /dev/null +++ b/src/net/minecraft/src/MapGenBase.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +import java.util.Random; + +public class MapGenBase { + protected int range = 8; + protected Random rand = new Random(); + protected World worldObj; + + public void generate(IChunkProvider var1, World var2, int var3, int var4, byte[] var5) { + int var6 = this.range; + this.worldObj = var2; + this.rand.setSeed(var2.getSeed()); + long var7 = this.rand.nextLong(); + long var9 = this.rand.nextLong(); + + for(int var11 = var3 - var6; var11 <= var3 + var6; ++var11) { + for(int var12 = var4 - var6; var12 <= var4 + var6; ++var12) { + long var13 = (long)var11 * var7; + long var15 = (long)var12 * var9; + this.rand.setSeed(var13 ^ var15 ^ var2.getSeed()); + this.recursiveGenerate(var2, var11, var12, var3, var4, var5); + } + } + + } + + protected void recursiveGenerate(World var1, int var2, int var3, int var4, int var5, byte[] var6) { + } +} diff --git a/src/net/minecraft/src/MapGenCaves.java b/src/net/minecraft/src/MapGenCaves.java new file mode 100644 index 0000000..3d6373f --- /dev/null +++ b/src/net/minecraft/src/MapGenCaves.java @@ -0,0 +1,190 @@ +package net.minecraft.src; + +import java.util.Random; + +public class MapGenCaves extends MapGenBase { + protected void generateLargeCaveNode(long var1, int var3, int var4, byte[] var5, double var6, double var8, double var10) { + this.generateCaveNode(var1, var3, var4, var5, var6, var8, var10, 1.0F + this.rand.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + } + + protected void generateCaveNode(long var1, int var3, int var4, byte[] var5, double var6, double var8, double var10, float var12, float var13, float var14, int var15, int var16, double var17) { + double var19 = (double)(var3 * 16 + 8); + double var21 = (double)(var4 * 16 + 8); + float var23 = 0.0F; + float var24 = 0.0F; + Random var25 = new Random(var1); + if(var16 <= 0) { + int var26 = this.range * 16 - 16; + var16 = var26 - var25.nextInt(var26 / 4); + } + + boolean var54 = false; + if(var15 == -1) { + var15 = var16 / 2; + var54 = true; + } + + int var27 = var25.nextInt(var16 / 2) + var16 / 4; + + for(boolean var28 = var25.nextInt(6) == 0; var15 < var16; ++var15) { + double var29 = 1.5D + (double)(MathHelper.sin((float)var15 * (float)Math.PI / (float)var16) * var12 * 1.0F); + double var31 = var29 * var17; + float var33 = MathHelper.cos(var14); + float var34 = MathHelper.sin(var14); + var6 += (double)(MathHelper.cos(var13) * var33); + var8 += (double)var34; + var10 += (double)(MathHelper.sin(var13) * var33); + if(var28) { + var14 *= 0.92F; + } else { + var14 *= 0.7F; + } + + var14 += var24 * 0.1F; + var13 += var23 * 0.1F; + var24 *= 0.9F; + var23 *= 12.0F / 16.0F; + var24 += (var25.nextFloat() - var25.nextFloat()) * var25.nextFloat() * 2.0F; + var23 += (var25.nextFloat() - var25.nextFloat()) * var25.nextFloat() * 4.0F; + if(!var54 && var15 == var27 && var12 > 1.0F && var16 > 0) { + this.generateCaveNode(var25.nextLong(), var3, var4, var5, var6, var8, var10, var25.nextFloat() * 0.5F + 0.5F, var13 - (float)Math.PI * 0.5F, var14 / 3.0F, var15, var16, 1.0D); + this.generateCaveNode(var25.nextLong(), var3, var4, var5, var6, var8, var10, var25.nextFloat() * 0.5F + 0.5F, var13 + (float)Math.PI * 0.5F, var14 / 3.0F, var15, var16, 1.0D); + return; + } + + if(var54 || var25.nextInt(4) != 0) { + double var35 = var6 - var19; + double var37 = var10 - var21; + double var39 = (double)(var16 - var15); + double var41 = (double)(var12 + 2.0F + 16.0F); + if(var35 * var35 + var37 * var37 - var39 * var39 > var41 * var41) { + return; + } + + if(var6 >= var19 - 16.0D - var29 * 2.0D && var10 >= var21 - 16.0D - var29 * 2.0D && var6 <= var19 + 16.0D + var29 * 2.0D && var10 <= var21 + 16.0D + var29 * 2.0D) { + int var55 = MathHelper.floor_double(var6 - var29) - var3 * 16 - 1; + int var36 = MathHelper.floor_double(var6 + var29) - var3 * 16 + 1; + int var56 = MathHelper.floor_double(var8 - var31) - 1; + int var38 = MathHelper.floor_double(var8 + var31) + 1; + int var57 = MathHelper.floor_double(var10 - var29) - var4 * 16 - 1; + int var40 = MathHelper.floor_double(var10 + var29) - var4 * 16 + 1; + if(var55 < 0) { + var55 = 0; + } + + if(var36 > 16) { + var36 = 16; + } + + if(var56 < 1) { + var56 = 1; + } + + if(var38 > 120) { + var38 = 120; + } + + if(var57 < 0) { + var57 = 0; + } + + if(var40 > 16) { + var40 = 16; + } + + boolean var58 = false; + + int var42; + int var45; + for(var42 = var55; !var58 && var42 < var36; ++var42) { + for(int var43 = var57; !var58 && var43 < var40; ++var43) { + for(int var44 = var38 + 1; !var58 && var44 >= var56 - 1; --var44) { + var45 = (var42 * 16 + var43) * 128 + var44; + if(var44 >= 0 && var44 < 128) { + if(var5[var45] == Block.waterMoving.blockID || var5[var45] == Block.waterStill.blockID) { + var58 = true; + } + + if(var44 != var56 - 1 && var42 != var55 && var42 != var36 - 1 && var43 != var57 && var43 != var40 - 1) { + var44 = var56; + } + } + } + } + } + + if(!var58) { + for(var42 = var55; var42 < var36; ++var42) { + double var59 = ((double)(var42 + var3 * 16) + 0.5D - var6) / var29; + + for(var45 = var57; var45 < var40; ++var45) { + double var46 = ((double)(var45 + var4 * 16) + 0.5D - var10) / var29; + int var48 = (var42 * 16 + var45) * 128 + var38; + boolean var49 = false; + if(var59 * var59 + var46 * var46 < 1.0D) { + for(int var50 = var38 - 1; var50 >= var56; --var50) { + double var51 = ((double)var50 + 0.5D - var8) / var31; + if(var51 > -0.7D && var59 * var59 + var51 * var51 + var46 * var46 < 1.0D) { + byte var53 = var5[var48]; + if(var53 == Block.grass.blockID) { + var49 = true; + } + + if(var53 == Block.stone.blockID || var53 == Block.dirt.blockID || var53 == Block.grass.blockID) { + if(var50 < 10) { + var5[var48] = (byte)Block.lavaMoving.blockID; + } else { + var5[var48] = 0; + if(var49 && var5[var48 - 1] == Block.dirt.blockID) { + var5[var48 - 1] = this.worldObj.getBiomeGenForCoords(var42 + var3 * 16, var45 + var4 * 16).topBlock; + } + } + } + } + + --var48; + } + } + } + } + + if(var54) { + break; + } + } + } + } + } + + } + + protected void recursiveGenerate(World var1, int var2, int var3, int var4, int var5, byte[] var6) { + int var7 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(40) + 1) + 1); + if(this.rand.nextInt(15) != 0) { + var7 = 0; + } + + for(int var8 = 0; var8 < var7; ++var8) { + double var9 = (double)(var2 * 16 + this.rand.nextInt(16)); + double var11 = (double)this.rand.nextInt(this.rand.nextInt(120) + 8); + double var13 = (double)(var3 * 16 + this.rand.nextInt(16)); + int var15 = 1; + if(this.rand.nextInt(4) == 0) { + this.generateLargeCaveNode(this.rand.nextLong(), var4, var5, var6, var9, var11, var13); + var15 += this.rand.nextInt(4); + } + + for(int var16 = 0; var16 < var15; ++var16) { + float var17 = this.rand.nextFloat() * (float)Math.PI * 2.0F; + float var18 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F; + float var19 = this.rand.nextFloat() * 2.0F + this.rand.nextFloat(); + if(this.rand.nextInt(10) == 0) { + var19 *= this.rand.nextFloat() * this.rand.nextFloat() * 3.0F + 1.0F; + } + + this.generateCaveNode(this.rand.nextLong(), var4, var5, var6, var9, var11, var13, var19, var17, var18, 0, 0, 1.0D); + } + } + + } +} diff --git a/src/net/minecraft/src/MapGenCavesHell.java b/src/net/minecraft/src/MapGenCavesHell.java new file mode 100644 index 0000000..2abc58e --- /dev/null +++ b/src/net/minecraft/src/MapGenCavesHell.java @@ -0,0 +1,173 @@ +package net.minecraft.src; + +import java.util.Random; + +public class MapGenCavesHell extends MapGenBase { + protected void generateLargeCaveNode(long var1, int var3, int var4, byte[] var5, double var6, double var8, double var10) { + this.generateCaveNode(var1, var3, var4, var5, var6, var8, var10, 1.0F + this.rand.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + } + + protected void generateCaveNode(long var1, int var3, int var4, byte[] var5, double var6, double var8, double var10, float var12, float var13, float var14, int var15, int var16, double var17) { + double var19 = (double)(var3 * 16 + 8); + double var21 = (double)(var4 * 16 + 8); + float var23 = 0.0F; + float var24 = 0.0F; + Random var25 = new Random(var1); + if(var16 <= 0) { + int var26 = this.range * 16 - 16; + var16 = var26 - var25.nextInt(var26 / 4); + } + + boolean var53 = false; + if(var15 == -1) { + var15 = var16 / 2; + var53 = true; + } + + int var27 = var25.nextInt(var16 / 2) + var16 / 4; + + for(boolean var28 = var25.nextInt(6) == 0; var15 < var16; ++var15) { + double var29 = 1.5D + (double)(MathHelper.sin((float)var15 * (float)Math.PI / (float)var16) * var12 * 1.0F); + double var31 = var29 * var17; + float var33 = MathHelper.cos(var14); + float var34 = MathHelper.sin(var14); + var6 += (double)(MathHelper.cos(var13) * var33); + var8 += (double)var34; + var10 += (double)(MathHelper.sin(var13) * var33); + if(var28) { + var14 *= 0.92F; + } else { + var14 *= 0.7F; + } + + var14 += var24 * 0.1F; + var13 += var23 * 0.1F; + var24 *= 0.9F; + var23 *= 12.0F / 16.0F; + var24 += (var25.nextFloat() - var25.nextFloat()) * var25.nextFloat() * 2.0F; + var23 += (var25.nextFloat() - var25.nextFloat()) * var25.nextFloat() * 4.0F; + if(!var53 && var15 == var27 && var12 > 1.0F) { + this.generateCaveNode(var25.nextLong(), var3, var4, var5, var6, var8, var10, var25.nextFloat() * 0.5F + 0.5F, var13 - (float)Math.PI * 0.5F, var14 / 3.0F, var15, var16, 1.0D); + this.generateCaveNode(var25.nextLong(), var3, var4, var5, var6, var8, var10, var25.nextFloat() * 0.5F + 0.5F, var13 + (float)Math.PI * 0.5F, var14 / 3.0F, var15, var16, 1.0D); + return; + } + + if(var53 || var25.nextInt(4) != 0) { + double var35 = var6 - var19; + double var37 = var10 - var21; + double var39 = (double)(var16 - var15); + double var41 = (double)(var12 + 2.0F + 16.0F); + if(var35 * var35 + var37 * var37 - var39 * var39 > var41 * var41) { + return; + } + + if(var6 >= var19 - 16.0D - var29 * 2.0D && var10 >= var21 - 16.0D - var29 * 2.0D && var6 <= var19 + 16.0D + var29 * 2.0D && var10 <= var21 + 16.0D + var29 * 2.0D) { + int var54 = MathHelper.floor_double(var6 - var29) - var3 * 16 - 1; + int var36 = MathHelper.floor_double(var6 + var29) - var3 * 16 + 1; + int var55 = MathHelper.floor_double(var8 - var31) - 1; + int var38 = MathHelper.floor_double(var8 + var31) + 1; + int var56 = MathHelper.floor_double(var10 - var29) - var4 * 16 - 1; + int var40 = MathHelper.floor_double(var10 + var29) - var4 * 16 + 1; + if(var54 < 0) { + var54 = 0; + } + + if(var36 > 16) { + var36 = 16; + } + + if(var55 < 1) { + var55 = 1; + } + + if(var38 > 120) { + var38 = 120; + } + + if(var56 < 0) { + var56 = 0; + } + + if(var40 > 16) { + var40 = 16; + } + + boolean var57 = false; + + int var42; + int var45; + for(var42 = var54; !var57 && var42 < var36; ++var42) { + for(int var43 = var56; !var57 && var43 < var40; ++var43) { + for(int var44 = var38 + 1; !var57 && var44 >= var55 - 1; --var44) { + var45 = (var42 * 16 + var43) * 128 + var44; + if(var44 >= 0 && var44 < 128) { + if(var5[var45] == Block.lavaMoving.blockID || var5[var45] == Block.lavaStill.blockID) { + var57 = true; + } + + if(var44 != var55 - 1 && var42 != var54 && var42 != var36 - 1 && var43 != var56 && var43 != var40 - 1) { + var44 = var55; + } + } + } + } + } + + if(!var57) { + for(var42 = var54; var42 < var36; ++var42) { + double var58 = ((double)(var42 + var3 * 16) + 0.5D - var6) / var29; + + for(var45 = var56; var45 < var40; ++var45) { + double var46 = ((double)(var45 + var4 * 16) + 0.5D - var10) / var29; + int var48 = (var42 * 16 + var45) * 128 + var38; + + for(int var49 = var38 - 1; var49 >= var55; --var49) { + double var50 = ((double)var49 + 0.5D - var8) / var31; + if(var50 > -0.7D && var58 * var58 + var50 * var50 + var46 * var46 < 1.0D) { + byte var52 = var5[var48]; + if(var52 == Block.netherrack.blockID || var52 == Block.dirt.blockID || var52 == Block.grass.blockID) { + var5[var48] = 0; + } + } + + --var48; + } + } + } + + if(var53) { + break; + } + } + } + } + } + + } + + protected void recursiveGenerate(World var1, int var2, int var3, int var4, int var5, byte[] var6) { + int var7 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(10) + 1) + 1); + if(this.rand.nextInt(5) != 0) { + var7 = 0; + } + + for(int var8 = 0; var8 < var7; ++var8) { + double var9 = (double)(var2 * 16 + this.rand.nextInt(16)); + double var11 = (double)this.rand.nextInt(128); + double var13 = (double)(var3 * 16 + this.rand.nextInt(16)); + int var15 = 1; + if(this.rand.nextInt(4) == 0) { + this.generateLargeCaveNode(this.rand.nextLong(), var4, var5, var6, var9, var11, var13); + var15 += this.rand.nextInt(4); + } + + for(int var16 = 0; var16 < var15; ++var16) { + float var17 = this.rand.nextFloat() * (float)Math.PI * 2.0F; + float var18 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F; + float var19 = this.rand.nextFloat() * 2.0F + this.rand.nextFloat(); + this.generateCaveNode(this.rand.nextLong(), var4, var5, var6, var9, var11, var13, var19 * 2.0F, var17, var18, 0, 0, 0.5D); + } + } + + } +} diff --git a/src/net/minecraft/src/MapGenMineshaft.java b/src/net/minecraft/src/MapGenMineshaft.java new file mode 100644 index 0000000..d535714 --- /dev/null +++ b/src/net/minecraft/src/MapGenMineshaft.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +public class MapGenMineshaft extends MapGenStructure { + private double field_82673_e = 0.01D; + + public MapGenMineshaft() { + } + + public MapGenMineshaft(Map var1) { + Iterator var2 = var1.entrySet().iterator(); + + while(var2.hasNext()) { + Entry var3 = (Entry)var2.next(); + if(((String)var3.getKey()).equals("chance")) { + this.field_82673_e = MathHelper.parseDoubleWithDefault((String)var3.getValue(), this.field_82673_e); + } + } + + } + + protected boolean canSpawnStructureAtCoords(int var1, int var2) { + return this.rand.nextDouble() < this.field_82673_e && this.rand.nextInt(80) < Math.max(Math.abs(var1), Math.abs(var2)); + } + + protected StructureStart getStructureStart(int var1, int var2) { + return new StructureMineshaftStart(this.worldObj, this.rand, var1, var2); + } +} diff --git a/src/net/minecraft/src/MapGenNetherBridge.java b/src/net/minecraft/src/MapGenNetherBridge.java new file mode 100644 index 0000000..01f475b --- /dev/null +++ b/src/net/minecraft/src/MapGenNetherBridge.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class MapGenNetherBridge extends MapGenStructure { + private List spawnList = new ArrayList(); + + public MapGenNetherBridge() { + this.spawnList.add(new SpawnListEntry(EntityBlaze.class, 10, 2, 3)); + this.spawnList.add(new SpawnListEntry(EntityPigZombie.class, 5, 4, 4)); + this.spawnList.add(new SpawnListEntry(EntitySkeleton.class, 10, 4, 4)); + this.spawnList.add(new SpawnListEntry(EntityMagmaCube.class, 3, 4, 4)); + } + + public List getSpawnList() { + return this.spawnList; + } + + protected boolean canSpawnStructureAtCoords(int var1, int var2) { + int var3 = var1 >> 4; + int var4 = var2 >> 4; + this.rand.setSeed((long)(var3 ^ var4 << 4) ^ this.worldObj.getSeed()); + this.rand.nextInt(); + return this.rand.nextInt(3) != 0 ? false : (var1 != (var3 << 4) + 4 + this.rand.nextInt(8) ? false : var2 == (var4 << 4) + 4 + this.rand.nextInt(8)); + } + + protected StructureStart getStructureStart(int var1, int var2) { + return new StructureNetherBridgeStart(this.worldObj, this.rand, var1, var2); + } +} diff --git a/src/net/minecraft/src/MapGenRavine.java b/src/net/minecraft/src/MapGenRavine.java new file mode 100644 index 0000000..c9ec208 --- /dev/null +++ b/src/net/minecraft/src/MapGenRavine.java @@ -0,0 +1,174 @@ +package net.minecraft.src; + +import java.util.Random; + +public class MapGenRavine extends MapGenBase { + private float[] field_75046_d = new float[1024]; + + protected void generateRavine(long var1, int var3, int var4, byte[] var5, double var6, double var8, double var10, float var12, float var13, float var14, int var15, int var16, double var17) { + Random var19 = new Random(var1); + double var20 = (double)(var3 * 16 + 8); + double var22 = (double)(var4 * 16 + 8); + float var24 = 0.0F; + float var25 = 0.0F; + if(var16 <= 0) { + int var26 = this.range * 16 - 16; + var16 = var26 - var19.nextInt(var26 / 4); + } + + boolean var53 = false; + if(var15 == -1) { + var15 = var16 / 2; + var53 = true; + } + + float var27 = 1.0F; + + for(int var28 = 0; var28 < 128; ++var28) { + if(var28 == 0 || var19.nextInt(3) == 0) { + var27 = 1.0F + var19.nextFloat() * var19.nextFloat() * 1.0F; + } + + this.field_75046_d[var28] = var27 * var27; + } + + for(; var15 < var16; ++var15) { + double var54 = 1.5D + (double)(MathHelper.sin((float)var15 * (float)Math.PI / (float)var16) * var12 * 1.0F); + double var30 = var54 * var17; + var54 *= (double)var19.nextFloat() * 0.25D + 0.75D; + var30 *= (double)var19.nextFloat() * 0.25D + 0.75D; + float var32 = MathHelper.cos(var14); + float var33 = MathHelper.sin(var14); + var6 += (double)(MathHelper.cos(var13) * var32); + var8 += (double)var33; + var10 += (double)(MathHelper.sin(var13) * var32); + var14 *= 0.7F; + var14 += var25 * 0.05F; + var13 += var24 * 0.05F; + var25 *= 0.8F; + var24 *= 0.5F; + var25 += (var19.nextFloat() - var19.nextFloat()) * var19.nextFloat() * 2.0F; + var24 += (var19.nextFloat() - var19.nextFloat()) * var19.nextFloat() * 4.0F; + if(var53 || var19.nextInt(4) != 0) { + double var34 = var6 - var20; + double var36 = var10 - var22; + double var38 = (double)(var16 - var15); + double var40 = (double)(var12 + 2.0F + 16.0F); + if(var34 * var34 + var36 * var36 - var38 * var38 > var40 * var40) { + return; + } + + if(var6 >= var20 - 16.0D - var54 * 2.0D && var10 >= var22 - 16.0D - var54 * 2.0D && var6 <= var20 + 16.0D + var54 * 2.0D && var10 <= var22 + 16.0D + var54 * 2.0D) { + int var55 = MathHelper.floor_double(var6 - var54) - var3 * 16 - 1; + int var35 = MathHelper.floor_double(var6 + var54) - var3 * 16 + 1; + int var56 = MathHelper.floor_double(var8 - var30) - 1; + int var37 = MathHelper.floor_double(var8 + var30) + 1; + int var57 = MathHelper.floor_double(var10 - var54) - var4 * 16 - 1; + int var39 = MathHelper.floor_double(var10 + var54) - var4 * 16 + 1; + if(var55 < 0) { + var55 = 0; + } + + if(var35 > 16) { + var35 = 16; + } + + if(var56 < 1) { + var56 = 1; + } + + if(var37 > 120) { + var37 = 120; + } + + if(var57 < 0) { + var57 = 0; + } + + if(var39 > 16) { + var39 = 16; + } + + boolean var58 = false; + + int var41; + int var44; + for(var41 = var55; !var58 && var41 < var35; ++var41) { + for(int var42 = var57; !var58 && var42 < var39; ++var42) { + for(int var43 = var37 + 1; !var58 && var43 >= var56 - 1; --var43) { + var44 = (var41 * 16 + var42) * 128 + var43; + if(var43 >= 0 && var43 < 128) { + if(var5[var44] == Block.waterMoving.blockID || var5[var44] == Block.waterStill.blockID) { + var58 = true; + } + + if(var43 != var56 - 1 && var41 != var55 && var41 != var35 - 1 && var42 != var57 && var42 != var39 - 1) { + var43 = var56; + } + } + } + } + } + + if(!var58) { + for(var41 = var55; var41 < var35; ++var41) { + double var59 = ((double)(var41 + var3 * 16) + 0.5D - var6) / var54; + + for(var44 = var57; var44 < var39; ++var44) { + double var45 = ((double)(var44 + var4 * 16) + 0.5D - var10) / var54; + int var47 = (var41 * 16 + var44) * 128 + var37; + boolean var48 = false; + if(var59 * var59 + var45 * var45 < 1.0D) { + for(int var49 = var37 - 1; var49 >= var56; --var49) { + double var50 = ((double)var49 + 0.5D - var8) / var30; + if((var59 * var59 + var45 * var45) * (double)this.field_75046_d[var49] + var50 * var50 / 6.0D < 1.0D) { + byte var52 = var5[var47]; + if(var52 == Block.grass.blockID) { + var48 = true; + } + + if(var52 == Block.stone.blockID || var52 == Block.dirt.blockID || var52 == Block.grass.blockID) { + if(var49 < 10) { + var5[var47] = (byte)Block.lavaMoving.blockID; + } else { + var5[var47] = 0; + if(var48 && var5[var47 - 1] == Block.dirt.blockID) { + var5[var47 - 1] = this.worldObj.getBiomeGenForCoords(var41 + var3 * 16, var44 + var4 * 16).topBlock; + } + } + } + } + + --var47; + } + } + } + } + + if(var53) { + break; + } + } + } + } + } + + } + + protected void recursiveGenerate(World var1, int var2, int var3, int var4, int var5, byte[] var6) { + if(this.rand.nextInt(50) == 0) { + double var7 = (double)(var2 * 16 + this.rand.nextInt(16)); + double var9 = (double)(this.rand.nextInt(this.rand.nextInt(40) + 8) + 20); + double var11 = (double)(var3 * 16 + this.rand.nextInt(16)); + byte var13 = 1; + + for(int var14 = 0; var14 < var13; ++var14) { + float var15 = this.rand.nextFloat() * (float)Math.PI * 2.0F; + float var16 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F; + float var17 = (this.rand.nextFloat() * 2.0F + this.rand.nextFloat()) * 2.0F; + this.generateRavine(this.rand.nextLong(), var4, var5, var6, var7, var9, var11, var17, var15, var16, 0, 0, 3.0D); + } + + } + } +} diff --git a/src/net/minecraft/src/MapGenScatteredFeature.java b/src/net/minecraft/src/MapGenScatteredFeature.java new file mode 100644 index 0000000..525705b --- /dev/null +++ b/src/net/minecraft/src/MapGenScatteredFeature.java @@ -0,0 +1,77 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Map.Entry; + +public class MapGenScatteredFeature extends MapGenStructure { + private static List biomelist = Arrays.asList(new BiomeGenBase[]{BiomeGenBase.desert, BiomeGenBase.desertHills, BiomeGenBase.jungle, BiomeGenBase.jungleHills, BiomeGenBase.swampland}); + private List scatteredFeatureSpawnList; + private int maxDistanceBetweenScatteredFeatures; + private int minDistanceBetweenScatteredFeatures; + + public MapGenScatteredFeature() { + this.scatteredFeatureSpawnList = new ArrayList(); + this.maxDistanceBetweenScatteredFeatures = 32; + this.minDistanceBetweenScatteredFeatures = 8; + this.scatteredFeatureSpawnList.add(new SpawnListEntry(EntityWitch.class, 1, 1, 1)); + } + + public MapGenScatteredFeature(Map var1) { + this(); + Iterator var2 = var1.entrySet().iterator(); + + while(var2.hasNext()) { + Entry var3 = (Entry)var2.next(); + if(((String)var3.getKey()).equals("distance")) { + this.maxDistanceBetweenScatteredFeatures = MathHelper.parseIntWithDefaultAndMax((String)var3.getValue(), this.maxDistanceBetweenScatteredFeatures, this.minDistanceBetweenScatteredFeatures + 1); + } + } + + } + + protected boolean canSpawnStructureAtCoords(int var1, int var2) { + int var3 = var1; + int var4 = var2; + if(var1 < 0) { + var1 -= this.maxDistanceBetweenScatteredFeatures - 1; + } + + if(var2 < 0) { + var2 -= this.maxDistanceBetweenScatteredFeatures - 1; + } + + int var5 = var1 / this.maxDistanceBetweenScatteredFeatures; + int var6 = var2 / this.maxDistanceBetweenScatteredFeatures; + Random var7 = this.worldObj.setRandomSeed(var5, var6, 14357617); + var5 *= this.maxDistanceBetweenScatteredFeatures; + var6 *= this.maxDistanceBetweenScatteredFeatures; + var5 += var7.nextInt(this.maxDistanceBetweenScatteredFeatures - this.minDistanceBetweenScatteredFeatures); + var6 += var7.nextInt(this.maxDistanceBetweenScatteredFeatures - this.minDistanceBetweenScatteredFeatures); + if(var3 == var5 && var4 == var6) { + BiomeGenBase var8 = this.worldObj.getWorldChunkManager().getBiomeGenAt(var3 * 16 + 8, var4 * 16 + 8); + Iterator var9 = biomelist.iterator(); + + while(var9.hasNext()) { + BiomeGenBase var10 = (BiomeGenBase)var9.next(); + if(var8 == var10) { + return true; + } + } + } + + return false; + } + + protected StructureStart getStructureStart(int var1, int var2) { + return new StructureScatteredFeatureStart(this.worldObj, this.rand, var1, var2); + } + + public List getScatteredFeatureSpawnList() { + return this.scatteredFeatureSpawnList; + } +} diff --git a/src/net/minecraft/src/MapGenStronghold.java b/src/net/minecraft/src/MapGenStronghold.java new file mode 100644 index 0000000..897d0df --- /dev/null +++ b/src/net/minecraft/src/MapGenStronghold.java @@ -0,0 +1,102 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Map.Entry; + +public class MapGenStronghold extends MapGenStructure { + private BiomeGenBase[] allowedBiomeGenBases = new BiomeGenBase[]{BiomeGenBase.desert, BiomeGenBase.forest, BiomeGenBase.extremeHills, BiomeGenBase.swampland, BiomeGenBase.taiga, BiomeGenBase.icePlains, BiomeGenBase.iceMountains, BiomeGenBase.desertHills, BiomeGenBase.forestHills, BiomeGenBase.extremeHillsEdge, BiomeGenBase.jungle, BiomeGenBase.jungleHills}; + private boolean ranBiomeCheck; + private ChunkCoordIntPair[] structureCoords = new ChunkCoordIntPair[3]; + private double field_82671_h = 32.0D; + private int field_82672_i = 3; + + public MapGenStronghold() { + } + + public MapGenStronghold(Map var1) { + Iterator var2 = var1.entrySet().iterator(); + + while(var2.hasNext()) { + Entry var3 = (Entry)var2.next(); + if(((String)var3.getKey()).equals("distance")) { + this.field_82671_h = MathHelper.func_82713_a((String)var3.getValue(), this.field_82671_h, 1.0D); + } else if(((String)var3.getKey()).equals("count")) { + this.structureCoords = new ChunkCoordIntPair[MathHelper.parseIntWithDefaultAndMax((String)var3.getValue(), this.structureCoords.length, 1)]; + } else if(((String)var3.getKey()).equals("spread")) { + this.field_82672_i = MathHelper.parseIntWithDefaultAndMax((String)var3.getValue(), this.field_82672_i, 1); + } + } + + } + + protected boolean canSpawnStructureAtCoords(int var1, int var2) { + if(!this.ranBiomeCheck) { + Random var3 = new Random(); + var3.setSeed(this.worldObj.getSeed()); + double var4 = var3.nextDouble() * Math.PI * 2.0D; + int var6 = 1; + + for(int var7 = 0; var7 < this.structureCoords.length; ++var7) { + double var8 = (1.25D * (double)var6 + var3.nextDouble()) * this.field_82671_h * (double)var6; + int var10 = (int)Math.round(Math.cos(var4) * var8); + int var11 = (int)Math.round(Math.sin(var4) * var8); + ArrayList var12 = new ArrayList(); + Collections.addAll(var12, this.allowedBiomeGenBases); + ChunkPosition var13 = this.worldObj.getWorldChunkManager().findBiomePosition((var10 << 4) + 8, (var11 << 4) + 8, 112, var12, var3); + if(var13 != null) { + var10 = var13.x >> 4; + var11 = var13.z >> 4; + } + + this.structureCoords[var7] = new ChunkCoordIntPair(var10, var11); + var4 += Math.PI * 2.0D * (double)var6 / (double)this.field_82672_i; + if(var7 == this.field_82672_i) { + var6 += 2 + var3.nextInt(5); + this.field_82672_i += 1 + var3.nextInt(2); + } + } + + this.ranBiomeCheck = true; + } + + ChunkCoordIntPair[] var14 = this.structureCoords; + int var15 = var14.length; + + for(int var5 = 0; var5 < var15; ++var5) { + ChunkCoordIntPair var16 = var14[var5]; + if(var1 == var16.chunkXPos && var2 == var16.chunkZPos) { + return true; + } + } + + return false; + } + + protected List getCoordList() { + ArrayList var1 = new ArrayList(); + ChunkCoordIntPair[] var2 = this.structureCoords; + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + ChunkCoordIntPair var5 = var2[var4]; + if(var5 != null) { + var1.add(var5.getChunkPosition(64)); + } + } + + return var1; + } + + protected StructureStart getStructureStart(int var1, int var2) { + StructureStrongholdStart var3; + for(var3 = new StructureStrongholdStart(this.worldObj, this.rand, var1, var2); var3.getComponents().isEmpty() || ((ComponentStrongholdStairs2)var3.getComponents().get(0)).strongholdPortalRoom == null; var3 = new StructureStrongholdStart(this.worldObj, this.rand, var1, var2)) { + } + + return var3; + } +} diff --git a/src/net/minecraft/src/MapGenStructure.java b/src/net/minecraft/src/MapGenStructure.java new file mode 100644 index 0000000..c20f92d --- /dev/null +++ b/src/net/minecraft/src/MapGenStructure.java @@ -0,0 +1,145 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; + +public abstract class MapGenStructure extends MapGenBase { + protected Map structureMap = new HashMap(); + + protected void recursiveGenerate(World var1, int var2, int var3, int var4, int var5, byte[] var6) { + if(!this.structureMap.containsKey(Long.valueOf(ChunkCoordIntPair.chunkXZ2Int(var2, var3)))) { + this.rand.nextInt(); + + try { + if(this.canSpawnStructureAtCoords(var2, var3)) { + StructureStart var7 = this.getStructureStart(var2, var3); + this.structureMap.put(Long.valueOf(ChunkCoordIntPair.chunkXZ2Int(var2, var3)), var7); + } + + } catch (Throwable var10) { + CrashReport var8 = CrashReport.makeCrashReport(var10, "Exception preparing structure feature"); + CrashReportCategory var9 = var8.makeCategory("Feature being prepared"); + var9.addCrashSectionCallable("Is feature chunk", new CallableIsFeatureChunk(this, var2, var3)); + var9.addCrashSection("Chunk location", String.format("%d,%d", new Object[]{Integer.valueOf(var2), Integer.valueOf(var3)})); + var9.addCrashSectionCallable("Chunk pos hash", new CallableChunkPosHash(this, var2, var3)); + var9.addCrashSectionCallable("Structure type", new CallableStructureType(this)); + throw new ReportedException(var8); + } + } + } + + public boolean generateStructuresInChunk(World var1, Random var2, int var3, int var4) { + int var5 = (var3 << 4) + 8; + int var6 = (var4 << 4) + 8; + boolean var7 = false; + Iterator var8 = this.structureMap.values().iterator(); + + while(var8.hasNext()) { + StructureStart var9 = (StructureStart)var8.next(); + if(var9.isSizeableStructure() && var9.getBoundingBox().intersectsWith(var5, var6, var5 + 15, var6 + 15)) { + var9.generateStructure(var1, var2, new StructureBoundingBox(var5, var6, var5 + 15, var6 + 15)); + var7 = true; + } + } + + return var7; + } + + public boolean hasStructureAt(int var1, int var2, int var3) { + Iterator var4 = this.structureMap.values().iterator(); + + while(true) { + StructureStart var5; + do { + do { + if(!var4.hasNext()) { + return false; + } + + var5 = (StructureStart)var4.next(); + } while(!var5.isSizeableStructure()); + } while(!var5.getBoundingBox().intersectsWith(var1, var3, var1, var3)); + + Iterator var6 = var5.getComponents().iterator(); + + while(var6.hasNext()) { + StructureComponent var7 = (StructureComponent)var6.next(); + if(var7.getBoundingBox().isVecInside(var1, var2, var3)) { + return true; + } + } + } + } + + public ChunkPosition getNearestInstance(World var1, int var2, int var3, int var4) { + this.worldObj = var1; + this.rand.setSeed(var1.getSeed()); + long var5 = this.rand.nextLong(); + long var7 = this.rand.nextLong(); + long var9 = (long)(var2 >> 4) * var5; + long var11 = (long)(var4 >> 4) * var7; + this.rand.setSeed(var9 ^ var11 ^ var1.getSeed()); + this.recursiveGenerate(var1, var2 >> 4, var4 >> 4, 0, 0, (byte[])null); + double var13 = Double.MAX_VALUE; + ChunkPosition var15 = null; + Iterator var16 = this.structureMap.values().iterator(); + + ChunkPosition var19; + int var20; + int var21; + int var22; + double var23; + while(var16.hasNext()) { + StructureStart var17 = (StructureStart)var16.next(); + if(var17.isSizeableStructure()) { + StructureComponent var18 = (StructureComponent)var17.getComponents().get(0); + var19 = var18.getCenter(); + var20 = var19.x - var2; + var21 = var19.y - var3; + var22 = var19.z - var4; + var23 = (double)(var20 + var20 * var21 * var21 + var22 * var22); + if(var23 < var13) { + var13 = var23; + var15 = var19; + } + } + } + + if(var15 != null) { + return var15; + } else { + List var25 = this.getCoordList(); + if(var25 != null) { + ChunkPosition var26 = null; + Iterator var27 = var25.iterator(); + + while(var27.hasNext()) { + var19 = (ChunkPosition)var27.next(); + var20 = var19.x - var2; + var21 = var19.y - var3; + var22 = var19.z - var4; + var23 = (double)(var20 + var20 * var21 * var21 + var22 * var22); + if(var23 < var13) { + var13 = var23; + var26 = var19; + } + } + + return var26; + } else { + return null; + } + } + } + + protected List getCoordList() { + return null; + } + + protected abstract boolean canSpawnStructureAtCoords(int var1, int var2); + + protected abstract StructureStart getStructureStart(int var1, int var2); +} diff --git a/src/net/minecraft/src/MapGenVillage.java b/src/net/minecraft/src/MapGenVillage.java new file mode 100644 index 0000000..c61a1da --- /dev/null +++ b/src/net/minecraft/src/MapGenVillage.java @@ -0,0 +1,68 @@ +package net.minecraft.src; + +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Map.Entry; + +public class MapGenVillage extends MapGenStructure { + public static final List villageSpawnBiomes = Arrays.asList(new BiomeGenBase[]{BiomeGenBase.plains, BiomeGenBase.desert}); + private int terrainType; + private int field_82665_g; + private int field_82666_h; + + public MapGenVillage() { + this.terrainType = 0; + this.field_82665_g = 32; + this.field_82666_h = 8; + } + + public MapGenVillage(Map var1) { + this(); + Iterator var2 = var1.entrySet().iterator(); + + while(var2.hasNext()) { + Entry var3 = (Entry)var2.next(); + if(((String)var3.getKey()).equals("size")) { + this.terrainType = MathHelper.parseIntWithDefaultAndMax((String)var3.getValue(), this.terrainType, 0); + } else if(((String)var3.getKey()).equals("distance")) { + this.field_82665_g = MathHelper.parseIntWithDefaultAndMax((String)var3.getValue(), this.field_82665_g, this.field_82666_h + 1); + } + } + + } + + protected boolean canSpawnStructureAtCoords(int var1, int var2) { + int var3 = var1; + int var4 = var2; + if(var1 < 0) { + var1 -= this.field_82665_g - 1; + } + + if(var2 < 0) { + var2 -= this.field_82665_g - 1; + } + + int var5 = var1 / this.field_82665_g; + int var6 = var2 / this.field_82665_g; + Random var7 = this.worldObj.setRandomSeed(var5, var6, 10387312); + var5 *= this.field_82665_g; + var6 *= this.field_82665_g; + var5 += var7.nextInt(this.field_82665_g - this.field_82666_h); + var6 += var7.nextInt(this.field_82665_g - this.field_82666_h); + if(var3 == var5 && var4 == var6) { + boolean var8 = this.worldObj.getWorldChunkManager().areBiomesViable(var3 * 16 + 8, var4 * 16 + 8, 0, villageSpawnBiomes); + if(var8) { + return true; + } + } + + return false; + } + + protected StructureStart getStructureStart(int var1, int var2) { + return new StructureVillageStart(this.worldObj, this.rand, var1, var2, this.terrainType); + } +} diff --git a/src/net/minecraft/src/MapInfo.java b/src/net/minecraft/src/MapInfo.java new file mode 100644 index 0000000..5c74d71 --- /dev/null +++ b/src/net/minecraft/src/MapInfo.java @@ -0,0 +1,95 @@ +package net.minecraft.src; + +import java.util.Iterator; + +public class MapInfo { + public final EntityPlayer entityplayerObj; + public int[] field_76209_b; + public int[] field_76210_c; + private int currentRandomNumber; + private int ticksUntilPlayerLocationMapUpdate; + private byte[] lastPlayerLocationOnMap; + public int field_82569_d; + private boolean field_82570_i; + final MapData mapDataObj; + + public MapInfo(MapData var1, EntityPlayer var2) { + this.mapDataObj = var1; + this.field_76209_b = new int[128]; + this.field_76210_c = new int[128]; + this.currentRandomNumber = 0; + this.ticksUntilPlayerLocationMapUpdate = 0; + this.field_82570_i = false; + this.entityplayerObj = var2; + + for(int var3 = 0; var3 < this.field_76209_b.length; ++var3) { + this.field_76209_b[var3] = 0; + this.field_76210_c[var3] = 127; + } + + } + + public byte[] getPlayersOnMap(ItemStack var1) { + byte[] var2; + if(!this.field_82570_i) { + var2 = new byte[]{(byte)2, this.mapDataObj.scale}; + this.field_82570_i = true; + return var2; + } else { + int var3; + int var10; + if(--this.ticksUntilPlayerLocationMapUpdate < 0) { + this.ticksUntilPlayerLocationMapUpdate = 4; + var2 = new byte[this.mapDataObj.playersVisibleOnMap.size() * 3 + 1]; + var2[0] = 1; + var3 = 0; + + for(Iterator var4 = this.mapDataObj.playersVisibleOnMap.values().iterator(); var4.hasNext(); ++var3) { + MapCoord var5 = (MapCoord)var4.next(); + var2[var3 * 3 + 1] = (byte)(var5.iconSize << 4 | var5.iconRotation & 15); + var2[var3 * 3 + 2] = var5.centerX; + var2[var3 * 3 + 3] = var5.centerZ; + } + + boolean var9 = !var1.isOnItemFrame(); + if(this.lastPlayerLocationOnMap != null && this.lastPlayerLocationOnMap.length == var2.length) { + for(var10 = 0; var10 < var2.length; ++var10) { + if(var2[var10] != this.lastPlayerLocationOnMap[var10]) { + var9 = false; + break; + } + } + } else { + var9 = false; + } + + if(!var9) { + this.lastPlayerLocationOnMap = var2; + return var2; + } + } + + for(int var8 = 0; var8 < 1; ++var8) { + var3 = this.currentRandomNumber++ * 11 % 128; + if(this.field_76209_b[var3] >= 0) { + int var11 = this.field_76210_c[var3] - this.field_76209_b[var3] + 1; + var10 = this.field_76209_b[var3]; + byte[] var6 = new byte[var11 + 3]; + var6[0] = 0; + var6[1] = (byte)var3; + var6[2] = (byte)var10; + + for(int var7 = 0; var7 < var6.length - 3; ++var7) { + var6[var7 + 3] = this.mapDataObj.colors[(var7 + var10) * 128 + var3]; + } + + this.field_76210_c[var3] = -1; + this.field_76209_b[var3] = -1; + return var6; + } + } + + return null; + } + } +} diff --git a/src/net/minecraft/src/MapItemRenderer.java b/src/net/minecraft/src/MapItemRenderer.java new file mode 100644 index 0000000..559f79a --- /dev/null +++ b/src/net/minecraft/src/MapItemRenderer.java @@ -0,0 +1,103 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; +import java.util.Iterator; +import org.lwjgl.opengl.GL11; + +public class MapItemRenderer { + private int[] intArray = new int[16384]; + private int bufferedImage; + private GameSettings gameSettings; + private FontRenderer fontRenderer; + + public MapItemRenderer(FontRenderer var1, GameSettings var2, RenderEngine var3) { + this.gameSettings = var2; + this.fontRenderer = var1; + this.bufferedImage = var3.allocateAndSetupTexture(new BufferedImage(128, 128, 2)); + + for(int var4 = 0; var4 < 16384; ++var4) { + this.intArray[var4] = 0; + } + + } + + public void renderMap(EntityPlayer var1, RenderEngine var2, MapData var3) { + for(int var4 = 0; var4 < 16384; ++var4) { + byte var5 = var3.colors[var4]; + if(var5 / 4 == 0) { + this.intArray[var4] = (var4 + var4 / 128 & 1) * 8 + 16 << 24; + } else { + int var6 = MapColor.mapColorArray[var5 / 4].colorValue; + int var7 = var5 & 3; + short var8 = 220; + if(var7 == 2) { + var8 = 255; + } + + if(var7 == 0) { + var8 = 180; + } + + int var9 = (var6 >> 16 & 255) * var8 / 255; + int var10 = (var6 >> 8 & 255) * var8 / 255; + int var11 = (var6 & 255) * var8 / 255; + if(this.gameSettings.anaglyph) { + int var12 = (var9 * 30 + var10 * 59 + var11 * 11) / 100; + int var13 = (var9 * 30 + var10 * 70) / 100; + int var14 = (var9 * 30 + var11 * 70) / 100; + var9 = var12; + var10 = var13; + var11 = var14; + } + + this.intArray[var4] = -16777216 | var9 << 16 | var10 << 8 | var11; + } + } + + var2.createTextureFromBytes(this.intArray, 128, 128, this.bufferedImage); + byte var15 = 0; + byte var16 = 0; + Tessellator var17 = Tessellator.instance; + float var18 = 0.0F; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.bufferedImage); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_ALPHA_TEST); + var17.startDrawingQuads(); + var17.addVertexWithUV((double)((float)(var15 + 0) + var18), (double)((float)(var16 + 128) - var18), (double)-0.01F, 0.0D, 1.0D); + var17.addVertexWithUV((double)((float)(var15 + 128) - var18), (double)((float)(var16 + 128) - var18), (double)-0.01F, 1.0D, 1.0D); + var17.addVertexWithUV((double)((float)(var15 + 128) - var18), (double)((float)(var16 + 0) + var18), (double)-0.01F, 1.0D, 0.0D); + var17.addVertexWithUV((double)((float)(var15 + 0) + var18), (double)((float)(var16 + 0) + var18), (double)-0.01F, 0.0D, 0.0D); + var17.draw(); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_BLEND); + var2.resetBoundTexture(); + var2.bindTexture("/misc/mapicons.png"); + int var19 = 0; + + for(Iterator var20 = var3.playersVisibleOnMap.values().iterator(); var20.hasNext(); ++var19) { + MapCoord var21 = (MapCoord)var20.next(); + GL11.glPushMatrix(); + GL11.glTranslatef((float)var15 + (float)var21.centerX / 2.0F + 64.0F, (float)var16 + (float)var21.centerZ / 2.0F + 64.0F, -0.02F); + GL11.glRotatef((float)(var21.iconRotation * 360) / 16.0F, 0.0F, 0.0F, 1.0F); + GL11.glScalef(4.0F, 4.0F, 3.0F); + GL11.glTranslatef(-(2.0F / 16.0F), 2.0F / 16.0F, 0.0F); + float var22 = (float)(var21.iconSize % 4 + 0) / 4.0F; + float var23 = (float)(var21.iconSize / 4 + 0) / 4.0F; + float var24 = (float)(var21.iconSize % 4 + 1) / 4.0F; + float var25 = (float)(var21.iconSize / 4 + 1) / 4.0F; + var17.startDrawingQuads(); + var17.addVertexWithUV(-1.0D, 1.0D, (double)((float)var19 * 0.001F), (double)var22, (double)var23); + var17.addVertexWithUV(1.0D, 1.0D, (double)((float)var19 * 0.001F), (double)var24, (double)var23); + var17.addVertexWithUV(1.0D, -1.0D, (double)((float)var19 * 0.001F), (double)var24, (double)var25); + var17.addVertexWithUV(-1.0D, -1.0D, (double)((float)var19 * 0.001F), (double)var22, (double)var25); + var17.draw(); + GL11.glPopMatrix(); + } + + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 0.0F, -0.04F); + GL11.glScalef(1.0F, 1.0F, 1.0F); + GL11.glPopMatrix(); + } +} diff --git a/src/net/minecraft/src/MapStorage.java b/src/net/minecraft/src/MapStorage.java new file mode 100644 index 0000000..7e7de1e --- /dev/null +++ b/src/net/minecraft/src/MapStorage.java @@ -0,0 +1,170 @@ +package net.minecraft.src; + +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.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class MapStorage { + private ISaveHandler saveHandler; + private Map loadedDataMap = new HashMap(); + private List loadedDataList = new ArrayList(); + private Map idCounts = new HashMap(); + + public MapStorage(ISaveHandler var1) { + this.saveHandler = var1; + this.loadIdCounts(); + } + + public WorldSavedData loadData(Class var1, String var2) { + WorldSavedData var3 = (WorldSavedData)this.loadedDataMap.get(var2); + if(var3 != null) { + return var3; + } else { + if(this.saveHandler != null) { + try { + File var4 = this.saveHandler.getMapFileFromName(var2); + if(var4 != null && var4.exists()) { + try { + var3 = (WorldSavedData)var1.getConstructor(new Class[]{String.class}).newInstance(new Object[]{var2}); + } catch (Exception var7) { + throw new RuntimeException("Failed to instantiate " + var1.toString(), var7); + } + + FileInputStream var5 = new FileInputStream(var4); + NBTTagCompound var6 = CompressedStreamTools.readCompressed(var5); + var5.close(); + var3.readFromNBT(var6.getCompoundTag("data")); + } + } catch (Exception var8) { + var8.printStackTrace(); + } + } + + if(var3 != null) { + this.loadedDataMap.put(var2, var3); + this.loadedDataList.add(var3); + } + + return var3; + } + } + + public void setData(String var1, WorldSavedData var2) { + if(var2 == null) { + throw new RuntimeException("Can\'t set null data"); + } else { + if(this.loadedDataMap.containsKey(var1)) { + this.loadedDataList.remove(this.loadedDataMap.remove(var1)); + } + + this.loadedDataMap.put(var1, var2); + this.loadedDataList.add(var2); + } + } + + public void saveAllData() { + for(int var1 = 0; var1 < this.loadedDataList.size(); ++var1) { + WorldSavedData var2 = (WorldSavedData)this.loadedDataList.get(var1); + if(var2.isDirty()) { + this.saveData(var2); + var2.setDirty(false); + } + } + + } + + private void saveData(WorldSavedData var1) { + if(this.saveHandler != null) { + try { + File var2 = this.saveHandler.getMapFileFromName(var1.mapName); + if(var2 != null) { + NBTTagCompound var3 = new NBTTagCompound(); + var1.writeToNBT(var3); + NBTTagCompound var4 = new NBTTagCompound(); + var4.setCompoundTag("data", var3); + FileOutputStream var5 = new FileOutputStream(var2); + CompressedStreamTools.writeCompressed(var4, var5); + var5.close(); + } + } catch (Exception var6) { + var6.printStackTrace(); + } + + } + } + + private void loadIdCounts() { + try { + this.idCounts.clear(); + if(this.saveHandler == null) { + return; + } + + File var1 = this.saveHandler.getMapFileFromName("idcounts"); + if(var1 != null && var1.exists()) { + DataInputStream var2 = new DataInputStream(new FileInputStream(var1)); + NBTTagCompound var3 = CompressedStreamTools.read((DataInput)var2); + var2.close(); + Iterator var4 = var3.getTags().iterator(); + + while(var4.hasNext()) { + NBTBase var5 = (NBTBase)var4.next(); + if(var5 instanceof NBTTagShort) { + NBTTagShort var6 = (NBTTagShort)var5; + String var7 = var6.getName(); + short var8 = var6.data; + this.idCounts.put(var7, Short.valueOf(var8)); + } + } + } + } catch (Exception var9) { + var9.printStackTrace(); + } + + } + + public int getUniqueDataId(String var1) { + Short var2 = (Short)this.idCounts.get(var1); + if(var2 == null) { + var2 = Short.valueOf((short)0); + } else { + var2 = Short.valueOf((short)(var2.shortValue() + 1)); + } + + this.idCounts.put(var1, var2); + if(this.saveHandler == null) { + return var2.shortValue(); + } else { + try { + File var3 = this.saveHandler.getMapFileFromName("idcounts"); + if(var3 != null) { + NBTTagCompound var4 = new NBTTagCompound(); + Iterator var5 = this.idCounts.keySet().iterator(); + + while(var5.hasNext()) { + String var6 = (String)var5.next(); + short var7 = ((Short)this.idCounts.get(var6)).shortValue(); + var4.setShort(var6, var7); + } + + DataOutputStream var9 = new DataOutputStream(new FileOutputStream(var3)); + CompressedStreamTools.write(var4, (DataOutput)var9); + var9.close(); + } + } catch (Exception var8) { + var8.printStackTrace(); + } + + return var2.shortValue(); + } + } +} diff --git a/src/net/minecraft/src/Material.java b/src/net/minecraft/src/Material.java new file mode 100644 index 0000000..fc160bf --- /dev/null +++ b/src/net/minecraft/src/Material.java @@ -0,0 +1,122 @@ +package net.minecraft.src; + +public class Material { + public static final Material air = new MaterialTransparent(MapColor.airColor); + public static final Material grass = new Material(MapColor.grassColor); + public static final Material ground = new Material(MapColor.dirtColor); + public static final Material wood = (new Material(MapColor.woodColor)).setBurning(); + public static final Material rock = (new Material(MapColor.stoneColor)).setRequiresTool(); + public static final Material iron = (new Material(MapColor.ironColor)).setRequiresTool(); + public static final Material anvil = (new Material(MapColor.ironColor)).setRequiresTool().setImmovableMobility(); + public static final Material water = (new MaterialLiquid(MapColor.waterColor)).setNoPushMobility(); + public static final Material lava = (new MaterialLiquid(MapColor.tntColor)).setNoPushMobility(); + public static final Material leaves = (new Material(MapColor.foliageColor)).setBurning().setTranslucent().setNoPushMobility(); + public static final Material plants = (new MaterialLogic(MapColor.foliageColor)).setNoPushMobility(); + public static final Material vine = (new MaterialLogic(MapColor.foliageColor)).setBurning().setNoPushMobility().setReplaceable(); + public static final Material sponge = new Material(MapColor.clothColor); + public static final Material cloth = (new Material(MapColor.clothColor)).setBurning(); + public static final Material fire = (new MaterialTransparent(MapColor.airColor)).setNoPushMobility(); + public static final Material sand = new Material(MapColor.sandColor); + public static final Material circuits = (new MaterialLogic(MapColor.airColor)).setNoPushMobility(); + public static final Material glass = (new Material(MapColor.airColor)).setTranslucent().setAlwaysHarvested(); + public static final Material redstoneLight = (new Material(MapColor.airColor)).setAlwaysHarvested(); + public static final Material tnt = (new Material(MapColor.tntColor)).setBurning().setTranslucent(); + public static final Material coral = (new Material(MapColor.foliageColor)).setNoPushMobility(); + public static final Material ice = (new Material(MapColor.iceColor)).setTranslucent().setAlwaysHarvested(); + public static final Material snow = (new MaterialLogic(MapColor.snowColor)).setReplaceable().setTranslucent().setRequiresTool().setNoPushMobility(); + public static final Material craftedSnow = (new Material(MapColor.snowColor)).setRequiresTool(); + public static final Material cactus = (new Material(MapColor.foliageColor)).setTranslucent().setNoPushMobility(); + public static final Material clay = new Material(MapColor.clayColor); + public static final Material pumpkin = (new Material(MapColor.foliageColor)).setNoPushMobility(); + public static final Material dragonEgg = (new Material(MapColor.foliageColor)).setNoPushMobility(); + public static final Material portal = (new MaterialPortal(MapColor.airColor)).setImmovableMobility(); + public static final Material cake = (new Material(MapColor.airColor)).setNoPushMobility(); + public static final Material web = (new MaterialWeb(MapColor.clothColor)).setRequiresTool().setNoPushMobility(); + public static final Material piston = (new Material(MapColor.stoneColor)).setImmovableMobility(); + private boolean canBurn; + private boolean replaceable; + private boolean isTranslucent; + public final MapColor materialMapColor; + private boolean requiresNoTool = true; + private int mobilityFlag; + private boolean field_85159_M; + + public Material(MapColor var1) { + this.materialMapColor = var1; + } + + public boolean isLiquid() { + return false; + } + + public boolean isSolid() { + return true; + } + + public boolean getCanBlockGrass() { + return true; + } + + public boolean blocksMovement() { + return true; + } + + private Material setTranslucent() { + this.isTranslucent = true; + return this; + } + + protected Material setRequiresTool() { + this.requiresNoTool = false; + return this; + } + + protected Material setBurning() { + this.canBurn = true; + return this; + } + + public boolean getCanBurn() { + return this.canBurn; + } + + public Material setReplaceable() { + this.replaceable = true; + return this; + } + + public boolean isReplaceable() { + return this.replaceable; + } + + public boolean isOpaque() { + return this.isTranslucent ? false : this.blocksMovement(); + } + + public boolean isToolNotRequired() { + return this.requiresNoTool; + } + + public int getMaterialMobility() { + return this.mobilityFlag; + } + + protected Material setNoPushMobility() { + this.mobilityFlag = 1; + return this; + } + + protected Material setImmovableMobility() { + this.mobilityFlag = 2; + return this; + } + + protected Material setAlwaysHarvested() { + this.field_85159_M = true; + return this; + } + + public boolean isAlwaysHarvested() { + return this.field_85159_M; + } +} diff --git a/src/net/minecraft/src/MaterialLiquid.java b/src/net/minecraft/src/MaterialLiquid.java new file mode 100644 index 0000000..5e40bb5 --- /dev/null +++ b/src/net/minecraft/src/MaterialLiquid.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +public class MaterialLiquid extends Material { + public MaterialLiquid(MapColor var1) { + super(var1); + this.setReplaceable(); + this.setNoPushMobility(); + } + + public boolean isLiquid() { + return true; + } + + public boolean blocksMovement() { + return false; + } + + public boolean isSolid() { + return false; + } +} diff --git a/src/net/minecraft/src/MaterialLogic.java b/src/net/minecraft/src/MaterialLogic.java new file mode 100644 index 0000000..047ce93 --- /dev/null +++ b/src/net/minecraft/src/MaterialLogic.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class MaterialLogic extends Material { + public MaterialLogic(MapColor var1) { + super(var1); + this.setAlwaysHarvested(); + } + + public boolean isSolid() { + return false; + } + + public boolean getCanBlockGrass() { + return false; + } + + public boolean blocksMovement() { + return false; + } +} diff --git a/src/net/minecraft/src/MaterialPortal.java b/src/net/minecraft/src/MaterialPortal.java new file mode 100644 index 0000000..778b6b4 --- /dev/null +++ b/src/net/minecraft/src/MaterialPortal.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class MaterialPortal extends Material { + public MaterialPortal(MapColor var1) { + super(var1); + } + + public boolean isSolid() { + return false; + } + + public boolean getCanBlockGrass() { + return false; + } + + public boolean blocksMovement() { + return false; + } +} diff --git a/src/net/minecraft/src/MaterialTransparent.java b/src/net/minecraft/src/MaterialTransparent.java new file mode 100644 index 0000000..b253529 --- /dev/null +++ b/src/net/minecraft/src/MaterialTransparent.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class MaterialTransparent extends Material { + public MaterialTransparent(MapColor var1) { + super(var1); + this.setReplaceable(); + } + + public boolean isSolid() { + return false; + } + + public boolean getCanBlockGrass() { + return false; + } + + public boolean blocksMovement() { + return false; + } +} diff --git a/src/net/minecraft/src/MaterialWeb.java b/src/net/minecraft/src/MaterialWeb.java new file mode 100644 index 0000000..9245e4b --- /dev/null +++ b/src/net/minecraft/src/MaterialWeb.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class MaterialWeb extends Material { + MaterialWeb(MapColor var1) { + super(var1); + } + + public boolean blocksMovement() { + return false; + } +} diff --git a/src/net/minecraft/src/MathHelper.java b/src/net/minecraft/src/MathHelper.java new file mode 100644 index 0000000..98735cf --- /dev/null +++ b/src/net/minecraft/src/MathHelper.java @@ -0,0 +1,194 @@ +package net.minecraft.src; + +import java.util.Random; + +public class MathHelper { + private static float[] SIN_TABLE = new float[65536]; + + public static final float sin(float var0) { + return SIN_TABLE[(int)(var0 * 10430.378F) & '\uffff']; + } + + public static final float cos(float var0) { + return SIN_TABLE[(int)(var0 * 10430.378F + 16384.0F) & '\uffff']; + } + + public static final float sqrt_float(float var0) { + return (float)Math.sqrt((double)var0); + } + + public static final float sqrt_double(double var0) { + return (float)Math.sqrt(var0); + } + + public static int floor_float(float var0) { + int var1 = (int)var0; + return var0 < (float)var1 ? var1 - 1 : var1; + } + + public static int truncateDoubleToInt(double var0) { + return (int)(var0 + 1024.0D) - 1024; + } + + public static int floor_double(double var0) { + int var2 = (int)var0; + return var0 < (double)var2 ? var2 - 1 : var2; + } + + public static long floor_double_long(double var0) { + long var2 = (long)var0; + return var0 < (double)var2 ? var2 - 1L : var2; + } + + public static float abs(float var0) { + return var0 >= 0.0F ? var0 : -var0; + } + + public static int abs_int(int var0) { + return var0 >= 0 ? var0 : -var0; + } + + public static int ceiling_float_int(float var0) { + int var1 = (int)var0; + return var0 > (float)var1 ? var1 + 1 : var1; + } + + public static int ceiling_double_int(double var0) { + int var2 = (int)var0; + return var0 > (double)var2 ? var2 + 1 : var2; + } + + public static int clamp_int(int var0, int var1, int var2) { + return var0 < var1 ? var1 : (var0 > var2 ? var2 : var0); + } + + public static float clamp_float(float var0, float var1, float var2) { + return var0 < var1 ? var1 : (var0 > var2 ? var2 : var0); + } + + public static double abs_max(double var0, double var2) { + if(var0 < 0.0D) { + var0 = -var0; + } + + if(var2 < 0.0D) { + var2 = -var2; + } + + return var0 > var2 ? var0 : var2; + } + + public static int bucketInt(int var0, int var1) { + return var0 < 0 ? -((-var0 - 1) / var1) - 1 : var0 / var1; + } + + public static boolean stringNullOrLengthZero(String var0) { + return var0 == null || var0.length() == 0; + } + + public static int getRandomIntegerInRange(Random var0, int var1, int var2) { + return var1 >= var2 ? var1 : var0.nextInt(var2 - var1 + 1) + var1; + } + + public static double getRandomDoubleInRange(Random var0, double var1, double var3) { + return var1 >= var3 ? var1 : var0.nextDouble() * (var3 - var1) + var1; + } + + public static double average(long[] var0) { + long var1 = 0L; + long[] var3 = var0; + int var4 = var0.length; + + for(int var5 = 0; var5 < var4; ++var5) { + long var6 = var3[var5]; + var1 += var6; + } + + return (double)var1 / (double)var0.length; + } + + public static float wrapAngleTo180_float(float var0) { + var0 %= 360.0F; + if(var0 >= 180.0F) { + var0 -= 360.0F; + } + + if(var0 < -180.0F) { + var0 += 360.0F; + } + + return var0; + } + + public static double wrapAngleTo180_double(double var0) { + var0 %= 360.0D; + if(var0 >= 180.0D) { + var0 -= 360.0D; + } + + if(var0 < -180.0D) { + var0 += 360.0D; + } + + return var0; + } + + public static int parseIntWithDefault(String var0, int var1) { + int var2 = var1; + + try { + var2 = Integer.parseInt(var0); + } catch (Throwable var4) { + } + + return var2; + } + + public static int parseIntWithDefaultAndMax(String var0, int var1, int var2) { + int var3 = var1; + + try { + var3 = Integer.parseInt(var0); + } catch (Throwable var5) { + } + + if(var3 < var2) { + var3 = var2; + } + + return var3; + } + + public static double parseDoubleWithDefault(String var0, double var1) { + double var3 = var1; + + try { + var3 = Double.parseDouble(var0); + } catch (Throwable var6) { + } + + return var3; + } + + public static double func_82713_a(String var0, double var1, double var3) { + double var5 = var1; + + try { + var5 = Double.parseDouble(var0); + } catch (Throwable var8) { + } + + if(var5 < var3) { + var5 = var3; + } + + return var5; + } + + static { + for(int var0 = 0; var0 < 65536; ++var0) { + SIN_TABLE[var0] = (float)Math.sin((double)var0 * Math.PI * 2.0D / 65536.0D); + } + + } +} diff --git a/src/net/minecraft/src/McoClient.java b/src/net/minecraft/src/McoClient.java new file mode 100644 index 0000000..b978aa2 --- /dev/null +++ b/src/net/minecraft/src/McoClient.java @@ -0,0 +1,159 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map.Entry; + +public class McoClient { + private static McoOption field_98178_a = McoOption.func_98154_b(); + private final String field_96390_a; + private final String field_100007_c; + private static String field_96388_b = "https://mcoapi.minecraft.net/"; + + public McoClient(Session var1) { + this.field_96390_a = var1.sessionId; + this.field_100007_c = var1.username; + } + + public ValueObjectList func_96382_a() throws ExceptionMcoService { + String var1 = this.func_96377_a(Request.func_96358_a(field_96388_b + "worlds")); + return ValueObjectList.func_98161_a(var1); + } + + public McoServer func_98176_a(long var1) throws IOException, ExceptionMcoService { + String var3 = this.func_96377_a(Request.func_96358_a(field_96388_b + "worlds" + "/$ID".replace("$ID", String.valueOf(var1)))); + return McoServer.func_98165_c(var3); + } + + public McoServerAddress func_96374_a(long var1) throws IOException, ExceptionMcoService { + String var3 = field_96388_b + "worlds" + "/$ID/join".replace("$ID", "" + var1); + String var4 = this.func_96377_a(Request.func_96358_a(var3)); + return McoServerAddress.func_98162_a(var4); + } + + public void func_96386_a(String var1, String var2, String var3, String var4) throws UnsupportedEncodingException, ExceptionMcoService { + StringBuilder var5 = new StringBuilder(); + var5.append(field_96388_b).append("worlds").append("/$NAME/$LOCATION_ID".replace("$NAME", this.func_96380_a(var1)).replace("$LOCATION_ID", var3)); + HashMap var6 = new HashMap(); + if(var2 != null && !var2.trim().equals("")) { + var6.put("motd", var2); + } + + if(var4 != null && !var4.equals("")) { + var6.put("seed", var4); + } + + if(!var6.isEmpty()) { + boolean var7 = true; + + Entry var9; + for(Iterator var8 = var6.entrySet().iterator(); var8.hasNext(); var5.append((String)var9.getKey()).append("=").append(this.func_96380_a((String)var9.getValue()))) { + var9 = (Entry)var8.next(); + if(var7) { + var5.append("?"); + var7 = false; + } else { + var5.append("&"); + } + } + } + + this.func_96377_a(Request.func_104064_a(var5.toString(), "", 5000, 30000)); + } + + public Boolean func_96375_b() throws IOException, ExceptionMcoService { + String var1 = field_96388_b + "mco" + "/available"; + String var2 = this.func_96377_a(Request.func_96358_a(var1)); + return Boolean.valueOf(var2); + } + + public int func_96379_c() throws ExceptionMcoService { + String var1 = field_96388_b + "payments" + "/unused"; + String var2 = this.func_96377_a(Request.func_96358_a(var1)); + return Integer.valueOf(var2).intValue(); + } + + public void func_96381_a(long var1, String var3) throws ExceptionMcoService { + String var4 = field_96388_b + "worlds" + "/$WORLD_ID/invites/$USER_NAME".replace("$WORLD_ID", String.valueOf(var1)).replace("$USER_NAME", var3); + this.func_96377_a(Request.func_96355_b(var4)); + } + + public McoServer func_96387_b(long var1, String var3) throws IOException, ExceptionMcoService { + String var4 = field_96388_b + "worlds" + "/$WORLD_ID/invites/$USER_NAME".replace("$WORLD_ID", String.valueOf(var1)).replace("$USER_NAME", var3); + String var5 = this.func_96377_a(Request.func_96361_b(var4, "")); + return McoServer.func_98165_c(var5); + } + + public void func_96384_a(long var1, String var3, String var4, int var5, int var6) throws UnsupportedEncodingException, ExceptionMcoService { + StringBuilder var7 = new StringBuilder(); + var7.append(field_96388_b).append("worlds").append("/$WORLD_ID/$NAME".replace("$WORLD_ID", String.valueOf(var1)).replace("$NAME", this.func_96380_a(var3))); + if(var4 != null && !var4.trim().equals("")) { + var7.append("?motd=").append(this.func_96380_a(var4)); + } + + var7.append("&difficulty=").append(var5).append("&gameMode=").append(var6); + this.func_96377_a(Request.func_96363_c(var7.toString(), "")); + } + + public Boolean func_96383_b(long var1) throws IOException, ExceptionMcoService { + String var3 = field_96388_b + "worlds" + "/$WORLD_ID/open".replace("$WORLD_ID", String.valueOf(var1)); + String var4 = this.func_96377_a(Request.func_96363_c(var3, "")); + return Boolean.valueOf(var4); + } + + public Boolean func_96378_c(long var1) throws IOException, ExceptionMcoService { + String var3 = field_96388_b + "worlds" + "/$WORLD_ID/close".replace("$WORLD_ID", String.valueOf(var1)); + String var4 = this.func_96377_a(Request.func_96363_c(var3, "")); + return Boolean.valueOf(var4); + } + + public Boolean func_96376_d(long var1, String var3) throws UnsupportedEncodingException, ExceptionMcoService { + StringBuilder var4 = new StringBuilder(); + var4.append(field_96388_b).append("worlds").append("/$WORLD_ID/reset".replace("$WORLD_ID", String.valueOf(var1))); + if(var3 != null && var3.length() > 0) { + var4.append("?seed=").append(this.func_96380_a(var3)); + } + + String var5 = this.func_96377_a(Request.func_96353_a(var4.toString(), "", 30000, 80000)); + return Boolean.valueOf(var5); + } + + public ValueObjectSubscription func_98177_f(long var1) throws IOException, ExceptionMcoService { + String var3 = this.func_96377_a(Request.func_96358_a(field_96388_b + "subscriptions" + "/$WORLD_ID".replace("$WORLD_ID", String.valueOf(var1)))); + return ValueObjectSubscription.func_98169_a(var3); + } + + private String func_96380_a(String var1) throws UnsupportedEncodingException { + return URLEncoder.encode(var1, "UTF-8"); + } + + private String func_96377_a(Request var1) throws ExceptionMcoService { + var1.func_100006_a("sid", this.field_96390_a); + var1.func_100006_a("user", this.field_100007_c); + if(field_98178_a instanceof McoOptionSome) { + McoPair var2 = (McoPair)field_98178_a.func_98155_a(); + var1.func_100006_a((String)var2.func_100005_a(), (String)var2.func_100004_b()); + } + + try { + int var5 = var1.func_96362_a(); + if(var5 == 503) { + throw new ExceptionRetryCall(10); + } else if(var5 >= 200 && var5 < 300) { + McoOption var3 = var1.func_98175_b(); + if(var3 instanceof McoOptionSome) { + field_98178_a = var3; + } + + return var1.func_96364_c(); + } else { + throw new ExceptionMcoService(var1.func_96362_a(), var1.func_96364_c()); + } + } catch (ExceptionMcoHttp var4) { + throw new ExceptionMcoService(500, "Server not available!"); + } + } +} diff --git a/src/net/minecraft/src/McoOption.java b/src/net/minecraft/src/McoOption.java new file mode 100644 index 0000000..822670a --- /dev/null +++ b/src/net/minecraft/src/McoOption.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public abstract class McoOption { + public abstract Object func_98155_a(); + + public static McoOptionSome func_98153_a(Object var0) { + return new McoOptionSome(var0); + } + + public static McoOptionNone func_98154_b() { + return new McoOptionNone(); + } +} diff --git a/src/net/minecraft/src/McoOptionNone.java b/src/net/minecraft/src/McoOptionNone.java new file mode 100644 index 0000000..805970f --- /dev/null +++ b/src/net/minecraft/src/McoOptionNone.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public final class McoOptionNone extends McoOption { + public Object func_98155_a() { + throw new RuntimeException("None has no value"); + } +} diff --git a/src/net/minecraft/src/McoOptionSome.java b/src/net/minecraft/src/McoOptionSome.java new file mode 100644 index 0000000..36f6d9f --- /dev/null +++ b/src/net/minecraft/src/McoOptionSome.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public final class McoOptionSome extends McoOption { + private final Object field_98156_a; + + public McoOptionSome(Object var1) { + this.field_98156_a = var1; + } + + public Object func_98155_a() { + return this.field_98156_a; + } +} diff --git a/src/net/minecraft/src/McoPair.java b/src/net/minecraft/src/McoPair.java new file mode 100644 index 0000000..81ceb87 --- /dev/null +++ b/src/net/minecraft/src/McoPair.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +public class McoPair { + private final Object field_98160_a; + private final Object field_98159_b; + + protected McoPair(Object var1, Object var2) { + this.field_98160_a = var1; + this.field_98159_b = var2; + } + + public static McoPair func_98157_a(Object var0, Object var1) { + return new McoPair(var0, var1); + } + + public Object func_100005_a() { + return this.field_98160_a; + } + + public Object func_100004_b() { + return this.field_98159_b; + } +} diff --git a/src/net/minecraft/src/McoServer.java b/src/net/minecraft/src/McoServer.java new file mode 100644 index 0000000..b57948d --- /dev/null +++ b/src/net/minecraft/src/McoServer.java @@ -0,0 +1,120 @@ +package net.minecraft.src; + +import argo.jdom.JdomParser; +import argo.jdom.JsonNode; +import argo.saj.InvalidSyntaxException; +import java.io.UnsupportedEncodingException; +import java.net.URLDecoder; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class McoServer extends ValueObject { + public long field_96408_a; + public String field_96406_b; + public String field_96407_c; + public String field_96404_d; + public String field_96405_e; + public List field_96402_f; + public String field_96403_g; + public boolean field_98166_h; + public int field_104063_i; + public int field_96415_h; + public String field_96413_j = ""; + public String field_96414_k = ""; + public boolean field_96411_l; + public boolean field_102022_m = false; + public long field_96412_m; + private String field_96409_n = null; + private String field_96410_o = null; + + public String func_96397_a() { + if(this.field_96409_n == null) { + try { + this.field_96409_n = URLDecoder.decode(this.field_96407_c, "UTF-8"); + } catch (UnsupportedEncodingException var2) { + this.field_96409_n = this.field_96407_c; + } + } + + return this.field_96409_n; + } + + public String func_96398_b() { + if(this.field_96410_o == null) { + try { + this.field_96410_o = URLDecoder.decode(this.field_96406_b, "UTF-8"); + } catch (UnsupportedEncodingException var2) { + this.field_96410_o = this.field_96406_b; + } + } + + return this.field_96410_o; + } + + public void func_96399_a(String var1) { + this.field_96406_b = var1; + this.field_96410_o = null; + } + + public void func_96400_b(String var1) { + this.field_96407_c = var1; + this.field_96409_n = null; + } + + public void func_96401_a(McoServer var1) { + this.field_96414_k = var1.field_96414_k; + this.field_96413_j = var1.field_96413_j; + this.field_96412_m = var1.field_96412_m; + this.field_96411_l = var1.field_96411_l; + this.field_96415_h = var1.field_96415_h; + this.field_102022_m = true; + } + + public static McoServer func_98163_a(JsonNode var0) { + McoServer var1 = new McoServer(); + + try { + var1.field_96408_a = Long.parseLong(var0.getNumberValue(new Object[]{"id"})); + var1.field_96406_b = var0.getStringValue(new Object[]{"name"}); + var1.field_96407_c = var0.getStringValue(new Object[]{"motd"}); + var1.field_96404_d = var0.getStringValue(new Object[]{"state"}); + var1.field_96405_e = var0.getStringValue(new Object[]{"owner"}); + if(var0.isArrayNode(new Object[]{"invited"})) { + var1.field_96402_f = func_98164_a(var0.getArrayNode(new Object[]{"invited"})); + } else { + var1.field_96402_f = new ArrayList(); + } + + var1.field_104063_i = Integer.parseInt(var0.getNumberValue(new Object[]{"daysLeft"})); + var1.field_96403_g = var0.getStringValue(new Object[]{"ip"}); + var1.field_98166_h = var0.getBooleanValue(new Object[]{"expired"}).booleanValue(); + } catch (IllegalArgumentException var3) { + } + + return var1; + } + + private static List func_98164_a(List var0) { + ArrayList var1 = new ArrayList(); + Iterator var2 = var0.iterator(); + + while(var2.hasNext()) { + JsonNode var3 = (JsonNode)var2.next(); + var1.add(var3.getStringValue(new Object[0])); + } + + return var1; + } + + public static McoServer func_98165_c(String var0) { + McoServer var1 = new McoServer(); + + try { + var1 = func_98163_a((new JdomParser()).parse(var0)); + } catch (InvalidSyntaxException var3) { + } + + return var1; + } +} diff --git a/src/net/minecraft/src/McoServerAddress.java b/src/net/minecraft/src/McoServerAddress.java new file mode 100644 index 0000000..1f7fc3e --- /dev/null +++ b/src/net/minecraft/src/McoServerAddress.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import argo.jdom.JdomParser; +import argo.jdom.JsonRootNode; +import argo.saj.InvalidSyntaxException; + +public class McoServerAddress extends ValueObject { + public String field_96417_a; + + public static McoServerAddress func_98162_a(String var0) { + McoServerAddress var1 = new McoServerAddress(); + + try { + JsonRootNode var2 = (new JdomParser()).parse(var0); + var1.field_96417_a = var2.getStringValue(new Object[]{"address"}); + } catch (InvalidSyntaxException var3) { + } catch (IllegalArgumentException var4) { + } + + return var1; + } +} diff --git a/src/net/minecraft/src/McoServerList.java b/src/net/minecraft/src/McoServerList.java new file mode 100644 index 0000000..12f756f --- /dev/null +++ b/src/net/minecraft/src/McoServerList.java @@ -0,0 +1,59 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class McoServerList { + private volatile boolean field_98259_a = false; + private TimerTaskMcoServerListUpdate field_98257_b; + private java.util.Timer field_98258_c = new java.util.Timer(); + private List field_98255_d = new ArrayList(); + private boolean field_98256_e = false; + private Session field_98254_f; + + public McoServerList(Session var1) { + this.field_98254_f = var1; + this.field_98257_b = new TimerTaskMcoServerListUpdate(this, (McoServerListINNER1)null); + this.field_98258_c.schedule(this.field_98257_b, 0L, 10000L); + } + + public synchronized boolean func_98251_a() { + return this.field_98256_e; + } + + public synchronized void func_98250_b() { + this.field_98256_e = false; + } + + public synchronized List func_98252_c() { + return Collections.unmodifiableList(this.field_98255_d); + } + + private synchronized void func_96426_a(List var1) { + if(!var1.equals(this.field_98255_d)) { + this.field_98255_d = var1; + this.field_98256_e = true; + } + + } + + public synchronized void func_98248_d() { + this.field_98259_a = true; + this.field_98257_b.cancel(); + this.field_98258_c.cancel(); + } + + static Session func_100014_a(McoServerList var0) { + return var0.field_98254_f; + } + + static boolean func_98249_b(McoServerList var0) { + return var0.field_98259_a; + } + + static void func_98247_a(McoServerList var0, List var1) throws IOException { + var0.func_96426_a(var1); + } +} diff --git a/src/net/minecraft/src/McoServerListINNER1.java b/src/net/minecraft/src/McoServerListINNER1.java new file mode 100644 index 0000000..4423b3a --- /dev/null +++ b/src/net/minecraft/src/McoServerListINNER1.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +class McoServerListINNER1 { +} diff --git a/src/net/minecraft/src/MemoryConnection.java b/src/net/minecraft/src/MemoryConnection.java new file mode 100644 index 0000000..39fb3be --- /dev/null +++ b/src/net/minecraft/src/MemoryConnection.java @@ -0,0 +1,108 @@ +package net.minecraft.src; + +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class MemoryConnection implements INetworkManager { + private static final SocketAddress mySocketAddress = new InetSocketAddress("127.0.0.1", 0); + private final List readPacketCache = Collections.synchronizedList(new ArrayList()); + private final ILogAgent field_98214_c; + private MemoryConnection pairedConnection; + private NetHandler myNetHandler; + private boolean shuttingDown = false; + private String shutdownReason = ""; + private Object[] field_74439_g; + private boolean gamePaused = false; + + public MemoryConnection(ILogAgent var1, NetHandler var2) { + this.myNetHandler = var2; + this.field_98214_c = var1; + } + + public void setNetHandler(NetHandler var1) { + this.myNetHandler = var1; + } + + public void addToSendQueue(Packet var1) { + if(!this.shuttingDown) { + this.pairedConnection.processOrCachePacket(var1); + } + } + + public void closeConnections() { + this.pairedConnection = null; + this.myNetHandler = null; + } + + public boolean isConnectionActive() { + return !this.shuttingDown && this.pairedConnection != null; + } + + public void wakeThreads() { + } + + public void processReadPackets() { + int var1 = 2500; + + while(var1-- >= 0 && !this.readPacketCache.isEmpty()) { + Packet var2 = (Packet)this.readPacketCache.remove(0); + var2.processPacket(this.myNetHandler); + } + + if(this.readPacketCache.size() > var1) { + this.field_98214_c.logWarning("Memory connection overburdened; after processing 2500 packets, we still have " + this.readPacketCache.size() + " to go!"); + } + + if(this.shuttingDown && this.readPacketCache.isEmpty()) { + this.myNetHandler.handleErrorMessage(this.shutdownReason, this.field_74439_g); + } + + } + + public SocketAddress getSocketAddress() { + return mySocketAddress; + } + + public void serverShutdown() { + this.shuttingDown = true; + } + + public void networkShutdown(String var1, Object... var2) { + this.shuttingDown = true; + this.shutdownReason = var1; + this.field_74439_g = var2; + } + + public int packetSize() { + return 0; + } + + public void pairWith(MemoryConnection var1) { + this.pairedConnection = var1; + var1.pairedConnection = this; + } + + public boolean isGamePaused() { + return this.gamePaused; + } + + public void setGamePaused(boolean var1) { + this.gamePaused = var1; + } + + public MemoryConnection getPairedConnection() { + return this.pairedConnection; + } + + public void processOrCachePacket(Packet var1) { + if(var1.canProcessAsync() && this.myNetHandler.canProcessPacketsAsync()) { + var1.processPacket(this.myNetHandler); + } else { + this.readPacketCache.add(var1); + } + + } +} diff --git a/src/net/minecraft/src/MerchantRecipe.java b/src/net/minecraft/src/MerchantRecipe.java new file mode 100644 index 0000000..332e958 --- /dev/null +++ b/src/net/minecraft/src/MerchantRecipe.java @@ -0,0 +1,102 @@ +package net.minecraft.src; + +public class MerchantRecipe { + private ItemStack itemToBuy; + private ItemStack secondItemToBuy; + private ItemStack itemToSell; + private int toolUses; + private int maxTradeUses; + + public MerchantRecipe(NBTTagCompound var1) { + this.readFromTags(var1); + } + + public MerchantRecipe(ItemStack var1, ItemStack var2, ItemStack var3) { + this.itemToBuy = var1; + this.secondItemToBuy = var2; + this.itemToSell = var3; + this.maxTradeUses = 7; + } + + public MerchantRecipe(ItemStack var1, ItemStack var2) { + this(var1, (ItemStack)null, var2); + } + + public MerchantRecipe(ItemStack var1, Item var2) { + this(var1, new ItemStack(var2)); + } + + public ItemStack getItemToBuy() { + return this.itemToBuy; + } + + public ItemStack getSecondItemToBuy() { + return this.secondItemToBuy; + } + + public boolean hasSecondItemToBuy() { + return this.secondItemToBuy != null; + } + + public ItemStack getItemToSell() { + return this.itemToSell; + } + + public boolean hasSameIDsAs(MerchantRecipe var1) { + return this.itemToBuy.itemID == var1.itemToBuy.itemID && this.itemToSell.itemID == var1.itemToSell.itemID ? this.secondItemToBuy == null && var1.secondItemToBuy == null || this.secondItemToBuy != null && var1.secondItemToBuy != null && this.secondItemToBuy.itemID == var1.secondItemToBuy.itemID : false; + } + + public boolean hasSameItemsAs(MerchantRecipe var1) { + return this.hasSameIDsAs(var1) && (this.itemToBuy.stackSize < var1.itemToBuy.stackSize || this.secondItemToBuy != null && this.secondItemToBuy.stackSize < var1.secondItemToBuy.stackSize); + } + + public void incrementToolUses() { + ++this.toolUses; + } + + public void func_82783_a(int var1) { + this.maxTradeUses += var1; + } + + public boolean func_82784_g() { + return this.toolUses >= this.maxTradeUses; + } + + public void func_82785_h() { + this.toolUses = this.maxTradeUses; + } + + public void readFromTags(NBTTagCompound var1) { + NBTTagCompound var2 = var1.getCompoundTag("buy"); + this.itemToBuy = ItemStack.loadItemStackFromNBT(var2); + NBTTagCompound var3 = var1.getCompoundTag("sell"); + this.itemToSell = ItemStack.loadItemStackFromNBT(var3); + if(var1.hasKey("buyB")) { + this.secondItemToBuy = ItemStack.loadItemStackFromNBT(var1.getCompoundTag("buyB")); + } + + if(var1.hasKey("uses")) { + this.toolUses = var1.getInteger("uses"); + } + + if(var1.hasKey("maxUses")) { + this.maxTradeUses = var1.getInteger("maxUses"); + } else { + this.maxTradeUses = 7; + } + + } + + public NBTTagCompound writeToTags() { + NBTTagCompound var1 = new NBTTagCompound(); + var1.setCompoundTag("buy", this.itemToBuy.writeToNBT(new NBTTagCompound("buy"))); + var1.setCompoundTag("sell", this.itemToSell.writeToNBT(new NBTTagCompound("sell"))); + if(this.secondItemToBuy != null) { + var1.setCompoundTag("buyB", this.secondItemToBuy.writeToNBT(new NBTTagCompound("buyB"))); + } + + var1.setInteger("uses", this.toolUses); + var1.setInteger("maxUses", this.maxTradeUses); + return var1; + } +} diff --git a/src/net/minecraft/src/MerchantRecipeList.java b/src/net/minecraft/src/MerchantRecipeList.java new file mode 100644 index 0000000..99a85a5 --- /dev/null +++ b/src/net/minecraft/src/MerchantRecipeList.java @@ -0,0 +1,111 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.ArrayList; + +public class MerchantRecipeList extends ArrayList { + public MerchantRecipeList() { + } + + public MerchantRecipeList(NBTTagCompound var1) { + this.readRecipiesFromTags(var1); + } + + public MerchantRecipe canRecipeBeUsed(ItemStack var1, ItemStack var2, int var3) { + if(var3 > 0 && var3 < this.size()) { + MerchantRecipe var6 = (MerchantRecipe)this.get(var3); + return var1.itemID != var6.getItemToBuy().itemID || (var2 != null || var6.hasSecondItemToBuy()) && (!var6.hasSecondItemToBuy() || var2 == null || var6.getSecondItemToBuy().itemID != var2.itemID) || var1.stackSize < var6.getItemToBuy().stackSize || var6.hasSecondItemToBuy() && var2.stackSize < var6.getSecondItemToBuy().stackSize ? null : var6; + } else { + for(int var4 = 0; var4 < this.size(); ++var4) { + MerchantRecipe var5 = (MerchantRecipe)this.get(var4); + if(var1.itemID == var5.getItemToBuy().itemID && var1.stackSize >= var5.getItemToBuy().stackSize && (!var5.hasSecondItemToBuy() && var2 == null || var5.hasSecondItemToBuy() && var2 != null && var5.getSecondItemToBuy().itemID == var2.itemID && var2.stackSize >= var5.getSecondItemToBuy().stackSize)) { + return var5; + } + } + + return null; + } + } + + public void addToListWithCheck(MerchantRecipe var1) { + for(int var2 = 0; var2 < this.size(); ++var2) { + MerchantRecipe var3 = (MerchantRecipe)this.get(var2); + if(var1.hasSameIDsAs(var3)) { + if(var1.hasSameItemsAs(var3)) { + this.set(var2, var1); + } + + return; + } + } + + this.add(var1); + } + + public void writeRecipiesToStream(DataOutputStream var1) throws IOException { + var1.writeByte((byte)(this.size() & 255)); + + for(int var2 = 0; var2 < this.size(); ++var2) { + MerchantRecipe var3 = (MerchantRecipe)this.get(var2); + Packet.writeItemStack(var3.getItemToBuy(), var1); + Packet.writeItemStack(var3.getItemToSell(), var1); + ItemStack var4 = var3.getSecondItemToBuy(); + var1.writeBoolean(var4 != null); + if(var4 != null) { + Packet.writeItemStack(var4, var1); + } + + var1.writeBoolean(var3.func_82784_g()); + } + + } + + public static MerchantRecipeList readRecipiesFromStream(DataInputStream var0) throws IOException { + MerchantRecipeList var1 = new MerchantRecipeList(); + int var2 = var0.readByte() & 255; + + for(int var3 = 0; var3 < var2; ++var3) { + ItemStack var4 = Packet.readItemStack(var0); + ItemStack var5 = Packet.readItemStack(var0); + ItemStack var6 = null; + if(var0.readBoolean()) { + var6 = Packet.readItemStack(var0); + } + + boolean var7 = var0.readBoolean(); + MerchantRecipe var8 = new MerchantRecipe(var4, var6, var5); + if(var7) { + var8.func_82785_h(); + } + + var1.add(var8); + } + + return var1; + } + + public void readRecipiesFromTags(NBTTagCompound var1) { + NBTTagList var2 = var1.getTagList("Recipes"); + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + this.add(new MerchantRecipe(var4)); + } + + } + + public NBTTagCompound getRecipiesAsTags() { + NBTTagCompound var1 = new NBTTagCompound(); + NBTTagList var2 = new NBTTagList("Recipes"); + + for(int var3 = 0; var3 < this.size(); ++var3) { + MerchantRecipe var4 = (MerchantRecipe)this.get(var3); + var2.appendTag(var4.writeToTags()); + } + + var1.setTag("Recipes", var2); + return var1; + } +} diff --git a/src/net/minecraft/src/MinecraftAppletImpl.java b/src/net/minecraft/src/MinecraftAppletImpl.java new file mode 100644 index 0000000..8b1d168 --- /dev/null +++ b/src/net/minecraft/src/MinecraftAppletImpl.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +import java.awt.BorderLayout; +import java.awt.Canvas; +import net.minecraft.client.Minecraft; +import net.minecraft.client.MinecraftApplet; +import org.lwjgl.LWJGLException; + +public class MinecraftAppletImpl extends Minecraft { + final MinecraftApplet mainFrame; + + public MinecraftAppletImpl(MinecraftApplet var1, Canvas var2, MinecraftApplet var3, int var4, int var5, boolean var6) { + super(var2, var3, var4, var5, var6); + this.mainFrame = var1; + } + + public void displayCrashReportInternal(CrashReport var1) { + this.mainFrame.removeAll(); + this.mainFrame.setLayout(new BorderLayout()); + this.mainFrame.add(new PanelCrashReport(var1), "Center"); + this.mainFrame.validate(); + } + + public void startGame() throws LWJGLException { + this.mcDataDir = getMinecraftDir(); + this.gameSettings = new GameSettings(this, this.mcDataDir); + if(this.gameSettings.overrideHeight > 0 && this.gameSettings.overrideWidth > 0 && this.mainFrame.getParent() != null && this.mainFrame.getParent().getParent() != null) { + this.mainFrame.getParent().getParent().setSize(this.gameSettings.overrideWidth, this.gameSettings.overrideHeight); + } + + super.startGame(); + } +} diff --git a/src/net/minecraft/src/MinecraftError.java b/src/net/minecraft/src/MinecraftError.java new file mode 100644 index 0000000..9a75dec --- /dev/null +++ b/src/net/minecraft/src/MinecraftError.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public class MinecraftError extends Error { +} diff --git a/src/net/minecraft/src/MinecraftException.java b/src/net/minecraft/src/MinecraftException.java new file mode 100644 index 0000000..3532c27 --- /dev/null +++ b/src/net/minecraft/src/MinecraftException.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class MinecraftException extends Exception { + public MinecraftException(String var1) { + super(var1); + } +} diff --git a/src/net/minecraft/src/MinecraftFakeLauncher.java b/src/net/minecraft/src/MinecraftFakeLauncher.java new file mode 100644 index 0000000..dc8e12c --- /dev/null +++ b/src/net/minecraft/src/MinecraftFakeLauncher.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.applet.Applet; +import java.applet.AppletStub; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Map; + +public class MinecraftFakeLauncher extends Applet implements AppletStub { + final Map arguments; + + public MinecraftFakeLauncher(Map var1) { + this.arguments = var1; + } + + public void appletResize(int var1, int var2) { + } + + public boolean isActive() { + return true; + } + + public URL getDocumentBase() { + try { + return new URL("http://www.minecraft.net/game/"); + } catch (MalformedURLException var2) { + var2.printStackTrace(); + return null; + } + } + + public String getParameter(String var1) { + if(this.arguments.containsKey(var1)) { + return (String)this.arguments.get(var1); + } else { + System.err.println("Client asked for parameter: " + var1); + return null; + } + } +} diff --git a/src/net/minecraft/src/MobSpawnerBaseLogic.java b/src/net/minecraft/src/MobSpawnerBaseLogic.java new file mode 100644 index 0000000..779c2ba --- /dev/null +++ b/src/net/minecraft/src/MobSpawnerBaseLogic.java @@ -0,0 +1,281 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; +import java.util.List; + +public abstract class MobSpawnerBaseLogic { + public int spawnDelay = 20; + private String mobID = "Pig"; + private List minecartToSpawn = null; + private WeightedRandomMinecart randomMinecart = null; + public double field_98287_c; + public double field_98284_d = 0.0D; + private int minSpawnDelay = 200; + private int maxSpawnDelay = 800; + private int spawnCount = 4; + private Entity field_98291_j; + private int maxNearbyEntities = 6; + private int activatingRangeFromPlayer = 16; + private int spawnRange = 4; + + public String getEntityNameToSpawn() { + if(this.getRandomMinecart() == null) { + if(this.mobID.equals("Minecart")) { + this.mobID = "MinecartRideable"; + } + + return this.mobID; + } else { + return this.getRandomMinecart().minecartName; + } + } + + public void setMobID(String var1) { + this.mobID = var1; + } + + public boolean canRun() { + return this.getSpawnerWorld().getClosestPlayer((double)this.getSpawnerX() + 0.5D, (double)this.getSpawnerY() + 0.5D, (double)this.getSpawnerZ() + 0.5D, (double)this.activatingRangeFromPlayer) != null; + } + + public void updateSpawner() { + if(this.canRun()) { + double var5; + if(this.getSpawnerWorld().isRemote) { + double var12 = (double)((float)this.getSpawnerX() + this.getSpawnerWorld().rand.nextFloat()); + double var13 = (double)((float)this.getSpawnerY() + this.getSpawnerWorld().rand.nextFloat()); + var5 = (double)((float)this.getSpawnerZ() + this.getSpawnerWorld().rand.nextFloat()); + this.getSpawnerWorld().spawnParticle("smoke", var12, var13, var5, 0.0D, 0.0D, 0.0D); + this.getSpawnerWorld().spawnParticle("flame", var12, var13, var5, 0.0D, 0.0D, 0.0D); + if(this.spawnDelay > 0) { + --this.spawnDelay; + } + + this.field_98284_d = this.field_98287_c; + this.field_98287_c = (this.field_98287_c + (double)(1000.0F / ((float)this.spawnDelay + 200.0F))) % 360.0D; + } else { + if(this.spawnDelay == -1) { + this.func_98273_j(); + } + + if(this.spawnDelay > 0) { + --this.spawnDelay; + return; + } + + boolean var1 = false; + int var2 = 0; + + while(true) { + if(var2 >= this.spawnCount) { + if(var1) { + this.func_98273_j(); + } + break; + } + + Entity var3 = EntityList.createEntityByName(this.getEntityNameToSpawn(), this.getSpawnerWorld()); + if(var3 == null) { + return; + } + + int var4 = this.getSpawnerWorld().getEntitiesWithinAABB(var3.getClass(), AxisAlignedBB.getAABBPool().getAABB((double)this.getSpawnerX(), (double)this.getSpawnerY(), (double)this.getSpawnerZ(), (double)(this.getSpawnerX() + 1), (double)(this.getSpawnerY() + 1), (double)(this.getSpawnerZ() + 1)).expand((double)(this.spawnRange * 2), 4.0D, (double)(this.spawnRange * 2))).size(); + if(var4 >= this.maxNearbyEntities) { + this.func_98273_j(); + return; + } + + var5 = (double)this.getSpawnerX() + (this.getSpawnerWorld().rand.nextDouble() - this.getSpawnerWorld().rand.nextDouble()) * (double)this.spawnRange; + double var7 = (double)(this.getSpawnerY() + this.getSpawnerWorld().rand.nextInt(3) - 1); + double var9 = (double)this.getSpawnerZ() + (this.getSpawnerWorld().rand.nextDouble() - this.getSpawnerWorld().rand.nextDouble()) * (double)this.spawnRange; + EntityLiving var11 = var3 instanceof EntityLiving ? (EntityLiving)var3 : null; + var3.setLocationAndAngles(var5, var7, var9, this.getSpawnerWorld().rand.nextFloat() * 360.0F, 0.0F); + if(var11 == null || var11.getCanSpawnHere()) { + this.func_98265_a(var3); + this.getSpawnerWorld().playAuxSFX(2004, this.getSpawnerX(), this.getSpawnerY(), this.getSpawnerZ(), 0); + if(var11 != null) { + var11.spawnExplosionParticle(); + } + + var1 = true; + } + + ++var2; + } + } + + } + } + + public Entity func_98265_a(Entity var1) { + if(this.getRandomMinecart() != null) { + NBTTagCompound var2 = new NBTTagCompound(); + var1.addEntityID(var2); + Iterator var3 = this.getRandomMinecart().field_98222_b.getTags().iterator(); + + while(var3.hasNext()) { + NBTBase var4 = (NBTBase)var3.next(); + var2.setTag(var4.getName(), var4.copy()); + } + + var1.readFromNBT(var2); + if(var1.worldObj != null) { + var1.worldObj.spawnEntityInWorld(var1); + } + + NBTTagCompound var10; + for(Entity var9 = var1; var2.hasKey("Riding"); var2 = var10) { + var10 = var2.getCompoundTag("Riding"); + Entity var5 = EntityList.createEntityByName(var10.getString("id"), this.getSpawnerWorld()); + if(var5 != null) { + NBTTagCompound var6 = new NBTTagCompound(); + var5.addEntityID(var6); + Iterator var7 = var10.getTags().iterator(); + + while(var7.hasNext()) { + NBTBase var8 = (NBTBase)var7.next(); + var6.setTag(var8.getName(), var8.copy()); + } + + var5.readFromNBT(var6); + var5.setLocationAndAngles(var9.posX, var9.posY, var9.posZ, var9.rotationYaw, var9.rotationPitch); + this.getSpawnerWorld().spawnEntityInWorld(var5); + var9.mountEntity(var5); + } + + var9 = var5; + } + } else if(var1 instanceof EntityLiving && var1.worldObj != null) { + ((EntityLiving)var1).initCreature(); + this.getSpawnerWorld().spawnEntityInWorld(var1); + } + + return var1; + } + + private void func_98273_j() { + if(this.maxSpawnDelay <= this.minSpawnDelay) { + this.spawnDelay = this.minSpawnDelay; + } else { + int var10003 = this.maxSpawnDelay - this.minSpawnDelay; + this.spawnDelay = this.minSpawnDelay + this.getSpawnerWorld().rand.nextInt(var10003); + } + + if(this.minecartToSpawn != null && this.minecartToSpawn.size() > 0) { + this.setRandomMinecart((WeightedRandomMinecart)WeightedRandom.getRandomItem(this.getSpawnerWorld().rand, (Collection)this.minecartToSpawn)); + } + + this.func_98267_a(1); + } + + public void readFromNBT(NBTTagCompound var1) { + this.mobID = var1.getString("EntityId"); + this.spawnDelay = var1.getShort("Delay"); + if(var1.hasKey("SpawnPotentials")) { + this.minecartToSpawn = new ArrayList(); + NBTTagList var2 = var1.getTagList("SpawnPotentials"); + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + this.minecartToSpawn.add(new WeightedRandomMinecart(this, (NBTTagCompound)var2.tagAt(var3))); + } + } else { + this.minecartToSpawn = null; + } + + if(var1.hasKey("SpawnData")) { + this.setRandomMinecart(new WeightedRandomMinecart(this, var1.getCompoundTag("SpawnData"), this.mobID)); + } else { + this.setRandomMinecart((WeightedRandomMinecart)null); + } + + if(var1.hasKey("MinSpawnDelay")) { + this.minSpawnDelay = var1.getShort("MinSpawnDelay"); + this.maxSpawnDelay = var1.getShort("MaxSpawnDelay"); + this.spawnCount = var1.getShort("SpawnCount"); + } + + if(var1.hasKey("MaxNearbyEntities")) { + this.maxNearbyEntities = var1.getShort("MaxNearbyEntities"); + this.activatingRangeFromPlayer = var1.getShort("RequiredPlayerRange"); + } + + if(var1.hasKey("SpawnRange")) { + this.spawnRange = var1.getShort("SpawnRange"); + } + + if(this.getSpawnerWorld() != null && this.getSpawnerWorld().isRemote) { + this.field_98291_j = null; + } + + } + + public void writeToNBT(NBTTagCompound var1) { + var1.setString("EntityId", this.getEntityNameToSpawn()); + var1.setShort("Delay", (short)this.spawnDelay); + var1.setShort("MinSpawnDelay", (short)this.minSpawnDelay); + var1.setShort("MaxSpawnDelay", (short)this.maxSpawnDelay); + var1.setShort("SpawnCount", (short)this.spawnCount); + var1.setShort("MaxNearbyEntities", (short)this.maxNearbyEntities); + var1.setShort("RequiredPlayerRange", (short)this.activatingRangeFromPlayer); + var1.setShort("SpawnRange", (short)this.spawnRange); + if(this.getRandomMinecart() != null) { + var1.setCompoundTag("SpawnData", (NBTTagCompound)this.getRandomMinecart().field_98222_b.copy()); + } + + if(this.getRandomMinecart() != null || this.minecartToSpawn != null && this.minecartToSpawn.size() > 0) { + NBTTagList var2 = new NBTTagList(); + if(this.minecartToSpawn != null && this.minecartToSpawn.size() > 0) { + Iterator var3 = this.minecartToSpawn.iterator(); + + while(var3.hasNext()) { + WeightedRandomMinecart var4 = (WeightedRandomMinecart)var3.next(); + var2.appendTag(var4.func_98220_a()); + } + } else { + var2.appendTag(this.getRandomMinecart().func_98220_a()); + } + + var1.setTag("SpawnPotentials", var2); + } + + } + + public Entity func_98281_h() { + if(this.field_98291_j == null) { + Entity var1 = EntityList.createEntityByName(this.getEntityNameToSpawn(), (World)null); + var1 = this.func_98265_a(var1); + this.field_98291_j = var1; + } + + return this.field_98291_j; + } + + public boolean setDelayToMin(int var1) { + if(var1 == 1 && this.getSpawnerWorld().isRemote) { + this.spawnDelay = this.minSpawnDelay; + return true; + } else { + return false; + } + } + + public WeightedRandomMinecart getRandomMinecart() { + return this.randomMinecart; + } + + public void setRandomMinecart(WeightedRandomMinecart var1) { + this.randomMinecart = var1; + } + + public abstract void func_98267_a(int var1); + + public abstract World getSpawnerWorld(); + + public abstract int getSpawnerX(); + + public abstract int getSpawnerY(); + + public abstract int getSpawnerZ(); +} diff --git a/src/net/minecraft/src/ModelBase.java b/src/net/minecraft/src/ModelBase.java new file mode 100644 index 0000000..7996b7c --- /dev/null +++ b/src/net/minecraft/src/ModelBase.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +public abstract class ModelBase { + public float onGround; + public boolean isRiding = false; + public List boxList = new ArrayList(); + public boolean isChild = true; + private Map modelTextureMap = new HashMap(); + public int textureWidth = 64; + public int textureHeight = 32; + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + } + + public void setLivingAnimations(EntityLiving var1, float var2, float var3, float var4) { + } + + public ModelRenderer getRandomModelBox(Random var1) { + return (ModelRenderer)this.boxList.get(var1.nextInt(this.boxList.size())); + } + + protected void setTextureOffset(String var1, int var2, int var3) { + this.modelTextureMap.put(var1, new TextureOffset(var2, var3)); + } + + public TextureOffset getTextureOffset(String var1) { + return (TextureOffset)this.modelTextureMap.get(var1); + } +} diff --git a/src/net/minecraft/src/ModelBat.java b/src/net/minecraft/src/ModelBat.java new file mode 100644 index 0000000..1e428df --- /dev/null +++ b/src/net/minecraft/src/ModelBat.java @@ -0,0 +1,82 @@ +package net.minecraft.src; + +public class ModelBat extends ModelBase { + private ModelRenderer batHead; + private ModelRenderer batBody; + private ModelRenderer batRightWing; + private ModelRenderer batLeftWing; + private ModelRenderer batOuterRightWing; + private 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 var1 = new ModelRenderer(this, 24, 0); + var1.addBox(-4.0F, -6.0F, -2.0F, 3, 4, 1); + this.batHead.addChild(var1); + ModelRenderer var2 = new ModelRenderer(this, 24, 0); + var2.mirror = true; + var2.addBox(1.0F, -6.0F, -2.0F, 3, 4, 1); + this.batHead.addChild(var2); + 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); + } + + public int getBatSize() { + return 36; + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + EntityBat var8 = (EntityBat)var1; + if(var8.getIsBatHanging()) { + this.batHead.rotateAngleX = var6 / (180.0F / (float)Math.PI); + this.batHead.rotateAngleY = (float)Math.PI - var5 / (180.0F / (float)Math.PI); + 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 = (float)Math.PI * -0.05F; + this.batRightWing.rotateAngleY = (float)Math.PI * -0.4F; + this.batOuterRightWing.rotateAngleY = (float)Math.PI * -0.55F; + this.batLeftWing.rotateAngleX = this.batRightWing.rotateAngleX; + this.batLeftWing.rotateAngleY = -this.batRightWing.rotateAngleY; + this.batOuterLeftWing.rotateAngleY = -this.batOuterRightWing.rotateAngleY; + } else { + this.batHead.rotateAngleX = var6 / (180.0F / (float)Math.PI); + this.batHead.rotateAngleY = var5 / (180.0F / (float)Math.PI); + 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 * 0.25F + MathHelper.cos(var4 * 0.1F) * 0.15F; + this.batBody.rotateAngleY = 0.0F; + this.batRightWing.rotateAngleY = MathHelper.cos(var4 * 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; + } + + this.batHead.render(var7); + this.batBody.render(var7); + } +} diff --git a/src/net/minecraft/src/ModelBiped.java b/src/net/minecraft/src/ModelBiped.java new file mode 100644 index 0000000..e0333ab --- /dev/null +++ b/src/net/minecraft/src/ModelBiped.java @@ -0,0 +1,204 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class ModelBiped extends ModelBase { + public ModelRenderer bipedHead; + public ModelRenderer bipedHeadwear; + public ModelRenderer bipedBody; + public ModelRenderer bipedRightArm; + public ModelRenderer bipedLeftArm; + public ModelRenderer bipedRightLeg; + public ModelRenderer bipedLeftLeg; + public ModelRenderer bipedEars; + public ModelRenderer bipedCloak; + public int heldItemLeft; + public int heldItemRight; + public boolean isSneak; + public boolean aimedBow; + + public ModelBiped() { + this(0.0F); + } + + public ModelBiped(float var1) { + this(var1, 0.0F, 64, 32); + } + + public ModelBiped(float var1, float var2, int var3, int var4) { + this.heldItemLeft = 0; + this.heldItemRight = 0; + this.isSneak = false; + this.aimedBow = false; + this.textureWidth = var3; + this.textureHeight = var4; + this.bipedCloak = new ModelRenderer(this, 0, 0); + this.bipedCloak.addBox(-5.0F, 0.0F, -1.0F, 10, 16, 1, var1); + this.bipedEars = new ModelRenderer(this, 24, 0); + this.bipedEars.addBox(-3.0F, -6.0F, -1.0F, 6, 6, 1, var1); + this.bipedHead = new ModelRenderer(this, 0, 0); + this.bipedHead.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, var1); + this.bipedHead.setRotationPoint(0.0F, 0.0F + var2, 0.0F); + this.bipedHeadwear = new ModelRenderer(this, 32, 0); + this.bipedHeadwear.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, var1 + 0.5F); + this.bipedHeadwear.setRotationPoint(0.0F, 0.0F + var2, 0.0F); + this.bipedBody = new ModelRenderer(this, 16, 16); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, var1); + this.bipedBody.setRotationPoint(0.0F, 0.0F + var2, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.addBox(-3.0F, -2.0F, -2.0F, 4, 12, 4, var1); + this.bipedRightArm.setRotationPoint(-5.0F, 2.0F + var2, 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, var1); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F + var2, 0.0F); + this.bipedRightLeg = new ModelRenderer(this, 0, 16); + this.bipedRightLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, var1); + this.bipedRightLeg.setRotationPoint(-1.9F, 12.0F + var2, 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, var1); + this.bipedLeftLeg.setRotationPoint(1.9F, 12.0F + var2, 0.0F); + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + if(this.isChild) { + float var8 = 2.0F; + GL11.glPushMatrix(); + GL11.glScalef(1.5F / var8, 1.5F / var8, 1.5F / var8); + GL11.glTranslatef(0.0F, 16.0F * var7, 0.0F); + this.bipedHead.render(var7); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(1.0F / var8, 1.0F / var8, 1.0F / var8); + GL11.glTranslatef(0.0F, 24.0F * var7, 0.0F); + this.bipedBody.render(var7); + this.bipedRightArm.render(var7); + this.bipedLeftArm.render(var7); + this.bipedRightLeg.render(var7); + this.bipedLeftLeg.render(var7); + this.bipedHeadwear.render(var7); + GL11.glPopMatrix(); + } else { + this.bipedHead.render(var7); + this.bipedBody.render(var7); + this.bipedRightArm.render(var7); + this.bipedLeftArm.render(var7); + this.bipedRightLeg.render(var7); + this.bipedLeftLeg.render(var7); + this.bipedHeadwear.render(var7); + } + + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + this.bipedHead.rotateAngleY = var4 / (180.0F / (float)Math.PI); + this.bipedHead.rotateAngleX = var5 / (180.0F / (float)Math.PI); + this.bipedHeadwear.rotateAngleY = this.bipedHead.rotateAngleY; + this.bipedHeadwear.rotateAngleX = this.bipedHead.rotateAngleX; + this.bipedRightArm.rotateAngleX = MathHelper.cos(var1 * 0.6662F + (float)Math.PI) * 2.0F * var2 * 0.5F; + this.bipedLeftArm.rotateAngleX = MathHelper.cos(var1 * 0.6662F) * 2.0F * var2 * 0.5F; + this.bipedRightArm.rotateAngleZ = 0.0F; + this.bipedLeftArm.rotateAngleZ = 0.0F; + this.bipedRightLeg.rotateAngleX = MathHelper.cos(var1 * 0.6662F) * 1.4F * var2; + this.bipedLeftLeg.rotateAngleX = MathHelper.cos(var1 * 0.6662F + (float)Math.PI) * 1.4F * var2; + this.bipedRightLeg.rotateAngleY = 0.0F; + this.bipedLeftLeg.rotateAngleY = 0.0F; + if(this.isRiding) { + this.bipedRightArm.rotateAngleX += (float)Math.PI * -0.2F; + this.bipedLeftArm.rotateAngleX += (float)Math.PI * -0.2F; + this.bipedRightLeg.rotateAngleX = (float)Math.PI * -0.4F; + this.bipedLeftLeg.rotateAngleX = (float)Math.PI * -0.4F; + this.bipedRightLeg.rotateAngleY = (float)Math.PI * 0.1F; + this.bipedLeftLeg.rotateAngleY = (float)Math.PI * -0.1F; + } + + if(this.heldItemLeft != 0) { + this.bipedLeftArm.rotateAngleX = this.bipedLeftArm.rotateAngleX * 0.5F - (float)Math.PI * 0.1F * (float)this.heldItemLeft; + } + + if(this.heldItemRight != 0) { + this.bipedRightArm.rotateAngleX = this.bipedRightArm.rotateAngleX * 0.5F - (float)Math.PI * 0.1F * (float)this.heldItemRight; + } + + this.bipedRightArm.rotateAngleY = 0.0F; + this.bipedLeftArm.rotateAngleY = 0.0F; + float var8; + float var9; + if(this.onGround > -9990.0F) { + var8 = this.onGround; + this.bipedBody.rotateAngleY = MathHelper.sin(MathHelper.sqrt_float(var8) * (float)Math.PI * 2.0F) * 0.2F; + 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; + var8 = 1.0F - this.onGround; + var8 *= var8; + var8 *= var8; + var8 = 1.0F - var8; + var9 = MathHelper.sin(var8 * (float)Math.PI); + float var10 = MathHelper.sin(this.onGround * (float)Math.PI) * -(this.bipedHead.rotateAngleX - 0.7F) * (12.0F / 16.0F); + this.bipedRightArm.rotateAngleX = (float)((double)this.bipedRightArm.rotateAngleX - ((double)var9 * 1.2D + (double)var10)); + this.bipedRightArm.rotateAngleY += this.bipedBody.rotateAngleY * 2.0F; + this.bipedRightArm.rotateAngleZ = MathHelper.sin(this.onGround * (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; + this.bipedHeadwear.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.bipedHeadwear.rotationPointY = 0.0F; + } + + this.bipedRightArm.rotateAngleZ += MathHelper.cos(var3 * 0.09F) * 0.05F + 0.05F; + this.bipedLeftArm.rotateAngleZ -= MathHelper.cos(var3 * 0.09F) * 0.05F + 0.05F; + this.bipedRightArm.rotateAngleX += MathHelper.sin(var3 * 0.067F) * 0.05F; + this.bipedLeftArm.rotateAngleX -= MathHelper.sin(var3 * 0.067F) * 0.05F; + if(this.aimedBow) { + var8 = 0.0F; + var9 = 0.0F; + this.bipedRightArm.rotateAngleZ = 0.0F; + this.bipedLeftArm.rotateAngleZ = 0.0F; + this.bipedRightArm.rotateAngleY = -(0.1F - var8 * 0.6F) + this.bipedHead.rotateAngleY; + this.bipedLeftArm.rotateAngleY = 0.1F - var8 * 0.6F + this.bipedHead.rotateAngleY + 0.4F; + this.bipedRightArm.rotateAngleX = (float)Math.PI * -0.5F + this.bipedHead.rotateAngleX; + this.bipedLeftArm.rotateAngleX = (float)Math.PI * -0.5F + this.bipedHead.rotateAngleX; + this.bipedRightArm.rotateAngleX -= var8 * 1.2F - var9 * 0.4F; + this.bipedLeftArm.rotateAngleX -= var8 * 1.2F - var9 * 0.4F; + this.bipedRightArm.rotateAngleZ += MathHelper.cos(var3 * 0.09F) * 0.05F + 0.05F; + this.bipedLeftArm.rotateAngleZ -= MathHelper.cos(var3 * 0.09F) * 0.05F + 0.05F; + this.bipedRightArm.rotateAngleX += MathHelper.sin(var3 * 0.067F) * 0.05F; + this.bipedLeftArm.rotateAngleX -= MathHelper.sin(var3 * 0.067F) * 0.05F; + } + + } + + public void renderEars(float var1) { + this.bipedEars.rotateAngleY = this.bipedHead.rotateAngleY; + this.bipedEars.rotateAngleX = this.bipedHead.rotateAngleX; + this.bipedEars.rotationPointX = 0.0F; + this.bipedEars.rotationPointY = 0.0F; + this.bipedEars.render(var1); + } + + public void renderCloak(float var1) { + this.bipedCloak.render(var1); + } +} diff --git a/src/net/minecraft/src/ModelBlaze.java b/src/net/minecraft/src/ModelBlaze.java new file mode 100644 index 0000000..985deae --- /dev/null +++ b/src/net/minecraft/src/ModelBlaze.java @@ -0,0 +1,63 @@ +package net.minecraft.src; + +public class ModelBlaze extends ModelBase { + private ModelRenderer[] blazeSticks = new ModelRenderer[12]; + private ModelRenderer blazeHead; + + public ModelBlaze() { + for(int var1 = 0; var1 < this.blazeSticks.length; ++var1) { + this.blazeSticks[var1] = new ModelRenderer(this, 0, 16); + this.blazeSticks[var1].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); + } + + public int func_78104_a() { + return 8; + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + this.blazeHead.render(var7); + + for(int var8 = 0; var8 < this.blazeSticks.length; ++var8) { + this.blazeSticks[var8].render(var7); + } + + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + float var8 = var3 * (float)Math.PI * -0.1F; + + int var9; + for(var9 = 0; var9 < 4; ++var9) { + this.blazeSticks[var9].rotationPointY = -2.0F + MathHelper.cos(((float)(var9 * 2) + var3) * 0.25F); + this.blazeSticks[var9].rotationPointX = MathHelper.cos(var8) * 9.0F; + this.blazeSticks[var9].rotationPointZ = MathHelper.sin(var8) * 9.0F; + var8 += (float)Math.PI * 0.5F; + } + + var8 = (float)Math.PI * 0.25F + var3 * (float)Math.PI * 0.03F; + + for(var9 = 4; var9 < 8; ++var9) { + this.blazeSticks[var9].rotationPointY = 2.0F + MathHelper.cos(((float)(var9 * 2) + var3) * 0.25F); + this.blazeSticks[var9].rotationPointX = MathHelper.cos(var8) * 7.0F; + this.blazeSticks[var9].rotationPointZ = MathHelper.sin(var8) * 7.0F; + var8 += (float)Math.PI * 0.5F; + } + + var8 = (float)Math.PI * 0.15F + var3 * (float)Math.PI * -0.05F; + + for(var9 = 8; var9 < 12; ++var9) { + this.blazeSticks[var9].rotationPointY = 11.0F + MathHelper.cos(((float)var9 * 1.5F + var3) * 0.5F); + this.blazeSticks[var9].rotationPointX = MathHelper.cos(var8) * 5.0F; + this.blazeSticks[var9].rotationPointZ = MathHelper.sin(var8) * 5.0F; + var8 += (float)Math.PI * 0.5F; + } + + this.blazeHead.rotateAngleY = var4 / (180.0F / (float)Math.PI); + this.blazeHead.rotateAngleX = var5 / (180.0F / (float)Math.PI); + } +} diff --git a/src/net/minecraft/src/ModelBoat.java b/src/net/minecraft/src/ModelBoat.java new file mode 100644 index 0000000..6c33487 --- /dev/null +++ b/src/net/minecraft/src/ModelBoat.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +public class ModelBoat extends ModelBase { + public ModelRenderer[] boatSides = new ModelRenderer[5]; + + public ModelBoat() { + this.boatSides[0] = new ModelRenderer(this, 0, 8); + this.boatSides[1] = new ModelRenderer(this, 0, 0); + this.boatSides[2] = new ModelRenderer(this, 0, 0); + this.boatSides[3] = new ModelRenderer(this, 0, 0); + this.boatSides[4] = new ModelRenderer(this, 0, 0); + byte var1 = 24; + byte var2 = 6; + byte var3 = 20; + byte var4 = 4; + this.boatSides[0].addBox((float)(-var1 / 2), (float)(-var3 / 2 + 2), -3.0F, var1, var3 - 4, 4, 0.0F); + this.boatSides[0].setRotationPoint(0.0F, (float)var4, 0.0F); + this.boatSides[1].addBox((float)(-var1 / 2 + 2), (float)(-var2 - 1), -1.0F, var1 - 4, var2, 2, 0.0F); + this.boatSides[1].setRotationPoint((float)(-var1 / 2 + 1), (float)var4, 0.0F); + this.boatSides[2].addBox((float)(-var1 / 2 + 2), (float)(-var2 - 1), -1.0F, var1 - 4, var2, 2, 0.0F); + this.boatSides[2].setRotationPoint((float)(var1 / 2 - 1), (float)var4, 0.0F); + this.boatSides[3].addBox((float)(-var1 / 2 + 2), (float)(-var2 - 1), -1.0F, var1 - 4, var2, 2, 0.0F); + this.boatSides[3].setRotationPoint(0.0F, (float)var4, (float)(-var3 / 2 + 1)); + this.boatSides[4].addBox((float)(-var1 / 2 + 2), (float)(-var2 - 1), -1.0F, var1 - 4, var2, 2, 0.0F); + this.boatSides[4].setRotationPoint(0.0F, (float)var4, (float)(var3 / 2 - 1)); + this.boatSides[0].rotateAngleX = (float)Math.PI * 0.5F; + this.boatSides[1].rotateAngleY = (float)Math.PI * 3.0F / 2.0F; + this.boatSides[2].rotateAngleY = (float)Math.PI * 0.5F; + this.boatSides[3].rotateAngleY = (float)Math.PI; + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + for(int var8 = 0; var8 < 5; ++var8) { + this.boatSides[var8].render(var7); + } + + } +} diff --git a/src/net/minecraft/src/ModelBook.java b/src/net/minecraft/src/ModelBook.java new file mode 100644 index 0000000..cfcded2 --- /dev/null +++ b/src/net/minecraft/src/ModelBook.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +public class ModelBook extends ModelBase { + public ModelRenderer coverRight = (new ModelRenderer(this)).setTextureOffset(0, 0).addBox(-6.0F, -5.0F, 0.0F, 6, 10, 0); + public ModelRenderer coverLeft = (new ModelRenderer(this)).setTextureOffset(16, 0).addBox(0.0F, -5.0F, 0.0F, 6, 10, 0); + public ModelRenderer pagesRight = (new ModelRenderer(this)).setTextureOffset(0, 10).addBox(0.0F, -4.0F, -0.99F, 5, 8, 1); + public ModelRenderer pagesLeft = (new ModelRenderer(this)).setTextureOffset(12, 10).addBox(0.0F, -4.0F, -0.01F, 5, 8, 1); + public ModelRenderer flippingPageRight = (new ModelRenderer(this)).setTextureOffset(24, 10).addBox(0.0F, -4.0F, 0.0F, 5, 8, 0); + public ModelRenderer flippingPageLeft = (new ModelRenderer(this)).setTextureOffset(24, 10).addBox(0.0F, -4.0F, 0.0F, 5, 8, 0); + 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 * 0.5F; + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + this.coverRight.render(var7); + this.coverLeft.render(var7); + this.bookSpine.render(var7); + this.pagesRight.render(var7); + this.pagesLeft.render(var7); + this.flippingPageRight.render(var7); + this.flippingPageLeft.render(var7); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + float var8 = (MathHelper.sin(var1 * 0.02F) * 0.1F + 1.25F) * var4; + this.coverRight.rotateAngleY = (float)Math.PI + var8; + this.coverLeft.rotateAngleY = -var8; + this.pagesRight.rotateAngleY = var8; + this.pagesLeft.rotateAngleY = -var8; + this.flippingPageRight.rotateAngleY = var8 - var8 * 2.0F * var2; + this.flippingPageLeft.rotateAngleY = var8 - var8 * 2.0F * var3; + this.pagesRight.rotationPointX = MathHelper.sin(var8); + this.pagesLeft.rotationPointX = MathHelper.sin(var8); + this.flippingPageRight.rotationPointX = MathHelper.sin(var8); + this.flippingPageLeft.rotationPointX = MathHelper.sin(var8); + } +} diff --git a/src/net/minecraft/src/ModelBox.java b/src/net/minecraft/src/ModelBox.java new file mode 100644 index 0000000..c389c4a --- /dev/null +++ b/src/net/minecraft/src/ModelBox.java @@ -0,0 +1,79 @@ +package net.minecraft.src; + +public class ModelBox { + private PositionTextureVertex[] vertexPositions; + private TexturedQuad[] quadList; + public final float posX1; + public final float posY1; + public final float posZ1; + public final float posX2; + public final float posY2; + public final float posZ2; + public String field_78247_g; + + public ModelBox(ModelRenderer var1, int var2, int var3, float var4, float var5, float var6, int var7, int var8, int var9, float var10) { + this.posX1 = var4; + this.posY1 = var5; + this.posZ1 = var6; + this.posX2 = var4 + (float)var7; + this.posY2 = var5 + (float)var8; + this.posZ2 = var6 + (float)var9; + this.vertexPositions = new PositionTextureVertex[8]; + this.quadList = new TexturedQuad[6]; + float var11 = var4 + (float)var7; + float var12 = var5 + (float)var8; + float var13 = var6 + (float)var9; + var4 -= var10; + var5 -= var10; + var6 -= var10; + var11 += var10; + var12 += var10; + var13 += var10; + if(var1.mirror) { + float var14 = var11; + var11 = var4; + var4 = var14; + } + + PositionTextureVertex var23 = new PositionTextureVertex(var4, var5, var6, 0.0F, 0.0F); + PositionTextureVertex var15 = new PositionTextureVertex(var11, var5, var6, 0.0F, 8.0F); + PositionTextureVertex var16 = new PositionTextureVertex(var11, var12, var6, 8.0F, 8.0F); + PositionTextureVertex var17 = new PositionTextureVertex(var4, var12, var6, 8.0F, 0.0F); + PositionTextureVertex var18 = new PositionTextureVertex(var4, var5, var13, 0.0F, 0.0F); + PositionTextureVertex var19 = new PositionTextureVertex(var11, var5, var13, 0.0F, 8.0F); + PositionTextureVertex var20 = new PositionTextureVertex(var11, var12, var13, 8.0F, 8.0F); + PositionTextureVertex var21 = new PositionTextureVertex(var4, var12, var13, 8.0F, 0.0F); + this.vertexPositions[0] = var23; + this.vertexPositions[1] = var15; + this.vertexPositions[2] = var16; + this.vertexPositions[3] = var17; + this.vertexPositions[4] = var18; + this.vertexPositions[5] = var19; + this.vertexPositions[6] = var20; + this.vertexPositions[7] = var21; + this.quadList[0] = new TexturedQuad(new PositionTextureVertex[]{var19, var15, var16, var20}, var2 + var9 + var7, var3 + var9, var2 + var9 + var7 + var9, var3 + var9 + var8, var1.textureWidth, var1.textureHeight); + this.quadList[1] = new TexturedQuad(new PositionTextureVertex[]{var23, var18, var21, var17}, var2, var3 + var9, var2 + var9, var3 + var9 + var8, var1.textureWidth, var1.textureHeight); + this.quadList[2] = new TexturedQuad(new PositionTextureVertex[]{var19, var18, var23, var15}, var2 + var9, var3, var2 + var9 + var7, var3 + var9, var1.textureWidth, var1.textureHeight); + this.quadList[3] = new TexturedQuad(new PositionTextureVertex[]{var16, var17, var21, var20}, var2 + var9 + var7, var3 + var9, var2 + var9 + var7 + var7, var3, var1.textureWidth, var1.textureHeight); + this.quadList[4] = new TexturedQuad(new PositionTextureVertex[]{var15, var23, var17, var16}, var2 + var9, var3 + var9, var2 + var9 + var7, var3 + var9 + var8, var1.textureWidth, var1.textureHeight); + this.quadList[5] = new TexturedQuad(new PositionTextureVertex[]{var18, var19, var20, var21}, var2 + var9 + var7 + var9, var3 + var9, var2 + var9 + var7 + var9 + var7, var3 + var9 + var8, var1.textureWidth, var1.textureHeight); + if(var1.mirror) { + for(int var22 = 0; var22 < this.quadList.length; ++var22) { + this.quadList[var22].flipFace(); + } + } + + } + + public void render(Tessellator var1, float var2) { + for(int var3 = 0; var3 < this.quadList.length; ++var3) { + this.quadList[var3].draw(var1, var2); + } + + } + + public ModelBox func_78244_a(String var1) { + this.field_78247_g = var1; + return this; + } +} diff --git a/src/net/minecraft/src/ModelChest.java b/src/net/minecraft/src/ModelChest.java new file mode 100644 index 0000000..44c108c --- /dev/null +++ b/src/net/minecraft/src/ModelChest.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +public class ModelChest extends ModelBase { + public ModelRenderer chestLid = (new ModelRenderer(this, 0, 0)).setTextureSize(64, 64); + public ModelRenderer chestBelow; + 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; + } + + public void renderAll() { + this.chestKnob.rotateAngleX = this.chestLid.rotateAngleX; + this.chestLid.render(1.0F / 16.0F); + this.chestKnob.render(1.0F / 16.0F); + this.chestBelow.render(1.0F / 16.0F); + } +} diff --git a/src/net/minecraft/src/ModelChicken.java b/src/net/minecraft/src/ModelChicken.java new file mode 100644 index 0000000..d8ae9ff --- /dev/null +++ b/src/net/minecraft/src/ModelChicken.java @@ -0,0 +1,88 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +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() { + byte var1 = 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, (float)(-1 + var1), -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, (float)(-1 + var1), -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, (float)(-1 + var1), -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, (float)var1, 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, (float)(3 + var1), 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, (float)(3 + var1), 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, (float)(-3 + var1), 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, (float)(-3 + var1), 0.0F); + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + if(this.isChild) { + float var8 = 2.0F; + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 5.0F * var7, 2.0F * var7); + this.head.render(var7); + this.bill.render(var7); + this.chin.render(var7); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(1.0F / var8, 1.0F / var8, 1.0F / var8); + GL11.glTranslatef(0.0F, 24.0F * var7, 0.0F); + this.body.render(var7); + this.rightLeg.render(var7); + this.leftLeg.render(var7); + this.rightWing.render(var7); + this.leftWing.render(var7); + GL11.glPopMatrix(); + } else { + this.head.render(var7); + this.bill.render(var7); + this.chin.render(var7); + this.body.render(var7); + this.rightLeg.render(var7); + this.leftLeg.render(var7); + this.rightWing.render(var7); + this.leftWing.render(var7); + } + + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + this.head.rotateAngleX = var5 / (180.0F / (float)Math.PI); + this.head.rotateAngleY = var4 / (180.0F / (float)Math.PI); + 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 * 0.5F; + this.rightLeg.rotateAngleX = MathHelper.cos(var1 * 0.6662F) * 1.4F * var2; + this.leftLeg.rotateAngleX = MathHelper.cos(var1 * 0.6662F + (float)Math.PI) * 1.4F * var2; + this.rightWing.rotateAngleZ = var3; + this.leftWing.rotateAngleZ = -var3; + } +} diff --git a/src/net/minecraft/src/ModelCow.java b/src/net/minecraft/src/ModelCow.java new file mode 100644 index 0000000..90a6aae --- /dev/null +++ b/src/net/minecraft/src/ModelCow.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +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.field_78151_h += 2.0F; + } +} diff --git a/src/net/minecraft/src/ModelCreeper.java b/src/net/minecraft/src/ModelCreeper.java new file mode 100644 index 0000000..7f8af47 --- /dev/null +++ b/src/net/minecraft/src/ModelCreeper.java @@ -0,0 +1,59 @@ +package net.minecraft.src; + +public class ModelCreeper extends ModelBase { + public ModelRenderer head; + public ModelRenderer field_78133_b; + public ModelRenderer body; + public ModelRenderer leg1; + public ModelRenderer leg2; + public ModelRenderer leg3; + public ModelRenderer leg4; + + public ModelCreeper() { + this(0.0F); + } + + public ModelCreeper(float var1) { + byte var2 = 4; + this.head = new ModelRenderer(this, 0, 0); + this.head.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, var1); + this.head.setRotationPoint(0.0F, (float)var2, 0.0F); + this.field_78133_b = new ModelRenderer(this, 32, 0); + this.field_78133_b.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, var1 + 0.5F); + this.field_78133_b.setRotationPoint(0.0F, (float)var2, 0.0F); + this.body = new ModelRenderer(this, 16, 16); + this.body.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, var1); + this.body.setRotationPoint(0.0F, (float)var2, 0.0F); + this.leg1 = new ModelRenderer(this, 0, 16); + this.leg1.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, var1); + this.leg1.setRotationPoint(-2.0F, (float)(12 + var2), 4.0F); + this.leg2 = new ModelRenderer(this, 0, 16); + this.leg2.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, var1); + this.leg2.setRotationPoint(2.0F, (float)(12 + var2), 4.0F); + this.leg3 = new ModelRenderer(this, 0, 16); + this.leg3.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, var1); + this.leg3.setRotationPoint(-2.0F, (float)(12 + var2), -4.0F); + this.leg4 = new ModelRenderer(this, 0, 16); + this.leg4.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, var1); + this.leg4.setRotationPoint(2.0F, (float)(12 + var2), -4.0F); + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + this.head.render(var7); + this.body.render(var7); + this.leg1.render(var7); + this.leg2.render(var7); + this.leg3.render(var7); + this.leg4.render(var7); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + this.head.rotateAngleY = var4 / (180.0F / (float)Math.PI); + this.head.rotateAngleX = var5 / (180.0F / (float)Math.PI); + this.leg1.rotateAngleX = MathHelper.cos(var1 * 0.6662F) * 1.4F * var2; + this.leg2.rotateAngleX = MathHelper.cos(var1 * 0.6662F + (float)Math.PI) * 1.4F * var2; + this.leg3.rotateAngleX = MathHelper.cos(var1 * 0.6662F + (float)Math.PI) * 1.4F * var2; + this.leg4.rotateAngleX = MathHelper.cos(var1 * 0.6662F) * 1.4F * var2; + } +} diff --git a/src/net/minecraft/src/ModelDragon.java b/src/net/minecraft/src/ModelDragon.java new file mode 100644 index 0000000..ec2ab92 --- /dev/null +++ b/src/net/minecraft/src/ModelDragon.java @@ -0,0 +1,213 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class ModelDragon extends ModelBase { + private ModelRenderer head; + private ModelRenderer neck; + private ModelRenderer jaw; + private ModelRenderer body; + private ModelRenderer rearLeg; + private ModelRenderer frontLeg; + private ModelRenderer rearLegTip; + private ModelRenderer frontLegTip; + private ModelRenderer rearFoot; + private ModelRenderer frontFoot; + private ModelRenderer wing; + private ModelRenderer wingTip; + private float partialTicks; + + public ModelDragon(float var1) { + 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 var2 = -16.0F; + this.head = new ModelRenderer(this, "head"); + this.head.addBox("upperlip", -6.0F, -1.0F, -8.0F + var2, 12, 5, 16); + this.head.addBox("upperhead", -8.0F, -8.0F, 6.0F + var2, 16, 16, 16); + this.head.mirror = true; + this.head.addBox("scale", -5.0F, -12.0F, 12.0F + var2, 2, 4, 6); + this.head.addBox("nostril", -5.0F, -3.0F, -6.0F + var2, 2, 2, 4); + this.head.mirror = false; + this.head.addBox("scale", 3.0F, -12.0F, 12.0F + var2, 2, 4, 6); + this.head.addBox("nostril", 3.0F, -3.0F, -6.0F + var2, 2, 2, 4); + this.jaw = new ModelRenderer(this, "jaw"); + this.jaw.setRotationPoint(0.0F, 4.0F, 8.0F + var2); + this.jaw.addBox("jaw", -6.0F, 0.0F, -16.0F, 12, 4, 16); + this.head.addChild(this.jaw); + this.neck = new ModelRenderer(this, "neck"); + this.neck.addBox("box", -5.0F, -5.0F, -5.0F, 10, 10, 10); + this.neck.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); + } + + public void setLivingAnimations(EntityLiving var1, float var2, float var3, float var4) { + this.partialTicks = var4; + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + GL11.glPushMatrix(); + EntityDragon var8 = (EntityDragon)var1; + float var9 = var8.prevAnimTime + (var8.animTime - var8.prevAnimTime) * this.partialTicks; + this.jaw.rotateAngleX = (float)(Math.sin((double)(var9 * (float)Math.PI * 2.0F)) + 1.0D) * 0.2F; + float var10 = (float)(Math.sin((double)(var9 * (float)Math.PI * 2.0F - 1.0F)) + 1.0D); + var10 = (var10 * var10 * 1.0F + var10 * 2.0F) * 0.05F; + GL11.glTranslatef(0.0F, var10 - 2.0F, -3.0F); + GL11.glRotatef(var10 * 2.0F, 1.0F, 0.0F, 0.0F); + float var11 = -30.0F; + float var13 = 0.0F; + float var14 = 1.5F; + double[] var15 = var8.getMovementOffsets(6, this.partialTicks); + float var16 = this.updateRotations(var8.getMovementOffsets(5, this.partialTicks)[0] - var8.getMovementOffsets(10, this.partialTicks)[0]); + float var17 = this.updateRotations(var8.getMovementOffsets(5, this.partialTicks)[0] + (double)(var16 / 2.0F)); + var11 += 2.0F; + float var18 = var9 * (float)Math.PI * 2.0F; + var11 = 20.0F; + float var12 = -12.0F; + + float var21; + for(int var19 = 0; var19 < 5; ++var19) { + double[] var20 = var8.getMovementOffsets(5 - var19, this.partialTicks); + var21 = (float)Math.cos((double)((float)var19 * 0.45F + var18)) * 0.15F; + this.neck.rotateAngleY = this.updateRotations(var20[0] - var15[0]) * (float)Math.PI / 180.0F * var14; + this.neck.rotateAngleX = var21 + (float)(var20[1] - var15[1]) * (float)Math.PI / 180.0F * var14 * 5.0F; + this.neck.rotateAngleZ = -this.updateRotations(var20[0] - (double)var17) * (float)Math.PI / 180.0F * var14; + this.neck.rotationPointY = var11; + this.neck.rotationPointZ = var12; + this.neck.rotationPointX = var13; + var11 = (float)((double)var11 + Math.sin((double)this.neck.rotateAngleX) * 10.0D); + var12 = (float)((double)var12 - Math.cos((double)this.neck.rotateAngleY) * Math.cos((double)this.neck.rotateAngleX) * 10.0D); + var13 = (float)((double)var13 - Math.sin((double)this.neck.rotateAngleY) * Math.cos((double)this.neck.rotateAngleX) * 10.0D); + this.neck.render(var7); + } + + this.head.rotationPointY = var11; + this.head.rotationPointZ = var12; + this.head.rotationPointX = var13; + double[] var22 = var8.getMovementOffsets(0, this.partialTicks); + this.head.rotateAngleY = this.updateRotations(var22[0] - var15[0]) * (float)Math.PI / 180.0F * 1.0F; + this.head.rotateAngleZ = -this.updateRotations(var22[0] - (double)var17) * (float)Math.PI / 180.0F * 1.0F; + this.head.render(var7); + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var16 * var14 * 1.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, -1.0F, 0.0F); + this.body.rotateAngleZ = 0.0F; + this.body.render(var7); + + for(int var23 = 0; var23 < 2; ++var23) { + GL11.glEnable(GL11.GL_CULL_FACE); + var21 = var9 * (float)Math.PI * 2.0F; + this.wing.rotateAngleX = 2.0F / 16.0F - (float)Math.cos((double)var21) * 0.2F; + this.wing.rotateAngleY = 0.25F; + this.wing.rotateAngleZ = (float)(Math.sin((double)var21) + 0.125D) * 0.8F; + this.wingTip.rotateAngleZ = -((float)(Math.sin((double)(var21 + 2.0F)) + 0.5D)) * (12.0F / 16.0F); + this.rearLeg.rotateAngleX = 1.0F + var10 * 0.1F; + this.rearLegTip.rotateAngleX = 0.5F + var10 * 0.1F; + this.rearFoot.rotateAngleX = 12.0F / 16.0F + var10 * 0.1F; + this.frontLeg.rotateAngleX = 1.3F + var10 * 0.1F; + this.frontLegTip.rotateAngleX = -0.5F - var10 * 0.1F; + this.frontFoot.rotateAngleX = 12.0F / 16.0F + var10 * 0.1F; + this.wing.render(var7); + this.frontLeg.render(var7); + this.rearLeg.render(var7); + GL11.glScalef(-1.0F, 1.0F, 1.0F); + if(var23 == 0) { + GL11.glCullFace(GL11.GL_FRONT); + } + } + + GL11.glPopMatrix(); + GL11.glCullFace(GL11.GL_BACK); + GL11.glDisable(GL11.GL_CULL_FACE); + float var24 = -((float)Math.sin((double)(var9 * (float)Math.PI * 2.0F))) * 0.0F; + var18 = var9 * (float)Math.PI * 2.0F; + var11 = 10.0F; + var12 = 60.0F; + var13 = 0.0F; + var15 = var8.getMovementOffsets(11, this.partialTicks); + + for(int var25 = 0; var25 < 12; ++var25) { + var22 = var8.getMovementOffsets(12 + var25, this.partialTicks); + var24 = (float)((double)var24 + Math.sin((double)((float)var25 * 0.45F + var18)) * (double)0.05F); + this.neck.rotateAngleY = (this.updateRotations(var22[0] - var15[0]) * var14 + 180.0F) * (float)Math.PI / 180.0F; + this.neck.rotateAngleX = var24 + (float)(var22[1] - var15[1]) * (float)Math.PI / 180.0F * var14 * 5.0F; + this.neck.rotateAngleZ = this.updateRotations(var22[0] - (double)var17) * (float)Math.PI / 180.0F * var14; + this.neck.rotationPointY = var11; + this.neck.rotationPointZ = var12; + this.neck.rotationPointX = var13; + var11 = (float)((double)var11 + Math.sin((double)this.neck.rotateAngleX) * 10.0D); + var12 = (float)((double)var12 - Math.cos((double)this.neck.rotateAngleY) * Math.cos((double)this.neck.rotateAngleX) * 10.0D); + var13 = (float)((double)var13 - Math.sin((double)this.neck.rotateAngleY) * Math.cos((double)this.neck.rotateAngleX) * 10.0D); + this.neck.render(var7); + } + + GL11.glPopMatrix(); + } + + private float updateRotations(double var1) { + while(var1 >= 180.0D) { + var1 -= 360.0D; + } + + while(var1 < -180.0D) { + var1 += 360.0D; + } + + return (float)var1; + } +} diff --git a/src/net/minecraft/src/ModelEnderCrystal.java b/src/net/minecraft/src/ModelEnderCrystal.java new file mode 100644 index 0000000..e527166 --- /dev/null +++ b/src/net/minecraft/src/ModelEnderCrystal.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class ModelEnderCrystal extends ModelBase { + private ModelRenderer cube; + private ModelRenderer glass = new ModelRenderer(this, "glass"); + private ModelRenderer base; + + public ModelEnderCrystal(float var1, boolean var2) { + 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(var2) { + this.base = new ModelRenderer(this, "base"); + this.base.setTextureOffset(0, 16).addBox(-6.0F, 0.0F, -6.0F, 12, 4, 12); + } + + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + GL11.glPushMatrix(); + GL11.glScalef(2.0F, 2.0F, 2.0F); + GL11.glTranslatef(0.0F, -0.5F, 0.0F); + if(this.base != null) { + this.base.render(var7); + } + + GL11.glRotatef(var3, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, 0.8F + var4, 0.0F); + GL11.glRotatef(60.0F, 0.7071F, 0.0F, 0.7071F); + this.glass.render(var7); + float var8 = 14.0F / 16.0F; + GL11.glScalef(var8, var8, var8); + GL11.glRotatef(60.0F, 0.7071F, 0.0F, 0.7071F); + GL11.glRotatef(var3, 0.0F, 1.0F, 0.0F); + this.glass.render(var7); + GL11.glScalef(var8, var8, var8); + GL11.glRotatef(60.0F, 0.7071F, 0.0F, 0.7071F); + GL11.glRotatef(var3, 0.0F, 1.0F, 0.0F); + this.cube.render(var7); + GL11.glPopMatrix(); + } +} diff --git a/src/net/minecraft/src/ModelEnderman.java b/src/net/minecraft/src/ModelEnderman.java new file mode 100644 index 0000000..bb17f5a --- /dev/null +++ b/src/net/minecraft/src/ModelEnderman.java @@ -0,0 +1,106 @@ +package net.minecraft.src; + +public class ModelEnderman extends ModelBiped { + public boolean isCarrying = false; + public boolean isAttacking = false; + + public ModelEnderman() { + super(0.0F, -14.0F, 64, 32); + float var1 = -14.0F; + float var2 = 0.0F; + this.bipedHeadwear = new ModelRenderer(this, 0, 16); + this.bipedHeadwear.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, var2 - 0.5F); + this.bipedHeadwear.setRotationPoint(0.0F, 0.0F + var1, 0.0F); + this.bipedBody = new ModelRenderer(this, 32, 16); + this.bipedBody.addBox(-4.0F, 0.0F, -2.0F, 8, 12, 4, var2); + this.bipedBody.setRotationPoint(0.0F, 0.0F + var1, 0.0F); + this.bipedRightArm = new ModelRenderer(this, 56, 0); + this.bipedRightArm.addBox(-1.0F, -2.0F, -1.0F, 2, 30, 2, var2); + this.bipedRightArm.setRotationPoint(-3.0F, 2.0F + var1, 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, var2); + this.bipedLeftArm.setRotationPoint(5.0F, 2.0F + var1, 0.0F); + this.bipedRightLeg = new ModelRenderer(this, 56, 0); + this.bipedRightLeg.addBox(-1.0F, 0.0F, -1.0F, 2, 30, 2, var2); + this.bipedRightLeg.setRotationPoint(-2.0F, 12.0F + var1, 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, var2); + this.bipedLeftLeg.setRotationPoint(2.0F, 12.0F + var1, 0.0F); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + super.setRotationAngles(var1, var2, var3, var4, var5, var6, var7); + this.bipedHead.showModel = true; + float var8 = -14.0F; + this.bipedBody.rotateAngleX = 0.0F; + this.bipedBody.rotationPointY = var8; + 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 var9 = 0.4F; + if(this.bipedRightArm.rotateAngleX > var9) { + this.bipedRightArm.rotateAngleX = var9; + } + + if(this.bipedLeftArm.rotateAngleX > var9) { + this.bipedLeftArm.rotateAngleX = var9; + } + + if(this.bipedRightArm.rotateAngleX < -var9) { + this.bipedRightArm.rotateAngleX = -var9; + } + + if(this.bipedLeftArm.rotateAngleX < -var9) { + this.bipedLeftArm.rotateAngleX = -var9; + } + + if(this.bipedRightLeg.rotateAngleX > var9) { + this.bipedRightLeg.rotateAngleX = var9; + } + + if(this.bipedLeftLeg.rotateAngleX > var9) { + this.bipedLeftLeg.rotateAngleX = var9; + } + + if(this.bipedRightLeg.rotateAngleX < -var9) { + this.bipedRightLeg.rotateAngleX = -var9; + } + + if(this.bipedLeftLeg.rotateAngleX < -var9) { + this.bipedLeftLeg.rotateAngleX = -var9; + } + + 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 = 9.0F + var8; + this.bipedLeftLeg.rotationPointY = 9.0F + var8; + this.bipedHead.rotationPointZ = -0.0F; + this.bipedHead.rotationPointY = var8 + 1.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 var10 = 1.0F; + this.bipedHead.rotationPointY -= var10 * 5.0F; + } + + } +} diff --git a/src/net/minecraft/src/ModelGhast.java b/src/net/minecraft/src/ModelGhast.java new file mode 100644 index 0000000..18e74cd --- /dev/null +++ b/src/net/minecraft/src/ModelGhast.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.util.Random; +import org.lwjgl.opengl.GL11; + +public class ModelGhast extends ModelBase { + ModelRenderer body; + ModelRenderer[] tentacles = new ModelRenderer[9]; + + public ModelGhast() { + byte var1 = -16; + this.body = new ModelRenderer(this, 0, 0); + this.body.addBox(-8.0F, -8.0F, -8.0F, 16, 16, 16); + this.body.rotationPointY += (float)(24 + var1); + Random var2 = new Random(1660L); + + for(int var3 = 0; var3 < this.tentacles.length; ++var3) { + this.tentacles[var3] = new ModelRenderer(this, 0, 0); + float var4 = (((float)(var3 % 3) - (float)(var3 / 3 % 2) * 0.5F + 0.25F) / 2.0F * 2.0F - 1.0F) * 5.0F; + float var5 = ((float)(var3 / 3) / 2.0F * 2.0F - 1.0F) * 5.0F; + int var6 = var2.nextInt(7) + 8; + this.tentacles[var3].addBox(-1.0F, 0.0F, -1.0F, 2, var6, 2); + this.tentacles[var3].rotationPointX = var4; + this.tentacles[var3].rotationPointZ = var5; + this.tentacles[var3].rotationPointY = (float)(31 + var1); + } + + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + for(int var8 = 0; var8 < this.tentacles.length; ++var8) { + this.tentacles[var8].rotateAngleX = 0.2F * MathHelper.sin(var3 * 0.3F + (float)var8) + 0.4F; + } + + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 0.6F, 0.0F); + this.body.render(var7); + ModelRenderer[] var8 = this.tentacles; + int var9 = var8.length; + + for(int var10 = 0; var10 < var9; ++var10) { + ModelRenderer var11 = var8[var10]; + var11.render(var7); + } + + GL11.glPopMatrix(); + } +} diff --git a/src/net/minecraft/src/ModelIronGolem.java b/src/net/minecraft/src/ModelIronGolem.java new file mode 100644 index 0000000..639a359 --- /dev/null +++ b/src/net/minecraft/src/ModelIronGolem.java @@ -0,0 +1,86 @@ +package net.minecraft.src; + +public class ModelIronGolem extends ModelBase { + public ModelRenderer ironGolemHead; + public ModelRenderer ironGolemBody; + public ModelRenderer ironGolemRightArm; + public ModelRenderer ironGolemLeftArm; + public ModelRenderer ironGolemLeftLeg; + public ModelRenderer ironGolemRightLeg; + + public ModelIronGolem() { + this(0.0F); + } + + public ModelIronGolem(float var1) { + this(var1, -7.0F); + } + + public ModelIronGolem(float var1, float var2) { + short var3 = 128; + short var4 = 128; + this.ironGolemHead = (new ModelRenderer(this)).setTextureSize(var3, var4); + this.ironGolemHead.setRotationPoint(0.0F, 0.0F + var2, -2.0F); + this.ironGolemHead.setTextureOffset(0, 0).addBox(-4.0F, -12.0F, -5.5F, 8, 10, 8, var1); + this.ironGolemHead.setTextureOffset(24, 0).addBox(-1.0F, -5.0F, -7.5F, 2, 4, 2, var1); + this.ironGolemBody = (new ModelRenderer(this)).setTextureSize(var3, var4); + this.ironGolemBody.setRotationPoint(0.0F, 0.0F + var2, 0.0F); + this.ironGolemBody.setTextureOffset(0, 40).addBox(-9.0F, -2.0F, -6.0F, 18, 12, 11, var1); + this.ironGolemBody.setTextureOffset(0, 70).addBox(-4.5F, 10.0F, -3.0F, 9, 5, 6, var1 + 0.5F); + this.ironGolemRightArm = (new ModelRenderer(this)).setTextureSize(var3, var4); + this.ironGolemRightArm.setRotationPoint(0.0F, -7.0F, 0.0F); + this.ironGolemRightArm.setTextureOffset(60, 21).addBox(-13.0F, -2.5F, -3.0F, 4, 30, 6, var1); + this.ironGolemLeftArm = (new ModelRenderer(this)).setTextureSize(var3, var4); + this.ironGolemLeftArm.setRotationPoint(0.0F, -7.0F, 0.0F); + this.ironGolemLeftArm.setTextureOffset(60, 58).addBox(9.0F, -2.5F, -3.0F, 4, 30, 6, var1); + this.ironGolemLeftLeg = (new ModelRenderer(this, 0, 22)).setTextureSize(var3, var4); + this.ironGolemLeftLeg.setRotationPoint(-4.0F, 18.0F + var2, 0.0F); + this.ironGolemLeftLeg.setTextureOffset(37, 0).addBox(-3.5F, -3.0F, -3.0F, 6, 16, 5, var1); + this.ironGolemRightLeg = (new ModelRenderer(this, 0, 22)).setTextureSize(var3, var4); + this.ironGolemRightLeg.mirror = true; + this.ironGolemRightLeg.setTextureOffset(60, 0).setRotationPoint(5.0F, 18.0F + var2, 0.0F); + this.ironGolemRightLeg.addBox(-3.5F, -3.0F, -3.0F, 6, 16, 5, var1); + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + this.ironGolemHead.render(var7); + this.ironGolemBody.render(var7); + this.ironGolemLeftLeg.render(var7); + this.ironGolemRightLeg.render(var7); + this.ironGolemRightArm.render(var7); + this.ironGolemLeftArm.render(var7); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + this.ironGolemHead.rotateAngleY = var4 / (180.0F / (float)Math.PI); + this.ironGolemHead.rotateAngleX = var5 / (180.0F / (float)Math.PI); + this.ironGolemLeftLeg.rotateAngleX = -1.5F * this.func_78172_a(var1, 13.0F) * var2; + this.ironGolemRightLeg.rotateAngleX = 1.5F * this.func_78172_a(var1, 13.0F) * var2; + this.ironGolemLeftLeg.rotateAngleY = 0.0F; + this.ironGolemRightLeg.rotateAngleY = 0.0F; + } + + public void setLivingAnimations(EntityLiving var1, float var2, float var3, float var4) { + EntityIronGolem var5 = (EntityIronGolem)var1; + int var6 = var5.getAttackTimer(); + if(var6 > 0) { + this.ironGolemRightArm.rotateAngleX = -2.0F + 1.5F * this.func_78172_a((float)var6 - var4, 10.0F); + this.ironGolemLeftArm.rotateAngleX = -2.0F + 1.5F * this.func_78172_a((float)var6 - var4, 10.0F); + } else { + int var7 = var5.getHoldRoseTick(); + if(var7 > 0) { + this.ironGolemRightArm.rotateAngleX = -0.8F + 0.025F * this.func_78172_a((float)var7, 70.0F); + this.ironGolemLeftArm.rotateAngleX = 0.0F; + } else { + this.ironGolemRightArm.rotateAngleX = (-0.2F + 1.5F * this.func_78172_a(var2, 13.0F)) * var3; + this.ironGolemLeftArm.rotateAngleX = (-0.2F - 1.5F * this.func_78172_a(var2, 13.0F)) * var3; + } + } + + } + + private float func_78172_a(float var1, float var2) { + return (Math.abs(var1 % var2 - var2 * 0.5F) - var2 * 0.25F) / (var2 * 0.25F); + } +} diff --git a/src/net/minecraft/src/ModelLargeChest.java b/src/net/minecraft/src/ModelLargeChest.java new file mode 100644 index 0000000..22b6c67 --- /dev/null +++ b/src/net/minecraft/src/ModelLargeChest.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +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; + } +} diff --git a/src/net/minecraft/src/ModelMagmaCube.java b/src/net/minecraft/src/ModelMagmaCube.java new file mode 100644 index 0000000..c128a7c --- /dev/null +++ b/src/net/minecraft/src/ModelMagmaCube.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +public class ModelMagmaCube extends ModelBase { + ModelRenderer[] field_78109_a = new ModelRenderer[8]; + ModelRenderer field_78108_b; + + public ModelMagmaCube() { + for(int var1 = 0; var1 < this.field_78109_a.length; ++var1) { + byte var2 = 0; + int var3 = var1; + if(var1 == 2) { + var2 = 24; + var3 = 10; + } else if(var1 == 3) { + var2 = 24; + var3 = 19; + } + + this.field_78109_a[var1] = new ModelRenderer(this, var2, var3); + this.field_78109_a[var1].addBox(-4.0F, (float)(16 + var1), -4.0F, 8, 1, 8); + } + + this.field_78108_b = new ModelRenderer(this, 0, 16); + this.field_78108_b.addBox(-2.0F, 18.0F, -2.0F, 4, 4, 4); + } + + public int func_78107_a() { + return 5; + } + + public void setLivingAnimations(EntityLiving var1, float var2, float var3, float var4) { + EntityMagmaCube var5 = (EntityMagmaCube)var1; + float var6 = var5.field_70812_c + (var5.field_70811_b - var5.field_70812_c) * var4; + if(var6 < 0.0F) { + var6 = 0.0F; + } + + for(int var7 = 0; var7 < this.field_78109_a.length; ++var7) { + this.field_78109_a[var7].rotationPointY = (float)(-(4 - var7)) * var6 * 1.7F; + } + + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + this.field_78108_b.render(var7); + + for(int var8 = 0; var8 < this.field_78109_a.length; ++var8) { + this.field_78109_a[var8].render(var7); + } + + } +} diff --git a/src/net/minecraft/src/ModelMinecart.java b/src/net/minecraft/src/ModelMinecart.java new file mode 100644 index 0000000..6852e68 --- /dev/null +++ b/src/net/minecraft/src/ModelMinecart.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +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); + byte var1 = 20; + byte var2 = 8; + byte var3 = 16; + byte var4 = 4; + this.sideModels[0].addBox((float)(-var1 / 2), (float)(-var3 / 2), -1.0F, var1, var3, 2, 0.0F); + this.sideModels[0].setRotationPoint(0.0F, (float)var4, 0.0F); + this.sideModels[5].addBox((float)(-var1 / 2 + 1), (float)(-var3 / 2 + 1), -1.0F, var1 - 2, var3 - 2, 1, 0.0F); + this.sideModels[5].setRotationPoint(0.0F, (float)var4, 0.0F); + this.sideModels[1].addBox((float)(-var1 / 2 + 2), (float)(-var2 - 1), -1.0F, var1 - 4, var2, 2, 0.0F); + this.sideModels[1].setRotationPoint((float)(-var1 / 2 + 1), (float)var4, 0.0F); + this.sideModels[2].addBox((float)(-var1 / 2 + 2), (float)(-var2 - 1), -1.0F, var1 - 4, var2, 2, 0.0F); + this.sideModels[2].setRotationPoint((float)(var1 / 2 - 1), (float)var4, 0.0F); + this.sideModels[3].addBox((float)(-var1 / 2 + 2), (float)(-var2 - 1), -1.0F, var1 - 4, var2, 2, 0.0F); + this.sideModels[3].setRotationPoint(0.0F, (float)var4, (float)(-var3 / 2 + 1)); + this.sideModels[4].addBox((float)(-var1 / 2 + 2), (float)(-var2 - 1), -1.0F, var1 - 4, var2, 2, 0.0F); + this.sideModels[4].setRotationPoint(0.0F, (float)var4, (float)(var3 / 2 - 1)); + this.sideModels[0].rotateAngleX = (float)Math.PI * 0.5F; + this.sideModels[1].rotateAngleY = (float)Math.PI * 3.0F / 2.0F; + this.sideModels[2].rotateAngleY = (float)Math.PI * 0.5F; + this.sideModels[3].rotateAngleY = (float)Math.PI; + this.sideModels[5].rotateAngleX = (float)Math.PI * -0.5F; + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.sideModels[5].rotationPointY = 4.0F - var4; + + for(int var8 = 0; var8 < 6; ++var8) { + this.sideModels[var8].render(var7); + } + + } +} diff --git a/src/net/minecraft/src/ModelOcelot.java b/src/net/minecraft/src/ModelOcelot.java new file mode 100644 index 0000000..6933493 --- /dev/null +++ b/src/net/minecraft/src/ModelOcelot.java @@ -0,0 +1,164 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class ModelOcelot extends ModelBase { + ModelRenderer ocelotBackLeftLeg; + ModelRenderer ocelotBackRightLeg; + ModelRenderer ocelotFrontLeftLeg; + ModelRenderer ocelotFrontRightLeg; + ModelRenderer ocelotTail; + ModelRenderer ocelotTail2; + ModelRenderer ocelotHead; + ModelRenderer ocelotBody; + int field_78163_i = 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); + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + if(this.isChild) { + float var8 = 2.0F; + GL11.glPushMatrix(); + GL11.glScalef(1.5F / var8, 1.5F / var8, 1.5F / var8); + GL11.glTranslatef(0.0F, 10.0F * var7, 4.0F * var7); + this.ocelotHead.render(var7); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(1.0F / var8, 1.0F / var8, 1.0F / var8); + GL11.glTranslatef(0.0F, 24.0F * var7, 0.0F); + this.ocelotBody.render(var7); + this.ocelotBackLeftLeg.render(var7); + this.ocelotBackRightLeg.render(var7); + this.ocelotFrontLeftLeg.render(var7); + this.ocelotFrontRightLeg.render(var7); + this.ocelotTail.render(var7); + this.ocelotTail2.render(var7); + GL11.glPopMatrix(); + } else { + this.ocelotHead.render(var7); + this.ocelotBody.render(var7); + this.ocelotTail.render(var7); + this.ocelotTail2.render(var7); + this.ocelotBackLeftLeg.render(var7); + this.ocelotBackRightLeg.render(var7); + this.ocelotFrontLeftLeg.render(var7); + this.ocelotFrontRightLeg.render(var7); + } + + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + this.ocelotHead.rotateAngleX = var5 / (180.0F / (float)Math.PI); + this.ocelotHead.rotateAngleY = var4 / (180.0F / (float)Math.PI); + if(this.field_78163_i != 3) { + this.ocelotBody.rotateAngleX = (float)Math.PI * 0.5F; + if(this.field_78163_i == 2) { + this.ocelotBackLeftLeg.rotateAngleX = MathHelper.cos(var1 * 0.6662F) * 1.0F * var2; + this.ocelotBackRightLeg.rotateAngleX = MathHelper.cos(var1 * 0.6662F + 0.3F) * 1.0F * var2; + this.ocelotFrontLeftLeg.rotateAngleX = MathHelper.cos(var1 * 0.6662F + (float)Math.PI + 0.3F) * 1.0F * var2; + this.ocelotFrontRightLeg.rotateAngleX = MathHelper.cos(var1 * 0.6662F + (float)Math.PI) * 1.0F * var2; + this.ocelotTail2.rotateAngleX = (float)Math.PI * 0.55F + (float)Math.PI * 0.1F * MathHelper.cos(var1) * var2; + } else { + this.ocelotBackLeftLeg.rotateAngleX = MathHelper.cos(var1 * 0.6662F) * 1.0F * var2; + this.ocelotBackRightLeg.rotateAngleX = MathHelper.cos(var1 * 0.6662F + (float)Math.PI) * 1.0F * var2; + this.ocelotFrontLeftLeg.rotateAngleX = MathHelper.cos(var1 * 0.6662F + (float)Math.PI) * 1.0F * var2; + this.ocelotFrontRightLeg.rotateAngleX = MathHelper.cos(var1 * 0.6662F) * 1.0F * var2; + if(this.field_78163_i == 1) { + this.ocelotTail2.rotateAngleX = (float)Math.PI * 0.55F + (float)Math.PI * 0.25F * MathHelper.cos(var1) * var2; + } else { + this.ocelotTail2.rotateAngleX = (float)Math.PI * 0.55F + (float)Math.PI * 0.15F * MathHelper.cos(var1) * var2; + } + } + } + + } + + public void setLivingAnimations(EntityLiving var1, float var2, float var3, float var4) { + EntityOcelot var5 = (EntityOcelot)var1; + 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 = this.ocelotFrontRightLeg.rotationPointY = 13.8F; + this.ocelotFrontLeftLeg.rotationPointZ = this.ocelotFrontRightLeg.rotationPointZ = -5.0F; + this.ocelotBackLeftLeg.rotationPointY = this.ocelotBackRightLeg.rotationPointY = 18.0F; + this.ocelotBackLeftLeg.rotationPointZ = this.ocelotBackRightLeg.rotationPointZ = 5.0F; + this.ocelotTail.rotateAngleX = 0.9F; + if(var5.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 * 0.5F; + this.ocelotTail2.rotateAngleX = (float)Math.PI * 0.5F; + this.field_78163_i = 0; + } else if(var5.isSprinting()) { + this.ocelotTail2.rotationPointY = this.ocelotTail.rotationPointY; + this.ocelotTail2.rotationPointZ += 2.0F; + this.ocelotTail.rotateAngleX = (float)Math.PI * 0.5F; + this.ocelotTail2.rotateAngleX = (float)Math.PI * 0.5F; + this.field_78163_i = 2; + } else if(var5.isSitting()) { + this.ocelotBody.rotateAngleX = (float)Math.PI * 0.25F; + 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 = (float)Math.PI * 0.55F; + this.ocelotTail2.rotateAngleX = (float)Math.PI * 0.85F; + this.ocelotFrontLeftLeg.rotateAngleX = this.ocelotFrontRightLeg.rotateAngleX = (float)Math.PI * -0.05F; + this.ocelotFrontLeftLeg.rotationPointY = this.ocelotFrontRightLeg.rotationPointY = 15.8F; + this.ocelotFrontLeftLeg.rotationPointZ = this.ocelotFrontRightLeg.rotationPointZ = -7.0F; + this.ocelotBackLeftLeg.rotateAngleX = this.ocelotBackRightLeg.rotateAngleX = (float)Math.PI * -0.5F; + this.ocelotBackLeftLeg.rotationPointY = this.ocelotBackRightLeg.rotationPointY = 21.0F; + this.ocelotBackLeftLeg.rotationPointZ = this.ocelotBackRightLeg.rotationPointZ = 1.0F; + this.field_78163_i = 3; + } else { + this.field_78163_i = 1; + } + + } +} diff --git a/src/net/minecraft/src/ModelPig.java b/src/net/minecraft/src/ModelPig.java new file mode 100644 index 0000000..4ec2204 --- /dev/null +++ b/src/net/minecraft/src/ModelPig.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class ModelPig extends ModelQuadruped { + public ModelPig() { + this(0.0F); + } + + public ModelPig(float var1) { + super(6, var1); + this.head.setTextureOffset(16, 16).addBox(-2.0F, 0.0F, -9.0F, 4, 3, 1, var1); + this.field_78145_g = 4.0F; + } +} diff --git a/src/net/minecraft/src/ModelQuadruped.java b/src/net/minecraft/src/ModelQuadruped.java new file mode 100644 index 0000000..e4854a8 --- /dev/null +++ b/src/net/minecraft/src/ModelQuadruped.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +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 field_78145_g = 8.0F; + protected float field_78151_h = 4.0F; + + public ModelQuadruped(int var1, float var2) { + this.head.addBox(-4.0F, -4.0F, -8.0F, 8, 8, 8, var2); + this.head.setRotationPoint(0.0F, (float)(18 - var1), -6.0F); + this.body = new ModelRenderer(this, 28, 8); + this.body.addBox(-5.0F, -10.0F, -7.0F, 10, 16, 8, var2); + this.body.setRotationPoint(0.0F, (float)(17 - var1), 2.0F); + this.leg1 = new ModelRenderer(this, 0, 16); + this.leg1.addBox(-2.0F, 0.0F, -2.0F, 4, var1, 4, var2); + this.leg1.setRotationPoint(-3.0F, (float)(24 - var1), 7.0F); + this.leg2 = new ModelRenderer(this, 0, 16); + this.leg2.addBox(-2.0F, 0.0F, -2.0F, 4, var1, 4, var2); + this.leg2.setRotationPoint(3.0F, (float)(24 - var1), 7.0F); + this.leg3 = new ModelRenderer(this, 0, 16); + this.leg3.addBox(-2.0F, 0.0F, -2.0F, 4, var1, 4, var2); + this.leg3.setRotationPoint(-3.0F, (float)(24 - var1), -5.0F); + this.leg4 = new ModelRenderer(this, 0, 16); + this.leg4.addBox(-2.0F, 0.0F, -2.0F, 4, var1, 4, var2); + this.leg4.setRotationPoint(3.0F, (float)(24 - var1), -5.0F); + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + if(this.isChild) { + float var8 = 2.0F; + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, this.field_78145_g * var7, this.field_78151_h * var7); + this.head.render(var7); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(1.0F / var8, 1.0F / var8, 1.0F / var8); + GL11.glTranslatef(0.0F, 24.0F * var7, 0.0F); + this.body.render(var7); + this.leg1.render(var7); + this.leg2.render(var7); + this.leg3.render(var7); + this.leg4.render(var7); + GL11.glPopMatrix(); + } else { + this.head.render(var7); + this.body.render(var7); + this.leg1.render(var7); + this.leg2.render(var7); + this.leg3.render(var7); + this.leg4.render(var7); + } + + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + this.head.rotateAngleX = var5 / (180.0F / (float)Math.PI); + this.head.rotateAngleY = var4 / (180.0F / (float)Math.PI); + this.body.rotateAngleX = (float)Math.PI * 0.5F; + this.leg1.rotateAngleX = MathHelper.cos(var1 * 0.6662F) * 1.4F * var2; + this.leg2.rotateAngleX = MathHelper.cos(var1 * 0.6662F + (float)Math.PI) * 1.4F * var2; + this.leg3.rotateAngleX = MathHelper.cos(var1 * 0.6662F + (float)Math.PI) * 1.4F * var2; + this.leg4.rotateAngleX = MathHelper.cos(var1 * 0.6662F) * 1.4F * var2; + } +} diff --git a/src/net/minecraft/src/ModelRenderer.java b/src/net/minecraft/src/ModelRenderer.java new file mode 100644 index 0000000..d422524 --- /dev/null +++ b/src/net/minecraft/src/ModelRenderer.java @@ -0,0 +1,225 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import org.lwjgl.opengl.GL11; + +public class ModelRenderer { + public float textureWidth; + public float textureHeight; + private int textureOffsetX; + private int textureOffsetY; + public float rotationPointX; + public float rotationPointY; + public float rotationPointZ; + public float rotateAngleX; + public float rotateAngleY; + public float rotateAngleZ; + private boolean compiled; + private int displayList; + public boolean mirror; + public boolean showModel; + public boolean isHidden; + public List cubeList; + public List childModels; + public final String boxName; + private ModelBase baseModel; + public float field_82906_o; + public float field_82908_p; + public float field_82907_q; + + public ModelRenderer(ModelBase var1, String var2) { + this.textureWidth = 64.0F; + this.textureHeight = 32.0F; + this.compiled = false; + this.displayList = 0; + this.mirror = false; + this.showModel = true; + this.isHidden = false; + this.cubeList = new ArrayList(); + this.baseModel = var1; + var1.boxList.add(this); + this.boxName = var2; + this.setTextureSize(var1.textureWidth, var1.textureHeight); + } + + public ModelRenderer(ModelBase var1) { + this(var1, (String)null); + } + + public ModelRenderer(ModelBase var1, int var2, int var3) { + this(var1); + this.setTextureOffset(var2, var3); + } + + public void addChild(ModelRenderer var1) { + if(this.childModels == null) { + this.childModels = new ArrayList(); + } + + this.childModels.add(var1); + } + + public ModelRenderer setTextureOffset(int var1, int var2) { + this.textureOffsetX = var1; + this.textureOffsetY = var2; + return this; + } + + public ModelRenderer addBox(String var1, float var2, float var3, float var4, int var5, int var6, int var7) { + var1 = this.boxName + "." + var1; + TextureOffset var8 = this.baseModel.getTextureOffset(var1); + this.setTextureOffset(var8.textureOffsetX, var8.textureOffsetY); + this.cubeList.add((new ModelBox(this, this.textureOffsetX, this.textureOffsetY, var2, var3, var4, var5, var6, var7, 0.0F)).func_78244_a(var1)); + return this; + } + + public ModelRenderer addBox(float var1, float var2, float var3, int var4, int var5, int var6) { + this.cubeList.add(new ModelBox(this, this.textureOffsetX, this.textureOffsetY, var1, var2, var3, var4, var5, var6, 0.0F)); + return this; + } + + public void addBox(float var1, float var2, float var3, int var4, int var5, int var6, float var7) { + this.cubeList.add(new ModelBox(this, this.textureOffsetX, this.textureOffsetY, var1, var2, var3, var4, var5, var6, var7)); + } + + public void setRotationPoint(float var1, float var2, float var3) { + this.rotationPointX = var1; + this.rotationPointY = var2; + this.rotationPointZ = var3; + } + + public void render(float var1) { + if(!this.isHidden) { + if(this.showModel) { + if(!this.compiled) { + this.compileDisplayList(var1); + } + + GL11.glTranslatef(this.field_82906_o, this.field_82908_p, this.field_82907_q); + int var2; + 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) { + GL11.glCallList(this.displayList); + if(this.childModels != null) { + for(var2 = 0; var2 < this.childModels.size(); ++var2) { + ((ModelRenderer)this.childModels.get(var2)).render(var1); + } + } + } else { + GL11.glTranslatef(this.rotationPointX * var1, this.rotationPointY * var1, this.rotationPointZ * var1); + GL11.glCallList(this.displayList); + if(this.childModels != null) { + for(var2 = 0; var2 < this.childModels.size(); ++var2) { + ((ModelRenderer)this.childModels.get(var2)).render(var1); + } + } + + GL11.glTranslatef(-this.rotationPointX * var1, -this.rotationPointY * var1, -this.rotationPointZ * var1); + } + } else { + GL11.glPushMatrix(); + GL11.glTranslatef(this.rotationPointX * var1, this.rotationPointY * var1, this.rotationPointZ * var1); + if(this.rotateAngleZ != 0.0F) { + GL11.glRotatef(this.rotateAngleZ * (180.0F / (float)Math.PI), 0.0F, 0.0F, 1.0F); + } + + if(this.rotateAngleY != 0.0F) { + GL11.glRotatef(this.rotateAngleY * (180.0F / (float)Math.PI), 0.0F, 1.0F, 0.0F); + } + + if(this.rotateAngleX != 0.0F) { + GL11.glRotatef(this.rotateAngleX * (180.0F / (float)Math.PI), 1.0F, 0.0F, 0.0F); + } + + GL11.glCallList(this.displayList); + if(this.childModels != null) { + for(var2 = 0; var2 < this.childModels.size(); ++var2) { + ((ModelRenderer)this.childModels.get(var2)).render(var1); + } + } + + GL11.glPopMatrix(); + } + + GL11.glTranslatef(-this.field_82906_o, -this.field_82908_p, -this.field_82907_q); + } + } + } + + public void renderWithRotation(float var1) { + if(!this.isHidden) { + if(this.showModel) { + if(!this.compiled) { + this.compileDisplayList(var1); + } + + GL11.glPushMatrix(); + GL11.glTranslatef(this.rotationPointX * var1, this.rotationPointY * var1, this.rotationPointZ * var1); + if(this.rotateAngleY != 0.0F) { + GL11.glRotatef(this.rotateAngleY * (180.0F / (float)Math.PI), 0.0F, 1.0F, 0.0F); + } + + if(this.rotateAngleX != 0.0F) { + GL11.glRotatef(this.rotateAngleX * (180.0F / (float)Math.PI), 1.0F, 0.0F, 0.0F); + } + + if(this.rotateAngleZ != 0.0F) { + GL11.glRotatef(this.rotateAngleZ * (180.0F / (float)Math.PI), 0.0F, 0.0F, 1.0F); + } + + GL11.glCallList(this.displayList); + GL11.glPopMatrix(); + } + } + } + + public void postRender(float var1) { + if(!this.isHidden) { + if(this.showModel) { + if(!this.compiled) { + this.compileDisplayList(var1); + } + + 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) { + GL11.glTranslatef(this.rotationPointX * var1, this.rotationPointY * var1, this.rotationPointZ * var1); + } + } else { + GL11.glTranslatef(this.rotationPointX * var1, this.rotationPointY * var1, this.rotationPointZ * var1); + if(this.rotateAngleZ != 0.0F) { + GL11.glRotatef(this.rotateAngleZ * (180.0F / (float)Math.PI), 0.0F, 0.0F, 1.0F); + } + + if(this.rotateAngleY != 0.0F) { + GL11.glRotatef(this.rotateAngleY * (180.0F / (float)Math.PI), 0.0F, 1.0F, 0.0F); + } + + if(this.rotateAngleX != 0.0F) { + GL11.glRotatef(this.rotateAngleX * (180.0F / (float)Math.PI), 1.0F, 0.0F, 0.0F); + } + } + + } + } + } + + private void compileDisplayList(float var1) { + this.displayList = GLAllocation.generateDisplayLists(1); + GL11.glNewList(this.displayList, GL11.GL_COMPILE); + Tessellator var2 = Tessellator.instance; + + for(int var3 = 0; var3 < this.cubeList.size(); ++var3) { + ((ModelBox)this.cubeList.get(var3)).render(var2, var1); + } + + GL11.glEndList(); + this.compiled = true; + } + + public ModelRenderer setTextureSize(int var1, int var2) { + this.textureWidth = (float)var1; + this.textureHeight = (float)var2; + return this; + } +} diff --git a/src/net/minecraft/src/ModelSheep1.java b/src/net/minecraft/src/ModelSheep1.java new file mode 100644 index 0000000..acd69c0 --- /dev/null +++ b/src/net/minecraft/src/ModelSheep1.java @@ -0,0 +1,39 @@ +package net.minecraft.src; + +public class ModelSheep1 extends ModelQuadruped { + private float field_78152_i; + + 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 var1 = 0.5F; + this.leg1 = new ModelRenderer(this, 0, 16); + this.leg1.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, var1); + 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, var1); + 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, var1); + 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, var1); + this.leg4.setRotationPoint(3.0F, 12.0F, -5.0F); + } + + public void setLivingAnimations(EntityLiving var1, float var2, float var3, float var4) { + super.setLivingAnimations(var1, var2, var3, var4); + this.head.rotationPointY = 6.0F + ((EntitySheep)var1).func_70894_j(var4) * 9.0F; + this.field_78152_i = ((EntitySheep)var1).func_70890_k(var4); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + super.setRotationAngles(var1, var2, var3, var4, var5, var6, var7); + this.head.rotateAngleX = this.field_78152_i; + } +} diff --git a/src/net/minecraft/src/ModelSheep2.java b/src/net/minecraft/src/ModelSheep2.java new file mode 100644 index 0000000..ae6303e --- /dev/null +++ b/src/net/minecraft/src/ModelSheep2.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class ModelSheep2 extends ModelQuadruped { + private float field_78153_i; + + 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); + } + + public void setLivingAnimations(EntityLiving var1, float var2, float var3, float var4) { + super.setLivingAnimations(var1, var2, var3, var4); + this.head.rotationPointY = 6.0F + ((EntitySheep)var1).func_70894_j(var4) * 9.0F; + this.field_78153_i = ((EntitySheep)var1).func_70890_k(var4); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + super.setRotationAngles(var1, var2, var3, var4, var5, var6, var7); + this.head.rotateAngleX = this.field_78153_i; + } +} diff --git a/src/net/minecraft/src/ModelSign.java b/src/net/minecraft/src/ModelSign.java new file mode 100644 index 0000000..b31ad5e --- /dev/null +++ b/src/net/minecraft/src/ModelSign.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class ModelSign extends ModelBase { + public ModelRenderer signBoard = new ModelRenderer(this, 0, 0); + 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); + } + + public void renderSign() { + this.signBoard.render(1.0F / 16.0F); + this.signStick.render(1.0F / 16.0F); + } +} diff --git a/src/net/minecraft/src/ModelSilverfish.java b/src/net/minecraft/src/ModelSilverfish.java new file mode 100644 index 0000000..7447656 --- /dev/null +++ b/src/net/minecraft/src/ModelSilverfish.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +public class ModelSilverfish extends ModelBase { + private ModelRenderer[] silverfishBodyParts = new ModelRenderer[7]; + private ModelRenderer[] silverfishWings; + private float[] field_78170_c = new float[7]; + private static final int[][] silverfishBoxLength = new int[][]{{3, 2, 2}, {4, 3, 2}, {6, 4, 3}, {3, 3, 3}, {2, 2, 3}, {2, 1, 2}, {1, 1, 2}}; + private static final int[][] silverfishTexturePositions = new int[][]{{0, 0}, {0, 4}, {0, 9}, {0, 16}, {0, 22}, {11, 0}, {13, 4}}; + + public ModelSilverfish() { + float var1 = -3.5F; + + for(int var2 = 0; var2 < this.silverfishBodyParts.length; ++var2) { + this.silverfishBodyParts[var2] = new ModelRenderer(this, silverfishTexturePositions[var2][0], silverfishTexturePositions[var2][1]); + this.silverfishBodyParts[var2].addBox((float)silverfishBoxLength[var2][0] * -0.5F, 0.0F, (float)silverfishBoxLength[var2][2] * -0.5F, silverfishBoxLength[var2][0], silverfishBoxLength[var2][1], silverfishBoxLength[var2][2]); + this.silverfishBodyParts[var2].setRotationPoint(0.0F, (float)(24 - silverfishBoxLength[var2][1]), var1); + this.field_78170_c[var2] = var1; + if(var2 < this.silverfishBodyParts.length - 1) { + var1 += (float)(silverfishBoxLength[var2][2] + silverfishBoxLength[var2 + 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)silverfishBoxLength[2][2] * -0.5F, 10, 8, silverfishBoxLength[2][2]); + this.silverfishWings[0].setRotationPoint(0.0F, 16.0F, this.field_78170_c[2]); + this.silverfishWings[1] = new ModelRenderer(this, 20, 11); + this.silverfishWings[1].addBox(-3.0F, 0.0F, (float)silverfishBoxLength[4][2] * -0.5F, 6, 4, silverfishBoxLength[4][2]); + this.silverfishWings[1].setRotationPoint(0.0F, 20.0F, this.field_78170_c[4]); + this.silverfishWings[2] = new ModelRenderer(this, 20, 18); + this.silverfishWings[2].addBox(-3.0F, 0.0F, (float)silverfishBoxLength[4][2] * -0.5F, 6, 5, silverfishBoxLength[1][2]); + this.silverfishWings[2].setRotationPoint(0.0F, 19.0F, this.field_78170_c[1]); + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + + int var8; + for(var8 = 0; var8 < this.silverfishBodyParts.length; ++var8) { + this.silverfishBodyParts[var8].render(var7); + } + + for(var8 = 0; var8 < this.silverfishWings.length; ++var8) { + this.silverfishWings[var8].render(var7); + } + + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + for(int var8 = 0; var8 < this.silverfishBodyParts.length; ++var8) { + this.silverfishBodyParts[var8].rotateAngleY = MathHelper.cos(var3 * 0.9F + (float)var8 * 0.15F * (float)Math.PI) * (float)Math.PI * 0.05F * (float)(1 + Math.abs(var8 - 2)); + this.silverfishBodyParts[var8].rotationPointX = MathHelper.sin(var3 * 0.9F + (float)var8 * 0.15F * (float)Math.PI) * (float)Math.PI * 0.2F * (float)Math.abs(var8 - 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; + } +} diff --git a/src/net/minecraft/src/ModelSkeleton.java b/src/net/minecraft/src/ModelSkeleton.java new file mode 100644 index 0000000..f4db99e --- /dev/null +++ b/src/net/minecraft/src/ModelSkeleton.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +public class ModelSkeleton extends ModelZombie { + public ModelSkeleton() { + this(0.0F); + } + + public ModelSkeleton(float var1) { + super(var1, 0.0F, 64, 32); + this.bipedRightArm = new ModelRenderer(this, 40, 16); + this.bipedRightArm.addBox(-1.0F, -2.0F, -1.0F, 2, 12, 2, var1); + 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, var1); + 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, var1); + 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, var1); + this.bipedLeftLeg.setRotationPoint(2.0F, 12.0F, 0.0F); + } + + public void setLivingAnimations(EntityLiving var1, float var2, float var3, float var4) { + this.aimedBow = ((EntitySkeleton)var1).getSkeletonType() == 1; + super.setLivingAnimations(var1, var2, var3, var4); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + super.setRotationAngles(var1, var2, var3, var4, var5, var6, var7); + } +} diff --git a/src/net/minecraft/src/ModelSkeletonHead.java b/src/net/minecraft/src/ModelSkeletonHead.java new file mode 100644 index 0000000..b7bb8d0 --- /dev/null +++ b/src/net/minecraft/src/ModelSkeletonHead.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +public class ModelSkeletonHead extends ModelBase { + public ModelRenderer skeletonHead; + + public ModelSkeletonHead() { + this(0, 35, 64, 64); + } + + public ModelSkeletonHead(int var1, int var2, int var3, int var4) { + this.textureWidth = var3; + this.textureHeight = var4; + this.skeletonHead = new ModelRenderer(this, var1, var2); + this.skeletonHead.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, 0.0F); + this.skeletonHead.setRotationPoint(0.0F, 0.0F, 0.0F); + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + this.skeletonHead.render(var7); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + super.setRotationAngles(var1, var2, var3, var4, var5, var6, var7); + this.skeletonHead.rotateAngleY = var4 / (180.0F / (float)Math.PI); + this.skeletonHead.rotateAngleX = var5 / (180.0F / (float)Math.PI); + } +} diff --git a/src/net/minecraft/src/ModelSlime.java b/src/net/minecraft/src/ModelSlime.java new file mode 100644 index 0000000..4c8244c --- /dev/null +++ b/src/net/minecraft/src/ModelSlime.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +public class ModelSlime extends ModelBase { + ModelRenderer slimeBodies; + ModelRenderer slimeRightEye; + ModelRenderer slimeLeftEye; + ModelRenderer slimeMouth; + + public ModelSlime(int var1) { + this.slimeBodies = new ModelRenderer(this, 0, var1); + this.slimeBodies.addBox(-4.0F, 16.0F, -4.0F, 8, 8, 8); + if(var1 > 0) { + this.slimeBodies = new ModelRenderer(this, 0, var1); + 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); + } + + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + this.slimeBodies.render(var7); + if(this.slimeRightEye != null) { + this.slimeRightEye.render(var7); + this.slimeLeftEye.render(var7); + this.slimeMouth.render(var7); + } + + } +} diff --git a/src/net/minecraft/src/ModelSnowMan.java b/src/net/minecraft/src/ModelSnowMan.java new file mode 100644 index 0000000..46c339a --- /dev/null +++ b/src/net/minecraft/src/ModelSnowMan.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +public class ModelSnowMan extends ModelBase { + public ModelRenderer body; + public ModelRenderer bottomBody; + public ModelRenderer head; + public ModelRenderer rightHand; + public ModelRenderer leftHand; + + public ModelSnowMan() { + float var1 = 4.0F; + float var2 = 0.0F; + this.head = (new ModelRenderer(this, 0, 0)).setTextureSize(64, 64); + this.head.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, var2 - 0.5F); + this.head.setRotationPoint(0.0F, 0.0F + var1, 0.0F); + this.rightHand = (new ModelRenderer(this, 32, 0)).setTextureSize(64, 64); + this.rightHand.addBox(-1.0F, 0.0F, -1.0F, 12, 2, 2, var2 - 0.5F); + this.rightHand.setRotationPoint(0.0F, 0.0F + var1 + 9.0F - 7.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, var2 - 0.5F); + this.leftHand.setRotationPoint(0.0F, 0.0F + var1 + 9.0F - 7.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, var2 - 0.5F); + this.body.setRotationPoint(0.0F, 0.0F + var1 + 9.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, var2 - 0.5F); + this.bottomBody.setRotationPoint(0.0F, 0.0F + var1 + 20.0F, 0.0F); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + super.setRotationAngles(var1, var2, var3, var4, var5, var6, var7); + this.head.rotateAngleY = var4 / (180.0F / (float)Math.PI); + this.head.rotateAngleX = var5 / (180.0F / (float)Math.PI); + this.body.rotateAngleY = var4 / (180.0F / (float)Math.PI) * 0.25F; + float var8 = MathHelper.sin(this.body.rotateAngleY); + float var9 = 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 = var9 * 5.0F; + this.rightHand.rotationPointZ = -var8 * 5.0F; + this.leftHand.rotationPointX = -var9 * 5.0F; + this.leftHand.rotationPointZ = var8 * 5.0F; + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + this.body.render(var7); + this.bottomBody.render(var7); + this.head.render(var7); + this.rightHand.render(var7); + this.leftHand.render(var7); + } +} diff --git a/src/net/minecraft/src/ModelSpider.java b/src/net/minecraft/src/ModelSpider.java new file mode 100644 index 0000000..a1ff81c --- /dev/null +++ b/src/net/minecraft/src/ModelSpider.java @@ -0,0 +1,116 @@ +package net.minecraft.src; + +public class ModelSpider extends ModelBase { + public ModelRenderer spiderHead; + public ModelRenderer spiderNeck; + public ModelRenderer spiderBody; + public ModelRenderer spiderLeg1; + public ModelRenderer spiderLeg2; + public ModelRenderer spiderLeg3; + public ModelRenderer spiderLeg4; + public ModelRenderer spiderLeg5; + public ModelRenderer spiderLeg6; + public ModelRenderer spiderLeg7; + public ModelRenderer spiderLeg8; + + public ModelSpider() { + float var1 = 0.0F; + byte var2 = 15; + this.spiderHead = new ModelRenderer(this, 32, 4); + this.spiderHead.addBox(-4.0F, -4.0F, -8.0F, 8, 8, 8, var1); + this.spiderHead.setRotationPoint(0.0F, (float)var2, -3.0F); + this.spiderNeck = new ModelRenderer(this, 0, 0); + this.spiderNeck.addBox(-3.0F, -3.0F, -3.0F, 6, 6, 6, var1); + this.spiderNeck.setRotationPoint(0.0F, (float)var2, 0.0F); + this.spiderBody = new ModelRenderer(this, 0, 12); + this.spiderBody.addBox(-5.0F, -4.0F, -6.0F, 10, 8, 12, var1); + this.spiderBody.setRotationPoint(0.0F, (float)var2, 9.0F); + this.spiderLeg1 = new ModelRenderer(this, 18, 0); + this.spiderLeg1.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg1.setRotationPoint(-4.0F, (float)var2, 2.0F); + this.spiderLeg2 = new ModelRenderer(this, 18, 0); + this.spiderLeg2.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg2.setRotationPoint(4.0F, (float)var2, 2.0F); + this.spiderLeg3 = new ModelRenderer(this, 18, 0); + this.spiderLeg3.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg3.setRotationPoint(-4.0F, (float)var2, 1.0F); + this.spiderLeg4 = new ModelRenderer(this, 18, 0); + this.spiderLeg4.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg4.setRotationPoint(4.0F, (float)var2, 1.0F); + this.spiderLeg5 = new ModelRenderer(this, 18, 0); + this.spiderLeg5.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg5.setRotationPoint(-4.0F, (float)var2, 0.0F); + this.spiderLeg6 = new ModelRenderer(this, 18, 0); + this.spiderLeg6.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg6.setRotationPoint(4.0F, (float)var2, 0.0F); + this.spiderLeg7 = new ModelRenderer(this, 18, 0); + this.spiderLeg7.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg7.setRotationPoint(-4.0F, (float)var2, -1.0F); + this.spiderLeg8 = new ModelRenderer(this, 18, 0); + this.spiderLeg8.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg8.setRotationPoint(4.0F, (float)var2, -1.0F); + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + this.spiderHead.render(var7); + this.spiderNeck.render(var7); + this.spiderBody.render(var7); + this.spiderLeg1.render(var7); + this.spiderLeg2.render(var7); + this.spiderLeg3.render(var7); + this.spiderLeg4.render(var7); + this.spiderLeg5.render(var7); + this.spiderLeg6.render(var7); + this.spiderLeg7.render(var7); + this.spiderLeg8.render(var7); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + this.spiderHead.rotateAngleY = var4 / (180.0F / (float)Math.PI); + this.spiderHead.rotateAngleX = var5 / (180.0F / (float)Math.PI); + float var8 = (float)Math.PI * 0.25F; + this.spiderLeg1.rotateAngleZ = -var8; + this.spiderLeg2.rotateAngleZ = var8; + this.spiderLeg3.rotateAngleZ = -var8 * 0.74F; + this.spiderLeg4.rotateAngleZ = var8 * 0.74F; + this.spiderLeg5.rotateAngleZ = -var8 * 0.74F; + this.spiderLeg6.rotateAngleZ = var8 * 0.74F; + this.spiderLeg7.rotateAngleZ = -var8; + this.spiderLeg8.rotateAngleZ = var8; + float var9 = -0.0F; + float var10 = (float)Math.PI * 0.125F; + this.spiderLeg1.rotateAngleY = var10 * 2.0F + var9; + this.spiderLeg2.rotateAngleY = -var10 * 2.0F - var9; + this.spiderLeg3.rotateAngleY = var10 * 1.0F + var9; + this.spiderLeg4.rotateAngleY = -var10 * 1.0F - var9; + this.spiderLeg5.rotateAngleY = -var10 * 1.0F + var9; + this.spiderLeg6.rotateAngleY = var10 * 1.0F - var9; + this.spiderLeg7.rotateAngleY = -var10 * 2.0F + var9; + this.spiderLeg8.rotateAngleY = var10 * 2.0F - var9; + float var11 = -(MathHelper.cos(var1 * 0.6662F * 2.0F + 0.0F) * 0.4F) * var2; + float var12 = -(MathHelper.cos(var1 * 0.6662F * 2.0F + (float)Math.PI) * 0.4F) * var2; + float var13 = -(MathHelper.cos(var1 * 0.6662F * 2.0F + (float)Math.PI * 0.5F) * 0.4F) * var2; + float var14 = -(MathHelper.cos(var1 * 0.6662F * 2.0F + (float)Math.PI * 3.0F / 2.0F) * 0.4F) * var2; + float var15 = Math.abs(MathHelper.sin(var1 * 0.6662F + 0.0F) * 0.4F) * var2; + float var16 = Math.abs(MathHelper.sin(var1 * 0.6662F + (float)Math.PI) * 0.4F) * var2; + float var17 = Math.abs(MathHelper.sin(var1 * 0.6662F + (float)Math.PI * 0.5F) * 0.4F) * var2; + float var18 = Math.abs(MathHelper.sin(var1 * 0.6662F + (float)Math.PI * 3.0F / 2.0F) * 0.4F) * var2; + this.spiderLeg1.rotateAngleY += var11; + this.spiderLeg2.rotateAngleY += -var11; + this.spiderLeg3.rotateAngleY += var12; + this.spiderLeg4.rotateAngleY += -var12; + this.spiderLeg5.rotateAngleY += var13; + this.spiderLeg6.rotateAngleY += -var13; + this.spiderLeg7.rotateAngleY += var14; + this.spiderLeg8.rotateAngleY += -var14; + this.spiderLeg1.rotateAngleZ += var15; + this.spiderLeg2.rotateAngleZ += -var15; + this.spiderLeg3.rotateAngleZ += var16; + this.spiderLeg4.rotateAngleZ += -var16; + this.spiderLeg5.rotateAngleZ += var17; + this.spiderLeg6.rotateAngleZ += -var17; + this.spiderLeg7.rotateAngleZ += var18; + this.spiderLeg8.rotateAngleZ += -var18; + } +} diff --git a/src/net/minecraft/src/ModelSquid.java b/src/net/minecraft/src/ModelSquid.java new file mode 100644 index 0000000..9a7d9de --- /dev/null +++ b/src/net/minecraft/src/ModelSquid.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +public class ModelSquid extends ModelBase { + ModelRenderer squidBody; + ModelRenderer[] squidTentacles = new ModelRenderer[8]; + + public ModelSquid() { + byte var1 = -16; + this.squidBody = new ModelRenderer(this, 0, 0); + this.squidBody.addBox(-6.0F, -8.0F, -6.0F, 12, 16, 12); + this.squidBody.rotationPointY += (float)(24 + var1); + + for(int var2 = 0; var2 < this.squidTentacles.length; ++var2) { + this.squidTentacles[var2] = new ModelRenderer(this, 48, 0); + double var3 = (double)var2 * Math.PI * 2.0D / (double)this.squidTentacles.length; + float var5 = (float)Math.cos(var3) * 5.0F; + float var6 = (float)Math.sin(var3) * 5.0F; + this.squidTentacles[var2].addBox(-1.0F, 0.0F, -1.0F, 2, 18, 2); + this.squidTentacles[var2].rotationPointX = var5; + this.squidTentacles[var2].rotationPointZ = var6; + this.squidTentacles[var2].rotationPointY = (float)(31 + var1); + var3 = (double)var2 * Math.PI * -2.0D / (double)this.squidTentacles.length + Math.PI * 0.5D; + this.squidTentacles[var2].rotateAngleY = (float)var3; + } + + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + ModelRenderer[] var8 = this.squidTentacles; + int var9 = var8.length; + + for(int var10 = 0; var10 < var9; ++var10) { + ModelRenderer var11 = var8[var10]; + var11.rotateAngleX = var3; + } + + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + this.squidBody.render(var7); + + for(int var8 = 0; var8 < this.squidTentacles.length; ++var8) { + this.squidTentacles[var8].render(var7); + } + + } +} diff --git a/src/net/minecraft/src/ModelVillager.java b/src/net/minecraft/src/ModelVillager.java new file mode 100644 index 0000000..de3260e --- /dev/null +++ b/src/net/minecraft/src/ModelVillager.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +public class ModelVillager extends ModelBase { + public ModelRenderer villagerHead; + public ModelRenderer villagerBody; + public ModelRenderer villagerArms; + public ModelRenderer rightVillagerLeg; + public ModelRenderer leftVillagerLeg; + public ModelRenderer field_82898_f; + + public ModelVillager(float var1) { + this(var1, 0.0F, 64, 64); + } + + public ModelVillager(float var1, float var2, int var3, int var4) { + this.villagerHead = (new ModelRenderer(this)).setTextureSize(var3, var4); + this.villagerHead.setRotationPoint(0.0F, 0.0F + var2, 0.0F); + this.villagerHead.setTextureOffset(0, 0).addBox(-4.0F, -10.0F, -4.0F, 8, 10, 8, var1); + this.field_82898_f = (new ModelRenderer(this)).setTextureSize(var3, var4); + this.field_82898_f.setRotationPoint(0.0F, var2 - 2.0F, 0.0F); + this.field_82898_f.setTextureOffset(24, 0).addBox(-1.0F, -1.0F, -6.0F, 2, 4, 2, var1); + this.villagerHead.addChild(this.field_82898_f); + this.villagerBody = (new ModelRenderer(this)).setTextureSize(var3, var4); + this.villagerBody.setRotationPoint(0.0F, 0.0F + var2, 0.0F); + this.villagerBody.setTextureOffset(16, 20).addBox(-4.0F, 0.0F, -3.0F, 8, 12, 6, var1); + this.villagerBody.setTextureOffset(0, 38).addBox(-4.0F, 0.0F, -3.0F, 8, 18, 6, var1 + 0.5F); + this.villagerArms = (new ModelRenderer(this)).setTextureSize(var3, var4); + this.villagerArms.setRotationPoint(0.0F, 0.0F + var2 + 2.0F, 0.0F); + this.villagerArms.setTextureOffset(44, 22).addBox(-8.0F, -2.0F, -2.0F, 4, 8, 4, var1); + this.villagerArms.setTextureOffset(44, 22).addBox(4.0F, -2.0F, -2.0F, 4, 8, 4, var1); + this.villagerArms.setTextureOffset(40, 38).addBox(-4.0F, 2.0F, -2.0F, 8, 4, 4, var1); + this.rightVillagerLeg = (new ModelRenderer(this, 0, 22)).setTextureSize(var3, var4); + this.rightVillagerLeg.setRotationPoint(-2.0F, 12.0F + var2, 0.0F); + this.rightVillagerLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, var1); + this.leftVillagerLeg = (new ModelRenderer(this, 0, 22)).setTextureSize(var3, var4); + this.leftVillagerLeg.mirror = true; + this.leftVillagerLeg.setRotationPoint(2.0F, 12.0F + var2, 0.0F); + this.leftVillagerLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, var1); + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + this.villagerHead.render(var7); + this.villagerBody.render(var7); + this.rightVillagerLeg.render(var7); + this.leftVillagerLeg.render(var7); + this.villagerArms.render(var7); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + this.villagerHead.rotateAngleY = var4 / (180.0F / (float)Math.PI); + this.villagerHead.rotateAngleX = var5 / (180.0F / (float)Math.PI); + this.villagerArms.rotationPointY = 3.0F; + this.villagerArms.rotationPointZ = -1.0F; + this.villagerArms.rotateAngleX = -(12.0F / 16.0F); + this.rightVillagerLeg.rotateAngleX = MathHelper.cos(var1 * 0.6662F) * 1.4F * var2 * 0.5F; + this.leftVillagerLeg.rotateAngleX = MathHelper.cos(var1 * 0.6662F + (float)Math.PI) * 1.4F * var2 * 0.5F; + this.rightVillagerLeg.rotateAngleY = 0.0F; + this.leftVillagerLeg.rotateAngleY = 0.0F; + } +} diff --git a/src/net/minecraft/src/ModelWitch.java b/src/net/minecraft/src/ModelWitch.java new file mode 100644 index 0000000..17b931f --- /dev/null +++ b/src/net/minecraft/src/ModelWitch.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +public class ModelWitch extends ModelVillager { + public boolean field_82900_g = false; + private ModelRenderer field_82901_h = (new ModelRenderer(this)).setTextureSize(64, 128); + private ModelRenderer witchHat; + + public ModelWitch(float var1) { + super(var1, 0.0F, 64, 128); + this.field_82901_h.setRotationPoint(0.0F, -2.0F, 0.0F); + this.field_82901_h.setTextureOffset(0, 0).addBox(0.0F, 3.0F, -6.75F, 1, 1, 1, -0.25F); + this.field_82898_f.addChild(this.field_82901_h); + 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 var2 = (new ModelRenderer(this)).setTextureSize(64, 128); + var2.setRotationPoint(1.75F, -4.0F, 2.0F); + var2.setTextureOffset(0, 76).addBox(0.0F, 0.0F, 0.0F, 7, 4, 7); + var2.rotateAngleX = -0.05235988F; + var2.rotateAngleZ = 0.02617994F; + this.witchHat.addChild(var2); + ModelRenderer var3 = (new ModelRenderer(this)).setTextureSize(64, 128); + var3.setRotationPoint(1.75F, -4.0F, 2.0F); + var3.setTextureOffset(0, 87).addBox(0.0F, 0.0F, 0.0F, 4, 4, 4); + var3.rotateAngleX = -0.10471976F; + var3.rotateAngleZ = 0.05235988F; + var2.addChild(var3); + ModelRenderer var4 = (new ModelRenderer(this)).setTextureSize(64, 128); + var4.setRotationPoint(1.75F, -2.0F, 2.0F); + var4.setTextureOffset(0, 95).addBox(0.0F, 0.0F, 0.0F, 1, 2, 1, 0.25F); + var4.rotateAngleX = -0.20943952F; + var4.rotateAngleZ = 0.10471976F; + var3.addChild(var4); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + super.setRotationAngles(var1, var2, var3, var4, var5, var6, var7); + this.field_82898_f.field_82906_o = this.field_82898_f.field_82908_p = this.field_82898_f.field_82907_q = 0.0F; + float var8 = 0.01F * (float)(var7.entityId % 10); + this.field_82898_f.rotateAngleX = MathHelper.sin((float)var7.ticksExisted * var8) * 4.5F * (float)Math.PI / 180.0F; + this.field_82898_f.rotateAngleY = 0.0F; + this.field_82898_f.rotateAngleZ = MathHelper.cos((float)var7.ticksExisted * var8) * 2.5F * (float)Math.PI / 180.0F; + if(this.field_82900_g) { + this.field_82898_f.rotateAngleX = -0.9F; + this.field_82898_f.field_82907_q = -0.09375F; + this.field_82898_f.field_82908_p = 3.0F / 16.0F; + } + + } + + public int func_82899_a() { + return 0; + } +} diff --git a/src/net/minecraft/src/ModelWither.java b/src/net/minecraft/src/ModelWither.java new file mode 100644 index 0000000..b1bc66b --- /dev/null +++ b/src/net/minecraft/src/ModelWither.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +public class ModelWither extends ModelBase { + private ModelRenderer[] field_82905_a; + private ModelRenderer[] field_82904_b; + + public ModelWither() { + this.textureWidth = 64; + this.textureHeight = 64; + this.field_82905_a = new ModelRenderer[3]; + this.field_82905_a[0] = new ModelRenderer(this, 0, 16); + this.field_82905_a[0].addBox(-10.0F, 3.9F, -0.5F, 20, 3, 3); + this.field_82905_a[1] = (new ModelRenderer(this)).setTextureSize(this.textureWidth, this.textureHeight); + this.field_82905_a[1].setRotationPoint(-2.0F, 6.9F, -0.5F); + this.field_82905_a[1].setTextureOffset(0, 22).addBox(0.0F, 0.0F, 0.0F, 3, 10, 3); + this.field_82905_a[1].setTextureOffset(24, 22).addBox(-4.0F, 1.5F, 0.5F, 11, 2, 2); + this.field_82905_a[1].setTextureOffset(24, 22).addBox(-4.0F, 4.0F, 0.5F, 11, 2, 2); + this.field_82905_a[1].setTextureOffset(24, 22).addBox(-4.0F, 6.5F, 0.5F, 11, 2, 2); + this.field_82905_a[2] = new ModelRenderer(this, 12, 22); + this.field_82905_a[2].addBox(0.0F, 0.0F, 0.0F, 3, 6, 3); + this.field_82904_b = new ModelRenderer[3]; + this.field_82904_b[0] = new ModelRenderer(this, 0, 0); + this.field_82904_b[0].addBox(-4.0F, -4.0F, -4.0F, 8, 8, 8); + this.field_82904_b[1] = new ModelRenderer(this, 32, 0); + this.field_82904_b[1].addBox(-4.0F, -4.0F, -4.0F, 6, 6, 6); + this.field_82904_b[1].rotationPointX = -8.0F; + this.field_82904_b[1].rotationPointY = 4.0F; + this.field_82904_b[2] = new ModelRenderer(this, 32, 0); + this.field_82904_b[2].addBox(-4.0F, -4.0F, -4.0F, 6, 6, 6); + this.field_82904_b[2].rotationPointX = 10.0F; + this.field_82904_b[2].rotationPointY = 4.0F; + } + + public int func_82903_a() { + return 32; + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + ModelRenderer[] var8 = this.field_82904_b; + int var9 = var8.length; + + int var10; + ModelRenderer var11; + for(var10 = 0; var10 < var9; ++var10) { + var11 = var8[var10]; + var11.render(var7); + } + + var8 = this.field_82905_a; + var9 = var8.length; + + for(var10 = 0; var10 < var9; ++var10) { + var11 = var8[var10]; + var11.render(var7); + } + + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + float var8 = MathHelper.cos(var3 * 0.1F); + this.field_82905_a[1].rotateAngleX = (0.065F + 0.05F * var8) * (float)Math.PI; + this.field_82905_a[2].setRotationPoint(-2.0F, 6.9F + MathHelper.cos(this.field_82905_a[1].rotateAngleX) * 10.0F, -0.5F + MathHelper.sin(this.field_82905_a[1].rotateAngleX) * 10.0F); + this.field_82905_a[2].rotateAngleX = (0.265F + 0.1F * var8) * (float)Math.PI; + this.field_82904_b[0].rotateAngleY = var4 / (180.0F / (float)Math.PI); + this.field_82904_b[0].rotateAngleX = var5 / (180.0F / (float)Math.PI); + } + + public void setLivingAnimations(EntityLiving var1, float var2, float var3, float var4) { + EntityWither var5 = (EntityWither)var1; + + for(int var6 = 1; var6 < 3; ++var6) { + this.field_82904_b[var6].rotateAngleY = (var5.func_82207_a(var6 - 1) - var1.renderYawOffset) / (180.0F / (float)Math.PI); + this.field_82904_b[var6].rotateAngleX = var5.func_82210_r(var6 - 1) / (180.0F / (float)Math.PI); + } + + } +} diff --git a/src/net/minecraft/src/ModelWolf.java b/src/net/minecraft/src/ModelWolf.java new file mode 100644 index 0000000..90d975a --- /dev/null +++ b/src/net/minecraft/src/ModelWolf.java @@ -0,0 +1,131 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class ModelWolf extends ModelBase { + public ModelRenderer wolfHeadMain; + public ModelRenderer wolfBody; + public ModelRenderer wolfLeg1; + public ModelRenderer wolfLeg2; + public ModelRenderer wolfLeg3; + public ModelRenderer wolfLeg4; + ModelRenderer wolfTail; + ModelRenderer wolfMane; + + public ModelWolf() { + float var1 = 0.0F; + float var2 = 13.5F; + this.wolfHeadMain = new ModelRenderer(this, 0, 0); + this.wolfHeadMain.addBox(-3.0F, -3.0F, -2.0F, 6, 6, 4, var1); + this.wolfHeadMain.setRotationPoint(-1.0F, var2, -7.0F); + this.wolfBody = new ModelRenderer(this, 18, 14); + this.wolfBody.addBox(-4.0F, -2.0F, -3.0F, 6, 9, 6, var1); + this.wolfBody.setRotationPoint(0.0F, 14.0F, 2.0F); + this.wolfMane = new ModelRenderer(this, 21, 0); + this.wolfMane.addBox(-4.0F, -3.0F, -3.0F, 8, 6, 7, var1); + this.wolfMane.setRotationPoint(-1.0F, 14.0F, 2.0F); + this.wolfLeg1 = new ModelRenderer(this, 0, 18); + this.wolfLeg1.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, var1); + this.wolfLeg1.setRotationPoint(-2.5F, 16.0F, 7.0F); + this.wolfLeg2 = new ModelRenderer(this, 0, 18); + this.wolfLeg2.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, var1); + this.wolfLeg2.setRotationPoint(0.5F, 16.0F, 7.0F); + this.wolfLeg3 = new ModelRenderer(this, 0, 18); + this.wolfLeg3.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, var1); + this.wolfLeg3.setRotationPoint(-2.5F, 16.0F, -4.0F); + this.wolfLeg4 = new ModelRenderer(this, 0, 18); + this.wolfLeg4.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, var1); + this.wolfLeg4.setRotationPoint(0.5F, 16.0F, -4.0F); + this.wolfTail = new ModelRenderer(this, 9, 18); + this.wolfTail.addBox(-1.0F, 0.0F, -1.0F, 2, 8, 2, var1); + this.wolfTail.setRotationPoint(-1.0F, 12.0F, 8.0F); + this.wolfHeadMain.setTextureOffset(16, 14).addBox(-3.0F, -5.0F, 0.0F, 2, 2, 1, var1); + this.wolfHeadMain.setTextureOffset(16, 14).addBox(1.0F, -5.0F, 0.0F, 2, 2, 1, var1); + this.wolfHeadMain.setTextureOffset(0, 10).addBox(-1.5F, 0.0F, -5.0F, 3, 3, 4, var1); + } + + public void render(Entity var1, float var2, float var3, float var4, float var5, float var6, float var7) { + super.render(var1, var2, var3, var4, var5, var6, var7); + this.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + if(this.isChild) { + float var8 = 2.0F; + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 5.0F * var7, 2.0F * var7); + this.wolfHeadMain.renderWithRotation(var7); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(1.0F / var8, 1.0F / var8, 1.0F / var8); + GL11.glTranslatef(0.0F, 24.0F * var7, 0.0F); + this.wolfBody.render(var7); + this.wolfLeg1.render(var7); + this.wolfLeg2.render(var7); + this.wolfLeg3.render(var7); + this.wolfLeg4.render(var7); + this.wolfTail.renderWithRotation(var7); + this.wolfMane.render(var7); + GL11.glPopMatrix(); + } else { + this.wolfHeadMain.renderWithRotation(var7); + this.wolfBody.render(var7); + this.wolfLeg1.render(var7); + this.wolfLeg2.render(var7); + this.wolfLeg3.render(var7); + this.wolfLeg4.render(var7); + this.wolfTail.renderWithRotation(var7); + this.wolfMane.render(var7); + } + + } + + public void setLivingAnimations(EntityLiving var1, float var2, float var3, float var4) { + EntityWolf var5 = (EntityWolf)var1; + if(var5.isAngry()) { + this.wolfTail.rotateAngleY = 0.0F; + } else { + this.wolfTail.rotateAngleY = MathHelper.cos(var2 * 0.6662F) * 1.4F * var3; + } + + if(var5.isSitting()) { + this.wolfMane.setRotationPoint(-1.0F, 16.0F, -3.0F); + this.wolfMane.rotateAngleX = (float)Math.PI * 0.4F; + this.wolfMane.rotateAngleY = 0.0F; + this.wolfBody.setRotationPoint(0.0F, 18.0F, 0.0F); + this.wolfBody.rotateAngleX = (float)Math.PI * 0.25F; + this.wolfTail.setRotationPoint(-1.0F, 21.0F, 6.0F); + this.wolfLeg1.setRotationPoint(-2.5F, 22.0F, 2.0F); + this.wolfLeg1.rotateAngleX = (float)Math.PI * 3.0F / 2.0F; + this.wolfLeg2.setRotationPoint(0.5F, 22.0F, 2.0F); + this.wolfLeg2.rotateAngleX = (float)Math.PI * 3.0F / 2.0F; + this.wolfLeg3.rotateAngleX = (float)Math.PI * 1.85F; + this.wolfLeg3.setRotationPoint(-2.49F, 17.0F, -4.0F); + this.wolfLeg4.rotateAngleX = (float)Math.PI * 1.85F; + 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 * 0.5F; + 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(var2 * 0.6662F) * 1.4F * var3; + this.wolfLeg2.rotateAngleX = MathHelper.cos(var2 * 0.6662F + (float)Math.PI) * 1.4F * var3; + this.wolfLeg3.rotateAngleX = MathHelper.cos(var2 * 0.6662F + (float)Math.PI) * 1.4F * var3; + this.wolfLeg4.rotateAngleX = MathHelper.cos(var2 * 0.6662F) * 1.4F * var3; + } + + this.wolfHeadMain.rotateAngleZ = var5.getInterestedAngle(var4) + var5.getShakeAngle(var4, 0.0F); + this.wolfMane.rotateAngleZ = var5.getShakeAngle(var4, -0.08F); + this.wolfBody.rotateAngleZ = var5.getShakeAngle(var4, -0.16F); + this.wolfTail.rotateAngleZ = var5.getShakeAngle(var4, -0.2F); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + super.setRotationAngles(var1, var2, var3, var4, var5, var6, var7); + this.wolfHeadMain.rotateAngleX = var5 / (180.0F / (float)Math.PI); + this.wolfHeadMain.rotateAngleY = var4 / (180.0F / (float)Math.PI); + this.wolfTail.rotateAngleX = var3; + } +} diff --git a/src/net/minecraft/src/ModelZombie.java b/src/net/minecraft/src/ModelZombie.java new file mode 100644 index 0000000..8137812 --- /dev/null +++ b/src/net/minecraft/src/ModelZombie.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +public class ModelZombie extends ModelBiped { + public ModelZombie() { + this(0.0F, false); + } + + protected ModelZombie(float var1, float var2, int var3, int var4) { + super(var1, var2, var3, var4); + } + + public ModelZombie(float var1, boolean var2) { + super(var1, 0.0F, 64, var2 ? 32 : 64); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + super.setRotationAngles(var1, var2, var3, var4, var5, var6, var7); + float var8 = MathHelper.sin(this.onGround * (float)Math.PI); + float var9 = MathHelper.sin((1.0F - (1.0F - this.onGround) * (1.0F - this.onGround)) * (float)Math.PI); + this.bipedRightArm.rotateAngleZ = 0.0F; + this.bipedLeftArm.rotateAngleZ = 0.0F; + this.bipedRightArm.rotateAngleY = -(0.1F - var8 * 0.6F); + this.bipedLeftArm.rotateAngleY = 0.1F - var8 * 0.6F; + this.bipedRightArm.rotateAngleX = (float)Math.PI * -0.5F; + this.bipedLeftArm.rotateAngleX = (float)Math.PI * -0.5F; + this.bipedRightArm.rotateAngleX -= var8 * 1.2F - var9 * 0.4F; + this.bipedLeftArm.rotateAngleX -= var8 * 1.2F - var9 * 0.4F; + this.bipedRightArm.rotateAngleZ += MathHelper.cos(var3 * 0.09F) * 0.05F + 0.05F; + this.bipedLeftArm.rotateAngleZ -= MathHelper.cos(var3 * 0.09F) * 0.05F + 0.05F; + this.bipedRightArm.rotateAngleX += MathHelper.sin(var3 * 0.067F) * 0.05F; + this.bipedLeftArm.rotateAngleX -= MathHelper.sin(var3 * 0.067F) * 0.05F; + } +} diff --git a/src/net/minecraft/src/ModelZombieVillager.java b/src/net/minecraft/src/ModelZombieVillager.java new file mode 100644 index 0000000..ae89cf3 --- /dev/null +++ b/src/net/minecraft/src/ModelZombieVillager.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +public class ModelZombieVillager extends ModelBiped { + public ModelZombieVillager() { + this(0.0F, 0.0F, false); + } + + public ModelZombieVillager(float var1, float var2, boolean var3) { + super(var1, 0.0F, 64, var3 ? 32 : 64); + if(var3) { + this.bipedHead = new ModelRenderer(this, 0, 0); + this.bipedHead.addBox(-4.0F, -10.0F, -4.0F, 8, 6, 8, var1); + this.bipedHead.setRotationPoint(0.0F, 0.0F + var2, 0.0F); + } else { + this.bipedHead = new ModelRenderer(this); + this.bipedHead.setRotationPoint(0.0F, 0.0F + var2, 0.0F); + this.bipedHead.setTextureOffset(0, 32).addBox(-4.0F, -10.0F, -4.0F, 8, 10, 8, var1); + this.bipedHead.setTextureOffset(24, 32).addBox(-1.0F, -3.0F, -6.0F, 2, 4, 2, var1); + } + + } + + public int func_82897_a() { + return 10; + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6, Entity var7) { + super.setRotationAngles(var1, var2, var3, var4, var5, var6, var7); + float var8 = MathHelper.sin(this.onGround * (float)Math.PI); + float var9 = MathHelper.sin((1.0F - (1.0F - this.onGround) * (1.0F - this.onGround)) * (float)Math.PI); + this.bipedRightArm.rotateAngleZ = 0.0F; + this.bipedLeftArm.rotateAngleZ = 0.0F; + this.bipedRightArm.rotateAngleY = -(0.1F - var8 * 0.6F); + this.bipedLeftArm.rotateAngleY = 0.1F - var8 * 0.6F; + this.bipedRightArm.rotateAngleX = (float)Math.PI * -0.5F; + this.bipedLeftArm.rotateAngleX = (float)Math.PI * -0.5F; + this.bipedRightArm.rotateAngleX -= var8 * 1.2F - var9 * 0.4F; + this.bipedLeftArm.rotateAngleX -= var8 * 1.2F - var9 * 0.4F; + this.bipedRightArm.rotateAngleZ += MathHelper.cos(var3 * 0.09F) * 0.05F + 0.05F; + this.bipedLeftArm.rotateAngleZ -= MathHelper.cos(var3 * 0.09F) * 0.05F + 0.05F; + this.bipedRightArm.rotateAngleX += MathHelper.sin(var3 * 0.067F) * 0.05F; + this.bipedLeftArm.rotateAngleX -= MathHelper.sin(var3 * 0.067F) * 0.05F; + } +} diff --git a/src/net/minecraft/src/MouseFilter.java b/src/net/minecraft/src/MouseFilter.java new file mode 100644 index 0000000..96930d5 --- /dev/null +++ b/src/net/minecraft/src/MouseFilter.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class MouseFilter { + private float field_76336_a; + private float field_76334_b; + private float field_76335_c; + + public float smooth(float var1, float var2) { + this.field_76336_a += var1; + var1 = (this.field_76336_a - this.field_76334_b) * var2; + this.field_76335_c += (var1 - this.field_76335_c) * 0.5F; + if(var1 > 0.0F && var1 > this.field_76335_c || var1 < 0.0F && var1 < this.field_76335_c) { + var1 = this.field_76335_c; + } + + this.field_76334_b += var1; + return var1; + } +} diff --git a/src/net/minecraft/src/MouseHelper.java b/src/net/minecraft/src/MouseHelper.java new file mode 100644 index 0000000..2f09b99 --- /dev/null +++ b/src/net/minecraft/src/MouseHelper.java @@ -0,0 +1,39 @@ +package net.minecraft.src; + +import java.awt.Component; +import org.lwjgl.input.Mouse; + +public class MouseHelper { + private final Component windowComponent; + private final GameSettings field_85184_d; + public int deltaX; + public int deltaY; + + public MouseHelper(Component var1, GameSettings var2) { + this.windowComponent = var1; + this.field_85184_d = var2; + } + + public void grabMouseCursor() { + Mouse.setGrabbed(true); + this.deltaX = 0; + this.deltaY = 0; + } + + public void ungrabMouseCursor() { + int var1 = this.windowComponent.getWidth(); + int var2 = this.windowComponent.getHeight(); + if(this.windowComponent.getParent() != null) { + var1 = this.windowComponent.getParent().getWidth(); + var2 = this.windowComponent.getParent().getHeight(); + } + + Mouse.setCursorPosition(var1 / 2, var2 / 2); + Mouse.setGrabbed(false); + } + + public void mouseXYChange() { + this.deltaX = Mouse.getDX(); + this.deltaY = Mouse.getDY(); + } +} diff --git a/src/net/minecraft/src/MovementInput.java b/src/net/minecraft/src/MovementInput.java new file mode 100644 index 0000000..7725a03 --- /dev/null +++ b/src/net/minecraft/src/MovementInput.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class MovementInput { + public float moveStrafe = 0.0F; + public float moveForward = 0.0F; + public boolean jump = false; + public boolean sneak = false; + + public void updatePlayerMoveState() { + } +} diff --git a/src/net/minecraft/src/MovementInputFromOptions.java b/src/net/minecraft/src/MovementInputFromOptions.java new file mode 100644 index 0000000..d7a8175 --- /dev/null +++ b/src/net/minecraft/src/MovementInputFromOptions.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +public class MovementInputFromOptions extends MovementInput { + private GameSettings gameSettings; + + public MovementInputFromOptions(GameSettings var1) { + this.gameSettings = var1; + } + + public void updatePlayerMoveState() { + this.moveStrafe = 0.0F; + this.moveForward = 0.0F; + if(this.gameSettings.keyBindForward.pressed) { + ++this.moveForward; + } + + if(this.gameSettings.keyBindBack.pressed) { + --this.moveForward; + } + + if(this.gameSettings.keyBindLeft.pressed) { + ++this.moveStrafe; + } + + if(this.gameSettings.keyBindRight.pressed) { + --this.moveStrafe; + } + + this.jump = this.gameSettings.keyBindJump.pressed; + this.sneak = this.gameSettings.keyBindSneak.pressed; + if(this.sneak) { + this.moveStrafe = (float)((double)this.moveStrafe * 0.3D); + this.moveForward = (float)((double)this.moveForward * 0.3D); + } + + } +} diff --git a/src/net/minecraft/src/MovingObjectPosition.java b/src/net/minecraft/src/MovingObjectPosition.java new file mode 100644 index 0000000..96d810c --- /dev/null +++ b/src/net/minecraft/src/MovingObjectPosition.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class MovingObjectPosition { + public EnumMovingObjectType typeOfHit; + public int blockX; + public int blockY; + public int blockZ; + public int sideHit; + public Vec3 hitVec; + public Entity entityHit; + + public MovingObjectPosition(int var1, int var2, int var3, int var4, Vec3 var5) { + this.typeOfHit = EnumMovingObjectType.TILE; + this.blockX = var1; + this.blockY = var2; + this.blockZ = var3; + this.sideHit = var4; + this.hitVec = var5.myVec3LocalPool.getVecFromPool(var5.xCoord, var5.yCoord, var5.zCoord); + } + + public MovingObjectPosition(Entity var1) { + this.typeOfHit = EnumMovingObjectType.ENTITY; + this.entityHit = var1; + this.hitVec = var1.worldObj.getWorldVec3Pool().getVecFromPool(var1.posX, var1.posY, var1.posZ); + } +} diff --git a/src/net/minecraft/src/MusInputStream.java b/src/net/minecraft/src/MusInputStream.java new file mode 100644 index 0000000..7021445 --- /dev/null +++ b/src/net/minecraft/src/MusInputStream.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.io.InputStream; +import java.net.URL; + +class MusInputStream extends InputStream { + private int hash; + private InputStream inputStream; + byte[] buffer; + final CodecMus codec; + + public MusInputStream(CodecMus var1, URL var2, InputStream var3) { + this.codec = var1; + this.buffer = new byte[1]; + this.inputStream = var3; + String var4 = var2.getPath(); + var4 = var4.substring(var4.lastIndexOf("/") + 1); + this.hash = var4.hashCode(); + } + + public int read() throws IOException { + int var1 = this.read(this.buffer, 0, 1); + return var1 < 0 ? var1 : this.buffer[0]; + } + + public int read(byte[] var1, int var2, int var3) throws IOException { + var3 = this.inputStream.read(var1, var2, var3); + + for(int var4 = 0; var4 < var3; ++var4) { + byte var5 = var1[var2 + var4] = (byte)(var1[var2 + var4] ^ this.hash >> 8); + this.hash = this.hash * 498729871 + 85731 * var5; + } + + return var3; + } +} diff --git a/src/net/minecraft/src/NBTBase.java b/src/net/minecraft/src/NBTBase.java new file mode 100644 index 0000000..138e59d --- /dev/null +++ b/src/net/minecraft/src/NBTBase.java @@ -0,0 +1,145 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public abstract class NBTBase { + public static final String[] NBTTypes = new String[]{"END", "BYTE", "SHORT", "INT", "LONG", "FLOAT", "DOUBLE", "BYTE[]", "STRING", "LIST", "COMPOUND", "INT[]"}; + private String name; + + abstract void write(DataOutput var1) throws IOException; + + abstract void load(DataInput var1) throws IOException; + + public abstract byte getId(); + + protected NBTBase(String var1) { + if(var1 == null) { + this.name = ""; + } else { + this.name = var1; + } + + } + + public NBTBase setName(String var1) { + if(var1 == null) { + this.name = ""; + } else { + this.name = var1; + } + + return this; + } + + public String getName() { + return this.name == null ? "" : this.name; + } + + public static NBTBase readNamedTag(DataInput var0) throws IOException { + byte var1 = var0.readByte(); + if(var1 == 0) { + return new NBTTagEnd(); + } else { + String var2 = var0.readUTF(); + NBTBase var3 = newTag(var1, var2); + + try { + var3.load(var0); + return var3; + } catch (IOException var7) { + CrashReport var5 = CrashReport.makeCrashReport(var7, "Loading NBT data"); + CrashReportCategory var6 = var5.makeCategory("NBT Tag"); + var6.addCrashSection("Tag name", var2); + var6.addCrashSection("Tag type", Byte.valueOf(var1)); + throw new ReportedException(var5); + } + } + } + + public static void writeNamedTag(NBTBase var0, DataOutput var1) throws IOException { + var1.writeByte(var0.getId()); + if(var0.getId() != 0) { + var1.writeUTF(var0.getName()); + var0.write(var1); + } + } + + public static NBTBase newTag(byte var0, String var1) { + switch(var0) { + case 0: + return new NBTTagEnd(); + case 1: + return new NBTTagByte(var1); + case 2: + return new NBTTagShort(var1); + case 3: + return new NBTTagInt(var1); + case 4: + return new NBTTagLong(var1); + case 5: + return new NBTTagFloat(var1); + case 6: + return new NBTTagDouble(var1); + case 7: + return new NBTTagByteArray(var1); + case 8: + return new NBTTagString(var1); + case 9: + return new NBTTagList(var1); + case 10: + return new NBTTagCompound(var1); + case 11: + return new NBTTagIntArray(var1); + default: + return null; + } + } + + public static String getTagName(byte var0) { + switch(var0) { + 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"; + default: + return "UNKNOWN"; + } + } + + public abstract NBTBase copy(); + + public boolean equals(Object var1) { + if(!(var1 instanceof NBTBase)) { + return false; + } else { + NBTBase var2 = (NBTBase)var1; + return this.getId() != var2.getId() ? false : ((this.name != null || var2.name == null) && (this.name == null || var2.name != null) ? this.name == null || this.name.equals(var2.name) : false); + } + } + + public int hashCode() { + return this.name.hashCode() ^ this.getId(); + } +} diff --git a/src/net/minecraft/src/NBTTagByte.java b/src/net/minecraft/src/NBTTagByte.java new file mode 100644 index 0000000..dd2badb --- /dev/null +++ b/src/net/minecraft/src/NBTTagByte.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagByte extends NBTBase { + public byte data; + + public NBTTagByte(String var1) { + super(var1); + } + + public NBTTagByte(String var1, byte var2) { + super(var1); + this.data = var2; + } + + void write(DataOutput var1) throws IOException { + var1.writeByte(this.data); + } + + void load(DataInput var1) throws IOException { + this.data = var1.readByte(); + } + + public byte getId() { + return (byte)1; + } + + public String toString() { + return "" + this.data; + } + + public NBTBase copy() { + return new NBTTagByte(this.getName(), this.data); + } + + public boolean equals(Object var1) { + if(super.equals(var1)) { + NBTTagByte var2 = (NBTTagByte)var1; + return this.data == var2.data; + } else { + return false; + } + } + + public int hashCode() { + return super.hashCode() ^ this.data; + } +} diff --git a/src/net/minecraft/src/NBTTagByteArray.java b/src/net/minecraft/src/NBTTagByteArray.java new file mode 100644 index 0000000..30972c4 --- /dev/null +++ b/src/net/minecraft/src/NBTTagByteArray.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.Arrays; + +public class NBTTagByteArray extends NBTBase { + public byte[] byteArray; + + public NBTTagByteArray(String var1) { + super(var1); + } + + public NBTTagByteArray(String var1, byte[] var2) { + super(var1); + this.byteArray = var2; + } + + void write(DataOutput var1) throws IOException { + var1.writeInt(this.byteArray.length); + var1.write(this.byteArray); + } + + void load(DataInput var1) throws IOException { + int var2 = var1.readInt(); + this.byteArray = new byte[var2]; + var1.readFully(this.byteArray); + } + + public byte getId() { + return (byte)7; + } + + public String toString() { + return "[" + this.byteArray.length + " bytes]"; + } + + public NBTBase copy() { + byte[] var1 = new byte[this.byteArray.length]; + System.arraycopy(this.byteArray, 0, var1, 0, this.byteArray.length); + return new NBTTagByteArray(this.getName(), var1); + } + + public boolean equals(Object var1) { + return super.equals(var1) ? Arrays.equals(this.byteArray, ((NBTTagByteArray)var1).byteArray) : false; + } + + public int hashCode() { + return super.hashCode() ^ Arrays.hashCode(this.byteArray); + } +} diff --git a/src/net/minecraft/src/NBTTagCompound.java b/src/net/minecraft/src/NBTTagCompound.java new file mode 100644 index 0000000..3387e1f --- /dev/null +++ b/src/net/minecraft/src/NBTTagCompound.java @@ -0,0 +1,262 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +public class NBTTagCompound extends NBTBase { + private Map tagMap = new HashMap(); + + public NBTTagCompound() { + super(""); + } + + public NBTTagCompound(String var1) { + super(var1); + } + + void write(DataOutput var1) throws IOException { + Iterator var2 = this.tagMap.values().iterator(); + + while(var2.hasNext()) { + NBTBase var3 = (NBTBase)var2.next(); + NBTBase.writeNamedTag(var3, var1); + } + + var1.writeByte(0); + } + + void load(DataInput var1) throws IOException { + this.tagMap.clear(); + + while(true) { + NBTBase var2 = NBTBase.readNamedTag(var1); + if(var2.getId() == 0) { + return; + } + + this.tagMap.put(var2.getName(), var2); + } + } + + public Collection getTags() { + return this.tagMap.values(); + } + + public byte getId() { + return (byte)10; + } + + public void setTag(String var1, NBTBase var2) { + this.tagMap.put(var1, var2.setName(var1)); + } + + public void setByte(String var1, byte var2) { + this.tagMap.put(var1, new NBTTagByte(var1, var2)); + } + + public void setShort(String var1, short var2) { + this.tagMap.put(var1, new NBTTagShort(var1, var2)); + } + + public void setInteger(String var1, int var2) { + this.tagMap.put(var1, new NBTTagInt(var1, var2)); + } + + public void setLong(String var1, long var2) { + this.tagMap.put(var1, new NBTTagLong(var1, var2)); + } + + public void setFloat(String var1, float var2) { + this.tagMap.put(var1, new NBTTagFloat(var1, var2)); + } + + public void setDouble(String var1, double var2) { + this.tagMap.put(var1, new NBTTagDouble(var1, var2)); + } + + public void setString(String var1, String var2) { + this.tagMap.put(var1, new NBTTagString(var1, var2)); + } + + public void setByteArray(String var1, byte[] var2) { + this.tagMap.put(var1, new NBTTagByteArray(var1, var2)); + } + + public void setIntArray(String var1, int[] var2) { + this.tagMap.put(var1, new NBTTagIntArray(var1, var2)); + } + + public void setCompoundTag(String var1, NBTTagCompound var2) { + this.tagMap.put(var1, var2.setName(var1)); + } + + public void setBoolean(String var1, boolean var2) { + this.setByte(var1, (byte)(var2 ? 1 : 0)); + } + + public NBTBase getTag(String var1) { + return (NBTBase)this.tagMap.get(var1); + } + + public boolean hasKey(String var1) { + return this.tagMap.containsKey(var1); + } + + public byte getByte(String var1) { + try { + return !this.tagMap.containsKey(var1) ? 0 : ((NBTTagByte)this.tagMap.get(var1)).data; + } catch (ClassCastException var3) { + throw new ReportedException(this.createCrashReport(var1, 1, var3)); + } + } + + public short getShort(String var1) { + try { + return !this.tagMap.containsKey(var1) ? 0 : ((NBTTagShort)this.tagMap.get(var1)).data; + } catch (ClassCastException var3) { + throw new ReportedException(this.createCrashReport(var1, 2, var3)); + } + } + + public int getInteger(String var1) { + try { + return !this.tagMap.containsKey(var1) ? 0 : ((NBTTagInt)this.tagMap.get(var1)).data; + } catch (ClassCastException var3) { + throw new ReportedException(this.createCrashReport(var1, 3, var3)); + } + } + + public long getLong(String var1) { + try { + return !this.tagMap.containsKey(var1) ? 0L : ((NBTTagLong)this.tagMap.get(var1)).data; + } catch (ClassCastException var3) { + throw new ReportedException(this.createCrashReport(var1, 4, var3)); + } + } + + public float getFloat(String var1) { + try { + return !this.tagMap.containsKey(var1) ? 0.0F : ((NBTTagFloat)this.tagMap.get(var1)).data; + } catch (ClassCastException var3) { + throw new ReportedException(this.createCrashReport(var1, 5, var3)); + } + } + + public double getDouble(String var1) { + try { + return !this.tagMap.containsKey(var1) ? 0.0D : ((NBTTagDouble)this.tagMap.get(var1)).data; + } catch (ClassCastException var3) { + throw new ReportedException(this.createCrashReport(var1, 6, var3)); + } + } + + public String getString(String var1) { + try { + return !this.tagMap.containsKey(var1) ? "" : ((NBTTagString)this.tagMap.get(var1)).data; + } catch (ClassCastException var3) { + throw new ReportedException(this.createCrashReport(var1, 8, var3)); + } + } + + public byte[] getByteArray(String var1) { + try { + return !this.tagMap.containsKey(var1) ? new byte[0] : ((NBTTagByteArray)this.tagMap.get(var1)).byteArray; + } catch (ClassCastException var3) { + throw new ReportedException(this.createCrashReport(var1, 7, var3)); + } + } + + public int[] getIntArray(String var1) { + try { + return !this.tagMap.containsKey(var1) ? new int[0] : ((NBTTagIntArray)this.tagMap.get(var1)).intArray; + } catch (ClassCastException var3) { + throw new ReportedException(this.createCrashReport(var1, 11, var3)); + } + } + + public NBTTagCompound getCompoundTag(String var1) { + try { + return !this.tagMap.containsKey(var1) ? new NBTTagCompound(var1) : (NBTTagCompound)this.tagMap.get(var1); + } catch (ClassCastException var3) { + throw new ReportedException(this.createCrashReport(var1, 10, var3)); + } + } + + public NBTTagList getTagList(String var1) { + try { + return !this.tagMap.containsKey(var1) ? new NBTTagList(var1) : (NBTTagList)this.tagMap.get(var1); + } catch (ClassCastException var3) { + throw new ReportedException(this.createCrashReport(var1, 9, var3)); + } + } + + public boolean getBoolean(String var1) { + return this.getByte(var1) != 0; + } + + public void removeTag(String var1) { + this.tagMap.remove(var1); + } + + public String toString() { + String var1 = this.getName() + ":["; + + String var3; + for(Iterator var2 = this.tagMap.keySet().iterator(); var2.hasNext(); var1 = var1 + var3 + ":" + this.tagMap.get(var3) + ",") { + var3 = (String)var2.next(); + } + + return var1 + "]"; + } + + public boolean hasNoTags() { + return this.tagMap.isEmpty(); + } + + private CrashReport createCrashReport(String var1, int var2, ClassCastException var3) { + CrashReport var4 = CrashReport.makeCrashReport(var3, "Reading NBT data"); + CrashReportCategory var5 = var4.makeCategoryDepth("Corrupt NBT tag", 1); + var5.addCrashSectionCallable("Tag type found", new CallableTagCompound1(this, var1)); + var5.addCrashSectionCallable("Tag type expected", new CallableTagCompound2(this, var2)); + var5.addCrashSection("Tag name", var1); + if(this.getName() != null && this.getName().length() > 0) { + var5.addCrashSection("Tag parent", this.getName()); + } + + return var4; + } + + public NBTBase copy() { + NBTTagCompound var1 = new NBTTagCompound(this.getName()); + Iterator var2 = this.tagMap.keySet().iterator(); + + while(var2.hasNext()) { + String var3 = (String)var2.next(); + var1.setTag(var3, ((NBTBase)this.tagMap.get(var3)).copy()); + } + + return var1; + } + + public boolean equals(Object var1) { + if(super.equals(var1)) { + NBTTagCompound var2 = (NBTTagCompound)var1; + return this.tagMap.entrySet().equals(var2.tagMap.entrySet()); + } else { + return false; + } + } + + public int hashCode() { + return super.hashCode() ^ this.tagMap.hashCode(); + } + + static Map getTagMap(NBTTagCompound var0) { + return var0.tagMap; + } +} diff --git a/src/net/minecraft/src/NBTTagDouble.java b/src/net/minecraft/src/NBTTagDouble.java new file mode 100644 index 0000000..c7a9b59 --- /dev/null +++ b/src/net/minecraft/src/NBTTagDouble.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagDouble extends NBTBase { + public double data; + + public NBTTagDouble(String var1) { + super(var1); + } + + public NBTTagDouble(String var1, double var2) { + super(var1); + this.data = var2; + } + + void write(DataOutput var1) throws IOException { + var1.writeDouble(this.data); + } + + void load(DataInput var1) throws IOException { + this.data = var1.readDouble(); + } + + public byte getId() { + return (byte)6; + } + + public String toString() { + return "" + this.data; + } + + public NBTBase copy() { + return new NBTTagDouble(this.getName(), this.data); + } + + public boolean equals(Object var1) { + if(super.equals(var1)) { + NBTTagDouble var2 = (NBTTagDouble)var1; + return this.data == var2.data; + } else { + return false; + } + } + + public int hashCode() { + long var1 = Double.doubleToLongBits(this.data); + return super.hashCode() ^ (int)(var1 ^ var1 >>> 32); + } +} diff --git a/src/net/minecraft/src/NBTTagEnd.java b/src/net/minecraft/src/NBTTagEnd.java new file mode 100644 index 0000000..cb1f1cd --- /dev/null +++ b/src/net/minecraft/src/NBTTagEnd.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagEnd extends NBTBase { + public NBTTagEnd() { + super((String)null); + } + + void load(DataInput var1) throws IOException { + } + + void write(DataOutput var1) throws IOException { + } + + public byte getId() { + return (byte)0; + } + + public String toString() { + return "END"; + } + + public NBTBase copy() { + return new NBTTagEnd(); + } +} diff --git a/src/net/minecraft/src/NBTTagFloat.java b/src/net/minecraft/src/NBTTagFloat.java new file mode 100644 index 0000000..b96e6c2 --- /dev/null +++ b/src/net/minecraft/src/NBTTagFloat.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagFloat extends NBTBase { + public float data; + + public NBTTagFloat(String var1) { + super(var1); + } + + public NBTTagFloat(String var1, float var2) { + super(var1); + this.data = var2; + } + + void write(DataOutput var1) throws IOException { + var1.writeFloat(this.data); + } + + void load(DataInput var1) throws IOException { + this.data = var1.readFloat(); + } + + public byte getId() { + return (byte)5; + } + + public String toString() { + return "" + this.data; + } + + public NBTBase copy() { + return new NBTTagFloat(this.getName(), this.data); + } + + public boolean equals(Object var1) { + if(super.equals(var1)) { + NBTTagFloat var2 = (NBTTagFloat)var1; + return this.data == var2.data; + } else { + return false; + } + } + + public int hashCode() { + return super.hashCode() ^ Float.floatToIntBits(this.data); + } +} diff --git a/src/net/minecraft/src/NBTTagInt.java b/src/net/minecraft/src/NBTTagInt.java new file mode 100644 index 0000000..8273c14 --- /dev/null +++ b/src/net/minecraft/src/NBTTagInt.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagInt extends NBTBase { + public int data; + + public NBTTagInt(String var1) { + super(var1); + } + + public NBTTagInt(String var1, int var2) { + super(var1); + this.data = var2; + } + + void write(DataOutput var1) throws IOException { + var1.writeInt(this.data); + } + + void load(DataInput var1) throws IOException { + this.data = var1.readInt(); + } + + public byte getId() { + return (byte)3; + } + + public String toString() { + return "" + this.data; + } + + public NBTBase copy() { + return new NBTTagInt(this.getName(), this.data); + } + + public boolean equals(Object var1) { + if(super.equals(var1)) { + NBTTagInt var2 = (NBTTagInt)var1; + return this.data == var2.data; + } else { + return false; + } + } + + public int hashCode() { + return super.hashCode() ^ this.data; + } +} diff --git a/src/net/minecraft/src/NBTTagIntArray.java b/src/net/minecraft/src/NBTTagIntArray.java new file mode 100644 index 0000000..d238535 --- /dev/null +++ b/src/net/minecraft/src/NBTTagIntArray.java @@ -0,0 +1,65 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.Arrays; + +public class NBTTagIntArray extends NBTBase { + public int[] intArray; + + public NBTTagIntArray(String var1) { + super(var1); + } + + public NBTTagIntArray(String var1, int[] var2) { + super(var1); + this.intArray = var2; + } + + void write(DataOutput var1) throws IOException { + var1.writeInt(this.intArray.length); + + for(int var2 = 0; var2 < this.intArray.length; ++var2) { + var1.writeInt(this.intArray[var2]); + } + + } + + void load(DataInput var1) throws IOException { + int var2 = var1.readInt(); + this.intArray = new int[var2]; + + for(int var3 = 0; var3 < var2; ++var3) { + this.intArray[var3] = var1.readInt(); + } + + } + + public byte getId() { + return (byte)11; + } + + public String toString() { + return "[" + this.intArray.length + " bytes]"; + } + + public NBTBase copy() { + int[] var1 = new int[this.intArray.length]; + System.arraycopy(this.intArray, 0, var1, 0, this.intArray.length); + return new NBTTagIntArray(this.getName(), var1); + } + + public boolean equals(Object var1) { + if(!super.equals(var1)) { + return false; + } else { + NBTTagIntArray var2 = (NBTTagIntArray)var1; + return this.intArray == null && var2.intArray == null || this.intArray != null && Arrays.equals(this.intArray, var2.intArray); + } + } + + public int hashCode() { + return super.hashCode() ^ Arrays.hashCode(this.intArray); + } +} diff --git a/src/net/minecraft/src/NBTTagList.java b/src/net/minecraft/src/NBTTagList.java new file mode 100644 index 0000000..575b157 --- /dev/null +++ b/src/net/minecraft/src/NBTTagList.java @@ -0,0 +1,104 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class NBTTagList extends NBTBase { + private List tagList = new ArrayList(); + private byte tagType; + + public NBTTagList() { + super(""); + } + + public NBTTagList(String var1) { + super(var1); + } + + void write(DataOutput var1) throws IOException { + if(!this.tagList.isEmpty()) { + this.tagType = ((NBTBase)this.tagList.get(0)).getId(); + } else { + this.tagType = 1; + } + + var1.writeByte(this.tagType); + var1.writeInt(this.tagList.size()); + + for(int var2 = 0; var2 < this.tagList.size(); ++var2) { + ((NBTBase)this.tagList.get(var2)).write(var1); + } + + } + + void load(DataInput var1) throws IOException { + this.tagType = var1.readByte(); + int var2 = var1.readInt(); + this.tagList = new ArrayList(); + + for(int var3 = 0; var3 < var2; ++var3) { + NBTBase var4 = NBTBase.newTag(this.tagType, (String)null); + var4.load(var1); + this.tagList.add(var4); + } + + } + + public byte getId() { + return (byte)9; + } + + public String toString() { + return "" + this.tagList.size() + " entries of type " + NBTBase.getTagName(this.tagType); + } + + public void appendTag(NBTBase var1) { + this.tagType = var1.getId(); + this.tagList.add(var1); + } + + public NBTBase removeTag(int var1) { + return (NBTBase)this.tagList.remove(var1); + } + + public NBTBase tagAt(int var1) { + return (NBTBase)this.tagList.get(var1); + } + + public int tagCount() { + return this.tagList.size(); + } + + public NBTBase copy() { + NBTTagList var1 = new NBTTagList(this.getName()); + var1.tagType = this.tagType; + Iterator var2 = this.tagList.iterator(); + + while(var2.hasNext()) { + NBTBase var3 = (NBTBase)var2.next(); + NBTBase var4 = var3.copy(); + var1.tagList.add(var4); + } + + return var1; + } + + public boolean equals(Object var1) { + if(super.equals(var1)) { + NBTTagList var2 = (NBTTagList)var1; + if(this.tagType == var2.tagType) { + return this.tagList.equals(var2.tagList); + } + } + + return false; + } + + public int hashCode() { + return super.hashCode() ^ this.tagList.hashCode(); + } +} diff --git a/src/net/minecraft/src/NBTTagLong.java b/src/net/minecraft/src/NBTTagLong.java new file mode 100644 index 0000000..0b3bf7a --- /dev/null +++ b/src/net/minecraft/src/NBTTagLong.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagLong extends NBTBase { + public long data; + + public NBTTagLong(String var1) { + super(var1); + } + + public NBTTagLong(String var1, long var2) { + super(var1); + this.data = var2; + } + + void write(DataOutput var1) throws IOException { + var1.writeLong(this.data); + } + + void load(DataInput var1) throws IOException { + this.data = var1.readLong(); + } + + public byte getId() { + return (byte)4; + } + + public String toString() { + return "" + this.data; + } + + public NBTBase copy() { + return new NBTTagLong(this.getName(), this.data); + } + + public boolean equals(Object var1) { + if(super.equals(var1)) { + NBTTagLong var2 = (NBTTagLong)var1; + return this.data == var2.data; + } else { + return false; + } + } + + public int hashCode() { + return super.hashCode() ^ (int)(this.data ^ this.data >>> 32); + } +} diff --git a/src/net/minecraft/src/NBTTagShort.java b/src/net/minecraft/src/NBTTagShort.java new file mode 100644 index 0000000..48d28e1 --- /dev/null +++ b/src/net/minecraft/src/NBTTagShort.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagShort extends NBTBase { + public short data; + + public NBTTagShort(String var1) { + super(var1); + } + + public NBTTagShort(String var1, short var2) { + super(var1); + this.data = var2; + } + + void write(DataOutput var1) throws IOException { + var1.writeShort(this.data); + } + + void load(DataInput var1) throws IOException { + this.data = var1.readShort(); + } + + public byte getId() { + return (byte)2; + } + + public String toString() { + return "" + this.data; + } + + public NBTBase copy() { + return new NBTTagShort(this.getName(), this.data); + } + + public boolean equals(Object var1) { + if(super.equals(var1)) { + NBTTagShort var2 = (NBTTagShort)var1; + return this.data == var2.data; + } else { + return false; + } + } + + public int hashCode() { + return super.hashCode() ^ this.data; + } +} diff --git a/src/net/minecraft/src/NBTTagString.java b/src/net/minecraft/src/NBTTagString.java new file mode 100644 index 0000000..1e80c8f --- /dev/null +++ b/src/net/minecraft/src/NBTTagString.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagString extends NBTBase { + public String data; + + public NBTTagString(String var1) { + super(var1); + } + + public NBTTagString(String var1, String var2) { + super(var1); + this.data = var2; + if(var2 == null) { + throw new IllegalArgumentException("Empty string not allowed"); + } + } + + void write(DataOutput var1) throws IOException { + var1.writeUTF(this.data); + } + + void load(DataInput var1) throws IOException { + this.data = var1.readUTF(); + } + + public byte getId() { + return (byte)8; + } + + public String toString() { + return "" + this.data; + } + + public NBTBase copy() { + return new NBTTagString(this.getName(), this.data); + } + + public boolean equals(Object var1) { + if(!super.equals(var1)) { + return false; + } else { + NBTTagString var2 = (NBTTagString)var1; + return this.data == null && var2.data == null || this.data != null && this.data.equals(var2.data); + } + } + + public int hashCode() { + return super.hashCode() ^ this.data.hashCode(); + } +} diff --git a/src/net/minecraft/src/NetClientHandler.java b/src/net/minecraft/src/NetClientHandler.java new file mode 100644 index 0000000..db70411 --- /dev/null +++ b/src/net/minecraft/src/NetClientHandler.java @@ -0,0 +1,1124 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.math.BigInteger; +import java.net.InetAddress; +import java.net.Socket; +import java.net.URL; +import java.net.URLEncoder; +import java.security.PublicKey; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import javax.crypto.SecretKey; +import net.minecraft.client.Minecraft; +import org.lwjgl.input.Keyboard; + +public class NetClientHandler extends NetHandler { + private boolean disconnected = false; + private INetworkManager netManager; + public String field_72560_a; + private Minecraft mc; + private WorldClient worldClient; + private boolean doneLoadingTerrain = false; + public MapStorage mapStorage = new MapStorage((ISaveHandler)null); + private Map playerInfoMap = new HashMap(); + public List playerInfoList = new ArrayList(); + public int currentServerMaxPlayers = 20; + private GuiScreen field_98183_l = null; + Random rand = new Random(); + + public NetClientHandler(Minecraft var1, String var2, int var3) throws IOException { + this.mc = var1; + Socket var4 = new Socket(InetAddress.getByName(var2), var3); + this.netManager = new TcpConnection(var1.getLogAgent(), var4, "Client", this); + } + + public NetClientHandler(Minecraft var1, String var2, int var3, GuiScreen var4) throws IOException { + this.mc = var1; + this.field_98183_l = var4; + Socket var5 = new Socket(InetAddress.getByName(var2), var3); + this.netManager = new TcpConnection(var1.getLogAgent(), var5, "Client", this); + } + + public NetClientHandler(Minecraft var1, IntegratedServer var2) throws IOException { + this.mc = var1; + this.netManager = new MemoryConnection(var1.getLogAgent(), this); + var2.getServerListeningThread().func_71754_a((MemoryConnection)this.netManager, var1.session.username); + } + + public void cleanup() { + if(this.netManager != null) { + this.netManager.wakeThreads(); + } + + this.netManager = null; + this.worldClient = null; + } + + public void processReadPackets() { + if(!this.disconnected && this.netManager != null) { + this.netManager.processReadPackets(); + } + + if(this.netManager != null) { + this.netManager.wakeThreads(); + } + + } + + public void handleServerAuthData(Packet253ServerAuthData var1) { + String var2 = var1.getServerId().trim(); + PublicKey var3 = var1.getPublicKey(); + SecretKey var4 = CryptManager.createNewSharedKey(); + if(!"-".equals(var2)) { + String var5 = (new BigInteger(CryptManager.getServerIdHash(var2, var3, var4))).toString(16); + String var6 = this.sendSessionRequest(this.mc.session.username, this.mc.session.sessionId, var5); + if(!"ok".equalsIgnoreCase(var6)) { + this.netManager.networkShutdown("disconnect.loginFailedInfo", new Object[]{var6}); + return; + } + } + + this.addToSendQueue(new Packet252SharedKey(var4, var3, var1.getVerifyToken())); + } + + private String sendSessionRequest(String var1, String var2, String var3) { + try { + URL var4 = new URL("http://session.minecraft.net/game/joinserver.jsp?user=" + urlEncode(var1) + "&sessionId=" + urlEncode(var2) + "&serverId=" + urlEncode(var3)); + BufferedReader var5 = new BufferedReader(new InputStreamReader(var4.openStream())); + String var6 = var5.readLine(); + var5.close(); + return var6; + } catch (IOException var7) { + return var7.toString(); + } + } + + private static String urlEncode(String var0) throws IOException { + return URLEncoder.encode(var0, "UTF-8"); + } + + public void handleSharedKey(Packet252SharedKey var1) { + this.addToSendQueue(new Packet205ClientCommand(0)); + } + + public void handleLogin(Packet1Login var1) { + this.mc.playerController = new PlayerControllerMP(this.mc, this); + this.mc.statFileWriter.readStat(StatList.joinMultiplayerStat, 1); + this.worldClient = new WorldClient(this, new WorldSettings(0L, var1.gameType, false, var1.hardcoreMode, var1.terrainType), var1.dimension, var1.difficultySetting, this.mc.mcProfiler, this.mc.getLogAgent()); + this.worldClient.isRemote = true; + this.mc.loadWorld(this.worldClient); + this.mc.thePlayer.dimension = var1.dimension; + this.mc.displayGuiScreen(new GuiDownloadTerrain(this)); + this.mc.thePlayer.entityId = var1.clientEntityId; + this.currentServerMaxPlayers = var1.maxPlayers; + this.mc.playerController.setGameType(var1.gameType); + this.mc.gameSettings.sendSettingsToServer(); + } + + public void handleVehicleSpawn(Packet23VehicleSpawn var1) { + double var2 = (double)var1.xPosition / 32.0D; + double var4 = (double)var1.yPosition / 32.0D; + double var6 = (double)var1.zPosition / 32.0D; + Object var8 = null; + if(var1.type == 10) { + var8 = EntityMinecart.createMinecart(this.worldClient, var2, var4, var6, var1.throwerEntityId); + } else if(var1.type == 90) { + Entity var9 = this.getEntityByID(var1.throwerEntityId); + if(var9 instanceof EntityPlayer) { + var8 = new EntityFishHook(this.worldClient, var2, var4, var6, (EntityPlayer)var9); + } + + var1.throwerEntityId = 0; + } else if(var1.type == 60) { + var8 = new EntityArrow(this.worldClient, var2, var4, var6); + } else if(var1.type == 61) { + var8 = new EntitySnowball(this.worldClient, var2, var4, var6); + } else if(var1.type == 71) { + var8 = new EntityItemFrame(this.worldClient, (int)var2, (int)var4, (int)var6, var1.throwerEntityId); + var1.throwerEntityId = 0; + } else if(var1.type == 65) { + var8 = new EntityEnderPearl(this.worldClient, var2, var4, var6); + } else if(var1.type == 72) { + var8 = new EntityEnderEye(this.worldClient, var2, var4, var6); + } else if(var1.type == 76) { + var8 = new EntityFireworkRocket(this.worldClient, var2, var4, var6, (ItemStack)null); + } else if(var1.type == 63) { + var8 = new EntityLargeFireball(this.worldClient, var2, var4, var6, (double)var1.speedX / 8000.0D, (double)var1.speedY / 8000.0D, (double)var1.speedZ / 8000.0D); + var1.throwerEntityId = 0; + } else if(var1.type == 64) { + var8 = new EntitySmallFireball(this.worldClient, var2, var4, var6, (double)var1.speedX / 8000.0D, (double)var1.speedY / 8000.0D, (double)var1.speedZ / 8000.0D); + var1.throwerEntityId = 0; + } else if(var1.type == 66) { + var8 = new EntityWitherSkull(this.worldClient, var2, var4, var6, (double)var1.speedX / 8000.0D, (double)var1.speedY / 8000.0D, (double)var1.speedZ / 8000.0D); + var1.throwerEntityId = 0; + } else if(var1.type == 62) { + var8 = new EntityEgg(this.worldClient, var2, var4, var6); + } else if(var1.type == 73) { + var8 = new EntityPotion(this.worldClient, var2, var4, var6, var1.throwerEntityId); + var1.throwerEntityId = 0; + } else if(var1.type == 75) { + var8 = new EntityExpBottle(this.worldClient, var2, var4, var6); + var1.throwerEntityId = 0; + } else if(var1.type == 1) { + var8 = new EntityBoat(this.worldClient, var2, var4, var6); + } else if(var1.type == 50) { + var8 = new EntityTNTPrimed(this.worldClient, var2, var4, var6, (EntityLiving)null); + } else if(var1.type == 51) { + var8 = new EntityEnderCrystal(this.worldClient, var2, var4, var6); + } else if(var1.type == 2) { + var8 = new EntityItem(this.worldClient, var2, var4, var6); + } else if(var1.type == 70) { + var8 = new EntityFallingSand(this.worldClient, var2, var4, var6, var1.throwerEntityId & '\uffff', var1.throwerEntityId >> 16); + var1.throwerEntityId = 0; + } + + if(var8 != null) { + ((Entity)var8).serverPosX = var1.xPosition; + ((Entity)var8).serverPosY = var1.yPosition; + ((Entity)var8).serverPosZ = var1.zPosition; + ((Entity)var8).rotationPitch = (float)(var1.pitch * 360) / 256.0F; + ((Entity)var8).rotationYaw = (float)(var1.yaw * 360) / 256.0F; + Entity[] var12 = ((Entity)var8).getParts(); + if(var12 != null) { + int var10 = var1.entityId - ((Entity)var8).entityId; + + for(int var11 = 0; var11 < var12.length; ++var11) { + var12[var11].entityId += var10; + } + } + + ((Entity)var8).entityId = var1.entityId; + this.worldClient.addEntityToWorld(var1.entityId, (Entity)var8); + if(var1.throwerEntityId > 0) { + if(var1.type == 60) { + Entity var13 = this.getEntityByID(var1.throwerEntityId); + if(var13 instanceof EntityLiving) { + EntityArrow var14 = (EntityArrow)var8; + var14.shootingEntity = var13; + } + } + + ((Entity)var8).setVelocity((double)var1.speedX / 8000.0D, (double)var1.speedY / 8000.0D, (double)var1.speedZ / 8000.0D); + } + } + + } + + public void handleEntityExpOrb(Packet26EntityExpOrb var1) { + EntityXPOrb var2 = new EntityXPOrb(this.worldClient, (double)var1.posX, (double)var1.posY, (double)var1.posZ, var1.xpValue); + var2.serverPosX = var1.posX; + var2.serverPosY = var1.posY; + var2.serverPosZ = var1.posZ; + var2.rotationYaw = 0.0F; + var2.rotationPitch = 0.0F; + var2.entityId = var1.entityId; + this.worldClient.addEntityToWorld(var1.entityId, var2); + } + + public void handleWeather(Packet71Weather var1) { + double var2 = (double)var1.posX / 32.0D; + double var4 = (double)var1.posY / 32.0D; + double var6 = (double)var1.posZ / 32.0D; + EntityLightningBolt var8 = null; + if(var1.isLightningBolt == 1) { + var8 = new EntityLightningBolt(this.worldClient, var2, var4, var6); + } + + if(var8 != null) { + var8.serverPosX = var1.posX; + var8.serverPosY = var1.posY; + var8.serverPosZ = var1.posZ; + var8.rotationYaw = 0.0F; + var8.rotationPitch = 0.0F; + var8.entityId = var1.entityID; + this.worldClient.addWeatherEffect(var8); + } + + } + + public void handleEntityPainting(Packet25EntityPainting var1) { + EntityPainting var2 = new EntityPainting(this.worldClient, var1.xPosition, var1.yPosition, var1.zPosition, var1.direction, var1.title); + this.worldClient.addEntityToWorld(var1.entityId, var2); + } + + public void handleEntityVelocity(Packet28EntityVelocity var1) { + Entity var2 = this.getEntityByID(var1.entityId); + if(var2 != null) { + var2.setVelocity((double)var1.motionX / 8000.0D, (double)var1.motionY / 8000.0D, (double)var1.motionZ / 8000.0D); + } + } + + public void handleEntityMetadata(Packet40EntityMetadata var1) { + Entity var2 = this.getEntityByID(var1.entityId); + if(var2 != null && var1.getMetadata() != null) { + var2.getDataWatcher().updateWatchedObjectsFromList(var1.getMetadata()); + } + + } + + public void handleNamedEntitySpawn(Packet20NamedEntitySpawn var1) { + double var2 = (double)var1.xPosition / 32.0D; + double var4 = (double)var1.yPosition / 32.0D; + double var6 = (double)var1.zPosition / 32.0D; + float var8 = (float)(var1.rotation * 360) / 256.0F; + float var9 = (float)(var1.pitch * 360) / 256.0F; + EntityOtherPlayerMP var10 = new EntityOtherPlayerMP(this.mc.theWorld, var1.name); + var10.prevPosX = var10.lastTickPosX = (double)(var10.serverPosX = var1.xPosition); + var10.prevPosY = var10.lastTickPosY = (double)(var10.serverPosY = var1.yPosition); + var10.prevPosZ = var10.lastTickPosZ = (double)(var10.serverPosZ = var1.zPosition); + int var11 = var1.currentItem; + if(var11 == 0) { + var10.inventory.mainInventory[var10.inventory.currentItem] = null; + } else { + var10.inventory.mainInventory[var10.inventory.currentItem] = new ItemStack(var11, 1, 0); + } + + var10.setPositionAndRotation(var2, var4, var6, var8, var9); + this.worldClient.addEntityToWorld(var1.entityId, var10); + List var12 = var1.getWatchedMetadata(); + if(var12 != null) { + var10.getDataWatcher().updateWatchedObjectsFromList(var12); + } + + } + + public void handleEntityTeleport(Packet34EntityTeleport var1) { + Entity var2 = this.getEntityByID(var1.entityId); + if(var2 != null) { + var2.serverPosX = var1.xPosition; + var2.serverPosY = var1.yPosition; + var2.serverPosZ = var1.zPosition; + double var3 = (double)var2.serverPosX / 32.0D; + double var5 = (double)var2.serverPosY / 32.0D + 1.0D / 64.0D; + double var7 = (double)var2.serverPosZ / 32.0D; + float var9 = (float)(var1.yaw * 360) / 256.0F; + float var10 = (float)(var1.pitch * 360) / 256.0F; + var2.setPositionAndRotation2(var3, var5, var7, var9, var10, 3); + } + } + + public void handleBlockItemSwitch(Packet16BlockItemSwitch var1) { + if(var1.id >= 0 && var1.id < InventoryPlayer.getHotbarSize()) { + this.mc.thePlayer.inventory.currentItem = var1.id; + } + + } + + public void handleEntity(Packet30Entity var1) { + Entity var2 = this.getEntityByID(var1.entityId); + if(var2 != null) { + var2.serverPosX += var1.xPosition; + var2.serverPosY += var1.yPosition; + var2.serverPosZ += var1.zPosition; + double var3 = (double)var2.serverPosX / 32.0D; + double var5 = (double)var2.serverPosY / 32.0D; + double var7 = (double)var2.serverPosZ / 32.0D; + float var9 = var1.rotating ? (float)(var1.yaw * 360) / 256.0F : var2.rotationYaw; + float var10 = var1.rotating ? (float)(var1.pitch * 360) / 256.0F : var2.rotationPitch; + var2.setPositionAndRotation2(var3, var5, var7, var9, var10, 3); + } + } + + public void handleEntityHeadRotation(Packet35EntityHeadRotation var1) { + Entity var2 = this.getEntityByID(var1.entityId); + if(var2 != null) { + float var3 = (float)(var1.headRotationYaw * 360) / 256.0F; + var2.setRotationYawHead(var3); + } + } + + public void handleDestroyEntity(Packet29DestroyEntity var1) { + for(int var2 = 0; var2 < var1.entityId.length; ++var2) { + this.worldClient.removeEntityFromWorld(var1.entityId[var2]); + } + + } + + public void handleFlying(Packet10Flying var1) { + EntityClientPlayerMP var2 = this.mc.thePlayer; + double var3 = var2.posX; + double var5 = var2.posY; + double var7 = var2.posZ; + float var9 = var2.rotationYaw; + float var10 = var2.rotationPitch; + if(var1.moving) { + var3 = var1.xPosition; + var5 = var1.yPosition; + var7 = var1.zPosition; + } + + if(var1.rotating) { + var9 = var1.yaw; + var10 = var1.pitch; + } + + var2.ySize = 0.0F; + var2.motionX = var2.motionY = var2.motionZ = 0.0D; + var2.setPositionAndRotation(var3, var5, var7, var9, var10); + var1.xPosition = var2.posX; + var1.yPosition = var2.boundingBox.minY; + var1.zPosition = var2.posZ; + var1.stance = var2.posY; + this.netManager.addToSendQueue(var1); + if(!this.doneLoadingTerrain) { + this.mc.thePlayer.prevPosX = this.mc.thePlayer.posX; + this.mc.thePlayer.prevPosY = this.mc.thePlayer.posY; + this.mc.thePlayer.prevPosZ = this.mc.thePlayer.posZ; + this.doneLoadingTerrain = true; + this.mc.displayGuiScreen((GuiScreen)null); + } + + } + + public void handleMultiBlockChange(Packet52MultiBlockChange var1) { + int var2 = var1.xPosition * 16; + int var3 = var1.zPosition * 16; + if(var1.metadataArray != null) { + DataInputStream var4 = new DataInputStream(new ByteArrayInputStream(var1.metadataArray)); + + try { + for(int var5 = 0; var5 < var1.size; ++var5) { + short var6 = var4.readShort(); + short var7 = var4.readShort(); + int var8 = var7 >> 4 & 4095; + int var9 = var7 & 15; + int var10 = var6 >> 12 & 15; + int var11 = var6 >> 8 & 15; + int var12 = var6 & 255; + this.worldClient.setBlockAndMetadataAndInvalidate(var10 + var2, var12, var11 + var3, var8, var9); + } + } catch (IOException var13) { + } + + } + } + + public void handleMapChunk(Packet51MapChunk var1) { + if(var1.includeInitialize) { + if(var1.yChMin == 0) { + this.worldClient.doPreChunk(var1.xCh, var1.zCh, false); + return; + } + + this.worldClient.doPreChunk(var1.xCh, var1.zCh, true); + } + + this.worldClient.invalidateBlockReceiveRegion(var1.xCh << 4, 0, var1.zCh << 4, (var1.xCh << 4) + 15, 256, (var1.zCh << 4) + 15); + Chunk var2 = this.worldClient.getChunkFromChunkCoords(var1.xCh, var1.zCh); + if(var1.includeInitialize && var2 == null) { + this.worldClient.doPreChunk(var1.xCh, var1.zCh, true); + var2 = this.worldClient.getChunkFromChunkCoords(var1.xCh, var1.zCh); + } + + if(var2 != null) { + var2.fillChunk(var1.getCompressedChunkData(), var1.yChMin, var1.yChMax, var1.includeInitialize); + this.worldClient.markBlockRangeForRenderUpdate(var1.xCh << 4, 0, var1.zCh << 4, (var1.xCh << 4) + 15, 256, (var1.zCh << 4) + 15); + if(!var1.includeInitialize || !(this.worldClient.provider instanceof WorldProviderSurface)) { + var2.resetRelightChecks(); + } + } + + } + + public void handleBlockChange(Packet53BlockChange var1) { + this.worldClient.setBlockAndMetadataAndInvalidate(var1.xPosition, var1.yPosition, var1.zPosition, var1.type, var1.metadata); + } + + public void handleKickDisconnect(Packet255KickDisconnect var1) { + this.netManager.networkShutdown("disconnect.kicked", new Object[0]); + this.disconnected = true; + this.mc.loadWorld((WorldClient)null); + if(this.field_98183_l != null) { + this.mc.displayGuiScreen(new GuiScreenDisconnectedOnline(this.field_98183_l, "disconnect.disconnected", "disconnect.genericReason", new Object[]{var1.reason})); + } else { + this.mc.displayGuiScreen(new GuiDisconnected(new GuiMultiplayer(new GuiMainMenu()), "disconnect.disconnected", "disconnect.genericReason", new Object[]{var1.reason})); + } + + } + + public void handleErrorMessage(String var1, Object[] var2) { + if(!this.disconnected) { + this.disconnected = true; + this.mc.loadWorld((WorldClient)null); + if(this.field_98183_l != null) { + this.mc.displayGuiScreen(new GuiScreenDisconnectedOnline(this.field_98183_l, "disconnect.lost", var1, var2)); + } else { + this.mc.displayGuiScreen(new GuiDisconnected(new GuiMultiplayer(new GuiMainMenu()), "disconnect.lost", var1, var2)); + } + + } + } + + public void quitWithPacket(Packet var1) { + if(!this.disconnected) { + this.netManager.addToSendQueue(var1); + this.netManager.serverShutdown(); + } + } + + public void addToSendQueue(Packet var1) { + if(!this.disconnected) { + this.netManager.addToSendQueue(var1); + } + } + + public void handleCollect(Packet22Collect var1) { + Entity var2 = this.getEntityByID(var1.collectedEntityId); + Object var3 = (EntityLiving)this.getEntityByID(var1.collectorEntityId); + if(var3 == null) { + var3 = this.mc.thePlayer; + } + + if(var2 != null) { + if(var2 instanceof EntityXPOrb) { + this.worldClient.playSoundAtEntity(var2, "random.orb", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + } else { + this.worldClient.playSoundAtEntity(var2, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + } + + this.mc.effectRenderer.addEffect(new EntityPickupFX(this.mc.theWorld, var2, (Entity)var3, -0.5F)); + this.worldClient.removeEntityFromWorld(var1.collectedEntityId); + } + + } + + public void handleChat(Packet3Chat var1) { + this.mc.ingameGUI.getChatGUI().printChatMessage(var1.message); + } + + public void handleAnimation(Packet18Animation var1) { + Entity var2 = this.getEntityByID(var1.entityId); + if(var2 != null) { + if(var1.animate == 1) { + EntityLiving var3 = (EntityLiving)var2; + var3.swingItem(); + } else if(var1.animate == 2) { + var2.performHurtAnimation(); + } else if(var1.animate == 3) { + EntityPlayer var4 = (EntityPlayer)var2; + var4.wakeUpPlayer(false, false, false); + } else if(var1.animate != 4) { + if(var1.animate == 6) { + this.mc.effectRenderer.addEffect(new EntityCrit2FX(this.mc.theWorld, var2)); + } else if(var1.animate == 7) { + EntityCrit2FX var5 = new EntityCrit2FX(this.mc.theWorld, var2, "magicCrit"); + this.mc.effectRenderer.addEffect(var5); + } else if(var1.animate == 5 && var2 instanceof EntityOtherPlayerMP) { + } + } + + } + } + + public void handleSleep(Packet17Sleep var1) { + Entity var2 = this.getEntityByID(var1.entityID); + if(var2 != null) { + if(var1.field_73622_e == 0) { + EntityPlayer var3 = (EntityPlayer)var2; + var3.sleepInBedAt(var1.bedX, var1.bedY, var1.bedZ); + } + + } + } + + public void disconnect() { + this.disconnected = true; + this.netManager.wakeThreads(); + this.netManager.networkShutdown("disconnect.closed", new Object[0]); + } + + public void handleMobSpawn(Packet24MobSpawn var1) { + double var2 = (double)var1.xPosition / 32.0D; + double var4 = (double)var1.yPosition / 32.0D; + double var6 = (double)var1.zPosition / 32.0D; + float var8 = (float)(var1.yaw * 360) / 256.0F; + float var9 = (float)(var1.pitch * 360) / 256.0F; + EntityLiving var10 = (EntityLiving)EntityList.createEntityByID(var1.type, this.mc.theWorld); + var10.serverPosX = var1.xPosition; + var10.serverPosY = var1.yPosition; + var10.serverPosZ = var1.zPosition; + var10.rotationYawHead = (float)(var1.headYaw * 360) / 256.0F; + Entity[] var11 = var10.getParts(); + if(var11 != null) { + int var12 = var1.entityId - var10.entityId; + + for(int var13 = 0; var13 < var11.length; ++var13) { + var11[var13].entityId += var12; + } + } + + var10.entityId = var1.entityId; + var10.setPositionAndRotation(var2, var4, var6, var8, var9); + var10.motionX = (double)((float)var1.velocityX / 8000.0F); + var10.motionY = (double)((float)var1.velocityY / 8000.0F); + var10.motionZ = (double)((float)var1.velocityZ / 8000.0F); + this.worldClient.addEntityToWorld(var1.entityId, var10); + List var14 = var1.getMetadata(); + if(var14 != null) { + var10.getDataWatcher().updateWatchedObjectsFromList(var14); + } + + } + + public void handleUpdateTime(Packet4UpdateTime var1) { + this.mc.theWorld.func_82738_a(var1.worldAge); + this.mc.theWorld.setWorldTime(var1.time); + } + + public void handleSpawnPosition(Packet6SpawnPosition var1) { + this.mc.thePlayer.setSpawnChunk(new ChunkCoordinates(var1.xPosition, var1.yPosition, var1.zPosition), true); + this.mc.theWorld.getWorldInfo().setSpawnPosition(var1.xPosition, var1.yPosition, var1.zPosition); + } + + public void handleAttachEntity(Packet39AttachEntity var1) { + Object var2 = this.getEntityByID(var1.entityId); + Entity var3 = this.getEntityByID(var1.vehicleEntityId); + if(var1.entityId == this.mc.thePlayer.entityId) { + var2 = this.mc.thePlayer; + if(var3 instanceof EntityBoat) { + ((EntityBoat)var3).func_70270_d(false); + } + } else if(var3 instanceof EntityBoat) { + ((EntityBoat)var3).func_70270_d(true); + } + + if(var2 != null) { + ((Entity)var2).mountEntity(var3); + } + } + + public void handleEntityStatus(Packet38EntityStatus var1) { + Entity var2 = this.getEntityByID(var1.entityId); + if(var2 != null) { + var2.handleHealthUpdate(var1.entityStatus); + } + + } + + private Entity getEntityByID(int var1) { + return (Entity)(var1 == this.mc.thePlayer.entityId ? this.mc.thePlayer : this.worldClient.getEntityByID(var1)); + } + + public void handleUpdateHealth(Packet8UpdateHealth var1) { + this.mc.thePlayer.setHealth(var1.healthMP); + this.mc.thePlayer.getFoodStats().setFoodLevel(var1.food); + this.mc.thePlayer.getFoodStats().setFoodSaturationLevel(var1.foodSaturation); + } + + public void handleExperience(Packet43Experience var1) { + this.mc.thePlayer.setXPStats(var1.experience, var1.experienceTotal, var1.experienceLevel); + } + + public void handleRespawn(Packet9Respawn var1) { + if(var1.respawnDimension != this.mc.thePlayer.dimension) { + this.doneLoadingTerrain = false; + Scoreboard var2 = this.worldClient.getScoreboard(); + this.worldClient = new WorldClient(this, new WorldSettings(0L, var1.gameType, false, this.mc.theWorld.getWorldInfo().isHardcoreModeEnabled(), var1.terrainType), var1.respawnDimension, var1.difficulty, this.mc.mcProfiler, this.mc.getLogAgent()); + this.worldClient.func_96443_a(var2); + this.worldClient.isRemote = true; + this.mc.loadWorld(this.worldClient); + this.mc.thePlayer.dimension = var1.respawnDimension; + this.mc.displayGuiScreen(new GuiDownloadTerrain(this)); + } + + this.mc.setDimensionAndSpawnPlayer(var1.respawnDimension); + this.mc.playerController.setGameType(var1.gameType); + } + + public void handleExplosion(Packet60Explosion var1) { + Explosion var2 = new Explosion(this.mc.theWorld, (Entity)null, var1.explosionX, var1.explosionY, var1.explosionZ, var1.explosionSize); + var2.affectedBlockPositions = var1.chunkPositionRecords; + var2.doExplosionB(true); + this.mc.thePlayer.motionX += (double)var1.getPlayerVelocityX(); + this.mc.thePlayer.motionY += (double)var1.getPlayerVelocityY(); + this.mc.thePlayer.motionZ += (double)var1.getPlayerVelocityZ(); + } + + public void handleOpenWindow(Packet100OpenWindow var1) { + EntityClientPlayerMP var2 = this.mc.thePlayer; + switch(var1.inventoryType) { + case 0: + var2.displayGUIChest(new InventoryBasic(var1.windowTitle, var1.useProvidedWindowTitle, var1.slotsCount)); + var2.openContainer.windowId = var1.windowId; + break; + case 1: + var2.displayGUIWorkbench(MathHelper.floor_double(var2.posX), MathHelper.floor_double(var2.posY), MathHelper.floor_double(var2.posZ)); + var2.openContainer.windowId = var1.windowId; + break; + case 2: + TileEntityFurnace var4 = new TileEntityFurnace(); + if(var1.useProvidedWindowTitle) { + var4.func_94129_a(var1.windowTitle); + } + + var2.displayGUIFurnace(var4); + var2.openContainer.windowId = var1.windowId; + break; + case 3: + TileEntityDispenser var7 = new TileEntityDispenser(); + if(var1.useProvidedWindowTitle) { + var7.setCustomName(var1.windowTitle); + } + + var2.displayGUIDispenser(var7); + var2.openContainer.windowId = var1.windowId; + break; + case 4: + var2.displayGUIEnchantment(MathHelper.floor_double(var2.posX), MathHelper.floor_double(var2.posY), MathHelper.floor_double(var2.posZ), var1.useProvidedWindowTitle ? var1.windowTitle : null); + var2.openContainer.windowId = var1.windowId; + break; + case 5: + TileEntityBrewingStand var5 = new TileEntityBrewingStand(); + if(var1.useProvidedWindowTitle) { + var5.func_94131_a(var1.windowTitle); + } + + var2.displayGUIBrewingStand(var5); + var2.openContainer.windowId = var1.windowId; + break; + case 6: + var2.displayGUIMerchant(new NpcMerchant(var2), var1.useProvidedWindowTitle ? var1.windowTitle : null); + var2.openContainer.windowId = var1.windowId; + break; + case 7: + TileEntityBeacon var8 = new TileEntityBeacon(); + var2.displayGUIBeacon(var8); + if(var1.useProvidedWindowTitle) { + var8.func_94047_a(var1.windowTitle); + } + + var2.openContainer.windowId = var1.windowId; + break; + case 8: + var2.displayGUIAnvil(MathHelper.floor_double(var2.posX), MathHelper.floor_double(var2.posY), MathHelper.floor_double(var2.posZ)); + var2.openContainer.windowId = var1.windowId; + break; + case 9: + TileEntityHopper var3 = new TileEntityHopper(); + if(var1.useProvidedWindowTitle) { + var3.setInventoryName(var1.windowTitle); + } + + var2.displayGUIHopper(var3); + var2.openContainer.windowId = var1.windowId; + break; + case 10: + TileEntityDropper var6 = new TileEntityDropper(); + if(var1.useProvidedWindowTitle) { + var6.setCustomName(var1.windowTitle); + } + + var2.displayGUIDispenser(var6); + var2.openContainer.windowId = var1.windowId; + } + + } + + public void handleSetSlot(Packet103SetSlot var1) { + EntityClientPlayerMP var2 = this.mc.thePlayer; + if(var1.windowId == -1) { + var2.inventory.setItemStack(var1.myItemStack); + } else { + boolean var3 = false; + if(this.mc.currentScreen instanceof GuiContainerCreative) { + GuiContainerCreative var4 = (GuiContainerCreative)this.mc.currentScreen; + var3 = var4.func_74230_h() != CreativeTabs.tabInventory.getTabIndex(); + } + + if(var1.windowId == 0 && var1.itemSlot >= 36 && var1.itemSlot < 45) { + ItemStack var5 = var2.inventoryContainer.getSlot(var1.itemSlot).getStack(); + if(var1.myItemStack != null && (var5 == null || var5.stackSize < var1.myItemStack.stackSize)) { + var1.myItemStack.animationsToGo = 5; + } + + var2.inventoryContainer.putStackInSlot(var1.itemSlot, var1.myItemStack); + } else if(var1.windowId == var2.openContainer.windowId && (var1.windowId != 0 || !var3)) { + var2.openContainer.putStackInSlot(var1.itemSlot, var1.myItemStack); + } + } + + } + + public void handleTransaction(Packet106Transaction var1) { + Container var2 = null; + EntityClientPlayerMP var3 = this.mc.thePlayer; + if(var1.windowId == 0) { + var2 = var3.inventoryContainer; + } else if(var1.windowId == var3.openContainer.windowId) { + var2 = var3.openContainer; + } + + if(var2 != null && !var1.accepted) { + this.addToSendQueue(new Packet106Transaction(var1.windowId, var1.shortWindowId, true)); + } + + } + + public void handleWindowItems(Packet104WindowItems var1) { + EntityClientPlayerMP var2 = this.mc.thePlayer; + if(var1.windowId == 0) { + var2.inventoryContainer.putStacksInSlots(var1.itemStack); + } else if(var1.windowId == var2.openContainer.windowId) { + var2.openContainer.putStacksInSlots(var1.itemStack); + } + + } + + public void handleUpdateSign(Packet130UpdateSign var1) { + boolean var2 = false; + if(this.mc.theWorld.blockExists(var1.xPosition, var1.yPosition, var1.zPosition)) { + TileEntity var3 = this.mc.theWorld.getBlockTileEntity(var1.xPosition, var1.yPosition, var1.zPosition); + if(var3 instanceof TileEntitySign) { + TileEntitySign var4 = (TileEntitySign)var3; + if(var4.isEditable()) { + for(int var5 = 0; var5 < 4; ++var5) { + var4.signText[var5] = var1.signLines[var5]; + } + + var4.onInventoryChanged(); + } + + var2 = true; + } + } + + if(!var2 && this.mc.thePlayer != null) { + this.mc.thePlayer.sendChatToPlayer("Unable to locate sign at " + var1.xPosition + ", " + var1.yPosition + ", " + var1.zPosition); + } + + } + + public void handleTileEntityData(Packet132TileEntityData var1) { + if(this.mc.theWorld.blockExists(var1.xPosition, var1.yPosition, var1.zPosition)) { + TileEntity var2 = this.mc.theWorld.getBlockTileEntity(var1.xPosition, var1.yPosition, var1.zPosition); + if(var2 != null) { + if(var1.actionType == 1 && var2 instanceof TileEntityMobSpawner) { + var2.readFromNBT(var1.customParam1); + } else if(var1.actionType == 2 && var2 instanceof TileEntityCommandBlock) { + var2.readFromNBT(var1.customParam1); + } else if(var1.actionType == 3 && var2 instanceof TileEntityBeacon) { + var2.readFromNBT(var1.customParam1); + } else if(var1.actionType == 4 && var2 instanceof TileEntitySkull) { + var2.readFromNBT(var1.customParam1); + } + } + } + + } + + public void handleUpdateProgressbar(Packet105UpdateProgressbar var1) { + EntityClientPlayerMP var2 = this.mc.thePlayer; + this.unexpectedPacket(var1); + if(var2.openContainer != null && var2.openContainer.windowId == var1.windowId) { + var2.openContainer.updateProgressBar(var1.progressBar, var1.progressBarValue); + } + + } + + public void handlePlayerInventory(Packet5PlayerInventory var1) { + Entity var2 = this.getEntityByID(var1.entityID); + if(var2 != null) { + var2.setCurrentItemOrArmor(var1.slot, var1.getItemSlot()); + } + + } + + public void handleCloseWindow(Packet101CloseWindow var1) { + this.mc.thePlayer.func_92015_f(); + } + + public void handleBlockEvent(Packet54PlayNoteBlock var1) { + this.mc.theWorld.addBlockEvent(var1.xLocation, var1.yLocation, var1.zLocation, var1.blockId, var1.instrumentType, var1.pitch); + } + + public void handleBlockDestroy(Packet55BlockDestroy var1) { + this.mc.theWorld.destroyBlockInWorldPartially(var1.getEntityId(), var1.getPosX(), var1.getPosY(), var1.getPosZ(), var1.getDestroyedStage()); + } + + public void handleMapChunks(Packet56MapChunks var1) { + for(int var2 = 0; var2 < var1.getNumberOfChunkInPacket(); ++var2) { + int var3 = var1.getChunkPosX(var2); + int var4 = var1.getChunkPosZ(var2); + this.worldClient.doPreChunk(var3, var4, true); + this.worldClient.invalidateBlockReceiveRegion(var3 << 4, 0, var4 << 4, (var3 << 4) + 15, 256, (var4 << 4) + 15); + Chunk var5 = this.worldClient.getChunkFromChunkCoords(var3, var4); + if(var5 == null) { + this.worldClient.doPreChunk(var3, var4, true); + var5 = this.worldClient.getChunkFromChunkCoords(var3, var4); + } + + if(var5 != null) { + var5.fillChunk(var1.getChunkCompressedData(var2), var1.field_73590_a[var2], var1.field_73588_b[var2], true); + this.worldClient.markBlockRangeForRenderUpdate(var3 << 4, 0, var4 << 4, (var3 << 4) + 15, 256, (var4 << 4) + 15); + if(!(this.worldClient.provider instanceof WorldProviderSurface)) { + var5.resetRelightChecks(); + } + } + } + + } + + public boolean canProcessPacketsAsync() { + return this.mc != null && this.mc.theWorld != null && this.mc.thePlayer != null && this.worldClient != null; + } + + public void handleGameEvent(Packet70GameEvent var1) { + EntityClientPlayerMP var2 = this.mc.thePlayer; + int var3 = var1.eventType; + int var4 = var1.gameMode; + if(var3 >= 0 && var3 < Packet70GameEvent.clientMessage.length && Packet70GameEvent.clientMessage[var3] != null) { + var2.addChatMessage(Packet70GameEvent.clientMessage[var3]); + } + + if(var3 == 1) { + this.worldClient.getWorldInfo().setRaining(true); + this.worldClient.setRainStrength(0.0F); + } else if(var3 == 2) { + this.worldClient.getWorldInfo().setRaining(false); + this.worldClient.setRainStrength(1.0F); + } else if(var3 == 3) { + this.mc.playerController.setGameType(EnumGameType.getByID(var4)); + } else if(var3 == 4) { + this.mc.displayGuiScreen(new GuiWinGame()); + } else if(var3 == 5) { + GameSettings var5 = this.mc.gameSettings; + if(var4 == 0) { + this.mc.displayGuiScreen(new GuiScreenDemo()); + } else if(var4 == 101) { + this.mc.ingameGUI.getChatGUI().addTranslatedMessage("demo.help.movement", new Object[]{Keyboard.getKeyName(var5.keyBindForward.keyCode), Keyboard.getKeyName(var5.keyBindLeft.keyCode), Keyboard.getKeyName(var5.keyBindBack.keyCode), Keyboard.getKeyName(var5.keyBindRight.keyCode)}); + } else if(var4 == 102) { + this.mc.ingameGUI.getChatGUI().addTranslatedMessage("demo.help.jump", new Object[]{Keyboard.getKeyName(var5.keyBindJump.keyCode)}); + } else if(var4 == 103) { + this.mc.ingameGUI.getChatGUI().addTranslatedMessage("demo.help.inventory", new Object[]{Keyboard.getKeyName(var5.keyBindInventory.keyCode)}); + } + } else if(var3 == 6) { + this.worldClient.playSound(var2.posX, var2.posY + (double)var2.getEyeHeight(), var2.posZ, "random.successful_hit", 0.18F, 0.45F, false); + } + + } + + public void handleMapData(Packet131MapData var1) { + if(var1.itemID == Item.map.itemID) { + ItemMap.getMPMapData(var1.uniqueID, this.mc.theWorld).updateMPMapData(var1.itemData); + } else { + this.mc.getLogAgent().logWarning("Unknown itemid: " + var1.uniqueID); + } + + } + + public void handleDoorChange(Packet61DoorChange var1) { + if(var1.getRelativeVolumeDisabled()) { + this.mc.theWorld.func_82739_e(var1.sfxID, var1.posX, var1.posY, var1.posZ, var1.auxData); + } else { + this.mc.theWorld.playAuxSFX(var1.sfxID, var1.posX, var1.posY, var1.posZ, var1.auxData); + } + + } + + public void handleStatistic(Packet200Statistic var1) { + this.mc.thePlayer.incrementStat(StatList.getOneShotStat(var1.statisticId), var1.amount); + } + + public void handleEntityEffect(Packet41EntityEffect var1) { + Entity var2 = this.getEntityByID(var1.entityId); + if(var2 instanceof EntityLiving) { + PotionEffect var3 = new PotionEffect(var1.effectId, var1.duration, var1.effectAmplifier); + var3.setPotionDurationMax(var1.isDurationMax()); + ((EntityLiving)var2).addPotionEffect(var3); + } + } + + public void handleRemoveEntityEffect(Packet42RemoveEntityEffect var1) { + Entity var2 = this.getEntityByID(var1.entityId); + if(var2 instanceof EntityLiving) { + ((EntityLiving)var2).removePotionEffectClient(var1.effectId); + } + } + + public boolean isServerHandler() { + return false; + } + + public void handlePlayerInfo(Packet201PlayerInfo var1) { + GuiPlayerInfo var2 = (GuiPlayerInfo)this.playerInfoMap.get(var1.playerName); + if(var2 == null && var1.isConnected) { + var2 = new GuiPlayerInfo(var1.playerName); + this.playerInfoMap.put(var1.playerName, var2); + this.playerInfoList.add(var2); + } + + if(var2 != null && !var1.isConnected) { + this.playerInfoMap.remove(var1.playerName); + this.playerInfoList.remove(var2); + } + + if(var1.isConnected && var2 != null) { + var2.responseTime = var1.ping; + } + + } + + public void handleKeepAlive(Packet0KeepAlive var1) { + this.addToSendQueue(new Packet0KeepAlive(var1.randomId)); + } + + public void handlePlayerAbilities(Packet202PlayerAbilities var1) { + EntityClientPlayerMP var2 = this.mc.thePlayer; + var2.capabilities.isFlying = var1.getFlying(); + var2.capabilities.isCreativeMode = var1.isCreativeMode(); + var2.capabilities.disableDamage = var1.getDisableDamage(); + var2.capabilities.allowFlying = var1.getAllowFlying(); + var2.capabilities.setFlySpeed(var1.getFlySpeed()); + var2.capabilities.setPlayerWalkSpeed(var1.getWalkSpeed()); + } + + public void handleAutoComplete(Packet203AutoComplete var1) { + String[] var2 = var1.getText().split("\u0000"); + if(this.mc.currentScreen instanceof GuiChat) { + GuiChat var3 = (GuiChat)this.mc.currentScreen; + var3.func_73894_a(var2); + } + + } + + public void handleLevelSound(Packet62LevelSound var1) { + this.mc.theWorld.playSound(var1.getEffectX(), var1.getEffectY(), var1.getEffectZ(), var1.getSoundName(), var1.getVolume(), var1.getPitch(), false); + } + + public void handleCustomPayload(Packet250CustomPayload var1) { + if("MC|TPack".equals(var1.channel)) { + String[] var2 = (new String(var1.data)).split("\u0000"); + String var3 = var2[0]; + if(var2[1].equals("16")) { + if(this.mc.texturePackList.getAcceptsTextures()) { + this.mc.texturePackList.requestDownloadOfTexture(var3); + } else if(this.mc.texturePackList.func_77300_f()) { + this.mc.displayGuiScreen(new GuiYesNo(new NetClientWebTextures(this, var3), StringTranslate.getInstance().translateKey("multiplayer.texturePrompt.line1"), StringTranslate.getInstance().translateKey("multiplayer.texturePrompt.line2"), 0)); + } + } + } else if("MC|TrList".equals(var1.channel)) { + DataInputStream var8 = new DataInputStream(new ByteArrayInputStream(var1.data)); + + try { + int var9 = var8.readInt(); + GuiScreen var4 = this.mc.currentScreen; + if(var4 != null && var4 instanceof GuiMerchant && var9 == this.mc.thePlayer.openContainer.windowId) { + IMerchant var5 = ((GuiMerchant)var4).getIMerchant(); + MerchantRecipeList var6 = MerchantRecipeList.readRecipiesFromStream(var8); + var5.setRecipes(var6); + } + } catch (IOException var7) { + var7.printStackTrace(); + } + } + + } + + public void handleSetObjective(Packet206SetObjective var1) { + Scoreboard var2 = this.worldClient.getScoreboard(); + ScoreObjective var3; + if(var1.change == 0) { + var3 = var2.func_96535_a(var1.objectiveName, ScoreObjectiveCriteria.field_96641_b); + var3.setDisplayName(var1.objectiveDisplayName); + } else { + var3 = var2.getObjective(var1.objectiveName); + if(var1.change == 1) { + var2.func_96519_k(var3); + } else if(var1.change == 2) { + var3.setDisplayName(var1.objectiveDisplayName); + } + } + + } + + public void handleSetScore(Packet207SetScore var1) { + Scoreboard var2 = this.worldClient.getScoreboard(); + ScoreObjective var3 = var2.getObjective(var1.scoreName); + if(var1.updateOrRemove == 0) { + Score var4 = var2.func_96529_a(var1.itemName, var3); + var4.func_96647_c(var1.value); + } else if(var1.updateOrRemove == 1) { + var2.func_96515_c(var1.itemName); + } + + } + + public void handleSetDisplayObjective(Packet208SetDisplayObjective var1) { + Scoreboard var2 = this.worldClient.getScoreboard(); + if(var1.scoreName.length() == 0) { + var2.func_96530_a(var1.scoreboardPosition, (ScoreObjective)null); + } else { + ScoreObjective var3 = var2.getObjective(var1.scoreName); + var2.func_96530_a(var1.scoreboardPosition, var3); + } + + } + + public void handleSetPlayerTeam(Packet209SetPlayerTeam var1) { + Scoreboard var2 = this.worldClient.getScoreboard(); + ScorePlayerTeam var3; + if(var1.mode == 0) { + var3 = var2.func_96527_f(var1.teamName); + } else { + var3 = var2.func_96508_e(var1.teamName); + } + + if(var1.mode == 0 || var1.mode == 2) { + var3.func_96664_a(var1.teamDisplayName); + var3.func_96666_b(var1.teamPrefix); + var3.func_96662_c(var1.teamSuffix); + var3.func_98298_a(var1.friendlyFire); + } + + Iterator var4; + String var5; + if(var1.mode == 0 || var1.mode == 3) { + var4 = var1.playerNames.iterator(); + + while(var4.hasNext()) { + var5 = (String)var4.next(); + var2.func_96521_a(var5, var3); + } + } + + if(var1.mode == 4) { + var4 = var1.playerNames.iterator(); + + while(var4.hasNext()) { + var5 = (String)var4.next(); + var2.removePlayerFromTeam(var5, var3); + } + } + + if(var1.mode == 1) { + var2.func_96511_d(var3); + } + + } + + public void handleWorldParticles(Packet63WorldParticles var1) { + for(int var2 = 0; var2 < var1.getQuantity(); ++var2) { + double var3 = this.rand.nextGaussian() * (double)var1.getOffsetX(); + double var5 = this.rand.nextGaussian() * (double)var1.getOffsetY(); + double var7 = this.rand.nextGaussian() * (double)var1.getOffsetZ(); + double var9 = this.rand.nextGaussian() * (double)var1.getSpeed(); + double var11 = this.rand.nextGaussian() * (double)var1.getSpeed(); + double var13 = this.rand.nextGaussian() * (double)var1.getSpeed(); + this.worldClient.spawnParticle(var1.getParticleName(), var1.getPositionX() + var3, var1.getPositionY() + var5, var1.getPositionZ() + var7, var9, var11, var13); + } + + } + + public INetworkManager getNetManager() { + return this.netManager; + } +} diff --git a/src/net/minecraft/src/NetClientWebTextures.java b/src/net/minecraft/src/NetClientWebTextures.java new file mode 100644 index 0000000..c990f16 --- /dev/null +++ b/src/net/minecraft/src/NetClientWebTextures.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +class NetClientWebTextures extends GuiScreen { + final String texturePackName; + final NetClientHandler netClientHandlerWebTextures; + + NetClientWebTextures(NetClientHandler var1, String var2) { + this.netClientHandlerWebTextures = var1; + this.texturePackName = var2; + } + + public void confirmClicked(boolean var1, int var2) { + this.mc = Minecraft.getMinecraft(); + if(this.mc.getServerData() != null) { + this.mc.getServerData().setAcceptsTextures(var1); + ServerList.func_78852_b(this.mc.getServerData()); + } + + if(var1) { + this.mc.texturePackList.requestDownloadOfTexture(this.texturePackName); + } + + this.mc.displayGuiScreen((GuiScreen)null); + } +} diff --git a/src/net/minecraft/src/NetHandler.java b/src/net/minecraft/src/NetHandler.java new file mode 100644 index 0000000..1c111b3 --- /dev/null +++ b/src/net/minecraft/src/NetHandler.java @@ -0,0 +1,303 @@ +package net.minecraft.src; + +public abstract class NetHandler { + public abstract boolean isServerHandler(); + + public void handleMapChunk(Packet51MapChunk var1) { + } + + public void unexpectedPacket(Packet var1) { + } + + public void handleErrorMessage(String var1, Object[] var2) { + } + + public void handleKickDisconnect(Packet255KickDisconnect var1) { + this.unexpectedPacket(var1); + } + + public void handleLogin(Packet1Login var1) { + this.unexpectedPacket(var1); + } + + public void handleFlying(Packet10Flying var1) { + this.unexpectedPacket(var1); + } + + public void handleMultiBlockChange(Packet52MultiBlockChange var1) { + this.unexpectedPacket(var1); + } + + public void handleBlockDig(Packet14BlockDig var1) { + this.unexpectedPacket(var1); + } + + public void handleBlockChange(Packet53BlockChange var1) { + this.unexpectedPacket(var1); + } + + public void handleNamedEntitySpawn(Packet20NamedEntitySpawn var1) { + this.unexpectedPacket(var1); + } + + public void handleEntity(Packet30Entity var1) { + this.unexpectedPacket(var1); + } + + public void handleEntityTeleport(Packet34EntityTeleport var1) { + this.unexpectedPacket(var1); + } + + public void handlePlace(Packet15Place var1) { + this.unexpectedPacket(var1); + } + + public void handleBlockItemSwitch(Packet16BlockItemSwitch var1) { + this.unexpectedPacket(var1); + } + + public void handleDestroyEntity(Packet29DestroyEntity var1) { + this.unexpectedPacket(var1); + } + + public void handleCollect(Packet22Collect var1) { + this.unexpectedPacket(var1); + } + + public void handleChat(Packet3Chat var1) { + this.unexpectedPacket(var1); + } + + public void handleVehicleSpawn(Packet23VehicleSpawn var1) { + this.unexpectedPacket(var1); + } + + public void handleAnimation(Packet18Animation var1) { + this.unexpectedPacket(var1); + } + + public void handleEntityAction(Packet19EntityAction var1) { + this.unexpectedPacket(var1); + } + + public void handleClientProtocol(Packet2ClientProtocol var1) { + this.unexpectedPacket(var1); + } + + public void handleServerAuthData(Packet253ServerAuthData var1) { + this.unexpectedPacket(var1); + } + + public void handleSharedKey(Packet252SharedKey var1) { + this.unexpectedPacket(var1); + } + + public void handleMobSpawn(Packet24MobSpawn var1) { + this.unexpectedPacket(var1); + } + + public void handleUpdateTime(Packet4UpdateTime var1) { + this.unexpectedPacket(var1); + } + + public void handleSpawnPosition(Packet6SpawnPosition var1) { + this.unexpectedPacket(var1); + } + + public void handleEntityVelocity(Packet28EntityVelocity var1) { + this.unexpectedPacket(var1); + } + + public void handleEntityMetadata(Packet40EntityMetadata var1) { + this.unexpectedPacket(var1); + } + + public void handleAttachEntity(Packet39AttachEntity var1) { + this.unexpectedPacket(var1); + } + + public void handleUseEntity(Packet7UseEntity var1) { + this.unexpectedPacket(var1); + } + + public void handleEntityStatus(Packet38EntityStatus var1) { + this.unexpectedPacket(var1); + } + + public void handleUpdateHealth(Packet8UpdateHealth var1) { + this.unexpectedPacket(var1); + } + + public void handleRespawn(Packet9Respawn var1) { + this.unexpectedPacket(var1); + } + + public void handleExplosion(Packet60Explosion var1) { + this.unexpectedPacket(var1); + } + + public void handleOpenWindow(Packet100OpenWindow var1) { + this.unexpectedPacket(var1); + } + + public void handleCloseWindow(Packet101CloseWindow var1) { + this.unexpectedPacket(var1); + } + + public void handleWindowClick(Packet102WindowClick var1) { + this.unexpectedPacket(var1); + } + + public void handleSetSlot(Packet103SetSlot var1) { + this.unexpectedPacket(var1); + } + + public void handleWindowItems(Packet104WindowItems var1) { + this.unexpectedPacket(var1); + } + + public void handleUpdateSign(Packet130UpdateSign var1) { + this.unexpectedPacket(var1); + } + + public void handleUpdateProgressbar(Packet105UpdateProgressbar var1) { + this.unexpectedPacket(var1); + } + + public void handlePlayerInventory(Packet5PlayerInventory var1) { + this.unexpectedPacket(var1); + } + + public void handleTransaction(Packet106Transaction var1) { + this.unexpectedPacket(var1); + } + + public void handleEntityPainting(Packet25EntityPainting var1) { + this.unexpectedPacket(var1); + } + + public void handleBlockEvent(Packet54PlayNoteBlock var1) { + this.unexpectedPacket(var1); + } + + public void handleStatistic(Packet200Statistic var1) { + this.unexpectedPacket(var1); + } + + public void handleSleep(Packet17Sleep var1) { + this.unexpectedPacket(var1); + } + + public void handleGameEvent(Packet70GameEvent var1) { + this.unexpectedPacket(var1); + } + + public void handleWeather(Packet71Weather var1) { + this.unexpectedPacket(var1); + } + + public void handleMapData(Packet131MapData var1) { + this.unexpectedPacket(var1); + } + + public void handleDoorChange(Packet61DoorChange var1) { + this.unexpectedPacket(var1); + } + + public void handleServerPing(Packet254ServerPing var1) { + this.unexpectedPacket(var1); + } + + public void handleEntityEffect(Packet41EntityEffect var1) { + this.unexpectedPacket(var1); + } + + public void handleRemoveEntityEffect(Packet42RemoveEntityEffect var1) { + this.unexpectedPacket(var1); + } + + public void handlePlayerInfo(Packet201PlayerInfo var1) { + this.unexpectedPacket(var1); + } + + public void handleKeepAlive(Packet0KeepAlive var1) { + this.unexpectedPacket(var1); + } + + public void handleExperience(Packet43Experience var1) { + this.unexpectedPacket(var1); + } + + public void handleCreativeSetSlot(Packet107CreativeSetSlot var1) { + this.unexpectedPacket(var1); + } + + public void handleEntityExpOrb(Packet26EntityExpOrb var1) { + this.unexpectedPacket(var1); + } + + public void handleEnchantItem(Packet108EnchantItem var1) { + } + + public void handleCustomPayload(Packet250CustomPayload var1) { + } + + public void handleEntityHeadRotation(Packet35EntityHeadRotation var1) { + this.unexpectedPacket(var1); + } + + public void handleTileEntityData(Packet132TileEntityData var1) { + this.unexpectedPacket(var1); + } + + public void handlePlayerAbilities(Packet202PlayerAbilities var1) { + this.unexpectedPacket(var1); + } + + public void handleAutoComplete(Packet203AutoComplete var1) { + this.unexpectedPacket(var1); + } + + public void handleClientInfo(Packet204ClientInfo var1) { + this.unexpectedPacket(var1); + } + + public void handleLevelSound(Packet62LevelSound var1) { + this.unexpectedPacket(var1); + } + + public void handleBlockDestroy(Packet55BlockDestroy var1) { + this.unexpectedPacket(var1); + } + + public void handleClientCommand(Packet205ClientCommand var1) { + } + + public void handleMapChunks(Packet56MapChunks var1) { + this.unexpectedPacket(var1); + } + + public boolean canProcessPacketsAsync() { + return false; + } + + public void handleSetObjective(Packet206SetObjective var1) { + this.unexpectedPacket(var1); + } + + public void handleSetScore(Packet207SetScore var1) { + this.unexpectedPacket(var1); + } + + public void handleSetDisplayObjective(Packet208SetDisplayObjective var1) { + this.unexpectedPacket(var1); + } + + public void handleSetPlayerTeam(Packet209SetPlayerTeam var1) { + this.unexpectedPacket(var1); + } + + public void handleWorldParticles(Packet63WorldParticles var1) { + this.unexpectedPacket(var1); + } +} diff --git a/src/net/minecraft/src/NetLoginHandler.java b/src/net/minecraft/src/NetLoginHandler.java new file mode 100644 index 0000000..00873bb --- /dev/null +++ b/src/net/minecraft/src/NetLoginHandler.java @@ -0,0 +1,200 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.io.Serializable; +import java.net.InetAddress; +import java.net.Socket; +import java.security.PrivateKey; +import java.security.PublicKey; +import java.util.Arrays; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import javax.crypto.SecretKey; +import net.minecraft.server.MinecraftServer; + +public class NetLoginHandler extends NetHandler { + private static Random rand = new Random(); + private byte[] verifyToken; + private final MinecraftServer mcServer; + public final TcpConnection myTCPConnection; + public boolean connectionComplete = false; + private int connectionTimer = 0; + private String clientUsername = null; + private volatile boolean field_72544_i = false; + private String loginServerId = ""; + private boolean field_92079_k = false; + private SecretKey sharedKey = null; + + public NetLoginHandler(MinecraftServer var1, Socket var2, String var3) throws IOException { + this.mcServer = var1; + this.myTCPConnection = new TcpConnection(var1.getLogAgent(), var2, var3, this, var1.getKeyPair().getPrivate()); + this.myTCPConnection.field_74468_e = 0; + } + + public void tryLogin() { + if(this.field_72544_i) { + this.initializePlayerConnection(); + } + + if(this.connectionTimer++ == 600) { + this.raiseErrorAndDisconnect("Took too long to log in"); + } else { + this.myTCPConnection.processReadPackets(); + } + + } + + public void raiseErrorAndDisconnect(String var1) { + try { + this.mcServer.getLogAgent().logInfo("Disconnecting " + this.getUsernameAndAddress() + ": " + var1); + this.myTCPConnection.addToSendQueue(new Packet255KickDisconnect(var1)); + this.myTCPConnection.serverShutdown(); + this.connectionComplete = true; + } catch (Exception var3) { + var3.printStackTrace(); + } + + } + + public void handleClientProtocol(Packet2ClientProtocol var1) { + this.clientUsername = var1.getUsername(); + if(!this.clientUsername.equals(StringUtils.stripControlCodes(this.clientUsername))) { + this.raiseErrorAndDisconnect("Invalid username!"); + } else { + PublicKey var2 = this.mcServer.getKeyPair().getPublic(); + if(var1.getProtocolVersion() != 61) { + if(var1.getProtocolVersion() > 61) { + this.raiseErrorAndDisconnect("Outdated server!"); + } else { + this.raiseErrorAndDisconnect("Outdated client!"); + } + + } else { + this.loginServerId = this.mcServer.isServerInOnlineMode() ? Long.toString(rand.nextLong(), 16) : "-"; + this.verifyToken = new byte[4]; + rand.nextBytes(this.verifyToken); + this.myTCPConnection.addToSendQueue(new Packet253ServerAuthData(this.loginServerId, var2, this.verifyToken)); + } + } + } + + public void handleSharedKey(Packet252SharedKey var1) { + PrivateKey var2 = this.mcServer.getKeyPair().getPrivate(); + this.sharedKey = var1.getSharedKey(var2); + if(!Arrays.equals(this.verifyToken, var1.getVerifyToken(var2))) { + this.raiseErrorAndDisconnect("Invalid client reply"); + } + + this.myTCPConnection.addToSendQueue(new Packet252SharedKey()); + } + + public void handleClientCommand(Packet205ClientCommand var1) { + if(var1.forceRespawn == 0) { + if(this.field_92079_k) { + this.raiseErrorAndDisconnect("Duplicate login"); + return; + } + + this.field_92079_k = true; + if(this.mcServer.isServerInOnlineMode()) { + (new ThreadLoginVerifier(this)).start(); + } else { + this.field_72544_i = true; + } + } + + } + + public void handleLogin(Packet1Login var1) { + } + + public void initializePlayerConnection() { + String var1 = this.mcServer.getConfigurationManager().allowUserToConnect(this.myTCPConnection.getSocketAddress(), this.clientUsername); + if(var1 != null) { + this.raiseErrorAndDisconnect(var1); + } else { + EntityPlayerMP var2 = this.mcServer.getConfigurationManager().createPlayerForUser(this.clientUsername); + if(var2 != null) { + this.mcServer.getConfigurationManager().initializeConnectionToPlayer(this.myTCPConnection, var2); + } + } + + this.connectionComplete = true; + } + + public void handleErrorMessage(String var1, Object[] var2) { + this.mcServer.getLogAgent().logInfo(this.getUsernameAndAddress() + " lost connection"); + this.connectionComplete = true; + } + + public void handleServerPing(Packet254ServerPing var1) { + try { + ServerConfigurationManager var2 = this.mcServer.getConfigurationManager(); + String var3 = null; + if(var1.readSuccessfully == 1) { + List var4 = Arrays.asList(new Serializable[]{Integer.valueOf(1), Integer.valueOf(61), this.mcServer.getMinecraftVersion(), this.mcServer.getMOTD(), Integer.valueOf(var2.getCurrentPlayerCount()), Integer.valueOf(var2.getMaxPlayers())}); + + Object var6; + for(Iterator var5 = var4.iterator(); var5.hasNext(); var3 = var3 + var6.toString().replaceAll("\u0000", "")) { + var6 = var5.next(); + if(var3 == null) { + var3 = "\u00a7"; + } else { + var3 = var3 + "\u0000"; + } + } + } else { + var3 = this.mcServer.getMOTD() + "\u00a7" + var2.getCurrentPlayerCount() + "\u00a7" + var2.getMaxPlayers(); + } + + InetAddress var8 = null; + if(this.myTCPConnection.getSocket() != null) { + var8 = this.myTCPConnection.getSocket().getInetAddress(); + } + + this.myTCPConnection.addToSendQueue(new Packet255KickDisconnect(var3)); + this.myTCPConnection.serverShutdown(); + if(var8 != null && this.mcServer.getNetworkThread() instanceof DedicatedServerListenThread) { + ((DedicatedServerListenThread)this.mcServer.getNetworkThread()).func_71761_a(var8); + } + + this.connectionComplete = true; + } catch (Exception var7) { + var7.printStackTrace(); + } + + } + + public void unexpectedPacket(Packet var1) { + this.raiseErrorAndDisconnect("Protocol error"); + } + + public String getUsernameAndAddress() { + return this.clientUsername != null ? this.clientUsername + " [" + this.myTCPConnection.getSocketAddress().toString() + "]" : this.myTCPConnection.getSocketAddress().toString(); + } + + public boolean isServerHandler() { + return true; + } + + static String getServerId(NetLoginHandler var0) { + return var0.loginServerId; + } + + static MinecraftServer getLoginMinecraftServer(NetLoginHandler var0) { + return var0.mcServer; + } + + static SecretKey getSharedKey(NetLoginHandler var0) { + return var0.sharedKey; + } + + static String getClientUsername(NetLoginHandler var0) { + return var0.clientUsername; + } + + static boolean func_72531_a(NetLoginHandler var0, boolean var1) { + return var0.field_72544_i = var1; + } +} diff --git a/src/net/minecraft/src/NetServerHandler.java b/src/net/minecraft/src/NetServerHandler.java new file mode 100644 index 0000000..67745c4 --- /dev/null +++ b/src/net/minecraft/src/NetServerHandler.java @@ -0,0 +1,829 @@ +package net.minecraft.src; + +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Random; +import net.minecraft.server.MinecraftServer; + +public class NetServerHandler extends NetHandler { + public final INetworkManager netManager; + private final MinecraftServer mcServer; + public boolean connectionClosed = false; + public EntityPlayerMP playerEntity; + private int currentTicks; + private int ticksForFloatKick; + private boolean field_72584_h; + private int keepAliveRandomID; + private long keepAliveTimeSent; + private static Random randomGenerator = new Random(); + private long ticksOfLastKeepAlive; + private int chatSpamThresholdCount = 0; + private int creativeItemCreationSpamThresholdTally = 0; + private double lastPosX; + private double lastPosY; + private double lastPosZ; + private boolean hasMoved = true; + private IntHashMap field_72586_s = new IntHashMap(); + + public NetServerHandler(MinecraftServer var1, INetworkManager var2, EntityPlayerMP var3) { + this.mcServer = var1; + this.netManager = var2; + var2.setNetHandler(this); + this.playerEntity = var3; + var3.playerNetServerHandler = this; + } + + public void networkTick() { + this.field_72584_h = false; + ++this.currentTicks; + this.mcServer.theProfiler.startSection("packetflow"); + this.netManager.processReadPackets(); + this.mcServer.theProfiler.endStartSection("keepAlive"); + if((long)this.currentTicks - this.ticksOfLastKeepAlive > 20L) { + this.ticksOfLastKeepAlive = (long)this.currentTicks; + this.keepAliveTimeSent = System.nanoTime() / 1000000L; + this.keepAliveRandomID = randomGenerator.nextInt(); + this.sendPacketToPlayer(new Packet0KeepAlive(this.keepAliveRandomID)); + } + + if(this.chatSpamThresholdCount > 0) { + --this.chatSpamThresholdCount; + } + + if(this.creativeItemCreationSpamThresholdTally > 0) { + --this.creativeItemCreationSpamThresholdTally; + } + + this.mcServer.theProfiler.endStartSection("playerTick"); + this.mcServer.theProfiler.endSection(); + } + + public void kickPlayerFromServer(String var1) { + if(!this.connectionClosed) { + this.playerEntity.mountEntityAndWakeUp(); + this.sendPacketToPlayer(new Packet255KickDisconnect(var1)); + this.netManager.serverShutdown(); + this.mcServer.getConfigurationManager().sendPacketToAllPlayers(new Packet3Chat(EnumChatFormatting.YELLOW + this.playerEntity.username + " left the game.")); + this.mcServer.getConfigurationManager().playerLoggedOut(this.playerEntity); + this.connectionClosed = true; + } + } + + public void handleFlying(Packet10Flying var1) { + WorldServer var2 = this.mcServer.worldServerForDimension(this.playerEntity.dimension); + this.field_72584_h = true; + if(!this.playerEntity.playerConqueredTheEnd) { + double var3; + if(!this.hasMoved) { + var3 = var1.yPosition - this.lastPosY; + if(var1.xPosition == this.lastPosX && var3 * var3 < 0.01D && var1.zPosition == this.lastPosZ) { + this.hasMoved = true; + } + } + + if(this.hasMoved) { + double var5; + double var7; + double var9; + double var13; + if(this.playerEntity.ridingEntity != null) { + float var34 = this.playerEntity.rotationYaw; + float var4 = this.playerEntity.rotationPitch; + this.playerEntity.ridingEntity.updateRiderPosition(); + var5 = this.playerEntity.posX; + var7 = this.playerEntity.posY; + var9 = this.playerEntity.posZ; + double var35 = 0.0D; + var13 = 0.0D; + if(var1.rotating) { + var34 = var1.yaw; + var4 = var1.pitch; + } + + if(var1.moving && var1.yPosition == -999.0D && var1.stance == -999.0D) { + if(Math.abs(var1.xPosition) > 1.0D || Math.abs(var1.zPosition) > 1.0D) { + System.err.println(this.playerEntity.username + " was caught trying to crash the server with an invalid position."); + this.kickPlayerFromServer("Nope!"); + return; + } + + var35 = var1.xPosition; + var13 = var1.zPosition; + } + + this.playerEntity.onGround = var1.onGround; + this.playerEntity.onUpdateEntity(); + this.playerEntity.moveEntity(var35, 0.0D, var13); + this.playerEntity.setPositionAndRotation(var5, var7, var9, var34, var4); + this.playerEntity.motionX = var35; + this.playerEntity.motionZ = var13; + if(this.playerEntity.ridingEntity != null) { + var2.uncheckedUpdateEntity(this.playerEntity.ridingEntity, true); + } + + if(this.playerEntity.ridingEntity != null) { + this.playerEntity.ridingEntity.updateRiderPosition(); + } + + this.mcServer.getConfigurationManager().serverUpdateMountedMovingPlayer(this.playerEntity); + this.lastPosX = this.playerEntity.posX; + this.lastPosY = this.playerEntity.posY; + this.lastPosZ = this.playerEntity.posZ; + var2.updateEntity(this.playerEntity); + return; + } + + if(this.playerEntity.isPlayerSleeping()) { + this.playerEntity.onUpdateEntity(); + this.playerEntity.setPositionAndRotation(this.lastPosX, this.lastPosY, this.lastPosZ, this.playerEntity.rotationYaw, this.playerEntity.rotationPitch); + var2.updateEntity(this.playerEntity); + return; + } + + var3 = this.playerEntity.posY; + this.lastPosX = this.playerEntity.posX; + this.lastPosY = this.playerEntity.posY; + this.lastPosZ = this.playerEntity.posZ; + var5 = this.playerEntity.posX; + var7 = this.playerEntity.posY; + var9 = this.playerEntity.posZ; + float var11 = this.playerEntity.rotationYaw; + float var12 = this.playerEntity.rotationPitch; + if(var1.moving && var1.yPosition == -999.0D && var1.stance == -999.0D) { + var1.moving = false; + } + + if(var1.moving) { + var5 = var1.xPosition; + var7 = var1.yPosition; + var9 = var1.zPosition; + var13 = var1.stance - var1.yPosition; + if(!this.playerEntity.isPlayerSleeping() && (var13 > 1.65D || var13 < 0.1D)) { + this.kickPlayerFromServer("Illegal stance"); + this.mcServer.getLogAgent().logWarning(this.playerEntity.username + " had an illegal stance: " + var13); + return; + } + + if(Math.abs(var1.xPosition) > 3.2E7D || Math.abs(var1.zPosition) > 3.2E7D) { + this.kickPlayerFromServer("Illegal position"); + return; + } + } + + if(var1.rotating) { + var11 = var1.yaw; + var12 = var1.pitch; + } + + this.playerEntity.onUpdateEntity(); + this.playerEntity.ySize = 0.0F; + this.playerEntity.setPositionAndRotation(this.lastPosX, this.lastPosY, this.lastPosZ, var11, var12); + if(!this.hasMoved) { + return; + } + + var13 = var5 - this.playerEntity.posX; + double var15 = var7 - this.playerEntity.posY; + double var17 = var9 - this.playerEntity.posZ; + double var19 = Math.min(Math.abs(var13), Math.abs(this.playerEntity.motionX)); + double var21 = Math.min(Math.abs(var15), Math.abs(this.playerEntity.motionY)); + double var23 = Math.min(Math.abs(var17), Math.abs(this.playerEntity.motionZ)); + double var25 = var19 * var19 + var21 * var21 + var23 * var23; + if(var25 > 100.0D && (!this.mcServer.isSinglePlayer() || !this.mcServer.getServerOwner().equals(this.playerEntity.username))) { + this.mcServer.getLogAgent().logWarning(this.playerEntity.username + " moved too quickly! " + var13 + "," + var15 + "," + var17 + " (" + var19 + ", " + var21 + ", " + var23 + ")"); + this.setPlayerLocation(this.lastPosX, this.lastPosY, this.lastPosZ, this.playerEntity.rotationYaw, this.playerEntity.rotationPitch); + return; + } + + float var27 = 1.0F / 16.0F; + boolean var28 = var2.getCollidingBoundingBoxes(this.playerEntity, this.playerEntity.boundingBox.copy().contract((double)var27, (double)var27, (double)var27)).isEmpty(); + if(this.playerEntity.onGround && !var1.onGround && var15 > 0.0D) { + this.playerEntity.addExhaustion(0.2F); + } + + this.playerEntity.moveEntity(var13, var15, var17); + this.playerEntity.onGround = var1.onGround; + this.playerEntity.addMovementStat(var13, var15, var17); + double var29 = var15; + var13 = var5 - this.playerEntity.posX; + var15 = var7 - this.playerEntity.posY; + if(var15 > -0.5D || var15 < 0.5D) { + var15 = 0.0D; + } + + var17 = var9 - this.playerEntity.posZ; + var25 = var13 * var13 + var15 * var15 + var17 * var17; + boolean var31 = false; + if(var25 > 1.0D / 16.0D && !this.playerEntity.isPlayerSleeping() && !this.playerEntity.theItemInWorldManager.isCreative()) { + var31 = true; + this.mcServer.getLogAgent().logWarning(this.playerEntity.username + " moved wrongly!"); + } + + this.playerEntity.setPositionAndRotation(var5, var7, var9, var11, var12); + boolean var32 = var2.getCollidingBoundingBoxes(this.playerEntity, this.playerEntity.boundingBox.copy().contract((double)var27, (double)var27, (double)var27)).isEmpty(); + if(var28 && (var31 || !var32) && !this.playerEntity.isPlayerSleeping()) { + this.setPlayerLocation(this.lastPosX, this.lastPosY, this.lastPosZ, var11, var12); + return; + } + + AxisAlignedBB var33 = this.playerEntity.boundingBox.copy().expand((double)var27, (double)var27, (double)var27).addCoord(0.0D, -0.55D, 0.0D); + if(!this.mcServer.isFlightAllowed() && !this.playerEntity.theItemInWorldManager.isCreative() && !var2.checkBlockCollision(var33)) { + if(var29 >= -0.03125D) { + ++this.ticksForFloatKick; + if(this.ticksForFloatKick > 80) { + this.mcServer.getLogAgent().logWarning(this.playerEntity.username + " was kicked for floating too long!"); + this.kickPlayerFromServer("Flying is not enabled on this server"); + return; + } + } + } else { + this.ticksForFloatKick = 0; + } + + this.playerEntity.onGround = var1.onGround; + this.mcServer.getConfigurationManager().serverUpdateMountedMovingPlayer(this.playerEntity); + this.playerEntity.updateFlyingState(this.playerEntity.posY - var3, var1.onGround); + } + + } + } + + public void setPlayerLocation(double var1, double var3, double var5, float var7, float var8) { + this.hasMoved = false; + this.lastPosX = var1; + this.lastPosY = var3; + this.lastPosZ = var5; + this.playerEntity.setPositionAndRotation(var1, var3, var5, var7, var8); + this.playerEntity.playerNetServerHandler.sendPacketToPlayer(new Packet13PlayerLookMove(var1, var3 + (double)1.62F, var3, var5, var7, var8, false)); + } + + public void handleBlockDig(Packet14BlockDig var1) { + WorldServer var2 = this.mcServer.worldServerForDimension(this.playerEntity.dimension); + if(var1.status == 4) { + this.playerEntity.dropOneItem(false); + } else if(var1.status == 3) { + this.playerEntity.dropOneItem(true); + } else if(var1.status == 5) { + this.playerEntity.stopUsingItem(); + } else { + boolean var3 = false; + if(var1.status == 0) { + var3 = true; + } + + if(var1.status == 1) { + var3 = true; + } + + if(var1.status == 2) { + var3 = true; + } + + int var4 = var1.xPosition; + int var5 = var1.yPosition; + int var6 = var1.zPosition; + if(var3) { + double var7 = this.playerEntity.posX - ((double)var4 + 0.5D); + double var9 = this.playerEntity.posY - ((double)var5 + 0.5D) + 1.5D; + double var11 = this.playerEntity.posZ - ((double)var6 + 0.5D); + double var13 = var7 * var7 + var9 * var9 + var11 * var11; + if(var13 > 36.0D) { + return; + } + + if(var5 >= this.mcServer.getBuildLimit()) { + return; + } + } + + if(var1.status == 0) { + if(!this.mcServer.func_96290_a(var2, var4, var5, var6, this.playerEntity)) { + this.playerEntity.theItemInWorldManager.onBlockClicked(var4, var5, var6, var1.face); + } else { + this.playerEntity.playerNetServerHandler.sendPacketToPlayer(new Packet53BlockChange(var4, var5, var6, var2)); + } + } else if(var1.status == 2) { + this.playerEntity.theItemInWorldManager.uncheckedTryHarvestBlock(var4, var5, var6); + if(var2.getBlockId(var4, var5, var6) != 0) { + this.playerEntity.playerNetServerHandler.sendPacketToPlayer(new Packet53BlockChange(var4, var5, var6, var2)); + } + } else if(var1.status == 1) { + this.playerEntity.theItemInWorldManager.cancelDestroyingBlock(var4, var5, var6); + if(var2.getBlockId(var4, var5, var6) != 0) { + this.playerEntity.playerNetServerHandler.sendPacketToPlayer(new Packet53BlockChange(var4, var5, var6, var2)); + } + } + + } + } + + public void handlePlace(Packet15Place var1) { + WorldServer var2 = this.mcServer.worldServerForDimension(this.playerEntity.dimension); + ItemStack var3 = this.playerEntity.inventory.getCurrentItem(); + boolean var4 = false; + int var5 = var1.getXPosition(); + int var6 = var1.getYPosition(); + int var7 = var1.getZPosition(); + int var8 = var1.getDirection(); + if(var1.getDirection() == 255) { + if(var3 == null) { + return; + } + + this.playerEntity.theItemInWorldManager.tryUseItem(this.playerEntity, var2, var3); + } else if(var1.getYPosition() < this.mcServer.getBuildLimit() - 1 || var1.getDirection() != 1 && var1.getYPosition() < this.mcServer.getBuildLimit()) { + if(this.hasMoved && this.playerEntity.getDistanceSq((double)var5 + 0.5D, (double)var6 + 0.5D, (double)var7 + 0.5D) < 64.0D && !this.mcServer.func_96290_a(var2, var5, var6, var7, this.playerEntity)) { + this.playerEntity.theItemInWorldManager.activateBlockOrUseItem(this.playerEntity, var2, var3, var5, var6, var7, var8, var1.getXOffset(), var1.getYOffset(), var1.getZOffset()); + } + + var4 = true; + } else { + this.playerEntity.playerNetServerHandler.sendPacketToPlayer(new Packet3Chat("" + EnumChatFormatting.GRAY + "Height limit for building is " + this.mcServer.getBuildLimit())); + var4 = true; + } + + if(var4) { + this.playerEntity.playerNetServerHandler.sendPacketToPlayer(new Packet53BlockChange(var5, var6, var7, var2)); + if(var8 == 0) { + --var6; + } + + if(var8 == 1) { + ++var6; + } + + if(var8 == 2) { + --var7; + } + + if(var8 == 3) { + ++var7; + } + + if(var8 == 4) { + --var5; + } + + if(var8 == 5) { + ++var5; + } + + this.playerEntity.playerNetServerHandler.sendPacketToPlayer(new Packet53BlockChange(var5, var6, var7, var2)); + } + + var3 = this.playerEntity.inventory.getCurrentItem(); + if(var3 != null && var3.stackSize == 0) { + this.playerEntity.inventory.mainInventory[this.playerEntity.inventory.currentItem] = null; + var3 = null; + } + + if(var3 == null || var3.getMaxItemUseDuration() == 0) { + this.playerEntity.playerInventoryBeingManipulated = true; + this.playerEntity.inventory.mainInventory[this.playerEntity.inventory.currentItem] = ItemStack.copyItemStack(this.playerEntity.inventory.mainInventory[this.playerEntity.inventory.currentItem]); + Slot var9 = this.playerEntity.openContainer.getSlotFromInventory(this.playerEntity.inventory, this.playerEntity.inventory.currentItem); + this.playerEntity.openContainer.detectAndSendChanges(); + this.playerEntity.playerInventoryBeingManipulated = false; + if(!ItemStack.areItemStacksEqual(this.playerEntity.inventory.getCurrentItem(), var1.getItemStack())) { + this.sendPacketToPlayer(new Packet103SetSlot(this.playerEntity.openContainer.windowId, var9.slotNumber, this.playerEntity.inventory.getCurrentItem())); + } + } + + } + + public void handleErrorMessage(String var1, Object[] var2) { + this.mcServer.getLogAgent().logInfo(this.playerEntity.username + " lost connection: " + var1); + this.mcServer.getConfigurationManager().sendPacketToAllPlayers(new Packet3Chat(EnumChatFormatting.YELLOW + this.playerEntity.getTranslatedEntityName() + " left the game.")); + this.mcServer.getConfigurationManager().playerLoggedOut(this.playerEntity); + this.connectionClosed = true; + if(this.mcServer.isSinglePlayer() && this.playerEntity.username.equals(this.mcServer.getServerOwner())) { + this.mcServer.getLogAgent().logInfo("Stopping singleplayer server as player logged out"); + this.mcServer.initiateShutdown(); + } + + } + + public void unexpectedPacket(Packet var1) { + this.mcServer.getLogAgent().logWarning(this.getClass() + " wasn\'t prepared to deal with a " + var1.getClass()); + this.kickPlayerFromServer("Protocol error, unexpected packet"); + } + + public void sendPacketToPlayer(Packet var1) { + if(var1 instanceof Packet3Chat) { + Packet3Chat var2 = (Packet3Chat)var1; + int var3 = this.playerEntity.getChatVisibility(); + if(var3 == 2) { + return; + } + + if(var3 == 1 && !var2.getIsServer()) { + return; + } + } + + try { + this.netManager.addToSendQueue(var1); + } catch (Throwable var5) { + CrashReport var6 = CrashReport.makeCrashReport(var5, "Sending packet"); + CrashReportCategory var4 = var6.makeCategory("Packet being sent"); + var4.addCrashSectionCallable("Packet ID", new CallablePacketID(this, var1)); + var4.addCrashSectionCallable("Packet class", new CallablePacketClass(this, var1)); + throw new ReportedException(var6); + } + } + + public void handleBlockItemSwitch(Packet16BlockItemSwitch var1) { + if(var1.id >= 0 && var1.id < InventoryPlayer.getHotbarSize()) { + this.playerEntity.inventory.currentItem = var1.id; + } else { + this.mcServer.getLogAgent().logWarning(this.playerEntity.username + " tried to set an invalid carried item"); + } + } + + public void handleChat(Packet3Chat var1) { + if(this.playerEntity.getChatVisibility() == 2) { + this.sendPacketToPlayer(new Packet3Chat("Cannot send chat message.")); + } else { + String var2 = var1.message; + if(var2.length() > 100) { + this.kickPlayerFromServer("Chat message too long"); + } else { + var2 = var2.trim(); + + for(int var3 = 0; var3 < var2.length(); ++var3) { + if(!ChatAllowedCharacters.isAllowedCharacter(var2.charAt(var3))) { + this.kickPlayerFromServer("Illegal characters in chat"); + return; + } + } + + if(var2.startsWith("/")) { + this.handleSlashCommand(var2); + } else { + if(this.playerEntity.getChatVisibility() == 1) { + this.sendPacketToPlayer(new Packet3Chat("Cannot send chat message.")); + return; + } + + var2 = "<" + this.playerEntity.getTranslatedEntityName() + "> " + var2; + this.mcServer.getLogAgent().logInfo(var2); + this.mcServer.getConfigurationManager().sendPacketToAllPlayers(new Packet3Chat(var2, false)); + } + + this.chatSpamThresholdCount += 20; + if(this.chatSpamThresholdCount > 200 && !this.mcServer.getConfigurationManager().areCommandsAllowed(this.playerEntity.username)) { + this.kickPlayerFromServer("disconnect.spam"); + } + + } + } + } + + private void handleSlashCommand(String var1) { + this.mcServer.getCommandManager().executeCommand(this.playerEntity, var1); + } + + public void handleAnimation(Packet18Animation var1) { + if(var1.animate == 1) { + this.playerEntity.swingItem(); + } + + } + + public void handleEntityAction(Packet19EntityAction var1) { + if(var1.state == 1) { + this.playerEntity.setSneaking(true); + } else if(var1.state == 2) { + this.playerEntity.setSneaking(false); + } else if(var1.state == 4) { + this.playerEntity.setSprinting(true); + } else if(var1.state == 5) { + this.playerEntity.setSprinting(false); + } else if(var1.state == 3) { + this.playerEntity.wakeUpPlayer(false, true, true); + this.hasMoved = false; + } + + } + + public void handleKickDisconnect(Packet255KickDisconnect var1) { + this.netManager.networkShutdown("disconnect.quitting", new Object[0]); + } + + public int packetSize() { + return this.netManager.packetSize(); + } + + public void handleUseEntity(Packet7UseEntity var1) { + WorldServer var2 = this.mcServer.worldServerForDimension(this.playerEntity.dimension); + Entity var3 = var2.getEntityByID(var1.targetEntity); + if(var3 != null) { + boolean var4 = this.playerEntity.canEntityBeSeen(var3); + double var5 = 36.0D; + if(!var4) { + var5 = 9.0D; + } + + if(this.playerEntity.getDistanceSqToEntity(var3) < var5) { + if(var1.isLeftClick == 0) { + this.playerEntity.interactWith(var3); + } else if(var1.isLeftClick == 1) { + this.playerEntity.attackTargetEntityWithCurrentItem(var3); + } + } + } + + } + + public void handleClientCommand(Packet205ClientCommand var1) { + if(var1.forceRespawn == 1) { + if(this.playerEntity.playerConqueredTheEnd) { + this.playerEntity = this.mcServer.getConfigurationManager().respawnPlayer(this.playerEntity, 0, true); + } else if(this.playerEntity.getServerForPlayer().getWorldInfo().isHardcoreModeEnabled()) { + if(this.mcServer.isSinglePlayer() && this.playerEntity.username.equals(this.mcServer.getServerOwner())) { + this.playerEntity.playerNetServerHandler.kickPlayerFromServer("You have died. Game over, man, it\'s game over!"); + this.mcServer.deleteWorldAndStopServer(); + } else { + BanEntry var2 = new BanEntry(this.playerEntity.username); + var2.setBanReason("Death in Hardcore"); + this.mcServer.getConfigurationManager().getBannedPlayers().put(var2); + this.playerEntity.playerNetServerHandler.kickPlayerFromServer("You have died. Game over, man, it\'s game over!"); + } + } else { + if(this.playerEntity.getHealth() > 0) { + return; + } + + this.playerEntity = this.mcServer.getConfigurationManager().respawnPlayer(this.playerEntity, 0, false); + } + } + + } + + public boolean canProcessPacketsAsync() { + return true; + } + + public void handleRespawn(Packet9Respawn var1) { + } + + public void handleCloseWindow(Packet101CloseWindow var1) { + this.playerEntity.closeInventory(); + } + + public void handleWindowClick(Packet102WindowClick var1) { + if(this.playerEntity.openContainer.windowId == var1.window_Id && this.playerEntity.openContainer.isPlayerNotUsingContainer(this.playerEntity)) { + ItemStack var2 = this.playerEntity.openContainer.slotClick(var1.inventorySlot, var1.mouseClick, var1.holdingShift, this.playerEntity); + if(ItemStack.areItemStacksEqual(var1.itemStack, var2)) { + this.playerEntity.playerNetServerHandler.sendPacketToPlayer(new Packet106Transaction(var1.window_Id, var1.action, true)); + this.playerEntity.playerInventoryBeingManipulated = true; + this.playerEntity.openContainer.detectAndSendChanges(); + this.playerEntity.updateHeldItem(); + this.playerEntity.playerInventoryBeingManipulated = false; + } else { + this.field_72586_s.addKey(this.playerEntity.openContainer.windowId, Short.valueOf(var1.action)); + this.playerEntity.playerNetServerHandler.sendPacketToPlayer(new Packet106Transaction(var1.window_Id, var1.action, false)); + this.playerEntity.openContainer.setPlayerIsPresent(this.playerEntity, false); + ArrayList var3 = new ArrayList(); + + for(int var4 = 0; var4 < this.playerEntity.openContainer.inventorySlots.size(); ++var4) { + var3.add(((Slot)this.playerEntity.openContainer.inventorySlots.get(var4)).getStack()); + } + + this.playerEntity.sendContainerAndContentsToPlayer(this.playerEntity.openContainer, var3); + } + } + + } + + public void handleEnchantItem(Packet108EnchantItem var1) { + if(this.playerEntity.openContainer.windowId == var1.windowId && this.playerEntity.openContainer.isPlayerNotUsingContainer(this.playerEntity)) { + this.playerEntity.openContainer.enchantItem(this.playerEntity, var1.enchantment); + this.playerEntity.openContainer.detectAndSendChanges(); + } + + } + + public void handleCreativeSetSlot(Packet107CreativeSetSlot var1) { + if(this.playerEntity.theItemInWorldManager.isCreative()) { + boolean var2 = var1.slot < 0; + ItemStack var3 = var1.itemStack; + boolean var4 = var1.slot >= 1 && var1.slot < 36 + InventoryPlayer.getHotbarSize(); + boolean var5 = var3 == null || var3.itemID < Item.itemsList.length && var3.itemID >= 0 && Item.itemsList[var3.itemID] != null; + boolean var6 = var3 == null || var3.getItemDamage() >= 0 && var3.getItemDamage() >= 0 && var3.stackSize <= 64 && var3.stackSize > 0; + if(var4 && var5 && var6) { + if(var3 == null) { + this.playerEntity.inventoryContainer.putStackInSlot(var1.slot, (ItemStack)null); + } else { + this.playerEntity.inventoryContainer.putStackInSlot(var1.slot, var3); + } + + this.playerEntity.inventoryContainer.setPlayerIsPresent(this.playerEntity, true); + } else if(var2 && var5 && var6 && this.creativeItemCreationSpamThresholdTally < 200) { + this.creativeItemCreationSpamThresholdTally += 20; + EntityItem var7 = this.playerEntity.dropPlayerItem(var3); + if(var7 != null) { + var7.setAgeToCreativeDespawnTime(); + } + } + } + + } + + public void handleTransaction(Packet106Transaction var1) { + Short var2 = (Short)this.field_72586_s.lookup(this.playerEntity.openContainer.windowId); + if(var2 != null && var1.shortWindowId == var2.shortValue() && this.playerEntity.openContainer.windowId == var1.windowId && !this.playerEntity.openContainer.isPlayerNotUsingContainer(this.playerEntity)) { + this.playerEntity.openContainer.setPlayerIsPresent(this.playerEntity, true); + } + + } + + public void handleUpdateSign(Packet130UpdateSign var1) { + WorldServer var2 = this.mcServer.worldServerForDimension(this.playerEntity.dimension); + if(var2.blockExists(var1.xPosition, var1.yPosition, var1.zPosition)) { + TileEntity var3 = var2.getBlockTileEntity(var1.xPosition, var1.yPosition, var1.zPosition); + if(var3 instanceof TileEntitySign) { + TileEntitySign var4 = (TileEntitySign)var3; + if(!var4.isEditable()) { + this.mcServer.logWarning("Player " + this.playerEntity.username + " just tried to change non-editable sign"); + return; + } + } + + int var6; + int var8; + for(var8 = 0; var8 < 4; ++var8) { + boolean var5 = true; + if(var1.signLines[var8].length() > 15) { + var5 = false; + } else { + for(var6 = 0; var6 < var1.signLines[var8].length(); ++var6) { + if(ChatAllowedCharacters.allowedCharacters.indexOf(var1.signLines[var8].charAt(var6)) < 0) { + var5 = false; + } + } + } + + if(!var5) { + var1.signLines[var8] = "!?"; + } + } + + if(var3 instanceof TileEntitySign) { + var8 = var1.xPosition; + int var9 = var1.yPosition; + var6 = var1.zPosition; + TileEntitySign var7 = (TileEntitySign)var3; + System.arraycopy(var1.signLines, 0, var7.signText, 0, 4); + var7.onInventoryChanged(); + var2.markBlockForUpdate(var8, var9, var6); + } + } + + } + + public void handleKeepAlive(Packet0KeepAlive var1) { + if(var1.randomId == this.keepAliveRandomID) { + int var2 = (int)(System.nanoTime() / 1000000L - this.keepAliveTimeSent); + this.playerEntity.ping = (this.playerEntity.ping * 3 + var2) / 4; + } + + } + + public boolean isServerHandler() { + return true; + } + + public void handlePlayerAbilities(Packet202PlayerAbilities var1) { + this.playerEntity.capabilities.isFlying = var1.getFlying() && this.playerEntity.capabilities.allowFlying; + } + + public void handleAutoComplete(Packet203AutoComplete var1) { + StringBuilder var2 = new StringBuilder(); + + String var4; + for(Iterator var3 = this.mcServer.getPossibleCompletions(this.playerEntity, var1.getText()).iterator(); var3.hasNext(); var2.append(var4)) { + var4 = (String)var3.next(); + if(var2.length() > 0) { + var2.append("\u0000"); + } + } + + this.playerEntity.playerNetServerHandler.sendPacketToPlayer(new Packet203AutoComplete(var2.toString())); + } + + public void handleClientInfo(Packet204ClientInfo var1) { + this.playerEntity.updateClientInfo(var1); + } + + public void handleCustomPayload(Packet250CustomPayload var1) { + DataInputStream var2; + ItemStack var3; + ItemStack var4; + if("MC|BEdit".equals(var1.channel)) { + try { + var2 = new DataInputStream(new ByteArrayInputStream(var1.data)); + var3 = Packet.readItemStack(var2); + if(!ItemWritableBook.validBookTagPages(var3.getTagCompound())) { + throw new IOException("Invalid book tag!"); + } + + var4 = this.playerEntity.inventory.getCurrentItem(); + if(var3 != null && var3.itemID == Item.writableBook.itemID && var3.itemID == var4.itemID) { + var4.setTagInfo("pages", var3.getTagCompound().getTagList("pages")); + } + } catch (Exception var12) { + var12.printStackTrace(); + } + } else if("MC|BSign".equals(var1.channel)) { + try { + var2 = new DataInputStream(new ByteArrayInputStream(var1.data)); + var3 = Packet.readItemStack(var2); + if(!ItemEditableBook.validBookTagContents(var3.getTagCompound())) { + throw new IOException("Invalid book tag!"); + } + + var4 = this.playerEntity.inventory.getCurrentItem(); + if(var3 != null && var3.itemID == Item.writtenBook.itemID && var4.itemID == Item.writableBook.itemID) { + var4.setTagInfo("author", new NBTTagString("author", this.playerEntity.username)); + var4.setTagInfo("title", new NBTTagString("title", var3.getTagCompound().getString("title"))); + var4.setTagInfo("pages", var3.getTagCompound().getTagList("pages")); + var4.itemID = Item.writtenBook.itemID; + } + } catch (Exception var11) { + var11.printStackTrace(); + } + } else { + int var13; + if("MC|TrSel".equals(var1.channel)) { + try { + var2 = new DataInputStream(new ByteArrayInputStream(var1.data)); + var13 = var2.readInt(); + Container var15 = this.playerEntity.openContainer; + if(var15 instanceof ContainerMerchant) { + ((ContainerMerchant)var15).setCurrentRecipeIndex(var13); + } + } catch (Exception var10) { + var10.printStackTrace(); + } + } else { + int var17; + if("MC|AdvCdm".equals(var1.channel)) { + if(!this.mcServer.isCommandBlockEnabled()) { + this.playerEntity.sendChatToPlayer(this.playerEntity.translateString("advMode.notEnabled", new Object[0])); + } else if(this.playerEntity.canCommandSenderUseCommand(2, "") && this.playerEntity.capabilities.isCreativeMode) { + try { + var2 = new DataInputStream(new ByteArrayInputStream(var1.data)); + var13 = var2.readInt(); + var17 = var2.readInt(); + int var5 = var2.readInt(); + String var6 = Packet.readString(var2, 256); + TileEntity var7 = this.playerEntity.worldObj.getBlockTileEntity(var13, var17, var5); + if(var7 != null && var7 instanceof TileEntityCommandBlock) { + ((TileEntityCommandBlock)var7).setCommand(var6); + this.playerEntity.worldObj.markBlockForUpdate(var13, var17, var5); + this.playerEntity.sendChatToPlayer("Command set: " + var6); + } + } catch (Exception var9) { + var9.printStackTrace(); + } + } else { + this.playerEntity.sendChatToPlayer(this.playerEntity.translateString("advMode.notAllowed", new Object[0])); + } + } else if("MC|Beacon".equals(var1.channel)) { + if(this.playerEntity.openContainer instanceof ContainerBeacon) { + try { + var2 = new DataInputStream(new ByteArrayInputStream(var1.data)); + var13 = var2.readInt(); + var17 = var2.readInt(); + ContainerBeacon var18 = (ContainerBeacon)this.playerEntity.openContainer; + Slot var19 = var18.getSlot(0); + if(var19.getHasStack()) { + var19.decrStackSize(1); + TileEntityBeacon var20 = var18.getBeacon(); + var20.setPrimaryEffect(var13); + var20.setSecondaryEffect(var17); + var20.onInventoryChanged(); + } + } catch (Exception var8) { + var8.printStackTrace(); + } + } + } else if("MC|ItemName".equals(var1.channel) && this.playerEntity.openContainer instanceof ContainerRepair) { + ContainerRepair var14 = (ContainerRepair)this.playerEntity.openContainer; + if(var1.data != null && var1.data.length >= 1) { + String var16 = ChatAllowedCharacters.filerAllowedCharacters(new String(var1.data)); + if(var16.length() <= 30) { + var14.updateItemName(var16); + } + } else { + var14.updateItemName(""); + } + } + } + } + + } +} diff --git a/src/net/minecraft/src/NetworkListenThread.java b/src/net/minecraft/src/NetworkListenThread.java new file mode 100644 index 0000000..4770939 --- /dev/null +++ b/src/net/minecraft/src/NetworkListenThread.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public abstract class NetworkListenThread { + private final MinecraftServer mcServer; + private final List connections = Collections.synchronizedList(new ArrayList()); + public volatile boolean isListening = false; + + public NetworkListenThread(MinecraftServer var1) throws IOException { + this.mcServer = var1; + this.isListening = true; + } + + public void addPlayer(NetServerHandler var1) { + this.connections.add(var1); + } + + public void stopListening() { + this.isListening = false; + } + + public void networkTick() { + for(int var1 = 0; var1 < this.connections.size(); ++var1) { + NetServerHandler var2 = (NetServerHandler)this.connections.get(var1); + + try { + var2.networkTick(); + } catch (Exception var5) { + if(var2.netManager instanceof MemoryConnection) { + CrashReport var4 = CrashReport.makeCrashReport(var5, "Ticking memory connection"); + throw new ReportedException(var4); + } + + this.mcServer.getLogAgent().logWarningException("Failed to handle packet for " + var2.playerEntity.getEntityName() + "/" + var2.playerEntity.getPlayerIP() + ": " + var5, var5); + var2.kickPlayerFromServer("Internal server error"); + } + + if(var2.connectionClosed) { + this.connections.remove(var1--); + } + + var2.netManager.wakeThreads(); + } + + } + + public MinecraftServer getServer() { + return this.mcServer; + } +} diff --git a/src/net/minecraft/src/NextTickListEntry.java b/src/net/minecraft/src/NextTickListEntry.java new file mode 100644 index 0000000..f7fc89c --- /dev/null +++ b/src/net/minecraft/src/NextTickListEntry.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +public class NextTickListEntry implements Comparable { + private static long nextTickEntryID = 0L; + public int xCoord; + public int yCoord; + public int zCoord; + public int blockID; + public long scheduledTime; + public int field_82754_f; + private long tickEntryID = nextTickEntryID++; + + public NextTickListEntry(int var1, int var2, int var3, int var4) { + this.xCoord = var1; + this.yCoord = var2; + this.zCoord = var3; + this.blockID = var4; + } + + public boolean equals(Object var1) { + if(!(var1 instanceof NextTickListEntry)) { + return false; + } else { + NextTickListEntry var2 = (NextTickListEntry)var1; + return this.xCoord == var2.xCoord && this.yCoord == var2.yCoord && this.zCoord == var2.zCoord && Block.isAssociatedBlockID(this.blockID, var2.blockID); + } + } + + public int hashCode() { + return (this.xCoord * 1024 * 1024 + this.zCoord * 1024 + this.yCoord) * 256; + } + + public NextTickListEntry setScheduledTime(long var1) { + this.scheduledTime = var1; + return this; + } + + public void func_82753_a(int var1) { + this.field_82754_f = var1; + } + + public int comparer(NextTickListEntry var1) { + return this.scheduledTime < var1.scheduledTime ? -1 : (this.scheduledTime > var1.scheduledTime ? 1 : (this.field_82754_f != var1.field_82754_f ? this.field_82754_f - var1.field_82754_f : (this.tickEntryID < var1.tickEntryID ? -1 : (this.tickEntryID > var1.tickEntryID ? 1 : 0)))); + } + + public String toString() { + return this.blockID + ": (" + this.xCoord + ", " + this.yCoord + ", " + this.zCoord + "), " + this.scheduledTime + ", " + this.field_82754_f + ", " + this.tickEntryID; + } + + public int compareTo(Object var1) { + return this.comparer((NextTickListEntry)var1); + } +} diff --git a/src/net/minecraft/src/NibbleArray.java b/src/net/minecraft/src/NibbleArray.java new file mode 100644 index 0000000..3a6ada4 --- /dev/null +++ b/src/net/minecraft/src/NibbleArray.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +public class NibbleArray { + public final byte[] data; + private final int depthBits; + private final int depthBitsPlusFour; + + public NibbleArray(int var1, int var2) { + this.data = new byte[var1 >> 1]; + this.depthBits = var2; + this.depthBitsPlusFour = var2 + 4; + } + + public NibbleArray(byte[] var1, int var2) { + this.data = var1; + this.depthBits = var2; + this.depthBitsPlusFour = var2 + 4; + } + + public int get(int var1, int var2, int var3) { + int var4 = var2 << this.depthBitsPlusFour | var3 << this.depthBits | var1; + int var5 = var4 >> 1; + int var6 = var4 & 1; + return var6 == 0 ? this.data[var5] & 15 : this.data[var5] >> 4 & 15; + } + + public void set(int var1, int var2, int var3, int var4) { + int var5 = var2 << this.depthBitsPlusFour | var3 << this.depthBits | var1; + int var6 = var5 >> 1; + int var7 = var5 & 1; + if(var7 == 0) { + this.data[var6] = (byte)(this.data[var6] & 240 | var4 & 15); + } else { + this.data[var6] = (byte)(this.data[var6] & 15 | (var4 & 15) << 4); + } + + } +} diff --git a/src/net/minecraft/src/NibbleArrayReader.java b/src/net/minecraft/src/NibbleArrayReader.java new file mode 100644 index 0000000..43fb750 --- /dev/null +++ b/src/net/minecraft/src/NibbleArrayReader.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class NibbleArrayReader { + public final byte[] data; + private final int depthBits; + private final int depthBitsPlusFour; + + public NibbleArrayReader(byte[] var1, int var2) { + this.data = var1; + this.depthBits = var2; + this.depthBitsPlusFour = var2 + 4; + } + + public int get(int var1, int var2, int var3) { + int var4 = var1 << this.depthBitsPlusFour | var3 << this.depthBits | var2; + int var5 = var4 >> 1; + int var6 = var4 & 1; + return var6 == 0 ? this.data[var5] & 15 : this.data[var5] >> 4 & 15; + } +} diff --git a/src/net/minecraft/src/NoiseGenerator.java b/src/net/minecraft/src/NoiseGenerator.java new file mode 100644 index 0000000..53e6d05 --- /dev/null +++ b/src/net/minecraft/src/NoiseGenerator.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public abstract class NoiseGenerator { +} diff --git a/src/net/minecraft/src/NoiseGeneratorOctaves.java b/src/net/minecraft/src/NoiseGeneratorOctaves.java new file mode 100644 index 0000000..8d7364a --- /dev/null +++ b/src/net/minecraft/src/NoiseGeneratorOctaves.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.util.Random; + +public class NoiseGeneratorOctaves extends NoiseGenerator { + private NoiseGeneratorPerlin[] generatorCollection; + private int octaves; + + public NoiseGeneratorOctaves(Random var1, int var2) { + this.octaves = var2; + this.generatorCollection = new NoiseGeneratorPerlin[var2]; + + for(int var3 = 0; var3 < var2; ++var3) { + this.generatorCollection[var3] = new NoiseGeneratorPerlin(var1); + } + + } + + public double[] generateNoiseOctaves(double[] var1, int var2, int var3, int var4, int var5, int var6, int var7, double var8, double var10, double var12) { + if(var1 == null) { + var1 = new double[var5 * var6 * var7]; + } else { + for(int var14 = 0; var14 < var1.length; ++var14) { + var1[var14] = 0.0D; + } + } + + double var27 = 1.0D; + + for(int var16 = 0; var16 < this.octaves; ++var16) { + double var17 = (double)var2 * var27 * var8; + double var19 = (double)var3 * var27 * var10; + double var21 = (double)var4 * var27 * var12; + long var23 = MathHelper.floor_double_long(var17); + long var25 = MathHelper.floor_double_long(var21); + var17 -= (double)var23; + var21 -= (double)var25; + var23 %= 16777216L; + var25 %= 16777216L; + var17 += (double)var23; + var21 += (double)var25; + this.generatorCollection[var16].populateNoiseArray(var1, var17, var19, var21, var5, var6, var7, var8 * var27, var10 * var27, var12 * var27, var27); + var27 /= 2.0D; + } + + return var1; + } + + public double[] generateNoiseOctaves(double[] var1, int var2, int var3, int var4, int var5, double var6, double var8, double var10) { + return this.generateNoiseOctaves(var1, var2, 10, var3, var4, 1, var5, var6, 1.0D, var8); + } +} diff --git a/src/net/minecraft/src/NoiseGeneratorPerlin.java b/src/net/minecraft/src/NoiseGeneratorPerlin.java new file mode 100644 index 0000000..6976500 --- /dev/null +++ b/src/net/minecraft/src/NoiseGeneratorPerlin.java @@ -0,0 +1,180 @@ +package net.minecraft.src; + +import java.util.Random; + +public class NoiseGeneratorPerlin extends NoiseGenerator { + private int[] permutations; + public double xCoord; + public double yCoord; + public double zCoord; + + public NoiseGeneratorPerlin() { + this(new Random()); + } + + public NoiseGeneratorPerlin(Random var1) { + this.permutations = new int[512]; + this.xCoord = var1.nextDouble() * 256.0D; + this.yCoord = var1.nextDouble() * 256.0D; + this.zCoord = var1.nextDouble() * 256.0D; + + int var2; + for(var2 = 0; var2 < 256; this.permutations[var2] = var2++) { + } + + for(var2 = 0; var2 < 256; ++var2) { + int var3 = var1.nextInt(256 - var2) + var2; + int var4 = this.permutations[var2]; + this.permutations[var2] = this.permutations[var3]; + this.permutations[var3] = var4; + this.permutations[var2 + 256] = this.permutations[var2]; + } + + } + + public final double lerp(double var1, double var3, double var5) { + return var3 + var1 * (var5 - var3); + } + + public final double func_76309_a(int var1, double var2, double var4) { + int var6 = var1 & 15; + double var7 = (double)(1 - ((var6 & 8) >> 3)) * var2; + double var9 = var6 < 4 ? 0.0D : (var6 != 12 && var6 != 14 ? var4 : var2); + return ((var6 & 1) == 0 ? var7 : -var7) + ((var6 & 2) == 0 ? var9 : -var9); + } + + public final double grad(int var1, double var2, double var4, double var6) { + int var8 = var1 & 15; + double var9 = var8 < 8 ? var2 : var4; + double var11 = var8 < 4 ? var4 : (var8 != 12 && var8 != 14 ? var6 : var2); + return ((var8 & 1) == 0 ? var9 : -var9) + ((var8 & 2) == 0 ? var11 : -var11); + } + + public void populateNoiseArray(double[] var1, double var2, double var4, double var6, int var8, int var9, int var10, double var11, double var13, double var15, double var17) { + int var10001; + int var19; + int var22; + double var31; + double var35; + int var37; + double var38; + int var40; + int var41; + double var42; + int var75; + if(var9 == 1) { + boolean var64 = false; + boolean var65 = false; + boolean var21 = false; + boolean var68 = false; + double var70 = 0.0D; + double var73 = 0.0D; + var75 = 0; + double var77 = 1.0D / var17; + + for(int var30 = 0; var30 < var8; ++var30) { + var31 = var2 + (double)var30 * var11 + this.xCoord; + int var78 = (int)var31; + if(var31 < (double)var78) { + --var78; + } + + int var34 = var78 & 255; + var31 -= (double)var78; + var35 = var31 * var31 * var31 * (var31 * (var31 * 6.0D - 15.0D) + 10.0D); + + for(var37 = 0; var37 < var10; ++var37) { + var38 = var6 + (double)var37 * var15 + this.zCoord; + var40 = (int)var38; + if(var38 < (double)var40) { + --var40; + } + + var41 = var40 & 255; + var38 -= (double)var40; + var42 = var38 * var38 * var38 * (var38 * (var38 * 6.0D - 15.0D) + 10.0D); + var19 = this.permutations[var34] + 0; + int var66 = this.permutations[var19] + var41; + int var67 = this.permutations[var34 + 1] + 0; + var22 = this.permutations[var67] + var41; + var70 = this.lerp(var35, this.func_76309_a(this.permutations[var66], var31, var38), this.grad(this.permutations[var22], var31 - 1.0D, 0.0D, var38)); + var73 = this.lerp(var35, this.grad(this.permutations[var66 + 1], var31, 0.0D, var38 - 1.0D), this.grad(this.permutations[var22 + 1], var31 - 1.0D, 0.0D, var38 - 1.0D)); + double var79 = this.lerp(var42, var70, var73); + var10001 = var75++; + var1[var10001] += var79 * var77; + } + } + + } else { + var19 = 0; + double var20 = 1.0D / var17; + var22 = -1; + boolean var23 = false; + boolean var24 = false; + boolean var25 = false; + boolean var26 = false; + boolean var27 = false; + boolean var28 = false; + double var29 = 0.0D; + var31 = 0.0D; + double var33 = 0.0D; + var35 = 0.0D; + + for(var37 = 0; var37 < var8; ++var37) { + var38 = var2 + (double)var37 * var11 + this.xCoord; + var40 = (int)var38; + if(var38 < (double)var40) { + --var40; + } + + var41 = var40 & 255; + var38 -= (double)var40; + var42 = var38 * var38 * var38 * (var38 * (var38 * 6.0D - 15.0D) + 10.0D); + + for(int var44 = 0; var44 < var10; ++var44) { + double var45 = var6 + (double)var44 * var15 + this.zCoord; + int var47 = (int)var45; + if(var45 < (double)var47) { + --var47; + } + + int var48 = var47 & 255; + var45 -= (double)var47; + double var49 = var45 * var45 * var45 * (var45 * (var45 * 6.0D - 15.0D) + 10.0D); + + for(int var51 = 0; var51 < var9; ++var51) { + double var52 = var4 + (double)var51 * var13 + this.yCoord; + int var54 = (int)var52; + if(var52 < (double)var54) { + --var54; + } + + int var55 = var54 & 255; + var52 -= (double)var54; + double var56 = var52 * var52 * var52 * (var52 * (var52 * 6.0D - 15.0D) + 10.0D); + if(var51 == 0 || var55 != var22) { + var22 = var55; + int var69 = this.permutations[var41] + var55; + int var71 = this.permutations[var69] + var48; + int var72 = this.permutations[var69 + 1] + var48; + int var74 = this.permutations[var41 + 1] + var55; + var75 = this.permutations[var74] + var48; + int var76 = this.permutations[var74 + 1] + var48; + var29 = this.lerp(var42, this.grad(this.permutations[var71], var38, var52, var45), this.grad(this.permutations[var75], var38 - 1.0D, var52, var45)); + var31 = this.lerp(var42, this.grad(this.permutations[var72], var38, var52 - 1.0D, var45), this.grad(this.permutations[var76], var38 - 1.0D, var52 - 1.0D, var45)); + var33 = this.lerp(var42, this.grad(this.permutations[var71 + 1], var38, var52, var45 - 1.0D), this.grad(this.permutations[var75 + 1], var38 - 1.0D, var52, var45 - 1.0D)); + var35 = this.lerp(var42, this.grad(this.permutations[var72 + 1], var38, var52 - 1.0D, var45 - 1.0D), this.grad(this.permutations[var76 + 1], var38 - 1.0D, var52 - 1.0D, var45 - 1.0D)); + } + + double var58 = this.lerp(var56, var29, var31); + double var60 = this.lerp(var56, var33, var35); + double var62 = this.lerp(var49, var58, var60); + var10001 = var19++; + var1[var10001] += var62 * var20; + } + } + } + + } + } +} diff --git a/src/net/minecraft/src/NpcMerchant.java b/src/net/minecraft/src/NpcMerchant.java new file mode 100644 index 0000000..955fc0d --- /dev/null +++ b/src/net/minecraft/src/NpcMerchant.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +public class NpcMerchant implements IMerchant { + private InventoryMerchant theMerchantInventory; + private EntityPlayer customer; + private MerchantRecipeList recipeList; + + public NpcMerchant(EntityPlayer var1) { + this.customer = var1; + this.theMerchantInventory = new InventoryMerchant(var1, this); + } + + public EntityPlayer getCustomer() { + return this.customer; + } + + public void setCustomer(EntityPlayer var1) { + } + + public MerchantRecipeList getRecipes(EntityPlayer var1) { + return this.recipeList; + } + + public void setRecipes(MerchantRecipeList var1) { + this.recipeList = var1; + } + + public void useRecipe(MerchantRecipe var1) { + } +} diff --git a/src/net/minecraft/src/NumberInvalidException.java b/src/net/minecraft/src/NumberInvalidException.java new file mode 100644 index 0000000..be8249b --- /dev/null +++ b/src/net/minecraft/src/NumberInvalidException.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class NumberInvalidException extends CommandException { + public NumberInvalidException() { + this("commands.generic.num.invalid", new Object[0]); + } + + public NumberInvalidException(String var1, Object... var2) { + super(var1, var2); + } +} diff --git a/src/net/minecraft/src/OpenGlCapsChecker.java b/src/net/minecraft/src/OpenGlCapsChecker.java new file mode 100644 index 0000000..bcacccb --- /dev/null +++ b/src/net/minecraft/src/OpenGlCapsChecker.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GLContext; + +public class OpenGlCapsChecker { + public static boolean checkARBOcclusion() { + return GLContext.getCapabilities().GL_ARB_occlusion_query; + } +} diff --git a/src/net/minecraft/src/OpenGlHelper.java b/src/net/minecraft/src/OpenGlHelper.java new file mode 100644 index 0000000..be8f758 --- /dev/null +++ b/src/net/minecraft/src/OpenGlHelper.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.ARBMultitexture; +import org.lwjgl.opengl.GL13; +import org.lwjgl.opengl.GLContext; + +public class OpenGlHelper { + public static int defaultTexUnit; + public static int lightmapTexUnit; + private static boolean useMultitextureARB = false; + + public static void initializeTextures() { + useMultitextureARB = GLContext.getCapabilities().GL_ARB_multitexture && !GLContext.getCapabilities().OpenGL13; + if(useMultitextureARB) { + defaultTexUnit = '\u84c0'; + lightmapTexUnit = '\u84c1'; + } else { + defaultTexUnit = '\u84c0'; + lightmapTexUnit = '\u84c1'; + } + + } + + public static void setActiveTexture(int var0) { + if(useMultitextureARB) { + ARBMultitexture.glActiveTextureARB(var0); + } else { + GL13.glActiveTexture(var0); + } + + } + + public static void setClientActiveTexture(int var0) { + if(useMultitextureARB) { + ARBMultitexture.glClientActiveTextureARB(var0); + } else { + GL13.glClientActiveTexture(var0); + } + + } + + public static void setLightmapTextureCoords(int var0, float var1, float var2) { + if(useMultitextureARB) { + ARBMultitexture.glMultiTexCoord2fARB(var0, var1, var2); + } else { + GL13.glMultiTexCoord2f(var0, var1, var2); + } + + } +} diff --git a/src/net/minecraft/src/Packet.java b/src/net/minecraft/src/Packet.java new file mode 100644 index 0000000..391647e --- /dev/null +++ b/src/net/minecraft/src/Packet.java @@ -0,0 +1,308 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.EOFException; +import java.io.IOException; +import java.net.Socket; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; + +public abstract class Packet { + public static IntHashMap packetIdToClassMap = new IntHashMap(); + private static Map packetClassToIdMap = new HashMap(); + private static Set clientPacketIdList = new HashSet(); + private static Set serverPacketIdList = new HashSet(); + protected ILogAgent field_98193_m; + public final long creationTimeMillis = System.currentTimeMillis(); + public static long receivedID; + public static long receivedSize; + public static long sentID; + public static long sentSize; + public boolean isChunkDataPacket = false; + + static void addIdClassMapping(int var0, boolean var1, boolean var2, Class var3) { + if(packetIdToClassMap.containsItem(var0)) { + throw new IllegalArgumentException("Duplicate packet id:" + var0); + } else if(packetClassToIdMap.containsKey(var3)) { + throw new IllegalArgumentException("Duplicate packet class:" + var3); + } else { + packetIdToClassMap.addKey(var0, var3); + packetClassToIdMap.put(var3, Integer.valueOf(var0)); + if(var1) { + clientPacketIdList.add(Integer.valueOf(var0)); + } + + if(var2) { + serverPacketIdList.add(Integer.valueOf(var0)); + } + + } + } + + public static Packet getNewPacket(ILogAgent var0, int var1) { + try { + Class var2 = (Class)packetIdToClassMap.lookup(var1); + return var2 == null ? null : (Packet)var2.newInstance(); + } catch (Exception var3) { + var3.printStackTrace(); + var0.logSevere("Skipping packet with id " + var1); + return null; + } + } + + public static void writeByteArray(DataOutputStream var0, byte[] var1) throws IOException { + var0.writeShort(var1.length); + var0.write(var1); + } + + public static byte[] readBytesFromStream(DataInputStream var0) throws IOException { + short var1 = var0.readShort(); + if(var1 < 0) { + throw new IOException("Key was smaller than nothing! Weird key!"); + } else { + byte[] var2 = new byte[var1]; + var0.readFully(var2); + return var2; + } + } + + public final int getPacketId() { + return ((Integer)packetClassToIdMap.get(this.getClass())).intValue(); + } + + public static Packet readPacket(ILogAgent var0, DataInputStream var1, boolean var2, Socket var3) throws IOException { + boolean var4 = false; + Packet var5 = null; + int var6 = var3.getSoTimeout(); + + int var9; + try { + var9 = var1.read(); + if(var9 == -1) { + return null; + } + + if(var2 && !serverPacketIdList.contains(Integer.valueOf(var9)) || !var2 && !clientPacketIdList.contains(Integer.valueOf(var9))) { + throw new IOException("Bad packet id " + var9); + } + + var5 = getNewPacket(var0, var9); + if(var5 == null) { + throw new IOException("Bad packet id " + var9); + } + + var5.field_98193_m = var0; + if(var5 instanceof Packet254ServerPing) { + var3.setSoTimeout(1500); + } + + var5.readPacketData(var1); + ++receivedID; + receivedSize += (long)var5.getPacketSize(); + } catch (EOFException var8) { + var0.logSevere("Reached end of stream"); + return null; + } + + PacketCount.countPacket(var9, (long)var5.getPacketSize()); + ++receivedID; + receivedSize += (long)var5.getPacketSize(); + var3.setSoTimeout(var6); + return var5; + } + + public static void writePacket(Packet var0, DataOutputStream var1) throws IOException { + var1.write(var0.getPacketId()); + var0.writePacketData(var1); + ++sentID; + sentSize += (long)var0.getPacketSize(); + } + + public static void writeString(String var0, DataOutputStream var1) throws IOException { + if(var0.length() > Short.MAX_VALUE) { + throw new IOException("String too big"); + } else { + var1.writeShort(var0.length()); + var1.writeChars(var0); + } + } + + public static String readString(DataInputStream var0, int var1) throws IOException { + short var2 = var0.readShort(); + if(var2 > var1) { + throw new IOException("Received string length longer than maximum allowed (" + var2 + " > " + var1 + ")"); + } else if(var2 < 0) { + throw new IOException("Received string length is less than zero! Weird string!"); + } else { + StringBuilder var3 = new StringBuilder(); + + for(int var4 = 0; var4 < var2; ++var4) { + var3.append(var0.readChar()); + } + + return var3.toString(); + } + } + + public abstract void readPacketData(DataInputStream var1) throws IOException; + + public abstract void writePacketData(DataOutputStream var1) throws IOException; + + public abstract void processPacket(NetHandler var1); + + public abstract int getPacketSize(); + + public boolean isRealPacket() { + return false; + } + + public boolean containsSameEntityIDAs(Packet var1) { + return false; + } + + public boolean canProcessAsync() { + return false; + } + + public String toString() { + String var1 = this.getClass().getSimpleName(); + return var1; + } + + public static ItemStack readItemStack(DataInputStream var0) throws IOException { + ItemStack var1 = null; + short var2 = var0.readShort(); + if(var2 >= 0) { + byte var3 = var0.readByte(); + short var4 = var0.readShort(); + var1 = new ItemStack(var2, var3, var4); + var1.stackTagCompound = readNBTTagCompound(var0); + } + + return var1; + } + + public static void writeItemStack(ItemStack var0, DataOutputStream var1) throws IOException { + if(var0 == null) { + var1.writeShort(-1); + } else { + var1.writeShort(var0.itemID); + var1.writeByte(var0.stackSize); + var1.writeShort(var0.getItemDamage()); + NBTTagCompound var2 = null; + if(var0.getItem().isDamageable() || var0.getItem().getShareTag()) { + var2 = var0.stackTagCompound; + } + + writeNBTTagCompound(var2, var1); + } + + } + + public static NBTTagCompound readNBTTagCompound(DataInputStream var0) throws IOException { + short var1 = var0.readShort(); + if(var1 < 0) { + return null; + } else { + byte[] var2 = new byte[var1]; + var0.readFully(var2); + return CompressedStreamTools.decompress(var2); + } + } + + protected static void writeNBTTagCompound(NBTTagCompound var0, DataOutputStream var1) throws IOException { + if(var0 == null) { + var1.writeShort(-1); + } else { + byte[] var2 = CompressedStreamTools.compress(var0); + var1.writeShort((short)var2.length); + var1.write(var2); + } + + } + + static { + addIdClassMapping(0, true, true, Packet0KeepAlive.class); + addIdClassMapping(1, true, true, Packet1Login.class); + addIdClassMapping(2, false, true, Packet2ClientProtocol.class); + addIdClassMapping(3, true, true, Packet3Chat.class); + addIdClassMapping(4, true, false, Packet4UpdateTime.class); + addIdClassMapping(5, true, false, Packet5PlayerInventory.class); + addIdClassMapping(6, true, false, Packet6SpawnPosition.class); + addIdClassMapping(7, false, true, Packet7UseEntity.class); + addIdClassMapping(8, true, false, Packet8UpdateHealth.class); + addIdClassMapping(9, true, true, Packet9Respawn.class); + addIdClassMapping(10, true, true, Packet10Flying.class); + addIdClassMapping(11, true, true, Packet11PlayerPosition.class); + addIdClassMapping(12, true, true, Packet12PlayerLook.class); + addIdClassMapping(13, true, true, Packet13PlayerLookMove.class); + addIdClassMapping(14, false, true, Packet14BlockDig.class); + addIdClassMapping(15, false, true, Packet15Place.class); + addIdClassMapping(16, true, true, Packet16BlockItemSwitch.class); + addIdClassMapping(17, true, false, Packet17Sleep.class); + addIdClassMapping(18, true, true, Packet18Animation.class); + addIdClassMapping(19, false, true, Packet19EntityAction.class); + addIdClassMapping(20, true, false, Packet20NamedEntitySpawn.class); + addIdClassMapping(22, true, false, Packet22Collect.class); + addIdClassMapping(23, true, false, Packet23VehicleSpawn.class); + addIdClassMapping(24, true, false, Packet24MobSpawn.class); + addIdClassMapping(25, true, false, Packet25EntityPainting.class); + addIdClassMapping(26, true, false, Packet26EntityExpOrb.class); + addIdClassMapping(28, true, false, Packet28EntityVelocity.class); + addIdClassMapping(29, true, false, Packet29DestroyEntity.class); + addIdClassMapping(30, true, false, Packet30Entity.class); + addIdClassMapping(31, true, false, Packet31RelEntityMove.class); + addIdClassMapping(32, true, false, Packet32EntityLook.class); + addIdClassMapping(33, true, false, Packet33RelEntityMoveLook.class); + addIdClassMapping(34, true, false, Packet34EntityTeleport.class); + addIdClassMapping(35, true, false, Packet35EntityHeadRotation.class); + addIdClassMapping(38, true, false, Packet38EntityStatus.class); + addIdClassMapping(39, true, false, Packet39AttachEntity.class); + addIdClassMapping(40, true, false, Packet40EntityMetadata.class); + addIdClassMapping(41, true, false, Packet41EntityEffect.class); + addIdClassMapping(42, true, false, Packet42RemoveEntityEffect.class); + addIdClassMapping(43, true, false, Packet43Experience.class); + addIdClassMapping(51, true, false, Packet51MapChunk.class); + addIdClassMapping(52, true, false, Packet52MultiBlockChange.class); + addIdClassMapping(53, true, false, Packet53BlockChange.class); + addIdClassMapping(54, true, false, Packet54PlayNoteBlock.class); + addIdClassMapping(55, true, false, Packet55BlockDestroy.class); + addIdClassMapping(56, true, false, Packet56MapChunks.class); + addIdClassMapping(60, true, false, Packet60Explosion.class); + addIdClassMapping(61, true, false, Packet61DoorChange.class); + addIdClassMapping(62, true, false, Packet62LevelSound.class); + addIdClassMapping(63, true, false, Packet63WorldParticles.class); + addIdClassMapping(70, true, false, Packet70GameEvent.class); + addIdClassMapping(71, true, false, Packet71Weather.class); + addIdClassMapping(100, true, false, Packet100OpenWindow.class); + addIdClassMapping(101, true, true, Packet101CloseWindow.class); + addIdClassMapping(102, false, true, Packet102WindowClick.class); + addIdClassMapping(103, true, false, Packet103SetSlot.class); + addIdClassMapping(104, true, false, Packet104WindowItems.class); + addIdClassMapping(105, true, false, Packet105UpdateProgressbar.class); + addIdClassMapping(106, true, true, Packet106Transaction.class); + addIdClassMapping(107, true, true, Packet107CreativeSetSlot.class); + addIdClassMapping(108, false, true, Packet108EnchantItem.class); + addIdClassMapping(130, true, true, Packet130UpdateSign.class); + addIdClassMapping(131, true, false, Packet131MapData.class); + addIdClassMapping(132, true, false, Packet132TileEntityData.class); + addIdClassMapping(200, true, false, Packet200Statistic.class); + addIdClassMapping(201, true, false, Packet201PlayerInfo.class); + addIdClassMapping(202, true, true, Packet202PlayerAbilities.class); + addIdClassMapping(203, true, true, Packet203AutoComplete.class); + addIdClassMapping(204, false, true, Packet204ClientInfo.class); + addIdClassMapping(205, false, true, Packet205ClientCommand.class); + addIdClassMapping(206, true, false, Packet206SetObjective.class); + addIdClassMapping(207, true, false, Packet207SetScore.class); + addIdClassMapping(208, true, false, Packet208SetDisplayObjective.class); + addIdClassMapping(209, true, false, Packet209SetPlayerTeam.class); + addIdClassMapping(250, true, true, Packet250CustomPayload.class); + addIdClassMapping(252, true, true, Packet252SharedKey.class); + addIdClassMapping(253, true, false, Packet253ServerAuthData.class); + addIdClassMapping(254, false, true, Packet254ServerPing.class); + addIdClassMapping(255, true, true, Packet255KickDisconnect.class); + } +} diff --git a/src/net/minecraft/src/Packet0KeepAlive.java b/src/net/minecraft/src/Packet0KeepAlive.java new file mode 100644 index 0000000..6328844 --- /dev/null +++ b/src/net/minecraft/src/Packet0KeepAlive.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet0KeepAlive extends Packet { + public int randomId; + + public Packet0KeepAlive() { + } + + public Packet0KeepAlive(int var1) { + this.randomId = var1; + } + + public void processPacket(NetHandler var1) { + var1.handleKeepAlive(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.randomId = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.randomId); + } + + public int getPacketSize() { + return 4; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + return true; + } + + public boolean canProcessAsync() { + return true; + } +} diff --git a/src/net/minecraft/src/Packet100OpenWindow.java b/src/net/minecraft/src/Packet100OpenWindow.java new file mode 100644 index 0000000..c9e80c3 --- /dev/null +++ b/src/net/minecraft/src/Packet100OpenWindow.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet100OpenWindow extends Packet { + public int windowId; + public int inventoryType; + public String windowTitle; + public int slotsCount; + public boolean useProvidedWindowTitle; + + public Packet100OpenWindow() { + } + + public Packet100OpenWindow(int var1, int var2, String var3, int var4, boolean var5) { + this.windowId = var1; + this.inventoryType = var2; + this.windowTitle = var3; + this.slotsCount = var4; + this.useProvidedWindowTitle = var5; + } + + public void processPacket(NetHandler var1) { + var1.handleOpenWindow(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.windowId = var1.readByte() & 255; + this.inventoryType = var1.readByte() & 255; + this.windowTitle = readString(var1, 32); + this.slotsCount = var1.readByte() & 255; + this.useProvidedWindowTitle = var1.readBoolean(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.windowId & 255); + var1.writeByte(this.inventoryType & 255); + writeString(this.windowTitle, var1); + var1.writeByte(this.slotsCount & 255); + var1.writeBoolean(this.useProvidedWindowTitle); + } + + public int getPacketSize() { + return 4 + this.windowTitle.length(); + } +} diff --git a/src/net/minecraft/src/Packet101CloseWindow.java b/src/net/minecraft/src/Packet101CloseWindow.java new file mode 100644 index 0000000..033c85e --- /dev/null +++ b/src/net/minecraft/src/Packet101CloseWindow.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet101CloseWindow extends Packet { + public int windowId; + + public Packet101CloseWindow() { + } + + public Packet101CloseWindow(int var1) { + this.windowId = var1; + } + + public void processPacket(NetHandler var1) { + var1.handleCloseWindow(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.windowId = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.windowId); + } + + public int getPacketSize() { + return 1; + } +} diff --git a/src/net/minecraft/src/Packet102WindowClick.java b/src/net/minecraft/src/Packet102WindowClick.java new file mode 100644 index 0000000..831979a --- /dev/null +++ b/src/net/minecraft/src/Packet102WindowClick.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet102WindowClick extends Packet { + public int window_Id; + public int inventorySlot; + public int mouseClick; + public short action; + public ItemStack itemStack; + public int holdingShift; + + public Packet102WindowClick() { + } + + public Packet102WindowClick(int var1, int var2, int var3, int var4, ItemStack var5, short var6) { + this.window_Id = var1; + this.inventorySlot = var2; + this.mouseClick = var3; + this.itemStack = var5 != null ? var5.copy() : null; + this.action = var6; + this.holdingShift = var4; + } + + public void processPacket(NetHandler var1) { + var1.handleWindowClick(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.window_Id = var1.readByte(); + this.inventorySlot = var1.readShort(); + this.mouseClick = var1.readByte(); + this.action = var1.readShort(); + this.holdingShift = var1.readByte(); + this.itemStack = readItemStack(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.window_Id); + var1.writeShort(this.inventorySlot); + var1.writeByte(this.mouseClick); + var1.writeShort(this.action); + var1.writeByte(this.holdingShift); + writeItemStack(this.itemStack, var1); + } + + public int getPacketSize() { + return 11; + } +} diff --git a/src/net/minecraft/src/Packet103SetSlot.java b/src/net/minecraft/src/Packet103SetSlot.java new file mode 100644 index 0000000..2043c2c --- /dev/null +++ b/src/net/minecraft/src/Packet103SetSlot.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet103SetSlot extends Packet { + public int windowId; + public int itemSlot; + public ItemStack myItemStack; + + public Packet103SetSlot() { + } + + public Packet103SetSlot(int var1, int var2, ItemStack var3) { + this.windowId = var1; + this.itemSlot = var2; + this.myItemStack = var3 == null ? var3 : var3.copy(); + } + + public void processPacket(NetHandler var1) { + var1.handleSetSlot(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.windowId = var1.readByte(); + this.itemSlot = var1.readShort(); + this.myItemStack = readItemStack(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.windowId); + var1.writeShort(this.itemSlot); + writeItemStack(this.myItemStack, var1); + } + + public int getPacketSize() { + return 8; + } +} diff --git a/src/net/minecraft/src/Packet104WindowItems.java b/src/net/minecraft/src/Packet104WindowItems.java new file mode 100644 index 0000000..4f46c1e --- /dev/null +++ b/src/net/minecraft/src/Packet104WindowItems.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.List; + +public class Packet104WindowItems extends Packet { + public int windowId; + public ItemStack[] itemStack; + + public Packet104WindowItems() { + } + + public Packet104WindowItems(int var1, List var2) { + this.windowId = var1; + this.itemStack = new ItemStack[var2.size()]; + + for(int var3 = 0; var3 < this.itemStack.length; ++var3) { + ItemStack var4 = (ItemStack)var2.get(var3); + this.itemStack[var3] = var4 == null ? null : var4.copy(); + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.windowId = var1.readByte(); + short var2 = var1.readShort(); + this.itemStack = new ItemStack[var2]; + + for(int var3 = 0; var3 < var2; ++var3) { + this.itemStack[var3] = readItemStack(var1); + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.windowId); + var1.writeShort(this.itemStack.length); + + for(int var2 = 0; var2 < this.itemStack.length; ++var2) { + writeItemStack(this.itemStack[var2], var1); + } + + } + + public void processPacket(NetHandler var1) { + var1.handleWindowItems(this); + } + + public int getPacketSize() { + return 3 + this.itemStack.length * 5; + } +} diff --git a/src/net/minecraft/src/Packet105UpdateProgressbar.java b/src/net/minecraft/src/Packet105UpdateProgressbar.java new file mode 100644 index 0000000..8b6ee53 --- /dev/null +++ b/src/net/minecraft/src/Packet105UpdateProgressbar.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet105UpdateProgressbar extends Packet { + public int windowId; + public int progressBar; + public int progressBarValue; + + public Packet105UpdateProgressbar() { + } + + public Packet105UpdateProgressbar(int var1, int var2, int var3) { + this.windowId = var1; + this.progressBar = var2; + this.progressBarValue = var3; + } + + public void processPacket(NetHandler var1) { + var1.handleUpdateProgressbar(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.windowId = var1.readByte(); + this.progressBar = var1.readShort(); + this.progressBarValue = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.windowId); + var1.writeShort(this.progressBar); + var1.writeShort(this.progressBarValue); + } + + public int getPacketSize() { + return 5; + } +} diff --git a/src/net/minecraft/src/Packet106Transaction.java b/src/net/minecraft/src/Packet106Transaction.java new file mode 100644 index 0000000..5527024 --- /dev/null +++ b/src/net/minecraft/src/Packet106Transaction.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet106Transaction extends Packet { + public int windowId; + public short shortWindowId; + public boolean accepted; + + public Packet106Transaction() { + } + + public Packet106Transaction(int var1, short var2, boolean var3) { + this.windowId = var1; + this.shortWindowId = var2; + this.accepted = var3; + } + + public void processPacket(NetHandler var1) { + var1.handleTransaction(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.windowId = var1.readByte(); + this.shortWindowId = var1.readShort(); + this.accepted = var1.readByte() != 0; + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.windowId); + var1.writeShort(this.shortWindowId); + var1.writeByte(this.accepted ? 1 : 0); + } + + public int getPacketSize() { + return 4; + } +} diff --git a/src/net/minecraft/src/Packet107CreativeSetSlot.java b/src/net/minecraft/src/Packet107CreativeSetSlot.java new file mode 100644 index 0000000..0011607 --- /dev/null +++ b/src/net/minecraft/src/Packet107CreativeSetSlot.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet107CreativeSetSlot extends Packet { + public int slot; + public ItemStack itemStack; + + public Packet107CreativeSetSlot() { + } + + public Packet107CreativeSetSlot(int var1, ItemStack var2) { + this.slot = var1; + this.itemStack = var2 != null ? var2.copy() : null; + } + + public void processPacket(NetHandler var1) { + var1.handleCreativeSetSlot(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.slot = var1.readShort(); + this.itemStack = readItemStack(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeShort(this.slot); + writeItemStack(this.itemStack, var1); + } + + public int getPacketSize() { + return 8; + } +} diff --git a/src/net/minecraft/src/Packet108EnchantItem.java b/src/net/minecraft/src/Packet108EnchantItem.java new file mode 100644 index 0000000..b02e6dc --- /dev/null +++ b/src/net/minecraft/src/Packet108EnchantItem.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet108EnchantItem extends Packet { + public int windowId; + public int enchantment; + + public Packet108EnchantItem() { + } + + public Packet108EnchantItem(int var1, int var2) { + this.windowId = var1; + this.enchantment = var2; + } + + public void processPacket(NetHandler var1) { + var1.handleEnchantItem(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.windowId = var1.readByte(); + this.enchantment = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.windowId); + var1.writeByte(this.enchantment); + } + + public int getPacketSize() { + return 2; + } +} diff --git a/src/net/minecraft/src/Packet10Flying.java b/src/net/minecraft/src/Packet10Flying.java new file mode 100644 index 0000000..6171cad --- /dev/null +++ b/src/net/minecraft/src/Packet10Flying.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet10Flying extends Packet { + public double xPosition; + public double yPosition; + public double zPosition; + public double stance; + public float yaw; + public float pitch; + public boolean onGround; + public boolean moving; + public boolean rotating; + + public Packet10Flying() { + } + + public Packet10Flying(boolean var1) { + this.onGround = var1; + } + + public void processPacket(NetHandler var1) { + var1.handleFlying(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.onGround = var1.read() != 0; + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.write(this.onGround ? 1 : 0); + } + + public int getPacketSize() { + return 1; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + return true; + } +} diff --git a/src/net/minecraft/src/Packet11PlayerPosition.java b/src/net/minecraft/src/Packet11PlayerPosition.java new file mode 100644 index 0000000..c896bac --- /dev/null +++ b/src/net/minecraft/src/Packet11PlayerPosition.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet11PlayerPosition extends Packet10Flying { + public Packet11PlayerPosition() { + this.moving = true; + } + + public Packet11PlayerPosition(double var1, double var3, double var5, double var7, boolean var9) { + this.xPosition = var1; + this.yPosition = var3; + this.stance = var5; + this.zPosition = var7; + this.onGround = var9; + this.moving = true; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readDouble(); + this.yPosition = var1.readDouble(); + this.stance = var1.readDouble(); + this.zPosition = var1.readDouble(); + super.readPacketData(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeDouble(this.xPosition); + var1.writeDouble(this.yPosition); + var1.writeDouble(this.stance); + var1.writeDouble(this.zPosition); + super.writePacketData(var1); + } + + public int getPacketSize() { + return 33; + } +} diff --git a/src/net/minecraft/src/Packet12PlayerLook.java b/src/net/minecraft/src/Packet12PlayerLook.java new file mode 100644 index 0000000..deba4ad --- /dev/null +++ b/src/net/minecraft/src/Packet12PlayerLook.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet12PlayerLook extends Packet10Flying { + public Packet12PlayerLook() { + this.rotating = true; + } + + public Packet12PlayerLook(float var1, float var2, boolean var3) { + this.yaw = var1; + this.pitch = var2; + this.onGround = var3; + this.rotating = true; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.yaw = var1.readFloat(); + this.pitch = var1.readFloat(); + super.readPacketData(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeFloat(this.yaw); + var1.writeFloat(this.pitch); + super.writePacketData(var1); + } + + public int getPacketSize() { + return 9; + } +} diff --git a/src/net/minecraft/src/Packet130UpdateSign.java b/src/net/minecraft/src/Packet130UpdateSign.java new file mode 100644 index 0000000..9d3b6a5 --- /dev/null +++ b/src/net/minecraft/src/Packet130UpdateSign.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet130UpdateSign extends Packet { + public int xPosition; + public int yPosition; + public int zPosition; + public String[] signLines; + + public Packet130UpdateSign() { + this.isChunkDataPacket = true; + } + + public Packet130UpdateSign(int var1, int var2, int var3, String[] var4) { + this.isChunkDataPacket = true; + this.xPosition = var1; + this.yPosition = var2; + this.zPosition = var3; + this.signLines = new String[]{var4[0], var4[1], var4[2], var4[3]}; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readInt(); + this.yPosition = var1.readShort(); + this.zPosition = var1.readInt(); + this.signLines = new String[4]; + + for(int var2 = 0; var2 < 4; ++var2) { + this.signLines[var2] = readString(var1, 15); + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xPosition); + var1.writeShort(this.yPosition); + var1.writeInt(this.zPosition); + + for(int var2 = 0; var2 < 4; ++var2) { + writeString(this.signLines[var2], var1); + } + + } + + public void processPacket(NetHandler var1) { + var1.handleUpdateSign(this); + } + + public int getPacketSize() { + int var1 = 0; + + for(int var2 = 0; var2 < 4; ++var2) { + var1 += this.signLines[var2].length(); + } + + return var1; + } +} diff --git a/src/net/minecraft/src/Packet131MapData.java b/src/net/minecraft/src/Packet131MapData.java new file mode 100644 index 0000000..6d687d3 --- /dev/null +++ b/src/net/minecraft/src/Packet131MapData.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet131MapData extends Packet { + public short itemID; + public short uniqueID; + public byte[] itemData; + + public Packet131MapData() { + this.isChunkDataPacket = true; + } + + public Packet131MapData(short var1, short var2, byte[] var3) { + this.isChunkDataPacket = true; + this.itemID = var1; + this.uniqueID = var2; + this.itemData = var3; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.itemID = var1.readShort(); + this.uniqueID = var1.readShort(); + this.itemData = new byte[var1.readUnsignedShort()]; + var1.readFully(this.itemData); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeShort(this.itemID); + var1.writeShort(this.uniqueID); + var1.writeShort(this.itemData.length); + var1.write(this.itemData); + } + + public void processPacket(NetHandler var1) { + var1.handleMapData(this); + } + + public int getPacketSize() { + return 4 + this.itemData.length; + } +} diff --git a/src/net/minecraft/src/Packet132TileEntityData.java b/src/net/minecraft/src/Packet132TileEntityData.java new file mode 100644 index 0000000..c6710da --- /dev/null +++ b/src/net/minecraft/src/Packet132TileEntityData.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet132TileEntityData extends Packet { + public int xPosition; + public int yPosition; + public int zPosition; + public int actionType; + public NBTTagCompound customParam1; + + public Packet132TileEntityData() { + this.isChunkDataPacket = true; + } + + public Packet132TileEntityData(int var1, int var2, int var3, int var4, NBTTagCompound var5) { + this.isChunkDataPacket = true; + this.xPosition = var1; + this.yPosition = var2; + this.zPosition = var3; + this.actionType = var4; + this.customParam1 = var5; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readInt(); + this.yPosition = var1.readShort(); + this.zPosition = var1.readInt(); + this.actionType = var1.readByte(); + this.customParam1 = readNBTTagCompound(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xPosition); + var1.writeShort(this.yPosition); + var1.writeInt(this.zPosition); + var1.writeByte((byte)this.actionType); + writeNBTTagCompound(this.customParam1, var1); + } + + public void processPacket(NetHandler var1) { + var1.handleTileEntityData(this); + } + + public int getPacketSize() { + return 25; + } +} diff --git a/src/net/minecraft/src/Packet13PlayerLookMove.java b/src/net/minecraft/src/Packet13PlayerLookMove.java new file mode 100644 index 0000000..f4fafeb --- /dev/null +++ b/src/net/minecraft/src/Packet13PlayerLookMove.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet13PlayerLookMove extends Packet10Flying { + public Packet13PlayerLookMove() { + this.rotating = true; + this.moving = true; + } + + public Packet13PlayerLookMove(double var1, double var3, double var5, double var7, float var9, float var10, boolean var11) { + this.xPosition = var1; + this.yPosition = var3; + this.stance = var5; + this.zPosition = var7; + this.yaw = var9; + this.pitch = var10; + this.onGround = var11; + this.rotating = true; + this.moving = true; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readDouble(); + this.yPosition = var1.readDouble(); + this.stance = var1.readDouble(); + this.zPosition = var1.readDouble(); + this.yaw = var1.readFloat(); + this.pitch = var1.readFloat(); + super.readPacketData(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeDouble(this.xPosition); + var1.writeDouble(this.yPosition); + var1.writeDouble(this.stance); + var1.writeDouble(this.zPosition); + var1.writeFloat(this.yaw); + var1.writeFloat(this.pitch); + super.writePacketData(var1); + } + + public int getPacketSize() { + return 41; + } +} diff --git a/src/net/minecraft/src/Packet14BlockDig.java b/src/net/minecraft/src/Packet14BlockDig.java new file mode 100644 index 0000000..6943748 --- /dev/null +++ b/src/net/minecraft/src/Packet14BlockDig.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet14BlockDig extends Packet { + public int xPosition; + public int yPosition; + public int zPosition; + public int face; + public int status; + + public Packet14BlockDig() { + } + + public Packet14BlockDig(int var1, int var2, int var3, int var4, int var5) { + this.status = var1; + this.xPosition = var2; + this.yPosition = var3; + this.zPosition = var4; + this.face = var5; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.status = var1.read(); + this.xPosition = var1.readInt(); + this.yPosition = var1.read(); + this.zPosition = var1.readInt(); + this.face = var1.read(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.write(this.status); + var1.writeInt(this.xPosition); + var1.write(this.yPosition); + var1.writeInt(this.zPosition); + var1.write(this.face); + } + + public void processPacket(NetHandler var1) { + var1.handleBlockDig(this); + } + + public int getPacketSize() { + return 11; + } +} diff --git a/src/net/minecraft/src/Packet15Place.java b/src/net/minecraft/src/Packet15Place.java new file mode 100644 index 0000000..381a470 --- /dev/null +++ b/src/net/minecraft/src/Packet15Place.java @@ -0,0 +1,92 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet15Place extends Packet { + private int xPosition; + private int yPosition; + private int zPosition; + private int direction; + private ItemStack itemStack; + private float xOffset; + private float yOffset; + private float zOffset; + + public Packet15Place() { + } + + public Packet15Place(int var1, int var2, int var3, int var4, ItemStack var5, float var6, float var7, float var8) { + this.xPosition = var1; + this.yPosition = var2; + this.zPosition = var3; + this.direction = var4; + this.itemStack = var5 != null ? var5.copy() : null; + this.xOffset = var6; + this.yOffset = var7; + this.zOffset = var8; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readInt(); + this.yPosition = var1.read(); + this.zPosition = var1.readInt(); + this.direction = var1.read(); + this.itemStack = readItemStack(var1); + this.xOffset = (float)var1.read() / 16.0F; + this.yOffset = (float)var1.read() / 16.0F; + this.zOffset = (float)var1.read() / 16.0F; + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xPosition); + var1.write(this.yPosition); + var1.writeInt(this.zPosition); + var1.write(this.direction); + writeItemStack(this.itemStack, var1); + var1.write((int)(this.xOffset * 16.0F)); + var1.write((int)(this.yOffset * 16.0F)); + var1.write((int)(this.zOffset * 16.0F)); + } + + public void processPacket(NetHandler var1) { + var1.handlePlace(this); + } + + public int getPacketSize() { + return 19; + } + + public int getXPosition() { + return this.xPosition; + } + + public int getYPosition() { + return this.yPosition; + } + + public int getZPosition() { + return this.zPosition; + } + + public int getDirection() { + return this.direction; + } + + public ItemStack getItemStack() { + return this.itemStack; + } + + public float getXOffset() { + return this.xOffset; + } + + public float getYOffset() { + return this.yOffset; + } + + public float getZOffset() { + return this.zOffset; + } +} diff --git a/src/net/minecraft/src/Packet16BlockItemSwitch.java b/src/net/minecraft/src/Packet16BlockItemSwitch.java new file mode 100644 index 0000000..597e9a8 --- /dev/null +++ b/src/net/minecraft/src/Packet16BlockItemSwitch.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet16BlockItemSwitch extends Packet { + public int id; + + public Packet16BlockItemSwitch() { + } + + public Packet16BlockItemSwitch(int var1) { + this.id = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.id = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeShort(this.id); + } + + public void processPacket(NetHandler var1) { + var1.handleBlockItemSwitch(this); + } + + public int getPacketSize() { + return 2; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + return true; + } +} diff --git a/src/net/minecraft/src/Packet17Sleep.java b/src/net/minecraft/src/Packet17Sleep.java new file mode 100644 index 0000000..80ba77c --- /dev/null +++ b/src/net/minecraft/src/Packet17Sleep.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet17Sleep extends Packet { + public int entityID; + public int bedX; + public int bedY; + public int bedZ; + public int field_73622_e; + + public Packet17Sleep() { + } + + public Packet17Sleep(Entity var1, int var2, int var3, int var4, int var5) { + this.field_73622_e = var2; + this.bedX = var3; + this.bedY = var4; + this.bedZ = var5; + this.entityID = var1.entityId; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityID = var1.readInt(); + this.field_73622_e = var1.readByte(); + this.bedX = var1.readInt(); + this.bedY = var1.readByte(); + this.bedZ = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityID); + var1.writeByte(this.field_73622_e); + var1.writeInt(this.bedX); + var1.writeByte(this.bedY); + var1.writeInt(this.bedZ); + } + + public void processPacket(NetHandler var1) { + var1.handleSleep(this); + } + + public int getPacketSize() { + return 14; + } +} diff --git a/src/net/minecraft/src/Packet18Animation.java b/src/net/minecraft/src/Packet18Animation.java new file mode 100644 index 0000000..fa5ef6f --- /dev/null +++ b/src/net/minecraft/src/Packet18Animation.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet18Animation extends Packet { + public int entityId; + public int animate; + + public Packet18Animation() { + } + + public Packet18Animation(Entity var1, int var2) { + this.entityId = var1.entityId; + this.animate = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.animate = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeByte(this.animate); + } + + public void processPacket(NetHandler var1) { + var1.handleAnimation(this); + } + + public int getPacketSize() { + return 5; + } +} diff --git a/src/net/minecraft/src/Packet19EntityAction.java b/src/net/minecraft/src/Packet19EntityAction.java new file mode 100644 index 0000000..19c71ee --- /dev/null +++ b/src/net/minecraft/src/Packet19EntityAction.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet19EntityAction extends Packet { + public int entityId; + public int state; + + public Packet19EntityAction() { + } + + public Packet19EntityAction(Entity var1, int var2) { + this.entityId = var1.entityId; + this.state = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.state = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeByte(this.state); + } + + public void processPacket(NetHandler var1) { + var1.handleEntityAction(this); + } + + public int getPacketSize() { + return 5; + } +} diff --git a/src/net/minecraft/src/Packet1Login.java b/src/net/minecraft/src/Packet1Login.java new file mode 100644 index 0000000..dec3980 --- /dev/null +++ b/src/net/minecraft/src/Packet1Login.java @@ -0,0 +1,76 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet1Login extends Packet { + public int clientEntityId = 0; + public WorldType terrainType; + public boolean hardcoreMode; + public EnumGameType gameType; + public int dimension; + public byte difficultySetting; + public byte worldHeight; + public byte maxPlayers; + + public Packet1Login() { + } + + public Packet1Login(int var1, WorldType var2, EnumGameType var3, boolean var4, int var5, int var6, int var7, int var8) { + this.clientEntityId = var1; + this.terrainType = var2; + this.dimension = var5; + this.difficultySetting = (byte)var6; + this.gameType = var3; + this.worldHeight = (byte)var7; + this.maxPlayers = (byte)var8; + this.hardcoreMode = var4; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.clientEntityId = var1.readInt(); + String var2 = readString(var1, 16); + this.terrainType = WorldType.parseWorldType(var2); + if(this.terrainType == null) { + this.terrainType = WorldType.DEFAULT; + } + + byte var3 = var1.readByte(); + this.hardcoreMode = (var3 & 8) == 8; + int var4 = var3 & -9; + this.gameType = EnumGameType.getByID(var4); + this.dimension = var1.readByte(); + this.difficultySetting = var1.readByte(); + this.worldHeight = var1.readByte(); + this.maxPlayers = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.clientEntityId); + writeString(this.terrainType == null ? "" : this.terrainType.getWorldTypeName(), var1); + int var2 = this.gameType.getID(); + if(this.hardcoreMode) { + var2 |= 8; + } + + var1.writeByte(var2); + var1.writeByte(this.dimension); + var1.writeByte(this.difficultySetting); + var1.writeByte(this.worldHeight); + var1.writeByte(this.maxPlayers); + } + + public void processPacket(NetHandler var1) { + var1.handleLogin(this); + } + + public int getPacketSize() { + int var1 = 0; + if(this.terrainType != null) { + var1 = this.terrainType.getWorldTypeName().length(); + } + + return 6 + 2 * var1 + 4 + 4 + 1 + 1 + 1; + } +} diff --git a/src/net/minecraft/src/Packet200Statistic.java b/src/net/minecraft/src/Packet200Statistic.java new file mode 100644 index 0000000..3bb3455 --- /dev/null +++ b/src/net/minecraft/src/Packet200Statistic.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet200Statistic extends Packet { + public int statisticId; + public int amount; + + public Packet200Statistic() { + } + + public Packet200Statistic(int var1, int var2) { + this.statisticId = var1; + this.amount = var2; + } + + public void processPacket(NetHandler var1) { + var1.handleStatistic(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.statisticId = var1.readInt(); + this.amount = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.statisticId); + var1.writeByte(this.amount); + } + + public int getPacketSize() { + return 6; + } + + public boolean canProcessAsync() { + return true; + } +} diff --git a/src/net/minecraft/src/Packet201PlayerInfo.java b/src/net/minecraft/src/Packet201PlayerInfo.java new file mode 100644 index 0000000..fe230fd --- /dev/null +++ b/src/net/minecraft/src/Packet201PlayerInfo.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet201PlayerInfo extends Packet { + public String playerName; + public boolean isConnected; + public int ping; + + public Packet201PlayerInfo() { + } + + public Packet201PlayerInfo(String var1, boolean var2, int var3) { + this.playerName = var1; + this.isConnected = var2; + this.ping = var3; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.playerName = readString(var1, 16); + this.isConnected = var1.readByte() != 0; + this.ping = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeString(this.playerName, var1); + var1.writeByte(this.isConnected ? 1 : 0); + var1.writeShort(this.ping); + } + + public void processPacket(NetHandler var1) { + var1.handlePlayerInfo(this); + } + + public int getPacketSize() { + return this.playerName.length() + 2 + 1 + 2; + } +} diff --git a/src/net/minecraft/src/Packet202PlayerAbilities.java b/src/net/minecraft/src/Packet202PlayerAbilities.java new file mode 100644 index 0000000..cc62c09 --- /dev/null +++ b/src/net/minecraft/src/Packet202PlayerAbilities.java @@ -0,0 +1,123 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet202PlayerAbilities extends Packet { + private boolean disableDamage = false; + private boolean isFlying = false; + private boolean allowFlying = false; + private boolean isCreativeMode = false; + private float flySpeed; + private float walkSpeed; + + public Packet202PlayerAbilities() { + } + + public Packet202PlayerAbilities(PlayerCapabilities var1) { + this.setDisableDamage(var1.disableDamage); + this.setFlying(var1.isFlying); + this.setAllowFlying(var1.allowFlying); + this.setCreativeMode(var1.isCreativeMode); + this.setFlySpeed(var1.getFlySpeed()); + this.setWalkSpeed(var1.getWalkSpeed()); + } + + public void readPacketData(DataInputStream var1) throws IOException { + byte var2 = var1.readByte(); + this.setDisableDamage((var2 & 1) > 0); + this.setFlying((var2 & 2) > 0); + this.setAllowFlying((var2 & 4) > 0); + this.setCreativeMode((var2 & 8) > 0); + this.setFlySpeed((float)var1.readByte() / 255.0F); + this.setWalkSpeed((float)var1.readByte() / 255.0F); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + byte var2 = 0; + if(this.getDisableDamage()) { + var2 = (byte)(var2 | 1); + } + + if(this.getFlying()) { + var2 = (byte)(var2 | 2); + } + + if(this.getAllowFlying()) { + var2 = (byte)(var2 | 4); + } + + if(this.isCreativeMode()) { + var2 = (byte)(var2 | 8); + } + + var1.writeByte(var2); + var1.writeByte((int)(this.flySpeed * 255.0F)); + var1.writeByte((int)(this.walkSpeed * 255.0F)); + } + + public void processPacket(NetHandler var1) { + var1.handlePlayerAbilities(this); + } + + public int getPacketSize() { + return 2; + } + + public boolean getDisableDamage() { + return this.disableDamage; + } + + public void setDisableDamage(boolean var1) { + this.disableDamage = var1; + } + + public boolean getFlying() { + return this.isFlying; + } + + public void setFlying(boolean var1) { + this.isFlying = var1; + } + + public boolean getAllowFlying() { + return this.allowFlying; + } + + public void setAllowFlying(boolean var1) { + this.allowFlying = var1; + } + + public boolean isCreativeMode() { + return this.isCreativeMode; + } + + public void setCreativeMode(boolean var1) { + this.isCreativeMode = var1; + } + + public float getFlySpeed() { + return this.flySpeed; + } + + public void setFlySpeed(float var1) { + this.flySpeed = var1; + } + + public float getWalkSpeed() { + return this.walkSpeed; + } + + public void setWalkSpeed(float var1) { + this.walkSpeed = var1; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + return true; + } +} diff --git a/src/net/minecraft/src/Packet203AutoComplete.java b/src/net/minecraft/src/Packet203AutoComplete.java new file mode 100644 index 0000000..0cff5bd --- /dev/null +++ b/src/net/minecraft/src/Packet203AutoComplete.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet203AutoComplete extends Packet { + private String text; + + public Packet203AutoComplete() { + } + + public Packet203AutoComplete(String var1) { + this.text = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.text = readString(var1, Packet3Chat.maxChatLength); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeString(this.text, var1); + } + + public void processPacket(NetHandler var1) { + var1.handleAutoComplete(this); + } + + public int getPacketSize() { + return 2 + this.text.length() * 2; + } + + public String getText() { + return this.text; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + return true; + } +} diff --git a/src/net/minecraft/src/Packet204ClientInfo.java b/src/net/minecraft/src/Packet204ClientInfo.java new file mode 100644 index 0000000..b3cb0ed --- /dev/null +++ b/src/net/minecraft/src/Packet204ClientInfo.java @@ -0,0 +1,84 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet204ClientInfo extends Packet { + private String language; + private int renderDistance; + private int chatVisisble; + private boolean chatColours; + private int gameDifficulty; + private boolean showCape; + + public Packet204ClientInfo() { + } + + public Packet204ClientInfo(String var1, int var2, int var3, boolean var4, int var5, boolean var6) { + this.language = var1; + this.renderDistance = var2; + this.chatVisisble = var3; + this.chatColours = var4; + this.gameDifficulty = var5; + this.showCape = var6; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.language = readString(var1, 7); + this.renderDistance = var1.readByte(); + byte var2 = var1.readByte(); + this.chatVisisble = var2 & 7; + this.chatColours = (var2 & 8) == 8; + this.gameDifficulty = var1.readByte(); + this.showCape = var1.readBoolean(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeString(this.language, var1); + var1.writeByte(this.renderDistance); + var1.writeByte(this.chatVisisble | (this.chatColours ? 1 : 0) << 3); + var1.writeByte(this.gameDifficulty); + var1.writeBoolean(this.showCape); + } + + public void processPacket(NetHandler var1) { + var1.handleClientInfo(this); + } + + public int getPacketSize() { + return 7; + } + + public String getLanguage() { + return this.language; + } + + public int getRenderDistance() { + return this.renderDistance; + } + + public int getChatVisibility() { + return this.chatVisisble; + } + + public boolean getChatColours() { + return this.chatColours; + } + + public int getDifficulty() { + return this.gameDifficulty; + } + + public boolean getShowCape() { + return this.showCape; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + return true; + } +} diff --git a/src/net/minecraft/src/Packet205ClientCommand.java b/src/net/minecraft/src/Packet205ClientCommand.java new file mode 100644 index 0000000..8d68138 --- /dev/null +++ b/src/net/minecraft/src/Packet205ClientCommand.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet205ClientCommand extends Packet { + public int forceRespawn; + + public Packet205ClientCommand() { + } + + public Packet205ClientCommand(int var1) { + this.forceRespawn = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.forceRespawn = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.forceRespawn & 255); + } + + public void processPacket(NetHandler var1) { + var1.handleClientCommand(this); + } + + public int getPacketSize() { + return 1; + } +} diff --git a/src/net/minecraft/src/Packet206SetObjective.java b/src/net/minecraft/src/Packet206SetObjective.java new file mode 100644 index 0000000..9a888a6 --- /dev/null +++ b/src/net/minecraft/src/Packet206SetObjective.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet206SetObjective extends Packet { + public String objectiveName; + public String objectiveDisplayName; + public int change; + + public Packet206SetObjective() { + } + + public Packet206SetObjective(ScoreObjective var1, int var2) { + this.objectiveName = var1.getName(); + this.objectiveDisplayName = var1.getDisplayName(); + this.change = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.objectiveName = readString(var1, 16); + this.objectiveDisplayName = readString(var1, 32); + this.change = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeString(this.objectiveName, var1); + writeString(this.objectiveDisplayName, var1); + var1.writeByte(this.change); + } + + public void processPacket(NetHandler var1) { + var1.handleSetObjective(this); + } + + public int getPacketSize() { + return 2 + this.objectiveName.length() + 2 + this.objectiveDisplayName.length() + 1; + } +} diff --git a/src/net/minecraft/src/Packet207SetScore.java b/src/net/minecraft/src/Packet207SetScore.java new file mode 100644 index 0000000..921a4bd --- /dev/null +++ b/src/net/minecraft/src/Packet207SetScore.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet207SetScore extends Packet { + public String itemName = ""; + public String scoreName = ""; + public int value = 0; + public int updateOrRemove = 0; + + public Packet207SetScore() { + } + + public Packet207SetScore(Score var1, int var2) { + this.itemName = var1.func_96653_e(); + this.scoreName = var1.func_96645_d().getName(); + this.value = var1.func_96652_c(); + this.updateOrRemove = var2; + } + + public Packet207SetScore(String var1) { + this.itemName = var1; + this.scoreName = ""; + this.value = 0; + this.updateOrRemove = 1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.itemName = readString(var1, 16); + this.updateOrRemove = var1.readByte(); + if(this.updateOrRemove != 1) { + this.scoreName = readString(var1, 16); + this.value = var1.readInt(); + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeString(this.itemName, var1); + var1.writeByte(this.updateOrRemove); + if(this.updateOrRemove != 1) { + writeString(this.scoreName, var1); + var1.writeInt(this.value); + } + + } + + public void processPacket(NetHandler var1) { + var1.handleSetScore(this); + } + + public int getPacketSize() { + return 2 + this.itemName.length() + 2 + this.scoreName.length() + 4 + 1; + } +} diff --git a/src/net/minecraft/src/Packet208SetDisplayObjective.java b/src/net/minecraft/src/Packet208SetDisplayObjective.java new file mode 100644 index 0000000..6c68d6a --- /dev/null +++ b/src/net/minecraft/src/Packet208SetDisplayObjective.java @@ -0,0 +1,41 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet208SetDisplayObjective extends Packet { + public int scoreboardPosition; + public String scoreName; + + public Packet208SetDisplayObjective() { + } + + public Packet208SetDisplayObjective(int var1, ScoreObjective var2) { + this.scoreboardPosition = var1; + if(var2 == null) { + this.scoreName = ""; + } else { + this.scoreName = var2.getName(); + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.scoreboardPosition = var1.readByte(); + this.scoreName = readString(var1, 16); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.scoreboardPosition); + writeString(this.scoreName, var1); + } + + public void processPacket(NetHandler var1) { + var1.handleSetDisplayObjective(this); + } + + public int getPacketSize() { + return 3 + this.scoreName.length(); + } +} diff --git a/src/net/minecraft/src/Packet209SetPlayerTeam.java b/src/net/minecraft/src/Packet209SetPlayerTeam.java new file mode 100644 index 0000000..d85d7b2 --- /dev/null +++ b/src/net/minecraft/src/Packet209SetPlayerTeam.java @@ -0,0 +1,99 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Iterator; + +public class Packet209SetPlayerTeam extends Packet { + public String teamName = ""; + public String teamDisplayName = ""; + public String teamPrefix = ""; + public String teamSuffix = ""; + public Collection playerNames = new ArrayList(); + public int mode = 0; + public int friendlyFire; + + public Packet209SetPlayerTeam() { + } + + public Packet209SetPlayerTeam(ScorePlayerTeam var1, int var2) { + this.teamName = var1.func_96661_b(); + this.mode = var2; + if(var2 == 0 || var2 == 2) { + this.teamDisplayName = var1.func_96669_c(); + this.teamPrefix = var1.func_96668_e(); + this.teamSuffix = var1.func_96663_f(); + this.friendlyFire = var1.func_98299_i(); + } + + if(var2 == 0) { + this.playerNames.addAll(var1.getMembershipCollection()); + } + + } + + public Packet209SetPlayerTeam(ScorePlayerTeam var1, Collection var2, int var3) { + if(var3 != 3 && var3 != 4) { + throw new IllegalArgumentException("Method must be join or leave for player constructor"); + } else if(var2 != null && !var2.isEmpty()) { + this.mode = var3; + this.teamName = var1.func_96661_b(); + this.playerNames.addAll(var2); + } else { + throw new IllegalArgumentException("Players cannot be null/empty"); + } + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.teamName = readString(var1, 16); + this.mode = var1.readByte(); + if(this.mode == 0 || this.mode == 2) { + this.teamDisplayName = readString(var1, 32); + this.teamPrefix = readString(var1, 16); + this.teamSuffix = readString(var1, 16); + this.friendlyFire = var1.readByte(); + } + + if(this.mode == 0 || this.mode == 3 || this.mode == 4) { + short var2 = var1.readShort(); + + for(int var3 = 0; var3 < var2; ++var3) { + this.playerNames.add(readString(var1, 16)); + } + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeString(this.teamName, var1); + var1.writeByte(this.mode); + if(this.mode == 0 || this.mode == 2) { + writeString(this.teamDisplayName, var1); + writeString(this.teamPrefix, var1); + writeString(this.teamSuffix, var1); + var1.writeByte(this.friendlyFire); + } + + if(this.mode == 0 || this.mode == 3 || this.mode == 4) { + var1.writeShort(this.playerNames.size()); + Iterator var2 = this.playerNames.iterator(); + + while(var2.hasNext()) { + String var3 = (String)var2.next(); + writeString(var3, var1); + } + } + + } + + public void processPacket(NetHandler var1) { + var1.handleSetPlayerTeam(this); + } + + public int getPacketSize() { + return 3 + this.teamName.length(); + } +} diff --git a/src/net/minecraft/src/Packet20NamedEntitySpawn.java b/src/net/minecraft/src/Packet20NamedEntitySpawn.java new file mode 100644 index 0000000..6de4d25 --- /dev/null +++ b/src/net/minecraft/src/Packet20NamedEntitySpawn.java @@ -0,0 +1,75 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.List; + +public class Packet20NamedEntitySpawn extends Packet { + public int entityId; + public String name; + public int xPosition; + public int yPosition; + public int zPosition; + public byte rotation; + public byte pitch; + public int currentItem; + private DataWatcher metadata; + private List metadataWatchableObjects; + + public Packet20NamedEntitySpawn() { + } + + public Packet20NamedEntitySpawn(EntityPlayer var1) { + this.entityId = var1.entityId; + this.name = var1.username; + this.xPosition = MathHelper.floor_double(var1.posX * 32.0D); + this.yPosition = MathHelper.floor_double(var1.posY * 32.0D); + this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D); + this.rotation = (byte)((int)(var1.rotationYaw * 256.0F / 360.0F)); + this.pitch = (byte)((int)(var1.rotationPitch * 256.0F / 360.0F)); + ItemStack var2 = var1.inventory.getCurrentItem(); + this.currentItem = var2 == null ? 0 : var2.itemID; + this.metadata = var1.getDataWatcher(); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.name = readString(var1, 16); + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + this.rotation = var1.readByte(); + this.pitch = var1.readByte(); + this.currentItem = var1.readShort(); + this.metadataWatchableObjects = DataWatcher.readWatchableObjects(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + writeString(this.name, var1); + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + var1.writeByte(this.rotation); + var1.writeByte(this.pitch); + var1.writeShort(this.currentItem); + this.metadata.writeWatchableObjects(var1); + } + + public void processPacket(NetHandler var1) { + var1.handleNamedEntitySpawn(this); + } + + public int getPacketSize() { + return 28; + } + + public List getWatchedMetadata() { + if(this.metadataWatchableObjects == null) { + this.metadataWatchableObjects = this.metadata.getAllWatched(); + } + + return this.metadataWatchableObjects; + } +} diff --git a/src/net/minecraft/src/Packet22Collect.java b/src/net/minecraft/src/Packet22Collect.java new file mode 100644 index 0000000..b8f1a00 --- /dev/null +++ b/src/net/minecraft/src/Packet22Collect.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet22Collect extends Packet { + public int collectedEntityId; + public int collectorEntityId; + + public Packet22Collect() { + } + + public Packet22Collect(int var1, int var2) { + this.collectedEntityId = var1; + this.collectorEntityId = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.collectedEntityId = var1.readInt(); + this.collectorEntityId = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.collectedEntityId); + var1.writeInt(this.collectorEntityId); + } + + public void processPacket(NetHandler var1) { + var1.handleCollect(this); + } + + public int getPacketSize() { + return 8; + } +} diff --git a/src/net/minecraft/src/Packet23VehicleSpawn.java b/src/net/minecraft/src/Packet23VehicleSpawn.java new file mode 100644 index 0000000..7e05a42 --- /dev/null +++ b/src/net/minecraft/src/Packet23VehicleSpawn.java @@ -0,0 +1,113 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet23VehicleSpawn extends Packet { + public int entityId; + public int xPosition; + public int yPosition; + public int zPosition; + public int speedX; + public int speedY; + public int speedZ; + public int pitch; + public int yaw; + public int type; + public int throwerEntityId; + + public Packet23VehicleSpawn() { + } + + public Packet23VehicleSpawn(Entity var1, int var2) { + this(var1, var2, 0); + } + + public Packet23VehicleSpawn(Entity var1, int var2, int var3) { + this.entityId = var1.entityId; + this.xPosition = MathHelper.floor_double(var1.posX * 32.0D); + this.yPosition = MathHelper.floor_double(var1.posY * 32.0D); + this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D); + this.pitch = MathHelper.floor_float(var1.rotationPitch * 256.0F / 360.0F); + this.yaw = MathHelper.floor_float(var1.rotationYaw * 256.0F / 360.0F); + this.type = var2; + this.throwerEntityId = var3; + if(var3 > 0) { + double var4 = var1.motionX; + double var6 = var1.motionY; + double var8 = var1.motionZ; + double var10 = 3.9D; + if(var4 < -var10) { + var4 = -var10; + } + + if(var6 < -var10) { + var6 = -var10; + } + + if(var8 < -var10) { + var8 = -var10; + } + + if(var4 > var10) { + var4 = var10; + } + + if(var6 > var10) { + var6 = var10; + } + + if(var8 > var10) { + var8 = var10; + } + + this.speedX = (int)(var4 * 8000.0D); + this.speedY = (int)(var6 * 8000.0D); + this.speedZ = (int)(var8 * 8000.0D); + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.type = var1.readByte(); + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + this.pitch = var1.readByte(); + this.yaw = var1.readByte(); + this.throwerEntityId = var1.readInt(); + if(this.throwerEntityId > 0) { + this.speedX = var1.readShort(); + this.speedY = var1.readShort(); + this.speedZ = var1.readShort(); + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeByte(this.type); + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + var1.writeByte(this.pitch); + var1.writeByte(this.yaw); + var1.writeInt(this.throwerEntityId); + if(this.throwerEntityId > 0) { + var1.writeShort(this.speedX); + var1.writeShort(this.speedY); + var1.writeShort(this.speedZ); + } + + } + + public void processPacket(NetHandler var1) { + var1.handleVehicleSpawn(this); + } + + public int getPacketSize() { + return 21 + this.throwerEntityId > 0 ? 6 : 0; + } +} diff --git a/src/net/minecraft/src/Packet24MobSpawn.java b/src/net/minecraft/src/Packet24MobSpawn.java new file mode 100644 index 0000000..6eab8fb --- /dev/null +++ b/src/net/minecraft/src/Packet24MobSpawn.java @@ -0,0 +1,114 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.List; + +public class Packet24MobSpawn extends Packet { + public int entityId; + public int type; + public int xPosition; + public int yPosition; + public int zPosition; + public int velocityX; + public int velocityY; + public int velocityZ; + public byte yaw; + public byte pitch; + public byte headYaw; + private DataWatcher metaData; + private List metadata; + + public Packet24MobSpawn() { + } + + public Packet24MobSpawn(EntityLiving var1) { + this.entityId = var1.entityId; + this.type = (byte)EntityList.getEntityID(var1); + this.xPosition = var1.myEntitySize.multiplyBy32AndRound(var1.posX); + this.yPosition = MathHelper.floor_double(var1.posY * 32.0D); + this.zPosition = var1.myEntitySize.multiplyBy32AndRound(var1.posZ); + this.yaw = (byte)((int)(var1.rotationYaw * 256.0F / 360.0F)); + this.pitch = (byte)((int)(var1.rotationPitch * 256.0F / 360.0F)); + this.headYaw = (byte)((int)(var1.rotationYawHead * 256.0F / 360.0F)); + double var2 = 3.9D; + double var4 = var1.motionX; + double var6 = var1.motionY; + double var8 = var1.motionZ; + if(var4 < -var2) { + var4 = -var2; + } + + if(var6 < -var2) { + var6 = -var2; + } + + if(var8 < -var2) { + var8 = -var2; + } + + if(var4 > var2) { + var4 = var2; + } + + if(var6 > var2) { + var6 = var2; + } + + if(var8 > var2) { + var8 = var2; + } + + this.velocityX = (int)(var4 * 8000.0D); + this.velocityY = (int)(var6 * 8000.0D); + this.velocityZ = (int)(var8 * 8000.0D); + this.metaData = var1.getDataWatcher(); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.type = var1.readByte() & 255; + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + this.yaw = var1.readByte(); + this.pitch = var1.readByte(); + this.headYaw = var1.readByte(); + this.velocityX = var1.readShort(); + this.velocityY = var1.readShort(); + this.velocityZ = var1.readShort(); + this.metadata = DataWatcher.readWatchableObjects(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeByte(this.type & 255); + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + var1.writeByte(this.yaw); + var1.writeByte(this.pitch); + var1.writeByte(this.headYaw); + var1.writeShort(this.velocityX); + var1.writeShort(this.velocityY); + var1.writeShort(this.velocityZ); + this.metaData.writeWatchableObjects(var1); + } + + public void processPacket(NetHandler var1) { + var1.handleMobSpawn(this); + } + + public int getPacketSize() { + return 26; + } + + public List getMetadata() { + if(this.metadata == null) { + this.metadata = this.metaData.getAllWatched(); + } + + return this.metadata; + } +} diff --git a/src/net/minecraft/src/Packet250CustomPayload.java b/src/net/minecraft/src/Packet250CustomPayload.java new file mode 100644 index 0000000..4b520f8 --- /dev/null +++ b/src/net/minecraft/src/Packet250CustomPayload.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet250CustomPayload extends Packet { + public String channel; + public int length; + public byte[] data; + + public Packet250CustomPayload() { + } + + public Packet250CustomPayload(String var1, byte[] var2) { + this.channel = var1; + this.data = var2; + if(var2 != null) { + this.length = var2.length; + if(this.length > Short.MAX_VALUE) { + throw new IllegalArgumentException("Payload may not be larger than 32k"); + } + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.channel = readString(var1, 20); + this.length = var1.readShort(); + if(this.length > 0 && this.length < Short.MAX_VALUE) { + this.data = new byte[this.length]; + var1.readFully(this.data); + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeString(this.channel, var1); + var1.writeShort((short)this.length); + if(this.data != null) { + var1.write(this.data); + } + + } + + public void processPacket(NetHandler var1) { + var1.handleCustomPayload(this); + } + + public int getPacketSize() { + return 2 + this.channel.length() * 2 + 2 + this.length; + } +} diff --git a/src/net/minecraft/src/Packet252SharedKey.java b/src/net/minecraft/src/Packet252SharedKey.java new file mode 100644 index 0000000..d01ea31 --- /dev/null +++ b/src/net/minecraft/src/Packet252SharedKey.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.security.PrivateKey; +import java.security.PublicKey; +import javax.crypto.SecretKey; + +public class Packet252SharedKey extends Packet { + private byte[] sharedSecret = new byte[0]; + private byte[] verifyToken = new byte[0]; + private SecretKey sharedKey; + + public Packet252SharedKey() { + } + + public Packet252SharedKey(SecretKey var1, PublicKey var2, byte[] var3) { + this.sharedKey = var1; + this.sharedSecret = CryptManager.encryptData(var2, var1.getEncoded()); + this.verifyToken = CryptManager.encryptData(var2, var3); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.sharedSecret = readBytesFromStream(var1); + this.verifyToken = readBytesFromStream(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeByteArray(var1, this.sharedSecret); + writeByteArray(var1, this.verifyToken); + } + + public void processPacket(NetHandler var1) { + var1.handleSharedKey(this); + } + + public int getPacketSize() { + return 2 + this.sharedSecret.length + 2 + this.verifyToken.length; + } + + public SecretKey getSharedKey(PrivateKey var1) { + return var1 == null ? this.sharedKey : (this.sharedKey = CryptManager.decryptSharedKey(var1, this.sharedSecret)); + } + + public SecretKey getSharedKey() { + return this.getSharedKey((PrivateKey)null); + } + + public byte[] getVerifyToken(PrivateKey var1) { + return var1 == null ? this.verifyToken : CryptManager.decryptData(var1, this.verifyToken); + } +} diff --git a/src/net/minecraft/src/Packet253ServerAuthData.java b/src/net/minecraft/src/Packet253ServerAuthData.java new file mode 100644 index 0000000..a89a2a6 --- /dev/null +++ b/src/net/minecraft/src/Packet253ServerAuthData.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.security.PublicKey; + +public class Packet253ServerAuthData extends Packet { + private String serverId; + private PublicKey publicKey; + private byte[] verifyToken = new byte[0]; + + public Packet253ServerAuthData() { + } + + public Packet253ServerAuthData(String var1, PublicKey var2, byte[] var3) { + this.serverId = var1; + this.publicKey = var2; + this.verifyToken = var3; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.serverId = readString(var1, 20); + this.publicKey = CryptManager.decodePublicKey(readBytesFromStream(var1)); + this.verifyToken = readBytesFromStream(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeString(this.serverId, var1); + writeByteArray(var1, this.publicKey.getEncoded()); + writeByteArray(var1, this.verifyToken); + } + + public void processPacket(NetHandler var1) { + var1.handleServerAuthData(this); + } + + public int getPacketSize() { + return 2 + this.serverId.length() * 2 + 2 + this.publicKey.getEncoded().length + 2 + this.verifyToken.length; + } + + public String getServerId() { + return this.serverId; + } + + public PublicKey getPublicKey() { + return this.publicKey; + } + + public byte[] getVerifyToken() { + return this.verifyToken; + } +} diff --git a/src/net/minecraft/src/Packet254ServerPing.java b/src/net/minecraft/src/Packet254ServerPing.java new file mode 100644 index 0000000..b9c3d9a --- /dev/null +++ b/src/net/minecraft/src/Packet254ServerPing.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet254ServerPing extends Packet { + public int readSuccessfully = 0; + + public void readPacketData(DataInputStream var1) throws IOException { + try { + this.readSuccessfully = var1.readByte(); + } catch (Throwable var3) { + this.readSuccessfully = 0; + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + } + + public void processPacket(NetHandler var1) { + var1.handleServerPing(this); + } + + public int getPacketSize() { + return 0; + } +} diff --git a/src/net/minecraft/src/Packet255KickDisconnect.java b/src/net/minecraft/src/Packet255KickDisconnect.java new file mode 100644 index 0000000..bdb1227 --- /dev/null +++ b/src/net/minecraft/src/Packet255KickDisconnect.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet255KickDisconnect extends Packet { + public String reason; + + public Packet255KickDisconnect() { + } + + public Packet255KickDisconnect(String var1) { + this.reason = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.reason = readString(var1, 256); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeString(this.reason, var1); + } + + public void processPacket(NetHandler var1) { + var1.handleKickDisconnect(this); + } + + public int getPacketSize() { + return this.reason.length(); + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + return true; + } +} diff --git a/src/net/minecraft/src/Packet25EntityPainting.java b/src/net/minecraft/src/Packet25EntityPainting.java new file mode 100644 index 0000000..79c9d1d --- /dev/null +++ b/src/net/minecraft/src/Packet25EntityPainting.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet25EntityPainting extends Packet { + public int entityId; + public int xPosition; + public int yPosition; + public int zPosition; + public int direction; + public String title; + + public Packet25EntityPainting() { + } + + public Packet25EntityPainting(EntityPainting var1) { + this.entityId = var1.entityId; + this.xPosition = var1.xPosition; + this.yPosition = var1.yPosition; + this.zPosition = var1.zPosition; + this.direction = var1.hangingDirection; + this.title = var1.art.title; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.title = readString(var1, EnumArt.maxArtTitleLength); + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + this.direction = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + writeString(this.title, var1); + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + var1.writeInt(this.direction); + } + + public void processPacket(NetHandler var1) { + var1.handleEntityPainting(this); + } + + public int getPacketSize() { + return 24; + } +} diff --git a/src/net/minecraft/src/Packet26EntityExpOrb.java b/src/net/minecraft/src/Packet26EntityExpOrb.java new file mode 100644 index 0000000..d8e334c --- /dev/null +++ b/src/net/minecraft/src/Packet26EntityExpOrb.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet26EntityExpOrb extends Packet { + public int entityId; + public int posX; + public int posY; + public int posZ; + public int xpValue; + + public Packet26EntityExpOrb() { + } + + public Packet26EntityExpOrb(EntityXPOrb var1) { + this.entityId = var1.entityId; + this.posX = MathHelper.floor_double(var1.posX * 32.0D); + this.posY = MathHelper.floor_double(var1.posY * 32.0D); + this.posZ = MathHelper.floor_double(var1.posZ * 32.0D); + this.xpValue = var1.getXpValue(); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.posX = var1.readInt(); + this.posY = var1.readInt(); + this.posZ = var1.readInt(); + this.xpValue = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeInt(this.posX); + var1.writeInt(this.posY); + var1.writeInt(this.posZ); + var1.writeShort(this.xpValue); + } + + public void processPacket(NetHandler var1) { + var1.handleEntityExpOrb(this); + } + + public int getPacketSize() { + return 18; + } +} diff --git a/src/net/minecraft/src/Packet28EntityVelocity.java b/src/net/minecraft/src/Packet28EntityVelocity.java new file mode 100644 index 0000000..933c6a1 --- /dev/null +++ b/src/net/minecraft/src/Packet28EntityVelocity.java @@ -0,0 +1,82 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet28EntityVelocity extends Packet { + public int entityId; + public int motionX; + public int motionY; + public int motionZ; + + public Packet28EntityVelocity() { + } + + public Packet28EntityVelocity(Entity var1) { + this(var1.entityId, var1.motionX, var1.motionY, var1.motionZ); + } + + public Packet28EntityVelocity(int var1, double var2, double var4, double var6) { + this.entityId = var1; + double var8 = 3.9D; + if(var2 < -var8) { + var2 = -var8; + } + + if(var4 < -var8) { + var4 = -var8; + } + + if(var6 < -var8) { + var6 = -var8; + } + + if(var2 > var8) { + var2 = var8; + } + + if(var4 > var8) { + var4 = var8; + } + + if(var6 > var8) { + var6 = var8; + } + + this.motionX = (int)(var2 * 8000.0D); + this.motionY = (int)(var4 * 8000.0D); + this.motionZ = (int)(var6 * 8000.0D); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.motionX = var1.readShort(); + this.motionY = var1.readShort(); + this.motionZ = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeShort(this.motionX); + var1.writeShort(this.motionY); + var1.writeShort(this.motionZ); + } + + public void processPacket(NetHandler var1) { + var1.handleEntityVelocity(this); + } + + public int getPacketSize() { + return 10; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + Packet28EntityVelocity var2 = (Packet28EntityVelocity)var1; + return var2.entityId == this.entityId; + } +} diff --git a/src/net/minecraft/src/Packet29DestroyEntity.java b/src/net/minecraft/src/Packet29DestroyEntity.java new file mode 100644 index 0000000..3ea2ef7 --- /dev/null +++ b/src/net/minecraft/src/Packet29DestroyEntity.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet29DestroyEntity extends Packet { + public int[] entityId; + + public Packet29DestroyEntity() { + } + + public Packet29DestroyEntity(int... var1) { + this.entityId = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = new int[var1.readByte()]; + + for(int var2 = 0; var2 < this.entityId.length; ++var2) { + this.entityId[var2] = var1.readInt(); + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.entityId.length); + + for(int var2 = 0; var2 < this.entityId.length; ++var2) { + var1.writeInt(this.entityId[var2]); + } + + } + + public void processPacket(NetHandler var1) { + var1.handleDestroyEntity(this); + } + + public int getPacketSize() { + return 1 + this.entityId.length * 4; + } +} diff --git a/src/net/minecraft/src/Packet2ClientProtocol.java b/src/net/minecraft/src/Packet2ClientProtocol.java new file mode 100644 index 0000000..1d03603 --- /dev/null +++ b/src/net/minecraft/src/Packet2ClientProtocol.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet2ClientProtocol extends Packet { + private int protocolVersion; + private String username; + private String serverHost; + private int serverPort; + + public Packet2ClientProtocol() { + } + + public Packet2ClientProtocol(int var1, String var2, String var3, int var4) { + this.protocolVersion = var1; + this.username = var2; + this.serverHost = var3; + this.serverPort = var4; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.protocolVersion = var1.readByte(); + this.username = readString(var1, 16); + this.serverHost = readString(var1, 255); + this.serverPort = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.protocolVersion); + writeString(this.username, var1); + writeString(this.serverHost, var1); + var1.writeInt(this.serverPort); + } + + public void processPacket(NetHandler var1) { + var1.handleClientProtocol(this); + } + + public int getPacketSize() { + return 3 + 2 * this.username.length(); + } + + public int getProtocolVersion() { + return this.protocolVersion; + } + + public String getUsername() { + return this.username; + } +} diff --git a/src/net/minecraft/src/Packet30Entity.java b/src/net/minecraft/src/Packet30Entity.java new file mode 100644 index 0000000..5e8d74a --- /dev/null +++ b/src/net/minecraft/src/Packet30Entity.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet30Entity extends Packet { + public int entityId; + public byte xPosition; + public byte yPosition; + public byte zPosition; + public byte yaw; + public byte pitch; + public boolean rotating = false; + + public Packet30Entity() { + } + + public Packet30Entity(int var1) { + this.entityId = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + } + + public void processPacket(NetHandler var1) { + var1.handleEntity(this); + } + + public int getPacketSize() { + return 4; + } + + public String toString() { + return "Entity_" + super.toString(); + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + Packet30Entity var2 = (Packet30Entity)var1; + return var2.entityId == this.entityId; + } +} diff --git a/src/net/minecraft/src/Packet31RelEntityMove.java b/src/net/minecraft/src/Packet31RelEntityMove.java new file mode 100644 index 0000000..87e1eef --- /dev/null +++ b/src/net/minecraft/src/Packet31RelEntityMove.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet31RelEntityMove extends Packet30Entity { + public Packet31RelEntityMove() { + } + + public Packet31RelEntityMove(int var1, byte var2, byte var3, byte var4) { + super(var1); + this.xPosition = var2; + this.yPosition = var3; + this.zPosition = var4; + } + + public void readPacketData(DataInputStream var1) throws IOException { + super.readPacketData(var1); + this.xPosition = var1.readByte(); + this.yPosition = var1.readByte(); + this.zPosition = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + super.writePacketData(var1); + var1.writeByte(this.xPosition); + var1.writeByte(this.yPosition); + var1.writeByte(this.zPosition); + } + + public int getPacketSize() { + return 7; + } +} diff --git a/src/net/minecraft/src/Packet32EntityLook.java b/src/net/minecraft/src/Packet32EntityLook.java new file mode 100644 index 0000000..8402123 --- /dev/null +++ b/src/net/minecraft/src/Packet32EntityLook.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet32EntityLook extends Packet30Entity { + public Packet32EntityLook() { + this.rotating = true; + } + + public Packet32EntityLook(int var1, byte var2, byte var3) { + super(var1); + this.yaw = var2; + this.pitch = var3; + this.rotating = true; + } + + public void readPacketData(DataInputStream var1) throws IOException { + super.readPacketData(var1); + this.yaw = var1.readByte(); + this.pitch = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + super.writePacketData(var1); + var1.writeByte(this.yaw); + var1.writeByte(this.pitch); + } + + public int getPacketSize() { + return 6; + } +} diff --git a/src/net/minecraft/src/Packet33RelEntityMoveLook.java b/src/net/minecraft/src/Packet33RelEntityMoveLook.java new file mode 100644 index 0000000..012f84b --- /dev/null +++ b/src/net/minecraft/src/Packet33RelEntityMoveLook.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet33RelEntityMoveLook extends Packet30Entity { + public Packet33RelEntityMoveLook() { + this.rotating = true; + } + + public Packet33RelEntityMoveLook(int var1, byte var2, byte var3, byte var4, byte var5, byte var6) { + super(var1); + this.xPosition = var2; + this.yPosition = var3; + this.zPosition = var4; + this.yaw = var5; + this.pitch = var6; + this.rotating = true; + } + + public void readPacketData(DataInputStream var1) throws IOException { + super.readPacketData(var1); + this.xPosition = var1.readByte(); + this.yPosition = var1.readByte(); + this.zPosition = var1.readByte(); + this.yaw = var1.readByte(); + this.pitch = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + super.writePacketData(var1); + var1.writeByte(this.xPosition); + var1.writeByte(this.yPosition); + var1.writeByte(this.zPosition); + var1.writeByte(this.yaw); + var1.writeByte(this.pitch); + } + + public int getPacketSize() { + return 9; + } +} diff --git a/src/net/minecraft/src/Packet34EntityTeleport.java b/src/net/minecraft/src/Packet34EntityTeleport.java new file mode 100644 index 0000000..a6b1545 --- /dev/null +++ b/src/net/minecraft/src/Packet34EntityTeleport.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet34EntityTeleport extends Packet { + public int entityId; + public int xPosition; + public int yPosition; + public int zPosition; + public byte yaw; + public byte pitch; + + public Packet34EntityTeleport() { + } + + public Packet34EntityTeleport(Entity var1) { + this.entityId = var1.entityId; + this.xPosition = MathHelper.floor_double(var1.posX * 32.0D); + this.yPosition = MathHelper.floor_double(var1.posY * 32.0D); + this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D); + this.yaw = (byte)((int)(var1.rotationYaw * 256.0F / 360.0F)); + this.pitch = (byte)((int)(var1.rotationPitch * 256.0F / 360.0F)); + } + + public Packet34EntityTeleport(int var1, int var2, int var3, int var4, byte var5, byte var6) { + this.entityId = var1; + this.xPosition = var2; + this.yPosition = var3; + this.zPosition = var4; + this.yaw = var5; + this.pitch = var6; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + this.yaw = (byte)var1.read(); + this.pitch = (byte)var1.read(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + var1.write(this.yaw); + var1.write(this.pitch); + } + + public void processPacket(NetHandler var1) { + var1.handleEntityTeleport(this); + } + + public int getPacketSize() { + return 34; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + Packet34EntityTeleport var2 = (Packet34EntityTeleport)var1; + return var2.entityId == this.entityId; + } +} diff --git a/src/net/minecraft/src/Packet35EntityHeadRotation.java b/src/net/minecraft/src/Packet35EntityHeadRotation.java new file mode 100644 index 0000000..ea4cb78 --- /dev/null +++ b/src/net/minecraft/src/Packet35EntityHeadRotation.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet35EntityHeadRotation extends Packet { + public int entityId; + public byte headRotationYaw; + + public Packet35EntityHeadRotation() { + } + + public Packet35EntityHeadRotation(int var1, byte var2) { + this.entityId = var1; + this.headRotationYaw = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.headRotationYaw = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeByte(this.headRotationYaw); + } + + public void processPacket(NetHandler var1) { + var1.handleEntityHeadRotation(this); + } + + public int getPacketSize() { + return 5; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + Packet35EntityHeadRotation var2 = (Packet35EntityHeadRotation)var1; + return var2.entityId == this.entityId; + } + + public boolean canProcessAsync() { + return true; + } +} diff --git a/src/net/minecraft/src/Packet38EntityStatus.java b/src/net/minecraft/src/Packet38EntityStatus.java new file mode 100644 index 0000000..09b2fed --- /dev/null +++ b/src/net/minecraft/src/Packet38EntityStatus.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet38EntityStatus extends Packet { + public int entityId; + public byte entityStatus; + + public Packet38EntityStatus() { + } + + public Packet38EntityStatus(int var1, byte var2) { + this.entityId = var1; + this.entityStatus = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.entityStatus = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeByte(this.entityStatus); + } + + public void processPacket(NetHandler var1) { + var1.handleEntityStatus(this); + } + + public int getPacketSize() { + return 5; + } +} diff --git a/src/net/minecraft/src/Packet39AttachEntity.java b/src/net/minecraft/src/Packet39AttachEntity.java new file mode 100644 index 0000000..a8f7ece --- /dev/null +++ b/src/net/minecraft/src/Packet39AttachEntity.java @@ -0,0 +1,45 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet39AttachEntity extends Packet { + public int entityId; + public int vehicleEntityId; + + public Packet39AttachEntity() { + } + + public Packet39AttachEntity(Entity var1, Entity var2) { + this.entityId = var1.entityId; + this.vehicleEntityId = var2 != null ? var2.entityId : -1; + } + + public int getPacketSize() { + return 8; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.vehicleEntityId = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeInt(this.vehicleEntityId); + } + + public void processPacket(NetHandler var1) { + var1.handleAttachEntity(this); + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + Packet39AttachEntity var2 = (Packet39AttachEntity)var1; + return var2.entityId == this.entityId; + } +} diff --git a/src/net/minecraft/src/Packet3Chat.java b/src/net/minecraft/src/Packet3Chat.java new file mode 100644 index 0000000..b208f4f --- /dev/null +++ b/src/net/minecraft/src/Packet3Chat.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet3Chat extends Packet { + public static int maxChatLength = 119; + public String message; + private boolean isServer; + + public Packet3Chat() { + this.isServer = true; + } + + public Packet3Chat(String var1) { + this(var1, true); + } + + public Packet3Chat(String var1, boolean var2) { + this.isServer = true; + if(var1.length() > maxChatLength) { + var1 = var1.substring(0, maxChatLength); + } + + this.message = var1; + this.isServer = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.message = readString(var1, maxChatLength); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeString(this.message, var1); + } + + public void processPacket(NetHandler var1) { + var1.handleChat(this); + } + + public int getPacketSize() { + return 2 + this.message.length() * 2; + } + + public boolean getIsServer() { + return this.isServer; + } + + public boolean canProcessAsync() { + return !this.message.startsWith("/"); + } +} diff --git a/src/net/minecraft/src/Packet40EntityMetadata.java b/src/net/minecraft/src/Packet40EntityMetadata.java new file mode 100644 index 0000000..273fcd2 --- /dev/null +++ b/src/net/minecraft/src/Packet40EntityMetadata.java @@ -0,0 +1,46 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.List; + +public class Packet40EntityMetadata extends Packet { + public int entityId; + private List metadata; + + public Packet40EntityMetadata() { + } + + public Packet40EntityMetadata(int var1, DataWatcher var2, boolean var3) { + this.entityId = var1; + if(var3) { + this.metadata = var2.getAllWatched(); + } else { + this.metadata = var2.unwatchAndReturnAllWatched(); + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.metadata = DataWatcher.readWatchableObjects(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + DataWatcher.writeObjectsInListToStream(this.metadata, var1); + } + + public void processPacket(NetHandler var1) { + var1.handleEntityMetadata(this); + } + + public int getPacketSize() { + return 5; + } + + public List getMetadata() { + return this.metadata; + } +} diff --git a/src/net/minecraft/src/Packet41EntityEffect.java b/src/net/minecraft/src/Packet41EntityEffect.java new file mode 100644 index 0000000..eaba01a --- /dev/null +++ b/src/net/minecraft/src/Packet41EntityEffect.java @@ -0,0 +1,62 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet41EntityEffect extends Packet { + public int entityId; + public byte effectId; + public byte effectAmplifier; + public short duration; + + public Packet41EntityEffect() { + } + + public Packet41EntityEffect(int var1, PotionEffect var2) { + this.entityId = var1; + this.effectId = (byte)(var2.getPotionID() & 255); + this.effectAmplifier = (byte)(var2.getAmplifier() & 255); + if(var2.getDuration() > Short.MAX_VALUE) { + this.duration = Short.MAX_VALUE; + } else { + this.duration = (short)var2.getDuration(); + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.effectId = var1.readByte(); + this.effectAmplifier = var1.readByte(); + this.duration = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeByte(this.effectId); + var1.writeByte(this.effectAmplifier); + var1.writeShort(this.duration); + } + + public boolean isDurationMax() { + return this.duration == Short.MAX_VALUE; + } + + public void processPacket(NetHandler var1) { + var1.handleEntityEffect(this); + } + + public int getPacketSize() { + return 8; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + Packet41EntityEffect var2 = (Packet41EntityEffect)var1; + return var2.entityId == this.entityId && var2.effectId == this.effectId; + } +} diff --git a/src/net/minecraft/src/Packet42RemoveEntityEffect.java b/src/net/minecraft/src/Packet42RemoveEntityEffect.java new file mode 100644 index 0000000..a722499 --- /dev/null +++ b/src/net/minecraft/src/Packet42RemoveEntityEffect.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet42RemoveEntityEffect extends Packet { + public int entityId; + public byte effectId; + + public Packet42RemoveEntityEffect() { + } + + public Packet42RemoveEntityEffect(int var1, PotionEffect var2) { + this.entityId = var1; + this.effectId = (byte)(var2.getPotionID() & 255); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.effectId = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeByte(this.effectId); + } + + public void processPacket(NetHandler var1) { + var1.handleRemoveEntityEffect(this); + } + + public int getPacketSize() { + return 5; + } +} diff --git a/src/net/minecraft/src/Packet43Experience.java b/src/net/minecraft/src/Packet43Experience.java new file mode 100644 index 0000000..aa8879b --- /dev/null +++ b/src/net/minecraft/src/Packet43Experience.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet43Experience extends Packet { + public float experience; + public int experienceTotal; + public int experienceLevel; + + public Packet43Experience() { + } + + public Packet43Experience(float var1, int var2, int var3) { + this.experience = var1; + this.experienceTotal = var2; + this.experienceLevel = var3; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.experience = var1.readFloat(); + this.experienceLevel = var1.readShort(); + this.experienceTotal = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeFloat(this.experience); + var1.writeShort(this.experienceLevel); + var1.writeShort(this.experienceTotal); + } + + public void processPacket(NetHandler var1) { + var1.handleExperience(this); + } + + public int getPacketSize() { + return 4; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + return true; + } +} diff --git a/src/net/minecraft/src/Packet4UpdateTime.java b/src/net/minecraft/src/Packet4UpdateTime.java new file mode 100644 index 0000000..879c8fe --- /dev/null +++ b/src/net/minecraft/src/Packet4UpdateTime.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet4UpdateTime extends Packet { + public long worldAge; + public long time; + + public Packet4UpdateTime() { + } + + public Packet4UpdateTime(long var1, long var3) { + this.worldAge = var1; + this.time = var3; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.worldAge = var1.readLong(); + this.time = var1.readLong(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeLong(this.worldAge); + var1.writeLong(this.time); + } + + public void processPacket(NetHandler var1) { + var1.handleUpdateTime(this); + } + + public int getPacketSize() { + return 16; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + return true; + } + + public boolean canProcessAsync() { + return true; + } +} diff --git a/src/net/minecraft/src/Packet51MapChunk.java b/src/net/minecraft/src/Packet51MapChunk.java new file mode 100644 index 0000000..008c431 --- /dev/null +++ b/src/net/minecraft/src/Packet51MapChunk.java @@ -0,0 +1,183 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.zip.DataFormatException; +import java.util.zip.Deflater; +import java.util.zip.Inflater; + +public class Packet51MapChunk extends Packet { + public int xCh; + public int zCh; + public int yChMin; + public int yChMax; + private byte[] chunkData; + private byte[] compressedChunkData; + public boolean includeInitialize; + private int tempLength; + private static byte[] temp = new byte[196864]; + + public Packet51MapChunk() { + this.isChunkDataPacket = true; + } + + public Packet51MapChunk(Chunk var1, boolean var2, int var3) { + this.isChunkDataPacket = true; + this.xCh = var1.xPosition; + this.zCh = var1.zPosition; + this.includeInitialize = var2; + Packet51MapChunkData var4 = getMapChunkData(var1, var2, var3); + Deflater var5 = new Deflater(-1); + this.yChMax = var4.chunkHasAddSectionFlag; + this.yChMin = var4.chunkExistFlag; + + try { + this.compressedChunkData = var4.compressedData; + var5.setInput(var4.compressedData, 0, var4.compressedData.length); + var5.finish(); + this.chunkData = new byte[var4.compressedData.length]; + this.tempLength = var5.deflate(this.chunkData); + } finally { + var5.end(); + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xCh = var1.readInt(); + this.zCh = var1.readInt(); + this.includeInitialize = var1.readBoolean(); + this.yChMin = var1.readShort(); + this.yChMax = var1.readShort(); + this.tempLength = var1.readInt(); + if(temp.length < this.tempLength) { + temp = new byte[this.tempLength]; + } + + var1.readFully(temp, 0, this.tempLength); + int var2 = 0; + + int var3; + for(var3 = 0; var3 < 16; ++var3) { + var2 += this.yChMin >> var3 & 1; + } + + var3 = 12288 * var2; + if(this.includeInitialize) { + var3 += 256; + } + + this.compressedChunkData = new byte[var3]; + Inflater var4 = new Inflater(); + var4.setInput(temp, 0, this.tempLength); + + try { + var4.inflate(this.compressedChunkData); + } catch (DataFormatException var9) { + throw new IOException("Bad compressed data format"); + } finally { + var4.end(); + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xCh); + var1.writeInt(this.zCh); + var1.writeBoolean(this.includeInitialize); + var1.writeShort((short)(this.yChMin & '\uffff')); + var1.writeShort((short)(this.yChMax & '\uffff')); + var1.writeInt(this.tempLength); + var1.write(this.chunkData, 0, this.tempLength); + } + + public void processPacket(NetHandler var1) { + var1.handleMapChunk(this); + } + + public int getPacketSize() { + return 17 + this.tempLength; + } + + public byte[] getCompressedChunkData() { + return this.compressedChunkData; + } + + public static Packet51MapChunkData getMapChunkData(Chunk var0, boolean var1, int var2) { + int var3 = 0; + ExtendedBlockStorage[] var4 = var0.getBlockStorageArray(); + int var5 = 0; + Packet51MapChunkData var6 = new Packet51MapChunkData(); + byte[] var7 = temp; + if(var1) { + var0.sendUpdates = true; + } + + int var8; + for(var8 = 0; var8 < var4.length; ++var8) { + if(var4[var8] != null && (!var1 || !var4[var8].isEmpty()) && (var2 & 1 << var8) != 0) { + var6.chunkExistFlag |= 1 << var8; + if(var4[var8].getBlockMSBArray() != null) { + var6.chunkHasAddSectionFlag |= 1 << var8; + ++var5; + } + } + } + + for(var8 = 0; var8 < var4.length; ++var8) { + if(var4[var8] != null && (!var1 || !var4[var8].isEmpty()) && (var2 & 1 << var8) != 0) { + byte[] var9 = var4[var8].getBlockLSBArray(); + System.arraycopy(var9, 0, var7, var3, var9.length); + var3 += var9.length; + } + } + + NibbleArray var10; + for(var8 = 0; var8 < var4.length; ++var8) { + if(var4[var8] != null && (!var1 || !var4[var8].isEmpty()) && (var2 & 1 << var8) != 0) { + var10 = var4[var8].getMetadataArray(); + System.arraycopy(var10.data, 0, var7, var3, var10.data.length); + var3 += var10.data.length; + } + } + + for(var8 = 0; var8 < var4.length; ++var8) { + if(var4[var8] != null && (!var1 || !var4[var8].isEmpty()) && (var2 & 1 << var8) != 0) { + var10 = var4[var8].getBlocklightArray(); + System.arraycopy(var10.data, 0, var7, var3, var10.data.length); + var3 += var10.data.length; + } + } + + if(!var0.worldObj.provider.hasNoSky) { + for(var8 = 0; var8 < var4.length; ++var8) { + if(var4[var8] != null && (!var1 || !var4[var8].isEmpty()) && (var2 & 1 << var8) != 0) { + var10 = var4[var8].getSkylightArray(); + System.arraycopy(var10.data, 0, var7, var3, var10.data.length); + var3 += var10.data.length; + } + } + } + + if(var5 > 0) { + for(var8 = 0; var8 < var4.length; ++var8) { + if(var4[var8] != null && (!var1 || !var4[var8].isEmpty()) && var4[var8].getBlockMSBArray() != null && (var2 & 1 << var8) != 0) { + var10 = var4[var8].getBlockMSBArray(); + System.arraycopy(var10.data, 0, var7, var3, var10.data.length); + var3 += var10.data.length; + } + } + } + + if(var1) { + byte[] var11 = var0.getBiomeArray(); + System.arraycopy(var11, 0, var7, var3, var11.length); + var3 += var11.length; + } + + var6.compressedData = new byte[var3]; + System.arraycopy(var7, 0, var6.compressedData, 0, var3); + return var6; + } +} diff --git a/src/net/minecraft/src/Packet51MapChunkData.java b/src/net/minecraft/src/Packet51MapChunkData.java new file mode 100644 index 0000000..b15a3e3 --- /dev/null +++ b/src/net/minecraft/src/Packet51MapChunkData.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class Packet51MapChunkData { + public byte[] compressedData; + public int chunkExistFlag; + public int chunkHasAddSectionFlag; +} diff --git a/src/net/minecraft/src/Packet52MultiBlockChange.java b/src/net/minecraft/src/Packet52MultiBlockChange.java new file mode 100644 index 0000000..581be0d --- /dev/null +++ b/src/net/minecraft/src/Packet52MultiBlockChange.java @@ -0,0 +1,89 @@ +package net.minecraft.src; + +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet52MultiBlockChange extends Packet { + public int xPosition; + public int zPosition; + public byte[] metadataArray; + public int size; + private static byte[] field_73449_e = new byte[0]; + + public Packet52MultiBlockChange() { + this.isChunkDataPacket = true; + } + + public Packet52MultiBlockChange(int var1, int var2, short[] var3, int var4, World var5) { + this.isChunkDataPacket = true; + this.xPosition = var1; + this.zPosition = var2; + this.size = var4; + int var6 = 4 * var4; + Chunk var7 = var5.getChunkFromChunkCoords(var1, var2); + + try { + if(var4 >= 64) { + this.field_98193_m.logInfo("ChunkTilesUpdatePacket compress " + var4); + if(field_73449_e.length < var6) { + field_73449_e = new byte[var6]; + } + } else { + ByteArrayOutputStream var8 = new ByteArrayOutputStream(var6); + DataOutputStream var9 = new DataOutputStream(var8); + + for(int var10 = 0; var10 < var4; ++var10) { + int var11 = var3[var10] >> 12 & 15; + int var12 = var3[var10] >> 8 & 15; + int var13 = var3[var10] & 255; + var9.writeShort(var3[var10]); + var9.writeShort((short)((var7.getBlockID(var11, var13, var12) & 4095) << 4 | var7.getBlockMetadata(var11, var13, var12) & 15)); + } + + this.metadataArray = var8.toByteArray(); + if(this.metadataArray.length != var6) { + throw new RuntimeException("Expected length " + var6 + " doesn\'t match received length " + this.metadataArray.length); + } + } + } catch (IOException var14) { + this.field_98193_m.logSevereException("Couldn\'t create chunk packet", var14); + this.metadataArray = null; + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readInt(); + this.zPosition = var1.readInt(); + this.size = var1.readShort() & '\uffff'; + int var2 = var1.readInt(); + if(var2 > 0) { + this.metadataArray = new byte[var2]; + var1.readFully(this.metadataArray); + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xPosition); + var1.writeInt(this.zPosition); + var1.writeShort((short)this.size); + if(this.metadataArray != null) { + var1.writeInt(this.metadataArray.length); + var1.write(this.metadataArray); + } else { + var1.writeInt(0); + } + + } + + public void processPacket(NetHandler var1) { + var1.handleMultiBlockChange(this); + } + + public int getPacketSize() { + return 10 + this.size * 4; + } +} diff --git a/src/net/minecraft/src/Packet53BlockChange.java b/src/net/minecraft/src/Packet53BlockChange.java new file mode 100644 index 0000000..46da8ad --- /dev/null +++ b/src/net/minecraft/src/Packet53BlockChange.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet53BlockChange extends Packet { + public int xPosition; + public int yPosition; + public int zPosition; + public int type; + public int metadata; + + public Packet53BlockChange() { + this.isChunkDataPacket = true; + } + + public Packet53BlockChange(int var1, int var2, int var3, World var4) { + this.isChunkDataPacket = true; + this.xPosition = var1; + this.yPosition = var2; + this.zPosition = var3; + this.type = var4.getBlockId(var1, var2, var3); + this.metadata = var4.getBlockMetadata(var1, var2, var3); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readInt(); + this.yPosition = var1.read(); + this.zPosition = var1.readInt(); + this.type = var1.readShort(); + this.metadata = var1.read(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xPosition); + var1.write(this.yPosition); + var1.writeInt(this.zPosition); + var1.writeShort(this.type); + var1.write(this.metadata); + } + + public void processPacket(NetHandler var1) { + var1.handleBlockChange(this); + } + + public int getPacketSize() { + return 11; + } +} diff --git a/src/net/minecraft/src/Packet54PlayNoteBlock.java b/src/net/minecraft/src/Packet54PlayNoteBlock.java new file mode 100644 index 0000000..10a756d --- /dev/null +++ b/src/net/minecraft/src/Packet54PlayNoteBlock.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet54PlayNoteBlock extends Packet { + public int xLocation; + public int yLocation; + public int zLocation; + public int instrumentType; + public int pitch; + public int blockId; + + public Packet54PlayNoteBlock() { + } + + public Packet54PlayNoteBlock(int var1, int var2, int var3, int var4, int var5, int var6) { + this.xLocation = var1; + this.yLocation = var2; + this.zLocation = var3; + this.instrumentType = var5; + this.pitch = var6; + this.blockId = var4; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xLocation = var1.readInt(); + this.yLocation = var1.readShort(); + this.zLocation = var1.readInt(); + this.instrumentType = var1.read(); + this.pitch = var1.read(); + this.blockId = var1.readShort() & 4095; + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xLocation); + var1.writeShort(this.yLocation); + var1.writeInt(this.zLocation); + var1.write(this.instrumentType); + var1.write(this.pitch); + var1.writeShort(this.blockId & 4095); + } + + public void processPacket(NetHandler var1) { + var1.handleBlockEvent(this); + } + + public int getPacketSize() { + return 14; + } +} diff --git a/src/net/minecraft/src/Packet55BlockDestroy.java b/src/net/minecraft/src/Packet55BlockDestroy.java new file mode 100644 index 0000000..e8111a3 --- /dev/null +++ b/src/net/minecraft/src/Packet55BlockDestroy.java @@ -0,0 +1,77 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet55BlockDestroy extends Packet { + private int entityId; + private int posX; + private int posY; + private int posZ; + private int destroyedStage; + + public Packet55BlockDestroy() { + } + + public Packet55BlockDestroy(int var1, int var2, int var3, int var4, int var5) { + this.entityId = var1; + this.posX = var2; + this.posY = var3; + this.posZ = var4; + this.destroyedStage = var5; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.posX = var1.readInt(); + this.posY = var1.readInt(); + this.posZ = var1.readInt(); + this.destroyedStage = var1.read(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeInt(this.posX); + var1.writeInt(this.posY); + var1.writeInt(this.posZ); + var1.write(this.destroyedStage); + } + + public void processPacket(NetHandler var1) { + var1.handleBlockDestroy(this); + } + + public int getPacketSize() { + return 13; + } + + public int getEntityId() { + return this.entityId; + } + + public int getPosX() { + return this.posX; + } + + public int getPosY() { + return this.posY; + } + + public int getPosZ() { + return this.posZ; + } + + public int getDestroyedStage() { + return this.destroyedStage; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + Packet55BlockDestroy var2 = (Packet55BlockDestroy)var1; + return var2.entityId == this.entityId; + } +} diff --git a/src/net/minecraft/src/Packet56MapChunks.java b/src/net/minecraft/src/Packet56MapChunks.java new file mode 100644 index 0000000..a86f245 --- /dev/null +++ b/src/net/minecraft/src/Packet56MapChunks.java @@ -0,0 +1,159 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.List; +import java.util.zip.DataFormatException; +import java.util.zip.Deflater; +import java.util.zip.Inflater; + +public class Packet56MapChunks extends Packet { + private int[] chunkPostX; + private int[] chunkPosZ; + public int[] field_73590_a; + public int[] field_73588_b; + private byte[] chunkDataBuffer; + private byte[][] field_73584_f; + private int dataLength; + private boolean skyLightSent; + private static byte[] chunkDataNotCompressed = new byte[0]; + + public Packet56MapChunks() { + } + + public Packet56MapChunks(List var1) { + int var2 = var1.size(); + this.chunkPostX = new int[var2]; + this.chunkPosZ = new int[var2]; + this.field_73590_a = new int[var2]; + this.field_73588_b = new int[var2]; + this.field_73584_f = new byte[var2][]; + this.skyLightSent = !var1.isEmpty() && !((Chunk)var1.get(0)).worldObj.provider.hasNoSky; + int var3 = 0; + + for(int var4 = 0; var4 < var2; ++var4) { + Chunk var5 = (Chunk)var1.get(var4); + Packet51MapChunkData var6 = Packet51MapChunk.getMapChunkData(var5, true, '\uffff'); + if(chunkDataNotCompressed.length < var3 + var6.compressedData.length) { + byte[] var7 = new byte[var3 + var6.compressedData.length]; + System.arraycopy(chunkDataNotCompressed, 0, var7, 0, chunkDataNotCompressed.length); + chunkDataNotCompressed = var7; + } + + System.arraycopy(var6.compressedData, 0, chunkDataNotCompressed, var3, var6.compressedData.length); + var3 += var6.compressedData.length; + this.chunkPostX[var4] = var5.xPosition; + this.chunkPosZ[var4] = var5.zPosition; + this.field_73590_a[var4] = var6.chunkExistFlag; + this.field_73588_b[var4] = var6.chunkHasAddSectionFlag; + this.field_73584_f[var4] = var6.compressedData; + } + + Deflater var11 = new Deflater(-1); + + try { + var11.setInput(chunkDataNotCompressed, 0, var3); + var11.finish(); + this.chunkDataBuffer = new byte[var3]; + this.dataLength = var11.deflate(this.chunkDataBuffer); + } finally { + var11.end(); + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + short var2 = var1.readShort(); + this.dataLength = var1.readInt(); + this.skyLightSent = var1.readBoolean(); + this.chunkPostX = new int[var2]; + this.chunkPosZ = new int[var2]; + this.field_73590_a = new int[var2]; + this.field_73588_b = new int[var2]; + this.field_73584_f = new byte[var2][]; + if(chunkDataNotCompressed.length < this.dataLength) { + chunkDataNotCompressed = new byte[this.dataLength]; + } + + var1.readFully(chunkDataNotCompressed, 0, this.dataLength); + byte[] var3 = new byte[196864 * var2]; + Inflater var4 = new Inflater(); + var4.setInput(chunkDataNotCompressed, 0, this.dataLength); + + try { + var4.inflate(var3); + } catch (DataFormatException var12) { + throw new IOException("Bad compressed data format"); + } finally { + var4.end(); + } + + int var5 = 0; + + for(int var6 = 0; var6 < var2; ++var6) { + this.chunkPostX[var6] = var1.readInt(); + this.chunkPosZ[var6] = var1.readInt(); + this.field_73590_a[var6] = var1.readShort(); + this.field_73588_b[var6] = var1.readShort(); + int var7 = 0; + int var8 = 0; + + int var9; + for(var9 = 0; var9 < 16; ++var9) { + var7 += this.field_73590_a[var6] >> var9 & 1; + var8 += this.field_73588_b[var6] >> var9 & 1; + } + + var9 = 2048 * 4 * var7 + 256; + var9 += 2048 * var8; + if(this.skyLightSent) { + var9 += 2048 * var7; + } + + this.field_73584_f[var6] = new byte[var9]; + System.arraycopy(var3, var5, this.field_73584_f[var6], 0, var9); + var5 += var9; + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeShort(this.chunkPostX.length); + var1.writeInt(this.dataLength); + var1.writeBoolean(this.skyLightSent); + var1.write(this.chunkDataBuffer, 0, this.dataLength); + + for(int var2 = 0; var2 < this.chunkPostX.length; ++var2) { + var1.writeInt(this.chunkPostX[var2]); + var1.writeInt(this.chunkPosZ[var2]); + var1.writeShort((short)(this.field_73590_a[var2] & '\uffff')); + var1.writeShort((short)(this.field_73588_b[var2] & '\uffff')); + } + + } + + public void processPacket(NetHandler var1) { + var1.handleMapChunks(this); + } + + public int getPacketSize() { + return 6 + this.dataLength + 12 * this.getNumberOfChunkInPacket(); + } + + public int getChunkPosX(int var1) { + return this.chunkPostX[var1]; + } + + public int getChunkPosZ(int var1) { + return this.chunkPosZ[var1]; + } + + public int getNumberOfChunkInPacket() { + return this.chunkPostX.length; + } + + public byte[] getChunkCompressedData(int var1) { + return this.field_73584_f[var1]; + } +} diff --git a/src/net/minecraft/src/Packet5PlayerInventory.java b/src/net/minecraft/src/Packet5PlayerInventory.java new file mode 100644 index 0000000..5a1d103 --- /dev/null +++ b/src/net/minecraft/src/Packet5PlayerInventory.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet5PlayerInventory extends Packet { + public int entityID; + public int slot; + private ItemStack itemSlot; + + public Packet5PlayerInventory() { + } + + public Packet5PlayerInventory(int var1, int var2, ItemStack var3) { + this.entityID = var1; + this.slot = var2; + this.itemSlot = var3 == null ? null : var3.copy(); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityID = var1.readInt(); + this.slot = var1.readShort(); + this.itemSlot = readItemStack(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityID); + var1.writeShort(this.slot); + writeItemStack(this.itemSlot, var1); + } + + public void processPacket(NetHandler var1) { + var1.handlePlayerInventory(this); + } + + public int getPacketSize() { + return 8; + } + + public ItemStack getItemSlot() { + return this.itemSlot; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + Packet5PlayerInventory var2 = (Packet5PlayerInventory)var1; + return var2.entityID == this.entityID && var2.slot == this.slot; + } +} diff --git a/src/net/minecraft/src/Packet60Explosion.java b/src/net/minecraft/src/Packet60Explosion.java new file mode 100644 index 0000000..fa25588 --- /dev/null +++ b/src/net/minecraft/src/Packet60Explosion.java @@ -0,0 +1,105 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class Packet60Explosion extends Packet { + public double explosionX; + public double explosionY; + public double explosionZ; + public float explosionSize; + public List chunkPositionRecords; + private float playerVelocityX; + private float playerVelocityY; + private float playerVelocityZ; + + public Packet60Explosion() { + } + + public Packet60Explosion(double var1, double var3, double var5, float var7, List var8, Vec3 var9) { + this.explosionX = var1; + this.explosionY = var3; + this.explosionZ = var5; + this.explosionSize = var7; + this.chunkPositionRecords = new ArrayList(var8); + if(var9 != null) { + this.playerVelocityX = (float)var9.xCoord; + this.playerVelocityY = (float)var9.yCoord; + this.playerVelocityZ = (float)var9.zCoord; + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.explosionX = var1.readDouble(); + this.explosionY = var1.readDouble(); + this.explosionZ = var1.readDouble(); + this.explosionSize = var1.readFloat(); + int var2 = var1.readInt(); + this.chunkPositionRecords = new ArrayList(var2); + int var3 = (int)this.explosionX; + int var4 = (int)this.explosionY; + int var5 = (int)this.explosionZ; + + for(int var6 = 0; var6 < var2; ++var6) { + int var7 = var1.readByte() + var3; + int var8 = var1.readByte() + var4; + int var9 = var1.readByte() + var5; + this.chunkPositionRecords.add(new ChunkPosition(var7, var8, var9)); + } + + this.playerVelocityX = var1.readFloat(); + this.playerVelocityY = var1.readFloat(); + this.playerVelocityZ = var1.readFloat(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeDouble(this.explosionX); + var1.writeDouble(this.explosionY); + var1.writeDouble(this.explosionZ); + var1.writeFloat(this.explosionSize); + var1.writeInt(this.chunkPositionRecords.size()); + int var2 = (int)this.explosionX; + int var3 = (int)this.explosionY; + int var4 = (int)this.explosionZ; + Iterator var5 = this.chunkPositionRecords.iterator(); + + while(var5.hasNext()) { + ChunkPosition var6 = (ChunkPosition)var5.next(); + int var7 = var6.x - var2; + int var8 = var6.y - var3; + int var9 = var6.z - var4; + var1.writeByte(var7); + var1.writeByte(var8); + var1.writeByte(var9); + } + + var1.writeFloat(this.playerVelocityX); + var1.writeFloat(this.playerVelocityY); + var1.writeFloat(this.playerVelocityZ); + } + + public void processPacket(NetHandler var1) { + var1.handleExplosion(this); + } + + public int getPacketSize() { + return 32 + this.chunkPositionRecords.size() * 3 + 3; + } + + public float getPlayerVelocityX() { + return this.playerVelocityX; + } + + public float getPlayerVelocityY() { + return this.playerVelocityY; + } + + public float getPlayerVelocityZ() { + return this.playerVelocityZ; + } +} diff --git a/src/net/minecraft/src/Packet61DoorChange.java b/src/net/minecraft/src/Packet61DoorChange.java new file mode 100644 index 0000000..b1cccc9 --- /dev/null +++ b/src/net/minecraft/src/Packet61DoorChange.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet61DoorChange extends Packet { + public int sfxID; + public int auxData; + public int posX; + public int posY; + public int posZ; + private boolean disableRelativeVolume; + + public Packet61DoorChange() { + } + + public Packet61DoorChange(int var1, int var2, int var3, int var4, int var5, boolean var6) { + this.sfxID = var1; + this.posX = var2; + this.posY = var3; + this.posZ = var4; + this.auxData = var5; + this.disableRelativeVolume = var6; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.sfxID = var1.readInt(); + this.posX = var1.readInt(); + this.posY = var1.readByte() & 255; + this.posZ = var1.readInt(); + this.auxData = var1.readInt(); + this.disableRelativeVolume = var1.readBoolean(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.sfxID); + var1.writeInt(this.posX); + var1.writeByte(this.posY & 255); + var1.writeInt(this.posZ); + var1.writeInt(this.auxData); + var1.writeBoolean(this.disableRelativeVolume); + } + + public void processPacket(NetHandler var1) { + var1.handleDoorChange(this); + } + + public int getPacketSize() { + return 21; + } + + public boolean getRelativeVolumeDisabled() { + return this.disableRelativeVolume; + } +} diff --git a/src/net/minecraft/src/Packet62LevelSound.java b/src/net/minecraft/src/Packet62LevelSound.java new file mode 100644 index 0000000..0303466 --- /dev/null +++ b/src/net/minecraft/src/Packet62LevelSound.java @@ -0,0 +1,84 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet62LevelSound extends Packet { + private String soundName; + private int effectX; + private int effectY = Integer.MAX_VALUE; + private int effectZ; + private float volume; + private int pitch; + + public Packet62LevelSound() { + } + + public Packet62LevelSound(String var1, double var2, double var4, double var6, float var8, float var9) { + this.soundName = var1; + this.effectX = (int)(var2 * 8.0D); + this.effectY = (int)(var4 * 8.0D); + this.effectZ = (int)(var6 * 8.0D); + this.volume = var8; + this.pitch = (int)(var9 * 63.0F); + if(this.pitch < 0) { + this.pitch = 0; + } + + if(this.pitch > 255) { + this.pitch = 255; + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.soundName = readString(var1, 32); + this.effectX = var1.readInt(); + this.effectY = var1.readInt(); + this.effectZ = var1.readInt(); + this.volume = var1.readFloat(); + this.pitch = var1.readUnsignedByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeString(this.soundName, var1); + var1.writeInt(this.effectX); + var1.writeInt(this.effectY); + var1.writeInt(this.effectZ); + var1.writeFloat(this.volume); + var1.writeByte(this.pitch); + } + + public String getSoundName() { + return this.soundName; + } + + public double getEffectX() { + return (double)((float)this.effectX / 8.0F); + } + + public double getEffectY() { + return (double)((float)this.effectY / 8.0F); + } + + public double getEffectZ() { + return (double)((float)this.effectZ / 8.0F); + } + + public float getVolume() { + return this.volume; + } + + public float getPitch() { + return (float)this.pitch / 63.0F; + } + + public void processPacket(NetHandler var1) { + var1.handleLevelSound(this); + } + + public int getPacketSize() { + return 24; + } +} diff --git a/src/net/minecraft/src/Packet63WorldParticles.java b/src/net/minecraft/src/Packet63WorldParticles.java new file mode 100644 index 0000000..e383737 --- /dev/null +++ b/src/net/minecraft/src/Packet63WorldParticles.java @@ -0,0 +1,85 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet63WorldParticles extends Packet { + private String particleName; + private float posX; + private float posY; + private float posZ; + private float offsetX; + private float offsetY; + private float offsetZ; + private float speed; + private int quantity; + + public void readPacketData(DataInputStream var1) throws IOException { + this.particleName = readString(var1, 64); + this.posX = var1.readFloat(); + this.posY = var1.readFloat(); + this.posZ = var1.readFloat(); + this.offsetX = var1.readFloat(); + this.offsetY = var1.readFloat(); + this.offsetZ = var1.readFloat(); + this.speed = var1.readFloat(); + this.quantity = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + writeString(this.particleName, var1); + var1.writeFloat(this.posX); + var1.writeFloat(this.posY); + var1.writeFloat(this.posZ); + var1.writeFloat(this.offsetX); + var1.writeFloat(this.offsetY); + var1.writeFloat(this.offsetZ); + var1.writeFloat(this.speed); + var1.writeInt(this.quantity); + } + + public String getParticleName() { + return this.particleName; + } + + public double getPositionX() { + return (double)this.posX; + } + + public double getPositionY() { + return (double)this.posY; + } + + public double getPositionZ() { + return (double)this.posZ; + } + + public float getOffsetX() { + return this.offsetX; + } + + public float getOffsetY() { + return this.offsetY; + } + + public float getOffsetZ() { + return this.offsetZ; + } + + public float getSpeed() { + return this.speed; + } + + public int getQuantity() { + return this.quantity; + } + + public void processPacket(NetHandler var1) { + var1.handleWorldParticles(this); + } + + public int getPacketSize() { + return 64; + } +} diff --git a/src/net/minecraft/src/Packet6SpawnPosition.java b/src/net/minecraft/src/Packet6SpawnPosition.java new file mode 100644 index 0000000..c4d9a19 --- /dev/null +++ b/src/net/minecraft/src/Packet6SpawnPosition.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet6SpawnPosition extends Packet { + public int xPosition; + public int yPosition; + public int zPosition; + + public Packet6SpawnPosition() { + } + + public Packet6SpawnPosition(int var1, int var2, int var3) { + this.xPosition = var1; + this.yPosition = var2; + this.zPosition = var3; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + } + + public void processPacket(NetHandler var1) { + var1.handleSpawnPosition(this); + } + + public int getPacketSize() { + return 12; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + return true; + } + + public boolean canProcessAsync() { + return false; + } +} diff --git a/src/net/minecraft/src/Packet70GameEvent.java b/src/net/minecraft/src/Packet70GameEvent.java new file mode 100644 index 0000000..4645e90 --- /dev/null +++ b/src/net/minecraft/src/Packet70GameEvent.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet70GameEvent extends Packet { + public static final String[] clientMessage = new String[]{"tile.bed.notValid", null, null, "gameMode.changed"}; + public int eventType; + public int gameMode; + + public Packet70GameEvent() { + } + + public Packet70GameEvent(int var1, int var2) { + this.eventType = var1; + this.gameMode = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.eventType = var1.readByte(); + this.gameMode = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.eventType); + var1.writeByte(this.gameMode); + } + + public void processPacket(NetHandler var1) { + var1.handleGameEvent(this); + } + + public int getPacketSize() { + return 2; + } +} diff --git a/src/net/minecraft/src/Packet71Weather.java b/src/net/minecraft/src/Packet71Weather.java new file mode 100644 index 0000000..b9502dc --- /dev/null +++ b/src/net/minecraft/src/Packet71Weather.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet71Weather extends Packet { + public int entityID; + public int posX; + public int posY; + public int posZ; + public int isLightningBolt; + + public Packet71Weather() { + } + + public Packet71Weather(Entity var1) { + this.entityID = var1.entityId; + this.posX = MathHelper.floor_double(var1.posX * 32.0D); + this.posY = MathHelper.floor_double(var1.posY * 32.0D); + this.posZ = MathHelper.floor_double(var1.posZ * 32.0D); + if(var1 instanceof EntityLightningBolt) { + this.isLightningBolt = 1; + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityID = var1.readInt(); + this.isLightningBolt = var1.readByte(); + this.posX = var1.readInt(); + this.posY = var1.readInt(); + this.posZ = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityID); + var1.writeByte(this.isLightningBolt); + var1.writeInt(this.posX); + var1.writeInt(this.posY); + var1.writeInt(this.posZ); + } + + public void processPacket(NetHandler var1) { + var1.handleWeather(this); + } + + public int getPacketSize() { + return 17; + } +} diff --git a/src/net/minecraft/src/Packet7UseEntity.java b/src/net/minecraft/src/Packet7UseEntity.java new file mode 100644 index 0000000..9f774e9 --- /dev/null +++ b/src/net/minecraft/src/Packet7UseEntity.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet7UseEntity extends Packet { + public int playerEntityId; + public int targetEntity; + public int isLeftClick; + + public Packet7UseEntity() { + } + + public Packet7UseEntity(int var1, int var2, int var3) { + this.playerEntityId = var1; + this.targetEntity = var2; + this.isLeftClick = var3; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.playerEntityId = var1.readInt(); + this.targetEntity = var1.readInt(); + this.isLeftClick = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.playerEntityId); + var1.writeInt(this.targetEntity); + var1.writeByte(this.isLeftClick); + } + + public void processPacket(NetHandler var1) { + var1.handleUseEntity(this); + } + + public int getPacketSize() { + return 9; + } +} diff --git a/src/net/minecraft/src/Packet8UpdateHealth.java b/src/net/minecraft/src/Packet8UpdateHealth.java new file mode 100644 index 0000000..79ee144 --- /dev/null +++ b/src/net/minecraft/src/Packet8UpdateHealth.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet8UpdateHealth extends Packet { + public int healthMP; + public int food; + public float foodSaturation; + + public Packet8UpdateHealth() { + } + + public Packet8UpdateHealth(int var1, int var2, float var3) { + this.healthMP = var1; + this.food = var2; + this.foodSaturation = var3; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.healthMP = var1.readShort(); + this.food = var1.readShort(); + this.foodSaturation = var1.readFloat(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeShort(this.healthMP); + var1.writeShort(this.food); + var1.writeFloat(this.foodSaturation); + } + + public void processPacket(NetHandler var1) { + var1.handleUpdateHealth(this); + } + + public int getPacketSize() { + return 8; + } + + public boolean isRealPacket() { + return true; + } + + public boolean containsSameEntityIDAs(Packet var1) { + return true; + } +} diff --git a/src/net/minecraft/src/Packet9Respawn.java b/src/net/minecraft/src/Packet9Respawn.java new file mode 100644 index 0000000..62ec40a --- /dev/null +++ b/src/net/minecraft/src/Packet9Respawn.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet9Respawn extends Packet { + public int respawnDimension; + public int difficulty; + public int worldHeight; + public EnumGameType gameType; + public WorldType terrainType; + + public Packet9Respawn() { + } + + public Packet9Respawn(int var1, byte var2, WorldType var3, int var4, EnumGameType var5) { + this.respawnDimension = var1; + this.difficulty = var2; + this.worldHeight = var4; + this.gameType = var5; + this.terrainType = var3; + } + + public void processPacket(NetHandler var1) { + var1.handleRespawn(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.respawnDimension = var1.readInt(); + this.difficulty = var1.readByte(); + this.gameType = EnumGameType.getByID(var1.readByte()); + this.worldHeight = var1.readShort(); + String var2 = readString(var1, 16); + this.terrainType = WorldType.parseWorldType(var2); + if(this.terrainType == null) { + this.terrainType = WorldType.DEFAULT; + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.respawnDimension); + var1.writeByte(this.difficulty); + var1.writeByte(this.gameType.getID()); + var1.writeShort(this.worldHeight); + writeString(this.terrainType.getWorldTypeName(), var1); + } + + public int getPacketSize() { + return 8 + (this.terrainType == null ? 0 : this.terrainType.getWorldTypeName().length()); + } +} diff --git a/src/net/minecraft/src/PacketCount.java b/src/net/minecraft/src/PacketCount.java new file mode 100644 index 0000000..2e6da24 --- /dev/null +++ b/src/net/minecraft/src/PacketCount.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; + +public class PacketCount { + public static boolean allowCounting = true; + private static final Map packetCountForID = new HashMap(); + private static final Map sizeCountForID = new HashMap(); + private static final Object lock = new Object(); + + public static void countPacket(int var0, long var1) { + if(allowCounting) { + Object var3 = lock; + synchronized(var3) { + if(packetCountForID.containsKey(Integer.valueOf(var0))) { + packetCountForID.put(Integer.valueOf(var0), Long.valueOf(((Long)packetCountForID.get(Integer.valueOf(var0))).longValue() + 1L)); + sizeCountForID.put(Integer.valueOf(var0), Long.valueOf(((Long)sizeCountForID.get(Integer.valueOf(var0))).longValue() + var1)); + } else { + packetCountForID.put(Integer.valueOf(var0), Long.valueOf(1L)); + sizeCountForID.put(Integer.valueOf(var0), Long.valueOf(var1)); + } + + } + } + } +} diff --git a/src/net/minecraft/src/PanelCrashReport.java b/src/net/minecraft/src/PanelCrashReport.java new file mode 100644 index 0000000..87f9fe2 --- /dev/null +++ b/src/net/minecraft/src/PanelCrashReport.java @@ -0,0 +1,93 @@ +package net.minecraft.src; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Font; +import java.awt.Panel; +import java.awt.TextArea; +import java.io.File; +import java.io.PrintWriter; +import java.io.StringWriter; +import java.text.SimpleDateFormat; +import java.util.Date; +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +public class PanelCrashReport extends Panel { + public PanelCrashReport(CrashReport var1) { + this.setBackground(new Color(3028036)); + this.setLayout(new BorderLayout()); + StringWriter var2 = new StringWriter(); + var1.getCrashCause().printStackTrace(new PrintWriter(var2)); + String var3 = var2.toString(); + String var4 = ""; + String var5 = ""; + + try { + var5 = var5 + "Generated " + (new SimpleDateFormat()).format(new Date()) + "\n"; + var5 = var5 + "\n"; + var5 = var5 + var1.func_90021_c(); + var4 = GL11.glGetString(GL11.GL_VENDOR); + } catch (Throwable var9) { + var5 = var5 + "[failed to get system properties (" + var9 + ")]\n"; + } + + var5 = var5 + "\n\n"; + var5 = var5 + var3; + String var6 = ""; + var6 = var6 + "\n"; + var6 = var6 + "\n"; + if(var3.contains("Pixel format not accelerated")) { + var6 = var6 + " Bad video card drivers! \n"; + var6 = var6 + " ----------------------- \n"; + var6 = var6 + "\n"; + var6 = var6 + "Minecraft was unable to start because it failed to find an accelerated OpenGL mode.\n"; + var6 = var6 + "This can usually be fixed by updating the video card drivers.\n"; + if(var4.toLowerCase().contains("nvidia")) { + var6 = var6 + "\n"; + var6 = var6 + "You might be able to find drivers for your video card here:\n"; + var6 = var6 + " http://www.nvidia.com/\n"; + } else if(var4.toLowerCase().contains("ati")) { + var6 = var6 + "\n"; + var6 = var6 + "You might be able to find drivers for your video card here:\n"; + var6 = var6 + " http://www.amd.com/\n"; + } + } else { + var6 = var6 + " Minecraft has crashed! \n"; + var6 = var6 + " ---------------------- \n"; + var6 = var6 + "\n"; + var6 = var6 + "Minecraft has stopped running because it encountered a problem; " + var1.getDescription() + "\n\n"; + File var7 = var1.getFile(); + if(var7 == null) { + var1.saveToFile(new File(new File(Minecraft.getMinecraftDir(), "crash-reports"), "crash-" + (new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss")).format(new Date()) + "-client.txt"), Minecraft.getMinecraft().getLogAgent()); + var7 = var1.getFile(); + } + + if(var7 != null) { + String var8 = var7.getAbsolutePath(); + var6 = var6 + "A full error report has been saved to " + var8 + " - Please include a copy of that file (Not this screen!) if you report this crash to anyone; without it, they will not be able to help fix the crash :("; + var5 = "Full report at:\n" + var8 + "\nPlease show that file to Mojang, NOT just this screen!\n\n" + var5; + } else { + var6 = var6 + "We were unable to save this report to a file."; + } + + var6 = var6 + "\n"; + } + + var6 = var6 + "\n"; + var6 = var6 + "\n"; + var6 = var6 + "\n"; + var6 = var6 + "--- BEGIN ERROR REPORT " + Integer.toHexString(var6.hashCode()) + " --------\n"; + var6 = var6 + var5; + var6 = var6 + "--- END ERROR REPORT " + Integer.toHexString(var6.hashCode()) + " ----------\n"; + var6 = var6 + "\n"; + var6 = var6 + "\n"; + TextArea var10 = new TextArea(var6, 0, 0, 1); + var10.setFont(new Font("Monospaced", 0, 12)); + this.add(new CanvasMojangLogo(), "North"); + this.add(new CanvasCrashReport(80), "East"); + this.add(new CanvasCrashReport(80), "West"); + this.add(new CanvasCrashReport(100), "South"); + this.add(var10, "Center"); + } +} diff --git a/src/net/minecraft/src/Particle.java b/src/net/minecraft/src/Particle.java new file mode 100644 index 0000000..bf9ecce --- /dev/null +++ b/src/net/minecraft/src/Particle.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +import java.util.Random; + +public class Particle { + private static Random rand = new Random(); + public double posX; + public double posY; + public double prevPosX; + public double prevPosY; + public double velocityX; + public double velocityY; + public double accelScale; + public boolean isDead; + public int timeTick; + public int timeLimit; + public double tintRed; + public double tintGreen; + public double tintBlue; + public double tintAlpha; + public double prevTintRed; + public double prevTintGreen; + public double prevTintBlue; + public double prevTintAlpha; + + public void update(GuiParticle var1) { + this.posX += this.velocityX; + this.posY += this.velocityY; + this.velocityX *= this.accelScale; + this.velocityY *= this.accelScale; + this.velocityY += 0.1D; + if(++this.timeTick > this.timeLimit) { + this.setDead(); + } + + this.tintAlpha = 2.0D - (double)this.timeTick / (double)this.timeLimit * 2.0D; + if(this.tintAlpha > 1.0D) { + this.tintAlpha = 1.0D; + } + + this.tintAlpha *= this.tintAlpha; + this.tintAlpha *= 0.5D; + } + + public void preUpdate() { + this.prevTintRed = this.tintRed; + this.prevTintGreen = this.tintGreen; + this.prevTintBlue = this.tintBlue; + this.prevTintAlpha = this.tintAlpha; + this.prevPosX = this.posX; + this.prevPosY = this.posY; + } + + public void setDead() { + this.isDead = true; + } +} diff --git a/src/net/minecraft/src/Path.java b/src/net/minecraft/src/Path.java new file mode 100644 index 0000000..ce289f0 --- /dev/null +++ b/src/net/minecraft/src/Path.java @@ -0,0 +1,119 @@ +package net.minecraft.src; + +public class Path { + private PathPoint[] pathPoints = new PathPoint[1024]; + private int count = 0; + + public PathPoint addPoint(PathPoint var1) { + if(var1.index >= 0) { + throw new IllegalStateException("OW KNOWS!"); + } else { + if(this.count == this.pathPoints.length) { + PathPoint[] var2 = new PathPoint[this.count << 1]; + System.arraycopy(this.pathPoints, 0, var2, 0, this.count); + this.pathPoints = var2; + } + + this.pathPoints[this.count] = var1; + var1.index = this.count; + this.sortBack(this.count++); + return var1; + } + } + + public void clearPath() { + this.count = 0; + } + + public PathPoint dequeue() { + PathPoint var1 = this.pathPoints[0]; + this.pathPoints[0] = this.pathPoints[--this.count]; + this.pathPoints[this.count] = null; + if(this.count > 0) { + this.sortForward(0); + } + + var1.index = -1; + return var1; + } + + public void changeDistance(PathPoint var1, float var2) { + float var3 = var1.distanceToTarget; + var1.distanceToTarget = var2; + if(var2 < var3) { + this.sortBack(var1.index); + } else { + this.sortForward(var1.index); + } + + } + + private void sortBack(int var1) { + PathPoint var2 = this.pathPoints[var1]; + + int var4; + for(float var3 = var2.distanceToTarget; var1 > 0; var1 = var4) { + var4 = var1 - 1 >> 1; + PathPoint var5 = this.pathPoints[var4]; + if(var3 >= var5.distanceToTarget) { + break; + } + + this.pathPoints[var1] = var5; + var5.index = var1; + } + + this.pathPoints[var1] = var2; + var2.index = var1; + } + + private void sortForward(int var1) { + PathPoint var2 = this.pathPoints[var1]; + float var3 = var2.distanceToTarget; + + while(true) { + int var4 = 1 + (var1 << 1); + int var5 = var4 + 1; + if(var4 >= this.count) { + break; + } + + PathPoint var6 = this.pathPoints[var4]; + float var7 = var6.distanceToTarget; + PathPoint var8; + float var9; + if(var5 >= this.count) { + var8 = null; + var9 = Float.POSITIVE_INFINITY; + } else { + var8 = this.pathPoints[var5]; + var9 = var8.distanceToTarget; + } + + if(var7 < var9) { + if(var7 >= var3) { + break; + } + + this.pathPoints[var1] = var6; + var6.index = var1; + var1 = var4; + } else { + if(var9 >= var3) { + break; + } + + this.pathPoints[var1] = var8; + var8.index = var1; + var1 = var5; + } + } + + this.pathPoints[var1] = var2; + var2.index = var1; + } + + public boolean isPathEmpty() { + return this.count == 0; + } +} diff --git a/src/net/minecraft/src/PathEntity.java b/src/net/minecraft/src/PathEntity.java new file mode 100644 index 0000000..a33362b --- /dev/null +++ b/src/net/minecraft/src/PathEntity.java @@ -0,0 +1,76 @@ +package net.minecraft.src; + +public class PathEntity { + private final PathPoint[] points; + private int currentPathIndex; + private int pathLength; + + public PathEntity(PathPoint[] var1) { + this.points = var1; + this.pathLength = var1.length; + } + + public void incrementPathIndex() { + ++this.currentPathIndex; + } + + public boolean isFinished() { + return this.currentPathIndex >= this.pathLength; + } + + public PathPoint getFinalPathPoint() { + return this.pathLength > 0 ? this.points[this.pathLength - 1] : null; + } + + public PathPoint getPathPointFromIndex(int var1) { + return this.points[var1]; + } + + public int getCurrentPathLength() { + return this.pathLength; + } + + public void setCurrentPathLength(int var1) { + this.pathLength = var1; + } + + public int getCurrentPathIndex() { + return this.currentPathIndex; + } + + public void setCurrentPathIndex(int var1) { + this.currentPathIndex = var1; + } + + public Vec3 getVectorFromIndex(Entity var1, int var2) { + double var3 = (double)this.points[var2].xCoord + (double)((int)(var1.width + 1.0F)) * 0.5D; + double var5 = (double)this.points[var2].yCoord; + double var7 = (double)this.points[var2].zCoord + (double)((int)(var1.width + 1.0F)) * 0.5D; + return var1.worldObj.getWorldVec3Pool().getVecFromPool(var3, var5, var7); + } + + public Vec3 getPosition(Entity var1) { + return this.getVectorFromIndex(var1, this.currentPathIndex); + } + + public boolean isSamePath(PathEntity var1) { + if(var1 == null) { + return false; + } else if(var1.points.length != this.points.length) { + return false; + } else { + for(int var2 = 0; var2 < this.points.length; ++var2) { + if(this.points[var2].xCoord != var1.points[var2].xCoord || this.points[var2].yCoord != var1.points[var2].yCoord || this.points[var2].zCoord != var1.points[var2].zCoord) { + return false; + } + } + + return true; + } + } + + public boolean isDestinationSame(Vec3 var1) { + PathPoint var2 = this.getFinalPathPoint(); + return var2 == null ? false : var2.xCoord == (int)var1.xCoord && var2.zCoord == (int)var1.zCoord; + } +} diff --git a/src/net/minecraft/src/PathFinder.java b/src/net/minecraft/src/PathFinder.java new file mode 100644 index 0000000..0e07846 --- /dev/null +++ b/src/net/minecraft/src/PathFinder.java @@ -0,0 +1,269 @@ +package net.minecraft.src; + +public class PathFinder { + private IBlockAccess worldMap; + private Path path = new Path(); + private IntHashMap pointMap = new IntHashMap(); + private PathPoint[] pathOptions = new PathPoint[32]; + private boolean isWoddenDoorAllowed; + private boolean isMovementBlockAllowed; + private boolean isPathingInWater; + private boolean canEntityDrown; + + public PathFinder(IBlockAccess var1, boolean var2, boolean var3, boolean var4, boolean var5) { + this.worldMap = var1; + this.isWoddenDoorAllowed = var2; + this.isMovementBlockAllowed = var3; + this.isPathingInWater = var4; + this.canEntityDrown = var5; + } + + public PathEntity createEntityPathTo(Entity var1, Entity var2, float var3) { + return this.createEntityPathTo(var1, var2.posX, var2.boundingBox.minY, var2.posZ, var3); + } + + public PathEntity createEntityPathTo(Entity var1, int var2, int var3, int var4, float var5) { + return this.createEntityPathTo(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), var5); + } + + private PathEntity createEntityPathTo(Entity var1, double var2, double var4, double var6, float var8) { + this.path.clearPath(); + this.pointMap.clearMap(); + boolean var9 = this.isPathingInWater; + int var10 = MathHelper.floor_double(var1.boundingBox.minY + 0.5D); + if(this.canEntityDrown && var1.isInWater()) { + var10 = (int)var1.boundingBox.minY; + + for(int var11 = this.worldMap.getBlockId(MathHelper.floor_double(var1.posX), var10, MathHelper.floor_double(var1.posZ)); var11 == Block.waterMoving.blockID || var11 == Block.waterStill.blockID; var11 = this.worldMap.getBlockId(MathHelper.floor_double(var1.posX), var10, MathHelper.floor_double(var1.posZ))) { + ++var10; + } + + var9 = this.isPathingInWater; + this.isPathingInWater = false; + } else { + var10 = MathHelper.floor_double(var1.boundingBox.minY + 0.5D); + } + + PathPoint var15 = this.openPoint(MathHelper.floor_double(var1.boundingBox.minX), var10, MathHelper.floor_double(var1.boundingBox.minZ)); + PathPoint var12 = this.openPoint(MathHelper.floor_double(var2 - (double)(var1.width / 2.0F)), MathHelper.floor_double(var4), MathHelper.floor_double(var6 - (double)(var1.width / 2.0F))); + PathPoint var13 = new PathPoint(MathHelper.floor_float(var1.width + 1.0F), MathHelper.floor_float(var1.height + 1.0F), MathHelper.floor_float(var1.width + 1.0F)); + PathEntity var14 = this.addToPath(var1, var15, var12, var13, var8); + this.isPathingInWater = var9; + return var14; + } + + private PathEntity addToPath(Entity var1, PathPoint var2, PathPoint var3, PathPoint var4, float var5) { + var2.totalPathDistance = 0.0F; + var2.distanceToNext = var2.func_75832_b(var3); + var2.distanceToTarget = var2.distanceToNext; + this.path.clearPath(); + this.path.addPoint(var2); + PathPoint var6 = var2; + + while(!this.path.isPathEmpty()) { + PathPoint var7 = this.path.dequeue(); + if(var7.equals(var3)) { + return this.createEntityPath(var2, var3); + } + + if(var7.func_75832_b(var3) < var6.func_75832_b(var3)) { + var6 = var7; + } + + var7.isFirst = true; + int var8 = this.findPathOptions(var1, var7, var4, var3, var5); + + for(int var9 = 0; var9 < var8; ++var9) { + PathPoint var10 = this.pathOptions[var9]; + float var11 = var7.totalPathDistance + var7.func_75832_b(var10); + if(!var10.isAssigned() || var11 < var10.totalPathDistance) { + var10.previous = var7; + var10.totalPathDistance = var11; + var10.distanceToNext = var10.func_75832_b(var3); + if(var10.isAssigned()) { + this.path.changeDistance(var10, var10.totalPathDistance + var10.distanceToNext); + } else { + var10.distanceToTarget = var10.totalPathDistance + var10.distanceToNext; + this.path.addPoint(var10); + } + } + } + } + + if(var6 == var2) { + return null; + } else { + return this.createEntityPath(var2, var6); + } + } + + private int findPathOptions(Entity var1, PathPoint var2, PathPoint var3, PathPoint var4, float var5) { + int var6 = 0; + byte var7 = 0; + if(this.getVerticalOffset(var1, var2.xCoord, var2.yCoord + 1, var2.zCoord, var3) == 1) { + var7 = 1; + } + + PathPoint var8 = this.getSafePoint(var1, var2.xCoord, var2.yCoord, var2.zCoord + 1, var3, var7); + PathPoint var9 = this.getSafePoint(var1, var2.xCoord - 1, var2.yCoord, var2.zCoord, var3, var7); + PathPoint var10 = this.getSafePoint(var1, var2.xCoord + 1, var2.yCoord, var2.zCoord, var3, var7); + PathPoint var11 = this.getSafePoint(var1, var2.xCoord, var2.yCoord, var2.zCoord - 1, var3, var7); + if(var8 != null && !var8.isFirst && var8.distanceTo(var4) < var5) { + this.pathOptions[var6++] = var8; + } + + if(var9 != null && !var9.isFirst && var9.distanceTo(var4) < var5) { + this.pathOptions[var6++] = var9; + } + + if(var10 != null && !var10.isFirst && var10.distanceTo(var4) < var5) { + this.pathOptions[var6++] = var10; + } + + if(var11 != null && !var11.isFirst && var11.distanceTo(var4) < var5) { + this.pathOptions[var6++] = var11; + } + + return var6; + } + + private PathPoint getSafePoint(Entity var1, int var2, int var3, int var4, PathPoint var5, int var6) { + PathPoint var7 = null; + int var8 = this.getVerticalOffset(var1, var2, var3, var4, var5); + if(var8 == 2) { + return this.openPoint(var2, var3, var4); + } else { + if(var8 == 1) { + var7 = this.openPoint(var2, var3, var4); + } + + if(var7 == null && var6 > 0 && var8 != -3 && var8 != -4 && this.getVerticalOffset(var1, var2, var3 + var6, var4, var5) == 1) { + var7 = this.openPoint(var2, var3 + var6, var4); + var3 += var6; + } + + if(var7 != null) { + int var9 = 0; + int var10 = 0; + + while(var3 > 0) { + var10 = this.getVerticalOffset(var1, var2, var3 - 1, var4, var5); + if(this.isPathingInWater && var10 == -1) { + return null; + } + + if(var10 != 1) { + break; + } + + if(var9++ >= var1.func_82143_as()) { + return null; + } + + --var3; + if(var3 > 0) { + var7 = this.openPoint(var2, var3, var4); + } + } + + if(var10 == -2) { + return null; + } + } + + return var7; + } + } + + private final PathPoint openPoint(int var1, int var2, int var3) { + int var4 = PathPoint.makeHash(var1, var2, var3); + PathPoint var5 = (PathPoint)this.pointMap.lookup(var4); + if(var5 == null) { + var5 = new PathPoint(var1, var2, var3); + this.pointMap.addKey(var4, var5); + } + + return var5; + } + + public int getVerticalOffset(Entity var1, int var2, int var3, int var4, PathPoint var5) { + return func_82565_a(var1, var2, var3, var4, var5, this.isPathingInWater, this.isMovementBlockAllowed, this.isWoddenDoorAllowed); + } + + public static int func_82565_a(Entity var0, int var1, int var2, int var3, PathPoint var4, boolean var5, boolean var6, boolean var7) { + boolean var8 = false; + + for(int var9 = var1; var9 < var1 + var4.xCoord; ++var9) { + for(int var10 = var2; var10 < var2 + var4.yCoord; ++var10) { + for(int var11 = var3; var11 < var3 + var4.zCoord; ++var11) { + int var12 = var0.worldObj.getBlockId(var9, var10, var11); + if(var12 > 0) { + if(var12 == Block.trapdoor.blockID) { + var8 = true; + } else if(var12 != Block.waterMoving.blockID && var12 != Block.waterStill.blockID) { + if(!var7 && var12 == Block.doorWood.blockID) { + return 0; + } + } else { + if(var5) { + return -1; + } + + var8 = true; + } + + Block var13 = Block.blocksList[var12]; + int var14 = var13.getRenderType(); + if(var0.worldObj.blockGetRenderType(var9, var10, var11) == 9) { + int var18 = MathHelper.floor_double(var0.posX); + int var16 = MathHelper.floor_double(var0.posY); + int var17 = MathHelper.floor_double(var0.posZ); + if(var0.worldObj.blockGetRenderType(var18, var16, var17) != 9 && var0.worldObj.blockGetRenderType(var18, var16 - 1, var17) != 9) { + return -3; + } + } else if(!var13.getBlocksMovement(var0.worldObj, var9, var10, var11) && (!var6 || var12 != Block.doorWood.blockID)) { + if(var14 == 11 || var12 == Block.fenceGate.blockID || var14 == 32) { + return -3; + } + + if(var12 == Block.trapdoor.blockID) { + return -4; + } + + Material var15 = var13.blockMaterial; + if(var15 != Material.lava) { + return 0; + } + + if(!var0.handleLavaMovement()) { + return -2; + } + } + } + } + } + } + + return var8 ? 2 : 1; + } + + private PathEntity createEntityPath(PathPoint var1, PathPoint var2) { + int var3 = 1; + + PathPoint var4; + for(var4 = var2; var4.previous != null; var4 = var4.previous) { + ++var3; + } + + PathPoint[] var5 = new PathPoint[var3]; + var4 = var2; + --var3; + + for(var5[var3] = var2; var4.previous != null; var5[var3] = var4) { + var4 = var4.previous; + --var3; + } + + return new PathEntity(var5); + } +} diff --git a/src/net/minecraft/src/PathNavigate.java b/src/net/minecraft/src/PathNavigate.java new file mode 100644 index 0000000..252f867 --- /dev/null +++ b/src/net/minecraft/src/PathNavigate.java @@ -0,0 +1,331 @@ +package net.minecraft.src; + +public class PathNavigate { + private EntityLiving theEntity; + private World worldObj; + private PathEntity currentPath; + private float speed; + private float pathSearchRange; + private boolean noSunPathfind = false; + private int totalTicks; + private int ticksAtLastPos; + private Vec3 lastPosCheck = Vec3.createVectorHelper(0.0D, 0.0D, 0.0D); + private boolean canPassOpenWoodenDoors = true; + private boolean canPassClosedWoodenDoors = false; + private boolean avoidsWater = false; + private boolean canSwim = false; + + public PathNavigate(EntityLiving var1, World var2, float var3) { + this.theEntity = var1; + this.worldObj = var2; + this.pathSearchRange = var3; + } + + public void setAvoidsWater(boolean var1) { + this.avoidsWater = var1; + } + + public boolean getAvoidsWater() { + return this.avoidsWater; + } + + public void setBreakDoors(boolean var1) { + this.canPassClosedWoodenDoors = var1; + } + + public void setEnterDoors(boolean var1) { + this.canPassOpenWoodenDoors = var1; + } + + public boolean getCanBreakDoors() { + return this.canPassClosedWoodenDoors; + } + + public void setAvoidSun(boolean var1) { + this.noSunPathfind = var1; + } + + public void setSpeed(float var1) { + this.speed = var1; + } + + public void setCanSwim(boolean var1) { + this.canSwim = var1; + } + + public PathEntity getPathToXYZ(double var1, double var3, double var5) { + return !this.canNavigate() ? null : this.worldObj.getEntityPathToXYZ(this.theEntity, MathHelper.floor_double(var1), (int)var3, MathHelper.floor_double(var5), this.pathSearchRange, this.canPassOpenWoodenDoors, this.canPassClosedWoodenDoors, this.avoidsWater, this.canSwim); + } + + public boolean tryMoveToXYZ(double var1, double var3, double var5, float var7) { + PathEntity var8 = this.getPathToXYZ((double)MathHelper.floor_double(var1), (double)((int)var3), (double)MathHelper.floor_double(var5)); + return this.setPath(var8, var7); + } + + public PathEntity getPathToEntityLiving(EntityLiving var1) { + return !this.canNavigate() ? null : this.worldObj.getPathEntityToEntity(this.theEntity, var1, this.pathSearchRange, this.canPassOpenWoodenDoors, this.canPassClosedWoodenDoors, this.avoidsWater, this.canSwim); + } + + public boolean tryMoveToEntityLiving(EntityLiving var1, float var2) { + PathEntity var3 = this.getPathToEntityLiving(var1); + return var3 != null ? this.setPath(var3, var2) : false; + } + + public boolean setPath(PathEntity var1, float var2) { + if(var1 == null) { + this.currentPath = null; + return false; + } else { + if(!var1.isSamePath(this.currentPath)) { + this.currentPath = var1; + } + + if(this.noSunPathfind) { + this.removeSunnyPath(); + } + + if(this.currentPath.getCurrentPathLength() == 0) { + return false; + } else { + this.speed = var2; + Vec3 var3 = this.getEntityPosition(); + this.ticksAtLastPos = this.totalTicks; + this.lastPosCheck.xCoord = var3.xCoord; + this.lastPosCheck.yCoord = var3.yCoord; + this.lastPosCheck.zCoord = var3.zCoord; + return true; + } + } + } + + public PathEntity getPath() { + return this.currentPath; + } + + public void onUpdateNavigation() { + ++this.totalTicks; + if(!this.noPath()) { + if(this.canNavigate()) { + this.pathFollow(); + } + + if(!this.noPath()) { + Vec3 var1 = this.currentPath.getPosition(this.theEntity); + if(var1 != null) { + this.theEntity.getMoveHelper().setMoveTo(var1.xCoord, var1.yCoord, var1.zCoord, this.speed); + } + } + } + } + + private void pathFollow() { + Vec3 var1 = this.getEntityPosition(); + int var2 = this.currentPath.getCurrentPathLength(); + + for(int var3 = this.currentPath.getCurrentPathIndex(); var3 < this.currentPath.getCurrentPathLength(); ++var3) { + if(this.currentPath.getPathPointFromIndex(var3).yCoord != (int)var1.yCoord) { + var2 = var3; + break; + } + } + + float var8 = this.theEntity.width * this.theEntity.width; + + int var4; + for(var4 = this.currentPath.getCurrentPathIndex(); var4 < var2; ++var4) { + if(var1.squareDistanceTo(this.currentPath.getVectorFromIndex(this.theEntity, var4)) < (double)var8) { + this.currentPath.setCurrentPathIndex(var4 + 1); + } + } + + var4 = MathHelper.ceiling_float_int(this.theEntity.width); + int var5 = (int)this.theEntity.height + 1; + int var6 = var4; + + for(int var7 = var2 - 1; var7 >= this.currentPath.getCurrentPathIndex(); --var7) { + if(this.isDirectPathBetweenPoints(var1, this.currentPath.getVectorFromIndex(this.theEntity, var7), var4, var5, var6)) { + this.currentPath.setCurrentPathIndex(var7); + break; + } + } + + if(this.totalTicks - this.ticksAtLastPos > 100) { + if(var1.squareDistanceTo(this.lastPosCheck) < 2.25D) { + this.clearPathEntity(); + } + + this.ticksAtLastPos = this.totalTicks; + this.lastPosCheck.xCoord = var1.xCoord; + this.lastPosCheck.yCoord = var1.yCoord; + this.lastPosCheck.zCoord = var1.zCoord; + } + + } + + public boolean noPath() { + return this.currentPath == null || this.currentPath.isFinished(); + } + + public void clearPathEntity() { + this.currentPath = null; + } + + private Vec3 getEntityPosition() { + return this.worldObj.getWorldVec3Pool().getVecFromPool(this.theEntity.posX, (double)this.getPathableYPos(), this.theEntity.posZ); + } + + private int getPathableYPos() { + if(this.theEntity.isInWater() && this.canSwim) { + int var1 = (int)this.theEntity.boundingBox.minY; + int var2 = this.worldObj.getBlockId(MathHelper.floor_double(this.theEntity.posX), var1, MathHelper.floor_double(this.theEntity.posZ)); + int var3 = 0; + + do { + if(var2 != Block.waterMoving.blockID && var2 != Block.waterStill.blockID) { + return var1; + } + + ++var1; + var2 = this.worldObj.getBlockId(MathHelper.floor_double(this.theEntity.posX), var1, MathHelper.floor_double(this.theEntity.posZ)); + ++var3; + } while(var3 <= 16); + + return (int)this.theEntity.boundingBox.minY; + } else { + return (int)(this.theEntity.boundingBox.minY + 0.5D); + } + } + + private boolean canNavigate() { + return this.theEntity.onGround || this.canSwim && this.isInFluid(); + } + + private boolean isInFluid() { + return this.theEntity.isInWater() || this.theEntity.handleLavaMovement(); + } + + private void removeSunnyPath() { + if(!this.worldObj.canBlockSeeTheSky(MathHelper.floor_double(this.theEntity.posX), (int)(this.theEntity.boundingBox.minY + 0.5D), MathHelper.floor_double(this.theEntity.posZ))) { + for(int var1 = 0; var1 < this.currentPath.getCurrentPathLength(); ++var1) { + PathPoint var2 = this.currentPath.getPathPointFromIndex(var1); + if(this.worldObj.canBlockSeeTheSky(var2.xCoord, var2.yCoord, var2.zCoord)) { + this.currentPath.setCurrentPathLength(var1 - 1); + return; + } + } + + } + } + + private boolean isDirectPathBetweenPoints(Vec3 var1, Vec3 var2, int var3, int var4, int var5) { + int var6 = MathHelper.floor_double(var1.xCoord); + int var7 = MathHelper.floor_double(var1.zCoord); + double var8 = var2.xCoord - var1.xCoord; + double var10 = var2.zCoord - var1.zCoord; + double var12 = var8 * var8 + var10 * var10; + if(var12 < 1.0E-8D) { + return false; + } else { + double var14 = 1.0D / Math.sqrt(var12); + var8 *= var14; + var10 *= var14; + var3 += 2; + var5 += 2; + if(!this.isSafeToStandAt(var6, (int)var1.yCoord, var7, var3, var4, var5, var1, var8, var10)) { + return false; + } else { + var3 -= 2; + var5 -= 2; + double var16 = 1.0D / Math.abs(var8); + double var18 = 1.0D / Math.abs(var10); + double var20 = (double)(var6 * 1) - var1.xCoord; + double var22 = (double)(var7 * 1) - var1.zCoord; + if(var8 >= 0.0D) { + ++var20; + } + + if(var10 >= 0.0D) { + ++var22; + } + + var20 /= var8; + var22 /= var10; + int var24 = var8 < 0.0D ? -1 : 1; + int var25 = var10 < 0.0D ? -1 : 1; + int var26 = MathHelper.floor_double(var2.xCoord); + int var27 = MathHelper.floor_double(var2.zCoord); + int var28 = var26 - var6; + int var29 = var27 - var7; + + do { + if(var28 * var24 <= 0 && var29 * var25 <= 0) { + return true; + } + + if(var20 < var22) { + var20 += var16; + var6 += var24; + var28 = var26 - var6; + } else { + var22 += var18; + var7 += var25; + var29 = var27 - var7; + } + } while(this.isSafeToStandAt(var6, (int)var1.yCoord, var7, var3, var4, var5, var1, var8, var10)); + + return false; + } + } + } + + private boolean isSafeToStandAt(int var1, int var2, int var3, int var4, int var5, int var6, Vec3 var7, double var8, double var10) { + int var12 = var1 - var4 / 2; + int var13 = var3 - var6 / 2; + if(!this.isPositionClear(var12, var2, var13, var4, var5, var6, var7, var8, var10)) { + return false; + } else { + for(int var14 = var12; var14 < var12 + var4; ++var14) { + for(int var15 = var13; var15 < var13 + var6; ++var15) { + double var16 = (double)var14 + 0.5D - var7.xCoord; + double var18 = (double)var15 + 0.5D - var7.zCoord; + if(var16 * var8 + var18 * var10 >= 0.0D) { + int var20 = this.worldObj.getBlockId(var14, var2 - 1, var15); + if(var20 <= 0) { + return false; + } + + Material var21 = Block.blocksList[var20].blockMaterial; + if(var21 == Material.water && !this.theEntity.isInWater()) { + return false; + } + + if(var21 == Material.lava) { + return false; + } + } + } + } + + return true; + } + } + + private boolean isPositionClear(int var1, int var2, int var3, int var4, int var5, int var6, Vec3 var7, double var8, double var10) { + for(int var12 = var1; var12 < var1 + var4; ++var12) { + for(int var13 = var2; var13 < var2 + var5; ++var13) { + for(int var14 = var3; var14 < var3 + var6; ++var14) { + double var15 = (double)var12 + 0.5D - var7.xCoord; + double var17 = (double)var14 + 0.5D - var7.zCoord; + if(var15 * var8 + var17 * var10 >= 0.0D) { + int var19 = this.worldObj.getBlockId(var12, var13, var14); + if(var19 > 0 && !Block.blocksList[var19].getBlocksMovement(this.worldObj, var12, var13, var14)) { + return false; + } + } + } + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/PathPoint.java b/src/net/minecraft/src/PathPoint.java new file mode 100644 index 0000000..45adabf --- /dev/null +++ b/src/net/minecraft/src/PathPoint.java @@ -0,0 +1,60 @@ +package net.minecraft.src; + +public class PathPoint { + public final int xCoord; + public final int yCoord; + public final int zCoord; + private final int hash; + int index = -1; + float totalPathDistance; + float distanceToNext; + float distanceToTarget; + PathPoint previous; + public boolean isFirst = false; + + public PathPoint(int var1, int var2, int var3) { + this.xCoord = var1; + this.yCoord = var2; + this.zCoord = var3; + this.hash = makeHash(var1, var2, var3); + } + + public static int makeHash(int var0, int var1, int var2) { + return var1 & 255 | (var0 & Short.MAX_VALUE) << 8 | (var2 & Short.MAX_VALUE) << 24 | (var0 < 0 ? Integer.MIN_VALUE : 0) | (var2 < 0 ? -Short.MIN_VALUE : 0); + } + + public float distanceTo(PathPoint var1) { + float var2 = (float)(var1.xCoord - this.xCoord); + float var3 = (float)(var1.yCoord - this.yCoord); + float var4 = (float)(var1.zCoord - this.zCoord); + return MathHelper.sqrt_float(var2 * var2 + var3 * var3 + var4 * var4); + } + + public float func_75832_b(PathPoint var1) { + float var2 = (float)(var1.xCoord - this.xCoord); + float var3 = (float)(var1.yCoord - this.yCoord); + float var4 = (float)(var1.zCoord - this.zCoord); + return var2 * var2 + var3 * var3 + var4 * var4; + } + + public boolean equals(Object var1) { + if(!(var1 instanceof PathPoint)) { + return false; + } else { + PathPoint var2 = (PathPoint)var1; + return this.hash == var2.hash && this.xCoord == var2.xCoord && this.yCoord == var2.yCoord && this.zCoord == var2.zCoord; + } + } + + public int hashCode() { + return this.hash; + } + + public boolean isAssigned() { + return this.index >= 0; + } + + public String toString() { + return this.xCoord + ", " + this.yCoord + ", " + this.zCoord; + } +} diff --git a/src/net/minecraft/src/PlayerCapabilities.java b/src/net/minecraft/src/PlayerCapabilities.java new file mode 100644 index 0000000..a078319 --- /dev/null +++ b/src/net/minecraft/src/PlayerCapabilities.java @@ -0,0 +1,58 @@ +package net.minecraft.src; + +public class PlayerCapabilities { + public boolean disableDamage = false; + public boolean isFlying = false; + public boolean allowFlying = false; + public boolean isCreativeMode = false; + public boolean allowEdit = true; + private float flySpeed = 0.05F; + private float walkSpeed = 0.1F; + + public void writeCapabilitiesToNBT(NBTTagCompound var1) { + NBTTagCompound var2 = new NBTTagCompound(); + var2.setBoolean("invulnerable", this.disableDamage); + var2.setBoolean("flying", this.isFlying); + var2.setBoolean("mayfly", this.allowFlying); + var2.setBoolean("instabuild", this.isCreativeMode); + var2.setBoolean("mayBuild", this.allowEdit); + var2.setFloat("flySpeed", this.flySpeed); + var2.setFloat("walkSpeed", this.walkSpeed); + var1.setTag("abilities", var2); + } + + public void readCapabilitiesFromNBT(NBTTagCompound var1) { + if(var1.hasKey("abilities")) { + NBTTagCompound var2 = var1.getCompoundTag("abilities"); + this.disableDamage = var2.getBoolean("invulnerable"); + this.isFlying = var2.getBoolean("flying"); + this.allowFlying = var2.getBoolean("mayfly"); + this.isCreativeMode = var2.getBoolean("instabuild"); + if(var2.hasKey("flySpeed")) { + this.flySpeed = var2.getFloat("flySpeed"); + this.walkSpeed = var2.getFloat("walkSpeed"); + } + + if(var2.hasKey("mayBuild")) { + this.allowEdit = var2.getBoolean("mayBuild"); + } + } + + } + + public float getFlySpeed() { + return this.flySpeed; + } + + public void setFlySpeed(float var1) { + this.flySpeed = var1; + } + + public float getWalkSpeed() { + return this.walkSpeed; + } + + public void setPlayerWalkSpeed(float var1) { + this.walkSpeed = var1; + } +} diff --git a/src/net/minecraft/src/PlayerControllerMP.java b/src/net/minecraft/src/PlayerControllerMP.java new file mode 100644 index 0000000..feffd5a --- /dev/null +++ b/src/net/minecraft/src/PlayerControllerMP.java @@ -0,0 +1,313 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +public class PlayerControllerMP { + private final Minecraft mc; + private final NetClientHandler netClientHandler; + private int currentBlockX = -1; + private int currentBlockY = -1; + private int currentblockZ = -1; + private ItemStack field_85183_f = null; + private float curBlockDamageMP = 0.0F; + private float stepSoundTickCounter = 0.0F; + private int blockHitDelay = 0; + private boolean isHittingBlock = false; + private EnumGameType currentGameType = EnumGameType.SURVIVAL; + private int currentPlayerItem = 0; + + public PlayerControllerMP(Minecraft var1, NetClientHandler var2) { + this.mc = var1; + this.netClientHandler = var2; + } + + public static void clickBlockCreative(Minecraft var0, PlayerControllerMP var1, int var2, int var3, int var4, int var5) { + if(!var0.theWorld.extinguishFire(var0.thePlayer, var2, var3, var4, var5)) { + var1.onPlayerDestroyBlock(var2, var3, var4, var5); + } + + } + + public void setPlayerCapabilities(EntityPlayer var1) { + this.currentGameType.configurePlayerCapabilities(var1.capabilities); + } + + public boolean enableEverythingIsScrewedUpMode() { + return false; + } + + public void setGameType(EnumGameType var1) { + this.currentGameType = var1; + this.currentGameType.configurePlayerCapabilities(this.mc.thePlayer.capabilities); + } + + public void flipPlayer(EntityPlayer var1) { + var1.rotationYaw = -180.0F; + } + + public boolean shouldDrawHUD() { + return this.currentGameType.isSurvivalOrAdventure(); + } + + public boolean onPlayerDestroyBlock(int var1, int var2, int var3, int var4) { + if(this.currentGameType.isAdventure() && !this.mc.thePlayer.canCurrentToolHarvestBlock(var1, var2, var3)) { + return false; + } else { + WorldClient var5 = this.mc.theWorld; + Block var6 = Block.blocksList[var5.getBlockId(var1, var2, var3)]; + if(var6 == null) { + return false; + } else { + var5.playAuxSFX(2001, var1, var2, var3, var6.blockID + (var5.getBlockMetadata(var1, var2, var3) << 12)); + int var7 = var5.getBlockMetadata(var1, var2, var3); + boolean var8 = var5.setBlockToAir(var1, var2, var3); + if(var8) { + var6.onBlockDestroyedByPlayer(var5, var1, var2, var3, var7); + } + + this.currentBlockY = -1; + if(!this.currentGameType.isCreative()) { + ItemStack var9 = this.mc.thePlayer.getCurrentEquippedItem(); + if(var9 != null) { + var9.onBlockDestroyed(var5, var6.blockID, var1, var2, var3, this.mc.thePlayer); + if(var9.stackSize == 0) { + this.mc.thePlayer.destroyCurrentEquippedItem(); + } + } + } + + return var8; + } + } + } + + public void clickBlock(int var1, int var2, int var3, int var4) { + if(!this.currentGameType.isAdventure() || this.mc.thePlayer.canCurrentToolHarvestBlock(var1, var2, var3)) { + if(this.currentGameType.isCreative()) { + this.netClientHandler.addToSendQueue(new Packet14BlockDig(0, var1, var2, var3, var4)); + clickBlockCreative(this.mc, this, var1, var2, var3, var4); + this.blockHitDelay = 5; + } else if(!this.isHittingBlock || !this.sameToolAndBlock(var1, var2, var3)) { + if(this.isHittingBlock) { + this.netClientHandler.addToSendQueue(new Packet14BlockDig(1, this.currentBlockX, this.currentBlockY, this.currentblockZ, var4)); + } + + this.netClientHandler.addToSendQueue(new Packet14BlockDig(0, var1, var2, var3, var4)); + int var5 = this.mc.theWorld.getBlockId(var1, var2, var3); + if(var5 > 0 && this.curBlockDamageMP == 0.0F) { + Block.blocksList[var5].onBlockClicked(this.mc.theWorld, var1, var2, var3, this.mc.thePlayer); + } + + if(var5 > 0 && Block.blocksList[var5].getPlayerRelativeBlockHardness(this.mc.thePlayer, this.mc.thePlayer.worldObj, var1, var2, var3) >= 1.0F) { + this.onPlayerDestroyBlock(var1, var2, var3, var4); + } else { + this.isHittingBlock = true; + this.currentBlockX = var1; + this.currentBlockY = var2; + this.currentblockZ = var3; + this.field_85183_f = this.mc.thePlayer.getHeldItem(); + this.curBlockDamageMP = 0.0F; + this.stepSoundTickCounter = 0.0F; + this.mc.theWorld.destroyBlockInWorldPartially(this.mc.thePlayer.entityId, this.currentBlockX, this.currentBlockY, this.currentblockZ, (int)(this.curBlockDamageMP * 10.0F) - 1); + } + } + + } + } + + public void resetBlockRemoving() { + if(this.isHittingBlock) { + this.netClientHandler.addToSendQueue(new Packet14BlockDig(1, this.currentBlockX, this.currentBlockY, this.currentblockZ, -1)); + } + + this.isHittingBlock = false; + this.curBlockDamageMP = 0.0F; + this.mc.theWorld.destroyBlockInWorldPartially(this.mc.thePlayer.entityId, this.currentBlockX, this.currentBlockY, this.currentblockZ, -1); + } + + public void onPlayerDamageBlock(int var1, int var2, int var3, int var4) { + this.syncCurrentPlayItem(); + if(this.blockHitDelay > 0) { + --this.blockHitDelay; + } else if(this.currentGameType.isCreative()) { + this.blockHitDelay = 5; + this.netClientHandler.addToSendQueue(new Packet14BlockDig(0, var1, var2, var3, var4)); + clickBlockCreative(this.mc, this, var1, var2, var3, var4); + } else { + if(this.sameToolAndBlock(var1, var2, var3)) { + int var5 = this.mc.theWorld.getBlockId(var1, var2, var3); + if(var5 == 0) { + this.isHittingBlock = false; + return; + } + + Block var6 = Block.blocksList[var5]; + this.curBlockDamageMP += var6.getPlayerRelativeBlockHardness(this.mc.thePlayer, this.mc.thePlayer.worldObj, var1, var2, var3); + if(this.stepSoundTickCounter % 4.0F == 0.0F && var6 != null) { + this.mc.sndManager.playSound(var6.stepSound.getStepSound(), (float)var1 + 0.5F, (float)var2 + 0.5F, (float)var3 + 0.5F, (var6.stepSound.getVolume() + 1.0F) / 8.0F, var6.stepSound.getPitch() * 0.5F); + } + + ++this.stepSoundTickCounter; + if(this.curBlockDamageMP >= 1.0F) { + this.isHittingBlock = false; + this.netClientHandler.addToSendQueue(new Packet14BlockDig(2, var1, var2, var3, var4)); + this.onPlayerDestroyBlock(var1, var2, var3, var4); + this.curBlockDamageMP = 0.0F; + this.stepSoundTickCounter = 0.0F; + this.blockHitDelay = 5; + } + + this.mc.theWorld.destroyBlockInWorldPartially(this.mc.thePlayer.entityId, this.currentBlockX, this.currentBlockY, this.currentblockZ, (int)(this.curBlockDamageMP * 10.0F) - 1); + } else { + this.clickBlock(var1, var2, var3, var4); + } + + } + } + + public float getBlockReachDistance() { + return this.currentGameType.isCreative() ? 5.0F : 4.5F; + } + + public void updateController() { + this.syncCurrentPlayItem(); + this.mc.sndManager.playRandomMusicIfReady(); + } + + private boolean sameToolAndBlock(int var1, int var2, int var3) { + ItemStack var4 = this.mc.thePlayer.getHeldItem(); + boolean var5 = this.field_85183_f == null && var4 == null; + if(this.field_85183_f != null && var4 != null) { + var5 = var4.itemID == this.field_85183_f.itemID && ItemStack.areItemStackTagsEqual(var4, this.field_85183_f) && (var4.isItemStackDamageable() || var4.getItemDamage() == this.field_85183_f.getItemDamage()); + } + + return var1 == this.currentBlockX && var2 == this.currentBlockY && var3 == this.currentblockZ && var5; + } + + private void syncCurrentPlayItem() { + int var1 = this.mc.thePlayer.inventory.currentItem; + if(var1 != this.currentPlayerItem) { + this.currentPlayerItem = var1; + this.netClientHandler.addToSendQueue(new Packet16BlockItemSwitch(this.currentPlayerItem)); + } + + } + + public boolean onPlayerRightClick(EntityPlayer var1, World var2, ItemStack var3, int var4, int var5, int var6, int var7, Vec3 var8) { + this.syncCurrentPlayItem(); + float var9 = (float)var8.xCoord - (float)var4; + float var10 = (float)var8.yCoord - (float)var5; + float var11 = (float)var8.zCoord - (float)var6; + boolean var12 = false; + int var13; + if(!var1.isSneaking() || var1.getHeldItem() == null) { + var13 = var2.getBlockId(var4, var5, var6); + if(var13 > 0 && Block.blocksList[var13].onBlockActivated(var2, var4, var5, var6, var1, var7, var9, var10, var11)) { + var12 = true; + } + } + + if(!var12 && var3 != null && var3.getItem() instanceof ItemBlock) { + ItemBlock var16 = (ItemBlock)var3.getItem(); + if(!var16.canPlaceItemBlockOnSide(var2, var4, var5, var6, var7, var1, var3)) { + return false; + } + } + + this.netClientHandler.addToSendQueue(new Packet15Place(var4, var5, var6, var7, var1.inventory.getCurrentItem(), var9, var10, var11)); + if(var12) { + return true; + } else if(var3 == null) { + return false; + } else if(this.currentGameType.isCreative()) { + var13 = var3.getItemDamage(); + int var14 = var3.stackSize; + boolean var15 = var3.tryPlaceItemIntoWorld(var1, var2, var4, var5, var6, var7, var9, var10, var11); + var3.setItemDamage(var13); + var3.stackSize = var14; + return var15; + } else { + return var3.tryPlaceItemIntoWorld(var1, var2, var4, var5, var6, var7, var9, var10, var11); + } + } + + public boolean sendUseItem(EntityPlayer var1, World var2, ItemStack var3) { + this.syncCurrentPlayItem(); + this.netClientHandler.addToSendQueue(new Packet15Place(-1, -1, -1, 255, var1.inventory.getCurrentItem(), 0.0F, 0.0F, 0.0F)); + int var4 = var3.stackSize; + ItemStack var5 = var3.useItemRightClick(var2, var1); + if(var5 != var3 || var5 != null && var5.stackSize != var4) { + var1.inventory.mainInventory[var1.inventory.currentItem] = var5; + if(var5.stackSize == 0) { + var1.inventory.mainInventory[var1.inventory.currentItem] = null; + } + + return true; + } else { + return false; + } + } + + public EntityClientPlayerMP func_78754_a(World var1) { + return new EntityClientPlayerMP(this.mc, var1, this.mc.session, this.netClientHandler); + } + + public void attackEntity(EntityPlayer var1, Entity var2) { + this.syncCurrentPlayItem(); + this.netClientHandler.addToSendQueue(new Packet7UseEntity(var1.entityId, var2.entityId, 1)); + var1.attackTargetEntityWithCurrentItem(var2); + } + + public boolean func_78768_b(EntityPlayer var1, Entity var2) { + this.syncCurrentPlayItem(); + this.netClientHandler.addToSendQueue(new Packet7UseEntity(var1.entityId, var2.entityId, 0)); + return var1.interactWith(var2); + } + + public ItemStack windowClick(int var1, int var2, int var3, int var4, EntityPlayer var5) { + short var6 = var5.openContainer.getNextTransactionID(var5.inventory); + ItemStack var7 = var5.openContainer.slotClick(var2, var3, var4, var5); + this.netClientHandler.addToSendQueue(new Packet102WindowClick(var1, var2, var3, var4, var7, var6)); + return var7; + } + + public void sendEnchantPacket(int var1, int var2) { + this.netClientHandler.addToSendQueue(new Packet108EnchantItem(var1, var2)); + } + + public void sendSlotPacket(ItemStack var1, int var2) { + if(this.currentGameType.isCreative()) { + this.netClientHandler.addToSendQueue(new Packet107CreativeSetSlot(var2, var1)); + } + + } + + public void func_78752_a(ItemStack var1) { + if(this.currentGameType.isCreative() && var1 != null) { + this.netClientHandler.addToSendQueue(new Packet107CreativeSetSlot(-1, var1)); + } + + } + + public void onStoppedUsingItem(EntityPlayer var1) { + this.syncCurrentPlayItem(); + this.netClientHandler.addToSendQueue(new Packet14BlockDig(5, 0, 0, 0, 255)); + var1.stopUsingItem(); + } + + public boolean func_78763_f() { + return true; + } + + public boolean isNotCreative() { + return !this.currentGameType.isCreative(); + } + + public boolean isInCreativeMode() { + return this.currentGameType.isCreative(); + } + + public boolean extendedReach() { + return this.currentGameType.isCreative(); + } +} diff --git a/src/net/minecraft/src/PlayerInstance.java b/src/net/minecraft/src/PlayerInstance.java new file mode 100644 index 0000000..510f87a --- /dev/null +++ b/src/net/minecraft/src/PlayerInstance.java @@ -0,0 +1,146 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +class PlayerInstance { + private final List playersInChunk; + private final ChunkCoordIntPair chunkLocation; + private short[] locationOfBlockChange; + private int numberOfTilesToUpdate; + private int field_73260_f; + final PlayerManager thePlayerManager; + + public PlayerInstance(PlayerManager var1, int var2, int var3) { + this.thePlayerManager = var1; + this.playersInChunk = new ArrayList(); + this.locationOfBlockChange = new short[64]; + this.numberOfTilesToUpdate = 0; + this.chunkLocation = new ChunkCoordIntPair(var2, var3); + var1.getWorldServer().theChunkProviderServer.loadChunk(var2, var3); + } + + public void addPlayerToChunkWatchingList(EntityPlayerMP var1) { + if(this.playersInChunk.contains(var1)) { + throw new IllegalStateException("Failed to add player. " + var1 + " already is in chunk " + this.chunkLocation.chunkXPos + ", " + this.chunkLocation.chunkZPos); + } else { + this.playersInChunk.add(var1); + var1.loadedChunks.add(this.chunkLocation); + } + } + + public void sendThisChunkToPlayer(EntityPlayerMP var1) { + if(this.playersInChunk.contains(var1)) { + var1.playerNetServerHandler.sendPacketToPlayer(new Packet51MapChunk(PlayerManager.getWorldServer(this.thePlayerManager).getChunkFromChunkCoords(this.chunkLocation.chunkXPos, this.chunkLocation.chunkZPos), true, 0)); + this.playersInChunk.remove(var1); + var1.loadedChunks.remove(this.chunkLocation); + if(this.playersInChunk.isEmpty()) { + long var2 = (long)this.chunkLocation.chunkXPos + 2147483647L | (long)this.chunkLocation.chunkZPos + 2147483647L << 32; + PlayerManager.getChunkWatchers(this.thePlayerManager).remove(var2); + if(this.numberOfTilesToUpdate > 0) { + PlayerManager.getChunkWatchersWithPlayers(this.thePlayerManager).remove(this); + } + + this.thePlayerManager.getWorldServer().theChunkProviderServer.unloadChunksIfNotNearSpawn(this.chunkLocation.chunkXPos, this.chunkLocation.chunkZPos); + } + + } + } + + public void flagChunkForUpdate(int var1, int var2, int var3) { + if(this.numberOfTilesToUpdate == 0) { + PlayerManager.getChunkWatchersWithPlayers(this.thePlayerManager).add(this); + } + + this.field_73260_f |= 1 << (var2 >> 4); + if(this.numberOfTilesToUpdate < 64) { + short var4 = (short)(var1 << 12 | var3 << 8 | var2); + + for(int var5 = 0; var5 < this.numberOfTilesToUpdate; ++var5) { + if(this.locationOfBlockChange[var5] == var4) { + return; + } + } + + this.locationOfBlockChange[this.numberOfTilesToUpdate++] = var4; + } + + } + + public void sendToAllPlayersWatchingChunk(Packet var1) { + for(int var2 = 0; var2 < this.playersInChunk.size(); ++var2) { + EntityPlayerMP var3 = (EntityPlayerMP)this.playersInChunk.get(var2); + if(!var3.loadedChunks.contains(this.chunkLocation)) { + var3.playerNetServerHandler.sendPacketToPlayer(var1); + } + } + + } + + public void sendChunkUpdate() { + if(this.numberOfTilesToUpdate != 0) { + int var1; + int var2; + int var3; + if(this.numberOfTilesToUpdate == 1) { + var1 = this.chunkLocation.chunkXPos * 16 + (this.locationOfBlockChange[0] >> 12 & 15); + var2 = this.locationOfBlockChange[0] & 255; + var3 = this.chunkLocation.chunkZPos * 16 + (this.locationOfBlockChange[0] >> 8 & 15); + this.sendToAllPlayersWatchingChunk(new Packet53BlockChange(var1, var2, var3, PlayerManager.getWorldServer(this.thePlayerManager))); + if(PlayerManager.getWorldServer(this.thePlayerManager).blockHasTileEntity(var1, var2, var3)) { + this.sendTileToAllPlayersWatchingChunk(PlayerManager.getWorldServer(this.thePlayerManager).getBlockTileEntity(var1, var2, var3)); + } + } else { + int var4; + if(this.numberOfTilesToUpdate == 64) { + var1 = this.chunkLocation.chunkXPos * 16; + var2 = this.chunkLocation.chunkZPos * 16; + this.sendToAllPlayersWatchingChunk(new Packet51MapChunk(PlayerManager.getWorldServer(this.thePlayerManager).getChunkFromChunkCoords(this.chunkLocation.chunkXPos, this.chunkLocation.chunkZPos), false, this.field_73260_f)); + + for(var3 = 0; var3 < 16; ++var3) { + if((this.field_73260_f & 1 << var3) != 0) { + var4 = var3 << 4; + List var5 = PlayerManager.getWorldServer(this.thePlayerManager).getAllTileEntityInBox(var1, var4, var2, var1 + 16, var4 + 16, var2 + 16); + + for(int var6 = 0; var6 < var5.size(); ++var6) { + this.sendTileToAllPlayersWatchingChunk((TileEntity)var5.get(var6)); + } + } + } + } else { + this.sendToAllPlayersWatchingChunk(new Packet52MultiBlockChange(this.chunkLocation.chunkXPos, this.chunkLocation.chunkZPos, this.locationOfBlockChange, this.numberOfTilesToUpdate, PlayerManager.getWorldServer(this.thePlayerManager))); + + for(var1 = 0; var1 < this.numberOfTilesToUpdate; ++var1) { + var2 = this.chunkLocation.chunkXPos * 16 + (this.locationOfBlockChange[var1] >> 12 & 15); + var3 = this.locationOfBlockChange[var1] & 255; + var4 = this.chunkLocation.chunkZPos * 16 + (this.locationOfBlockChange[var1] >> 8 & 15); + if(PlayerManager.getWorldServer(this.thePlayerManager).blockHasTileEntity(var2, var3, var4)) { + this.sendTileToAllPlayersWatchingChunk(PlayerManager.getWorldServer(this.thePlayerManager).getBlockTileEntity(var2, var3, var4)); + } + } + } + } + + this.numberOfTilesToUpdate = 0; + this.field_73260_f = 0; + } + } + + private void sendTileToAllPlayersWatchingChunk(TileEntity var1) { + if(var1 != null) { + Packet var2 = var1.getDescriptionPacket(); + if(var2 != null) { + this.sendToAllPlayersWatchingChunk(var2); + } + } + + } + + static ChunkCoordIntPair getChunkLocation(PlayerInstance var0) { + return var0.chunkLocation; + } + + static List getPlayersInChunk(PlayerInstance var0) { + return var0.playersInChunk; + } +} diff --git a/src/net/minecraft/src/PlayerManager.java b/src/net/minecraft/src/PlayerManager.java new file mode 100644 index 0000000..63d79e4 --- /dev/null +++ b/src/net/minecraft/src/PlayerManager.java @@ -0,0 +1,201 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class PlayerManager { + private final WorldServer theWorldServer; + private final List players = new ArrayList(); + private final LongHashMap playerInstances = new LongHashMap(); + private final List chunkWatcherWithPlayers = new ArrayList(); + private final int playerViewRadius; + private final int[][] xzDirectionsConst = new int[][]{{1, 0}, {0, 1}, {-1, 0}, {0, -1}}; + + public PlayerManager(WorldServer var1, int var2) { + if(var2 > 15) { + throw new IllegalArgumentException("Too big view radius!"); + } else if(var2 < 3) { + throw new IllegalArgumentException("Too small view radius!"); + } else { + this.playerViewRadius = var2; + this.theWorldServer = var1; + } + } + + public WorldServer getWorldServer() { + return this.theWorldServer; + } + + public void updatePlayerInstances() { + for(int var1 = 0; var1 < this.chunkWatcherWithPlayers.size(); ++var1) { + ((PlayerInstance)this.chunkWatcherWithPlayers.get(var1)).sendChunkUpdate(); + } + + this.chunkWatcherWithPlayers.clear(); + if(this.players.isEmpty()) { + WorldProvider var2 = this.theWorldServer.provider; + if(!var2.canRespawnHere()) { + this.theWorldServer.theChunkProviderServer.unloadAllChunks(); + } + } + + } + + private PlayerInstance getOrCreateChunkWatcher(int var1, int var2, boolean var3) { + long var4 = (long)var1 + 2147483647L | (long)var2 + 2147483647L << 32; + PlayerInstance var6 = (PlayerInstance)this.playerInstances.getValueByKey(var4); + if(var6 == null && var3) { + var6 = new PlayerInstance(this, var1, var2); + this.playerInstances.add(var4, var6); + } + + return var6; + } + + public void flagChunkForUpdate(int var1, int var2, int var3) { + int var4 = var1 >> 4; + int var5 = var3 >> 4; + PlayerInstance var6 = this.getOrCreateChunkWatcher(var4, var5, false); + if(var6 != null) { + var6.flagChunkForUpdate(var1 & 15, var2, var3 & 15); + } + + } + + public void addPlayer(EntityPlayerMP var1) { + int var2 = (int)var1.posX >> 4; + int var3 = (int)var1.posZ >> 4; + var1.managedPosX = var1.posX; + var1.managedPosZ = var1.posZ; + + for(int var4 = var2 - this.playerViewRadius; var4 <= var2 + this.playerViewRadius; ++var4) { + for(int var5 = var3 - this.playerViewRadius; var5 <= var3 + this.playerViewRadius; ++var5) { + this.getOrCreateChunkWatcher(var4, var5, true).addPlayerToChunkWatchingList(var1); + } + } + + this.players.add(var1); + this.filterChunkLoadQueue(var1); + } + + public void filterChunkLoadQueue(EntityPlayerMP var1) { + ArrayList var2 = new ArrayList(var1.loadedChunks); + int var3 = 0; + int var4 = this.playerViewRadius; + int var5 = (int)var1.posX >> 4; + int var6 = (int)var1.posZ >> 4; + int var7 = 0; + int var8 = 0; + ChunkCoordIntPair var9 = PlayerInstance.getChunkLocation(this.getOrCreateChunkWatcher(var5, var6, true)); + var1.loadedChunks.clear(); + if(var2.contains(var9)) { + var1.loadedChunks.add(var9); + } + + int var10; + for(var10 = 1; var10 <= var4 * 2; ++var10) { + for(int var11 = 0; var11 < 2; ++var11) { + int[] var12 = this.xzDirectionsConst[var3++ % 4]; + + for(int var13 = 0; var13 < var10; ++var13) { + var7 += var12[0]; + var8 += var12[1]; + var9 = PlayerInstance.getChunkLocation(this.getOrCreateChunkWatcher(var5 + var7, var6 + var8, true)); + if(var2.contains(var9)) { + var1.loadedChunks.add(var9); + } + } + } + } + + var3 %= 4; + + for(var10 = 0; var10 < var4 * 2; ++var10) { + var7 += this.xzDirectionsConst[var3][0]; + var8 += this.xzDirectionsConst[var3][1]; + var9 = PlayerInstance.getChunkLocation(this.getOrCreateChunkWatcher(var5 + var7, var6 + var8, true)); + if(var2.contains(var9)) { + var1.loadedChunks.add(var9); + } + } + + } + + public void removePlayer(EntityPlayerMP var1) { + int var2 = (int)var1.managedPosX >> 4; + int var3 = (int)var1.managedPosZ >> 4; + + for(int var4 = var2 - this.playerViewRadius; var4 <= var2 + this.playerViewRadius; ++var4) { + for(int var5 = var3 - this.playerViewRadius; var5 <= var3 + this.playerViewRadius; ++var5) { + PlayerInstance var6 = this.getOrCreateChunkWatcher(var4, var5, false); + if(var6 != null) { + var6.sendThisChunkToPlayer(var1); + } + } + } + + this.players.remove(var1); + } + + private boolean func_72684_a(int var1, int var2, int var3, int var4, int var5) { + int var6 = var1 - var3; + int var7 = var2 - var4; + return var6 >= -var5 && var6 <= var5 ? var7 >= -var5 && var7 <= var5 : false; + } + + public void updateMountedMovingPlayer(EntityPlayerMP var1) { + int var2 = (int)var1.posX >> 4; + int var3 = (int)var1.posZ >> 4; + double var4 = var1.managedPosX - var1.posX; + double var6 = var1.managedPosZ - var1.posZ; + double var8 = var4 * var4 + var6 * var6; + if(var8 >= 64.0D) { + int var10 = (int)var1.managedPosX >> 4; + int var11 = (int)var1.managedPosZ >> 4; + int var12 = this.playerViewRadius; + int var13 = var2 - var10; + int var14 = var3 - var11; + if(var13 != 0 || var14 != 0) { + for(int var15 = var2 - var12; var15 <= var2 + var12; ++var15) { + for(int var16 = var3 - var12; var16 <= var3 + var12; ++var16) { + if(!this.func_72684_a(var15, var16, var10, var11, var12)) { + this.getOrCreateChunkWatcher(var15, var16, true).addPlayerToChunkWatchingList(var1); + } + + if(!this.func_72684_a(var15 - var13, var16 - var14, var2, var3, var12)) { + PlayerInstance var17 = this.getOrCreateChunkWatcher(var15 - var13, var16 - var14, false); + if(var17 != null) { + var17.sendThisChunkToPlayer(var1); + } + } + } + } + + this.filterChunkLoadQueue(var1); + var1.managedPosX = var1.posX; + var1.managedPosZ = var1.posZ; + } + } + } + + public boolean isPlayerWatchingChunk(EntityPlayerMP var1, int var2, int var3) { + PlayerInstance var4 = this.getOrCreateChunkWatcher(var2, var3, false); + return var4 == null ? false : PlayerInstance.getPlayersInChunk(var4).contains(var1) && !var1.loadedChunks.contains(PlayerInstance.getChunkLocation(var4)); + } + + public static int getFurthestViewableBlock(int var0) { + return var0 * 16 - 16; + } + + static WorldServer getWorldServer(PlayerManager var0) { + return var0.theWorldServer; + } + + static LongHashMap getChunkWatchers(PlayerManager var0) { + return var0.playerInstances; + } + + static List getChunkWatchersWithPlayers(PlayerManager var0) { + return var0.chunkWatcherWithPlayers; + } +} diff --git a/src/net/minecraft/src/PlayerNotFoundException.java b/src/net/minecraft/src/PlayerNotFoundException.java new file mode 100644 index 0000000..8466449 --- /dev/null +++ b/src/net/minecraft/src/PlayerNotFoundException.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class PlayerNotFoundException extends CommandException { + public PlayerNotFoundException() { + this("commands.generic.player.notFound", new Object[0]); + } + + public PlayerNotFoundException(String var1, Object... var2) { + super(var1, var2); + } +} diff --git a/src/net/minecraft/src/PlayerPositionComparator.java b/src/net/minecraft/src/PlayerPositionComparator.java new file mode 100644 index 0000000..bc276f1 --- /dev/null +++ b/src/net/minecraft/src/PlayerPositionComparator.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.Comparator; + +public class PlayerPositionComparator implements Comparator { + private final ChunkCoordinates theChunkCoordinates; + + public PlayerPositionComparator(ChunkCoordinates var1) { + this.theChunkCoordinates = var1; + } + + public int comparePlayers(EntityPlayerMP var1, EntityPlayerMP var2) { + double var3 = var1.getDistanceSq((double)this.theChunkCoordinates.posX, (double)this.theChunkCoordinates.posY, (double)this.theChunkCoordinates.posZ); + double var5 = var2.getDistanceSq((double)this.theChunkCoordinates.posX, (double)this.theChunkCoordinates.posY, (double)this.theChunkCoordinates.posZ); + return var3 < var5 ? -1 : (var3 > var5 ? 1 : 0); + } + + public int compare(Object var1, Object var2) { + return this.comparePlayers((EntityPlayerMP)var1, (EntityPlayerMP)var2); + } +} diff --git a/src/net/minecraft/src/PlayerSelector.java b/src/net/minecraft/src/PlayerSelector.java new file mode 100644 index 0000000..03969b6 --- /dev/null +++ b/src/net/minecraft/src/PlayerSelector.java @@ -0,0 +1,221 @@ +package net.minecraft.src; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import net.minecraft.server.MinecraftServer; + +public class PlayerSelector { + private static final Pattern tokenPattern = Pattern.compile("^@([parf])(?:\\[([\\w=,!-]*)\\])?$"); + private static final Pattern intListPattern = Pattern.compile("\\G([-!]?\\w*)(?:$|,)"); + private static final Pattern keyValueListPattern = Pattern.compile("\\G(\\w+)=([-!]?\\w*)(?:$|,)"); + + public static EntityPlayerMP matchOnePlayer(ICommandSender var0, String var1) { + EntityPlayerMP[] var2 = matchPlayers(var0, var1); + return var2 != null && var2.length == 1 ? var2[0] : null; + } + + public static String matchPlayersAsString(ICommandSender var0, String var1) { + EntityPlayerMP[] var2 = matchPlayers(var0, var1); + if(var2 != null && var2.length != 0) { + String[] var3 = new String[var2.length]; + + for(int var4 = 0; var4 < var3.length; ++var4) { + var3[var4] = var2[var4].getTranslatedEntityName(); + } + + return CommandBase.joinNiceString(var3); + } else { + return null; + } + } + + public static EntityPlayerMP[] matchPlayers(ICommandSender var0, String var1) { + Matcher var2 = tokenPattern.matcher(var1); + if(var2.matches()) { + Map var3 = getArgumentMap(var2.group(2)); + String var4 = var2.group(1); + int var5 = getDefaultMinimumRange(var4); + int var6 = getDefaultMaximumRange(var4); + int var7 = getDefaultMinimumLevel(var4); + int var8 = getDefaultMaximumLevel(var4); + int var9 = getDefaultCount(var4); + int var10 = EnumGameType.NOT_SET.getID(); + ChunkCoordinates var11 = var0.getPlayerCoordinates(); + Map var12 = func_96560_a(var3); + String var13 = null; + String var14 = null; + if(var3.containsKey("rm")) { + var5 = MathHelper.parseIntWithDefault((String)var3.get("rm"), var5); + } + + if(var3.containsKey("r")) { + var6 = MathHelper.parseIntWithDefault((String)var3.get("r"), var6); + } + + if(var3.containsKey("lm")) { + var7 = MathHelper.parseIntWithDefault((String)var3.get("lm"), var7); + } + + if(var3.containsKey("l")) { + var8 = MathHelper.parseIntWithDefault((String)var3.get("l"), var8); + } + + if(var3.containsKey("x")) { + var11.posX = MathHelper.parseIntWithDefault((String)var3.get("x"), var11.posX); + } + + if(var3.containsKey("y")) { + var11.posY = MathHelper.parseIntWithDefault((String)var3.get("y"), var11.posY); + } + + if(var3.containsKey("z")) { + var11.posZ = MathHelper.parseIntWithDefault((String)var3.get("z"), var11.posZ); + } + + if(var3.containsKey("m")) { + var10 = MathHelper.parseIntWithDefault((String)var3.get("m"), var10); + } + + if(var3.containsKey("c")) { + var9 = MathHelper.parseIntWithDefault((String)var3.get("c"), var9); + } + + if(var3.containsKey("team")) { + var14 = (String)var3.get("team"); + } + + if(var3.containsKey("name")) { + var13 = (String)var3.get("name"); + } + + List var15; + if(!var4.equals("p") && !var4.equals("a")) { + if(!var4.equals("r")) { + return null; + } else { + var15 = MinecraftServer.getServer().getConfigurationManager().findPlayers(var11, var5, var6, 0, var10, var7, var8, var12, var13, var14); + Collections.shuffle(var15); + var15 = var15.subList(0, Math.min(var9, var15.size())); + return var15 != null && !var15.isEmpty() ? (EntityPlayerMP[])var15.toArray(new EntityPlayerMP[0]) : new EntityPlayerMP[0]; + } + } else { + var15 = MinecraftServer.getServer().getConfigurationManager().findPlayers(var11, var5, var6, var9, var10, var7, var8, var12, var13, var14); + return var15 != null && !var15.isEmpty() ? (EntityPlayerMP[])var15.toArray(new EntityPlayerMP[0]) : new EntityPlayerMP[0]; + } + } else { + return null; + } + } + + public static Map func_96560_a(Map var0) { + HashMap var1 = new HashMap(); + Iterator var2 = var0.keySet().iterator(); + + while(var2.hasNext()) { + String var3 = (String)var2.next(); + if(var3.startsWith("score_") && var3.length() > "score_".length()) { + String var4 = var3.substring("score_".length()); + var1.put(var4, Integer.valueOf(MathHelper.parseIntWithDefault((String)var0.get(var3), 1))); + } + } + + return var1; + } + + public static boolean matchesMultiplePlayers(String var0) { + Matcher var1 = tokenPattern.matcher(var0); + if(var1.matches()) { + Map var2 = getArgumentMap(var1.group(2)); + String var3 = var1.group(1); + int var4 = getDefaultCount(var3); + if(var2.containsKey("c")) { + var4 = MathHelper.parseIntWithDefault((String)var2.get("c"), var4); + } + + return var4 != 1; + } else { + return false; + } + } + + public static boolean hasTheseArguments(String var0, String var1) { + Matcher var2 = tokenPattern.matcher(var0); + if(var2.matches()) { + String var3 = var2.group(1); + return var1 == null || var1.equals(var3); + } else { + return false; + } + } + + public static boolean hasArguments(String var0) { + return hasTheseArguments(var0, (String)null); + } + + private static final int getDefaultMinimumRange(String var0) { + return 0; + } + + private static final int getDefaultMaximumRange(String var0) { + return 0; + } + + private static final int getDefaultMaximumLevel(String var0) { + return Integer.MAX_VALUE; + } + + private static final int getDefaultMinimumLevel(String var0) { + return 0; + } + + private static final int getDefaultCount(String var0) { + return var0.equals("a") ? 0 : 1; + } + + private static Map getArgumentMap(String var0) { + HashMap var1 = new HashMap(); + if(var0 == null) { + return var1; + } else { + Matcher var2 = intListPattern.matcher(var0); + int var3 = 0; + + int var4; + for(var4 = -1; var2.find(); var4 = var2.end()) { + String var5 = null; + switch(var3++) { + case 0: + var5 = "x"; + break; + case 1: + var5 = "y"; + break; + case 2: + var5 = "z"; + break; + case 3: + var5 = "r"; + } + + if(var5 != null && var2.group(1).length() > 0) { + var1.put(var5, var2.group(1)); + } + } + + if(var4 < var0.length()) { + var2 = keyValueListPattern.matcher(var4 == -1 ? var0 : var0.substring(var4)); + + while(var2.find()) { + var1.put(var2.group(1), var2.group(2)); + } + } + + return var1; + } + } +} diff --git a/src/net/minecraft/src/PlayerUsageSnooper.java b/src/net/minecraft/src/PlayerUsageSnooper.java new file mode 100644 index 0000000..695db64 --- /dev/null +++ b/src/net/minecraft/src/PlayerUsageSnooper.java @@ -0,0 +1,134 @@ +package net.minecraft.src; + +import java.lang.management.ManagementFactory; +import java.lang.management.RuntimeMXBean; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.Map.Entry; + +public class PlayerUsageSnooper { + private Map dataMap = new HashMap(); + private final String uniqueID = UUID.randomUUID().toString(); + private final URL serverUrl; + private final IPlayerUsage playerStatsCollector; + private final java.util.Timer threadTrigger = new java.util.Timer("Snooper Timer", true); + private final Object syncLock = new Object(); + private final long field_98224_g = System.currentTimeMillis(); + private boolean isRunning = false; + private int selfCounter = 0; + + public PlayerUsageSnooper(String var1, IPlayerUsage var2) { + try { + this.serverUrl = new URL("http://snoop.minecraft.net/" + var1 + "?version=" + 1); + } catch (MalformedURLException var4) { + throw new IllegalArgumentException(); + } + + this.playerStatsCollector = var2; + } + + public void startSnooper() { + if(!this.isRunning) { + this.isRunning = true; + this.addBaseDataToSnooper(); + this.threadTrigger.schedule(new PlayerUsageSnooperThread(this), 0L, 900000L); + } + } + + private void addBaseDataToSnooper() { + this.addJvmArgsToSnooper(); + this.addData("snooper_token", this.uniqueID); + this.addData("os_name", System.getProperty("os.name")); + this.addData("os_version", System.getProperty("os.version")); + this.addData("os_architecture", System.getProperty("os.arch")); + this.addData("java_version", System.getProperty("java.version")); + this.addData("version", "1.5.2"); + this.playerStatsCollector.addServerTypeToSnooper(this); + } + + private void addJvmArgsToSnooper() { + RuntimeMXBean var1 = ManagementFactory.getRuntimeMXBean(); + List var2 = var1.getInputArguments(); + int var3 = 0; + Iterator var4 = var2.iterator(); + + while(var4.hasNext()) { + String var5 = (String)var4.next(); + if(var5.startsWith("-X")) { + this.addData("jvm_arg[" + var3++ + "]", var5); + } + } + + this.addData("jvm_args", Integer.valueOf(var3)); + } + + public void addMemoryStatsToSnooper() { + this.addData("memory_total", Long.valueOf(Runtime.getRuntime().totalMemory())); + this.addData("memory_max", Long.valueOf(Runtime.getRuntime().maxMemory())); + this.addData("memory_free", Long.valueOf(Runtime.getRuntime().freeMemory())); + this.addData("cpu_cores", Integer.valueOf(Runtime.getRuntime().availableProcessors())); + this.addData("run_time", Long.valueOf((System.currentTimeMillis() - this.field_98224_g) / 60L * 1000L)); + this.playerStatsCollector.addServerStatsToSnooper(this); + } + + public void addData(String var1, Object var2) { + Object var3 = this.syncLock; + synchronized(var3) { + this.dataMap.put(var1, var2); + } + } + + public Map getCurrentStats() { + LinkedHashMap var1 = new LinkedHashMap(); + Object var2 = this.syncLock; + synchronized(var2) { + this.addMemoryStatsToSnooper(); + Iterator var3 = this.dataMap.entrySet().iterator(); + + while(var3.hasNext()) { + Entry var4 = (Entry)var3.next(); + var1.put(var4.getKey(), var4.getValue().toString()); + } + + return var1; + } + } + + public boolean isSnooperRunning() { + return this.isRunning; + } + + public void stopSnooper() { + this.threadTrigger.cancel(); + } + + public String getUniqueID() { + return this.uniqueID; + } + + static IPlayerUsage getStatsCollectorFor(PlayerUsageSnooper var0) { + return var0.playerStatsCollector; + } + + static Object getSyncLockFor(PlayerUsageSnooper var0) { + return var0.syncLock; + } + + static Map getDataMapFor(PlayerUsageSnooper var0) { + return var0.dataMap; + } + + static int getSelfCounterFor(PlayerUsageSnooper var0) { + return var0.selfCounter++; + } + + static URL getServerUrlFor(PlayerUsageSnooper var0) { + return var0.serverUrl; + } +} diff --git a/src/net/minecraft/src/PlayerUsageSnooperThread.java b/src/net/minecraft/src/PlayerUsageSnooperThread.java new file mode 100644 index 0000000..5598d3b --- /dev/null +++ b/src/net/minecraft/src/PlayerUsageSnooperThread.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; +import java.util.TimerTask; + +class PlayerUsageSnooperThread extends TimerTask { + final PlayerUsageSnooper snooper; + + PlayerUsageSnooperThread(PlayerUsageSnooper var1) { + this.snooper = var1; + } + + public void run() { + if(PlayerUsageSnooper.getStatsCollectorFor(this.snooper).isSnooperEnabled()) { + Object var2 = PlayerUsageSnooper.getSyncLockFor(this.snooper); + HashMap var1; + synchronized(var2) { + var1 = new HashMap(PlayerUsageSnooper.getDataMapFor(this.snooper)); + var1.put("snooper_count", Integer.valueOf(PlayerUsageSnooper.getSelfCounterFor(this.snooper))); + } + + HttpUtil.sendPost(PlayerUsageSnooper.getStatsCollectorFor(this.snooper).getLogAgent(), PlayerUsageSnooper.getServerUrlFor(this.snooper), (Map)var1, true); + } + } +} diff --git a/src/net/minecraft/src/PortalPosition.java b/src/net/minecraft/src/PortalPosition.java new file mode 100644 index 0000000..4eafbe7 --- /dev/null +++ b/src/net/minecraft/src/PortalPosition.java @@ -0,0 +1,12 @@ +package net.minecraft.src; + +public class PortalPosition extends ChunkCoordinates { + public long lastUpdateTime; + final Teleporter teleporterInstance; + + public PortalPosition(Teleporter var1, int var2, int var3, int var4, long var5) { + super(var2, var3, var4); + this.teleporterInstance = var1; + this.lastUpdateTime = var5; + } +} diff --git a/src/net/minecraft/src/PositionImpl.java b/src/net/minecraft/src/PositionImpl.java new file mode 100644 index 0000000..d1f6d7d --- /dev/null +++ b/src/net/minecraft/src/PositionImpl.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class PositionImpl implements IPosition { + protected final double x; + protected final double y; + protected final double z; + + public PositionImpl(double var1, double var3, double var5) { + this.x = var1; + this.y = var3; + this.z = var5; + } + + public double getX() { + return this.x; + } + + public double getY() { + return this.y; + } + + public double getZ() { + return this.z; + } +} diff --git a/src/net/minecraft/src/PositionTextureVertex.java b/src/net/minecraft/src/PositionTextureVertex.java new file mode 100644 index 0000000..3302bc6 --- /dev/null +++ b/src/net/minecraft/src/PositionTextureVertex.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public class PositionTextureVertex { + public Vec3 vector3D; + public float texturePositionX; + public float texturePositionY; + + public PositionTextureVertex(float var1, float var2, float var3, float var4, float var5) { + this(Vec3.createVectorHelper((double)var1, (double)var2, (double)var3), var4, var5); + } + + public PositionTextureVertex setTexturePosition(float var1, float var2) { + return new PositionTextureVertex(this, var1, var2); + } + + public PositionTextureVertex(PositionTextureVertex var1, float var2, float var3) { + this.vector3D = var1.vector3D; + this.texturePositionX = var2; + this.texturePositionY = var3; + } + + public PositionTextureVertex(Vec3 var1, float var2, float var3) { + this.vector3D = var1; + this.texturePositionX = var2; + this.texturePositionY = var3; + } +} diff --git a/src/net/minecraft/src/Potion.java b/src/net/minecraft/src/Potion.java new file mode 100644 index 0000000..ed67fff --- /dev/null +++ b/src/net/minecraft/src/Potion.java @@ -0,0 +1,173 @@ +package net.minecraft.src; + +public class Potion { + public static final Potion[] potionTypes = new Potion[32]; + public static final Potion field_76423_b = null; + public static final Potion moveSpeed = (new Potion(1, false, 8171462)).setPotionName("potion.moveSpeed").setIconIndex(0, 0); + public static final Potion moveSlowdown = (new Potion(2, true, 5926017)).setPotionName("potion.moveSlowdown").setIconIndex(1, 0); + public static final Potion digSpeed = (new Potion(3, false, 14270531)).setPotionName("potion.digSpeed").setIconIndex(2, 0).setEffectiveness(1.5D); + public static final Potion digSlowdown = (new Potion(4, true, 4866583)).setPotionName("potion.digSlowDown").setIconIndex(3, 0); + public static final Potion damageBoost = (new Potion(5, false, 9643043)).setPotionName("potion.damageBoost").setIconIndex(4, 0); + public static final Potion heal = (new PotionHealth(6, false, 16262179)).setPotionName("potion.heal"); + public static final Potion harm = (new PotionHealth(7, true, 4393481)).setPotionName("potion.harm"); + public static final Potion jump = (new Potion(8, false, 7889559)).setPotionName("potion.jump").setIconIndex(2, 1); + public static final Potion confusion = (new Potion(9, true, 5578058)).setPotionName("potion.confusion").setIconIndex(3, 1).setEffectiveness(0.25D); + public static final Potion regeneration = (new Potion(10, false, 13458603)).setPotionName("potion.regeneration").setIconIndex(7, 0).setEffectiveness(0.25D); + public static final Potion resistance = (new Potion(11, false, 10044730)).setPotionName("potion.resistance").setIconIndex(6, 1); + public static final Potion fireResistance = (new Potion(12, false, 14981690)).setPotionName("potion.fireResistance").setIconIndex(7, 1); + public static final Potion waterBreathing = (new Potion(13, false, 3035801)).setPotionName("potion.waterBreathing").setIconIndex(0, 2); + public static final Potion invisibility = (new Potion(14, false, 8356754)).setPotionName("potion.invisibility").setIconIndex(0, 1); + public static final Potion blindness = (new Potion(15, true, 2039587)).setPotionName("potion.blindness").setIconIndex(5, 1).setEffectiveness(0.25D); + public static final Potion nightVision = (new Potion(16, false, 2039713)).setPotionName("potion.nightVision").setIconIndex(4, 1); + public static final Potion hunger = (new Potion(17, true, 5797459)).setPotionName("potion.hunger").setIconIndex(1, 1); + public static final Potion weakness = (new Potion(18, true, 4738376)).setPotionName("potion.weakness").setIconIndex(5, 0); + public static final Potion poison = (new Potion(19, true, 5149489)).setPotionName("potion.poison").setIconIndex(6, 0).setEffectiveness(0.25D); + public static final Potion wither = (new Potion(20, true, 3484199)).setPotionName("potion.wither").setIconIndex(1, 2).setEffectiveness(0.25D); + public static final Potion field_76434_w = null; + public static final Potion field_76444_x = null; + public static final Potion field_76443_y = null; + public static final Potion field_76442_z = null; + public static final Potion field_76409_A = null; + public static final Potion field_76410_B = null; + public static final Potion field_76411_C = null; + public static final Potion field_76405_D = null; + public static final Potion field_76406_E = null; + public static final Potion field_76407_F = null; + public static final Potion field_76408_G = null; + public final int id; + private String name = ""; + private int statusIconIndex = -1; + private final boolean isBadEffect; + private double effectiveness; + private boolean usable; + private final int liquidColor; + + protected Potion(int var1, boolean var2, int var3) { + this.id = var1; + potionTypes[var1] = this; + this.isBadEffect = var2; + if(var2) { + this.effectiveness = 0.5D; + } else { + this.effectiveness = 1.0D; + } + + this.liquidColor = var3; + } + + protected Potion setIconIndex(int var1, int var2) { + this.statusIconIndex = var1 + var2 * 8; + return this; + } + + public int getId() { + return this.id; + } + + public void performEffect(EntityLiving var1, int var2) { + if(this.id == regeneration.id) { + if(var1.getHealth() < var1.getMaxHealth()) { + var1.heal(1); + } + } else if(this.id == poison.id) { + if(var1.getHealth() > 1) { + var1.attackEntityFrom(DamageSource.magic, 1); + } + } else if(this.id == wither.id) { + var1.attackEntityFrom(DamageSource.wither, 1); + } else if(this.id == hunger.id && var1 instanceof EntityPlayer) { + ((EntityPlayer)var1).addExhaustion(0.025F * (float)(var2 + 1)); + } else if((this.id != heal.id || var1.isEntityUndead()) && (this.id != harm.id || !var1.isEntityUndead())) { + if(this.id == harm.id && !var1.isEntityUndead() || this.id == heal.id && var1.isEntityUndead()) { + var1.attackEntityFrom(DamageSource.magic, 6 << var2); + } + } else { + var1.heal(6 << var2); + } + + } + + public void affectEntity(EntityLiving var1, EntityLiving var2, int var3, double var4) { + int var6; + if((this.id != heal.id || var2.isEntityUndead()) && (this.id != harm.id || !var2.isEntityUndead())) { + if(this.id == harm.id && !var2.isEntityUndead() || this.id == heal.id && var2.isEntityUndead()) { + var6 = (int)(var4 * (double)(6 << var3) + 0.5D); + if(var1 == null) { + var2.attackEntityFrom(DamageSource.magic, var6); + } else { + var2.attackEntityFrom(DamageSource.causeIndirectMagicDamage(var2, var1), var6); + } + } + } else { + var6 = (int)(var4 * (double)(6 << var3) + 0.5D); + var2.heal(var6); + } + + } + + public boolean isInstant() { + return false; + } + + public boolean isReady(int var1, int var2) { + int var3; + if(this.id != regeneration.id && this.id != poison.id) { + if(this.id == wither.id) { + var3 = 40 >> var2; + return var3 > 0 ? var1 % var3 == 0 : true; + } else { + return this.id == hunger.id; + } + } else { + var3 = 25 >> var2; + return var3 > 0 ? var1 % var3 == 0 : true; + } + } + + public Potion setPotionName(String var1) { + this.name = var1; + return this; + } + + public String getName() { + return this.name; + } + + public boolean hasStatusIcon() { + return this.statusIconIndex >= 0; + } + + public int getStatusIconIndex() { + return this.statusIconIndex; + } + + public boolean isBadEffect() { + return this.isBadEffect; + } + + public static String getDurationString(PotionEffect var0) { + if(var0.getIsPotionDurationMax()) { + return "**:**"; + } else { + int var1 = var0.getDuration(); + return StringUtils.ticksToElapsedTime(var1); + } + } + + protected Potion setEffectiveness(double var1) { + this.effectiveness = var1; + return this; + } + + public double getEffectiveness() { + return this.effectiveness; + } + + public boolean isUsable() { + return this.usable; + } + + public int getLiquidColor() { + return this.liquidColor; + } +} diff --git a/src/net/minecraft/src/PotionEffect.java b/src/net/minecraft/src/PotionEffect.java new file mode 100644 index 0000000..96c4657 --- /dev/null +++ b/src/net/minecraft/src/PotionEffect.java @@ -0,0 +1,150 @@ +package net.minecraft.src; + +public class PotionEffect { + private int potionID; + private int duration; + private int amplifier; + private boolean isSplashPotion; + private boolean isAmbient; + private boolean isPotionDurationMax; + + public PotionEffect(int var1, int var2) { + this(var1, var2, 0); + } + + public PotionEffect(int var1, int var2, int var3) { + this(var1, var2, var3, false); + } + + public PotionEffect(int var1, int var2, int var3, boolean var4) { + this.potionID = var1; + this.duration = var2; + this.amplifier = var3; + this.isAmbient = var4; + } + + public PotionEffect(PotionEffect var1) { + this.potionID = var1.potionID; + this.duration = var1.duration; + this.amplifier = var1.amplifier; + } + + public void combine(PotionEffect var1) { + if(this.potionID != var1.potionID) { + System.err.println("This method should only be called for matching effects!"); + } + + if(var1.amplifier > this.amplifier) { + this.amplifier = var1.amplifier; + this.duration = var1.duration; + } else if(var1.amplifier == this.amplifier && this.duration < var1.duration) { + this.duration = var1.duration; + } else if(!var1.isAmbient && this.isAmbient) { + this.isAmbient = var1.isAmbient; + } + + } + + public int getPotionID() { + return this.potionID; + } + + public int getDuration() { + return this.duration; + } + + public int getAmplifier() { + return this.amplifier; + } + + public boolean isSplashPotionEffect() { + return this.isSplashPotion; + } + + public void setSplashPotion(boolean var1) { + this.isSplashPotion = var1; + } + + public boolean getIsAmbient() { + return this.isAmbient; + } + + public boolean onUpdate(EntityLiving var1) { + if(this.duration > 0) { + if(Potion.potionTypes[this.potionID].isReady(this.duration, this.amplifier)) { + this.performEffect(var1); + } + + this.deincrementDuration(); + } + + return this.duration > 0; + } + + private int deincrementDuration() { + return --this.duration; + } + + public void performEffect(EntityLiving var1) { + if(this.duration > 0) { + Potion.potionTypes[this.potionID].performEffect(var1, this.amplifier); + } + + } + + public String getEffectName() { + return Potion.potionTypes[this.potionID].getName(); + } + + public int hashCode() { + return this.potionID; + } + + public String toString() { + String var1 = ""; + if(this.getAmplifier() > 0) { + var1 = this.getEffectName() + " x " + (this.getAmplifier() + 1) + ", Duration: " + this.getDuration(); + } else { + var1 = this.getEffectName() + ", Duration: " + this.getDuration(); + } + + if(this.isSplashPotion) { + var1 = var1 + ", Splash: true"; + } + + return Potion.potionTypes[this.potionID].isUsable() ? "(" + var1 + ")" : var1; + } + + public boolean equals(Object var1) { + if(!(var1 instanceof PotionEffect)) { + return false; + } else { + PotionEffect var2 = (PotionEffect)var1; + return this.potionID == var2.potionID && this.amplifier == var2.amplifier && this.duration == var2.duration && this.isSplashPotion == var2.isSplashPotion && this.isAmbient == var2.isAmbient; + } + } + + public NBTTagCompound writeCustomPotionEffectToNBT(NBTTagCompound var1) { + var1.setByte("Id", (byte)this.getPotionID()); + var1.setByte("Amplifier", (byte)this.getAmplifier()); + var1.setInteger("Duration", this.getDuration()); + var1.setBoolean("Ambient", this.getIsAmbient()); + return var1; + } + + public static PotionEffect readCustomPotionEffectFromNBT(NBTTagCompound var0) { + byte var1 = var0.getByte("Id"); + byte var2 = var0.getByte("Amplifier"); + int var3 = var0.getInteger("Duration"); + boolean var4 = var0.getBoolean("Ambient"); + return new PotionEffect(var1, var3, var2, var4); + } + + public void setPotionDurationMax(boolean var1) { + this.isPotionDurationMax = var1; + } + + public boolean getIsPotionDurationMax() { + return this.isPotionDurationMax; + } +} diff --git a/src/net/minecraft/src/PotionHealth.java b/src/net/minecraft/src/PotionHealth.java new file mode 100644 index 0000000..4409b35 --- /dev/null +++ b/src/net/minecraft/src/PotionHealth.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class PotionHealth extends Potion { + public PotionHealth(int var1, boolean var2, int var3) { + super(var1, var2, var3); + } + + public boolean isInstant() { + return true; + } + + public boolean isReady(int var1, int var2) { + return var1 >= 1; + } +} diff --git a/src/net/minecraft/src/PotionHelper.java b/src/net/minecraft/src/PotionHelper.java new file mode 100644 index 0000000..1e2a226 --- /dev/null +++ b/src/net/minecraft/src/PotionHelper.java @@ -0,0 +1,436 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; + +public class PotionHelper { + public static final String field_77924_a = null; + public static final String sugarEffect; + public static final String ghastTearEffect = "+0-1-2-3&4-4+13"; + public static final String spiderEyeEffect; + public static final String fermentedSpiderEyeEffect; + public static final String speckledMelonEffect; + public static final String blazePowderEffect; + public static final String magmaCreamEffect; + public static final String redstoneEffect; + public static final String glowstoneEffect; + public static final String gunpowderEffect; + public static final String goldenCarrotEffect; + private static final HashMap potionRequirements = new HashMap(); + private static final HashMap potionAmplifiers = new HashMap(); + private static final HashMap field_77925_n; + private static final String[] potionPrefixes; + + public static boolean checkFlag(int var0, int var1) { + return (var0 & 1 << var1) != 0; + } + + private static int isFlagSet(int var0, int var1) { + return checkFlag(var0, var1) ? 1 : 0; + } + + private static int isFlagUnset(int var0, int var1) { + return checkFlag(var0, var1) ? 0 : 1; + } + + public static int func_77909_a(int var0) { + return func_77908_a(var0, 5, 4, 3, 2, 1); + } + + public static int calcPotionLiquidColor(Collection var0) { + int var1 = 3694022; + if(var0 != null && !var0.isEmpty()) { + float var2 = 0.0F; + float var3 = 0.0F; + float var4 = 0.0F; + float var5 = 0.0F; + Iterator var6 = var0.iterator(); + + while(var6.hasNext()) { + PotionEffect var7 = (PotionEffect)var6.next(); + int var8 = Potion.potionTypes[var7.getPotionID()].getLiquidColor(); + + for(int var9 = 0; var9 <= var7.getAmplifier(); ++var9) { + var2 += (float)(var8 >> 16 & 255) / 255.0F; + var3 += (float)(var8 >> 8 & 255) / 255.0F; + var4 += (float)(var8 >> 0 & 255) / 255.0F; + ++var5; + } + } + + var2 = var2 / var5 * 255.0F; + var3 = var3 / var5 * 255.0F; + var4 = var4 / var5 * 255.0F; + return (int)var2 << 16 | (int)var3 << 8 | (int)var4; + } else { + return var1; + } + } + + public static boolean func_82817_b(Collection var0) { + Iterator var1 = var0.iterator(); + + PotionEffect var2; + do { + if(!var1.hasNext()) { + return true; + } + + var2 = (PotionEffect)var1.next(); + } while(var2.getIsAmbient()); + + return false; + } + + public static int func_77915_a(int var0, boolean var1) { + if(!var1) { + if(field_77925_n.containsKey(Integer.valueOf(var0))) { + return ((Integer)field_77925_n.get(Integer.valueOf(var0))).intValue(); + } else { + int var2 = calcPotionLiquidColor(getPotionEffects(var0, false)); + field_77925_n.put(Integer.valueOf(var0), Integer.valueOf(var2)); + return var2; + } + } else { + return calcPotionLiquidColor(getPotionEffects(var0, var1)); + } + } + + public static String func_77905_c(int var0) { + int var1 = func_77909_a(var0); + return potionPrefixes[var1]; + } + + private static int func_77904_a(boolean var0, boolean var1, boolean var2, int var3, int var4, int var5, int var6) { + int var7 = 0; + if(var0) { + var7 = isFlagUnset(var6, var4); + } else if(var3 != -1) { + if(var3 == 0 && countSetFlags(var6) == var4) { + var7 = 1; + } else if(var3 == 1 && countSetFlags(var6) > var4) { + var7 = 1; + } else if(var3 == 2 && countSetFlags(var6) < var4) { + var7 = 1; + } + } else { + var7 = isFlagSet(var6, var4); + } + + if(var1) { + var7 *= var5; + } + + if(var2) { + var7 *= -1; + } + + return var7; + } + + private static int countSetFlags(int var0) { + int var1; + for(var1 = 0; var0 > 0; ++var1) { + var0 &= var0 - 1; + } + + return var1; + } + + private static int parsePotionEffects(String var0, int var1, int var2, int var3) { + if(var1 < var0.length() && var2 >= 0 && var1 < var2) { + int var4 = var0.indexOf(124, var1); + int var5; + int var17; + if(var4 >= 0 && var4 < var2) { + var5 = parsePotionEffects(var0, var1, var4 - 1, var3); + if(var5 > 0) { + return var5; + } else { + var17 = parsePotionEffects(var0, var4 + 1, var2, var3); + return var17 > 0 ? var17 : 0; + } + } else { + var5 = var0.indexOf(38, var1); + if(var5 >= 0 && var5 < var2) { + var17 = parsePotionEffects(var0, var1, var5 - 1, var3); + if(var17 <= 0) { + return 0; + } else { + int var18 = parsePotionEffects(var0, var5 + 1, var2, var3); + return var18 <= 0 ? 0 : (var17 > var18 ? var17 : var18); + } + } else { + boolean var6 = false; + boolean var7 = false; + boolean var8 = false; + boolean var9 = false; + boolean var10 = false; + byte var11 = -1; + int var12 = 0; + int var13 = 0; + int var14 = 0; + + for(int var15 = var1; var15 < var2; ++var15) { + char var16 = var0.charAt(var15); + if(var16 >= 48 && var16 <= 57) { + if(var6) { + var13 = var16 - 48; + var7 = true; + } else { + var12 *= 10; + var12 += var16 - 48; + var8 = true; + } + } else if(var16 == 42) { + var6 = true; + } else if(var16 == 33) { + if(var8) { + var14 += func_77904_a(var9, var7, var10, var11, var12, var13, var3); + var9 = false; + var10 = var9; + var6 = var9; + var7 = var9; + var8 = var9; + var13 = 0; + var12 = var13; + var11 = -1; + } + + var9 = true; + } else if(var16 == 45) { + if(var8) { + var14 += func_77904_a(var9, var7, var10, var11, var12, var13, var3); + var9 = false; + var6 = var9; + var7 = var9; + var8 = var9; + var13 = 0; + var12 = var13; + var11 = -1; + } + + var10 = true; + } else if(var16 != 61 && var16 != 60 && var16 != 62) { + if(var16 == 43 && var8) { + var14 += func_77904_a(var9, var7, var10, var11, var12, var13, var3); + var9 = false; + var10 = var9; + var6 = var9; + var7 = var9; + var8 = var9; + var13 = 0; + var12 = var13; + var11 = -1; + } + } else { + if(var8) { + var14 += func_77904_a(var9, var7, var10, var11, var12, var13, var3); + var9 = false; + var10 = var9; + var6 = var9; + var7 = var9; + var8 = var9; + var13 = 0; + var12 = var13; + var11 = -1; + } + + if(var16 == 61) { + var11 = 0; + } else if(var16 == 60) { + var11 = 2; + } else if(var16 == 62) { + var11 = 1; + } + } + } + + if(var8) { + var14 += func_77904_a(var9, var7, var10, var11, var12, var13, var3); + } + + return var14; + } + } + } else { + return 0; + } + } + + public static List getPotionEffects(int var0, boolean var1) { + ArrayList var2 = null; + Potion[] var3 = Potion.potionTypes; + int var4 = var3.length; + + for(int var5 = 0; var5 < var4; ++var5) { + Potion var6 = var3[var5]; + if(var6 != null && (!var6.isUsable() || var1)) { + String var7 = (String)potionRequirements.get(Integer.valueOf(var6.getId())); + if(var7 != null) { + int var8 = parsePotionEffects(var7, 0, var7.length(), var0); + if(var8 > 0) { + int var9 = 0; + String var10 = (String)potionAmplifiers.get(Integer.valueOf(var6.getId())); + if(var10 != null) { + var9 = parsePotionEffects(var10, 0, var10.length(), var0); + if(var9 < 0) { + var9 = 0; + } + } + + if(var6.isInstant()) { + var8 = 1; + } else { + var8 = 1200 * (var8 * 3 + (var8 - 1) * 2); + var8 >>= var9; + var8 = (int)Math.round((double)var8 * var6.getEffectiveness()); + if((var0 & 16384) != 0) { + var8 = (int)Math.round((double)var8 * 0.75D + 0.5D); + } + } + + if(var2 == null) { + var2 = new ArrayList(); + } + + PotionEffect var11 = new PotionEffect(var6.getId(), var8, var9); + if((var0 & 16384) != 0) { + var11.setSplashPotion(true); + } + + var2.add(var11); + } + } + } + } + + return var2; + } + + private static int brewBitOperations(int var0, int var1, boolean var2, boolean var3, boolean var4) { + if(var4) { + if(!checkFlag(var0, var1)) { + return 0; + } + } else if(var2) { + var0 &= ~(1 << var1); + } else if(var3) { + if((var0 & 1 << var1) == 0) { + var0 |= 1 << var1; + } else { + var0 &= ~(1 << var1); + } + } else { + var0 |= 1 << var1; + } + + return var0; + } + + public static int applyIngredient(int var0, String var1) { + byte var2 = 0; + int var3 = var1.length(); + boolean var4 = false; + boolean var5 = false; + boolean var6 = false; + boolean var7 = false; + int var8 = 0; + + for(int var9 = var2; var9 < var3; ++var9) { + char var10 = var1.charAt(var9); + if(var10 >= 48 && var10 <= 57) { + var8 *= 10; + var8 += var10 - 48; + var4 = true; + } else if(var10 == 33) { + if(var4) { + var0 = brewBitOperations(var0, var8, var6, var5, var7); + var7 = false; + var6 = var7; + var4 = var7; + var8 = 0; + } + + var5 = true; + } else if(var10 == 45) { + if(var4) { + var0 = brewBitOperations(var0, var8, var6, var5, var7); + var7 = false; + var5 = var7; + var4 = var7; + var8 = 0; + } + + var6 = true; + } else if(var10 == 43) { + if(var4) { + var0 = brewBitOperations(var0, var8, var6, var5, var7); + var7 = false; + var5 = var7; + var6 = var7; + var4 = var7; + var8 = 0; + } + } else if(var10 == 38) { + if(var4) { + var0 = brewBitOperations(var0, var8, var6, var5, var7); + var7 = false; + var5 = var7; + var6 = var7; + var4 = var7; + var8 = 0; + } + + var7 = true; + } + } + + if(var4) { + var0 = brewBitOperations(var0, var8, var6, var5, var7); + } + + return var0 & Short.MAX_VALUE; + } + + public static int func_77908_a(int var0, int var1, int var2, int var3, int var4, int var5) { + return (checkFlag(var0, var1) ? 16 : 0) | (checkFlag(var0, var2) ? 8 : 0) | (checkFlag(var0, var3) ? 4 : 0) | (checkFlag(var0, var4) ? 2 : 0) | (checkFlag(var0, var5) ? 1 : 0); + } + + static { + potionRequirements.put(Integer.valueOf(Potion.regeneration.getId()), "0 & !1 & !2 & !3 & 0+6"); + sugarEffect = "-0+1-2-3&4-4+13"; + potionRequirements.put(Integer.valueOf(Potion.moveSpeed.getId()), "!0 & 1 & !2 & !3 & 1+6"); + magmaCreamEffect = "+0+1-2-3&4-4+13"; + potionRequirements.put(Integer.valueOf(Potion.fireResistance.getId()), "0 & 1 & !2 & !3 & 0+6"); + speckledMelonEffect = "+0-1+2-3&4-4+13"; + potionRequirements.put(Integer.valueOf(Potion.heal.getId()), "0 & !1 & 2 & !3"); + spiderEyeEffect = "-0-1+2-3&4-4+13"; + potionRequirements.put(Integer.valueOf(Potion.poison.getId()), "!0 & !1 & 2 & !3 & 2+6"); + fermentedSpiderEyeEffect = "-0+3-4+13"; + potionRequirements.put(Integer.valueOf(Potion.weakness.getId()), "!0 & !1 & !2 & 3 & 3+6"); + potionRequirements.put(Integer.valueOf(Potion.harm.getId()), "!0 & !1 & 2 & 3"); + potionRequirements.put(Integer.valueOf(Potion.moveSlowdown.getId()), "!0 & 1 & !2 & 3 & 3+6"); + blazePowderEffect = "+0-1-2+3&4-4+13"; + potionRequirements.put(Integer.valueOf(Potion.damageBoost.getId()), "0 & !1 & !2 & 3 & 3+6"); + goldenCarrotEffect = "-0+1+2-3+13&4-4"; + potionRequirements.put(Integer.valueOf(Potion.nightVision.getId()), "!0 & 1 & 2 & !3 & 2+6"); + potionRequirements.put(Integer.valueOf(Potion.invisibility.getId()), "!0 & 1 & 2 & 3 & 2+6"); + glowstoneEffect = "+5-6-7"; + potionAmplifiers.put(Integer.valueOf(Potion.moveSpeed.getId()), "5"); + potionAmplifiers.put(Integer.valueOf(Potion.digSpeed.getId()), "5"); + potionAmplifiers.put(Integer.valueOf(Potion.damageBoost.getId()), "5"); + potionAmplifiers.put(Integer.valueOf(Potion.regeneration.getId()), "5"); + potionAmplifiers.put(Integer.valueOf(Potion.harm.getId()), "5"); + potionAmplifiers.put(Integer.valueOf(Potion.heal.getId()), "5"); + potionAmplifiers.put(Integer.valueOf(Potion.resistance.getId()), "5"); + potionAmplifiers.put(Integer.valueOf(Potion.poison.getId()), "5"); + redstoneEffect = "-5+6-7"; + gunpowderEffect = "+14&13-13"; + field_77925_n = new HashMap(); + potionPrefixes = new String[]{"potion.prefix.mundane", "potion.prefix.uninteresting", "potion.prefix.bland", "potion.prefix.clear", "potion.prefix.milky", "potion.prefix.diffuse", "potion.prefix.artless", "potion.prefix.thin", "potion.prefix.awkward", "potion.prefix.flat", "potion.prefix.bulky", "potion.prefix.bungling", "potion.prefix.buttered", "potion.prefix.smooth", "potion.prefix.suave", "potion.prefix.debonair", "potion.prefix.thick", "potion.prefix.elegant", "potion.prefix.fancy", "potion.prefix.charming", "potion.prefix.dashing", "potion.prefix.refined", "potion.prefix.cordial", "potion.prefix.sparkling", "potion.prefix.potent", "potion.prefix.foul", "potion.prefix.odorless", "potion.prefix.rank", "potion.prefix.harsh", "potion.prefix.acrid", "potion.prefix.gross", "potion.prefix.stinky"}; + } +} diff --git a/src/net/minecraft/src/Profiler.java b/src/net/minecraft/src/Profiler.java new file mode 100644 index 0000000..cf03860 --- /dev/null +++ b/src/net/minecraft/src/Profiler.java @@ -0,0 +1,124 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class Profiler { + private final List sectionList = new ArrayList(); + private final List timestampList = new ArrayList(); + public boolean profilingEnabled = false; + private String profilingSection = ""; + private final Map profilingMap = new HashMap(); + + public void clearProfiling() { + this.profilingMap.clear(); + this.profilingSection = ""; + this.sectionList.clear(); + } + + public void startSection(String var1) { + if(this.profilingEnabled) { + if(this.profilingSection.length() > 0) { + this.profilingSection = this.profilingSection + "."; + } + + this.profilingSection = this.profilingSection + var1; + this.sectionList.add(this.profilingSection); + this.timestampList.add(Long.valueOf(System.nanoTime())); + } + } + + public void endSection() { + if(this.profilingEnabled) { + long var1 = System.nanoTime(); + long var3 = ((Long)this.timestampList.remove(this.timestampList.size() - 1)).longValue(); + this.sectionList.remove(this.sectionList.size() - 1); + long var5 = var1 - var3; + if(this.profilingMap.containsKey(this.profilingSection)) { + this.profilingMap.put(this.profilingSection, Long.valueOf(((Long)this.profilingMap.get(this.profilingSection)).longValue() + var5)); + } else { + this.profilingMap.put(this.profilingSection, Long.valueOf(var5)); + } + + if(var5 > 100000000L) { + System.out.println("Something\'s taking too long! \'" + this.profilingSection + "\' took aprox " + (double)var5 / 1000000.0D + " ms"); + } + + this.profilingSection = !this.sectionList.isEmpty() ? (String)this.sectionList.get(this.sectionList.size() - 1) : ""; + } + } + + public List getProfilingData(String var1) { + if(!this.profilingEnabled) { + return null; + } else { + long var3 = this.profilingMap.containsKey("root") ? ((Long)this.profilingMap.get("root")).longValue() : 0L; + long var5 = this.profilingMap.containsKey(var1) ? ((Long)this.profilingMap.get(var1)).longValue() : -1L; + ArrayList var7 = new ArrayList(); + if(var1.length() > 0) { + var1 = var1 + "."; + } + + long var8 = 0L; + Iterator var10 = this.profilingMap.keySet().iterator(); + + while(var10.hasNext()) { + String var11 = (String)var10.next(); + if(var11.length() > var1.length() && var11.startsWith(var1) && var11.indexOf(".", var1.length() + 1) < 0) { + var8 += ((Long)this.profilingMap.get(var11)).longValue(); + } + } + + float var20 = (float)var8; + if(var8 < var5) { + var8 = var5; + } + + if(var3 < var8) { + var3 = var8; + } + + Iterator var21 = this.profilingMap.keySet().iterator(); + + String var12; + while(var21.hasNext()) { + var12 = (String)var21.next(); + if(var12.length() > var1.length() && var12.startsWith(var1) && var12.indexOf(".", var1.length() + 1) < 0) { + long var13 = ((Long)this.profilingMap.get(var12)).longValue(); + double var15 = (double)var13 * 100.0D / (double)var8; + double var17 = (double)var13 * 100.0D / (double)var3; + String var19 = var12.substring(var1.length()); + var7.add(new ProfilerResult(var19, var15, var17)); + } + } + + var21 = this.profilingMap.keySet().iterator(); + + while(var21.hasNext()) { + var12 = (String)var21.next(); + this.profilingMap.put(var12, Long.valueOf(((Long)this.profilingMap.get(var12)).longValue() * 999L / 1000L)); + } + + if((float)var8 > var20) { + var7.add(new ProfilerResult("unspecified", (double)((float)var8 - var20) * 100.0D / (double)var8, (double)((float)var8 - var20) * 100.0D / (double)var3)); + } + + Collections.sort(var7); + var7.add(0, new ProfilerResult(var1, 100.0D, (double)var8 * 100.0D / (double)var3)); + return var7; + } + } + + public void endStartSection(String var1) { + this.endSection(); + this.startSection(var1); + } + + public String getNameOfLastSection() { + return this.sectionList.size() == 0 ? "[UNKNOWN]" : (String)this.sectionList.get(this.sectionList.size() - 1); + } +} diff --git a/src/net/minecraft/src/ProfilerResult.java b/src/net/minecraft/src/ProfilerResult.java new file mode 100644 index 0000000..aca21f5 --- /dev/null +++ b/src/net/minecraft/src/ProfilerResult.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public final class ProfilerResult implements Comparable { + public double field_76332_a; + public double field_76330_b; + public String field_76331_c; + + public ProfilerResult(String var1, double var2, double var4) { + this.field_76331_c = var1; + this.field_76332_a = var2; + this.field_76330_b = var4; + } + + public int func_76328_a(ProfilerResult var1) { + return var1.field_76332_a < this.field_76332_a ? -1 : (var1.field_76332_a > this.field_76332_a ? 1 : var1.field_76331_c.compareTo(this.field_76331_c)); + } + + public int func_76329_a() { + return (this.field_76331_c.hashCode() & 11184810) + 4473924; + } + + public int compareTo(Object var1) { + return this.func_76328_a((ProfilerResult)var1); + } +} diff --git a/src/net/minecraft/src/PropertyManager.java b/src/net/minecraft/src/PropertyManager.java new file mode 100644 index 0000000..f7f1ea9 --- /dev/null +++ b/src/net/minecraft/src/PropertyManager.java @@ -0,0 +1,102 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Properties; + +public class PropertyManager { + private final Properties properties = new Properties(); + private final ILogAgent logger; + private final File associatedFile; + + public PropertyManager(File var1, ILogAgent var2) { + this.associatedFile = var1; + this.logger = var2; + if(var1.exists()) { + FileInputStream var3 = null; + + try { + var3 = new FileInputStream(var1); + this.properties.load(var3); + } catch (Exception var13) { + var2.logWarningException("Failed to load " + var1, var13); + this.logMessageAndSave(); + } finally { + if(var3 != null) { + try { + var3.close(); + } catch (IOException var12) { + } + } + + } + } else { + var2.logWarning(var1 + " does not exist"); + this.logMessageAndSave(); + } + + } + + public void logMessageAndSave() { + this.logger.logInfo("Generating new properties file"); + this.saveProperties(); + } + + public void saveProperties() { + FileOutputStream var1 = null; + + try { + var1 = new FileOutputStream(this.associatedFile); + this.properties.store(var1, "Minecraft server properties"); + } catch (Exception var11) { + this.logger.logWarningException("Failed to save " + this.associatedFile, var11); + this.logMessageAndSave(); + } finally { + if(var1 != null) { + try { + var1.close(); + } catch (IOException var10) { + } + } + + } + + } + + public File getPropertiesFile() { + return this.associatedFile; + } + + public String getProperty(String var1, String var2) { + if(!this.properties.containsKey(var1)) { + this.properties.setProperty(var1, var2); + this.saveProperties(); + } + + return this.properties.getProperty(var1, var2); + } + + public int getIntProperty(String var1, int var2) { + try { + return Integer.parseInt(this.getProperty(var1, "" + var2)); + } catch (Exception var4) { + this.properties.setProperty(var1, "" + var2); + return var2; + } + } + + public boolean getBooleanProperty(String var1, boolean var2) { + try { + return Boolean.parseBoolean(this.getProperty(var1, "" + var2)); + } catch (Exception var4) { + this.properties.setProperty(var1, "" + var2); + return var2; + } + } + + public void setProperty(String var1, Object var2) { + this.properties.setProperty(var1, "" + var2); + } +} diff --git a/src/net/minecraft/src/RConConsoleSource.java b/src/net/minecraft/src/RConConsoleSource.java new file mode 100644 index 0000000..5d7487f --- /dev/null +++ b/src/net/minecraft/src/RConConsoleSource.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +public class RConConsoleSource implements ICommandSender { + public static final RConConsoleSource consoleBuffer = new RConConsoleSource(); + private StringBuffer buffer = new StringBuffer(); + + public void resetLog() { + this.buffer.setLength(0); + } + + public String getChatBuffer() { + return this.buffer.toString(); + } + + public String getCommandSenderName() { + return "Rcon"; + } + + public void sendChatToPlayer(String var1) { + this.buffer.append(var1); + } + + public boolean canCommandSenderUseCommand(int var1, String var2) { + return true; + } + + public String translateString(String var1, Object... var2) { + return StringTranslate.getInstance().translateKeyFormat(var1, var2); + } + + public ChunkCoordinates getPlayerCoordinates() { + return new ChunkCoordinates(0, 0, 0); + } +} diff --git a/src/net/minecraft/src/RConOutputStream.java b/src/net/minecraft/src/RConOutputStream.java new file mode 100644 index 0000000..11b6bf3 --- /dev/null +++ b/src/net/minecraft/src/RConOutputStream.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class RConOutputStream { + private ByteArrayOutputStream byteArrayOutput; + private DataOutputStream output; + + public RConOutputStream(int var1) { + this.byteArrayOutput = new ByteArrayOutputStream(var1); + this.output = new DataOutputStream(this.byteArrayOutput); + } + + public void writeByteArray(byte[] var1) throws IOException { + this.output.write(var1, 0, var1.length); + } + + public void writeString(String var1) throws IOException { + this.output.writeBytes(var1); + this.output.write(0); + } + + public void writeInt(int var1) throws IOException { + this.output.write(var1); + } + + public void writeShort(short var1) throws IOException { + this.output.writeShort(Short.reverseBytes(var1)); + } + + public byte[] toByteArray() { + return this.byteArrayOutput.toByteArray(); + } + + public void reset() { + this.byteArrayOutput.reset(); + } +} diff --git a/src/net/minecraft/src/RConThreadBase.java b/src/net/minecraft/src/RConThreadBase.java new file mode 100644 index 0000000..57450b9 --- /dev/null +++ b/src/net/minecraft/src/RConThreadBase.java @@ -0,0 +1,139 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.net.DatagramSocket; +import java.net.ServerSocket; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public abstract class RConThreadBase implements Runnable { + protected boolean running = false; + protected IServer server; + protected Thread rconThread; + protected int field_72615_d = 5; + protected List socketList = new ArrayList(); + protected List serverSocketList = new ArrayList(); + + RConThreadBase(IServer var1) { + this.server = var1; + if(this.server.isDebuggingEnabled()) { + this.logWarning("Debugging is enabled, performance maybe reduced!"); + } + + } + + public synchronized void startThread() { + this.rconThread = new Thread(this); + this.rconThread.start(); + this.running = true; + } + + public boolean isRunning() { + return this.running; + } + + protected void logDebug(String var1) { + this.server.logDebug(var1); + } + + protected void logInfo(String var1) { + this.server.logInfo(var1); + } + + protected void logWarning(String var1) { + this.server.logWarning(var1); + } + + protected void logSevere(String var1) { + this.server.logSevere(var1); + } + + protected int getNumberOfPlayers() { + return this.server.getCurrentPlayerCount(); + } + + protected void registerSocket(DatagramSocket var1) { + this.logDebug("registerSocket: " + var1); + this.socketList.add(var1); + } + + protected boolean closeSocket(DatagramSocket var1, boolean var2) { + this.logDebug("closeSocket: " + var1); + if(null == var1) { + return false; + } else { + boolean var3 = false; + if(!var1.isClosed()) { + var1.close(); + var3 = true; + } + + if(var2) { + this.socketList.remove(var1); + } + + return var3; + } + } + + protected boolean closeServerSocket(ServerSocket var1) { + return this.closeServerSocket_do(var1, true); + } + + protected boolean closeServerSocket_do(ServerSocket var1, boolean var2) { + this.logDebug("closeSocket: " + var1); + if(null == var1) { + return false; + } else { + boolean var3 = false; + + try { + if(!var1.isClosed()) { + var1.close(); + var3 = true; + } + } catch (IOException var5) { + this.logWarning("IO: " + var5.getMessage()); + } + + if(var2) { + this.serverSocketList.remove(var1); + } + + return var3; + } + } + + protected void closeAllSockets() { + this.closeAllSockets_do(false); + } + + protected void closeAllSockets_do(boolean var1) { + int var2 = 0; + Iterator var3 = this.socketList.iterator(); + + while(var3.hasNext()) { + DatagramSocket var4 = (DatagramSocket)var3.next(); + if(this.closeSocket(var4, false)) { + ++var2; + } + } + + this.socketList.clear(); + var3 = this.serverSocketList.iterator(); + + while(var3.hasNext()) { + ServerSocket var5 = (ServerSocket)var3.next(); + if(this.closeServerSocket_do(var5, false)) { + ++var2; + } + } + + this.serverSocketList.clear(); + if(var1 && 0 < var2) { + this.logWarning("Force closed " + var2 + " sockets"); + } + + } +} diff --git a/src/net/minecraft/src/RConThreadClient.java b/src/net/minecraft/src/RConThreadClient.java new file mode 100644 index 0000000..2e866f6 --- /dev/null +++ b/src/net/minecraft/src/RConThreadClient.java @@ -0,0 +1,137 @@ +package net.minecraft.src; + +import java.io.BufferedInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; +import java.net.SocketTimeoutException; + +public class RConThreadClient extends RConThreadBase { + private boolean loggedIn = false; + private Socket clientSocket; + private byte[] buffer = new byte[1460]; + private String rconPassword; + + RConThreadClient(IServer var1, Socket var2) { + super(var1); + this.clientSocket = var2; + + try { + this.clientSocket.setSoTimeout(0); + } catch (Exception var4) { + this.running = false; + } + + this.rconPassword = var1.getStringProperty("rcon.password", ""); + this.logInfo("Rcon connection from: " + var2.getInetAddress()); + } + + public void run() { + while(true) { + try { + if(!this.running) { + return; + } + + BufferedInputStream var1 = new BufferedInputStream(this.clientSocket.getInputStream()); + int var2 = var1.read(this.buffer, 0, 1460); + if(10 > var2) { + return; + } + + byte var3 = 0; + int var4 = RConUtils.getBytesAsLEInt(this.buffer, 0, var2); + if(var4 == var2 - 4) { + int var21 = var3 + 4; + int var5 = RConUtils.getBytesAsLEInt(this.buffer, var21, var2); + var21 += 4; + int var6 = RConUtils.getRemainingBytesAsLEInt(this.buffer, var21); + var21 += 4; + switch(var6) { + case 2: + if(this.loggedIn) { + String var8 = RConUtils.getBytesAsString(this.buffer, var21, var2); + + try { + this.sendMultipacketResponse(var5, this.server.executeCommand(var8)); + } catch (Exception var16) { + this.sendMultipacketResponse(var5, "Error executing: " + var8 + " (" + var16.getMessage() + ")"); + } + continue; + } + + this.sendLoginFailedResponse(); + continue; + case 3: + String var7 = RConUtils.getBytesAsString(this.buffer, var21, var2); + int var10000 = var21 + var7.length(); + if(0 != var7.length() && var7.equals(this.rconPassword)) { + this.loggedIn = true; + this.sendResponse(var5, 2, ""); + continue; + } + + this.loggedIn = false; + this.sendLoginFailedResponse(); + continue; + default: + this.sendMultipacketResponse(var5, String.format("Unknown request %s", new Object[]{Integer.toHexString(var6)})); + continue; + } + } + } catch (SocketTimeoutException var17) { + return; + } catch (IOException var18) { + return; + } catch (Exception var19) { + System.out.println(var19); + return; + } finally { + this.closeSocket(); + } + + return; + } + } + + private void sendResponse(int var1, int var2, String var3) throws IOException { + ByteArrayOutputStream var4 = new ByteArrayOutputStream(1248); + DataOutputStream var5 = new DataOutputStream(var4); + var5.writeInt(Integer.reverseBytes(var3.length() + 10)); + var5.writeInt(Integer.reverseBytes(var1)); + var5.writeInt(Integer.reverseBytes(var2)); + var5.writeBytes(var3); + var5.write(0); + var5.write(0); + this.clientSocket.getOutputStream().write(var4.toByteArray()); + } + + private void sendLoginFailedResponse() throws IOException { + this.sendResponse(-1, 2, ""); + } + + private void sendMultipacketResponse(int var1, String var2) throws IOException { + int var3 = var2.length(); + + do { + int var4 = 4096 <= var3 ? 4096 : var3; + this.sendResponse(var1, 0, var2.substring(0, var4)); + var2 = var2.substring(var4); + var3 = var2.length(); + } while(0 != var3); + + } + + private void closeSocket() { + if(null != this.clientSocket) { + try { + this.clientSocket.close(); + } catch (IOException var2) { + this.logWarning("IO: " + var2.getMessage()); + } + + this.clientSocket = null; + } + } +} diff --git a/src/net/minecraft/src/RConThreadMain.java b/src/net/minecraft/src/RConThreadMain.java new file mode 100644 index 0000000..50d1fdd --- /dev/null +++ b/src/net/minecraft/src/RConThreadMain.java @@ -0,0 +1,106 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.SocketTimeoutException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +public class RConThreadMain extends RConThreadBase { + private int rconPort; + private int serverPort; + private String hostname; + private ServerSocket serverSocket = null; + private String rconPassword; + private Map clientThreads; + + public RConThreadMain(IServer var1) { + super(var1); + this.rconPort = var1.getIntProperty("rcon.port", 0); + this.rconPassword = var1.getStringProperty("rcon.password", ""); + this.hostname = var1.getHostname(); + this.serverPort = var1.getPort(); + if(0 == this.rconPort) { + this.rconPort = this.serverPort + 10; + this.logInfo("Setting default rcon port to " + this.rconPort); + var1.setProperty("rcon.port", Integer.valueOf(this.rconPort)); + if(0 == this.rconPassword.length()) { + var1.setProperty("rcon.password", ""); + } + + var1.saveProperties(); + } + + if(0 == this.hostname.length()) { + this.hostname = "0.0.0.0"; + } + + this.initClientThreadList(); + this.serverSocket = null; + } + + private void initClientThreadList() { + this.clientThreads = new HashMap(); + } + + private void cleanClientThreadsMap() { + Iterator var1 = this.clientThreads.entrySet().iterator(); + + while(var1.hasNext()) { + Entry var2 = (Entry)var1.next(); + if(!((RConThreadClient)var2.getValue()).isRunning()) { + var1.remove(); + } + } + + } + + public void run() { + this.logInfo("RCON running on " + this.hostname + ":" + this.rconPort); + + try { + while(this.running) { + try { + Socket var1 = this.serverSocket.accept(); + var1.setSoTimeout(500); + RConThreadClient var2 = new RConThreadClient(this.server, var1); + var2.startThread(); + this.clientThreads.put(var1.getRemoteSocketAddress(), var2); + this.cleanClientThreadsMap(); + } catch (SocketTimeoutException var7) { + this.cleanClientThreadsMap(); + } catch (IOException var8) { + if(this.running) { + this.logInfo("IO: " + var8.getMessage()); + } + } + } + } finally { + this.closeServerSocket(this.serverSocket); + } + + } + + public void startThread() { + if(0 == this.rconPassword.length()) { + this.logWarning("No rcon password set in \'" + this.server.getSettingsFilename() + "\', rcon disabled!"); + } else if(0 < this.rconPort && '\uffff' >= 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 var2) { + this.logWarning("Unable to initialise rcon on " + this.hostname + ":" + this.rconPort + " : " + var2.getMessage()); + } + + } + } else { + this.logWarning("Invalid rcon port " + this.rconPort + " found in \'" + this.server.getSettingsFilename() + "\', rcon disabled!"); + } + } +} diff --git a/src/net/minecraft/src/RConThreadQuery.java b/src/net/minecraft/src/RConThreadQuery.java new file mode 100644 index 0000000..e1a9dff --- /dev/null +++ b/src/net/minecraft/src/RConThreadQuery.java @@ -0,0 +1,275 @@ +package net.minecraft.src; + +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.util.Date; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.Map.Entry; + +public class RConThreadQuery extends RConThreadBase { + private long lastAuthCheckTime; + private int queryPort; + private int serverPort; + private int maxPlayers; + private String serverMotd; + private String worldName; + private DatagramSocket querySocket = null; + private byte[] buffer = new byte[1460]; + private DatagramPacket incomingPacket = null; + private Map field_72644_p; + private String queryHostname; + private String serverHostname; + private Map queryClients; + private long time; + private RConOutputStream output; + private long lastQueryResponseTime; + + public RConThreadQuery(IServer var1) { + super(var1); + this.queryPort = var1.getIntProperty("query.port", 0); + this.serverHostname = var1.getHostname(); + this.serverPort = var1.getPort(); + this.serverMotd = var1.getServerMOTD(); + this.maxPlayers = var1.getMaxPlayers(); + this.worldName = var1.getFolderName(); + this.lastQueryResponseTime = 0L; + this.queryHostname = "0.0.0.0"; + if(0 != this.serverHostname.length() && !this.queryHostname.equals(this.serverHostname)) { + this.queryHostname = this.serverHostname; + } else { + this.serverHostname = "0.0.0.0"; + + try { + InetAddress var2 = InetAddress.getLocalHost(); + this.queryHostname = var2.getHostAddress(); + } catch (UnknownHostException var3) { + this.logWarning("Unable to determine local host IP, please set server-ip in \'" + var1.getSettingsFilename() + "\' : " + var3.getMessage()); + } + } + + if(0 == this.queryPort) { + this.queryPort = this.serverPort; + this.logInfo("Setting default query port to " + this.queryPort); + var1.setProperty("query.port", Integer.valueOf(this.queryPort)); + var1.setProperty("debug", Boolean.valueOf(false)); + var1.saveProperties(); + } + + this.field_72644_p = new HashMap(); + this.output = new RConOutputStream(1460); + this.queryClients = new HashMap(); + this.time = (new Date()).getTime(); + } + + private void sendResponsePacket(byte[] var1, DatagramPacket var2) throws IOException { + this.querySocket.send(new DatagramPacket(var1, var1.length, var2.getSocketAddress())); + } + + private boolean parseIncomingPacket(DatagramPacket var1) throws IOException { + byte[] var2 = var1.getData(); + int var3 = var1.getLength(); + SocketAddress var4 = var1.getSocketAddress(); + this.logDebug("Packet len " + var3 + " [" + var4 + "]"); + if(3 <= var3 && -2 == var2[0] && -3 == var2[1]) { + this.logDebug("Packet \'" + RConUtils.getByteAsHexString(var2[2]) + "\' [" + var4 + "]"); + switch(var2[2]) { + case 0: + if(!this.verifyClientAuth(var1).booleanValue()) { + this.logDebug("Invalid challenge [" + var4 + "]"); + return false; + } else if(15 == var3) { + this.sendResponsePacket(this.createQueryResponse(var1), var1); + this.logDebug("Rules [" + var4 + "]"); + } else { + RConOutputStream var5 = new RConOutputStream(1460); + var5.writeInt(0); + var5.writeByteArray(this.getRequestID(var1.getSocketAddress())); + var5.writeString(this.serverMotd); + var5.writeString("SMP"); + var5.writeString(this.worldName); + var5.writeString(Integer.toString(this.getNumberOfPlayers())); + var5.writeString(Integer.toString(this.maxPlayers)); + var5.writeShort((short)this.serverPort); + var5.writeString(this.queryHostname); + this.sendResponsePacket(var5.toByteArray(), var1); + this.logDebug("Status [" + var4 + "]"); + } + default: + return true; + case 9: + this.sendAuthChallenge(var1); + this.logDebug("Challenge [" + var4 + "]"); + return true; + } + } else { + this.logDebug("Invalid packet [" + var4 + "]"); + return false; + } + } + + private byte[] createQueryResponse(DatagramPacket var1) throws IOException { + long var2 = System.currentTimeMillis(); + if(var2 < this.lastQueryResponseTime + 5000L) { + byte[] var7 = this.output.toByteArray(); + byte[] var8 = this.getRequestID(var1.getSocketAddress()); + var7[1] = var8[0]; + var7[2] = var8[1]; + var7[3] = var8[2]; + var7[4] = var8[3]; + return var7; + } else { + this.lastQueryResponseTime = var2; + this.output.reset(); + this.output.writeInt(0); + this.output.writeByteArray(this.getRequestID(var1.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[] var4 = this.server.getAllUsernames(); + byte var5 = (byte)var4.length; + + for(byte var6 = (byte)(var5 - 1); var6 >= 0; --var6) { + this.output.writeString(var4[var6]); + } + + this.output.writeInt(0); + return this.output.toByteArray(); + } + } + + private byte[] getRequestID(SocketAddress var1) { + return ((RConThreadQueryAuth)this.queryClients.get(var1)).getRequestId(); + } + + private Boolean verifyClientAuth(DatagramPacket var1) { + SocketAddress var2 = var1.getSocketAddress(); + if(!this.queryClients.containsKey(var2)) { + return Boolean.valueOf(false); + } else { + byte[] var3 = var1.getData(); + return ((RConThreadQueryAuth)this.queryClients.get(var2)).getRandomChallenge() != RConUtils.getBytesAsBEint(var3, 7, var1.getLength()) ? Boolean.valueOf(false) : Boolean.valueOf(true); + } + } + + private void sendAuthChallenge(DatagramPacket var1) throws IOException { + RConThreadQueryAuth var2 = new RConThreadQueryAuth(this, var1); + this.queryClients.put(var1.getSocketAddress(), var2); + this.sendResponsePacket(var2.getChallengeValue(), var1); + } + + private void cleanQueryClientsMap() { + if(this.running) { + long var1 = System.currentTimeMillis(); + if(var1 >= this.lastAuthCheckTime + 30000L) { + this.lastAuthCheckTime = var1; + Iterator var3 = this.queryClients.entrySet().iterator(); + + while(var3.hasNext()) { + Entry var4 = (Entry)var3.next(); + if(((RConThreadQueryAuth)var4.getValue()).hasExpired(var1).booleanValue()) { + var3.remove(); + } + } + + } + } + } + + public void run() { + this.logInfo("Query running on " + this.serverHostname + ":" + this.queryPort); + this.lastAuthCheckTime = System.currentTimeMillis(); + 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 var9) { + this.stopWithException(var9); + } + } + } finally { + this.closeAllSockets(); + } + + } + + public void startThread() { + if(!this.running) { + if(0 < this.queryPort && '\uffff' >= this.queryPort) { + if(this.initQuerySystem()) { + super.startThread(); + } + + } else { + this.logWarning("Invalid query port " + this.queryPort + " found in \'" + this.server.getSettingsFilename() + "\' (queries disabled)"); + } + } + } + + private void stopWithException(Exception var1) { + if(this.running) { + this.logWarning("Unexpected exception, buggy JRE? (" + var1.toString() + ")"); + if(!this.initQuerySystem()) { + this.logSevere("Failed to recover from buggy JRE, shutting down!"); + this.running = false; + } + + } + } + + 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 var2) { + this.logWarning("Unable to initialise query system on " + this.serverHostname + ":" + this.queryPort + " (Socket): " + var2.getMessage()); + } catch (UnknownHostException var3) { + this.logWarning("Unable to initialise query system on " + this.serverHostname + ":" + this.queryPort + " (Unknown Host): " + var3.getMessage()); + } catch (Exception var4) { + this.logWarning("Unable to initialise query system on " + this.serverHostname + ":" + this.queryPort + " (E): " + var4.getMessage()); + } + + return false; + } +} diff --git a/src/net/minecraft/src/RConThreadQueryAuth.java b/src/net/minecraft/src/RConThreadQueryAuth.java new file mode 100644 index 0000000..6851b70 --- /dev/null +++ b/src/net/minecraft/src/RConThreadQueryAuth.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import java.net.DatagramPacket; +import java.util.Date; +import java.util.Random; + +class RConThreadQueryAuth { + private long timestamp; + private int randomChallenge; + private byte[] requestId; + private byte[] challengeValue; + private String requestIdAsString; + final RConThreadQuery queryThread; + + public RConThreadQueryAuth(RConThreadQuery var1, DatagramPacket var2) { + this.queryThread = var1; + this.timestamp = (new Date()).getTime(); + byte[] var3 = var2.getData(); + this.requestId = new byte[4]; + this.requestId[0] = var3[3]; + this.requestId[1] = var3[4]; + this.requestId[2] = var3[5]; + this.requestId[3] = var3[6]; + this.requestIdAsString = new String(this.requestId); + this.randomChallenge = (new Random()).nextInt(16777216); + this.challengeValue = String.format("\t%s%d\u0000", new Object[]{this.requestIdAsString, Integer.valueOf(this.randomChallenge)}).getBytes(); + } + + public Boolean hasExpired(long var1) { + return Boolean.valueOf(this.timestamp < var1); + } + + public int getRandomChallenge() { + return this.randomChallenge; + } + + public byte[] getChallengeValue() { + return this.challengeValue; + } + + public byte[] getRequestId() { + return this.requestId; + } +} diff --git a/src/net/minecraft/src/RConUtils.java b/src/net/minecraft/src/RConUtils.java new file mode 100644 index 0000000..1b43f7e --- /dev/null +++ b/src/net/minecraft/src/RConUtils.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +public class RConUtils { + public static char[] hexDigits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'}; + + public static String getBytesAsString(byte[] var0, int var1, int var2) { + int var3 = var2 - 1; + + int var4; + for(var4 = var1 > var3 ? var3 : var1; 0 != var0[var4] && var4 < var3; ++var4) { + } + + return new String(var0, var1, var4 - var1); + } + + public static int getRemainingBytesAsLEInt(byte[] var0, int var1) { + return getBytesAsLEInt(var0, var1, var0.length); + } + + public static int getBytesAsLEInt(byte[] var0, int var1, int var2) { + return 0 > var2 - var1 - 4 ? 0 : var0[var1 + 3] << 24 | (var0[var1 + 2] & 255) << 16 | (var0[var1 + 1] & 255) << 8 | var0[var1] & 255; + } + + public static int getBytesAsBEint(byte[] var0, int var1, int var2) { + return 0 > var2 - var1 - 4 ? 0 : var0[var1] << 24 | (var0[var1 + 1] & 255) << 16 | (var0[var1 + 2] & 255) << 8 | var0[var1 + 3] & 255; + } + + public static String getByteAsHexString(byte var0) { + return "" + hexDigits[(var0 & 240) >>> 4] + hexDigits[var0 & 15]; + } +} diff --git a/src/net/minecraft/src/RandomPositionGenerator.java b/src/net/minecraft/src/RandomPositionGenerator.java new file mode 100644 index 0000000..dd8b4b7 --- /dev/null +++ b/src/net/minecraft/src/RandomPositionGenerator.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +import java.util.Random; + +public class RandomPositionGenerator { + private static Vec3 staticVector = Vec3.createVectorHelper(0.0D, 0.0D, 0.0D); + + public static Vec3 findRandomTarget(EntityCreature var0, int var1, int var2) { + return findRandomTargetBlock(var0, var1, var2, (Vec3)null); + } + + public static Vec3 findRandomTargetBlockTowards(EntityCreature var0, int var1, int var2, Vec3 var3) { + staticVector.xCoord = var3.xCoord - var0.posX; + staticVector.yCoord = var3.yCoord - var0.posY; + staticVector.zCoord = var3.zCoord - var0.posZ; + return findRandomTargetBlock(var0, var1, var2, staticVector); + } + + public static Vec3 findRandomTargetBlockAwayFrom(EntityCreature var0, int var1, int var2, Vec3 var3) { + staticVector.xCoord = var0.posX - var3.xCoord; + staticVector.yCoord = var0.posY - var3.yCoord; + staticVector.zCoord = var0.posZ - var3.zCoord; + return findRandomTargetBlock(var0, var1, var2, staticVector); + } + + private static Vec3 findRandomTargetBlock(EntityCreature var0, int var1, int var2, Vec3 var3) { + Random var4 = var0.getRNG(); + boolean var5 = false; + int var6 = 0; + int var7 = 0; + int var8 = 0; + float var9 = -99999.0F; + boolean var10; + if(var0.hasHome()) { + double var11 = (double)(var0.getHomePosition().getDistanceSquared(MathHelper.floor_double(var0.posX), MathHelper.floor_double(var0.posY), MathHelper.floor_double(var0.posZ)) + 4.0F); + double var13 = (double)(var0.getMaximumHomeDistance() + (float)var1); + var10 = var11 < var13 * var13; + } else { + var10 = false; + } + + for(int var16 = 0; var16 < 10; ++var16) { + int var12 = var4.nextInt(2 * var1) - var1; + int var17 = var4.nextInt(2 * var2) - var2; + int var14 = var4.nextInt(2 * var1) - var1; + if(var3 == null || (double)var12 * var3.xCoord + (double)var14 * var3.zCoord >= 0.0D) { + var12 += MathHelper.floor_double(var0.posX); + var17 += MathHelper.floor_double(var0.posY); + var14 += MathHelper.floor_double(var0.posZ); + if(!var10 || var0.isWithinHomeDistance(var12, var17, var14)) { + float var15 = var0.getBlockPathWeight(var12, var17, var14); + if(var15 > var9) { + var9 = var15; + var6 = var12; + var7 = var17; + var8 = var14; + var5 = true; + } + } + } + } + + if(var5) { + return var0.worldObj.getWorldVec3Pool().getVecFromPool((double)var6, (double)var7, (double)var8); + } else { + return null; + } + } +} diff --git a/src/net/minecraft/src/RecipeFireworks.java b/src/net/minecraft/src/RecipeFireworks.java new file mode 100644 index 0000000..29c3687 --- /dev/null +++ b/src/net/minecraft/src/RecipeFireworks.java @@ -0,0 +1,163 @@ +package net.minecraft.src; + +import java.util.ArrayList; + +public class RecipeFireworks implements IRecipe { + private ItemStack field_92102_a; + + public boolean matches(InventoryCrafting var1, World var2) { + this.field_92102_a = null; + int var3 = 0; + int var4 = 0; + int var5 = 0; + int var6 = 0; + int var7 = 0; + int var8 = 0; + + for(int var9 = 0; var9 < var1.getSizeInventory(); ++var9) { + ItemStack var10 = var1.getStackInSlot(var9); + if(var10 != null) { + if(var10.itemID == Item.gunpowder.itemID) { + ++var4; + } else if(var10.itemID == Item.fireworkCharge.itemID) { + ++var6; + } else if(var10.itemID == Item.dyePowder.itemID) { + ++var5; + } else if(var10.itemID == Item.paper.itemID) { + ++var3; + } else if(var10.itemID == Item.lightStoneDust.itemID) { + ++var7; + } else if(var10.itemID == Item.diamond.itemID) { + ++var7; + } else if(var10.itemID == Item.fireballCharge.itemID) { + ++var8; + } else if(var10.itemID == Item.feather.itemID) { + ++var8; + } else if(var10.itemID == Item.goldNugget.itemID) { + ++var8; + } else { + if(var10.itemID != Item.skull.itemID) { + return false; + } + + ++var8; + } + } + } + + var7 += var5 + var8; + if(var4 <= 3 && var3 <= 1) { + NBTTagCompound var16; + NBTTagCompound var19; + if(var4 >= 1 && var3 == 1 && var7 == 0) { + this.field_92102_a = new ItemStack(Item.firework); + if(var6 > 0) { + var16 = new NBTTagCompound(); + var19 = new NBTTagCompound("Fireworks"); + NBTTagList var25 = new NBTTagList("Explosions"); + + for(int var22 = 0; var22 < var1.getSizeInventory(); ++var22) { + ItemStack var26 = var1.getStackInSlot(var22); + if(var26 != null && var26.itemID == Item.fireworkCharge.itemID && var26.hasTagCompound() && var26.getTagCompound().hasKey("Explosion")) { + var25.appendTag(var26.getTagCompound().getCompoundTag("Explosion")); + } + } + + var19.setTag("Explosions", var25); + var19.setByte("Flight", (byte)var4); + var16.setTag("Fireworks", var19); + this.field_92102_a.setTagCompound(var16); + } + + return true; + } else if(var4 == 1 && var3 == 0 && var6 == 0 && var5 > 0 && var8 <= 1) { + this.field_92102_a = new ItemStack(Item.fireworkCharge); + var16 = new NBTTagCompound(); + var19 = new NBTTagCompound("Explosion"); + byte var23 = 0; + ArrayList var12 = new ArrayList(); + + for(int var13 = 0; var13 < var1.getSizeInventory(); ++var13) { + ItemStack var14 = var1.getStackInSlot(var13); + if(var14 != null) { + if(var14.itemID == Item.dyePowder.itemID) { + var12.add(Integer.valueOf(ItemDye.dyeColors[var14.getItemDamage()])); + } else if(var14.itemID == Item.lightStoneDust.itemID) { + var19.setBoolean("Flicker", true); + } else if(var14.itemID == Item.diamond.itemID) { + var19.setBoolean("Trail", true); + } else if(var14.itemID == Item.fireballCharge.itemID) { + var23 = 1; + } else if(var14.itemID == Item.feather.itemID) { + var23 = 4; + } else if(var14.itemID == Item.goldNugget.itemID) { + var23 = 2; + } else if(var14.itemID == Item.skull.itemID) { + var23 = 3; + } + } + } + + int[] var24 = new int[var12.size()]; + + for(int var27 = 0; var27 < var24.length; ++var27) { + var24[var27] = ((Integer)var12.get(var27)).intValue(); + } + + var19.setIntArray("Colors", var24); + var19.setByte("Type", var23); + var16.setTag("Explosion", var19); + this.field_92102_a.setTagCompound(var16); + return true; + } else if(var4 == 0 && var3 == 0 && var6 == 1 && var5 > 0 && var5 == var7) { + ArrayList var15 = new ArrayList(); + + for(int var17 = 0; var17 < var1.getSizeInventory(); ++var17) { + ItemStack var11 = var1.getStackInSlot(var17); + if(var11 != null) { + if(var11.itemID == Item.dyePowder.itemID) { + var15.add(Integer.valueOf(ItemDye.dyeColors[var11.getItemDamage()])); + } else if(var11.itemID == Item.fireworkCharge.itemID) { + this.field_92102_a = var11.copy(); + this.field_92102_a.stackSize = 1; + } + } + } + + int[] var18 = new int[var15.size()]; + + for(int var20 = 0; var20 < var18.length; ++var20) { + var18[var20] = ((Integer)var15.get(var20)).intValue(); + } + + if(this.field_92102_a != null && this.field_92102_a.hasTagCompound()) { + NBTTagCompound var21 = this.field_92102_a.getTagCompound().getCompoundTag("Explosion"); + if(var21 == null) { + return false; + } else { + var21.setIntArray("FadeColors", var18); + return true; + } + } else { + return false; + } + } else { + return false; + } + } else { + return false; + } + } + + public ItemStack getCraftingResult(InventoryCrafting var1) { + return this.field_92102_a.copy(); + } + + public int getRecipeSize() { + return 10; + } + + public ItemStack getRecipeOutput() { + return this.field_92102_a; + } +} diff --git a/src/net/minecraft/src/RecipeSorter.java b/src/net/minecraft/src/RecipeSorter.java new file mode 100644 index 0000000..51eaac2 --- /dev/null +++ b/src/net/minecraft/src/RecipeSorter.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.Comparator; + +class RecipeSorter implements Comparator { + final CraftingManager craftingManager; + + RecipeSorter(CraftingManager var1) { + this.craftingManager = var1; + } + + public int compareRecipes(IRecipe var1, IRecipe var2) { + return var1 instanceof ShapelessRecipes && var2 instanceof ShapedRecipes ? 1 : (var2 instanceof ShapelessRecipes && var1 instanceof ShapedRecipes ? -1 : (var2.getRecipeSize() < var1.getRecipeSize() ? -1 : (var2.getRecipeSize() > var1.getRecipeSize() ? 1 : 0))); + } + + public int compare(Object var1, Object var2) { + return this.compareRecipes((IRecipe)var1, (IRecipe)var2); + } +} diff --git a/src/net/minecraft/src/RecipesArmor.java b/src/net/minecraft/src/RecipesArmor.java new file mode 100644 index 0000000..84ebbc7 --- /dev/null +++ b/src/net/minecraft/src/RecipesArmor.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +public class RecipesArmor { + private String[][] recipePatterns = new String[][]{{"XXX", "X X"}, {"X X", "XXX", "XXX"}, {"XXX", "X X", "X X"}, {"X X", "X X"}}; + private Object[][] recipeItems = new Object[][]{{Item.leather, Block.fire, Item.ingotIron, Item.diamond, Item.ingotGold}, {Item.helmetLeather, Item.helmetChain, Item.helmetIron, Item.helmetDiamond, Item.helmetGold}, {Item.plateLeather, Item.plateChain, Item.plateIron, Item.plateDiamond, Item.plateGold}, {Item.legsLeather, Item.legsChain, Item.legsIron, Item.legsDiamond, Item.legsGold}, {Item.bootsLeather, Item.bootsChain, Item.bootsIron, Item.bootsDiamond, Item.bootsGold}}; + + public void addRecipes(CraftingManager var1) { + for(int var2 = 0; var2 < this.recipeItems[0].length; ++var2) { + Object var3 = this.recipeItems[0][var2]; + + for(int var4 = 0; var4 < this.recipeItems.length - 1; ++var4) { + Item var5 = (Item)this.recipeItems[var4 + 1][var2]; + var1.addRecipe(new ItemStack(var5), new Object[]{this.recipePatterns[var4], Character.valueOf('X'), var3}); + } + } + + } +} diff --git a/src/net/minecraft/src/RecipesArmorDyes.java b/src/net/minecraft/src/RecipesArmorDyes.java new file mode 100644 index 0000000..11b6cc8 --- /dev/null +++ b/src/net/minecraft/src/RecipesArmorDyes.java @@ -0,0 +1,110 @@ +package net.minecraft.src; + +import java.util.ArrayList; + +public class RecipesArmorDyes implements IRecipe { + public boolean matches(InventoryCrafting var1, World var2) { + ItemStack var3 = null; + ArrayList var4 = new ArrayList(); + + for(int var5 = 0; var5 < var1.getSizeInventory(); ++var5) { + ItemStack var6 = var1.getStackInSlot(var5); + if(var6 != null) { + if(var6.getItem() instanceof ItemArmor) { + ItemArmor var7 = (ItemArmor)var6.getItem(); + if(var7.getArmorMaterial() != EnumArmorMaterial.CLOTH || var3 != null) { + return false; + } + + var3 = var6; + } else { + if(var6.itemID != Item.dyePowder.itemID) { + return false; + } + + var4.add(var6); + } + } + } + + return var3 != null && !var4.isEmpty(); + } + + public ItemStack getCraftingResult(InventoryCrafting var1) { + ItemStack var2 = null; + int[] var3 = new int[3]; + int var4 = 0; + int var5 = 0; + ItemArmor var6 = null; + + int var7; + int var9; + float var10; + float var11; + int var17; + for(var7 = 0; var7 < var1.getSizeInventory(); ++var7) { + ItemStack var8 = var1.getStackInSlot(var7); + if(var8 != null) { + if(var8.getItem() instanceof ItemArmor) { + var6 = (ItemArmor)var8.getItem(); + if(var6.getArmorMaterial() != EnumArmorMaterial.CLOTH || var2 != null) { + return null; + } + + var2 = var8.copy(); + var2.stackSize = 1; + if(var6.hasColor(var8)) { + var9 = var6.getColor(var2); + var10 = (float)(var9 >> 16 & 255) / 255.0F; + var11 = (float)(var9 >> 8 & 255) / 255.0F; + float var12 = (float)(var9 & 255) / 255.0F; + var4 = (int)((float)var4 + Math.max(var10, Math.max(var11, var12)) * 255.0F); + var3[0] = (int)((float)var3[0] + var10 * 255.0F); + var3[1] = (int)((float)var3[1] + var11 * 255.0F); + var3[2] = (int)((float)var3[2] + var12 * 255.0F); + ++var5; + } + } else { + if(var8.itemID != Item.dyePowder.itemID) { + return null; + } + + float[] var14 = EntitySheep.fleeceColorTable[BlockCloth.getBlockFromDye(var8.getItemDamage())]; + int var15 = (int)(var14[0] * 255.0F); + int var16 = (int)(var14[1] * 255.0F); + var17 = (int)(var14[2] * 255.0F); + var4 += Math.max(var15, Math.max(var16, var17)); + var3[0] += var15; + var3[1] += var16; + var3[2] += var17; + ++var5; + } + } + } + + if(var6 == null) { + return null; + } else { + var7 = var3[0] / var5; + int var13 = var3[1] / var5; + var9 = var3[2] / var5; + var10 = (float)var4 / (float)var5; + var11 = (float)Math.max(var7, Math.max(var13, var9)); + var7 = (int)((float)var7 * var10 / var11); + var13 = (int)((float)var13 * var10 / var11); + var9 = (int)((float)var9 * var10 / var11); + var17 = (var7 << 8) + var13; + var17 = (var17 << 8) + var9; + var6.func_82813_b(var2, var17); + return var2; + } + } + + public int getRecipeSize() { + return 10; + } + + public ItemStack getRecipeOutput() { + return null; + } +} diff --git a/src/net/minecraft/src/RecipesCrafting.java b/src/net/minecraft/src/RecipesCrafting.java new file mode 100644 index 0000000..59fb503 --- /dev/null +++ b/src/net/minecraft/src/RecipesCrafting.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +public class RecipesCrafting { + public void addRecipes(CraftingManager var1) { + var1.addRecipe(new ItemStack(Block.chest), new Object[]{"###", "# #", "###", Character.valueOf('#'), Block.planks}); + var1.addRecipe(new ItemStack(Block.chestTrapped), new Object[]{"#-", Character.valueOf('#'), Block.chest, Character.valueOf('-'), Block.tripWireSource}); + var1.addRecipe(new ItemStack(Block.enderChest), new Object[]{"###", "#E#", "###", Character.valueOf('#'), Block.obsidian, Character.valueOf('E'), Item.eyeOfEnder}); + var1.addRecipe(new ItemStack(Block.furnaceIdle), new Object[]{"###", "# #", "###", Character.valueOf('#'), Block.cobblestone}); + var1.addRecipe(new ItemStack(Block.workbench), new Object[]{"##", "##", Character.valueOf('#'), Block.planks}); + var1.addRecipe(new ItemStack(Block.sandStone), new Object[]{"##", "##", Character.valueOf('#'), Block.sand}); + var1.addRecipe(new ItemStack(Block.sandStone, 4, 2), new Object[]{"##", "##", Character.valueOf('#'), Block.sandStone}); + var1.addRecipe(new ItemStack(Block.sandStone, 1, 1), new Object[]{"#", "#", Character.valueOf('#'), new ItemStack(Block.stoneSingleSlab, 1, 1)}); + var1.addRecipe(new ItemStack(Block.blockNetherQuartz, 1, 1), new Object[]{"#", "#", Character.valueOf('#'), new ItemStack(Block.stoneSingleSlab, 1, 7)}); + var1.addRecipe(new ItemStack(Block.blockNetherQuartz, 2, 2), new Object[]{"#", "#", Character.valueOf('#'), new ItemStack(Block.blockNetherQuartz, 1, 0)}); + var1.addRecipe(new ItemStack(Block.stoneBrick, 4), new Object[]{"##", "##", Character.valueOf('#'), Block.stone}); + var1.addRecipe(new ItemStack(Block.fenceIron, 16), new Object[]{"###", "###", Character.valueOf('#'), Item.ingotIron}); + var1.addRecipe(new ItemStack(Block.thinGlass, 16), new Object[]{"###", "###", Character.valueOf('#'), Block.glass}); + var1.addRecipe(new ItemStack(Block.redstoneLampIdle, 1), new Object[]{" R ", "RGR", " R ", Character.valueOf('R'), Item.redstone, Character.valueOf('G'), Block.glowStone}); + var1.addRecipe(new ItemStack(Block.beacon, 1), new Object[]{"GGG", "GSG", "OOO", Character.valueOf('G'), Block.glass, Character.valueOf('S'), Item.netherStar, Character.valueOf('O'), Block.obsidian}); + var1.addRecipe(new ItemStack(Block.netherBrick, 1), new Object[]{"NN", "NN", Character.valueOf('N'), Item.netherrackBrick}); + } +} diff --git a/src/net/minecraft/src/RecipesDyes.java b/src/net/minecraft/src/RecipesDyes.java new file mode 100644 index 0000000..069086f --- /dev/null +++ b/src/net/minecraft/src/RecipesDyes.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class RecipesDyes { + public void addRecipes(CraftingManager var1) { + for(int var2 = 0; var2 < 16; ++var2) { + var1.addShapelessRecipe(new ItemStack(Block.cloth, 1, BlockCloth.getDyeFromBlock(var2)), new Object[]{new ItemStack(Item.dyePowder, 1, var2), new ItemStack(Item.itemsList[Block.cloth.blockID], 1, 0)}); + } + + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 11), new Object[]{Block.plantYellow}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 1), new Object[]{Block.plantRed}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 3, 15), new Object[]{Item.bone}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 9), new Object[]{new ItemStack(Item.dyePowder, 1, 1), new ItemStack(Item.dyePowder, 1, 15)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 14), new Object[]{new ItemStack(Item.dyePowder, 1, 1), new ItemStack(Item.dyePowder, 1, 11)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 10), new Object[]{new ItemStack(Item.dyePowder, 1, 2), new ItemStack(Item.dyePowder, 1, 15)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 8), new Object[]{new ItemStack(Item.dyePowder, 1, 0), new ItemStack(Item.dyePowder, 1, 15)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 7), new Object[]{new ItemStack(Item.dyePowder, 1, 8), new ItemStack(Item.dyePowder, 1, 15)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 3, 7), new Object[]{new ItemStack(Item.dyePowder, 1, 0), new ItemStack(Item.dyePowder, 1, 15), new ItemStack(Item.dyePowder, 1, 15)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 12), new Object[]{new ItemStack(Item.dyePowder, 1, 4), new ItemStack(Item.dyePowder, 1, 15)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 6), new Object[]{new ItemStack(Item.dyePowder, 1, 4), new ItemStack(Item.dyePowder, 1, 2)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 5), new Object[]{new ItemStack(Item.dyePowder, 1, 4), new ItemStack(Item.dyePowder, 1, 1)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 2, 13), new Object[]{new ItemStack(Item.dyePowder, 1, 5), new ItemStack(Item.dyePowder, 1, 9)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 3, 13), new Object[]{new ItemStack(Item.dyePowder, 1, 4), new ItemStack(Item.dyePowder, 1, 1), new ItemStack(Item.dyePowder, 1, 9)}); + var1.addShapelessRecipe(new ItemStack(Item.dyePowder, 4, 13), new Object[]{new ItemStack(Item.dyePowder, 1, 4), new ItemStack(Item.dyePowder, 1, 1), new ItemStack(Item.dyePowder, 1, 1), new ItemStack(Item.dyePowder, 1, 15)}); + } +} diff --git a/src/net/minecraft/src/RecipesFood.java b/src/net/minecraft/src/RecipesFood.java new file mode 100644 index 0000000..fc2d311 --- /dev/null +++ b/src/net/minecraft/src/RecipesFood.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +public class RecipesFood { + public void addRecipes(CraftingManager var1) { + var1.addShapelessRecipe(new ItemStack(Item.bowlSoup), new Object[]{Block.mushroomBrown, Block.mushroomRed, Item.bowlEmpty}); + var1.addRecipe(new ItemStack(Item.cookie, 8), new Object[]{"#X#", Character.valueOf('X'), new ItemStack(Item.dyePowder, 1, 3), Character.valueOf('#'), Item.wheat}); + var1.addRecipe(new ItemStack(Block.melon), new Object[]{"MMM", "MMM", "MMM", Character.valueOf('M'), Item.melon}); + var1.addRecipe(new ItemStack(Item.melonSeeds), new Object[]{"M", Character.valueOf('M'), Item.melon}); + var1.addRecipe(new ItemStack(Item.pumpkinSeeds, 4), new Object[]{"M", Character.valueOf('M'), Block.pumpkin}); + var1.addShapelessRecipe(new ItemStack(Item.pumpkinPie), new Object[]{Block.pumpkin, Item.sugar, Item.egg}); + var1.addShapelessRecipe(new ItemStack(Item.fermentedSpiderEye), new Object[]{Item.spiderEye, Block.mushroomBrown, Item.sugar}); + var1.addShapelessRecipe(new ItemStack(Item.speckledMelon), new Object[]{Item.melon, Item.goldNugget}); + var1.addShapelessRecipe(new ItemStack(Item.blazePowder, 2), new Object[]{Item.blazeRod}); + var1.addShapelessRecipe(new ItemStack(Item.magmaCream), new Object[]{Item.blazePowder, Item.slimeBall}); + } +} diff --git a/src/net/minecraft/src/RecipesIngots.java b/src/net/minecraft/src/RecipesIngots.java new file mode 100644 index 0000000..9ceaa73 --- /dev/null +++ b/src/net/minecraft/src/RecipesIngots.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class RecipesIngots { + private Object[][] recipeItems = new Object[][]{{Block.blockGold, new ItemStack(Item.ingotGold, 9)}, {Block.blockIron, new ItemStack(Item.ingotIron, 9)}, {Block.blockDiamond, new ItemStack(Item.diamond, 9)}, {Block.blockEmerald, new ItemStack(Item.emerald, 9)}, {Block.blockLapis, new ItemStack(Item.dyePowder, 9, 4)}, {Block.blockRedstone, new ItemStack(Item.redstone, 9)}}; + + public void addRecipes(CraftingManager var1) { + for(int var2 = 0; var2 < this.recipeItems.length; ++var2) { + Block var3 = (Block)this.recipeItems[var2][0]; + ItemStack var4 = (ItemStack)this.recipeItems[var2][1]; + var1.addRecipe(new ItemStack(var3), new Object[]{"###", "###", "###", Character.valueOf('#'), var4}); + var1.addRecipe(var4, new Object[]{"#", Character.valueOf('#'), var3}); + } + + var1.addRecipe(new ItemStack(Item.ingotGold), new Object[]{"###", "###", "###", Character.valueOf('#'), Item.goldNugget}); + var1.addRecipe(new ItemStack(Item.goldNugget, 9), new Object[]{"#", Character.valueOf('#'), Item.ingotGold}); + } +} diff --git a/src/net/minecraft/src/RecipesMapCloning.java b/src/net/minecraft/src/RecipesMapCloning.java new file mode 100644 index 0000000..027f486 --- /dev/null +++ b/src/net/minecraft/src/RecipesMapCloning.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +public class RecipesMapCloning implements IRecipe { + public boolean matches(InventoryCrafting var1, World var2) { + int var3 = 0; + ItemStack var4 = null; + + for(int var5 = 0; var5 < var1.getSizeInventory(); ++var5) { + ItemStack var6 = var1.getStackInSlot(var5); + if(var6 != null) { + if(var6.itemID == Item.map.itemID) { + if(var4 != null) { + return false; + } + + var4 = var6; + } else { + if(var6.itemID != Item.emptyMap.itemID) { + return false; + } + + ++var3; + } + } + } + + return var4 != null && var3 > 0; + } + + public ItemStack getCraftingResult(InventoryCrafting var1) { + int var2 = 0; + ItemStack var3 = null; + + for(int var4 = 0; var4 < var1.getSizeInventory(); ++var4) { + ItemStack var5 = var1.getStackInSlot(var4); + if(var5 != null) { + if(var5.itemID == Item.map.itemID) { + if(var3 != null) { + return null; + } + + var3 = var5; + } else { + if(var5.itemID != Item.emptyMap.itemID) { + return null; + } + + ++var2; + } + } + } + + if(var3 != null && var2 >= 1) { + ItemStack var6 = new ItemStack(Item.map, var2 + 1, var3.getItemDamage()); + if(var3.hasDisplayName()) { + var6.setItemName(var3.getDisplayName()); + } + + return var6; + } else { + return null; + } + } + + public int getRecipeSize() { + return 9; + } + + public ItemStack getRecipeOutput() { + return null; + } +} diff --git a/src/net/minecraft/src/RecipesMapExtending.java b/src/net/minecraft/src/RecipesMapExtending.java new file mode 100644 index 0000000..eb3a35b --- /dev/null +++ b/src/net/minecraft/src/RecipesMapExtending.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +public class RecipesMapExtending extends ShapedRecipes { + public RecipesMapExtending() { + super(3, 3, new ItemStack[]{new ItemStack(Item.paper), new ItemStack(Item.paper), new ItemStack(Item.paper), new ItemStack(Item.paper), new ItemStack(Item.map, 0, Short.MAX_VALUE), new ItemStack(Item.paper), new ItemStack(Item.paper), new ItemStack(Item.paper), new ItemStack(Item.paper)}, new ItemStack(Item.emptyMap, 0, 0)); + } + + public boolean matches(InventoryCrafting var1, World var2) { + if(!super.matches(var1, var2)) { + return false; + } else { + ItemStack var3 = null; + + for(int var4 = 0; var4 < var1.getSizeInventory() && var3 == null; ++var4) { + ItemStack var5 = var1.getStackInSlot(var4); + if(var5 != null && var5.itemID == Item.map.itemID) { + var3 = var5; + } + } + + if(var3 == null) { + return false; + } else { + MapData var6 = Item.map.getMapData(var3, var2); + return var6 == null ? false : var6.scale < 4; + } + } + } + + public ItemStack getCraftingResult(InventoryCrafting var1) { + ItemStack var2 = null; + + for(int var3 = 0; var3 < var1.getSizeInventory() && var2 == null; ++var3) { + ItemStack var4 = var1.getStackInSlot(var3); + if(var4 != null && var4.itemID == Item.map.itemID) { + var2 = var4; + } + } + + var2 = var2.copy(); + var2.stackSize = 1; + if(var2.getTagCompound() == null) { + var2.setTagCompound(new NBTTagCompound()); + } + + var2.getTagCompound().setBoolean("map_is_scaling", true); + return var2; + } +} diff --git a/src/net/minecraft/src/RecipesTools.java b/src/net/minecraft/src/RecipesTools.java new file mode 100644 index 0000000..541ea5d --- /dev/null +++ b/src/net/minecraft/src/RecipesTools.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class RecipesTools { + private String[][] recipePatterns = new String[][]{{"XXX", " # ", " # "}, {"X", "#", "#"}, {"XX", "X#", " #"}, {"XX", " #", " #"}}; + private Object[][] recipeItems = new Object[][]{{Block.planks, Block.cobblestone, Item.ingotIron, Item.diamond, Item.ingotGold}, {Item.pickaxeWood, Item.pickaxeStone, Item.pickaxeIron, Item.pickaxeDiamond, Item.pickaxeGold}, {Item.shovelWood, Item.shovelStone, Item.shovelIron, Item.shovelDiamond, Item.shovelGold}, {Item.axeWood, Item.axeStone, Item.axeIron, Item.axeDiamond, Item.axeGold}, {Item.hoeWood, Item.hoeStone, Item.hoeIron, Item.hoeDiamond, Item.hoeGold}}; + + public void addRecipes(CraftingManager var1) { + for(int var2 = 0; var2 < this.recipeItems[0].length; ++var2) { + Object var3 = this.recipeItems[0][var2]; + + for(int var4 = 0; var4 < this.recipeItems.length - 1; ++var4) { + Item var5 = (Item)this.recipeItems[var4 + 1][var2]; + var1.addRecipe(new ItemStack(var5), new Object[]{this.recipePatterns[var4], Character.valueOf('#'), Item.stick, Character.valueOf('X'), var3}); + } + } + + var1.addRecipe(new ItemStack(Item.shears), new Object[]{" #", "# ", Character.valueOf('#'), Item.ingotIron}); + } +} diff --git a/src/net/minecraft/src/RecipesWeapons.java b/src/net/minecraft/src/RecipesWeapons.java new file mode 100644 index 0000000..fe0bf93 --- /dev/null +++ b/src/net/minecraft/src/RecipesWeapons.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class RecipesWeapons { + private String[][] recipePatterns = new String[][]{{"X", "X", "#"}}; + private Object[][] recipeItems = new Object[][]{{Block.planks, Block.cobblestone, Item.ingotIron, Item.diamond, Item.ingotGold}, {Item.swordWood, Item.swordStone, Item.swordIron, Item.swordDiamond, Item.swordGold}}; + + public void addRecipes(CraftingManager var1) { + for(int var2 = 0; var2 < this.recipeItems[0].length; ++var2) { + Object var3 = this.recipeItems[0][var2]; + + for(int var4 = 0; var4 < this.recipeItems.length - 1; ++var4) { + Item var5 = (Item)this.recipeItems[var4 + 1][var2]; + var1.addRecipe(new ItemStack(var5), new Object[]{this.recipePatterns[var4], Character.valueOf('#'), Item.stick, Character.valueOf('X'), var3}); + } + } + + var1.addRecipe(new ItemStack(Item.bow, 1), new Object[]{" #X", "# X", " #X", Character.valueOf('X'), Item.silk, Character.valueOf('#'), Item.stick}); + var1.addRecipe(new ItemStack(Item.arrow, 4), new Object[]{"X", "#", "Y", Character.valueOf('Y'), Item.feather, Character.valueOf('X'), Item.flint, Character.valueOf('#'), Item.stick}); + } +} diff --git a/src/net/minecraft/src/Rect2i.java b/src/net/minecraft/src/Rect2i.java new file mode 100644 index 0000000..bef2ffd --- /dev/null +++ b/src/net/minecraft/src/Rect2i.java @@ -0,0 +1,47 @@ +package net.minecraft.src; + +public class Rect2i { + private int rectX; + private int rectY; + private int rectWidth; + private int rectHeight; + + public Rect2i(int var1, int var2, int var3, int var4) { + this.rectX = var1; + this.rectY = var2; + this.rectWidth = var3; + this.rectHeight = var4; + } + + public Rect2i intersection(Rect2i var1) { + int var2 = this.rectX; + int var3 = this.rectY; + int var4 = this.rectX + this.rectWidth; + int var5 = this.rectY + this.rectHeight; + int var6 = var1.getRectX(); + int var7 = var1.getRectY(); + int var8 = var6 + var1.getRectWidth(); + int var9 = var7 + var1.getRectHeight(); + this.rectX = Math.max(var2, var6); + this.rectY = Math.max(var3, var7); + this.rectWidth = Math.max(0, Math.min(var4, var8) - this.rectX); + this.rectHeight = Math.max(0, Math.min(var5, var9) - this.rectY); + return this; + } + + public int getRectX() { + return this.rectX; + } + + public int getRectY() { + return this.rectY; + } + + public int getRectWidth() { + return this.rectWidth; + } + + public int getRectHeight() { + return this.rectHeight; + } +} diff --git a/src/net/minecraft/src/RedstoneUpdateInfo.java b/src/net/minecraft/src/RedstoneUpdateInfo.java new file mode 100644 index 0000000..b987ecb --- /dev/null +++ b/src/net/minecraft/src/RedstoneUpdateInfo.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +class RedstoneUpdateInfo { + int x; + int y; + int z; + long updateTime; + + public RedstoneUpdateInfo(int var1, int var2, int var3, long var4) { + this.x = var1; + this.y = var2; + this.z = var3; + this.updateTime = var4; + } +} diff --git a/src/net/minecraft/src/RegionFile.java b/src/net/minecraft/src/RegionFile.java new file mode 100644 index 0000000..9c373a8 --- /dev/null +++ b/src/net/minecraft/src/RegionFile.java @@ -0,0 +1,242 @@ +package net.minecraft.src; + +import java.io.BufferedInputStream; +import java.io.ByteArrayInputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.io.RandomAccessFile; +import java.util.ArrayList; +import java.util.zip.DeflaterOutputStream; +import java.util.zip.GZIPInputStream; +import java.util.zip.InflaterInputStream; + +public class RegionFile { + private static final byte[] emptySector = new byte[4096]; + private final File fileName; + private RandomAccessFile dataFile; + private final int[] offsets = new int[1024]; + private final int[] chunkTimestamps = new int[1024]; + private ArrayList sectorFree; + private int sizeDelta; + private long lastModified = 0L; + + public RegionFile(File var1) { + this.fileName = var1; + this.sizeDelta = 0; + + try { + if(var1.exists()) { + this.lastModified = var1.lastModified(); + } + + this.dataFile = new RandomAccessFile(var1, "rw"); + int var2; + if(this.dataFile.length() < 4096L) { + for(var2 = 0; var2 < 1024; ++var2) { + this.dataFile.writeInt(0); + } + + for(var2 = 0; var2 < 1024; ++var2) { + this.dataFile.writeInt(0); + } + + this.sizeDelta += 8192; + } + + if((this.dataFile.length() & 4095L) != 0L) { + for(var2 = 0; (long)var2 < (this.dataFile.length() & 4095L); ++var2) { + this.dataFile.write(0); + } + } + + var2 = (int)this.dataFile.length() / 4096; + this.sectorFree = new ArrayList(var2); + + int var3; + for(var3 = 0; var3 < var2; ++var3) { + this.sectorFree.add(Boolean.valueOf(true)); + } + + this.sectorFree.set(0, Boolean.valueOf(false)); + this.sectorFree.set(1, Boolean.valueOf(false)); + this.dataFile.seek(0L); + + int var4; + for(var3 = 0; var3 < 1024; ++var3) { + var4 = this.dataFile.readInt(); + this.offsets[var3] = var4; + if(var4 != 0 && (var4 >> 8) + (var4 & 255) <= this.sectorFree.size()) { + for(int var5 = 0; var5 < (var4 & 255); ++var5) { + this.sectorFree.set((var4 >> 8) + var5, Boolean.valueOf(false)); + } + } + } + + for(var3 = 0; var3 < 1024; ++var3) { + var4 = this.dataFile.readInt(); + this.chunkTimestamps[var3] = var4; + } + } catch (IOException var6) { + var6.printStackTrace(); + } + + } + + public synchronized DataInputStream getChunkDataInputStream(int var1, int var2) { + if(this.outOfBounds(var1, var2)) { + return null; + } else { + try { + int var3 = this.getOffset(var1, var2); + if(var3 == 0) { + return null; + } else { + int var4 = var3 >> 8; + int var5 = var3 & 255; + if(var4 + var5 > this.sectorFree.size()) { + return null; + } else { + this.dataFile.seek((long)(var4 * 4096)); + int var6 = this.dataFile.readInt(); + if(var6 > 4096 * var5) { + return null; + } else if(var6 <= 0) { + return null; + } else { + byte var7 = this.dataFile.readByte(); + byte[] var8; + if(var7 == 1) { + var8 = new byte[var6 - 1]; + this.dataFile.read(var8); + return new DataInputStream(new BufferedInputStream(new GZIPInputStream(new ByteArrayInputStream(var8)))); + } else if(var7 == 2) { + var8 = new byte[var6 - 1]; + this.dataFile.read(var8); + return new DataInputStream(new BufferedInputStream(new InflaterInputStream(new ByteArrayInputStream(var8)))); + } else { + return null; + } + } + } + } + } catch (IOException var9) { + return null; + } + } + } + + public DataOutputStream getChunkDataOutputStream(int var1, int var2) { + return this.outOfBounds(var1, var2) ? null : new DataOutputStream(new DeflaterOutputStream(new RegionFileChunkBuffer(this, var1, var2))); + } + + protected synchronized void write(int var1, int var2, byte[] var3, int var4) { + try { + int var5 = this.getOffset(var1, var2); + int var6 = var5 >> 8; + int var7 = var5 & 255; + int var8 = (var4 + 5) / 4096 + 1; + if(var8 >= 256) { + return; + } + + if(var6 != 0 && var7 == var8) { + this.write(var6, var3, var4); + } else { + int var9; + for(var9 = 0; var9 < var7; ++var9) { + this.sectorFree.set(var6 + var9, Boolean.valueOf(true)); + } + + var9 = this.sectorFree.indexOf(Boolean.valueOf(true)); + int var10 = 0; + int var11; + if(var9 != -1) { + for(var11 = var9; var11 < this.sectorFree.size(); ++var11) { + if(var10 != 0) { + if(((Boolean)this.sectorFree.get(var11)).booleanValue()) { + ++var10; + } else { + var10 = 0; + } + } else if(((Boolean)this.sectorFree.get(var11)).booleanValue()) { + var9 = var11; + var10 = 1; + } + + if(var10 >= var8) { + break; + } + } + } + + if(var10 >= var8) { + var6 = var9; + this.setOffset(var1, var2, var9 << 8 | var8); + + for(var11 = 0; var11 < var8; ++var11) { + this.sectorFree.set(var6 + var11, Boolean.valueOf(false)); + } + + this.write(var6, var3, var4); + } else { + this.dataFile.seek(this.dataFile.length()); + var6 = this.sectorFree.size(); + + for(var11 = 0; var11 < var8; ++var11) { + this.dataFile.write(emptySector); + this.sectorFree.add(Boolean.valueOf(false)); + } + + this.sizeDelta += 4096 * var8; + this.write(var6, var3, var4); + this.setOffset(var1, var2, var6 << 8 | var8); + } + } + + this.setChunkTimestamp(var1, var2, (int)(System.currentTimeMillis() / 1000L)); + } catch (IOException var12) { + var12.printStackTrace(); + } + + } + + private void write(int var1, byte[] var2, int var3) throws IOException { + this.dataFile.seek((long)(var1 * 4096)); + this.dataFile.writeInt(var3 + 1); + this.dataFile.writeByte(2); + this.dataFile.write(var2, 0, var3); + } + + private boolean outOfBounds(int var1, int var2) { + return var1 < 0 || var1 >= 32 || var2 < 0 || var2 >= 32; + } + + private int getOffset(int var1, int var2) { + return this.offsets[var1 + var2 * 32]; + } + + public boolean isChunkSaved(int var1, int var2) { + return this.getOffset(var1, var2) != 0; + } + + private void setOffset(int var1, int var2, int var3) throws IOException { + this.offsets[var1 + var2 * 32] = var3; + this.dataFile.seek((long)((var1 + var2 * 32) * 4)); + this.dataFile.writeInt(var3); + } + + private void setChunkTimestamp(int var1, int var2, int var3) throws IOException { + this.chunkTimestamps[var1 + var2 * 32] = var3; + this.dataFile.seek((long)(4096 + (var1 + var2 * 32) * 4)); + this.dataFile.writeInt(var3); + } + + public void close() throws IOException { + if(this.dataFile != null) { + this.dataFile.close(); + } + + } +} diff --git a/src/net/minecraft/src/RegionFileCache.java b/src/net/minecraft/src/RegionFileCache.java new file mode 100644 index 0000000..50068a2 --- /dev/null +++ b/src/net/minecraft/src/RegionFileCache.java @@ -0,0 +1,62 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +public class RegionFileCache { + private static final Map regionsByFilename = new HashMap(); + + public static synchronized RegionFile createOrLoadRegionFile(File var0, int var1, int var2) { + File var3 = new File(var0, "region"); + File var4 = new File(var3, "r." + (var1 >> 5) + "." + (var2 >> 5) + ".mca"); + RegionFile var5 = (RegionFile)regionsByFilename.get(var4); + if(var5 != null) { + return var5; + } else { + if(!var3.exists()) { + var3.mkdirs(); + } + + if(regionsByFilename.size() >= 256) { + clearRegionFileReferences(); + } + + RegionFile var6 = new RegionFile(var4); + regionsByFilename.put(var4, var6); + return var6; + } + } + + public static synchronized void clearRegionFileReferences() { + Iterator var0 = regionsByFilename.values().iterator(); + + while(var0.hasNext()) { + RegionFile var1 = (RegionFile)var0.next(); + + try { + if(var1 != null) { + var1.close(); + } + } catch (IOException var3) { + var3.printStackTrace(); + } + } + + regionsByFilename.clear(); + } + + public static DataInputStream getChunkInputStream(File var0, int var1, int var2) { + RegionFile var3 = createOrLoadRegionFile(var0, var1, var2); + return var3.getChunkDataInputStream(var1 & 31, var2 & 31); + } + + public static DataOutputStream getChunkOutputStream(File var0, int var1, int var2) { + RegionFile var3 = createOrLoadRegionFile(var0, var1, var2); + return var3.getChunkDataOutputStream(var1 & 31, var2 & 31); + } +} diff --git a/src/net/minecraft/src/RegionFileChunkBuffer.java b/src/net/minecraft/src/RegionFileChunkBuffer.java new file mode 100644 index 0000000..73cdc00 --- /dev/null +++ b/src/net/minecraft/src/RegionFileChunkBuffer.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +class RegionFileChunkBuffer extends ByteArrayOutputStream { + private int chunkX; + private int chunkZ; + final RegionFile regionFile; + + public RegionFileChunkBuffer(RegionFile var1, int var2, int var3) { + super(8096); + this.regionFile = var1; + this.chunkX = var2; + this.chunkZ = var3; + } + + public void close() throws IOException { + this.regionFile.write(this.chunkX, this.chunkZ, this.buf, this.count); + } +} diff --git a/src/net/minecraft/src/RegistryDefaulted.java b/src/net/minecraft/src/RegistryDefaulted.java new file mode 100644 index 0000000..94c7e62 --- /dev/null +++ b/src/net/minecraft/src/RegistryDefaulted.java @@ -0,0 +1,14 @@ +package net.minecraft.src; + +public class RegistryDefaulted extends RegistrySimple { + private final Object defaultObject; + + public RegistryDefaulted(Object var1) { + this.defaultObject = var1; + } + + public Object func_82594_a(Object var1) { + Object var2 = super.func_82594_a(var1); + return var2 == null ? this.defaultObject : var2; + } +} diff --git a/src/net/minecraft/src/RegistrySimple.java b/src/net/minecraft/src/RegistrySimple.java new file mode 100644 index 0000000..f3df034 --- /dev/null +++ b/src/net/minecraft/src/RegistrySimple.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; + +public class RegistrySimple implements IRegistry { + protected final Map registryObjects = new HashMap(); + + public Object func_82594_a(Object var1) { + return this.registryObjects.get(var1); + } + + public void putObject(Object var1, Object var2) { + this.registryObjects.put(var1, var2); + } +} diff --git a/src/net/minecraft/src/Render.java b/src/net/minecraft/src/Render.java new file mode 100644 index 0000000..ff2c556 --- /dev/null +++ b/src/net/minecraft/src/Render.java @@ -0,0 +1,259 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public abstract class Render { + protected RenderManager renderManager; + private ModelBase modelBase = new ModelBiped(); + protected RenderBlocks renderBlocks = new RenderBlocks(); + protected float shadowSize = 0.0F; + protected float shadowOpaque = 1.0F; + + public abstract void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9); + + protected void loadTexture(String var1) { + this.renderManager.renderEngine.bindTexture(var1); + } + + protected boolean loadDownloadableImageTexture(String var1, String var2) { + RenderEngine var3 = this.renderManager.renderEngine; + int var4 = var3.getTextureForDownloadableImage(var1, var2); + if(var4 >= 0) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var4); + var3.resetBoundTexture(); + return true; + } else { + return false; + } + } + + private void renderEntityOnFire(Entity var1, double var2, double var4, double var6, float var8) { + GL11.glDisable(GL11.GL_LIGHTING); + Icon var9 = Block.fire.func_94438_c(0); + Icon var10 = Block.fire.func_94438_c(1); + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + float var11 = var1.width * 1.4F; + GL11.glScalef(var11, var11, var11); + this.loadTexture("/terrain.png"); + Tessellator var12 = Tessellator.instance; + float var13 = 0.5F; + float var14 = 0.0F; + float var15 = var1.height / var11; + float var16 = (float)(var1.posY - var1.boundingBox.minY); + GL11.glRotatef(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, 0.0F, -0.3F + (float)((int)var15) * 0.02F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + float var17 = 0.0F; + int var18 = 0; + var12.startDrawingQuads(); + + while(var15 > 0.0F) { + Icon var19; + if(var18 % 2 == 0) { + var19 = var9; + } else { + var19 = var10; + } + + float var20 = var19.getMinU(); + float var21 = var19.getMinV(); + float var22 = var19.getMaxU(); + float var23 = var19.getMaxV(); + if(var18 / 2 % 2 == 0) { + float var24 = var22; + var22 = var20; + var20 = var24; + } + + var12.addVertexWithUV((double)(var13 - var14), (double)(0.0F - var16), (double)var17, (double)var22, (double)var23); + var12.addVertexWithUV((double)(-var13 - var14), (double)(0.0F - var16), (double)var17, (double)var20, (double)var23); + var12.addVertexWithUV((double)(-var13 - var14), (double)(1.4F - var16), (double)var17, (double)var20, (double)var21); + var12.addVertexWithUV((double)(var13 - var14), (double)(1.4F - var16), (double)var17, (double)var22, (double)var21); + var15 -= 0.45F; + var16 -= 0.45F; + var13 *= 0.9F; + var17 += 0.03F; + ++var18; + } + + var12.draw(); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_LIGHTING); + } + + private void renderShadow(Entity var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + this.renderManager.renderEngine.bindTexture("%clamp%/misc/shadow.png"); + World var10 = this.getWorldFromRenderManager(); + GL11.glDepthMask(false); + float var11 = this.shadowSize; + if(var1 instanceof EntityLiving) { + EntityLiving var12 = (EntityLiving)var1; + var11 *= var12.getRenderSizeModifier(); + if(var12.isChild()) { + var11 *= 0.5F; + } + } + + double var35 = var1.lastTickPosX + (var1.posX - var1.lastTickPosX) * (double)var9; + double var14 = var1.lastTickPosY + (var1.posY - var1.lastTickPosY) * (double)var9 + (double)var1.getShadowSize(); + double var16 = var1.lastTickPosZ + (var1.posZ - var1.lastTickPosZ) * (double)var9; + int var18 = MathHelper.floor_double(var35 - (double)var11); + int var19 = MathHelper.floor_double(var35 + (double)var11); + int var20 = MathHelper.floor_double(var14 - (double)var11); + int var21 = MathHelper.floor_double(var14); + int var22 = MathHelper.floor_double(var16 - (double)var11); + int var23 = MathHelper.floor_double(var16 + (double)var11); + double var24 = var2 - var35; + double var26 = var4 - var14; + double var28 = var6 - var16; + Tessellator var30 = Tessellator.instance; + var30.startDrawingQuads(); + + for(int var31 = var18; var31 <= var19; ++var31) { + for(int var32 = var20; var32 <= var21; ++var32) { + for(int var33 = var22; var33 <= var23; ++var33) { + int var34 = var10.getBlockId(var31, var32 - 1, var33); + if(var34 > 0 && var10.getBlockLightValue(var31, var32, var33) > 3) { + this.renderShadowOnBlock(Block.blocksList[var34], var2, var4 + (double)var1.getShadowSize(), var6, var31, var32, var33, var8, var11, var24, var26 + (double)var1.getShadowSize(), var28); + } + } + } + } + + var30.draw(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthMask(true); + } + + private World getWorldFromRenderManager() { + return this.renderManager.worldObj; + } + + private void renderShadowOnBlock(Block var1, double var2, double var4, double var6, int var8, int var9, int var10, float var11, float var12, double var13, double var15, double var17) { + Tessellator var19 = Tessellator.instance; + if(var1.renderAsNormalBlock()) { + double var20 = ((double)var11 - (var4 - ((double)var9 + var15)) / 2.0D) * 0.5D * (double)this.getWorldFromRenderManager().getLightBrightness(var8, var9, var10); + if(var20 >= 0.0D) { + if(var20 > 1.0D) { + var20 = 1.0D; + } + + var19.setColorRGBA_F(1.0F, 1.0F, 1.0F, (float)var20); + double var22 = (double)var8 + var1.getBlockBoundsMinX() + var13; + double var24 = (double)var8 + var1.getBlockBoundsMaxX() + var13; + double var26 = (double)var9 + var1.getBlockBoundsMinY() + var15 + 1.0D / 64.0D; + double var28 = (double)var10 + var1.getBlockBoundsMinZ() + var17; + double var30 = (double)var10 + var1.getBlockBoundsMaxZ() + var17; + float var32 = (float)((var2 - var22) / 2.0D / (double)var12 + 0.5D); + float var33 = (float)((var2 - var24) / 2.0D / (double)var12 + 0.5D); + float var34 = (float)((var6 - var28) / 2.0D / (double)var12 + 0.5D); + float var35 = (float)((var6 - var30) / 2.0D / (double)var12 + 0.5D); + var19.addVertexWithUV(var22, var26, var28, (double)var32, (double)var34); + var19.addVertexWithUV(var22, var26, var30, (double)var32, (double)var35); + var19.addVertexWithUV(var24, var26, var30, (double)var33, (double)var35); + var19.addVertexWithUV(var24, var26, var28, (double)var33, (double)var34); + } + } + } + + public static void renderOffsetAABB(AxisAlignedBB var0, double var1, double var3, double var5) { + GL11.glDisable(GL11.GL_TEXTURE_2D); + Tessellator var7 = Tessellator.instance; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var7.startDrawingQuads(); + var7.setTranslation(var1, var3, var5); + var7.setNormal(0.0F, 0.0F, -1.0F); + var7.addVertex(var0.minX, var0.maxY, var0.minZ); + var7.addVertex(var0.maxX, var0.maxY, var0.minZ); + var7.addVertex(var0.maxX, var0.minY, var0.minZ); + var7.addVertex(var0.minX, var0.minY, var0.minZ); + var7.setNormal(0.0F, 0.0F, 1.0F); + var7.addVertex(var0.minX, var0.minY, var0.maxZ); + var7.addVertex(var0.maxX, var0.minY, var0.maxZ); + var7.addVertex(var0.maxX, var0.maxY, var0.maxZ); + var7.addVertex(var0.minX, var0.maxY, var0.maxZ); + var7.setNormal(0.0F, -1.0F, 0.0F); + var7.addVertex(var0.minX, var0.minY, var0.minZ); + var7.addVertex(var0.maxX, var0.minY, var0.minZ); + var7.addVertex(var0.maxX, var0.minY, var0.maxZ); + var7.addVertex(var0.minX, var0.minY, var0.maxZ); + var7.setNormal(0.0F, 1.0F, 0.0F); + var7.addVertex(var0.minX, var0.maxY, var0.maxZ); + var7.addVertex(var0.maxX, var0.maxY, var0.maxZ); + var7.addVertex(var0.maxX, var0.maxY, var0.minZ); + var7.addVertex(var0.minX, var0.maxY, var0.minZ); + var7.setNormal(-1.0F, 0.0F, 0.0F); + var7.addVertex(var0.minX, var0.minY, var0.maxZ); + var7.addVertex(var0.minX, var0.maxY, var0.maxZ); + var7.addVertex(var0.minX, var0.maxY, var0.minZ); + var7.addVertex(var0.minX, var0.minY, var0.minZ); + var7.setNormal(1.0F, 0.0F, 0.0F); + var7.addVertex(var0.maxX, var0.minY, var0.minZ); + var7.addVertex(var0.maxX, var0.maxY, var0.minZ); + var7.addVertex(var0.maxX, var0.maxY, var0.maxZ); + var7.addVertex(var0.maxX, var0.minY, var0.maxZ); + var7.setTranslation(0.0D, 0.0D, 0.0D); + var7.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + public static void renderAABB(AxisAlignedBB var0) { + Tessellator var1 = Tessellator.instance; + var1.startDrawingQuads(); + var1.addVertex(var0.minX, var0.maxY, var0.minZ); + var1.addVertex(var0.maxX, var0.maxY, var0.minZ); + var1.addVertex(var0.maxX, var0.minY, var0.minZ); + var1.addVertex(var0.minX, var0.minY, var0.minZ); + var1.addVertex(var0.minX, var0.minY, var0.maxZ); + var1.addVertex(var0.maxX, var0.minY, var0.maxZ); + var1.addVertex(var0.maxX, var0.maxY, var0.maxZ); + var1.addVertex(var0.minX, var0.maxY, var0.maxZ); + var1.addVertex(var0.minX, var0.minY, var0.minZ); + var1.addVertex(var0.maxX, var0.minY, var0.minZ); + var1.addVertex(var0.maxX, var0.minY, var0.maxZ); + var1.addVertex(var0.minX, var0.minY, var0.maxZ); + var1.addVertex(var0.minX, var0.maxY, var0.maxZ); + var1.addVertex(var0.maxX, var0.maxY, var0.maxZ); + var1.addVertex(var0.maxX, var0.maxY, var0.minZ); + var1.addVertex(var0.minX, var0.maxY, var0.minZ); + var1.addVertex(var0.minX, var0.minY, var0.maxZ); + var1.addVertex(var0.minX, var0.maxY, var0.maxZ); + var1.addVertex(var0.minX, var0.maxY, var0.minZ); + var1.addVertex(var0.minX, var0.minY, var0.minZ); + var1.addVertex(var0.maxX, var0.minY, var0.minZ); + var1.addVertex(var0.maxX, var0.maxY, var0.minZ); + var1.addVertex(var0.maxX, var0.maxY, var0.maxZ); + var1.addVertex(var0.maxX, var0.minY, var0.maxZ); + var1.draw(); + } + + public void setRenderManager(RenderManager var1) { + this.renderManager = var1; + } + + public void doRenderShadowAndFire(Entity var1, double var2, double var4, double var6, float var8, float var9) { + if(this.renderManager.options.fancyGraphics && this.shadowSize > 0.0F && !var1.isInvisible()) { + double var10 = this.renderManager.getDistanceToCamera(var1.posX, var1.posY, var1.posZ); + float var12 = (float)((1.0D - var10 / 256.0D) * (double)this.shadowOpaque); + if(var12 > 0.0F) { + this.renderShadow(var1, var2, var4, var6, var12, var9); + } + } + + if(var1.canRenderOnFire()) { + this.renderEntityOnFire(var1, var2, var4, var6, var9); + } + + } + + public FontRenderer getFontRendererFromRenderManager() { + return this.renderManager.getFontRenderer(); + } + + public void updateIcons(IconRegister var1) { + } +} diff --git a/src/net/minecraft/src/RenderArrow.java b/src/net/minecraft/src/RenderArrow.java new file mode 100644 index 0000000..6e6f9fc --- /dev/null +++ b/src/net/minecraft/src/RenderArrow.java @@ -0,0 +1,67 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderArrow extends Render { + public void renderArrow(EntityArrow var1, double var2, double var4, double var6, float var8, float var9) { + this.loadTexture("/item/arrows.png"); + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + GL11.glRotatef(var1.prevRotationYaw + (var1.rotationYaw - var1.prevRotationYaw) * var9 - 90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(var1.prevRotationPitch + (var1.rotationPitch - var1.prevRotationPitch) * var9, 0.0F, 0.0F, 1.0F); + Tessellator var10 = Tessellator.instance; + byte var11 = 0; + float var12 = 0.0F; + float var13 = 0.5F; + float var14 = (float)(0 + var11 * 10) / 32.0F; + float var15 = (float)(5 + var11 * 10) / 32.0F; + float var16 = 0.0F; + float var17 = 0.15625F; + float var18 = (float)(5 + var11 * 10) / 32.0F; + float var19 = (float)(10 + var11 * 10) / 32.0F; + float var20 = 0.05625F; + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + float var21 = (float)var1.arrowShake - var9; + if(var21 > 0.0F) { + float var22 = -MathHelper.sin(var21 * 3.0F) * var21; + GL11.glRotatef(var22, 0.0F, 0.0F, 1.0F); + } + + GL11.glRotatef(45.0F, 1.0F, 0.0F, 0.0F); + GL11.glScalef(var20, var20, var20); + GL11.glTranslatef(-4.0F, 0.0F, 0.0F); + GL11.glNormal3f(var20, 0.0F, 0.0F); + var10.startDrawingQuads(); + var10.addVertexWithUV(-7.0D, -2.0D, -2.0D, (double)var16, (double)var18); + var10.addVertexWithUV(-7.0D, -2.0D, 2.0D, (double)var17, (double)var18); + var10.addVertexWithUV(-7.0D, 2.0D, 2.0D, (double)var17, (double)var19); + var10.addVertexWithUV(-7.0D, 2.0D, -2.0D, (double)var16, (double)var19); + var10.draw(); + GL11.glNormal3f(-var20, 0.0F, 0.0F); + var10.startDrawingQuads(); + var10.addVertexWithUV(-7.0D, 2.0D, -2.0D, (double)var16, (double)var18); + var10.addVertexWithUV(-7.0D, 2.0D, 2.0D, (double)var17, (double)var18); + var10.addVertexWithUV(-7.0D, -2.0D, 2.0D, (double)var17, (double)var19); + var10.addVertexWithUV(-7.0D, -2.0D, -2.0D, (double)var16, (double)var19); + var10.draw(); + + for(int var23 = 0; var23 < 4; ++var23) { + GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F); + GL11.glNormal3f(0.0F, 0.0F, var20); + var10.startDrawingQuads(); + var10.addVertexWithUV(-8.0D, -2.0D, 0.0D, (double)var12, (double)var14); + var10.addVertexWithUV(8.0D, -2.0D, 0.0D, (double)var13, (double)var14); + var10.addVertexWithUV(8.0D, 2.0D, 0.0D, (double)var13, (double)var15); + var10.addVertexWithUV(-8.0D, 2.0D, 0.0D, (double)var12, (double)var15); + var10.draw(); + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderArrow((EntityArrow)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderBat.java b/src/net/minecraft/src/RenderBat.java new file mode 100644 index 0000000..16b454e --- /dev/null +++ b/src/net/minecraft/src/RenderBat.java @@ -0,0 +1,59 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderBat extends RenderLiving { + private int renderedBatSize = ((ModelBat)this.mainModel).getBatSize(); + + public RenderBat() { + super(new ModelBat(), 0.25F); + } + + public void func_82443_a(EntityBat var1, double var2, double var4, double var6, float var8, float var9) { + int var10 = ((ModelBat)this.mainModel).getBatSize(); + if(var10 != this.renderedBatSize) { + this.renderedBatSize = var10; + this.mainModel = new ModelBat(); + } + + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + protected void func_82442_a(EntityBat var1, float var2) { + GL11.glScalef(0.35F, 0.35F, 0.35F); + } + + protected void func_82445_a(EntityBat var1, double var2, double var4, double var6) { + super.renderLivingAt(var1, var2, var4, var6); + } + + protected void func_82444_a(EntityBat var1, float var2, float var3, float var4) { + if(!var1.getIsBatHanging()) { + GL11.glTranslatef(0.0F, MathHelper.cos(var2 * 0.3F) * 0.1F, 0.0F); + } else { + GL11.glTranslatef(0.0F, -0.1F, 0.0F); + } + + super.rotateCorpse(var1, var2, var3, var4); + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + this.func_82442_a((EntityBat)var1, var2); + } + + protected void rotateCorpse(EntityLiving var1, float var2, float var3, float var4) { + this.func_82444_a((EntityBat)var1, var2, var3, var4); + } + + protected void renderLivingAt(EntityLiving var1, double var2, double var4, double var6) { + this.func_82445_a((EntityBat)var1, var2, var4, var6); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.func_82443_a((EntityBat)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.func_82443_a((EntityBat)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderBiped.java b/src/net/minecraft/src/RenderBiped.java new file mode 100644 index 0000000..510e7f4 --- /dev/null +++ b/src/net/minecraft/src/RenderBiped.java @@ -0,0 +1,212 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderBiped extends RenderLiving { + protected ModelBiped modelBipedMain; + protected float field_77070_b; + protected ModelBiped field_82423_g; + protected ModelBiped field_82425_h; + private static final String[] bipedArmorFilenamePrefix = new String[]{"cloth", "chain", "iron", "diamond", "gold"}; + + public RenderBiped(ModelBiped var1, float var2) { + this(var1, var2, 1.0F); + } + + public RenderBiped(ModelBiped var1, float var2, float var3) { + super(var1, var2); + this.modelBipedMain = var1; + this.field_77070_b = var3; + this.func_82421_b(); + } + + protected void func_82421_b() { + this.field_82423_g = new ModelBiped(1.0F); + this.field_82425_h = new ModelBiped(0.5F); + } + + protected int shouldRenderPass(EntityLiving var1, int var2, float var3) { + ItemStack var4 = var1.getCurrentArmor(3 - var2); + if(var4 != null) { + Item var5 = var4.getItem(); + if(var5 instanceof ItemArmor) { + ItemArmor var6 = (ItemArmor)var5; + this.loadTexture("/armor/" + bipedArmorFilenamePrefix[var6.renderIndex] + "_" + (var2 == 2 ? 2 : 1) + ".png"); + ModelBiped var7 = var2 == 2 ? this.field_82425_h : this.field_82423_g; + var7.bipedHead.showModel = var2 == 0; + var7.bipedHeadwear.showModel = var2 == 0; + var7.bipedBody.showModel = var2 == 1 || var2 == 2; + var7.bipedRightArm.showModel = var2 == 1; + var7.bipedLeftArm.showModel = var2 == 1; + var7.bipedRightLeg.showModel = var2 == 2 || var2 == 3; + var7.bipedLeftLeg.showModel = var2 == 2 || var2 == 3; + this.setRenderPassModel(var7); + if(var7 != null) { + var7.onGround = this.mainModel.onGround; + } + + if(var7 != null) { + var7.isRiding = this.mainModel.isRiding; + } + + if(var7 != null) { + var7.isChild = this.mainModel.isChild; + } + + float var8 = 1.0F; + if(var6.getArmorMaterial() == EnumArmorMaterial.CLOTH) { + int var9 = var6.getColor(var4); + float var10 = (float)(var9 >> 16 & 255) / 255.0F; + float var11 = (float)(var9 >> 8 & 255) / 255.0F; + float var12 = (float)(var9 & 255) / 255.0F; + GL11.glColor3f(var8 * var10, var8 * var11, var8 * var12); + if(var4.isItemEnchanted()) { + return 31; + } + + return 16; + } + + GL11.glColor3f(var8, var8, var8); + if(var4.isItemEnchanted()) { + return 15; + } + + return 1; + } + } + + return -1; + } + + protected void func_82408_c(EntityLiving var1, int var2, float var3) { + ItemStack var4 = var1.getCurrentArmor(3 - var2); + if(var4 != null) { + Item var5 = var4.getItem(); + if(var5 instanceof ItemArmor) { + ItemArmor var6 = (ItemArmor)var5; + this.loadTexture("/armor/" + bipedArmorFilenamePrefix[var6.renderIndex] + "_" + (var2 == 2 ? 2 : 1) + "_b.png"); + float var7 = 1.0F; + GL11.glColor3f(var7, var7, var7); + } + } + + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + float var10 = 1.0F; + GL11.glColor3f(var10, var10, var10); + ItemStack var11 = var1.getHeldItem(); + this.func_82420_a(var1, var11); + double var12 = var4 - (double)var1.yOffset; + if(var1.isSneaking() && !(var1 instanceof EntityPlayerSP)) { + var12 -= 0.125D; + } + + super.doRenderLiving(var1, var2, var12, var6, var8, var9); + this.field_82423_g.aimedBow = this.field_82425_h.aimedBow = this.modelBipedMain.aimedBow = false; + this.field_82423_g.isSneak = this.field_82425_h.isSneak = this.modelBipedMain.isSneak = false; + this.field_82423_g.heldItemRight = this.field_82425_h.heldItemRight = this.modelBipedMain.heldItemRight = 0; + } + + protected void func_82420_a(EntityLiving var1, ItemStack var2) { + this.field_82423_g.heldItemRight = this.field_82425_h.heldItemRight = this.modelBipedMain.heldItemRight = var2 != null ? 1 : 0; + this.field_82423_g.isSneak = this.field_82425_h.isSneak = this.modelBipedMain.isSneak = var1.isSneaking(); + } + + protected void renderEquippedItems(EntityLiving var1, float var2) { + float var3 = 1.0F; + GL11.glColor3f(var3, var3, var3); + super.renderEquippedItems(var1, var2); + ItemStack var4 = var1.getHeldItem(); + ItemStack var5 = var1.getCurrentArmor(3); + float var6; + if(var5 != null) { + GL11.glPushMatrix(); + this.modelBipedMain.bipedHead.postRender(1.0F / 16.0F); + if(var5.getItem().itemID < 256) { + if(RenderBlocks.renderItemIn3d(Block.blocksList[var5.itemID].getRenderType())) { + var6 = 10.0F / 16.0F; + GL11.glTranslatef(0.0F, -0.25F, 0.0F); + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glScalef(var6, -var6, -var6); + } + + this.renderManager.itemRenderer.renderItem(var1, var5, 0); + } else if(var5.getItem().itemID == Item.skull.itemID) { + var6 = 1.0625F; + GL11.glScalef(var6, -var6, -var6); + String var7 = ""; + if(var5.hasTagCompound() && var5.getTagCompound().hasKey("SkullOwner")) { + var7 = var5.getTagCompound().getString("SkullOwner"); + } + + TileEntitySkullRenderer.skullRenderer.func_82393_a(-0.5F, 0.0F, -0.5F, 1, 180.0F, var5.getItemDamage(), var7); + } + + GL11.glPopMatrix(); + } + + if(var4 != null) { + GL11.glPushMatrix(); + if(this.mainModel.isChild) { + var6 = 0.5F; + GL11.glTranslatef(0.0F, 10.0F / 16.0F, 0.0F); + GL11.glRotatef(-20.0F, -1.0F, 0.0F, 0.0F); + GL11.glScalef(var6, var6, var6); + } + + this.modelBipedMain.bipedRightArm.postRender(1.0F / 16.0F); + GL11.glTranslatef(-(1.0F / 16.0F), 7.0F / 16.0F, 1.0F / 16.0F); + if(var4.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var4.itemID].getRenderType())) { + var6 = 0.5F; + GL11.glTranslatef(0.0F, 3.0F / 16.0F, -(5.0F / 16.0F)); + var6 *= 12.0F / 16.0F; + GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + GL11.glScalef(-var6, -var6, var6); + } else if(var4.itemID == Item.bow.itemID) { + var6 = 10.0F / 16.0F; + GL11.glTranslatef(0.0F, 2.0F / 16.0F, 5.0F / 16.0F); + GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F); + GL11.glScalef(var6, -var6, var6); + GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + } else if(Item.itemsList[var4.itemID].isFull3D()) { + var6 = 10.0F / 16.0F; + if(Item.itemsList[var4.itemID].shouldRotateAroundWhenRendering()) { + GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, -(2.0F / 16.0F), 0.0F); + } + + this.func_82422_c(); + GL11.glScalef(var6, -var6, var6); + GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + } else { + var6 = 6.0F / 16.0F; + GL11.glTranslatef(0.25F, 3.0F / 16.0F, -(3.0F / 16.0F)); + GL11.glScalef(var6, var6, var6); + GL11.glRotatef(60.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(20.0F, 0.0F, 0.0F, 1.0F); + } + + this.renderManager.itemRenderer.renderItem(var1, var4, 0); + if(var4.getItem().requiresMultipleRenderPasses()) { + this.renderManager.itemRenderer.renderItem(var1, var4, 1); + } + + GL11.glPopMatrix(); + } + + } + + protected void func_82422_c() { + GL11.glTranslatef(0.0F, 3.0F / 16.0F, 0.0F); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.doRenderLiving((EntityLiving)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderBlaze.java b/src/net/minecraft/src/RenderBlaze.java new file mode 100644 index 0000000..6cd32ad --- /dev/null +++ b/src/net/minecraft/src/RenderBlaze.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public class RenderBlaze extends RenderLiving { + private int field_77068_a = ((ModelBlaze)this.mainModel).func_78104_a(); + + public RenderBlaze() { + super(new ModelBlaze(), 0.5F); + } + + public void renderBlaze(EntityBlaze var1, double var2, double var4, double var6, float var8, float var9) { + int var10 = ((ModelBlaze)this.mainModel).func_78104_a(); + if(var10 != this.field_77068_a) { + this.field_77068_a = var10; + this.mainModel = new ModelBlaze(); + } + + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.renderBlaze((EntityBlaze)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderBlaze((EntityBlaze)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderBlocks.java b/src/net/minecraft/src/RenderBlocks.java new file mode 100644 index 0000000..6698c44 --- /dev/null +++ b/src/net/minecraft/src/RenderBlocks.java @@ -0,0 +1,6550 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderBlocks { + public IBlockAccess blockAccess; + private Icon overrideBlockTexture = null; + private boolean flipTexture = false; + private boolean renderAllFaces = false; + public static boolean fancyGrass = true; + public boolean useInventoryTint = true; + private double renderMinX; + private double renderMaxX; + private double renderMinY; + private double renderMaxY; + private double renderMinZ; + private double renderMaxZ; + private boolean lockBlockBounds = false; + private boolean partialRenderBounds = false; + private final Minecraft minecraftRB; + private int uvRotateEast = 0; + private int uvRotateWest = 0; + private int uvRotateSouth = 0; + private int uvRotateNorth = 0; + private int uvRotateTop = 0; + private int uvRotateBottom = 0; + private boolean enableAO; + private float aoLightValueScratchXYZNNN; + private float aoLightValueScratchXYNN; + private float aoLightValueScratchXYZNNP; + private float aoLightValueScratchYZNN; + private float aoLightValueScratchYZNP; + private float aoLightValueScratchXYZPNN; + private float aoLightValueScratchXYPN; + private float aoLightValueScratchXYZPNP; + private float aoLightValueScratchXYZNPN; + private float aoLightValueScratchXYNP; + private float aoLightValueScratchXYZNPP; + private float aoLightValueScratchYZPN; + private float aoLightValueScratchXYZPPN; + private float aoLightValueScratchXYPP; + private float aoLightValueScratchYZPP; + private float aoLightValueScratchXYZPPP; + private float aoLightValueScratchXZNN; + private float aoLightValueScratchXZPN; + private float aoLightValueScratchXZNP; + private float aoLightValueScratchXZPP; + private int aoBrightnessXYZNNN; + private int aoBrightnessXYNN; + private int aoBrightnessXYZNNP; + private int aoBrightnessYZNN; + private int aoBrightnessYZNP; + private int aoBrightnessXYZPNN; + private int aoBrightnessXYPN; + private int aoBrightnessXYZPNP; + private int aoBrightnessXYZNPN; + private int aoBrightnessXYNP; + private int aoBrightnessXYZNPP; + private int aoBrightnessYZPN; + private int aoBrightnessXYZPPN; + private int aoBrightnessXYPP; + private int aoBrightnessYZPP; + private int aoBrightnessXYZPPP; + private int aoBrightnessXZNN; + private int aoBrightnessXZPN; + private int aoBrightnessXZNP; + private int aoBrightnessXZPP; + private int brightnessTopLeft; + private int brightnessBottomLeft; + private int brightnessBottomRight; + private int brightnessTopRight; + private float colorRedTopLeft; + private float colorRedBottomLeft; + private float colorRedBottomRight; + private float colorRedTopRight; + private float colorGreenTopLeft; + private float colorGreenBottomLeft; + private float colorGreenBottomRight; + private float colorGreenTopRight; + private float colorBlueTopLeft; + private float colorBlueBottomLeft; + private float colorBlueBottomRight; + private float colorBlueTopRight; + + public RenderBlocks(IBlockAccess var1) { + this.blockAccess = var1; + this.minecraftRB = Minecraft.getMinecraft(); + } + + public RenderBlocks() { + this.minecraftRB = Minecraft.getMinecraft(); + } + + public void setOverrideBlockTexture(Icon var1) { + this.overrideBlockTexture = var1; + } + + public void clearOverrideBlockTexture() { + this.overrideBlockTexture = null; + } + + public boolean hasOverrideBlockTexture() { + return this.overrideBlockTexture != null; + } + + public void setRenderBounds(double var1, double var3, double var5, double var7, double var9, double var11) { + if(!this.lockBlockBounds) { + this.renderMinX = var1; + this.renderMaxX = var7; + this.renderMinY = var3; + this.renderMaxY = var9; + this.renderMinZ = var5; + this.renderMaxZ = var11; + this.partialRenderBounds = this.minecraftRB.gameSettings.ambientOcclusion >= 2 && (this.renderMinX > 0.0D || this.renderMaxX < 1.0D || this.renderMinY > 0.0D || this.renderMaxY < 1.0D || this.renderMinZ > 0.0D || this.renderMaxZ < 1.0D); + } + + } + + public void setRenderBoundsFromBlock(Block var1) { + if(!this.lockBlockBounds) { + this.renderMinX = var1.getBlockBoundsMinX(); + this.renderMaxX = var1.getBlockBoundsMaxX(); + this.renderMinY = var1.getBlockBoundsMinY(); + this.renderMaxY = var1.getBlockBoundsMaxY(); + this.renderMinZ = var1.getBlockBoundsMinZ(); + this.renderMaxZ = var1.getBlockBoundsMaxZ(); + this.partialRenderBounds = this.minecraftRB.gameSettings.ambientOcclusion >= 2 && (this.renderMinX > 0.0D || this.renderMaxX < 1.0D || this.renderMinY > 0.0D || this.renderMaxY < 1.0D || this.renderMinZ > 0.0D || this.renderMaxZ < 1.0D); + } + + } + + public void overrideBlockBounds(double var1, double var3, double var5, double var7, double var9, double var11) { + this.renderMinX = var1; + this.renderMaxX = var7; + this.renderMinY = var3; + this.renderMaxY = var9; + this.renderMinZ = var5; + this.renderMaxZ = var11; + this.lockBlockBounds = true; + this.partialRenderBounds = this.minecraftRB.gameSettings.ambientOcclusion >= 2 && (this.renderMinX > 0.0D || this.renderMaxX < 1.0D || this.renderMinY > 0.0D || this.renderMaxY < 1.0D || this.renderMinZ > 0.0D || this.renderMaxZ < 1.0D); + } + + public void unlockBlockBounds() { + this.lockBlockBounds = false; + } + + public void renderBlockUsingTexture(Block var1, int var2, int var3, int var4, Icon var5) { + this.setOverrideBlockTexture(var5); + this.renderBlockByRenderType(var1, var2, var3, var4); + this.clearOverrideBlockTexture(); + } + + public void renderBlockAllFaces(Block var1, int var2, int var3, int var4) { + this.renderAllFaces = true; + this.renderBlockByRenderType(var1, var2, var3, var4); + this.renderAllFaces = false; + } + + public boolean renderBlockByRenderType(Block var1, int var2, int var3, int var4) { + int var5 = var1.getRenderType(); + if(var5 == -1) { + return false; + } else { + var1.setBlockBoundsBasedOnState(this.blockAccess, var2, var3, var4); + this.setRenderBoundsFromBlock(var1); + return var5 == 0 ? this.renderStandardBlock(var1, var2, var3, var4) : (var5 == 4 ? this.renderBlockFluids(var1, var2, var3, var4) : (var5 == 31 ? this.renderBlockLog(var1, var2, var3, var4) : (var5 == 1 ? this.renderCrossedSquares(var1, var2, var3, var4) : (var5 == 2 ? this.renderBlockTorch(var1, var2, var3, var4) : (var5 == 20 ? this.renderBlockVine(var1, var2, var3, var4) : (var5 == 11 ? this.renderBlockFence((BlockFence)var1, var2, var3, var4) : (var5 == 39 ? this.renderBlockQuartz(var1, var2, var3, var4) : (var5 == 5 ? this.renderBlockRedstoneWire(var1, var2, var3, var4) : (var5 == 13 ? this.renderBlockCactus(var1, var2, var3, var4) : (var5 == 9 ? this.renderBlockMinecartTrack((BlockRailBase)var1, var2, var3, var4) : (var5 == 19 ? this.renderBlockStem(var1, var2, var3, var4) : (var5 == 23 ? this.renderBlockLilyPad(var1, var2, var3, var4) : (var5 == 6 ? this.renderBlockCrops(var1, var2, var3, var4) : (var5 == 3 ? this.renderBlockFire((BlockFire)var1, var2, var3, var4) : (var5 == 8 ? this.renderBlockLadder(var1, var2, var3, var4) : (var5 == 7 ? this.renderBlockDoor(var1, var2, var3, var4) : (var5 == 10 ? this.renderBlockStairs((BlockStairs)var1, var2, var3, var4) : (var5 == 27 ? this.renderBlockDragonEgg((BlockDragonEgg)var1, var2, var3, var4) : (var5 == 32 ? this.renderBlockWall((BlockWall)var1, var2, var3, var4) : (var5 == 12 ? this.renderBlockLever(var1, var2, var3, var4) : (var5 == 29 ? this.renderBlockTripWireSource(var1, var2, var3, var4) : (var5 == 30 ? this.renderBlockTripWire(var1, var2, var3, var4) : (var5 == 14 ? this.renderBlockBed(var1, var2, var3, var4) : (var5 == 15 ? this.renderBlockRepeater((BlockRedstoneRepeater)var1, var2, var3, var4) : (var5 == 36 ? this.renderBlockRedstoneLogic((BlockRedstoneLogic)var1, var2, var3, var4) : (var5 == 37 ? this.renderBlockComparator((BlockComparator)var1, var2, var3, var4) : (var5 == 16 ? this.renderPistonBase(var1, var2, var3, var4, false) : (var5 == 17 ? this.renderPistonExtension(var1, var2, var3, var4, true) : (var5 == 18 ? this.renderBlockPane((BlockPane)var1, var2, var3, var4) : (var5 == 21 ? this.renderBlockFenceGate((BlockFenceGate)var1, var2, var3, var4) : (var5 == 24 ? this.renderBlockCauldron((BlockCauldron)var1, var2, var3, var4) : (var5 == 33 ? this.renderBlockFlowerpot((BlockFlowerPot)var1, var2, var3, var4) : (var5 == 35 ? this.renderBlockAnvil((BlockAnvil)var1, var2, var3, var4) : (var5 == 25 ? this.renderBlockBrewingStand((BlockBrewingStand)var1, var2, var3, var4) : (var5 == 26 ? this.renderBlockEndPortalFrame((BlockEndPortalFrame)var1, var2, var3, var4) : (var5 == 28 ? this.renderBlockCocoa((BlockCocoa)var1, var2, var3, var4) : (var5 == 34 ? this.renderBlockBeacon((BlockBeacon)var1, var2, var3, var4) : (var5 == 38 ? this.renderBlockHopper((BlockHopper)var1, var2, var3, var4) : false)))))))))))))))))))))))))))))))))))))); + } + } + + private boolean renderBlockEndPortalFrame(BlockEndPortalFrame var1, int var2, int var3, int var4) { + int var5 = this.blockAccess.getBlockMetadata(var2, var3, var4); + int var6 = var5 & 3; + if(var6 == 0) { + this.uvRotateTop = 3; + } else if(var6 == 3) { + this.uvRotateTop = 1; + } else if(var6 == 1) { + this.uvRotateTop = 2; + } + + if(!BlockEndPortalFrame.isEnderEyeInserted(var5)) { + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.8125D, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + this.uvRotateTop = 0; + return true; + } else { + this.renderAllFaces = true; + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.8125D, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setOverrideBlockTexture(var1.func_94398_p()); + this.setRenderBounds(0.25D, 0.8125D, 0.25D, 0.75D, 1.0D, 0.75D); + this.renderStandardBlock(var1, var2, var3, var4); + this.renderAllFaces = false; + this.clearOverrideBlockTexture(); + this.uvRotateTop = 0; + return true; + } + } + + private boolean renderBlockBed(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + int var6 = this.blockAccess.getBlockMetadata(var2, var3, var4); + int var7 = BlockBed.getDirection(var6); + boolean var8 = BlockBed.isBlockHeadOfBed(var6); + float var9 = 0.5F; + float var10 = 1.0F; + float var11 = 0.8F; + float var12 = 0.6F; + int var25 = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4); + var5.setBrightness(var25); + var5.setColorOpaque_F(var9, var9, var9); + Icon var27 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 0); + double var28 = (double)var27.getMinU(); + double var30 = (double)var27.getMaxU(); + double var32 = (double)var27.getMinV(); + double var34 = (double)var27.getMaxV(); + double var36 = (double)var2 + this.renderMinX; + double var38 = (double)var2 + this.renderMaxX; + double var40 = (double)var3 + this.renderMinY + 0.1875D; + double var42 = (double)var4 + this.renderMinZ; + double var44 = (double)var4 + this.renderMaxZ; + var5.addVertexWithUV(var36, var40, var44, var28, var34); + var5.addVertexWithUV(var36, var40, var42, var28, var32); + var5.addVertexWithUV(var38, var40, var42, var30, var32); + var5.addVertexWithUV(var38, var40, var44, var30, var34); + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4)); + var5.setColorOpaque_F(var10, var10, var10); + var27 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 1); + var28 = (double)var27.getMinU(); + var30 = (double)var27.getMaxU(); + var32 = (double)var27.getMinV(); + var34 = (double)var27.getMaxV(); + var36 = var28; + var38 = var30; + var40 = var32; + var42 = var32; + var44 = var28; + double var46 = var30; + double var48 = var34; + double var50 = var34; + if(var7 == 0) { + var38 = var28; + var40 = var34; + var44 = var30; + var50 = var32; + } else if(var7 == 2) { + var36 = var30; + var42 = var34; + var46 = var28; + var48 = var32; + } else if(var7 == 3) { + var36 = var30; + var42 = var34; + var46 = var28; + var48 = var32; + var38 = var28; + var40 = var34; + var44 = var30; + var50 = var32; + } + + double var52 = (double)var2 + this.renderMinX; + double var54 = (double)var2 + this.renderMaxX; + double var56 = (double)var3 + this.renderMaxY; + double var58 = (double)var4 + this.renderMinZ; + double var60 = (double)var4 + this.renderMaxZ; + var5.addVertexWithUV(var54, var56, var60, var44, var48); + var5.addVertexWithUV(var54, var56, var58, var36, var40); + var5.addVertexWithUV(var52, var56, var58, var38, var42); + var5.addVertexWithUV(var52, var56, var60, var46, var50); + int var62 = Direction.directionToFacing[var7]; + if(var8) { + var62 = Direction.directionToFacing[Direction.rotateOpposite[var7]]; + } + + byte var63 = 4; + switch(var7) { + case 0: + var63 = 5; + break; + case 1: + var63 = 3; + case 2: + default: + break; + case 3: + var63 = 2; + } + + if(var62 != 2 && (this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 - 1, 2))) { + var5.setBrightness(this.renderMinZ > 0.0D ? var25 : var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 - 1)); + var5.setColorOpaque_F(var11, var11, var11); + this.flipTexture = var63 == 2; + this.renderFaceZNeg(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 2)); + } + + if(var62 != 3 && (this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 + 1, 3))) { + var5.setBrightness(this.renderMaxZ < 1.0D ? var25 : var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 + 1)); + var5.setColorOpaque_F(var11, var11, var11); + this.flipTexture = var63 == 3; + this.renderFaceZPos(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 3)); + } + + if(var62 != 4 && (this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2 - 1, var3, var4, 4))) { + var5.setBrightness(this.renderMinZ > 0.0D ? var25 : var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4)); + var5.setColorOpaque_F(var12, var12, var12); + this.flipTexture = var63 == 4; + this.renderFaceXNeg(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 4)); + } + + if(var62 != 5 && (this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2 + 1, var3, var4, 5))) { + var5.setBrightness(this.renderMaxZ < 1.0D ? var25 : var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4)); + var5.setColorOpaque_F(var12, var12, var12); + this.flipTexture = var63 == 5; + this.renderFaceXPos(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 5)); + } + + this.flipTexture = false; + return true; + } + + private boolean renderBlockBrewingStand(BlockBrewingStand var1, int var2, int var3, int var4) { + this.setRenderBounds(0.4375D, 0.0D, 0.4375D, 0.5625D, 0.875D, 0.5625D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setOverrideBlockTexture(var1.getBrewingStandIcon()); + this.setRenderBounds(0.5625D, 0.0D, 0.3125D, 0.9375D, 0.125D, 0.6875D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.125D, 0.0D, 1.0D / 16.0D, 0.5D, 0.125D, 0.4375D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.125D, 0.0D, 0.5625D, 0.5D, 0.125D, 0.9375D); + this.renderStandardBlock(var1, var2, var3, var4); + this.clearOverrideBlockTexture(); + Tessellator var5 = Tessellator.instance; + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + float var6 = 1.0F; + int var7 = var1.colorMultiplier(this.blockAccess, var2, var3, var4); + float var8 = (float)(var7 >> 16 & 255) / 255.0F; + float var9 = (float)(var7 >> 8 & 255) / 255.0F; + float var10 = (float)(var7 & 255) / 255.0F; + if(EntityRenderer.anaglyphEnable) { + float var11 = (var8 * 30.0F + var9 * 59.0F + var10 * 11.0F) / 100.0F; + float var12 = (var8 * 30.0F + var9 * 70.0F) / 100.0F; + float var13 = (var8 * 30.0F + var10 * 70.0F) / 100.0F; + var8 = var11; + var9 = var12; + var10 = var13; + } + + var5.setColorOpaque_F(var6 * var8, var6 * var9, var6 * var10); + Icon var32 = this.getBlockIconFromSideAndMetadata(var1, 0, 0); + if(this.hasOverrideBlockTexture()) { + var32 = this.overrideBlockTexture; + } + + double var33 = (double)var32.getMinV(); + double var14 = (double)var32.getMaxV(); + int var16 = this.blockAccess.getBlockMetadata(var2, var3, var4); + + for(int var17 = 0; var17 < 3; ++var17) { + double var18 = (double)var17 * Math.PI * 2.0D / 3.0D + Math.PI * 0.5D; + double var20 = (double)var32.getInterpolatedU(8.0D); + double var22 = (double)var32.getMaxU(); + if((var16 & 1 << var17) != 0) { + var22 = (double)var32.getMinU(); + } + + double var24 = (double)var2 + 0.5D; + double var26 = (double)var2 + 0.5D + Math.sin(var18) * 8.0D / 16.0D; + double var28 = (double)var4 + 0.5D; + double var30 = (double)var4 + 0.5D + Math.cos(var18) * 8.0D / 16.0D; + var5.addVertexWithUV(var24, (double)(var3 + 1), var28, var20, var33); + var5.addVertexWithUV(var24, (double)(var3 + 0), var28, var20, var14); + var5.addVertexWithUV(var26, (double)(var3 + 0), var30, var22, var14); + var5.addVertexWithUV(var26, (double)(var3 + 1), var30, var22, var33); + var5.addVertexWithUV(var26, (double)(var3 + 1), var30, var22, var33); + var5.addVertexWithUV(var26, (double)(var3 + 0), var30, var22, var14); + var5.addVertexWithUV(var24, (double)(var3 + 0), var28, var20, var14); + var5.addVertexWithUV(var24, (double)(var3 + 1), var28, var20, var33); + } + + var1.setBlockBoundsForItemRender(); + return true; + } + + private boolean renderBlockCauldron(BlockCauldron var1, int var2, int var3, int var4) { + this.renderStandardBlock(var1, var2, var3, var4); + Tessellator var5 = Tessellator.instance; + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + float var6 = 1.0F; + int var7 = var1.colorMultiplier(this.blockAccess, var2, var3, var4); + float var8 = (float)(var7 >> 16 & 255) / 255.0F; + float var9 = (float)(var7 >> 8 & 255) / 255.0F; + float var10 = (float)(var7 & 255) / 255.0F; + float var12; + if(EntityRenderer.anaglyphEnable) { + float var11 = (var8 * 30.0F + var9 * 59.0F + var10 * 11.0F) / 100.0F; + var12 = (var8 * 30.0F + var9 * 70.0F) / 100.0F; + float var13 = (var8 * 30.0F + var10 * 70.0F) / 100.0F; + var8 = var11; + var9 = var12; + var10 = var13; + } + + var5.setColorOpaque_F(var6 * var8, var6 * var9, var6 * var10); + Icon var16 = var1.getBlockTextureFromSide(2); + var12 = 2.0F / 16.0F; + this.renderFaceXPos(var1, (double)((float)var2 - 1.0F + var12), (double)var3, (double)var4, var16); + this.renderFaceXNeg(var1, (double)((float)var2 + 1.0F - var12), (double)var3, (double)var4, var16); + this.renderFaceZPos(var1, (double)var2, (double)var3, (double)((float)var4 - 1.0F + var12), var16); + this.renderFaceZNeg(var1, (double)var2, (double)var3, (double)((float)var4 + 1.0F - var12), var16); + Icon var17 = BlockCauldron.func_94375_b("cauldron_inner"); + this.renderFaceYPos(var1, (double)var2, (double)((float)var3 - 1.0F + 0.25F), (double)var4, var17); + this.renderFaceYNeg(var1, (double)var2, (double)((float)var3 + 1.0F - 12.0F / 16.0F), (double)var4, var17); + int var14 = this.blockAccess.getBlockMetadata(var2, var3, var4); + if(var14 > 0) { + Icon var15 = BlockFluid.func_94424_b("water"); + if(var14 > 3) { + var14 = 3; + } + + this.renderFaceYPos(var1, (double)var2, (double)((float)var3 - 1.0F + (6.0F + (float)var14 * 3.0F) / 16.0F), (double)var4, var15); + } + + return true; + } + + private boolean renderBlockFlowerpot(BlockFlowerPot var1, int var2, int var3, int var4) { + this.renderStandardBlock(var1, var2, var3, var4); + Tessellator var5 = Tessellator.instance; + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + float var6 = 1.0F; + int var7 = var1.colorMultiplier(this.blockAccess, var2, var3, var4); + Icon var8 = this.getBlockIconFromSide(var1, 0); + float var9 = (float)(var7 >> 16 & 255) / 255.0F; + float var10 = (float)(var7 >> 8 & 255) / 255.0F; + float var11 = (float)(var7 & 255) / 255.0F; + float var12; + float var14; + if(EntityRenderer.anaglyphEnable) { + var12 = (var9 * 30.0F + var10 * 59.0F + var11 * 11.0F) / 100.0F; + float var13 = (var9 * 30.0F + var10 * 70.0F) / 100.0F; + var14 = (var9 * 30.0F + var11 * 70.0F) / 100.0F; + var9 = var12; + var10 = var13; + var11 = var14; + } + + var5.setColorOpaque_F(var6 * var9, var6 * var10, var6 * var11); + var12 = 0.1865F; + this.renderFaceXPos(var1, (double)((float)var2 - 0.5F + var12), (double)var3, (double)var4, var8); + this.renderFaceXNeg(var1, (double)((float)var2 + 0.5F - var12), (double)var3, (double)var4, var8); + this.renderFaceZPos(var1, (double)var2, (double)var3, (double)((float)var4 - 0.5F + var12), var8); + this.renderFaceZNeg(var1, (double)var2, (double)var3, (double)((float)var4 + 0.5F - var12), var8); + this.renderFaceYPos(var1, (double)var2, (double)((float)var3 - 0.5F + var12 + 3.0F / 16.0F), (double)var4, this.getBlockIcon(Block.dirt)); + int var19 = this.blockAccess.getBlockMetadata(var2, var3, var4); + if(var19 != 0) { + var14 = 0.0F; + float var15 = 4.0F; + float var16 = 0.0F; + BlockFlower var17 = null; + switch(var19) { + case 1: + var17 = Block.plantRed; + break; + case 2: + var17 = Block.plantYellow; + case 3: + case 4: + case 5: + case 6: + default: + break; + case 7: + var17 = Block.mushroomRed; + break; + case 8: + var17 = Block.mushroomBrown; + } + + var5.addTranslation(var14 / 16.0F, var15 / 16.0F, var16 / 16.0F); + if(var17 != null) { + this.renderBlockByRenderType(var17, var2, var3, var4); + } else if(var19 == 9) { + this.renderAllFaces = true; + float var18 = 2.0F / 16.0F; + this.setRenderBounds((double)(0.5F - var18), 0.0D, (double)(0.5F - var18), (double)(0.5F + var18), 0.25D, (double)(0.5F + var18)); + this.renderStandardBlock(Block.cactus, var2, var3, var4); + this.setRenderBounds((double)(0.5F - var18), 0.25D, (double)(0.5F - var18), (double)(0.5F + var18), 0.5D, (double)(0.5F + var18)); + this.renderStandardBlock(Block.cactus, var2, var3, var4); + this.setRenderBounds((double)(0.5F - var18), 0.5D, (double)(0.5F - var18), (double)(0.5F + var18), 0.75D, (double)(0.5F + var18)); + this.renderStandardBlock(Block.cactus, var2, var3, var4); + this.renderAllFaces = false; + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + } else if(var19 == 3) { + this.drawCrossedSquares(Block.sapling, 0, (double)var2, (double)var3, (double)var4, 12.0F / 16.0F); + } else if(var19 == 5) { + this.drawCrossedSquares(Block.sapling, 2, (double)var2, (double)var3, (double)var4, 12.0F / 16.0F); + } else if(var19 == 4) { + this.drawCrossedSquares(Block.sapling, 1, (double)var2, (double)var3, (double)var4, 12.0F / 16.0F); + } else if(var19 == 6) { + this.drawCrossedSquares(Block.sapling, 3, (double)var2, (double)var3, (double)var4, 12.0F / 16.0F); + } else if(var19 == 11) { + var7 = Block.tallGrass.colorMultiplier(this.blockAccess, var2, var3, var4); + var9 = (float)(var7 >> 16 & 255) / 255.0F; + var10 = (float)(var7 >> 8 & 255) / 255.0F; + var11 = (float)(var7 & 255) / 255.0F; + var5.setColorOpaque_F(var6 * var9, var6 * var10, var6 * var11); + this.drawCrossedSquares(Block.tallGrass, 2, (double)var2, (double)var3, (double)var4, 12.0F / 16.0F); + } else if(var19 == 10) { + this.drawCrossedSquares(Block.deadBush, 2, (double)var2, (double)var3, (double)var4, 12.0F / 16.0F); + } + + var5.addTranslation(-var14 / 16.0F, -var15 / 16.0F, -var16 / 16.0F); + } + + return true; + } + + private boolean renderBlockAnvil(BlockAnvil var1, int var2, int var3, int var4) { + return this.renderBlockAnvilMetadata(var1, var2, var3, var4, this.blockAccess.getBlockMetadata(var2, var3, var4)); + } + + public boolean renderBlockAnvilMetadata(BlockAnvil var1, int var2, int var3, int var4, int var5) { + Tessellator var6 = Tessellator.instance; + var6.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + float var7 = 1.0F; + int var8 = var1.colorMultiplier(this.blockAccess, var2, var3, var4); + float var9 = (float)(var8 >> 16 & 255) / 255.0F; + float var10 = (float)(var8 >> 8 & 255) / 255.0F; + float var11 = (float)(var8 & 255) / 255.0F; + if(EntityRenderer.anaglyphEnable) { + float var12 = (var9 * 30.0F + var10 * 59.0F + var11 * 11.0F) / 100.0F; + float var13 = (var9 * 30.0F + var10 * 70.0F) / 100.0F; + float var14 = (var9 * 30.0F + var11 * 70.0F) / 100.0F; + var9 = var12; + var10 = var13; + var11 = var14; + } + + var6.setColorOpaque_F(var7 * var9, var7 * var10, var7 * var11); + return this.renderBlockAnvilOrient(var1, var2, var3, var4, var5, false); + } + + private boolean renderBlockAnvilOrient(BlockAnvil var1, int var2, int var3, int var4, int var5, boolean var6) { + int var7 = var6 ? 0 : var5 & 3; + boolean var8 = false; + float var9 = 0.0F; + switch(var7) { + case 0: + this.uvRotateSouth = 2; + this.uvRotateNorth = 1; + this.uvRotateTop = 3; + this.uvRotateBottom = 3; + break; + case 1: + this.uvRotateEast = 1; + this.uvRotateWest = 2; + this.uvRotateTop = 2; + this.uvRotateBottom = 1; + var8 = true; + break; + case 2: + this.uvRotateSouth = 1; + this.uvRotateNorth = 2; + break; + case 3: + this.uvRotateEast = 2; + this.uvRotateWest = 1; + this.uvRotateTop = 1; + this.uvRotateBottom = 2; + var8 = true; + } + + var9 = this.renderBlockAnvilRotate(var1, var2, var3, var4, 0, var9, 12.0F / 16.0F, 0.25F, 12.0F / 16.0F, var8, var6, var5); + var9 = this.renderBlockAnvilRotate(var1, var2, var3, var4, 1, var9, 0.5F, 1.0F / 16.0F, 10.0F / 16.0F, var8, var6, var5); + var9 = this.renderBlockAnvilRotate(var1, var2, var3, var4, 2, var9, 0.25F, 5.0F / 16.0F, 0.5F, var8, var6, var5); + this.renderBlockAnvilRotate(var1, var2, var3, var4, 3, var9, 10.0F / 16.0F, 6.0F / 16.0F, 1.0F, var8, var6, var5); + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + this.uvRotateEast = 0; + this.uvRotateWest = 0; + this.uvRotateSouth = 0; + this.uvRotateNorth = 0; + this.uvRotateTop = 0; + this.uvRotateBottom = 0; + return true; + } + + private float renderBlockAnvilRotate(BlockAnvil var1, int var2, int var3, int var4, int var5, float var6, float var7, float var8, float var9, boolean var10, boolean var11, int var12) { + if(var10) { + float var13 = var7; + var7 = var9; + var9 = var13; + } + + var7 /= 2.0F; + var9 /= 2.0F; + var1.field_82521_b = var5; + this.setRenderBounds((double)(0.5F - var7), (double)var6, (double)(0.5F - var9), (double)(0.5F + var7), (double)(var6 + var8), (double)(0.5F + var9)); + if(var11) { + Tessellator var14 = Tessellator.instance; + var14.startDrawingQuads(); + var14.setNormal(0.0F, -1.0F, 0.0F); + this.renderFaceYNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 0, var12)); + var14.draw(); + var14.startDrawingQuads(); + var14.setNormal(0.0F, 1.0F, 0.0F); + this.renderFaceYPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 1, var12)); + var14.draw(); + var14.startDrawingQuads(); + var14.setNormal(0.0F, 0.0F, -1.0F); + this.renderFaceZNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 2, var12)); + var14.draw(); + var14.startDrawingQuads(); + var14.setNormal(0.0F, 0.0F, 1.0F); + this.renderFaceZPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 3, var12)); + var14.draw(); + var14.startDrawingQuads(); + var14.setNormal(-1.0F, 0.0F, 0.0F); + this.renderFaceXNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 4, var12)); + var14.draw(); + var14.startDrawingQuads(); + var14.setNormal(1.0F, 0.0F, 0.0F); + this.renderFaceXPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 5, var12)); + var14.draw(); + } else { + this.renderStandardBlock(var1, var2, var3, var4); + } + + return var6 + var8; + } + + public boolean renderBlockTorch(Block var1, int var2, int var3, int var4) { + int var5 = this.blockAccess.getBlockMetadata(var2, var3, var4); + Tessellator var6 = Tessellator.instance; + var6.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + var6.setColorOpaque_F(1.0F, 1.0F, 1.0F); + double var7 = (double)0.4F; + double var9 = 0.5D - var7; + double var11 = (double)0.2F; + if(var5 == 1) { + this.renderTorchAtAngle(var1, (double)var2 - var9, (double)var3 + var11, (double)var4, -var7, 0.0D, 0); + } else if(var5 == 2) { + this.renderTorchAtAngle(var1, (double)var2 + var9, (double)var3 + var11, (double)var4, var7, 0.0D, 0); + } else if(var5 == 3) { + this.renderTorchAtAngle(var1, (double)var2, (double)var3 + var11, (double)var4 - var9, 0.0D, -var7, 0); + } else if(var5 == 4) { + this.renderTorchAtAngle(var1, (double)var2, (double)var3 + var11, (double)var4 + var9, 0.0D, var7, 0); + } else { + this.renderTorchAtAngle(var1, (double)var2, (double)var3, (double)var4, 0.0D, 0.0D, 0); + } + + return true; + } + + private boolean renderBlockRepeater(BlockRedstoneRepeater var1, int var2, int var3, int var4) { + int var5 = this.blockAccess.getBlockMetadata(var2, var3, var4); + int var6 = var5 & 3; + int var7 = (var5 & 12) >> 2; + Tessellator var8 = Tessellator.instance; + var8.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + var8.setColorOpaque_F(1.0F, 1.0F, 1.0F); + double var9 = -0.1875D; + boolean var11 = var1.func_94476_e(this.blockAccess, var2, var3, var4, var5); + double var12 = 0.0D; + double var14 = 0.0D; + double var16 = 0.0D; + double var18 = 0.0D; + switch(var6) { + case 0: + var18 = -0.3125D; + var14 = BlockRedstoneRepeater.repeaterTorchOffset[var7]; + break; + case 1: + var16 = 0.3125D; + var12 = -BlockRedstoneRepeater.repeaterTorchOffset[var7]; + break; + case 2: + var18 = 0.3125D; + var14 = -BlockRedstoneRepeater.repeaterTorchOffset[var7]; + break; + case 3: + var16 = -0.3125D; + var12 = BlockRedstoneRepeater.repeaterTorchOffset[var7]; + } + + if(!var11) { + this.renderTorchAtAngle(var1, (double)var2 + var12, (double)var3 + var9, (double)var4 + var14, 0.0D, 0.0D, 0); + } else { + Icon var20 = this.getBlockIcon(Block.bedrock); + this.setOverrideBlockTexture(var20); + float var21 = 2.0F; + float var22 = 14.0F; + float var23 = 7.0F; + float var24 = 9.0F; + switch(var6) { + case 1: + case 3: + var21 = 7.0F; + var22 = 9.0F; + var23 = 2.0F; + var24 = 14.0F; + case 0: + case 2: + default: + this.setRenderBounds((double)(var21 / 16.0F + (float)var12), 0.125D, (double)(var23 / 16.0F + (float)var14), (double)(var22 / 16.0F + (float)var12), 0.25D, (double)(var24 / 16.0F + (float)var14)); + double var25 = (double)var20.getInterpolatedU((double)var21); + double var27 = (double)var20.getInterpolatedV((double)var23); + double var29 = (double)var20.getInterpolatedU((double)var22); + double var31 = (double)var20.getInterpolatedV((double)var24); + var8.addVertexWithUV((double)((float)var2 + var21 / 16.0F) + var12, (double)((float)var3 + 0.25F), (double)((float)var4 + var23 / 16.0F) + var14, var25, var27); + var8.addVertexWithUV((double)((float)var2 + var21 / 16.0F) + var12, (double)((float)var3 + 0.25F), (double)((float)var4 + var24 / 16.0F) + var14, var25, var31); + var8.addVertexWithUV((double)((float)var2 + var22 / 16.0F) + var12, (double)((float)var3 + 0.25F), (double)((float)var4 + var24 / 16.0F) + var14, var29, var31); + var8.addVertexWithUV((double)((float)var2 + var22 / 16.0F) + var12, (double)((float)var3 + 0.25F), (double)((float)var4 + var23 / 16.0F) + var14, var29, var27); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.125D, 1.0D); + this.clearOverrideBlockTexture(); + } + } + + var8.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + var8.setColorOpaque_F(1.0F, 1.0F, 1.0F); + this.renderTorchAtAngle(var1, (double)var2 + var16, (double)var3 + var9, (double)var4 + var18, 0.0D, 0.0D, 0); + this.renderBlockRedstoneLogic(var1, var2, var3, var4); + return true; + } + + private boolean renderBlockComparator(BlockComparator var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + var5.setColorOpaque_F(1.0F, 1.0F, 1.0F); + int var6 = this.blockAccess.getBlockMetadata(var2, var3, var4); + int var7 = var6 & 3; + double var8 = 0.0D; + double var10 = -0.1875D; + double var12 = 0.0D; + double var14 = 0.0D; + double var16 = 0.0D; + Icon var18; + if(var1.func_94490_c(var6)) { + var18 = Block.torchRedstoneActive.getBlockTextureFromSide(0); + } else { + var10 -= 0.1875D; + var18 = Block.torchRedstoneIdle.getBlockTextureFromSide(0); + } + + switch(var7) { + case 0: + var12 = -0.3125D; + var16 = 1.0D; + break; + case 1: + var8 = 0.3125D; + var14 = -1.0D; + break; + case 2: + var12 = 0.3125D; + var16 = -1.0D; + break; + case 3: + var8 = -0.3125D; + var14 = 1.0D; + } + + this.renderTorchAtAngle(var1, (double)var2 + 0.25D * var14 + 0.1875D * var16, (double)((float)var3 - 3.0F / 16.0F), (double)var4 + 0.25D * var16 + 0.1875D * var14, 0.0D, 0.0D, var6); + this.renderTorchAtAngle(var1, (double)var2 + 0.25D * var14 + -0.1875D * var16, (double)((float)var3 - 3.0F / 16.0F), (double)var4 + 0.25D * var16 + -0.1875D * var14, 0.0D, 0.0D, var6); + this.setOverrideBlockTexture(var18); + this.renderTorchAtAngle(var1, (double)var2 + var8, (double)var3 + var10, (double)var4 + var12, 0.0D, 0.0D, var6); + this.clearOverrideBlockTexture(); + this.renderBlockRedstoneLogicMetadata(var1, var2, var3, var4, var7); + return true; + } + + private boolean renderBlockRedstoneLogic(BlockRedstoneLogic var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + this.renderBlockRedstoneLogicMetadata(var1, var2, var3, var4, this.blockAccess.getBlockMetadata(var2, var3, var4) & 3); + return true; + } + + private void renderBlockRedstoneLogicMetadata(BlockRedstoneLogic var1, int var2, int var3, int var4, int var5) { + this.renderStandardBlock(var1, var2, var3, var4); + Tessellator var6 = Tessellator.instance; + var6.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + var6.setColorOpaque_F(1.0F, 1.0F, 1.0F); + int var7 = this.blockAccess.getBlockMetadata(var2, var3, var4); + Icon var8 = this.getBlockIconFromSideAndMetadata(var1, 1, var7); + double var9 = (double)var8.getMinU(); + double var11 = (double)var8.getMaxU(); + double var13 = (double)var8.getMinV(); + double var15 = (double)var8.getMaxV(); + double var17 = 0.125D; + double var19 = (double)(var2 + 1); + double var21 = (double)(var2 + 1); + double var23 = (double)(var2 + 0); + double var25 = (double)(var2 + 0); + double var27 = (double)(var4 + 0); + double var29 = (double)(var4 + 1); + double var31 = (double)(var4 + 1); + double var33 = (double)(var4 + 0); + double var35 = (double)var3 + var17; + if(var5 == 2) { + var21 = (double)(var2 + 0); + var19 = var21; + var25 = (double)(var2 + 1); + var23 = var25; + var33 = (double)(var4 + 1); + var27 = var33; + var31 = (double)(var4 + 0); + var29 = var31; + } else if(var5 == 3) { + var25 = (double)(var2 + 0); + var19 = var25; + var23 = (double)(var2 + 1); + var21 = var23; + var29 = (double)(var4 + 0); + var27 = var29; + var33 = (double)(var4 + 1); + var31 = var33; + } else if(var5 == 1) { + var25 = (double)(var2 + 1); + var19 = var25; + var23 = (double)(var2 + 0); + var21 = var23; + var29 = (double)(var4 + 1); + var27 = var29; + var33 = (double)(var4 + 0); + var31 = var33; + } + + var6.addVertexWithUV(var25, var35, var33, var9, var13); + var6.addVertexWithUV(var23, var35, var31, var9, var15); + var6.addVertexWithUV(var21, var35, var29, var11, var15); + var6.addVertexWithUV(var19, var35, var27, var11, var13); + } + + public void renderPistonBaseAllFaces(Block var1, int var2, int var3, int var4) { + this.renderAllFaces = true; + this.renderPistonBase(var1, var2, var3, var4, true); + this.renderAllFaces = false; + } + + private boolean renderPistonBase(Block var1, int var2, int var3, int var4, boolean var5) { + int var6 = this.blockAccess.getBlockMetadata(var2, var3, var4); + boolean var7 = var5 || (var6 & 8) != 0; + int var8 = BlockPistonBase.getOrientation(var6); + if(var7) { + switch(var8) { + case 0: + this.uvRotateEast = 3; + this.uvRotateWest = 3; + this.uvRotateSouth = 3; + this.uvRotateNorth = 3; + this.setRenderBounds(0.0D, 0.25D, 0.0D, 1.0D, 1.0D, 1.0D); + break; + case 1: + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.75D, 1.0D); + break; + case 2: + this.uvRotateSouth = 1; + this.uvRotateNorth = 2; + this.setRenderBounds(0.0D, 0.0D, 0.25D, 1.0D, 1.0D, 1.0D); + break; + case 3: + this.uvRotateSouth = 2; + this.uvRotateNorth = 1; + this.uvRotateTop = 3; + this.uvRotateBottom = 3; + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.75D); + break; + case 4: + this.uvRotateEast = 1; + this.uvRotateWest = 2; + this.uvRotateTop = 2; + this.uvRotateBottom = 1; + this.setRenderBounds(0.25D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + break; + case 5: + this.uvRotateEast = 2; + this.uvRotateWest = 1; + this.uvRotateTop = 1; + this.uvRotateBottom = 2; + this.setRenderBounds(0.0D, 0.0D, 0.0D, 0.75D, 1.0D, 1.0D); + } + + ((BlockPistonBase)var1).func_96479_b((float)this.renderMinX, (float)this.renderMinY, (float)this.renderMinZ, (float)this.renderMaxX, (float)this.renderMaxY, (float)this.renderMaxZ); + this.renderStandardBlock(var1, var2, var3, var4); + this.uvRotateEast = 0; + this.uvRotateWest = 0; + this.uvRotateSouth = 0; + this.uvRotateNorth = 0; + this.uvRotateTop = 0; + this.uvRotateBottom = 0; + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + ((BlockPistonBase)var1).func_96479_b((float)this.renderMinX, (float)this.renderMinY, (float)this.renderMinZ, (float)this.renderMaxX, (float)this.renderMaxY, (float)this.renderMaxZ); + } else { + switch(var8) { + case 0: + this.uvRotateEast = 3; + this.uvRotateWest = 3; + this.uvRotateSouth = 3; + this.uvRotateNorth = 3; + case 1: + default: + break; + case 2: + this.uvRotateSouth = 1; + this.uvRotateNorth = 2; + break; + case 3: + this.uvRotateSouth = 2; + this.uvRotateNorth = 1; + this.uvRotateTop = 3; + this.uvRotateBottom = 3; + break; + case 4: + this.uvRotateEast = 1; + this.uvRotateWest = 2; + this.uvRotateTop = 2; + this.uvRotateBottom = 1; + break; + case 5: + this.uvRotateEast = 2; + this.uvRotateWest = 1; + this.uvRotateTop = 1; + this.uvRotateBottom = 2; + } + + this.renderStandardBlock(var1, var2, var3, var4); + this.uvRotateEast = 0; + this.uvRotateWest = 0; + this.uvRotateSouth = 0; + this.uvRotateNorth = 0; + this.uvRotateTop = 0; + this.uvRotateBottom = 0; + } + + return true; + } + + private void renderPistonRodUD(double var1, double var3, double var5, double var7, double var9, double var11, float var13, double var14) { + Icon var16 = BlockPistonBase.func_94496_b("piston_side"); + if(this.hasOverrideBlockTexture()) { + var16 = this.overrideBlockTexture; + } + + Tessellator var17 = Tessellator.instance; + double var18 = (double)var16.getMinU(); + double var20 = (double)var16.getMinV(); + double var22 = (double)var16.getInterpolatedU(var14); + double var24 = (double)var16.getInterpolatedV(4.0D); + var17.setColorOpaque_F(var13, var13, var13); + var17.addVertexWithUV(var1, var7, var9, var22, var20); + var17.addVertexWithUV(var1, var5, var9, var18, var20); + var17.addVertexWithUV(var3, var5, var11, var18, var24); + var17.addVertexWithUV(var3, var7, var11, var22, var24); + } + + private void renderPistonRodSN(double var1, double var3, double var5, double var7, double var9, double var11, float var13, double var14) { + Icon var16 = BlockPistonBase.func_94496_b("piston_side"); + if(this.hasOverrideBlockTexture()) { + var16 = this.overrideBlockTexture; + } + + Tessellator var17 = Tessellator.instance; + double var18 = (double)var16.getMinU(); + double var20 = (double)var16.getMinV(); + double var22 = (double)var16.getInterpolatedU(var14); + double var24 = (double)var16.getInterpolatedV(4.0D); + var17.setColorOpaque_F(var13, var13, var13); + var17.addVertexWithUV(var1, var5, var11, var22, var20); + var17.addVertexWithUV(var1, var5, var9, var18, var20); + var17.addVertexWithUV(var3, var7, var9, var18, var24); + var17.addVertexWithUV(var3, var7, var11, var22, var24); + } + + private void renderPistonRodEW(double var1, double var3, double var5, double var7, double var9, double var11, float var13, double var14) { + Icon var16 = BlockPistonBase.func_94496_b("piston_side"); + if(this.hasOverrideBlockTexture()) { + var16 = this.overrideBlockTexture; + } + + Tessellator var17 = Tessellator.instance; + double var18 = (double)var16.getMinU(); + double var20 = (double)var16.getMinV(); + double var22 = (double)var16.getInterpolatedU(var14); + double var24 = (double)var16.getInterpolatedV(4.0D); + var17.setColorOpaque_F(var13, var13, var13); + var17.addVertexWithUV(var3, var5, var9, var22, var20); + var17.addVertexWithUV(var1, var5, var9, var18, var20); + var17.addVertexWithUV(var1, var7, var11, var18, var24); + var17.addVertexWithUV(var3, var7, var11, var22, var24); + } + + public void renderPistonExtensionAllFaces(Block var1, int var2, int var3, int var4, boolean var5) { + this.renderAllFaces = true; + this.renderPistonExtension(var1, var2, var3, var4, var5); + this.renderAllFaces = false; + } + + private boolean renderPistonExtension(Block var1, int var2, int var3, int var4, boolean var5) { + int var6 = this.blockAccess.getBlockMetadata(var2, var3, var4); + int var7 = BlockPistonExtension.getDirectionMeta(var6); + float var11 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + float var12 = var5 ? 1.0F : 0.5F; + double var13 = var5 ? 16.0D : 8.0D; + switch(var7) { + case 0: + this.uvRotateEast = 3; + this.uvRotateWest = 3; + this.uvRotateSouth = 3; + this.uvRotateNorth = 3; + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 0.25D, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + this.renderPistonRodUD((double)((float)var2 + 6.0F / 16.0F), (double)((float)var2 + 10.0F / 16.0F), (double)((float)var3 + 0.25F), (double)((float)var3 + 0.25F + var12), (double)((float)var4 + 10.0F / 16.0F), (double)((float)var4 + 10.0F / 16.0F), var11 * 0.8F, var13); + this.renderPistonRodUD((double)((float)var2 + 10.0F / 16.0F), (double)((float)var2 + 6.0F / 16.0F), (double)((float)var3 + 0.25F), (double)((float)var3 + 0.25F + var12), (double)((float)var4 + 6.0F / 16.0F), (double)((float)var4 + 6.0F / 16.0F), var11 * 0.8F, var13); + this.renderPistonRodUD((double)((float)var2 + 6.0F / 16.0F), (double)((float)var2 + 6.0F / 16.0F), (double)((float)var3 + 0.25F), (double)((float)var3 + 0.25F + var12), (double)((float)var4 + 6.0F / 16.0F), (double)((float)var4 + 10.0F / 16.0F), var11 * 0.6F, var13); + this.renderPistonRodUD((double)((float)var2 + 10.0F / 16.0F), (double)((float)var2 + 10.0F / 16.0F), (double)((float)var3 + 0.25F), (double)((float)var3 + 0.25F + var12), (double)((float)var4 + 10.0F / 16.0F), (double)((float)var4 + 6.0F / 16.0F), var11 * 0.6F, var13); + break; + case 1: + this.setRenderBounds(0.0D, 0.75D, 0.0D, 1.0D, 1.0D, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + this.renderPistonRodUD((double)((float)var2 + 6.0F / 16.0F), (double)((float)var2 + 10.0F / 16.0F), (double)((float)var3 - 0.25F + 1.0F - var12), (double)((float)var3 - 0.25F + 1.0F), (double)((float)var4 + 10.0F / 16.0F), (double)((float)var4 + 10.0F / 16.0F), var11 * 0.8F, var13); + this.renderPistonRodUD((double)((float)var2 + 10.0F / 16.0F), (double)((float)var2 + 6.0F / 16.0F), (double)((float)var3 - 0.25F + 1.0F - var12), (double)((float)var3 - 0.25F + 1.0F), (double)((float)var4 + 6.0F / 16.0F), (double)((float)var4 + 6.0F / 16.0F), var11 * 0.8F, var13); + this.renderPistonRodUD((double)((float)var2 + 6.0F / 16.0F), (double)((float)var2 + 6.0F / 16.0F), (double)((float)var3 - 0.25F + 1.0F - var12), (double)((float)var3 - 0.25F + 1.0F), (double)((float)var4 + 6.0F / 16.0F), (double)((float)var4 + 10.0F / 16.0F), var11 * 0.6F, var13); + this.renderPistonRodUD((double)((float)var2 + 10.0F / 16.0F), (double)((float)var2 + 10.0F / 16.0F), (double)((float)var3 - 0.25F + 1.0F - var12), (double)((float)var3 - 0.25F + 1.0F), (double)((float)var4 + 10.0F / 16.0F), (double)((float)var4 + 6.0F / 16.0F), var11 * 0.6F, var13); + break; + case 2: + this.uvRotateSouth = 1; + this.uvRotateNorth = 2; + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.25D); + this.renderStandardBlock(var1, var2, var3, var4); + this.renderPistonRodSN((double)((float)var2 + 6.0F / 16.0F), (double)((float)var2 + 6.0F / 16.0F), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var4 + 0.25F), (double)((float)var4 + 0.25F + var12), var11 * 0.6F, var13); + this.renderPistonRodSN((double)((float)var2 + 10.0F / 16.0F), (double)((float)var2 + 10.0F / 16.0F), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var4 + 0.25F), (double)((float)var4 + 0.25F + var12), var11 * 0.6F, var13); + this.renderPistonRodSN((double)((float)var2 + 6.0F / 16.0F), (double)((float)var2 + 10.0F / 16.0F), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var4 + 0.25F), (double)((float)var4 + 0.25F + var12), var11 * 0.5F, var13); + this.renderPistonRodSN((double)((float)var2 + 10.0F / 16.0F), (double)((float)var2 + 6.0F / 16.0F), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var4 + 0.25F), (double)((float)var4 + 0.25F + var12), var11, var13); + break; + case 3: + this.uvRotateSouth = 2; + this.uvRotateNorth = 1; + this.uvRotateTop = 3; + this.uvRotateBottom = 3; + this.setRenderBounds(0.0D, 0.0D, 0.75D, 1.0D, 1.0D, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + this.renderPistonRodSN((double)((float)var2 + 6.0F / 16.0F), (double)((float)var2 + 6.0F / 16.0F), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var4 - 0.25F + 1.0F - var12), (double)((float)var4 - 0.25F + 1.0F), var11 * 0.6F, var13); + this.renderPistonRodSN((double)((float)var2 + 10.0F / 16.0F), (double)((float)var2 + 10.0F / 16.0F), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var4 - 0.25F + 1.0F - var12), (double)((float)var4 - 0.25F + 1.0F), var11 * 0.6F, var13); + this.renderPistonRodSN((double)((float)var2 + 6.0F / 16.0F), (double)((float)var2 + 10.0F / 16.0F), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var4 - 0.25F + 1.0F - var12), (double)((float)var4 - 0.25F + 1.0F), var11 * 0.5F, var13); + this.renderPistonRodSN((double)((float)var2 + 10.0F / 16.0F), (double)((float)var2 + 6.0F / 16.0F), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var4 - 0.25F + 1.0F - var12), (double)((float)var4 - 0.25F + 1.0F), var11, var13); + break; + case 4: + this.uvRotateEast = 1; + this.uvRotateWest = 2; + this.uvRotateTop = 2; + this.uvRotateBottom = 1; + this.setRenderBounds(0.0D, 0.0D, 0.0D, 0.25D, 1.0D, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + this.renderPistonRodEW((double)((float)var2 + 0.25F), (double)((float)var2 + 0.25F + var12), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var4 + 10.0F / 16.0F), (double)((float)var4 + 6.0F / 16.0F), var11 * 0.5F, var13); + this.renderPistonRodEW((double)((float)var2 + 0.25F), (double)((float)var2 + 0.25F + var12), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var4 + 6.0F / 16.0F), (double)((float)var4 + 10.0F / 16.0F), var11, var13); + this.renderPistonRodEW((double)((float)var2 + 0.25F), (double)((float)var2 + 0.25F + var12), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var4 + 6.0F / 16.0F), (double)((float)var4 + 6.0F / 16.0F), var11 * 0.6F, var13); + this.renderPistonRodEW((double)((float)var2 + 0.25F), (double)((float)var2 + 0.25F + var12), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var4 + 10.0F / 16.0F), (double)((float)var4 + 10.0F / 16.0F), var11 * 0.6F, var13); + break; + case 5: + this.uvRotateEast = 2; + this.uvRotateWest = 1; + this.uvRotateTop = 1; + this.uvRotateBottom = 2; + this.setRenderBounds(0.75D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + this.renderPistonRodEW((double)((float)var2 - 0.25F + 1.0F - var12), (double)((float)var2 - 0.25F + 1.0F), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var4 + 10.0F / 16.0F), (double)((float)var4 + 6.0F / 16.0F), var11 * 0.5F, var13); + this.renderPistonRodEW((double)((float)var2 - 0.25F + 1.0F - var12), (double)((float)var2 - 0.25F + 1.0F), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var4 + 6.0F / 16.0F), (double)((float)var4 + 10.0F / 16.0F), var11, var13); + this.renderPistonRodEW((double)((float)var2 - 0.25F + 1.0F - var12), (double)((float)var2 - 0.25F + 1.0F), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var4 + 6.0F / 16.0F), (double)((float)var4 + 6.0F / 16.0F), var11 * 0.6F, var13); + this.renderPistonRodEW((double)((float)var2 - 0.25F + 1.0F - var12), (double)((float)var2 - 0.25F + 1.0F), (double)((float)var3 + 10.0F / 16.0F), (double)((float)var3 + 6.0F / 16.0F), (double)((float)var4 + 10.0F / 16.0F), (double)((float)var4 + 10.0F / 16.0F), var11 * 0.6F, var13); + } + + this.uvRotateEast = 0; + this.uvRotateWest = 0; + this.uvRotateSouth = 0; + this.uvRotateNorth = 0; + this.uvRotateTop = 0; + this.uvRotateBottom = 0; + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + return true; + } + + public boolean renderBlockLever(Block var1, int var2, int var3, int var4) { + int var5 = this.blockAccess.getBlockMetadata(var2, var3, var4); + int var6 = var5 & 7; + boolean var7 = (var5 & 8) > 0; + Tessellator var8 = Tessellator.instance; + boolean var9 = this.hasOverrideBlockTexture(); + if(!var9) { + this.setOverrideBlockTexture(this.getBlockIcon(Block.cobblestone)); + } + + float var10 = 0.25F; + float var11 = 3.0F / 16.0F; + float var12 = 3.0F / 16.0F; + if(var6 == 5) { + this.setRenderBounds((double)(0.5F - var11), 0.0D, (double)(0.5F - var10), (double)(0.5F + var11), (double)var12, (double)(0.5F + var10)); + } else if(var6 == 6) { + this.setRenderBounds((double)(0.5F - var10), 0.0D, (double)(0.5F - var11), (double)(0.5F + var10), (double)var12, (double)(0.5F + var11)); + } else if(var6 == 4) { + this.setRenderBounds((double)(0.5F - var11), (double)(0.5F - var10), (double)(1.0F - var12), (double)(0.5F + var11), (double)(0.5F + var10), 1.0D); + } else if(var6 == 3) { + this.setRenderBounds((double)(0.5F - var11), (double)(0.5F - var10), 0.0D, (double)(0.5F + var11), (double)(0.5F + var10), (double)var12); + } else if(var6 == 2) { + this.setRenderBounds((double)(1.0F - var12), (double)(0.5F - var10), (double)(0.5F - var11), 1.0D, (double)(0.5F + var10), (double)(0.5F + var11)); + } else if(var6 == 1) { + this.setRenderBounds(0.0D, (double)(0.5F - var10), (double)(0.5F - var11), (double)var12, (double)(0.5F + var10), (double)(0.5F + var11)); + } else if(var6 == 0) { + this.setRenderBounds((double)(0.5F - var10), (double)(1.0F - var12), (double)(0.5F - var11), (double)(0.5F + var10), 1.0D, (double)(0.5F + var11)); + } else if(var6 == 7) { + this.setRenderBounds((double)(0.5F - var11), (double)(1.0F - var12), (double)(0.5F - var10), (double)(0.5F + var11), 1.0D, (double)(0.5F + var10)); + } + + this.renderStandardBlock(var1, var2, var3, var4); + if(!var9) { + this.clearOverrideBlockTexture(); + } + + var8.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + float var13 = 1.0F; + if(Block.lightValue[var1.blockID] > 0) { + var13 = 1.0F; + } + + var8.setColorOpaque_F(var13, var13, var13); + Icon var14 = this.getBlockIconFromSide(var1, 0); + if(this.hasOverrideBlockTexture()) { + var14 = this.overrideBlockTexture; + } + + double var15 = (double)var14.getMinU(); + double var17 = (double)var14.getMinV(); + double var19 = (double)var14.getMaxU(); + double var21 = (double)var14.getMaxV(); + Vec3[] var23 = new Vec3[8]; + float var24 = 1.0F / 16.0F; + float var25 = 1.0F / 16.0F; + float var26 = 10.0F / 16.0F; + var23[0] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-var24), 0.0D, (double)(-var25)); + var23[1] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)var24, 0.0D, (double)(-var25)); + var23[2] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)var24, 0.0D, (double)var25); + var23[3] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-var24), 0.0D, (double)var25); + var23[4] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-var24), (double)var26, (double)(-var25)); + var23[5] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)var24, (double)var26, (double)(-var25)); + var23[6] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)var24, (double)var26, (double)var25); + var23[7] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-var24), (double)var26, (double)var25); + + for(int var27 = 0; var27 < 8; ++var27) { + if(var7) { + var23[var27].zCoord -= 1.0D / 16.0D; + var23[var27].rotateAroundX((float)Math.PI * 2.0F / 9.0F); + } else { + var23[var27].zCoord += 1.0D / 16.0D; + var23[var27].rotateAroundX(-((float)Math.PI * 2.0F / 9.0F)); + } + + if(var6 == 0 || var6 == 7) { + var23[var27].rotateAroundZ((float)Math.PI); + } + + if(var6 == 6 || var6 == 0) { + var23[var27].rotateAroundY((float)Math.PI * 0.5F); + } + + if(var6 > 0 && var6 < 5) { + var23[var27].yCoord -= 0.375D; + var23[var27].rotateAroundX((float)Math.PI * 0.5F); + if(var6 == 4) { + var23[var27].rotateAroundY(0.0F); + } + + if(var6 == 3) { + var23[var27].rotateAroundY((float)Math.PI); + } + + if(var6 == 2) { + var23[var27].rotateAroundY((float)Math.PI * 0.5F); + } + + if(var6 == 1) { + var23[var27].rotateAroundY((float)Math.PI * -0.5F); + } + + var23[var27].xCoord += (double)var2 + 0.5D; + var23[var27].yCoord += (double)((float)var3 + 0.5F); + var23[var27].zCoord += (double)var4 + 0.5D; + } else if(var6 != 0 && var6 != 7) { + var23[var27].xCoord += (double)var2 + 0.5D; + var23[var27].yCoord += (double)((float)var3 + 2.0F / 16.0F); + var23[var27].zCoord += (double)var4 + 0.5D; + } else { + var23[var27].xCoord += (double)var2 + 0.5D; + var23[var27].yCoord += (double)((float)var3 + 14.0F / 16.0F); + var23[var27].zCoord += (double)var4 + 0.5D; + } + } + + Vec3 var32 = null; + Vec3 var28 = null; + Vec3 var29 = null; + Vec3 var30 = null; + + for(int var31 = 0; var31 < 6; ++var31) { + if(var31 == 0) { + var15 = (double)var14.getInterpolatedU(7.0D); + var17 = (double)var14.getInterpolatedV(6.0D); + var19 = (double)var14.getInterpolatedU(9.0D); + var21 = (double)var14.getInterpolatedV(8.0D); + } else if(var31 == 2) { + var15 = (double)var14.getInterpolatedU(7.0D); + var17 = (double)var14.getInterpolatedV(6.0D); + var19 = (double)var14.getInterpolatedU(9.0D); + var21 = (double)var14.getMaxV(); + } + + if(var31 == 0) { + var32 = var23[0]; + var28 = var23[1]; + var29 = var23[2]; + var30 = var23[3]; + } else if(var31 == 1) { + var32 = var23[7]; + var28 = var23[6]; + var29 = var23[5]; + var30 = var23[4]; + } else if(var31 == 2) { + var32 = var23[1]; + var28 = var23[0]; + var29 = var23[4]; + var30 = var23[5]; + } else if(var31 == 3) { + var32 = var23[2]; + var28 = var23[1]; + var29 = var23[5]; + var30 = var23[6]; + } else if(var31 == 4) { + var32 = var23[3]; + var28 = var23[2]; + var29 = var23[6]; + var30 = var23[7]; + } else if(var31 == 5) { + var32 = var23[0]; + var28 = var23[3]; + var29 = var23[7]; + var30 = var23[4]; + } + + var8.addVertexWithUV(var32.xCoord, var32.yCoord, var32.zCoord, var15, var21); + var8.addVertexWithUV(var28.xCoord, var28.yCoord, var28.zCoord, var19, var21); + var8.addVertexWithUV(var29.xCoord, var29.yCoord, var29.zCoord, var19, var17); + var8.addVertexWithUV(var30.xCoord, var30.yCoord, var30.zCoord, var15, var17); + } + + return true; + } + + public boolean renderBlockTripWireSource(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + int var6 = this.blockAccess.getBlockMetadata(var2, var3, var4); + int var7 = var6 & 3; + boolean var8 = (var6 & 4) == 4; + boolean var9 = (var6 & 8) == 8; + boolean var10 = !this.blockAccess.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4); + boolean var11 = this.hasOverrideBlockTexture(); + if(!var11) { + this.setOverrideBlockTexture(this.getBlockIcon(Block.planks)); + } + + float var12 = 0.25F; + float var13 = 2.0F / 16.0F; + float var14 = 2.0F / 16.0F; + float var15 = 0.3F - var12; + float var16 = 0.3F + var12; + if(var7 == 2) { + this.setRenderBounds((double)(0.5F - var13), (double)var15, (double)(1.0F - var14), (double)(0.5F + var13), (double)var16, 1.0D); + } else if(var7 == 0) { + this.setRenderBounds((double)(0.5F - var13), (double)var15, 0.0D, (double)(0.5F + var13), (double)var16, (double)var14); + } else if(var7 == 1) { + this.setRenderBounds((double)(1.0F - var14), (double)var15, (double)(0.5F - var13), 1.0D, (double)var16, (double)(0.5F + var13)); + } else if(var7 == 3) { + this.setRenderBounds(0.0D, (double)var15, (double)(0.5F - var13), (double)var14, (double)var16, (double)(0.5F + var13)); + } + + this.renderStandardBlock(var1, var2, var3, var4); + if(!var11) { + this.clearOverrideBlockTexture(); + } + + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + float var17 = 1.0F; + if(Block.lightValue[var1.blockID] > 0) { + var17 = 1.0F; + } + + var5.setColorOpaque_F(var17, var17, var17); + Icon var18 = this.getBlockIconFromSide(var1, 0); + if(this.hasOverrideBlockTexture()) { + var18 = this.overrideBlockTexture; + } + + double var19 = (double)var18.getMinU(); + double var21 = (double)var18.getMinV(); + double var23 = (double)var18.getMaxU(); + double var25 = (double)var18.getMaxV(); + Vec3[] var27 = new Vec3[8]; + float var28 = 0.046875F; + float var29 = 0.046875F; + float var30 = 5.0F / 16.0F; + var27[0] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-var28), 0.0D, (double)(-var29)); + var27[1] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)var28, 0.0D, (double)(-var29)); + var27[2] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)var28, 0.0D, (double)var29); + var27[3] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-var28), 0.0D, (double)var29); + var27[4] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-var28), (double)var30, (double)(-var29)); + var27[5] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)var28, (double)var30, (double)(-var29)); + var27[6] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)var28, (double)var30, (double)var29); + var27[7] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-var28), (double)var30, (double)var29); + + for(int var31 = 0; var31 < 8; ++var31) { + var27[var31].zCoord += 1.0D / 16.0D; + if(var9) { + var27[var31].rotateAroundX(0.5235988F); + var27[var31].yCoord -= 0.4375D; + } else if(var8) { + var27[var31].rotateAroundX(0.08726647F); + var27[var31].yCoord -= 0.4375D; + } else { + var27[var31].rotateAroundX(-((float)Math.PI * 2.0F / 9.0F)); + var27[var31].yCoord -= 0.375D; + } + + var27[var31].rotateAroundX((float)Math.PI * 0.5F); + if(var7 == 2) { + var27[var31].rotateAroundY(0.0F); + } + + if(var7 == 0) { + var27[var31].rotateAroundY((float)Math.PI); + } + + if(var7 == 1) { + var27[var31].rotateAroundY((float)Math.PI * 0.5F); + } + + if(var7 == 3) { + var27[var31].rotateAroundY((float)Math.PI * -0.5F); + } + + var27[var31].xCoord += (double)var2 + 0.5D; + var27[var31].yCoord += (double)((float)var3 + 5.0F / 16.0F); + var27[var31].zCoord += (double)var4 + 0.5D; + } + + Vec3 var62 = null; + Vec3 var32 = null; + Vec3 var33 = null; + Vec3 var34 = null; + byte var35 = 7; + byte var36 = 9; + byte var37 = 9; + byte var38 = 16; + + for(int var39 = 0; var39 < 6; ++var39) { + if(var39 == 0) { + var62 = var27[0]; + var32 = var27[1]; + var33 = var27[2]; + var34 = var27[3]; + var19 = (double)var18.getInterpolatedU((double)var35); + var21 = (double)var18.getInterpolatedV((double)var37); + var23 = (double)var18.getInterpolatedU((double)var36); + var25 = (double)var18.getInterpolatedV((double)(var37 + 2)); + } else if(var39 == 1) { + var62 = var27[7]; + var32 = var27[6]; + var33 = var27[5]; + var34 = var27[4]; + } else if(var39 == 2) { + var62 = var27[1]; + var32 = var27[0]; + var33 = var27[4]; + var34 = var27[5]; + var19 = (double)var18.getInterpolatedU((double)var35); + var21 = (double)var18.getInterpolatedV((double)var37); + var23 = (double)var18.getInterpolatedU((double)var36); + var25 = (double)var18.getInterpolatedV((double)var38); + } else if(var39 == 3) { + var62 = var27[2]; + var32 = var27[1]; + var33 = var27[5]; + var34 = var27[6]; + } else if(var39 == 4) { + var62 = var27[3]; + var32 = var27[2]; + var33 = var27[6]; + var34 = var27[7]; + } else if(var39 == 5) { + var62 = var27[0]; + var32 = var27[3]; + var33 = var27[7]; + var34 = var27[4]; + } + + var5.addVertexWithUV(var62.xCoord, var62.yCoord, var62.zCoord, var19, var25); + var5.addVertexWithUV(var32.xCoord, var32.yCoord, var32.zCoord, var23, var25); + var5.addVertexWithUV(var33.xCoord, var33.yCoord, var33.zCoord, var23, var21); + var5.addVertexWithUV(var34.xCoord, var34.yCoord, var34.zCoord, var19, var21); + } + + float var63 = 0.09375F; + float var40 = 0.09375F; + float var41 = 0.03125F; + var27[0] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-var63), 0.0D, (double)(-var40)); + var27[1] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)var63, 0.0D, (double)(-var40)); + var27[2] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)var63, 0.0D, (double)var40); + var27[3] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-var63), 0.0D, (double)var40); + var27[4] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-var63), (double)var41, (double)(-var40)); + var27[5] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)var63, (double)var41, (double)(-var40)); + var27[6] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)var63, (double)var41, (double)var40); + var27[7] = this.blockAccess.getWorldVec3Pool().getVecFromPool((double)(-var63), (double)var41, (double)var40); + + for(int var42 = 0; var42 < 8; ++var42) { + var27[var42].zCoord += 0.21875D; + if(var9) { + var27[var42].yCoord -= 0.09375D; + var27[var42].zCoord -= 0.1625D; + var27[var42].rotateAroundX(0.0F); + } else if(var8) { + var27[var42].yCoord += 1.0D / 64.0D; + var27[var42].zCoord -= 0.171875D; + var27[var42].rotateAroundX(0.17453294F); + } else { + var27[var42].rotateAroundX(0.87266463F); + } + + if(var7 == 2) { + var27[var42].rotateAroundY(0.0F); + } + + if(var7 == 0) { + var27[var42].rotateAroundY((float)Math.PI); + } + + if(var7 == 1) { + var27[var42].rotateAroundY((float)Math.PI * 0.5F); + } + + if(var7 == 3) { + var27[var42].rotateAroundY((float)Math.PI * -0.5F); + } + + var27[var42].xCoord += (double)var2 + 0.5D; + var27[var42].yCoord += (double)((float)var3 + 5.0F / 16.0F); + var27[var42].zCoord += (double)var4 + 0.5D; + } + + byte var64 = 5; + byte var43 = 11; + byte var44 = 3; + byte var45 = 9; + + for(int var46 = 0; var46 < 6; ++var46) { + if(var46 == 0) { + var62 = var27[0]; + var32 = var27[1]; + var33 = var27[2]; + var34 = var27[3]; + var19 = (double)var18.getInterpolatedU((double)var64); + var21 = (double)var18.getInterpolatedV((double)var44); + var23 = (double)var18.getInterpolatedU((double)var43); + var25 = (double)var18.getInterpolatedV((double)var45); + } else if(var46 == 1) { + var62 = var27[7]; + var32 = var27[6]; + var33 = var27[5]; + var34 = var27[4]; + } else if(var46 == 2) { + var62 = var27[1]; + var32 = var27[0]; + var33 = var27[4]; + var34 = var27[5]; + var19 = (double)var18.getInterpolatedU((double)var64); + var21 = (double)var18.getInterpolatedV((double)var44); + var23 = (double)var18.getInterpolatedU((double)var43); + var25 = (double)var18.getInterpolatedV((double)(var44 + 2)); + } else if(var46 == 3) { + var62 = var27[2]; + var32 = var27[1]; + var33 = var27[5]; + var34 = var27[6]; + } else if(var46 == 4) { + var62 = var27[3]; + var32 = var27[2]; + var33 = var27[6]; + var34 = var27[7]; + } else if(var46 == 5) { + var62 = var27[0]; + var32 = var27[3]; + var33 = var27[7]; + var34 = var27[4]; + } + + var5.addVertexWithUV(var62.xCoord, var62.yCoord, var62.zCoord, var19, var25); + var5.addVertexWithUV(var32.xCoord, var32.yCoord, var32.zCoord, var23, var25); + var5.addVertexWithUV(var33.xCoord, var33.yCoord, var33.zCoord, var23, var21); + var5.addVertexWithUV(var34.xCoord, var34.yCoord, var34.zCoord, var19, var21); + } + + if(var8) { + double var65 = var27[0].yCoord; + float var48 = 0.03125F; + float var49 = 0.5F - var48 / 2.0F; + float var50 = var49 + var48; + Icon var51 = this.getBlockIcon(Block.tripWire); + double var52 = (double)var18.getMinU(); + double var54 = (double)var18.getInterpolatedV(var8 ? 2.0D : 0.0D); + double var56 = (double)var18.getMaxU(); + double var58 = (double)var18.getInterpolatedV(var8 ? 4.0D : 2.0D); + double var60 = (double)(var10 ? 3.5F : 1.5F) / 16.0D; + var17 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4) * (12.0F / 16.0F); + var5.setColorOpaque_F(var17, var17, var17); + if(var7 == 2) { + var5.addVertexWithUV((double)((float)var2 + var49), (double)var3 + var60, (double)var4 + 0.25D, var52, var54); + var5.addVertexWithUV((double)((float)var2 + var50), (double)var3 + var60, (double)var4 + 0.25D, var52, var58); + var5.addVertexWithUV((double)((float)var2 + var50), (double)var3 + var60, (double)var4, var56, var58); + var5.addVertexWithUV((double)((float)var2 + var49), (double)var3 + var60, (double)var4, var56, var54); + var5.addVertexWithUV((double)((float)var2 + var49), var65, (double)var4 + 0.5D, var52, var54); + var5.addVertexWithUV((double)((float)var2 + var50), var65, (double)var4 + 0.5D, var52, var58); + var5.addVertexWithUV((double)((float)var2 + var50), (double)var3 + var60, (double)var4 + 0.25D, var56, var58); + var5.addVertexWithUV((double)((float)var2 + var49), (double)var3 + var60, (double)var4 + 0.25D, var56, var54); + } else if(var7 == 0) { + var5.addVertexWithUV((double)((float)var2 + var49), (double)var3 + var60, (double)var4 + 0.75D, var52, var54); + var5.addVertexWithUV((double)((float)var2 + var50), (double)var3 + var60, (double)var4 + 0.75D, var52, var58); + var5.addVertexWithUV((double)((float)var2 + var50), var65, (double)var4 + 0.5D, var56, var58); + var5.addVertexWithUV((double)((float)var2 + var49), var65, (double)var4 + 0.5D, var56, var54); + var5.addVertexWithUV((double)((float)var2 + var49), (double)var3 + var60, (double)(var4 + 1), var52, var54); + var5.addVertexWithUV((double)((float)var2 + var50), (double)var3 + var60, (double)(var4 + 1), var52, var58); + var5.addVertexWithUV((double)((float)var2 + var50), (double)var3 + var60, (double)var4 + 0.75D, var56, var58); + var5.addVertexWithUV((double)((float)var2 + var49), (double)var3 + var60, (double)var4 + 0.75D, var56, var54); + } else if(var7 == 1) { + var5.addVertexWithUV((double)var2, (double)var3 + var60, (double)((float)var4 + var50), var52, var58); + var5.addVertexWithUV((double)var2 + 0.25D, (double)var3 + var60, (double)((float)var4 + var50), var56, var58); + var5.addVertexWithUV((double)var2 + 0.25D, (double)var3 + var60, (double)((float)var4 + var49), var56, var54); + var5.addVertexWithUV((double)var2, (double)var3 + var60, (double)((float)var4 + var49), var52, var54); + var5.addVertexWithUV((double)var2 + 0.25D, (double)var3 + var60, (double)((float)var4 + var50), var52, var58); + var5.addVertexWithUV((double)var2 + 0.5D, var65, (double)((float)var4 + var50), var56, var58); + var5.addVertexWithUV((double)var2 + 0.5D, var65, (double)((float)var4 + var49), var56, var54); + var5.addVertexWithUV((double)var2 + 0.25D, (double)var3 + var60, (double)((float)var4 + var49), var52, var54); + } else { + var5.addVertexWithUV((double)var2 + 0.5D, var65, (double)((float)var4 + var50), var52, var58); + var5.addVertexWithUV((double)var2 + 0.75D, (double)var3 + var60, (double)((float)var4 + var50), var56, var58); + var5.addVertexWithUV((double)var2 + 0.75D, (double)var3 + var60, (double)((float)var4 + var49), var56, var54); + var5.addVertexWithUV((double)var2 + 0.5D, var65, (double)((float)var4 + var49), var52, var54); + var5.addVertexWithUV((double)var2 + 0.75D, (double)var3 + var60, (double)((float)var4 + var50), var52, var58); + var5.addVertexWithUV((double)(var2 + 1), (double)var3 + var60, (double)((float)var4 + var50), var56, var58); + var5.addVertexWithUV((double)(var2 + 1), (double)var3 + var60, (double)((float)var4 + var49), var56, var54); + var5.addVertexWithUV((double)var2 + 0.75D, (double)var3 + var60, (double)((float)var4 + var49), var52, var54); + } + } + + return true; + } + + public boolean renderBlockTripWire(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + Icon var6 = this.getBlockIconFromSide(var1, 0); + int var7 = this.blockAccess.getBlockMetadata(var2, var3, var4); + boolean var8 = (var7 & 4) == 4; + boolean var9 = (var7 & 2) == 2; + if(this.hasOverrideBlockTexture()) { + var6 = this.overrideBlockTexture; + } + + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + float var10 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4) * (12.0F / 16.0F); + var5.setColorOpaque_F(var10, var10, var10); + double var11 = (double)var6.getMinU(); + double var13 = (double)var6.getInterpolatedV(var8 ? 2.0D : 0.0D); + double var15 = (double)var6.getMaxU(); + double var17 = (double)var6.getInterpolatedV(var8 ? 4.0D : 2.0D); + double var19 = (double)(var9 ? 3.5F : 1.5F) / 16.0D; + boolean var21 = BlockTripWire.func_72148_a(this.blockAccess, var2, var3, var4, var7, 1); + boolean var22 = BlockTripWire.func_72148_a(this.blockAccess, var2, var3, var4, var7, 3); + boolean var23 = BlockTripWire.func_72148_a(this.blockAccess, var2, var3, var4, var7, 2); + boolean var24 = BlockTripWire.func_72148_a(this.blockAccess, var2, var3, var4, var7, 0); + float var25 = 0.03125F; + float var26 = 0.5F - var25 / 2.0F; + float var27 = var26 + var25; + if(!var23 && !var22 && !var24 && !var21) { + var23 = true; + var24 = true; + } + + if(var23) { + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)var4 + 0.25D, var11, var13); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)var4 + 0.25D, var11, var17); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)var4, var15, var17); + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)var4, var15, var13); + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)var4, var15, var13); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)var4, var15, var17); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)var4 + 0.25D, var11, var17); + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)var4 + 0.25D, var11, var13); + } + + if(var23 || var24 && !var22 && !var21) { + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)var4 + 0.5D, var11, var13); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)var4 + 0.5D, var11, var17); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)var4 + 0.25D, var15, var17); + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)var4 + 0.25D, var15, var13); + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)var4 + 0.25D, var15, var13); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)var4 + 0.25D, var15, var17); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)var4 + 0.5D, var11, var17); + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)var4 + 0.5D, var11, var13); + } + + if(var24 || var23 && !var22 && !var21) { + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)var4 + 0.75D, var11, var13); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)var4 + 0.75D, var11, var17); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)var4 + 0.5D, var15, var17); + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)var4 + 0.5D, var15, var13); + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)var4 + 0.5D, var15, var13); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)var4 + 0.5D, var15, var17); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)var4 + 0.75D, var11, var17); + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)var4 + 0.75D, var11, var13); + } + + if(var24) { + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)(var4 + 1), var11, var13); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)(var4 + 1), var11, var17); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)var4 + 0.75D, var15, var17); + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)var4 + 0.75D, var15, var13); + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)var4 + 0.75D, var15, var13); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)var4 + 0.75D, var15, var17); + var5.addVertexWithUV((double)((float)var2 + var27), (double)var3 + var19, (double)(var4 + 1), var11, var17); + var5.addVertexWithUV((double)((float)var2 + var26), (double)var3 + var19, (double)(var4 + 1), var11, var13); + } + + if(var21) { + var5.addVertexWithUV((double)var2, (double)var3 + var19, (double)((float)var4 + var27), var11, var17); + var5.addVertexWithUV((double)var2 + 0.25D, (double)var3 + var19, (double)((float)var4 + var27), var15, var17); + var5.addVertexWithUV((double)var2 + 0.25D, (double)var3 + var19, (double)((float)var4 + var26), var15, var13); + var5.addVertexWithUV((double)var2, (double)var3 + var19, (double)((float)var4 + var26), var11, var13); + var5.addVertexWithUV((double)var2, (double)var3 + var19, (double)((float)var4 + var26), var11, var13); + var5.addVertexWithUV((double)var2 + 0.25D, (double)var3 + var19, (double)((float)var4 + var26), var15, var13); + var5.addVertexWithUV((double)var2 + 0.25D, (double)var3 + var19, (double)((float)var4 + var27), var15, var17); + var5.addVertexWithUV((double)var2, (double)var3 + var19, (double)((float)var4 + var27), var11, var17); + } + + if(var21 || var22 && !var23 && !var24) { + var5.addVertexWithUV((double)var2 + 0.25D, (double)var3 + var19, (double)((float)var4 + var27), var11, var17); + var5.addVertexWithUV((double)var2 + 0.5D, (double)var3 + var19, (double)((float)var4 + var27), var15, var17); + var5.addVertexWithUV((double)var2 + 0.5D, (double)var3 + var19, (double)((float)var4 + var26), var15, var13); + var5.addVertexWithUV((double)var2 + 0.25D, (double)var3 + var19, (double)((float)var4 + var26), var11, var13); + var5.addVertexWithUV((double)var2 + 0.25D, (double)var3 + var19, (double)((float)var4 + var26), var11, var13); + var5.addVertexWithUV((double)var2 + 0.5D, (double)var3 + var19, (double)((float)var4 + var26), var15, var13); + var5.addVertexWithUV((double)var2 + 0.5D, (double)var3 + var19, (double)((float)var4 + var27), var15, var17); + var5.addVertexWithUV((double)var2 + 0.25D, (double)var3 + var19, (double)((float)var4 + var27), var11, var17); + } + + if(var22 || var21 && !var23 && !var24) { + var5.addVertexWithUV((double)var2 + 0.5D, (double)var3 + var19, (double)((float)var4 + var27), var11, var17); + var5.addVertexWithUV((double)var2 + 0.75D, (double)var3 + var19, (double)((float)var4 + var27), var15, var17); + var5.addVertexWithUV((double)var2 + 0.75D, (double)var3 + var19, (double)((float)var4 + var26), var15, var13); + var5.addVertexWithUV((double)var2 + 0.5D, (double)var3 + var19, (double)((float)var4 + var26), var11, var13); + var5.addVertexWithUV((double)var2 + 0.5D, (double)var3 + var19, (double)((float)var4 + var26), var11, var13); + var5.addVertexWithUV((double)var2 + 0.75D, (double)var3 + var19, (double)((float)var4 + var26), var15, var13); + var5.addVertexWithUV((double)var2 + 0.75D, (double)var3 + var19, (double)((float)var4 + var27), var15, var17); + var5.addVertexWithUV((double)var2 + 0.5D, (double)var3 + var19, (double)((float)var4 + var27), var11, var17); + } + + if(var22) { + var5.addVertexWithUV((double)var2 + 0.75D, (double)var3 + var19, (double)((float)var4 + var27), var11, var17); + var5.addVertexWithUV((double)(var2 + 1), (double)var3 + var19, (double)((float)var4 + var27), var15, var17); + var5.addVertexWithUV((double)(var2 + 1), (double)var3 + var19, (double)((float)var4 + var26), var15, var13); + var5.addVertexWithUV((double)var2 + 0.75D, (double)var3 + var19, (double)((float)var4 + var26), var11, var13); + var5.addVertexWithUV((double)var2 + 0.75D, (double)var3 + var19, (double)((float)var4 + var26), var11, var13); + var5.addVertexWithUV((double)(var2 + 1), (double)var3 + var19, (double)((float)var4 + var26), var15, var13); + var5.addVertexWithUV((double)(var2 + 1), (double)var3 + var19, (double)((float)var4 + var27), var15, var17); + var5.addVertexWithUV((double)var2 + 0.75D, (double)var3 + var19, (double)((float)var4 + var27), var11, var17); + } + + return true; + } + + public boolean renderBlockFire(BlockFire var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + Icon var6 = var1.func_94438_c(0); + Icon var7 = var1.func_94438_c(1); + Icon var8 = var6; + if(this.hasOverrideBlockTexture()) { + var8 = this.overrideBlockTexture; + } + + var5.setColorOpaque_F(1.0F, 1.0F, 1.0F); + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + double var9 = (double)var8.getMinU(); + double var11 = (double)var8.getMinV(); + double var13 = (double)var8.getMaxU(); + double var15 = (double)var8.getMaxV(); + float var17 = 1.4F; + double var20; + double var22; + double var24; + double var26; + double var28; + double var30; + double var32; + if(!this.blockAccess.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4) && !Block.fire.canBlockCatchFire(this.blockAccess, var2, var3 - 1, var4)) { + float var36 = 0.2F; + float var19 = 1.0F / 16.0F; + if((var2 + var3 + var4 & 1) == 1) { + var9 = (double)var7.getMinU(); + var11 = (double)var7.getMinV(); + var13 = (double)var7.getMaxU(); + var15 = (double)var7.getMaxV(); + } + + if((var2 / 2 + var3 / 2 + var4 / 2 & 1) == 1) { + var20 = var13; + var13 = var9; + var9 = var20; + } + + if(Block.fire.canBlockCatchFire(this.blockAccess, var2 - 1, var3, var4)) { + var5.addVertexWithUV((double)((float)var2 + var36), (double)((float)var3 + var17 + var19), (double)(var4 + 1), var13, var11); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var19), (double)(var4 + 1), var13, var15); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var19), (double)(var4 + 0), var9, var15); + var5.addVertexWithUV((double)((float)var2 + var36), (double)((float)var3 + var17 + var19), (double)(var4 + 0), var9, var11); + var5.addVertexWithUV((double)((float)var2 + var36), (double)((float)var3 + var17 + var19), (double)(var4 + 0), var9, var11); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var19), (double)(var4 + 0), var9, var15); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var19), (double)(var4 + 1), var13, var15); + var5.addVertexWithUV((double)((float)var2 + var36), (double)((float)var3 + var17 + var19), (double)(var4 + 1), var13, var11); + } + + if(Block.fire.canBlockCatchFire(this.blockAccess, var2 + 1, var3, var4)) { + var5.addVertexWithUV((double)((float)(var2 + 1) - var36), (double)((float)var3 + var17 + var19), (double)(var4 + 0), var9, var11); + var5.addVertexWithUV((double)(var2 + 1 - 0), (double)((float)(var3 + 0) + var19), (double)(var4 + 0), var9, var15); + var5.addVertexWithUV((double)(var2 + 1 - 0), (double)((float)(var3 + 0) + var19), (double)(var4 + 1), var13, var15); + var5.addVertexWithUV((double)((float)(var2 + 1) - var36), (double)((float)var3 + var17 + var19), (double)(var4 + 1), var13, var11); + var5.addVertexWithUV((double)((float)(var2 + 1) - var36), (double)((float)var3 + var17 + var19), (double)(var4 + 1), var13, var11); + var5.addVertexWithUV((double)(var2 + 1 - 0), (double)((float)(var3 + 0) + var19), (double)(var4 + 1), var13, var15); + var5.addVertexWithUV((double)(var2 + 1 - 0), (double)((float)(var3 + 0) + var19), (double)(var4 + 0), var9, var15); + var5.addVertexWithUV((double)((float)(var2 + 1) - var36), (double)((float)var3 + var17 + var19), (double)(var4 + 0), var9, var11); + } + + if(Block.fire.canBlockCatchFire(this.blockAccess, var2, var3, var4 - 1)) { + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var17 + var19), (double)((float)var4 + var36), var13, var11); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var19), (double)(var4 + 0), var13, var15); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 0) + var19), (double)(var4 + 0), var9, var15); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var17 + var19), (double)((float)var4 + var36), var9, var11); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var17 + var19), (double)((float)var4 + var36), var9, var11); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 0) + var19), (double)(var4 + 0), var9, var15); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var19), (double)(var4 + 0), var13, var15); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var17 + var19), (double)((float)var4 + var36), var13, var11); + } + + if(Block.fire.canBlockCatchFire(this.blockAccess, var2, var3, var4 + 1)) { + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var17 + var19), (double)((float)(var4 + 1) - var36), var9, var11); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 0) + var19), (double)(var4 + 1 - 0), var9, var15); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var19), (double)(var4 + 1 - 0), var13, var15); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var17 + var19), (double)((float)(var4 + 1) - var36), var13, var11); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var17 + var19), (double)((float)(var4 + 1) - var36), var13, var11); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var19), (double)(var4 + 1 - 0), var13, var15); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 0) + var19), (double)(var4 + 1 - 0), var9, var15); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var17 + var19), (double)((float)(var4 + 1) - var36), var9, var11); + } + + if(Block.fire.canBlockCatchFire(this.blockAccess, var2, var3 + 1, var4)) { + var20 = (double)var2 + 0.5D + 0.5D; + var22 = (double)var2 + 0.5D - 0.5D; + var24 = (double)var4 + 0.5D + 0.5D; + var26 = (double)var4 + 0.5D - 0.5D; + var28 = (double)var2 + 0.5D - 0.5D; + var30 = (double)var2 + 0.5D + 0.5D; + var32 = (double)var4 + 0.5D - 0.5D; + double var34 = (double)var4 + 0.5D + 0.5D; + var9 = (double)var6.getMinU(); + var11 = (double)var6.getMinV(); + var13 = (double)var6.getMaxU(); + var15 = (double)var6.getMaxV(); + ++var3; + var17 = -0.2F; + if((var2 + var3 + var4 & 1) == 0) { + var5.addVertexWithUV(var28, (double)((float)var3 + var17), (double)(var4 + 0), var13, var11); + var5.addVertexWithUV(var20, (double)(var3 + 0), (double)(var4 + 0), var13, var15); + var5.addVertexWithUV(var20, (double)(var3 + 0), (double)(var4 + 1), var9, var15); + var5.addVertexWithUV(var28, (double)((float)var3 + var17), (double)(var4 + 1), var9, var11); + var9 = (double)var7.getMinU(); + var11 = (double)var7.getMinV(); + var13 = (double)var7.getMaxU(); + var15 = (double)var7.getMaxV(); + var5.addVertexWithUV(var30, (double)((float)var3 + var17), (double)(var4 + 1), var13, var11); + var5.addVertexWithUV(var22, (double)(var3 + 0), (double)(var4 + 1), var13, var15); + var5.addVertexWithUV(var22, (double)(var3 + 0), (double)(var4 + 0), var9, var15); + var5.addVertexWithUV(var30, (double)((float)var3 + var17), (double)(var4 + 0), var9, var11); + } else { + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var17), var34, var13, var11); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var26, var13, var15); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var26, var9, var15); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var17), var34, var9, var11); + var9 = (double)var7.getMinU(); + var11 = (double)var7.getMinV(); + var13 = (double)var7.getMaxU(); + var15 = (double)var7.getMaxV(); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var17), var32, var13, var11); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var24, var13, var15); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var24, var9, var15); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var17), var32, var9, var11); + } + } + } else { + double var18 = (double)var2 + 0.5D + 0.2D; + var20 = (double)var2 + 0.5D - 0.2D; + var22 = (double)var4 + 0.5D + 0.2D; + var24 = (double)var4 + 0.5D - 0.2D; + var26 = (double)var2 + 0.5D - 0.3D; + var28 = (double)var2 + 0.5D + 0.3D; + var30 = (double)var4 + 0.5D - 0.3D; + var32 = (double)var4 + 0.5D + 0.3D; + var5.addVertexWithUV(var26, (double)((float)var3 + var17), (double)(var4 + 1), var13, var11); + var5.addVertexWithUV(var18, (double)(var3 + 0), (double)(var4 + 1), var13, var15); + var5.addVertexWithUV(var18, (double)(var3 + 0), (double)(var4 + 0), var9, var15); + var5.addVertexWithUV(var26, (double)((float)var3 + var17), (double)(var4 + 0), var9, var11); + var5.addVertexWithUV(var28, (double)((float)var3 + var17), (double)(var4 + 0), var13, var11); + var5.addVertexWithUV(var20, (double)(var3 + 0), (double)(var4 + 0), var13, var15); + var5.addVertexWithUV(var20, (double)(var3 + 0), (double)(var4 + 1), var9, var15); + var5.addVertexWithUV(var28, (double)((float)var3 + var17), (double)(var4 + 1), var9, var11); + var9 = (double)var7.getMinU(); + var11 = (double)var7.getMinV(); + var13 = (double)var7.getMaxU(); + var15 = (double)var7.getMaxV(); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var17), var32, var13, var11); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var24, var13, var15); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var24, var9, var15); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var17), var32, var9, var11); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var17), var30, var13, var11); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var22, var13, var15); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var22, var9, var15); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var17), var30, var9, var11); + var18 = (double)var2 + 0.5D - 0.5D; + var20 = (double)var2 + 0.5D + 0.5D; + var22 = (double)var4 + 0.5D - 0.5D; + var24 = (double)var4 + 0.5D + 0.5D; + var26 = (double)var2 + 0.5D - 0.4D; + var28 = (double)var2 + 0.5D + 0.4D; + var30 = (double)var4 + 0.5D - 0.4D; + var32 = (double)var4 + 0.5D + 0.4D; + var5.addVertexWithUV(var26, (double)((float)var3 + var17), (double)(var4 + 0), var9, var11); + var5.addVertexWithUV(var18, (double)(var3 + 0), (double)(var4 + 0), var9, var15); + var5.addVertexWithUV(var18, (double)(var3 + 0), (double)(var4 + 1), var13, var15); + var5.addVertexWithUV(var26, (double)((float)var3 + var17), (double)(var4 + 1), var13, var11); + var5.addVertexWithUV(var28, (double)((float)var3 + var17), (double)(var4 + 1), var9, var11); + var5.addVertexWithUV(var20, (double)(var3 + 0), (double)(var4 + 1), var9, var15); + var5.addVertexWithUV(var20, (double)(var3 + 0), (double)(var4 + 0), var13, var15); + var5.addVertexWithUV(var28, (double)((float)var3 + var17), (double)(var4 + 0), var13, var11); + var9 = (double)var6.getMinU(); + var11 = (double)var6.getMinV(); + var13 = (double)var6.getMaxU(); + var15 = (double)var6.getMaxV(); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var17), var32, var9, var11); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var24, var9, var15); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var24, var13, var15); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var17), var32, var13, var11); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var17), var30, var9, var11); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var22, var9, var15); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var22, var13, var15); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var17), var30, var13, var11); + } + + return true; + } + + public boolean renderBlockRedstoneWire(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + int var6 = this.blockAccess.getBlockMetadata(var2, var3, var4); + Icon var7 = BlockRedstoneWire.func_94409_b("redstoneDust_cross"); + Icon var8 = BlockRedstoneWire.func_94409_b("redstoneDust_line"); + Icon var9 = BlockRedstoneWire.func_94409_b("redstoneDust_cross_overlay"); + Icon var10 = BlockRedstoneWire.func_94409_b("redstoneDust_line_overlay"); + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + float var11 = 1.0F; + float var12 = (float)var6 / 15.0F; + float var13 = var12 * 0.6F + 0.4F; + if(var6 == 0) { + var13 = 0.3F; + } + + float var14 = var12 * var12 * 0.7F - 0.5F; + float var15 = var12 * var12 * 0.6F - 0.7F; + if(var14 < 0.0F) { + var14 = 0.0F; + } + + if(var15 < 0.0F) { + var15 = 0.0F; + } + + var5.setColorOpaque_F(var13, var14, var15); + boolean var20 = BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, var2 - 1, var3, var4, 1) || !this.blockAccess.isBlockNormalCube(var2 - 1, var3, var4) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, var2 - 1, var3 - 1, var4, -1); + boolean var21 = BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, var2 + 1, var3, var4, 3) || !this.blockAccess.isBlockNormalCube(var2 + 1, var3, var4) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, var2 + 1, var3 - 1, var4, -1); + boolean var22 = BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, var2, var3, var4 - 1, 2) || !this.blockAccess.isBlockNormalCube(var2, var3, var4 - 1) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, var2, var3 - 1, var4 - 1, -1); + boolean var23 = BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, var2, var3, var4 + 1, 0) || !this.blockAccess.isBlockNormalCube(var2, var3, var4 + 1) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, var2, var3 - 1, var4 + 1, -1); + if(!this.blockAccess.isBlockNormalCube(var2, var3 + 1, var4)) { + if(this.blockAccess.isBlockNormalCube(var2 - 1, var3, var4) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, var2 - 1, var3 + 1, var4, -1)) { + var20 = true; + } + + if(this.blockAccess.isBlockNormalCube(var2 + 1, var3, var4) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, var2 + 1, var3 + 1, var4, -1)) { + var21 = true; + } + + if(this.blockAccess.isBlockNormalCube(var2, var3, var4 - 1) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, var2, var3 + 1, var4 - 1, -1)) { + var22 = true; + } + + if(this.blockAccess.isBlockNormalCube(var2, var3, var4 + 1) && BlockRedstoneWire.isPowerProviderOrWire(this.blockAccess, var2, var3 + 1, var4 + 1, -1)) { + var23 = true; + } + } + + float var24 = (float)(var2 + 0); + float var25 = (float)(var2 + 1); + float var26 = (float)(var4 + 0); + float var27 = (float)(var4 + 1); + byte var28 = 0; + if((var20 || var21) && !var22 && !var23) { + var28 = 1; + } + + if((var22 || var23) && !var21 && !var20) { + var28 = 2; + } + + if(var28 == 0) { + int var29 = 0; + int var30 = 0; + int var31 = 16; + int var32 = 16; + if(!var20) { + var24 += 5.0F / 16.0F; + } + + if(!var20) { + var29 += 5; + } + + if(!var21) { + var25 -= 5.0F / 16.0F; + } + + if(!var21) { + var31 -= 5; + } + + if(!var22) { + var26 += 5.0F / 16.0F; + } + + if(!var22) { + var30 += 5; + } + + if(!var23) { + var27 -= 5.0F / 16.0F; + } + + if(!var23) { + var32 -= 5; + } + + var5.addVertexWithUV((double)var25, (double)var3 + 1.0D / 64.0D, (double)var27, (double)var7.getInterpolatedU((double)var31), (double)var7.getInterpolatedV((double)var32)); + var5.addVertexWithUV((double)var25, (double)var3 + 1.0D / 64.0D, (double)var26, (double)var7.getInterpolatedU((double)var31), (double)var7.getInterpolatedV((double)var30)); + var5.addVertexWithUV((double)var24, (double)var3 + 1.0D / 64.0D, (double)var26, (double)var7.getInterpolatedU((double)var29), (double)var7.getInterpolatedV((double)var30)); + var5.addVertexWithUV((double)var24, (double)var3 + 1.0D / 64.0D, (double)var27, (double)var7.getInterpolatedU((double)var29), (double)var7.getInterpolatedV((double)var32)); + var5.setColorOpaque_F(var11, var11, var11); + var5.addVertexWithUV((double)var25, (double)var3 + 1.0D / 64.0D, (double)var27, (double)var9.getInterpolatedU((double)var31), (double)var9.getInterpolatedV((double)var32)); + var5.addVertexWithUV((double)var25, (double)var3 + 1.0D / 64.0D, (double)var26, (double)var9.getInterpolatedU((double)var31), (double)var9.getInterpolatedV((double)var30)); + var5.addVertexWithUV((double)var24, (double)var3 + 1.0D / 64.0D, (double)var26, (double)var9.getInterpolatedU((double)var29), (double)var9.getInterpolatedV((double)var30)); + var5.addVertexWithUV((double)var24, (double)var3 + 1.0D / 64.0D, (double)var27, (double)var9.getInterpolatedU((double)var29), (double)var9.getInterpolatedV((double)var32)); + } else if(var28 == 1) { + var5.addVertexWithUV((double)var25, (double)var3 + 1.0D / 64.0D, (double)var27, (double)var8.getMaxU(), (double)var8.getMaxV()); + var5.addVertexWithUV((double)var25, (double)var3 + 1.0D / 64.0D, (double)var26, (double)var8.getMaxU(), (double)var8.getMinV()); + var5.addVertexWithUV((double)var24, (double)var3 + 1.0D / 64.0D, (double)var26, (double)var8.getMinU(), (double)var8.getMinV()); + var5.addVertexWithUV((double)var24, (double)var3 + 1.0D / 64.0D, (double)var27, (double)var8.getMinU(), (double)var8.getMaxV()); + var5.setColorOpaque_F(var11, var11, var11); + var5.addVertexWithUV((double)var25, (double)var3 + 1.0D / 64.0D, (double)var27, (double)var10.getMaxU(), (double)var10.getMaxV()); + var5.addVertexWithUV((double)var25, (double)var3 + 1.0D / 64.0D, (double)var26, (double)var10.getMaxU(), (double)var10.getMinV()); + var5.addVertexWithUV((double)var24, (double)var3 + 1.0D / 64.0D, (double)var26, (double)var10.getMinU(), (double)var10.getMinV()); + var5.addVertexWithUV((double)var24, (double)var3 + 1.0D / 64.0D, (double)var27, (double)var10.getMinU(), (double)var10.getMaxV()); + } else { + var5.addVertexWithUV((double)var25, (double)var3 + 1.0D / 64.0D, (double)var27, (double)var8.getMaxU(), (double)var8.getMaxV()); + var5.addVertexWithUV((double)var25, (double)var3 + 1.0D / 64.0D, (double)var26, (double)var8.getMinU(), (double)var8.getMaxV()); + var5.addVertexWithUV((double)var24, (double)var3 + 1.0D / 64.0D, (double)var26, (double)var8.getMinU(), (double)var8.getMinV()); + var5.addVertexWithUV((double)var24, (double)var3 + 1.0D / 64.0D, (double)var27, (double)var8.getMaxU(), (double)var8.getMinV()); + var5.setColorOpaque_F(var11, var11, var11); + var5.addVertexWithUV((double)var25, (double)var3 + 1.0D / 64.0D, (double)var27, (double)var10.getMaxU(), (double)var10.getMaxV()); + var5.addVertexWithUV((double)var25, (double)var3 + 1.0D / 64.0D, (double)var26, (double)var10.getMinU(), (double)var10.getMaxV()); + var5.addVertexWithUV((double)var24, (double)var3 + 1.0D / 64.0D, (double)var26, (double)var10.getMinU(), (double)var10.getMinV()); + var5.addVertexWithUV((double)var24, (double)var3 + 1.0D / 64.0D, (double)var27, (double)var10.getMaxU(), (double)var10.getMinV()); + } + + if(!this.blockAccess.isBlockNormalCube(var2, var3 + 1, var4)) { + if(this.blockAccess.isBlockNormalCube(var2 - 1, var3, var4) && this.blockAccess.getBlockId(var2 - 1, var3 + 1, var4) == Block.redstoneWire.blockID) { + var5.setColorOpaque_F(var11 * var13, var11 * var14, var11 * var15); + var5.addVertexWithUV((double)var2 + 1.0D / 64.0D, (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)(var4 + 1), (double)var8.getMaxU(), (double)var8.getMinV()); + var5.addVertexWithUV((double)var2 + 1.0D / 64.0D, (double)(var3 + 0), (double)(var4 + 1), (double)var8.getMinU(), (double)var8.getMinV()); + var5.addVertexWithUV((double)var2 + 1.0D / 64.0D, (double)(var3 + 0), (double)(var4 + 0), (double)var8.getMinU(), (double)var8.getMaxV()); + var5.addVertexWithUV((double)var2 + 1.0D / 64.0D, (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)(var4 + 0), (double)var8.getMaxU(), (double)var8.getMaxV()); + var5.setColorOpaque_F(var11, var11, var11); + var5.addVertexWithUV((double)var2 + 1.0D / 64.0D, (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)(var4 + 1), (double)var10.getMaxU(), (double)var10.getMinV()); + var5.addVertexWithUV((double)var2 + 1.0D / 64.0D, (double)(var3 + 0), (double)(var4 + 1), (double)var10.getMinU(), (double)var10.getMinV()); + var5.addVertexWithUV((double)var2 + 1.0D / 64.0D, (double)(var3 + 0), (double)(var4 + 0), (double)var10.getMinU(), (double)var10.getMaxV()); + var5.addVertexWithUV((double)var2 + 1.0D / 64.0D, (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)(var4 + 0), (double)var10.getMaxU(), (double)var10.getMaxV()); + } + + if(this.blockAccess.isBlockNormalCube(var2 + 1, var3, var4) && this.blockAccess.getBlockId(var2 + 1, var3 + 1, var4) == Block.redstoneWire.blockID) { + var5.setColorOpaque_F(var11 * var13, var11 * var14, var11 * var15); + var5.addVertexWithUV((double)(var2 + 1) - 1.0D / 64.0D, (double)(var3 + 0), (double)(var4 + 1), (double)var8.getMinU(), (double)var8.getMaxV()); + var5.addVertexWithUV((double)(var2 + 1) - 1.0D / 64.0D, (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)(var4 + 1), (double)var8.getMaxU(), (double)var8.getMaxV()); + var5.addVertexWithUV((double)(var2 + 1) - 1.0D / 64.0D, (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)(var4 + 0), (double)var8.getMaxU(), (double)var8.getMinV()); + var5.addVertexWithUV((double)(var2 + 1) - 1.0D / 64.0D, (double)(var3 + 0), (double)(var4 + 0), (double)var8.getMinU(), (double)var8.getMinV()); + var5.setColorOpaque_F(var11, var11, var11); + var5.addVertexWithUV((double)(var2 + 1) - 1.0D / 64.0D, (double)(var3 + 0), (double)(var4 + 1), (double)var10.getMinU(), (double)var10.getMaxV()); + var5.addVertexWithUV((double)(var2 + 1) - 1.0D / 64.0D, (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)(var4 + 1), (double)var10.getMaxU(), (double)var10.getMaxV()); + var5.addVertexWithUV((double)(var2 + 1) - 1.0D / 64.0D, (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)(var4 + 0), (double)var10.getMaxU(), (double)var10.getMinV()); + var5.addVertexWithUV((double)(var2 + 1) - 1.0D / 64.0D, (double)(var3 + 0), (double)(var4 + 0), (double)var10.getMinU(), (double)var10.getMinV()); + } + + if(this.blockAccess.isBlockNormalCube(var2, var3, var4 - 1) && this.blockAccess.getBlockId(var2, var3 + 1, var4 - 1) == Block.redstoneWire.blockID) { + var5.setColorOpaque_F(var11 * var13, var11 * var14, var11 * var15); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), (double)var4 + 1.0D / 64.0D, (double)var8.getMinU(), (double)var8.getMaxV()); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)var4 + 1.0D / 64.0D, (double)var8.getMaxU(), (double)var8.getMaxV()); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)var4 + 1.0D / 64.0D, (double)var8.getMaxU(), (double)var8.getMinV()); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), (double)var4 + 1.0D / 64.0D, (double)var8.getMinU(), (double)var8.getMinV()); + var5.setColorOpaque_F(var11, var11, var11); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), (double)var4 + 1.0D / 64.0D, (double)var10.getMinU(), (double)var10.getMaxV()); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)var4 + 1.0D / 64.0D, (double)var10.getMaxU(), (double)var10.getMaxV()); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)var4 + 1.0D / 64.0D, (double)var10.getMaxU(), (double)var10.getMinV()); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), (double)var4 + 1.0D / 64.0D, (double)var10.getMinU(), (double)var10.getMinV()); + } + + if(this.blockAccess.isBlockNormalCube(var2, var3, var4 + 1) && this.blockAccess.getBlockId(var2, var3 + 1, var4 + 1) == Block.redstoneWire.blockID) { + var5.setColorOpaque_F(var11 * var13, var11 * var14, var11 * var15); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)(var4 + 1) - 1.0D / 64.0D, (double)var8.getMaxU(), (double)var8.getMinV()); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), (double)(var4 + 1) - 1.0D / 64.0D, (double)var8.getMinU(), (double)var8.getMinV()); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), (double)(var4 + 1) - 1.0D / 64.0D, (double)var8.getMinU(), (double)var8.getMaxV()); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)(var4 + 1) - 1.0D / 64.0D, (double)var8.getMaxU(), (double)var8.getMaxV()); + var5.setColorOpaque_F(var11, var11, var11); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)(var4 + 1) - 1.0D / 64.0D, (double)var10.getMaxU(), (double)var10.getMinV()); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), (double)(var4 + 1) - 1.0D / 64.0D, (double)var10.getMinU(), (double)var10.getMinV()); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), (double)(var4 + 1) - 1.0D / 64.0D, (double)var10.getMinU(), (double)var10.getMaxV()); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 1) + 7.0F / 320.0F), (double)(var4 + 1) - 1.0D / 64.0D, (double)var10.getMaxU(), (double)var10.getMaxV()); + } + } + + return true; + } + + public boolean renderBlockMinecartTrack(BlockRailBase var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + int var6 = this.blockAccess.getBlockMetadata(var2, var3, var4); + Icon var7 = this.getBlockIconFromSideAndMetadata(var1, 0, var6); + if(this.hasOverrideBlockTexture()) { + var7 = this.overrideBlockTexture; + } + + if(var1.isPowered()) { + var6 &= 7; + } + + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + var5.setColorOpaque_F(1.0F, 1.0F, 1.0F); + double var8 = (double)var7.getMinU(); + double var10 = (double)var7.getMinV(); + double var12 = (double)var7.getMaxU(); + double var14 = (double)var7.getMaxV(); + double var16 = 1.0D / 16.0D; + double var18 = (double)(var2 + 1); + double var20 = (double)(var2 + 1); + double var22 = (double)(var2 + 0); + double var24 = (double)(var2 + 0); + double var26 = (double)(var4 + 0); + double var28 = (double)(var4 + 1); + double var30 = (double)(var4 + 1); + double var32 = (double)(var4 + 0); + double var34 = (double)var3 + var16; + double var36 = (double)var3 + var16; + double var38 = (double)var3 + var16; + double var40 = (double)var3 + var16; + if(var6 != 1 && var6 != 2 && var6 != 3 && var6 != 7) { + if(var6 == 8) { + var20 = (double)(var2 + 0); + var18 = var20; + var24 = (double)(var2 + 1); + var22 = var24; + var32 = (double)(var4 + 1); + var26 = var32; + var30 = (double)(var4 + 0); + var28 = var30; + } else if(var6 == 9) { + var24 = (double)(var2 + 0); + var18 = var24; + var22 = (double)(var2 + 1); + var20 = var22; + var28 = (double)(var4 + 0); + var26 = var28; + var32 = (double)(var4 + 1); + var30 = var32; + } + } else { + var24 = (double)(var2 + 1); + var18 = var24; + var22 = (double)(var2 + 0); + var20 = var22; + var28 = (double)(var4 + 1); + var26 = var28; + var32 = (double)(var4 + 0); + var30 = var32; + } + + if(var6 != 2 && var6 != 4) { + if(var6 == 3 || var6 == 5) { + ++var36; + ++var38; + } + } else { + ++var34; + ++var40; + } + + var5.addVertexWithUV(var18, var34, var26, var12, var10); + var5.addVertexWithUV(var20, var36, var28, var12, var14); + var5.addVertexWithUV(var22, var38, var30, var8, var14); + var5.addVertexWithUV(var24, var40, var32, var8, var10); + var5.addVertexWithUV(var24, var40, var32, var8, var10); + var5.addVertexWithUV(var22, var38, var30, var8, var14); + var5.addVertexWithUV(var20, var36, var28, var12, var14); + var5.addVertexWithUV(var18, var34, var26, var12, var10); + return true; + } + + public boolean renderBlockLadder(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + Icon var6 = this.getBlockIconFromSide(var1, 0); + if(this.hasOverrideBlockTexture()) { + var6 = this.overrideBlockTexture; + } + + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + float var7 = 1.0F; + var5.setColorOpaque_F(var7, var7, var7); + double var20 = (double)var6.getMinU(); + double var9 = (double)var6.getMinV(); + double var11 = (double)var6.getMaxU(); + double var13 = (double)var6.getMaxV(); + int var15 = this.blockAccess.getBlockMetadata(var2, var3, var4); + double var16 = 0.0D; + double var18 = (double)0.05F; + if(var15 == 5) { + var5.addVertexWithUV((double)var2 + var18, (double)(var3 + 1) + var16, (double)(var4 + 1) + var16, var20, var9); + var5.addVertexWithUV((double)var2 + var18, (double)(var3 + 0) - var16, (double)(var4 + 1) + var16, var20, var13); + var5.addVertexWithUV((double)var2 + var18, (double)(var3 + 0) - var16, (double)(var4 + 0) - var16, var11, var13); + var5.addVertexWithUV((double)var2 + var18, (double)(var3 + 1) + var16, (double)(var4 + 0) - var16, var11, var9); + } + + if(var15 == 4) { + var5.addVertexWithUV((double)(var2 + 1) - var18, (double)(var3 + 0) - var16, (double)(var4 + 1) + var16, var11, var13); + var5.addVertexWithUV((double)(var2 + 1) - var18, (double)(var3 + 1) + var16, (double)(var4 + 1) + var16, var11, var9); + var5.addVertexWithUV((double)(var2 + 1) - var18, (double)(var3 + 1) + var16, (double)(var4 + 0) - var16, var20, var9); + var5.addVertexWithUV((double)(var2 + 1) - var18, (double)(var3 + 0) - var16, (double)(var4 + 0) - var16, var20, var13); + } + + if(var15 == 3) { + var5.addVertexWithUV((double)(var2 + 1) + var16, (double)(var3 + 0) - var16, (double)var4 + var18, var11, var13); + var5.addVertexWithUV((double)(var2 + 1) + var16, (double)(var3 + 1) + var16, (double)var4 + var18, var11, var9); + var5.addVertexWithUV((double)(var2 + 0) - var16, (double)(var3 + 1) + var16, (double)var4 + var18, var20, var9); + var5.addVertexWithUV((double)(var2 + 0) - var16, (double)(var3 + 0) - var16, (double)var4 + var18, var20, var13); + } + + if(var15 == 2) { + var5.addVertexWithUV((double)(var2 + 1) + var16, (double)(var3 + 1) + var16, (double)(var4 + 1) - var18, var20, var9); + var5.addVertexWithUV((double)(var2 + 1) + var16, (double)(var3 + 0) - var16, (double)(var4 + 1) - var18, var20, var13); + var5.addVertexWithUV((double)(var2 + 0) - var16, (double)(var3 + 0) - var16, (double)(var4 + 1) - var18, var11, var13); + var5.addVertexWithUV((double)(var2 + 0) - var16, (double)(var3 + 1) + var16, (double)(var4 + 1) - var18, var11, var9); + } + + return true; + } + + public boolean renderBlockVine(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + Icon var6 = this.getBlockIconFromSide(var1, 0); + if(this.hasOverrideBlockTexture()) { + var6 = this.overrideBlockTexture; + } + + float var7 = 1.0F; + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + int var8 = var1.colorMultiplier(this.blockAccess, var2, var3, var4); + float var9 = (float)(var8 >> 16 & 255) / 255.0F; + float var10 = (float)(var8 >> 8 & 255) / 255.0F; + float var11 = (float)(var8 & 255) / 255.0F; + var5.setColorOpaque_F(var7 * var9, var7 * var10, var7 * var11); + double var19 = (double)var6.getMinU(); + double var20 = (double)var6.getMinV(); + double var12 = (double)var6.getMaxU(); + double var14 = (double)var6.getMaxV(); + double var16 = (double)0.05F; + int var18 = this.blockAccess.getBlockMetadata(var2, var3, var4); + if((var18 & 2) != 0) { + var5.addVertexWithUV((double)var2 + var16, (double)(var3 + 1), (double)(var4 + 1), var19, var20); + var5.addVertexWithUV((double)var2 + var16, (double)(var3 + 0), (double)(var4 + 1), var19, var14); + var5.addVertexWithUV((double)var2 + var16, (double)(var3 + 0), (double)(var4 + 0), var12, var14); + var5.addVertexWithUV((double)var2 + var16, (double)(var3 + 1), (double)(var4 + 0), var12, var20); + var5.addVertexWithUV((double)var2 + var16, (double)(var3 + 1), (double)(var4 + 0), var12, var20); + var5.addVertexWithUV((double)var2 + var16, (double)(var3 + 0), (double)(var4 + 0), var12, var14); + var5.addVertexWithUV((double)var2 + var16, (double)(var3 + 0), (double)(var4 + 1), var19, var14); + var5.addVertexWithUV((double)var2 + var16, (double)(var3 + 1), (double)(var4 + 1), var19, var20); + } + + if((var18 & 8) != 0) { + var5.addVertexWithUV((double)(var2 + 1) - var16, (double)(var3 + 0), (double)(var4 + 1), var12, var14); + var5.addVertexWithUV((double)(var2 + 1) - var16, (double)(var3 + 1), (double)(var4 + 1), var12, var20); + var5.addVertexWithUV((double)(var2 + 1) - var16, (double)(var3 + 1), (double)(var4 + 0), var19, var20); + var5.addVertexWithUV((double)(var2 + 1) - var16, (double)(var3 + 0), (double)(var4 + 0), var19, var14); + var5.addVertexWithUV((double)(var2 + 1) - var16, (double)(var3 + 0), (double)(var4 + 0), var19, var14); + var5.addVertexWithUV((double)(var2 + 1) - var16, (double)(var3 + 1), (double)(var4 + 0), var19, var20); + var5.addVertexWithUV((double)(var2 + 1) - var16, (double)(var3 + 1), (double)(var4 + 1), var12, var20); + var5.addVertexWithUV((double)(var2 + 1) - var16, (double)(var3 + 0), (double)(var4 + 1), var12, var14); + } + + if((var18 & 4) != 0) { + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), (double)var4 + var16, var12, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 1), (double)var4 + var16, var12, var20); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 1), (double)var4 + var16, var19, var20); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), (double)var4 + var16, var19, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), (double)var4 + var16, var19, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 1), (double)var4 + var16, var19, var20); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 1), (double)var4 + var16, var12, var20); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), (double)var4 + var16, var12, var14); + } + + if((var18 & 1) != 0) { + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 1), (double)(var4 + 1) - var16, var19, var20); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), (double)(var4 + 1) - var16, var19, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), (double)(var4 + 1) - var16, var12, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 1), (double)(var4 + 1) - var16, var12, var20); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 1), (double)(var4 + 1) - var16, var12, var20); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), (double)(var4 + 1) - var16, var12, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), (double)(var4 + 1) - var16, var19, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 1), (double)(var4 + 1) - var16, var19, var20); + } + + if(this.blockAccess.isBlockNormalCube(var2, var3 + 1, var4)) { + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 1) - var16, (double)(var4 + 0), var19, var20); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 1) - var16, (double)(var4 + 1), var19, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 1) - var16, (double)(var4 + 1), var12, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 1) - var16, (double)(var4 + 0), var12, var20); + } + + return true; + } + + public boolean renderBlockPane(BlockPane var1, int var2, int var3, int var4) { + int var5 = this.blockAccess.getHeight(); + Tessellator var6 = Tessellator.instance; + var6.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + float var7 = 1.0F; + int var8 = var1.colorMultiplier(this.blockAccess, var2, var3, var4); + float var9 = (float)(var8 >> 16 & 255) / 255.0F; + float var10 = (float)(var8 >> 8 & 255) / 255.0F; + float var11 = (float)(var8 & 255) / 255.0F; + if(EntityRenderer.anaglyphEnable) { + float var12 = (var9 * 30.0F + var10 * 59.0F + var11 * 11.0F) / 100.0F; + float var13 = (var9 * 30.0F + var10 * 70.0F) / 100.0F; + float var14 = (var9 * 30.0F + var11 * 70.0F) / 100.0F; + var9 = var12; + var10 = var13; + var11 = var14; + } + + var6.setColorOpaque_F(var7 * var9, var7 * var10, var7 * var11); + Icon var64; + Icon var65; + int var66; + if(this.hasOverrideBlockTexture()) { + var64 = this.overrideBlockTexture; + var65 = this.overrideBlockTexture; + } else { + var66 = this.blockAccess.getBlockMetadata(var2, var3, var4); + var64 = this.getBlockIconFromSideAndMetadata(var1, 0, var66); + var65 = var1.getSideTextureIndex(); + } + + var66 = var64.getOriginX(); + int var15 = var64.getOriginY(); + double var16 = (double)var64.getMinU(); + double var18 = (double)var64.getInterpolatedU(8.0D); + double var20 = (double)var64.getMaxU(); + double var22 = (double)var64.getMinV(); + double var24 = (double)var64.getMaxV(); + int var26 = var65.getOriginX(); + int var27 = var65.getOriginY(); + double var28 = (double)var65.getInterpolatedU(7.0D); + double var30 = (double)var65.getInterpolatedU(9.0D); + double var32 = (double)var65.getMinV(); + double var34 = (double)var65.getInterpolatedV(8.0D); + double var36 = (double)var65.getMaxV(); + double var38 = (double)var2; + double var40 = (double)var2 + 0.5D; + double var42 = (double)(var2 + 1); + double var44 = (double)var4; + double var46 = (double)var4 + 0.5D; + double var48 = (double)(var4 + 1); + double var50 = (double)var2 + 0.5D - 1.0D / 16.0D; + double var52 = (double)var2 + 0.5D + 1.0D / 16.0D; + double var54 = (double)var4 + 0.5D - 1.0D / 16.0D; + double var56 = (double)var4 + 0.5D + 1.0D / 16.0D; + boolean var58 = var1.canThisPaneConnectToThisBlockID(this.blockAccess.getBlockId(var2, var3, var4 - 1)); + boolean var59 = var1.canThisPaneConnectToThisBlockID(this.blockAccess.getBlockId(var2, var3, var4 + 1)); + boolean var60 = var1.canThisPaneConnectToThisBlockID(this.blockAccess.getBlockId(var2 - 1, var3, var4)); + boolean var61 = var1.canThisPaneConnectToThisBlockID(this.blockAccess.getBlockId(var2 + 1, var3, var4)); + boolean var62 = var1.shouldSideBeRendered(this.blockAccess, var2, var3 + 1, var4, 1); + boolean var63 = var1.shouldSideBeRendered(this.blockAccess, var2, var3 - 1, var4, 0); + if((!var60 || !var61) && (var60 || var61 || var58 || var59)) { + if(var60 && !var61) { + var6.addVertexWithUV(var38, (double)(var3 + 1), var46, var16, var22); + var6.addVertexWithUV(var38, (double)(var3 + 0), var46, var16, var24); + var6.addVertexWithUV(var40, (double)(var3 + 0), var46, var18, var24); + var6.addVertexWithUV(var40, (double)(var3 + 1), var46, var18, var22); + var6.addVertexWithUV(var40, (double)(var3 + 1), var46, var16, var22); + var6.addVertexWithUV(var40, (double)(var3 + 0), var46, var16, var24); + var6.addVertexWithUV(var38, (double)(var3 + 0), var46, var18, var24); + var6.addVertexWithUV(var38, (double)(var3 + 1), var46, var18, var22); + if(!var59 && !var58) { + var6.addVertexWithUV(var40, (double)(var3 + 1), var56, var28, var32); + var6.addVertexWithUV(var40, (double)(var3 + 0), var56, var28, var36); + var6.addVertexWithUV(var40, (double)(var3 + 0), var54, var30, var36); + var6.addVertexWithUV(var40, (double)(var3 + 1), var54, var30, var32); + var6.addVertexWithUV(var40, (double)(var3 + 1), var54, var28, var32); + var6.addVertexWithUV(var40, (double)(var3 + 0), var54, var28, var36); + var6.addVertexWithUV(var40, (double)(var3 + 0), var56, var30, var36); + var6.addVertexWithUV(var40, (double)(var3 + 1), var56, var30, var32); + } + + if(var62 || var3 < var5 - 1 && this.blockAccess.isAirBlock(var2 - 1, var3 + 1, var4)) { + var6.addVertexWithUV(var38, (double)(var3 + 1) + 0.01D, var56, var30, var34); + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var56, var30, var36); + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var54, var28, var36); + var6.addVertexWithUV(var38, (double)(var3 + 1) + 0.01D, var54, var28, var34); + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var56, var30, var34); + var6.addVertexWithUV(var38, (double)(var3 + 1) + 0.01D, var56, var30, var36); + var6.addVertexWithUV(var38, (double)(var3 + 1) + 0.01D, var54, var28, var36); + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var54, var28, var34); + } + + if(var63 || var3 > 1 && this.blockAccess.isAirBlock(var2 - 1, var3 - 1, var4)) { + var6.addVertexWithUV(var38, (double)var3 - 0.01D, var56, var30, var34); + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var56, var30, var36); + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var54, var28, var36); + var6.addVertexWithUV(var38, (double)var3 - 0.01D, var54, var28, var34); + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var56, var30, var34); + var6.addVertexWithUV(var38, (double)var3 - 0.01D, var56, var30, var36); + var6.addVertexWithUV(var38, (double)var3 - 0.01D, var54, var28, var36); + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var54, var28, var34); + } + } else if(!var60 && var61) { + var6.addVertexWithUV(var40, (double)(var3 + 1), var46, var18, var22); + var6.addVertexWithUV(var40, (double)(var3 + 0), var46, var18, var24); + var6.addVertexWithUV(var42, (double)(var3 + 0), var46, var20, var24); + var6.addVertexWithUV(var42, (double)(var3 + 1), var46, var20, var22); + var6.addVertexWithUV(var42, (double)(var3 + 1), var46, var18, var22); + var6.addVertexWithUV(var42, (double)(var3 + 0), var46, var18, var24); + var6.addVertexWithUV(var40, (double)(var3 + 0), var46, var20, var24); + var6.addVertexWithUV(var40, (double)(var3 + 1), var46, var20, var22); + if(!var59 && !var58) { + var6.addVertexWithUV(var40, (double)(var3 + 1), var54, var28, var32); + var6.addVertexWithUV(var40, (double)(var3 + 0), var54, var28, var36); + var6.addVertexWithUV(var40, (double)(var3 + 0), var56, var30, var36); + var6.addVertexWithUV(var40, (double)(var3 + 1), var56, var30, var32); + var6.addVertexWithUV(var40, (double)(var3 + 1), var56, var28, var32); + var6.addVertexWithUV(var40, (double)(var3 + 0), var56, var28, var36); + var6.addVertexWithUV(var40, (double)(var3 + 0), var54, var30, var36); + var6.addVertexWithUV(var40, (double)(var3 + 1), var54, var30, var32); + } + + if(var62 || var3 < var5 - 1 && this.blockAccess.isAirBlock(var2 + 1, var3 + 1, var4)) { + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var56, var30, var32); + var6.addVertexWithUV(var42, (double)(var3 + 1) + 0.01D, var56, var30, var34); + var6.addVertexWithUV(var42, (double)(var3 + 1) + 0.01D, var54, var28, var34); + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var54, var28, var32); + var6.addVertexWithUV(var42, (double)(var3 + 1) + 0.01D, var56, var30, var32); + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var56, var30, var34); + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var54, var28, var34); + var6.addVertexWithUV(var42, (double)(var3 + 1) + 0.01D, var54, var28, var32); + } + + if(var63 || var3 > 1 && this.blockAccess.isAirBlock(var2 + 1, var3 - 1, var4)) { + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var56, var30, var32); + var6.addVertexWithUV(var42, (double)var3 - 0.01D, var56, var30, var34); + var6.addVertexWithUV(var42, (double)var3 - 0.01D, var54, var28, var34); + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var54, var28, var32); + var6.addVertexWithUV(var42, (double)var3 - 0.01D, var56, var30, var32); + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var56, var30, var34); + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var54, var28, var34); + var6.addVertexWithUV(var42, (double)var3 - 0.01D, var54, var28, var32); + } + } + } else { + var6.addVertexWithUV(var38, (double)(var3 + 1), var46, var16, var22); + var6.addVertexWithUV(var38, (double)(var3 + 0), var46, var16, var24); + var6.addVertexWithUV(var42, (double)(var3 + 0), var46, var20, var24); + var6.addVertexWithUV(var42, (double)(var3 + 1), var46, var20, var22); + var6.addVertexWithUV(var42, (double)(var3 + 1), var46, var16, var22); + var6.addVertexWithUV(var42, (double)(var3 + 0), var46, var16, var24); + var6.addVertexWithUV(var38, (double)(var3 + 0), var46, var20, var24); + var6.addVertexWithUV(var38, (double)(var3 + 1), var46, var20, var22); + if(var62) { + var6.addVertexWithUV(var38, (double)(var3 + 1) + 0.01D, var56, var30, var36); + var6.addVertexWithUV(var42, (double)(var3 + 1) + 0.01D, var56, var30, var32); + var6.addVertexWithUV(var42, (double)(var3 + 1) + 0.01D, var54, var28, var32); + var6.addVertexWithUV(var38, (double)(var3 + 1) + 0.01D, var54, var28, var36); + var6.addVertexWithUV(var42, (double)(var3 + 1) + 0.01D, var56, var30, var36); + var6.addVertexWithUV(var38, (double)(var3 + 1) + 0.01D, var56, var30, var32); + var6.addVertexWithUV(var38, (double)(var3 + 1) + 0.01D, var54, var28, var32); + var6.addVertexWithUV(var42, (double)(var3 + 1) + 0.01D, var54, var28, var36); + } else { + if(var3 < var5 - 1 && this.blockAccess.isAirBlock(var2 - 1, var3 + 1, var4)) { + var6.addVertexWithUV(var38, (double)(var3 + 1) + 0.01D, var56, var30, var34); + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var56, var30, var36); + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var54, var28, var36); + var6.addVertexWithUV(var38, (double)(var3 + 1) + 0.01D, var54, var28, var34); + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var56, var30, var34); + var6.addVertexWithUV(var38, (double)(var3 + 1) + 0.01D, var56, var30, var36); + var6.addVertexWithUV(var38, (double)(var3 + 1) + 0.01D, var54, var28, var36); + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var54, var28, var34); + } + + if(var3 < var5 - 1 && this.blockAccess.isAirBlock(var2 + 1, var3 + 1, var4)) { + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var56, var30, var32); + var6.addVertexWithUV(var42, (double)(var3 + 1) + 0.01D, var56, var30, var34); + var6.addVertexWithUV(var42, (double)(var3 + 1) + 0.01D, var54, var28, var34); + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var54, var28, var32); + var6.addVertexWithUV(var42, (double)(var3 + 1) + 0.01D, var56, var30, var32); + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var56, var30, var34); + var6.addVertexWithUV(var40, (double)(var3 + 1) + 0.01D, var54, var28, var34); + var6.addVertexWithUV(var42, (double)(var3 + 1) + 0.01D, var54, var28, var32); + } + } + + if(var63) { + var6.addVertexWithUV(var38, (double)var3 - 0.01D, var56, var30, var36); + var6.addVertexWithUV(var42, (double)var3 - 0.01D, var56, var30, var32); + var6.addVertexWithUV(var42, (double)var3 - 0.01D, var54, var28, var32); + var6.addVertexWithUV(var38, (double)var3 - 0.01D, var54, var28, var36); + var6.addVertexWithUV(var42, (double)var3 - 0.01D, var56, var30, var36); + var6.addVertexWithUV(var38, (double)var3 - 0.01D, var56, var30, var32); + var6.addVertexWithUV(var38, (double)var3 - 0.01D, var54, var28, var32); + var6.addVertexWithUV(var42, (double)var3 - 0.01D, var54, var28, var36); + } else { + if(var3 > 1 && this.blockAccess.isAirBlock(var2 - 1, var3 - 1, var4)) { + var6.addVertexWithUV(var38, (double)var3 - 0.01D, var56, var30, var34); + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var56, var30, var36); + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var54, var28, var36); + var6.addVertexWithUV(var38, (double)var3 - 0.01D, var54, var28, var34); + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var56, var30, var34); + var6.addVertexWithUV(var38, (double)var3 - 0.01D, var56, var30, var36); + var6.addVertexWithUV(var38, (double)var3 - 0.01D, var54, var28, var36); + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var54, var28, var34); + } + + if(var3 > 1 && this.blockAccess.isAirBlock(var2 + 1, var3 - 1, var4)) { + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var56, var30, var32); + var6.addVertexWithUV(var42, (double)var3 - 0.01D, var56, var30, var34); + var6.addVertexWithUV(var42, (double)var3 - 0.01D, var54, var28, var34); + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var54, var28, var32); + var6.addVertexWithUV(var42, (double)var3 - 0.01D, var56, var30, var32); + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var56, var30, var34); + var6.addVertexWithUV(var40, (double)var3 - 0.01D, var54, var28, var34); + var6.addVertexWithUV(var42, (double)var3 - 0.01D, var54, var28, var32); + } + } + } + + if((!var58 || !var59) && (var60 || var61 || var58 || var59)) { + if(var58 && !var59) { + var6.addVertexWithUV(var40, (double)(var3 + 1), var44, var16, var22); + var6.addVertexWithUV(var40, (double)(var3 + 0), var44, var16, var24); + var6.addVertexWithUV(var40, (double)(var3 + 0), var46, var18, var24); + var6.addVertexWithUV(var40, (double)(var3 + 1), var46, var18, var22); + var6.addVertexWithUV(var40, (double)(var3 + 1), var46, var16, var22); + var6.addVertexWithUV(var40, (double)(var3 + 0), var46, var16, var24); + var6.addVertexWithUV(var40, (double)(var3 + 0), var44, var18, var24); + var6.addVertexWithUV(var40, (double)(var3 + 1), var44, var18, var22); + if(!var61 && !var60) { + var6.addVertexWithUV(var50, (double)(var3 + 1), var46, var28, var32); + var6.addVertexWithUV(var50, (double)(var3 + 0), var46, var28, var36); + var6.addVertexWithUV(var52, (double)(var3 + 0), var46, var30, var36); + var6.addVertexWithUV(var52, (double)(var3 + 1), var46, var30, var32); + var6.addVertexWithUV(var52, (double)(var3 + 1), var46, var28, var32); + var6.addVertexWithUV(var52, (double)(var3 + 0), var46, var28, var36); + var6.addVertexWithUV(var50, (double)(var3 + 0), var46, var30, var36); + var6.addVertexWithUV(var50, (double)(var3 + 1), var46, var30, var32); + } + + if(var62 || var3 < var5 - 1 && this.blockAccess.isAirBlock(var2, var3 + 1, var4 - 1)) { + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var44, var30, var32); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var46, var30, var34); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var46, var28, var34); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var44, var28, var32); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var46, var30, var32); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var44, var30, var34); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var44, var28, var34); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var46, var28, var32); + } + + if(var63 || var3 > 1 && this.blockAccess.isAirBlock(var2, var3 - 1, var4 - 1)) { + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var44, var30, var32); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var46, var30, var34); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var46, var28, var34); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var44, var28, var32); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var46, var30, var32); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var44, var30, var34); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var44, var28, var34); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var46, var28, var32); + } + } else if(!var58 && var59) { + var6.addVertexWithUV(var40, (double)(var3 + 1), var46, var18, var22); + var6.addVertexWithUV(var40, (double)(var3 + 0), var46, var18, var24); + var6.addVertexWithUV(var40, (double)(var3 + 0), var48, var20, var24); + var6.addVertexWithUV(var40, (double)(var3 + 1), var48, var20, var22); + var6.addVertexWithUV(var40, (double)(var3 + 1), var48, var18, var22); + var6.addVertexWithUV(var40, (double)(var3 + 0), var48, var18, var24); + var6.addVertexWithUV(var40, (double)(var3 + 0), var46, var20, var24); + var6.addVertexWithUV(var40, (double)(var3 + 1), var46, var20, var22); + if(!var61 && !var60) { + var6.addVertexWithUV(var52, (double)(var3 + 1), var46, var28, var32); + var6.addVertexWithUV(var52, (double)(var3 + 0), var46, var28, var36); + var6.addVertexWithUV(var50, (double)(var3 + 0), var46, var30, var36); + var6.addVertexWithUV(var50, (double)(var3 + 1), var46, var30, var32); + var6.addVertexWithUV(var50, (double)(var3 + 1), var46, var28, var32); + var6.addVertexWithUV(var50, (double)(var3 + 0), var46, var28, var36); + var6.addVertexWithUV(var52, (double)(var3 + 0), var46, var30, var36); + var6.addVertexWithUV(var52, (double)(var3 + 1), var46, var30, var32); + } + + if(var62 || var3 < var5 - 1 && this.blockAccess.isAirBlock(var2, var3 + 1, var4 + 1)) { + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var46, var28, var34); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var48, var28, var36); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var48, var30, var36); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var46, var30, var34); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var48, var28, var34); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var46, var28, var36); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var46, var30, var36); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var48, var30, var34); + } + + if(var63 || var3 > 1 && this.blockAccess.isAirBlock(var2, var3 - 1, var4 + 1)) { + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var46, var28, var34); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var48, var28, var36); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var48, var30, var36); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var46, var30, var34); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var48, var28, var34); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var46, var28, var36); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var46, var30, var36); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var48, var30, var34); + } + } + } else { + var6.addVertexWithUV(var40, (double)(var3 + 1), var48, var16, var22); + var6.addVertexWithUV(var40, (double)(var3 + 0), var48, var16, var24); + var6.addVertexWithUV(var40, (double)(var3 + 0), var44, var20, var24); + var6.addVertexWithUV(var40, (double)(var3 + 1), var44, var20, var22); + var6.addVertexWithUV(var40, (double)(var3 + 1), var44, var16, var22); + var6.addVertexWithUV(var40, (double)(var3 + 0), var44, var16, var24); + var6.addVertexWithUV(var40, (double)(var3 + 0), var48, var20, var24); + var6.addVertexWithUV(var40, (double)(var3 + 1), var48, var20, var22); + if(var62) { + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var48, var30, var36); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var44, var30, var32); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var44, var28, var32); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var48, var28, var36); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var44, var30, var36); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var48, var30, var32); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var48, var28, var32); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var44, var28, var36); + } else { + if(var3 < var5 - 1 && this.blockAccess.isAirBlock(var2, var3 + 1, var4 - 1)) { + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var44, var30, var32); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var46, var30, var34); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var46, var28, var34); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var44, var28, var32); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var46, var30, var32); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var44, var30, var34); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var44, var28, var34); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var46, var28, var32); + } + + if(var3 < var5 - 1 && this.blockAccess.isAirBlock(var2, var3 + 1, var4 + 1)) { + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var46, var28, var34); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var48, var28, var36); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var48, var30, var36); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var46, var30, var34); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var48, var28, var34); + var6.addVertexWithUV(var50, (double)(var3 + 1) + 0.005D, var46, var28, var36); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var46, var30, var36); + var6.addVertexWithUV(var52, (double)(var3 + 1) + 0.005D, var48, var30, var34); + } + } + + if(var63) { + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var48, var30, var36); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var44, var30, var32); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var44, var28, var32); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var48, var28, var36); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var44, var30, var36); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var48, var30, var32); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var48, var28, var32); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var44, var28, var36); + } else { + if(var3 > 1 && this.blockAccess.isAirBlock(var2, var3 - 1, var4 - 1)) { + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var44, var30, var32); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var46, var30, var34); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var46, var28, var34); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var44, var28, var32); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var46, var30, var32); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var44, var30, var34); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var44, var28, var34); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var46, var28, var32); + } + + if(var3 > 1 && this.blockAccess.isAirBlock(var2, var3 - 1, var4 + 1)) { + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var46, var28, var34); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var48, var28, var36); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var48, var30, var36); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var46, var30, var34); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var48, var28, var34); + var6.addVertexWithUV(var50, (double)var3 - 0.005D, var46, var28, var36); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var46, var30, var36); + var6.addVertexWithUV(var52, (double)var3 - 0.005D, var48, var30, var34); + } + } + } + + return true; + } + + public boolean renderCrossedSquares(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + float var6 = 1.0F; + int var7 = var1.colorMultiplier(this.blockAccess, var2, var3, var4); + float var8 = (float)(var7 >> 16 & 255) / 255.0F; + float var9 = (float)(var7 >> 8 & 255) / 255.0F; + float var10 = (float)(var7 & 255) / 255.0F; + if(EntityRenderer.anaglyphEnable) { + float var11 = (var8 * 30.0F + var9 * 59.0F + var10 * 11.0F) / 100.0F; + float var12 = (var8 * 30.0F + var9 * 70.0F) / 100.0F; + float var13 = (var8 * 30.0F + var10 * 70.0F) / 100.0F; + var8 = var11; + var9 = var12; + var10 = var13; + } + + var5.setColorOpaque_F(var6 * var8, var6 * var9, var6 * var10); + double var19 = (double)var2; + double var20 = (double)var3; + double var15 = (double)var4; + if(var1 == Block.tallGrass) { + long var17 = (long)(var2 * 3129871) ^ (long)var4 * 116129781L ^ (long)var3; + var17 = var17 * var17 * 42317861L + var17 * 11L; + var19 += ((double)((float)(var17 >> 16 & 15L) / 15.0F) - 0.5D) * 0.5D; + var20 += ((double)((float)(var17 >> 20 & 15L) / 15.0F) - 1.0D) * 0.2D; + var15 += ((double)((float)(var17 >> 24 & 15L) / 15.0F) - 0.5D) * 0.5D; + } + + this.drawCrossedSquares(var1, this.blockAccess.getBlockMetadata(var2, var3, var4), var19, var20, var15, 1.0F); + return true; + } + + public boolean renderBlockStem(Block var1, int var2, int var3, int var4) { + BlockStem var5 = (BlockStem)var1; + Tessellator var6 = Tessellator.instance; + var6.setBrightness(var5.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + float var7 = 1.0F; + int var8 = var5.colorMultiplier(this.blockAccess, var2, var3, var4); + float var9 = (float)(var8 >> 16 & 255) / 255.0F; + float var10 = (float)(var8 >> 8 & 255) / 255.0F; + float var11 = (float)(var8 & 255) / 255.0F; + if(EntityRenderer.anaglyphEnable) { + float var12 = (var9 * 30.0F + var10 * 59.0F + var11 * 11.0F) / 100.0F; + float var13 = (var9 * 30.0F + var10 * 70.0F) / 100.0F; + float var14 = (var9 * 30.0F + var11 * 70.0F) / 100.0F; + var9 = var12; + var10 = var13; + var11 = var14; + } + + var6.setColorOpaque_F(var7 * var9, var7 * var10, var7 * var11); + var5.setBlockBoundsBasedOnState(this.blockAccess, var2, var3, var4); + int var15 = var5.getState(this.blockAccess, var2, var3, var4); + if(var15 < 0) { + this.renderBlockStemSmall(var5, this.blockAccess.getBlockMetadata(var2, var3, var4), this.renderMaxY, (double)var2, (double)((float)var3 - 1.0F / 16.0F), (double)var4); + } else { + this.renderBlockStemSmall(var5, this.blockAccess.getBlockMetadata(var2, var3, var4), 0.5D, (double)var2, (double)((float)var3 - 1.0F / 16.0F), (double)var4); + this.renderBlockStemBig(var5, this.blockAccess.getBlockMetadata(var2, var3, var4), var15, this.renderMaxY, (double)var2, (double)((float)var3 - 1.0F / 16.0F), (double)var4); + } + + return true; + } + + public boolean renderBlockCrops(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + var5.setColorOpaque_F(1.0F, 1.0F, 1.0F); + this.renderBlockCropsImpl(var1, this.blockAccess.getBlockMetadata(var2, var3, var4), (double)var2, (double)((float)var3 - 1.0F / 16.0F), (double)var4); + return true; + } + + public void renderTorchAtAngle(Block var1, double var2, double var4, double var6, double var8, double var10, int var12) { + Tessellator var13 = Tessellator.instance; + Icon var14 = this.getBlockIconFromSideAndMetadata(var1, 0, var12); + if(this.hasOverrideBlockTexture()) { + var14 = this.overrideBlockTexture; + } + + double var15 = (double)var14.getMinU(); + double var17 = (double)var14.getMinV(); + double var19 = (double)var14.getMaxU(); + double var21 = (double)var14.getMaxV(); + double var23 = (double)var14.getInterpolatedU(7.0D); + double var25 = (double)var14.getInterpolatedV(6.0D); + double var27 = (double)var14.getInterpolatedU(9.0D); + double var29 = (double)var14.getInterpolatedV(8.0D); + double var31 = (double)var14.getInterpolatedU(7.0D); + double var33 = (double)var14.getInterpolatedV(13.0D); + double var35 = (double)var14.getInterpolatedU(9.0D); + double var37 = (double)var14.getInterpolatedV(15.0D); + var2 += 0.5D; + var6 += 0.5D; + double var39 = var2 - 0.5D; + double var41 = var2 + 0.5D; + double var43 = var6 - 0.5D; + double var45 = var6 + 0.5D; + double var47 = 1.0D / 16.0D; + double var49 = 0.625D; + var13.addVertexWithUV(var2 + var8 * (1.0D - var49) - var47, var4 + var49, var6 + var10 * (1.0D - var49) - var47, var23, var25); + var13.addVertexWithUV(var2 + var8 * (1.0D - var49) - var47, var4 + var49, var6 + var10 * (1.0D - var49) + var47, var23, var29); + var13.addVertexWithUV(var2 + var8 * (1.0D - var49) + var47, var4 + var49, var6 + var10 * (1.0D - var49) + var47, var27, var29); + var13.addVertexWithUV(var2 + var8 * (1.0D - var49) + var47, var4 + var49, var6 + var10 * (1.0D - var49) - var47, var27, var25); + var13.addVertexWithUV(var2 + var47 + var8, var4, var6 - var47 + var10, var35, var33); + var13.addVertexWithUV(var2 + var47 + var8, var4, var6 + var47 + var10, var35, var37); + var13.addVertexWithUV(var2 - var47 + var8, var4, var6 + var47 + var10, var31, var37); + var13.addVertexWithUV(var2 - var47 + var8, var4, var6 - var47 + var10, var31, var33); + var13.addVertexWithUV(var2 - var47, var4 + 1.0D, var43, var15, var17); + var13.addVertexWithUV(var2 - var47 + var8, var4 + 0.0D, var43 + var10, var15, var21); + var13.addVertexWithUV(var2 - var47 + var8, var4 + 0.0D, var45 + var10, var19, var21); + var13.addVertexWithUV(var2 - var47, var4 + 1.0D, var45, var19, var17); + var13.addVertexWithUV(var2 + var47, var4 + 1.0D, var45, var15, var17); + var13.addVertexWithUV(var2 + var8 + var47, var4 + 0.0D, var45 + var10, var15, var21); + var13.addVertexWithUV(var2 + var8 + var47, var4 + 0.0D, var43 + var10, var19, var21); + var13.addVertexWithUV(var2 + var47, var4 + 1.0D, var43, var19, var17); + var13.addVertexWithUV(var39, var4 + 1.0D, var6 + var47, var15, var17); + var13.addVertexWithUV(var39 + var8, var4 + 0.0D, var6 + var47 + var10, var15, var21); + var13.addVertexWithUV(var41 + var8, var4 + 0.0D, var6 + var47 + var10, var19, var21); + var13.addVertexWithUV(var41, var4 + 1.0D, var6 + var47, var19, var17); + var13.addVertexWithUV(var41, var4 + 1.0D, var6 - var47, var15, var17); + var13.addVertexWithUV(var41 + var8, var4 + 0.0D, var6 - var47 + var10, var15, var21); + var13.addVertexWithUV(var39 + var8, var4 + 0.0D, var6 - var47 + var10, var19, var21); + var13.addVertexWithUV(var39, var4 + 1.0D, var6 - var47, var19, var17); + } + + public void drawCrossedSquares(Block var1, int var2, double var3, double var5, double var7, float var9) { + Tessellator var10 = Tessellator.instance; + Icon var11 = this.getBlockIconFromSideAndMetadata(var1, 0, var2); + if(this.hasOverrideBlockTexture()) { + var11 = this.overrideBlockTexture; + } + + double var12 = (double)var11.getMinU(); + double var14 = (double)var11.getMinV(); + double var16 = (double)var11.getMaxU(); + double var18 = (double)var11.getMaxV(); + double var20 = 0.45D * (double)var9; + double var22 = var3 + 0.5D - var20; + double var24 = var3 + 0.5D + var20; + double var26 = var7 + 0.5D - var20; + double var28 = var7 + 0.5D + var20; + var10.addVertexWithUV(var22, var5 + (double)var9, var26, var12, var14); + var10.addVertexWithUV(var22, var5 + 0.0D, var26, var12, var18); + var10.addVertexWithUV(var24, var5 + 0.0D, var28, var16, var18); + var10.addVertexWithUV(var24, var5 + (double)var9, var28, var16, var14); + var10.addVertexWithUV(var24, var5 + (double)var9, var28, var12, var14); + var10.addVertexWithUV(var24, var5 + 0.0D, var28, var12, var18); + var10.addVertexWithUV(var22, var5 + 0.0D, var26, var16, var18); + var10.addVertexWithUV(var22, var5 + (double)var9, var26, var16, var14); + var10.addVertexWithUV(var22, var5 + (double)var9, var28, var12, var14); + var10.addVertexWithUV(var22, var5 + 0.0D, var28, var12, var18); + var10.addVertexWithUV(var24, var5 + 0.0D, var26, var16, var18); + var10.addVertexWithUV(var24, var5 + (double)var9, var26, var16, var14); + var10.addVertexWithUV(var24, var5 + (double)var9, var26, var12, var14); + var10.addVertexWithUV(var24, var5 + 0.0D, var26, var12, var18); + var10.addVertexWithUV(var22, var5 + 0.0D, var28, var16, var18); + var10.addVertexWithUV(var22, var5 + (double)var9, var28, var16, var14); + } + + public void renderBlockStemSmall(Block var1, int var2, double var3, double var5, double var7, double var9) { + Tessellator var11 = Tessellator.instance; + Icon var12 = this.getBlockIconFromSideAndMetadata(var1, 0, var2); + if(this.hasOverrideBlockTexture()) { + var12 = this.overrideBlockTexture; + } + + double var13 = (double)var12.getMinU(); + double var15 = (double)var12.getMinV(); + double var17 = (double)var12.getMaxU(); + double var19 = (double)var12.getInterpolatedV(var3 * 16.0D); + double var21 = var5 + 0.5D - (double)0.45F; + double var23 = var5 + 0.5D + (double)0.45F; + double var25 = var9 + 0.5D - (double)0.45F; + double var27 = var9 + 0.5D + (double)0.45F; + var11.addVertexWithUV(var21, var7 + var3, var25, var13, var15); + var11.addVertexWithUV(var21, var7 + 0.0D, var25, var13, var19); + var11.addVertexWithUV(var23, var7 + 0.0D, var27, var17, var19); + var11.addVertexWithUV(var23, var7 + var3, var27, var17, var15); + var11.addVertexWithUV(var23, var7 + var3, var27, var13, var15); + var11.addVertexWithUV(var23, var7 + 0.0D, var27, var13, var19); + var11.addVertexWithUV(var21, var7 + 0.0D, var25, var17, var19); + var11.addVertexWithUV(var21, var7 + var3, var25, var17, var15); + var11.addVertexWithUV(var21, var7 + var3, var27, var13, var15); + var11.addVertexWithUV(var21, var7 + 0.0D, var27, var13, var19); + var11.addVertexWithUV(var23, var7 + 0.0D, var25, var17, var19); + var11.addVertexWithUV(var23, var7 + var3, var25, var17, var15); + var11.addVertexWithUV(var23, var7 + var3, var25, var13, var15); + var11.addVertexWithUV(var23, var7 + 0.0D, var25, var13, var19); + var11.addVertexWithUV(var21, var7 + 0.0D, var27, var17, var19); + var11.addVertexWithUV(var21, var7 + var3, var27, var17, var15); + } + + public boolean renderBlockLilyPad(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + Icon var6 = this.getBlockIconFromSide(var1, 1); + if(this.hasOverrideBlockTexture()) { + var6 = this.overrideBlockTexture; + } + + float var7 = 0.015625F; + double var8 = (double)var6.getMinU(); + double var10 = (double)var6.getMinV(); + double var12 = (double)var6.getMaxU(); + double var14 = (double)var6.getMaxV(); + long var16 = (long)(var2 * 3129871) ^ (long)var4 * 116129781L ^ (long)var3; + var16 = var16 * var16 * 42317861L + var16 * 11L; + int var18 = (int)(var16 >> 16 & 3L); + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + float var19 = (float)var2 + 0.5F; + float var20 = (float)var4 + 0.5F; + float var21 = (float)(var18 & 1) * 0.5F * (float)(1 - var18 / 2 % 2 * 2); + float var22 = (float)(var18 + 1 & 1) * 0.5F * (float)(1 - (var18 + 1) / 2 % 2 * 2); + var5.setColorOpaque_I(var1.getBlockColor()); + var5.addVertexWithUV((double)(var19 + var21 - var22), (double)((float)var3 + var7), (double)(var20 + var21 + var22), var8, var10); + var5.addVertexWithUV((double)(var19 + var21 + var22), (double)((float)var3 + var7), (double)(var20 - var21 + var22), var12, var10); + var5.addVertexWithUV((double)(var19 - var21 + var22), (double)((float)var3 + var7), (double)(var20 - var21 - var22), var12, var14); + var5.addVertexWithUV((double)(var19 - var21 - var22), (double)((float)var3 + var7), (double)(var20 + var21 - var22), var8, var14); + var5.setColorOpaque_I((var1.getBlockColor() & 16711422) >> 1); + var5.addVertexWithUV((double)(var19 - var21 - var22), (double)((float)var3 + var7), (double)(var20 + var21 - var22), var8, var14); + var5.addVertexWithUV((double)(var19 - var21 + var22), (double)((float)var3 + var7), (double)(var20 - var21 - var22), var12, var14); + var5.addVertexWithUV((double)(var19 + var21 + var22), (double)((float)var3 + var7), (double)(var20 - var21 + var22), var12, var10); + var5.addVertexWithUV((double)(var19 + var21 - var22), (double)((float)var3 + var7), (double)(var20 + var21 + var22), var8, var10); + return true; + } + + public void renderBlockStemBig(BlockStem var1, int var2, int var3, double var4, double var6, double var8, double var10) { + Tessellator var12 = Tessellator.instance; + Icon var13 = var1.func_94368_p(); + if(this.hasOverrideBlockTexture()) { + var13 = this.overrideBlockTexture; + } + + double var14 = (double)var13.getMinU(); + double var16 = (double)var13.getMinV(); + double var18 = (double)var13.getMaxU(); + double var20 = (double)var13.getMaxV(); + double var22 = var6 + 0.5D - 0.5D; + double var24 = var6 + 0.5D + 0.5D; + double var26 = var10 + 0.5D - 0.5D; + double var28 = var10 + 0.5D + 0.5D; + double var30 = var6 + 0.5D; + double var32 = var10 + 0.5D; + if((var3 + 1) / 2 % 2 == 1) { + double var34 = var18; + var18 = var14; + var14 = var34; + } + + if(var3 < 2) { + var12.addVertexWithUV(var22, var8 + var4, var32, var14, var16); + var12.addVertexWithUV(var22, var8 + 0.0D, var32, var14, var20); + var12.addVertexWithUV(var24, var8 + 0.0D, var32, var18, var20); + var12.addVertexWithUV(var24, var8 + var4, var32, var18, var16); + var12.addVertexWithUV(var24, var8 + var4, var32, var18, var16); + var12.addVertexWithUV(var24, var8 + 0.0D, var32, var18, var20); + var12.addVertexWithUV(var22, var8 + 0.0D, var32, var14, var20); + var12.addVertexWithUV(var22, var8 + var4, var32, var14, var16); + } else { + var12.addVertexWithUV(var30, var8 + var4, var28, var14, var16); + var12.addVertexWithUV(var30, var8 + 0.0D, var28, var14, var20); + var12.addVertexWithUV(var30, var8 + 0.0D, var26, var18, var20); + var12.addVertexWithUV(var30, var8 + var4, var26, var18, var16); + var12.addVertexWithUV(var30, var8 + var4, var26, var18, var16); + var12.addVertexWithUV(var30, var8 + 0.0D, var26, var18, var20); + var12.addVertexWithUV(var30, var8 + 0.0D, var28, var14, var20); + var12.addVertexWithUV(var30, var8 + var4, var28, var14, var16); + } + + } + + public void renderBlockCropsImpl(Block var1, int var2, double var3, double var5, double var7) { + Tessellator var9 = Tessellator.instance; + Icon var10 = this.getBlockIconFromSideAndMetadata(var1, 0, var2); + if(this.hasOverrideBlockTexture()) { + var10 = this.overrideBlockTexture; + } + + double var11 = (double)var10.getMinU(); + double var13 = (double)var10.getMinV(); + double var15 = (double)var10.getMaxU(); + double var17 = (double)var10.getMaxV(); + double var19 = var3 + 0.5D - 0.25D; + double var21 = var3 + 0.5D + 0.25D; + double var23 = var7 + 0.5D - 0.5D; + double var25 = var7 + 0.5D + 0.5D; + var9.addVertexWithUV(var19, var5 + 1.0D, var23, var11, var13); + var9.addVertexWithUV(var19, var5 + 0.0D, var23, var11, var17); + var9.addVertexWithUV(var19, var5 + 0.0D, var25, var15, var17); + var9.addVertexWithUV(var19, var5 + 1.0D, var25, var15, var13); + var9.addVertexWithUV(var19, var5 + 1.0D, var25, var11, var13); + var9.addVertexWithUV(var19, var5 + 0.0D, var25, var11, var17); + var9.addVertexWithUV(var19, var5 + 0.0D, var23, var15, var17); + var9.addVertexWithUV(var19, var5 + 1.0D, var23, var15, var13); + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var11, var13); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var11, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var23, var15, var17); + var9.addVertexWithUV(var21, var5 + 1.0D, var23, var15, var13); + var9.addVertexWithUV(var21, var5 + 1.0D, var23, var11, var13); + var9.addVertexWithUV(var21, var5 + 0.0D, var23, var11, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var15, var17); + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var15, var13); + var19 = var3 + 0.5D - 0.5D; + var21 = var3 + 0.5D + 0.5D; + var23 = var7 + 0.5D - 0.25D; + var25 = var7 + 0.5D + 0.25D; + var9.addVertexWithUV(var19, var5 + 1.0D, var23, var11, var13); + var9.addVertexWithUV(var19, var5 + 0.0D, var23, var11, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var23, var15, var17); + var9.addVertexWithUV(var21, var5 + 1.0D, var23, var15, var13); + var9.addVertexWithUV(var21, var5 + 1.0D, var23, var11, var13); + var9.addVertexWithUV(var21, var5 + 0.0D, var23, var11, var17); + var9.addVertexWithUV(var19, var5 + 0.0D, var23, var15, var17); + var9.addVertexWithUV(var19, var5 + 1.0D, var23, var15, var13); + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var11, var13); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var11, var17); + var9.addVertexWithUV(var19, var5 + 0.0D, var25, var15, var17); + var9.addVertexWithUV(var19, var5 + 1.0D, var25, var15, var13); + var9.addVertexWithUV(var19, var5 + 1.0D, var25, var11, var13); + var9.addVertexWithUV(var19, var5 + 0.0D, var25, var11, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var15, var17); + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var15, var13); + } + + public boolean renderBlockFluids(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + int var6 = var1.colorMultiplier(this.blockAccess, var2, var3, var4); + float var7 = (float)(var6 >> 16 & 255) / 255.0F; + float var8 = (float)(var6 >> 8 & 255) / 255.0F; + float var9 = (float)(var6 & 255) / 255.0F; + boolean var10 = var1.shouldSideBeRendered(this.blockAccess, var2, var3 + 1, var4, 1); + boolean var11 = var1.shouldSideBeRendered(this.blockAccess, var2, var3 - 1, var4, 0); + boolean[] var12 = new boolean[]{var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 - 1, 2), var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 + 1, 3), var1.shouldSideBeRendered(this.blockAccess, var2 - 1, var3, var4, 4), var1.shouldSideBeRendered(this.blockAccess, var2 + 1, var3, var4, 5)}; + if(!var10 && !var11 && !var12[0] && !var12[1] && !var12[2] && !var12[3]) { + return false; + } else { + boolean var13 = false; + float var14 = 0.5F; + float var15 = 1.0F; + float var16 = 0.8F; + float var17 = 0.6F; + double var18 = 0.0D; + double var20 = 1.0D; + Material var22 = var1.blockMaterial; + int var23 = this.blockAccess.getBlockMetadata(var2, var3, var4); + double var24 = (double)this.getFluidHeight(var2, var3, var4, var22); + double var26 = (double)this.getFluidHeight(var2, var3, var4 + 1, var22); + double var28 = (double)this.getFluidHeight(var2 + 1, var3, var4 + 1, var22); + double var30 = (double)this.getFluidHeight(var2 + 1, var3, var4, var22); + double var32 = (double)0.001F; + float var52; + float var53; + if(this.renderAllFaces || var10) { + var13 = true; + Icon var34 = this.getBlockIconFromSideAndMetadata(var1, 1, var23); + float var35 = (float)BlockFluid.getFlowDirection(this.blockAccess, var2, var3, var4, var22); + if(var35 > -999.0F) { + var34 = this.getBlockIconFromSideAndMetadata(var1, 2, var23); + } + + var24 -= var32; + var26 -= var32; + var28 -= var32; + var30 -= var32; + double var36; + double var38; + double var40; + double var42; + double var44; + double var46; + double var48; + double var50; + if(var35 < -999.0F) { + var36 = (double)var34.getInterpolatedU(0.0D); + var44 = (double)var34.getInterpolatedV(0.0D); + var38 = var36; + var46 = (double)var34.getInterpolatedV(16.0D); + var40 = (double)var34.getInterpolatedU(16.0D); + var48 = var46; + var42 = var40; + var50 = var44; + } else { + var52 = MathHelper.sin(var35) * 0.25F; + var53 = MathHelper.cos(var35) * 0.25F; + var36 = (double)var34.getInterpolatedU((double)(8.0F + (-var53 - var52) * 16.0F)); + var44 = (double)var34.getInterpolatedV((double)(8.0F + (-var53 + var52) * 16.0F)); + var38 = (double)var34.getInterpolatedU((double)(8.0F + (-var53 + var52) * 16.0F)); + var46 = (double)var34.getInterpolatedV((double)(8.0F + (var53 + var52) * 16.0F)); + var40 = (double)var34.getInterpolatedU((double)(8.0F + (var53 + var52) * 16.0F)); + var48 = (double)var34.getInterpolatedV((double)(8.0F + (var53 - var52) * 16.0F)); + var42 = (double)var34.getInterpolatedU((double)(8.0F + (var53 - var52) * 16.0F)); + var50 = (double)var34.getInterpolatedV((double)(8.0F + (-var53 - var52) * 16.0F)); + } + + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + var52 = 1.0F; + var5.setColorOpaque_F(var15 * var52 * var7, var15 * var52 * var8, var15 * var52 * var9); + var5.addVertexWithUV((double)(var2 + 0), (double)var3 + var24, (double)(var4 + 0), var36, var44); + var5.addVertexWithUV((double)(var2 + 0), (double)var3 + var26, (double)(var4 + 1), var38, var46); + var5.addVertexWithUV((double)(var2 + 1), (double)var3 + var28, (double)(var4 + 1), var40, var48); + var5.addVertexWithUV((double)(var2 + 1), (double)var3 + var30, (double)(var4 + 0), var42, var50); + } + + if(this.renderAllFaces || var11) { + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4)); + float var57 = 1.0F; + var5.setColorOpaque_F(var14 * var57, var14 * var57, var14 * var57); + this.renderFaceYNeg(var1, (double)var2, (double)var3 + var32, (double)var4, this.getBlockIconFromSide(var1, 0)); + var13 = true; + } + + for(int var59 = 0; var59 < 4; ++var59) { + int var58 = var2; + int var37 = var4; + if(var59 == 0) { + var37 = var4 - 1; + } + + if(var59 == 1) { + ++var37; + } + + if(var59 == 2) { + var58 = var2 - 1; + } + + if(var59 == 3) { + ++var58; + } + + Icon var60 = this.getBlockIconFromSideAndMetadata(var1, var59 + 2, var23); + if(this.renderAllFaces || var12[var59]) { + double var39; + double var41; + double var43; + double var45; + double var47; + double var49; + if(var59 == 0) { + var39 = var24; + var41 = var30; + var43 = (double)var2; + var47 = (double)(var2 + 1); + var45 = (double)var4 + var32; + var49 = (double)var4 + var32; + } else if(var59 == 1) { + var39 = var28; + var41 = var26; + var43 = (double)(var2 + 1); + var47 = (double)var2; + var45 = (double)(var4 + 1) - var32; + var49 = (double)(var4 + 1) - var32; + } else if(var59 == 2) { + var39 = var26; + var41 = var24; + var43 = (double)var2 + var32; + var47 = (double)var2 + var32; + var45 = (double)(var4 + 1); + var49 = (double)var4; + } else { + var39 = var30; + var41 = var28; + var43 = (double)(var2 + 1) - var32; + var47 = (double)(var2 + 1) - var32; + var45 = (double)var4; + var49 = (double)(var4 + 1); + } + + var13 = true; + float var51 = var60.getInterpolatedU(0.0D); + var52 = var60.getInterpolatedU(8.0D); + var53 = var60.getInterpolatedV((1.0D - var39) * 16.0D * 0.5D); + float var54 = var60.getInterpolatedV((1.0D - var41) * 16.0D * 0.5D); + float var55 = var60.getInterpolatedV(8.0D); + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var58, var3, var37)); + float var56 = 1.0F; + if(var59 < 2) { + var56 *= var16; + } else { + var56 *= var17; + } + + var5.setColorOpaque_F(var15 * var56 * var7, var15 * var56 * var8, var15 * var56 * var9); + var5.addVertexWithUV(var43, (double)var3 + var39, var45, (double)var51, (double)var53); + var5.addVertexWithUV(var47, (double)var3 + var41, var49, (double)var52, (double)var54); + var5.addVertexWithUV(var47, (double)(var3 + 0), var49, (double)var52, (double)var55); + var5.addVertexWithUV(var43, (double)(var3 + 0), var45, (double)var51, (double)var55); + } + } + + this.renderMinY = var18; + this.renderMaxY = var20; + return var13; + } + } + + private float getFluidHeight(int var1, int var2, int var3, Material var4) { + int var5 = 0; + float var6 = 0.0F; + + for(int var7 = 0; var7 < 4; ++var7) { + int var8 = var1 - (var7 & 1); + int var10 = var3 - (var7 >> 1 & 1); + if(this.blockAccess.getBlockMaterial(var8, var2 + 1, var10) == var4) { + return 1.0F; + } + + Material var11 = this.blockAccess.getBlockMaterial(var8, var2, var10); + if(var11 != var4) { + if(!var11.isSolid()) { + ++var6; + ++var5; + } + } else { + int var12 = this.blockAccess.getBlockMetadata(var8, var2, var10); + if(var12 >= 8 || var12 == 0) { + var6 += BlockFluid.getFluidHeightPercent(var12) * 10.0F; + var5 += 10; + } + + var6 += BlockFluid.getFluidHeightPercent(var12); + ++var5; + } + } + + return 1.0F - var6 / (float)var5; + } + + public void renderBlockSandFalling(Block var1, World var2, int var3, int var4, int var5, int var6) { + float var7 = 0.5F; + float var8 = 1.0F; + float var9 = 0.8F; + float var10 = 0.6F; + Tessellator var11 = Tessellator.instance; + var11.startDrawingQuads(); + var11.setBrightness(var1.getMixedBrightnessForBlock(var2, var3, var4, var5)); + float var12 = 1.0F; + float var13 = 1.0F; + if(var13 < var12) { + var13 = var12; + } + + var11.setColorOpaque_F(var7 * var13, var7 * var13, var7 * var13); + this.renderFaceYNeg(var1, -0.5D, -0.5D, -0.5D, this.getBlockIconFromSideAndMetadata(var1, 0, var6)); + var13 = 1.0F; + if(var13 < var12) { + var13 = var12; + } + + var11.setColorOpaque_F(var8 * var13, var8 * var13, var8 * var13); + this.renderFaceYPos(var1, -0.5D, -0.5D, -0.5D, this.getBlockIconFromSideAndMetadata(var1, 1, var6)); + var13 = 1.0F; + if(var13 < var12) { + var13 = var12; + } + + var11.setColorOpaque_F(var9 * var13, var9 * var13, var9 * var13); + this.renderFaceZNeg(var1, -0.5D, -0.5D, -0.5D, this.getBlockIconFromSideAndMetadata(var1, 2, var6)); + var13 = 1.0F; + if(var13 < var12) { + var13 = var12; + } + + var11.setColorOpaque_F(var9 * var13, var9 * var13, var9 * var13); + this.renderFaceZPos(var1, -0.5D, -0.5D, -0.5D, this.getBlockIconFromSideAndMetadata(var1, 3, var6)); + var13 = 1.0F; + if(var13 < var12) { + var13 = var12; + } + + var11.setColorOpaque_F(var10 * var13, var10 * var13, var10 * var13); + this.renderFaceXNeg(var1, -0.5D, -0.5D, -0.5D, this.getBlockIconFromSideAndMetadata(var1, 4, var6)); + var13 = 1.0F; + if(var13 < var12) { + var13 = var12; + } + + var11.setColorOpaque_F(var10 * var13, var10 * var13, var10 * var13); + this.renderFaceXPos(var1, -0.5D, -0.5D, -0.5D, this.getBlockIconFromSideAndMetadata(var1, 5, var6)); + var11.draw(); + } + + public boolean renderStandardBlock(Block var1, int var2, int var3, int var4) { + int var5 = var1.colorMultiplier(this.blockAccess, var2, var3, var4); + float var6 = (float)(var5 >> 16 & 255) / 255.0F; + float var7 = (float)(var5 >> 8 & 255) / 255.0F; + float var8 = (float)(var5 & 255) / 255.0F; + if(EntityRenderer.anaglyphEnable) { + float var9 = (var6 * 30.0F + var7 * 59.0F + var8 * 11.0F) / 100.0F; + float var10 = (var6 * 30.0F + var7 * 70.0F) / 100.0F; + float var11 = (var6 * 30.0F + var8 * 70.0F) / 100.0F; + var6 = var9; + var7 = var10; + var8 = var11; + } + + return Minecraft.isAmbientOcclusionEnabled() && Block.lightValue[var1.blockID] == 0 ? (this.partialRenderBounds ? this.func_102027_b(var1, var2, var3, var4, var6, var7, var8) : this.renderStandardBlockWithAmbientOcclusion(var1, var2, var3, var4, var6, var7, var8)) : this.renderStandardBlockWithColorMultiplier(var1, var2, var3, var4, var6, var7, var8); + } + + public boolean renderBlockLog(Block var1, int var2, int var3, int var4) { + int var5 = this.blockAccess.getBlockMetadata(var2, var3, var4); + int var6 = var5 & 12; + if(var6 == 4) { + this.uvRotateEast = 1; + this.uvRotateWest = 1; + this.uvRotateTop = 1; + this.uvRotateBottom = 1; + } else if(var6 == 8) { + this.uvRotateSouth = 1; + this.uvRotateNorth = 1; + } + + boolean var7 = this.renderStandardBlock(var1, var2, var3, var4); + this.uvRotateSouth = 0; + this.uvRotateEast = 0; + this.uvRotateWest = 0; + this.uvRotateNorth = 0; + this.uvRotateTop = 0; + this.uvRotateBottom = 0; + return var7; + } + + public boolean renderBlockQuartz(Block var1, int var2, int var3, int var4) { + int var5 = this.blockAccess.getBlockMetadata(var2, var3, var4); + if(var5 == 3) { + this.uvRotateEast = 1; + this.uvRotateWest = 1; + this.uvRotateTop = 1; + this.uvRotateBottom = 1; + } else if(var5 == 4) { + this.uvRotateSouth = 1; + this.uvRotateNorth = 1; + } + + boolean var6 = this.renderStandardBlock(var1, var2, var3, var4); + this.uvRotateSouth = 0; + this.uvRotateEast = 0; + this.uvRotateWest = 0; + this.uvRotateNorth = 0; + this.uvRotateTop = 0; + this.uvRotateBottom = 0; + return var6; + } + + public boolean renderStandardBlockWithAmbientOcclusion(Block var1, int var2, int var3, int var4, float var5, float var6, float var7) { + this.enableAO = true; + boolean var8 = false; + float var9 = 0.0F; + float var10 = 0.0F; + float var11 = 0.0F; + float var12 = 0.0F; + boolean var13 = true; + int var14 = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4); + Tessellator var15 = Tessellator.instance; + var15.setBrightness(983055); + if(this.getBlockIcon(var1).getIconName().equals("grass_top")) { + var13 = false; + } else if(this.hasOverrideBlockTexture()) { + var13 = false; + } + + boolean var16; + boolean var17; + boolean var18; + boolean var19; + int var20; + float var21; + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3 - 1, var4, 0)) { + if(this.renderMinY <= 0.0D) { + --var3; + } + + this.aoBrightnessXYNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4); + this.aoBrightnessYZNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 - 1); + this.aoBrightnessYZNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 + 1); + this.aoBrightnessXYPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4); + this.aoLightValueScratchXYNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4); + this.aoLightValueScratchYZNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 - 1); + this.aoLightValueScratchYZNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 + 1); + this.aoLightValueScratchXYPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4); + var16 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3 - 1, var4)]; + var17 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3 - 1, var4)]; + var18 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 - 1, var4 + 1)]; + var19 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 - 1, var4 - 1)]; + if(!var19 && !var17) { + this.aoLightValueScratchXYZNNN = this.aoLightValueScratchXYNN; + this.aoBrightnessXYZNNN = this.aoBrightnessXYNN; + } else { + this.aoLightValueScratchXYZNNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4 - 1); + this.aoBrightnessXYZNNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4 - 1); + } + + if(!var18 && !var17) { + this.aoLightValueScratchXYZNNP = this.aoLightValueScratchXYNN; + this.aoBrightnessXYZNNP = this.aoBrightnessXYNN; + } else { + this.aoLightValueScratchXYZNNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4 + 1); + this.aoBrightnessXYZNNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4 + 1); + } + + if(!var19 && !var16) { + this.aoLightValueScratchXYZPNN = this.aoLightValueScratchXYPN; + this.aoBrightnessXYZPNN = this.aoBrightnessXYPN; + } else { + this.aoLightValueScratchXYZPNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4 - 1); + this.aoBrightnessXYZPNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4 - 1); + } + + if(!var18 && !var16) { + this.aoLightValueScratchXYZPNP = this.aoLightValueScratchXYPN; + this.aoBrightnessXYZPNP = this.aoBrightnessXYPN; + } else { + this.aoLightValueScratchXYZPNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4 + 1); + this.aoBrightnessXYZPNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4 + 1); + } + + if(this.renderMinY <= 0.0D) { + ++var3; + } + + var20 = var14; + if(this.renderMinY <= 0.0D || !this.blockAccess.isBlockOpaqueCube(var2, var3 - 1, var4)) { + var20 = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4); + } + + var21 = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4); + var9 = (this.aoLightValueScratchXYZNNP + this.aoLightValueScratchXYNN + this.aoLightValueScratchYZNP + var21) / 4.0F; + var12 = (this.aoLightValueScratchYZNP + var21 + this.aoLightValueScratchXYZPNP + this.aoLightValueScratchXYPN) / 4.0F; + var11 = (var21 + this.aoLightValueScratchYZNN + this.aoLightValueScratchXYPN + this.aoLightValueScratchXYZPNN) / 4.0F; + var10 = (this.aoLightValueScratchXYNN + this.aoLightValueScratchXYZNNN + var21 + this.aoLightValueScratchYZNN) / 4.0F; + this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessXYZNNP, this.aoBrightnessXYNN, this.aoBrightnessYZNP, var20); + this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessYZNP, this.aoBrightnessXYZPNP, this.aoBrightnessXYPN, var20); + this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessYZNN, this.aoBrightnessXYPN, this.aoBrightnessXYZPNN, var20); + this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessXYNN, this.aoBrightnessXYZNNN, this.aoBrightnessYZNN, var20); + if(var13) { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = var5 * 0.5F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = var6 * 0.5F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = var7 * 0.5F; + } else { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.5F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.5F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.5F; + } + + this.colorRedTopLeft *= var9; + this.colorGreenTopLeft *= var9; + this.colorBlueTopLeft *= var9; + this.colorRedBottomLeft *= var10; + this.colorGreenBottomLeft *= var10; + this.colorBlueBottomLeft *= var10; + this.colorRedBottomRight *= var11; + this.colorGreenBottomRight *= var11; + this.colorBlueBottomRight *= var11; + this.colorRedTopRight *= var12; + this.colorGreenTopRight *= var12; + this.colorBlueTopRight *= var12; + this.renderFaceYNeg(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 0)); + var8 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3 + 1, var4, 1)) { + if(this.renderMaxY >= 1.0D) { + ++var3; + } + + this.aoBrightnessXYNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4); + this.aoBrightnessXYPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4); + this.aoBrightnessYZPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 - 1); + this.aoBrightnessYZPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 + 1); + this.aoLightValueScratchXYNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4); + this.aoLightValueScratchXYPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4); + this.aoLightValueScratchYZPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 - 1); + this.aoLightValueScratchYZPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 + 1); + var16 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3 + 1, var4)]; + var17 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3 + 1, var4)]; + var18 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 + 1, var4 + 1)]; + var19 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 + 1, var4 - 1)]; + if(!var19 && !var17) { + this.aoLightValueScratchXYZNPN = this.aoLightValueScratchXYNP; + this.aoBrightnessXYZNPN = this.aoBrightnessXYNP; + } else { + this.aoLightValueScratchXYZNPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4 - 1); + this.aoBrightnessXYZNPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4 - 1); + } + + if(!var19 && !var16) { + this.aoLightValueScratchXYZPPN = this.aoLightValueScratchXYPP; + this.aoBrightnessXYZPPN = this.aoBrightnessXYPP; + } else { + this.aoLightValueScratchXYZPPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4 - 1); + this.aoBrightnessXYZPPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4 - 1); + } + + if(!var18 && !var17) { + this.aoLightValueScratchXYZNPP = this.aoLightValueScratchXYNP; + this.aoBrightnessXYZNPP = this.aoBrightnessXYNP; + } else { + this.aoLightValueScratchXYZNPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4 + 1); + this.aoBrightnessXYZNPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4 + 1); + } + + if(!var18 && !var16) { + this.aoLightValueScratchXYZPPP = this.aoLightValueScratchXYPP; + this.aoBrightnessXYZPPP = this.aoBrightnessXYPP; + } else { + this.aoLightValueScratchXYZPPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4 + 1); + this.aoBrightnessXYZPPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4 + 1); + } + + if(this.renderMaxY >= 1.0D) { + --var3; + } + + var20 = var14; + if(this.renderMaxY >= 1.0D || !this.blockAccess.isBlockOpaqueCube(var2, var3 + 1, var4)) { + var20 = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4); + } + + var21 = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4); + var12 = (this.aoLightValueScratchXYZNPP + this.aoLightValueScratchXYNP + this.aoLightValueScratchYZPP + var21) / 4.0F; + var9 = (this.aoLightValueScratchYZPP + var21 + this.aoLightValueScratchXYZPPP + this.aoLightValueScratchXYPP) / 4.0F; + var10 = (var21 + this.aoLightValueScratchYZPN + this.aoLightValueScratchXYPP + this.aoLightValueScratchXYZPPN) / 4.0F; + var11 = (this.aoLightValueScratchXYNP + this.aoLightValueScratchXYZNPN + var21 + this.aoLightValueScratchYZPN) / 4.0F; + this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessXYZNPP, this.aoBrightnessXYNP, this.aoBrightnessYZPP, var20); + this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessYZPP, this.aoBrightnessXYZPPP, this.aoBrightnessXYPP, var20); + this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessYZPN, this.aoBrightnessXYPP, this.aoBrightnessXYZPPN, var20); + this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessXYNP, this.aoBrightnessXYZNPN, this.aoBrightnessYZPN, var20); + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = var5; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = var6; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = var7; + this.colorRedTopLeft *= var9; + this.colorGreenTopLeft *= var9; + this.colorBlueTopLeft *= var9; + this.colorRedBottomLeft *= var10; + this.colorGreenBottomLeft *= var10; + this.colorBlueBottomLeft *= var10; + this.colorRedBottomRight *= var11; + this.colorGreenBottomRight *= var11; + this.colorBlueBottomRight *= var11; + this.colorRedTopRight *= var12; + this.colorGreenTopRight *= var12; + this.colorBlueTopRight *= var12; + this.renderFaceYPos(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 1)); + var8 = true; + } + + Icon var22; + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 - 1, 2)) { + if(this.renderMinZ <= 0.0D) { + --var4; + } + + this.aoLightValueScratchXZNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4); + this.aoLightValueScratchYZNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4); + this.aoLightValueScratchYZPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4); + this.aoLightValueScratchXZPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4); + this.aoBrightnessXZNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4); + this.aoBrightnessYZNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4); + this.aoBrightnessYZPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4); + this.aoBrightnessXZPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4); + var16 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3, var4 - 1)]; + var17 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3, var4 - 1)]; + var18 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 + 1, var4 - 1)]; + var19 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 - 1, var4 - 1)]; + if(!var17 && !var19) { + this.aoLightValueScratchXYZNNN = this.aoLightValueScratchXZNN; + this.aoBrightnessXYZNNN = this.aoBrightnessXZNN; + } else { + this.aoLightValueScratchXYZNNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3 - 1, var4); + this.aoBrightnessXYZNNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3 - 1, var4); + } + + if(!var17 && !var18) { + this.aoLightValueScratchXYZNPN = this.aoLightValueScratchXZNN; + this.aoBrightnessXYZNPN = this.aoBrightnessXZNN; + } else { + this.aoLightValueScratchXYZNPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3 + 1, var4); + this.aoBrightnessXYZNPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3 + 1, var4); + } + + if(!var16 && !var19) { + this.aoLightValueScratchXYZPNN = this.aoLightValueScratchXZPN; + this.aoBrightnessXYZPNN = this.aoBrightnessXZPN; + } else { + this.aoLightValueScratchXYZPNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3 - 1, var4); + this.aoBrightnessXYZPNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3 - 1, var4); + } + + if(!var16 && !var18) { + this.aoLightValueScratchXYZPPN = this.aoLightValueScratchXZPN; + this.aoBrightnessXYZPPN = this.aoBrightnessXZPN; + } else { + this.aoLightValueScratchXYZPPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3 + 1, var4); + this.aoBrightnessXYZPPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3 + 1, var4); + } + + if(this.renderMinZ <= 0.0D) { + ++var4; + } + + var20 = var14; + if(this.renderMinZ <= 0.0D || !this.blockAccess.isBlockOpaqueCube(var2, var3, var4 - 1)) { + var20 = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 - 1); + } + + var21 = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 - 1); + var9 = (this.aoLightValueScratchXZNN + this.aoLightValueScratchXYZNPN + var21 + this.aoLightValueScratchYZPN) / 4.0F; + var10 = (var21 + this.aoLightValueScratchYZPN + this.aoLightValueScratchXZPN + this.aoLightValueScratchXYZPPN) / 4.0F; + var11 = (this.aoLightValueScratchYZNN + var21 + this.aoLightValueScratchXYZPNN + this.aoLightValueScratchXZPN) / 4.0F; + var12 = (this.aoLightValueScratchXYZNNN + this.aoLightValueScratchXZNN + this.aoLightValueScratchYZNN + var21) / 4.0F; + this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessXZNN, this.aoBrightnessXYZNPN, this.aoBrightnessYZPN, var20); + this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessYZPN, this.aoBrightnessXZPN, this.aoBrightnessXYZPPN, var20); + this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessYZNN, this.aoBrightnessXYZPNN, this.aoBrightnessXZPN, var20); + this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessXYZNNN, this.aoBrightnessXZNN, this.aoBrightnessYZNN, var20); + if(var13) { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = var5 * 0.8F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = var6 * 0.8F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = var7 * 0.8F; + } else { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.8F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.8F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.8F; + } + + this.colorRedTopLeft *= var9; + this.colorGreenTopLeft *= var9; + this.colorBlueTopLeft *= var9; + this.colorRedBottomLeft *= var10; + this.colorGreenBottomLeft *= var10; + this.colorBlueBottomLeft *= var10; + this.colorRedBottomRight *= var11; + this.colorGreenBottomRight *= var11; + this.colorBlueBottomRight *= var11; + this.colorRedTopRight *= var12; + this.colorGreenTopRight *= var12; + this.colorBlueTopRight *= var12; + var22 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 2); + this.renderFaceZNeg(var1, (double)var2, (double)var3, (double)var4, var22); + if(fancyGrass && var22.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture()) { + this.colorRedTopLeft *= var5; + this.colorRedBottomLeft *= var5; + this.colorRedBottomRight *= var5; + this.colorRedTopRight *= var5; + this.colorGreenTopLeft *= var6; + this.colorGreenBottomLeft *= var6; + this.colorGreenBottomRight *= var6; + this.colorGreenTopRight *= var6; + this.colorBlueTopLeft *= var7; + this.colorBlueBottomLeft *= var7; + this.colorBlueBottomRight *= var7; + this.colorBlueTopRight *= var7; + this.renderFaceZNeg(var1, (double)var2, (double)var3, (double)var4, BlockGrass.getIconSideOverlay()); + } + + var8 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 + 1, 3)) { + if(this.renderMaxZ >= 1.0D) { + ++var4; + } + + this.aoLightValueScratchXZNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4); + this.aoLightValueScratchXZPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4); + this.aoLightValueScratchYZNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4); + this.aoLightValueScratchYZPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4); + this.aoBrightnessXZNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4); + this.aoBrightnessXZPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4); + this.aoBrightnessYZNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4); + this.aoBrightnessYZPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4); + var16 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3, var4 + 1)]; + var17 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3, var4 + 1)]; + var18 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 + 1, var4 + 1)]; + var19 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 - 1, var4 + 1)]; + if(!var17 && !var19) { + this.aoLightValueScratchXYZNNP = this.aoLightValueScratchXZNP; + this.aoBrightnessXYZNNP = this.aoBrightnessXZNP; + } else { + this.aoLightValueScratchXYZNNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3 - 1, var4); + this.aoBrightnessXYZNNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3 - 1, var4); + } + + if(!var17 && !var18) { + this.aoLightValueScratchXYZNPP = this.aoLightValueScratchXZNP; + this.aoBrightnessXYZNPP = this.aoBrightnessXZNP; + } else { + this.aoLightValueScratchXYZNPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3 + 1, var4); + this.aoBrightnessXYZNPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3 + 1, var4); + } + + if(!var16 && !var19) { + this.aoLightValueScratchXYZPNP = this.aoLightValueScratchXZPP; + this.aoBrightnessXYZPNP = this.aoBrightnessXZPP; + } else { + this.aoLightValueScratchXYZPNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3 - 1, var4); + this.aoBrightnessXYZPNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3 - 1, var4); + } + + if(!var16 && !var18) { + this.aoLightValueScratchXYZPPP = this.aoLightValueScratchXZPP; + this.aoBrightnessXYZPPP = this.aoBrightnessXZPP; + } else { + this.aoLightValueScratchXYZPPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3 + 1, var4); + this.aoBrightnessXYZPPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3 + 1, var4); + } + + if(this.renderMaxZ >= 1.0D) { + --var4; + } + + var20 = var14; + if(this.renderMaxZ >= 1.0D || !this.blockAccess.isBlockOpaqueCube(var2, var3, var4 + 1)) { + var20 = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 + 1); + } + + var21 = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 + 1); + var9 = (this.aoLightValueScratchXZNP + this.aoLightValueScratchXYZNPP + var21 + this.aoLightValueScratchYZPP) / 4.0F; + var12 = (var21 + this.aoLightValueScratchYZPP + this.aoLightValueScratchXZPP + this.aoLightValueScratchXYZPPP) / 4.0F; + var11 = (this.aoLightValueScratchYZNP + var21 + this.aoLightValueScratchXYZPNP + this.aoLightValueScratchXZPP) / 4.0F; + var10 = (this.aoLightValueScratchXYZNNP + this.aoLightValueScratchXZNP + this.aoLightValueScratchYZNP + var21) / 4.0F; + this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessXZNP, this.aoBrightnessXYZNPP, this.aoBrightnessYZPP, var20); + this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessYZPP, this.aoBrightnessXZPP, this.aoBrightnessXYZPPP, var20); + this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessYZNP, this.aoBrightnessXYZPNP, this.aoBrightnessXZPP, var20); + this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessXYZNNP, this.aoBrightnessXZNP, this.aoBrightnessYZNP, var20); + if(var13) { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = var5 * 0.8F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = var6 * 0.8F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = var7 * 0.8F; + } else { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.8F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.8F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.8F; + } + + this.colorRedTopLeft *= var9; + this.colorGreenTopLeft *= var9; + this.colorBlueTopLeft *= var9; + this.colorRedBottomLeft *= var10; + this.colorGreenBottomLeft *= var10; + this.colorBlueBottomLeft *= var10; + this.colorRedBottomRight *= var11; + this.colorGreenBottomRight *= var11; + this.colorBlueBottomRight *= var11; + this.colorRedTopRight *= var12; + this.colorGreenTopRight *= var12; + this.colorBlueTopRight *= var12; + var22 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 3); + this.renderFaceZPos(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 3)); + if(fancyGrass && var22.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture()) { + this.colorRedTopLeft *= var5; + this.colorRedBottomLeft *= var5; + this.colorRedBottomRight *= var5; + this.colorRedTopRight *= var5; + this.colorGreenTopLeft *= var6; + this.colorGreenBottomLeft *= var6; + this.colorGreenBottomRight *= var6; + this.colorGreenTopRight *= var6; + this.colorBlueTopLeft *= var7; + this.colorBlueBottomLeft *= var7; + this.colorBlueBottomRight *= var7; + this.colorBlueTopRight *= var7; + this.renderFaceZPos(var1, (double)var2, (double)var3, (double)var4, BlockGrass.getIconSideOverlay()); + } + + var8 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2 - 1, var3, var4, 4)) { + if(this.renderMinX <= 0.0D) { + --var2; + } + + this.aoLightValueScratchXYNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4); + this.aoLightValueScratchXZNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 - 1); + this.aoLightValueScratchXZNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 + 1); + this.aoLightValueScratchXYNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4); + this.aoBrightnessXYNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4); + this.aoBrightnessXZNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 - 1); + this.aoBrightnessXZNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 + 1); + this.aoBrightnessXYNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4); + var16 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3 + 1, var4)]; + var17 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3 - 1, var4)]; + var18 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3, var4 - 1)]; + var19 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3, var4 + 1)]; + if(!var18 && !var17) { + this.aoLightValueScratchXYZNNN = this.aoLightValueScratchXZNN; + this.aoBrightnessXYZNNN = this.aoBrightnessXZNN; + } else { + this.aoLightValueScratchXYZNNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4 - 1); + this.aoBrightnessXYZNNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4 - 1); + } + + if(!var19 && !var17) { + this.aoLightValueScratchXYZNNP = this.aoLightValueScratchXZNP; + this.aoBrightnessXYZNNP = this.aoBrightnessXZNP; + } else { + this.aoLightValueScratchXYZNNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4 + 1); + this.aoBrightnessXYZNNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4 + 1); + } + + if(!var18 && !var16) { + this.aoLightValueScratchXYZNPN = this.aoLightValueScratchXZNN; + this.aoBrightnessXYZNPN = this.aoBrightnessXZNN; + } else { + this.aoLightValueScratchXYZNPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4 - 1); + this.aoBrightnessXYZNPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4 - 1); + } + + if(!var19 && !var16) { + this.aoLightValueScratchXYZNPP = this.aoLightValueScratchXZNP; + this.aoBrightnessXYZNPP = this.aoBrightnessXZNP; + } else { + this.aoLightValueScratchXYZNPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4 + 1); + this.aoBrightnessXYZNPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4 + 1); + } + + if(this.renderMinX <= 0.0D) { + ++var2; + } + + var20 = var14; + if(this.renderMinX <= 0.0D || !this.blockAccess.isBlockOpaqueCube(var2 - 1, var3, var4)) { + var20 = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4); + } + + var21 = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4); + var12 = (this.aoLightValueScratchXYNN + this.aoLightValueScratchXYZNNP + var21 + this.aoLightValueScratchXZNP) / 4.0F; + var9 = (var21 + this.aoLightValueScratchXZNP + this.aoLightValueScratchXYNP + this.aoLightValueScratchXYZNPP) / 4.0F; + var10 = (this.aoLightValueScratchXZNN + var21 + this.aoLightValueScratchXYZNPN + this.aoLightValueScratchXYNP) / 4.0F; + var11 = (this.aoLightValueScratchXYZNNN + this.aoLightValueScratchXYNN + this.aoLightValueScratchXZNN + var21) / 4.0F; + this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessXYNN, this.aoBrightnessXYZNNP, this.aoBrightnessXZNP, var20); + this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessXZNP, this.aoBrightnessXYNP, this.aoBrightnessXYZNPP, var20); + this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessXZNN, this.aoBrightnessXYZNPN, this.aoBrightnessXYNP, var20); + this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessXYZNNN, this.aoBrightnessXYNN, this.aoBrightnessXZNN, var20); + if(var13) { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = var5 * 0.6F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = var6 * 0.6F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = var7 * 0.6F; + } else { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.6F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.6F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.6F; + } + + this.colorRedTopLeft *= var9; + this.colorGreenTopLeft *= var9; + this.colorBlueTopLeft *= var9; + this.colorRedBottomLeft *= var10; + this.colorGreenBottomLeft *= var10; + this.colorBlueBottomLeft *= var10; + this.colorRedBottomRight *= var11; + this.colorGreenBottomRight *= var11; + this.colorBlueBottomRight *= var11; + this.colorRedTopRight *= var12; + this.colorGreenTopRight *= var12; + this.colorBlueTopRight *= var12; + var22 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 4); + this.renderFaceXNeg(var1, (double)var2, (double)var3, (double)var4, var22); + if(fancyGrass && var22.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture()) { + this.colorRedTopLeft *= var5; + this.colorRedBottomLeft *= var5; + this.colorRedBottomRight *= var5; + this.colorRedTopRight *= var5; + this.colorGreenTopLeft *= var6; + this.colorGreenBottomLeft *= var6; + this.colorGreenBottomRight *= var6; + this.colorGreenTopRight *= var6; + this.colorBlueTopLeft *= var7; + this.colorBlueBottomLeft *= var7; + this.colorBlueBottomRight *= var7; + this.colorBlueTopRight *= var7; + this.renderFaceXNeg(var1, (double)var2, (double)var3, (double)var4, BlockGrass.getIconSideOverlay()); + } + + var8 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2 + 1, var3, var4, 5)) { + if(this.renderMaxX >= 1.0D) { + ++var2; + } + + this.aoLightValueScratchXYPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4); + this.aoLightValueScratchXZPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 - 1); + this.aoLightValueScratchXZPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 + 1); + this.aoLightValueScratchXYPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4); + this.aoBrightnessXYPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4); + this.aoBrightnessXZPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 - 1); + this.aoBrightnessXZPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 + 1); + this.aoBrightnessXYPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4); + var16 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3 + 1, var4)]; + var17 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3 - 1, var4)]; + var18 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3, var4 + 1)]; + var19 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3, var4 - 1)]; + if(!var17 && !var19) { + this.aoLightValueScratchXYZPNN = this.aoLightValueScratchXZPN; + this.aoBrightnessXYZPNN = this.aoBrightnessXZPN; + } else { + this.aoLightValueScratchXYZPNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4 - 1); + this.aoBrightnessXYZPNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4 - 1); + } + + if(!var17 && !var18) { + this.aoLightValueScratchXYZPNP = this.aoLightValueScratchXZPP; + this.aoBrightnessXYZPNP = this.aoBrightnessXZPP; + } else { + this.aoLightValueScratchXYZPNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4 + 1); + this.aoBrightnessXYZPNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4 + 1); + } + + if(!var16 && !var19) { + this.aoLightValueScratchXYZPPN = this.aoLightValueScratchXZPN; + this.aoBrightnessXYZPPN = this.aoBrightnessXZPN; + } else { + this.aoLightValueScratchXYZPPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4 - 1); + this.aoBrightnessXYZPPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4 - 1); + } + + if(!var16 && !var18) { + this.aoLightValueScratchXYZPPP = this.aoLightValueScratchXZPP; + this.aoBrightnessXYZPPP = this.aoBrightnessXZPP; + } else { + this.aoLightValueScratchXYZPPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4 + 1); + this.aoBrightnessXYZPPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4 + 1); + } + + if(this.renderMaxX >= 1.0D) { + --var2; + } + + var20 = var14; + if(this.renderMaxX >= 1.0D || !this.blockAccess.isBlockOpaqueCube(var2 + 1, var3, var4)) { + var20 = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4); + } + + var21 = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4); + var9 = (this.aoLightValueScratchXYPN + this.aoLightValueScratchXYZPNP + var21 + this.aoLightValueScratchXZPP) / 4.0F; + var10 = (this.aoLightValueScratchXYZPNN + this.aoLightValueScratchXYPN + this.aoLightValueScratchXZPN + var21) / 4.0F; + var11 = (this.aoLightValueScratchXZPN + var21 + this.aoLightValueScratchXYZPPN + this.aoLightValueScratchXYPP) / 4.0F; + var12 = (var21 + this.aoLightValueScratchXZPP + this.aoLightValueScratchXYPP + this.aoLightValueScratchXYZPPP) / 4.0F; + this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessXYPN, this.aoBrightnessXYZPNP, this.aoBrightnessXZPP, var20); + this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessXZPP, this.aoBrightnessXYPP, this.aoBrightnessXYZPPP, var20); + this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessXZPN, this.aoBrightnessXYZPPN, this.aoBrightnessXYPP, var20); + this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessXYZPNN, this.aoBrightnessXYPN, this.aoBrightnessXZPN, var20); + if(var13) { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = var5 * 0.6F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = var6 * 0.6F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = var7 * 0.6F; + } else { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.6F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.6F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.6F; + } + + this.colorRedTopLeft *= var9; + this.colorGreenTopLeft *= var9; + this.colorBlueTopLeft *= var9; + this.colorRedBottomLeft *= var10; + this.colorGreenBottomLeft *= var10; + this.colorBlueBottomLeft *= var10; + this.colorRedBottomRight *= var11; + this.colorGreenBottomRight *= var11; + this.colorBlueBottomRight *= var11; + this.colorRedTopRight *= var12; + this.colorGreenTopRight *= var12; + this.colorBlueTopRight *= var12; + var22 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 5); + this.renderFaceXPos(var1, (double)var2, (double)var3, (double)var4, var22); + if(fancyGrass && var22.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture()) { + this.colorRedTopLeft *= var5; + this.colorRedBottomLeft *= var5; + this.colorRedBottomRight *= var5; + this.colorRedTopRight *= var5; + this.colorGreenTopLeft *= var6; + this.colorGreenBottomLeft *= var6; + this.colorGreenBottomRight *= var6; + this.colorGreenTopRight *= var6; + this.colorBlueTopLeft *= var7; + this.colorBlueBottomLeft *= var7; + this.colorBlueBottomRight *= var7; + this.colorBlueTopRight *= var7; + this.renderFaceXPos(var1, (double)var2, (double)var3, (double)var4, BlockGrass.getIconSideOverlay()); + } + + var8 = true; + } + + this.enableAO = false; + return var8; + } + + public boolean func_102027_b(Block var1, int var2, int var3, int var4, float var5, float var6, float var7) { + this.enableAO = true; + boolean var8 = false; + float var9 = 0.0F; + float var10 = 0.0F; + float var11 = 0.0F; + float var12 = 0.0F; + boolean var13 = true; + int var14 = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4); + Tessellator var15 = Tessellator.instance; + var15.setBrightness(983055); + if(this.getBlockIcon(var1).getIconName().equals("grass_top")) { + var13 = false; + } else if(this.hasOverrideBlockTexture()) { + var13 = false; + } + + boolean var16; + boolean var17; + boolean var18; + boolean var19; + int var20; + float var21; + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3 - 1, var4, 0)) { + if(this.renderMinY <= 0.0D) { + --var3; + } + + this.aoBrightnessXYNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4); + this.aoBrightnessYZNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 - 1); + this.aoBrightnessYZNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 + 1); + this.aoBrightnessXYPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4); + this.aoLightValueScratchXYNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4); + this.aoLightValueScratchYZNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 - 1); + this.aoLightValueScratchYZNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 + 1); + this.aoLightValueScratchXYPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4); + var16 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3 - 1, var4)]; + var17 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3 - 1, var4)]; + var18 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 - 1, var4 + 1)]; + var19 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 - 1, var4 - 1)]; + if(!var19 && !var17) { + this.aoLightValueScratchXYZNNN = this.aoLightValueScratchXYNN; + this.aoBrightnessXYZNNN = this.aoBrightnessXYNN; + } else { + this.aoLightValueScratchXYZNNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4 - 1); + this.aoBrightnessXYZNNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4 - 1); + } + + if(!var18 && !var17) { + this.aoLightValueScratchXYZNNP = this.aoLightValueScratchXYNN; + this.aoBrightnessXYZNNP = this.aoBrightnessXYNN; + } else { + this.aoLightValueScratchXYZNNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4 + 1); + this.aoBrightnessXYZNNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4 + 1); + } + + if(!var19 && !var16) { + this.aoLightValueScratchXYZPNN = this.aoLightValueScratchXYPN; + this.aoBrightnessXYZPNN = this.aoBrightnessXYPN; + } else { + this.aoLightValueScratchXYZPNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4 - 1); + this.aoBrightnessXYZPNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4 - 1); + } + + if(!var18 && !var16) { + this.aoLightValueScratchXYZPNP = this.aoLightValueScratchXYPN; + this.aoBrightnessXYZPNP = this.aoBrightnessXYPN; + } else { + this.aoLightValueScratchXYZPNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4 + 1); + this.aoBrightnessXYZPNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4 + 1); + } + + if(this.renderMinY <= 0.0D) { + ++var3; + } + + var20 = var14; + if(this.renderMinY <= 0.0D || !this.blockAccess.isBlockOpaqueCube(var2, var3 - 1, var4)) { + var20 = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4); + } + + var21 = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4); + var9 = (this.aoLightValueScratchXYZNNP + this.aoLightValueScratchXYNN + this.aoLightValueScratchYZNP + var21) / 4.0F; + var12 = (this.aoLightValueScratchYZNP + var21 + this.aoLightValueScratchXYZPNP + this.aoLightValueScratchXYPN) / 4.0F; + var11 = (var21 + this.aoLightValueScratchYZNN + this.aoLightValueScratchXYPN + this.aoLightValueScratchXYZPNN) / 4.0F; + var10 = (this.aoLightValueScratchXYNN + this.aoLightValueScratchXYZNNN + var21 + this.aoLightValueScratchYZNN) / 4.0F; + this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessXYZNNP, this.aoBrightnessXYNN, this.aoBrightnessYZNP, var20); + this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessYZNP, this.aoBrightnessXYZPNP, this.aoBrightnessXYPN, var20); + this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessYZNN, this.aoBrightnessXYPN, this.aoBrightnessXYZPNN, var20); + this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessXYNN, this.aoBrightnessXYZNNN, this.aoBrightnessYZNN, var20); + if(var13) { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = var5 * 0.5F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = var6 * 0.5F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = var7 * 0.5F; + } else { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.5F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.5F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.5F; + } + + this.colorRedTopLeft *= var9; + this.colorGreenTopLeft *= var9; + this.colorBlueTopLeft *= var9; + this.colorRedBottomLeft *= var10; + this.colorGreenBottomLeft *= var10; + this.colorBlueBottomLeft *= var10; + this.colorRedBottomRight *= var11; + this.colorGreenBottomRight *= var11; + this.colorBlueBottomRight *= var11; + this.colorRedTopRight *= var12; + this.colorGreenTopRight *= var12; + this.colorBlueTopRight *= var12; + this.renderFaceYNeg(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 0)); + var8 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3 + 1, var4, 1)) { + if(this.renderMaxY >= 1.0D) { + ++var3; + } + + this.aoBrightnessXYNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4); + this.aoBrightnessXYPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4); + this.aoBrightnessYZPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 - 1); + this.aoBrightnessYZPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 + 1); + this.aoLightValueScratchXYNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4); + this.aoLightValueScratchXYPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4); + this.aoLightValueScratchYZPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 - 1); + this.aoLightValueScratchYZPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 + 1); + var16 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3 + 1, var4)]; + var17 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3 + 1, var4)]; + var18 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 + 1, var4 + 1)]; + var19 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 + 1, var4 - 1)]; + if(!var19 && !var17) { + this.aoLightValueScratchXYZNPN = this.aoLightValueScratchXYNP; + this.aoBrightnessXYZNPN = this.aoBrightnessXYNP; + } else { + this.aoLightValueScratchXYZNPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4 - 1); + this.aoBrightnessXYZNPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4 - 1); + } + + if(!var19 && !var16) { + this.aoLightValueScratchXYZPPN = this.aoLightValueScratchXYPP; + this.aoBrightnessXYZPPN = this.aoBrightnessXYPP; + } else { + this.aoLightValueScratchXYZPPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4 - 1); + this.aoBrightnessXYZPPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4 - 1); + } + + if(!var18 && !var17) { + this.aoLightValueScratchXYZNPP = this.aoLightValueScratchXYNP; + this.aoBrightnessXYZNPP = this.aoBrightnessXYNP; + } else { + this.aoLightValueScratchXYZNPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4 + 1); + this.aoBrightnessXYZNPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4 + 1); + } + + if(!var18 && !var16) { + this.aoLightValueScratchXYZPPP = this.aoLightValueScratchXYPP; + this.aoBrightnessXYZPPP = this.aoBrightnessXYPP; + } else { + this.aoLightValueScratchXYZPPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4 + 1); + this.aoBrightnessXYZPPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4 + 1); + } + + if(this.renderMaxY >= 1.0D) { + --var3; + } + + var20 = var14; + if(this.renderMaxY >= 1.0D || !this.blockAccess.isBlockOpaqueCube(var2, var3 + 1, var4)) { + var20 = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4); + } + + var21 = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4); + var12 = (this.aoLightValueScratchXYZNPP + this.aoLightValueScratchXYNP + this.aoLightValueScratchYZPP + var21) / 4.0F; + var9 = (this.aoLightValueScratchYZPP + var21 + this.aoLightValueScratchXYZPPP + this.aoLightValueScratchXYPP) / 4.0F; + var10 = (var21 + this.aoLightValueScratchYZPN + this.aoLightValueScratchXYPP + this.aoLightValueScratchXYZPPN) / 4.0F; + var11 = (this.aoLightValueScratchXYNP + this.aoLightValueScratchXYZNPN + var21 + this.aoLightValueScratchYZPN) / 4.0F; + this.brightnessTopRight = this.getAoBrightness(this.aoBrightnessXYZNPP, this.aoBrightnessXYNP, this.aoBrightnessYZPP, var20); + this.brightnessTopLeft = this.getAoBrightness(this.aoBrightnessYZPP, this.aoBrightnessXYZPPP, this.aoBrightnessXYPP, var20); + this.brightnessBottomLeft = this.getAoBrightness(this.aoBrightnessYZPN, this.aoBrightnessXYPP, this.aoBrightnessXYZPPN, var20); + this.brightnessBottomRight = this.getAoBrightness(this.aoBrightnessXYNP, this.aoBrightnessXYZNPN, this.aoBrightnessYZPN, var20); + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = var5; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = var6; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = var7; + this.colorRedTopLeft *= var9; + this.colorGreenTopLeft *= var9; + this.colorBlueTopLeft *= var9; + this.colorRedBottomLeft *= var10; + this.colorGreenBottomLeft *= var10; + this.colorBlueBottomLeft *= var10; + this.colorRedBottomRight *= var11; + this.colorGreenBottomRight *= var11; + this.colorBlueBottomRight *= var11; + this.colorRedTopRight *= var12; + this.colorGreenTopRight *= var12; + this.colorBlueTopRight *= var12; + this.renderFaceYPos(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 1)); + var8 = true; + } + + float var22; + float var23; + float var24; + float var25; + int var26; + int var27; + int var28; + int var29; + Icon var30; + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 - 1, 2)) { + if(this.renderMinZ <= 0.0D) { + --var4; + } + + this.aoLightValueScratchXZNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4); + this.aoLightValueScratchYZNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4); + this.aoLightValueScratchYZPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4); + this.aoLightValueScratchXZPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4); + this.aoBrightnessXZNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4); + this.aoBrightnessYZNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4); + this.aoBrightnessYZPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4); + this.aoBrightnessXZPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4); + var16 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3, var4 - 1)]; + var17 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3, var4 - 1)]; + var18 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 + 1, var4 - 1)]; + var19 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 - 1, var4 - 1)]; + if(!var17 && !var19) { + this.aoLightValueScratchXYZNNN = this.aoLightValueScratchXZNN; + this.aoBrightnessXYZNNN = this.aoBrightnessXZNN; + } else { + this.aoLightValueScratchXYZNNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3 - 1, var4); + this.aoBrightnessXYZNNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3 - 1, var4); + } + + if(!var17 && !var18) { + this.aoLightValueScratchXYZNPN = this.aoLightValueScratchXZNN; + this.aoBrightnessXYZNPN = this.aoBrightnessXZNN; + } else { + this.aoLightValueScratchXYZNPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3 + 1, var4); + this.aoBrightnessXYZNPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3 + 1, var4); + } + + if(!var16 && !var19) { + this.aoLightValueScratchXYZPNN = this.aoLightValueScratchXZPN; + this.aoBrightnessXYZPNN = this.aoBrightnessXZPN; + } else { + this.aoLightValueScratchXYZPNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3 - 1, var4); + this.aoBrightnessXYZPNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3 - 1, var4); + } + + if(!var16 && !var18) { + this.aoLightValueScratchXYZPPN = this.aoLightValueScratchXZPN; + this.aoBrightnessXYZPPN = this.aoBrightnessXZPN; + } else { + this.aoLightValueScratchXYZPPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3 + 1, var4); + this.aoBrightnessXYZPPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3 + 1, var4); + } + + if(this.renderMinZ <= 0.0D) { + ++var4; + } + + var20 = var14; + if(this.renderMinZ <= 0.0D || !this.blockAccess.isBlockOpaqueCube(var2, var3, var4 - 1)) { + var20 = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 - 1); + } + + var21 = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 - 1); + var22 = (this.aoLightValueScratchXZNN + this.aoLightValueScratchXYZNPN + var21 + this.aoLightValueScratchYZPN) / 4.0F; + var23 = (var21 + this.aoLightValueScratchYZPN + this.aoLightValueScratchXZPN + this.aoLightValueScratchXYZPPN) / 4.0F; + var24 = (this.aoLightValueScratchYZNN + var21 + this.aoLightValueScratchXYZPNN + this.aoLightValueScratchXZPN) / 4.0F; + var25 = (this.aoLightValueScratchXYZNNN + this.aoLightValueScratchXZNN + this.aoLightValueScratchYZNN + var21) / 4.0F; + var9 = (float)((double)var22 * this.renderMaxY * (1.0D - this.renderMinX) + (double)var23 * this.renderMinY * this.renderMinX + (double)var24 * (1.0D - this.renderMaxY) * this.renderMinX + (double)var25 * (1.0D - this.renderMaxY) * (1.0D - this.renderMinX)); + var10 = (float)((double)var22 * this.renderMaxY * (1.0D - this.renderMaxX) + (double)var23 * this.renderMaxY * this.renderMaxX + (double)var24 * (1.0D - this.renderMaxY) * this.renderMaxX + (double)var25 * (1.0D - this.renderMaxY) * (1.0D - this.renderMaxX)); + var11 = (float)((double)var22 * this.renderMinY * (1.0D - this.renderMaxX) + (double)var23 * this.renderMinY * this.renderMaxX + (double)var24 * (1.0D - this.renderMinY) * this.renderMaxX + (double)var25 * (1.0D - this.renderMinY) * (1.0D - this.renderMaxX)); + var12 = (float)((double)var22 * this.renderMinY * (1.0D - this.renderMinX) + (double)var23 * this.renderMinY * this.renderMinX + (double)var24 * (1.0D - this.renderMinY) * this.renderMinX + (double)var25 * (1.0D - this.renderMinY) * (1.0D - this.renderMinX)); + var26 = this.getAoBrightness(this.aoBrightnessXZNN, this.aoBrightnessXYZNPN, this.aoBrightnessYZPN, var20); + var27 = this.getAoBrightness(this.aoBrightnessYZPN, this.aoBrightnessXZPN, this.aoBrightnessXYZPPN, var20); + var28 = this.getAoBrightness(this.aoBrightnessYZNN, this.aoBrightnessXYZPNN, this.aoBrightnessXZPN, var20); + var29 = this.getAoBrightness(this.aoBrightnessXYZNNN, this.aoBrightnessXZNN, this.aoBrightnessYZNN, var20); + this.brightnessTopLeft = this.mixAoBrightness(var26, var27, var28, var29, this.renderMaxY * (1.0D - this.renderMinX), this.renderMaxY * this.renderMinX, (1.0D - this.renderMaxY) * this.renderMinX, (1.0D - this.renderMaxY) * (1.0D - this.renderMinX)); + this.brightnessBottomLeft = this.mixAoBrightness(var26, var27, var28, var29, this.renderMaxY * (1.0D - this.renderMaxX), this.renderMaxY * this.renderMaxX, (1.0D - this.renderMaxY) * this.renderMaxX, (1.0D - this.renderMaxY) * (1.0D - this.renderMaxX)); + this.brightnessBottomRight = this.mixAoBrightness(var26, var27, var28, var29, this.renderMinY * (1.0D - this.renderMaxX), this.renderMinY * this.renderMaxX, (1.0D - this.renderMinY) * this.renderMaxX, (1.0D - this.renderMinY) * (1.0D - this.renderMaxX)); + this.brightnessTopRight = this.mixAoBrightness(var26, var27, var28, var29, this.renderMinY * (1.0D - this.renderMinX), this.renderMinY * this.renderMinX, (1.0D - this.renderMinY) * this.renderMinX, (1.0D - this.renderMinY) * (1.0D - this.renderMinX)); + if(var13) { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = var5 * 0.8F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = var6 * 0.8F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = var7 * 0.8F; + } else { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.8F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.8F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.8F; + } + + this.colorRedTopLeft *= var9; + this.colorGreenTopLeft *= var9; + this.colorBlueTopLeft *= var9; + this.colorRedBottomLeft *= var10; + this.colorGreenBottomLeft *= var10; + this.colorBlueBottomLeft *= var10; + this.colorRedBottomRight *= var11; + this.colorGreenBottomRight *= var11; + this.colorBlueBottomRight *= var11; + this.colorRedTopRight *= var12; + this.colorGreenTopRight *= var12; + this.colorBlueTopRight *= var12; + var30 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 2); + this.renderFaceZNeg(var1, (double)var2, (double)var3, (double)var4, var30); + if(fancyGrass && var30.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture()) { + this.colorRedTopLeft *= var5; + this.colorRedBottomLeft *= var5; + this.colorRedBottomRight *= var5; + this.colorRedTopRight *= var5; + this.colorGreenTopLeft *= var6; + this.colorGreenBottomLeft *= var6; + this.colorGreenBottomRight *= var6; + this.colorGreenTopRight *= var6; + this.colorBlueTopLeft *= var7; + this.colorBlueBottomLeft *= var7; + this.colorBlueBottomRight *= var7; + this.colorBlueTopRight *= var7; + this.renderFaceZNeg(var1, (double)var2, (double)var3, (double)var4, BlockGrass.getIconSideOverlay()); + } + + var8 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 + 1, 3)) { + if(this.renderMaxZ >= 1.0D) { + ++var4; + } + + this.aoLightValueScratchXZNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4); + this.aoLightValueScratchXZPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4); + this.aoLightValueScratchYZNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4); + this.aoLightValueScratchYZPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4); + this.aoBrightnessXZNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4); + this.aoBrightnessXZPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4); + this.aoBrightnessYZNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4); + this.aoBrightnessYZPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4); + var16 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3, var4 + 1)]; + var17 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3, var4 + 1)]; + var18 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 + 1, var4 + 1)]; + var19 = Block.canBlockGrass[this.blockAccess.getBlockId(var2, var3 - 1, var4 + 1)]; + if(!var17 && !var19) { + this.aoLightValueScratchXYZNNP = this.aoLightValueScratchXZNP; + this.aoBrightnessXYZNNP = this.aoBrightnessXZNP; + } else { + this.aoLightValueScratchXYZNNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3 - 1, var4); + this.aoBrightnessXYZNNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3 - 1, var4); + } + + if(!var17 && !var18) { + this.aoLightValueScratchXYZNPP = this.aoLightValueScratchXZNP; + this.aoBrightnessXYZNPP = this.aoBrightnessXZNP; + } else { + this.aoLightValueScratchXYZNPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3 + 1, var4); + this.aoBrightnessXYZNPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3 + 1, var4); + } + + if(!var16 && !var19) { + this.aoLightValueScratchXYZPNP = this.aoLightValueScratchXZPP; + this.aoBrightnessXYZPNP = this.aoBrightnessXZPP; + } else { + this.aoLightValueScratchXYZPNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3 - 1, var4); + this.aoBrightnessXYZPNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3 - 1, var4); + } + + if(!var16 && !var18) { + this.aoLightValueScratchXYZPPP = this.aoLightValueScratchXZPP; + this.aoBrightnessXYZPPP = this.aoBrightnessXZPP; + } else { + this.aoLightValueScratchXYZPPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3 + 1, var4); + this.aoBrightnessXYZPPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3 + 1, var4); + } + + if(this.renderMaxZ >= 1.0D) { + --var4; + } + + var20 = var14; + if(this.renderMaxZ >= 1.0D || !this.blockAccess.isBlockOpaqueCube(var2, var3, var4 + 1)) { + var20 = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 + 1); + } + + var21 = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 + 1); + var22 = (this.aoLightValueScratchXZNP + this.aoLightValueScratchXYZNPP + var21 + this.aoLightValueScratchYZPP) / 4.0F; + var23 = (var21 + this.aoLightValueScratchYZPP + this.aoLightValueScratchXZPP + this.aoLightValueScratchXYZPPP) / 4.0F; + var24 = (this.aoLightValueScratchYZNP + var21 + this.aoLightValueScratchXYZPNP + this.aoLightValueScratchXZPP) / 4.0F; + var25 = (this.aoLightValueScratchXYZNNP + this.aoLightValueScratchXZNP + this.aoLightValueScratchYZNP + var21) / 4.0F; + var9 = (float)((double)var22 * this.renderMaxY * (1.0D - this.renderMinX) + (double)var23 * this.renderMaxY * this.renderMinX + (double)var24 * (1.0D - this.renderMaxY) * this.renderMinX + (double)var25 * (1.0D - this.renderMaxY) * (1.0D - this.renderMinX)); + var10 = (float)((double)var22 * this.renderMinY * (1.0D - this.renderMinX) + (double)var23 * this.renderMinY * this.renderMinX + (double)var24 * (1.0D - this.renderMinY) * this.renderMinX + (double)var25 * (1.0D - this.renderMinY) * (1.0D - this.renderMinX)); + var11 = (float)((double)var22 * this.renderMinY * (1.0D - this.renderMaxX) + (double)var23 * this.renderMinY * this.renderMaxX + (double)var24 * (1.0D - this.renderMinY) * this.renderMaxX + (double)var25 * (1.0D - this.renderMinY) * (1.0D - this.renderMaxX)); + var12 = (float)((double)var22 * this.renderMaxY * (1.0D - this.renderMaxX) + (double)var23 * this.renderMaxY * this.renderMaxX + (double)var24 * (1.0D - this.renderMaxY) * this.renderMaxX + (double)var25 * (1.0D - this.renderMaxY) * (1.0D - this.renderMaxX)); + var26 = this.getAoBrightness(this.aoBrightnessXZNP, this.aoBrightnessXYZNPP, this.aoBrightnessYZPP, var20); + var27 = this.getAoBrightness(this.aoBrightnessYZPP, this.aoBrightnessXZPP, this.aoBrightnessXYZPPP, var20); + var28 = this.getAoBrightness(this.aoBrightnessYZNP, this.aoBrightnessXYZPNP, this.aoBrightnessXZPP, var20); + var29 = this.getAoBrightness(this.aoBrightnessXYZNNP, this.aoBrightnessXZNP, this.aoBrightnessYZNP, var20); + this.brightnessTopLeft = this.mixAoBrightness(var26, var29, var28, var27, this.renderMaxY * (1.0D - this.renderMinX), (1.0D - this.renderMaxY) * (1.0D - this.renderMinX), (1.0D - this.renderMaxY) * this.renderMinX, this.renderMaxY * this.renderMinX); + this.brightnessBottomLeft = this.mixAoBrightness(var26, var29, var28, var27, this.renderMinY * (1.0D - this.renderMinX), (1.0D - this.renderMinY) * (1.0D - this.renderMinX), (1.0D - this.renderMinY) * this.renderMinX, this.renderMinY * this.renderMinX); + this.brightnessBottomRight = this.mixAoBrightness(var26, var29, var28, var27, this.renderMinY * (1.0D - this.renderMaxX), (1.0D - this.renderMinY) * (1.0D - this.renderMaxX), (1.0D - this.renderMinY) * this.renderMaxX, this.renderMinY * this.renderMaxX); + this.brightnessTopRight = this.mixAoBrightness(var26, var29, var28, var27, this.renderMaxY * (1.0D - this.renderMaxX), (1.0D - this.renderMaxY) * (1.0D - this.renderMaxX), (1.0D - this.renderMaxY) * this.renderMaxX, this.renderMaxY * this.renderMaxX); + if(var13) { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = var5 * 0.8F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = var6 * 0.8F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = var7 * 0.8F; + } else { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.8F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.8F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.8F; + } + + this.colorRedTopLeft *= var9; + this.colorGreenTopLeft *= var9; + this.colorBlueTopLeft *= var9; + this.colorRedBottomLeft *= var10; + this.colorGreenBottomLeft *= var10; + this.colorBlueBottomLeft *= var10; + this.colorRedBottomRight *= var11; + this.colorGreenBottomRight *= var11; + this.colorBlueBottomRight *= var11; + this.colorRedTopRight *= var12; + this.colorGreenTopRight *= var12; + this.colorBlueTopRight *= var12; + var30 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 3); + this.renderFaceZPos(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 3)); + if(fancyGrass && var30.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture()) { + this.colorRedTopLeft *= var5; + this.colorRedBottomLeft *= var5; + this.colorRedBottomRight *= var5; + this.colorRedTopRight *= var5; + this.colorGreenTopLeft *= var6; + this.colorGreenBottomLeft *= var6; + this.colorGreenBottomRight *= var6; + this.colorGreenTopRight *= var6; + this.colorBlueTopLeft *= var7; + this.colorBlueBottomLeft *= var7; + this.colorBlueBottomRight *= var7; + this.colorBlueTopRight *= var7; + this.renderFaceZPos(var1, (double)var2, (double)var3, (double)var4, BlockGrass.getIconSideOverlay()); + } + + var8 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2 - 1, var3, var4, 4)) { + if(this.renderMinX <= 0.0D) { + --var2; + } + + this.aoLightValueScratchXYNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4); + this.aoLightValueScratchXZNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 - 1); + this.aoLightValueScratchXZNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 + 1); + this.aoLightValueScratchXYNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4); + this.aoBrightnessXYNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4); + this.aoBrightnessXZNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 - 1); + this.aoBrightnessXZNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 + 1); + this.aoBrightnessXYNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4); + var16 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3 + 1, var4)]; + var17 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3 - 1, var4)]; + var18 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3, var4 - 1)]; + var19 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 - 1, var3, var4 + 1)]; + if(!var18 && !var17) { + this.aoLightValueScratchXYZNNN = this.aoLightValueScratchXZNN; + this.aoBrightnessXYZNNN = this.aoBrightnessXZNN; + } else { + this.aoLightValueScratchXYZNNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4 - 1); + this.aoBrightnessXYZNNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4 - 1); + } + + if(!var19 && !var17) { + this.aoLightValueScratchXYZNNP = this.aoLightValueScratchXZNP; + this.aoBrightnessXYZNNP = this.aoBrightnessXZNP; + } else { + this.aoLightValueScratchXYZNNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4 + 1); + this.aoBrightnessXYZNNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4 + 1); + } + + if(!var18 && !var16) { + this.aoLightValueScratchXYZNPN = this.aoLightValueScratchXZNN; + this.aoBrightnessXYZNPN = this.aoBrightnessXZNN; + } else { + this.aoLightValueScratchXYZNPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4 - 1); + this.aoBrightnessXYZNPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4 - 1); + } + + if(!var19 && !var16) { + this.aoLightValueScratchXYZNPP = this.aoLightValueScratchXZNP; + this.aoBrightnessXYZNPP = this.aoBrightnessXZNP; + } else { + this.aoLightValueScratchXYZNPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4 + 1); + this.aoBrightnessXYZNPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4 + 1); + } + + if(this.renderMinX <= 0.0D) { + ++var2; + } + + var20 = var14; + if(this.renderMinX <= 0.0D || !this.blockAccess.isBlockOpaqueCube(var2 - 1, var3, var4)) { + var20 = var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4); + } + + var21 = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 - 1, var3, var4); + var22 = (this.aoLightValueScratchXYNN + this.aoLightValueScratchXYZNNP + var21 + this.aoLightValueScratchXZNP) / 4.0F; + var23 = (var21 + this.aoLightValueScratchXZNP + this.aoLightValueScratchXYNP + this.aoLightValueScratchXYZNPP) / 4.0F; + var24 = (this.aoLightValueScratchXZNN + var21 + this.aoLightValueScratchXYZNPN + this.aoLightValueScratchXYNP) / 4.0F; + var25 = (this.aoLightValueScratchXYZNNN + this.aoLightValueScratchXYNN + this.aoLightValueScratchXZNN + var21) / 4.0F; + var9 = (float)((double)var23 * this.renderMaxY * this.renderMaxZ + (double)var24 * this.renderMaxY * (1.0D - this.renderMaxZ) + (double)var25 * (1.0D - this.renderMaxY) * (1.0D - this.renderMaxZ) + (double)var22 * (1.0D - this.renderMaxY) * this.renderMaxZ); + var10 = (float)((double)var23 * this.renderMaxY * this.renderMinZ + (double)var24 * this.renderMaxY * (1.0D - this.renderMinZ) + (double)var25 * (1.0D - this.renderMaxY) * (1.0D - this.renderMinZ) + (double)var22 * (1.0D - this.renderMaxY) * this.renderMinZ); + var11 = (float)((double)var23 * this.renderMinY * this.renderMinZ + (double)var24 * this.renderMinY * (1.0D - this.renderMinZ) + (double)var25 * (1.0D - this.renderMinY) * (1.0D - this.renderMinZ) + (double)var22 * (1.0D - this.renderMinY) * this.renderMinZ); + var12 = (float)((double)var23 * this.renderMinY * this.renderMaxZ + (double)var24 * this.renderMinY * (1.0D - this.renderMaxZ) + (double)var25 * (1.0D - this.renderMinY) * (1.0D - this.renderMaxZ) + (double)var22 * (1.0D - this.renderMinY) * this.renderMaxZ); + var26 = this.getAoBrightness(this.aoBrightnessXYNN, this.aoBrightnessXYZNNP, this.aoBrightnessXZNP, var20); + var27 = this.getAoBrightness(this.aoBrightnessXZNP, this.aoBrightnessXYNP, this.aoBrightnessXYZNPP, var20); + var28 = this.getAoBrightness(this.aoBrightnessXZNN, this.aoBrightnessXYZNPN, this.aoBrightnessXYNP, var20); + var29 = this.getAoBrightness(this.aoBrightnessXYZNNN, this.aoBrightnessXYNN, this.aoBrightnessXZNN, var20); + this.brightnessTopLeft = this.mixAoBrightness(var27, var28, var29, var26, this.renderMaxY * this.renderMaxZ, this.renderMaxY * (1.0D - this.renderMaxZ), (1.0D - this.renderMaxY) * (1.0D - this.renderMaxZ), (1.0D - this.renderMaxY) * this.renderMaxZ); + this.brightnessBottomLeft = this.mixAoBrightness(var27, var28, var29, var26, this.renderMaxY * this.renderMinZ, this.renderMaxY * (1.0D - this.renderMinZ), (1.0D - this.renderMaxY) * (1.0D - this.renderMinZ), (1.0D - this.renderMaxY) * this.renderMinZ); + this.brightnessBottomRight = this.mixAoBrightness(var27, var28, var29, var26, this.renderMinY * this.renderMinZ, this.renderMinY * (1.0D - this.renderMinZ), (1.0D - this.renderMinY) * (1.0D - this.renderMinZ), (1.0D - this.renderMinY) * this.renderMinZ); + this.brightnessTopRight = this.mixAoBrightness(var27, var28, var29, var26, this.renderMinY * this.renderMaxZ, this.renderMinY * (1.0D - this.renderMaxZ), (1.0D - this.renderMinY) * (1.0D - this.renderMaxZ), (1.0D - this.renderMinY) * this.renderMaxZ); + if(var13) { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = var5 * 0.6F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = var6 * 0.6F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = var7 * 0.6F; + } else { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.6F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.6F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.6F; + } + + this.colorRedTopLeft *= var9; + this.colorGreenTopLeft *= var9; + this.colorBlueTopLeft *= var9; + this.colorRedBottomLeft *= var10; + this.colorGreenBottomLeft *= var10; + this.colorBlueBottomLeft *= var10; + this.colorRedBottomRight *= var11; + this.colorGreenBottomRight *= var11; + this.colorBlueBottomRight *= var11; + this.colorRedTopRight *= var12; + this.colorGreenTopRight *= var12; + this.colorBlueTopRight *= var12; + var30 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 4); + this.renderFaceXNeg(var1, (double)var2, (double)var3, (double)var4, var30); + if(fancyGrass && var30.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture()) { + this.colorRedTopLeft *= var5; + this.colorRedBottomLeft *= var5; + this.colorRedBottomRight *= var5; + this.colorRedTopRight *= var5; + this.colorGreenTopLeft *= var6; + this.colorGreenBottomLeft *= var6; + this.colorGreenBottomRight *= var6; + this.colorGreenTopRight *= var6; + this.colorBlueTopLeft *= var7; + this.colorBlueBottomLeft *= var7; + this.colorBlueBottomRight *= var7; + this.colorBlueTopRight *= var7; + this.renderFaceXNeg(var1, (double)var2, (double)var3, (double)var4, BlockGrass.getIconSideOverlay()); + } + + var8 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2 + 1, var3, var4, 5)) { + if(this.renderMaxX >= 1.0D) { + ++var2; + } + + this.aoLightValueScratchXYPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4); + this.aoLightValueScratchXZPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 - 1); + this.aoLightValueScratchXZPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3, var4 + 1); + this.aoLightValueScratchXYPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4); + this.aoBrightnessXYPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4); + this.aoBrightnessXZPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 - 1); + this.aoBrightnessXZPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 + 1); + this.aoBrightnessXYPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4); + var16 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3 + 1, var4)]; + var17 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3 - 1, var4)]; + var18 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3, var4 + 1)]; + var19 = Block.canBlockGrass[this.blockAccess.getBlockId(var2 + 1, var3, var4 - 1)]; + if(!var17 && !var19) { + this.aoLightValueScratchXYZPNN = this.aoLightValueScratchXZPN; + this.aoBrightnessXYZPNN = this.aoBrightnessXZPN; + } else { + this.aoLightValueScratchXYZPNN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4 - 1); + this.aoBrightnessXYZPNN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4 - 1); + } + + if(!var17 && !var18) { + this.aoLightValueScratchXYZPNP = this.aoLightValueScratchXZPP; + this.aoBrightnessXYZPNP = this.aoBrightnessXZPP; + } else { + this.aoLightValueScratchXYZPNP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 - 1, var4 + 1); + this.aoBrightnessXYZPNP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4 + 1); + } + + if(!var16 && !var19) { + this.aoLightValueScratchXYZPPN = this.aoLightValueScratchXZPN; + this.aoBrightnessXYZPPN = this.aoBrightnessXZPN; + } else { + this.aoLightValueScratchXYZPPN = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4 - 1); + this.aoBrightnessXYZPPN = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4 - 1); + } + + if(!var16 && !var18) { + this.aoLightValueScratchXYZPPP = this.aoLightValueScratchXZPP; + this.aoBrightnessXYZPPP = this.aoBrightnessXZPP; + } else { + this.aoLightValueScratchXYZPPP = var1.getAmbientOcclusionLightValue(this.blockAccess, var2, var3 + 1, var4 + 1); + this.aoBrightnessXYZPPP = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4 + 1); + } + + if(this.renderMaxX >= 1.0D) { + --var2; + } + + var20 = var14; + if(this.renderMaxX >= 1.0D || !this.blockAccess.isBlockOpaqueCube(var2 + 1, var3, var4)) { + var20 = var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4); + } + + var21 = var1.getAmbientOcclusionLightValue(this.blockAccess, var2 + 1, var3, var4); + var22 = (this.aoLightValueScratchXYPN + this.aoLightValueScratchXYZPNP + var21 + this.aoLightValueScratchXZPP) / 4.0F; + var23 = (this.aoLightValueScratchXYZPNN + this.aoLightValueScratchXYPN + this.aoLightValueScratchXZPN + var21) / 4.0F; + var24 = (this.aoLightValueScratchXZPN + var21 + this.aoLightValueScratchXYZPPN + this.aoLightValueScratchXYPP) / 4.0F; + var25 = (var21 + this.aoLightValueScratchXZPP + this.aoLightValueScratchXYPP + this.aoLightValueScratchXYZPPP) / 4.0F; + var9 = (float)((double)var22 * (1.0D - this.renderMinY) * this.renderMaxZ + (double)var23 * (1.0D - this.renderMinY) * (1.0D - this.renderMaxZ) + (double)var24 * this.renderMinY * (1.0D - this.renderMaxZ) + (double)var25 * this.renderMinY * this.renderMaxZ); + var10 = (float)((double)var22 * (1.0D - this.renderMinY) * this.renderMinZ + (double)var23 * (1.0D - this.renderMinY) * (1.0D - this.renderMinZ) + (double)var24 * this.renderMinY * (1.0D - this.renderMinZ) + (double)var25 * this.renderMinY * this.renderMinZ); + var11 = (float)((double)var22 * (1.0D - this.renderMaxY) * this.renderMinZ + (double)var23 * (1.0D - this.renderMaxY) * (1.0D - this.renderMinZ) + (double)var24 * this.renderMaxY * (1.0D - this.renderMinZ) + (double)var25 * this.renderMaxY * this.renderMinZ); + var12 = (float)((double)var22 * (1.0D - this.renderMaxY) * this.renderMaxZ + (double)var23 * (1.0D - this.renderMaxY) * (1.0D - this.renderMaxZ) + (double)var24 * this.renderMaxY * (1.0D - this.renderMaxZ) + (double)var25 * this.renderMaxY * this.renderMaxZ); + var26 = this.getAoBrightness(this.aoBrightnessXYPN, this.aoBrightnessXYZPNP, this.aoBrightnessXZPP, var20); + var27 = this.getAoBrightness(this.aoBrightnessXZPP, this.aoBrightnessXYPP, this.aoBrightnessXYZPPP, var20); + var28 = this.getAoBrightness(this.aoBrightnessXZPN, this.aoBrightnessXYZPPN, this.aoBrightnessXYPP, var20); + var29 = this.getAoBrightness(this.aoBrightnessXYZPNN, this.aoBrightnessXYPN, this.aoBrightnessXZPN, var20); + this.brightnessTopLeft = this.mixAoBrightness(var26, var29, var28, var27, (1.0D - this.renderMinY) * this.renderMaxZ, (1.0D - this.renderMinY) * (1.0D - this.renderMaxZ), this.renderMinY * (1.0D - this.renderMaxZ), this.renderMinY * this.renderMaxZ); + this.brightnessBottomLeft = this.mixAoBrightness(var26, var29, var28, var27, (1.0D - this.renderMinY) * this.renderMinZ, (1.0D - this.renderMinY) * (1.0D - this.renderMinZ), this.renderMinY * (1.0D - this.renderMinZ), this.renderMinY * this.renderMinZ); + this.brightnessBottomRight = this.mixAoBrightness(var26, var29, var28, var27, (1.0D - this.renderMaxY) * this.renderMinZ, (1.0D - this.renderMaxY) * (1.0D - this.renderMinZ), this.renderMaxY * (1.0D - this.renderMinZ), this.renderMaxY * this.renderMinZ); + this.brightnessTopRight = this.mixAoBrightness(var26, var29, var28, var27, (1.0D - this.renderMaxY) * this.renderMaxZ, (1.0D - this.renderMaxY) * (1.0D - this.renderMaxZ), this.renderMaxY * (1.0D - this.renderMaxZ), this.renderMaxY * this.renderMaxZ); + if(var13) { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = var5 * 0.6F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = var6 * 0.6F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = var7 * 0.6F; + } else { + this.colorRedTopLeft = this.colorRedBottomLeft = this.colorRedBottomRight = this.colorRedTopRight = 0.6F; + this.colorGreenTopLeft = this.colorGreenBottomLeft = this.colorGreenBottomRight = this.colorGreenTopRight = 0.6F; + this.colorBlueTopLeft = this.colorBlueBottomLeft = this.colorBlueBottomRight = this.colorBlueTopRight = 0.6F; + } + + this.colorRedTopLeft *= var9; + this.colorGreenTopLeft *= var9; + this.colorBlueTopLeft *= var9; + this.colorRedBottomLeft *= var10; + this.colorGreenBottomLeft *= var10; + this.colorBlueBottomLeft *= var10; + this.colorRedBottomRight *= var11; + this.colorGreenBottomRight *= var11; + this.colorBlueBottomRight *= var11; + this.colorRedTopRight *= var12; + this.colorGreenTopRight *= var12; + this.colorBlueTopRight *= var12; + var30 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 5); + this.renderFaceXPos(var1, (double)var2, (double)var3, (double)var4, var30); + if(fancyGrass && var30.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture()) { + this.colorRedTopLeft *= var5; + this.colorRedBottomLeft *= var5; + this.colorRedBottomRight *= var5; + this.colorRedTopRight *= var5; + this.colorGreenTopLeft *= var6; + this.colorGreenBottomLeft *= var6; + this.colorGreenBottomRight *= var6; + this.colorGreenTopRight *= var6; + this.colorBlueTopLeft *= var7; + this.colorBlueBottomLeft *= var7; + this.colorBlueBottomRight *= var7; + this.colorBlueTopRight *= var7; + this.renderFaceXPos(var1, (double)var2, (double)var3, (double)var4, BlockGrass.getIconSideOverlay()); + } + + var8 = true; + } + + this.enableAO = false; + return var8; + } + + private int getAoBrightness(int var1, int var2, int var3, int var4) { + if(var1 == 0) { + var1 = var4; + } + + if(var2 == 0) { + var2 = var4; + } + + if(var3 == 0) { + var3 = var4; + } + + return var1 + var2 + var3 + var4 >> 2 & 16711935; + } + + private int mixAoBrightness(int var1, int var2, int var3, int var4, double var5, double var7, double var9, double var11) { + int var13 = (int)((double)(var1 >> 16 & 255) * var5 + (double)(var2 >> 16 & 255) * var7 + (double)(var3 >> 16 & 255) * var9 + (double)(var4 >> 16 & 255) * var11) & 255; + int var14 = (int)((double)(var1 & 255) * var5 + (double)(var2 & 255) * var7 + (double)(var3 & 255) * var9 + (double)(var4 & 255) * var11) & 255; + return var13 << 16 | var14; + } + + public boolean renderStandardBlockWithColorMultiplier(Block var1, int var2, int var3, int var4, float var5, float var6, float var7) { + this.enableAO = false; + Tessellator var8 = Tessellator.instance; + boolean var9 = false; + float var10 = 0.5F; + float var11 = 1.0F; + float var12 = 0.8F; + float var13 = 0.6F; + float var14 = var11 * var5; + float var15 = var11 * var6; + float var16 = var11 * var7; + float var17 = var10; + float var18 = var12; + float var19 = var13; + float var20 = var10; + float var21 = var12; + float var22 = var13; + float var23 = var10; + float var24 = var12; + float var25 = var13; + if(var1 != Block.grass) { + var17 = var10 * var5; + var18 = var12 * var5; + var19 = var13 * var5; + var20 = var10 * var6; + var21 = var12 * var6; + var22 = var13 * var6; + var23 = var10 * var7; + var24 = var12 * var7; + var25 = var13 * var7; + } + + int var26 = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4); + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3 - 1, var4, 0)) { + var8.setBrightness(this.renderMinY > 0.0D ? var26 : var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4)); + var8.setColorOpaque_F(var17, var20, var23); + this.renderFaceYNeg(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 0)); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3 + 1, var4, 1)) { + var8.setBrightness(this.renderMaxY < 1.0D ? var26 : var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4)); + var8.setColorOpaque_F(var14, var15, var16); + this.renderFaceYPos(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 1)); + var9 = true; + } + + Icon var28; + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 - 1, 2)) { + var8.setBrightness(this.renderMinZ > 0.0D ? var26 : var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 - 1)); + var8.setColorOpaque_F(var18, var21, var24); + var28 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 2); + this.renderFaceZNeg(var1, (double)var2, (double)var3, (double)var4, var28); + if(fancyGrass && var28.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture()) { + var8.setColorOpaque_F(var18 * var5, var21 * var6, var24 * var7); + this.renderFaceZNeg(var1, (double)var2, (double)var3, (double)var4, BlockGrass.getIconSideOverlay()); + } + + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 + 1, 3)) { + var8.setBrightness(this.renderMaxZ < 1.0D ? var26 : var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 + 1)); + var8.setColorOpaque_F(var18, var21, var24); + var28 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 3); + this.renderFaceZPos(var1, (double)var2, (double)var3, (double)var4, var28); + if(fancyGrass && var28.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture()) { + var8.setColorOpaque_F(var18 * var5, var21 * var6, var24 * var7); + this.renderFaceZPos(var1, (double)var2, (double)var3, (double)var4, BlockGrass.getIconSideOverlay()); + } + + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2 - 1, var3, var4, 4)) { + var8.setBrightness(this.renderMinX > 0.0D ? var26 : var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4)); + var8.setColorOpaque_F(var19, var22, var25); + var28 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 4); + this.renderFaceXNeg(var1, (double)var2, (double)var3, (double)var4, var28); + if(fancyGrass && var28.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture()) { + var8.setColorOpaque_F(var19 * var5, var22 * var6, var25 * var7); + this.renderFaceXNeg(var1, (double)var2, (double)var3, (double)var4, BlockGrass.getIconSideOverlay()); + } + + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2 + 1, var3, var4, 5)) { + var8.setBrightness(this.renderMaxX < 1.0D ? var26 : var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4)); + var8.setColorOpaque_F(var19, var22, var25); + var28 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 5); + this.renderFaceXPos(var1, (double)var2, (double)var3, (double)var4, var28); + if(fancyGrass && var28.getIconName().equals("grass_side") && !this.hasOverrideBlockTexture()) { + var8.setColorOpaque_F(var19 * var5, var22 * var6, var25 * var7); + this.renderFaceXPos(var1, (double)var2, (double)var3, (double)var4, BlockGrass.getIconSideOverlay()); + } + + var9 = true; + } + + return var9; + } + + private boolean renderBlockCocoa(BlockCocoa var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + var5.setColorOpaque_F(1.0F, 1.0F, 1.0F); + int var6 = this.blockAccess.getBlockMetadata(var2, var3, var4); + int var7 = BlockDirectional.getDirection(var6); + int var8 = BlockCocoa.func_72219_c(var6); + Icon var9 = var1.func_94468_i_(var8); + int var10 = 4 + var8 * 2; + int var11 = 5 + var8 * 2; + double var12 = 15.0D - (double)var10; + double var14 = 15.0D; + double var16 = 4.0D; + double var18 = 4.0D + (double)var11; + double var20 = (double)var9.getInterpolatedU(var12); + double var22 = (double)var9.getInterpolatedU(var14); + double var24 = (double)var9.getInterpolatedV(var16); + double var26 = (double)var9.getInterpolatedV(var18); + double var28 = 0.0D; + double var30 = 0.0D; + switch(var7) { + case 0: + var28 = 8.0D - (double)(var10 / 2); + var30 = 15.0D - (double)var10; + break; + case 1: + var28 = 1.0D; + var30 = 8.0D - (double)(var10 / 2); + break; + case 2: + var28 = 8.0D - (double)(var10 / 2); + var30 = 1.0D; + break; + case 3: + var28 = 15.0D - (double)var10; + var30 = 8.0D - (double)(var10 / 2); + } + + double var32 = (double)var2 + var28 / 16.0D; + double var34 = (double)var2 + (var28 + (double)var10) / 16.0D; + double var36 = (double)var3 + (12.0D - (double)var11) / 16.0D; + double var38 = (double)var3 + 0.75D; + double var40 = (double)var4 + var30 / 16.0D; + double var42 = (double)var4 + (var30 + (double)var10) / 16.0D; + var5.addVertexWithUV(var32, var36, var40, var20, var26); + var5.addVertexWithUV(var32, var36, var42, var22, var26); + var5.addVertexWithUV(var32, var38, var42, var22, var24); + var5.addVertexWithUV(var32, var38, var40, var20, var24); + var5.addVertexWithUV(var34, var36, var42, var20, var26); + var5.addVertexWithUV(var34, var36, var40, var22, var26); + var5.addVertexWithUV(var34, var38, var40, var22, var24); + var5.addVertexWithUV(var34, var38, var42, var20, var24); + var5.addVertexWithUV(var34, var36, var40, var20, var26); + var5.addVertexWithUV(var32, var36, var40, var22, var26); + var5.addVertexWithUV(var32, var38, var40, var22, var24); + var5.addVertexWithUV(var34, var38, var40, var20, var24); + var5.addVertexWithUV(var32, var36, var42, var20, var26); + var5.addVertexWithUV(var34, var36, var42, var22, var26); + var5.addVertexWithUV(var34, var38, var42, var22, var24); + var5.addVertexWithUV(var32, var38, var42, var20, var24); + int var44 = var10; + if(var8 >= 2) { + var44 = var10 - 1; + } + + var20 = (double)var9.getMinU(); + var22 = (double)var9.getInterpolatedU((double)var44); + var24 = (double)var9.getMinV(); + var26 = (double)var9.getInterpolatedV((double)var44); + var5.addVertexWithUV(var32, var38, var42, var20, var26); + var5.addVertexWithUV(var34, var38, var42, var22, var26); + var5.addVertexWithUV(var34, var38, var40, var22, var24); + var5.addVertexWithUV(var32, var38, var40, var20, var24); + var5.addVertexWithUV(var32, var36, var40, var20, var24); + var5.addVertexWithUV(var34, var36, var40, var22, var24); + var5.addVertexWithUV(var34, var36, var42, var22, var26); + var5.addVertexWithUV(var32, var36, var42, var20, var26); + var20 = (double)var9.getInterpolatedU(12.0D); + var22 = (double)var9.getMaxU(); + var24 = (double)var9.getMinV(); + var26 = (double)var9.getInterpolatedV(4.0D); + var28 = 8.0D; + var30 = 0.0D; + double var45; + switch(var7) { + case 0: + var28 = 8.0D; + var30 = 12.0D; + var45 = var20; + var20 = var22; + var22 = var45; + break; + case 1: + var28 = 0.0D; + var30 = 8.0D; + break; + case 2: + var28 = 8.0D; + var30 = 0.0D; + break; + case 3: + var28 = 12.0D; + var30 = 8.0D; + var45 = var20; + var20 = var22; + var22 = var45; + } + + var32 = (double)var2 + var28 / 16.0D; + var34 = (double)var2 + (var28 + 4.0D) / 16.0D; + var36 = (double)var3 + 0.75D; + var38 = (double)var3 + 1.0D; + var40 = (double)var4 + var30 / 16.0D; + var42 = (double)var4 + (var30 + 4.0D) / 16.0D; + if(var7 != 2 && var7 != 0) { + if(var7 == 1 || var7 == 3) { + var5.addVertexWithUV(var34, var36, var40, var20, var26); + var5.addVertexWithUV(var32, var36, var40, var22, var26); + var5.addVertexWithUV(var32, var38, var40, var22, var24); + var5.addVertexWithUV(var34, var38, var40, var20, var24); + var5.addVertexWithUV(var32, var36, var40, var22, var26); + var5.addVertexWithUV(var34, var36, var40, var20, var26); + var5.addVertexWithUV(var34, var38, var40, var20, var24); + var5.addVertexWithUV(var32, var38, var40, var22, var24); + } + } else { + var5.addVertexWithUV(var32, var36, var40, var22, var26); + var5.addVertexWithUV(var32, var36, var42, var20, var26); + var5.addVertexWithUV(var32, var38, var42, var20, var24); + var5.addVertexWithUV(var32, var38, var40, var22, var24); + var5.addVertexWithUV(var32, var36, var42, var20, var26); + var5.addVertexWithUV(var32, var36, var40, var22, var26); + var5.addVertexWithUV(var32, var38, var40, var22, var24); + var5.addVertexWithUV(var32, var38, var42, var20, var24); + } + + return true; + } + + private boolean renderBlockBeacon(BlockBeacon var1, int var2, int var3, int var4) { + float var5 = 3.0F / 16.0F; + this.setOverrideBlockTexture(this.getBlockIcon(Block.obsidian)); + this.setRenderBounds(0.125D, (double)0.00625F, 0.125D, 0.875D, (double)var5, 0.875D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setOverrideBlockTexture(this.getBlockIcon(Block.glass)); + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setOverrideBlockTexture(var1.getBeaconIcon()); + this.setRenderBounds(0.1875D, (double)var5, 0.1875D, 0.8125D, 0.875D, 0.8125D); + this.renderStandardBlock(var1, var2, var3, var4); + this.clearOverrideBlockTexture(); + return true; + } + + public boolean renderBlockCactus(Block var1, int var2, int var3, int var4) { + int var5 = var1.colorMultiplier(this.blockAccess, var2, var3, var4); + float var6 = (float)(var5 >> 16 & 255) / 255.0F; + float var7 = (float)(var5 >> 8 & 255) / 255.0F; + float var8 = (float)(var5 & 255) / 255.0F; + if(EntityRenderer.anaglyphEnable) { + float var9 = (var6 * 30.0F + var7 * 59.0F + var8 * 11.0F) / 100.0F; + float var10 = (var6 * 30.0F + var7 * 70.0F) / 100.0F; + float var11 = (var6 * 30.0F + var8 * 70.0F) / 100.0F; + var6 = var9; + var7 = var10; + var8 = var11; + } + + return this.renderBlockCactusImpl(var1, var2, var3, var4, var6, var7, var8); + } + + public boolean renderBlockCactusImpl(Block var1, int var2, int var3, int var4, float var5, float var6, float var7) { + Tessellator var8 = Tessellator.instance; + boolean var9 = false; + float var10 = 0.5F; + float var11 = 1.0F; + float var12 = 0.8F; + float var13 = 0.6F; + float var14 = var10 * var5; + float var15 = var11 * var5; + float var16 = var12 * var5; + float var17 = var13 * var5; + float var18 = var10 * var6; + float var19 = var11 * var6; + float var20 = var12 * var6; + float var21 = var13 * var6; + float var22 = var10 * var7; + float var23 = var11 * var7; + float var24 = var12 * var7; + float var25 = var13 * var7; + float var26 = 1.0F / 16.0F; + int var28 = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4); + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3 - 1, var4, 0)) { + var8.setBrightness(this.renderMinY > 0.0D ? var28 : var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4)); + var8.setColorOpaque_F(var14, var18, var22); + this.renderFaceYNeg(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 0)); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3 + 1, var4, 1)) { + var8.setBrightness(this.renderMaxY < 1.0D ? var28 : var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4)); + var8.setColorOpaque_F(var15, var19, var23); + this.renderFaceYPos(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 1)); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 - 1, 2)) { + var8.setBrightness(this.renderMinZ > 0.0D ? var28 : var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 - 1)); + var8.setColorOpaque_F(var16, var20, var24); + var8.addTranslation(0.0F, 0.0F, var26); + this.renderFaceZNeg(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 2)); + var8.addTranslation(0.0F, 0.0F, -var26); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 + 1, 3)) { + var8.setBrightness(this.renderMaxZ < 1.0D ? var28 : var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 + 1)); + var8.setColorOpaque_F(var16, var20, var24); + var8.addTranslation(0.0F, 0.0F, -var26); + this.renderFaceZPos(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 3)); + var8.addTranslation(0.0F, 0.0F, var26); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2 - 1, var3, var4, 4)) { + var8.setBrightness(this.renderMinX > 0.0D ? var28 : var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4)); + var8.setColorOpaque_F(var17, var21, var25); + var8.addTranslation(var26, 0.0F, 0.0F); + this.renderFaceXNeg(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 4)); + var8.addTranslation(-var26, 0.0F, 0.0F); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2 + 1, var3, var4, 5)) { + var8.setBrightness(this.renderMaxX < 1.0D ? var28 : var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4)); + var8.setColorOpaque_F(var17, var21, var25); + var8.addTranslation(-var26, 0.0F, 0.0F); + this.renderFaceXPos(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 5)); + var8.addTranslation(var26, 0.0F, 0.0F); + var9 = true; + } + + return var9; + } + + public boolean renderBlockFence(BlockFence var1, int var2, int var3, int var4) { + boolean var5 = false; + float var6 = 6.0F / 16.0F; + float var7 = 10.0F / 16.0F; + this.setRenderBounds((double)var6, 0.0D, (double)var6, (double)var7, 1.0D, (double)var7); + this.renderStandardBlock(var1, var2, var3, var4); + var5 = true; + boolean var8 = false; + boolean var9 = false; + if(var1.canConnectFenceTo(this.blockAccess, var2 - 1, var3, var4) || var1.canConnectFenceTo(this.blockAccess, var2 + 1, var3, var4)) { + var8 = true; + } + + if(var1.canConnectFenceTo(this.blockAccess, var2, var3, var4 - 1) || var1.canConnectFenceTo(this.blockAccess, var2, var3, var4 + 1)) { + var9 = true; + } + + boolean var10 = var1.canConnectFenceTo(this.blockAccess, var2 - 1, var3, var4); + boolean var11 = var1.canConnectFenceTo(this.blockAccess, var2 + 1, var3, var4); + boolean var12 = var1.canConnectFenceTo(this.blockAccess, var2, var3, var4 - 1); + boolean var13 = var1.canConnectFenceTo(this.blockAccess, var2, var3, var4 + 1); + if(!var8 && !var9) { + var8 = true; + } + + var6 = 7.0F / 16.0F; + var7 = 9.0F / 16.0F; + float var14 = 12.0F / 16.0F; + float var15 = 15.0F / 16.0F; + float var16 = var10 ? 0.0F : var6; + float var17 = var11 ? 1.0F : var7; + float var18 = var12 ? 0.0F : var6; + float var19 = var13 ? 1.0F : var7; + if(var8) { + this.setRenderBounds((double)var16, (double)var14, (double)var6, (double)var17, (double)var15, (double)var7); + this.renderStandardBlock(var1, var2, var3, var4); + var5 = true; + } + + if(var9) { + this.setRenderBounds((double)var6, (double)var14, (double)var18, (double)var7, (double)var15, (double)var19); + this.renderStandardBlock(var1, var2, var3, var4); + var5 = true; + } + + var14 = 6.0F / 16.0F; + var15 = 9.0F / 16.0F; + if(var8) { + this.setRenderBounds((double)var16, (double)var14, (double)var6, (double)var17, (double)var15, (double)var7); + this.renderStandardBlock(var1, var2, var3, var4); + var5 = true; + } + + if(var9) { + this.setRenderBounds((double)var6, (double)var14, (double)var18, (double)var7, (double)var15, (double)var19); + this.renderStandardBlock(var1, var2, var3, var4); + var5 = true; + } + + var1.setBlockBoundsBasedOnState(this.blockAccess, var2, var3, var4); + return var5; + } + + public boolean renderBlockWall(BlockWall var1, int var2, int var3, int var4) { + boolean var5 = var1.canConnectWallTo(this.blockAccess, var2 - 1, var3, var4); + boolean var6 = var1.canConnectWallTo(this.blockAccess, var2 + 1, var3, var4); + boolean var7 = var1.canConnectWallTo(this.blockAccess, var2, var3, var4 - 1); + boolean var8 = var1.canConnectWallTo(this.blockAccess, var2, var3, var4 + 1); + boolean var9 = var7 && var8 && !var5 && !var6; + boolean var10 = !var7 && !var8 && var5 && var6; + boolean var11 = this.blockAccess.isAirBlock(var2, var3 + 1, var4); + if((var9 || var10) && var11) { + if(var9) { + this.setRenderBounds(0.3125D, 0.0D, 0.0D, 0.6875D, 0.8125D, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + } else { + this.setRenderBounds(0.0D, 0.0D, 0.3125D, 1.0D, 0.8125D, 0.6875D); + this.renderStandardBlock(var1, var2, var3, var4); + } + } else { + this.setRenderBounds(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D); + this.renderStandardBlock(var1, var2, var3, var4); + if(var5) { + this.setRenderBounds(0.0D, 0.0D, 0.3125D, 0.25D, 0.8125D, 0.6875D); + this.renderStandardBlock(var1, var2, var3, var4); + } + + if(var6) { + this.setRenderBounds(0.75D, 0.0D, 0.3125D, 1.0D, 0.8125D, 0.6875D); + this.renderStandardBlock(var1, var2, var3, var4); + } + + if(var7) { + this.setRenderBounds(0.3125D, 0.0D, 0.0D, 0.6875D, 0.8125D, 0.25D); + this.renderStandardBlock(var1, var2, var3, var4); + } + + if(var8) { + this.setRenderBounds(0.3125D, 0.0D, 0.75D, 0.6875D, 0.8125D, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + } + } + + var1.setBlockBoundsBasedOnState(this.blockAccess, var2, var3, var4); + return true; + } + + public boolean renderBlockDragonEgg(BlockDragonEgg var1, int var2, int var3, int var4) { + boolean var5 = false; + int var6 = 0; + + for(int var7 = 0; var7 < 8; ++var7) { + byte var8 = 0; + byte var9 = 1; + if(var7 == 0) { + var8 = 2; + } + + if(var7 == 1) { + var8 = 3; + } + + if(var7 == 2) { + var8 = 4; + } + + if(var7 == 3) { + var8 = 5; + var9 = 2; + } + + if(var7 == 4) { + var8 = 6; + var9 = 3; + } + + if(var7 == 5) { + var8 = 7; + var9 = 5; + } + + if(var7 == 6) { + var8 = 6; + var9 = 2; + } + + if(var7 == 7) { + var8 = 3; + } + + float var10 = (float)var8 / 16.0F; + float var11 = 1.0F - (float)var6 / 16.0F; + float var12 = 1.0F - (float)(var6 + var9) / 16.0F; + var6 += var9; + this.setRenderBounds((double)(0.5F - var10), (double)var12, (double)(0.5F - var10), (double)(0.5F + var10), (double)var11, (double)(0.5F + var10)); + this.renderStandardBlock(var1, var2, var3, var4); + } + + var5 = true; + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + return var5; + } + + public boolean renderBlockFenceGate(BlockFenceGate var1, int var2, int var3, int var4) { + boolean var5 = true; + int var6 = this.blockAccess.getBlockMetadata(var2, var3, var4); + boolean var7 = BlockFenceGate.isFenceGateOpen(var6); + int var8 = BlockDirectional.getDirection(var6); + float var9 = 6.0F / 16.0F; + float var10 = 9.0F / 16.0F; + float var11 = 12.0F / 16.0F; + float var12 = 15.0F / 16.0F; + float var13 = 5.0F / 16.0F; + float var14 = 1.0F; + if((var8 == 2 || var8 == 0) && this.blockAccess.getBlockId(var2 - 1, var3, var4) == Block.cobblestoneWall.blockID && this.blockAccess.getBlockId(var2 + 1, var3, var4) == Block.cobblestoneWall.blockID || (var8 == 3 || var8 == 1) && this.blockAccess.getBlockId(var2, var3, var4 - 1) == Block.cobblestoneWall.blockID && this.blockAccess.getBlockId(var2, var3, var4 + 1) == Block.cobblestoneWall.blockID) { + var9 -= 3.0F / 16.0F; + var10 -= 3.0F / 16.0F; + var11 -= 3.0F / 16.0F; + var12 -= 3.0F / 16.0F; + var13 -= 3.0F / 16.0F; + var14 -= 3.0F / 16.0F; + } + + this.renderAllFaces = true; + float var15; + float var16; + float var17; + float var18; + if(var8 != 3 && var8 != 1) { + var15 = 0.0F; + var16 = 2.0F / 16.0F; + var17 = 7.0F / 16.0F; + var18 = 9.0F / 16.0F; + this.setRenderBounds((double)var15, (double)var13, (double)var17, (double)var16, (double)var14, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + var15 = 14.0F / 16.0F; + var16 = 1.0F; + this.setRenderBounds((double)var15, (double)var13, (double)var17, (double)var16, (double)var14, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + } else { + this.uvRotateTop = 1; + var15 = 7.0F / 16.0F; + var16 = 9.0F / 16.0F; + var17 = 0.0F; + var18 = 2.0F / 16.0F; + this.setRenderBounds((double)var15, (double)var13, (double)var17, (double)var16, (double)var14, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + var17 = 14.0F / 16.0F; + var18 = 1.0F; + this.setRenderBounds((double)var15, (double)var13, (double)var17, (double)var16, (double)var14, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + this.uvRotateTop = 0; + } + + if(var7) { + if(var8 == 2 || var8 == 0) { + this.uvRotateTop = 1; + } + + if(var8 == 3) { + this.setRenderBounds(0.8125D, (double)var9, 0.0D, 0.9375D, (double)var12, 0.125D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.8125D, (double)var9, 0.875D, 0.9375D, (double)var12, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.5625D, (double)var9, 0.0D, 0.8125D, (double)var10, 0.125D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.5625D, (double)var9, 0.875D, 0.8125D, (double)var10, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.5625D, (double)var11, 0.0D, 0.8125D, (double)var12, 0.125D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.5625D, (double)var11, 0.875D, 0.8125D, (double)var12, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + } else if(var8 == 1) { + this.setRenderBounds(1.0D / 16.0D, (double)var9, 0.0D, 0.1875D, (double)var12, 0.125D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(1.0D / 16.0D, (double)var9, 0.875D, 0.1875D, (double)var12, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.1875D, (double)var9, 0.0D, 0.4375D, (double)var10, 0.125D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.1875D, (double)var9, 0.875D, 0.4375D, (double)var10, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.1875D, (double)var11, 0.0D, 0.4375D, (double)var12, 0.125D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.1875D, (double)var11, 0.875D, 0.4375D, (double)var12, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + } else if(var8 == 0) { + this.setRenderBounds(0.0D, (double)var9, 0.8125D, 0.125D, (double)var12, 0.9375D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.875D, (double)var9, 0.8125D, 1.0D, (double)var12, 0.9375D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.0D, (double)var9, 0.5625D, 0.125D, (double)var10, 0.8125D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.875D, (double)var9, 0.5625D, 1.0D, (double)var10, 0.8125D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.0D, (double)var11, 0.5625D, 0.125D, (double)var12, 0.8125D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.875D, (double)var11, 0.5625D, 1.0D, (double)var12, 0.8125D); + this.renderStandardBlock(var1, var2, var3, var4); + } else if(var8 == 2) { + this.setRenderBounds(0.0D, (double)var9, 1.0D / 16.0D, 0.125D, (double)var12, 0.1875D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.875D, (double)var9, 1.0D / 16.0D, 1.0D, (double)var12, 0.1875D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.0D, (double)var9, 0.1875D, 0.125D, (double)var10, 0.4375D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.875D, (double)var9, 0.1875D, 1.0D, (double)var10, 0.4375D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.0D, (double)var11, 0.1875D, 0.125D, (double)var12, 0.4375D); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds(0.875D, (double)var11, 0.1875D, 1.0D, (double)var12, 0.4375D); + this.renderStandardBlock(var1, var2, var3, var4); + } + } else if(var8 != 3 && var8 != 1) { + var15 = 6.0F / 16.0F; + var16 = 0.5F; + var17 = 7.0F / 16.0F; + var18 = 9.0F / 16.0F; + this.setRenderBounds((double)var15, (double)var9, (double)var17, (double)var16, (double)var12, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + var15 = 0.5F; + var16 = 10.0F / 16.0F; + this.setRenderBounds((double)var15, (double)var9, (double)var17, (double)var16, (double)var12, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + var15 = 10.0F / 16.0F; + var16 = 14.0F / 16.0F; + this.setRenderBounds((double)var15, (double)var9, (double)var17, (double)var16, (double)var10, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds((double)var15, (double)var11, (double)var17, (double)var16, (double)var12, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + var15 = 2.0F / 16.0F; + var16 = 6.0F / 16.0F; + this.setRenderBounds((double)var15, (double)var9, (double)var17, (double)var16, (double)var10, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds((double)var15, (double)var11, (double)var17, (double)var16, (double)var12, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + } else { + this.uvRotateTop = 1; + var15 = 7.0F / 16.0F; + var16 = 9.0F / 16.0F; + var17 = 6.0F / 16.0F; + var18 = 0.5F; + this.setRenderBounds((double)var15, (double)var9, (double)var17, (double)var16, (double)var12, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + var17 = 0.5F; + var18 = 10.0F / 16.0F; + this.setRenderBounds((double)var15, (double)var9, (double)var17, (double)var16, (double)var12, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + var17 = 10.0F / 16.0F; + var18 = 14.0F / 16.0F; + this.setRenderBounds((double)var15, (double)var9, (double)var17, (double)var16, (double)var10, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds((double)var15, (double)var11, (double)var17, (double)var16, (double)var12, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + var17 = 2.0F / 16.0F; + var18 = 6.0F / 16.0F; + this.setRenderBounds((double)var15, (double)var9, (double)var17, (double)var16, (double)var10, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + this.setRenderBounds((double)var15, (double)var11, (double)var17, (double)var16, (double)var12, (double)var18); + this.renderStandardBlock(var1, var2, var3, var4); + } + + this.renderAllFaces = false; + this.uvRotateTop = 0; + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + return var5; + } + + private boolean renderBlockHopper(BlockHopper var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + var5.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + float var6 = 1.0F; + int var7 = var1.colorMultiplier(this.blockAccess, var2, var3, var4); + float var8 = (float)(var7 >> 16 & 255) / 255.0F; + float var9 = (float)(var7 >> 8 & 255) / 255.0F; + float var10 = (float)(var7 & 255) / 255.0F; + if(EntityRenderer.anaglyphEnable) { + float var11 = (var8 * 30.0F + var9 * 59.0F + var10 * 11.0F) / 100.0F; + float var12 = (var8 * 30.0F + var9 * 70.0F) / 100.0F; + float var13 = (var8 * 30.0F + var10 * 70.0F) / 100.0F; + var8 = var11; + var9 = var12; + var10 = var13; + } + + var5.setColorOpaque_F(var6 * var8, var6 * var9, var6 * var10); + return this.renderBlockHopperMetadata(var1, var2, var3, var4, this.blockAccess.getBlockMetadata(var2, var3, var4), false); + } + + private boolean renderBlockHopperMetadata(BlockHopper var1, int var2, int var3, int var4, int var5, boolean var6) { + Tessellator var7 = Tessellator.instance; + int var8 = BlockHopper.getDirectionFromMetadata(var5); + double var9 = 0.625D; + this.setRenderBounds(0.0D, var9, 0.0D, 1.0D, 1.0D, 1.0D); + if(var6) { + var7.startDrawingQuads(); + var7.setNormal(0.0F, -1.0F, 0.0F); + this.renderFaceYNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 0, var5)); + var7.draw(); + var7.startDrawingQuads(); + var7.setNormal(0.0F, 1.0F, 0.0F); + this.renderFaceYPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 1, var5)); + var7.draw(); + var7.startDrawingQuads(); + var7.setNormal(0.0F, 0.0F, -1.0F); + this.renderFaceZNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 2, var5)); + var7.draw(); + var7.startDrawingQuads(); + var7.setNormal(0.0F, 0.0F, 1.0F); + this.renderFaceZPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 3, var5)); + var7.draw(); + var7.startDrawingQuads(); + var7.setNormal(-1.0F, 0.0F, 0.0F); + this.renderFaceXNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 4, var5)); + var7.draw(); + var7.startDrawingQuads(); + var7.setNormal(1.0F, 0.0F, 0.0F); + this.renderFaceXPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 5, var5)); + var7.draw(); + } else { + this.renderStandardBlock(var1, var2, var3, var4); + } + + float var13; + if(!var6) { + var7.setBrightness(var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4)); + float var11 = 1.0F; + int var12 = var1.colorMultiplier(this.blockAccess, var2, var3, var4); + var13 = (float)(var12 >> 16 & 255) / 255.0F; + float var14 = (float)(var12 >> 8 & 255) / 255.0F; + float var15 = (float)(var12 & 255) / 255.0F; + if(EntityRenderer.anaglyphEnable) { + float var16 = (var13 * 30.0F + var14 * 59.0F + var15 * 11.0F) / 100.0F; + float var17 = (var13 * 30.0F + var14 * 70.0F) / 100.0F; + float var18 = (var13 * 30.0F + var15 * 70.0F) / 100.0F; + var13 = var16; + var14 = var17; + var15 = var18; + } + + var7.setColorOpaque_F(var11 * var13, var11 * var14, var11 * var15); + } + + Icon var24 = BlockHopper.getHopperIcon("hopper"); + Icon var25 = BlockHopper.getHopperIcon("hopper_inside"); + var13 = 2.0F / 16.0F; + if(var6) { + var7.startDrawingQuads(); + var7.setNormal(1.0F, 0.0F, 0.0F); + this.renderFaceXPos(var1, (double)(-1.0F + var13), 0.0D, 0.0D, var24); + var7.draw(); + var7.startDrawingQuads(); + var7.setNormal(-1.0F, 0.0F, 0.0F); + this.renderFaceXNeg(var1, (double)(1.0F - var13), 0.0D, 0.0D, var24); + var7.draw(); + var7.startDrawingQuads(); + var7.setNormal(0.0F, 0.0F, 1.0F); + this.renderFaceZPos(var1, 0.0D, 0.0D, (double)(-1.0F + var13), var24); + var7.draw(); + var7.startDrawingQuads(); + var7.setNormal(0.0F, 0.0F, -1.0F); + this.renderFaceZNeg(var1, 0.0D, 0.0D, (double)(1.0F - var13), var24); + var7.draw(); + var7.startDrawingQuads(); + var7.setNormal(0.0F, 1.0F, 0.0F); + this.renderFaceYPos(var1, 0.0D, -1.0D + var9, 0.0D, var25); + var7.draw(); + } else { + this.renderFaceXPos(var1, (double)((float)var2 - 1.0F + var13), (double)var3, (double)var4, var24); + this.renderFaceXNeg(var1, (double)((float)var2 + 1.0F - var13), (double)var3, (double)var4, var24); + this.renderFaceZPos(var1, (double)var2, (double)var3, (double)((float)var4 - 1.0F + var13), var24); + this.renderFaceZNeg(var1, (double)var2, (double)var3, (double)((float)var4 + 1.0F - var13), var24); + this.renderFaceYPos(var1, (double)var2, (double)((float)var3 - 1.0F) + var9, (double)var4, var25); + } + + this.setOverrideBlockTexture(var24); + double var26 = 0.25D; + double var27 = 0.25D; + this.setRenderBounds(var26, var27, var26, 1.0D - var26, var9 - 0.002D, 1.0D - var26); + if(var6) { + var7.startDrawingQuads(); + var7.setNormal(1.0F, 0.0F, 0.0F); + this.renderFaceXPos(var1, 0.0D, 0.0D, 0.0D, var24); + var7.draw(); + var7.startDrawingQuads(); + var7.setNormal(-1.0F, 0.0F, 0.0F); + this.renderFaceXNeg(var1, 0.0D, 0.0D, 0.0D, var24); + var7.draw(); + var7.startDrawingQuads(); + var7.setNormal(0.0F, 0.0F, 1.0F); + this.renderFaceZPos(var1, 0.0D, 0.0D, 0.0D, var24); + var7.draw(); + var7.startDrawingQuads(); + var7.setNormal(0.0F, 0.0F, -1.0F); + this.renderFaceZNeg(var1, 0.0D, 0.0D, 0.0D, var24); + var7.draw(); + var7.startDrawingQuads(); + var7.setNormal(0.0F, 1.0F, 0.0F); + this.renderFaceYPos(var1, 0.0D, 0.0D, 0.0D, var24); + var7.draw(); + var7.startDrawingQuads(); + var7.setNormal(0.0F, -1.0F, 0.0F); + this.renderFaceYNeg(var1, 0.0D, 0.0D, 0.0D, var24); + var7.draw(); + } else { + this.renderStandardBlock(var1, var2, var3, var4); + } + + if(!var6) { + double var20 = 0.375D; + double var22 = 0.25D; + this.setOverrideBlockTexture(var24); + if(var8 == 0) { + this.setRenderBounds(var20, 0.0D, var20, 1.0D - var20, 0.25D, 1.0D - var20); + this.renderStandardBlock(var1, var2, var3, var4); + } + + if(var8 == 2) { + this.setRenderBounds(var20, var27, 0.0D, 1.0D - var20, var27 + var22, var26); + this.renderStandardBlock(var1, var2, var3, var4); + } + + if(var8 == 3) { + this.setRenderBounds(var20, var27, 1.0D - var26, 1.0D - var20, var27 + var22, 1.0D); + this.renderStandardBlock(var1, var2, var3, var4); + } + + if(var8 == 4) { + this.setRenderBounds(0.0D, var27, var20, var26, var27 + var22, 1.0D - var20); + this.renderStandardBlock(var1, var2, var3, var4); + } + + if(var8 == 5) { + this.setRenderBounds(1.0D - var26, var27, var20, 1.0D, var27 + var22, 1.0D - var20); + this.renderStandardBlock(var1, var2, var3, var4); + } + } + + this.clearOverrideBlockTexture(); + return true; + } + + public boolean renderBlockStairs(BlockStairs var1, int var2, int var3, int var4) { + var1.func_82541_d(this.blockAccess, var2, var3, var4); + this.setRenderBoundsFromBlock(var1); + this.renderStandardBlock(var1, var2, var3, var4); + boolean var5 = var1.func_82542_g(this.blockAccess, var2, var3, var4); + this.setRenderBoundsFromBlock(var1); + this.renderStandardBlock(var1, var2, var3, var4); + if(var5 && var1.func_82544_h(this.blockAccess, var2, var3, var4)) { + this.setRenderBoundsFromBlock(var1); + this.renderStandardBlock(var1, var2, var3, var4); + } + + return true; + } + + public boolean renderBlockDoor(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + int var6 = this.blockAccess.getBlockMetadata(var2, var3, var4); + if((var6 & 8) != 0) { + if(this.blockAccess.getBlockId(var2, var3 - 1, var4) != var1.blockID) { + return false; + } + } else if(this.blockAccess.getBlockId(var2, var3 + 1, var4) != var1.blockID) { + return false; + } + + boolean var7 = false; + float var8 = 0.5F; + float var9 = 1.0F; + float var10 = 0.8F; + float var11 = 0.6F; + int var12 = var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4); + var5.setBrightness(this.renderMinY > 0.0D ? var12 : var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 - 1, var4)); + var5.setColorOpaque_F(var8, var8, var8); + this.renderFaceYNeg(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 0)); + var7 = true; + var5.setBrightness(this.renderMaxY < 1.0D ? var12 : var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3 + 1, var4)); + var5.setColorOpaque_F(var9, var9, var9); + this.renderFaceYPos(var1, (double)var2, (double)var3, (double)var4, this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 1)); + var7 = true; + var5.setBrightness(this.renderMinZ > 0.0D ? var12 : var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 - 1)); + var5.setColorOpaque_F(var10, var10, var10); + Icon var14 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 2); + this.renderFaceZNeg(var1, (double)var2, (double)var3, (double)var4, var14); + var7 = true; + this.flipTexture = false; + var5.setBrightness(this.renderMaxZ < 1.0D ? var12 : var1.getMixedBrightnessForBlock(this.blockAccess, var2, var3, var4 + 1)); + var5.setColorOpaque_F(var10, var10, var10); + var14 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 3); + this.renderFaceZPos(var1, (double)var2, (double)var3, (double)var4, var14); + var7 = true; + this.flipTexture = false; + var5.setBrightness(this.renderMinX > 0.0D ? var12 : var1.getMixedBrightnessForBlock(this.blockAccess, var2 - 1, var3, var4)); + var5.setColorOpaque_F(var11, var11, var11); + var14 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 4); + this.renderFaceXNeg(var1, (double)var2, (double)var3, (double)var4, var14); + var7 = true; + this.flipTexture = false; + var5.setBrightness(this.renderMaxX < 1.0D ? var12 : var1.getMixedBrightnessForBlock(this.blockAccess, var2 + 1, var3, var4)); + var5.setColorOpaque_F(var11, var11, var11); + var14 = this.getBlockIcon(var1, this.blockAccess, var2, var3, var4, 5); + this.renderFaceXPos(var1, (double)var2, (double)var3, (double)var4, var14); + var7 = true; + this.flipTexture = false; + return var7; + } + + public void renderFaceYNeg(Block var1, double var2, double var4, double var6, Icon var8) { + Tessellator var9 = Tessellator.instance; + if(this.hasOverrideBlockTexture()) { + var8 = this.overrideBlockTexture; + } + + double var10 = (double)var8.getInterpolatedU(this.renderMinX * 16.0D); + double var12 = (double)var8.getInterpolatedU(this.renderMaxX * 16.0D); + double var14 = (double)var8.getInterpolatedV(this.renderMinZ * 16.0D); + double var16 = (double)var8.getInterpolatedV(this.renderMaxZ * 16.0D); + if(this.renderMinX < 0.0D || this.renderMaxX > 1.0D) { + var10 = (double)var8.getMinU(); + var12 = (double)var8.getMaxU(); + } + + if(this.renderMinZ < 0.0D || this.renderMaxZ > 1.0D) { + var14 = (double)var8.getMinV(); + var16 = (double)var8.getMaxV(); + } + + double var18 = var12; + double var20 = var10; + double var22 = var14; + double var24 = var16; + if(this.uvRotateBottom == 2) { + var10 = (double)var8.getInterpolatedU(this.renderMinZ * 16.0D); + var14 = (double)var8.getInterpolatedV(16.0D - this.renderMaxX * 16.0D); + var12 = (double)var8.getInterpolatedU(this.renderMaxZ * 16.0D); + var16 = (double)var8.getInterpolatedV(16.0D - this.renderMinX * 16.0D); + var22 = var14; + var24 = var16; + var18 = var10; + var20 = var12; + var14 = var16; + var16 = var22; + } else if(this.uvRotateBottom == 1) { + var10 = (double)var8.getInterpolatedU(16.0D - this.renderMaxZ * 16.0D); + var14 = (double)var8.getInterpolatedV(this.renderMinX * 16.0D); + var12 = (double)var8.getInterpolatedU(16.0D - this.renderMinZ * 16.0D); + var16 = (double)var8.getInterpolatedV(this.renderMaxX * 16.0D); + var18 = var12; + var20 = var10; + var10 = var12; + var12 = var20; + var22 = var16; + var24 = var14; + } else if(this.uvRotateBottom == 3) { + var10 = (double)var8.getInterpolatedU(16.0D - this.renderMinX * 16.0D); + var12 = (double)var8.getInterpolatedU(16.0D - this.renderMaxX * 16.0D); + var14 = (double)var8.getInterpolatedV(16.0D - this.renderMinZ * 16.0D); + var16 = (double)var8.getInterpolatedV(16.0D - this.renderMaxZ * 16.0D); + var18 = var12; + var20 = var10; + var22 = var14; + var24 = var16; + } + + double var26 = var2 + this.renderMinX; + double var28 = var2 + this.renderMaxX; + double var30 = var4 + this.renderMinY; + double var32 = var6 + this.renderMinZ; + double var34 = var6 + this.renderMaxZ; + if(this.enableAO) { + var9.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft); + var9.setBrightness(this.brightnessTopLeft); + var9.addVertexWithUV(var26, var30, var34, var20, var24); + var9.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft); + var9.setBrightness(this.brightnessBottomLeft); + var9.addVertexWithUV(var26, var30, var32, var10, var14); + var9.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight); + var9.setBrightness(this.brightnessBottomRight); + var9.addVertexWithUV(var28, var30, var32, var18, var22); + var9.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight); + var9.setBrightness(this.brightnessTopRight); + var9.addVertexWithUV(var28, var30, var34, var12, var16); + } else { + var9.addVertexWithUV(var26, var30, var34, var20, var24); + var9.addVertexWithUV(var26, var30, var32, var10, var14); + var9.addVertexWithUV(var28, var30, var32, var18, var22); + var9.addVertexWithUV(var28, var30, var34, var12, var16); + } + + } + + public void renderFaceYPos(Block var1, double var2, double var4, double var6, Icon var8) { + Tessellator var9 = Tessellator.instance; + if(this.hasOverrideBlockTexture()) { + var8 = this.overrideBlockTexture; + } + + double var10 = (double)var8.getInterpolatedU(this.renderMinX * 16.0D); + double var12 = (double)var8.getInterpolatedU(this.renderMaxX * 16.0D); + double var14 = (double)var8.getInterpolatedV(this.renderMinZ * 16.0D); + double var16 = (double)var8.getInterpolatedV(this.renderMaxZ * 16.0D); + if(this.renderMinX < 0.0D || this.renderMaxX > 1.0D) { + var10 = (double)var8.getMinU(); + var12 = (double)var8.getMaxU(); + } + + if(this.renderMinZ < 0.0D || this.renderMaxZ > 1.0D) { + var14 = (double)var8.getMinV(); + var16 = (double)var8.getMaxV(); + } + + double var18 = var12; + double var20 = var10; + double var22 = var14; + double var24 = var16; + if(this.uvRotateTop == 1) { + var10 = (double)var8.getInterpolatedU(this.renderMinZ * 16.0D); + var14 = (double)var8.getInterpolatedV(16.0D - this.renderMaxX * 16.0D); + var12 = (double)var8.getInterpolatedU(this.renderMaxZ * 16.0D); + var16 = (double)var8.getInterpolatedV(16.0D - this.renderMinX * 16.0D); + var22 = var14; + var24 = var16; + var18 = var10; + var20 = var12; + var14 = var16; + var16 = var22; + } else if(this.uvRotateTop == 2) { + var10 = (double)var8.getInterpolatedU(16.0D - this.renderMaxZ * 16.0D); + var14 = (double)var8.getInterpolatedV(this.renderMinX * 16.0D); + var12 = (double)var8.getInterpolatedU(16.0D - this.renderMinZ * 16.0D); + var16 = (double)var8.getInterpolatedV(this.renderMaxX * 16.0D); + var18 = var12; + var20 = var10; + var10 = var12; + var12 = var20; + var22 = var16; + var24 = var14; + } else if(this.uvRotateTop == 3) { + var10 = (double)var8.getInterpolatedU(16.0D - this.renderMinX * 16.0D); + var12 = (double)var8.getInterpolatedU(16.0D - this.renderMaxX * 16.0D); + var14 = (double)var8.getInterpolatedV(16.0D - this.renderMinZ * 16.0D); + var16 = (double)var8.getInterpolatedV(16.0D - this.renderMaxZ * 16.0D); + var18 = var12; + var20 = var10; + var22 = var14; + var24 = var16; + } + + double var26 = var2 + this.renderMinX; + double var28 = var2 + this.renderMaxX; + double var30 = var4 + this.renderMaxY; + double var32 = var6 + this.renderMinZ; + double var34 = var6 + this.renderMaxZ; + if(this.enableAO) { + var9.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft); + var9.setBrightness(this.brightnessTopLeft); + var9.addVertexWithUV(var28, var30, var34, var12, var16); + var9.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft); + var9.setBrightness(this.brightnessBottomLeft); + var9.addVertexWithUV(var28, var30, var32, var18, var22); + var9.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight); + var9.setBrightness(this.brightnessBottomRight); + var9.addVertexWithUV(var26, var30, var32, var10, var14); + var9.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight); + var9.setBrightness(this.brightnessTopRight); + var9.addVertexWithUV(var26, var30, var34, var20, var24); + } else { + var9.addVertexWithUV(var28, var30, var34, var12, var16); + var9.addVertexWithUV(var28, var30, var32, var18, var22); + var9.addVertexWithUV(var26, var30, var32, var10, var14); + var9.addVertexWithUV(var26, var30, var34, var20, var24); + } + + } + + public void renderFaceZNeg(Block var1, double var2, double var4, double var6, Icon var8) { + Tessellator var9 = Tessellator.instance; + if(this.hasOverrideBlockTexture()) { + var8 = this.overrideBlockTexture; + } + + double var10 = (double)var8.getInterpolatedU(this.renderMinX * 16.0D); + double var12 = (double)var8.getInterpolatedU(this.renderMaxX * 16.0D); + double var14 = (double)var8.getInterpolatedV(16.0D - this.renderMaxY * 16.0D); + double var16 = (double)var8.getInterpolatedV(16.0D - this.renderMinY * 16.0D); + double var18; + if(this.flipTexture) { + var18 = var10; + var10 = var12; + var12 = var18; + } + + if(this.renderMinX < 0.0D || this.renderMaxX > 1.0D) { + var10 = (double)var8.getMinU(); + var12 = (double)var8.getMaxU(); + } + + if(this.renderMinY < 0.0D || this.renderMaxY > 1.0D) { + var14 = (double)var8.getMinV(); + var16 = (double)var8.getMaxV(); + } + + var18 = var12; + double var20 = var10; + double var22 = var14; + double var24 = var16; + if(this.uvRotateEast == 2) { + var10 = (double)var8.getInterpolatedU(this.renderMinY * 16.0D); + var14 = (double)var8.getInterpolatedV(16.0D - this.renderMinX * 16.0D); + var12 = (double)var8.getInterpolatedU(this.renderMaxY * 16.0D); + var16 = (double)var8.getInterpolatedV(16.0D - this.renderMaxX * 16.0D); + var22 = var14; + var24 = var16; + var18 = var10; + var20 = var12; + var14 = var16; + var16 = var22; + } else if(this.uvRotateEast == 1) { + var10 = (double)var8.getInterpolatedU(16.0D - this.renderMaxY * 16.0D); + var14 = (double)var8.getInterpolatedV(this.renderMaxX * 16.0D); + var12 = (double)var8.getInterpolatedU(16.0D - this.renderMinY * 16.0D); + var16 = (double)var8.getInterpolatedV(this.renderMinX * 16.0D); + var18 = var12; + var20 = var10; + var10 = var12; + var12 = var20; + var22 = var16; + var24 = var14; + } else if(this.uvRotateEast == 3) { + var10 = (double)var8.getInterpolatedU(16.0D - this.renderMinX * 16.0D); + var12 = (double)var8.getInterpolatedU(16.0D - this.renderMaxX * 16.0D); + var14 = (double)var8.getInterpolatedV(this.renderMaxY * 16.0D); + var16 = (double)var8.getInterpolatedV(this.renderMinY * 16.0D); + var18 = var12; + var20 = var10; + var22 = var14; + var24 = var16; + } + + double var26 = var2 + this.renderMinX; + double var28 = var2 + this.renderMaxX; + double var30 = var4 + this.renderMinY; + double var32 = var4 + this.renderMaxY; + double var34 = var6 + this.renderMinZ; + if(this.enableAO) { + var9.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft); + var9.setBrightness(this.brightnessTopLeft); + var9.addVertexWithUV(var26, var32, var34, var18, var22); + var9.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft); + var9.setBrightness(this.brightnessBottomLeft); + var9.addVertexWithUV(var28, var32, var34, var10, var14); + var9.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight); + var9.setBrightness(this.brightnessBottomRight); + var9.addVertexWithUV(var28, var30, var34, var20, var24); + var9.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight); + var9.setBrightness(this.brightnessTopRight); + var9.addVertexWithUV(var26, var30, var34, var12, var16); + } else { + var9.addVertexWithUV(var26, var32, var34, var18, var22); + var9.addVertexWithUV(var28, var32, var34, var10, var14); + var9.addVertexWithUV(var28, var30, var34, var20, var24); + var9.addVertexWithUV(var26, var30, var34, var12, var16); + } + + } + + public void renderFaceZPos(Block var1, double var2, double var4, double var6, Icon var8) { + Tessellator var9 = Tessellator.instance; + if(this.hasOverrideBlockTexture()) { + var8 = this.overrideBlockTexture; + } + + double var10 = (double)var8.getInterpolatedU(this.renderMinX * 16.0D); + double var12 = (double)var8.getInterpolatedU(this.renderMaxX * 16.0D); + double var14 = (double)var8.getInterpolatedV(16.0D - this.renderMaxY * 16.0D); + double var16 = (double)var8.getInterpolatedV(16.0D - this.renderMinY * 16.0D); + double var18; + if(this.flipTexture) { + var18 = var10; + var10 = var12; + var12 = var18; + } + + if(this.renderMinX < 0.0D || this.renderMaxX > 1.0D) { + var10 = (double)var8.getMinU(); + var12 = (double)var8.getMaxU(); + } + + if(this.renderMinY < 0.0D || this.renderMaxY > 1.0D) { + var14 = (double)var8.getMinV(); + var16 = (double)var8.getMaxV(); + } + + var18 = var12; + double var20 = var10; + double var22 = var14; + double var24 = var16; + if(this.uvRotateWest == 1) { + var10 = (double)var8.getInterpolatedU(this.renderMinY * 16.0D); + var16 = (double)var8.getInterpolatedV(16.0D - this.renderMinX * 16.0D); + var12 = (double)var8.getInterpolatedU(this.renderMaxY * 16.0D); + var14 = (double)var8.getInterpolatedV(16.0D - this.renderMaxX * 16.0D); + var22 = var14; + var24 = var16; + var18 = var10; + var20 = var12; + var14 = var16; + var16 = var22; + } else if(this.uvRotateWest == 2) { + var10 = (double)var8.getInterpolatedU(16.0D - this.renderMaxY * 16.0D); + var14 = (double)var8.getInterpolatedV(this.renderMinX * 16.0D); + var12 = (double)var8.getInterpolatedU(16.0D - this.renderMinY * 16.0D); + var16 = (double)var8.getInterpolatedV(this.renderMaxX * 16.0D); + var18 = var12; + var20 = var10; + var10 = var12; + var12 = var20; + var22 = var16; + var24 = var14; + } else if(this.uvRotateWest == 3) { + var10 = (double)var8.getInterpolatedU(16.0D - this.renderMinX * 16.0D); + var12 = (double)var8.getInterpolatedU(16.0D - this.renderMaxX * 16.0D); + var14 = (double)var8.getInterpolatedV(this.renderMaxY * 16.0D); + var16 = (double)var8.getInterpolatedV(this.renderMinY * 16.0D); + var18 = var12; + var20 = var10; + var22 = var14; + var24 = var16; + } + + double var26 = var2 + this.renderMinX; + double var28 = var2 + this.renderMaxX; + double var30 = var4 + this.renderMinY; + double var32 = var4 + this.renderMaxY; + double var34 = var6 + this.renderMaxZ; + if(this.enableAO) { + var9.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft); + var9.setBrightness(this.brightnessTopLeft); + var9.addVertexWithUV(var26, var32, var34, var10, var14); + var9.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft); + var9.setBrightness(this.brightnessBottomLeft); + var9.addVertexWithUV(var26, var30, var34, var20, var24); + var9.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight); + var9.setBrightness(this.brightnessBottomRight); + var9.addVertexWithUV(var28, var30, var34, var12, var16); + var9.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight); + var9.setBrightness(this.brightnessTopRight); + var9.addVertexWithUV(var28, var32, var34, var18, var22); + } else { + var9.addVertexWithUV(var26, var32, var34, var10, var14); + var9.addVertexWithUV(var26, var30, var34, var20, var24); + var9.addVertexWithUV(var28, var30, var34, var12, var16); + var9.addVertexWithUV(var28, var32, var34, var18, var22); + } + + } + + public void renderFaceXNeg(Block var1, double var2, double var4, double var6, Icon var8) { + Tessellator var9 = Tessellator.instance; + if(this.hasOverrideBlockTexture()) { + var8 = this.overrideBlockTexture; + } + + double var10 = (double)var8.getInterpolatedU(this.renderMinZ * 16.0D); + double var12 = (double)var8.getInterpolatedU(this.renderMaxZ * 16.0D); + double var14 = (double)var8.getInterpolatedV(16.0D - this.renderMaxY * 16.0D); + double var16 = (double)var8.getInterpolatedV(16.0D - this.renderMinY * 16.0D); + double var18; + if(this.flipTexture) { + var18 = var10; + var10 = var12; + var12 = var18; + } + + if(this.renderMinZ < 0.0D || this.renderMaxZ > 1.0D) { + var10 = (double)var8.getMinU(); + var12 = (double)var8.getMaxU(); + } + + if(this.renderMinY < 0.0D || this.renderMaxY > 1.0D) { + var14 = (double)var8.getMinV(); + var16 = (double)var8.getMaxV(); + } + + var18 = var12; + double var20 = var10; + double var22 = var14; + double var24 = var16; + if(this.uvRotateNorth == 1) { + var10 = (double)var8.getInterpolatedU(this.renderMinY * 16.0D); + var14 = (double)var8.getInterpolatedV(16.0D - this.renderMaxZ * 16.0D); + var12 = (double)var8.getInterpolatedU(this.renderMaxY * 16.0D); + var16 = (double)var8.getInterpolatedV(16.0D - this.renderMinZ * 16.0D); + var22 = var14; + var24 = var16; + var18 = var10; + var20 = var12; + var14 = var16; + var16 = var22; + } else if(this.uvRotateNorth == 2) { + var10 = (double)var8.getInterpolatedU(16.0D - this.renderMaxY * 16.0D); + var14 = (double)var8.getInterpolatedV(this.renderMinZ * 16.0D); + var12 = (double)var8.getInterpolatedU(16.0D - this.renderMinY * 16.0D); + var16 = (double)var8.getInterpolatedV(this.renderMaxZ * 16.0D); + var18 = var12; + var20 = var10; + var10 = var12; + var12 = var20; + var22 = var16; + var24 = var14; + } else if(this.uvRotateNorth == 3) { + var10 = (double)var8.getInterpolatedU(16.0D - this.renderMinZ * 16.0D); + var12 = (double)var8.getInterpolatedU(16.0D - this.renderMaxZ * 16.0D); + var14 = (double)var8.getInterpolatedV(this.renderMaxY * 16.0D); + var16 = (double)var8.getInterpolatedV(this.renderMinY * 16.0D); + var18 = var12; + var20 = var10; + var22 = var14; + var24 = var16; + } + + double var26 = var2 + this.renderMinX; + double var28 = var4 + this.renderMinY; + double var30 = var4 + this.renderMaxY; + double var32 = var6 + this.renderMinZ; + double var34 = var6 + this.renderMaxZ; + if(this.enableAO) { + var9.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft); + var9.setBrightness(this.brightnessTopLeft); + var9.addVertexWithUV(var26, var30, var34, var18, var22); + var9.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft); + var9.setBrightness(this.brightnessBottomLeft); + var9.addVertexWithUV(var26, var30, var32, var10, var14); + var9.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight); + var9.setBrightness(this.brightnessBottomRight); + var9.addVertexWithUV(var26, var28, var32, var20, var24); + var9.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight); + var9.setBrightness(this.brightnessTopRight); + var9.addVertexWithUV(var26, var28, var34, var12, var16); + } else { + var9.addVertexWithUV(var26, var30, var34, var18, var22); + var9.addVertexWithUV(var26, var30, var32, var10, var14); + var9.addVertexWithUV(var26, var28, var32, var20, var24); + var9.addVertexWithUV(var26, var28, var34, var12, var16); + } + + } + + public void renderFaceXPos(Block var1, double var2, double var4, double var6, Icon var8) { + Tessellator var9 = Tessellator.instance; + if(this.hasOverrideBlockTexture()) { + var8 = this.overrideBlockTexture; + } + + double var10 = (double)var8.getInterpolatedU(this.renderMinZ * 16.0D); + double var12 = (double)var8.getInterpolatedU(this.renderMaxZ * 16.0D); + double var14 = (double)var8.getInterpolatedV(16.0D - this.renderMaxY * 16.0D); + double var16 = (double)var8.getInterpolatedV(16.0D - this.renderMinY * 16.0D); + double var18; + if(this.flipTexture) { + var18 = var10; + var10 = var12; + var12 = var18; + } + + if(this.renderMinZ < 0.0D || this.renderMaxZ > 1.0D) { + var10 = (double)var8.getMinU(); + var12 = (double)var8.getMaxU(); + } + + if(this.renderMinY < 0.0D || this.renderMaxY > 1.0D) { + var14 = (double)var8.getMinV(); + var16 = (double)var8.getMaxV(); + } + + var18 = var12; + double var20 = var10; + double var22 = var14; + double var24 = var16; + if(this.uvRotateSouth == 2) { + var10 = (double)var8.getInterpolatedU(this.renderMinY * 16.0D); + var14 = (double)var8.getInterpolatedV(16.0D - this.renderMinZ * 16.0D); + var12 = (double)var8.getInterpolatedU(this.renderMaxY * 16.0D); + var16 = (double)var8.getInterpolatedV(16.0D - this.renderMaxZ * 16.0D); + var22 = var14; + var24 = var16; + var18 = var10; + var20 = var12; + var14 = var16; + var16 = var22; + } else if(this.uvRotateSouth == 1) { + var10 = (double)var8.getInterpolatedU(16.0D - this.renderMaxY * 16.0D); + var14 = (double)var8.getInterpolatedV(this.renderMaxZ * 16.0D); + var12 = (double)var8.getInterpolatedU(16.0D - this.renderMinY * 16.0D); + var16 = (double)var8.getInterpolatedV(this.renderMinZ * 16.0D); + var18 = var12; + var20 = var10; + var10 = var12; + var12 = var20; + var22 = var16; + var24 = var14; + } else if(this.uvRotateSouth == 3) { + var10 = (double)var8.getInterpolatedU(16.0D - this.renderMinZ * 16.0D); + var12 = (double)var8.getInterpolatedU(16.0D - this.renderMaxZ * 16.0D); + var14 = (double)var8.getInterpolatedV(this.renderMaxY * 16.0D); + var16 = (double)var8.getInterpolatedV(this.renderMinY * 16.0D); + var18 = var12; + var20 = var10; + var22 = var14; + var24 = var16; + } + + double var26 = var2 + this.renderMaxX; + double var28 = var4 + this.renderMinY; + double var30 = var4 + this.renderMaxY; + double var32 = var6 + this.renderMinZ; + double var34 = var6 + this.renderMaxZ; + if(this.enableAO) { + var9.setColorOpaque_F(this.colorRedTopLeft, this.colorGreenTopLeft, this.colorBlueTopLeft); + var9.setBrightness(this.brightnessTopLeft); + var9.addVertexWithUV(var26, var28, var34, var20, var24); + var9.setColorOpaque_F(this.colorRedBottomLeft, this.colorGreenBottomLeft, this.colorBlueBottomLeft); + var9.setBrightness(this.brightnessBottomLeft); + var9.addVertexWithUV(var26, var28, var32, var12, var16); + var9.setColorOpaque_F(this.colorRedBottomRight, this.colorGreenBottomRight, this.colorBlueBottomRight); + var9.setBrightness(this.brightnessBottomRight); + var9.addVertexWithUV(var26, var30, var32, var18, var22); + var9.setColorOpaque_F(this.colorRedTopRight, this.colorGreenTopRight, this.colorBlueTopRight); + var9.setBrightness(this.brightnessTopRight); + var9.addVertexWithUV(var26, var30, var34, var10, var14); + } else { + var9.addVertexWithUV(var26, var28, var34, var20, var24); + var9.addVertexWithUV(var26, var28, var32, var12, var16); + var9.addVertexWithUV(var26, var30, var32, var18, var22); + var9.addVertexWithUV(var26, var30, var34, var10, var14); + } + + } + + public void renderBlockAsItem(Block var1, int var2, float var3) { + Tessellator var4 = Tessellator.instance; + boolean var5 = var1.blockID == Block.grass.blockID; + if(var1 == Block.dispenser || var1 == Block.dropper || var1 == Block.furnaceIdle) { + var2 = 3; + } + + int var6; + float var7; + float var8; + float var9; + if(this.useInventoryTint) { + var6 = var1.getRenderColor(var2); + if(var5) { + var6 = 16777215; + } + + var7 = (float)(var6 >> 16 & 255) / 255.0F; + var8 = (float)(var6 >> 8 & 255) / 255.0F; + var9 = (float)(var6 & 255) / 255.0F; + GL11.glColor4f(var7 * var3, var8 * var3, var9 * var3, 1.0F); + } + + var6 = var1.getRenderType(); + this.setRenderBoundsFromBlock(var1); + int var14; + if(var6 != 0 && var6 != 31 && var6 != 39 && var6 != 16 && var6 != 26) { + if(var6 == 1) { + var4.startDrawingQuads(); + var4.setNormal(0.0F, -1.0F, 0.0F); + this.drawCrossedSquares(var1, var2, -0.5D, -0.5D, -0.5D, 1.0F); + var4.draw(); + } else if(var6 == 19) { + var4.startDrawingQuads(); + var4.setNormal(0.0F, -1.0F, 0.0F); + var1.setBlockBoundsForItemRender(); + this.renderBlockStemSmall(var1, var2, this.renderMaxY, -0.5D, -0.5D, -0.5D); + var4.draw(); + } else if(var6 == 23) { + var4.startDrawingQuads(); + var4.setNormal(0.0F, -1.0F, 0.0F); + var1.setBlockBoundsForItemRender(); + var4.draw(); + } else if(var6 == 13) { + var1.setBlockBoundsForItemRender(); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + var7 = 1.0F / 16.0F; + var4.startDrawingQuads(); + var4.setNormal(0.0F, -1.0F, 0.0F); + this.renderFaceYNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 0)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 1.0F, 0.0F); + this.renderFaceYPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 1)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 0.0F, -1.0F); + var4.addTranslation(0.0F, 0.0F, var7); + this.renderFaceZNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 2)); + var4.addTranslation(0.0F, 0.0F, -var7); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 0.0F, 1.0F); + var4.addTranslation(0.0F, 0.0F, -var7); + this.renderFaceZPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 3)); + var4.addTranslation(0.0F, 0.0F, var7); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(-1.0F, 0.0F, 0.0F); + var4.addTranslation(var7, 0.0F, 0.0F); + this.renderFaceXNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 4)); + var4.addTranslation(-var7, 0.0F, 0.0F); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(1.0F, 0.0F, 0.0F); + var4.addTranslation(-var7, 0.0F, 0.0F); + this.renderFaceXPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 5)); + var4.addTranslation(var7, 0.0F, 0.0F); + var4.draw(); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } else if(var6 == 22) { + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + ChestItemRenderHelper.instance.renderChest(var1, var2, var3); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + } else if(var6 == 6) { + var4.startDrawingQuads(); + var4.setNormal(0.0F, -1.0F, 0.0F); + this.renderBlockCropsImpl(var1, var2, -0.5D, -0.5D, -0.5D); + var4.draw(); + } else if(var6 == 2) { + var4.startDrawingQuads(); + var4.setNormal(0.0F, -1.0F, 0.0F); + this.renderTorchAtAngle(var1, -0.5D, -0.5D, -0.5D, 0.0D, 0.0D, 0); + var4.draw(); + } else if(var6 == 10) { + for(var14 = 0; var14 < 2; ++var14) { + if(var14 == 0) { + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 0.5D); + } + + if(var14 == 1) { + this.setRenderBounds(0.0D, 0.0D, 0.5D, 1.0D, 0.5D, 1.0D); + } + + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + var4.startDrawingQuads(); + var4.setNormal(0.0F, -1.0F, 0.0F); + this.renderFaceYNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 0)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 1.0F, 0.0F); + this.renderFaceYPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 1)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 0.0F, -1.0F); + this.renderFaceZNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 0.0F, 1.0F); + this.renderFaceZPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 3)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(-1.0F, 0.0F, 0.0F); + this.renderFaceXNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 4)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(1.0F, 0.0F, 0.0F); + this.renderFaceXPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 5)); + var4.draw(); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } + } else if(var6 == 27) { + var14 = 0; + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + var4.startDrawingQuads(); + + for(int var15 = 0; var15 < 8; ++var15) { + byte var16 = 0; + byte var17 = 1; + if(var15 == 0) { + var16 = 2; + } + + if(var15 == 1) { + var16 = 3; + } + + if(var15 == 2) { + var16 = 4; + } + + if(var15 == 3) { + var16 = 5; + var17 = 2; + } + + if(var15 == 4) { + var16 = 6; + var17 = 3; + } + + if(var15 == 5) { + var16 = 7; + var17 = 5; + } + + if(var15 == 6) { + var16 = 6; + var17 = 2; + } + + if(var15 == 7) { + var16 = 3; + } + + float var11 = (float)var16 / 16.0F; + float var12 = 1.0F - (float)var14 / 16.0F; + float var13 = 1.0F - (float)(var14 + var17) / 16.0F; + var14 += var17; + this.setRenderBounds((double)(0.5F - var11), (double)var13, (double)(0.5F - var11), (double)(0.5F + var11), (double)var12, (double)(0.5F + var11)); + var4.setNormal(0.0F, -1.0F, 0.0F); + this.renderFaceYNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 0)); + var4.setNormal(0.0F, 1.0F, 0.0F); + this.renderFaceYPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 1)); + var4.setNormal(0.0F, 0.0F, -1.0F); + this.renderFaceZNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 2)); + var4.setNormal(0.0F, 0.0F, 1.0F); + this.renderFaceZPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 3)); + var4.setNormal(-1.0F, 0.0F, 0.0F); + this.renderFaceXNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 4)); + var4.setNormal(1.0F, 0.0F, 0.0F); + this.renderFaceXPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 5)); + } + + var4.draw(); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + } else if(var6 == 11) { + for(var14 = 0; var14 < 4; ++var14) { + var8 = 2.0F / 16.0F; + if(var14 == 0) { + this.setRenderBounds((double)(0.5F - var8), 0.0D, 0.0D, (double)(0.5F + var8), 1.0D, (double)(var8 * 2.0F)); + } + + if(var14 == 1) { + this.setRenderBounds((double)(0.5F - var8), 0.0D, (double)(1.0F - var8 * 2.0F), (double)(0.5F + var8), 1.0D, 1.0D); + } + + var8 = 1.0F / 16.0F; + if(var14 == 2) { + this.setRenderBounds((double)(0.5F - var8), (double)(1.0F - var8 * 3.0F), (double)(-var8 * 2.0F), (double)(0.5F + var8), (double)(1.0F - var8), (double)(1.0F + var8 * 2.0F)); + } + + if(var14 == 3) { + this.setRenderBounds((double)(0.5F - var8), (double)(0.5F - var8 * 3.0F), (double)(-var8 * 2.0F), (double)(0.5F + var8), (double)(0.5F - var8), (double)(1.0F + var8 * 2.0F)); + } + + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + var4.startDrawingQuads(); + var4.setNormal(0.0F, -1.0F, 0.0F); + this.renderFaceYNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 0)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 1.0F, 0.0F); + this.renderFaceYPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 1)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 0.0F, -1.0F); + this.renderFaceZNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 0.0F, 1.0F); + this.renderFaceZPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 3)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(-1.0F, 0.0F, 0.0F); + this.renderFaceXNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 4)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(1.0F, 0.0F, 0.0F); + this.renderFaceXPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 5)); + var4.draw(); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } + + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + } else if(var6 == 21) { + for(var14 = 0; var14 < 3; ++var14) { + var8 = 1.0F / 16.0F; + if(var14 == 0) { + this.setRenderBounds((double)(0.5F - var8), (double)0.3F, 0.0D, (double)(0.5F + var8), 1.0D, (double)(var8 * 2.0F)); + } + + if(var14 == 1) { + this.setRenderBounds((double)(0.5F - var8), (double)0.3F, (double)(1.0F - var8 * 2.0F), (double)(0.5F + var8), 1.0D, 1.0D); + } + + var8 = 1.0F / 16.0F; + if(var14 == 2) { + this.setRenderBounds((double)(0.5F - var8), 0.5D, 0.0D, (double)(0.5F + var8), (double)(1.0F - var8), 1.0D); + } + + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + var4.startDrawingQuads(); + var4.setNormal(0.0F, -1.0F, 0.0F); + this.renderFaceYNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 0)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 1.0F, 0.0F); + this.renderFaceYPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 1)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 0.0F, -1.0F); + this.renderFaceZNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 0.0F, 1.0F); + this.renderFaceZPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 3)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(-1.0F, 0.0F, 0.0F); + this.renderFaceXNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 4)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(1.0F, 0.0F, 0.0F); + this.renderFaceXPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSide(var1, 5)); + var4.draw(); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } + } else if(var6 == 32) { + for(var14 = 0; var14 < 2; ++var14) { + if(var14 == 0) { + this.setRenderBounds(0.0D, 0.0D, 0.3125D, 1.0D, 0.8125D, 0.6875D); + } + + if(var14 == 1) { + this.setRenderBounds(0.25D, 0.0D, 0.25D, 0.75D, 1.0D, 0.75D); + } + + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + var4.startDrawingQuads(); + var4.setNormal(0.0F, -1.0F, 0.0F); + this.renderFaceYNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 0, var2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 1.0F, 0.0F); + this.renderFaceYPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 1, var2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 0.0F, -1.0F); + this.renderFaceZNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 2, var2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 0.0F, 1.0F); + this.renderFaceZPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 3, var2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(-1.0F, 0.0F, 0.0F); + this.renderFaceXNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 4, var2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(1.0F, 0.0F, 0.0F); + this.renderFaceXPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 5, var2)); + var4.draw(); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } + + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + } else if(var6 == 35) { + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + this.renderBlockAnvilOrient((BlockAnvil)var1, 0, 0, 0, var2, true); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } else if(var6 == 34) { + for(var14 = 0; var14 < 3; ++var14) { + if(var14 == 0) { + this.setRenderBounds(0.125D, 0.0D, 0.125D, 0.875D, 0.1875D, 0.875D); + this.setOverrideBlockTexture(this.getBlockIcon(Block.obsidian)); + } else if(var14 == 1) { + this.setRenderBounds(0.1875D, 0.1875D, 0.1875D, 0.8125D, 0.875D, 0.8125D); + this.setOverrideBlockTexture(Block.beacon.getBeaconIcon()); + } else if(var14 == 2) { + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + this.setOverrideBlockTexture(this.getBlockIcon(Block.glass)); + } + + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + var4.startDrawingQuads(); + var4.setNormal(0.0F, -1.0F, 0.0F); + this.renderFaceYNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 0, var2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 1.0F, 0.0F); + this.renderFaceYPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 1, var2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 0.0F, -1.0F); + this.renderFaceZNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 2, var2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 0.0F, 1.0F); + this.renderFaceZPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 3, var2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(-1.0F, 0.0F, 0.0F); + this.renderFaceXNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 4, var2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(1.0F, 0.0F, 0.0F); + this.renderFaceXPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 5, var2)); + var4.draw(); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } + + this.setRenderBounds(0.0D, 0.0D, 0.0D, 1.0D, 1.0D, 1.0D); + this.clearOverrideBlockTexture(); + } else if(var6 == 38) { + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + this.renderBlockHopperMetadata((BlockHopper)var1, 0, 0, 0, 0, true); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } + } else { + if(var6 == 16) { + var2 = 1; + } + + var1.setBlockBoundsForItemRender(); + this.setRenderBoundsFromBlock(var1); + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + var4.startDrawingQuads(); + var4.setNormal(0.0F, -1.0F, 0.0F); + this.renderFaceYNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 0, var2)); + var4.draw(); + if(var5 && this.useInventoryTint) { + var14 = var1.getRenderColor(var2); + var8 = (float)(var14 >> 16 & 255) / 255.0F; + var9 = (float)(var14 >> 8 & 255) / 255.0F; + float var10 = (float)(var14 & 255) / 255.0F; + GL11.glColor4f(var8 * var3, var9 * var3, var10 * var3, 1.0F); + } + + var4.startDrawingQuads(); + var4.setNormal(0.0F, 1.0F, 0.0F); + this.renderFaceYPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 1, var2)); + var4.draw(); + if(var5 && this.useInventoryTint) { + GL11.glColor4f(var3, var3, var3, 1.0F); + } + + var4.startDrawingQuads(); + var4.setNormal(0.0F, 0.0F, -1.0F); + this.renderFaceZNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 2, var2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(0.0F, 0.0F, 1.0F); + this.renderFaceZPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 3, var2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(-1.0F, 0.0F, 0.0F); + this.renderFaceXNeg(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 4, var2)); + var4.draw(); + var4.startDrawingQuads(); + var4.setNormal(1.0F, 0.0F, 0.0F); + this.renderFaceXPos(var1, 0.0D, 0.0D, 0.0D, this.getBlockIconFromSideAndMetadata(var1, 5, var2)); + var4.draw(); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } + + } + + public static boolean renderItemIn3d(int var0) { + return var0 == 0 ? true : (var0 == 31 ? true : (var0 == 39 ? true : (var0 == 13 ? true : (var0 == 10 ? true : (var0 == 11 ? true : (var0 == 27 ? true : (var0 == 22 ? true : (var0 == 21 ? true : (var0 == 16 ? true : (var0 == 26 ? true : (var0 == 32 ? true : (var0 == 34 ? true : var0 == 35)))))))))))); + } + + public Icon getBlockIcon(Block var1, IBlockAccess var2, int var3, int var4, int var5, int var6) { + return this.getIconSafe(var1.getBlockTexture(var2, var3, var4, var5, var6)); + } + + public Icon getBlockIconFromSideAndMetadata(Block var1, int var2, int var3) { + return this.getIconSafe(var1.getIcon(var2, var3)); + } + + public Icon getBlockIconFromSide(Block var1, int var2) { + return this.getIconSafe(var1.getBlockTextureFromSide(var2)); + } + + public Icon getBlockIcon(Block var1) { + return this.getIconSafe(var1.getBlockTextureFromSide(1)); + } + + public Icon getIconSafe(Icon var1) { + return var1 == null ? this.minecraftRB.renderEngine.getMissingIcon(0) : var1; + } +} diff --git a/src/net/minecraft/src/RenderBoat.java b/src/net/minecraft/src/RenderBoat.java new file mode 100644 index 0000000..2c13d5e --- /dev/null +++ b/src/net/minecraft/src/RenderBoat.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderBoat extends Render { + protected ModelBase modelBoat; + + public RenderBoat() { + this.shadowSize = 0.5F; + this.modelBoat = new ModelBoat(); + } + + public void renderBoat(EntityBoat var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + GL11.glRotatef(180.0F - var8, 0.0F, 1.0F, 0.0F); + float var10 = (float)var1.getTimeSinceHit() - var9; + float var11 = (float)var1.getDamageTaken() - var9; + if(var11 < 0.0F) { + var11 = 0.0F; + } + + if(var10 > 0.0F) { + GL11.glRotatef(MathHelper.sin(var10) * var10 * var11 / 10.0F * (float)var1.getForwardDirection(), 1.0F, 0.0F, 0.0F); + } + + this.loadTexture("/terrain.png"); + float var12 = 12.0F / 16.0F; + GL11.glScalef(var12, var12, var12); + GL11.glScalef(1.0F / var12, 1.0F / var12, 1.0F / var12); + this.loadTexture("/item/boat.png"); + GL11.glScalef(-1.0F, -1.0F, 1.0F); + this.modelBoat.render(var1, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 1.0F / 16.0F); + GL11.glPopMatrix(); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderBoat((EntityBoat)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderChicken.java b/src/net/minecraft/src/RenderChicken.java new file mode 100644 index 0000000..28c751f --- /dev/null +++ b/src/net/minecraft/src/RenderChicken.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +public class RenderChicken extends RenderLiving { + public RenderChicken(ModelBase var1, float var2) { + super(var1, var2); + } + + public void renderChicken(EntityChicken var1, double var2, double var4, double var6, float var8, float var9) { + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + protected float getWingRotation(EntityChicken var1, float var2) { + float var3 = var1.field_70888_h + (var1.field_70886_e - var1.field_70888_h) * var2; + float var4 = var1.field_70884_g + (var1.destPos - var1.field_70884_g) * var2; + return (MathHelper.sin(var3) + 1.0F) * var4; + } + + protected float handleRotationFloat(EntityLiving var1, float var2) { + return this.getWingRotation((EntityChicken)var1, var2); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.renderChicken((EntityChicken)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderChicken((EntityChicken)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderCow.java b/src/net/minecraft/src/RenderCow.java new file mode 100644 index 0000000..ea624f9 --- /dev/null +++ b/src/net/minecraft/src/RenderCow.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class RenderCow extends RenderLiving { + public RenderCow(ModelBase var1, float var2) { + super(var1, var2); + } + + public void renderCow(EntityCow var1, double var2, double var4, double var6, float var8, float var9) { + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.renderCow((EntityCow)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderCow((EntityCow)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderCreeper.java b/src/net/minecraft/src/RenderCreeper.java new file mode 100644 index 0000000..793bcf5 --- /dev/null +++ b/src/net/minecraft/src/RenderCreeper.java @@ -0,0 +1,108 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderCreeper extends RenderLiving { + private ModelBase creeperModel = new ModelCreeper(2.0F); + + public RenderCreeper() { + super(new ModelCreeper(), 0.5F); + } + + protected void updateCreeperScale(EntityCreeper var1, float var2) { + float var4 = var1.getCreeperFlashIntensity(var2); + float var5 = 1.0F + MathHelper.sin(var4 * 100.0F) * var4 * 0.01F; + if(var4 < 0.0F) { + var4 = 0.0F; + } + + if(var4 > 1.0F) { + var4 = 1.0F; + } + + var4 *= var4; + var4 *= var4; + float var6 = (1.0F + var4 * 0.4F) * var5; + float var7 = (1.0F + var4 * 0.1F) / var5; + GL11.glScalef(var6, var7, var6); + } + + protected int updateCreeperColorMultiplier(EntityCreeper var1, float var2, float var3) { + float var5 = var1.getCreeperFlashIntensity(var3); + if((int)(var5 * 10.0F) % 2 == 0) { + return 0; + } else { + int var6 = (int)(var5 * 0.2F * 255.0F); + if(var6 < 0) { + var6 = 0; + } + + if(var6 > 255) { + var6 = 255; + } + + short var7 = 255; + short var8 = 255; + short var9 = 255; + return var6 << 24 | var7 << 16 | var8 << 8 | var9; + } + } + + protected int renderCreeperPassModel(EntityCreeper var1, int var2, float var3) { + if(var1.getPowered()) { + if(var1.isInvisible()) { + GL11.glDepthMask(false); + } else { + GL11.glDepthMask(true); + } + + if(var2 == 1) { + float var4 = (float)var1.ticksExisted + var3; + this.loadTexture("/armor/power.png"); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + float var5 = var4 * 0.01F; + float var6 = var4 * 0.01F; + GL11.glTranslatef(var5, var6, 0.0F); + this.setRenderPassModel(this.creeperModel); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glEnable(GL11.GL_BLEND); + float var7 = 0.5F; + GL11.glColor4f(var7, var7, var7, 1.0F); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); + return 1; + } + + if(var2 == 2) { + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + } + } + + return -1; + } + + protected int func_77061_b(EntityCreeper var1, int var2, float var3) { + return -1; + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + this.updateCreeperScale((EntityCreeper)var1, var2); + } + + protected int getColorMultiplier(EntityLiving var1, float var2, float var3) { + return this.updateCreeperColorMultiplier((EntityCreeper)var1, var2, var3); + } + + protected int shouldRenderPass(EntityLiving var1, int var2, float var3) { + return this.renderCreeperPassModel((EntityCreeper)var1, var2, var3); + } + + protected int inheritRenderPass(EntityLiving var1, int var2, float var3) { + return this.func_77061_b((EntityCreeper)var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/RenderDragon.java b/src/net/minecraft/src/RenderDragon.java new file mode 100644 index 0000000..1878e4a --- /dev/null +++ b/src/net/minecraft/src/RenderDragon.java @@ -0,0 +1,215 @@ +package net.minecraft.src; + +import java.util.Random; +import org.lwjgl.opengl.GL11; + +public class RenderDragon extends RenderLiving { + private static int updateModelState = 0; + protected ModelDragon modelDragon = (ModelDragon)this.mainModel; + + public RenderDragon() { + super(new ModelDragon(0.0F), 0.5F); + this.setRenderPassModel(this.mainModel); + } + + protected void rotateDragonBody(EntityDragon var1, float var2, float var3, float var4) { + float var5 = (float)var1.getMovementOffsets(7, var4)[0]; + float var6 = (float)(var1.getMovementOffsets(5, var4)[1] - var1.getMovementOffsets(10, var4)[1]); + GL11.glRotatef(-var5, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(var6 * 10.0F, 1.0F, 0.0F, 0.0F); + GL11.glTranslatef(0.0F, 0.0F, 1.0F); + if(var1.deathTime > 0) { + float var7 = ((float)var1.deathTime + var4 - 1.0F) / 20.0F * 1.6F; + var7 = MathHelper.sqrt_float(var7); + if(var7 > 1.0F) { + var7 = 1.0F; + } + + GL11.glRotatef(var7 * this.getDeathMaxRotation(var1), 0.0F, 0.0F, 1.0F); + } + + } + + protected void renderDragonModel(EntityDragon var1, float var2, float var3, float var4, float var5, float var6, float var7) { + if(var1.deathTicks > 0) { + float var8 = (float)var1.deathTicks / 200.0F; + GL11.glDepthFunc(GL11.GL_LEQUAL); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glAlphaFunc(GL11.GL_GREATER, var8); + this.loadTexture("/mob/enderdragon/shuffle.png"); + this.mainModel.render(var1, var2, var3, var4, var5, var6, var7); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + GL11.glDepthFunc(GL11.GL_EQUAL); + } + + this.loadTexture(var1.getTexture()); + this.mainModel.render(var1, var2, var3, var4, var5, var6, var7); + if(var1.hurtTime > 0) { + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(1.0F, 0.0F, 0.0F, 0.5F); + this.mainModel.render(var1, var2, var3, var4, var5, var6, var7); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + + } + + public void renderDragon(EntityDragon var1, double var2, double var4, double var6, float var8, float var9) { + BossStatus.func_82824_a(var1, false); + if(updateModelState != 4) { + this.mainModel = new ModelDragon(0.0F); + updateModelState = 4; + } + + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + if(var1.healingEnderCrystal != null) { + float var10 = (float)var1.healingEnderCrystal.innerRotation + var9; + float var11 = MathHelper.sin(var10 * 0.2F) / 2.0F + 0.5F; + var11 = (var11 * var11 + var11) * 0.2F; + float var12 = (float)(var1.healingEnderCrystal.posX - var1.posX - (var1.prevPosX - var1.posX) * (double)(1.0F - var9)); + float var13 = (float)((double)var11 + var1.healingEnderCrystal.posY - 1.0D - var1.posY - (var1.prevPosY - var1.posY) * (double)(1.0F - var9)); + float var14 = (float)(var1.healingEnderCrystal.posZ - var1.posZ - (var1.prevPosZ - var1.posZ) * (double)(1.0F - var9)); + float var15 = MathHelper.sqrt_float(var12 * var12 + var14 * var14); + float var16 = MathHelper.sqrt_float(var12 * var12 + var13 * var13 + var14 * var14); + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4 + 2.0F, (float)var6); + GL11.glRotatef((float)(-Math.atan2((double)var14, (double)var12)) * 180.0F / (float)Math.PI - 90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef((float)(-Math.atan2((double)var15, (double)var13)) * 180.0F / (float)Math.PI - 90.0F, 1.0F, 0.0F, 0.0F); + Tessellator var17 = Tessellator.instance; + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_CULL_FACE); + this.loadTexture("/mob/enderdragon/beam.png"); + GL11.glShadeModel(GL11.GL_SMOOTH); + float var18 = 0.0F - ((float)var1.ticksExisted + var9) * 0.01F; + float var19 = MathHelper.sqrt_float(var12 * var12 + var13 * var13 + var14 * var14) / 32.0F - ((float)var1.ticksExisted + var9) * 0.01F; + var17.startDrawing(5); + byte var20 = 8; + + for(int var21 = 0; var21 <= var20; ++var21) { + float var22 = MathHelper.sin((float)(var21 % var20) * (float)Math.PI * 2.0F / (float)var20) * (12.0F / 16.0F); + float var23 = MathHelper.cos((float)(var21 % var20) * (float)Math.PI * 2.0F / (float)var20) * (12.0F / 16.0F); + float var24 = (float)(var21 % var20) * 1.0F / (float)var20; + var17.setColorOpaque_I(0); + var17.addVertexWithUV((double)(var22 * 0.2F), (double)(var23 * 0.2F), 0.0D, (double)var24, (double)var19); + var17.setColorOpaque_I(16777215); + var17.addVertexWithUV((double)var22, (double)var23, (double)var16, (double)var24, (double)var18); + } + + var17.draw(); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_FLAT); + RenderHelper.enableStandardItemLighting(); + GL11.glPopMatrix(); + } + + } + + protected void renderDragonDying(EntityDragon var1, float var2) { + super.renderEquippedItems(var1, var2); + Tessellator var3 = Tessellator.instance; + if(var1.deathTicks > 0) { + RenderHelper.disableStandardItemLighting(); + float var4 = ((float)var1.deathTicks + var2) / 200.0F; + float var5 = 0.0F; + if(var4 > 0.8F) { + var5 = (var4 - 0.8F) / 0.2F; + } + + Random var6 = new Random(432L); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDepthMask(false); + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, -1.0F, -2.0F); + + for(int var7 = 0; (float)var7 < (var4 + var4 * var4) / 2.0F * 60.0F; ++var7) { + GL11.glRotatef(var6.nextFloat() * 360.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(var6.nextFloat() * 360.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(var6.nextFloat() * 360.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(var6.nextFloat() * 360.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(var6.nextFloat() * 360.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(var6.nextFloat() * 360.0F + var4 * 90.0F, 0.0F, 0.0F, 1.0F); + var3.startDrawing(6); + float var8 = var6.nextFloat() * 20.0F + 5.0F + var5 * 10.0F; + float var9 = var6.nextFloat() * 2.0F + 1.0F + var5 * 2.0F; + var3.setColorRGBA_I(16777215, (int)(255.0F * (1.0F - var5))); + var3.addVertex(0.0D, 0.0D, 0.0D); + var3.setColorRGBA_I(16711935, 0); + var3.addVertex(-0.866D * (double)var9, (double)var8, (double)(-0.5F * var9)); + var3.addVertex(0.866D * (double)var9, (double)var8, (double)(-0.5F * var9)); + var3.addVertex(0.0D, (double)var8, (double)(1.0F * var9)); + var3.addVertex(-0.866D * (double)var9, (double)var8, (double)(-0.5F * var9)); + var3.draw(); + } + + GL11.glPopMatrix(); + GL11.glDepthMask(true); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_BLEND); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_ALPHA_TEST); + RenderHelper.enableStandardItemLighting(); + } + + } + + protected int renderGlow(EntityDragon var1, int var2, float var3) { + if(var2 == 1) { + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + + if(var2 != 0) { + return -1; + } else { + this.loadTexture("/mob/enderdragon/ender_eyes.png"); + float var4 = 1.0F; + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDepthFunc(GL11.GL_EQUAL); + char var5 = '\uf0f0'; + int var6 = var5 % 65536; + int var7 = var5 / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var6 / 1.0F, (float)var7 / 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glColor4f(1.0F, 1.0F, 1.0F, var4); + return 1; + } + } + + protected int shouldRenderPass(EntityLiving var1, int var2, float var3) { + return this.renderGlow((EntityDragon)var1, var2, var3); + } + + protected void renderEquippedItems(EntityLiving var1, float var2) { + this.renderDragonDying((EntityDragon)var1, var2); + } + + protected void rotateCorpse(EntityLiving var1, float var2, float var3, float var4) { + this.rotateDragonBody((EntityDragon)var1, var2, var3, var4); + } + + protected void renderModel(EntityLiving var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.renderDragonModel((EntityDragon)var1, var2, var3, var4, var5, var6, var7); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.renderDragon((EntityDragon)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderDragon((EntityDragon)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderEnchantmentTable.java b/src/net/minecraft/src/RenderEnchantmentTable.java new file mode 100644 index 0000000..c3f16ce --- /dev/null +++ b/src/net/minecraft/src/RenderEnchantmentTable.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderEnchantmentTable extends TileEntitySpecialRenderer { + private ModelBook enchantmentBook = new ModelBook(); + + public void renderTileEntityEnchantmentTableAt(TileEntityEnchantmentTable var1, double var2, double var4, double var6, float var8) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2 + 0.5F, (float)var4 + 12.0F / 16.0F, (float)var6 + 0.5F); + float var9 = (float)var1.tickCount + var8; + GL11.glTranslatef(0.0F, 0.1F + MathHelper.sin(var9 * 0.1F) * 0.01F, 0.0F); + + float var10; + for(var10 = var1.bookRotation2 - var1.bookRotationPrev; var10 >= (float)Math.PI; var10 -= (float)Math.PI * 2.0F) { + } + + while(var10 < -((float)Math.PI)) { + var10 += (float)Math.PI * 2.0F; + } + + float var11 = var1.bookRotationPrev + var10 * var8; + GL11.glRotatef(-var11 * 180.0F / (float)Math.PI, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(80.0F, 0.0F, 0.0F, 1.0F); + this.bindTextureByName("/item/book.png"); + float var12 = var1.pageFlipPrev + (var1.pageFlip - var1.pageFlipPrev) * var8 + 0.25F; + float var13 = var1.pageFlipPrev + (var1.pageFlip - var1.pageFlipPrev) * var8 + 12.0F / 16.0F; + var12 = (var12 - (float)MathHelper.truncateDoubleToInt((double)var12)) * 1.6F - 0.3F; + var13 = (var13 - (float)MathHelper.truncateDoubleToInt((double)var13)) * 1.6F - 0.3F; + if(var12 < 0.0F) { + var12 = 0.0F; + } + + if(var13 < 0.0F) { + var13 = 0.0F; + } + + if(var12 > 1.0F) { + var12 = 1.0F; + } + + if(var13 > 1.0F) { + var13 = 1.0F; + } + + float var14 = var1.bookSpreadPrev + (var1.bookSpread - var1.bookSpreadPrev) * var8; + GL11.glEnable(GL11.GL_CULL_FACE); + this.enchantmentBook.render((Entity)null, var9, var12, var13, var14, 0.0F, 1.0F / 16.0F); + GL11.glPopMatrix(); + } + + public void renderTileEntityAt(TileEntity var1, double var2, double var4, double var6, float var8) { + this.renderTileEntityEnchantmentTableAt((TileEntityEnchantmentTable)var1, var2, var4, var6, var8); + } +} diff --git a/src/net/minecraft/src/RenderEndPortal.java b/src/net/minecraft/src/RenderEndPortal.java new file mode 100644 index 0000000..2da9ee4 --- /dev/null +++ b/src/net/minecraft/src/RenderEndPortal.java @@ -0,0 +1,109 @@ +package net.minecraft.src; + +import java.nio.FloatBuffer; +import java.util.Random; +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +public class RenderEndPortal extends TileEntitySpecialRenderer { + FloatBuffer field_76908_a = GLAllocation.createDirectFloatBuffer(16); + + public void renderEndPortalTileEntity(TileEntityEndPortal var1, double var2, double var4, double var6, float var8) { + float var9 = (float)this.tileEntityRenderer.playerX; + float var10 = (float)this.tileEntityRenderer.playerY; + float var11 = (float)this.tileEntityRenderer.playerZ; + GL11.glDisable(GL11.GL_LIGHTING); + Random var12 = new Random(31100L); + float var13 = 12.0F / 16.0F; + + for(int var14 = 0; var14 < 16; ++var14) { + GL11.glPushMatrix(); + float var15 = (float)(16 - var14); + float var16 = 1.0F / 16.0F; + float var17 = 1.0F / (var15 + 1.0F); + if(var14 == 0) { + this.bindTextureByName("/misc/tunnel.png"); + var17 = 0.1F; + var15 = 65.0F; + var16 = 2.0F / 16.0F; + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + } + + if(var14 == 1) { + this.bindTextureByName("/misc/particlefield.png"); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); + var16 = 0.5F; + } + + float var18 = (float)(-(var4 + (double)var13)); + float var19 = var18 + ActiveRenderInfo.objectY; + float var20 = var18 + var15 + ActiveRenderInfo.objectY; + float var21 = var19 / var20; + var21 += (float)(var4 + (double)var13); + GL11.glTranslatef(var9, var21, var11); + GL11.glTexGeni(GL11.GL_S, GL11.GL_TEXTURE_GEN_MODE, GL11.GL_OBJECT_LINEAR); + GL11.glTexGeni(GL11.GL_T, GL11.GL_TEXTURE_GEN_MODE, GL11.GL_OBJECT_LINEAR); + GL11.glTexGeni(GL11.GL_R, GL11.GL_TEXTURE_GEN_MODE, GL11.GL_OBJECT_LINEAR); + GL11.glTexGeni(GL11.GL_Q, GL11.GL_TEXTURE_GEN_MODE, GL11.GL_EYE_LINEAR); + GL11.glTexGen(GL11.GL_S, GL11.GL_OBJECT_PLANE, this.func_76907_a(1.0F, 0.0F, 0.0F, 0.0F)); + GL11.glTexGen(GL11.GL_T, GL11.GL_OBJECT_PLANE, this.func_76907_a(0.0F, 0.0F, 1.0F, 0.0F)); + GL11.glTexGen(GL11.GL_R, GL11.GL_OBJECT_PLANE, this.func_76907_a(0.0F, 0.0F, 0.0F, 1.0F)); + GL11.glTexGen(GL11.GL_Q, GL11.GL_EYE_PLANE, this.func_76907_a(0.0F, 1.0F, 0.0F, 0.0F)); + GL11.glEnable(GL11.GL_TEXTURE_GEN_S); + GL11.glEnable(GL11.GL_TEXTURE_GEN_T); + GL11.glEnable(GL11.GL_TEXTURE_GEN_R); + GL11.glEnable(GL11.GL_TEXTURE_GEN_Q); + GL11.glPopMatrix(); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glPushMatrix(); + GL11.glLoadIdentity(); + GL11.glTranslatef(0.0F, (float)(Minecraft.getSystemTime() % 700000L) / 700000.0F, 0.0F); + GL11.glScalef(var16, var16, var16); + GL11.glTranslatef(0.5F, 0.5F, 0.0F); + GL11.glRotatef((float)(var14 * var14 * 4321 + var14 * 9) * 2.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(-0.5F, -0.5F, 0.0F); + GL11.glTranslatef(-var9, -var11, -var10); + var19 = var18 + ActiveRenderInfo.objectY; + GL11.glTranslatef(ActiveRenderInfo.objectX * var15 / var19, ActiveRenderInfo.objectZ * var15 / var19, -var10); + Tessellator var24 = Tessellator.instance; + var24.startDrawingQuads(); + var21 = var12.nextFloat() * 0.5F + 0.1F; + float var22 = var12.nextFloat() * 0.5F + 0.4F; + float var23 = var12.nextFloat() * 0.5F + 0.5F; + if(var14 == 0) { + var23 = 1.0F; + var22 = var23; + var21 = var23; + } + + var24.setColorRGBA_F(var21 * var17, var22 * var17, var23 * var17, 1.0F); + var24.addVertex(var2, var4 + (double)var13, var6); + var24.addVertex(var2, var4 + (double)var13, var6 + 1.0D); + var24.addVertex(var2 + 1.0D, var4 + (double)var13, var6 + 1.0D); + var24.addVertex(var2 + 1.0D, var4 + (double)var13, var6); + var24.draw(); + GL11.glPopMatrix(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + } + + GL11.glDisable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_TEXTURE_GEN_S); + GL11.glDisable(GL11.GL_TEXTURE_GEN_T); + GL11.glDisable(GL11.GL_TEXTURE_GEN_R); + GL11.glDisable(GL11.GL_TEXTURE_GEN_Q); + GL11.glEnable(GL11.GL_LIGHTING); + } + + private FloatBuffer func_76907_a(float var1, float var2, float var3, float var4) { + this.field_76908_a.clear(); + this.field_76908_a.put(var1).put(var2).put(var3).put(var4); + this.field_76908_a.flip(); + return this.field_76908_a; + } + + public void renderTileEntityAt(TileEntity var1, double var2, double var4, double var6, float var8) { + this.renderEndPortalTileEntity((TileEntityEndPortal)var1, var2, var4, var6, var8); + } +} diff --git a/src/net/minecraft/src/RenderEnderCrystal.java b/src/net/minecraft/src/RenderEnderCrystal.java new file mode 100644 index 0000000..a235604 --- /dev/null +++ b/src/net/minecraft/src/RenderEnderCrystal.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderEnderCrystal extends Render { + private int field_76996_a = -1; + private ModelBase field_76995_b; + + public RenderEnderCrystal() { + this.shadowSize = 0.5F; + } + + public void doRenderEnderCrystal(EntityEnderCrystal var1, double var2, double var4, double var6, float var8, float var9) { + if(this.field_76996_a != 1) { + this.field_76995_b = new ModelEnderCrystal(0.0F, true); + this.field_76996_a = 1; + } + + float var10 = (float)var1.innerRotation + var9; + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + this.loadTexture("/mob/enderdragon/crystal.png"); + float var11 = MathHelper.sin(var10 * 0.2F) / 2.0F + 0.5F; + var11 += var11 * var11; + this.field_76995_b.render(var1, 0.0F, var10 * 3.0F, var11 * 0.2F, 0.0F, 0.0F, 1.0F / 16.0F); + GL11.glPopMatrix(); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.doRenderEnderCrystal((EntityEnderCrystal)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderEnderman.java b/src/net/minecraft/src/RenderEnderman.java new file mode 100644 index 0000000..dab1efd --- /dev/null +++ b/src/net/minecraft/src/RenderEnderman.java @@ -0,0 +1,95 @@ +package net.minecraft.src; + +import java.util.Random; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderEnderman extends RenderLiving { + private ModelEnderman endermanModel = (ModelEnderman)this.mainModel; + private Random rnd = new Random(); + + public RenderEnderman() { + super(new ModelEnderman(), 0.5F); + this.setRenderPassModel(this.endermanModel); + } + + public void renderEnderman(EntityEnderman var1, double var2, double var4, double var6, float var8, float var9) { + this.endermanModel.isCarrying = var1.getCarried() > 0; + this.endermanModel.isAttacking = var1.isScreaming(); + if(var1.isScreaming()) { + double var10 = 0.02D; + var2 += this.rnd.nextGaussian() * var10; + var6 += this.rnd.nextGaussian() * var10; + } + + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + protected void renderCarrying(EntityEnderman var1, float var2) { + super.renderEquippedItems(var1, var2); + if(var1.getCarried() > 0) { + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glPushMatrix(); + float var3 = 0.5F; + GL11.glTranslatef(0.0F, 11.0F / 16.0F, -(12.0F / 16.0F)); + var3 *= 1.0F; + GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + GL11.glScalef(-var3, -var3, var3); + int var4 = var1.getBrightnessForRender(var2); + int var5 = var4 % 65536; + int var6 = var4 / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var5 / 1.0F, (float)var6 / 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.loadTexture("/terrain.png"); + this.renderBlocks.renderBlockAsItem(Block.blocksList[var1.getCarried()], var1.getCarryingData(), 1.0F); + GL11.glPopMatrix(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + } + + } + + protected int renderEyes(EntityEnderman var1, int var2, float var3) { + if(var2 != 0) { + return -1; + } else { + this.loadTexture("/mob/enderman_eyes.png"); + float var4 = 1.0F; + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); + GL11.glDisable(GL11.GL_LIGHTING); + if(var1.isInvisible()) { + GL11.glDepthMask(false); + } else { + GL11.glDepthMask(true); + } + + char var5 = '\uf0f0'; + int var6 = var5 % 65536; + int var7 = var5 / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var6 / 1.0F, (float)var7 / 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glColor4f(1.0F, 1.0F, 1.0F, var4); + return 1; + } + } + + protected int shouldRenderPass(EntityLiving var1, int var2, float var3) { + return this.renderEyes((EntityEnderman)var1, var2, var3); + } + + protected void renderEquippedItems(EntityLiving var1, float var2) { + this.renderCarrying((EntityEnderman)var1, var2); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.renderEnderman((EntityEnderman)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderEnderman((EntityEnderman)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderEngine.java b/src/net/minecraft/src/RenderEngine.java new file mode 100644 index 0000000..2b19a96 --- /dev/null +++ b/src/net/minecraft/src/RenderEngine.java @@ -0,0 +1,362 @@ +package net.minecraft.src; + +import java.awt.Color; +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.io.InputStream; +import java.nio.IntBuffer; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import javax.imageio.ImageIO; +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderEngine { + private HashMap textureMap = new HashMap(); + private HashMap textureContentsMap = new HashMap(); + private IntHashMap textureNameToImageMap = new IntHashMap(); + private IntBuffer imageData = GLAllocation.createDirectIntBuffer(4194304); + private Map urlToImageDataMap = new HashMap(); + private GameSettings options; + private TexturePackList texturePack; + private BufferedImage missingTextureImage = new BufferedImage(64, 64, 2); + private final TextureMap textureMapBlocks; + private final TextureMap textureMapItems; + private int boundTexture; + + public RenderEngine(TexturePackList var1, GameSettings var2) { + this.texturePack = var1; + this.options = var2; + Graphics var3 = this.missingTextureImage.getGraphics(); + var3.setColor(Color.WHITE); + var3.fillRect(0, 0, 64, 64); + var3.setColor(Color.BLACK); + int var4 = 10; + int var5 = 0; + + while(var4 < 64) { + String var6 = var5++ % 2 == 0 ? "missing" : "texture"; + var3.drawString(var6, 1, var4); + var4 += var3.getFont().getSize(); + if(var5 % 2 == 0) { + var4 += 5; + } + } + + var3.dispose(); + this.textureMapBlocks = new TextureMap(0, "terrain", "textures/blocks/", this.missingTextureImage); + this.textureMapItems = new TextureMap(1, "items", "textures/items/", this.missingTextureImage); + } + + public int[] getTextureContents(String var1) { + ITexturePack var2 = this.texturePack.getSelectedTexturePack(); + int[] var3 = (int[])this.textureContentsMap.get(var1); + if(var3 != null) { + return var3; + } else { + try { + InputStream var7 = var2.getResourceAsStream(var1); + int[] var4; + if(var7 == null) { + var4 = this.getImageContentsAndAllocate(this.missingTextureImage); + } else { + var4 = this.getImageContentsAndAllocate(this.readTextureImage(var7)); + } + + this.textureContentsMap.put(var1, var4); + return var4; + } catch (IOException var6) { + var6.printStackTrace(); + int[] var5 = this.getImageContentsAndAllocate(this.missingTextureImage); + this.textureContentsMap.put(var1, var5); + return var5; + } + } + } + + private int[] getImageContentsAndAllocate(BufferedImage var1) { + return this.getImageContents(var1, new int[var1.getWidth() * var1.getHeight()]); + } + + private int[] getImageContents(BufferedImage var1, int[] var2) { + int var3 = var1.getWidth(); + int var4 = var1.getHeight(); + var1.getRGB(0, 0, var3, var4, var2, 0, var3); + return var2; + } + + public void bindTexture(String var1) { + this.bindTexture(this.getTexture(var1)); + } + + private void bindTexture(int var1) { + if(var1 != this.boundTexture) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var1); + this.boundTexture = var1; + } + + } + + public void resetBoundTexture() { + this.boundTexture = -1; + } + + private int getTexture(String var1) { + if(var1.equals("/terrain.png")) { + this.textureMapBlocks.getTexture().bindTexture(0); + return this.textureMapBlocks.getTexture().getGlTextureId(); + } else if(var1.equals("/gui/items.png")) { + this.textureMapItems.getTexture().bindTexture(0); + return this.textureMapItems.getTexture().getGlTextureId(); + } else { + Integer var2 = (Integer)this.textureMap.get(var1); + if(var2 != null) { + return var2.intValue(); + } else { + String var8 = var1; + + try { + int var3 = GLAllocation.generateTextureNames(); + boolean var9 = var1.startsWith("%blur%"); + if(var9) { + var1 = var1.substring(6); + } + + boolean var5 = var1.startsWith("%clamp%"); + if(var5) { + var1 = var1.substring(7); + } + + InputStream var6 = this.texturePack.getSelectedTexturePack().getResourceAsStream(var1); + if(var6 == null) { + this.setupTextureExt(this.missingTextureImage, var3, var9, var5); + } else { + this.setupTextureExt(this.readTextureImage(var6), var3, var9, var5); + } + + this.textureMap.put(var8, Integer.valueOf(var3)); + return var3; + } catch (Exception var7) { + var7.printStackTrace(); + int var4 = GLAllocation.generateTextureNames(); + this.setupTexture(this.missingTextureImage, var4); + this.textureMap.put(var1, Integer.valueOf(var4)); + return var4; + } + } + } + } + + public int allocateAndSetupTexture(BufferedImage var1) { + int var2 = GLAllocation.generateTextureNames(); + this.setupTexture(var1, var2); + this.textureNameToImageMap.addKey(var2, var1); + return var2; + } + + public void setupTexture(BufferedImage var1, int var2) { + this.setupTextureExt(var1, var2, false, false); + } + + public void setupTextureExt(BufferedImage var1, int var2, boolean var3, boolean var4) { + this.bindTexture(var2); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); + if(var3) { + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_LINEAR); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_LINEAR); + } + + if(var4) { + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP); + } else { + 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); + } + + int var5 = var1.getWidth(); + int var6 = var1.getHeight(); + int[] var7 = new int[var5 * var6]; + var1.getRGB(0, 0, var5, var6, var7, 0, var5); + if(this.options != null && this.options.anaglyph) { + var7 = this.colorToAnaglyph(var7); + } + + this.imageData.clear(); + this.imageData.put(var7); + this.imageData.position(0).limit(var7.length); + GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, var5, var6, 0, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, (IntBuffer)this.imageData); + } + + private int[] colorToAnaglyph(int[] var1) { + int[] var2 = new int[var1.length]; + + for(int var3 = 0; var3 < var1.length; ++var3) { + int var4 = var1[var3] >> 24 & 255; + int var5 = var1[var3] >> 16 & 255; + int var6 = var1[var3] >> 8 & 255; + int var7 = var1[var3] & 255; + int var8 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; + int var9 = (var5 * 30 + var6 * 70) / 100; + int var10 = (var5 * 30 + var7 * 70) / 100; + var2[var3] = var4 << 24 | var8 << 16 | var9 << 8 | var10; + } + + return var2; + } + + public void createTextureFromBytes(int[] var1, int var2, int var3, int var4) { + this.bindTexture(var4); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); + 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); + if(this.options != null && this.options.anaglyph) { + var1 = this.colorToAnaglyph(var1); + } + + this.imageData.clear(); + this.imageData.put(var1); + this.imageData.position(0).limit(var1.length); + GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, 0, 0, 0, var2, var3, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, (IntBuffer)this.imageData); + } + + public void deleteTexture(int var1) { + this.textureNameToImageMap.removeObject(var1); + GL11.glDeleteTextures(var1); + } + + public int getTextureForDownloadableImage(String var1, String var2) { + ThreadDownloadImageData var3 = (ThreadDownloadImageData)this.urlToImageDataMap.get(var1); + if(var3 != null && var3.image != null && !var3.textureSetupComplete) { + if(var3.textureName < 0) { + var3.textureName = this.allocateAndSetupTexture(var3.image); + } else { + this.setupTexture(var3.image, var3.textureName); + } + + var3.textureSetupComplete = true; + } + + return var3 != null && var3.textureName >= 0 ? var3.textureName : (var2 == null ? -1 : this.getTexture(var2)); + } + + public boolean hasImageData(String var1) { + return this.urlToImageDataMap.containsKey(var1); + } + + public ThreadDownloadImageData obtainImageData(String var1, IImageBuffer var2) { + ThreadDownloadImageData var3 = (ThreadDownloadImageData)this.urlToImageDataMap.get(var1); + if(var3 == null) { + this.urlToImageDataMap.put(var1, new ThreadDownloadImageData(var1, var2)); + } else { + ++var3.referenceCount; + } + + return var3; + } + + public void releaseImageData(String var1) { + ThreadDownloadImageData var2 = (ThreadDownloadImageData)this.urlToImageDataMap.get(var1); + if(var2 != null) { + --var2.referenceCount; + if(var2.referenceCount == 0) { + if(var2.textureName >= 0) { + this.deleteTexture(var2.textureName); + } + + this.urlToImageDataMap.remove(var1); + } + } + + } + + public void updateDynamicTextures() { + this.textureMapBlocks.updateAnimations(); + this.textureMapItems.updateAnimations(); + } + + public void refreshTextures() { + ITexturePack var1 = this.texturePack.getSelectedTexturePack(); + this.refreshTextureMaps(); + Iterator var2 = this.textureNameToImageMap.getKeySet().iterator(); + + BufferedImage var4; + while(var2.hasNext()) { + int var3 = ((Integer)var2.next()).intValue(); + var4 = (BufferedImage)this.textureNameToImageMap.lookup(var3); + this.setupTexture(var4, var3); + } + + ThreadDownloadImageData var10; + for(var2 = this.urlToImageDataMap.values().iterator(); var2.hasNext(); var10.textureSetupComplete = false) { + var10 = (ThreadDownloadImageData)var2.next(); + } + + var2 = this.textureMap.keySet().iterator(); + + String var11; + while(var2.hasNext()) { + var11 = (String)var2.next(); + + try { + int var12 = ((Integer)this.textureMap.get(var11)).intValue(); + boolean var6 = var11.startsWith("%blur%"); + if(var6) { + var11 = var11.substring(6); + } + + boolean var7 = var11.startsWith("%clamp%"); + if(var7) { + var11 = var11.substring(7); + } + + BufferedImage var5 = this.readTextureImage(var1.getResourceAsStream(var11)); + this.setupTextureExt(var5, var12, var6, var7); + } catch (IOException var9) { + var9.printStackTrace(); + } + } + + var2 = this.textureContentsMap.keySet().iterator(); + + while(var2.hasNext()) { + var11 = (String)var2.next(); + + try { + var4 = this.readTextureImage(var1.getResourceAsStream(var11)); + this.getImageContents(var4, (int[])this.textureContentsMap.get(var11)); + } catch (IOException var8) { + var8.printStackTrace(); + } + } + + Minecraft.getMinecraft().fontRenderer.readFontData(); + Minecraft.getMinecraft().standardGalacticFontRenderer.readFontData(); + } + + private BufferedImage readTextureImage(InputStream var1) throws IOException { + BufferedImage var2 = ImageIO.read(var1); + var1.close(); + return var2; + } + + public void refreshTextureMaps() { + this.textureMapBlocks.refreshTextures(); + this.textureMapItems.refreshTextures(); + } + + public Icon getMissingIcon(int var1) { + switch(var1) { + case 0: + return this.textureMapBlocks.getMissingIcon(); + case 1: + default: + return this.textureMapItems.getMissingIcon(); + } + } +} diff --git a/src/net/minecraft/src/RenderEntity.java b/src/net/minecraft/src/RenderEntity.java new file mode 100644 index 0000000..52836e9 --- /dev/null +++ b/src/net/minecraft/src/RenderEntity.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderEntity extends Render { + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + renderOffsetAABB(var1.boundingBox, var2 - var1.lastTickPosX, var4 - var1.lastTickPosY, var6 - var1.lastTickPosZ); + GL11.glPopMatrix(); + } +} diff --git a/src/net/minecraft/src/RenderFallingSand.java b/src/net/minecraft/src/RenderFallingSand.java new file mode 100644 index 0000000..ad41b64 --- /dev/null +++ b/src/net/minecraft/src/RenderFallingSand.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderFallingSand extends Render { + private RenderBlocks sandRenderBlocks = new RenderBlocks(); + + public RenderFallingSand() { + this.shadowSize = 0.5F; + } + + public void doRenderFallingSand(EntityFallingSand var1, double var2, double var4, double var6, float var8, float var9) { + World var10 = var1.getWorld(); + Block var11 = Block.blocksList[var1.blockID]; + if(var10.getBlockId(MathHelper.floor_double(var1.posX), MathHelper.floor_double(var1.posY), MathHelper.floor_double(var1.posZ)) != var1.blockID) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + this.loadTexture("/terrain.png"); + GL11.glDisable(GL11.GL_LIGHTING); + Tessellator var12; + if(var11 instanceof BlockAnvil && var11.getRenderType() == 35) { + this.sandRenderBlocks.blockAccess = var10; + var12 = Tessellator.instance; + var12.startDrawingQuads(); + var12.setTranslation((double)((float)(-MathHelper.floor_double(var1.posX)) - 0.5F), (double)((float)(-MathHelper.floor_double(var1.posY)) - 0.5F), (double)((float)(-MathHelper.floor_double(var1.posZ)) - 0.5F)); + this.sandRenderBlocks.renderBlockAnvilMetadata((BlockAnvil)var11, MathHelper.floor_double(var1.posX), MathHelper.floor_double(var1.posY), MathHelper.floor_double(var1.posZ), var1.metadata); + var12.setTranslation(0.0D, 0.0D, 0.0D); + var12.draw(); + } else if(var11.getRenderType() == 27) { + this.sandRenderBlocks.blockAccess = var10; + var12 = Tessellator.instance; + var12.startDrawingQuads(); + var12.setTranslation((double)((float)(-MathHelper.floor_double(var1.posX)) - 0.5F), (double)((float)(-MathHelper.floor_double(var1.posY)) - 0.5F), (double)((float)(-MathHelper.floor_double(var1.posZ)) - 0.5F)); + this.sandRenderBlocks.renderBlockDragonEgg((BlockDragonEgg)var11, MathHelper.floor_double(var1.posX), MathHelper.floor_double(var1.posY), MathHelper.floor_double(var1.posZ)); + var12.setTranslation(0.0D, 0.0D, 0.0D); + var12.draw(); + } else if(var11 != null) { + this.sandRenderBlocks.setRenderBoundsFromBlock(var11); + this.sandRenderBlocks.renderBlockSandFalling(var11, var10, MathHelper.floor_double(var1.posX), MathHelper.floor_double(var1.posY), MathHelper.floor_double(var1.posZ), var1.metadata); + } + + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glPopMatrix(); + } + + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.doRenderFallingSand((EntityFallingSand)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderFireball.java b/src/net/minecraft/src/RenderFireball.java new file mode 100644 index 0000000..bf809de --- /dev/null +++ b/src/net/minecraft/src/RenderFireball.java @@ -0,0 +1,45 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderFireball extends Render { + private float field_77002_a; + + public RenderFireball(float var1) { + this.field_77002_a = var1; + } + + public void doRenderFireball(EntityFireball var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + float var10 = this.field_77002_a; + GL11.glScalef(var10 / 1.0F, var10 / 1.0F, var10 / 1.0F); + Icon var11 = Item.fireballCharge.getIconFromDamage(0); + this.loadTexture("/gui/items.png"); + Tessellator var12 = Tessellator.instance; + float var13 = var11.getMinU(); + float var14 = var11.getMaxU(); + float var15 = var11.getMinV(); + float var16 = var11.getMaxV(); + float var17 = 1.0F; + float var18 = 0.5F; + float var19 = 0.25F; + GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + var12.startDrawingQuads(); + var12.setNormal(0.0F, 1.0F, 0.0F); + var12.addVertexWithUV((double)(0.0F - var18), (double)(0.0F - var19), 0.0D, (double)var13, (double)var16); + var12.addVertexWithUV((double)(var17 - var18), (double)(0.0F - var19), 0.0D, (double)var14, (double)var16); + var12.addVertexWithUV((double)(var17 - var18), (double)(1.0F - var19), 0.0D, (double)var14, (double)var15); + var12.addVertexWithUV((double)(0.0F - var18), (double)(1.0F - var19), 0.0D, (double)var13, (double)var15); + var12.draw(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.doRenderFireball((EntityFireball)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderFish.java b/src/net/minecraft/src/RenderFish.java new file mode 100644 index 0000000..98a52f6 --- /dev/null +++ b/src/net/minecraft/src/RenderFish.java @@ -0,0 +1,83 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderFish extends Render { + public void doRenderFishHook(EntityFishHook var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glScalef(0.5F, 0.5F, 0.5F); + byte var10 = 1; + byte var11 = 2; + this.loadTexture("/particles.png"); + Tessellator var12 = Tessellator.instance; + float var13 = (float)(var10 * 8 + 0) / 128.0F; + float var14 = (float)(var10 * 8 + 8) / 128.0F; + float var15 = (float)(var11 * 8 + 0) / 128.0F; + float var16 = (float)(var11 * 8 + 8) / 128.0F; + float var17 = 1.0F; + float var18 = 0.5F; + float var19 = 0.5F; + GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + var12.startDrawingQuads(); + var12.setNormal(0.0F, 1.0F, 0.0F); + var12.addVertexWithUV((double)(0.0F - var18), (double)(0.0F - var19), 0.0D, (double)var13, (double)var16); + var12.addVertexWithUV((double)(var17 - var18), (double)(0.0F - var19), 0.0D, (double)var14, (double)var16); + var12.addVertexWithUV((double)(var17 - var18), (double)(1.0F - var19), 0.0D, (double)var14, (double)var15); + var12.addVertexWithUV((double)(0.0F - var18), (double)(1.0F - var19), 0.0D, (double)var13, (double)var15); + var12.draw(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + if(var1.angler != null) { + float var20 = var1.angler.getSwingProgress(var9); + float var21 = MathHelper.sin(MathHelper.sqrt_float(var20) * (float)Math.PI); + Vec3 var22 = var1.worldObj.getWorldVec3Pool().getVecFromPool(-0.5D, 0.03D, 0.8D); + var22.rotateAroundX(-(var1.angler.prevRotationPitch + (var1.angler.rotationPitch - var1.angler.prevRotationPitch) * var9) * (float)Math.PI / 180.0F); + var22.rotateAroundY(-(var1.angler.prevRotationYaw + (var1.angler.rotationYaw - var1.angler.prevRotationYaw) * var9) * (float)Math.PI / 180.0F); + var22.rotateAroundY(var21 * 0.5F); + var22.rotateAroundX(-var21 * 0.7F); + double var23 = var1.angler.prevPosX + (var1.angler.posX - var1.angler.prevPosX) * (double)var9 + var22.xCoord; + double var25 = var1.angler.prevPosY + (var1.angler.posY - var1.angler.prevPosY) * (double)var9 + var22.yCoord; + double var27 = var1.angler.prevPosZ + (var1.angler.posZ - var1.angler.prevPosZ) * (double)var9 + var22.zCoord; + double var29 = var1.angler != Minecraft.getMinecraft().thePlayer ? (double)var1.angler.getEyeHeight() : 0.0D; + if(this.renderManager.options.thirdPersonView > 0 || var1.angler != Minecraft.getMinecraft().thePlayer) { + float var31 = (var1.angler.prevRenderYawOffset + (var1.angler.renderYawOffset - var1.angler.prevRenderYawOffset) * var9) * (float)Math.PI / 180.0F; + double var32 = (double)MathHelper.sin(var31); + double var34 = (double)MathHelper.cos(var31); + var23 = var1.angler.prevPosX + (var1.angler.posX - var1.angler.prevPosX) * (double)var9 - var34 * 0.35D - var32 * 0.85D; + var25 = var1.angler.prevPosY + var29 + (var1.angler.posY - var1.angler.prevPosY) * (double)var9 - 0.45D; + var27 = var1.angler.prevPosZ + (var1.angler.posZ - var1.angler.prevPosZ) * (double)var9 - var32 * 0.35D + var34 * 0.85D; + } + + double var46 = var1.prevPosX + (var1.posX - var1.prevPosX) * (double)var9; + double var33 = var1.prevPosY + (var1.posY - var1.prevPosY) * (double)var9 + 0.25D; + double var35 = var1.prevPosZ + (var1.posZ - var1.prevPosZ) * (double)var9; + double var37 = (double)((float)(var23 - var46)); + double var39 = (double)((float)(var25 - var33)); + double var41 = (double)((float)(var27 - var35)); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + var12.startDrawing(3); + var12.setColorOpaque_I(0); + byte var43 = 16; + + for(int var44 = 0; var44 <= var43; ++var44) { + float var45 = (float)var44 / (float)var43; + var12.addVertex(var2 + var37 * (double)var45, var4 + var39 * (double)(var45 * var45 + var45) * 0.5D + 0.25D, var6 + var41 * (double)var45); + } + + var12.draw(); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.doRenderFishHook((EntityFishHook)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderGhast.java b/src/net/minecraft/src/RenderGhast.java new file mode 100644 index 0000000..696a331 --- /dev/null +++ b/src/net/minecraft/src/RenderGhast.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderGhast extends RenderLiving { + public RenderGhast() { + super(new ModelGhast(), 0.5F); + } + + protected void preRenderGhast(EntityGhast var1, float var2) { + float var4 = ((float)var1.prevAttackCounter + (float)(var1.attackCounter - var1.prevAttackCounter) * var2) / 20.0F; + if(var4 < 0.0F) { + var4 = 0.0F; + } + + var4 = 1.0F / (var4 * var4 * var4 * var4 * var4 * 2.0F + 1.0F); + float var5 = (8.0F + var4) / 2.0F; + float var6 = (8.0F + 1.0F / var4) / 2.0F; + GL11.glScalef(var6, var5, var6); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + this.preRenderGhast((EntityGhast)var1, var2); + } +} diff --git a/src/net/minecraft/src/RenderGiantZombie.java b/src/net/minecraft/src/RenderGiantZombie.java new file mode 100644 index 0000000..9f6a2de --- /dev/null +++ b/src/net/minecraft/src/RenderGiantZombie.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderGiantZombie extends RenderLiving { + private float scale; + + public RenderGiantZombie(ModelBase var1, float var2, float var3) { + super(var1, var2 * var3); + this.scale = var3; + } + + protected void preRenderScale(EntityGiantZombie var1, float var2) { + GL11.glScalef(this.scale, this.scale, this.scale); + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + this.preRenderScale((EntityGiantZombie)var1, var2); + } +} diff --git a/src/net/minecraft/src/RenderGlobal.java b/src/net/minecraft/src/RenderGlobal.java new file mode 100644 index 0000000..e6f3880 --- /dev/null +++ b/src/net/minecraft/src/RenderGlobal.java @@ -0,0 +1,1766 @@ +package net.minecraft.src; + +import java.nio.IntBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Random; +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.ARBOcclusionQuery; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL15; + +public class RenderGlobal implements IWorldAccess { + public List tileEntities = new ArrayList(); + private WorldClient theWorld; + private final RenderEngine renderEngine; + private List worldRenderersToUpdate = new ArrayList(); + private WorldRenderer[] sortedWorldRenderers; + private WorldRenderer[] worldRenderers; + private int renderChunksWide; + private int renderChunksTall; + private int renderChunksDeep; + private int glRenderListBase; + private Minecraft mc; + private RenderBlocks globalRenderBlocks; + private IntBuffer glOcclusionQueryBase; + private boolean occlusionEnabled = false; + private int cloudTickCounter = 0; + private int starGLCallList; + private int glSkyList; + private int glSkyList2; + private int minBlockX; + private int minBlockY; + private int minBlockZ; + private int maxBlockX; + private int maxBlockY; + private int maxBlockZ; + private Map damagedBlocks = new HashMap(); + private Icon[] destroyBlockIcons; + private int renderDistance = -1; + private int renderEntitiesStartupCounter = 2; + private int countEntitiesTotal; + private int countEntitiesRendered; + private int countEntitiesHidden; + int[] dummyBuf50k = new int['\uc350']; + IntBuffer occlusionResult = GLAllocation.createDirectIntBuffer(64); + private int renderersLoaded; + private int renderersBeingClipped; + private int renderersBeingOccluded; + private int renderersBeingRendered; + private int renderersSkippingRenderPass; + private int dummyRenderInt; + private int worldRenderersCheckIndex; + private List glRenderLists = new ArrayList(); + private RenderList[] allRenderLists = new RenderList[]{new RenderList(), new RenderList(), new RenderList(), new RenderList()}; + double prevSortX = -9999.0D; + double prevSortY = -9999.0D; + double prevSortZ = -9999.0D; + int frustumCheckOffset = 0; + + public RenderGlobal(Minecraft var1, RenderEngine var2) { + this.mc = var1; + this.renderEngine = var2; + byte var3 = 34; + byte var4 = 32; + this.glRenderListBase = GLAllocation.generateDisplayLists(var3 * var3 * var4 * 3); + this.occlusionEnabled = OpenGlCapsChecker.checkARBOcclusion(); + if(this.occlusionEnabled) { + this.occlusionResult.clear(); + this.glOcclusionQueryBase = GLAllocation.createDirectIntBuffer(var3 * var3 * var4); + this.glOcclusionQueryBase.clear(); + this.glOcclusionQueryBase.position(0); + this.glOcclusionQueryBase.limit(var3 * var3 * var4); + ARBOcclusionQuery.glGenQueriesARB(this.glOcclusionQueryBase); + } + + this.starGLCallList = GLAllocation.generateDisplayLists(3); + GL11.glPushMatrix(); + GL11.glNewList(this.starGLCallList, GL11.GL_COMPILE); + this.renderStars(); + GL11.glEndList(); + GL11.glPopMatrix(); + Tessellator var5 = Tessellator.instance; + this.glSkyList = this.starGLCallList + 1; + GL11.glNewList(this.glSkyList, GL11.GL_COMPILE); + byte var7 = 64; + int var8 = 256 / var7 + 2; + float var6 = 16.0F; + + int var9; + int var10; + for(var9 = -var7 * var8; var9 <= var7 * var8; var9 += var7) { + for(var10 = -var7 * var8; var10 <= var7 * var8; var10 += var7) { + var5.startDrawingQuads(); + var5.addVertex((double)(var9 + 0), (double)var6, (double)(var10 + 0)); + var5.addVertex((double)(var9 + var7), (double)var6, (double)(var10 + 0)); + var5.addVertex((double)(var9 + var7), (double)var6, (double)(var10 + var7)); + var5.addVertex((double)(var9 + 0), (double)var6, (double)(var10 + var7)); + var5.draw(); + } + } + + GL11.glEndList(); + this.glSkyList2 = this.starGLCallList + 2; + GL11.glNewList(this.glSkyList2, GL11.GL_COMPILE); + var6 = -16.0F; + var5.startDrawingQuads(); + + for(var9 = -var7 * var8; var9 <= var7 * var8; var9 += var7) { + for(var10 = -var7 * var8; var10 <= var7 * var8; var10 += var7) { + var5.addVertex((double)(var9 + var7), (double)var6, (double)(var10 + 0)); + var5.addVertex((double)(var9 + 0), (double)var6, (double)(var10 + 0)); + var5.addVertex((double)(var9 + 0), (double)var6, (double)(var10 + var7)); + var5.addVertex((double)(var9 + var7), (double)var6, (double)(var10 + var7)); + } + } + + var5.draw(); + GL11.glEndList(); + } + + private void renderStars() { + Random var1 = new Random(10842L); + Tessellator var2 = Tessellator.instance; + var2.startDrawingQuads(); + + for(int var3 = 0; var3 < 1500; ++var3) { + double var4 = (double)(var1.nextFloat() * 2.0F - 1.0F); + double var6 = (double)(var1.nextFloat() * 2.0F - 1.0F); + double var8 = (double)(var1.nextFloat() * 2.0F - 1.0F); + double var10 = (double)(0.15F + var1.nextFloat() * 0.1F); + double var12 = var4 * var4 + var6 * var6 + var8 * var8; + if(var12 < 1.0D && var12 > 0.01D) { + var12 = 1.0D / Math.sqrt(var12); + var4 *= var12; + var6 *= var12; + var8 *= var12; + double var14 = var4 * 100.0D; + double var16 = var6 * 100.0D; + double var18 = var8 * 100.0D; + double var20 = Math.atan2(var4, var8); + double var22 = Math.sin(var20); + double var24 = Math.cos(var20); + double var26 = Math.atan2(Math.sqrt(var4 * var4 + var8 * var8), var6); + double var28 = Math.sin(var26); + double var30 = Math.cos(var26); + double var32 = var1.nextDouble() * Math.PI * 2.0D; + double var34 = Math.sin(var32); + double var36 = Math.cos(var32); + + for(int var38 = 0; var38 < 4; ++var38) { + double var39 = 0.0D; + double var41 = (double)((var38 & 2) - 1) * var10; + double var43 = (double)((var38 + 1 & 2) - 1) * var10; + double var47 = var41 * var36 - var43 * var34; + double var49 = var43 * var36 + var41 * var34; + double var53 = var47 * var28 + var39 * var30; + double var55 = var39 * var28 - var47 * var30; + double var57 = var55 * var22 - var49 * var24; + double var61 = var49 * var22 + var55 * var24; + var2.addVertex(var14 + var57, var16 + var53, var18 + var61); + } + } + } + + var2.draw(); + } + + public void setWorldAndLoadRenderers(WorldClient var1) { + if(this.theWorld != null) { + this.theWorld.removeWorldAccess(this); + } + + this.prevSortX = -9999.0D; + this.prevSortY = -9999.0D; + this.prevSortZ = -9999.0D; + RenderManager.instance.set(var1); + this.theWorld = var1; + this.globalRenderBlocks = new RenderBlocks(var1); + if(var1 != null) { + var1.addWorldAccess(this); + this.loadRenderers(); + } + + } + + public void loadRenderers() { + if(this.theWorld != null) { + Block.leaves.setGraphicsLevel(this.mc.gameSettings.fancyGraphics); + this.renderDistance = this.mc.gameSettings.renderDistance; + int var1; + if(this.worldRenderers != null) { + for(var1 = 0; var1 < this.worldRenderers.length; ++var1) { + this.worldRenderers[var1].stopRendering(); + } + } + + var1 = 64 << 3 - this.renderDistance; + if(var1 > 400) { + var1 = 400; + } + + this.renderChunksWide = var1 / 16 + 1; + this.renderChunksTall = 16; + this.renderChunksDeep = var1 / 16 + 1; + this.worldRenderers = new WorldRenderer[this.renderChunksWide * this.renderChunksTall * this.renderChunksDeep]; + this.sortedWorldRenderers = new WorldRenderer[this.renderChunksWide * this.renderChunksTall * this.renderChunksDeep]; + int var2 = 0; + int var3 = 0; + this.minBlockX = 0; + this.minBlockY = 0; + this.minBlockZ = 0; + this.maxBlockX = this.renderChunksWide; + this.maxBlockY = this.renderChunksTall; + this.maxBlockZ = this.renderChunksDeep; + + int var4; + for(var4 = 0; var4 < this.worldRenderersToUpdate.size(); ++var4) { + ((WorldRenderer)this.worldRenderersToUpdate.get(var4)).needsUpdate = false; + } + + this.worldRenderersToUpdate.clear(); + this.tileEntities.clear(); + + for(var4 = 0; var4 < this.renderChunksWide; ++var4) { + for(int var5 = 0; var5 < this.renderChunksTall; ++var5) { + for(int var6 = 0; var6 < this.renderChunksDeep; ++var6) { + this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4] = new WorldRenderer(this.theWorld, this.tileEntities, var4 * 16, var5 * 16, var6 * 16, this.glRenderListBase + var2); + if(this.occlusionEnabled) { + this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4].glOcclusionQuery = this.glOcclusionQueryBase.get(var3); + } + + this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4].isWaitingOnOcclusionQuery = false; + this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4].isVisible = true; + this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4].isInFrustum = true; + this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4].chunkIndex = var3++; + this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4].markDirty(); + this.sortedWorldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4] = this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4]; + this.worldRenderersToUpdate.add(this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4]); + var2 += 3; + } + } + } + + if(this.theWorld != null) { + EntityLiving var7 = this.mc.renderViewEntity; + if(var7 != null) { + this.markRenderersForNewPosition(MathHelper.floor_double(var7.posX), MathHelper.floor_double(var7.posY), MathHelper.floor_double(var7.posZ)); + Arrays.sort(this.sortedWorldRenderers, new EntitySorter(var7)); + } + } + + this.renderEntitiesStartupCounter = 2; + } + } + + public void renderEntities(Vec3 var1, ICamera var2, float var3) { + if(this.renderEntitiesStartupCounter > 0) { + --this.renderEntitiesStartupCounter; + } else { + this.theWorld.theProfiler.startSection("prepare"); + TileEntityRenderer.instance.cacheActiveRenderInfo(this.theWorld, this.renderEngine, this.mc.fontRenderer, this.mc.renderViewEntity, var3); + RenderManager.instance.cacheActiveRenderInfo(this.theWorld, this.renderEngine, this.mc.fontRenderer, this.mc.renderViewEntity, this.mc.pointedEntityLiving, this.mc.gameSettings, var3); + this.countEntitiesTotal = 0; + this.countEntitiesRendered = 0; + this.countEntitiesHidden = 0; + EntityLiving var4 = this.mc.renderViewEntity; + RenderManager.renderPosX = var4.lastTickPosX + (var4.posX - var4.lastTickPosX) * (double)var3; + RenderManager.renderPosY = var4.lastTickPosY + (var4.posY - var4.lastTickPosY) * (double)var3; + RenderManager.renderPosZ = var4.lastTickPosZ + (var4.posZ - var4.lastTickPosZ) * (double)var3; + TileEntityRenderer.staticPlayerX = var4.lastTickPosX + (var4.posX - var4.lastTickPosX) * (double)var3; + TileEntityRenderer.staticPlayerY = var4.lastTickPosY + (var4.posY - var4.lastTickPosY) * (double)var3; + TileEntityRenderer.staticPlayerZ = var4.lastTickPosZ + (var4.posZ - var4.lastTickPosZ) * (double)var3; + this.mc.entityRenderer.enableLightmap((double)var3); + this.theWorld.theProfiler.endStartSection("global"); + List var5 = this.theWorld.getLoadedEntityList(); + this.countEntitiesTotal = var5.size(); + + int var6; + Entity var7; + for(var6 = 0; var6 < this.theWorld.weatherEffects.size(); ++var6) { + var7 = (Entity)this.theWorld.weatherEffects.get(var6); + ++this.countEntitiesRendered; + if(var7.isInRangeToRenderVec3D(var1)) { + RenderManager.instance.renderEntity(var7, var3); + } + } + + this.theWorld.theProfiler.endStartSection("entities"); + + for(var6 = 0; var6 < var5.size(); ++var6) { + var7 = (Entity)var5.get(var6); + if(var7.isInRangeToRenderVec3D(var1) && (var7.ignoreFrustumCheck || var2.isBoundingBoxInFrustum(var7.boundingBox) || var7.riddenByEntity == this.mc.thePlayer) && (var7 != this.mc.renderViewEntity || this.mc.gameSettings.thirdPersonView != 0 || this.mc.renderViewEntity.isPlayerSleeping()) && this.theWorld.blockExists(MathHelper.floor_double(var7.posX), 0, MathHelper.floor_double(var7.posZ))) { + ++this.countEntitiesRendered; + RenderManager.instance.renderEntity(var7, var3); + } + } + + this.theWorld.theProfiler.endStartSection("tileentities"); + RenderHelper.enableStandardItemLighting(); + + for(var6 = 0; var6 < this.tileEntities.size(); ++var6) { + TileEntityRenderer.instance.renderTileEntity((TileEntity)this.tileEntities.get(var6), var3); + } + + this.mc.entityRenderer.disableLightmap((double)var3); + this.theWorld.theProfiler.endSection(); + } + } + + public String getDebugInfoRenders() { + return "C: " + this.renderersBeingRendered + "/" + this.renderersLoaded + ". F: " + this.renderersBeingClipped + ", O: " + this.renderersBeingOccluded + ", E: " + this.renderersSkippingRenderPass; + } + + public String getDebugInfoEntities() { + return "E: " + this.countEntitiesRendered + "/" + this.countEntitiesTotal + ". B: " + this.countEntitiesHidden + ", I: " + (this.countEntitiesTotal - this.countEntitiesHidden - this.countEntitiesRendered); + } + + private void markRenderersForNewPosition(int var1, int var2, int var3) { + var1 -= 8; + var2 -= 8; + var3 -= 8; + this.minBlockX = Integer.MAX_VALUE; + this.minBlockY = Integer.MAX_VALUE; + this.minBlockZ = Integer.MAX_VALUE; + this.maxBlockX = Integer.MIN_VALUE; + this.maxBlockY = Integer.MIN_VALUE; + this.maxBlockZ = Integer.MIN_VALUE; + int var4 = this.renderChunksWide * 16; + int var5 = var4 / 2; + + for(int var6 = 0; var6 < this.renderChunksWide; ++var6) { + int var7 = var6 * 16; + int var8 = var7 + var5 - var1; + if(var8 < 0) { + var8 -= var4 - 1; + } + + var8 /= var4; + var7 -= var8 * var4; + if(var7 < this.minBlockX) { + this.minBlockX = var7; + } + + if(var7 > this.maxBlockX) { + this.maxBlockX = var7; + } + + for(int var9 = 0; var9 < this.renderChunksDeep; ++var9) { + int var10 = var9 * 16; + int var11 = var10 + var5 - var3; + if(var11 < 0) { + var11 -= var4 - 1; + } + + var11 /= var4; + var10 -= var11 * var4; + if(var10 < this.minBlockZ) { + this.minBlockZ = var10; + } + + if(var10 > this.maxBlockZ) { + this.maxBlockZ = var10; + } + + for(int var12 = 0; var12 < this.renderChunksTall; ++var12) { + int var13 = var12 * 16; + if(var13 < this.minBlockY) { + this.minBlockY = var13; + } + + if(var13 > this.maxBlockY) { + this.maxBlockY = var13; + } + + WorldRenderer var14 = this.worldRenderers[(var9 * this.renderChunksTall + var12) * this.renderChunksWide + var6]; + boolean var15 = var14.needsUpdate; + var14.setPosition(var7, var13, var10); + if(!var15 && var14.needsUpdate) { + this.worldRenderersToUpdate.add(var14); + } + } + } + } + + } + + public int sortAndRender(EntityLiving var1, int var2, double var3) { + this.theWorld.theProfiler.startSection("sortchunks"); + + for(int var5 = 0; var5 < 10; ++var5) { + this.worldRenderersCheckIndex = (this.worldRenderersCheckIndex + 1) % this.worldRenderers.length; + WorldRenderer var6 = this.worldRenderers[this.worldRenderersCheckIndex]; + if(var6.needsUpdate && !this.worldRenderersToUpdate.contains(var6)) { + this.worldRenderersToUpdate.add(var6); + } + } + + if(this.mc.gameSettings.renderDistance != this.renderDistance) { + this.loadRenderers(); + } + + if(var2 == 0) { + this.renderersLoaded = 0; + this.dummyRenderInt = 0; + this.renderersBeingClipped = 0; + this.renderersBeingOccluded = 0; + this.renderersBeingRendered = 0; + this.renderersSkippingRenderPass = 0; + } + + double var33 = var1.lastTickPosX + (var1.posX - var1.lastTickPosX) * var3; + double var7 = var1.lastTickPosY + (var1.posY - var1.lastTickPosY) * var3; + double var9 = var1.lastTickPosZ + (var1.posZ - var1.lastTickPosZ) * var3; + double var11 = var1.posX - this.prevSortX; + double var13 = var1.posY - this.prevSortY; + double var15 = var1.posZ - this.prevSortZ; + if(var11 * var11 + var13 * var13 + var15 * var15 > 16.0D) { + this.prevSortX = var1.posX; + this.prevSortY = var1.posY; + this.prevSortZ = var1.posZ; + this.markRenderersForNewPosition(MathHelper.floor_double(var1.posX), MathHelper.floor_double(var1.posY), MathHelper.floor_double(var1.posZ)); + Arrays.sort(this.sortedWorldRenderers, new EntitySorter(var1)); + } + + RenderHelper.disableStandardItemLighting(); + byte var17 = 0; + int var34; + if(this.occlusionEnabled && this.mc.gameSettings.advancedOpengl && !this.mc.gameSettings.anaglyph && var2 == 0) { + byte var18 = 0; + int var19 = 16; + this.checkOcclusionQueryResult(var18, var19); + + for(int var20 = var18; var20 < var19; ++var20) { + this.sortedWorldRenderers[var20].isVisible = true; + } + + this.theWorld.theProfiler.endStartSection("render"); + var34 = var17 + this.renderSortedRenderers(var18, var19, var2, var3); + + do { + this.theWorld.theProfiler.endStartSection("occ"); + int var35 = var19; + var19 *= 2; + if(var19 > this.sortedWorldRenderers.length) { + var19 = this.sortedWorldRenderers.length; + } + + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_FOG); + GL11.glColorMask(false, false, false, false); + GL11.glDepthMask(false); + this.theWorld.theProfiler.startSection("check"); + this.checkOcclusionQueryResult(var35, var19); + this.theWorld.theProfiler.endSection(); + GL11.glPushMatrix(); + float var36 = 0.0F; + float var21 = 0.0F; + float var22 = 0.0F; + + for(int var23 = var35; var23 < var19; ++var23) { + if(this.sortedWorldRenderers[var23].skipAllRenderPasses()) { + this.sortedWorldRenderers[var23].isInFrustum = false; + } else { + if(!this.sortedWorldRenderers[var23].isInFrustum) { + this.sortedWorldRenderers[var23].isVisible = true; + } + + if(this.sortedWorldRenderers[var23].isInFrustum && !this.sortedWorldRenderers[var23].isWaitingOnOcclusionQuery) { + float var24 = MathHelper.sqrt_float(this.sortedWorldRenderers[var23].distanceToEntitySquared(var1)); + int var25 = (int)(1.0F + var24 / 128.0F); + if(this.cloudTickCounter % var25 == var23 % var25) { + WorldRenderer var26 = this.sortedWorldRenderers[var23]; + float var27 = (float)((double)var26.posXMinus - var33); + float var28 = (float)((double)var26.posYMinus - var7); + float var29 = (float)((double)var26.posZMinus - var9); + float var30 = var27 - var36; + float var31 = var28 - var21; + float var32 = var29 - var22; + if(var30 != 0.0F || var31 != 0.0F || var32 != 0.0F) { + GL11.glTranslatef(var30, var31, var32); + var36 += var30; + var21 += var31; + var22 += var32; + } + + this.theWorld.theProfiler.startSection("bb"); + ARBOcclusionQuery.glBeginQueryARB(GL15.GL_SAMPLES_PASSED, this.sortedWorldRenderers[var23].glOcclusionQuery); + this.sortedWorldRenderers[var23].callOcclusionQueryList(); + ARBOcclusionQuery.glEndQueryARB(GL15.GL_SAMPLES_PASSED); + this.theWorld.theProfiler.endSection(); + this.sortedWorldRenderers[var23].isWaitingOnOcclusionQuery = true; + } + } + } + } + + GL11.glPopMatrix(); + if(this.mc.gameSettings.anaglyph) { + if(EntityRenderer.anaglyphField == 0) { + GL11.glColorMask(false, true, true, true); + } else { + GL11.glColorMask(true, false, false, true); + } + } else { + GL11.glColorMask(true, true, true, true); + } + + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_FOG); + this.theWorld.theProfiler.endStartSection("render"); + var34 += this.renderSortedRenderers(var35, var19, var2, var3); + } while(var19 < this.sortedWorldRenderers.length); + } else { + this.theWorld.theProfiler.endStartSection("render"); + var34 = var17 + this.renderSortedRenderers(0, this.sortedWorldRenderers.length, var2, var3); + } + + this.theWorld.theProfiler.endSection(); + return var34; + } + + private void checkOcclusionQueryResult(int var1, int var2) { + for(int var3 = var1; var3 < var2; ++var3) { + if(this.sortedWorldRenderers[var3].isWaitingOnOcclusionQuery) { + this.occlusionResult.clear(); + ARBOcclusionQuery.glGetQueryObjectuARB(this.sortedWorldRenderers[var3].glOcclusionQuery, GL15.GL_QUERY_RESULT_AVAILABLE, this.occlusionResult); + if(this.occlusionResult.get(0) != 0) { + this.sortedWorldRenderers[var3].isWaitingOnOcclusionQuery = false; + this.occlusionResult.clear(); + ARBOcclusionQuery.glGetQueryObjectuARB(this.sortedWorldRenderers[var3].glOcclusionQuery, GL15.GL_QUERY_RESULT, this.occlusionResult); + this.sortedWorldRenderers[var3].isVisible = this.occlusionResult.get(0) != 0; + } + } + } + + } + + private int renderSortedRenderers(int var1, int var2, int var3, double var4) { + this.glRenderLists.clear(); + int var6 = 0; + + for(int var7 = var1; var7 < var2; ++var7) { + if(var3 == 0) { + ++this.renderersLoaded; + if(this.sortedWorldRenderers[var7].skipRenderPass[var3]) { + ++this.renderersSkippingRenderPass; + } else if(!this.sortedWorldRenderers[var7].isInFrustum) { + ++this.renderersBeingClipped; + } else if(this.occlusionEnabled && !this.sortedWorldRenderers[var7].isVisible) { + ++this.renderersBeingOccluded; + } else { + ++this.renderersBeingRendered; + } + } + + if(!this.sortedWorldRenderers[var7].skipRenderPass[var3] && this.sortedWorldRenderers[var7].isInFrustum && (!this.occlusionEnabled || this.sortedWorldRenderers[var7].isVisible)) { + int var8 = this.sortedWorldRenderers[var7].getGLCallListForPass(var3); + if(var8 >= 0) { + this.glRenderLists.add(this.sortedWorldRenderers[var7]); + ++var6; + } + } + } + + EntityLiving var19 = this.mc.renderViewEntity; + double var20 = var19.lastTickPosX + (var19.posX - var19.lastTickPosX) * var4; + double var10 = var19.lastTickPosY + (var19.posY - var19.lastTickPosY) * var4; + double var12 = var19.lastTickPosZ + (var19.posZ - var19.lastTickPosZ) * var4; + int var14 = 0; + + int var15; + for(var15 = 0; var15 < this.allRenderLists.length; ++var15) { + this.allRenderLists[var15].func_78421_b(); + } + + for(var15 = 0; var15 < this.glRenderLists.size(); ++var15) { + WorldRenderer var16 = (WorldRenderer)this.glRenderLists.get(var15); + int var17 = -1; + + for(int var18 = 0; var18 < var14; ++var18) { + if(this.allRenderLists[var18].func_78418_a(var16.posXMinus, var16.posYMinus, var16.posZMinus)) { + var17 = var18; + } + } + + if(var17 < 0) { + var17 = var14++; + this.allRenderLists[var17].func_78422_a(var16.posXMinus, var16.posYMinus, var16.posZMinus, var20, var10, var12); + } + + this.allRenderLists[var17].func_78420_a(var16.getGLCallListForPass(var3)); + } + + this.renderAllRenderLists(var3, var4); + return var6; + } + + public void renderAllRenderLists(int var1, double var2) { + this.mc.entityRenderer.enableLightmap(var2); + + for(int var4 = 0; var4 < this.allRenderLists.length; ++var4) { + this.allRenderLists[var4].func_78419_a(); + } + + this.mc.entityRenderer.disableLightmap(var2); + } + + public void updateClouds() { + ++this.cloudTickCounter; + if(this.cloudTickCounter % 20 == 0) { + Iterator var1 = this.damagedBlocks.values().iterator(); + + while(var1.hasNext()) { + DestroyBlockProgress var2 = (DestroyBlockProgress)var1.next(); + int var3 = var2.getCreationCloudUpdateTick(); + if(this.cloudTickCounter - var3 > 400) { + var1.remove(); + } + } + } + + } + + public void renderSky(float var1) { + if(this.mc.theWorld.provider.dimensionId == 1) { + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + RenderHelper.disableStandardItemLighting(); + GL11.glDepthMask(false); + this.renderEngine.bindTexture("/misc/tunnel.png"); + Tessellator var21 = Tessellator.instance; + + for(int var22 = 0; var22 < 6; ++var22) { + GL11.glPushMatrix(); + if(var22 == 1) { + GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F); + } + + if(var22 == 2) { + GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F); + } + + if(var22 == 3) { + GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); + } + + if(var22 == 4) { + GL11.glRotatef(90.0F, 0.0F, 0.0F, 1.0F); + } + + if(var22 == 5) { + GL11.glRotatef(-90.0F, 0.0F, 0.0F, 1.0F); + } + + var21.startDrawingQuads(); + var21.setColorOpaque_I(2631720); + var21.addVertexWithUV(-100.0D, -100.0D, -100.0D, 0.0D, 0.0D); + var21.addVertexWithUV(-100.0D, -100.0D, 100.0D, 0.0D, 16.0D); + var21.addVertexWithUV(100.0D, -100.0D, 100.0D, 16.0D, 16.0D); + var21.addVertexWithUV(100.0D, -100.0D, -100.0D, 16.0D, 0.0D); + var21.draw(); + GL11.glPopMatrix(); + } + + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_ALPHA_TEST); + } else if(this.mc.theWorld.provider.isSurfaceWorld()) { + GL11.glDisable(GL11.GL_TEXTURE_2D); + Vec3 var2 = this.theWorld.getSkyColor(this.mc.renderViewEntity, var1); + float var3 = (float)var2.xCoord; + float var4 = (float)var2.yCoord; + float var5 = (float)var2.zCoord; + float var8; + if(this.mc.gameSettings.anaglyph) { + float var6 = (var3 * 30.0F + var4 * 59.0F + var5 * 11.0F) / 100.0F; + float var7 = (var3 * 30.0F + var4 * 70.0F) / 100.0F; + var8 = (var3 * 30.0F + var5 * 70.0F) / 100.0F; + var3 = var6; + var4 = var7; + var5 = var8; + } + + GL11.glColor3f(var3, var4, var5); + Tessellator var23 = Tessellator.instance; + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_FOG); + GL11.glColor3f(var3, var4, var5); + GL11.glCallList(this.glSkyList); + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + RenderHelper.disableStandardItemLighting(); + float[] var24 = this.theWorld.provider.calcSunriseSunsetColors(this.theWorld.getCelestialAngle(var1), var1); + float var9; + float var10; + float var11; + float var12; + if(var24 != null) { + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glPushMatrix(); + GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(MathHelper.sin(this.theWorld.getCelestialAngleRadians(var1)) < 0.0F ? 180.0F : 0.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(90.0F, 0.0F, 0.0F, 1.0F); + var8 = var24[0]; + var9 = var24[1]; + var10 = var24[2]; + float var13; + if(this.mc.gameSettings.anaglyph) { + var11 = (var8 * 30.0F + var9 * 59.0F + var10 * 11.0F) / 100.0F; + var12 = (var8 * 30.0F + var9 * 70.0F) / 100.0F; + var13 = (var8 * 30.0F + var10 * 70.0F) / 100.0F; + var8 = var11; + var9 = var12; + var10 = var13; + } + + var23.startDrawing(6); + var23.setColorRGBA_F(var8, var9, var10, var24[3]); + var23.addVertex(0.0D, 100.0D, 0.0D); + byte var26 = 16; + var23.setColorRGBA_F(var24[0], var24[1], var24[2], 0.0F); + + for(int var27 = 0; var27 <= var26; ++var27) { + var13 = (float)var27 * (float)Math.PI * 2.0F / (float)var26; + float var14 = MathHelper.sin(var13); + float var15 = MathHelper.cos(var13); + var23.addVertex((double)(var14 * 120.0F), (double)(var15 * 120.0F), (double)(-var15 * 40.0F * var24[3])); + } + + var23.draw(); + GL11.glPopMatrix(); + GL11.glShadeModel(GL11.GL_FLAT); + } + + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glPushMatrix(); + var8 = 1.0F - this.theWorld.getRainStrength(var1); + var9 = 0.0F; + var10 = 0.0F; + var11 = 0.0F; + GL11.glColor4f(1.0F, 1.0F, 1.0F, var8); + GL11.glTranslatef(var9, var10, var11); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(this.theWorld.getCelestialAngle(var1) * 360.0F, 1.0F, 0.0F, 0.0F); + var12 = 30.0F; + this.renderEngine.bindTexture("/environment/sun.png"); + var23.startDrawingQuads(); + var23.addVertexWithUV((double)(-var12), 100.0D, (double)(-var12), 0.0D, 0.0D); + var23.addVertexWithUV((double)var12, 100.0D, (double)(-var12), 1.0D, 0.0D); + var23.addVertexWithUV((double)var12, 100.0D, (double)var12, 1.0D, 1.0D); + var23.addVertexWithUV((double)(-var12), 100.0D, (double)var12, 0.0D, 1.0D); + var23.draw(); + var12 = 20.0F; + this.renderEngine.bindTexture("/environment/moon_phases.png"); + int var28 = this.theWorld.getMoonPhase(); + int var29 = var28 % 4; + int var30 = var28 / 4 % 2; + float var16 = (float)(var29 + 0) / 4.0F; + float var17 = (float)(var30 + 0) / 2.0F; + float var18 = (float)(var29 + 1) / 4.0F; + float var19 = (float)(var30 + 1) / 2.0F; + var23.startDrawingQuads(); + var23.addVertexWithUV((double)(-var12), -100.0D, (double)var12, (double)var18, (double)var19); + var23.addVertexWithUV((double)var12, -100.0D, (double)var12, (double)var16, (double)var19); + var23.addVertexWithUV((double)var12, -100.0D, (double)(-var12), (double)var16, (double)var17); + var23.addVertexWithUV((double)(-var12), -100.0D, (double)(-var12), (double)var18, (double)var17); + var23.draw(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + float var20 = this.theWorld.getStarBrightness(var1) * var8; + if(var20 > 0.0F) { + GL11.glColor4f(var20, var20, var20, var20); + GL11.glCallList(this.starGLCallList); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_FOG); + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glColor3f(0.0F, 0.0F, 0.0F); + double var25 = this.mc.thePlayer.getPosition(var1).yCoord - this.theWorld.getHorizon(); + if(var25 < 0.0D) { + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 12.0F, 0.0F); + GL11.glCallList(this.glSkyList2); + GL11.glPopMatrix(); + var10 = 1.0F; + var11 = -((float)(var25 + 65.0D)); + var12 = -var10; + var23.startDrawingQuads(); + var23.setColorRGBA_I(0, 255); + var23.addVertex((double)(-var10), (double)var11, (double)var10); + var23.addVertex((double)var10, (double)var11, (double)var10); + var23.addVertex((double)var10, (double)var12, (double)var10); + var23.addVertex((double)(-var10), (double)var12, (double)var10); + var23.addVertex((double)(-var10), (double)var12, (double)(-var10)); + var23.addVertex((double)var10, (double)var12, (double)(-var10)); + var23.addVertex((double)var10, (double)var11, (double)(-var10)); + var23.addVertex((double)(-var10), (double)var11, (double)(-var10)); + var23.addVertex((double)var10, (double)var12, (double)(-var10)); + var23.addVertex((double)var10, (double)var12, (double)var10); + var23.addVertex((double)var10, (double)var11, (double)var10); + var23.addVertex((double)var10, (double)var11, (double)(-var10)); + var23.addVertex((double)(-var10), (double)var11, (double)(-var10)); + var23.addVertex((double)(-var10), (double)var11, (double)var10); + var23.addVertex((double)(-var10), (double)var12, (double)var10); + var23.addVertex((double)(-var10), (double)var12, (double)(-var10)); + var23.addVertex((double)(-var10), (double)var12, (double)(-var10)); + var23.addVertex((double)(-var10), (double)var12, (double)var10); + var23.addVertex((double)var10, (double)var12, (double)var10); + var23.addVertex((double)var10, (double)var12, (double)(-var10)); + var23.draw(); + } + + if(this.theWorld.provider.isSkyColored()) { + GL11.glColor3f(var3 * 0.2F + 0.04F, var4 * 0.2F + 0.04F, var5 * 0.6F + 0.1F); + } else { + GL11.glColor3f(var3, var4, var5); + } + + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, -((float)(var25 - 16.0D)), 0.0F); + GL11.glCallList(this.glSkyList2); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDepthMask(true); + } + } + + public void renderClouds(float var1) { + if(this.mc.theWorld.provider.isSurfaceWorld()) { + if(this.mc.gameSettings.fancyGraphics) { + this.renderCloudsFancy(var1); + } else { + GL11.glDisable(GL11.GL_CULL_FACE); + float var2 = (float)(this.mc.renderViewEntity.lastTickPosY + (this.mc.renderViewEntity.posY - this.mc.renderViewEntity.lastTickPosY) * (double)var1); + byte var3 = 32; + int var4 = 256 / var3; + Tessellator var5 = Tessellator.instance; + this.renderEngine.bindTexture("/environment/clouds.png"); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + Vec3 var6 = this.theWorld.getCloudColour(var1); + float var7 = (float)var6.xCoord; + float var8 = (float)var6.yCoord; + float var9 = (float)var6.zCoord; + float var10; + if(this.mc.gameSettings.anaglyph) { + var10 = (var7 * 30.0F + var8 * 59.0F + var9 * 11.0F) / 100.0F; + float var11 = (var7 * 30.0F + var8 * 70.0F) / 100.0F; + float var12 = (var7 * 30.0F + var9 * 70.0F) / 100.0F; + var7 = var10; + var8 = var11; + var9 = var12; + } + + var10 = 0.5F / 1024.0F; + double var24 = (double)((float)this.cloudTickCounter + var1); + double var13 = this.mc.renderViewEntity.prevPosX + (this.mc.renderViewEntity.posX - this.mc.renderViewEntity.prevPosX) * (double)var1 + var24 * (double)0.03F; + double var15 = this.mc.renderViewEntity.prevPosZ + (this.mc.renderViewEntity.posZ - this.mc.renderViewEntity.prevPosZ) * (double)var1; + int var17 = MathHelper.floor_double(var13 / 2048.0D); + int var18 = MathHelper.floor_double(var15 / 2048.0D); + var13 -= (double)(var17 * 2048); + var15 -= (double)(var18 * 2048); + float var19 = this.theWorld.provider.getCloudHeight() - var2 + 0.33F; + float var20 = (float)(var13 * (double)var10); + float var21 = (float)(var15 * (double)var10); + var5.startDrawingQuads(); + var5.setColorRGBA_F(var7, var8, var9, 0.8F); + + for(int var22 = -var3 * var4; var22 < var3 * var4; var22 += var3) { + for(int var23 = -var3 * var4; var23 < var3 * var4; var23 += var3) { + var5.addVertexWithUV((double)(var22 + 0), (double)var19, (double)(var23 + var3), (double)((float)(var22 + 0) * var10 + var20), (double)((float)(var23 + var3) * var10 + var21)); + var5.addVertexWithUV((double)(var22 + var3), (double)var19, (double)(var23 + var3), (double)((float)(var22 + var3) * var10 + var20), (double)((float)(var23 + var3) * var10 + var21)); + var5.addVertexWithUV((double)(var22 + var3), (double)var19, (double)(var23 + 0), (double)((float)(var22 + var3) * var10 + var20), (double)((float)(var23 + 0) * var10 + var21)); + var5.addVertexWithUV((double)(var22 + 0), (double)var19, (double)(var23 + 0), (double)((float)(var22 + 0) * var10 + var20), (double)((float)(var23 + 0) * var10 + var21)); + } + } + + var5.draw(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_CULL_FACE); + } + } + } + + public boolean hasCloudFog(double var1, double var3, double var5, float var7) { + return false; + } + + public void renderCloudsFancy(float var1) { + GL11.glDisable(GL11.GL_CULL_FACE); + float var2 = (float)(this.mc.renderViewEntity.lastTickPosY + (this.mc.renderViewEntity.posY - this.mc.renderViewEntity.lastTickPosY) * (double)var1); + Tessellator var3 = Tessellator.instance; + float var4 = 12.0F; + float var5 = 4.0F; + double var6 = (double)((float)this.cloudTickCounter + var1); + double var8 = (this.mc.renderViewEntity.prevPosX + (this.mc.renderViewEntity.posX - this.mc.renderViewEntity.prevPosX) * (double)var1 + var6 * (double)0.03F) / (double)var4; + double var10 = (this.mc.renderViewEntity.prevPosZ + (this.mc.renderViewEntity.posZ - this.mc.renderViewEntity.prevPosZ) * (double)var1) / (double)var4 + (double)0.33F; + float var12 = this.theWorld.provider.getCloudHeight() - var2 + 0.33F; + int var13 = MathHelper.floor_double(var8 / 2048.0D); + int var14 = MathHelper.floor_double(var10 / 2048.0D); + var8 -= (double)(var13 * 2048); + var10 -= (double)(var14 * 2048); + this.renderEngine.bindTexture("/environment/clouds.png"); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + Vec3 var15 = this.theWorld.getCloudColour(var1); + float var16 = (float)var15.xCoord; + float var17 = (float)var15.yCoord; + float var18 = (float)var15.zCoord; + float var19; + float var20; + float var21; + if(this.mc.gameSettings.anaglyph) { + var19 = (var16 * 30.0F + var17 * 59.0F + var18 * 11.0F) / 100.0F; + var20 = (var16 * 30.0F + var17 * 70.0F) / 100.0F; + var21 = (var16 * 30.0F + var18 * 70.0F) / 100.0F; + var16 = var19; + var17 = var20; + var18 = var21; + } + + var19 = (float)(var8 * 0.0D); + var20 = (float)(var10 * 0.0D); + var21 = 0.00390625F; + var19 = (float)MathHelper.floor_double(var8) * var21; + var20 = (float)MathHelper.floor_double(var10) * var21; + float var22 = (float)(var8 - (double)MathHelper.floor_double(var8)); + float var23 = (float)(var10 - (double)MathHelper.floor_double(var10)); + byte var24 = 8; + byte var25 = 4; + float var26 = 1.0F / 1024.0F; + GL11.glScalef(var4, 1.0F, var4); + + for(int var27 = 0; var27 < 2; ++var27) { + if(var27 == 0) { + GL11.glColorMask(false, false, false, false); + } else if(this.mc.gameSettings.anaglyph) { + if(EntityRenderer.anaglyphField == 0) { + GL11.glColorMask(false, true, true, true); + } else { + GL11.glColorMask(true, false, false, true); + } + } else { + GL11.glColorMask(true, true, true, true); + } + + for(int var28 = -var25 + 1; var28 <= var25; ++var28) { + for(int var29 = -var25 + 1; var29 <= var25; ++var29) { + var3.startDrawingQuads(); + float var30 = (float)(var28 * var24); + float var31 = (float)(var29 * var24); + float var32 = var30 - var22; + float var33 = var31 - var23; + if(var12 > -var5 - 1.0F) { + var3.setColorRGBA_F(var16 * 0.7F, var17 * 0.7F, var18 * 0.7F, 0.8F); + var3.setNormal(0.0F, -1.0F, 0.0F); + var3.addVertexWithUV((double)(var32 + 0.0F), (double)(var12 + 0.0F), (double)(var33 + (float)var24), (double)((var30 + 0.0F) * var21 + var19), (double)((var31 + (float)var24) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + (float)var24), (double)(var12 + 0.0F), (double)(var33 + (float)var24), (double)((var30 + (float)var24) * var21 + var19), (double)((var31 + (float)var24) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + (float)var24), (double)(var12 + 0.0F), (double)(var33 + 0.0F), (double)((var30 + (float)var24) * var21 + var19), (double)((var31 + 0.0F) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + 0.0F), (double)(var12 + 0.0F), (double)(var33 + 0.0F), (double)((var30 + 0.0F) * var21 + var19), (double)((var31 + 0.0F) * var21 + var20)); + } + + if(var12 <= var5 + 1.0F) { + var3.setColorRGBA_F(var16, var17, var18, 0.8F); + var3.setNormal(0.0F, 1.0F, 0.0F); + var3.addVertexWithUV((double)(var32 + 0.0F), (double)(var12 + var5 - var26), (double)(var33 + (float)var24), (double)((var30 + 0.0F) * var21 + var19), (double)((var31 + (float)var24) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + (float)var24), (double)(var12 + var5 - var26), (double)(var33 + (float)var24), (double)((var30 + (float)var24) * var21 + var19), (double)((var31 + (float)var24) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + (float)var24), (double)(var12 + var5 - var26), (double)(var33 + 0.0F), (double)((var30 + (float)var24) * var21 + var19), (double)((var31 + 0.0F) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + 0.0F), (double)(var12 + var5 - var26), (double)(var33 + 0.0F), (double)((var30 + 0.0F) * var21 + var19), (double)((var31 + 0.0F) * var21 + var20)); + } + + var3.setColorRGBA_F(var16 * 0.9F, var17 * 0.9F, var18 * 0.9F, 0.8F); + int var34; + if(var28 > -1) { + var3.setNormal(-1.0F, 0.0F, 0.0F); + + for(var34 = 0; var34 < var24; ++var34) { + var3.addVertexWithUV((double)(var32 + (float)var34 + 0.0F), (double)(var12 + 0.0F), (double)(var33 + (float)var24), (double)((var30 + (float)var34 + 0.5F) * var21 + var19), (double)((var31 + (float)var24) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + (float)var34 + 0.0F), (double)(var12 + var5), (double)(var33 + (float)var24), (double)((var30 + (float)var34 + 0.5F) * var21 + var19), (double)((var31 + (float)var24) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + (float)var34 + 0.0F), (double)(var12 + var5), (double)(var33 + 0.0F), (double)((var30 + (float)var34 + 0.5F) * var21 + var19), (double)((var31 + 0.0F) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + (float)var34 + 0.0F), (double)(var12 + 0.0F), (double)(var33 + 0.0F), (double)((var30 + (float)var34 + 0.5F) * var21 + var19), (double)((var31 + 0.0F) * var21 + var20)); + } + } + + if(var28 <= 1) { + var3.setNormal(1.0F, 0.0F, 0.0F); + + for(var34 = 0; var34 < var24; ++var34) { + var3.addVertexWithUV((double)(var32 + (float)var34 + 1.0F - var26), (double)(var12 + 0.0F), (double)(var33 + (float)var24), (double)((var30 + (float)var34 + 0.5F) * var21 + var19), (double)((var31 + (float)var24) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + (float)var34 + 1.0F - var26), (double)(var12 + var5), (double)(var33 + (float)var24), (double)((var30 + (float)var34 + 0.5F) * var21 + var19), (double)((var31 + (float)var24) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + (float)var34 + 1.0F - var26), (double)(var12 + var5), (double)(var33 + 0.0F), (double)((var30 + (float)var34 + 0.5F) * var21 + var19), (double)((var31 + 0.0F) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + (float)var34 + 1.0F - var26), (double)(var12 + 0.0F), (double)(var33 + 0.0F), (double)((var30 + (float)var34 + 0.5F) * var21 + var19), (double)((var31 + 0.0F) * var21 + var20)); + } + } + + var3.setColorRGBA_F(var16 * 0.8F, var17 * 0.8F, var18 * 0.8F, 0.8F); + if(var29 > -1) { + var3.setNormal(0.0F, 0.0F, -1.0F); + + for(var34 = 0; var34 < var24; ++var34) { + var3.addVertexWithUV((double)(var32 + 0.0F), (double)(var12 + var5), (double)(var33 + (float)var34 + 0.0F), (double)((var30 + 0.0F) * var21 + var19), (double)((var31 + (float)var34 + 0.5F) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + (float)var24), (double)(var12 + var5), (double)(var33 + (float)var34 + 0.0F), (double)((var30 + (float)var24) * var21 + var19), (double)((var31 + (float)var34 + 0.5F) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + (float)var24), (double)(var12 + 0.0F), (double)(var33 + (float)var34 + 0.0F), (double)((var30 + (float)var24) * var21 + var19), (double)((var31 + (float)var34 + 0.5F) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + 0.0F), (double)(var12 + 0.0F), (double)(var33 + (float)var34 + 0.0F), (double)((var30 + 0.0F) * var21 + var19), (double)((var31 + (float)var34 + 0.5F) * var21 + var20)); + } + } + + if(var29 <= 1) { + var3.setNormal(0.0F, 0.0F, 1.0F); + + for(var34 = 0; var34 < var24; ++var34) { + var3.addVertexWithUV((double)(var32 + 0.0F), (double)(var12 + var5), (double)(var33 + (float)var34 + 1.0F - var26), (double)((var30 + 0.0F) * var21 + var19), (double)((var31 + (float)var34 + 0.5F) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + (float)var24), (double)(var12 + var5), (double)(var33 + (float)var34 + 1.0F - var26), (double)((var30 + (float)var24) * var21 + var19), (double)((var31 + (float)var34 + 0.5F) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + (float)var24), (double)(var12 + 0.0F), (double)(var33 + (float)var34 + 1.0F - var26), (double)((var30 + (float)var24) * var21 + var19), (double)((var31 + (float)var34 + 0.5F) * var21 + var20)); + var3.addVertexWithUV((double)(var32 + 0.0F), (double)(var12 + 0.0F), (double)(var33 + (float)var34 + 1.0F - var26), (double)((var30 + 0.0F) * var21 + var19), (double)((var31 + (float)var34 + 0.5F) * var21 + var20)); + } + } + + var3.draw(); + } + } + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_CULL_FACE); + } + + public boolean updateRenderers(EntityLiving var1, boolean var2) { + byte var3 = 2; + RenderSorter var4 = new RenderSorter(var1); + WorldRenderer[] var5 = new WorldRenderer[var3]; + ArrayList var6 = null; + int var7 = this.worldRenderersToUpdate.size(); + int var8 = 0; + this.theWorld.theProfiler.startSection("nearChunksSearch"); + + int var9; + WorldRenderer var10; + int var11; + int var12; + label140: + for(var9 = 0; var9 < var7; ++var9) { + var10 = (WorldRenderer)this.worldRenderersToUpdate.get(var9); + if(var10 != null) { + if(!var2) { + if(var10.distanceToEntitySquared(var1) > 256.0F) { + for(var11 = 0; var11 < var3 && (var5[var11] == null || var4.doCompare(var5[var11], var10) <= 0); ++var11) { + } + + --var11; + if(var11 <= 0) { + continue; + } + + var12 = var11; + + while(true) { + --var12; + if(var12 == 0) { + var5[var11] = var10; + continue label140; + } + + var5[var12 - 1] = var5[var12]; + } + } + } else if(!var10.isInFrustum) { + continue; + } + + if(var6 == null) { + var6 = new ArrayList(); + } + + ++var8; + var6.add(var10); + this.worldRenderersToUpdate.set(var9, (Object)null); + } + } + + this.theWorld.theProfiler.endSection(); + this.theWorld.theProfiler.startSection("sort"); + if(var6 != null) { + if(var6.size() > 1) { + Collections.sort(var6, var4); + } + + for(var9 = var6.size() - 1; var9 >= 0; --var9) { + var10 = (WorldRenderer)var6.get(var9); + var10.updateRenderer(); + var10.needsUpdate = false; + } + } + + this.theWorld.theProfiler.endSection(); + var9 = 0; + this.theWorld.theProfiler.startSection("rebuild"); + + int var16; + for(var16 = var3 - 1; var16 >= 0; --var16) { + WorldRenderer var17 = var5[var16]; + if(var17 != null) { + if(!var17.isInFrustum && var16 != var3 - 1) { + var5[var16] = null; + var5[0] = null; + break; + } + + var5[var16].updateRenderer(); + var5[var16].needsUpdate = false; + ++var9; + } + } + + this.theWorld.theProfiler.endSection(); + this.theWorld.theProfiler.startSection("cleanup"); + var16 = 0; + var11 = 0; + + for(var12 = this.worldRenderersToUpdate.size(); var16 != var12; ++var16) { + WorldRenderer var13 = (WorldRenderer)this.worldRenderersToUpdate.get(var16); + if(var13 != null) { + boolean var14 = false; + + for(int var15 = 0; var15 < var3 && !var14; ++var15) { + if(var13 == var5[var15]) { + var14 = true; + } + } + + if(!var14) { + if(var11 != var16) { + this.worldRenderersToUpdate.set(var11, var13); + } + + ++var11; + } + } + } + + this.theWorld.theProfiler.endSection(); + this.theWorld.theProfiler.startSection("trim"); + + while(true) { + --var16; + if(var16 < var11) { + this.theWorld.theProfiler.endSection(); + return var7 == var8 + var9; + } + + this.worldRenderersToUpdate.remove(var16); + } + } + + public void drawBlockBreaking(EntityPlayer var1, MovingObjectPosition var2, int var3, ItemStack var4, float var5) { + Tessellator var6 = Tessellator.instance; + GL11.glEnable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + GL11.glColor4f(1.0F, 1.0F, 1.0F, (MathHelper.sin((float)Minecraft.getSystemTime() / 100.0F) * 0.2F + 0.4F) * 0.5F); + if(var3 != 0 && var4 != null) { + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + float var7 = MathHelper.sin((float)Minecraft.getSystemTime() / 100.0F) * 0.2F + 0.8F; + GL11.glColor4f(var7, var7, var7, MathHelper.sin((float)Minecraft.getSystemTime() / 200.0F) * 0.2F + 0.5F); + this.renderEngine.bindTexture("/terrain.png"); + } + + GL11.glDisable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + } + + public void drawBlockDamageTexture(Tessellator var1, EntityPlayer var2, float var3) { + double var4 = var2.lastTickPosX + (var2.posX - var2.lastTickPosX) * (double)var3; + double var6 = var2.lastTickPosY + (var2.posY - var2.lastTickPosY) * (double)var3; + double var8 = var2.lastTickPosZ + (var2.posZ - var2.lastTickPosZ) * (double)var3; + if(!this.damagedBlocks.isEmpty()) { + GL11.glBlendFunc(GL11.GL_DST_COLOR, GL11.GL_SRC_COLOR); + this.renderEngine.bindTexture("/terrain.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.5F); + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glPolygonOffset(-3.0F, -3.0F); + GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL); + GL11.glEnable(GL11.GL_ALPHA_TEST); + var1.startDrawingQuads(); + var1.setTranslation(-var4, -var6, -var8); + var1.disableColor(); + Iterator var10 = this.damagedBlocks.values().iterator(); + + while(var10.hasNext()) { + DestroyBlockProgress var11 = (DestroyBlockProgress)var10.next(); + double var12 = (double)var11.getPartialBlockX() - var4; + double var14 = (double)var11.getPartialBlockY() - var6; + double var16 = (double)var11.getPartialBlockZ() - var8; + if(var12 * var12 + var14 * var14 + var16 * var16 > 1024.0D) { + var10.remove(); + } else { + int var18 = this.theWorld.getBlockId(var11.getPartialBlockX(), var11.getPartialBlockY(), var11.getPartialBlockZ()); + Block var19 = var18 > 0 ? Block.blocksList[var18] : null; + if(var19 == null) { + var19 = Block.stone; + } + + this.globalRenderBlocks.renderBlockUsingTexture(var19, var11.getPartialBlockX(), var11.getPartialBlockY(), var11.getPartialBlockZ(), this.destroyBlockIcons[var11.getPartialBlockDamage()]); + } + } + + var1.draw(); + var1.setTranslation(0.0D, 0.0D, 0.0D); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glPolygonOffset(0.0F, 0.0F); + GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDepthMask(true); + GL11.glPopMatrix(); + } + + } + + public void drawSelectionBox(EntityPlayer var1, MovingObjectPosition var2, int var3, ItemStack var4, float var5) { + if(var3 == 0 && var2.typeOfHit == EnumMovingObjectType.TILE) { + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(0.0F, 0.0F, 0.0F, 0.4F); + GL11.glLineWidth(2.0F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDepthMask(false); + float var6 = 0.002F; + int var7 = this.theWorld.getBlockId(var2.blockX, var2.blockY, var2.blockZ); + if(var7 > 0) { + Block.blocksList[var7].setBlockBoundsBasedOnState(this.theWorld, var2.blockX, var2.blockY, var2.blockZ); + double var8 = var1.lastTickPosX + (var1.posX - var1.lastTickPosX) * (double)var5; + double var10 = var1.lastTickPosY + (var1.posY - var1.lastTickPosY) * (double)var5; + double var12 = var1.lastTickPosZ + (var1.posZ - var1.lastTickPosZ) * (double)var5; + this.drawOutlinedBoundingBox(Block.blocksList[var7].getSelectedBoundingBoxFromPool(this.theWorld, var2.blockX, var2.blockY, var2.blockZ).expand((double)var6, (double)var6, (double)var6).getOffsetBoundingBox(-var8, -var10, -var12)); + } + + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_BLEND); + } + + } + + private void drawOutlinedBoundingBox(AxisAlignedBB var1) { + Tessellator var2 = Tessellator.instance; + var2.startDrawing(3); + var2.addVertex(var1.minX, var1.minY, var1.minZ); + var2.addVertex(var1.maxX, var1.minY, var1.minZ); + var2.addVertex(var1.maxX, var1.minY, var1.maxZ); + var2.addVertex(var1.minX, var1.minY, var1.maxZ); + var2.addVertex(var1.minX, var1.minY, var1.minZ); + var2.draw(); + var2.startDrawing(3); + var2.addVertex(var1.minX, var1.maxY, var1.minZ); + var2.addVertex(var1.maxX, var1.maxY, var1.minZ); + var2.addVertex(var1.maxX, var1.maxY, var1.maxZ); + var2.addVertex(var1.minX, var1.maxY, var1.maxZ); + var2.addVertex(var1.minX, var1.maxY, var1.minZ); + var2.draw(); + var2.startDrawing(1); + var2.addVertex(var1.minX, var1.minY, var1.minZ); + var2.addVertex(var1.minX, var1.maxY, var1.minZ); + var2.addVertex(var1.maxX, var1.minY, var1.minZ); + var2.addVertex(var1.maxX, var1.maxY, var1.minZ); + var2.addVertex(var1.maxX, var1.minY, var1.maxZ); + var2.addVertex(var1.maxX, var1.maxY, var1.maxZ); + var2.addVertex(var1.minX, var1.minY, var1.maxZ); + var2.addVertex(var1.minX, var1.maxY, var1.maxZ); + var2.draw(); + } + + public void markBlocksForUpdate(int var1, int var2, int var3, int var4, int var5, int var6) { + int var7 = MathHelper.bucketInt(var1, 16); + int var8 = MathHelper.bucketInt(var2, 16); + int var9 = MathHelper.bucketInt(var3, 16); + int var10 = MathHelper.bucketInt(var4, 16); + int var11 = MathHelper.bucketInt(var5, 16); + int var12 = MathHelper.bucketInt(var6, 16); + + for(int var13 = var7; var13 <= var10; ++var13) { + int var14 = var13 % this.renderChunksWide; + if(var14 < 0) { + var14 += this.renderChunksWide; + } + + for(int var15 = var8; var15 <= var11; ++var15) { + int var16 = var15 % this.renderChunksTall; + if(var16 < 0) { + var16 += this.renderChunksTall; + } + + for(int var17 = var9; var17 <= var12; ++var17) { + int var18 = var17 % this.renderChunksDeep; + if(var18 < 0) { + var18 += this.renderChunksDeep; + } + + int var19 = (var18 * this.renderChunksTall + var16) * this.renderChunksWide + var14; + WorldRenderer var20 = this.worldRenderers[var19]; + if(var20 != null && !var20.needsUpdate) { + this.worldRenderersToUpdate.add(var20); + var20.markDirty(); + } + } + } + } + + } + + public void markBlockForUpdate(int var1, int var2, int var3) { + this.markBlocksForUpdate(var1 - 1, var2 - 1, var3 - 1, var1 + 1, var2 + 1, var3 + 1); + } + + public void markBlockForRenderUpdate(int var1, int var2, int var3) { + this.markBlocksForUpdate(var1 - 1, var2 - 1, var3 - 1, var1 + 1, var2 + 1, var3 + 1); + } + + public void markBlockRangeForRenderUpdate(int var1, int var2, int var3, int var4, int var5, int var6) { + this.markBlocksForUpdate(var1 - 1, var2 - 1, var3 - 1, var4 + 1, var5 + 1, var6 + 1); + } + + public void clipRenderersByFrustum(ICamera var1, float var2) { + for(int var3 = 0; var3 < this.worldRenderers.length; ++var3) { + if(!this.worldRenderers[var3].skipAllRenderPasses() && (!this.worldRenderers[var3].isInFrustum || (var3 + this.frustumCheckOffset & 15) == 0)) { + this.worldRenderers[var3].updateInFrustum(var1); + } + } + + ++this.frustumCheckOffset; + } + + public void playRecord(String var1, int var2, int var3, int var4) { + ItemRecord var5 = ItemRecord.getRecord(var1); + if(var1 != null && var5 != null) { + this.mc.ingameGUI.setRecordPlayingMessage(var5.getRecordTitle()); + } + + this.mc.sndManager.playStreaming(var1, (float)var2, (float)var3, (float)var4); + } + + public void playSound(String var1, double var2, double var4, double var6, float var8, float var9) { + } + + public void playSoundToNearExcept(EntityPlayer var1, String var2, double var3, double var5, double var7, float var9, float var10) { + } + + public void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12) { + try { + this.doSpawnParticle(var1, var2, var4, var6, var8, var10, var12); + } catch (Throwable var17) { + CrashReport var15 = CrashReport.makeCrashReport(var17, "Exception while adding particle"); + CrashReportCategory var16 = var15.makeCategory("Particle being added"); + var16.addCrashSection("Name", var1); + var16.addCrashSectionCallable("Position", new CallableParticlePositionInfo(this, var2, var4, var6)); + throw new ReportedException(var15); + } + } + + public EntityFX doSpawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12) { + if(this.mc != null && this.mc.renderViewEntity != null && this.mc.effectRenderer != null) { + int var14 = this.mc.gameSettings.particleSetting; + if(var14 == 1 && this.theWorld.rand.nextInt(3) == 0) { + var14 = 2; + } + + double var15 = this.mc.renderViewEntity.posX - var2; + double var17 = this.mc.renderViewEntity.posY - var4; + double var19 = this.mc.renderViewEntity.posZ - var6; + Object var21 = null; + EffectRenderer var10000; + if(var1.equals("hugeexplosion")) { + var10000 = this.mc.effectRenderer; + var21 = new EntityHugeExplodeFX(this.theWorld, var2, var4, var6, var8, var10, var12); + var10000.addEffect((EntityFX)var21); + } else if(var1.equals("largeexplode")) { + var10000 = this.mc.effectRenderer; + var21 = new EntityLargeExplodeFX(this.renderEngine, this.theWorld, var2, var4, var6, var8, var10, var12); + var10000.addEffect((EntityFX)var21); + } else if(var1.equals("fireworksSpark")) { + var10000 = this.mc.effectRenderer; + var21 = new EntityFireworkSparkFX(this.theWorld, var2, var4, var6, var8, var10, var12, this.mc.effectRenderer); + var10000.addEffect((EntityFX)var21); + } + + if(var21 != null) { + return (EntityFX)var21; + } else { + double var22 = 16.0D; + if(var15 * var15 + var17 * var17 + var19 * var19 > var22 * var22) { + return null; + } else if(var14 > 1) { + return null; + } else { + if(var1.equals("bubble")) { + var21 = new EntityBubbleFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("suspended")) { + var21 = new EntitySuspendFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("depthsuspend")) { + var21 = new EntityAuraFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("townaura")) { + var21 = new EntityAuraFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("crit")) { + var21 = new EntityCritFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("magicCrit")) { + var21 = new EntityCritFX(this.theWorld, var2, var4, var6, var8, var10, var12); + ((EntityFX)var21).setRBGColorF(((EntityFX)var21).getRedColorF() * 0.3F, ((EntityFX)var21).getGreenColorF() * 0.8F, ((EntityFX)var21).getBlueColorF()); + ((EntityFX)var21).nextTextureIndexX(); + } else if(var1.equals("smoke")) { + var21 = new EntitySmokeFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("mobSpell")) { + var21 = new EntitySpellParticleFX(this.theWorld, var2, var4, var6, 0.0D, 0.0D, 0.0D); + ((EntityFX)var21).setRBGColorF((float)var8, (float)var10, (float)var12); + } else if(var1.equals("mobSpellAmbient")) { + var21 = new EntitySpellParticleFX(this.theWorld, var2, var4, var6, 0.0D, 0.0D, 0.0D); + ((EntityFX)var21).setAlphaF(0.15F); + ((EntityFX)var21).setRBGColorF((float)var8, (float)var10, (float)var12); + } else if(var1.equals("spell")) { + var21 = new EntitySpellParticleFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("instantSpell")) { + var21 = new EntitySpellParticleFX(this.theWorld, var2, var4, var6, var8, var10, var12); + ((EntitySpellParticleFX)var21).setBaseSpellTextureIndex(144); + } else if(var1.equals("witchMagic")) { + var21 = new EntitySpellParticleFX(this.theWorld, var2, var4, var6, var8, var10, var12); + ((EntitySpellParticleFX)var21).setBaseSpellTextureIndex(144); + float var24 = this.theWorld.rand.nextFloat() * 0.5F + 0.35F; + ((EntityFX)var21).setRBGColorF(1.0F * var24, 0.0F * var24, 1.0F * var24); + } else if(var1.equals("note")) { + var21 = new EntityNoteFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("portal")) { + var21 = new EntityPortalFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("enchantmenttable")) { + var21 = new EntityEnchantmentTableParticleFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("explode")) { + var21 = new EntityExplodeFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("flame")) { + var21 = new EntityFlameFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("lava")) { + var21 = new EntityLavaFX(this.theWorld, var2, var4, var6); + } else if(var1.equals("footstep")) { + var21 = new EntityFootStepFX(this.renderEngine, this.theWorld, var2, var4, var6); + } else if(var1.equals("splash")) { + var21 = new EntitySplashFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("largesmoke")) { + var21 = new EntitySmokeFX(this.theWorld, var2, var4, var6, var8, var10, var12, 2.5F); + } else if(var1.equals("cloud")) { + var21 = new EntityCloudFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("reddust")) { + var21 = new EntityReddustFX(this.theWorld, var2, var4, var6, (float)var8, (float)var10, (float)var12); + } else if(var1.equals("snowballpoof")) { + var21 = new EntityBreakingFX(this.theWorld, var2, var4, var6, Item.snowball, this.renderEngine); + } else if(var1.equals("dripWater")) { + var21 = new EntityDropParticleFX(this.theWorld, var2, var4, var6, Material.water); + } else if(var1.equals("dripLava")) { + var21 = new EntityDropParticleFX(this.theWorld, var2, var4, var6, Material.lava); + } else if(var1.equals("snowshovel")) { + var21 = new EntitySnowShovelFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("slime")) { + var21 = new EntityBreakingFX(this.theWorld, var2, var4, var6, Item.slimeBall, this.renderEngine); + } else if(var1.equals("heart")) { + var21 = new EntityHeartFX(this.theWorld, var2, var4, var6, var8, var10, var12); + } else if(var1.equals("angryVillager")) { + var21 = new EntityHeartFX(this.theWorld, var2, var4 + 0.5D, var6, var8, var10, var12); + ((EntityFX)var21).setParticleTextureIndex(81); + ((EntityFX)var21).setRBGColorF(1.0F, 1.0F, 1.0F); + } else if(var1.equals("happyVillager")) { + var21 = new EntityAuraFX(this.theWorld, var2, var4, var6, var8, var10, var12); + ((EntityFX)var21).setParticleTextureIndex(82); + ((EntityFX)var21).setRBGColorF(1.0F, 1.0F, 1.0F); + } else if(var1.startsWith("iconcrack_")) { + int var27 = Integer.parseInt(var1.substring(var1.indexOf("_") + 1)); + var21 = new EntityBreakingFX(this.theWorld, var2, var4, var6, var8, var10, var12, Item.itemsList[var27], this.renderEngine); + } else if(var1.startsWith("tilecrack_")) { + String[] var28 = var1.split("_", 3); + int var25 = Integer.parseInt(var28[1]); + int var26 = Integer.parseInt(var28[2]); + var21 = (new EntityDiggingFX(this.theWorld, var2, var4, var6, var8, var10, var12, Block.blocksList[var25], 0, var26, this.renderEngine)).applyRenderColor(var26); + } + + if(var21 != null) { + this.mc.effectRenderer.addEffect((EntityFX)var21); + } + + return (EntityFX)var21; + } + } + } else { + return null; + } + } + + public void onEntityCreate(Entity var1) { + var1.updateCloak(); + if(var1.skinUrl != null) { + this.renderEngine.obtainImageData(var1.skinUrl, new ImageBufferDownload()); + } + + if(var1.cloakUrl != null) { + this.renderEngine.obtainImageData(var1.cloakUrl, new ImageBufferDownload()); + } + + } + + public void onEntityDestroy(Entity var1) { + if(var1.skinUrl != null) { + this.renderEngine.releaseImageData(var1.skinUrl); + } + + if(var1.cloakUrl != null) { + this.renderEngine.releaseImageData(var1.cloakUrl); + } + + } + + public void deleteAllDisplayLists() { + GLAllocation.deleteDisplayLists(this.glRenderListBase); + } + + public void broadcastSound(int var1, int var2, int var3, int var4, int var5) { + Random var6 = this.theWorld.rand; + switch(var1) { + case 1013: + case 1018: + if(this.mc.renderViewEntity != null) { + double var7 = (double)var2 - this.mc.renderViewEntity.posX; + double var9 = (double)var3 - this.mc.renderViewEntity.posY; + double var11 = (double)var4 - this.mc.renderViewEntity.posZ; + double var13 = Math.sqrt(var7 * var7 + var9 * var9 + var11 * var11); + double var15 = this.mc.renderViewEntity.posX; + double var17 = this.mc.renderViewEntity.posY; + double var19 = this.mc.renderViewEntity.posZ; + if(var13 > 0.0D) { + var15 += var7 / var13 * 2.0D; + var17 += var9 / var13 * 2.0D; + var19 += var11 / var13 * 2.0D; + } + + if(var1 == 1013) { + this.theWorld.playSound(var15, var17, var19, "mob.wither.spawn", 1.0F, 1.0F, false); + } else if(var1 == 1018) { + this.theWorld.playSound(var15, var17, var19, "mob.enderdragon.end", 5.0F, 1.0F, false); + } + } + default: + } + } + + public void playAuxSFX(EntityPlayer var1, int var2, int var3, int var4, int var5, int var6) { + Random var7 = this.theWorld.rand; + double var8; + double var10; + double var12; + String var14; + int var15; + int var20; + double var23; + double var25; + double var27; + double var29; + double var39; + switch(var2) { + case 1000: + this.theWorld.playSound((double)var3, (double)var4, (double)var5, "random.click", 1.0F, 1.0F, false); + break; + case 1001: + this.theWorld.playSound((double)var3, (double)var4, (double)var5, "random.click", 1.0F, 1.2F, false); + break; + case 1002: + this.theWorld.playSound((double)var3, (double)var4, (double)var5, "random.bow", 1.0F, 1.2F, false); + break; + case 1003: + if(Math.random() < 0.5D) { + this.theWorld.playSound((double)var3 + 0.5D, (double)var4 + 0.5D, (double)var5 + 0.5D, "random.door_open", 1.0F, this.theWorld.rand.nextFloat() * 0.1F + 0.9F, false); + } else { + this.theWorld.playSound((double)var3 + 0.5D, (double)var4 + 0.5D, (double)var5 + 0.5D, "random.door_close", 1.0F, this.theWorld.rand.nextFloat() * 0.1F + 0.9F, false); + } + break; + case 1004: + this.theWorld.playSound((double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), "random.fizz", 0.5F, 2.6F + (var7.nextFloat() - var7.nextFloat()) * 0.8F, false); + break; + case 1005: + if(Item.itemsList[var6] instanceof ItemRecord) { + this.theWorld.playRecord(((ItemRecord)Item.itemsList[var6]).recordName, var3, var4, var5); + } else { + this.theWorld.playRecord((String)null, var3, var4, var5); + } + break; + case 1007: + this.theWorld.playSound((double)var3 + 0.5D, (double)var4 + 0.5D, (double)var5 + 0.5D, "mob.ghast.charge", 10.0F, (var7.nextFloat() - var7.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1008: + this.theWorld.playSound((double)var3 + 0.5D, (double)var4 + 0.5D, (double)var5 + 0.5D, "mob.ghast.fireball", 10.0F, (var7.nextFloat() - var7.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1009: + this.theWorld.playSound((double)var3 + 0.5D, (double)var4 + 0.5D, (double)var5 + 0.5D, "mob.ghast.fireball", 2.0F, (var7.nextFloat() - var7.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1010: + this.theWorld.playSound((double)var3 + 0.5D, (double)var4 + 0.5D, (double)var5 + 0.5D, "mob.zombie.wood", 2.0F, (var7.nextFloat() - var7.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1011: + this.theWorld.playSound((double)var3 + 0.5D, (double)var4 + 0.5D, (double)var5 + 0.5D, "mob.zombie.metal", 2.0F, (var7.nextFloat() - var7.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1012: + this.theWorld.playSound((double)var3 + 0.5D, (double)var4 + 0.5D, (double)var5 + 0.5D, "mob.zombie.woodbreak", 2.0F, (var7.nextFloat() - var7.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1014: + this.theWorld.playSound((double)var3 + 0.5D, (double)var4 + 0.5D, (double)var5 + 0.5D, "mob.wither.shoot", 2.0F, (var7.nextFloat() - var7.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1015: + this.theWorld.playSound((double)var3 + 0.5D, (double)var4 + 0.5D, (double)var5 + 0.5D, "mob.bat.takeoff", 0.05F, (var7.nextFloat() - var7.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1016: + this.theWorld.playSound((double)var3 + 0.5D, (double)var4 + 0.5D, (double)var5 + 0.5D, "mob.zombie.infect", 2.0F, (var7.nextFloat() - var7.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1017: + this.theWorld.playSound((double)var3 + 0.5D, (double)var4 + 0.5D, (double)var5 + 0.5D, "mob.zombie.unfect", 2.0F, (var7.nextFloat() - var7.nextFloat()) * 0.2F + 1.0F, false); + break; + case 1020: + this.theWorld.playSound((double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), "random.anvil_break", 1.0F, this.theWorld.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 1021: + this.theWorld.playSound((double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), "random.anvil_use", 1.0F, this.theWorld.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 1022: + this.theWorld.playSound((double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), "random.anvil_land", 0.3F, this.theWorld.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 2000: + int var33 = var6 % 3 - 1; + int var9 = var6 / 3 % 3 - 1; + var10 = (double)var3 + (double)var33 * 0.6D + 0.5D; + var12 = (double)var4 + 0.5D; + double var34 = (double)var5 + (double)var9 * 0.6D + 0.5D; + + for(int var36 = 0; var36 < 10; ++var36) { + double var37 = var7.nextDouble() * 0.2D + 0.01D; + double var38 = var10 + (double)var33 * 0.01D + (var7.nextDouble() - 0.5D) * (double)var9 * 0.5D; + var39 = var12 + (var7.nextDouble() - 0.5D) * 0.5D; + var23 = var34 + (double)var9 * 0.01D + (var7.nextDouble() - 0.5D) * (double)var33 * 0.5D; + var25 = (double)var33 * var37 + var7.nextGaussian() * 0.01D; + var27 = -0.03D + var7.nextGaussian() * 0.01D; + var29 = (double)var9 * var37 + var7.nextGaussian() * 0.01D; + this.spawnParticle("smoke", var38, var39, var23, var25, var27, var29); + } + + return; + case 2001: + var20 = var6 & 4095; + if(var20 > 0) { + Block var40 = Block.blocksList[var20]; + this.mc.sndManager.playSound(var40.stepSound.getBreakSound(), (float)var3 + 0.5F, (float)var4 + 0.5F, (float)var5 + 0.5F, (var40.stepSound.getVolume() + 1.0F) / 2.0F, var40.stepSound.getPitch() * 0.8F); + } + + this.mc.effectRenderer.addBlockDestroyEffects(var3, var4, var5, var6 & 4095, var6 >> 12 & 255); + break; + case 2002: + var8 = (double)var3; + var10 = (double)var4; + var12 = (double)var5; + var14 = "iconcrack_" + Item.potion.itemID; + + for(var15 = 0; var15 < 8; ++var15) { + this.spawnParticle(var14, var8, var10, var12, var7.nextGaussian() * 0.15D, var7.nextDouble() * 0.2D, var7.nextGaussian() * 0.15D); + } + + var15 = Item.potion.getColorFromDamage(var6); + float var16 = (float)(var15 >> 16 & 255) / 255.0F; + float var17 = (float)(var15 >> 8 & 255) / 255.0F; + float var18 = (float)(var15 >> 0 & 255) / 255.0F; + String var19 = "spell"; + if(Item.potion.isEffectInstant(var6)) { + var19 = "instantSpell"; + } + + for(var20 = 0; var20 < 100; ++var20) { + var39 = var7.nextDouble() * 4.0D; + var23 = var7.nextDouble() * Math.PI * 2.0D; + var25 = Math.cos(var23) * var39; + var27 = 0.01D + var7.nextDouble() * 0.5D; + var29 = Math.sin(var23) * var39; + EntityFX var31 = this.doSpawnParticle(var19, var8 + var25 * 0.1D, var10 + 0.3D, var12 + var29 * 0.1D, var25, var27, var29); + if(var31 != null) { + float var32 = 12.0F / 16.0F + var7.nextFloat() * 0.25F; + var31.setRBGColorF(var16 * var32, var17 * var32, var18 * var32); + var31.multiplyVelocity((float)var39); + } + } + + this.theWorld.playSound((double)var3 + 0.5D, (double)var4 + 0.5D, (double)var5 + 0.5D, "random.glass", 1.0F, this.theWorld.rand.nextFloat() * 0.1F + 0.9F, false); + break; + case 2003: + var8 = (double)var3 + 0.5D; + var10 = (double)var4; + var12 = (double)var5 + 0.5D; + var14 = "iconcrack_" + Item.eyeOfEnder.itemID; + + for(var15 = 0; var15 < 8; ++var15) { + this.spawnParticle(var14, var8, var10, var12, var7.nextGaussian() * 0.15D, var7.nextDouble() * 0.2D, var7.nextGaussian() * 0.15D); + } + + for(double var35 = 0.0D; var35 < Math.PI * 2.0D; var35 += Math.PI * 0.05D) { + this.spawnParticle("portal", var8 + Math.cos(var35) * 5.0D, var10 - 0.4D, var12 + Math.sin(var35) * 5.0D, Math.cos(var35) * -5.0D, 0.0D, Math.sin(var35) * -5.0D); + this.spawnParticle("portal", var8 + Math.cos(var35) * 5.0D, var10 - 0.4D, var12 + Math.sin(var35) * 5.0D, Math.cos(var35) * -7.0D, 0.0D, Math.sin(var35) * -7.0D); + } + + return; + case 2004: + for(int var21 = 0; var21 < 20; ++var21) { + double var22 = (double)var3 + 0.5D + ((double)this.theWorld.rand.nextFloat() - 0.5D) * 2.0D; + double var24 = (double)var4 + 0.5D + ((double)this.theWorld.rand.nextFloat() - 0.5D) * 2.0D; + double var26 = (double)var5 + 0.5D + ((double)this.theWorld.rand.nextFloat() - 0.5D) * 2.0D; + this.theWorld.spawnParticle("smoke", var22, var24, var26, 0.0D, 0.0D, 0.0D); + this.theWorld.spawnParticle("flame", var22, var24, var26, 0.0D, 0.0D, 0.0D); + } + + return; + case 2005: + ItemDye.func_96603_a(this.theWorld, var3, var4, var5, var6); + } + + } + + public void destroyBlockPartially(int var1, int var2, int var3, int var4, int var5) { + if(var5 >= 0 && var5 < 10) { + DestroyBlockProgress var6 = (DestroyBlockProgress)this.damagedBlocks.get(Integer.valueOf(var1)); + if(var6 == null || var6.getPartialBlockX() != var2 || var6.getPartialBlockY() != var3 || var6.getPartialBlockZ() != var4) { + var6 = new DestroyBlockProgress(var1, var2, var3, var4); + this.damagedBlocks.put(Integer.valueOf(var1), var6); + } + + var6.setPartialBlockDamage(var5); + var6.setCloudUpdateTick(this.cloudTickCounter); + } else { + this.damagedBlocks.remove(Integer.valueOf(var1)); + } + + } + + public void registerDestroyBlockIcons(IconRegister var1) { + this.destroyBlockIcons = new Icon[10]; + + for(int var2 = 0; var2 < this.destroyBlockIcons.length; ++var2) { + this.destroyBlockIcons[var2] = var1.registerIcon("destroy_" + var2); + } + + } +} diff --git a/src/net/minecraft/src/RenderHelper.java b/src/net/minecraft/src/RenderHelper.java new file mode 100644 index 0000000..3b30533 --- /dev/null +++ b/src/net/minecraft/src/RenderHelper.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +import java.nio.FloatBuffer; +import org.lwjgl.opengl.GL11; + +public class RenderHelper { + private static FloatBuffer colorBuffer = GLAllocation.createDirectFloatBuffer(16); + private static final Vec3 field_82884_b = Vec3.createVectorHelper((double)0.2F, 1.0D, (double)-0.7F).normalize(); + private static final Vec3 field_82885_c = Vec3.createVectorHelper((double)-0.2F, 1.0D, (double)0.7F).normalize(); + + public static void disableStandardItemLighting() { + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_LIGHT0); + GL11.glDisable(GL11.GL_LIGHT1); + GL11.glDisable(GL11.GL_COLOR_MATERIAL); + } + + public static void enableStandardItemLighting() { + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_LIGHT0); + GL11.glEnable(GL11.GL_LIGHT1); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glColorMaterial(GL11.GL_FRONT_AND_BACK, GL11.GL_AMBIENT_AND_DIFFUSE); + float var0 = 0.4F; + float var1 = 0.6F; + float var2 = 0.0F; + GL11.glLight(GL11.GL_LIGHT0, GL11.GL_POSITION, setColorBuffer(field_82884_b.xCoord, field_82884_b.yCoord, field_82884_b.zCoord, 0.0D)); + GL11.glLight(GL11.GL_LIGHT0, GL11.GL_DIFFUSE, setColorBuffer(var1, var1, var1, 1.0F)); + GL11.glLight(GL11.GL_LIGHT0, GL11.GL_AMBIENT, setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); + GL11.glLight(GL11.GL_LIGHT0, GL11.GL_SPECULAR, setColorBuffer(var2, var2, var2, 1.0F)); + GL11.glLight(GL11.GL_LIGHT1, GL11.GL_POSITION, setColorBuffer(field_82885_c.xCoord, field_82885_c.yCoord, field_82885_c.zCoord, 0.0D)); + GL11.glLight(GL11.GL_LIGHT1, GL11.GL_DIFFUSE, setColorBuffer(var1, var1, var1, 1.0F)); + GL11.glLight(GL11.GL_LIGHT1, GL11.GL_AMBIENT, setColorBuffer(0.0F, 0.0F, 0.0F, 1.0F)); + GL11.glLight(GL11.GL_LIGHT1, GL11.GL_SPECULAR, setColorBuffer(var2, var2, var2, 1.0F)); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glLightModel(GL11.GL_LIGHT_MODEL_AMBIENT, setColorBuffer(var0, var0, var0, 1.0F)); + } + + private static FloatBuffer setColorBuffer(double var0, double var2, double var4, double var6) { + return setColorBuffer((float)var0, (float)var2, (float)var4, (float)var6); + } + + private static FloatBuffer setColorBuffer(float var0, float var1, float var2, float var3) { + colorBuffer.clear(); + colorBuffer.put(var0).put(var1).put(var2).put(var3); + colorBuffer.flip(); + return colorBuffer; + } + + public static void enableGUIStandardItemLighting() { + GL11.glPushMatrix(); + GL11.glRotatef(-30.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(165.0F, 1.0F, 0.0F, 0.0F); + enableStandardItemLighting(); + GL11.glPopMatrix(); + } +} diff --git a/src/net/minecraft/src/RenderIronGolem.java b/src/net/minecraft/src/RenderIronGolem.java new file mode 100644 index 0000000..4854dad --- /dev/null +++ b/src/net/minecraft/src/RenderIronGolem.java @@ -0,0 +1,65 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderIronGolem extends RenderLiving { + private ModelIronGolem ironGolemModel = (ModelIronGolem)this.mainModel; + + public RenderIronGolem() { + super(new ModelIronGolem(), 0.5F); + } + + public void doRenderIronGolem(EntityIronGolem var1, double var2, double var4, double var6, float var8, float var9) { + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + protected void rotateIronGolemCorpse(EntityIronGolem var1, float var2, float var3, float var4) { + super.rotateCorpse(var1, var2, var3, var4); + if((double)var1.limbYaw >= 0.01D) { + float var5 = 13.0F; + float var6 = var1.limbSwing - var1.limbYaw * (1.0F - var4) + 6.0F; + float var7 = (Math.abs(var6 % var5 - var5 * 0.5F) - var5 * 0.25F) / (var5 * 0.25F); + GL11.glRotatef(6.5F * var7, 0.0F, 0.0F, 1.0F); + } + } + + protected void renderIronGolemEquippedItems(EntityIronGolem var1, float var2) { + super.renderEquippedItems(var1, var2); + if(var1.getHoldRoseTick() != 0) { + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glPushMatrix(); + GL11.glRotatef(5.0F + 180.0F * this.ironGolemModel.ironGolemRightArm.rotateAngleX / (float)Math.PI, 1.0F, 0.0F, 0.0F); + GL11.glTranslatef(-(11.0F / 16.0F), 1.25F, -(15.0F / 16.0F)); + GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F); + float var3 = 0.8F; + GL11.glScalef(var3, -var3, var3); + int var4 = var1.getBrightnessForRender(var2); + int var5 = var4 % 65536; + int var6 = var4 / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var5 / 1.0F, (float)var6 / 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.loadTexture("/terrain.png"); + this.renderBlocks.renderBlockAsItem(Block.plantRed, 0, 1.0F); + GL11.glPopMatrix(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + } + } + + protected void renderEquippedItems(EntityLiving var1, float var2) { + this.renderIronGolemEquippedItems((EntityIronGolem)var1, var2); + } + + protected void rotateCorpse(EntityLiving var1, float var2, float var3, float var4) { + this.rotateIronGolemCorpse((EntityIronGolem)var1, var2, var3, var4); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.doRenderIronGolem((EntityIronGolem)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.doRenderIronGolem((EntityIronGolem)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderItem.java b/src/net/minecraft/src/RenderItem.java new file mode 100644 index 0000000..5bb096a --- /dev/null +++ b/src/net/minecraft/src/RenderItem.java @@ -0,0 +1,440 @@ +package net.minecraft.src; + +import java.util.Random; +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderItem extends Render { + private RenderBlocks itemRenderBlocks = new RenderBlocks(); + private Random random = new Random(); + public boolean renderWithColor = true; + public float zLevel = 0.0F; + public static boolean renderInFrame = false; + + public RenderItem() { + this.shadowSize = 0.15F; + this.shadowOpaque = 12.0F / 16.0F; + } + + public void doRenderItem(EntityItem var1, double var2, double var4, double var6, float var8, float var9) { + this.random.setSeed(187L); + ItemStack var10 = var1.getEntityItem(); + if(var10.getItem() != null) { + GL11.glPushMatrix(); + float var11 = MathHelper.sin(((float)var1.age + var9) / 10.0F + var1.hoverStart) * 0.1F + 0.1F; + float var12 = (((float)var1.age + var9) / 20.0F + var1.hoverStart) * (180.0F / (float)Math.PI); + byte var13 = 1; + if(var1.getEntityItem().stackSize > 1) { + var13 = 2; + } + + if(var1.getEntityItem().stackSize > 5) { + var13 = 3; + } + + if(var1.getEntityItem().stackSize > 20) { + var13 = 4; + } + + if(var1.getEntityItem().stackSize > 40) { + var13 = 5; + } + + GL11.glTranslatef((float)var2, (float)var4 + var11, (float)var6); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + int var17; + float var18; + float var19; + float var20; + if(var10.getItemSpriteNumber() == 0 && Block.blocksList[var10.itemID] != null && RenderBlocks.renderItemIn3d(Block.blocksList[var10.itemID].getRenderType())) { + Block var22 = Block.blocksList[var10.itemID]; + GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F); + if(renderInFrame) { + GL11.glScalef(1.25F, 1.25F, 1.25F); + GL11.glTranslatef(0.0F, 0.05F, 0.0F); + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + } + + this.loadTexture("/terrain.png"); + float var24 = 0.25F; + int var25 = var22.getRenderType(); + if(var25 == 1 || var25 == 19 || var25 == 12 || var25 == 2) { + var24 = 0.5F; + } + + GL11.glScalef(var24, var24, var24); + + for(var17 = 0; var17 < var13; ++var17) { + GL11.glPushMatrix(); + if(var17 > 0) { + var18 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / var24; + var19 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / var24; + var20 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / var24; + GL11.glTranslatef(var18, var19, var20); + } + + var18 = 1.0F; + this.itemRenderBlocks.renderBlockAsItem(var22, var10.getItemDamage(), var18); + GL11.glPopMatrix(); + } + } else { + float var16; + if(var10.getItem().requiresMultipleRenderPasses()) { + if(renderInFrame) { + GL11.glScalef(0.5128205F, 0.5128205F, 0.5128205F); + GL11.glTranslatef(0.0F, -0.05F, 0.0F); + } else { + GL11.glScalef(0.5F, 0.5F, 0.5F); + } + + this.loadTexture("/gui/items.png"); + + for(int var14 = 0; var14 <= 1; ++var14) { + this.random.setSeed(187L); + Icon var15 = var10.getItem().getIconFromDamageForRenderPass(var10.getItemDamage(), var14); + var16 = 1.0F; + if(this.renderWithColor) { + var17 = Item.itemsList[var10.itemID].getColorFromItemStack(var10, var14); + var18 = (float)(var17 >> 16 & 255) / 255.0F; + var19 = (float)(var17 >> 8 & 255) / 255.0F; + var20 = (float)(var17 & 255) / 255.0F; + GL11.glColor4f(var18 * var16, var19 * var16, var20 * var16, 1.0F); + this.renderDroppedItem(var1, var15, var13, var9, var18 * var16, var19 * var16, var20 * var16); + } else { + this.renderDroppedItem(var1, var15, var13, var9, 1.0F, 1.0F, 1.0F); + } + } + } else { + if(renderInFrame) { + GL11.glScalef(0.5128205F, 0.5128205F, 0.5128205F); + GL11.glTranslatef(0.0F, -0.05F, 0.0F); + } else { + GL11.glScalef(0.5F, 0.5F, 0.5F); + } + + Icon var21 = var10.getIconIndex(); + if(var10.getItemSpriteNumber() == 0) { + this.loadTexture("/terrain.png"); + } else { + this.loadTexture("/gui/items.png"); + } + + if(this.renderWithColor) { + int var23 = Item.itemsList[var10.itemID].getColorFromItemStack(var10, 0); + var16 = (float)(var23 >> 16 & 255) / 255.0F; + float var26 = (float)(var23 >> 8 & 255) / 255.0F; + var18 = (float)(var23 & 255) / 255.0F; + var19 = 1.0F; + this.renderDroppedItem(var1, var21, var13, var9, var16 * var19, var26 * var19, var18 * var19); + } else { + this.renderDroppedItem(var1, var21, var13, var9, 1.0F, 1.0F, 1.0F); + } + } + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } + } + + private void renderDroppedItem(EntityItem var1, Icon var2, int var3, float var4, float var5, float var6, float var7) { + Tessellator var8 = Tessellator.instance; + if(var2 == null) { + var2 = this.renderManager.renderEngine.getMissingIcon(var1.getEntityItem().getItemSpriteNumber()); + } + + float var9 = var2.getMinU(); + float var10 = var2.getMaxU(); + float var11 = var2.getMinV(); + float var12 = var2.getMaxV(); + float var13 = 1.0F; + float var14 = 0.5F; + float var15 = 0.25F; + float var17; + if(this.renderManager.options.fancyGraphics) { + GL11.glPushMatrix(); + if(renderInFrame) { + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + } else { + GL11.glRotatef((((float)var1.age + var4) / 20.0F + var1.hoverStart) * (180.0F / (float)Math.PI), 0.0F, 1.0F, 0.0F); + } + + float var16 = 1.0F / 16.0F; + var17 = 7.0F / 320.0F; + ItemStack var18 = var1.getEntityItem(); + int var19 = var18.stackSize; + byte var24; + if(var19 < 2) { + var24 = 1; + } else if(var19 < 16) { + var24 = 2; + } else if(var19 < 32) { + var24 = 3; + } else { + var24 = 4; + } + + GL11.glTranslatef(-var14, -var15, -((var16 + var17) * (float)var24 / 2.0F)); + + for(int var20 = 0; var20 < var24; ++var20) { + GL11.glTranslatef(0.0F, 0.0F, var16 + var17); + if(var18.getItemSpriteNumber() == 0 && Block.blocksList[var18.itemID] != null) { + this.loadTexture("/terrain.png"); + } else { + this.loadTexture("/gui/items.png"); + } + + GL11.glColor4f(var5, var6, var7, 1.0F); + ItemRenderer.renderItemIn2D(var8, var10, var11, var9, var12, var2.getSheetWidth(), var2.getSheetHeight(), var16); + if(var18 != null && var18.hasEffect()) { + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glDisable(GL11.GL_LIGHTING); + this.renderManager.renderEngine.bindTexture("%blur%/misc/glint.png"); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); + float var21 = 0.76F; + GL11.glColor4f(0.5F * var21, 0.25F * var21, 0.8F * var21, 1.0F); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glPushMatrix(); + float var22 = 2.0F / 16.0F; + GL11.glScalef(var22, var22, var22); + float var23 = (float)(Minecraft.getSystemTime() % 3000L) / 3000.0F * 8.0F; + GL11.glTranslatef(var23, 0.0F, 0.0F); + GL11.glRotatef(-50.0F, 0.0F, 0.0F, 1.0F); + ItemRenderer.renderItemIn2D(var8, 0.0F, 0.0F, 1.0F, 1.0F, 255, 255, var16); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + GL11.glScalef(var22, var22, var22); + var23 = (float)(Minecraft.getSystemTime() % 4873L) / 4873.0F * 8.0F; + GL11.glTranslatef(-var23, 0.0F, 0.0F); + GL11.glRotatef(10.0F, 0.0F, 0.0F, 1.0F); + ItemRenderer.renderItemIn2D(var8, 0.0F, 0.0F, 1.0F, 1.0F, 255, 255, var16); + GL11.glPopMatrix(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + } + + GL11.glPopMatrix(); + } else { + for(int var25 = 0; var25 < var3; ++var25) { + GL11.glPushMatrix(); + if(var25 > 0) { + var17 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F; + float var26 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F; + float var27 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F; + GL11.glTranslatef(var17, var26, var27); + } + + if(!renderInFrame) { + GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + } + + GL11.glColor4f(var5, var6, var7, 1.0F); + var8.startDrawingQuads(); + var8.setNormal(0.0F, 1.0F, 0.0F); + var8.addVertexWithUV((double)(0.0F - var14), (double)(0.0F - var15), 0.0D, (double)var9, (double)var12); + var8.addVertexWithUV((double)(var13 - var14), (double)(0.0F - var15), 0.0D, (double)var10, (double)var12); + var8.addVertexWithUV((double)(var13 - var14), (double)(1.0F - var15), 0.0D, (double)var10, (double)var11); + var8.addVertexWithUV((double)(0.0F - var14), (double)(1.0F - var15), 0.0D, (double)var9, (double)var11); + var8.draw(); + GL11.glPopMatrix(); + } + } + + } + + public void renderItemIntoGUI(FontRenderer var1, RenderEngine var2, ItemStack var3, int var4, int var5) { + int var6 = var3.itemID; + int var7 = var3.getItemDamage(); + Icon var8 = var3.getIconIndex(); + float var12; + float var13; + float var18; + if(var3.getItemSpriteNumber() == 0 && RenderBlocks.renderItemIn3d(Block.blocksList[var6].getRenderType())) { + var2.bindTexture("/terrain.png"); + Block var15 = Block.blocksList[var6]; + GL11.glPushMatrix(); + GL11.glTranslatef((float)(var4 - 2), (float)(var5 + 3), -3.0F + this.zLevel); + GL11.glScalef(10.0F, 10.0F, 10.0F); + GL11.glTranslatef(1.0F, 0.5F, 1.0F); + GL11.glScalef(1.0F, 1.0F, -1.0F); + GL11.glRotatef(210.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + int var17 = Item.itemsList[var6].getColorFromItemStack(var3, 0); + var18 = (float)(var17 >> 16 & 255) / 255.0F; + var12 = (float)(var17 >> 8 & 255) / 255.0F; + var13 = (float)(var17 & 255) / 255.0F; + if(this.renderWithColor) { + GL11.glColor4f(var18, var12, var13, 1.0F); + } + + GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F); + this.itemRenderBlocks.useInventoryTint = this.renderWithColor; + this.itemRenderBlocks.renderBlockAsItem(var15, var7, 1.0F); + this.itemRenderBlocks.useInventoryTint = true; + GL11.glPopMatrix(); + } else { + int var9; + if(Item.itemsList[var6].requiresMultipleRenderPasses()) { + GL11.glDisable(GL11.GL_LIGHTING); + var2.bindTexture("/gui/items.png"); + + for(var9 = 0; var9 <= 1; ++var9) { + Icon var10 = Item.itemsList[var6].getIconFromDamageForRenderPass(var7, var9); + int var11 = Item.itemsList[var6].getColorFromItemStack(var3, var9); + var12 = (float)(var11 >> 16 & 255) / 255.0F; + var13 = (float)(var11 >> 8 & 255) / 255.0F; + float var14 = (float)(var11 & 255) / 255.0F; + if(this.renderWithColor) { + GL11.glColor4f(var12, var13, var14, 1.0F); + } + + this.renderIcon(var4, var5, var10, 16, 16); + } + + GL11.glEnable(GL11.GL_LIGHTING); + } else { + GL11.glDisable(GL11.GL_LIGHTING); + if(var3.getItemSpriteNumber() == 0) { + var2.bindTexture("/terrain.png"); + } else { + var2.bindTexture("/gui/items.png"); + } + + if(var8 == null) { + var8 = var2.getMissingIcon(var3.getItemSpriteNumber()); + } + + var9 = Item.itemsList[var6].getColorFromItemStack(var3, 0); + float var16 = (float)(var9 >> 16 & 255) / 255.0F; + var18 = (float)(var9 >> 8 & 255) / 255.0F; + var12 = (float)(var9 & 255) / 255.0F; + if(this.renderWithColor) { + GL11.glColor4f(var16, var18, var12, 1.0F); + } + + this.renderIcon(var4, var5, var8, 16, 16); + GL11.glEnable(GL11.GL_LIGHTING); + } + } + + GL11.glEnable(GL11.GL_CULL_FACE); + } + + public void renderItemAndEffectIntoGUI(FontRenderer var1, RenderEngine var2, ItemStack var3, int var4, int var5) { + if(var3 != null) { + this.renderItemIntoGUI(var1, var2, var3, var4, var5); + if(var3.hasEffect()) { + GL11.glDepthFunc(GL11.GL_GREATER); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDepthMask(false); + var2.bindTexture("%blur%/misc/glint.png"); + this.zLevel -= 50.0F; + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_DST_COLOR, GL11.GL_DST_COLOR); + GL11.glColor4f(0.5F, 0.25F, 0.8F, 1.0F); + this.renderGlint(var4 * 431278612 + var5 * 32178161, var4 - 2, var5 - 2, 20, 20); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthMask(true); + this.zLevel += 50.0F; + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + + } + } + + private void renderGlint(int var1, int var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 2; ++var6) { + if(var6 == 0) { + GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); + } + + if(var6 == 1) { + GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); + } + + float var7 = 0.00390625F; + float var8 = 0.00390625F; + float var9 = (float)(Minecraft.getSystemTime() % (long)(3000 + var6 * 1873)) / (3000.0F + (float)(var6 * 1873)) * 256.0F; + float var10 = 0.0F; + Tessellator var11 = Tessellator.instance; + float var12 = 4.0F; + if(var6 == 1) { + var12 = -1.0F; + } + + var11.startDrawingQuads(); + var11.addVertexWithUV((double)(var2 + 0), (double)(var3 + var5), (double)this.zLevel, (double)((var9 + (float)var5 * var12) * var7), (double)((var10 + (float)var5) * var8)); + var11.addVertexWithUV((double)(var2 + var4), (double)(var3 + var5), (double)this.zLevel, (double)((var9 + (float)var4 + (float)var5 * var12) * var7), (double)((var10 + (float)var5) * var8)); + var11.addVertexWithUV((double)(var2 + var4), (double)(var3 + 0), (double)this.zLevel, (double)((var9 + (float)var4) * var7), (double)((var10 + 0.0F) * var8)); + var11.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), (double)this.zLevel, (double)((var9 + 0.0F) * var7), (double)((var10 + 0.0F) * var8)); + var11.draw(); + } + + } + + public void renderItemOverlayIntoGUI(FontRenderer var1, RenderEngine var2, ItemStack var3, int var4, int var5) { + this.renderItemOverlayIntoGUI(var1, var2, var3, var4, var5, (String)null); + } + + public void renderItemOverlayIntoGUI(FontRenderer var1, RenderEngine var2, ItemStack var3, int var4, int var5, String var6) { + if(var3 != null) { + if(var3.stackSize > 1 || var6 != null) { + String var7 = var6 == null ? String.valueOf(var3.stackSize) : var6; + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + var1.drawStringWithShadow(var7, var4 + 19 - 2 - var1.getStringWidth(var7), var5 + 6 + 3, 16777215); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + } + + if(var3.isItemDamaged()) { + int var12 = (int)Math.round(13.0D - (double)var3.getItemDamageForDisplay() * 13.0D / (double)var3.getMaxDamage()); + int var8 = (int)Math.round(255.0D - (double)var3.getItemDamageForDisplay() * 255.0D / (double)var3.getMaxDamage()); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_TEXTURE_2D); + Tessellator var9 = Tessellator.instance; + int var10 = 255 - var8 << 16 | var8 << 8; + int var11 = (255 - var8) / 4 << 16 | 16128; + this.renderQuad(var9, var4 + 2, var5 + 13, 13, 2, 0); + this.renderQuad(var9, var4 + 2, var5 + 13, 12, 1, var11); + this.renderQuad(var9, var4 + 2, var5 + 13, var12, 1, var10); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + } + } + + private void renderQuad(Tessellator var1, int var2, int var3, int var4, int var5, int var6) { + var1.startDrawingQuads(); + var1.setColorOpaque_I(var6); + var1.addVertex((double)(var2 + 0), (double)(var3 + 0), 0.0D); + var1.addVertex((double)(var2 + 0), (double)(var3 + var5), 0.0D); + var1.addVertex((double)(var2 + var4), (double)(var3 + var5), 0.0D); + var1.addVertex((double)(var2 + var4), (double)(var3 + 0), 0.0D); + var1.draw(); + } + + public void renderIcon(int var1, int var2, Icon var3, int var4, int var5) { + Tessellator var6 = Tessellator.instance; + var6.startDrawingQuads(); + var6.addVertexWithUV((double)(var1 + 0), (double)(var2 + var5), (double)this.zLevel, (double)var3.getMinU(), (double)var3.getMaxV()); + var6.addVertexWithUV((double)(var1 + var4), (double)(var2 + var5), (double)this.zLevel, (double)var3.getMaxU(), (double)var3.getMaxV()); + var6.addVertexWithUV((double)(var1 + var4), (double)(var2 + 0), (double)this.zLevel, (double)var3.getMaxU(), (double)var3.getMinV()); + var6.addVertexWithUV((double)(var1 + 0), (double)(var2 + 0), (double)this.zLevel, (double)var3.getMinU(), (double)var3.getMinV()); + var6.draw(); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.doRenderItem((EntityItem)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderItemFrame.java b/src/net/minecraft/src/RenderItemFrame.java new file mode 100644 index 0000000..f65a2bf --- /dev/null +++ b/src/net/minecraft/src/RenderItemFrame.java @@ -0,0 +1,134 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderItemFrame extends Render { + private final RenderBlocks renderBlocksInstance = new RenderBlocks(); + private Icon field_94147_f; + + public void updateIcons(IconRegister var1) { + this.field_94147_f = var1.registerIcon("itemframe_back"); + } + + public void func_82404_a(EntityItemFrame var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + float var10 = (float)(var1.posX - var2) - 0.5F; + float var11 = (float)(var1.posY - var4) - 0.5F; + float var12 = (float)(var1.posZ - var6) - 0.5F; + int var13 = var1.xPosition + Direction.offsetX[var1.hangingDirection]; + int var14 = var1.yPosition; + int var15 = var1.zPosition + Direction.offsetZ[var1.hangingDirection]; + GL11.glTranslatef((float)var13 - var10, (float)var14 - var11, (float)var15 - var12); + this.renderFrameItemAsBlock(var1); + this.func_82402_b(var1); + GL11.glPopMatrix(); + } + + private void renderFrameItemAsBlock(EntityItemFrame var1) { + GL11.glPushMatrix(); + this.renderManager.renderEngine.bindTexture("/terrain.png"); + GL11.glRotatef(var1.rotationYaw, 0.0F, 1.0F, 0.0F); + Block var2 = Block.planks; + float var3 = 1.0F / 16.0F; + float var4 = 12.0F / 16.0F; + float var5 = var4 / 2.0F; + GL11.glPushMatrix(); + this.renderBlocksInstance.overrideBlockBounds(0.0D, (double)(0.5F - var5 + 1.0F / 16.0F), (double)(0.5F - var5 + 1.0F / 16.0F), (double)(var3 * 0.5F), (double)(0.5F + var5 - 1.0F / 16.0F), (double)(0.5F + var5 - 1.0F / 16.0F)); + this.renderBlocksInstance.setOverrideBlockTexture(this.field_94147_f); + this.renderBlocksInstance.renderBlockAsItem(var2, 0, 1.0F); + this.renderBlocksInstance.clearOverrideBlockTexture(); + this.renderBlocksInstance.unlockBlockBounds(); + GL11.glPopMatrix(); + this.renderBlocksInstance.setOverrideBlockTexture(Block.planks.getIcon(1, 2)); + GL11.glPushMatrix(); + this.renderBlocksInstance.overrideBlockBounds(0.0D, (double)(0.5F - var5), (double)(0.5F - var5), (double)(var3 + 1.0E-4F), (double)(var3 + 0.5F - var5), (double)(0.5F + var5)); + this.renderBlocksInstance.renderBlockAsItem(var2, 0, 1.0F); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + this.renderBlocksInstance.overrideBlockBounds(0.0D, (double)(0.5F + var5 - var3), (double)(0.5F - var5), (double)(var3 + 1.0E-4F), (double)(0.5F + var5), (double)(0.5F + var5)); + this.renderBlocksInstance.renderBlockAsItem(var2, 0, 1.0F); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + this.renderBlocksInstance.overrideBlockBounds(0.0D, (double)(0.5F - var5), (double)(0.5F - var5), (double)var3, (double)(0.5F + var5), (double)(var3 + 0.5F - var5)); + this.renderBlocksInstance.renderBlockAsItem(var2, 0, 1.0F); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + this.renderBlocksInstance.overrideBlockBounds(0.0D, (double)(0.5F - var5), (double)(0.5F + var5 - var3), (double)var3, (double)(0.5F + var5), (double)(0.5F + var5)); + this.renderBlocksInstance.renderBlockAsItem(var2, 0, 1.0F); + GL11.glPopMatrix(); + this.renderBlocksInstance.unlockBlockBounds(); + this.renderBlocksInstance.clearOverrideBlockTexture(); + GL11.glPopMatrix(); + } + + private void func_82402_b(EntityItemFrame var1) { + ItemStack var2 = var1.getDisplayedItem(); + if(var2 != null) { + EntityItem var3 = new EntityItem(var1.worldObj, 0.0D, 0.0D, 0.0D, var2); + var3.getEntityItem().stackSize = 1; + var3.hoverStart = 0.0F; + GL11.glPushMatrix(); + GL11.glTranslatef(-0.453125F * (float)Direction.offsetX[var1.hangingDirection], -0.18F, -0.453125F * (float)Direction.offsetZ[var1.hangingDirection]); + GL11.glRotatef(180.0F + var1.rotationYaw, 0.0F, 1.0F, 0.0F); + GL11.glRotatef((float)(-90 * var1.getRotation()), 0.0F, 0.0F, 1.0F); + switch(var1.getRotation()) { + case 1: + GL11.glTranslatef(-0.16F, -0.16F, 0.0F); + break; + case 2: + GL11.glTranslatef(0.0F, -0.32F, 0.0F); + break; + case 3: + GL11.glTranslatef(0.16F, -0.16F, 0.0F); + } + + if(var3.getEntityItem().getItem() == Item.map) { + this.renderManager.renderEngine.bindTexture("/misc/mapbg.png"); + Tessellator var4 = Tessellator.instance; + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); + GL11.glScalef(0.00390625F, 0.00390625F, 0.00390625F); + GL11.glTranslatef(-65.0F, -107.0F, -3.0F); + GL11.glNormal3f(0.0F, 0.0F, -1.0F); + var4.startDrawingQuads(); + byte var5 = 7; + var4.addVertexWithUV((double)(0 - var5), (double)(128 + var5), 0.0D, 0.0D, 1.0D); + var4.addVertexWithUV((double)(128 + var5), (double)(128 + var5), 0.0D, 1.0D, 1.0D); + var4.addVertexWithUV((double)(128 + var5), (double)(0 - var5), 0.0D, 1.0D, 0.0D); + var4.addVertexWithUV((double)(0 - var5), (double)(0 - var5), 0.0D, 0.0D, 0.0D); + var4.draw(); + MapData var6 = Item.map.getMapData(var3.getEntityItem(), var1.worldObj); + GL11.glTranslatef(0.0F, 0.0F, -1.0F); + if(var6 != null) { + this.renderManager.itemRenderer.mapItemRenderer.renderMap((EntityPlayer)null, this.renderManager.renderEngine, var6); + } + } else { + TextureCompass var9; + if(var3.getEntityItem().getItem() == Item.compass) { + var9 = TextureCompass.compassTexture; + double var10 = var9.currentAngle; + double var7 = var9.angleDelta; + var9.currentAngle = 0.0D; + var9.angleDelta = 0.0D; + var9.updateCompass(var1.worldObj, var1.posX, var1.posZ, (double)MathHelper.wrapAngleTo180_float((float)(180 + var1.hangingDirection * 90)), false, true); + var9.currentAngle = var10; + var9.angleDelta = var7; + } + + RenderItem.renderInFrame = true; + RenderManager.instance.renderEntityWithPosYaw(var3, 0.0D, 0.0D, 0.0D, 0.0F, 0.0F); + RenderItem.renderInFrame = false; + if(var3.getEntityItem().getItem() == Item.compass) { + var9 = TextureCompass.compassTexture; + var9.updateAnimation(); + } + } + + GL11.glPopMatrix(); + } + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.func_82404_a((EntityItemFrame)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderLightningBolt.java b/src/net/minecraft/src/RenderLightningBolt.java new file mode 100644 index 0000000..3cac93e --- /dev/null +++ b/src/net/minecraft/src/RenderLightningBolt.java @@ -0,0 +1,105 @@ +package net.minecraft.src; + +import java.util.Random; +import org.lwjgl.opengl.GL11; + +public class RenderLightningBolt extends Render { + public void doRenderLightningBolt(EntityLightningBolt var1, double var2, double var4, double var6, float var8, float var9) { + Tessellator var10 = Tessellator.instance; + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + double[] var11 = new double[8]; + double[] var12 = new double[8]; + double var13 = 0.0D; + double var15 = 0.0D; + Random var17 = new Random(var1.boltVertex); + + for(int var18 = 7; var18 >= 0; --var18) { + var11[var18] = var13; + var12[var18] = var15; + var13 += (double)(var17.nextInt(11) - 5); + var15 += (double)(var17.nextInt(11) - 5); + } + + for(int var45 = 0; var45 < 4; ++var45) { + Random var46 = new Random(var1.boltVertex); + + for(int var19 = 0; var19 < 3; ++var19) { + int var20 = 7; + int var21 = 0; + if(var19 > 0) { + var20 = 7 - var19; + } + + if(var19 > 0) { + var21 = var20 - 2; + } + + double var22 = var11[var20] - var13; + double var24 = var12[var20] - var15; + + for(int var26 = var20; var26 >= var21; --var26) { + double var27 = var22; + double var29 = var24; + if(var19 == 0) { + var22 += (double)(var46.nextInt(11) - 5); + var24 += (double)(var46.nextInt(11) - 5); + } else { + var22 += (double)(var46.nextInt(31) - 15); + var24 += (double)(var46.nextInt(31) - 15); + } + + var10.startDrawing(5); + float var31 = 0.5F; + var10.setColorRGBA_F(0.9F * var31, 0.9F * var31, 1.0F * var31, 0.3F); + double var32 = 0.1D + (double)var45 * 0.2D; + if(var19 == 0) { + var32 *= (double)var26 * 0.1D + 1.0D; + } + + double var34 = 0.1D + (double)var45 * 0.2D; + if(var19 == 0) { + var34 *= (double)(var26 - 1) * 0.1D + 1.0D; + } + + for(int var36 = 0; var36 < 5; ++var36) { + double var37 = var2 + 0.5D - var32; + double var39 = var6 + 0.5D - var32; + if(var36 == 1 || var36 == 2) { + var37 += var32 * 2.0D; + } + + if(var36 == 2 || var36 == 3) { + var39 += var32 * 2.0D; + } + + double var41 = var2 + 0.5D - var34; + double var43 = var6 + 0.5D - var34; + if(var36 == 1 || var36 == 2) { + var41 += var34 * 2.0D; + } + + if(var36 == 2 || var36 == 3) { + var43 += var34 * 2.0D; + } + + var10.addVertex(var41 + var22, var4 + (double)(var26 * 16), var43 + var24); + var10.addVertex(var37 + var27, var4 + (double)((var26 + 1) * 16), var39 + var29); + } + + var10.draw(); + } + } + } + + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.doRenderLightningBolt((EntityLightningBolt)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderList.java b/src/net/minecraft/src/RenderList.java new file mode 100644 index 0000000..3ba52d4 --- /dev/null +++ b/src/net/minecraft/src/RenderList.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +import java.nio.IntBuffer; +import org.lwjgl.opengl.GL11; + +public class RenderList { + private int field_78429_a; + private int field_78427_b; + private int field_78428_c; + private double field_78425_d; + private double field_78426_e; + private double field_78423_f; + private IntBuffer field_78424_g = GLAllocation.createDirectIntBuffer(65536); + private boolean field_78430_h = false; + private boolean field_78431_i = false; + + public void func_78422_a(int var1, int var2, int var3, double var4, double var6, double var8) { + this.field_78430_h = true; + this.field_78424_g.clear(); + this.field_78429_a = var1; + this.field_78427_b = var2; + this.field_78428_c = var3; + this.field_78425_d = var4; + this.field_78426_e = var6; + this.field_78423_f = var8; + } + + public boolean func_78418_a(int var1, int var2, int var3) { + return !this.field_78430_h ? false : var1 == this.field_78429_a && var2 == this.field_78427_b && var3 == this.field_78428_c; + } + + public void func_78420_a(int var1) { + this.field_78424_g.put(var1); + if(this.field_78424_g.remaining() == 0) { + this.func_78419_a(); + } + + } + + public void func_78419_a() { + if(this.field_78430_h) { + if(!this.field_78431_i) { + this.field_78424_g.flip(); + this.field_78431_i = true; + } + + if(this.field_78424_g.remaining() > 0) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)((double)this.field_78429_a - this.field_78425_d), (float)((double)this.field_78427_b - this.field_78426_e), (float)((double)this.field_78428_c - this.field_78423_f)); + GL11.glCallLists(this.field_78424_g); + GL11.glPopMatrix(); + } + + } + } + + public void func_78421_b() { + this.field_78430_h = false; + this.field_78431_i = false; + } +} diff --git a/src/net/minecraft/src/RenderLiving.java b/src/net/minecraft/src/RenderLiving.java new file mode 100644 index 0000000..7938323 --- /dev/null +++ b/src/net/minecraft/src/RenderLiving.java @@ -0,0 +1,411 @@ +package net.minecraft.src; + +import java.util.Random; +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderLiving extends Render { + protected ModelBase mainModel; + protected ModelBase renderPassModel; + + public RenderLiving(ModelBase var1, float var2) { + this.mainModel = var1; + this.shadowSize = var2; + } + + public void setRenderPassModel(ModelBase var1) { + this.renderPassModel = var1; + } + + private float interpolateRotation(float var1, float var2, float var3) { + float var4; + for(var4 = var2 - var1; var4 < -180.0F; var4 += 360.0F) { + } + + while(var4 >= 180.0F) { + var4 -= 360.0F; + } + + return var1 + var3 * var4; + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_CULL_FACE); + this.mainModel.onGround = this.renderSwingProgress(var1, var9); + if(this.renderPassModel != null) { + this.renderPassModel.onGround = this.mainModel.onGround; + } + + this.mainModel.isRiding = var1.isRiding(); + if(this.renderPassModel != null) { + this.renderPassModel.isRiding = this.mainModel.isRiding; + } + + this.mainModel.isChild = var1.isChild(); + if(this.renderPassModel != null) { + this.renderPassModel.isChild = this.mainModel.isChild; + } + + try { + float var10 = this.interpolateRotation(var1.prevRenderYawOffset, var1.renderYawOffset, var9); + float var11 = this.interpolateRotation(var1.prevRotationYawHead, var1.rotationYawHead, var9); + float var12 = var1.prevRotationPitch + (var1.rotationPitch - var1.prevRotationPitch) * var9; + this.renderLivingAt(var1, var2, var4, var6); + float var13 = this.handleRotationFloat(var1, var9); + this.rotateCorpse(var1, var13, var10, var9); + float var14 = 1.0F / 16.0F; + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glScalef(-1.0F, -1.0F, 1.0F); + this.preRenderCallback(var1, var9); + GL11.glTranslatef(0.0F, -24.0F * var14 - 0.0078125F, 0.0F); + float var15 = var1.prevLimbYaw + (var1.limbYaw - var1.prevLimbYaw) * var9; + float var16 = var1.limbSwing - var1.limbYaw * (1.0F - var9); + if(var1.isChild()) { + var16 *= 3.0F; + } + + if(var15 > 1.0F) { + var15 = 1.0F; + } + + GL11.glEnable(GL11.GL_ALPHA_TEST); + this.mainModel.setLivingAnimations(var1, var16, var15, var9); + this.renderModel(var1, var16, var15, var13, var11 - var10, var12, var14); + + int var18; + float var19; + float var20; + float var22; + for(int var17 = 0; var17 < 4; ++var17) { + var18 = this.shouldRenderPass(var1, var17, var9); + if(var18 > 0) { + this.renderPassModel.setLivingAnimations(var1, var16, var15, var9); + this.renderPassModel.render(var1, var16, var15, var13, var11 - var10, var12, var14); + if((var18 & 240) == 16) { + this.func_82408_c(var1, var17, var9); + this.renderPassModel.render(var1, var16, var15, var13, var11 - var10, var12, var14); + } + + if((var18 & 15) == 15) { + var19 = (float)var1.ticksExisted + var9; + this.loadTexture("%blur%/misc/glint.png"); + GL11.glEnable(GL11.GL_BLEND); + var20 = 0.5F; + GL11.glColor4f(var20, var20, var20, 1.0F); + GL11.glDepthFunc(GL11.GL_EQUAL); + GL11.glDepthMask(false); + + for(int var21 = 0; var21 < 2; ++var21) { + GL11.glDisable(GL11.GL_LIGHTING); + var22 = 0.76F; + GL11.glColor4f(0.5F * var22, 0.25F * var22, 0.8F * var22, 1.0F); + GL11.glBlendFunc(GL11.GL_SRC_COLOR, GL11.GL_ONE); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + float var23 = var19 * (0.001F + (float)var21 * 0.003F) * 20.0F; + float var24 = 1.0F / 3.0F; + GL11.glScalef(var24, var24, var24); + GL11.glRotatef(30.0F - (float)var21 * 60.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, var23, 0.0F); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + this.renderPassModel.render(var1, var16, var15, var13, var11 - var10, var12, var14); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glDepthMask(true); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthFunc(GL11.GL_LEQUAL); + } + + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + } + } + + GL11.glDepthMask(true); + this.renderEquippedItems(var1, var9); + float var26 = var1.getBrightness(var9); + var18 = this.getColorMultiplier(var1, var26, var9); + OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GL11.glDisable(GL11.GL_TEXTURE_2D); + OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); + if((var18 >> 24 & 255) > 0 || var1.hurtTime > 0 || var1.deathTime > 0) { + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDepthFunc(GL11.GL_EQUAL); + if(var1.hurtTime > 0 || var1.deathTime > 0) { + GL11.glColor4f(var26, 0.0F, 0.0F, 0.4F); + this.mainModel.render(var1, var16, var15, var13, var11 - var10, var12, var14); + + for(int var27 = 0; var27 < 4; ++var27) { + if(this.inheritRenderPass(var1, var27, var9) >= 0) { + GL11.glColor4f(var26, 0.0F, 0.0F, 0.4F); + this.renderPassModel.render(var1, var16, var15, var13, var11 - var10, var12, var14); + } + } + } + + if((var18 >> 24 & 255) > 0) { + var19 = (float)(var18 >> 16 & 255) / 255.0F; + var20 = (float)(var18 >> 8 & 255) / 255.0F; + float var28 = (float)(var18 & 255) / 255.0F; + var22 = (float)(var18 >> 24 & 255) / 255.0F; + GL11.glColor4f(var19, var20, var28, var22); + this.mainModel.render(var1, var16, var15, var13, var11 - var10, var12, var14); + + for(int var29 = 0; var29 < 4; ++var29) { + if(this.inheritRenderPass(var1, var29, var9) >= 0) { + GL11.glColor4f(var19, var20, var28, var22); + this.renderPassModel.render(var1, var16, var15, var13, var11 - var10, var12, var14); + } + } + } + + GL11.glDepthFunc(GL11.GL_LEQUAL); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + } catch (Exception var25) { + var25.printStackTrace(); + } + + OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); + GL11.glEnable(GL11.GL_TEXTURE_2D); + OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glPopMatrix(); + this.passSpecialRender(var1, var2, var4, var6); + } + + protected void renderModel(EntityLiving var1, float var2, float var3, float var4, float var5, float var6, float var7) { + this.func_98190_a(var1); + if(!var1.isInvisible()) { + this.mainModel.render(var1, var2, var3, var4, var5, var6, var7); + } else if(!var1.func_98034_c(Minecraft.getMinecraft().thePlayer)) { + GL11.glPushMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.15F); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.003921569F); + this.mainModel.render(var1, var2, var3, var4, var5, var6, var7); + GL11.glDisable(GL11.GL_BLEND); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + GL11.glPopMatrix(); + GL11.glDepthMask(true); + } else { + this.mainModel.setRotationAngles(var2, var3, var4, var5, var6, var7, var1); + } + + } + + protected void func_98190_a(EntityLiving var1) { + this.loadTexture(var1.getTexture()); + } + + protected void renderLivingAt(EntityLiving var1, double var2, double var4, double var6) { + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + } + + protected void rotateCorpse(EntityLiving var1, float var2, float var3, float var4) { + GL11.glRotatef(180.0F - var3, 0.0F, 1.0F, 0.0F); + if(var1.deathTime > 0) { + float var5 = ((float)var1.deathTime + var4 - 1.0F) / 20.0F * 1.6F; + var5 = MathHelper.sqrt_float(var5); + if(var5 > 1.0F) { + var5 = 1.0F; + } + + GL11.glRotatef(var5 * this.getDeathMaxRotation(var1), 0.0F, 0.0F, 1.0F); + } + + } + + protected float renderSwingProgress(EntityLiving var1, float var2) { + return var1.getSwingProgress(var2); + } + + protected float handleRotationFloat(EntityLiving var1, float var2) { + return (float)var1.ticksExisted + var2; + } + + protected void renderEquippedItems(EntityLiving var1, float var2) { + } + + protected void renderArrowsStuckInEntity(EntityLiving var1, float var2) { + int var3 = var1.getArrowCountInEntity(); + if(var3 > 0) { + EntityArrow var4 = new EntityArrow(var1.worldObj, var1.posX, var1.posY, var1.posZ); + Random var5 = new Random((long)var1.entityId); + RenderHelper.disableStandardItemLighting(); + + for(int var6 = 0; var6 < var3; ++var6) { + GL11.glPushMatrix(); + ModelRenderer var7 = this.mainModel.getRandomModelBox(var5); + ModelBox var8 = (ModelBox)var7.cubeList.get(var5.nextInt(var7.cubeList.size())); + var7.postRender(1.0F / 16.0F); + float var9 = var5.nextFloat(); + float var10 = var5.nextFloat(); + float var11 = var5.nextFloat(); + float var12 = (var8.posX1 + (var8.posX2 - var8.posX1) * var9) / 16.0F; + float var13 = (var8.posY1 + (var8.posY2 - var8.posY1) * var10) / 16.0F; + float var14 = (var8.posZ1 + (var8.posZ2 - var8.posZ1) * var11) / 16.0F; + GL11.glTranslatef(var12, var13, var14); + var9 = var9 * 2.0F - 1.0F; + var10 = var10 * 2.0F - 1.0F; + var11 = var11 * 2.0F - 1.0F; + var9 *= -1.0F; + var10 *= -1.0F; + var11 *= -1.0F; + float var15 = MathHelper.sqrt_float(var9 * var9 + var11 * var11); + var4.prevRotationYaw = var4.rotationYaw = (float)(Math.atan2((double)var9, (double)var11) * 180.0D / (double)((float)Math.PI)); + var4.prevRotationPitch = var4.rotationPitch = (float)(Math.atan2((double)var10, (double)var15) * 180.0D / (double)((float)Math.PI)); + double var16 = 0.0D; + double var18 = 0.0D; + double var20 = 0.0D; + float var22 = 0.0F; + this.renderManager.renderEntityWithPosYaw(var4, var16, var18, var20, var22, var2); + GL11.glPopMatrix(); + } + + RenderHelper.enableStandardItemLighting(); + } + + } + + protected int inheritRenderPass(EntityLiving var1, int var2, float var3) { + return this.shouldRenderPass(var1, var2, var3); + } + + protected int shouldRenderPass(EntityLiving var1, int var2, float var3) { + return -1; + } + + protected void func_82408_c(EntityLiving var1, int var2, float var3) { + } + + protected float getDeathMaxRotation(EntityLiving var1) { + return 90.0F; + } + + protected int getColorMultiplier(EntityLiving var1, float var2, float var3) { + return 0; + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + } + + protected void passSpecialRender(EntityLiving var1, double var2, double var4, double var6) { + if(Minecraft.isGuiEnabled() && var1 != this.renderManager.livingPlayer && !var1.func_98034_c(Minecraft.getMinecraft().thePlayer) && (var1.func_94059_bO() || var1.func_94056_bM() && var1 == this.renderManager.field_96451_i)) { + float var8 = 1.6F; + float var9 = (float)(1.0D / 60.0D) * var8; + double var10 = var1.getDistanceSqToEntity(this.renderManager.livingPlayer); + float var12 = var1.isSneaking() ? 32.0F : 64.0F; + if(var10 < (double)(var12 * var12)) { + String var13 = var1.getTranslatedEntityName(); + if(var1.isSneaking()) { + FontRenderer var14 = this.getFontRendererFromRenderManager(); + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2 + 0.0F, (float)var4 + var1.height + 0.5F, (float)var6); + GL11.glNormal3f(0.0F, 1.0F, 0.0F); + GL11.glRotatef(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + GL11.glScalef(-var9, -var9, var9); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glTranslatef(0.0F, 0.25F / var9, 0.0F); + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + Tessellator var15 = Tessellator.instance; + GL11.glDisable(GL11.GL_TEXTURE_2D); + var15.startDrawingQuads(); + int var16 = var14.getStringWidth(var13) / 2; + var15.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F); + var15.addVertex((double)(-var16 - 1), -1.0D, 0.0D); + var15.addVertex((double)(-var16 - 1), 8.0D, 0.0D); + var15.addVertex((double)(var16 + 1), 8.0D, 0.0D); + var15.addVertex((double)(var16 + 1), -1.0D, 0.0D); + var15.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDepthMask(true); + var14.drawString(var13, -var14.getStringWidth(var13) / 2, 0, 553648127); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glPopMatrix(); + } else { + this.func_96449_a(var1, var2, var4, var6, var13, var9, var10); + } + } + } + + } + + protected void func_96449_a(EntityLiving var1, double var2, double var4, double var6, String var8, float var9, double var10) { + if(var1.isPlayerSleeping()) { + this.renderLivingLabel(var1, var8, var2, var4 - 1.5D, var6, 64); + } else { + this.renderLivingLabel(var1, var8, var2, var4, var6, 64); + } + + } + + protected void renderLivingLabel(EntityLiving var1, String var2, double var3, double var5, double var7, int var9) { + double var10 = var1.getDistanceSqToEntity(this.renderManager.livingPlayer); + if(var10 <= (double)(var9 * var9)) { + FontRenderer var12 = this.getFontRendererFromRenderManager(); + float var13 = 1.6F; + float var14 = (float)(1.0D / 60.0D) * var13; + GL11.glPushMatrix(); + GL11.glTranslatef((float)var3 + 0.0F, (float)var5 + var1.height + 0.5F, (float)var7); + GL11.glNormal3f(0.0F, 1.0F, 0.0F); + GL11.glRotatef(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + GL11.glScalef(-var14, -var14, var14); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDepthMask(false); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + Tessellator var15 = Tessellator.instance; + byte var16 = 0; + if(var2.equals("deadmau5")) { + var16 = -10; + } + + GL11.glDisable(GL11.GL_TEXTURE_2D); + var15.startDrawingQuads(); + int var17 = var12.getStringWidth(var2) / 2; + var15.setColorRGBA_F(0.0F, 0.0F, 0.0F, 0.25F); + var15.addVertex((double)(-var17 - 1), (double)(-1 + var16), 0.0D); + var15.addVertex((double)(-var17 - 1), (double)(8 + var16), 0.0D); + var15.addVertex((double)(var17 + 1), (double)(8 + var16), 0.0D); + var15.addVertex((double)(var17 + 1), (double)(-1 + var16), 0.0D); + var15.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + var12.drawString(var2, -var12.getStringWidth(var2) / 2, var16, 553648127); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glDepthMask(true); + var12.drawString(var2, -var12.getStringWidth(var2) / 2, var16, -1); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glPopMatrix(); + } + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.doRenderLiving((EntityLiving)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderMagmaCube.java b/src/net/minecraft/src/RenderMagmaCube.java new file mode 100644 index 0000000..f859ad0 --- /dev/null +++ b/src/net/minecraft/src/RenderMagmaCube.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +public class RenderMagmaCube extends RenderLiving { + private int field_77120_a = ((ModelMagmaCube)this.mainModel).func_78107_a(); + + public RenderMagmaCube() { + super(new ModelMagmaCube(), 0.25F); + } + + public void renderMagmaCube(EntityMagmaCube var1, double var2, double var4, double var6, float var8, float var9) { + int var10 = ((ModelMagmaCube)this.mainModel).func_78107_a(); + if(var10 != this.field_77120_a) { + this.field_77120_a = var10; + this.mainModel = new ModelMagmaCube(); + Minecraft.getMinecraft().getLogAgent().logInfo("Loaded new lava slime model"); + } + + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + protected void scaleMagmaCube(EntityMagmaCube var1, float var2) { + int var3 = var1.getSlimeSize(); + float var4 = (var1.field_70812_c + (var1.field_70811_b - var1.field_70812_c) * var2) / ((float)var3 * 0.5F + 1.0F); + float var5 = 1.0F / (var4 + 1.0F); + float var6 = (float)var3; + GL11.glScalef(var5 * var6, 1.0F / var5 * var6, var5 * var6); + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + this.scaleMagmaCube((EntityMagmaCube)var1, var2); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.renderMagmaCube((EntityMagmaCube)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderMagmaCube((EntityMagmaCube)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderManager.java b/src/net/minecraft/src/RenderManager.java new file mode 100644 index 0000000..0f76db1 --- /dev/null +++ b/src/net/minecraft/src/RenderManager.java @@ -0,0 +1,266 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import org.lwjgl.opengl.GL11; + +public class RenderManager { + private Map entityRenderMap = new HashMap(); + public static RenderManager instance = new RenderManager(); + private FontRenderer fontRenderer; + public static double renderPosX; + public static double renderPosY; + public static double renderPosZ; + public RenderEngine renderEngine; + public ItemRenderer itemRenderer; + public World worldObj; + public EntityLiving livingPlayer; + public EntityLiving field_96451_i; + public float playerViewY; + public float playerViewX; + public GameSettings options; + public double viewerPosX; + public double viewerPosY; + public double viewerPosZ; + public static boolean field_85095_o = false; + + private RenderManager() { + this.entityRenderMap.put(EntitySpider.class, new RenderSpider()); + this.entityRenderMap.put(EntityCaveSpider.class, new RenderSpider()); + this.entityRenderMap.put(EntityPig.class, new RenderPig(new ModelPig(), new ModelPig(0.5F), 0.7F)); + this.entityRenderMap.put(EntitySheep.class, new RenderSheep(new ModelSheep2(), new ModelSheep1(), 0.7F)); + this.entityRenderMap.put(EntityCow.class, new RenderCow(new ModelCow(), 0.7F)); + this.entityRenderMap.put(EntityMooshroom.class, new RenderMooshroom(new ModelCow(), 0.7F)); + this.entityRenderMap.put(EntityWolf.class, new RenderWolf(new ModelWolf(), new ModelWolf(), 0.5F)); + this.entityRenderMap.put(EntityChicken.class, new RenderChicken(new ModelChicken(), 0.3F)); + this.entityRenderMap.put(EntityOcelot.class, new RenderOcelot(new ModelOcelot(), 0.4F)); + this.entityRenderMap.put(EntitySilverfish.class, new RenderSilverfish()); + this.entityRenderMap.put(EntityCreeper.class, new RenderCreeper()); + this.entityRenderMap.put(EntityEnderman.class, new RenderEnderman()); + this.entityRenderMap.put(EntitySnowman.class, new RenderSnowMan()); + this.entityRenderMap.put(EntitySkeleton.class, new RenderSkeleton()); + this.entityRenderMap.put(EntityWitch.class, new RenderWitch()); + this.entityRenderMap.put(EntityBlaze.class, new RenderBlaze()); + this.entityRenderMap.put(EntityZombie.class, new RenderZombie()); + this.entityRenderMap.put(EntitySlime.class, new RenderSlime(new ModelSlime(16), new ModelSlime(0), 0.25F)); + this.entityRenderMap.put(EntityMagmaCube.class, new RenderMagmaCube()); + this.entityRenderMap.put(EntityPlayer.class, new RenderPlayer()); + this.entityRenderMap.put(EntityGiantZombie.class, new RenderGiantZombie(new ModelZombie(), 0.5F, 6.0F)); + this.entityRenderMap.put(EntityGhast.class, new RenderGhast()); + this.entityRenderMap.put(EntitySquid.class, new RenderSquid(new ModelSquid(), 0.7F)); + this.entityRenderMap.put(EntityVillager.class, new RenderVillager()); + this.entityRenderMap.put(EntityIronGolem.class, new RenderIronGolem()); + this.entityRenderMap.put(EntityLiving.class, new RenderLiving(new ModelBiped(), 0.5F)); + this.entityRenderMap.put(EntityBat.class, new RenderBat()); + this.entityRenderMap.put(EntityDragon.class, new RenderDragon()); + this.entityRenderMap.put(EntityEnderCrystal.class, new RenderEnderCrystal()); + this.entityRenderMap.put(EntityWither.class, new RenderWither()); + this.entityRenderMap.put(Entity.class, new RenderEntity()); + this.entityRenderMap.put(EntityPainting.class, new RenderPainting()); + this.entityRenderMap.put(EntityItemFrame.class, new RenderItemFrame()); + this.entityRenderMap.put(EntityArrow.class, new RenderArrow()); + this.entityRenderMap.put(EntitySnowball.class, new RenderSnowball(Item.snowball)); + this.entityRenderMap.put(EntityEnderPearl.class, new RenderSnowball(Item.enderPearl)); + this.entityRenderMap.put(EntityEnderEye.class, new RenderSnowball(Item.eyeOfEnder)); + this.entityRenderMap.put(EntityEgg.class, new RenderSnowball(Item.egg)); + this.entityRenderMap.put(EntityPotion.class, new RenderSnowball(Item.potion, 16384)); + this.entityRenderMap.put(EntityExpBottle.class, new RenderSnowball(Item.expBottle)); + this.entityRenderMap.put(EntityFireworkRocket.class, new RenderSnowball(Item.firework)); + this.entityRenderMap.put(EntityLargeFireball.class, new RenderFireball(2.0F)); + this.entityRenderMap.put(EntitySmallFireball.class, new RenderFireball(0.5F)); + this.entityRenderMap.put(EntityWitherSkull.class, new RenderWitherSkull()); + this.entityRenderMap.put(EntityItem.class, new RenderItem()); + this.entityRenderMap.put(EntityXPOrb.class, new RenderXPOrb()); + this.entityRenderMap.put(EntityTNTPrimed.class, new RenderTNTPrimed()); + this.entityRenderMap.put(EntityFallingSand.class, new RenderFallingSand()); + this.entityRenderMap.put(EntityMinecartTNT.class, new RenderTntMinecart()); + this.entityRenderMap.put(EntityMinecartMobSpawner.class, new RenderMinecartMobSpawner()); + this.entityRenderMap.put(EntityMinecart.class, new RenderMinecart()); + this.entityRenderMap.put(EntityBoat.class, new RenderBoat()); + this.entityRenderMap.put(EntityFishHook.class, new RenderFish()); + this.entityRenderMap.put(EntityLightningBolt.class, new RenderLightningBolt()); + Iterator var1 = this.entityRenderMap.values().iterator(); + + while(var1.hasNext()) { + Render var2 = (Render)var1.next(); + var2.setRenderManager(this); + } + + } + + public Render getEntityClassRenderObject(Class var1) { + Render var2 = (Render)this.entityRenderMap.get(var1); + if(var2 == null && var1 != Entity.class) { + var2 = this.getEntityClassRenderObject(var1.getSuperclass()); + this.entityRenderMap.put(var1, var2); + } + + return var2; + } + + public Render getEntityRenderObject(Entity var1) { + return this.getEntityClassRenderObject(var1.getClass()); + } + + public void cacheActiveRenderInfo(World var1, RenderEngine var2, FontRenderer var3, EntityLiving var4, EntityLiving var5, GameSettings var6, float var7) { + this.worldObj = var1; + this.renderEngine = var2; + this.options = var6; + this.livingPlayer = var4; + this.field_96451_i = var5; + this.fontRenderer = var3; + if(var4.isPlayerSleeping()) { + int var8 = var1.getBlockId(MathHelper.floor_double(var4.posX), MathHelper.floor_double(var4.posY), MathHelper.floor_double(var4.posZ)); + if(var8 == Block.bed.blockID) { + int var9 = var1.getBlockMetadata(MathHelper.floor_double(var4.posX), MathHelper.floor_double(var4.posY), MathHelper.floor_double(var4.posZ)); + int var10 = var9 & 3; + this.playerViewY = (float)(var10 * 90 + 180); + this.playerViewX = 0.0F; + } + } else { + this.playerViewY = var4.prevRotationYaw + (var4.rotationYaw - var4.prevRotationYaw) * var7; + this.playerViewX = var4.prevRotationPitch + (var4.rotationPitch - var4.prevRotationPitch) * var7; + } + + if(var6.thirdPersonView == 2) { + this.playerViewY += 180.0F; + } + + this.viewerPosX = var4.lastTickPosX + (var4.posX - var4.lastTickPosX) * (double)var7; + this.viewerPosY = var4.lastTickPosY + (var4.posY - var4.lastTickPosY) * (double)var7; + this.viewerPosZ = var4.lastTickPosZ + (var4.posZ - var4.lastTickPosZ) * (double)var7; + } + + public void renderEntity(Entity var1, float var2) { + if(var1.ticksExisted == 0) { + var1.lastTickPosX = var1.posX; + var1.lastTickPosY = var1.posY; + var1.lastTickPosZ = var1.posZ; + } + + double var3 = var1.lastTickPosX + (var1.posX - var1.lastTickPosX) * (double)var2; + double var5 = var1.lastTickPosY + (var1.posY - var1.lastTickPosY) * (double)var2; + double var7 = var1.lastTickPosZ + (var1.posZ - var1.lastTickPosZ) * (double)var2; + float var9 = var1.prevRotationYaw + (var1.rotationYaw - var1.prevRotationYaw) * var2; + int var10 = var1.getBrightnessForRender(var2); + if(var1.isBurning()) { + var10 = 15728880; + } + + int var11 = var10 % 65536; + int var12 = var10 / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var11 / 1.0F, (float)var12 / 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.renderEntityWithPosYaw(var1, var3 - renderPosX, var5 - renderPosY, var7 - renderPosZ, var9, var2); + } + + public void renderEntityWithPosYaw(Entity var1, double var2, double var4, double var6, float var8, float var9) { + Render var10 = null; + + try { + var10 = this.getEntityRenderObject(var1); + if(var10 != null && this.renderEngine != null) { + if(field_85095_o && !var1.isInvisible()) { + try { + this.func_85094_b(var1, var2, var4, var6, var8, var9); + } catch (Throwable var17) { + throw new ReportedException(CrashReport.makeCrashReport(var17, "Rendering entity hitbox in world")); + } + } + + try { + var10.doRender(var1, var2, var4, var6, var8, var9); + } catch (Throwable var16) { + throw new ReportedException(CrashReport.makeCrashReport(var16, "Rendering entity in world")); + } + + try { + var10.doRenderShadowAndFire(var1, var2, var4, var6, var8, var9); + } catch (Throwable var15) { + throw new ReportedException(CrashReport.makeCrashReport(var15, "Post-rendering entity in world")); + } + } + + } catch (Throwable var18) { + CrashReport var12 = CrashReport.makeCrashReport(var18, "Rendering entity in world"); + CrashReportCategory var13 = var12.makeCategory("Entity being rendered"); + var1.func_85029_a(var13); + CrashReportCategory var14 = var12.makeCategory("Renderer details"); + var14.addCrashSection("Assigned renderer", var10); + var14.addCrashSection("Location", CrashReportCategory.func_85074_a(var2, var4, var6)); + var14.addCrashSection("Rotation", Float.valueOf(var8)); + var14.addCrashSection("Delta", Float.valueOf(var9)); + throw new ReportedException(var12); + } + } + + private void func_85094_b(Entity var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glDepthMask(false); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_BLEND); + GL11.glPushMatrix(); + Tessellator var10 = Tessellator.instance; + var10.startDrawingQuads(); + var10.setColorRGBA(255, 255, 255, 32); + double var11 = (double)(-var1.width / 2.0F); + double var13 = (double)(-var1.width / 2.0F); + double var15 = (double)(var1.width / 2.0F); + double var17 = (double)(-var1.width / 2.0F); + double var19 = (double)(-var1.width / 2.0F); + double var21 = (double)(var1.width / 2.0F); + double var23 = (double)(var1.width / 2.0F); + double var25 = (double)(var1.width / 2.0F); + double var27 = (double)var1.height; + var10.addVertex(var2 + var11, var4 + var27, var6 + var13); + var10.addVertex(var2 + var11, var4, var6 + var13); + var10.addVertex(var2 + var15, var4, var6 + var17); + var10.addVertex(var2 + var15, var4 + var27, var6 + var17); + var10.addVertex(var2 + var23, var4 + var27, var6 + var25); + var10.addVertex(var2 + var23, var4, var6 + var25); + var10.addVertex(var2 + var19, var4, var6 + var21); + var10.addVertex(var2 + var19, var4 + var27, var6 + var21); + var10.addVertex(var2 + var15, var4 + var27, var6 + var17); + var10.addVertex(var2 + var15, var4, var6 + var17); + var10.addVertex(var2 + var23, var4, var6 + var25); + var10.addVertex(var2 + var23, var4 + var27, var6 + var25); + var10.addVertex(var2 + var19, var4 + var27, var6 + var21); + var10.addVertex(var2 + var19, var4, var6 + var21); + var10.addVertex(var2 + var11, var4, var6 + var13); + var10.addVertex(var2 + var11, var4 + var27, var6 + var13); + var10.draw(); + GL11.glPopMatrix(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthMask(true); + } + + public void set(World var1) { + this.worldObj = var1; + } + + public double getDistanceToCamera(double var1, double var3, double var5) { + double var7 = var1 - this.viewerPosX; + double var9 = var3 - this.viewerPosY; + double var11 = var5 - this.viewerPosZ; + return var7 * var7 + var9 * var9 + var11 * var11; + } + + public FontRenderer getFontRenderer() { + return this.fontRenderer; + } + + public void updateIcons(IconRegister var1) { + Iterator var2 = this.entityRenderMap.values().iterator(); + + while(var2.hasNext()) { + Render var3 = (Render)var2.next(); + var3.updateIcons(var1); + } + + } +} diff --git a/src/net/minecraft/src/RenderMinecart.java b/src/net/minecraft/src/RenderMinecart.java new file mode 100644 index 0000000..694997b --- /dev/null +++ b/src/net/minecraft/src/RenderMinecart.java @@ -0,0 +1,94 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderMinecart extends Render { + protected ModelBase modelMinecart; + protected final RenderBlocks field_94145_f; + + public RenderMinecart() { + this.shadowSize = 0.5F; + this.modelMinecart = new ModelMinecart(); + this.field_94145_f = new RenderBlocks(); + } + + public void renderTheMinecart(EntityMinecart var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + long var10 = (long)var1.entityId * 493286711L; + var10 = var10 * var10 * 4392167121L + var10 * 98761L; + float var12 = (((float)(var10 >> 16 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; + float var13 = (((float)(var10 >> 20 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; + float var14 = (((float)(var10 >> 24 & 7L) + 0.5F) / 8.0F - 0.5F) * 0.004F; + GL11.glTranslatef(var12, var13, var14); + double var15 = var1.lastTickPosX + (var1.posX - var1.lastTickPosX) * (double)var9; + double var17 = var1.lastTickPosY + (var1.posY - var1.lastTickPosY) * (double)var9; + double var19 = var1.lastTickPosZ + (var1.posZ - var1.lastTickPosZ) * (double)var9; + double var21 = (double)0.3F; + Vec3 var23 = var1.func_70489_a(var15, var17, var19); + float var24 = var1.prevRotationPitch + (var1.rotationPitch - var1.prevRotationPitch) * var9; + if(var23 != null) { + Vec3 var25 = var1.func_70495_a(var15, var17, var19, var21); + Vec3 var26 = var1.func_70495_a(var15, var17, var19, -var21); + if(var25 == null) { + var25 = var23; + } + + if(var26 == null) { + var26 = var23; + } + + var2 += var23.xCoord - var15; + var4 += (var25.yCoord + var26.yCoord) / 2.0D - var17; + var6 += var23.zCoord - var19; + Vec3 var27 = var26.addVector(-var25.xCoord, -var25.yCoord, -var25.zCoord); + if(var27.lengthVector() != 0.0D) { + var27 = var27.normalize(); + var8 = (float)(Math.atan2(var27.zCoord, var27.xCoord) * 180.0D / Math.PI); + var24 = (float)(Math.atan(var27.yCoord) * 73.0D); + } + } + + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + GL11.glRotatef(180.0F - var8, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var24, 0.0F, 0.0F, 1.0F); + float var31 = (float)var1.getRollingAmplitude() - var9; + float var32 = (float)var1.getDamage() - var9; + if(var32 < 0.0F) { + var32 = 0.0F; + } + + if(var31 > 0.0F) { + GL11.glRotatef(MathHelper.sin(var31) * var31 * var32 / 10.0F * (float)var1.getRollingDirection(), 1.0F, 0.0F, 0.0F); + } + + int var33 = var1.getDisplayTileOffset(); + Block var28 = var1.getDisplayTile(); + int var29 = var1.getDisplayTileData(); + if(var28 != null) { + GL11.glPushMatrix(); + this.loadTexture("/terrain.png"); + float var30 = 12.0F / 16.0F; + GL11.glScalef(var30, var30, var30); + GL11.glTranslatef(0.0F, (float)var33 / 16.0F, 0.0F); + this.renderBlockInMinecart(var1, var9, var28, var29); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + this.loadTexture("/item/cart.png"); + GL11.glScalef(-1.0F, -1.0F, 1.0F); + this.modelMinecart.render(var1, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 1.0F / 16.0F); + GL11.glPopMatrix(); + } + + protected void renderBlockInMinecart(EntityMinecart var1, float var2, Block var3, int var4) { + float var5 = var1.getBrightness(var2); + GL11.glPushMatrix(); + this.field_94145_f.renderBlockAsItem(var3, var4, var5); + GL11.glPopMatrix(); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderTheMinecart((EntityMinecart)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderMinecartMobSpawner.java b/src/net/minecraft/src/RenderMinecartMobSpawner.java new file mode 100644 index 0000000..46ac1c2 --- /dev/null +++ b/src/net/minecraft/src/RenderMinecartMobSpawner.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class RenderMinecartMobSpawner extends RenderMinecart { + protected void func_98192_a(EntityMinecartMobSpawner var1, float var2, Block var3, int var4) { + super.renderBlockInMinecart(var1, var2, var3, var4); + if(var3 == Block.mobSpawner) { + TileEntityMobSpawnerRenderer.func_98144_a(var1.func_98039_d(), var1.posX, var1.posY, var1.posZ, var2); + } + + } + + protected void renderBlockInMinecart(EntityMinecart var1, float var2, Block var3, int var4) { + this.func_98192_a((EntityMinecartMobSpawner)var1, var2, var3, var4); + } +} diff --git a/src/net/minecraft/src/RenderMooshroom.java b/src/net/minecraft/src/RenderMooshroom.java new file mode 100644 index 0000000..017967f --- /dev/null +++ b/src/net/minecraft/src/RenderMooshroom.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderMooshroom extends RenderLiving { + public RenderMooshroom(ModelBase var1, float var2) { + super(var1, var2); + } + + public void renderLivingMooshroom(EntityMooshroom var1, double var2, double var4, double var6, float var8, float var9) { + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + protected void renderMooshroomEquippedItems(EntityMooshroom var1, float var2) { + super.renderEquippedItems(var1, var2); + if(!var1.isChild()) { + this.loadTexture("/terrain.png"); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glPushMatrix(); + GL11.glScalef(1.0F, -1.0F, 1.0F); + GL11.glTranslatef(0.2F, 0.4F, 0.5F); + GL11.glRotatef(42.0F, 0.0F, 1.0F, 0.0F); + this.renderBlocks.renderBlockAsItem(Block.mushroomRed, 0, 1.0F); + GL11.glTranslatef(0.1F, 0.0F, -0.6F); + GL11.glRotatef(42.0F, 0.0F, 1.0F, 0.0F); + this.renderBlocks.renderBlockAsItem(Block.mushroomRed, 0, 1.0F); + GL11.glPopMatrix(); + GL11.glPushMatrix(); + ((ModelQuadruped)this.mainModel).head.postRender(1.0F / 16.0F); + GL11.glScalef(1.0F, -1.0F, 1.0F); + GL11.glTranslatef(0.0F, 12.0F / 16.0F, -0.2F); + GL11.glRotatef(12.0F, 0.0F, 1.0F, 0.0F); + this.renderBlocks.renderBlockAsItem(Block.mushroomRed, 0, 1.0F); + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_CULL_FACE); + } + } + + protected void renderEquippedItems(EntityLiving var1, float var2) { + this.renderMooshroomEquippedItems((EntityMooshroom)var1, var2); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.renderLivingMooshroom((EntityMooshroom)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderLivingMooshroom((EntityMooshroom)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderOcelot.java b/src/net/minecraft/src/RenderOcelot.java new file mode 100644 index 0000000..bc78a28 --- /dev/null +++ b/src/net/minecraft/src/RenderOcelot.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderOcelot extends RenderLiving { + public RenderOcelot(ModelBase var1, float var2) { + super(var1, var2); + } + + public void renderLivingOcelot(EntityOcelot var1, double var2, double var4, double var6, float var8, float var9) { + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + protected void preRenderOcelot(EntityOcelot var1, float var2) { + super.preRenderCallback(var1, var2); + if(var1.isTamed()) { + GL11.glScalef(0.8F, 0.8F, 0.8F); + } + + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + this.preRenderOcelot((EntityOcelot)var1, var2); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.renderLivingOcelot((EntityOcelot)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderLivingOcelot((EntityOcelot)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderPainting.java b/src/net/minecraft/src/RenderPainting.java new file mode 100644 index 0000000..a0a95cf --- /dev/null +++ b/src/net/minecraft/src/RenderPainting.java @@ -0,0 +1,117 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderPainting extends Render { + public void renderThePainting(EntityPainting var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + GL11.glRotatef(var8, 0.0F, 1.0F, 0.0F); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + this.loadTexture("/art/kz.png"); + EnumArt var10 = var1.art; + float var11 = 1.0F / 16.0F; + GL11.glScalef(var11, var11, var11); + this.func_77010_a(var1, var10.sizeX, var10.sizeY, var10.offsetX, var10.offsetY); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } + + private void func_77010_a(EntityPainting var1, int var2, int var3, int var4, int var5) { + float var6 = (float)(-var2) / 2.0F; + float var7 = (float)(-var3) / 2.0F; + float var8 = 0.5F; + float var9 = 12.0F / 16.0F; + float var10 = 13.0F / 16.0F; + float var11 = 0.0F; + float var12 = 1.0F / 16.0F; + float var13 = 12.0F / 16.0F; + float var14 = 13.0F / 16.0F; + float var15 = 0.001953125F; + float var16 = 0.001953125F; + float var17 = 385.0F / 512.0F; + float var18 = 385.0F / 512.0F; + float var19 = 0.0F; + float var20 = 1.0F / 16.0F; + + for(int var21 = 0; var21 < var2 / 16; ++var21) { + for(int var22 = 0; var22 < var3 / 16; ++var22) { + float var23 = var6 + (float)((var21 + 1) * 16); + float var24 = var6 + (float)(var21 * 16); + float var25 = var7 + (float)((var22 + 1) * 16); + float var26 = var7 + (float)(var22 * 16); + this.func_77008_a(var1, (var23 + var24) / 2.0F, (var25 + var26) / 2.0F); + float var27 = (float)(var4 + var2 - var21 * 16) / 256.0F; + float var28 = (float)(var4 + var2 - (var21 + 1) * 16) / 256.0F; + float var29 = (float)(var5 + var3 - var22 * 16) / 256.0F; + float var30 = (float)(var5 + var3 - (var22 + 1) * 16) / 256.0F; + Tessellator var31 = Tessellator.instance; + var31.startDrawingQuads(); + var31.setNormal(0.0F, 0.0F, -1.0F); + var31.addVertexWithUV((double)var23, (double)var26, (double)(-var8), (double)var28, (double)var29); + var31.addVertexWithUV((double)var24, (double)var26, (double)(-var8), (double)var27, (double)var29); + var31.addVertexWithUV((double)var24, (double)var25, (double)(-var8), (double)var27, (double)var30); + var31.addVertexWithUV((double)var23, (double)var25, (double)(-var8), (double)var28, (double)var30); + var31.setNormal(0.0F, 0.0F, 1.0F); + var31.addVertexWithUV((double)var23, (double)var25, (double)var8, (double)var9, (double)var11); + var31.addVertexWithUV((double)var24, (double)var25, (double)var8, (double)var10, (double)var11); + var31.addVertexWithUV((double)var24, (double)var26, (double)var8, (double)var10, (double)var12); + var31.addVertexWithUV((double)var23, (double)var26, (double)var8, (double)var9, (double)var12); + var31.setNormal(0.0F, 1.0F, 0.0F); + var31.addVertexWithUV((double)var23, (double)var25, (double)(-var8), (double)var13, (double)var15); + var31.addVertexWithUV((double)var24, (double)var25, (double)(-var8), (double)var14, (double)var15); + var31.addVertexWithUV((double)var24, (double)var25, (double)var8, (double)var14, (double)var16); + var31.addVertexWithUV((double)var23, (double)var25, (double)var8, (double)var13, (double)var16); + var31.setNormal(0.0F, -1.0F, 0.0F); + var31.addVertexWithUV((double)var23, (double)var26, (double)var8, (double)var13, (double)var15); + var31.addVertexWithUV((double)var24, (double)var26, (double)var8, (double)var14, (double)var15); + var31.addVertexWithUV((double)var24, (double)var26, (double)(-var8), (double)var14, (double)var16); + var31.addVertexWithUV((double)var23, (double)var26, (double)(-var8), (double)var13, (double)var16); + var31.setNormal(-1.0F, 0.0F, 0.0F); + var31.addVertexWithUV((double)var23, (double)var25, (double)var8, (double)var18, (double)var19); + var31.addVertexWithUV((double)var23, (double)var26, (double)var8, (double)var18, (double)var20); + var31.addVertexWithUV((double)var23, (double)var26, (double)(-var8), (double)var17, (double)var20); + var31.addVertexWithUV((double)var23, (double)var25, (double)(-var8), (double)var17, (double)var19); + var31.setNormal(1.0F, 0.0F, 0.0F); + var31.addVertexWithUV((double)var24, (double)var25, (double)(-var8), (double)var18, (double)var19); + var31.addVertexWithUV((double)var24, (double)var26, (double)(-var8), (double)var18, (double)var20); + var31.addVertexWithUV((double)var24, (double)var26, (double)var8, (double)var17, (double)var20); + var31.addVertexWithUV((double)var24, (double)var25, (double)var8, (double)var17, (double)var19); + var31.draw(); + } + } + + } + + private void func_77008_a(EntityPainting var1, float var2, float var3) { + int var4 = MathHelper.floor_double(var1.posX); + int var5 = MathHelper.floor_double(var1.posY + (double)(var3 / 16.0F)); + int var6 = MathHelper.floor_double(var1.posZ); + if(var1.hangingDirection == 2) { + var4 = MathHelper.floor_double(var1.posX + (double)(var2 / 16.0F)); + } + + if(var1.hangingDirection == 1) { + var6 = MathHelper.floor_double(var1.posZ - (double)(var2 / 16.0F)); + } + + if(var1.hangingDirection == 0) { + var4 = MathHelper.floor_double(var1.posX - (double)(var2 / 16.0F)); + } + + if(var1.hangingDirection == 3) { + var6 = MathHelper.floor_double(var1.posZ + (double)(var2 / 16.0F)); + } + + int var7 = this.renderManager.worldObj.getLightBrightnessForSkyBlocks(var4, var5, var6, 0); + int var8 = var7 % 65536; + int var9 = var7 / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var8, (float)var9); + GL11.glColor3f(1.0F, 1.0F, 1.0F); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderThePainting((EntityPainting)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderPig.java b/src/net/minecraft/src/RenderPig.java new file mode 100644 index 0000000..1629b08 --- /dev/null +++ b/src/net/minecraft/src/RenderPig.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +public class RenderPig extends RenderLiving { + public RenderPig(ModelBase var1, ModelBase var2, float var3) { + super(var1, var3); + this.setRenderPassModel(var2); + } + + protected int renderSaddledPig(EntityPig var1, int var2, float var3) { + if(var2 == 0 && var1.getSaddled()) { + this.loadTexture("/mob/saddle.png"); + return 1; + } else { + return -1; + } + } + + public void renderLivingPig(EntityPig var1, double var2, double var4, double var6, float var8, float var9) { + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + protected int shouldRenderPass(EntityLiving var1, int var2, float var3) { + return this.renderSaddledPig((EntityPig)var1, var2, var3); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.renderLivingPig((EntityPig)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderLivingPig((EntityPig)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderPlayer.java b/src/net/minecraft/src/RenderPlayer.java new file mode 100644 index 0000000..ce86793 --- /dev/null +++ b/src/net/minecraft/src/RenderPlayer.java @@ -0,0 +1,377 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderPlayer extends RenderLiving { + private ModelBiped modelBipedMain = (ModelBiped)this.mainModel; + private ModelBiped modelArmorChestplate = new ModelBiped(1.0F); + private ModelBiped modelArmor = new ModelBiped(0.5F); + private static final String[] armorFilenamePrefix = new String[]{"cloth", "chain", "iron", "diamond", "gold"}; + + public RenderPlayer() { + super(new ModelBiped(0.0F), 0.5F); + } + + protected void func_98191_a(EntityPlayer var1) { + this.loadDownloadableImageTexture(var1.skinUrl, var1.getTexture()); + } + + protected int setArmorModel(EntityPlayer var1, int var2, float var3) { + ItemStack var4 = var1.inventory.armorItemInSlot(3 - var2); + if(var4 != null) { + Item var5 = var4.getItem(); + if(var5 instanceof ItemArmor) { + ItemArmor var6 = (ItemArmor)var5; + this.loadTexture("/armor/" + armorFilenamePrefix[var6.renderIndex] + "_" + (var2 == 2 ? 2 : 1) + ".png"); + ModelBiped var7 = var2 == 2 ? this.modelArmor : this.modelArmorChestplate; + var7.bipedHead.showModel = var2 == 0; + var7.bipedHeadwear.showModel = var2 == 0; + var7.bipedBody.showModel = var2 == 1 || var2 == 2; + var7.bipedRightArm.showModel = var2 == 1; + var7.bipedLeftArm.showModel = var2 == 1; + var7.bipedRightLeg.showModel = var2 == 2 || var2 == 3; + var7.bipedLeftLeg.showModel = var2 == 2 || var2 == 3; + this.setRenderPassModel(var7); + if(var7 != null) { + var7.onGround = this.mainModel.onGround; + } + + if(var7 != null) { + var7.isRiding = this.mainModel.isRiding; + } + + if(var7 != null) { + var7.isChild = this.mainModel.isChild; + } + + float var8 = 1.0F; + if(var6.getArmorMaterial() == EnumArmorMaterial.CLOTH) { + int var9 = var6.getColor(var4); + float var10 = (float)(var9 >> 16 & 255) / 255.0F; + float var11 = (float)(var9 >> 8 & 255) / 255.0F; + float var12 = (float)(var9 & 255) / 255.0F; + GL11.glColor3f(var8 * var10, var8 * var11, var8 * var12); + if(var4.isItemEnchanted()) { + return 31; + } + + return 16; + } + + GL11.glColor3f(var8, var8, var8); + if(var4.isItemEnchanted()) { + return 15; + } + + return 1; + } + } + + return -1; + } + + protected void func_82439_b(EntityPlayer var1, int var2, float var3) { + ItemStack var4 = var1.inventory.armorItemInSlot(3 - var2); + if(var4 != null) { + Item var5 = var4.getItem(); + if(var5 instanceof ItemArmor) { + ItemArmor var6 = (ItemArmor)var5; + this.loadTexture("/armor/" + armorFilenamePrefix[var6.renderIndex] + "_" + (var2 == 2 ? 2 : 1) + "_b.png"); + float var7 = 1.0F; + GL11.glColor3f(var7, var7, var7); + } + } + + } + + public void renderPlayer(EntityPlayer var1, double var2, double var4, double var6, float var8, float var9) { + float var10 = 1.0F; + GL11.glColor3f(var10, var10, var10); + ItemStack var11 = var1.inventory.getCurrentItem(); + this.modelArmorChestplate.heldItemRight = this.modelArmor.heldItemRight = this.modelBipedMain.heldItemRight = var11 != null ? 1 : 0; + if(var11 != null && var1.getItemInUseCount() > 0) { + EnumAction var12 = var11.getItemUseAction(); + if(var12 == EnumAction.block) { + this.modelArmorChestplate.heldItemRight = this.modelArmor.heldItemRight = this.modelBipedMain.heldItemRight = 3; + } else if(var12 == EnumAction.bow) { + this.modelArmorChestplate.aimedBow = this.modelArmor.aimedBow = this.modelBipedMain.aimedBow = true; + } + } + + this.modelArmorChestplate.isSneak = this.modelArmor.isSneak = this.modelBipedMain.isSneak = var1.isSneaking(); + double var14 = var4 - (double)var1.yOffset; + if(var1.isSneaking() && !(var1 instanceof EntityPlayerSP)) { + var14 -= 0.125D; + } + + super.doRenderLiving(var1, var2, var14, var6, var8, var9); + this.modelArmorChestplate.aimedBow = this.modelArmor.aimedBow = this.modelBipedMain.aimedBow = false; + this.modelArmorChestplate.isSneak = this.modelArmor.isSneak = this.modelBipedMain.isSneak = false; + this.modelArmorChestplate.heldItemRight = this.modelArmor.heldItemRight = this.modelBipedMain.heldItemRight = 0; + } + + protected void renderSpecials(EntityPlayer var1, float var2) { + float var3 = 1.0F; + GL11.glColor3f(var3, var3, var3); + super.renderEquippedItems(var1, var2); + super.renderArrowsStuckInEntity(var1, var2); + ItemStack var4 = var1.inventory.armorItemInSlot(3); + if(var4 != null) { + GL11.glPushMatrix(); + this.modelBipedMain.bipedHead.postRender(1.0F / 16.0F); + float var5; + if(var4.getItem().itemID < 256) { + if(RenderBlocks.renderItemIn3d(Block.blocksList[var4.itemID].getRenderType())) { + var5 = 10.0F / 16.0F; + GL11.glTranslatef(0.0F, -0.25F, 0.0F); + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glScalef(var5, -var5, -var5); + } + + this.renderManager.itemRenderer.renderItem(var1, var4, 0); + } else if(var4.getItem().itemID == Item.skull.itemID) { + var5 = 1.0625F; + GL11.glScalef(var5, -var5, -var5); + String var6 = ""; + if(var4.hasTagCompound() && var4.getTagCompound().hasKey("SkullOwner")) { + var6 = var4.getTagCompound().getString("SkullOwner"); + } + + TileEntitySkullRenderer.skullRenderer.func_82393_a(-0.5F, 0.0F, -0.5F, 1, 180.0F, var4.getItemDamage(), var6); + } + + GL11.glPopMatrix(); + } + + float var7; + float var8; + if(var1.username.equals("deadmau5") && this.loadDownloadableImageTexture(var1.skinUrl, (String)null)) { + for(int var20 = 0; var20 < 2; ++var20) { + float var23 = var1.prevRotationYaw + (var1.rotationYaw - var1.prevRotationYaw) * var2 - (var1.prevRenderYawOffset + (var1.renderYawOffset - var1.prevRenderYawOffset) * var2); + var7 = var1.prevRotationPitch + (var1.rotationPitch - var1.prevRotationPitch) * var2; + GL11.glPushMatrix(); + GL11.glRotatef(var23, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(var7, 1.0F, 0.0F, 0.0F); + GL11.glTranslatef(6.0F / 16.0F * (float)(var20 * 2 - 1), 0.0F, 0.0F); + GL11.glTranslatef(0.0F, -(6.0F / 16.0F), 0.0F); + GL11.glRotatef(-var7, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-var23, 0.0F, 1.0F, 0.0F); + var8 = 4.0F / 3.0F; + GL11.glScalef(var8, var8, var8); + this.modelBipedMain.renderEars(1.0F / 16.0F); + GL11.glPopMatrix(); + } + } + + float var11; + if(this.loadDownloadableImageTexture(var1.cloakUrl, (String)null) && !var1.isInvisible() && !var1.getHideCape()) { + GL11.glPushMatrix(); + GL11.glTranslatef(0.0F, 0.0F, 2.0F / 16.0F); + double var21 = var1.field_71091_bM + (var1.field_71094_bP - var1.field_71091_bM) * (double)var2 - (var1.prevPosX + (var1.posX - var1.prevPosX) * (double)var2); + double var24 = var1.field_71096_bN + (var1.field_71095_bQ - var1.field_71096_bN) * (double)var2 - (var1.prevPosY + (var1.posY - var1.prevPosY) * (double)var2); + double var9 = var1.field_71097_bO + (var1.field_71085_bR - var1.field_71097_bO) * (double)var2 - (var1.prevPosZ + (var1.posZ - var1.prevPosZ) * (double)var2); + var11 = var1.prevRenderYawOffset + (var1.renderYawOffset - var1.prevRenderYawOffset) * var2; + double var12 = (double)MathHelper.sin(var11 * (float)Math.PI / 180.0F); + double var14 = (double)(-MathHelper.cos(var11 * (float)Math.PI / 180.0F)); + float var16 = (float)var24 * 10.0F; + if(var16 < -6.0F) { + var16 = -6.0F; + } + + if(var16 > 32.0F) { + var16 = 32.0F; + } + + float var17 = (float)(var21 * var12 + var9 * var14) * 100.0F; + float var18 = (float)(var21 * var14 - var9 * var12) * 100.0F; + if(var17 < 0.0F) { + var17 = 0.0F; + } + + float var19 = var1.prevCameraYaw + (var1.cameraYaw - var1.prevCameraYaw) * var2; + var16 += MathHelper.sin((var1.prevDistanceWalkedModified + (var1.distanceWalkedModified - var1.prevDistanceWalkedModified) * var2) * 6.0F) * 32.0F * var19; + if(var1.isSneaking()) { + var16 += 25.0F; + } + + GL11.glRotatef(6.0F + var17 / 2.0F + var16, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(var18 / 2.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-var18 / 2.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + this.modelBipedMain.renderCloak(1.0F / 16.0F); + GL11.glPopMatrix(); + } + + ItemStack var22 = var1.inventory.getCurrentItem(); + if(var22 != null) { + GL11.glPushMatrix(); + this.modelBipedMain.bipedRightArm.postRender(1.0F / 16.0F); + GL11.glTranslatef(-(1.0F / 16.0F), 7.0F / 16.0F, 1.0F / 16.0F); + if(var1.fishEntity != null) { + var22 = new ItemStack(Item.stick); + } + + EnumAction var25 = null; + if(var1.getItemInUseCount() > 0) { + var25 = var22.getItemUseAction(); + } + + if(var22.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var22.itemID].getRenderType())) { + var7 = 0.5F; + GL11.glTranslatef(0.0F, 3.0F / 16.0F, -(5.0F / 16.0F)); + var7 *= 12.0F / 16.0F; + GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + GL11.glScalef(-var7, -var7, var7); + } else if(var22.itemID == Item.bow.itemID) { + var7 = 10.0F / 16.0F; + GL11.glTranslatef(0.0F, 2.0F / 16.0F, 5.0F / 16.0F); + GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F); + GL11.glScalef(var7, -var7, var7); + GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + } else if(Item.itemsList[var22.itemID].isFull3D()) { + var7 = 10.0F / 16.0F; + if(Item.itemsList[var22.itemID].shouldRotateAroundWhenRendering()) { + GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, -(2.0F / 16.0F), 0.0F); + } + + if(var1.getItemInUseCount() > 0 && var25 == EnumAction.block) { + GL11.glTranslatef(0.05F, 0.0F, -0.1F); + GL11.glRotatef(-50.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-10.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(-60.0F, 0.0F, 0.0F, 1.0F); + } + + GL11.glTranslatef(0.0F, 3.0F / 16.0F, 0.0F); + GL11.glScalef(var7, -var7, var7); + GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + } else { + var7 = 6.0F / 16.0F; + GL11.glTranslatef(0.25F, 3.0F / 16.0F, -(3.0F / 16.0F)); + GL11.glScalef(var7, var7, var7); + GL11.glRotatef(60.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(20.0F, 0.0F, 0.0F, 1.0F); + } + + float var10; + int var27; + float var28; + if(var22.getItem().requiresMultipleRenderPasses()) { + for(var27 = 0; var27 <= 1; ++var27) { + int var26 = var22.getItem().getColorFromItemStack(var22, var27); + var28 = (float)(var26 >> 16 & 255) / 255.0F; + var10 = (float)(var26 >> 8 & 255) / 255.0F; + var11 = (float)(var26 & 255) / 255.0F; + GL11.glColor4f(var28, var10, var11, 1.0F); + this.renderManager.itemRenderer.renderItem(var1, var22, var27); + } + } else { + var27 = var22.getItem().getColorFromItemStack(var22, 0); + var8 = (float)(var27 >> 16 & 255) / 255.0F; + var28 = (float)(var27 >> 8 & 255) / 255.0F; + var10 = (float)(var27 & 255) / 255.0F; + GL11.glColor4f(var8, var28, var10, 1.0F); + this.renderManager.itemRenderer.renderItem(var1, var22, 0); + } + + GL11.glPopMatrix(); + } + + } + + protected void renderPlayerScale(EntityPlayer var1, float var2) { + float var3 = 15.0F / 16.0F; + GL11.glScalef(var3, var3, var3); + } + + protected void func_96450_a(EntityPlayer var1, double var2, double var4, double var6, String var8, float var9, double var10) { + if(var10 < 100.0D) { + Scoreboard var12 = var1.getWorldScoreboard(); + ScoreObjective var13 = var12.func_96539_a(2); + if(var13 != null) { + Score var14 = var12.func_96529_a(var1.getEntityName(), var13); + if(var1.isPlayerSleeping()) { + this.renderLivingLabel(var1, var14.func_96652_c() + " " + var13.getDisplayName(), var2, var4 - 1.5D, var6, 64); + } else { + this.renderLivingLabel(var1, var14.func_96652_c() + " " + var13.getDisplayName(), var2, var4, var6, 64); + } + + var4 += (double)((float)this.getFontRendererFromRenderManager().FONT_HEIGHT * 1.15F * var9); + } + } + + super.func_96449_a(var1, var2, var4, var6, var8, var9, var10); + } + + public void renderFirstPersonArm(EntityPlayer var1) { + float var2 = 1.0F; + GL11.glColor3f(var2, var2, var2); + this.modelBipedMain.onGround = 0.0F; + this.modelBipedMain.setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F / 16.0F, var1); + this.modelBipedMain.bipedRightArm.render(1.0F / 16.0F); + } + + protected void renderPlayerSleep(EntityPlayer var1, double var2, double var4, double var6) { + if(var1.isEntityAlive() && var1.isPlayerSleeping()) { + super.renderLivingAt(var1, var2 + (double)var1.field_71079_bU, var4 + (double)var1.field_71082_cx, var6 + (double)var1.field_71089_bV); + } else { + super.renderLivingAt(var1, var2, var4, var6); + } + + } + + protected void rotatePlayer(EntityPlayer var1, float var2, float var3, float var4) { + if(var1.isEntityAlive() && var1.isPlayerSleeping()) { + GL11.glRotatef(var1.getBedOrientationInDegrees(), 0.0F, 1.0F, 0.0F); + GL11.glRotatef(this.getDeathMaxRotation(var1), 0.0F, 0.0F, 1.0F); + GL11.glRotatef(270.0F, 0.0F, 1.0F, 0.0F); + } else { + super.rotateCorpse(var1, var2, var3, var4); + } + + } + + protected void func_96449_a(EntityLiving var1, double var2, double var4, double var6, String var8, float var9, double var10) { + this.func_96450_a((EntityPlayer)var1, var2, var4, var6, var8, var9, var10); + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + this.renderPlayerScale((EntityPlayer)var1, var2); + } + + protected void func_82408_c(EntityLiving var1, int var2, float var3) { + this.func_82439_b((EntityPlayer)var1, var2, var3); + } + + protected int shouldRenderPass(EntityLiving var1, int var2, float var3) { + return this.setArmorModel((EntityPlayer)var1, var2, var3); + } + + protected void renderEquippedItems(EntityLiving var1, float var2) { + this.renderSpecials((EntityPlayer)var1, var2); + } + + protected void rotateCorpse(EntityLiving var1, float var2, float var3, float var4) { + this.rotatePlayer((EntityPlayer)var1, var2, var3, var4); + } + + protected void renderLivingAt(EntityLiving var1, double var2, double var4, double var6) { + this.renderPlayerSleep((EntityPlayer)var1, var2, var4, var6); + } + + protected void func_98190_a(EntityLiving var1) { + this.func_98191_a((EntityPlayer)var1); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.renderPlayer((EntityPlayer)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderPlayer((EntityPlayer)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderSheep.java b/src/net/minecraft/src/RenderSheep.java new file mode 100644 index 0000000..00f0cee --- /dev/null +++ b/src/net/minecraft/src/RenderSheep.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderSheep extends RenderLiving { + public RenderSheep(ModelBase var1, ModelBase var2, float var3) { + super(var1, var3); + this.setRenderPassModel(var2); + } + + protected int setWoolColorAndRender(EntitySheep var1, int var2, float var3) { + if(var2 == 0 && !var1.getSheared()) { + this.loadTexture("/mob/sheep_fur.png"); + float var4 = 1.0F; + int var5 = var1.getFleeceColor(); + GL11.glColor3f(var4 * EntitySheep.fleeceColorTable[var5][0], var4 * EntitySheep.fleeceColorTable[var5][1], var4 * EntitySheep.fleeceColorTable[var5][2]); + return 1; + } else { + return -1; + } + } + + protected int shouldRenderPass(EntityLiving var1, int var2, float var3) { + return this.setWoolColorAndRender((EntitySheep)var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/RenderSilverfish.java b/src/net/minecraft/src/RenderSilverfish.java new file mode 100644 index 0000000..0f978fb --- /dev/null +++ b/src/net/minecraft/src/RenderSilverfish.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +public class RenderSilverfish extends RenderLiving { + public RenderSilverfish() { + super(new ModelSilverfish(), 0.3F); + } + + protected float getSilverfishDeathRotation(EntitySilverfish var1) { + return 180.0F; + } + + public void renderSilverfish(EntitySilverfish var1, double var2, double var4, double var6, float var8, float var9) { + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + protected int shouldSilverfishRenderPass(EntitySilverfish var1, int var2, float var3) { + return -1; + } + + protected float getDeathMaxRotation(EntityLiving var1) { + return this.getSilverfishDeathRotation((EntitySilverfish)var1); + } + + protected int shouldRenderPass(EntityLiving var1, int var2, float var3) { + return this.shouldSilverfishRenderPass((EntitySilverfish)var1, var2, var3); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.renderSilverfish((EntitySilverfish)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderSilverfish((EntitySilverfish)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderSkeleton.java b/src/net/minecraft/src/RenderSkeleton.java new file mode 100644 index 0000000..e22b108 --- /dev/null +++ b/src/net/minecraft/src/RenderSkeleton.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderSkeleton extends RenderBiped { + public RenderSkeleton() { + super(new ModelSkeleton(), 0.5F); + } + + protected void func_82438_a(EntitySkeleton var1, float var2) { + if(var1.getSkeletonType() == 1) { + GL11.glScalef(1.2F, 1.2F, 1.2F); + } + + } + + protected void func_82422_c() { + GL11.glTranslatef(0.09375F, 3.0F / 16.0F, 0.0F); + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + this.func_82438_a((EntitySkeleton)var1, var2); + } +} diff --git a/src/net/minecraft/src/RenderSlime.java b/src/net/minecraft/src/RenderSlime.java new file mode 100644 index 0000000..3a23c48 --- /dev/null +++ b/src/net/minecraft/src/RenderSlime.java @@ -0,0 +1,46 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderSlime extends RenderLiving { + private ModelBase scaleAmount; + + public RenderSlime(ModelBase var1, ModelBase var2, float var3) { + super(var1, var3); + this.scaleAmount = var2; + } + + protected int shouldSlimeRenderPass(EntitySlime var1, int var2, float var3) { + if(var1.isInvisible()) { + return 0; + } else if(var2 == 0) { + this.setRenderPassModel(this.scaleAmount); + GL11.glEnable(GL11.GL_NORMALIZE); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + return 1; + } else { + if(var2 == 1) { + GL11.glDisable(GL11.GL_BLEND); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + return -1; + } + } + + protected void scaleSlime(EntitySlime var1, float var2) { + float var3 = (float)var1.getSlimeSize(); + float var4 = (var1.field_70812_c + (var1.field_70811_b - var1.field_70812_c) * var2) / (var3 * 0.5F + 1.0F); + float var5 = 1.0F / (var4 + 1.0F); + GL11.glScalef(var5 * var3, 1.0F / var5 * var3, var5 * var3); + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + this.scaleSlime((EntitySlime)var1, var2); + } + + protected int shouldRenderPass(EntityLiving var1, int var2, float var3) { + return this.shouldSlimeRenderPass((EntitySlime)var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/RenderSnowMan.java b/src/net/minecraft/src/RenderSnowMan.java new file mode 100644 index 0000000..4c2987e --- /dev/null +++ b/src/net/minecraft/src/RenderSnowMan.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderSnowMan extends RenderLiving { + private ModelSnowMan snowmanModel = (ModelSnowMan)this.mainModel; + + public RenderSnowMan() { + super(new ModelSnowMan(), 0.5F); + this.setRenderPassModel(this.snowmanModel); + } + + protected void renderSnowmanPumpkin(EntitySnowman var1, float var2) { + super.renderEquippedItems(var1, var2); + ItemStack var3 = new ItemStack(Block.pumpkin, 1); + if(var3 != null && var3.getItem().itemID < 256) { + GL11.glPushMatrix(); + this.snowmanModel.head.postRender(1.0F / 16.0F); + if(RenderBlocks.renderItemIn3d(Block.blocksList[var3.itemID].getRenderType())) { + float var4 = 10.0F / 16.0F; + GL11.glTranslatef(0.0F, -(11.0F / 32.0F), 0.0F); + GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F); + GL11.glScalef(var4, -var4, var4); + } + + this.renderManager.itemRenderer.renderItem(var1, var3, 0); + GL11.glPopMatrix(); + } + + } + + protected void renderEquippedItems(EntityLiving var1, float var2) { + this.renderSnowmanPumpkin((EntitySnowman)var1, var2); + } +} diff --git a/src/net/minecraft/src/RenderSnowball.java b/src/net/minecraft/src/RenderSnowball.java new file mode 100644 index 0000000..7cd3701 --- /dev/null +++ b/src/net/minecraft/src/RenderSnowball.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderSnowball extends Render { + private Item field_94151_a; + private int field_94150_f; + + public RenderSnowball(Item var1, int var2) { + this.field_94151_a = var1; + this.field_94150_f = var2; + } + + public RenderSnowball(Item var1) { + this(var1, 0); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + Icon var10 = this.field_94151_a.getIconFromDamage(this.field_94150_f); + if(var10 != null) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glScalef(0.5F, 0.5F, 0.5F); + this.loadTexture("/gui/items.png"); + Tessellator var11 = Tessellator.instance; + if(var10 == ItemPotion.func_94589_d("potion_splash")) { + int var12 = PotionHelper.func_77915_a(((EntityPotion)var1).getPotionDamage(), false); + float var13 = (float)(var12 >> 16 & 255) / 255.0F; + float var14 = (float)(var12 >> 8 & 255) / 255.0F; + float var15 = (float)(var12 & 255) / 255.0F; + GL11.glColor3f(var13, var14, var15); + GL11.glPushMatrix(); + this.func_77026_a(var11, ItemPotion.func_94589_d("potion_contents")); + GL11.glPopMatrix(); + GL11.glColor3f(1.0F, 1.0F, 1.0F); + } + + this.func_77026_a(var11, var10); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } + } + + private void func_77026_a(Tessellator var1, Icon var2) { + float var3 = var2.getMinU(); + float var4 = var2.getMaxU(); + float var5 = var2.getMinV(); + float var6 = var2.getMaxV(); + float var7 = 1.0F; + float var8 = 0.5F; + float var9 = 0.25F; + GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + var1.startDrawingQuads(); + var1.setNormal(0.0F, 1.0F, 0.0F); + var1.addVertexWithUV((double)(0.0F - var8), (double)(0.0F - var9), 0.0D, (double)var3, (double)var6); + var1.addVertexWithUV((double)(var7 - var8), (double)(0.0F - var9), 0.0D, (double)var4, (double)var6); + var1.addVertexWithUV((double)(var7 - var8), (double)(var7 - var9), 0.0D, (double)var4, (double)var5); + var1.addVertexWithUV((double)(0.0F - var8), (double)(var7 - var9), 0.0D, (double)var3, (double)var5); + var1.draw(); + } +} diff --git a/src/net/minecraft/src/RenderSorter.java b/src/net/minecraft/src/RenderSorter.java new file mode 100644 index 0000000..cffab6e --- /dev/null +++ b/src/net/minecraft/src/RenderSorter.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +import java.util.Comparator; + +public class RenderSorter implements Comparator { + private EntityLiving baseEntity; + + public RenderSorter(EntityLiving var1) { + this.baseEntity = var1; + } + + public int doCompare(WorldRenderer var1, WorldRenderer var2) { + if(var1.isInFrustum && !var2.isInFrustum) { + return 1; + } else if(var2.isInFrustum && !var1.isInFrustum) { + return -1; + } else { + double var3 = (double)var1.distanceToEntitySquared(this.baseEntity); + double var5 = (double)var2.distanceToEntitySquared(this.baseEntity); + return var3 < var5 ? 1 : (var3 > var5 ? -1 : (var1.chunkIndex < var2.chunkIndex ? 1 : -1)); + } + } + + public int compare(Object var1, Object var2) { + return this.doCompare((WorldRenderer)var1, (WorldRenderer)var2); + } +} diff --git a/src/net/minecraft/src/RenderSpider.java b/src/net/minecraft/src/RenderSpider.java new file mode 100644 index 0000000..54029d0 --- /dev/null +++ b/src/net/minecraft/src/RenderSpider.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderSpider extends RenderLiving { + public RenderSpider() { + super(new ModelSpider(), 1.0F); + this.setRenderPassModel(new ModelSpider()); + } + + protected float setSpiderDeathMaxRotation(EntitySpider var1) { + return 180.0F; + } + + protected int setSpiderEyeBrightness(EntitySpider var1, int var2, float var3) { + if(var2 != 0) { + return -1; + } else { + this.loadTexture("/mob/spider_eyes.png"); + float var4 = 1.0F; + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); + if(var1.isInvisible()) { + GL11.glDepthMask(false); + } else { + GL11.glDepthMask(true); + } + + char var5 = '\uf0f0'; + int var6 = var5 % 65536; + int var7 = var5 / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var6 / 1.0F, (float)var7 / 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, var4); + return 1; + } + } + + protected void scaleSpider(EntitySpider var1, float var2) { + float var3 = var1.spiderScaleAmount(); + GL11.glScalef(var3, var3, var3); + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + this.scaleSpider((EntitySpider)var1, var2); + } + + protected float getDeathMaxRotation(EntityLiving var1) { + return this.setSpiderDeathMaxRotation((EntitySpider)var1); + } + + protected int shouldRenderPass(EntityLiving var1, int var2, float var3) { + return this.setSpiderEyeBrightness((EntitySpider)var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/RenderSquid.java b/src/net/minecraft/src/RenderSquid.java new file mode 100644 index 0000000..21f6db8 --- /dev/null +++ b/src/net/minecraft/src/RenderSquid.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderSquid extends RenderLiving { + public RenderSquid(ModelBase var1, float var2) { + super(var1, var2); + } + + public void renderLivingSquid(EntitySquid var1, double var2, double var4, double var6, float var8, float var9) { + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + protected void rotateSquidsCorpse(EntitySquid var1, float var2, float var3, float var4) { + float var5 = var1.prevSquidPitch + (var1.squidPitch - var1.prevSquidPitch) * var4; + float var6 = var1.prevSquidYaw + (var1.squidYaw - var1.prevSquidYaw) * var4; + GL11.glTranslatef(0.0F, 0.5F, 0.0F); + GL11.glRotatef(180.0F - var3, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(var5, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(var6, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, -1.2F, 0.0F); + } + + protected float handleRotationFloat(EntitySquid var1, float var2) { + return var1.prevTentacleAngle + (var1.tentacleAngle - var1.prevTentacleAngle) * var2; + } + + protected float handleRotationFloat(EntityLiving var1, float var2) { + return this.handleRotationFloat((EntitySquid)var1, var2); + } + + protected void rotateCorpse(EntityLiving var1, float var2, float var3, float var4) { + this.rotateSquidsCorpse((EntitySquid)var1, var2, var3, var4); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.renderLivingSquid((EntitySquid)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderLivingSquid((EntitySquid)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderTNTPrimed.java b/src/net/minecraft/src/RenderTNTPrimed.java new file mode 100644 index 0000000..9c32559 --- /dev/null +++ b/src/net/minecraft/src/RenderTNTPrimed.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderTNTPrimed extends Render { + private RenderBlocks blockRenderer = new RenderBlocks(); + + public RenderTNTPrimed() { + this.shadowSize = 0.5F; + } + + public void renderPrimedTNT(EntityTNTPrimed var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + float var10; + if((float)var1.fuse - var9 + 1.0F < 10.0F) { + var10 = 1.0F - ((float)var1.fuse - var9 + 1.0F) / 10.0F; + if(var10 < 0.0F) { + var10 = 0.0F; + } + + if(var10 > 1.0F) { + var10 = 1.0F; + } + + var10 *= var10; + var10 *= var10; + float var11 = 1.0F + var10 * 0.3F; + GL11.glScalef(var11, var11, var11); + } + + var10 = (1.0F - ((float)var1.fuse - var9 + 1.0F) / 100.0F) * 0.8F; + this.loadTexture("/terrain.png"); + this.blockRenderer.renderBlockAsItem(Block.tnt, 0, var1.getBrightness(var9)); + if(var1.fuse / 5 % 2 == 0) { + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_DST_ALPHA); + GL11.glColor4f(1.0F, 1.0F, 1.0F, var10); + this.blockRenderer.renderBlockAsItem(Block.tnt, 0, 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + GL11.glPopMatrix(); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderPrimedTNT((EntityTNTPrimed)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderTntMinecart.java b/src/net/minecraft/src/RenderTntMinecart.java new file mode 100644 index 0000000..5c8a4e5 --- /dev/null +++ b/src/net/minecraft/src/RenderTntMinecart.java @@ -0,0 +1,45 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderTntMinecart extends RenderMinecart { + protected void func_94146_a(EntityMinecartTNT var1, float var2, Block var3, int var4) { + int var5 = var1.func_94104_d(); + if(var5 > -1 && (float)var5 - var2 + 1.0F < 10.0F) { + float var6 = 1.0F - ((float)var5 - var2 + 1.0F) / 10.0F; + if(var6 < 0.0F) { + var6 = 0.0F; + } + + if(var6 > 1.0F) { + var6 = 1.0F; + } + + var6 *= var6; + var6 *= var6; + float var7 = 1.0F + var6 * 0.3F; + GL11.glScalef(var7, var7, var7); + } + + super.renderBlockInMinecart(var1, var2, var3, var4); + if(var5 > -1 && var5 / 5 % 2 == 0) { + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_DST_ALPHA); + GL11.glColor4f(1.0F, 1.0F, 1.0F, (1.0F - ((float)var5 - var2 + 1.0F) / 100.0F) * 0.8F); + GL11.glPushMatrix(); + this.field_94145_f.renderBlockAsItem(Block.tnt, 0, 1.0F); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + } + + protected void renderBlockInMinecart(EntityMinecart var1, float var2, Block var3, int var4) { + this.func_94146_a((EntityMinecartTNT)var1, var2, var3, var4); + } +} diff --git a/src/net/minecraft/src/RenderVillager.java b/src/net/minecraft/src/RenderVillager.java new file mode 100644 index 0000000..478fa86 --- /dev/null +++ b/src/net/minecraft/src/RenderVillager.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderVillager extends RenderLiving { + protected ModelVillager villagerModel = (ModelVillager)this.mainModel; + + public RenderVillager() { + super(new ModelVillager(0.0F), 0.5F); + } + + protected int shouldVillagerRenderPass(EntityVillager var1, int var2, float var3) { + return -1; + } + + public void renderVillager(EntityVillager var1, double var2, double var4, double var6, float var8, float var9) { + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + protected void renderVillagerEquipedItems(EntityVillager var1, float var2) { + super.renderEquippedItems(var1, var2); + } + + protected void preRenderVillager(EntityVillager var1, float var2) { + float var3 = 15.0F / 16.0F; + if(var1.getGrowingAge() < 0) { + var3 = (float)((double)var3 * 0.5D); + this.shadowSize = 0.25F; + } else { + this.shadowSize = 0.5F; + } + + GL11.glScalef(var3, var3, var3); + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + this.preRenderVillager((EntityVillager)var1, var2); + } + + protected int shouldRenderPass(EntityLiving var1, int var2, float var3) { + return this.shouldVillagerRenderPass((EntityVillager)var1, var2, var3); + } + + protected void renderEquippedItems(EntityLiving var1, float var2) { + this.renderVillagerEquipedItems((EntityVillager)var1, var2); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.renderVillager((EntityVillager)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderVillager((EntityVillager)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderWitch.java b/src/net/minecraft/src/RenderWitch.java new file mode 100644 index 0000000..f71235a --- /dev/null +++ b/src/net/minecraft/src/RenderWitch.java @@ -0,0 +1,113 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +public class RenderWitch extends RenderLiving { + private ModelWitch field_82414_a = (ModelWitch)this.mainModel; + private int field_82413_f = this.field_82414_a.func_82899_a(); + + public RenderWitch() { + super(new ModelWitch(0.0F), 0.5F); + } + + public void func_82412_a(EntityWitch var1, double var2, double var4, double var6, float var8, float var9) { + ItemStack var10 = var1.getHeldItem(); + if(this.field_82414_a.func_82899_a() != this.field_82413_f) { + Minecraft.getMinecraft().getLogAgent().logInfo("Loaded new witch model"); + this.mainModel = this.field_82414_a = new ModelWitch(0.0F); + this.field_82413_f = this.field_82414_a.func_82899_a(); + } + + this.field_82414_a.field_82900_g = var10 != null; + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + protected void func_82411_a(EntityWitch var1, float var2) { + float var3 = 1.0F; + GL11.glColor3f(var3, var3, var3); + super.renderEquippedItems(var1, var2); + ItemStack var4 = var1.getHeldItem(); + if(var4 != null) { + GL11.glPushMatrix(); + float var5; + if(this.mainModel.isChild) { + var5 = 0.5F; + GL11.glTranslatef(0.0F, 10.0F / 16.0F, 0.0F); + GL11.glRotatef(-20.0F, -1.0F, 0.0F, 0.0F); + GL11.glScalef(var5, var5, var5); + } + + this.field_82414_a.field_82898_f.postRender(1.0F / 16.0F); + GL11.glTranslatef(-(1.0F / 16.0F), 0.53125F, 0.21875F); + if(var4.itemID < 256 && RenderBlocks.renderItemIn3d(Block.blocksList[var4.itemID].getRenderType())) { + var5 = 0.5F; + GL11.glTranslatef(0.0F, 3.0F / 16.0F, -(5.0F / 16.0F)); + var5 *= 12.0F / 16.0F; + GL11.glRotatef(20.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + GL11.glScalef(var5, -var5, var5); + } else if(var4.itemID == Item.bow.itemID) { + var5 = 10.0F / 16.0F; + GL11.glTranslatef(0.0F, 2.0F / 16.0F, 5.0F / 16.0F); + GL11.glRotatef(-20.0F, 0.0F, 1.0F, 0.0F); + GL11.glScalef(var5, -var5, var5); + GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + } else if(Item.itemsList[var4.itemID].isFull3D()) { + var5 = 10.0F / 16.0F; + if(Item.itemsList[var4.itemID].shouldRotateAroundWhenRendering()) { + GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); + GL11.glTranslatef(0.0F, -(2.0F / 16.0F), 0.0F); + } + + this.func_82410_b(); + GL11.glScalef(var5, -var5, var5); + GL11.glRotatef(-100.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + } else { + var5 = 6.0F / 16.0F; + GL11.glTranslatef(0.25F, 3.0F / 16.0F, -(3.0F / 16.0F)); + GL11.glScalef(var5, var5, var5); + GL11.glRotatef(60.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(20.0F, 0.0F, 0.0F, 1.0F); + } + + GL11.glRotatef(-15.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(40.0F, 0.0F, 0.0F, 1.0F); + this.renderManager.itemRenderer.renderItem(var1, var4, 0); + if(var4.getItem().requiresMultipleRenderPasses()) { + this.renderManager.itemRenderer.renderItem(var1, var4, 1); + } + + GL11.glPopMatrix(); + } + + } + + protected void func_82410_b() { + GL11.glTranslatef(0.0F, 3.0F / 16.0F, 0.0F); + } + + protected void func_82409_b(EntityWitch var1, float var2) { + float var3 = 15.0F / 16.0F; + GL11.glScalef(var3, var3, var3); + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + this.func_82409_b((EntityWitch)var1, var2); + } + + protected void renderEquippedItems(EntityLiving var1, float var2) { + this.func_82411_a((EntityWitch)var1, var2); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.func_82412_a((EntityWitch)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.func_82412_a((EntityWitch)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderWither.java b/src/net/minecraft/src/RenderWither.java new file mode 100644 index 0000000..0bfad38 --- /dev/null +++ b/src/net/minecraft/src/RenderWither.java @@ -0,0 +1,97 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderWither extends RenderLiving { + private int field_82419_a = ((ModelWither)this.mainModel).func_82903_a(); + + public RenderWither() { + super(new ModelWither(), 1.0F); + } + + public void func_82418_a(EntityWither var1, double var2, double var4, double var6, float var8, float var9) { + BossStatus.func_82824_a(var1, true); + int var10 = ((ModelWither)this.mainModel).func_82903_a(); + if(var10 != this.field_82419_a) { + this.field_82419_a = var10; + this.mainModel = new ModelWither(); + } + + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + protected void func_82415_a(EntityWither var1, float var2) { + int var3 = var1.func_82212_n(); + if(var3 > 0) { + float var4 = 2.0F - ((float)var3 - var2) / 220.0F * 0.5F; + GL11.glScalef(var4, var4, var4); + } else { + GL11.glScalef(2.0F, 2.0F, 2.0F); + } + + } + + protected int func_82417_a(EntityWither var1, int var2, float var3) { + if(var1.isArmored()) { + if(var1.isInvisible()) { + GL11.glDepthMask(false); + } else { + GL11.glDepthMask(true); + } + + if(var2 == 1) { + float var4 = (float)var1.ticksExisted + var3; + this.loadTexture("/armor/witherarmor.png"); + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + float var5 = MathHelper.cos(var4 * 0.02F) * 3.0F; + float var6 = var4 * 0.01F; + GL11.glTranslatef(var5, var6, 0.0F); + this.setRenderPassModel(this.mainModel); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glEnable(GL11.GL_BLEND); + float var7 = 0.5F; + GL11.glColor4f(var7, var7, var7, 1.0F); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); + GL11.glTranslatef(0.0F, -0.01F, 0.0F); + GL11.glScalef(1.1F, 1.1F, 1.1F); + return 1; + } + + if(var2 == 2) { + GL11.glMatrixMode(GL11.GL_TEXTURE); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_BLEND); + } + } + + return -1; + } + + protected int func_82416_b(EntityWither var1, int var2, float var3) { + return -1; + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + this.func_82415_a((EntityWither)var1, var2); + } + + protected int shouldRenderPass(EntityLiving var1, int var2, float var3) { + return this.func_82417_a((EntityWither)var1, var2, var3); + } + + protected int inheritRenderPass(EntityLiving var1, int var2, float var3) { + return this.func_82416_b((EntityWither)var1, var2, var3); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.func_82418_a((EntityWither)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.func_82418_a((EntityWither)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderWitherSkull.java b/src/net/minecraft/src/RenderWitherSkull.java new file mode 100644 index 0000000..3145a7a --- /dev/null +++ b/src/net/minecraft/src/RenderWitherSkull.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderWitherSkull extends Render { + ModelSkeletonHead skeletonHeadModel = new ModelSkeletonHead(); + + private float func_82400_a(float var1, float var2, float var3) { + float var4; + for(var4 = var2 - var1; var4 < -180.0F; var4 += 360.0F) { + } + + while(var4 >= 180.0F) { + var4 -= 360.0F; + } + + return var1 + var3 * var4; + } + + public void func_82399_a(EntityWitherSkull var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_CULL_FACE); + float var10 = this.func_82400_a(var1.prevRotationYaw, var1.rotationYaw, var9); + float var11 = var1.prevRotationPitch + (var1.rotationPitch - var1.prevRotationPitch) * var9; + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + float var12 = 1.0F / 16.0F; + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glScalef(-1.0F, -1.0F, 1.0F); + GL11.glEnable(GL11.GL_ALPHA_TEST); + if(var1.isInvulnerable()) { + this.loadTexture("/mob/wither_invul.png"); + } else { + this.loadTexture("/mob/wither.png"); + } + + this.skeletonHeadModel.render(var1, 0.0F, 0.0F, 0.0F, var10, var11, var12); + GL11.glPopMatrix(); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.func_82399_a((EntityWitherSkull)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderWolf.java b/src/net/minecraft/src/RenderWolf.java new file mode 100644 index 0000000..936e4a6 --- /dev/null +++ b/src/net/minecraft/src/RenderWolf.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderWolf extends RenderLiving { + public RenderWolf(ModelBase var1, ModelBase var2, float var3) { + super(var1, var3); + this.setRenderPassModel(var2); + } + + protected float getTailRotation(EntityWolf var1, float var2) { + return var1.getTailRotation(); + } + + protected int func_82447_a(EntityWolf var1, int var2, float var3) { + float var4; + if(var2 == 0 && var1.getWolfShaking()) { + var4 = var1.getBrightness(var3) * var1.getShadingWhileShaking(var3); + this.loadTexture(var1.getTexture()); + GL11.glColor3f(var4, var4, var4); + return 1; + } else if(var2 == 1 && var1.isTamed()) { + this.loadTexture("/mob/wolf_collar.png"); + var4 = 1.0F; + int var5 = var1.getCollarColor(); + GL11.glColor3f(var4 * EntitySheep.fleeceColorTable[var5][0], var4 * EntitySheep.fleeceColorTable[var5][1], var4 * EntitySheep.fleeceColorTable[var5][2]); + return 1; + } else { + return -1; + } + } + + protected int shouldRenderPass(EntityLiving var1, int var2, float var3) { + return this.func_82447_a((EntityWolf)var1, var2, var3); + } + + protected float handleRotationFloat(EntityLiving var1, float var2) { + return this.getTailRotation((EntityWolf)var1, var2); + } +} diff --git a/src/net/minecraft/src/RenderXPOrb.java b/src/net/minecraft/src/RenderXPOrb.java new file mode 100644 index 0000000..22b1aa4 --- /dev/null +++ b/src/net/minecraft/src/RenderXPOrb.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderXPOrb extends Render { + public RenderXPOrb() { + this.shadowSize = 0.15F; + this.shadowOpaque = 12.0F / 16.0F; + } + + public void renderTheXPOrb(EntityXPOrb var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + int var10 = var1.getTextureByXP(); + this.loadTexture("/item/xporb.png"); + Tessellator var11 = Tessellator.instance; + float var12 = (float)(var10 % 4 * 16 + 0) / 64.0F; + float var13 = (float)(var10 % 4 * 16 + 16) / 64.0F; + float var14 = (float)(var10 / 4 * 16 + 0) / 64.0F; + float var15 = (float)(var10 / 4 * 16 + 16) / 64.0F; + float var16 = 1.0F; + float var17 = 0.5F; + float var18 = 0.25F; + int var19 = var1.getBrightnessForRender(var9); + int var20 = var19 % 65536; + int var21 = var19 / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var20 / 1.0F, (float)var21 / 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + float var26 = 255.0F; + float var27 = ((float)var1.xpColor + var9) / 2.0F; + var21 = (int)((MathHelper.sin(var27 + 0.0F) + 1.0F) * 0.5F * var26); + int var22 = (int)var26; + int var23 = (int)((MathHelper.sin(var27 + (float)Math.PI * 4.0F / 3.0F) + 1.0F) * 0.1F * var26); + int var24 = var21 << 16 | var22 << 8 | var23; + GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F); + float var25 = 0.3F; + GL11.glScalef(var25, var25, var25); + var11.startDrawingQuads(); + var11.setColorRGBA_I(var24, 128); + var11.setNormal(0.0F, 1.0F, 0.0F); + var11.addVertexWithUV((double)(0.0F - var17), (double)(0.0F - var18), 0.0D, (double)var12, (double)var15); + var11.addVertexWithUV((double)(var16 - var17), (double)(0.0F - var18), 0.0D, (double)var13, (double)var15); + var11.addVertexWithUV((double)(var16 - var17), (double)(1.0F - var18), 0.0D, (double)var13, (double)var14); + var11.addVertexWithUV((double)(0.0F - var17), (double)(1.0F - var18), 0.0D, (double)var12, (double)var14); + var11.draw(); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.renderTheXPOrb((EntityXPOrb)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderZombie.java b/src/net/minecraft/src/RenderZombie.java new file mode 100644 index 0000000..de052a2 --- /dev/null +++ b/src/net/minecraft/src/RenderZombie.java @@ -0,0 +1,88 @@ +package net.minecraft.src; + +public class RenderZombie extends RenderBiped { + private ModelBiped field_82434_o = this.modelBipedMain; + private ModelZombieVillager field_82432_p = new ModelZombieVillager(); + protected ModelBiped field_82437_k; + protected ModelBiped field_82435_l; + protected ModelBiped field_82436_m; + protected ModelBiped field_82433_n; + private int field_82431_q = 1; + + public RenderZombie() { + super(new ModelZombie(), 0.5F, 1.0F); + } + + protected void func_82421_b() { + this.field_82423_g = new ModelZombie(1.0F, true); + this.field_82425_h = new ModelZombie(0.5F, true); + this.field_82437_k = this.field_82423_g; + this.field_82435_l = this.field_82425_h; + this.field_82436_m = new ModelZombieVillager(1.0F, 0.0F, true); + this.field_82433_n = new ModelZombieVillager(0.5F, 0.0F, true); + } + + protected int func_82429_a(EntityZombie var1, int var2, float var3) { + this.func_82427_a(var1); + return super.shouldRenderPass(var1, var2, var3); + } + + public void func_82426_a(EntityZombie var1, double var2, double var4, double var6, float var8, float var9) { + this.func_82427_a(var1); + super.doRenderLiving(var1, var2, var4, var6, var8, var9); + } + + protected void func_82428_a(EntityZombie var1, float var2) { + this.func_82427_a(var1); + super.renderEquippedItems(var1, var2); + } + + private void func_82427_a(EntityZombie var1) { + if(var1.isVillager()) { + if(this.field_82431_q != this.field_82432_p.func_82897_a()) { + this.field_82432_p = new ModelZombieVillager(); + this.field_82431_q = this.field_82432_p.func_82897_a(); + this.field_82436_m = new ModelZombieVillager(1.0F, 0.0F, true); + this.field_82433_n = new ModelZombieVillager(0.5F, 0.0F, true); + } + + this.mainModel = this.field_82432_p; + this.field_82423_g = this.field_82436_m; + this.field_82425_h = this.field_82433_n; + } else { + this.mainModel = this.field_82434_o; + this.field_82423_g = this.field_82437_k; + this.field_82425_h = this.field_82435_l; + } + + this.modelBipedMain = (ModelBiped)this.mainModel; + } + + protected void func_82430_a(EntityZombie var1, float var2, float var3, float var4) { + if(var1.isConverting()) { + var3 += (float)(Math.cos((double)var1.ticksExisted * 3.25D) * Math.PI * 0.25D); + } + + super.rotateCorpse(var1, var2, var3, var4); + } + + protected void renderEquippedItems(EntityLiving var1, float var2) { + this.func_82428_a((EntityZombie)var1, var2); + } + + public void doRenderLiving(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.func_82426_a((EntityZombie)var1, var2, var4, var6, var8, var9); + } + + protected int shouldRenderPass(EntityLiving var1, int var2, float var3) { + return this.func_82429_a((EntityZombie)var1, var2, var3); + } + + protected void rotateCorpse(EntityLiving var1, float var2, float var3, float var4) { + this.func_82430_a((EntityZombie)var1, var2, var3, var4); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.func_82426_a((EntityZombie)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/ReportedException.java b/src/net/minecraft/src/ReportedException.java new file mode 100644 index 0000000..384dd02 --- /dev/null +++ b/src/net/minecraft/src/ReportedException.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +public class ReportedException extends RuntimeException { + private final CrashReport theReportedExceptionCrashReport; + + public ReportedException(CrashReport var1) { + this.theReportedExceptionCrashReport = var1; + } + + public CrashReport getCrashReport() { + return this.theReportedExceptionCrashReport; + } + + public Throwable getCause() { + return this.theReportedExceptionCrashReport.getCrashCause(); + } + + public String getMessage() { + return this.theReportedExceptionCrashReport.getDescription(); + } +} diff --git a/src/net/minecraft/src/Request.java b/src/net/minecraft/src/Request.java new file mode 100644 index 0000000..9e476a8 --- /dev/null +++ b/src/net/minecraft/src/Request.java @@ -0,0 +1,147 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.io.InputStream; +import java.net.HttpURLConnection; +import java.net.URL; + +public abstract class Request { + protected HttpURLConnection field_96367_a; + private boolean field_96366_c; + protected String field_96365_b; + + public Request(String var1, int var2, int var3) { + try { + this.field_96365_b = var1; + this.field_96367_a = (HttpURLConnection)(new URL(var1)).openConnection(); + this.field_96367_a.setConnectTimeout(var2); + this.field_96367_a.setReadTimeout(var3); + } catch (Exception var5) { + throw new ExceptionMcoHttp("Failed URL: " + var1, var5); + } + } + + public void func_100006_a(String var1, String var2) { + String var3 = this.field_96367_a.getRequestProperty("Cookie"); + if(var3 == null) { + this.field_96367_a.setRequestProperty("Cookie", var1 + "=" + var2); + } else { + this.field_96367_a.setRequestProperty("Cookie", var3 + ";" + var1 + "=" + var2); + } + + } + + public int func_96362_a() { + try { + this.func_96354_d(); + return this.field_96367_a.getResponseCode(); + } catch (Exception var2) { + throw new ExceptionMcoHttp("Failed URL: " + this.field_96365_b, var2); + } + } + + public McoOption func_98175_b() { + String var1 = this.field_96367_a.getHeaderField("Set-Cookie"); + if(var1 != null) { + String var2 = var1.substring(0, var1.indexOf("=")); + String var3 = var1.substring(var1.indexOf("=") + 1, var1.indexOf(";")); + return McoOption.func_98153_a(McoPair.func_98157_a(var2, var3)); + } else { + return McoOption.func_98154_b(); + } + } + + public String func_96364_c() { + try { + this.func_96354_d(); + String var1 = this.func_96362_a() >= 400 ? this.func_96352_a(this.field_96367_a.getErrorStream()) : this.func_96352_a(this.field_96367_a.getInputStream()); + this.func_96360_f(); + return var1; + } catch (IOException var2) { + throw new ExceptionMcoHttp("Failed URL: " + this.field_96365_b, var2); + } + } + + private String func_96352_a(InputStream var1) throws IOException { + if(var1 == null) { + throw new IllegalArgumentException("input stream cannot be null"); + } else { + StringBuilder var2 = new StringBuilder(); + + for(int var3 = var1.read(); var3 != -1; var3 = var1.read()) { + var2.append((char)var3); + } + + return var2.toString(); + } + } + + private void func_96360_f() { + byte[] var1 = new byte[1024]; + + InputStream var3; + try { + boolean var2 = false; + var3 = this.field_96367_a.getInputStream(); + + while(true) { + int var7 = var3.read(var1); + if(var7 <= 0) { + var3.close(); + break; + } + } + } catch (Exception var6) { + try { + var3 = this.field_96367_a.getErrorStream(); + boolean var4 = false; + + while(true) { + int var8 = var3.read(var1); + if(var8 <= 0) { + var3.close(); + break; + } + } + } catch (IOException var5) { + } + } + + } + + protected Request func_96354_d() { + if(!this.field_96366_c) { + Request var1 = this.func_96359_e(); + this.field_96366_c = true; + return var1; + } else { + return this; + } + } + + protected abstract Request func_96359_e(); + + public static Request func_96358_a(String var0) { + return new RequestGet(var0, 5000, 10000); + } + + public static Request func_96361_b(String var0, String var1) { + return new RequestPost(var0, var1.getBytes(), 5000, 10000); + } + + public static Request func_104064_a(String var0, String var1, int var2, int var3) { + return new RequestPost(var0, var1.getBytes(), var2, var3); + } + + public static Request func_96355_b(String var0) { + return new RequestDelete(var0, 5000, 10000); + } + + public static Request func_96363_c(String var0, String var1) { + return new RequestPut(var0, var1.getBytes(), 5000, 10000); + } + + public static Request func_96353_a(String var0, String var1, int var2, int var3) { + return new RequestPut(var0, var1.getBytes(), var2, var3); + } +} diff --git a/src/net/minecraft/src/RequestDelete.java b/src/net/minecraft/src/RequestDelete.java new file mode 100644 index 0000000..180d671 --- /dev/null +++ b/src/net/minecraft/src/RequestDelete.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +public class RequestDelete extends Request { + public RequestDelete(String var1, int var2, int var3) { + super(var1, var2, var3); + } + + public RequestDelete func_96370_f() { + try { + this.field_96367_a.setDoOutput(true); + this.field_96367_a.setRequestMethod("DELETE"); + this.field_96367_a.connect(); + return this; + } catch (Exception var2) { + throw new ExceptionMcoHttp("Failed URL: " + this.field_96365_b, var2); + } + } + + public Request func_96359_e() { + return this.func_96370_f(); + } +} diff --git a/src/net/minecraft/src/RequestGet.java b/src/net/minecraft/src/RequestGet.java new file mode 100644 index 0000000..1751e28 --- /dev/null +++ b/src/net/minecraft/src/RequestGet.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +public class RequestGet extends Request { + public RequestGet(String var1, int var2, int var3) { + super(var1, var2, var3); + } + + public RequestGet func_96371_f() { + try { + this.field_96367_a.setDoInput(true); + this.field_96367_a.setDoOutput(true); + this.field_96367_a.setUseCaches(false); + this.field_96367_a.setRequestMethod("GET"); + return this; + } catch (Exception var2) { + throw new ExceptionMcoHttp("Failed URL: " + this.field_96365_b, var2); + } + } + + public Request func_96359_e() { + return this.func_96371_f(); + } +} diff --git a/src/net/minecraft/src/RequestPost.java b/src/net/minecraft/src/RequestPost.java new file mode 100644 index 0000000..3d246a6 --- /dev/null +++ b/src/net/minecraft/src/RequestPost.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +import java.io.OutputStream; + +public class RequestPost extends Request { + private byte[] field_96373_c; + + public RequestPost(String var1, byte[] var2, int var3, int var4) { + super(var1, var3, var4); + this.field_96373_c = var2; + } + + public RequestPost func_96372_f() { + try { + this.field_96367_a.setDoInput(true); + this.field_96367_a.setDoOutput(true); + this.field_96367_a.setUseCaches(false); + this.field_96367_a.setRequestMethod("POST"); + OutputStream var1 = this.field_96367_a.getOutputStream(); + var1.write(this.field_96373_c); + var1.flush(); + return this; + } catch (Exception var2) { + throw new ExceptionMcoHttp("Failed URL: " + this.field_96365_b, var2); + } + } + + public Request func_96359_e() { + return this.func_96372_f(); + } +} diff --git a/src/net/minecraft/src/RequestPut.java b/src/net/minecraft/src/RequestPut.java new file mode 100644 index 0000000..e91702d --- /dev/null +++ b/src/net/minecraft/src/RequestPut.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +import java.io.OutputStream; + +public class RequestPut extends Request { + private byte[] field_96369_c; + + public RequestPut(String var1, byte[] var2, int var3, int var4) { + super(var1, var3, var4); + this.field_96369_c = var2; + } + + public RequestPut func_96368_f() { + try { + this.field_96367_a.setDoOutput(true); + this.field_96367_a.setDoInput(true); + this.field_96367_a.setRequestMethod("PUT"); + OutputStream var1 = this.field_96367_a.getOutputStream(); + var1.write(this.field_96369_c); + var1.flush(); + return this; + } catch (Exception var2) { + throw new ExceptionMcoHttp("Failed URL: " + this.field_96365_b, var2); + } + } + + public Request func_96359_e() { + return this.func_96368_f(); + } +} diff --git a/src/net/minecraft/src/RunnableTitleScreen.java b/src/net/minecraft/src/RunnableTitleScreen.java new file mode 100644 index 0000000..78ea6c0 --- /dev/null +++ b/src/net/minecraft/src/RunnableTitleScreen.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.net.URL; + +class RunnableTitleScreen implements Runnable { + final GuiMainMenu field_104058_d; + + RunnableTitleScreen(GuiMainMenu var1) { + this.field_104058_d = var1; + } + + public void run() { + try { + String var1 = HttpUtil.func_104145_a(new URL("http://assets.minecraft.net/1_6_has_been_released.flag")); + if(var1 != null && var1.length() > 0) { + var1 = var1.trim(); + Object var2 = GuiMainMenu.func_104004_a(this.field_104058_d); + synchronized(var2) { + GuiMainMenu.func_104005_a(this.field_104058_d, EnumChatFormatting.BOLD + "Notice!" + EnumChatFormatting.RESET + " Minecraft 1.6 is available for manual download."); + GuiMainMenu.func_104013_b(this.field_104058_d, var1); + GuiMainMenu.func_104006_a(this.field_104058_d, GuiMainMenu.func_104022_c(this.field_104058_d).getStringWidth(GuiMainMenu.func_104023_b(this.field_104058_d))); + GuiMainMenu.func_104014_b(this.field_104058_d, GuiMainMenu.func_104007_d(this.field_104058_d).getStringWidth(GuiMainMenu.field_96138_a)); + int var3 = Math.max(GuiMainMenu.func_104016_e(this.field_104058_d), GuiMainMenu.func_104015_f(this.field_104058_d)); + GuiMainMenu.func_104008_c(this.field_104058_d, (this.field_104058_d.width - var3) / 2); + GuiMainMenu.func_104009_d(this.field_104058_d, ((GuiButton)GuiMainMenu.func_104019_g(this.field_104058_d).get(0)).yPosition - 24); + GuiMainMenu.func_104011_e(this.field_104058_d, GuiMainMenu.func_104018_h(this.field_104058_d) + var3); + GuiMainMenu.func_104012_f(this.field_104058_d, GuiMainMenu.func_104020_i(this.field_104058_d) + 24); + } + } + } catch (Throwable var6) { + var6.printStackTrace(); + } + + } +} diff --git a/src/net/minecraft/src/SaveFormatComparator.java b/src/net/minecraft/src/SaveFormatComparator.java new file mode 100644 index 0000000..bf67b87 --- /dev/null +++ b/src/net/minecraft/src/SaveFormatComparator.java @@ -0,0 +1,59 @@ +package net.minecraft.src; + +public class SaveFormatComparator implements Comparable { + private final String fileName; + private final String displayName; + private final long lastTimePlayed; + private final long sizeOnDisk; + private final boolean requiresConversion; + private final EnumGameType theEnumGameType; + private final boolean hardcore; + private final boolean cheatsEnabled; + + public SaveFormatComparator(String var1, String var2, long var3, long var5, EnumGameType var7, boolean var8, boolean var9, boolean var10) { + this.fileName = var1; + this.displayName = var2; + this.lastTimePlayed = var3; + this.sizeOnDisk = var5; + this.theEnumGameType = var7; + this.requiresConversion = var8; + this.hardcore = var9; + this.cheatsEnabled = var10; + } + + public String getFileName() { + return this.fileName; + } + + public String getDisplayName() { + return this.displayName; + } + + public boolean requiresConversion() { + return this.requiresConversion; + } + + public long getLastTimePlayed() { + return this.lastTimePlayed; + } + + public int compareTo(SaveFormatComparator var1) { + return this.lastTimePlayed < var1.lastTimePlayed ? 1 : (this.lastTimePlayed > var1.lastTimePlayed ? -1 : this.fileName.compareTo(var1.fileName)); + } + + public EnumGameType getEnumGameType() { + return this.theEnumGameType; + } + + public boolean isHardcoreModeEnabled() { + return this.hardcore; + } + + public boolean getCheatsEnabled() { + return this.cheatsEnabled; + } + + public int compareTo(Object var1) { + return this.compareTo((SaveFormatComparator)var1); + } +} diff --git a/src/net/minecraft/src/SaveFormatOld.java b/src/net/minecraft/src/SaveFormatOld.java new file mode 100644 index 0000000..49121a5 --- /dev/null +++ b/src/net/minecraft/src/SaveFormatOld.java @@ -0,0 +1,148 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.List; + +public class SaveFormatOld implements ISaveFormat { + protected final File savesDirectory; + + public SaveFormatOld(File var1) { + if(!var1.exists()) { + var1.mkdirs(); + } + + this.savesDirectory = var1; + } + + public List getSaveList() throws AnvilConverterException { + ArrayList var1 = new ArrayList(); + + for(int var2 = 0; var2 < 5; ++var2) { + String var3 = "World" + (var2 + 1); + WorldInfo var4 = this.getWorldInfo(var3); + if(var4 != null) { + var1.add(new SaveFormatComparator(var3, "", var4.getLastTimePlayed(), var4.getSizeOnDisk(), var4.getGameType(), false, var4.isHardcoreModeEnabled(), var4.areCommandsAllowed())); + } + } + + return var1; + } + + public void flushCache() { + } + + public WorldInfo getWorldInfo(String var1) { + File var2 = new File(this.savesDirectory, var1); + if(!var2.exists()) { + return null; + } else { + File var3 = new File(var2, "level.dat"); + NBTTagCompound var4; + NBTTagCompound var5; + if(var3.exists()) { + try { + var4 = CompressedStreamTools.readCompressed(new FileInputStream(var3)); + var5 = var4.getCompoundTag("Data"); + return new WorldInfo(var5); + } catch (Exception var7) { + var7.printStackTrace(); + } + } + + var3 = new File(var2, "level.dat_old"); + if(var3.exists()) { + try { + var4 = CompressedStreamTools.readCompressed(new FileInputStream(var3)); + var5 = var4.getCompoundTag("Data"); + return new WorldInfo(var5); + } catch (Exception var6) { + var6.printStackTrace(); + } + } + + return null; + } + } + + public void renameWorld(String var1, String var2) { + File var3 = new File(this.savesDirectory, var1); + if(var3.exists()) { + File var4 = new File(var3, "level.dat"); + if(var4.exists()) { + try { + NBTTagCompound var5 = CompressedStreamTools.readCompressed(new FileInputStream(var4)); + NBTTagCompound var6 = var5.getCompoundTag("Data"); + var6.setString("LevelName", var2); + CompressedStreamTools.writeCompressed(var5, new FileOutputStream(var4)); + } catch (Exception var7) { + var7.printStackTrace(); + } + } + + } + } + + public boolean deleteWorldDirectory(String var1) { + File var2 = new File(this.savesDirectory, var1); + if(!var2.exists()) { + return true; + } else { + System.out.println("Deleting level " + var1); + + for(int var3 = 1; var3 <= 5; ++var3) { + System.out.println("Attempt " + var3 + "..."); + if(deleteFiles(var2.listFiles())) { + break; + } + + System.out.println("Unsuccessful in deleting contents."); + if(var3 < 5) { + try { + Thread.sleep(500L); + } catch (InterruptedException var5) { + } + } + } + + return var2.delete(); + } + } + + protected static boolean deleteFiles(File[] var0) { + for(int var1 = 0; var1 < var0.length; ++var1) { + File var2 = var0[var1]; + System.out.println("Deleting " + var2); + if(var2.isDirectory() && !deleteFiles(var2.listFiles())) { + System.out.println("Couldn\'t delete directory " + var2); + return false; + } + + if(!var2.delete()) { + System.out.println("Couldn\'t delete file " + var2); + return false; + } + } + + return true; + } + + public ISaveHandler getSaveLoader(String var1, boolean var2) { + return new SaveHandler(this.savesDirectory, var1, var2); + } + + public boolean isOldMapFormat(String var1) { + return false; + } + + public boolean convertMapFormat(String var1, IProgressUpdate var2) { + return false; + } + + public boolean canLoadWorld(String var1) { + File var2 = new File(this.savesDirectory, var1); + return var2.isDirectory(); + } +} diff --git a/src/net/minecraft/src/SaveHandler.java b/src/net/minecraft/src/SaveHandler.java new file mode 100644 index 0000000..886afa5 --- /dev/null +++ b/src/net/minecraft/src/SaveHandler.java @@ -0,0 +1,227 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import net.minecraft.server.MinecraftServer; + +public class SaveHandler implements ISaveHandler, IPlayerFileData { + private final File worldDirectory; + private final File playersDirectory; + private final File mapDataDir; + private final long initializationTime = System.currentTimeMillis(); + private final String saveDirectoryName; + + public SaveHandler(File var1, String var2, boolean var3) { + this.worldDirectory = new File(var1, var2); + this.worldDirectory.mkdirs(); + this.playersDirectory = new File(this.worldDirectory, "players"); + this.mapDataDir = new File(this.worldDirectory, "data"); + this.mapDataDir.mkdirs(); + this.saveDirectoryName = var2; + if(var3) { + this.playersDirectory.mkdirs(); + } + + this.setSessionLock(); + } + + private void setSessionLock() { + try { + File var1 = new File(this.worldDirectory, "session.lock"); + DataOutputStream var2 = new DataOutputStream(new FileOutputStream(var1)); + + try { + var2.writeLong(this.initializationTime); + } finally { + var2.close(); + } + + } catch (IOException var7) { + var7.printStackTrace(); + throw new RuntimeException("Failed to check session lock, aborting"); + } + } + + protected File getWorldDirectory() { + return this.worldDirectory; + } + + public void checkSessionLock() throws MinecraftException { + try { + File var1 = new File(this.worldDirectory, "session.lock"); + DataInputStream var2 = new DataInputStream(new FileInputStream(var1)); + + try { + if(var2.readLong() != this.initializationTime) { + throw new MinecraftException("The save is being accessed from another location, aborting"); + } + } finally { + var2.close(); + } + + } catch (IOException var7) { + throw new MinecraftException("Failed to check session lock, aborting"); + } + } + + public IChunkLoader getChunkLoader(WorldProvider var1) { + throw new RuntimeException("Old Chunk Storage is no longer supported."); + } + + public WorldInfo loadWorldInfo() { + File var1 = new File(this.worldDirectory, "level.dat"); + NBTTagCompound var2; + NBTTagCompound var3; + if(var1.exists()) { + try { + var2 = CompressedStreamTools.readCompressed(new FileInputStream(var1)); + var3 = var2.getCompoundTag("Data"); + return new WorldInfo(var3); + } catch (Exception var5) { + var5.printStackTrace(); + } + } + + var1 = new File(this.worldDirectory, "level.dat_old"); + if(var1.exists()) { + try { + var2 = CompressedStreamTools.readCompressed(new FileInputStream(var1)); + var3 = var2.getCompoundTag("Data"); + return new WorldInfo(var3); + } catch (Exception var4) { + var4.printStackTrace(); + } + } + + return null; + } + + public void saveWorldInfoWithPlayer(WorldInfo var1, NBTTagCompound var2) { + NBTTagCompound var3 = var1.cloneNBTCompound(var2); + NBTTagCompound var4 = new NBTTagCompound(); + var4.setTag("Data", var3); + + try { + File var5 = new File(this.worldDirectory, "level.dat_new"); + File var6 = new File(this.worldDirectory, "level.dat_old"); + File var7 = new File(this.worldDirectory, "level.dat"); + CompressedStreamTools.writeCompressed(var4, new FileOutputStream(var5)); + if(var6.exists()) { + var6.delete(); + } + + var7.renameTo(var6); + if(var7.exists()) { + var7.delete(); + } + + var5.renameTo(var7); + if(var5.exists()) { + var5.delete(); + } + } catch (Exception var8) { + var8.printStackTrace(); + } + + } + + public void saveWorldInfo(WorldInfo var1) { + NBTTagCompound var2 = var1.getNBTTagCompound(); + NBTTagCompound var3 = new NBTTagCompound(); + var3.setTag("Data", var2); + + try { + File var4 = new File(this.worldDirectory, "level.dat_new"); + File var5 = new File(this.worldDirectory, "level.dat_old"); + File var6 = new File(this.worldDirectory, "level.dat"); + CompressedStreamTools.writeCompressed(var3, new FileOutputStream(var4)); + if(var5.exists()) { + var5.delete(); + } + + var6.renameTo(var5); + if(var6.exists()) { + var6.delete(); + } + + var4.renameTo(var6); + if(var4.exists()) { + var4.delete(); + } + } catch (Exception var7) { + var7.printStackTrace(); + } + + } + + public void writePlayerData(EntityPlayer var1) { + try { + NBTTagCompound var2 = new NBTTagCompound(); + var1.writeToNBT(var2); + File var3 = new File(this.playersDirectory, var1.username + ".dat.tmp"); + File var4 = new File(this.playersDirectory, var1.username + ".dat"); + CompressedStreamTools.writeCompressed(var2, new FileOutputStream(var3)); + if(var4.exists()) { + var4.delete(); + } + + var3.renameTo(var4); + } catch (Exception var5) { + MinecraftServer.getServer().getLogAgent().logWarning("Failed to save player data for " + var1.username); + } + + } + + public NBTTagCompound readPlayerData(EntityPlayer var1) { + NBTTagCompound var2 = this.getPlayerData(var1.username); + if(var2 != null) { + var1.readFromNBT(var2); + } + + return var2; + } + + public NBTTagCompound getPlayerData(String var1) { + try { + File var2 = new File(this.playersDirectory, var1 + ".dat"); + if(var2.exists()) { + return CompressedStreamTools.readCompressed(new FileInputStream(var2)); + } + } catch (Exception var3) { + MinecraftServer.getServer().getLogAgent().logWarning("Failed to load player data for " + var1); + } + + return null; + } + + public IPlayerFileData getSaveHandler() { + return this; + } + + public String[] getAvailablePlayerDat() { + String[] var1 = this.playersDirectory.list(); + + for(int var2 = 0; var2 < var1.length; ++var2) { + if(var1[var2].endsWith(".dat")) { + var1[var2] = var1[var2].substring(0, var1[var2].length() - 4); + } + } + + return var1; + } + + public void flush() { + } + + public File getMapFileFromName(String var1) { + return new File(this.mapDataDir, var1 + ".dat"); + } + + public String getWorldDirectoryName() { + return this.saveDirectoryName; + } +} diff --git a/src/net/minecraft/src/SaveHandlerMP.java b/src/net/minecraft/src/SaveHandlerMP.java new file mode 100644 index 0000000..11440db --- /dev/null +++ b/src/net/minecraft/src/SaveHandlerMP.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +import java.io.File; + +public class SaveHandlerMP implements ISaveHandler { + public WorldInfo loadWorldInfo() { + return null; + } + + public void checkSessionLock() throws MinecraftException { + } + + public IChunkLoader getChunkLoader(WorldProvider var1) { + return null; + } + + public void saveWorldInfoWithPlayer(WorldInfo var1, NBTTagCompound var2) { + } + + public void saveWorldInfo(WorldInfo var1) { + } + + public IPlayerFileData getSaveHandler() { + return null; + } + + public void flush() { + } + + public File getMapFileFromName(String var1) { + return null; + } + + public String getWorldDirectoryName() { + return "none"; + } +} diff --git a/src/net/minecraft/src/ScaledResolution.java b/src/net/minecraft/src/ScaledResolution.java new file mode 100644 index 0000000..05de79a --- /dev/null +++ b/src/net/minecraft/src/ScaledResolution.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +public class ScaledResolution { + private int scaledWidth; + private int scaledHeight; + private double scaledWidthD; + private double scaledHeightD; + private int scaleFactor; + + public ScaledResolution(GameSettings var1, int var2, int var3) { + this.scaledWidth = var2; + this.scaledHeight = var3; + this.scaleFactor = 1; + int var4 = var1.guiScale; + if(var4 == 0) { + var4 = 1000; + } + + while(this.scaleFactor < var4 && this.scaledWidth / (this.scaleFactor + 1) >= 320 && this.scaledHeight / (this.scaleFactor + 1) >= 240) { + ++this.scaleFactor; + } + + this.scaledWidthD = (double)this.scaledWidth / (double)this.scaleFactor; + this.scaledHeightD = (double)this.scaledHeight / (double)this.scaleFactor; + this.scaledWidth = MathHelper.ceiling_double_int(this.scaledWidthD); + this.scaledHeight = MathHelper.ceiling_double_int(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; + } +} diff --git a/src/net/minecraft/src/ScheduledSound.java b/src/net/minecraft/src/ScheduledSound.java new file mode 100644 index 0000000..d5681d0 --- /dev/null +++ b/src/net/minecraft/src/ScheduledSound.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +class ScheduledSound { + String field_92069_a; + float field_92067_b; + float field_92068_c; + float field_92065_d; + float field_92066_e; + float field_92063_f; + int field_92064_g; + + public ScheduledSound(String var1, float var2, float var3, float var4, float var5, float var6, int var7) { + this.field_92069_a = var1; + this.field_92067_b = var2; + this.field_92068_c = var3; + this.field_92065_d = var4; + this.field_92066_e = var5; + this.field_92063_f = var6; + this.field_92064_g = var7; + } +} diff --git a/src/net/minecraft/src/Score.java b/src/net/minecraft/src/Score.java new file mode 100644 index 0000000..dad3d25 --- /dev/null +++ b/src/net/minecraft/src/Score.java @@ -0,0 +1,71 @@ +package net.minecraft.src; + +import java.util.Comparator; +import java.util.List; + +public class Score { + public static final Comparator field_96658_a = new ScoreComparator(); + private final Scoreboard theScoreboard; + private final ScoreObjective field_96657_c; + private final String field_96654_d; + private int field_96655_e; + + public Score(Scoreboard var1, ScoreObjective var2, String var3) { + this.theScoreboard = var1; + this.field_96657_c = var2; + this.field_96654_d = var3; + } + + public void func_96649_a(int var1) { + if(this.field_96657_c.getCriteria().isReadOnly()) { + throw new IllegalStateException("Cannot modify read-only score"); + } else { + this.func_96647_c(this.func_96652_c() + var1); + } + } + + public void func_96646_b(int var1) { + if(this.field_96657_c.getCriteria().isReadOnly()) { + throw new IllegalStateException("Cannot modify read-only score"); + } else { + this.func_96647_c(this.func_96652_c() - var1); + } + } + + public void func_96648_a() { + if(this.field_96657_c.getCriteria().isReadOnly()) { + throw new IllegalStateException("Cannot modify read-only score"); + } else { + this.func_96649_a(1); + } + } + + public int func_96652_c() { + return this.field_96655_e; + } + + public void func_96647_c(int var1) { + int var2 = this.field_96655_e; + this.field_96655_e = var1; + if(var2 != var1) { + this.func_96650_f().func_96536_a(this); + } + + } + + public ScoreObjective func_96645_d() { + return this.field_96657_c; + } + + public String func_96653_e() { + return this.field_96654_d; + } + + public Scoreboard func_96650_f() { + return this.theScoreboard; + } + + public void func_96651_a(List var1) { + this.func_96647_c(this.field_96657_c.getCriteria().func_96635_a(var1)); + } +} diff --git a/src/net/minecraft/src/ScoreComparator.java b/src/net/minecraft/src/ScoreComparator.java new file mode 100644 index 0000000..3d82568 --- /dev/null +++ b/src/net/minecraft/src/ScoreComparator.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +import java.util.Comparator; + +final class ScoreComparator implements Comparator { + public int func_96659_a(Score var1, Score var2) { + return var1.func_96652_c() > var2.func_96652_c() ? 1 : (var1.func_96652_c() < var2.func_96652_c() ? -1 : 0); + } + + public int compare(Object var1, Object var2) { + return this.func_96659_a((Score)var1, (Score)var2); + } +} diff --git a/src/net/minecraft/src/ScoreDummyCriteria.java b/src/net/minecraft/src/ScoreDummyCriteria.java new file mode 100644 index 0000000..fc3a384 --- /dev/null +++ b/src/net/minecraft/src/ScoreDummyCriteria.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import java.util.List; + +public class ScoreDummyCriteria implements ScoreObjectiveCriteria { + private final String field_96644_g; + + public ScoreDummyCriteria(String var1) { + this.field_96644_g = var1; + ScoreObjectiveCriteria.field_96643_a.put(var1, this); + } + + public String func_96636_a() { + return this.field_96644_g; + } + + public int func_96635_a(List var1) { + return 0; + } + + public boolean isReadOnly() { + return false; + } +} diff --git a/src/net/minecraft/src/ScoreHealthCriteria.java b/src/net/minecraft/src/ScoreHealthCriteria.java new file mode 100644 index 0000000..a9bbb93 --- /dev/null +++ b/src/net/minecraft/src/ScoreHealthCriteria.java @@ -0,0 +1,39 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class ScoreHealthCriteria extends ScoreDummyCriteria { + public ScoreHealthCriteria(String var1) { + super(var1); + } + + public int func_96635_a(List var1) { + float var2 = 0.0F; + + int var5; + float var6; + for(Iterator var3 = var1.iterator(); var3.hasNext(); var2 += (float)var5 / var6) { + EntityPlayer var4 = (EntityPlayer)var3.next(); + var5 = var4.getHealth(); + var6 = (float)var4.getMaxHealth(); + if(var5 < 0) { + var5 = 0; + } + + if((float)var5 > var6) { + var5 = var4.getMaxHealth(); + } + } + + if(var1.size() > 0) { + var2 /= (float)var1.size(); + } + + return MathHelper.floor_float(var2 * 19.0F) + (var2 > 0.0F ? 1 : 0); + } + + public boolean isReadOnly() { + return true; + } +} diff --git a/src/net/minecraft/src/ScoreObjective.java b/src/net/minecraft/src/ScoreObjective.java new file mode 100644 index 0000000..28e962d --- /dev/null +++ b/src/net/minecraft/src/ScoreObjective.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +public class ScoreObjective { + private final Scoreboard theScoreboard; + private final String name; + private final ScoreObjectiveCriteria objectiveCriteria; + private String displayName; + + public ScoreObjective(Scoreboard var1, String var2, ScoreObjectiveCriteria var3) { + this.theScoreboard = var1; + this.name = var2; + this.objectiveCriteria = var3; + this.displayName = var2; + } + + public Scoreboard getScoreboard() { + return this.theScoreboard; + } + + public String getName() { + return this.name; + } + + public ScoreObjectiveCriteria getCriteria() { + return this.objectiveCriteria; + } + + public String getDisplayName() { + return this.displayName; + } + + public void setDisplayName(String var1) { + this.displayName = var1; + this.theScoreboard.func_96532_b(this); + } +} diff --git a/src/net/minecraft/src/ScoreObjectiveCriteria.java b/src/net/minecraft/src/ScoreObjectiveCriteria.java new file mode 100644 index 0000000..df4ca25 --- /dev/null +++ b/src/net/minecraft/src/ScoreObjectiveCriteria.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public interface ScoreObjectiveCriteria { + Map field_96643_a = new HashMap(); + ScoreObjectiveCriteria field_96641_b = new ScoreDummyCriteria("dummy"); + ScoreObjectiveCriteria field_96642_c = new ScoreDummyCriteria("deathCount"); + ScoreObjectiveCriteria field_96639_d = new ScoreDummyCriteria("playerKillCount"); + ScoreObjectiveCriteria field_96640_e = new ScoreDummyCriteria("totalKillCount"); + ScoreObjectiveCriteria field_96638_f = new ScoreHealthCriteria("health"); + + String func_96636_a(); + + int func_96635_a(List var1); + + boolean isReadOnly(); +} diff --git a/src/net/minecraft/src/ScorePlayerTeam.java b/src/net/minecraft/src/ScorePlayerTeam.java new file mode 100644 index 0000000..25254b3 --- /dev/null +++ b/src/net/minecraft/src/ScorePlayerTeam.java @@ -0,0 +1,112 @@ +package net.minecraft.src; + +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; + +public class ScorePlayerTeam { + private final Scoreboard theScoreboard; + private final String field_96675_b; + private final Set membershipSet = new HashSet(); + private String field_96673_d; + private String field_96674_e = ""; + private String field_96671_f = ""; + private boolean field_96672_g = true; + private boolean field_98301_h = true; + + public ScorePlayerTeam(Scoreboard var1, String var2) { + this.theScoreboard = var1; + this.field_96675_b = var2; + this.field_96673_d = var2; + } + + public String func_96661_b() { + return this.field_96675_b; + } + + public String func_96669_c() { + return this.field_96673_d; + } + + public void func_96664_a(String var1) { + if(var1 == null) { + throw new IllegalArgumentException("Name cannot be null"); + } else { + this.field_96673_d = var1; + this.theScoreboard.func_96538_b(this); + } + } + + public Collection getMembershipCollection() { + return this.membershipSet; + } + + public String func_96668_e() { + return this.field_96674_e; + } + + public void func_96666_b(String var1) { + if(var1 == null) { + throw new IllegalArgumentException("Prefix cannot be null"); + } else { + this.field_96674_e = var1; + this.theScoreboard.func_96538_b(this); + } + } + + public String func_96663_f() { + return this.field_96671_f; + } + + public void func_96662_c(String var1) { + if(var1 == null) { + throw new IllegalArgumentException("Suffix cannot be null"); + } else { + this.field_96671_f = var1; + this.theScoreboard.func_96538_b(this); + } + } + + public static String func_96667_a(ScorePlayerTeam var0, String var1) { + return var0 == null ? var1 : var0.func_96668_e() + var1 + var0.func_96663_f(); + } + + public boolean func_96665_g() { + return this.field_96672_g; + } + + public void func_96660_a(boolean var1) { + this.field_96672_g = var1; + this.theScoreboard.func_96538_b(this); + } + + public boolean func_98297_h() { + return this.field_98301_h; + } + + public void func_98300_b(boolean var1) { + this.field_98301_h = var1; + this.theScoreboard.func_96538_b(this); + } + + public int func_98299_i() { + int var1 = 0; + int var2 = 0; + if(this.func_96665_g()) { + var1 |= 1 << var2++; + } + + if(this.func_98297_h()) { + var1 |= 1 << var2++; + } + + return var1; + } + + public void func_98298_a(int var1) { + byte var2 = 0; + int var3 = var2 + 1; + this.func_96660_a((var1 & 1 << var2) > 0); + this.func_98300_b((var1 & 1 << var3++) > 0); + } +} diff --git a/src/net/minecraft/src/Scoreboard.java b/src/net/minecraft/src/Scoreboard.java new file mode 100644 index 0000000..ffb7919 --- /dev/null +++ b/src/net/minecraft/src/Scoreboard.java @@ -0,0 +1,259 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class Scoreboard { + private final Map scoreObjectives = new HashMap(); + private final Map field_96543_b = new HashMap(); + private final Map field_96544_c = new HashMap(); + private final ScoreObjective[] field_96541_d = new ScoreObjective[3]; + private final Map field_96542_e = new HashMap(); + private final Map teamMemberships = new HashMap(); + + public ScoreObjective getObjective(String var1) { + return (ScoreObjective)this.scoreObjectives.get(var1); + } + + public ScoreObjective func_96535_a(String var1, ScoreObjectiveCriteria var2) { + ScoreObjective var3 = this.getObjective(var1); + if(var3 != null) { + throw new IllegalArgumentException("An objective with the name \'" + var1 + "\' already exists!"); + } else { + var3 = new ScoreObjective(this, var1, var2); + Object var4 = (List)this.field_96543_b.get(var2); + if(var4 == null) { + var4 = new ArrayList(); + this.field_96543_b.put(var2, var4); + } + + ((List)var4).add(var3); + this.scoreObjectives.put(var1, var3); + this.func_96522_a(var3); + return var3; + } + } + + public Collection func_96520_a(ScoreObjectiveCriteria var1) { + Collection var2 = (Collection)this.field_96543_b.get(var1); + return var2 == null ? new ArrayList() : new ArrayList(var2); + } + + public Score func_96529_a(String var1, ScoreObjective var2) { + Object var3 = (Map)this.field_96544_c.get(var1); + if(var3 == null) { + var3 = new HashMap(); + this.field_96544_c.put(var1, var3); + } + + Score var4 = (Score)((Map)var3).get(var2); + if(var4 == null) { + var4 = new Score(this, var2, var1); + ((Map)var3).put(var2, var4); + } + + return var4; + } + + public Collection func_96534_i(ScoreObjective var1) { + ArrayList var2 = new ArrayList(); + Iterator var3 = this.field_96544_c.values().iterator(); + + while(var3.hasNext()) { + Map var4 = (Map)var3.next(); + Score var5 = (Score)var4.get(var1); + if(var5 != null) { + var2.add(var5); + } + } + + Collections.sort(var2, Score.field_96658_a); + return var2; + } + + public Collection getScoreObjectives() { + return this.scoreObjectives.values(); + } + + public Collection getObjectiveNames() { + return this.field_96544_c.keySet(); + } + + public void func_96515_c(String var1) { + Map var2 = (Map)this.field_96544_c.remove(var1); + if(var2 != null) { + this.func_96516_a(var1); + } + + } + + public Collection func_96528_e() { + Collection var1 = this.field_96544_c.values(); + ArrayList var2 = new ArrayList(); + if(var1 != null) { + Iterator var3 = var1.iterator(); + + while(var3.hasNext()) { + Map var4 = (Map)var3.next(); + var2.addAll(var4.values()); + } + } + + return var2; + } + + public Map func_96510_d(String var1) { + Object var2 = (Map)this.field_96544_c.get(var1); + if(var2 == null) { + var2 = new HashMap(); + } + + return (Map)var2; + } + + public void func_96519_k(ScoreObjective var1) { + this.scoreObjectives.remove(var1.getName()); + + for(int var2 = 0; var2 < 3; ++var2) { + if(this.func_96539_a(var2) == var1) { + this.func_96530_a(var2, (ScoreObjective)null); + } + } + + List var5 = (List)this.field_96543_b.get(var1.getCriteria()); + if(var5 != null) { + var5.remove(var1); + } + + Iterator var3 = this.field_96544_c.values().iterator(); + + while(var3.hasNext()) { + Map var4 = (Map)var3.next(); + var4.remove(var1); + } + + this.func_96533_c(var1); + } + + public void func_96530_a(int var1, ScoreObjective var2) { + this.field_96541_d[var1] = var2; + } + + public ScoreObjective func_96539_a(int var1) { + return this.field_96541_d[var1]; + } + + public ScorePlayerTeam func_96508_e(String var1) { + return (ScorePlayerTeam)this.field_96542_e.get(var1); + } + + public ScorePlayerTeam func_96527_f(String var1) { + ScorePlayerTeam var2 = this.func_96508_e(var1); + if(var2 != null) { + throw new IllegalArgumentException("An objective with the name \'" + var1 + "\' already exists!"); + } else { + var2 = new ScorePlayerTeam(this, var1); + this.field_96542_e.put(var1, var2); + this.func_96523_a(var2); + return var2; + } + } + + public void func_96511_d(ScorePlayerTeam var1) { + this.field_96542_e.remove(var1.func_96661_b()); + Iterator var2 = var1.getMembershipCollection().iterator(); + + while(var2.hasNext()) { + String var3 = (String)var2.next(); + this.teamMemberships.remove(var3); + } + + this.func_96513_c(var1); + } + + public void func_96521_a(String var1, ScorePlayerTeam var2) { + if(this.getPlayersTeam(var1) != null) { + this.func_96524_g(var1); + } + + this.teamMemberships.put(var1, var2); + var2.getMembershipCollection().add(var1); + } + + public boolean func_96524_g(String var1) { + ScorePlayerTeam var2 = this.getPlayersTeam(var1); + if(var2 != null) { + this.removePlayerFromTeam(var1, var2); + return true; + } else { + return false; + } + } + + public void removePlayerFromTeam(String var1, ScorePlayerTeam var2) { + if(this.getPlayersTeam(var1) != var2) { + throw new IllegalStateException("Player is either on another team or not on any team. Cannot remove from team \'" + var2.func_96661_b() + "\'."); + } else { + this.teamMemberships.remove(var1); + var2.getMembershipCollection().remove(var1); + } + } + + public Collection func_96531_f() { + return this.field_96542_e.keySet(); + } + + public Collection func_96525_g() { + return this.field_96542_e.values(); + } + + public ScorePlayerTeam getPlayersTeam(String var1) { + return (ScorePlayerTeam)this.teamMemberships.get(var1); + } + + public void func_96522_a(ScoreObjective var1) { + } + + public void func_96532_b(ScoreObjective var1) { + } + + public void func_96533_c(ScoreObjective var1) { + } + + public void func_96536_a(Score var1) { + } + + public void func_96516_a(String var1) { + } + + public void func_96523_a(ScorePlayerTeam var1) { + } + + public void func_96538_b(ScorePlayerTeam var1) { + } + + public void func_96513_c(ScorePlayerTeam var1) { + } + + public static String getObjectiveDisplaySlot(int var0) { + switch(var0) { + case 0: + return "list"; + case 1: + return "sidebar"; + case 2: + return "belowName"; + default: + return null; + } + } + + public static int getObjectiveDisplaySlotNumber(String var0) { + return var0.equalsIgnoreCase("list") ? 0 : (var0.equalsIgnoreCase("sidebar") ? 1 : (var0.equalsIgnoreCase("belowName") ? 2 : -1)); + } +} diff --git a/src/net/minecraft/src/ScoreboardSaveData.java b/src/net/minecraft/src/ScoreboardSaveData.java new file mode 100644 index 0000000..6df4686 --- /dev/null +++ b/src/net/minecraft/src/ScoreboardSaveData.java @@ -0,0 +1,193 @@ +package net.minecraft.src; + +import java.util.Collection; +import java.util.Iterator; +import net.minecraft.server.MinecraftServer; + +public class ScoreboardSaveData extends WorldSavedData { + private Scoreboard field_96507_a; + private NBTTagCompound field_96506_b; + + public ScoreboardSaveData() { + this("scoreboard"); + } + + public ScoreboardSaveData(String var1) { + super(var1); + } + + public void func_96499_a(Scoreboard var1) { + this.field_96507_a = var1; + if(this.field_96506_b != null) { + this.readFromNBT(this.field_96506_b); + } + + } + + public void readFromNBT(NBTTagCompound var1) { + if(this.field_96507_a == null) { + this.field_96506_b = var1; + } else { + this.func_96501_b(var1.getTagList("Objectives")); + this.func_96500_c(var1.getTagList("PlayerScores")); + if(var1.hasKey("DisplaySlots")) { + this.func_96504_c(var1.getCompoundTag("DisplaySlots")); + } + + if(var1.hasKey("Teams")) { + this.func_96498_a(var1.getTagList("Teams")); + } + + } + } + + protected void func_96498_a(NBTTagList var1) { + for(int var2 = 0; var2 < var1.tagCount(); ++var2) { + NBTTagCompound var3 = (NBTTagCompound)var1.tagAt(var2); + ScorePlayerTeam var4 = this.field_96507_a.func_96527_f(var3.getString("Name")); + var4.func_96664_a(var3.getString("DisplayName")); + var4.func_96666_b(var3.getString("Prefix")); + var4.func_96662_c(var3.getString("Suffix")); + if(var3.hasKey("AllowFriendlyFire")) { + var4.func_96660_a(var3.getBoolean("AllowFriendlyFire")); + } + + if(var3.hasKey("SeeFriendlyInvisibles")) { + var4.func_98300_b(var3.getBoolean("SeeFriendlyInvisibles")); + } + + this.func_96502_a(var4, var3.getTagList("Players")); + } + + } + + protected void func_96502_a(ScorePlayerTeam var1, NBTTagList var2) { + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + this.field_96507_a.func_96521_a(((NBTTagString)var2.tagAt(var3)).data, var1); + } + + } + + protected void func_96504_c(NBTTagCompound var1) { + for(int var2 = 0; var2 < 3; ++var2) { + if(var1.hasKey("slot_" + var2)) { + String var3 = var1.getString("slot_" + var2); + ScoreObjective var4 = this.field_96507_a.getObjective(var3); + this.field_96507_a.func_96530_a(var2, var4); + } + } + + } + + protected void func_96501_b(NBTTagList var1) { + for(int var2 = 0; var2 < var1.tagCount(); ++var2) { + NBTTagCompound var3 = (NBTTagCompound)var1.tagAt(var2); + ScoreObjectiveCriteria var4 = (ScoreObjectiveCriteria)ScoreObjectiveCriteria.field_96643_a.get(var3.getString("CriteriaName")); + ScoreObjective var5 = this.field_96507_a.func_96535_a(var3.getString("Name"), var4); + var5.setDisplayName(var3.getString("DisplayName")); + } + + } + + protected void func_96500_c(NBTTagList var1) { + for(int var2 = 0; var2 < var1.tagCount(); ++var2) { + NBTTagCompound var3 = (NBTTagCompound)var1.tagAt(var2); + ScoreObjective var4 = this.field_96507_a.getObjective(var3.getString("Objective")); + Score var5 = this.field_96507_a.func_96529_a(var3.getString("Name"), var4); + var5.func_96647_c(var3.getInteger("Score")); + } + + } + + public void writeToNBT(NBTTagCompound var1) { + if(this.field_96507_a == null) { + MinecraftServer.getServer().getLogAgent().logWarning("Tried to save scoreboard without having a scoreboard..."); + } else { + var1.setTag("Objectives", this.func_96505_b()); + var1.setTag("PlayerScores", this.func_96503_e()); + var1.setTag("Teams", this.func_96496_a()); + this.func_96497_d(var1); + } + } + + protected NBTTagList func_96496_a() { + NBTTagList var1 = new NBTTagList(); + Collection var2 = this.field_96507_a.func_96525_g(); + Iterator var3 = var2.iterator(); + + while(var3.hasNext()) { + ScorePlayerTeam var4 = (ScorePlayerTeam)var3.next(); + NBTTagCompound var5 = new NBTTagCompound(); + var5.setString("Name", var4.func_96661_b()); + var5.setString("DisplayName", var4.func_96669_c()); + var5.setString("Prefix", var4.func_96668_e()); + var5.setString("Suffix", var4.func_96663_f()); + var5.setBoolean("AllowFriendlyFire", var4.func_96665_g()); + var5.setBoolean("SeeFriendlyInvisibles", var4.func_98297_h()); + NBTTagList var6 = new NBTTagList(); + Iterator var7 = var4.getMembershipCollection().iterator(); + + while(var7.hasNext()) { + String var8 = (String)var7.next(); + var6.appendTag(new NBTTagString("", var8)); + } + + var5.setTag("Players", var6); + var1.appendTag(var5); + } + + return var1; + } + + protected void func_96497_d(NBTTagCompound var1) { + NBTTagCompound var2 = new NBTTagCompound(); + boolean var3 = false; + + for(int var4 = 0; var4 < 3; ++var4) { + ScoreObjective var5 = this.field_96507_a.func_96539_a(var4); + if(var5 != null) { + var2.setString("slot_" + var4, var5.getName()); + var3 = true; + } + } + + if(var3) { + var1.setCompoundTag("DisplaySlots", var2); + } + + } + + protected NBTTagList func_96505_b() { + NBTTagList var1 = new NBTTagList(); + Collection var2 = this.field_96507_a.getScoreObjectives(); + Iterator var3 = var2.iterator(); + + while(var3.hasNext()) { + ScoreObjective var4 = (ScoreObjective)var3.next(); + NBTTagCompound var5 = new NBTTagCompound(); + var5.setString("Name", var4.getName()); + var5.setString("CriteriaName", var4.getCriteria().func_96636_a()); + var5.setString("DisplayName", var4.getDisplayName()); + var1.appendTag(var5); + } + + return var1; + } + + protected NBTTagList func_96503_e() { + NBTTagList var1 = new NBTTagList(); + Collection var2 = this.field_96507_a.func_96528_e(); + Iterator var3 = var2.iterator(); + + while(var3.hasNext()) { + Score var4 = (Score)var3.next(); + NBTTagCompound var5 = new NBTTagCompound(); + var5.setString("Name", var4.func_96653_e()); + var5.setString("Objective", var4.func_96645_d().getName()); + var5.setInteger("Score", var4.func_96652_c()); + var1.appendTag(var5); + } + + return var1; + } +} diff --git a/src/net/minecraft/src/ScreenChatOptions.java b/src/net/minecraft/src/ScreenChatOptions.java new file mode 100644 index 0000000..2ccb160 --- /dev/null +++ b/src/net/minecraft/src/ScreenChatOptions.java @@ -0,0 +1,82 @@ +package net.minecraft.src; + +public class ScreenChatOptions extends GuiScreen { + private static final EnumOptions[] allScreenChatOptions = new EnumOptions[]{EnumOptions.CHAT_VISIBILITY, EnumOptions.CHAT_COLOR, EnumOptions.CHAT_LINKS, EnumOptions.CHAT_OPACITY, EnumOptions.CHAT_LINKS_PROMPT, EnumOptions.CHAT_SCALE, EnumOptions.CHAT_HEIGHT_FOCUSED, EnumOptions.CHAT_HEIGHT_UNFOCUSED, EnumOptions.CHAT_WIDTH}; + private static final EnumOptions[] allMultiplayerOptions = new EnumOptions[]{EnumOptions.SHOW_CAPE}; + private final GuiScreen theGuiScreen; + private final GameSettings theSettings; + private String theChatOptions; + private String field_82268_n; + private int field_82269_o = 0; + + public ScreenChatOptions(GuiScreen var1, GameSettings var2) { + this.theGuiScreen = var1; + this.theSettings = var2; + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + int var2 = 0; + this.theChatOptions = var1.translateKey("options.chat.title"); + this.field_82268_n = var1.translateKey("options.multiplayer.title"); + EnumOptions[] var3 = allScreenChatOptions; + int var4 = var3.length; + + int var5; + EnumOptions var6; + for(var5 = 0; var5 < var4; ++var5) { + var6 = var3[var5]; + if(var6.getEnumFloat()) { + this.buttonList.add(new GuiSlider(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.theSettings.getKeyBinding(var6), this.theSettings.getOptionFloatValue(var6))); + } else { + this.buttonList.add(new GuiSmallButton(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.theSettings.getKeyBinding(var6))); + } + + ++var2; + } + + if(var2 % 2 == 1) { + ++var2; + } + + this.field_82269_o = this.height / 6 + 24 * (var2 >> 1); + var2 += 2; + var3 = allMultiplayerOptions; + var4 = var3.length; + + for(var5 = 0; var5 < var4; ++var5) { + var6 = var3[var5]; + if(var6.getEnumFloat()) { + this.buttonList.add(new GuiSlider(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.theSettings.getKeyBinding(var6), this.theSettings.getOptionFloatValue(var6))); + } else { + this.buttonList.add(new GuiSmallButton(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.theSettings.getKeyBinding(var6))); + } + + ++var2; + } + + this.buttonList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, var1.translateKey("gui.done"))); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id < 100 && var1 instanceof GuiSmallButton) { + this.theSettings.setOptionValue(((GuiSmallButton)var1).returnEnumOptions(), 1); + var1.displayString = this.theSettings.getKeyBinding(EnumOptions.getEnumOptions(var1.id)); + } + + if(var1.id == 200) { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(this.theGuiScreen); + } + + } + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.theChatOptions, this.width / 2, 20, 16777215); + this.drawCenteredString(this.fontRenderer, this.field_82268_n, this.width / 2, this.field_82269_o + 7, 16777215); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/ScreenShotHelper.java b/src/net/minecraft/src/ScreenShotHelper.java new file mode 100644 index 0000000..c29e8a3 --- /dev/null +++ b/src/net/minecraft/src/ScreenShotHelper.java @@ -0,0 +1,81 @@ +package net.minecraft.src; + +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.imageio.ImageIO; +import org.lwjgl.BufferUtils; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class ScreenShotHelper { + private static final DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd_HH.mm.ss"); + private static IntBuffer field_74293_b; + private static int[] field_74294_c; + + public static String saveScreenshot(File var0, int var1, int var2) { + return func_74292_a(var0, (String)null, var1, var2); + } + + public static String func_74292_a(File var0, String var1, int var2, int var3) { + try { + File var4 = new File(var0, "screenshots"); + var4.mkdir(); + int var5 = var2 * var3; + if(field_74293_b == null || field_74293_b.capacity() < var5) { + field_74293_b = BufferUtils.createIntBuffer(var5); + field_74294_c = new int[var5]; + } + + GL11.glPixelStorei(GL11.GL_PACK_ALIGNMENT, 1); + GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1); + field_74293_b.clear(); + GL11.glReadPixels(0, 0, var2, var3, GL12.GL_BGRA, GL12.GL_UNSIGNED_INT_8_8_8_8_REV, (IntBuffer)field_74293_b); + field_74293_b.get(field_74294_c); + func_74289_a(field_74294_c, var2, var3); + BufferedImage var6 = new BufferedImage(var2, var3, 1); + var6.setRGB(0, 0, var2, var3, field_74294_c, 0, var2); + File var7; + if(var1 == null) { + var7 = func_74290_a(var4); + } else { + var7 = new File(var4, var1); + } + + ImageIO.write(var6, "png", var7); + return "Saved screenshot as " + var7.getName(); + } catch (Exception var8) { + var8.printStackTrace(); + return "Failed to save: " + var8; + } + } + + private static File func_74290_a(File var0) { + String var2 = dateFormat.format(new Date()).toString(); + int var3 = 1; + + while(true) { + File var1 = new File(var0, var2 + (var3 == 1 ? "" : "_" + var3) + ".png"); + if(!var1.exists()) { + return var1; + } + + ++var3; + } + } + + private static void func_74289_a(int[] var0, int var1, int var2) { + int[] var3 = new int[var1]; + int var4 = var2 / 2; + + for(int var5 = 0; var5 < var4; ++var5) { + System.arraycopy(var0, var5 * var1, var3, 0, var1); + System.arraycopy(var0, (var2 - 1 - var5) * var1, var0, var5 * var1, var1); + System.arraycopy(var3, 0, var0, (var2 - 1 - var5) * var1, var1); + } + + } +} diff --git a/src/net/minecraft/src/SelectionListBase.java b/src/net/minecraft/src/SelectionListBase.java new file mode 100644 index 0000000..e459d62 --- /dev/null +++ b/src/net/minecraft/src/SelectionListBase.java @@ -0,0 +1,264 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +public abstract class SelectionListBase { + private final Minecraft field_96622_a; + private final int field_96619_e; + private final int field_96616_f; + private final int field_96617_g; + private final int field_96627_h; + protected final int field_96620_b; + protected int field_96621_c; + protected int field_96618_d; + private float field_96628_i = -2.0F; + private float field_96625_j; + private float field_96626_k; + private int field_96623_l = -1; + private long field_96624_m = 0L; + + public SelectionListBase(Minecraft var1, int var2, int var3, int var4, int var5, int var6) { + this.field_96622_a = var1; + this.field_96616_f = var3; + this.field_96627_h = var3 + var5; + this.field_96620_b = var6; + this.field_96619_e = var2; + this.field_96617_g = var2 + var4; + } + + protected abstract int func_96608_a(); + + protected abstract void func_96615_a(int var1, boolean var2); + + protected abstract boolean func_96609_a(int var1); + + protected int func_96613_b() { + return this.func_96608_a() * this.field_96620_b; + } + + protected abstract void func_96611_c(); + + protected abstract void func_96610_a(int var1, int var2, int var3, int var4, Tessellator var5); + + private void func_96614_f() { + int var1 = this.func_96607_d(); + if(var1 < 0) { + var1 = 0; + } + + if(this.field_96626_k < 0.0F) { + this.field_96626_k = 0.0F; + } + + if(this.field_96626_k > (float)var1) { + this.field_96626_k = (float)var1; + } + + } + + public int func_96607_d() { + return this.func_96613_b() - (this.field_96627_h - this.field_96616_f - 4); + } + + public void func_96612_a(int var1, int var2, float var3) { + this.field_96621_c = var1; + this.field_96618_d = var2; + this.func_96611_c(); + int var4 = this.func_96608_a(); + int var5 = this.func_96606_e(); + int var6 = var5 + 6; + int var9; + int var10; + int var11; + int var13; + int var20; + if(Mouse.isButtonDown(0)) { + if(this.field_96628_i == -1.0F) { + boolean var16 = true; + if(var2 >= this.field_96616_f && var2 <= this.field_96627_h) { + int var8 = this.field_96619_e + 2; + var9 = this.field_96617_g - 2; + var10 = var2 - this.field_96616_f + (int)this.field_96626_k - 4; + var11 = var10 / this.field_96620_b; + if(var1 >= var8 && var1 <= var9 && var11 >= 0 && var10 >= 0 && var11 < var4) { + boolean var12 = var11 == this.field_96623_l && Minecraft.getSystemTime() - this.field_96624_m < 250L; + this.func_96615_a(var11, var12); + this.field_96623_l = var11; + this.field_96624_m = Minecraft.getSystemTime(); + } else if(var1 >= var8 && var1 <= var9 && var10 < 0) { + var16 = false; + } + + if(var1 >= var5 && var1 <= var6) { + this.field_96625_j = -1.0F; + var20 = this.func_96607_d(); + if(var20 < 1) { + var20 = 1; + } + + var13 = (int)((float)((this.field_96627_h - this.field_96616_f) * (this.field_96627_h - this.field_96616_f)) / (float)this.func_96613_b()); + if(var13 < 32) { + var13 = 32; + } + + if(var13 > this.field_96627_h - this.field_96616_f - 8) { + var13 = this.field_96627_h - this.field_96616_f - 8; + } + + this.field_96625_j /= (float)(this.field_96627_h - this.field_96616_f - var13) / (float)var20; + } else { + this.field_96625_j = 1.0F; + } + + if(var16) { + this.field_96628_i = (float)var2; + } else { + this.field_96628_i = -2.0F; + } + } else { + this.field_96628_i = -2.0F; + } + } else if(this.field_96628_i >= 0.0F) { + this.field_96626_k -= ((float)var2 - this.field_96628_i) * this.field_96625_j; + this.field_96628_i = (float)var2; + } + } else { + while(true) { + if(this.field_96622_a.gameSettings.touchscreen || !Mouse.next()) { + this.field_96628_i = -1.0F; + break; + } + + int var7 = Mouse.getEventDWheel(); + if(var7 != 0) { + if(var7 > 0) { + var7 = -1; + } else if(var7 < 0) { + var7 = 1; + } + + this.field_96626_k += (float)(var7 * this.field_96620_b / 2); + } + } + } + + this.func_96614_f(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_FOG); + Tessellator var18 = Tessellator.instance; + this.field_96622_a.renderEngine.bindTexture("/gui/background.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + float var17 = 32.0F; + var18.startDrawingQuads(); + var18.setColorOpaque_I(2105376); + var18.addVertexWithUV((double)this.field_96619_e, (double)this.field_96627_h, 0.0D, (double)((float)this.field_96619_e / var17), (double)((float)(this.field_96627_h + (int)this.field_96626_k) / var17)); + var18.addVertexWithUV((double)this.field_96617_g, (double)this.field_96627_h, 0.0D, (double)((float)this.field_96617_g / var17), (double)((float)(this.field_96627_h + (int)this.field_96626_k) / var17)); + var18.addVertexWithUV((double)this.field_96617_g, (double)this.field_96616_f, 0.0D, (double)((float)this.field_96617_g / var17), (double)((float)(this.field_96616_f + (int)this.field_96626_k) / var17)); + var18.addVertexWithUV((double)this.field_96619_e, (double)this.field_96616_f, 0.0D, (double)((float)this.field_96619_e / var17), (double)((float)(this.field_96616_f + (int)this.field_96626_k) / var17)); + var18.draw(); + var9 = this.field_96619_e + 2; + var10 = this.field_96616_f + 4 - (int)this.field_96626_k; + + int var14; + for(var11 = 0; var11 < var4; ++var11) { + var20 = var10 + var11 * this.field_96620_b; + var13 = this.field_96620_b - 4; + if(var20 + this.field_96620_b <= this.field_96627_h && var20 - 4 >= this.field_96616_f) { + if(this.func_96609_a(var11)) { + var14 = this.field_96619_e + 2; + int var15 = this.field_96617_g - 2; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + var18.startDrawingQuads(); + var18.setColorOpaque_I(8421504); + var18.addVertexWithUV((double)var14, (double)(var20 + var13 + 2), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)var15, (double)(var20 + var13 + 2), 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)var15, (double)(var20 - 2), 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)var14, (double)(var20 - 2), 0.0D, 0.0D, 0.0D); + var18.setColorOpaque_I(0); + var18.addVertexWithUV((double)(var14 + 1), (double)(var20 + var13 + 1), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)(var15 - 1), (double)(var20 + var13 + 1), 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)(var15 - 1), (double)(var20 - 1), 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)(var14 + 1), (double)(var20 - 1), 0.0D, 0.0D, 0.0D); + var18.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + this.func_96610_a(var11, var9, var20, var13, var18); + } + } + + GL11.glDisable(GL11.GL_DEPTH_TEST); + byte var19 = 4; + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glShadeModel(GL11.GL_SMOOTH); + GL11.glDisable(GL11.GL_TEXTURE_2D); + var18.startDrawingQuads(); + var18.setColorRGBA_I(0, 0); + var18.addVertexWithUV((double)this.field_96619_e, (double)(this.field_96616_f + var19), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)this.field_96617_g, (double)(this.field_96616_f + var19), 0.0D, 1.0D, 1.0D); + var18.setColorRGBA_I(0, 255); + var18.addVertexWithUV((double)this.field_96617_g, (double)this.field_96616_f, 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)this.field_96619_e, (double)this.field_96616_f, 0.0D, 0.0D, 0.0D); + var18.draw(); + var18.startDrawingQuads(); + var18.setColorRGBA_I(0, 255); + var18.addVertexWithUV((double)this.field_96619_e, (double)this.field_96627_h, 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)this.field_96617_g, (double)this.field_96627_h, 0.0D, 1.0D, 1.0D); + var18.setColorRGBA_I(0, 0); + var18.addVertexWithUV((double)this.field_96617_g, (double)(this.field_96627_h - var19), 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)this.field_96619_e, (double)(this.field_96627_h - var19), 0.0D, 0.0D, 0.0D); + var18.draw(); + var20 = this.func_96607_d(); + if(var20 > 0) { + var13 = (this.field_96627_h - this.field_96616_f) * (this.field_96627_h - this.field_96616_f) / this.func_96613_b(); + if(var13 < 32) { + var13 = 32; + } + + if(var13 > this.field_96627_h - this.field_96616_f - 8) { + var13 = this.field_96627_h - this.field_96616_f - 8; + } + + var14 = (int)this.field_96626_k * (this.field_96627_h - this.field_96616_f - var13) / var20 + this.field_96616_f; + if(var14 < this.field_96616_f) { + var14 = this.field_96616_f; + } + + var18.startDrawingQuads(); + var18.setColorRGBA_I(0, 255); + var18.addVertexWithUV((double)var5, (double)this.field_96627_h, 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)var6, (double)this.field_96627_h, 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)var6, (double)this.field_96616_f, 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)var5, (double)this.field_96616_f, 0.0D, 0.0D, 0.0D); + var18.draw(); + var18.startDrawingQuads(); + var18.setColorRGBA_I(8421504, 255); + var18.addVertexWithUV((double)var5, (double)(var14 + var13), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)var6, (double)(var14 + var13), 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)var6, (double)var14, 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)var5, (double)var14, 0.0D, 0.0D, 0.0D); + var18.draw(); + var18.startDrawingQuads(); + var18.setColorRGBA_I(12632256, 255); + var18.addVertexWithUV((double)var5, (double)(var14 + var13 - 1), 0.0D, 0.0D, 1.0D); + var18.addVertexWithUV((double)(var6 - 1), (double)(var14 + var13 - 1), 0.0D, 1.0D, 1.0D); + var18.addVertexWithUV((double)(var6 - 1), (double)var14, 0.0D, 1.0D, 0.0D); + var18.addVertexWithUV((double)var5, (double)var14, 0.0D, 0.0D, 0.0D); + var18.draw(); + } + + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glShadeModel(GL11.GL_FLAT); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDisable(GL11.GL_BLEND); + } + + protected int func_96606_e() { + return this.field_96617_g - 8; + } +} diff --git a/src/net/minecraft/src/SelectionListInvited.java b/src/net/minecraft/src/SelectionListInvited.java new file mode 100644 index 0000000..bae45c8 --- /dev/null +++ b/src/net/minecraft/src/SelectionListInvited.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +class SelectionListInvited extends SelectionListBase { + final GuiScreenConfigureWorld field_98264_a; + + public SelectionListInvited(GuiScreenConfigureWorld var1) { + super(GuiScreenConfigureWorld.func_96265_a(var1), GuiScreenConfigureWorld.func_96271_b(var1), GuiScreenConfigureWorld.func_96274_a(var1, 2), GuiScreenConfigureWorld.func_96269_c(var1), GuiScreenConfigureWorld.func_96274_a(var1, 9) - GuiScreenConfigureWorld.func_96274_a(var1, 2), 12); + this.field_98264_a = var1; + } + + protected int func_96608_a() { + return GuiScreenConfigureWorld.func_96266_d(this.field_98264_a).field_96402_f.size() + 1; + } + + protected void func_96615_a(int var1, boolean var2) { + if(var1 < GuiScreenConfigureWorld.func_96266_d(this.field_98264_a).field_96402_f.size()) { + GuiScreenConfigureWorld.func_96270_b(this.field_98264_a, var1); + } + } + + protected boolean func_96609_a(int var1) { + return var1 == GuiScreenConfigureWorld.func_96263_e(this.field_98264_a); + } + + protected int func_96613_b() { + return this.func_96608_a() * 12; + } + + protected void func_96611_c() { + } + + protected void func_96610_a(int var1, int var2, int var3, int var4, Tessellator var5) { + if(var1 < GuiScreenConfigureWorld.func_96266_d(this.field_98264_a).field_96402_f.size()) { + this.func_98263_b(var1, var2, var3, var4, var5); + } + + } + + private void func_98263_b(int var1, int var2, int var3, int var4, Tessellator var5) { + String var6 = (String)GuiScreenConfigureWorld.func_96266_d(this.field_98264_a).field_96402_f.get(var1); + this.field_98264_a.drawString(GuiScreenConfigureWorld.func_96273_f(this.field_98264_a), var6, var2 + 2, var3 + 1, 16777215); + } +} diff --git a/src/net/minecraft/src/ServerAddress.java b/src/net/minecraft/src/ServerAddress.java new file mode 100644 index 0000000..afc2a37 --- /dev/null +++ b/src/net/minecraft/src/ServerAddress.java @@ -0,0 +1,82 @@ +package net.minecraft.src; + +import java.util.Hashtable; +import javax.naming.directory.Attributes; +import javax.naming.directory.InitialDirContext; + +public class ServerAddress { + private final String ipAddress; + private final int serverPort; + + private ServerAddress(String var1, int var2) { + this.ipAddress = var1; + this.serverPort = var2; + } + + public String getIP() { + return this.ipAddress; + } + + public int getPort() { + return this.serverPort; + } + + public static ServerAddress func_78860_a(String var0) { + if(var0 == null) { + return null; + } else { + String[] var1 = var0.split(":"); + if(var0.startsWith("[")) { + int var2 = var0.indexOf("]"); + if(var2 > 0) { + String var3 = var0.substring(1, var2); + String var4 = var0.substring(var2 + 1).trim(); + if(var4.startsWith(":") && var4.length() > 0) { + var4 = var4.substring(1); + var1 = new String[]{var3, var4}; + } else { + var1 = new String[]{var3}; + } + } + } + + if(var1.length > 2) { + var1 = new String[]{var0}; + } + + String var5 = var1[0]; + int var6 = var1.length > 1 ? parseIntWithDefault(var1[1], 25565) : 25565; + if(var6 == 25565) { + String[] var7 = getServerAddress(var5); + var5 = var7[0]; + var6 = parseIntWithDefault(var7[1], 25565); + } + + return new ServerAddress(var5, var6); + } + } + + private static String[] getServerAddress(String var0) { + try { + Class.forName("com.sun.jndi.dns.DnsContextFactory"); + Hashtable var2 = new Hashtable(); + var2.put("java.naming.factory.initial", "com.sun.jndi.dns.DnsContextFactory"); + var2.put("java.naming.provider.url", "dns:"); + var2.put("com.sun.jndi.dns.timeout.retries", "1"); + InitialDirContext var3 = new InitialDirContext(var2); + Attributes var4 = var3.getAttributes("_minecraft._tcp." + var0, new String[]{"SRV"}); + String[] var5 = var4.get("srv").get().toString().split(" ", 4); + return new String[]{var5[3], var5[2]}; + } catch (Throwable var6) { + return new String[]{var0, Integer.toString(25565)}; + } + } + + private static int parseIntWithDefault(String var0, int var1) { + try { + return Integer.parseInt(var0.trim()); + } catch (Exception var3) { + return var1; + } + } +} diff --git a/src/net/minecraft/src/ServerBlockEvent.java b/src/net/minecraft/src/ServerBlockEvent.java new file mode 100644 index 0000000..4f7f9b9 --- /dev/null +++ b/src/net/minecraft/src/ServerBlockEvent.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +class ServerBlockEvent { +} diff --git a/src/net/minecraft/src/ServerBlockEventList.java b/src/net/minecraft/src/ServerBlockEventList.java new file mode 100644 index 0000000..ef48cbd --- /dev/null +++ b/src/net/minecraft/src/ServerBlockEventList.java @@ -0,0 +1,12 @@ +package net.minecraft.src; + +import java.util.ArrayList; + +class ServerBlockEventList extends ArrayList { + private ServerBlockEventList() { + } + + ServerBlockEventList(ServerBlockEvent var1) { + this(); + } +} diff --git a/src/net/minecraft/src/ServerCommand.java b/src/net/minecraft/src/ServerCommand.java new file mode 100644 index 0000000..c466cd1 --- /dev/null +++ b/src/net/minecraft/src/ServerCommand.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class ServerCommand { + public final String command; + public final ICommandSender sender; + + public ServerCommand(String var1, ICommandSender var2) { + this.command = var1; + this.sender = var2; + } +} diff --git a/src/net/minecraft/src/ServerCommandManager.java b/src/net/minecraft/src/ServerCommandManager.java new file mode 100644 index 0000000..74d14af --- /dev/null +++ b/src/net/minecraft/src/ServerCommandManager.java @@ -0,0 +1,79 @@ +package net.minecraft.src; + +import java.util.Iterator; +import net.minecraft.server.MinecraftServer; + +public class ServerCommandManager extends CommandHandler implements IAdminCommand { + public ServerCommandManager() { + 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 CommandServerTp()); + this.registerCommand(new CommandGive()); + this.registerCommand(new CommandEffect()); + this.registerCommand(new CommandEnchant()); + this.registerCommand(new CommandServerEmote()); + this.registerCommand(new CommandShowSeed()); + this.registerCommand(new CommandHelp()); + this.registerCommand(new CommandDebug()); + this.registerCommand(new CommandServerMessage()); + this.registerCommand(new CommandServerSay()); + this.registerCommand(new CommandSetSpawnpoint()); + this.registerCommand(new CommandGameRule()); + this.registerCommand(new CommandClearInventory()); + this.registerCommand(new ServerCommandTestFor()); + this.registerCommand(new ServerCommandScoreboard()); + if(MinecraftServer.getServer().isDedicatedServer()) { + this.registerCommand(new CommandServerOp()); + this.registerCommand(new CommandServerDeop()); + this.registerCommand(new CommandServerStop()); + this.registerCommand(new CommandServerSaveAll()); + this.registerCommand(new CommandServerSaveOff()); + this.registerCommand(new CommandServerSaveOn()); + this.registerCommand(new CommandServerBanIp()); + this.registerCommand(new CommandServerPardonIp()); + this.registerCommand(new CommandServerBan()); + this.registerCommand(new CommandServerBanlist()); + this.registerCommand(new CommandServerPardon()); + this.registerCommand(new CommandServerKick()); + this.registerCommand(new CommandServerList()); + this.registerCommand(new CommandServerWhitelist()); + } else { + this.registerCommand(new CommandServerPublishLocal()); + } + + CommandBase.setAdminCommander(this); + } + + public void notifyAdmins(ICommandSender var1, int var2, String var3, Object... var4) { + boolean var5 = true; + if(var1 instanceof TileEntityCommandBlock && !MinecraftServer.getServer().worldServers[0].getGameRules().getGameRuleBooleanValue("commandBlockOutput")) { + var5 = false; + } + + if(var5) { + Iterator var6 = MinecraftServer.getServer().getConfigurationManager().playerEntityList.iterator(); + + while(var6.hasNext()) { + EntityPlayerMP var7 = (EntityPlayerMP)var6.next(); + if(var7 != var1 && MinecraftServer.getServer().getConfigurationManager().areCommandsAllowed(var7.username)) { + var7.sendChatToPlayer("" + EnumChatFormatting.GRAY + "" + EnumChatFormatting.ITALIC + "[" + var1.getCommandSenderName() + ": " + var7.translateString(var3, var4) + "]"); + } + } + } + + if(var1 != MinecraftServer.getServer()) { + MinecraftServer.getServer().getLogAgent().logInfo("[" + var1.getCommandSenderName() + ": " + MinecraftServer.getServer().translateString(var3, var4) + "]"); + } + + if((var2 & 1) != 1) { + var1.sendChatToPlayer(var1.translateString(var3, var4)); + } + + } +} diff --git a/src/net/minecraft/src/ServerCommandScoreboard.java b/src/net/minecraft/src/ServerCommandScoreboard.java new file mode 100644 index 0000000..860e0e1 --- /dev/null +++ b/src/net/minecraft/src/ServerCommandScoreboard.java @@ -0,0 +1,602 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import net.minecraft.server.MinecraftServer; + +public class ServerCommandScoreboard extends CommandBase { + public String getCommandName() { + return "scoreboard"; + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length >= 1) { + if(var2[0].equalsIgnoreCase("objectives")) { + if(var2.length == 1) { + throw new WrongUsageException("commands.scoreboard.objectives.usage", new Object[0]); + } + + if(var2[1].equalsIgnoreCase("list")) { + this.getObjectivesList(var1); + } else if(var2[1].equalsIgnoreCase("add")) { + if(var2.length < 4) { + throw new WrongUsageException("commands.scoreboard.objectives.add.usage", new Object[0]); + } + + this.addObjective(var1, var2, 2); + } else if(var2[1].equalsIgnoreCase("remove")) { + if(var2.length != 3) { + throw new WrongUsageException("commands.scoreboard.objectives.remove.usage", new Object[0]); + } + + this.removeObjective(var1, var2[2]); + } else { + if(!var2[1].equalsIgnoreCase("setdisplay")) { + throw new WrongUsageException("commands.scoreboard.objectives.usage", new Object[0]); + } + + if(var2.length != 3 && var2.length != 4) { + throw new WrongUsageException("commands.scoreboard.objectives.setdisplay.usage", new Object[0]); + } + + this.setObjectivesDisplay(var1, var2, 2); + } + + return; + } + + if(var2[0].equalsIgnoreCase("players")) { + if(var2.length == 1) { + throw new WrongUsageException("commands.scoreboard.players.usage", new Object[0]); + } + + if(var2[1].equalsIgnoreCase("list")) { + if(var2.length > 3) { + throw new WrongUsageException("commands.scoreboard.players.list.usage", new Object[0]); + } + + this.listPlayers(var1, var2, 2); + } else if(var2[1].equalsIgnoreCase("add")) { + if(var2.length != 5) { + throw new WrongUsageException("commands.scoreboard.players.add.usage", new Object[0]); + } + + this.setPlayerScore(var1, var2, 2); + } else if(var2[1].equalsIgnoreCase("remove")) { + if(var2.length != 5) { + throw new WrongUsageException("commands.scoreboard.players.remove.usage", new Object[0]); + } + + this.setPlayerScore(var1, var2, 2); + } else if(var2[1].equalsIgnoreCase("set")) { + if(var2.length != 5) { + throw new WrongUsageException("commands.scoreboard.players.set.usage", new Object[0]); + } + + this.setPlayerScore(var1, var2, 2); + } else { + if(!var2[1].equalsIgnoreCase("reset")) { + throw new WrongUsageException("commands.scoreboard.players.usage", new Object[0]); + } + + if(var2.length != 3) { + throw new WrongUsageException("commands.scoreboard.players.reset.usage", new Object[0]); + } + + this.resetPlayerScore(var1, var2, 2); + } + + return; + } + + if(var2[0].equalsIgnoreCase("teams")) { + if(var2.length == 1) { + throw new WrongUsageException("commands.scoreboard.teams.usage", new Object[0]); + } + + if(var2[1].equalsIgnoreCase("list")) { + if(var2.length > 3) { + throw new WrongUsageException("commands.scoreboard.teams.list.usage", new Object[0]); + } + + this.getTeamList(var1, var2, 2); + } else if(var2[1].equalsIgnoreCase("add")) { + if(var2.length < 3) { + throw new WrongUsageException("commands.scoreboard.teams.add.usage", new Object[0]); + } + + this.addTeam(var1, var2, 2); + } else if(var2[1].equalsIgnoreCase("remove")) { + if(var2.length != 3) { + throw new WrongUsageException("commands.scoreboard.teams.remove.usage", new Object[0]); + } + + this.removeTeam(var1, var2, 2); + } else if(var2[1].equalsIgnoreCase("empty")) { + if(var2.length != 3) { + throw new WrongUsageException("commands.scoreboard.teams.empty.usage", new Object[0]); + } + + this.emptyTeam(var1, var2, 2); + } else if(var2[1].equalsIgnoreCase("join")) { + if(var2.length < 4 && (var2.length != 3 || !(var1 instanceof EntityPlayer))) { + throw new WrongUsageException("commands.scoreboard.teams.join.usage", new Object[0]); + } + + this.joinTeam(var1, var2, 2); + } else if(var2[1].equalsIgnoreCase("leave")) { + if(var2.length < 3 && !(var1 instanceof EntityPlayer)) { + throw new WrongUsageException("commands.scoreboard.teams.leave.usage", new Object[0]); + } + + this.leaveTeam(var1, var2, 2); + } else { + if(!var2[1].equalsIgnoreCase("option")) { + throw new WrongUsageException("commands.scoreboard.teams.usage", new Object[0]); + } + + if(var2.length != 4 && var2.length != 5) { + throw new WrongUsageException("commands.scoreboard.teams.option.usage", new Object[0]); + } + + this.setTeamOption(var1, var2, 2); + } + + return; + } + } + + throw new WrongUsageException("commands.scoreboard.usage", new Object[0]); + } + + protected Scoreboard getScoreboardFromWorldServer() { + return MinecraftServer.getServer().worldServerForDimension(0).getScoreboard(); + } + + protected ScoreObjective getScoreObjective(String var1, boolean var2) { + Scoreboard var3 = this.getScoreboardFromWorldServer(); + ScoreObjective var4 = var3.getObjective(var1); + if(var4 == null) { + throw new CommandException("commands.scoreboard.objectiveNotFound", new Object[]{var1}); + } else if(var2 && var4.getCriteria().isReadOnly()) { + throw new CommandException("commands.scoreboard.objectiveReadOnly", new Object[]{var1}); + } else { + return var4; + } + } + + protected ScorePlayerTeam getTeam(String var1) { + Scoreboard var2 = this.getScoreboardFromWorldServer(); + ScorePlayerTeam var3 = var2.func_96508_e(var1); + if(var3 == null) { + throw new CommandException("commands.scoreboard.teamNotFound", new Object[]{var1}); + } else { + return var3; + } + } + + protected void addObjective(ICommandSender var1, String[] var2, int var3) { + String var4 = var2[var3++]; + String var5 = var2[var3++]; + Scoreboard var6 = this.getScoreboardFromWorldServer(); + ScoreObjectiveCriteria var7 = (ScoreObjectiveCriteria)ScoreObjectiveCriteria.field_96643_a.get(var5); + if(var7 == null) { + String[] var10 = (String[])ScoreObjectiveCriteria.field_96643_a.keySet().toArray(new String[0]); + throw new WrongUsageException("commands.scoreboard.objectives.add.wrongType", new Object[]{joinNiceString(var10)}); + } else if(var6.getObjective(var4) != null) { + throw new CommandException("commands.scoreboard.objectives.add.alreadyExists", new Object[]{var4}); + } else if(var4.length() > 16) { + throw new SyntaxErrorException("commands.scoreboard.objectives.add.tooLong", new Object[]{var4, Integer.valueOf(16)}); + } else { + ScoreObjective var8 = var6.func_96535_a(var4, var7); + if(var2.length > var3) { + String var9 = func_82360_a(var1, var2, var3); + if(var9.length() > 32) { + throw new SyntaxErrorException("commands.scoreboard.objectives.add.displayTooLong", new Object[]{var9, Integer.valueOf(32)}); + } + + if(var9.length() > 0) { + var8.setDisplayName(var9); + } + } + + notifyAdmins(var1, "commands.scoreboard.objectives.add.success", new Object[]{var4}); + } + } + + protected void addTeam(ICommandSender var1, String[] var2, int var3) { + String var4 = var2[var3++]; + Scoreboard var5 = this.getScoreboardFromWorldServer(); + if(var5.func_96508_e(var4) != null) { + throw new CommandException("commands.scoreboard.teams.add.alreadyExists", new Object[]{var4}); + } else if(var4.length() > 16) { + throw new SyntaxErrorException("commands.scoreboard.teams.add.tooLong", new Object[]{var4, Integer.valueOf(16)}); + } else { + ScorePlayerTeam var6 = var5.func_96527_f(var4); + if(var2.length > var3) { + String var7 = func_82360_a(var1, var2, var3); + if(var7.length() > 32) { + throw new SyntaxErrorException("commands.scoreboard.teams.add.displayTooLong", new Object[]{var7, Integer.valueOf(32)}); + } + + if(var7.length() > 0) { + var6.func_96664_a(var7); + } + } + + notifyAdmins(var1, "commands.scoreboard.teams.add.success", new Object[]{var4}); + } + } + + protected void setTeamOption(ICommandSender var1, String[] var2, int var3) { + ScorePlayerTeam var4 = this.getTeam(var2[var3++]); + String var5 = var2[var3++].toLowerCase(); + if(!var5.equalsIgnoreCase("color") && !var5.equalsIgnoreCase("friendlyfire") && !var5.equalsIgnoreCase("seeFriendlyInvisibles")) { + throw new WrongUsageException("commands.scoreboard.teams.option.usage", new Object[0]); + } else if(var2.length == 4) { + if(var5.equalsIgnoreCase("color")) { + throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[]{var5, func_96333_a(EnumChatFormatting.func_96296_a(true, false))}); + } else if(!var5.equalsIgnoreCase("friendlyfire") && !var5.equalsIgnoreCase("seeFriendlyInvisibles")) { + throw new WrongUsageException("commands.scoreboard.teams.option.usage", new Object[0]); + } else { + throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[]{var5, func_96333_a(Arrays.asList(new String[]{"true", "false"}))}); + } + } else { + String var6 = var2[var3++]; + if(var5.equalsIgnoreCase("color")) { + EnumChatFormatting var7 = EnumChatFormatting.func_96300_b(var6); + if(var6 == null) { + throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[]{var5, func_96333_a(EnumChatFormatting.func_96296_a(true, false))}); + } + + var4.func_96666_b(var7.toString()); + var4.func_96662_c(EnumChatFormatting.RESET.toString()); + } else if(var5.equalsIgnoreCase("friendlyfire")) { + if(!var6.equalsIgnoreCase("true") && !var6.equalsIgnoreCase("false")) { + throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[]{var5, func_96333_a(Arrays.asList(new String[]{"true", "false"}))}); + } + + var4.func_96660_a(var6.equalsIgnoreCase("true")); + } else if(var5.equalsIgnoreCase("seeFriendlyInvisibles")) { + if(!var6.equalsIgnoreCase("true") && !var6.equalsIgnoreCase("false")) { + throw new WrongUsageException("commands.scoreboard.teams.option.noValue", new Object[]{var5, func_96333_a(Arrays.asList(new String[]{"true", "false"}))}); + } + + var4.func_98300_b(var6.equalsIgnoreCase("true")); + } + + notifyAdmins(var1, "commands.scoreboard.teams.option.success", new Object[]{var5, var4.func_96661_b(), var6}); + } + } + + protected void removeTeam(ICommandSender var1, String[] var2, int var3) { + Scoreboard var4 = this.getScoreboardFromWorldServer(); + ScorePlayerTeam var5 = this.getTeam(var2[var3++]); + var4.func_96511_d(var5); + notifyAdmins(var1, "commands.scoreboard.teams.remove.success", new Object[]{var5.func_96661_b()}); + } + + protected void getTeamList(ICommandSender var1, String[] var2, int var3) { + Scoreboard var4 = this.getScoreboardFromWorldServer(); + if(var2.length > var3) { + ScorePlayerTeam var5 = this.getTeam(var2[var3++]); + Collection var6 = var5.getMembershipCollection(); + if(var6.size() <= 0) { + throw new CommandException("commands.scoreboard.teams.list.player.empty", new Object[]{var5.func_96661_b()}); + } + + var1.sendChatToPlayer(EnumChatFormatting.DARK_GREEN + var1.translateString("commands.scoreboard.teams.list.player.count", new Object[]{Integer.valueOf(var6.size()), var5.func_96661_b()})); + var1.sendChatToPlayer(joinNiceString(var6.toArray())); + } else { + Collection var8 = var4.func_96525_g(); + if(var8.size() <= 0) { + throw new CommandException("commands.scoreboard.teams.list.empty", new Object[0]); + } + + var1.sendChatToPlayer(EnumChatFormatting.DARK_GREEN + var1.translateString("commands.scoreboard.teams.list.count", new Object[]{Integer.valueOf(var8.size())})); + Iterator var9 = var8.iterator(); + + while(var9.hasNext()) { + ScorePlayerTeam var7 = (ScorePlayerTeam)var9.next(); + var1.sendChatToPlayer(var1.translateString("commands.scoreboard.teams.list.entry", new Object[]{var7.func_96661_b(), var7.func_96669_c(), Integer.valueOf(var7.getMembershipCollection().size())})); + } + } + + } + + protected void joinTeam(ICommandSender var1, String[] var2, int var3) { + Scoreboard var4 = this.getScoreboardFromWorldServer(); + ScorePlayerTeam var5 = var4.func_96508_e(var2[var3++]); + HashSet var6 = new HashSet(); + String var7; + if(var1 instanceof EntityPlayer && var3 == var2.length) { + var7 = getCommandSenderAsPlayer(var1).getEntityName(); + var4.func_96521_a(var7, var5); + var6.add(var7); + } else { + while(var3 < var2.length) { + var7 = func_96332_d(var1, var2[var3++]); + var4.func_96521_a(var7, var5); + var6.add(var7); + } + } + + if(!var6.isEmpty()) { + notifyAdmins(var1, "commands.scoreboard.teams.join.success", new Object[]{Integer.valueOf(var6.size()), var5.func_96661_b(), joinNiceString(var6.toArray(new String[0]))}); + } + + } + + protected void leaveTeam(ICommandSender var1, String[] var2, int var3) { + Scoreboard var4 = this.getScoreboardFromWorldServer(); + HashSet var5 = new HashSet(); + HashSet var6 = new HashSet(); + String var7; + if(var1 instanceof EntityPlayer && var3 == var2.length) { + var7 = getCommandSenderAsPlayer(var1).getEntityName(); + if(var4.func_96524_g(var7)) { + var5.add(var7); + } else { + var6.add(var7); + } + } else { + while(var3 < var2.length) { + var7 = func_96332_d(var1, var2[var3++]); + if(var4.func_96524_g(var7)) { + var5.add(var7); + } else { + var6.add(var7); + } + } + } + + if(!var5.isEmpty()) { + notifyAdmins(var1, "commands.scoreboard.teams.leave.success", new Object[]{Integer.valueOf(var5.size()), joinNiceString(var5.toArray(new String[0]))}); + } + + if(!var6.isEmpty()) { + throw new CommandException("commands.scoreboard.teams.leave.failure", new Object[]{Integer.valueOf(var6.size()), joinNiceString(var6.toArray(new String[0]))}); + } + } + + protected void emptyTeam(ICommandSender var1, String[] var2, int var3) { + Scoreboard var4 = this.getScoreboardFromWorldServer(); + ScorePlayerTeam var5 = this.getTeam(var2[var3++]); + ArrayList var6 = new ArrayList(var5.getMembershipCollection()); + if(var6.isEmpty()) { + throw new CommandException("commands.scoreboard.teams.empty.alreadyEmpty", new Object[]{var5.func_96661_b()}); + } else { + Iterator var7 = var6.iterator(); + + while(var7.hasNext()) { + String var8 = (String)var7.next(); + var4.removePlayerFromTeam(var8, var5); + } + + notifyAdmins(var1, "commands.scoreboard.teams.empty.success", new Object[]{Integer.valueOf(var6.size()), var5.func_96661_b()}); + } + } + + protected void removeObjective(ICommandSender var1, String var2) { + Scoreboard var3 = this.getScoreboardFromWorldServer(); + ScoreObjective var4 = this.getScoreObjective(var2, false); + var3.func_96519_k(var4); + notifyAdmins(var1, "commands.scoreboard.objectives.remove.success", new Object[]{var2}); + } + + protected void getObjectivesList(ICommandSender var1) { + Scoreboard var2 = this.getScoreboardFromWorldServer(); + Collection var3 = var2.getScoreObjectives(); + if(var3.size() <= 0) { + throw new CommandException("commands.scoreboard.objectives.list.empty", new Object[0]); + } else { + var1.sendChatToPlayer(EnumChatFormatting.DARK_GREEN + var1.translateString("commands.scoreboard.objectives.list.count", new Object[]{Integer.valueOf(var3.size())})); + Iterator var4 = var3.iterator(); + + while(var4.hasNext()) { + ScoreObjective var5 = (ScoreObjective)var4.next(); + var1.sendChatToPlayer(var1.translateString("commands.scoreboard.objectives.list.entry", new Object[]{var5.getName(), var5.getDisplayName(), var5.getCriteria().func_96636_a()})); + } + + } + } + + protected void setObjectivesDisplay(ICommandSender var1, String[] var2, int var3) { + Scoreboard var4 = this.getScoreboardFromWorldServer(); + String var5 = var2[var3++]; + int var6 = Scoreboard.getObjectiveDisplaySlotNumber(var5); + ScoreObjective var7 = null; + if(var2.length == 4) { + var7 = this.getScoreObjective(var2[var3++], false); + } + + if(var6 < 0) { + throw new CommandException("commands.scoreboard.objectives.setdisplay.invalidSlot", new Object[]{var5}); + } else { + var4.func_96530_a(var6, var7); + if(var7 != null) { + notifyAdmins(var1, "commands.scoreboard.objectives.setdisplay.successSet", new Object[]{Scoreboard.getObjectiveDisplaySlot(var6), var7.getName()}); + } else { + notifyAdmins(var1, "commands.scoreboard.objectives.setdisplay.successCleared", new Object[]{Scoreboard.getObjectiveDisplaySlot(var6)}); + } + + } + } + + protected void listPlayers(ICommandSender var1, String[] var2, int var3) { + Scoreboard var4 = this.getScoreboardFromWorldServer(); + if(var2.length > var3) { + String var5 = func_96332_d(var1, var2[var3++]); + Map var6 = var4.func_96510_d(var5); + if(var6.size() <= 0) { + throw new CommandException("commands.scoreboard.players.list.player.empty", new Object[]{var5}); + } + + var1.sendChatToPlayer(EnumChatFormatting.DARK_GREEN + var1.translateString("commands.scoreboard.players.list.player.count", new Object[]{Integer.valueOf(var6.size()), var5})); + Iterator var7 = var6.values().iterator(); + + while(var7.hasNext()) { + Score var8 = (Score)var7.next(); + var1.sendChatToPlayer(var1.translateString("commands.scoreboard.players.list.player.entry", new Object[]{Integer.valueOf(var8.func_96652_c()), var8.func_96645_d().getDisplayName(), var8.func_96645_d().getName()})); + } + } else { + Collection var9 = var4.getObjectiveNames(); + if(var9.size() <= 0) { + throw new CommandException("commands.scoreboard.players.list.empty", new Object[0]); + } + + var1.sendChatToPlayer(EnumChatFormatting.DARK_GREEN + var1.translateString("commands.scoreboard.players.list.count", new Object[]{Integer.valueOf(var9.size())})); + var1.sendChatToPlayer(joinNiceString(var9.toArray())); + } + + } + + protected void setPlayerScore(ICommandSender var1, String[] var2, int var3) { + String var4 = var2[var3 - 1]; + String var5 = func_96332_d(var1, var2[var3++]); + ScoreObjective var6 = this.getScoreObjective(var2[var3++], true); + int var7 = var4.equalsIgnoreCase("set") ? parseInt(var1, var2[var3++]) : parseIntWithMin(var1, var2[var3++], 1); + Scoreboard var8 = this.getScoreboardFromWorldServer(); + Score var9 = var8.func_96529_a(var5, var6); + if(var4.equalsIgnoreCase("set")) { + var9.func_96647_c(var7); + } else if(var4.equalsIgnoreCase("add")) { + var9.func_96649_a(var7); + } else { + var9.func_96646_b(var7); + } + + notifyAdmins(var1, "commands.scoreboard.players.set.success", new Object[]{var6.getName(), var5, Integer.valueOf(var9.func_96652_c())}); + } + + protected void resetPlayerScore(ICommandSender var1, String[] var2, int var3) { + Scoreboard var4 = this.getScoreboardFromWorldServer(); + String var5 = func_96332_d(var1, var2[var3++]); + var4.func_96515_c(var5); + notifyAdmins(var1, "commands.scoreboard.players.reset.success", new Object[]{var5}); + } + + public List addTabCompletionOptions(ICommandSender var1, String[] var2) { + if(var2.length == 1) { + return getListOfStringsMatchingLastWord(var2, new String[]{"objectives", "players", "teams"}); + } else { + if(var2[0].equalsIgnoreCase("objectives")) { + if(var2.length == 2) { + return getListOfStringsMatchingLastWord(var2, new String[]{"list", "add", "remove", "setdisplay"}); + } + + if(var2[1].equalsIgnoreCase("add")) { + if(var2.length == 4) { + return getListOfStringsFromIterableMatchingLastWord(var2, ScoreObjectiveCriteria.field_96643_a.keySet()); + } + } else if(var2[1].equalsIgnoreCase("remove")) { + if(var2.length == 3) { + return getListOfStringsFromIterableMatchingLastWord(var2, this.getScoreObjectivesList(false)); + } + } else if(var2[1].equalsIgnoreCase("setdisplay")) { + if(var2.length == 3) { + return getListOfStringsMatchingLastWord(var2, new String[]{"list", "sidebar", "belowName"}); + } + + if(var2.length == 4) { + return getListOfStringsFromIterableMatchingLastWord(var2, this.getScoreObjectivesList(false)); + } + } + } else if(var2[0].equalsIgnoreCase("players")) { + if(var2.length == 2) { + return getListOfStringsMatchingLastWord(var2, new String[]{"set", "add", "remove", "reset", "list"}); + } + + if(!var2[1].equalsIgnoreCase("set") && !var2[1].equalsIgnoreCase("add") && !var2[1].equalsIgnoreCase("remove")) { + if((var2[1].equalsIgnoreCase("reset") || var2[1].equalsIgnoreCase("list")) && var2.length == 3) { + return getListOfStringsFromIterableMatchingLastWord(var2, this.getScoreboardFromWorldServer().getObjectiveNames()); + } + } else { + if(var2.length == 3) { + return getListOfStringsMatchingLastWord(var2, MinecraftServer.getServer().getAllUsernames()); + } + + if(var2.length == 4) { + return getListOfStringsFromIterableMatchingLastWord(var2, this.getScoreObjectivesList(true)); + } + } + } else if(var2[0].equalsIgnoreCase("teams")) { + if(var2.length == 2) { + return getListOfStringsMatchingLastWord(var2, new String[]{"add", "remove", "join", "leave", "empty", "list", "option"}); + } + + if(var2[1].equalsIgnoreCase("join")) { + if(var2.length == 3) { + return getListOfStringsFromIterableMatchingLastWord(var2, this.getScoreboardFromWorldServer().func_96531_f()); + } + + if(var2.length >= 4) { + return getListOfStringsMatchingLastWord(var2, MinecraftServer.getServer().getAllUsernames()); + } + } else { + if(var2[1].equalsIgnoreCase("leave")) { + return getListOfStringsMatchingLastWord(var2, MinecraftServer.getServer().getAllUsernames()); + } + + if(!var2[1].equalsIgnoreCase("empty") && !var2[1].equalsIgnoreCase("list") && !var2[1].equalsIgnoreCase("remove")) { + if(var2[1].equalsIgnoreCase("option")) { + if(var2.length == 3) { + return getListOfStringsFromIterableMatchingLastWord(var2, this.getScoreboardFromWorldServer().func_96531_f()); + } + + if(var2.length == 4) { + return getListOfStringsMatchingLastWord(var2, new String[]{"color", "friendlyfire", "seeFriendlyInvisibles"}); + } + + if(var2.length == 5) { + if(var2[3].equalsIgnoreCase("color")) { + return getListOfStringsFromIterableMatchingLastWord(var2, EnumChatFormatting.func_96296_a(true, false)); + } + + if(var2[3].equalsIgnoreCase("friendlyfire") || var2[3].equalsIgnoreCase("seeFriendlyInvisibles")) { + return getListOfStringsMatchingLastWord(var2, new String[]{"true", "false"}); + } + } + } + } else if(var2.length == 3) { + return getListOfStringsFromIterableMatchingLastWord(var2, this.getScoreboardFromWorldServer().func_96531_f()); + } + } + } + + return null; + } + } + + protected List getScoreObjectivesList(boolean var1) { + Collection var2 = this.getScoreboardFromWorldServer().getScoreObjectives(); + ArrayList var3 = new ArrayList(); + Iterator var4 = var2.iterator(); + + while(true) { + ScoreObjective var5; + do { + if(!var4.hasNext()) { + return var3; + } + + var5 = (ScoreObjective)var4.next(); + } while(var1 && var5.getCriteria().isReadOnly()); + + var3.add(var5.getName()); + } + } + + public boolean isUsernameIndex(String[] var1, int var2) { + return var1[0].equalsIgnoreCase("players") ? var2 == 2 : (!var1[0].equalsIgnoreCase("teams") ? false : var2 == 2 || var2 == 3); + } +} diff --git a/src/net/minecraft/src/ServerCommandTestFor.java b/src/net/minecraft/src/ServerCommandTestFor.java new file mode 100644 index 0000000..f0babe0 --- /dev/null +++ b/src/net/minecraft/src/ServerCommandTestFor.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class ServerCommandTestFor extends CommandBase { + public String getCommandName() { + return "testfor"; + } + + public int getRequiredPermissionLevel() { + return 2; + } + + public void processCommand(ICommandSender var1, String[] var2) { + if(var2.length != 1) { + throw new WrongUsageException("commands.testfor.usage", new Object[0]); + } else if(!(var1 instanceof TileEntityCommandBlock)) { + throw new CommandException("commands.testfor.failed", new Object[0]); + } else { + func_82359_c(var1, var2[0]); + } + } + + public boolean isUsernameIndex(String[] var1, int var2) { + return var2 == 0; + } +} diff --git a/src/net/minecraft/src/ServerConfigurationManager.java b/src/net/minecraft/src/ServerConfigurationManager.java new file mode 100644 index 0000000..beb2950 --- /dev/null +++ b/src/net/minecraft/src/ServerConfigurationManager.java @@ -0,0 +1,704 @@ +package net.minecraft.src; + +import java.io.File; +import java.net.SocketAddress; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.Map.Entry; +import net.minecraft.server.MinecraftServer; + +public abstract class ServerConfigurationManager { + private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd \'at\' HH:mm:ss z"); + private final MinecraftServer mcServer; + public final List playerEntityList = new ArrayList(); + private final BanList bannedPlayers = new BanList(new File("banned-players.txt")); + private final BanList bannedIPs = new BanList(new File("banned-ips.txt")); + private Set ops = new HashSet(); + private Set whiteListedPlayers = new HashSet(); + private IPlayerFileData playerNBTManagerObj; + private boolean whiteListEnforced; + protected int maxPlayers; + protected int viewDistance; + private EnumGameType gameType; + private boolean commandsAllowedForAll; + private int playerPingIndex = 0; + + public ServerConfigurationManager(MinecraftServer var1) { + this.mcServer = var1; + this.bannedPlayers.setListActive(false); + this.bannedIPs.setListActive(false); + this.maxPlayers = 8; + } + + public void initializeConnectionToPlayer(INetworkManager var1, EntityPlayerMP var2) { + NBTTagCompound var3 = this.readPlayerDataFromFile(var2); + var2.setWorld(this.mcServer.worldServerForDimension(var2.dimension)); + var2.theItemInWorldManager.setWorld((WorldServer)var2.worldObj); + String var4 = "local"; + if(var1.getSocketAddress() != null) { + var4 = var1.getSocketAddress().toString(); + } + + this.mcServer.getLogAgent().logInfo(var2.username + "[" + var4 + "] logged in with entity id " + var2.entityId + " at (" + var2.posX + ", " + var2.posY + ", " + var2.posZ + ")"); + WorldServer var5 = this.mcServer.worldServerForDimension(var2.dimension); + ChunkCoordinates var6 = var5.getSpawnPoint(); + this.func_72381_a(var2, (EntityPlayerMP)null, var5); + NetServerHandler var7 = new NetServerHandler(this.mcServer, var1, var2); + var7.sendPacketToPlayer(new Packet1Login(var2.entityId, var5.getWorldInfo().getTerrainType(), var2.theItemInWorldManager.getGameType(), var5.getWorldInfo().isHardcoreModeEnabled(), var5.provider.dimensionId, var5.difficultySetting, var5.getHeight(), this.getMaxPlayers())); + var7.sendPacketToPlayer(new Packet6SpawnPosition(var6.posX, var6.posY, var6.posZ)); + var7.sendPacketToPlayer(new Packet202PlayerAbilities(var2.capabilities)); + var7.sendPacketToPlayer(new Packet16BlockItemSwitch(var2.inventory.currentItem)); + this.func_96456_a((ServerScoreboard)var5.getScoreboard(), var2); + this.updateTimeAndWeatherForPlayer(var2, var5); + this.sendPacketToAllPlayers(new Packet3Chat(EnumChatFormatting.YELLOW + var2.getTranslatedEntityName() + EnumChatFormatting.YELLOW + " joined the game.")); + this.playerLoggedIn(var2); + var7.setPlayerLocation(var2.posX, var2.posY, var2.posZ, var2.rotationYaw, var2.rotationPitch); + this.mcServer.getNetworkThread().addPlayer(var7); + var7.sendPacketToPlayer(new Packet4UpdateTime(var5.getTotalWorldTime(), var5.getWorldTime())); + if(this.mcServer.getTexturePack().length() > 0) { + var2.requestTexturePackLoad(this.mcServer.getTexturePack(), this.mcServer.textureSize()); + } + + Iterator var8 = var2.getActivePotionEffects().iterator(); + + while(var8.hasNext()) { + PotionEffect var9 = (PotionEffect)var8.next(); + var7.sendPacketToPlayer(new Packet41EntityEffect(var2.entityId, var9)); + } + + var2.addSelfToInternalCraftingInventory(); + if(var3 != null && var3.hasKey("Riding")) { + Entity var10 = EntityList.createEntityFromNBT(var3.getCompoundTag("Riding"), var5); + if(var10 != null) { + var10.field_98038_p = true; + var5.spawnEntityInWorld(var10); + var2.mountEntity(var10); + var10.field_98038_p = false; + } + } + + } + + protected void func_96456_a(ServerScoreboard var1, EntityPlayerMP var2) { + HashSet var3 = new HashSet(); + Iterator var4 = var1.func_96525_g().iterator(); + + while(var4.hasNext()) { + ScorePlayerTeam var5 = (ScorePlayerTeam)var4.next(); + var2.playerNetServerHandler.sendPacketToPlayer(new Packet209SetPlayerTeam(var5, 0)); + } + + for(int var9 = 0; var9 < 3; ++var9) { + ScoreObjective var10 = var1.func_96539_a(var9); + if(var10 != null && !var3.contains(var10)) { + List var6 = var1.func_96550_d(var10); + Iterator var7 = var6.iterator(); + + while(var7.hasNext()) { + Packet var8 = (Packet)var7.next(); + var2.playerNetServerHandler.sendPacketToPlayer(var8); + } + + var3.add(var10); + } + } + + } + + public void setPlayerManager(WorldServer[] var1) { + this.playerNBTManagerObj = var1[0].getSaveHandler().getSaveHandler(); + } + + public void func_72375_a(EntityPlayerMP var1, WorldServer var2) { + WorldServer var3 = var1.getServerForPlayer(); + if(var2 != null) { + var2.getPlayerManager().removePlayer(var1); + } + + var3.getPlayerManager().addPlayer(var1); + var3.theChunkProviderServer.loadChunk((int)var1.posX >> 4, (int)var1.posZ >> 4); + } + + public int getEntityViewDistance() { + return PlayerManager.getFurthestViewableBlock(this.getViewDistance()); + } + + public NBTTagCompound readPlayerDataFromFile(EntityPlayerMP var1) { + NBTTagCompound var2 = this.mcServer.worldServers[0].getWorldInfo().getPlayerNBTTagCompound(); + NBTTagCompound var3; + if(var1.getCommandSenderName().equals(this.mcServer.getServerOwner()) && var2 != null) { + var1.readFromNBT(var2); + var3 = var2; + System.out.println("loading single player"); + } else { + var3 = this.playerNBTManagerObj.readPlayerData(var1); + } + + return var3; + } + + protected void writePlayerData(EntityPlayerMP var1) { + this.playerNBTManagerObj.writePlayerData(var1); + } + + public void playerLoggedIn(EntityPlayerMP var1) { + this.sendPacketToAllPlayers(new Packet201PlayerInfo(var1.username, true, 1000)); + this.playerEntityList.add(var1); + WorldServer var2 = this.mcServer.worldServerForDimension(var1.dimension); + var2.spawnEntityInWorld(var1); + this.func_72375_a(var1, (WorldServer)null); + + for(int var3 = 0; var3 < this.playerEntityList.size(); ++var3) { + EntityPlayerMP var4 = (EntityPlayerMP)this.playerEntityList.get(var3); + var1.playerNetServerHandler.sendPacketToPlayer(new Packet201PlayerInfo(var4.username, true, var4.ping)); + } + + } + + public void serverUpdateMountedMovingPlayer(EntityPlayerMP var1) { + var1.getServerForPlayer().getPlayerManager().updateMountedMovingPlayer(var1); + } + + public void playerLoggedOut(EntityPlayerMP var1) { + this.writePlayerData(var1); + WorldServer var2 = var1.getServerForPlayer(); + if(var1.ridingEntity != null) { + var2.removeEntity(var1.ridingEntity); + System.out.println("removing player mount"); + } + + var2.removeEntity(var1); + var2.getPlayerManager().removePlayer(var1); + this.playerEntityList.remove(var1); + this.sendPacketToAllPlayers(new Packet201PlayerInfo(var1.username, false, 9999)); + } + + public String allowUserToConnect(SocketAddress var1, String var2) { + if(this.bannedPlayers.isBanned(var2)) { + BanEntry var6 = (BanEntry)this.bannedPlayers.getBannedList().get(var2); + String var7 = "You are banned from this server!\nReason: " + var6.getBanReason(); + if(var6.getBanEndDate() != null) { + var7 = var7 + "\nYour ban will be removed on " + dateFormat.format(var6.getBanEndDate()); + } + + return var7; + } else if(!this.isAllowedToLogin(var2)) { + return "You are not white-listed on this server!"; + } else { + String var3 = var1.toString(); + var3 = var3.substring(var3.indexOf("/") + 1); + var3 = var3.substring(0, var3.indexOf(":")); + if(this.bannedIPs.isBanned(var3)) { + BanEntry var4 = (BanEntry)this.bannedIPs.getBannedList().get(var3); + String var5 = "Your IP address is banned from this server!\nReason: " + var4.getBanReason(); + if(var4.getBanEndDate() != null) { + var5 = var5 + "\nYour ban will be removed on " + dateFormat.format(var4.getBanEndDate()); + } + + return var5; + } else { + return this.playerEntityList.size() >= this.maxPlayers ? "The server is full!" : null; + } + } + } + + public EntityPlayerMP createPlayerForUser(String var1) { + ArrayList var2 = new ArrayList(); + + EntityPlayerMP var4; + for(int var3 = 0; var3 < this.playerEntityList.size(); ++var3) { + var4 = (EntityPlayerMP)this.playerEntityList.get(var3); + if(var4.username.equalsIgnoreCase(var1)) { + var2.add(var4); + } + } + + Iterator var5 = var2.iterator(); + + while(var5.hasNext()) { + var4 = (EntityPlayerMP)var5.next(); + var4.playerNetServerHandler.kickPlayerFromServer("You logged in from another location"); + } + + Object var6; + if(this.mcServer.isDemo()) { + var6 = new DemoWorldManager(this.mcServer.worldServerForDimension(0)); + } else { + var6 = new ItemInWorldManager(this.mcServer.worldServerForDimension(0)); + } + + return new EntityPlayerMP(this.mcServer, this.mcServer.worldServerForDimension(0), var1, (ItemInWorldManager)var6); + } + + public EntityPlayerMP respawnPlayer(EntityPlayerMP var1, int var2, boolean var3) { + var1.getServerForPlayer().getEntityTracker().removePlayerFromTrackers(var1); + var1.getServerForPlayer().getEntityTracker().removeEntityFromAllTrackingPlayers(var1); + var1.getServerForPlayer().getPlayerManager().removePlayer(var1); + this.playerEntityList.remove(var1); + this.mcServer.worldServerForDimension(var1.dimension).removePlayerEntityDangerously(var1); + ChunkCoordinates var4 = var1.getBedLocation(); + boolean var5 = var1.isSpawnForced(); + var1.dimension = var2; + Object var6; + if(this.mcServer.isDemo()) { + var6 = new DemoWorldManager(this.mcServer.worldServerForDimension(var1.dimension)); + } else { + var6 = new ItemInWorldManager(this.mcServer.worldServerForDimension(var1.dimension)); + } + + EntityPlayerMP var7 = new EntityPlayerMP(this.mcServer, this.mcServer.worldServerForDimension(var1.dimension), var1.username, (ItemInWorldManager)var6); + var7.playerNetServerHandler = var1.playerNetServerHandler; + var7.clonePlayer(var1, var3); + var7.entityId = var1.entityId; + WorldServer var8 = this.mcServer.worldServerForDimension(var1.dimension); + this.func_72381_a(var7, var1, var8); + ChunkCoordinates var9; + if(var4 != null) { + var9 = EntityPlayer.verifyRespawnCoordinates(this.mcServer.worldServerForDimension(var1.dimension), var4, var5); + if(var9 != null) { + var7.setLocationAndAngles((double)((float)var9.posX + 0.5F), (double)((float)var9.posY + 0.1F), (double)((float)var9.posZ + 0.5F), 0.0F, 0.0F); + var7.setSpawnChunk(var4, var5); + } else { + var7.playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(0, 0)); + } + } + + var8.theChunkProviderServer.loadChunk((int)var7.posX >> 4, (int)var7.posZ >> 4); + + while(!var8.getCollidingBoundingBoxes(var7, var7.boundingBox).isEmpty()) { + var7.setPosition(var7.posX, var7.posY + 1.0D, var7.posZ); + } + + var7.playerNetServerHandler.sendPacketToPlayer(new Packet9Respawn(var7.dimension, (byte)var7.worldObj.difficultySetting, var7.worldObj.getWorldInfo().getTerrainType(), var7.worldObj.getHeight(), var7.theItemInWorldManager.getGameType())); + var9 = var8.getSpawnPoint(); + var7.playerNetServerHandler.setPlayerLocation(var7.posX, var7.posY, var7.posZ, var7.rotationYaw, var7.rotationPitch); + var7.playerNetServerHandler.sendPacketToPlayer(new Packet6SpawnPosition(var9.posX, var9.posY, var9.posZ)); + var7.playerNetServerHandler.sendPacketToPlayer(new Packet43Experience(var7.experience, var7.experienceTotal, var7.experienceLevel)); + this.updateTimeAndWeatherForPlayer(var7, var8); + var8.getPlayerManager().addPlayer(var7); + var8.spawnEntityInWorld(var7); + this.playerEntityList.add(var7); + var7.addSelfToInternalCraftingInventory(); + var7.setEntityHealth(var7.getHealth()); + return var7; + } + + public void transferPlayerToDimension(EntityPlayerMP var1, int var2) { + int var3 = var1.dimension; + WorldServer var4 = this.mcServer.worldServerForDimension(var1.dimension); + var1.dimension = var2; + WorldServer var5 = this.mcServer.worldServerForDimension(var1.dimension); + var1.playerNetServerHandler.sendPacketToPlayer(new Packet9Respawn(var1.dimension, (byte)var1.worldObj.difficultySetting, var5.getWorldInfo().getTerrainType(), var5.getHeight(), var1.theItemInWorldManager.getGameType())); + var4.removePlayerEntityDangerously(var1); + var1.isDead = false; + this.transferEntityToWorld(var1, var3, var4, var5); + this.func_72375_a(var1, var4); + var1.playerNetServerHandler.setPlayerLocation(var1.posX, var1.posY, var1.posZ, var1.rotationYaw, var1.rotationPitch); + var1.theItemInWorldManager.setWorld(var5); + this.updateTimeAndWeatherForPlayer(var1, var5); + this.syncPlayerInventory(var1); + Iterator var6 = var1.getActivePotionEffects().iterator(); + + while(var6.hasNext()) { + PotionEffect var7 = (PotionEffect)var6.next(); + var1.playerNetServerHandler.sendPacketToPlayer(new Packet41EntityEffect(var1.entityId, var7)); + } + + } + + public void transferEntityToWorld(Entity var1, int var2, WorldServer var3, WorldServer var4) { + double var5 = var1.posX; + double var7 = var1.posZ; + double var9 = 8.0D; + double var11 = var1.posX; + double var13 = var1.posY; + double var15 = var1.posZ; + float var17 = var1.rotationYaw; + var3.theProfiler.startSection("moving"); + if(var1.dimension == -1) { + var5 /= var9; + var7 /= var9; + var1.setLocationAndAngles(var5, var1.posY, var7, var1.rotationYaw, var1.rotationPitch); + if(var1.isEntityAlive()) { + var3.updateEntityWithOptionalForce(var1, false); + } + } else if(var1.dimension == 0) { + var5 *= var9; + var7 *= var9; + var1.setLocationAndAngles(var5, var1.posY, var7, var1.rotationYaw, var1.rotationPitch); + if(var1.isEntityAlive()) { + var3.updateEntityWithOptionalForce(var1, false); + } + } else { + ChunkCoordinates var18; + if(var2 == 1) { + var18 = var4.getSpawnPoint(); + } else { + var18 = var4.getEntrancePortalLocation(); + } + + var5 = (double)var18.posX; + var1.posY = (double)var18.posY; + var7 = (double)var18.posZ; + var1.setLocationAndAngles(var5, var1.posY, var7, 90.0F, 0.0F); + if(var1.isEntityAlive()) { + var3.updateEntityWithOptionalForce(var1, false); + } + } + + var3.theProfiler.endSection(); + if(var2 != 1) { + var3.theProfiler.startSection("placing"); + var5 = (double)MathHelper.clamp_int((int)var5, -29999872, 29999872); + var7 = (double)MathHelper.clamp_int((int)var7, -29999872, 29999872); + if(var1.isEntityAlive()) { + var4.spawnEntityInWorld(var1); + var1.setLocationAndAngles(var5, var1.posY, var7, var1.rotationYaw, var1.rotationPitch); + var4.updateEntityWithOptionalForce(var1, false); + var4.getDefaultTeleporter().placeInPortal(var1, var11, var13, var15, var17); + } + + var3.theProfiler.endSection(); + } + + var1.setWorld(var4); + } + + public void sendPlayerInfoToAllPlayers() { + if(++this.playerPingIndex > 600) { + this.playerPingIndex = 0; + } + + if(this.playerPingIndex < this.playerEntityList.size()) { + EntityPlayerMP var1 = (EntityPlayerMP)this.playerEntityList.get(this.playerPingIndex); + this.sendPacketToAllPlayers(new Packet201PlayerInfo(var1.username, true, var1.ping)); + } + + } + + public void sendPacketToAllPlayers(Packet var1) { + for(int var2 = 0; var2 < this.playerEntityList.size(); ++var2) { + ((EntityPlayerMP)this.playerEntityList.get(var2)).playerNetServerHandler.sendPacketToPlayer(var1); + } + + } + + public void sendPacketToAllPlayersInDimension(Packet var1, int var2) { + for(int var3 = 0; var3 < this.playerEntityList.size(); ++var3) { + EntityPlayerMP var4 = (EntityPlayerMP)this.playerEntityList.get(var3); + if(var4.dimension == var2) { + var4.playerNetServerHandler.sendPacketToPlayer(var1); + } + } + + } + + public String getPlayerListAsString() { + String var1 = ""; + + for(int var2 = 0; var2 < this.playerEntityList.size(); ++var2) { + if(var2 > 0) { + var1 = var1 + ", "; + } + + var1 = var1 + ((EntityPlayerMP)this.playerEntityList.get(var2)).username; + } + + return var1; + } + + public String[] getAllUsernames() { + String[] var1 = new String[this.playerEntityList.size()]; + + for(int var2 = 0; var2 < this.playerEntityList.size(); ++var2) { + var1[var2] = ((EntityPlayerMP)this.playerEntityList.get(var2)).username; + } + + return var1; + } + + public BanList getBannedPlayers() { + return this.bannedPlayers; + } + + public BanList getBannedIPs() { + return this.bannedIPs; + } + + public void addOp(String var1) { + this.ops.add(var1.toLowerCase()); + } + + public void removeOp(String var1) { + this.ops.remove(var1.toLowerCase()); + } + + public boolean isAllowedToLogin(String var1) { + var1 = var1.trim().toLowerCase(); + return !this.whiteListEnforced || this.ops.contains(var1) || this.whiteListedPlayers.contains(var1); + } + + public boolean areCommandsAllowed(String var1) { + return this.ops.contains(var1.trim().toLowerCase()) || this.mcServer.isSinglePlayer() && this.mcServer.worldServers[0].getWorldInfo().areCommandsAllowed() && this.mcServer.getServerOwner().equalsIgnoreCase(var1) || this.commandsAllowedForAll; + } + + public EntityPlayerMP getPlayerForUsername(String var1) { + Iterator var2 = this.playerEntityList.iterator(); + + EntityPlayerMP var3; + do { + if(!var2.hasNext()) { + return null; + } + + var3 = (EntityPlayerMP)var2.next(); + } while(!var3.username.equalsIgnoreCase(var1)); + + return var3; + } + + public List findPlayers(ChunkCoordinates var1, int var2, int var3, int var4, int var5, int var6, int var7, Map var8, String var9, String var10) { + if(this.playerEntityList.isEmpty()) { + return null; + } else { + Object var11 = new ArrayList(); + boolean var12 = var4 < 0; + int var13 = var2 * var2; + int var14 = var3 * var3; + var4 = MathHelper.abs_int(var4); + + for(int var15 = 0; var15 < this.playerEntityList.size(); ++var15) { + EntityPlayerMP var16 = (EntityPlayerMP)this.playerEntityList.get(var15); + boolean var17; + if(var9 != null) { + var17 = var9.startsWith("!"); + if(var17) { + var9 = var9.substring(1); + } + + if(var17 == var9.equalsIgnoreCase(var16.getEntityName())) { + continue; + } + } + + if(var10 != null) { + var17 = var10.startsWith("!"); + if(var17) { + var10 = var10.substring(1); + } + + ScorePlayerTeam var18 = var16.getTeam(); + String var19 = var18 == null ? "" : var18.func_96661_b(); + if(var17 == var10.equalsIgnoreCase(var19)) { + continue; + } + } + + if(var1 != null && (var2 > 0 || var3 > 0)) { + float var20 = var1.getDistanceSquaredToChunkCoordinates(var16.getPlayerCoordinates()); + if(var2 > 0 && var20 < (float)var13 || var3 > 0 && var20 > (float)var14) { + continue; + } + } + + if(this.func_96457_a(var16, var8) && (var5 == EnumGameType.NOT_SET.getID() || var5 == var16.theItemInWorldManager.getGameType().getID()) && (var6 <= 0 || var16.experienceLevel >= var6) && var16.experienceLevel <= var7) { + ((List)var11).add(var16); + } + } + + if(var1 != null) { + Collections.sort((List)var11, new PlayerPositionComparator(var1)); + } + + if(var12) { + Collections.reverse((List)var11); + } + + if(var4 > 0) { + var11 = ((List)var11).subList(0, Math.min(var4, ((List)var11).size())); + } + + return (List)var11; + } + } + + private boolean func_96457_a(EntityPlayer var1, Map var2) { + if(var2 != null && var2.size() != 0) { + Iterator var3 = var2.entrySet().iterator(); + + Entry var4; + boolean var6; + int var10; + do { + if(!var3.hasNext()) { + return true; + } + + var4 = (Entry)var3.next(); + String var5 = (String)var4.getKey(); + var6 = false; + if(var5.endsWith("_min") && var5.length() > 4) { + var6 = true; + var5 = var5.substring(0, var5.length() - 4); + } + + Scoreboard var7 = var1.getWorldScoreboard(); + ScoreObjective var8 = var7.getObjective(var5); + if(var8 == null) { + return false; + } + + Score var9 = var1.getWorldScoreboard().func_96529_a(var1.getEntityName(), var8); + var10 = var9.func_96652_c(); + if(var10 < ((Integer)var4.getValue()).intValue() && var6) { + return false; + } + } while(var10 <= ((Integer)var4.getValue()).intValue() || var6); + + return false; + } else { + return true; + } + } + + public void sendToAllNear(double var1, double var3, double var5, double var7, int var9, Packet var10) { + this.sendToAllNearExcept((EntityPlayer)null, var1, var3, var5, var7, var9, var10); + } + + public void sendToAllNearExcept(EntityPlayer var1, double var2, double var4, double var6, double var8, int var10, Packet var11) { + for(int var12 = 0; var12 < this.playerEntityList.size(); ++var12) { + EntityPlayerMP var13 = (EntityPlayerMP)this.playerEntityList.get(var12); + if(var13 != var1 && var13.dimension == var10) { + double var14 = var2 - var13.posX; + double var16 = var4 - var13.posY; + double var18 = var6 - var13.posZ; + if(var14 * var14 + var16 * var16 + var18 * var18 < var8 * var8) { + var13.playerNetServerHandler.sendPacketToPlayer(var11); + } + } + } + + } + + public void saveAllPlayerData() { + for(int var1 = 0; var1 < this.playerEntityList.size(); ++var1) { + this.writePlayerData((EntityPlayerMP)this.playerEntityList.get(var1)); + } + + } + + public void addToWhiteList(String var1) { + this.whiteListedPlayers.add(var1); + } + + public void removeFromWhitelist(String var1) { + this.whiteListedPlayers.remove(var1); + } + + public Set getWhiteListedPlayers() { + return this.whiteListedPlayers; + } + + public Set getOps() { + return this.ops; + } + + public void loadWhiteList() { + } + + public void updateTimeAndWeatherForPlayer(EntityPlayerMP var1, WorldServer var2) { + var1.playerNetServerHandler.sendPacketToPlayer(new Packet4UpdateTime(var2.getTotalWorldTime(), var2.getWorldTime())); + if(var2.isRaining()) { + var1.playerNetServerHandler.sendPacketToPlayer(new Packet70GameEvent(1, 0)); + } + + } + + public void syncPlayerInventory(EntityPlayerMP var1) { + var1.sendContainerToPlayer(var1.inventoryContainer); + var1.setPlayerHealthUpdated(); + var1.playerNetServerHandler.sendPacketToPlayer(new Packet16BlockItemSwitch(var1.inventory.currentItem)); + } + + public int getCurrentPlayerCount() { + return this.playerEntityList.size(); + } + + public int getMaxPlayers() { + return this.maxPlayers; + } + + public String[] getAvailablePlayerDat() { + return this.mcServer.worldServers[0].getSaveHandler().getSaveHandler().getAvailablePlayerDat(); + } + + public boolean isWhiteListEnabled() { + return this.whiteListEnforced; + } + + public void setWhiteListEnabled(boolean var1) { + this.whiteListEnforced = var1; + } + + public List getPlayerList(String var1) { + ArrayList var2 = new ArrayList(); + Iterator var3 = this.playerEntityList.iterator(); + + while(var3.hasNext()) { + EntityPlayerMP var4 = (EntityPlayerMP)var3.next(); + if(var4.getPlayerIP().equals(var1)) { + var2.add(var4); + } + } + + return var2; + } + + public int getViewDistance() { + return this.viewDistance; + } + + public MinecraftServer getServerInstance() { + return this.mcServer; + } + + public NBTTagCompound getHostPlayerData() { + return null; + } + + public void setGameType(EnumGameType var1) { + this.gameType = var1; + } + + private void func_72381_a(EntityPlayerMP var1, EntityPlayerMP var2, World var3) { + if(var2 != null) { + var1.theItemInWorldManager.setGameType(var2.theItemInWorldManager.getGameType()); + } else if(this.gameType != null) { + var1.theItemInWorldManager.setGameType(this.gameType); + } + + var1.theItemInWorldManager.initializeGameType(var3.getWorldInfo().getGameType()); + } + + public void setCommandsAllowedForAll(boolean var1) { + this.commandsAllowedForAll = var1; + } + + public void removeAllPlayers() { + while(!this.playerEntityList.isEmpty()) { + ((EntityPlayerMP)this.playerEntityList.get(0)).playerNetServerHandler.kickPlayerFromServer("Server closed"); + } + + } + + public void sendChatMsg(String var1) { + this.mcServer.logInfo(var1); + this.sendPacketToAllPlayers(new Packet3Chat(var1)); + } +} diff --git a/src/net/minecraft/src/ServerData.java b/src/net/minecraft/src/ServerData.java new file mode 100644 index 0000000..f8c1825 --- /dev/null +++ b/src/net/minecraft/src/ServerData.java @@ -0,0 +1,63 @@ +package net.minecraft.src; + +public class ServerData { + public String serverName; + public String serverIP; + public String populationInfo; + public String serverMOTD; + public long pingToServer; + public int field_82821_f = 61; + public String gameVersion = "1.5.2"; + public boolean field_78841_f = false; + private boolean field_78842_g = true; + private boolean acceptsTextures = false; + private boolean hideAddress = false; + + public ServerData(String var1, String var2) { + this.serverName = var1; + this.serverIP = var2; + } + + public NBTTagCompound getNBTCompound() { + NBTTagCompound var1 = new NBTTagCompound(); + var1.setString("name", this.serverName); + var1.setString("ip", this.serverIP); + var1.setBoolean("hideAddress", this.hideAddress); + if(!this.field_78842_g) { + var1.setBoolean("acceptTextures", this.acceptsTextures); + } + + return var1; + } + + public boolean getAcceptsTextures() { + return this.acceptsTextures; + } + + public boolean func_78840_c() { + return this.field_78842_g; + } + + public void setAcceptsTextures(boolean var1) { + this.acceptsTextures = var1; + this.field_78842_g = false; + } + + public boolean isHidingAddress() { + return this.hideAddress; + } + + public void setHideAddress(boolean var1) { + this.hideAddress = var1; + } + + public static ServerData getServerDataFromNBTCompound(NBTTagCompound var0) { + ServerData var1 = new ServerData(var0.getString("name"), var0.getString("ip")); + var1.hideAddress = var0.getBoolean("hideAddress"); + if(var0.hasKey("acceptTextures")) { + var1.setAcceptsTextures(var0.getBoolean("acceptTextures")); + } + + return var1; + } +} diff --git a/src/net/minecraft/src/ServerList.java b/src/net/minecraft/src/ServerList.java new file mode 100644 index 0000000..1483261 --- /dev/null +++ b/src/net/minecraft/src/ServerList.java @@ -0,0 +1,93 @@ +package net.minecraft.src; + +import java.io.File; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import net.minecraft.client.Minecraft; + +public class ServerList { + private final Minecraft mc; + private final List servers = new ArrayList(); + + public ServerList(Minecraft var1) { + this.mc = var1; + this.loadServerList(); + } + + public void loadServerList() { + try { + NBTTagCompound var1 = CompressedStreamTools.read(new File(this.mc.mcDataDir, "servers.dat")); + NBTTagList var2 = var1.getTagList("servers"); + this.servers.clear(); + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + this.servers.add(ServerData.getServerDataFromNBTCompound((NBTTagCompound)var2.tagAt(var3))); + } + } catch (Exception var4) { + var4.printStackTrace(); + } + + } + + public void saveServerList() { + try { + NBTTagList var1 = new NBTTagList(); + Iterator var2 = this.servers.iterator(); + + while(var2.hasNext()) { + ServerData var3 = (ServerData)var2.next(); + var1.appendTag(var3.getNBTCompound()); + } + + NBTTagCompound var5 = new NBTTagCompound(); + var5.setTag("servers", var1); + CompressedStreamTools.safeWrite(var5, new File(this.mc.mcDataDir, "servers.dat")); + } catch (Exception var4) { + var4.printStackTrace(); + } + + } + + public ServerData getServerData(int var1) { + return (ServerData)this.servers.get(var1); + } + + public void removeServerData(int var1) { + this.servers.remove(var1); + } + + public void addServerData(ServerData var1) { + this.servers.add(var1); + } + + public int countServers() { + return this.servers.size(); + } + + public void swapServers(int var1, int var2) { + ServerData var3 = this.getServerData(var1); + this.servers.set(var1, this.getServerData(var2)); + this.servers.set(var2, var3); + this.saveServerList(); + } + + public void setServer(int var1, ServerData var2) { + this.servers.set(var1, var2); + } + + public static void func_78852_b(ServerData var0) { + ServerList var1 = new ServerList(Minecraft.getMinecraft()); + var1.loadServerList(); + + for(int var2 = 0; var2 < var1.countServers(); ++var2) { + ServerData var3 = var1.getServerData(var2); + if(var3.serverName.equals(var0.serverName) && var3.serverIP.equals(var0.serverIP)) { + var1.setServer(var2, var0); + break; + } + } + + var1.saveServerList(); + } +} diff --git a/src/net/minecraft/src/ServerListenThread.java b/src/net/minecraft/src/ServerListenThread.java new file mode 100644 index 0000000..b21fc46 --- /dev/null +++ b/src/net/minecraft/src/ServerListenThread.java @@ -0,0 +1,103 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; + +public class ServerListenThread extends Thread { + private final List pendingConnections = Collections.synchronizedList(new ArrayList()); + private final HashMap recentConnections = new HashMap(); + private int connectionCounter = 0; + private final ServerSocket myServerSocket; + private NetworkListenThread myNetworkListenThread; + private final InetAddress myServerAddress; + private final int myPort; + + public ServerListenThread(NetworkListenThread var1, InetAddress var2, int var3) throws IOException { + super("Listen thread"); + this.myNetworkListenThread = var1; + this.myPort = var3; + this.myServerSocket = new ServerSocket(var3, 0, var2); + this.myServerAddress = var2 == null ? this.myServerSocket.getInetAddress() : var2; + this.myServerSocket.setPerformancePreferences(0, 2, 1); + } + + public void processPendingConnections() { + List var1 = this.pendingConnections; + synchronized(var1) { + for(int var2 = 0; var2 < this.pendingConnections.size(); ++var2) { + NetLoginHandler var3 = (NetLoginHandler)this.pendingConnections.get(var2); + + try { + var3.tryLogin(); + } catch (Exception var6) { + var3.raiseErrorAndDisconnect("Internal server error"); + this.myNetworkListenThread.getServer().getLogAgent().logWarningException("Failed to handle packet for " + var3.getUsernameAndAddress() + ": " + var6, var6); + } + + if(var3.connectionComplete) { + this.pendingConnections.remove(var2--); + } + + var3.myTCPConnection.wakeThreads(); + } + + } + } + + public void run() { + while(this.myNetworkListenThread.isListening) { + try { + Socket var1 = this.myServerSocket.accept(); + NetLoginHandler var2 = new NetLoginHandler(this.myNetworkListenThread.getServer(), var1, "Connection #" + this.connectionCounter++); + this.addPendingConnection(var2); + } catch (IOException var3) { + var3.printStackTrace(); + } + } + + this.myNetworkListenThread.getServer().getLogAgent().logInfo("Closing listening thread"); + } + + private void addPendingConnection(NetLoginHandler var1) { + if(var1 == null) { + throw new IllegalArgumentException("Got null pendingconnection!"); + } else { + List var2 = this.pendingConnections; + synchronized(var2) { + this.pendingConnections.add(var1); + } + } + } + + public void func_71769_a(InetAddress var1) { + if(var1 != null) { + HashMap var2 = this.recentConnections; + synchronized(var2) { + this.recentConnections.remove(var1); + } + } + + } + + public void func_71768_b() { + try { + this.myServerSocket.close(); + } catch (Throwable var2) { + } + + } + + public InetAddress getInetAddress() { + return this.myServerAddress; + } + + public int getMyPort() { + return this.myPort; + } +} diff --git a/src/net/minecraft/src/ServerScoreboard.java b/src/net/minecraft/src/ServerScoreboard.java new file mode 100644 index 0000000..da0f6d0 --- /dev/null +++ b/src/net/minecraft/src/ServerScoreboard.java @@ -0,0 +1,199 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import net.minecraft.server.MinecraftServer; + +public class ServerScoreboard extends Scoreboard { + private final MinecraftServer field_96555_a; + private final Set field_96553_b = new HashSet(); + private ScoreboardSaveData field_96554_c; + + public ServerScoreboard(MinecraftServer var1) { + this.field_96555_a = var1; + } + + public void func_96536_a(Score var1) { + super.func_96536_a(var1); + if(this.field_96553_b.contains(var1.func_96645_d())) { + this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet207SetScore(var1, 0)); + } + + this.func_96551_b(); + } + + public void func_96516_a(String var1) { + super.func_96516_a(var1); + this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet207SetScore(var1)); + this.func_96551_b(); + } + + public void func_96530_a(int var1, ScoreObjective var2) { + ScoreObjective var3 = this.func_96539_a(var1); + super.func_96530_a(var1, var2); + if(var3 != var2 && var3 != null) { + if(this.func_96552_h(var3) > 0) { + this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet208SetDisplayObjective(var1, var2)); + } else { + this.func_96546_g(var3); + } + } + + if(var2 != null) { + if(this.field_96553_b.contains(var2)) { + this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet208SetDisplayObjective(var1, var2)); + } else { + this.func_96549_e(var2); + } + } + + this.func_96551_b(); + } + + public void func_96521_a(String var1, ScorePlayerTeam var2) { + super.func_96521_a(var1, var2); + this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet209SetPlayerTeam(var2, Arrays.asList(new String[]{var1}), 3)); + this.func_96551_b(); + } + + public void removePlayerFromTeam(String var1, ScorePlayerTeam var2) { + super.removePlayerFromTeam(var1, var2); + this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet209SetPlayerTeam(var2, Arrays.asList(new String[]{var1}), 4)); + this.func_96551_b(); + } + + public void func_96522_a(ScoreObjective var1) { + super.func_96522_a(var1); + this.func_96551_b(); + } + + public void func_96532_b(ScoreObjective var1) { + super.func_96532_b(var1); + if(this.field_96553_b.contains(var1)) { + this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet206SetObjective(var1, 2)); + } + + this.func_96551_b(); + } + + public void func_96533_c(ScoreObjective var1) { + super.func_96533_c(var1); + if(this.field_96553_b.contains(var1)) { + this.func_96546_g(var1); + } + + this.func_96551_b(); + } + + public void func_96523_a(ScorePlayerTeam var1) { + super.func_96523_a(var1); + this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet209SetPlayerTeam(var1, 0)); + this.func_96551_b(); + } + + public void func_96538_b(ScorePlayerTeam var1) { + super.func_96538_b(var1); + this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet209SetPlayerTeam(var1, 2)); + this.func_96551_b(); + } + + public void func_96513_c(ScorePlayerTeam var1) { + super.func_96513_c(var1); + this.field_96555_a.getConfigurationManager().sendPacketToAllPlayers(new Packet209SetPlayerTeam(var1, 1)); + this.func_96551_b(); + } + + public void func_96547_a(ScoreboardSaveData var1) { + this.field_96554_c = var1; + } + + protected void func_96551_b() { + if(this.field_96554_c != null) { + this.field_96554_c.markDirty(); + } + + } + + public List func_96550_d(ScoreObjective var1) { + ArrayList var2 = new ArrayList(); + var2.add(new Packet206SetObjective(var1, 0)); + + for(int var3 = 0; var3 < 3; ++var3) { + if(this.func_96539_a(var3) == var1) { + var2.add(new Packet208SetDisplayObjective(var3, var1)); + } + } + + Iterator var5 = this.func_96534_i(var1).iterator(); + + while(var5.hasNext()) { + Score var4 = (Score)var5.next(); + var2.add(new Packet207SetScore(var4, 0)); + } + + return var2; + } + + public void func_96549_e(ScoreObjective var1) { + List var2 = this.func_96550_d(var1); + Iterator var3 = this.field_96555_a.getConfigurationManager().playerEntityList.iterator(); + + while(var3.hasNext()) { + EntityPlayerMP var4 = (EntityPlayerMP)var3.next(); + Iterator var5 = var2.iterator(); + + while(var5.hasNext()) { + Packet var6 = (Packet)var5.next(); + var4.playerNetServerHandler.sendPacketToPlayer(var6); + } + } + + this.field_96553_b.add(var1); + } + + public List func_96548_f(ScoreObjective var1) { + ArrayList var2 = new ArrayList(); + var2.add(new Packet206SetObjective(var1, 1)); + + for(int var3 = 0; var3 < 3; ++var3) { + if(this.func_96539_a(var3) == var1) { + var2.add(new Packet208SetDisplayObjective(var3, var1)); + } + } + + return var2; + } + + public void func_96546_g(ScoreObjective var1) { + List var2 = this.func_96548_f(var1); + Iterator var3 = this.field_96555_a.getConfigurationManager().playerEntityList.iterator(); + + while(var3.hasNext()) { + EntityPlayerMP var4 = (EntityPlayerMP)var3.next(); + Iterator var5 = var2.iterator(); + + while(var5.hasNext()) { + Packet var6 = (Packet)var5.next(); + var4.playerNetServerHandler.sendPacketToPlayer(var6); + } + } + + this.field_96553_b.remove(var1); + } + + public int func_96552_h(ScoreObjective var1) { + int var2 = 0; + + for(int var3 = 0; var3 < 3; ++var3) { + if(this.func_96539_a(var3) == var1) { + ++var2; + } + } + + return var2; + } +} diff --git a/src/net/minecraft/src/Session.java b/src/net/minecraft/src/Session.java new file mode 100644 index 0000000..a435201 --- /dev/null +++ b/src/net/minecraft/src/Session.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class Session { + public String username; + public String sessionId; + + public Session(String var1, String var2) { + this.username = var1; + this.sessionId = var2; + } +} diff --git a/src/net/minecraft/src/ShapedRecipes.java b/src/net/minecraft/src/ShapedRecipes.java new file mode 100644 index 0000000..d24c8c8 --- /dev/null +++ b/src/net/minecraft/src/ShapedRecipes.java @@ -0,0 +1,95 @@ +package net.minecraft.src; + +public class ShapedRecipes implements IRecipe { + private int recipeWidth; + private int recipeHeight; + private ItemStack[] recipeItems; + private ItemStack recipeOutput; + public final int recipeOutputItemID; + private boolean field_92101_f = false; + + public ShapedRecipes(int var1, int var2, ItemStack[] var3, ItemStack var4) { + this.recipeOutputItemID = var4.itemID; + this.recipeWidth = var1; + this.recipeHeight = var2; + this.recipeItems = var3; + this.recipeOutput = var4; + } + + public ItemStack getRecipeOutput() { + return this.recipeOutput; + } + + public boolean matches(InventoryCrafting var1, World var2) { + for(int var3 = 0; var3 <= 3 - this.recipeWidth; ++var3) { + for(int var4 = 0; var4 <= 3 - this.recipeHeight; ++var4) { + if(this.checkMatch(var1, var3, var4, true)) { + return true; + } + + if(this.checkMatch(var1, var3, var4, false)) { + return true; + } + } + } + + return false; + } + + private boolean checkMatch(InventoryCrafting var1, int var2, int var3, boolean var4) { + for(int var5 = 0; var5 < 3; ++var5) { + for(int var6 = 0; var6 < 3; ++var6) { + int var7 = var5 - var2; + int var8 = var6 - var3; + ItemStack var9 = null; + if(var7 >= 0 && var8 >= 0 && var7 < this.recipeWidth && var8 < this.recipeHeight) { + if(var4) { + var9 = this.recipeItems[this.recipeWidth - var7 - 1 + var8 * this.recipeWidth]; + } else { + var9 = this.recipeItems[var7 + var8 * this.recipeWidth]; + } + } + + ItemStack var10 = var1.getStackInRowAndColumn(var5, var6); + if(var10 != null || var9 != null) { + if(var10 == null && var9 != null || var10 != null && var9 == null) { + return false; + } + + if(var9.itemID != var10.itemID) { + return false; + } + + if(var9.getItemDamage() != Short.MAX_VALUE && var9.getItemDamage() != var10.getItemDamage()) { + return false; + } + } + } + } + + return true; + } + + public ItemStack getCraftingResult(InventoryCrafting var1) { + ItemStack var2 = this.getRecipeOutput().copy(); + if(this.field_92101_f) { + for(int var3 = 0; var3 < var1.getSizeInventory(); ++var3) { + ItemStack var4 = var1.getStackInSlot(var3); + if(var4 != null && var4.hasTagCompound()) { + var2.setTagCompound((NBTTagCompound)var4.stackTagCompound.copy()); + } + } + } + + return var2; + } + + public int getRecipeSize() { + return this.recipeWidth * this.recipeHeight; + } + + public ShapedRecipes func_92100_c() { + this.field_92101_f = true; + return this; + } +} diff --git a/src/net/minecraft/src/ShapelessRecipes.java b/src/net/minecraft/src/ShapelessRecipes.java new file mode 100644 index 0000000..519d146 --- /dev/null +++ b/src/net/minecraft/src/ShapelessRecipes.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class ShapelessRecipes implements IRecipe { + private final ItemStack recipeOutput; + private final List recipeItems; + + public ShapelessRecipes(ItemStack var1, List var2) { + this.recipeOutput = var1; + this.recipeItems = var2; + } + + public ItemStack getRecipeOutput() { + return this.recipeOutput; + } + + public boolean matches(InventoryCrafting var1, World var2) { + ArrayList var3 = new ArrayList(this.recipeItems); + + for(int var4 = 0; var4 < 3; ++var4) { + for(int var5 = 0; var5 < 3; ++var5) { + ItemStack var6 = var1.getStackInRowAndColumn(var5, var4); + if(var6 != null) { + boolean var7 = false; + Iterator var8 = var3.iterator(); + + while(var8.hasNext()) { + ItemStack var9 = (ItemStack)var8.next(); + if(var6.itemID == var9.itemID && (var9.getItemDamage() == Short.MAX_VALUE || var6.getItemDamage() == var9.getItemDamage())) { + var7 = true; + var3.remove(var9); + break; + } + } + + if(!var7) { + return false; + } + } + } + } + + return var3.isEmpty(); + } + + public ItemStack getCraftingResult(InventoryCrafting var1) { + return this.recipeOutput.copy(); + } + + public int getRecipeSize() { + return this.recipeItems.size(); + } +} diff --git a/src/net/minecraft/src/Slot.java b/src/net/minecraft/src/Slot.java new file mode 100644 index 0000000..44464ad --- /dev/null +++ b/src/net/minecraft/src/Slot.java @@ -0,0 +1,79 @@ +package net.minecraft.src; + +public class Slot { + private final int slotIndex; + public final IInventory inventory; + public int slotNumber; + public int xDisplayPosition; + public int yDisplayPosition; + + public Slot(IInventory var1, int var2, int var3, int var4) { + this.inventory = var1; + this.slotIndex = var2; + this.xDisplayPosition = var3; + this.yDisplayPosition = var4; + } + + public void onSlotChange(ItemStack var1, ItemStack var2) { + if(var1 != null && var2 != null) { + if(var1.itemID == var2.itemID) { + int var3 = var2.stackSize - var1.stackSize; + if(var3 > 0) { + this.onCrafting(var1, var3); + } + + } + } + } + + protected void onCrafting(ItemStack var1, int var2) { + } + + protected void onCrafting(ItemStack var1) { + } + + public void onPickupFromSlot(EntityPlayer var1, ItemStack var2) { + this.onSlotChanged(); + } + + public boolean isItemValid(ItemStack var1) { + return true; + } + + public ItemStack getStack() { + return this.inventory.getStackInSlot(this.slotIndex); + } + + public boolean getHasStack() { + return this.getStack() != null; + } + + public void putStack(ItemStack var1) { + this.inventory.setInventorySlotContents(this.slotIndex, var1); + this.onSlotChanged(); + } + + public void onSlotChanged() { + this.inventory.onInventoryChanged(); + } + + public int getSlotStackLimit() { + return this.inventory.getInventoryStackLimit(); + } + + public Icon getBackgroundIconIndex() { + return null; + } + + public ItemStack decrStackSize(int var1) { + return this.inventory.decrStackSize(this.slotIndex, var1); + } + + public boolean isSlotInInventory(IInventory var1, int var2) { + return var1 == this.inventory && var2 == this.slotIndex; + } + + public boolean canTakeStack(EntityPlayer var1) { + return true; + } +} diff --git a/src/net/minecraft/src/SlotArmor.java b/src/net/minecraft/src/SlotArmor.java new file mode 100644 index 0000000..c08054b --- /dev/null +++ b/src/net/minecraft/src/SlotArmor.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +class SlotArmor extends Slot { + final int armorType; + final ContainerPlayer parent; + + SlotArmor(ContainerPlayer var1, IInventory var2, int var3, int var4, int var5, int var6) { + super(var2, var3, var4, var5); + this.parent = var1; + this.armorType = var6; + } + + public int getSlotStackLimit() { + return 1; + } + + public boolean isItemValid(ItemStack var1) { + return var1 == null ? false : (var1.getItem() instanceof ItemArmor ? ((ItemArmor)var1.getItem()).armorType == this.armorType : (var1.getItem().itemID != Block.pumpkin.blockID && var1.getItem().itemID != Item.skull.itemID ? false : this.armorType == 0)); + } + + public Icon getBackgroundIconIndex() { + return ItemArmor.func_94602_b(this.armorType); + } +} diff --git a/src/net/minecraft/src/SlotBeacon.java b/src/net/minecraft/src/SlotBeacon.java new file mode 100644 index 0000000..b0ae502 --- /dev/null +++ b/src/net/minecraft/src/SlotBeacon.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +class SlotBeacon extends Slot { + final ContainerBeacon beacon; + + public SlotBeacon(ContainerBeacon var1, IInventory var2, int var3, int var4, int var5) { + super(var2, var3, var4, var5); + this.beacon = var1; + } + + public boolean isItemValid(ItemStack var1) { + return var1 == null ? false : var1.itemID == Item.emerald.itemID || var1.itemID == Item.diamond.itemID || var1.itemID == Item.ingotGold.itemID || var1.itemID == Item.ingotIron.itemID; + } + + public int getSlotStackLimit() { + return 1; + } +} diff --git a/src/net/minecraft/src/SlotBrewingStandIngredient.java b/src/net/minecraft/src/SlotBrewingStandIngredient.java new file mode 100644 index 0000000..50eab03 --- /dev/null +++ b/src/net/minecraft/src/SlotBrewingStandIngredient.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +class SlotBrewingStandIngredient extends Slot { + final ContainerBrewingStand brewingStand; + + public SlotBrewingStandIngredient(ContainerBrewingStand var1, IInventory var2, int var3, int var4, int var5) { + super(var2, var3, var4, var5); + this.brewingStand = var1; + } + + public boolean isItemValid(ItemStack var1) { + return var1 != null ? Item.itemsList[var1.itemID].isPotionIngredient() : false; + } + + public int getSlotStackLimit() { + return 64; + } +} diff --git a/src/net/minecraft/src/SlotBrewingStandPotion.java b/src/net/minecraft/src/SlotBrewingStandPotion.java new file mode 100644 index 0000000..938da13 --- /dev/null +++ b/src/net/minecraft/src/SlotBrewingStandPotion.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +class SlotBrewingStandPotion extends Slot { + private EntityPlayer player; + + public SlotBrewingStandPotion(EntityPlayer var1, IInventory var2, int var3, int var4, int var5) { + super(var2, var3, var4, var5); + this.player = var1; + } + + public boolean isItemValid(ItemStack var1) { + return canHoldPotion(var1); + } + + public int getSlotStackLimit() { + return 1; + } + + public void onPickupFromSlot(EntityPlayer var1, ItemStack var2) { + if(var2.itemID == Item.potion.itemID && var2.getItemDamage() > 0) { + this.player.addStat(AchievementList.potion, 1); + } + + super.onPickupFromSlot(var1, var2); + } + + public static boolean canHoldPotion(ItemStack var0) { + return var0 != null && (var0.itemID == Item.potion.itemID || var0.itemID == Item.glassBottle.itemID); + } +} diff --git a/src/net/minecraft/src/SlotCrafting.java b/src/net/minecraft/src/SlotCrafting.java new file mode 100644 index 0000000..d59121a --- /dev/null +++ b/src/net/minecraft/src/SlotCrafting.java @@ -0,0 +1,79 @@ +package net.minecraft.src; + +public class SlotCrafting extends Slot { + private final IInventory craftMatrix; + private EntityPlayer thePlayer; + private int amountCrafted; + + public SlotCrafting(EntityPlayer var1, IInventory var2, IInventory var3, int var4, int var5, int var6) { + super(var3, var4, var5, var6); + this.thePlayer = var1; + this.craftMatrix = var2; + } + + public boolean isItemValid(ItemStack var1) { + return false; + } + + public ItemStack decrStackSize(int var1) { + if(this.getHasStack()) { + this.amountCrafted += Math.min(var1, this.getStack().stackSize); + } + + return super.decrStackSize(var1); + } + + protected void onCrafting(ItemStack var1, int var2) { + this.amountCrafted += var2; + this.onCrafting(var1); + } + + protected void onCrafting(ItemStack var1) { + var1.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.amountCrafted); + this.amountCrafted = 0; + if(var1.itemID == Block.workbench.blockID) { + this.thePlayer.addStat(AchievementList.buildWorkBench, 1); + } else if(var1.itemID == Item.pickaxeWood.itemID) { + this.thePlayer.addStat(AchievementList.buildPickaxe, 1); + } else if(var1.itemID == Block.furnaceIdle.blockID) { + this.thePlayer.addStat(AchievementList.buildFurnace, 1); + } else if(var1.itemID == Item.hoeWood.itemID) { + this.thePlayer.addStat(AchievementList.buildHoe, 1); + } else if(var1.itemID == Item.bread.itemID) { + this.thePlayer.addStat(AchievementList.makeBread, 1); + } else if(var1.itemID == Item.cake.itemID) { + this.thePlayer.addStat(AchievementList.bakeCake, 1); + } else if(var1.itemID == Item.pickaxeStone.itemID) { + this.thePlayer.addStat(AchievementList.buildBetterPickaxe, 1); + } else if(var1.itemID == Item.swordWood.itemID) { + this.thePlayer.addStat(AchievementList.buildSword, 1); + } else if(var1.itemID == Block.enchantmentTable.blockID) { + this.thePlayer.addStat(AchievementList.enchantments, 1); + } else if(var1.itemID == Block.bookShelf.blockID) { + this.thePlayer.addStat(AchievementList.bookcase, 1); + } + + } + + public void onPickupFromSlot(EntityPlayer var1, ItemStack var2) { + this.onCrafting(var2); + + for(int var3 = 0; var3 < this.craftMatrix.getSizeInventory(); ++var3) { + ItemStack var4 = this.craftMatrix.getStackInSlot(var3); + if(var4 != null) { + this.craftMatrix.decrStackSize(var3, 1); + if(var4.getItem().hasContainerItem()) { + ItemStack var5 = new ItemStack(var4.getItem().getContainerItem()); + if(!var4.getItem().doesContainerItemLeaveCraftingGrid(var4) || !this.thePlayer.inventory.addItemStackToInventory(var5)) { + if(this.craftMatrix.getStackInSlot(var3) == null) { + this.craftMatrix.setInventorySlotContents(var3, var5); + } else { + this.thePlayer.dropPlayerItem(var5); + } + } + } + } + } + + } +} diff --git a/src/net/minecraft/src/SlotCreativeInventory.java b/src/net/minecraft/src/SlotCreativeInventory.java new file mode 100644 index 0000000..bcdda68 --- /dev/null +++ b/src/net/minecraft/src/SlotCreativeInventory.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +class SlotCreativeInventory extends Slot { + private final Slot theSlot; + final GuiContainerCreative theCreativeInventory; + + public SlotCreativeInventory(GuiContainerCreative var1, Slot var2, int var3) { + super(var2.inventory, var3, 0, 0); + this.theCreativeInventory = var1; + this.theSlot = var2; + } + + public void onPickupFromSlot(EntityPlayer var1, ItemStack var2) { + this.theSlot.onPickupFromSlot(var1, var2); + } + + public boolean isItemValid(ItemStack var1) { + return this.theSlot.isItemValid(var1); + } + + public ItemStack getStack() { + return this.theSlot.getStack(); + } + + public boolean getHasStack() { + return this.theSlot.getHasStack(); + } + + public void putStack(ItemStack var1) { + this.theSlot.putStack(var1); + } + + public void onSlotChanged() { + this.theSlot.onSlotChanged(); + } + + public int getSlotStackLimit() { + return this.theSlot.getSlotStackLimit(); + } + + public Icon getBackgroundIconIndex() { + return this.theSlot.getBackgroundIconIndex(); + } + + public ItemStack decrStackSize(int var1) { + return this.theSlot.decrStackSize(var1); + } + + public boolean isSlotInInventory(IInventory var1, int var2) { + return this.theSlot.isSlotInInventory(var1, var2); + } + + static Slot func_75240_a(SlotCreativeInventory var0) { + return var0.theSlot; + } +} diff --git a/src/net/minecraft/src/SlotEnchantment.java b/src/net/minecraft/src/SlotEnchantment.java new file mode 100644 index 0000000..81c8cfd --- /dev/null +++ b/src/net/minecraft/src/SlotEnchantment.java @@ -0,0 +1,14 @@ +package net.minecraft.src; + +class SlotEnchantment extends Slot { + final ContainerEnchantment container; + + SlotEnchantment(ContainerEnchantment var1, IInventory var2, int var3, int var4, int var5) { + super(var2, var3, var4, var5); + this.container = var1; + } + + public boolean isItemValid(ItemStack var1) { + return true; + } +} diff --git a/src/net/minecraft/src/SlotEnchantmentTable.java b/src/net/minecraft/src/SlotEnchantmentTable.java new file mode 100644 index 0000000..ff0eeb2 --- /dev/null +++ b/src/net/minecraft/src/SlotEnchantmentTable.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +class SlotEnchantmentTable extends InventoryBasic { + final ContainerEnchantment container; + + SlotEnchantmentTable(ContainerEnchantment var1, String var2, boolean var3, int var4) { + super(var2, var3, var4); + this.container = var1; + } + + public int getInventoryStackLimit() { + return 1; + } + + public void onInventoryChanged() { + super.onInventoryChanged(); + this.container.onCraftMatrixChanged(this); + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return true; + } +} diff --git a/src/net/minecraft/src/SlotFurnace.java b/src/net/minecraft/src/SlotFurnace.java new file mode 100644 index 0000000..271c87f --- /dev/null +++ b/src/net/minecraft/src/SlotFurnace.java @@ -0,0 +1,68 @@ +package net.minecraft.src; + +public class SlotFurnace extends Slot { + private EntityPlayer thePlayer; + private int field_75228_b; + + public SlotFurnace(EntityPlayer var1, IInventory var2, int var3, int var4, int var5) { + super(var2, var3, var4, var5); + this.thePlayer = var1; + } + + public boolean isItemValid(ItemStack var1) { + return false; + } + + public ItemStack decrStackSize(int var1) { + if(this.getHasStack()) { + this.field_75228_b += Math.min(var1, this.getStack().stackSize); + } + + return super.decrStackSize(var1); + } + + public void onPickupFromSlot(EntityPlayer var1, ItemStack var2) { + this.onCrafting(var2); + super.onPickupFromSlot(var1, var2); + } + + protected void onCrafting(ItemStack var1, int var2) { + this.field_75228_b += var2; + this.onCrafting(var1); + } + + protected void onCrafting(ItemStack var1) { + var1.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.field_75228_b); + if(!this.thePlayer.worldObj.isRemote) { + int var2 = this.field_75228_b; + float var3 = FurnaceRecipes.smelting().getExperience(var1.itemID); + int var4; + if(var3 == 0.0F) { + var2 = 0; + } else if(var3 < 1.0F) { + var4 = MathHelper.floor_float((float)var2 * var3); + if(var4 < MathHelper.ceiling_float_int((float)var2 * var3) && (float)Math.random() < (float)var2 * var3 - (float)var4) { + ++var4; + } + + var2 = var4; + } + + while(var2 > 0) { + var4 = EntityXPOrb.getXPSplit(var2); + var2 -= var4; + this.thePlayer.worldObj.spawnEntityInWorld(new EntityXPOrb(this.thePlayer.worldObj, this.thePlayer.posX, this.thePlayer.posY + 0.5D, this.thePlayer.posZ + 0.5D, var4)); + } + } + + this.field_75228_b = 0; + if(var1.itemID == Item.ingotIron.itemID) { + this.thePlayer.addStat(AchievementList.acquireIron, 1); + } + + if(var1.itemID == Item.fishCooked.itemID) { + this.thePlayer.addStat(AchievementList.cookFish, 1); + } + + } +} diff --git a/src/net/minecraft/src/SlotMerchantResult.java b/src/net/minecraft/src/SlotMerchantResult.java new file mode 100644 index 0000000..29bcb95 --- /dev/null +++ b/src/net/minecraft/src/SlotMerchantResult.java @@ -0,0 +1,79 @@ +package net.minecraft.src; + +public class SlotMerchantResult extends Slot { + private final InventoryMerchant theMerchantInventory; + private EntityPlayer thePlayer; + private int field_75231_g; + private final IMerchant theMerchant; + + public SlotMerchantResult(EntityPlayer var1, IMerchant var2, InventoryMerchant var3, int var4, int var5, int var6) { + super(var3, var4, var5, var6); + this.thePlayer = var1; + this.theMerchant = var2; + this.theMerchantInventory = var3; + } + + public boolean isItemValid(ItemStack var1) { + return false; + } + + public ItemStack decrStackSize(int var1) { + if(this.getHasStack()) { + this.field_75231_g += Math.min(var1, this.getStack().stackSize); + } + + return super.decrStackSize(var1); + } + + protected void onCrafting(ItemStack var1, int var2) { + this.field_75231_g += var2; + this.onCrafting(var1); + } + + protected void onCrafting(ItemStack var1) { + var1.onCrafting(this.thePlayer.worldObj, this.thePlayer, this.field_75231_g); + this.field_75231_g = 0; + } + + public void onPickupFromSlot(EntityPlayer var1, ItemStack var2) { + this.onCrafting(var2); + MerchantRecipe var3 = this.theMerchantInventory.getCurrentRecipe(); + if(var3 != null) { + ItemStack var4 = this.theMerchantInventory.getStackInSlot(0); + ItemStack var5 = this.theMerchantInventory.getStackInSlot(1); + if(this.func_75230_a(var3, var4, var5) || this.func_75230_a(var3, var5, var4)) { + if(var4 != null && var4.stackSize <= 0) { + var4 = null; + } + + if(var5 != null && var5.stackSize <= 0) { + var5 = null; + } + + this.theMerchantInventory.setInventorySlotContents(0, var4); + this.theMerchantInventory.setInventorySlotContents(1, var5); + this.theMerchant.useRecipe(var3); + } + } + + } + + private boolean func_75230_a(MerchantRecipe var1, ItemStack var2, ItemStack var3) { + ItemStack var4 = var1.getItemToBuy(); + ItemStack var5 = var1.getSecondItemToBuy(); + if(var2 != null && var2.itemID == var4.itemID) { + if(var5 != null && var3 != null && var5.itemID == var3.itemID) { + var2.stackSize -= var4.stackSize; + var3.stackSize -= var5.stackSize; + return true; + } + + if(var5 == null && var3 == null) { + var2.stackSize -= var4.stackSize; + return true; + } + } + + return false; + } +} diff --git a/src/net/minecraft/src/SlotRepair.java b/src/net/minecraft/src/SlotRepair.java new file mode 100644 index 0000000..38d7d68 --- /dev/null +++ b/src/net/minecraft/src/SlotRepair.java @@ -0,0 +1,63 @@ +package net.minecraft.src; + +class SlotRepair extends Slot { + final World theWorld; + final int blockPosX; + final int blockPosY; + final int blockPosZ; + final ContainerRepair anvil; + + SlotRepair(ContainerRepair var1, IInventory var2, int var3, int var4, int var5, World var6, int var7, int var8, int var9) { + super(var2, var3, var4, var5); + this.anvil = var1; + this.theWorld = var6; + this.blockPosX = var7; + this.blockPosY = var8; + this.blockPosZ = var9; + } + + public boolean isItemValid(ItemStack var1) { + return false; + } + + public boolean canTakeStack(EntityPlayer var1) { + return (var1.capabilities.isCreativeMode || var1.experienceLevel >= this.anvil.maximumCost) && this.anvil.maximumCost > 0 && this.getHasStack(); + } + + public void onPickupFromSlot(EntityPlayer var1, ItemStack var2) { + if(!var1.capabilities.isCreativeMode) { + var1.addExperienceLevel(-this.anvil.maximumCost); + } + + ContainerRepair.getRepairInputInventory(this.anvil).setInventorySlotContents(0, (ItemStack)null); + if(ContainerRepair.getStackSizeUsedInRepair(this.anvil) > 0) { + ItemStack var3 = ContainerRepair.getRepairInputInventory(this.anvil).getStackInSlot(1); + if(var3 != null && var3.stackSize > ContainerRepair.getStackSizeUsedInRepair(this.anvil)) { + var3.stackSize -= ContainerRepair.getStackSizeUsedInRepair(this.anvil); + ContainerRepair.getRepairInputInventory(this.anvil).setInventorySlotContents(1, var3); + } else { + ContainerRepair.getRepairInputInventory(this.anvil).setInventorySlotContents(1, (ItemStack)null); + } + } else { + ContainerRepair.getRepairInputInventory(this.anvil).setInventorySlotContents(1, (ItemStack)null); + } + + this.anvil.maximumCost = 0; + if(!var1.capabilities.isCreativeMode && !this.theWorld.isRemote && this.theWorld.getBlockId(this.blockPosX, this.blockPosY, this.blockPosZ) == Block.anvil.blockID && var1.getRNG().nextFloat() < 0.12F) { + int var6 = this.theWorld.getBlockMetadata(this.blockPosX, this.blockPosY, this.blockPosZ); + int var4 = var6 & 3; + int var5 = var6 >> 2; + ++var5; + if(var5 > 2) { + this.theWorld.setBlockToAir(this.blockPosX, this.blockPosY, this.blockPosZ); + this.theWorld.playAuxSFX(1020, this.blockPosX, this.blockPosY, this.blockPosZ, 0); + } else { + this.theWorld.setBlockMetadataWithNotify(this.blockPosX, this.blockPosY, this.blockPosZ, var4 | var5 << 2, 2); + this.theWorld.playAuxSFX(1021, this.blockPosX, this.blockPosY, this.blockPosZ, 0); + } + } else if(!this.theWorld.isRemote) { + this.theWorld.playAuxSFX(1021, this.blockPosX, this.blockPosY, this.blockPosZ, 0); + } + + } +} diff --git a/src/net/minecraft/src/SorterStatsBlock.java b/src/net/minecraft/src/SorterStatsBlock.java new file mode 100644 index 0000000..7ce3659 --- /dev/null +++ b/src/net/minecraft/src/SorterStatsBlock.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.util.Comparator; + +class SorterStatsBlock implements Comparator { + final GuiStats statsGUI; + final GuiSlotStatsBlock slotStatsBlockGUI; + + SorterStatsBlock(GuiSlotStatsBlock var1, GuiStats var2) { + this.slotStatsBlockGUI = var1; + this.statsGUI = var2; + } + + public int func_78334_a(StatCrafting var1, StatCrafting var2) { + int var3 = var1.getItemID(); + int var4 = var2.getItemID(); + StatBase var5 = null; + StatBase var6 = null; + if(this.slotStatsBlockGUI.field_77264_j == 2) { + var5 = StatList.mineBlockStatArray[var3]; + var6 = StatList.mineBlockStatArray[var4]; + } else if(this.slotStatsBlockGUI.field_77264_j == 0) { + var5 = StatList.objectCraftStats[var3]; + var6 = StatList.objectCraftStats[var4]; + } else if(this.slotStatsBlockGUI.field_77264_j == 1) { + var5 = StatList.objectUseStats[var3]; + var6 = StatList.objectUseStats[var4]; + } + + if(var5 != null || var6 != null) { + if(var5 == null) { + return 1; + } + + if(var6 == null) { + return -1; + } + + int var7 = GuiStats.getStatsFileWriter(this.slotStatsBlockGUI.theStats).writeStat(var5); + int var8 = GuiStats.getStatsFileWriter(this.slotStatsBlockGUI.theStats).writeStat(var6); + if(var7 != var8) { + return (var7 - var8) * this.slotStatsBlockGUI.field_77265_k; + } + } + + return var3 - var4; + } + + public int compare(Object var1, Object var2) { + return this.func_78334_a((StatCrafting)var1, (StatCrafting)var2); + } +} diff --git a/src/net/minecraft/src/SorterStatsItem.java b/src/net/minecraft/src/SorterStatsItem.java new file mode 100644 index 0000000..b75706e --- /dev/null +++ b/src/net/minecraft/src/SorterStatsItem.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.util.Comparator; + +class SorterStatsItem implements Comparator { + final GuiStats statsGUI; + final GuiSlotStatsItem slotStatsItemGUI; + + SorterStatsItem(GuiSlotStatsItem var1, GuiStats var2) { + this.slotStatsItemGUI = var1; + this.statsGUI = var2; + } + + public int func_78337_a(StatCrafting var1, StatCrafting var2) { + int var3 = var1.getItemID(); + int var4 = var2.getItemID(); + StatBase var5 = null; + StatBase var6 = null; + if(this.slotStatsItemGUI.field_77264_j == 0) { + var5 = StatList.objectBreakStats[var3]; + var6 = StatList.objectBreakStats[var4]; + } else if(this.slotStatsItemGUI.field_77264_j == 1) { + var5 = StatList.objectCraftStats[var3]; + var6 = StatList.objectCraftStats[var4]; + } else if(this.slotStatsItemGUI.field_77264_j == 2) { + var5 = StatList.objectUseStats[var3]; + var6 = StatList.objectUseStats[var4]; + } + + if(var5 != null || var6 != null) { + if(var5 == null) { + return 1; + } + + if(var6 == null) { + return -1; + } + + int var7 = GuiStats.getStatsFileWriter(this.slotStatsItemGUI.slotGuiStats).writeStat(var5); + int var8 = GuiStats.getStatsFileWriter(this.slotStatsItemGUI.slotGuiStats).writeStat(var6); + if(var7 != var8) { + return (var7 - var8) * this.slotStatsItemGUI.field_77265_k; + } + } + + return var3 - var4; + } + + public int compare(Object var1, Object var2) { + return this.func_78337_a((StatCrafting)var1, (StatCrafting)var2); + } +} diff --git a/src/net/minecraft/src/SoundManager.java b/src/net/minecraft/src/SoundManager.java new file mode 100644 index 0000000..f387ef0 --- /dev/null +++ b/src/net/minecraft/src/SoundManager.java @@ -0,0 +1,359 @@ +package net.minecraft.src; + +import java.io.File; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import java.util.Set; +import paulscode.sound.SoundSystem; +import paulscode.sound.SoundSystemConfig; +import paulscode.sound.codecs.CodecJOrbis; +import paulscode.sound.codecs.CodecWav; +import paulscode.sound.libraries.LibraryLWJGLOpenAL; + +public class SoundManager { + private static SoundSystem sndSystem; + private SoundPool soundPoolSounds = new SoundPool(); + private SoundPool soundPoolStreaming = new SoundPool(); + private SoundPool soundPoolMusic = new SoundPool(); + private int latestSoundID = 0; + private GameSettings options; + private Set playingSounds = new HashSet(); + private List field_92072_h = new ArrayList(); + private static boolean loaded = false; + private Random rand = new Random(); + private int ticksBeforeMusic = this.rand.nextInt(12000); + + public void loadSoundSettings(GameSettings var1) { + this.soundPoolStreaming.isGetRandomSound = false; + this.options = var1; + if(!loaded && (var1 == null || var1.soundVolume != 0.0F || var1.musicVolume != 0.0F)) { + this.tryToSetLibraryAndCodecs(); + } + + } + + private void tryToSetLibraryAndCodecs() { + try { + float var1 = this.options.soundVolume; + float var2 = this.options.musicVolume; + this.options.soundVolume = 0.0F; + this.options.musicVolume = 0.0F; + this.options.saveOptions(); + SoundSystemConfig.addLibrary(LibraryLWJGLOpenAL.class); + SoundSystemConfig.setCodec("ogg", CodecJOrbis.class); + SoundSystemConfig.setCodec("mus", CodecMus.class); + SoundSystemConfig.setCodec("wav", CodecWav.class); + sndSystem = new SoundSystem(); + this.options.soundVolume = var1; + this.options.musicVolume = var2; + this.options.saveOptions(); + } catch (Throwable var3) { + var3.printStackTrace(); + System.err.println("error linking with the LibraryJavaSound plug-in"); + } + + loaded = true; + } + + public void onSoundOptionsChanged() { + if(!loaded && (this.options.soundVolume != 0.0F || this.options.musicVolume != 0.0F)) { + this.tryToSetLibraryAndCodecs(); + } + + if(loaded) { + if(this.options.musicVolume == 0.0F) { + sndSystem.stop("BgMusic"); + sndSystem.stop("streaming"); + } else { + sndSystem.setVolume("BgMusic", this.options.musicVolume); + sndSystem.setVolume("streaming", this.options.musicVolume); + } + } + + } + + public void closeMinecraft() { + if(loaded) { + sndSystem.cleanup(); + } + + } + + public void addSound(String var1, File var2) { + this.soundPoolSounds.addSound(var1, var2); + } + + public void addStreaming(String var1, File var2) { + this.soundPoolStreaming.addSound(var1, var2); + } + + public void addMusic(String var1, File var2) { + this.soundPoolMusic.addSound(var1, var2); + } + + public void playRandomMusicIfReady() { + if(loaded && this.options.musicVolume != 0.0F) { + if(!sndSystem.playing("BgMusic") && !sndSystem.playing("streaming")) { + if(this.ticksBeforeMusic > 0) { + --this.ticksBeforeMusic; + return; + } + + SoundPoolEntry var1 = this.soundPoolMusic.getRandomSound(); + if(var1 != null) { + this.ticksBeforeMusic = this.rand.nextInt(12000) + 12000; + sndSystem.backgroundMusic("BgMusic", var1.soundUrl, var1.soundName, false); + sndSystem.setVolume("BgMusic", this.options.musicVolume); + sndSystem.play("BgMusic"); + } + } + + } + } + + public void setListener(EntityLiving var1, float var2) { + if(loaded && this.options.soundVolume != 0.0F) { + if(var1 != null) { + float var3 = var1.prevRotationPitch + (var1.rotationPitch - var1.prevRotationPitch) * var2; + float var4 = var1.prevRotationYaw + (var1.rotationYaw - var1.prevRotationYaw) * var2; + double var5 = var1.prevPosX + (var1.posX - var1.prevPosX) * (double)var2; + double var7 = var1.prevPosY + (var1.posY - var1.prevPosY) * (double)var2; + double var9 = var1.prevPosZ + (var1.posZ - var1.prevPosZ) * (double)var2; + float var11 = MathHelper.cos(-var4 * ((float)Math.PI / 180.0F) - (float)Math.PI); + float var12 = MathHelper.sin(-var4 * ((float)Math.PI / 180.0F) - (float)Math.PI); + float var13 = -var12; + float var14 = -MathHelper.sin(-var3 * ((float)Math.PI / 180.0F) - (float)Math.PI); + float var15 = -var11; + float var16 = 0.0F; + float var17 = 1.0F; + float var18 = 0.0F; + sndSystem.setListenerPosition((float)var5, (float)var7, (float)var9); + sndSystem.setListenerOrientation(var13, var14, var15, var16, var17, var18); + } + } + } + + public void stopAllSounds() { + Iterator var1 = this.playingSounds.iterator(); + + while(var1.hasNext()) { + String var2 = (String)var1.next(); + sndSystem.stop(var2); + } + + this.playingSounds.clear(); + } + + public void playStreaming(String var1, float var2, float var3, float var4) { + if(loaded && (this.options.soundVolume != 0.0F || var1 == null)) { + String var5 = "streaming"; + if(sndSystem.playing(var5)) { + sndSystem.stop(var5); + } + + if(var1 != null) { + SoundPoolEntry var6 = this.soundPoolStreaming.getRandomSoundFromSoundPool(var1); + if(var6 != null) { + if(sndSystem.playing("BgMusic")) { + sndSystem.stop("BgMusic"); + } + + float var7 = 16.0F; + sndSystem.newStreamingSource(true, var5, var6.soundUrl, var6.soundName, false, var2, var3, var4, 2, var7 * 4.0F); + sndSystem.setVolume(var5, 0.5F * this.options.soundVolume); + sndSystem.play(var5); + } + + } + } + } + + public void updateSoundLocation(Entity var1) { + this.updateSoundLocation(var1, var1); + } + + public void updateSoundLocation(Entity var1, Entity var2) { + String var3 = "entity_" + var1.entityId; + if(this.playingSounds.contains(var3)) { + if(sndSystem.playing(var3)) { + sndSystem.setPosition(var3, (float)var2.posX, (float)var2.posY, (float)var2.posZ); + sndSystem.setVelocity(var3, (float)var2.motionX, (float)var2.motionY, (float)var2.motionZ); + } else { + this.playingSounds.remove(var3); + } + } + + } + + public boolean isEntitySoundPlaying(Entity var1) { + if(var1 != null && loaded) { + String var2 = "entity_" + var1.entityId; + return sndSystem.playing(var2); + } else { + return false; + } + } + + public void stopEntitySound(Entity var1) { + if(var1 != null && loaded) { + String var2 = "entity_" + var1.entityId; + if(this.playingSounds.contains(var2)) { + if(sndSystem.playing(var2)) { + sndSystem.stop(var2); + } + + this.playingSounds.remove(var2); + } + + } + } + + public void setEntitySoundVolume(Entity var1, float var2) { + if(var1 != null && loaded) { + if(loaded && this.options.soundVolume != 0.0F) { + String var3 = "entity_" + var1.entityId; + if(sndSystem.playing(var3)) { + sndSystem.setVolume(var3, var2 * this.options.soundVolume); + } + } + } + } + + public void setEntitySoundPitch(Entity var1, float var2) { + if(var1 != null && loaded) { + if(loaded && this.options.soundVolume != 0.0F) { + String var3 = "entity_" + var1.entityId; + if(sndSystem.playing(var3)) { + sndSystem.setPitch(var3, var2); + } + } + } + } + + public void playEntitySound(String var1, Entity var2, float var3, float var4, boolean var5) { + if(var2 != null) { + if(loaded && (this.options.soundVolume != 0.0F || var1 == null)) { + String var6 = "entity_" + var2.entityId; + if(this.playingSounds.contains(var6)) { + this.updateSoundLocation(var2); + } else { + if(sndSystem.playing(var6)) { + sndSystem.stop(var6); + } + + if(var1 == null) { + return; + } + + SoundPoolEntry var7 = this.soundPoolSounds.getRandomSoundFromSoundPool(var1); + if(var7 != null && var3 > 0.0F) { + float var8 = 16.0F; + if(var3 > 1.0F) { + var8 *= var3; + } + + sndSystem.newSource(var5, var6, var7.soundUrl, var7.soundName, false, (float)var2.posX, (float)var2.posY, (float)var2.posZ, 2, var8); + sndSystem.setLooping(var6, true); + sndSystem.setPitch(var6, var4); + if(var3 > 1.0F) { + var3 = 1.0F; + } + + sndSystem.setVolume(var6, var3 * this.options.soundVolume); + sndSystem.setVelocity(var6, (float)var2.motionX, (float)var2.motionY, (float)var2.motionZ); + sndSystem.play(var6); + this.playingSounds.add(var6); + } + } + + } + } + } + + public void playSound(String var1, float var2, float var3, float var4, float var5, float var6) { + if(loaded && this.options.soundVolume != 0.0F) { + SoundPoolEntry var7 = this.soundPoolSounds.getRandomSoundFromSoundPool(var1); + if(var7 != null && var5 > 0.0F) { + this.latestSoundID = (this.latestSoundID + 1) % 256; + String var8 = "sound_" + this.latestSoundID; + float var9 = 16.0F; + if(var5 > 1.0F) { + var9 *= var5; + } + + sndSystem.newSource(var5 > 1.0F, var8, var7.soundUrl, var7.soundName, false, var2, var3, var4, 2, var9); + sndSystem.setPitch(var8, var6); + if(var5 > 1.0F) { + var5 = 1.0F; + } + + sndSystem.setVolume(var8, var5 * this.options.soundVolume); + sndSystem.play(var8); + } + + } + } + + public void playSoundFX(String var1, float var2, float var3) { + if(loaded && this.options.soundVolume != 0.0F) { + SoundPoolEntry var4 = this.soundPoolSounds.getRandomSoundFromSoundPool(var1); + if(var4 != null) { + this.latestSoundID = (this.latestSoundID + 1) % 256; + String var5 = "sound_" + this.latestSoundID; + sndSystem.newSource(false, var5, var4.soundUrl, var4.soundName, false, 0.0F, 0.0F, 0.0F, 0, 0.0F); + if(var2 > 1.0F) { + var2 = 1.0F; + } + + var2 *= 0.25F; + sndSystem.setPitch(var5, var3); + sndSystem.setVolume(var5, var2 * this.options.soundVolume); + sndSystem.play(var5); + } + + } + } + + public void pauseAllSounds() { + Iterator var1 = this.playingSounds.iterator(); + + while(var1.hasNext()) { + String var2 = (String)var1.next(); + sndSystem.pause(var2); + } + + } + + public void resumeAllSounds() { + Iterator var1 = this.playingSounds.iterator(); + + while(var1.hasNext()) { + String var2 = (String)var1.next(); + sndSystem.play(var2); + } + + } + + public void func_92071_g() { + if(!this.field_92072_h.isEmpty()) { + Iterator var1 = this.field_92072_h.iterator(); + + while(var1.hasNext()) { + ScheduledSound var2 = (ScheduledSound)var1.next(); + --var2.field_92064_g; + if(var2.field_92064_g <= 0) { + this.playSound(var2.field_92069_a, var2.field_92067_b, var2.field_92068_c, var2.field_92065_d, var2.field_92066_e, var2.field_92063_f); + var1.remove(); + } + } + } + + } + + public void func_92070_a(String var1, float var2, float var3, float var4, float var5, float var6, int var7) { + this.field_92072_h.add(new ScheduledSound(var1, var2, var3, var4, var5, var6, var7)); + } +} diff --git a/src/net/minecraft/src/SoundPool.java b/src/net/minecraft/src/SoundPool.java new file mode 100644 index 0000000..9bda27d --- /dev/null +++ b/src/net/minecraft/src/SoundPool.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.io.File; +import java.net.MalformedURLException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +public class SoundPool { + private Random rand = new Random(); + private Map nameToSoundPoolEntriesMapping = new HashMap(); + private List allSoundPoolEntries = new ArrayList(); + public int numberOfSoundPoolEntries = 0; + public boolean isGetRandomSound = true; + + public SoundPoolEntry addSound(String var1, File var2) { + try { + String var3 = var1; + var1 = var1.substring(0, var1.indexOf(".")); + if(this.isGetRandomSound) { + while(Character.isDigit(var1.charAt(var1.length() - 1))) { + var1 = var1.substring(0, var1.length() - 1); + } + } + + var1 = var1.replaceAll("/", "."); + if(!this.nameToSoundPoolEntriesMapping.containsKey(var1)) { + this.nameToSoundPoolEntriesMapping.put(var1, new ArrayList()); + } + + SoundPoolEntry var4 = new SoundPoolEntry(var3, var2.toURI().toURL()); + ((List)this.nameToSoundPoolEntriesMapping.get(var1)).add(var4); + this.allSoundPoolEntries.add(var4); + ++this.numberOfSoundPoolEntries; + return var4; + } catch (MalformedURLException var5) { + var5.printStackTrace(); + throw new RuntimeException(var5); + } + } + + public SoundPoolEntry getRandomSoundFromSoundPool(String var1) { + List var2 = (List)this.nameToSoundPoolEntriesMapping.get(var1); + return var2 == null ? null : (SoundPoolEntry)var2.get(this.rand.nextInt(var2.size())); + } + + public SoundPoolEntry getRandomSound() { + return this.allSoundPoolEntries.isEmpty() ? null : (SoundPoolEntry)this.allSoundPoolEntries.get(this.rand.nextInt(this.allSoundPoolEntries.size())); + } +} diff --git a/src/net/minecraft/src/SoundPoolEntry.java b/src/net/minecraft/src/SoundPoolEntry.java new file mode 100644 index 0000000..341e9ba --- /dev/null +++ b/src/net/minecraft/src/SoundPoolEntry.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +import java.net.URL; + +public class SoundPoolEntry { + public String soundName; + public URL soundUrl; + + public SoundPoolEntry(String var1, URL var2) { + this.soundName = var1; + this.soundUrl = var2; + } +} diff --git a/src/net/minecraft/src/SoundUpdaterMinecart.java b/src/net/minecraft/src/SoundUpdaterMinecart.java new file mode 100644 index 0000000..d3b7f8b --- /dev/null +++ b/src/net/minecraft/src/SoundUpdaterMinecart.java @@ -0,0 +1,114 @@ +package net.minecraft.src; + +public class SoundUpdaterMinecart implements IUpdatePlayerListBox { + private final SoundManager theSoundManager; + private final EntityMinecart theMinecart; + private final EntityPlayerSP thePlayer; + private boolean playerSPRidingMinecart = false; + private boolean minecartIsDead = false; + private boolean minecartIsMoving = false; + private boolean silent = false; + private float minecartSoundPitch = 0.0F; + private float minecartMoveSoundVolume = 0.0F; + private float minecartRideSoundVolume = 0.0F; + private double minecartSpeed = 0.0D; + + public SoundUpdaterMinecart(SoundManager var1, EntityMinecart var2, EntityPlayerSP var3) { + this.theSoundManager = var1; + this.theMinecart = var2; + this.thePlayer = var3; + } + + public void update() { + boolean var1 = false; + boolean var2 = this.playerSPRidingMinecart; + boolean var3 = this.minecartIsDead; + boolean var4 = this.minecartIsMoving; + float var5 = this.minecartMoveSoundVolume; + float var6 = this.minecartSoundPitch; + float var7 = this.minecartRideSoundVolume; + double var8 = this.minecartSpeed; + this.playerSPRidingMinecart = this.thePlayer != null && this.theMinecart.riddenByEntity == this.thePlayer; + this.minecartIsDead = this.theMinecart.isDead; + this.minecartSpeed = (double)MathHelper.sqrt_double(this.theMinecart.motionX * this.theMinecart.motionX + this.theMinecart.motionZ * this.theMinecart.motionZ); + this.minecartIsMoving = this.minecartSpeed >= 0.01D; + if(var2 && !this.playerSPRidingMinecart) { + this.theSoundManager.stopEntitySound(this.thePlayer); + } + + if(this.minecartIsDead || !this.silent && this.minecartMoveSoundVolume == 0.0F && this.minecartRideSoundVolume == 0.0F) { + if(!var3) { + this.theSoundManager.stopEntitySound(this.theMinecart); + if(var2 || this.playerSPRidingMinecart) { + this.theSoundManager.stopEntitySound(this.thePlayer); + } + } + + this.silent = true; + if(this.minecartIsDead) { + return; + } + } + + if(!this.theSoundManager.isEntitySoundPlaying(this.theMinecart) && this.minecartMoveSoundVolume > 0.0F) { + this.theSoundManager.playEntitySound("minecart.base", this.theMinecart, this.minecartMoveSoundVolume, this.minecartSoundPitch, false); + this.silent = false; + var1 = true; + } + + if(this.playerSPRidingMinecart && !this.theSoundManager.isEntitySoundPlaying(this.thePlayer) && this.minecartRideSoundVolume > 0.0F) { + this.theSoundManager.playEntitySound("minecart.inside", this.thePlayer, this.minecartRideSoundVolume, 1.0F, true); + this.silent = false; + var1 = true; + } + + if(this.minecartIsMoving) { + if(this.minecartSoundPitch < 1.0F) { + this.minecartSoundPitch += 0.0025F; + } + + if(this.minecartSoundPitch > 1.0F) { + this.minecartSoundPitch = 1.0F; + } + + float var10 = MathHelper.clamp_float((float)this.minecartSpeed, 0.0F, 4.0F) / 4.0F; + this.minecartRideSoundVolume = 0.0F + var10 * (12.0F / 16.0F); + var10 = MathHelper.clamp_float(var10 * 2.0F, 0.0F, 1.0F); + this.minecartMoveSoundVolume = 0.0F + var10 * 0.7F; + } else if(var4) { + this.minecartMoveSoundVolume = 0.0F; + this.minecartSoundPitch = 0.0F; + this.minecartRideSoundVolume = 0.0F; + } + + if(!this.silent) { + if(this.minecartSoundPitch != var6) { + this.theSoundManager.setEntitySoundPitch(this.theMinecart, this.minecartSoundPitch); + } + + if(this.minecartMoveSoundVolume != var5) { + this.theSoundManager.setEntitySoundVolume(this.theMinecart, this.minecartMoveSoundVolume); + } + + if(this.minecartRideSoundVolume != var7) { + this.theSoundManager.setEntitySoundVolume(this.thePlayer, this.minecartRideSoundVolume); + } + } + + if(!var1 && (this.minecartMoveSoundVolume > 0.0F || this.minecartRideSoundVolume > 0.0F)) { + this.theSoundManager.updateSoundLocation(this.theMinecart); + if(this.playerSPRidingMinecart) { + this.theSoundManager.updateSoundLocation(this.thePlayer, this.theMinecart); + } + } else { + if(this.theSoundManager.isEntitySoundPlaying(this.theMinecart)) { + this.theSoundManager.stopEntitySound(this.theMinecart); + } + + if(this.playerSPRidingMinecart && this.theSoundManager.isEntitySoundPlaying(this.thePlayer)) { + this.theSoundManager.stopEntitySound(this.thePlayer); + } + } + + } +} diff --git a/src/net/minecraft/src/SpawnListEntry.java b/src/net/minecraft/src/SpawnListEntry.java new file mode 100644 index 0000000..86f2362 --- /dev/null +++ b/src/net/minecraft/src/SpawnListEntry.java @@ -0,0 +1,14 @@ +package net.minecraft.src; + +public class SpawnListEntry extends WeightedRandomItem { + public Class entityClass; + public int minGroupCount; + public int maxGroupCount; + + public SpawnListEntry(Class var1, int var2, int var3, int var4) { + super(var2); + this.entityClass = var1; + this.minGroupCount = var3; + this.maxGroupCount = var4; + } +} diff --git a/src/net/minecraft/src/SpawnerAnimals.java b/src/net/minecraft/src/SpawnerAnimals.java new file mode 100644 index 0000000..bb2fd3e --- /dev/null +++ b/src/net/minecraft/src/SpawnerAnimals.java @@ -0,0 +1,205 @@ +package net.minecraft.src; + +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +public final class SpawnerAnimals { + private static HashMap eligibleChunksForSpawning = new HashMap(); + protected static final Class[] nightSpawnEntities = new Class[]{EntitySpider.class, EntityZombie.class, EntitySkeleton.class}; + + protected static ChunkPosition getRandomSpawningPointInChunk(World var0, int var1, int var2) { + Chunk var3 = var0.getChunkFromChunkCoords(var1, var2); + int var4 = var1 * 16 + var0.rand.nextInt(16); + int var5 = var2 * 16 + var0.rand.nextInt(16); + int var6 = var0.rand.nextInt(var3 == null ? var0.getActualHeight() : var3.getTopFilledSegment() + 16 - 1); + return new ChunkPosition(var4, var6, var5); + } + + public static final int findChunksForSpawning(WorldServer var0, boolean var1, boolean var2, boolean var3) { + if(!var1 && !var2) { + return 0; + } else { + eligibleChunksForSpawning.clear(); + + int var4; + int var7; + for(var4 = 0; var4 < var0.playerEntities.size(); ++var4) { + EntityPlayer var5 = (EntityPlayer)var0.playerEntities.get(var4); + int var6 = MathHelper.floor_double(var5.posX / 16.0D); + var7 = MathHelper.floor_double(var5.posZ / 16.0D); + byte var8 = 8; + + for(int var9 = -var8; var9 <= var8; ++var9) { + for(int var10 = -var8; var10 <= var8; ++var10) { + boolean var11 = var9 == -var8 || var9 == var8 || var10 == -var8 || var10 == var8; + ChunkCoordIntPair var12 = new ChunkCoordIntPair(var9 + var6, var10 + var7); + if(!var11) { + eligibleChunksForSpawning.put(var12, Boolean.valueOf(false)); + } else if(!eligibleChunksForSpawning.containsKey(var12)) { + eligibleChunksForSpawning.put(var12, Boolean.valueOf(true)); + } + } + } + } + + var4 = 0; + ChunkCoordinates var32 = var0.getSpawnPoint(); + EnumCreatureType[] var33 = EnumCreatureType.values(); + var7 = var33.length; + + label131: + for(int var34 = 0; var34 < var7; ++var34) { + EnumCreatureType var35 = var33[var34]; + if((!var35.getPeacefulCreature() || var2) && (var35.getPeacefulCreature() || var1) && (!var35.getAnimal() || var3) && var0.countEntities(var35.getCreatureClass()) <= var35.getMaxNumberOfCreature() * eligibleChunksForSpawning.size() / 256) { + Iterator var36 = eligibleChunksForSpawning.keySet().iterator(); + + label128: + while(true) { + int var13; + int var14; + int var15; + do { + do { + ChunkCoordIntPair var37; + do { + if(!var36.hasNext()) { + continue label131; + } + + var37 = (ChunkCoordIntPair)var36.next(); + } while(((Boolean)eligibleChunksForSpawning.get(var37)).booleanValue()); + + ChunkPosition var38 = getRandomSpawningPointInChunk(var0, var37.chunkXPos, var37.chunkZPos); + var13 = var38.x; + var14 = var38.y; + var15 = var38.z; + } while(var0.isBlockNormalCube(var13, var14, var15)); + } while(var0.getBlockMaterial(var13, var14, var15) != var35.getCreatureMaterial()); + + int var16 = 0; + + for(int var17 = 0; var17 < 3; ++var17) { + int var18 = var13; + int var19 = var14; + int var20 = var15; + byte var21 = 6; + SpawnListEntry var22 = null; + + for(int var23 = 0; var23 < 4; ++var23) { + var18 += var0.rand.nextInt(var21) - var0.rand.nextInt(var21); + var19 += var0.rand.nextInt(1) - var0.rand.nextInt(1); + var20 += var0.rand.nextInt(var21) - var0.rand.nextInt(var21); + if(canCreatureTypeSpawnAtLocation(var35, var0, var18, var19, var20)) { + float var24 = (float)var18 + 0.5F; + float var25 = (float)var19; + float var26 = (float)var20 + 0.5F; + if(var0.getClosestPlayer((double)var24, (double)var25, (double)var26, 24.0D) == null) { + float var27 = var24 - (float)var32.posX; + float var28 = var25 - (float)var32.posY; + float var29 = var26 - (float)var32.posZ; + float var30 = var27 * var27 + var28 * var28 + var29 * var29; + if(var30 >= 576.0F) { + if(var22 == null) { + var22 = var0.spawnRandomCreature(var35, var18, var19, var20); + if(var22 == null) { + break; + } + } + + EntityLiving var39; + try { + var39 = (EntityLiving)var22.entityClass.getConstructor(new Class[]{World.class}).newInstance(new Object[]{var0}); + } catch (Exception var31) { + var31.printStackTrace(); + return var4; + } + + var39.setLocationAndAngles((double)var24, (double)var25, (double)var26, var0.rand.nextFloat() * 360.0F, 0.0F); + if(var39.getCanSpawnHere()) { + ++var16; + var0.spawnEntityInWorld(var39); + creatureSpecificInit(var39, var0, var24, var25, var26); + if(var16 >= var39.getMaxSpawnedInChunk()) { + continue label128; + } + } + + var4 += var16; + } + } + } + } + } + } + } + } + + return var4; + } + } + + public static boolean canCreatureTypeSpawnAtLocation(EnumCreatureType var0, World var1, int var2, int var3, int var4) { + if(var0.getCreatureMaterial() == Material.water) { + return var1.getBlockMaterial(var2, var3, var4).isLiquid() && var1.getBlockMaterial(var2, var3 - 1, var4).isLiquid() && !var1.isBlockNormalCube(var2, var3 + 1, var4); + } else if(!var1.doesBlockHaveSolidTopSurface(var2, var3 - 1, var4)) { + return false; + } else { + int var5 = var1.getBlockId(var2, var3 - 1, var4); + return var5 != Block.bedrock.blockID && !var1.isBlockNormalCube(var2, var3, var4) && !var1.getBlockMaterial(var2, var3, var4).isLiquid() && !var1.isBlockNormalCube(var2, var3 + 1, var4); + } + } + + private static void creatureSpecificInit(EntityLiving var0, World var1, float var2, float var3, float var4) { + var0.initCreature(); + } + + public static void performWorldGenSpawning(World var0, BiomeGenBase var1, int var2, int var3, int var4, int var5, Random var6) { + List var7 = var1.getSpawnableList(EnumCreatureType.creature); + if(!var7.isEmpty()) { + while(var6.nextFloat() < var1.getSpawningChance()) { + SpawnListEntry var8 = (SpawnListEntry)WeightedRandom.getRandomItem(var0.rand, (Collection)var7); + int var9 = var8.minGroupCount + var6.nextInt(1 + var8.maxGroupCount - var8.minGroupCount); + int var10 = var2 + var6.nextInt(var4); + int var11 = var3 + var6.nextInt(var5); + int var12 = var10; + int var13 = var11; + + for(int var14 = 0; var14 < var9; ++var14) { + boolean var15 = false; + + for(int var16 = 0; !var15 && var16 < 4; ++var16) { + int var17 = var0.getTopSolidOrLiquidBlock(var10, var11); + if(canCreatureTypeSpawnAtLocation(EnumCreatureType.creature, var0, var10, var17, var11)) { + float var18 = (float)var10 + 0.5F; + float var19 = (float)var17; + float var20 = (float)var11 + 0.5F; + + EntityLiving var21; + try { + var21 = (EntityLiving)var8.entityClass.getConstructor(new Class[]{World.class}).newInstance(new Object[]{var0}); + } catch (Exception var23) { + var23.printStackTrace(); + continue; + } + + var21.setLocationAndAngles((double)var18, (double)var19, (double)var20, var6.nextFloat() * 360.0F, 0.0F); + var0.spawnEntityInWorld(var21); + creatureSpecificInit(var21, var0, var18, var19, var20); + var15 = true; + } + + var10 += var6.nextInt(5) - var6.nextInt(5); + + for(var11 += var6.nextInt(5) - var6.nextInt(5); var10 < var2 || var10 >= var2 + var4 || var11 < var3 || var11 >= var3 + var4; var11 = var13 + var6.nextInt(5) - var6.nextInt(5)) { + var10 = var12 + var6.nextInt(5) - var6.nextInt(5); + } + } + } + } + + } + } +} diff --git a/src/net/minecraft/src/StatBase.java b/src/net/minecraft/src/StatBase.java new file mode 100644 index 0000000..3e3b0eb --- /dev/null +++ b/src/net/minecraft/src/StatBase.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.Locale; + +public class StatBase { + public final int statId; + private final String statName; + public boolean isIndependent; + public String statGuid; + private final IStatType type; + private static NumberFormat numberFormat = NumberFormat.getIntegerInstance(Locale.US); + public static IStatType simpleStatType = new StatTypeSimple(); + private static DecimalFormat decimalFormat = new DecimalFormat("########0.00"); + public static IStatType timeStatType = new StatTypeTime(); + public static IStatType distanceStatType = new StatTypeDistance(); + + public StatBase(int var1, String var2, IStatType var3) { + this.isIndependent = false; + this.statId = var1; + this.statName = var2; + this.type = var3; + } + + public StatBase(int var1, String var2) { + this(var1, var2, simpleStatType); + } + + public StatBase initIndependentStat() { + this.isIndependent = true; + return this; + } + + public StatBase registerStat() { + if(StatList.oneShotStats.containsKey(Integer.valueOf(this.statId))) { + throw new RuntimeException("Duplicate stat id: \"" + ((StatBase)StatList.oneShotStats.get(Integer.valueOf(this.statId))).statName + "\" and \"" + this.statName + "\" at id " + this.statId); + } else { + StatList.allStats.add(this); + StatList.oneShotStats.put(Integer.valueOf(this.statId), this); + this.statGuid = AchievementMap.getGuid(this.statId); + return this; + } + } + + public boolean isAchievement() { + return false; + } + + public String func_75968_a(int var1) { + return this.type.format(var1); + } + + public String getName() { + return this.statName; + } + + public String toString() { + return StatCollector.translateToLocal(this.statName); + } + + static NumberFormat getNumberFormat() { + return numberFormat; + } + + static DecimalFormat getDecimalFormat() { + return decimalFormat; + } +} diff --git a/src/net/minecraft/src/StatBasic.java b/src/net/minecraft/src/StatBasic.java new file mode 100644 index 0000000..3d9a02f --- /dev/null +++ b/src/net/minecraft/src/StatBasic.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class StatBasic extends StatBase { + public StatBasic(int var1, String var2, IStatType var3) { + super(var1, var2, var3); + } + + public StatBasic(int var1, String var2) { + super(var1, var2); + } + + public StatBase registerStat() { + super.registerStat(); + StatList.generalStats.add(this); + return this; + } +} diff --git a/src/net/minecraft/src/StatCollector.java b/src/net/minecraft/src/StatCollector.java new file mode 100644 index 0000000..1879de5 --- /dev/null +++ b/src/net/minecraft/src/StatCollector.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class StatCollector { + private static StringTranslate localizedName = StringTranslate.getInstance(); + + public static String translateToLocal(String var0) { + return localizedName.translateKey(var0); + } + + public static String translateToLocalFormatted(String var0, Object... var1) { + return localizedName.translateKeyFormat(var0, var1); + } + + public static boolean func_94522_b(String var0) { + return localizedName.containsTranslateKey(var0); + } +} diff --git a/src/net/minecraft/src/StatCrafting.java b/src/net/minecraft/src/StatCrafting.java new file mode 100644 index 0000000..8270d90 --- /dev/null +++ b/src/net/minecraft/src/StatCrafting.java @@ -0,0 +1,14 @@ +package net.minecraft.src; + +public class StatCrafting extends StatBase { + private final int itemID; + + public StatCrafting(int var1, String var2, int var3) { + super(var1, var2); + this.itemID = var3; + } + + public int getItemID() { + return this.itemID; + } +} diff --git a/src/net/minecraft/src/StatFileWriter.java b/src/net/minecraft/src/StatFileWriter.java new file mode 100644 index 0000000..416b8ea --- /dev/null +++ b/src/net/minecraft/src/StatFileWriter.java @@ -0,0 +1,204 @@ +package net.minecraft.src; + +import argo.jdom.JdomParser; +import argo.jdom.JsonNode; +import argo.jdom.JsonRootNode; +import argo.jdom.JsonStringNode; +import argo.saj.InvalidSyntaxException; +import java.io.File; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +public class StatFileWriter { + private Map field_77457_a = new HashMap(); + private Map field_77455_b = new HashMap(); + private boolean field_77456_c = false; + private StatsSyncher statsSyncher; + + public StatFileWriter(Session var1, File var2) { + File var3 = new File(var2, "stats"); + if(!var3.exists()) { + var3.mkdir(); + } + + File[] var4 = var2.listFiles(); + int var5 = var4.length; + + for(int var6 = 0; var6 < var5; ++var6) { + File var7 = var4[var6]; + if(var7.getName().startsWith("stats_") && var7.getName().endsWith(".dat")) { + File var8 = new File(var3, var7.getName()); + if(!var8.exists()) { + System.out.println("Relocating " + var7.getName()); + var7.renameTo(var8); + } + } + } + + this.statsSyncher = new StatsSyncher(var1, this, var3); + } + + public void readStat(StatBase var1, int var2) { + this.writeStatToMap(this.field_77455_b, var1, var2); + this.writeStatToMap(this.field_77457_a, var1, var2); + this.field_77456_c = true; + } + + private void writeStatToMap(Map var1, StatBase var2, int var3) { + Integer var4 = (Integer)var1.get(var2); + int var5 = var4 == null ? 0 : var4.intValue(); + var1.put(var2, Integer.valueOf(var5 + var3)); + } + + public Map func_77445_b() { + return new HashMap(this.field_77455_b); + } + + public void writeStats(Map var1) { + if(var1 != null) { + this.field_77456_c = true; + Iterator var2 = var1.keySet().iterator(); + + while(var2.hasNext()) { + StatBase var3 = (StatBase)var2.next(); + this.writeStatToMap(this.field_77455_b, var3, ((Integer)var1.get(var3)).intValue()); + this.writeStatToMap(this.field_77457_a, var3, ((Integer)var1.get(var3)).intValue()); + } + + } + } + + public void func_77452_b(Map var1) { + if(var1 != null) { + Iterator var2 = var1.keySet().iterator(); + + while(var2.hasNext()) { + StatBase var3 = (StatBase)var2.next(); + Integer var4 = (Integer)this.field_77455_b.get(var3); + int var5 = var4 == null ? 0 : var4.intValue(); + this.field_77457_a.put(var3, Integer.valueOf(((Integer)var1.get(var3)).intValue() + var5)); + } + + } + } + + public void func_77448_c(Map var1) { + if(var1 != null) { + this.field_77456_c = true; + Iterator var2 = var1.keySet().iterator(); + + while(var2.hasNext()) { + StatBase var3 = (StatBase)var2.next(); + this.writeStatToMap(this.field_77455_b, var3, ((Integer)var1.get(var3)).intValue()); + } + + } + } + + public static Map func_77453_b(String var0) { + HashMap var1 = new HashMap(); + + try { + String var2 = "local"; + StringBuilder var3 = new StringBuilder(); + JsonRootNode var4 = (new JdomParser()).parse(var0); + List var5 = var4.getArrayNode(new Object[]{"stats-change"}); + Iterator var6 = var5.iterator(); + + while(var6.hasNext()) { + JsonNode var7 = (JsonNode)var6.next(); + Map var8 = var7.getFields(); + Entry var9 = (Entry)var8.entrySet().iterator().next(); + int var10 = Integer.parseInt(((JsonStringNode)var9.getKey()).getText()); + int var11 = Integer.parseInt(((JsonNode)var9.getValue()).getText()); + StatBase var12 = StatList.getOneShotStat(var10); + if(var12 == null) { + System.out.println(var10 + " is not a valid stat, creating place-holder"); + var12 = (new StatPlaceholder(var10)).registerStat(); + } + + var3.append(StatList.getOneShotStat(var10).statGuid).append(","); + var3.append(var11).append(","); + var1.put(var12, Integer.valueOf(var11)); + } + + MD5String var14 = new MD5String(var2); + String var15 = var14.getMD5String(var3.toString()); + if(!var15.equals(var4.getStringValue(new Object[]{"checksum"}))) { + System.out.println("CHECKSUM MISMATCH"); + return null; + } + } catch (InvalidSyntaxException var13) { + var13.printStackTrace(); + } + + return var1; + } + + public static String func_77441_a(String var0, String var1, Map var2) { + StringBuilder var3 = new StringBuilder(); + StringBuilder var4 = new StringBuilder(); + boolean var5 = true; + var3.append("{\r\n"); + if(var0 != null && var1 != null) { + var3.append(" \"user\":{\r\n"); + var3.append(" \"name\":\"").append(var0).append("\",\r\n"); + var3.append(" \"sessionid\":\"").append(var1).append("\"\r\n"); + var3.append(" },\r\n"); + } + + var3.append(" \"stats-change\":["); + Iterator var6 = var2.keySet().iterator(); + + while(var6.hasNext()) { + StatBase var7 = (StatBase)var6.next(); + if(var5) { + var5 = false; + } else { + var3.append("},"); + } + + var3.append("\r\n {\"").append(var7.statId).append("\":").append(var2.get(var7)); + var4.append(var7.statGuid).append(","); + var4.append(var2.get(var7)).append(","); + } + + if(!var5) { + var3.append("}"); + } + + MD5String var8 = new MD5String(var1); + var3.append("\r\n ],\r\n"); + var3.append(" \"checksum\":\"").append(var8.getMD5String(var4.toString())).append("\"\r\n"); + var3.append("}"); + return var3.toString(); + } + + public boolean hasAchievementUnlocked(Achievement var1) { + return this.field_77457_a.containsKey(var1); + } + + public boolean canUnlockAchievement(Achievement var1) { + return var1.parentAchievement == null || this.hasAchievementUnlocked(var1.parentAchievement); + } + + public int writeStat(StatBase var1) { + Integer var2 = (Integer)this.field_77457_a.get(var1); + return var2 == null ? 0 : var2.intValue(); + } + + public void syncStats() { + this.statsSyncher.syncStatsFileWithMap(this.func_77445_b()); + } + + public void func_77449_e() { + if(this.field_77456_c && this.statsSyncher.func_77425_c()) { + this.statsSyncher.beginSendStats(this.func_77445_b()); + } + + this.statsSyncher.func_77422_e(); + } +} diff --git a/src/net/minecraft/src/StatList.java b/src/net/minecraft/src/StatList.java new file mode 100644 index 0000000..72c3cfc --- /dev/null +++ b/src/net/minecraft/src/StatList.java @@ -0,0 +1,182 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +public class StatList { + protected static Map oneShotStats = new HashMap(); + public static List allStats = new ArrayList(); + public static List generalStats = new ArrayList(); + public static List itemStats = new ArrayList(); + public static List objectMineStats = new ArrayList(); + public static StatBase startGameStat = (new StatBasic(1000, "stat.startGame")).initIndependentStat().registerStat(); + public static StatBase createWorldStat = (new StatBasic(1001, "stat.createWorld")).initIndependentStat().registerStat(); + public static StatBase loadWorldStat = (new StatBasic(1002, "stat.loadWorld")).initIndependentStat().registerStat(); + public static StatBase joinMultiplayerStat = (new StatBasic(1003, "stat.joinMultiplayer")).initIndependentStat().registerStat(); + public static StatBase leaveGameStat = (new StatBasic(1004, "stat.leaveGame")).initIndependentStat().registerStat(); + public static StatBase minutesPlayedStat = (new StatBasic(1100, "stat.playOneMinute", StatBase.timeStatType)).initIndependentStat().registerStat(); + public static StatBase distanceWalkedStat = (new StatBasic(2000, "stat.walkOneCm", StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static StatBase distanceSwumStat = (new StatBasic(2001, "stat.swimOneCm", StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static StatBase distanceFallenStat = (new StatBasic(2002, "stat.fallOneCm", StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static StatBase distanceClimbedStat = (new StatBasic(2003, "stat.climbOneCm", StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static StatBase distanceFlownStat = (new StatBasic(2004, "stat.flyOneCm", StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static StatBase distanceDoveStat = (new StatBasic(2005, "stat.diveOneCm", StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static StatBase distanceByMinecartStat = (new StatBasic(2006, "stat.minecartOneCm", StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static StatBase distanceByBoatStat = (new StatBasic(2007, "stat.boatOneCm", StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static StatBase distanceByPigStat = (new StatBasic(2008, "stat.pigOneCm", StatBase.distanceStatType)).initIndependentStat().registerStat(); + public static StatBase jumpStat = (new StatBasic(2010, "stat.jump")).initIndependentStat().registerStat(); + public static StatBase dropStat = (new StatBasic(2011, "stat.drop")).initIndependentStat().registerStat(); + public static StatBase damageDealtStat = (new StatBasic(2020, "stat.damageDealt")).registerStat(); + public static StatBase damageTakenStat = (new StatBasic(2021, "stat.damageTaken")).registerStat(); + public static StatBase deathsStat = (new StatBasic(2022, "stat.deaths")).registerStat(); + public static StatBase mobKillsStat = (new StatBasic(2023, "stat.mobKills")).registerStat(); + public static StatBase playerKillsStat = (new StatBasic(2024, "stat.playerKills")).registerStat(); + public static StatBase fishCaughtStat = (new StatBasic(2025, "stat.fishCaught")).registerStat(); + public static StatBase[] mineBlockStatArray = initMinableStats("stat.mineBlock", 16777216); + public static StatBase[] objectCraftStats; + public static StatBase[] objectUseStats; + public static StatBase[] objectBreakStats; + private static boolean blockStatsInitialized; + private static boolean itemStatsInitialized; + + public static void nopInit() { + } + + public static void initBreakableStats() { + objectUseStats = initUsableStats(objectUseStats, "stat.useItem", 16908288, 0, 256); + objectBreakStats = initBreakStats(objectBreakStats, "stat.breakItem", 16973824, 0, 256); + blockStatsInitialized = true; + initCraftableStats(); + } + + public static void initStats() { + objectUseStats = initUsableStats(objectUseStats, "stat.useItem", 16908288, 256, 32000); + objectBreakStats = initBreakStats(objectBreakStats, "stat.breakItem", 16973824, 256, 32000); + itemStatsInitialized = true; + initCraftableStats(); + } + + public static void initCraftableStats() { + if(blockStatsInitialized && itemStatsInitialized) { + HashSet var0 = new HashSet(); + Iterator var1 = CraftingManager.getInstance().getRecipeList().iterator(); + + while(var1.hasNext()) { + IRecipe var2 = (IRecipe)var1.next(); + if(var2.getRecipeOutput() != null) { + var0.add(Integer.valueOf(var2.getRecipeOutput().itemID)); + } + } + + var1 = FurnaceRecipes.smelting().getSmeltingList().values().iterator(); + + while(var1.hasNext()) { + ItemStack var4 = (ItemStack)var1.next(); + var0.add(Integer.valueOf(var4.itemID)); + } + + objectCraftStats = new StatBase[32000]; + var1 = var0.iterator(); + + while(var1.hasNext()) { + Integer var5 = (Integer)var1.next(); + if(Item.itemsList[var5.intValue()] != null) { + String var3 = StatCollector.translateToLocalFormatted("stat.craftItem", new Object[]{Item.itemsList[var5.intValue()].getStatName()}); + objectCraftStats[var5.intValue()] = (new StatCrafting(16842752 + var5.intValue(), var3, var5.intValue())).registerStat(); + } + } + + replaceAllSimilarBlocks(objectCraftStats); + } + } + + private static StatBase[] initMinableStats(String var0, int var1) { + StatBase[] var2 = new StatBase[256]; + + for(int var3 = 0; var3 < 256; ++var3) { + if(Block.blocksList[var3] != null && Block.blocksList[var3].getEnableStats()) { + String var4 = StatCollector.translateToLocalFormatted(var0, new Object[]{Block.blocksList[var3].getLocalizedName()}); + var2[var3] = (new StatCrafting(var1 + var3, var4, var3)).registerStat(); + objectMineStats.add((StatCrafting)var2[var3]); + } + } + + replaceAllSimilarBlocks(var2); + return var2; + } + + private static StatBase[] initUsableStats(StatBase[] var0, String var1, int var2, int var3, int var4) { + if(var0 == null) { + var0 = new StatBase[32000]; + } + + for(int var5 = var3; var5 < var4; ++var5) { + if(Item.itemsList[var5] != null) { + String var6 = StatCollector.translateToLocalFormatted(var1, new Object[]{Item.itemsList[var5].getStatName()}); + var0[var5] = (new StatCrafting(var2 + var5, var6, var5)).registerStat(); + if(var5 >= 256) { + itemStats.add((StatCrafting)var0[var5]); + } + } + } + + replaceAllSimilarBlocks(var0); + return var0; + } + + private static StatBase[] initBreakStats(StatBase[] var0, String var1, int var2, int var3, int var4) { + if(var0 == null) { + var0 = new StatBase[32000]; + } + + for(int var5 = var3; var5 < var4; ++var5) { + if(Item.itemsList[var5] != null && Item.itemsList[var5].isDamageable()) { + String var6 = StatCollector.translateToLocalFormatted(var1, new Object[]{Item.itemsList[var5].getStatName()}); + var0[var5] = (new StatCrafting(var2 + var5, var6, var5)).registerStat(); + } + } + + replaceAllSimilarBlocks(var0); + return var0; + } + + private static void replaceAllSimilarBlocks(StatBase[] var0) { + replaceSimilarBlocks(var0, Block.waterStill.blockID, Block.waterMoving.blockID); + replaceSimilarBlocks(var0, Block.lavaStill.blockID, Block.lavaStill.blockID); + replaceSimilarBlocks(var0, Block.pumpkinLantern.blockID, Block.pumpkin.blockID); + replaceSimilarBlocks(var0, Block.furnaceBurning.blockID, Block.furnaceIdle.blockID); + replaceSimilarBlocks(var0, Block.oreRedstoneGlowing.blockID, Block.oreRedstone.blockID); + replaceSimilarBlocks(var0, Block.redstoneRepeaterActive.blockID, Block.redstoneRepeaterIdle.blockID); + replaceSimilarBlocks(var0, Block.torchRedstoneActive.blockID, Block.torchRedstoneIdle.blockID); + replaceSimilarBlocks(var0, Block.mushroomRed.blockID, Block.mushroomBrown.blockID); + replaceSimilarBlocks(var0, Block.stoneDoubleSlab.blockID, Block.stoneSingleSlab.blockID); + replaceSimilarBlocks(var0, Block.woodDoubleSlab.blockID, Block.woodSingleSlab.blockID); + replaceSimilarBlocks(var0, Block.grass.blockID, Block.dirt.blockID); + replaceSimilarBlocks(var0, Block.tilledField.blockID, Block.dirt.blockID); + } + + private static void replaceSimilarBlocks(StatBase[] var0, int var1, int var2) { + if(var0[var1] != null && var0[var2] == null) { + var0[var2] = var0[var1]; + } else { + allStats.remove(var0[var1]); + objectMineStats.remove(var0[var1]); + generalStats.remove(var0[var1]); + var0[var1] = var0[var2]; + } + } + + public static StatBase getOneShotStat(int var0) { + return (StatBase)oneShotStats.get(Integer.valueOf(var0)); + } + + static { + AchievementList.init(); + blockStatsInitialized = false; + itemStatsInitialized = false; + } +} diff --git a/src/net/minecraft/src/StatPlaceholder.java b/src/net/minecraft/src/StatPlaceholder.java new file mode 100644 index 0000000..0c873bf --- /dev/null +++ b/src/net/minecraft/src/StatPlaceholder.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class StatPlaceholder extends StatBase { + public StatPlaceholder(int var1) { + super(var1, "Unknown stat"); + } +} diff --git a/src/net/minecraft/src/StatStringFormatKeyInv.java b/src/net/minecraft/src/StatStringFormatKeyInv.java new file mode 100644 index 0000000..04c3111 --- /dev/null +++ b/src/net/minecraft/src/StatStringFormatKeyInv.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +public class StatStringFormatKeyInv implements IStatStringFormat { + final Minecraft mc; + + public StatStringFormatKeyInv(Minecraft var1) { + this.mc = var1; + } + + public String formatString(String var1) { + try { + return String.format(var1, new Object[]{GameSettings.getKeyDisplayString(this.mc.gameSettings.keyBindInventory.keyCode)}); + } catch (Exception var3) { + return "Error: " + var3.getLocalizedMessage(); + } + } +} diff --git a/src/net/minecraft/src/StatTypeDistance.java b/src/net/minecraft/src/StatTypeDistance.java new file mode 100644 index 0000000..ce26295 --- /dev/null +++ b/src/net/minecraft/src/StatTypeDistance.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +final class StatTypeDistance implements IStatType { + public String format(int var1) { + double var2 = (double)var1 / 100.0D; + double var4 = var2 / 1000.0D; + return var4 > 0.5D ? StatBase.getDecimalFormat().format(var4) + " km" : (var2 > 0.5D ? StatBase.getDecimalFormat().format(var2) + " m" : var1 + " cm"); + } +} diff --git a/src/net/minecraft/src/StatTypeSimple.java b/src/net/minecraft/src/StatTypeSimple.java new file mode 100644 index 0000000..adc4668 --- /dev/null +++ b/src/net/minecraft/src/StatTypeSimple.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +final class StatTypeSimple implements IStatType { + public String format(int var1) { + return StatBase.getNumberFormat().format((long)var1); + } +} diff --git a/src/net/minecraft/src/StatTypeTime.java b/src/net/minecraft/src/StatTypeTime.java new file mode 100644 index 0000000..a09a73f --- /dev/null +++ b/src/net/minecraft/src/StatTypeTime.java @@ -0,0 +1,12 @@ +package net.minecraft.src; + +final class StatTypeTime implements IStatType { + public String format(int var1) { + double var2 = (double)var1 / 20.0D; + double var4 = var2 / 60.0D; + double var6 = var4 / 60.0D; + double var8 = var6 / 24.0D; + double var10 = var8 / 365.0D; + return var10 > 0.5D ? StatBase.getDecimalFormat().format(var10) + " y" : (var8 > 0.5D ? StatBase.getDecimalFormat().format(var8) + " d" : (var6 > 0.5D ? StatBase.getDecimalFormat().format(var6) + " h" : (var4 > 0.5D ? StatBase.getDecimalFormat().format(var4) + " m" : var2 + " s"))); + } +} diff --git a/src/net/minecraft/src/StatsSyncher.java b/src/net/minecraft/src/StatsSyncher.java new file mode 100644 index 0000000..36d16f1 --- /dev/null +++ b/src/net/minecraft/src/StatsSyncher.java @@ -0,0 +1,232 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Map; + +public class StatsSyncher { + private volatile boolean isBusy = false; + private volatile Map field_77430_b = null; + private volatile Map field_77431_c = null; + private StatFileWriter statFileWriter; + private File unsentDataFile; + private File dataFile; + private File unsentTempFile; + private File tempFile; + private File unsentOldFile; + private File oldFile; + private Session theSession; + private int field_77433_l = 0; + private int field_77434_m = 0; + + public StatsSyncher(Session var1, StatFileWriter var2, File var3) { + this.unsentDataFile = new File(var3, "stats_" + var1.username.toLowerCase() + "_unsent.dat"); + this.dataFile = new File(var3, "stats_" + var1.username.toLowerCase() + ".dat"); + this.unsentOldFile = new File(var3, "stats_" + var1.username.toLowerCase() + "_unsent.old"); + this.oldFile = new File(var3, "stats_" + var1.username.toLowerCase() + ".old"); + this.unsentTempFile = new File(var3, "stats_" + var1.username.toLowerCase() + "_unsent.tmp"); + this.tempFile = new File(var3, "stats_" + var1.username.toLowerCase() + ".tmp"); + if(!var1.username.toLowerCase().equals(var1.username)) { + this.func_77412_a(var3, "stats_" + var1.username + "_unsent.dat", this.unsentDataFile); + this.func_77412_a(var3, "stats_" + var1.username + ".dat", this.dataFile); + this.func_77412_a(var3, "stats_" + var1.username + "_unsent.old", this.unsentOldFile); + this.func_77412_a(var3, "stats_" + var1.username + ".old", this.oldFile); + this.func_77412_a(var3, "stats_" + var1.username + "_unsent.tmp", this.unsentTempFile); + this.func_77412_a(var3, "stats_" + var1.username + ".tmp", this.tempFile); + } + + this.statFileWriter = var2; + this.theSession = var1; + if(this.unsentDataFile.exists()) { + var2.writeStats(this.func_77417_a(this.unsentDataFile, this.unsentTempFile, this.unsentOldFile)); + } + + this.beginReceiveStats(); + } + + private void func_77412_a(File var1, String var2, File var3) { + File var4 = new File(var1, var2); + if(var4.exists() && !var4.isDirectory() && !var3.exists()) { + var4.renameTo(var3); + } + + } + + private Map func_77417_a(File var1, File var2, File var3) { + return var1.exists() ? this.func_77413_a(var1) : (var3.exists() ? this.func_77413_a(var3) : (var2.exists() ? this.func_77413_a(var2) : null)); + } + + private Map func_77413_a(File var1) { + BufferedReader var2 = null; + + try { + var2 = new BufferedReader(new FileReader(var1)); + String var3 = ""; + StringBuilder var4 = new StringBuilder(); + + while(true) { + var3 = var2.readLine(); + if(var3 == null) { + Map var5 = StatFileWriter.func_77453_b(var4.toString()); + return var5; + } + + var4.append(var3); + } + } catch (Exception var15) { + var15.printStackTrace(); + } finally { + if(var2 != null) { + try { + var2.close(); + } catch (Exception var14) { + var14.printStackTrace(); + } + } + + } + + return null; + } + + private void func_77421_a(Map var1, File var2, File var3, File var4) throws IOException { + PrintWriter var5 = new PrintWriter(new FileWriter(var3, false)); + + try { + var5.print(StatFileWriter.func_77441_a(this.theSession.username, "local", var1)); + } finally { + var5.close(); + } + + if(var4.exists()) { + var4.delete(); + } + + if(var2.exists()) { + var2.renameTo(var4); + } + + var3.renameTo(var2); + } + + public void beginReceiveStats() { + if(this.isBusy) { + throw new IllegalStateException("Can\'t get stats from server while StatsSyncher is busy!"); + } else { + this.field_77433_l = 100; + this.isBusy = true; + (new ThreadStatSyncherReceive(this)).start(); + } + } + + public void beginSendStats(Map var1) { + if(this.isBusy) { + throw new IllegalStateException("Can\'t save stats while StatsSyncher is busy!"); + } else { + this.field_77433_l = 100; + this.isBusy = true; + (new ThreadStatSyncherSend(this, var1)).start(); + } + } + + public void syncStatsFileWithMap(Map var1) { + int var2 = 30; + + while(this.isBusy) { + --var2; + if(var2 <= 0) { + break; + } + + try { + Thread.sleep(100L); + } catch (InterruptedException var10) { + var10.printStackTrace(); + } + } + + this.isBusy = true; + + try { + this.func_77421_a(var1, this.unsentDataFile, this.unsentTempFile, this.unsentOldFile); + } catch (Exception var8) { + var8.printStackTrace(); + } finally { + this.isBusy = false; + } + + } + + public boolean func_77425_c() { + return this.field_77433_l <= 0 && !this.isBusy && this.field_77431_c == null; + } + + public void func_77422_e() { + if(this.field_77433_l > 0) { + --this.field_77433_l; + } + + if(this.field_77434_m > 0) { + --this.field_77434_m; + } + + if(this.field_77431_c != null) { + this.statFileWriter.func_77448_c(this.field_77431_c); + this.field_77431_c = null; + } + + if(this.field_77430_b != null) { + this.statFileWriter.func_77452_b(this.field_77430_b); + this.field_77430_b = null; + } + + } + + static Map func_77419_a(StatsSyncher var0) { + return var0.field_77430_b; + } + + static File func_77408_b(StatsSyncher var0) { + return var0.dataFile; + } + + static File func_77407_c(StatsSyncher var0) { + return var0.tempFile; + } + + static File func_77411_d(StatsSyncher var0) { + return var0.oldFile; + } + + static void func_77414_a(StatsSyncher var0, Map var1, File var2, File var3, File var4) throws IOException { + var0.func_77421_a(var1, var2, var3, var4); + } + + static Map func_77416_a(StatsSyncher var0, Map var1) { + return var0.field_77430_b = var1; + } + + static Map func_77410_a(StatsSyncher var0, File var1, File var2, File var3) { + return var0.func_77417_a(var1, var2, var3); + } + + static boolean setBusy(StatsSyncher var0, boolean var1) { + return var0.isBusy = var1; + } + + static File getUnsentDataFile(StatsSyncher var0) { + return var0.unsentDataFile; + } + + static File getUnsentTempFile(StatsSyncher var0) { + return var0.unsentTempFile; + } + + static File getUnsentOldFile(StatsSyncher var0) { + return var0.unsentOldFile; + } +} diff --git a/src/net/minecraft/src/StepSound.java b/src/net/minecraft/src/StepSound.java new file mode 100644 index 0000000..cdf716d --- /dev/null +++ b/src/net/minecraft/src/StepSound.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +public class StepSound { + public final String stepSoundName; + public final float stepSoundVolume; + public final float stepSoundPitch; + + public StepSound(String var1, float var2, float var3) { + this.stepSoundName = var1; + this.stepSoundVolume = var2; + this.stepSoundPitch = var3; + } + + public float getVolume() { + return this.stepSoundVolume; + } + + public float getPitch() { + return this.stepSoundPitch; + } + + public String getBreakSound() { + return "dig." + this.stepSoundName; + } + + public String getStepSound() { + return "step." + this.stepSoundName; + } + + public String getPlaceSound() { + return this.getBreakSound(); + } +} diff --git a/src/net/minecraft/src/StepSoundAnvil.java b/src/net/minecraft/src/StepSoundAnvil.java new file mode 100644 index 0000000..97dc2cc --- /dev/null +++ b/src/net/minecraft/src/StepSoundAnvil.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +final class StepSoundAnvil extends StepSound { + StepSoundAnvil(String var1, float var2, float var3) { + super(var1, var2, var3); + } + + public String getBreakSound() { + return "dig.stone"; + } + + public String getPlaceSound() { + return "random.anvil_land"; + } +} diff --git a/src/net/minecraft/src/StepSoundSand.java b/src/net/minecraft/src/StepSoundSand.java new file mode 100644 index 0000000..30f5edf --- /dev/null +++ b/src/net/minecraft/src/StepSoundSand.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class StepSoundSand extends StepSound { + StepSoundSand(String var1, float var2, float var3) { + super(var1, var2, var3); + } + + public String getBreakSound() { + return "dig.wood"; + } +} diff --git a/src/net/minecraft/src/StepSoundStone.java b/src/net/minecraft/src/StepSoundStone.java new file mode 100644 index 0000000..fd3c69e --- /dev/null +++ b/src/net/minecraft/src/StepSoundStone.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +final class StepSoundStone extends StepSound { + StepSoundStone(String var1, float var2, float var3) { + super(var1, var2, var3); + } + + public String getBreakSound() { + return "random.glass"; + } + + public String getPlaceSound() { + return "step.stone"; + } +} diff --git a/src/net/minecraft/src/StitchHolder.java b/src/net/minecraft/src/StitchHolder.java new file mode 100644 index 0000000..779474a --- /dev/null +++ b/src/net/minecraft/src/StitchHolder.java @@ -0,0 +1,73 @@ +package net.minecraft.src; + +public class StitchHolder implements Comparable { + private final Texture theTexture; + private final int width; + private final int height; + private boolean rotated; + private float scaleFactor = 1.0F; + + public StitchHolder(Texture var1) { + this.theTexture = var1; + this.width = var1.getWidth(); + this.height = var1.getHeight(); + this.rotated = this.ceil16(this.height) > this.ceil16(this.width); + } + + public Texture func_98150_a() { + return this.theTexture; + } + + public int getWidth() { + return this.rotated ? this.ceil16((int)((float)this.height * this.scaleFactor)) : this.ceil16((int)((float)this.width * this.scaleFactor)); + } + + public int getHeight() { + return this.rotated ? this.ceil16((int)((float)this.width * this.scaleFactor)) : this.ceil16((int)((float)this.height * this.scaleFactor)); + } + + public void rotate() { + this.rotated = !this.rotated; + } + + public boolean isRotated() { + return this.rotated; + } + + private int ceil16(int var1) { + return (var1 >> 0) + ((var1 & 0) == 0 ? 0 : 1) << 0; + } + + public void setNewDimension(int var1) { + if(this.width > var1 && this.height > var1) { + this.scaleFactor = (float)var1 / (float)Math.min(this.width, this.height); + } + } + + public String toString() { + return "TextureHolder{width=" + this.width + ", height=" + this.height + '}'; + } + + public int compareToStitchHolder(StitchHolder var1) { + int var2; + if(this.getHeight() == var1.getHeight()) { + if(this.getWidth() == var1.getWidth()) { + if(this.theTexture.getTextureName() == null) { + return var1.theTexture.getTextureName() == null ? 0 : -1; + } + + return this.theTexture.getTextureName().compareTo(var1.theTexture.getTextureName()); + } + + var2 = this.getWidth() < var1.getWidth() ? 1 : -1; + } else { + var2 = this.getHeight() < var1.getHeight() ? 1 : -1; + } + + return var2; + } + + public int compareTo(Object var1) { + return this.compareToStitchHolder((StitchHolder)var1); + } +} diff --git a/src/net/minecraft/src/StitchSlot.java b/src/net/minecraft/src/StitchSlot.java new file mode 100644 index 0000000..627ebfd --- /dev/null +++ b/src/net/minecraft/src/StitchSlot.java @@ -0,0 +1,103 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class StitchSlot { + private final int originX; + private final int originY; + private final int width; + private final int height; + private List subSlots; + private StitchHolder holder; + + public StitchSlot(int var1, int var2, int var3, int var4) { + this.originX = var1; + this.originY = var2; + this.width = var3; + this.height = var4; + } + + public StitchHolder getStitchHolder() { + return this.holder; + } + + public int getOriginX() { + return this.originX; + } + + public int getOriginY() { + return this.originY; + } + + public boolean func_94182_a(StitchHolder var1) { + if(this.holder != null) { + return false; + } else { + int var2 = var1.getWidth(); + int var3 = var1.getHeight(); + if(var2 <= this.width && var3 <= this.height) { + if(var2 == this.width && var3 == this.height) { + this.holder = var1; + return true; + } else { + if(this.subSlots == null) { + this.subSlots = new ArrayList(1); + this.subSlots.add(new StitchSlot(this.originX, this.originY, var2, var3)); + int var4 = this.width - var2; + int var5 = this.height - var3; + if(var5 > 0 && var4 > 0) { + int var6 = Math.max(this.height, var4); + int var7 = Math.max(this.width, var5); + if(var6 >= var7) { + this.subSlots.add(new StitchSlot(this.originX, this.originY + var3, var2, var5)); + this.subSlots.add(new StitchSlot(this.originX + var2, this.originY, var4, this.height)); + } else { + this.subSlots.add(new StitchSlot(this.originX + var2, this.originY, var4, var3)); + this.subSlots.add(new StitchSlot(this.originX, this.originY + var3, this.width, var5)); + } + } else if(var4 == 0) { + this.subSlots.add(new StitchSlot(this.originX, this.originY + var3, var2, var5)); + } else if(var5 == 0) { + this.subSlots.add(new StitchSlot(this.originX + var2, this.originY, var4, var3)); + } + } + + Iterator var8 = this.subSlots.iterator(); + + StitchSlot var9; + do { + if(!var8.hasNext()) { + return false; + } + + var9 = (StitchSlot)var8.next(); + } while(!var9.func_94182_a(var1)); + + return true; + } + } else { + return false; + } + } + } + + public void getAllStitchSlots(List var1) { + if(this.holder != null) { + var1.add(this); + } else if(this.subSlots != null) { + Iterator var2 = this.subSlots.iterator(); + + while(var2.hasNext()) { + StitchSlot var3 = (StitchSlot)var2.next(); + var3.getAllStitchSlots(var1); + } + } + + } + + public String toString() { + return "Slot{originX=" + this.originX + ", originY=" + this.originY + ", width=" + this.width + ", height=" + this.height + ", texture=" + this.holder + ", subSlots=" + this.subSlots + '}'; + } +} diff --git a/src/net/minecraft/src/Stitcher.java b/src/net/minecraft/src/Stitcher.java new file mode 100644 index 0000000..e7d5a22 --- /dev/null +++ b/src/net/minecraft/src/Stitcher.java @@ -0,0 +1,177 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +public class Stitcher { + private final Set setStitchHolders; + private final List stitchSlots; + private int currentWidth; + private int currentHeight; + private final int maxWidth; + private final int maxHeight; + private final boolean forcePowerOf2; + private final int maxTileDimension; + private Texture atlasTexture; + private final String textureName; + + public Stitcher(String var1, int var2, int var3, boolean var4) { + this(var1, var2, var3, var4, 0); + } + + public Stitcher(String var1, int var2, int var3, boolean var4, int var5) { + this.setStitchHolders = new HashSet(256); + this.stitchSlots = new ArrayList(256); + this.currentWidth = 0; + this.currentHeight = 0; + this.textureName = var1; + this.maxWidth = var2; + this.maxHeight = var3; + this.forcePowerOf2 = var4; + this.maxTileDimension = var5; + } + + public void addStitchHolder(StitchHolder var1) { + if(this.maxTileDimension > 0) { + var1.setNewDimension(this.maxTileDimension); + } + + this.setStitchHolders.add(var1); + } + + public Texture getTexture() { + if(this.forcePowerOf2) { + this.currentWidth = this.getCeilPowerOf2(this.currentWidth); + this.currentHeight = this.getCeilPowerOf2(this.currentHeight); + } + + this.atlasTexture = TextureManager.instance().createEmptyTexture(this.textureName, 1, this.currentWidth, this.currentHeight, 6408); + this.atlasTexture.fillRect(this.atlasTexture.getTextureRect(), -65536); + List var1 = this.getStichSlots(); + + for(int var2 = 0; var2 < var1.size(); ++var2) { + StitchSlot var3 = (StitchSlot)var1.get(var2); + StitchHolder var4 = var3.getStitchHolder(); + this.atlasTexture.copyFrom(var3.getOriginX(), var3.getOriginY(), var4.func_98150_a(), var4.isRotated()); + } + + TextureManager.instance().registerTexture(this.textureName, this.atlasTexture); + return this.atlasTexture; + } + + public void doStitch() { + StitchHolder[] var1 = (StitchHolder[])this.setStitchHolders.toArray(new StitchHolder[this.setStitchHolders.size()]); + Arrays.sort(var1); + this.atlasTexture = null; + + for(int var2 = 0; var2 < var1.length; ++var2) { + StitchHolder var3 = var1[var2]; + if(!this.allocateSlot(var3)) { + throw new StitcherException(var3); + } + } + + } + + public List getStichSlots() { + ArrayList var1 = new ArrayList(); + Iterator var2 = this.stitchSlots.iterator(); + + while(var2.hasNext()) { + StitchSlot var3 = (StitchSlot)var2.next(); + var3.getAllStitchSlots(var1); + } + + return var1; + } + + private int getCeilPowerOf2(int var1) { + int var2 = var1 - 1; + var2 |= var2 >> 1; + var2 |= var2 >> 2; + var2 |= var2 >> 4; + var2 |= var2 >> 8; + var2 |= var2 >> 16; + return var2 + 1; + } + + private boolean allocateSlot(StitchHolder var1) { + for(int var2 = 0; var2 < this.stitchSlots.size(); ++var2) { + if(((StitchSlot)this.stitchSlots.get(var2)).func_94182_a(var1)) { + return true; + } + + var1.rotate(); + if(((StitchSlot)this.stitchSlots.get(var2)).func_94182_a(var1)) { + return true; + } + + var1.rotate(); + } + + return this.expandAndAllocateSlot(var1); + } + + private boolean expandAndAllocateSlot(StitchHolder var1) { + int var2 = Math.min(var1.getHeight(), var1.getWidth()); + boolean var3 = this.currentWidth == 0 && this.currentHeight == 0; + boolean var4; + if(this.forcePowerOf2) { + int var5 = this.getCeilPowerOf2(this.currentWidth); + int var6 = this.getCeilPowerOf2(this.currentHeight); + int var7 = this.getCeilPowerOf2(this.currentWidth + var2); + int var8 = this.getCeilPowerOf2(this.currentHeight + var2); + boolean var9 = var7 <= this.maxWidth; + boolean var10 = var8 <= this.maxHeight; + if(!var9 && !var10) { + return false; + } + + int var11 = Math.max(var1.getHeight(), var1.getWidth()); + if(var3 && !var9 && this.getCeilPowerOf2(this.currentHeight + var11) > this.maxHeight) { + return false; + } + + boolean var12 = var5 != var7; + boolean var13 = var6 != var8; + if(var12 ^ var13) { + var4 = var12 && var9; + } else { + var4 = var9 && var5 <= var6; + } + } else { + boolean var14 = this.currentWidth + var2 <= this.maxWidth; + boolean var16 = this.currentHeight + var2 <= this.maxHeight; + if(!var14 && !var16) { + return false; + } + + var4 = (var3 || this.currentWidth <= this.currentHeight) && var14; + } + + StitchSlot var15; + if(var4) { + if(var1.getWidth() > var1.getHeight()) { + var1.rotate(); + } + + if(this.currentHeight == 0) { + this.currentHeight = var1.getHeight(); + } + + var15 = new StitchSlot(this.currentWidth, 0, var1.getWidth(), this.currentHeight); + this.currentWidth += var1.getWidth(); + } else { + var15 = new StitchSlot(0, this.currentHeight, this.currentWidth, var1.getHeight()); + this.currentHeight += var1.getHeight(); + } + + var15.func_94182_a(var1); + this.stitchSlots.add(var15); + return true; + } +} diff --git a/src/net/minecraft/src/StitcherException.java b/src/net/minecraft/src/StitcherException.java new file mode 100644 index 0000000..8bbb44d --- /dev/null +++ b/src/net/minecraft/src/StitcherException.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public class StitcherException extends RuntimeException { + private final StitchHolder field_98149_a; + + public StitcherException(StitchHolder var1) { + this.field_98149_a = var1; + } +} diff --git a/src/net/minecraft/src/StringTranslate.java b/src/net/minecraft/src/StringTranslate.java new file mode 100644 index 0000000..48ee38f --- /dev/null +++ b/src/net/minecraft/src/StringTranslate.java @@ -0,0 +1,170 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.Enumeration; +import java.util.IllegalFormatException; +import java.util.Properties; +import java.util.TreeMap; + +public class StringTranslate { + private static StringTranslate instance = new StringTranslate("en_US"); + private Properties translateTable = new Properties(); + private TreeMap languageList; + private TreeMap field_94521_d = new TreeMap(); + private String currentLanguage; + private boolean isUnicode; + + public StringTranslate(String var1) { + this.loadLanguageList(); + this.setLanguage(var1, false); + } + + public static StringTranslate getInstance() { + return instance; + } + + private void loadLanguageList() { + TreeMap var1 = new TreeMap(); + + try { + BufferedReader var2 = new BufferedReader(new InputStreamReader(StringTranslate.class.getResourceAsStream("/lang/languages.txt"), "UTF-8")); + + for(String var3 = var2.readLine(); var3 != null; var3 = var2.readLine()) { + String[] var4 = var3.trim().split("="); + if(var4 != null && var4.length == 2) { + var1.put(var4[0], var4[1]); + } + } + } catch (IOException var5) { + var5.printStackTrace(); + return; + } + + this.languageList = var1; + this.languageList.put("en_US", "English (US)"); + } + + public TreeMap getLanguageList() { + return this.languageList; + } + + private void loadLanguage(Properties var1, String var2) throws IOException { + BufferedReader var3 = null; + if(this.field_94521_d.containsKey(var2)) { + var3 = new BufferedReader(new FileReader((File)this.field_94521_d.get(var2))); + } else { + var3 = new BufferedReader(new InputStreamReader(StringTranslate.class.getResourceAsStream("/lang/" + var2 + ".lang"), "UTF-8")); + } + + for(String var4 = var3.readLine(); var4 != null; var4 = var3.readLine()) { + var4 = var4.trim(); + if(!var4.startsWith("#")) { + String[] var5 = var4.split("="); + if(var5 != null && var5.length == 2) { + var1.setProperty(var5[0], var5[1]); + } + } + } + + } + + public synchronized void setLanguage(String var1, boolean var2) { + if(var2 || !var1.equals(this.currentLanguage)) { + Properties var3 = new Properties(); + + try { + this.loadLanguage(var3, "en_US"); + } catch (IOException var9) { + } + + this.isUnicode = false; + if(!"en_US".equals(var1)) { + try { + this.loadLanguage(var3, var1); + Enumeration var4 = var3.propertyNames(); + + label49: + while(true) { + while(true) { + Object var6; + do { + if(!var4.hasMoreElements() || this.isUnicode) { + break label49; + } + + Object var5 = var4.nextElement(); + var6 = var3.get(var5); + } while(var6 == null); + + String var7 = var6.toString(); + + for(int var8 = 0; var8 < var7.length(); ++var8) { + if(var7.charAt(var8) >= 256) { + this.isUnicode = true; + break; + } + } + } + } + } catch (IOException var10) { + var10.printStackTrace(); + return; + } + } + + this.currentLanguage = var1; + this.translateTable = var3; + } + } + + public String getCurrentLanguage() { + return this.currentLanguage; + } + + public boolean isUnicode() { + return this.isUnicode; + } + + public synchronized String translateKey(String var1) { + return this.translateTable.getProperty(var1, var1); + } + + public synchronized String translateKeyFormat(String var1, Object... var2) { + String var3 = this.translateTable.getProperty(var1, var1); + + try { + return String.format(var3, var2); + } catch (IllegalFormatException var5) { + return "Format error: " + var3; + } + } + + public synchronized boolean containsTranslateKey(String var1) { + return this.translateTable.containsKey(var1); + } + + public synchronized String translateNamedKey(String var1) { + return this.translateTable.getProperty(var1 + ".name", ""); + } + + public static boolean isBidirectional(String var0) { + return "ar_SA".equals(var0) || "he_IL".equals(var0); + } + + public synchronized void func_94519_a(String var1, File var2) { + int var3 = var1.indexOf(46); + if(var3 > 0) { + var1 = var1.substring(0, var3); + } + + this.field_94521_d.put(var1, var2); + if(var1.contains(this.currentLanguage)) { + this.setLanguage(this.currentLanguage, true); + } + + } +} diff --git a/src/net/minecraft/src/StringUtils.java b/src/net/minecraft/src/StringUtils.java new file mode 100644 index 0000000..3df0a51 --- /dev/null +++ b/src/net/minecraft/src/StringUtils.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import java.util.regex.Pattern; + +public class StringUtils { + private static final Pattern patternControlCode = Pattern.compile("(?i)\\u00A7[0-9A-FK-OR]"); + + public static String ticksToElapsedTime(int var0) { + int var1 = var0 / 20; + int var2 = var1 / 60; + var1 %= 60; + return var1 < 10 ? var2 + ":0" + var1 : var2 + ":" + var1; + } + + public static String stripControlCodes(String var0) { + return patternControlCode.matcher(var0).replaceAll(""); + } +} diff --git a/src/net/minecraft/src/StructureBoundingBox.java b/src/net/minecraft/src/StructureBoundingBox.java new file mode 100644 index 0000000..659a963 --- /dev/null +++ b/src/net/minecraft/src/StructureBoundingBox.java @@ -0,0 +1,117 @@ +package net.minecraft.src; + +public class StructureBoundingBox { + public int minX; + public int minY; + public int minZ; + public int maxX; + public int maxY; + public int maxZ; + + public StructureBoundingBox() { + } + + public static StructureBoundingBox getNewBoundingBox() { + return new StructureBoundingBox(Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE, Integer.MIN_VALUE); + } + + public static StructureBoundingBox getComponentToAddBoundingBox(int var0, int var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9) { + switch(var9) { + case 0: + return new StructureBoundingBox(var0 + var3, var1 + var4, var2 + var5, var0 + var6 - 1 + var3, var1 + var7 - 1 + var4, var2 + var8 - 1 + var5); + case 1: + return new StructureBoundingBox(var0 - var8 + 1 + var5, var1 + var4, var2 + var3, var0 + var5, var1 + var7 - 1 + var4, var2 + var6 - 1 + var3); + case 2: + return new StructureBoundingBox(var0 + var3, var1 + var4, var2 - var8 + 1 + var5, var0 + var6 - 1 + var3, var1 + var7 - 1 + var4, var2 + var5); + case 3: + return new StructureBoundingBox(var0 + var5, var1 + var4, var2 + var3, var0 + var8 - 1 + var5, var1 + var7 - 1 + var4, var2 + var6 - 1 + var3); + default: + return new StructureBoundingBox(var0 + var3, var1 + var4, var2 + var5, var0 + var6 - 1 + var3, var1 + var7 - 1 + var4, var2 + var8 - 1 + var5); + } + } + + public StructureBoundingBox(StructureBoundingBox var1) { + this.minX = var1.minX; + this.minY = var1.minY; + this.minZ = var1.minZ; + this.maxX = var1.maxX; + this.maxY = var1.maxY; + this.maxZ = var1.maxZ; + } + + public StructureBoundingBox(int var1, int var2, int var3, int var4, int var5, int var6) { + this.minX = var1; + this.minY = var2; + this.minZ = var3; + this.maxX = var4; + this.maxY = var5; + this.maxZ = var6; + } + + public StructureBoundingBox(int var1, int var2, int var3, int var4) { + this.minX = var1; + this.minZ = var2; + this.maxX = var3; + this.maxZ = var4; + this.minY = 1; + this.maxY = 512; + } + + public boolean intersectsWith(StructureBoundingBox var1) { + return this.maxX >= var1.minX && this.minX <= var1.maxX && this.maxZ >= var1.minZ && this.minZ <= var1.maxZ && this.maxY >= var1.minY && this.minY <= var1.maxY; + } + + public boolean intersectsWith(int var1, int var2, int var3, int var4) { + return this.maxX >= var1 && this.minX <= var3 && this.maxZ >= var2 && this.minZ <= var4; + } + + public void expandTo(StructureBoundingBox var1) { + this.minX = Math.min(this.minX, var1.minX); + this.minY = Math.min(this.minY, var1.minY); + this.minZ = Math.min(this.minZ, var1.minZ); + this.maxX = Math.max(this.maxX, var1.maxX); + this.maxY = Math.max(this.maxY, var1.maxY); + this.maxZ = Math.max(this.maxZ, var1.maxZ); + } + + public void offset(int var1, int var2, int var3) { + this.minX += var1; + this.minY += var2; + this.minZ += var3; + this.maxX += var1; + this.maxY += var2; + this.maxZ += var3; + } + + public boolean isVecInside(int var1, int var2, int var3) { + return var1 >= this.minX && var1 <= this.maxX && var3 >= this.minZ && var3 <= this.maxZ && var2 >= this.minY && var2 <= this.maxY; + } + + public int getXSize() { + return this.maxX - this.minX + 1; + } + + public int getYSize() { + return this.maxY - this.minY + 1; + } + + public int getZSize() { + return this.maxZ - this.minZ + 1; + } + + public int getCenterX() { + return this.minX + (this.maxX - this.minX + 1) / 2; + } + + public int getCenterY() { + return this.minY + (this.maxY - this.minY + 1) / 2; + } + + public int getCenterZ() { + return this.minZ + (this.maxZ - this.minZ + 1) / 2; + } + + public String toString() { + return "(" + this.minX + ", " + this.minY + ", " + this.minZ + "; " + this.maxX + ", " + this.maxY + ", " + this.maxZ + ")"; + } +} diff --git a/src/net/minecraft/src/StructureComponent.java b/src/net/minecraft/src/StructureComponent.java new file mode 100644 index 0000000..2931b69 --- /dev/null +++ b/src/net/minecraft/src/StructureComponent.java @@ -0,0 +1,566 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +public abstract class StructureComponent { + protected StructureBoundingBox boundingBox; + protected int coordBaseMode; + protected int componentType; + + protected StructureComponent(int var1) { + this.componentType = var1; + this.coordBaseMode = -1; + } + + public void buildComponent(StructureComponent var1, List var2, Random var3) { + } + + public abstract boolean addComponentParts(World var1, Random var2, StructureBoundingBox var3); + + public StructureBoundingBox getBoundingBox() { + return this.boundingBox; + } + + public int getComponentType() { + return this.componentType; + } + + public static StructureComponent findIntersecting(List var0, StructureBoundingBox var1) { + Iterator var2 = var0.iterator(); + + StructureComponent var3; + do { + if(!var2.hasNext()) { + return null; + } + + var3 = (StructureComponent)var2.next(); + } while(var3.getBoundingBox() == null || !var3.getBoundingBox().intersectsWith(var1)); + + return var3; + } + + public ChunkPosition getCenter() { + return new ChunkPosition(this.boundingBox.getCenterX(), this.boundingBox.getCenterY(), this.boundingBox.getCenterZ()); + } + + protected boolean isLiquidInStructureBoundingBox(World var1, StructureBoundingBox var2) { + int var3 = Math.max(this.boundingBox.minX - 1, var2.minX); + int var4 = Math.max(this.boundingBox.minY - 1, var2.minY); + int var5 = Math.max(this.boundingBox.minZ - 1, var2.minZ); + int var6 = Math.min(this.boundingBox.maxX + 1, var2.maxX); + int var7 = Math.min(this.boundingBox.maxY + 1, var2.maxY); + int var8 = Math.min(this.boundingBox.maxZ + 1, var2.maxZ); + + int var9; + int var10; + int var11; + for(var9 = var3; var9 <= var6; ++var9) { + for(var10 = var5; var10 <= var8; ++var10) { + var11 = var1.getBlockId(var9, var4, var10); + if(var11 > 0 && Block.blocksList[var11].blockMaterial.isLiquid()) { + return true; + } + + var11 = var1.getBlockId(var9, var7, var10); + if(var11 > 0 && Block.blocksList[var11].blockMaterial.isLiquid()) { + return true; + } + } + } + + for(var9 = var3; var9 <= var6; ++var9) { + for(var10 = var4; var10 <= var7; ++var10) { + var11 = var1.getBlockId(var9, var10, var5); + if(var11 > 0 && Block.blocksList[var11].blockMaterial.isLiquid()) { + return true; + } + + var11 = var1.getBlockId(var9, var10, var8); + if(var11 > 0 && Block.blocksList[var11].blockMaterial.isLiquid()) { + return true; + } + } + } + + for(var9 = var5; var9 <= var8; ++var9) { + for(var10 = var4; var10 <= var7; ++var10) { + var11 = var1.getBlockId(var3, var10, var9); + if(var11 > 0 && Block.blocksList[var11].blockMaterial.isLiquid()) { + return true; + } + + var11 = var1.getBlockId(var6, var10, var9); + if(var11 > 0 && Block.blocksList[var11].blockMaterial.isLiquid()) { + return true; + } + } + } + + return false; + } + + protected int getXWithOffset(int var1, int var2) { + switch(this.coordBaseMode) { + case 0: + case 2: + return this.boundingBox.minX + var1; + case 1: + return this.boundingBox.maxX - var2; + case 3: + return this.boundingBox.minX + var2; + default: + return var1; + } + } + + protected int getYWithOffset(int var1) { + return this.coordBaseMode == -1 ? var1 : var1 + this.boundingBox.minY; + } + + protected int getZWithOffset(int var1, int var2) { + switch(this.coordBaseMode) { + case 0: + return this.boundingBox.minZ + var2; + case 1: + case 3: + return this.boundingBox.minZ + var1; + case 2: + return this.boundingBox.maxZ - var2; + default: + return var2; + } + } + + protected int getMetadataWithOffset(int var1, int var2) { + if(var1 == Block.rail.blockID) { + if(this.coordBaseMode == 1 || this.coordBaseMode == 3) { + if(var2 == 1) { + return 0; + } + + return 1; + } + } else if(var1 != Block.doorWood.blockID && var1 != Block.doorIron.blockID) { + if(var1 != Block.stairsCobblestone.blockID && var1 != Block.stairsWoodOak.blockID && var1 != Block.stairsNetherBrick.blockID && var1 != Block.stairsStoneBrick.blockID && var1 != Block.stairsSandStone.blockID) { + if(var1 == Block.ladder.blockID) { + if(this.coordBaseMode == 0) { + if(var2 == 2) { + return 3; + } + + if(var2 == 3) { + return 2; + } + } else if(this.coordBaseMode == 1) { + if(var2 == 2) { + return 4; + } + + if(var2 == 3) { + return 5; + } + + if(var2 == 4) { + return 2; + } + + if(var2 == 5) { + return 3; + } + } else if(this.coordBaseMode == 3) { + if(var2 == 2) { + return 5; + } + + if(var2 == 3) { + return 4; + } + + if(var2 == 4) { + return 2; + } + + if(var2 == 5) { + return 3; + } + } + } else if(var1 == Block.stoneButton.blockID) { + if(this.coordBaseMode == 0) { + if(var2 == 3) { + return 4; + } + + if(var2 == 4) { + return 3; + } + } else if(this.coordBaseMode == 1) { + if(var2 == 3) { + return 1; + } + + if(var2 == 4) { + return 2; + } + + if(var2 == 2) { + return 3; + } + + if(var2 == 1) { + return 4; + } + } else if(this.coordBaseMode == 3) { + if(var2 == 3) { + return 2; + } + + if(var2 == 4) { + return 1; + } + + if(var2 == 2) { + return 3; + } + + if(var2 == 1) { + return 4; + } + } + } else if(var1 != Block.tripWireSource.blockID && (Block.blocksList[var1] == null || !(Block.blocksList[var1] instanceof BlockDirectional))) { + if(var1 == Block.pistonBase.blockID || var1 == Block.pistonStickyBase.blockID || var1 == Block.lever.blockID || var1 == Block.dispenser.blockID) { + if(this.coordBaseMode == 0) { + if(var2 == 2 || var2 == 3) { + return Facing.oppositeSide[var2]; + } + } else if(this.coordBaseMode == 1) { + if(var2 == 2) { + return 4; + } + + if(var2 == 3) { + return 5; + } + + if(var2 == 4) { + return 2; + } + + if(var2 == 5) { + return 3; + } + } else if(this.coordBaseMode == 3) { + if(var2 == 2) { + return 5; + } + + if(var2 == 3) { + return 4; + } + + if(var2 == 4) { + return 2; + } + + if(var2 == 5) { + return 3; + } + } + } + } else if(this.coordBaseMode == 0) { + if(var2 == 0 || var2 == 2) { + return Direction.rotateOpposite[var2]; + } + } else if(this.coordBaseMode == 1) { + if(var2 == 2) { + return 1; + } + + if(var2 == 0) { + return 3; + } + + if(var2 == 1) { + return 2; + } + + if(var2 == 3) { + return 0; + } + } else if(this.coordBaseMode == 3) { + if(var2 == 2) { + return 3; + } + + if(var2 == 0) { + return 1; + } + + if(var2 == 1) { + return 2; + } + + if(var2 == 3) { + return 0; + } + } + } else if(this.coordBaseMode == 0) { + if(var2 == 2) { + return 3; + } + + if(var2 == 3) { + return 2; + } + } else if(this.coordBaseMode == 1) { + if(var2 == 0) { + return 2; + } + + if(var2 == 1) { + return 3; + } + + if(var2 == 2) { + return 0; + } + + if(var2 == 3) { + return 1; + } + } else if(this.coordBaseMode == 3) { + if(var2 == 0) { + return 2; + } + + if(var2 == 1) { + return 3; + } + + if(var2 == 2) { + return 1; + } + + if(var2 == 3) { + return 0; + } + } + } else if(this.coordBaseMode == 0) { + if(var2 == 0) { + return 2; + } + + if(var2 == 2) { + return 0; + } + } else { + if(this.coordBaseMode == 1) { + return var2 + 1 & 3; + } + + if(this.coordBaseMode == 3) { + return var2 + 3 & 3; + } + } + + return var2; + } + + protected void placeBlockAtCurrentPosition(World var1, int var2, int var3, int var4, int var5, int var6, StructureBoundingBox var7) { + int var8 = this.getXWithOffset(var4, var6); + int var9 = this.getYWithOffset(var5); + int var10 = this.getZWithOffset(var4, var6); + if(var7.isVecInside(var8, var9, var10)) { + var1.setBlock(var8, var9, var10, var2, var3, 2); + } + } + + protected int getBlockIdAtCurrentPosition(World var1, int var2, int var3, int var4, StructureBoundingBox var5) { + int var6 = this.getXWithOffset(var2, var4); + int var7 = this.getYWithOffset(var3); + int var8 = this.getZWithOffset(var2, var4); + return !var5.isVecInside(var6, var7, var8) ? 0 : var1.getBlockId(var6, var7, var8); + } + + protected void fillWithAir(World var1, StructureBoundingBox var2, int var3, int var4, int var5, int var6, int var7, int var8) { + for(int var9 = var4; var9 <= var7; ++var9) { + for(int var10 = var3; var10 <= var6; ++var10) { + for(int var11 = var5; var11 <= var8; ++var11) { + this.placeBlockAtCurrentPosition(var1, 0, 0, var10, var9, var11, var2); + } + } + } + + } + + protected void fillWithBlocks(World var1, StructureBoundingBox var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, boolean var11) { + for(int var12 = var4; var12 <= var7; ++var12) { + for(int var13 = var3; var13 <= var6; ++var13) { + for(int var14 = var5; var14 <= var8; ++var14) { + if(!var11 || this.getBlockIdAtCurrentPosition(var1, var13, var12, var14, var2) != 0) { + if(var12 != var4 && var12 != var7 && var13 != var3 && var13 != var6 && var14 != var5 && var14 != var8) { + this.placeBlockAtCurrentPosition(var1, var10, 0, var13, var12, var14, var2); + } else { + this.placeBlockAtCurrentPosition(var1, var9, 0, var13, var12, var14, var2); + } + } + } + } + } + + } + + protected void fillWithMetadataBlocks(World var1, StructureBoundingBox var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, boolean var13) { + for(int var14 = var4; var14 <= var7; ++var14) { + for(int var15 = var3; var15 <= var6; ++var15) { + for(int var16 = var5; var16 <= var8; ++var16) { + if(!var13 || this.getBlockIdAtCurrentPosition(var1, var15, var14, var16, var2) != 0) { + if(var14 != var4 && var14 != var7 && var15 != var3 && var15 != var6 && var16 != var5 && var16 != var8) { + this.placeBlockAtCurrentPosition(var1, var11, var12, var15, var14, var16, var2); + } else { + this.placeBlockAtCurrentPosition(var1, var9, var10, var15, var14, var16, var2); + } + } + } + } + } + + } + + protected void fillWithRandomizedBlocks(World var1, StructureBoundingBox var2, int var3, int var4, int var5, int var6, int var7, int var8, boolean var9, Random var10, StructurePieceBlockSelector var11) { + for(int var12 = var4; var12 <= var7; ++var12) { + for(int var13 = var3; var13 <= var6; ++var13) { + for(int var14 = var5; var14 <= var8; ++var14) { + if(!var9 || this.getBlockIdAtCurrentPosition(var1, var13, var12, var14, var2) != 0) { + var11.selectBlocks(var10, var13, var12, var14, var12 == var4 || var12 == var7 || var13 == var3 || var13 == var6 || var14 == var5 || var14 == var8); + this.placeBlockAtCurrentPosition(var1, var11.getSelectedBlockId(), var11.getSelectedBlockMetaData(), var13, var12, var14, var2); + } + } + } + } + + } + + protected void randomlyFillWithBlocks(World var1, StructureBoundingBox var2, Random var3, float var4, int var5, int var6, int var7, int var8, int var9, int var10, int var11, int var12, boolean var13) { + for(int var14 = var6; var14 <= var9; ++var14) { + for(int var15 = var5; var15 <= var8; ++var15) { + for(int var16 = var7; var16 <= var10; ++var16) { + if(var3.nextFloat() <= var4 && (!var13 || this.getBlockIdAtCurrentPosition(var1, var15, var14, var16, var2) != 0)) { + if(var14 != var6 && var14 != var9 && var15 != var5 && var15 != var8 && var16 != var7 && var16 != var10) { + this.placeBlockAtCurrentPosition(var1, var12, 0, var15, var14, var16, var2); + } else { + this.placeBlockAtCurrentPosition(var1, var11, 0, var15, var14, var16, var2); + } + } + } + } + } + + } + + protected void randomlyPlaceBlock(World var1, StructureBoundingBox var2, Random var3, float var4, int var5, int var6, int var7, int var8, int var9) { + if(var3.nextFloat() < var4) { + this.placeBlockAtCurrentPosition(var1, var8, var9, var5, var6, var7, var2); + } + + } + + protected void randomlyRareFillWithBlocks(World var1, StructureBoundingBox var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, boolean var10) { + float var11 = (float)(var6 - var3 + 1); + float var12 = (float)(var7 - var4 + 1); + float var13 = (float)(var8 - var5 + 1); + float var14 = (float)var3 + var11 / 2.0F; + float var15 = (float)var5 + var13 / 2.0F; + + for(int var16 = var4; var16 <= var7; ++var16) { + float var17 = (float)(var16 - var4) / var12; + + for(int var18 = var3; var18 <= var6; ++var18) { + float var19 = ((float)var18 - var14) / (var11 * 0.5F); + + for(int var20 = var5; var20 <= var8; ++var20) { + float var21 = ((float)var20 - var15) / (var13 * 0.5F); + if(!var10 || this.getBlockIdAtCurrentPosition(var1, var18, var16, var20, var2) != 0) { + float var22 = var19 * var19 + var17 * var17 + var21 * var21; + if(var22 <= 1.05F) { + this.placeBlockAtCurrentPosition(var1, var9, 0, var18, var16, var20, var2); + } + } + } + } + } + + } + + protected void clearCurrentPositionBlocksUpwards(World var1, int var2, int var3, int var4, StructureBoundingBox var5) { + int var6 = this.getXWithOffset(var2, var4); + int var7 = this.getYWithOffset(var3); + int var8 = this.getZWithOffset(var2, var4); + if(var5.isVecInside(var6, var7, var8)) { + while(!var1.isAirBlock(var6, var7, var8) && var7 < 255) { + var1.setBlock(var6, var7, var8, 0, 0, 2); + ++var7; + } + + } + } + + protected void fillCurrentPositionBlocksDownwards(World var1, int var2, int var3, int var4, int var5, int var6, StructureBoundingBox var7) { + int var8 = this.getXWithOffset(var4, var6); + int var9 = this.getYWithOffset(var5); + int var10 = this.getZWithOffset(var4, var6); + if(var7.isVecInside(var8, var9, var10)) { + while((var1.isAirBlock(var8, var9, var10) || var1.getBlockMaterial(var8, var9, var10).isLiquid()) && var9 > 1) { + var1.setBlock(var8, var9, var10, var2, var3, 2); + --var9; + } + + } + } + + protected boolean generateStructureChestContents(World var1, StructureBoundingBox var2, Random var3, int var4, int var5, int var6, WeightedRandomChestContent[] var7, int var8) { + int var9 = this.getXWithOffset(var4, var6); + int var10 = this.getYWithOffset(var5); + int var11 = this.getZWithOffset(var4, var6); + if(var2.isVecInside(var9, var10, var11) && var1.getBlockId(var9, var10, var11) != Block.chest.blockID) { + var1.setBlock(var9, var10, var11, Block.chest.blockID, 0, 2); + TileEntityChest var12 = (TileEntityChest)var1.getBlockTileEntity(var9, var10, var11); + if(var12 != null) { + WeightedRandomChestContent.generateChestContents(var3, var7, var12, var8); + } + + return true; + } else { + return false; + } + } + + protected boolean generateStructureDispenserContents(World var1, StructureBoundingBox var2, Random var3, int var4, int var5, int var6, int var7, WeightedRandomChestContent[] var8, int var9) { + int var10 = this.getXWithOffset(var4, var6); + int var11 = this.getYWithOffset(var5); + int var12 = this.getZWithOffset(var4, var6); + if(var2.isVecInside(var10, var11, var12) && var1.getBlockId(var10, var11, var12) != Block.dispenser.blockID) { + var1.setBlock(var10, var11, var12, Block.dispenser.blockID, this.getMetadataWithOffset(Block.dispenser.blockID, var7), 2); + TileEntityDispenser var13 = (TileEntityDispenser)var1.getBlockTileEntity(var10, var11, var12); + if(var13 != null) { + WeightedRandomChestContent.generateDispenserContents(var3, var8, var13, var9); + } + + return true; + } else { + return false; + } + } + + protected void placeDoorAtCurrentPosition(World var1, StructureBoundingBox var2, Random var3, int var4, int var5, int var6, int var7) { + int var8 = this.getXWithOffset(var4, var6); + int var9 = this.getYWithOffset(var5); + int var10 = this.getZWithOffset(var4, var6); + if(var2.isVecInside(var8, var9, var10)) { + ItemDoor.placeDoorBlock(var1, var8, var9, var10, var7, Block.doorWood); + } + + } +} diff --git a/src/net/minecraft/src/StructureMineshaftPieces.java b/src/net/minecraft/src/StructureMineshaftPieces.java new file mode 100644 index 0000000..7378c02 --- /dev/null +++ b/src/net/minecraft/src/StructureMineshaftPieces.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class StructureMineshaftPieces { + private static final WeightedRandomChestContent[] mineshaftChestContents = new WeightedRandomChestContent[]{new WeightedRandomChestContent(Item.ingotIron.itemID, 0, 1, 5, 10), new WeightedRandomChestContent(Item.ingotGold.itemID, 0, 1, 3, 5), new WeightedRandomChestContent(Item.redstone.itemID, 0, 4, 9, 5), new WeightedRandomChestContent(Item.dyePowder.itemID, 4, 4, 9, 5), new WeightedRandomChestContent(Item.diamond.itemID, 0, 1, 2, 3), new WeightedRandomChestContent(Item.coal.itemID, 0, 3, 8, 10), new WeightedRandomChestContent(Item.bread.itemID, 0, 1, 3, 15), new WeightedRandomChestContent(Item.pickaxeIron.itemID, 0, 1, 1, 1), new WeightedRandomChestContent(Block.rail.blockID, 0, 4, 8, 1), new WeightedRandomChestContent(Item.melonSeeds.itemID, 0, 2, 4, 10), new WeightedRandomChestContent(Item.pumpkinSeeds.itemID, 0, 2, 4, 10)}; + + private static StructureComponent getRandomComponent(List var0, Random var1, int var2, int var3, int var4, int var5, int var6) { + int var7 = var1.nextInt(100); + StructureBoundingBox var8; + if(var7 >= 80) { + var8 = ComponentMineshaftCross.findValidPlacement(var0, var1, var2, var3, var4, var5); + if(var8 != null) { + return new ComponentMineshaftCross(var6, var1, var8, var5); + } + } else if(var7 >= 70) { + var8 = ComponentMineshaftStairs.findValidPlacement(var0, var1, var2, var3, var4, var5); + if(var8 != null) { + return new ComponentMineshaftStairs(var6, var1, var8, var5); + } + } else { + var8 = ComponentMineshaftCorridor.findValidPlacement(var0, var1, var2, var3, var4, var5); + if(var8 != null) { + return new ComponentMineshaftCorridor(var6, var1, var8, var5); + } + } + + return null; + } + + private static StructureComponent getNextMineShaftComponent(StructureComponent var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + if(var7 > 8) { + return null; + } else if(Math.abs(var3 - var0.getBoundingBox().minX) <= 80 && Math.abs(var5 - var0.getBoundingBox().minZ) <= 80) { + StructureComponent var8 = getRandomComponent(var1, var2, var3, var4, var5, var6, var7 + 1); + if(var8 != null) { + var1.add(var8); + var8.buildComponent(var0, var1, var2); + } + + return var8; + } else { + return null; + } + } + + static StructureComponent getNextComponent(StructureComponent var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + return getNextMineShaftComponent(var0, var1, var2, var3, var4, var5, var6, var7); + } + + static WeightedRandomChestContent[] func_78816_a() { + return mineshaftChestContents; + } +} diff --git a/src/net/minecraft/src/StructureMineshaftStart.java b/src/net/minecraft/src/StructureMineshaftStart.java new file mode 100644 index 0000000..e028089 --- /dev/null +++ b/src/net/minecraft/src/StructureMineshaftStart.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +import java.util.Random; + +public class StructureMineshaftStart extends StructureStart { + public StructureMineshaftStart(World var1, Random var2, int var3, int var4) { + ComponentMineshaftRoom var5 = new ComponentMineshaftRoom(0, var2, (var3 << 4) + 2, (var4 << 4) + 2); + this.components.add(var5); + var5.buildComponent(var5, this.components, var2); + this.updateBoundingBox(); + this.markAvailableHeight(var1, var2, 10); + } +} diff --git a/src/net/minecraft/src/StructureNetherBridgePieceWeight.java b/src/net/minecraft/src/StructureNetherBridgePieceWeight.java new file mode 100644 index 0000000..688fb02 --- /dev/null +++ b/src/net/minecraft/src/StructureNetherBridgePieceWeight.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +class StructureNetherBridgePieceWeight { + public Class weightClass; + public final int field_78826_b; + public int field_78827_c; + public int field_78824_d; + public boolean field_78825_e; + + public StructureNetherBridgePieceWeight(Class var1, int var2, int var3, boolean var4) { + this.weightClass = var1; + this.field_78826_b = var2; + this.field_78824_d = var3; + this.field_78825_e = var4; + } + + public StructureNetherBridgePieceWeight(Class var1, int var2, int var3) { + this(var1, var2, var3, false); + } + + public boolean func_78822_a(int var1) { + return this.field_78824_d == 0 || this.field_78827_c < this.field_78824_d; + } + + public boolean func_78823_a() { + return this.field_78824_d == 0 || this.field_78827_c < this.field_78824_d; + } +} diff --git a/src/net/minecraft/src/StructureNetherBridgePieces.java b/src/net/minecraft/src/StructureNetherBridgePieces.java new file mode 100644 index 0000000..7c4f018 --- /dev/null +++ b/src/net/minecraft/src/StructureNetherBridgePieces.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class StructureNetherBridgePieces { + private static final StructureNetherBridgePieceWeight[] primaryComponents = new StructureNetherBridgePieceWeight[]{new StructureNetherBridgePieceWeight(ComponentNetherBridgeStraight.class, 30, 0, true), new StructureNetherBridgePieceWeight(ComponentNetherBridgeCrossing3.class, 10, 4), new StructureNetherBridgePieceWeight(ComponentNetherBridgeCrossing.class, 10, 4), new StructureNetherBridgePieceWeight(ComponentNetherBridgeStairs.class, 10, 3), new StructureNetherBridgePieceWeight(ComponentNetherBridgeThrone.class, 5, 2), new StructureNetherBridgePieceWeight(ComponentNetherBridgeEntrance.class, 5, 1)}; + private static final StructureNetherBridgePieceWeight[] secondaryComponents = new StructureNetherBridgePieceWeight[]{new StructureNetherBridgePieceWeight(ComponentNetherBridgeCorridor5.class, 25, 0, true), new StructureNetherBridgePieceWeight(ComponentNetherBridgeCrossing2.class, 15, 5), new StructureNetherBridgePieceWeight(ComponentNetherBridgeCorridor2.class, 5, 10), new StructureNetherBridgePieceWeight(ComponentNetherBridgeCorridor.class, 5, 10), new StructureNetherBridgePieceWeight(ComponentNetherBridgeCorridor3.class, 10, 3, true), new StructureNetherBridgePieceWeight(ComponentNetherBridgeCorridor4.class, 7, 2), new StructureNetherBridgePieceWeight(ComponentNetherBridgeNetherStalkRoom.class, 5, 2)}; + + private static ComponentNetherBridgePiece createNextComponentRandom(StructureNetherBridgePieceWeight var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + Class var8 = var0.weightClass; + Object var9 = null; + if(var8 == ComponentNetherBridgeStraight.class) { + var9 = ComponentNetherBridgeStraight.createValidComponent(var1, var2, var3, var4, var5, var6, var7); + } else if(var8 == ComponentNetherBridgeCrossing3.class) { + var9 = ComponentNetherBridgeCrossing3.createValidComponent(var1, var2, var3, var4, var5, var6, var7); + } else if(var8 == ComponentNetherBridgeCrossing.class) { + var9 = ComponentNetherBridgeCrossing.createValidComponent(var1, var2, var3, var4, var5, var6, var7); + } else if(var8 == ComponentNetherBridgeStairs.class) { + var9 = ComponentNetherBridgeStairs.createValidComponent(var1, var2, var3, var4, var5, var6, var7); + } else if(var8 == ComponentNetherBridgeThrone.class) { + var9 = ComponentNetherBridgeThrone.createValidComponent(var1, var2, var3, var4, var5, var6, var7); + } else if(var8 == ComponentNetherBridgeEntrance.class) { + var9 = ComponentNetherBridgeEntrance.createValidComponent(var1, var2, var3, var4, var5, var6, var7); + } else if(var8 == ComponentNetherBridgeCorridor5.class) { + var9 = ComponentNetherBridgeCorridor5.createValidComponent(var1, var2, var3, var4, var5, var6, var7); + } else if(var8 == ComponentNetherBridgeCorridor2.class) { + var9 = ComponentNetherBridgeCorridor2.createValidComponent(var1, var2, var3, var4, var5, var6, var7); + } else if(var8 == ComponentNetherBridgeCorridor.class) { + var9 = ComponentNetherBridgeCorridor.createValidComponent(var1, var2, var3, var4, var5, var6, var7); + } else if(var8 == ComponentNetherBridgeCorridor3.class) { + var9 = ComponentNetherBridgeCorridor3.createValidComponent(var1, var2, var3, var4, var5, var6, var7); + } else if(var8 == ComponentNetherBridgeCorridor4.class) { + var9 = ComponentNetherBridgeCorridor4.createValidComponent(var1, var2, var3, var4, var5, var6, var7); + } else if(var8 == ComponentNetherBridgeCrossing2.class) { + var9 = ComponentNetherBridgeCrossing2.createValidComponent(var1, var2, var3, var4, var5, var6, var7); + } else if(var8 == ComponentNetherBridgeNetherStalkRoom.class) { + var9 = ComponentNetherBridgeNetherStalkRoom.createValidComponent(var1, var2, var3, var4, var5, var6, var7); + } + + return (ComponentNetherBridgePiece)var9; + } + + static ComponentNetherBridgePiece createNextComponent(StructureNetherBridgePieceWeight var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + return createNextComponentRandom(var0, var1, var2, var3, var4, var5, var6, var7); + } + + static StructureNetherBridgePieceWeight[] getPrimaryComponents() { + return primaryComponents; + } + + static StructureNetherBridgePieceWeight[] getSecondaryComponents() { + return secondaryComponents; + } +} diff --git a/src/net/minecraft/src/StructureNetherBridgeStart.java b/src/net/minecraft/src/StructureNetherBridgeStart.java new file mode 100644 index 0000000..5facd08 --- /dev/null +++ b/src/net/minecraft/src/StructureNetherBridgeStart.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Random; + +class StructureNetherBridgeStart extends StructureStart { + public StructureNetherBridgeStart(World var1, Random var2, int var3, int var4) { + ComponentNetherBridgeStartPiece var5 = new ComponentNetherBridgeStartPiece(var2, (var3 << 4) + 2, (var4 << 4) + 2); + this.components.add(var5); + var5.buildComponent(var5, this.components, var2); + ArrayList var6 = var5.field_74967_d; + + while(!var6.isEmpty()) { + int var7 = var2.nextInt(var6.size()); + StructureComponent var8 = (StructureComponent)var6.remove(var7); + var8.buildComponent(var5, this.components, var2); + } + + this.updateBoundingBox(); + this.setRandomHeight(var1, var2, 48, 70); + } +} diff --git a/src/net/minecraft/src/StructurePieceBlockSelector.java b/src/net/minecraft/src/StructurePieceBlockSelector.java new file mode 100644 index 0000000..205d314 --- /dev/null +++ b/src/net/minecraft/src/StructurePieceBlockSelector.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import java.util.Random; + +public abstract class StructurePieceBlockSelector { + protected int selectedBlockId; + protected int selectedBlockMetaData; + + public abstract void selectBlocks(Random var1, int var2, int var3, int var4, boolean var5); + + public int getSelectedBlockId() { + return this.selectedBlockId; + } + + public int getSelectedBlockMetaData() { + return this.selectedBlockMetaData; + } +} diff --git a/src/net/minecraft/src/StructureScatteredFeatureStart.java b/src/net/minecraft/src/StructureScatteredFeatureStart.java new file mode 100644 index 0000000..9cfacfb --- /dev/null +++ b/src/net/minecraft/src/StructureScatteredFeatureStart.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +import java.util.Random; + +public class StructureScatteredFeatureStart extends StructureStart { + public StructureScatteredFeatureStart(World var1, Random var2, int var3, int var4) { + BiomeGenBase var5 = var1.getBiomeGenForCoords(var3 * 16 + 8, var4 * 16 + 8); + if(var5 != BiomeGenBase.jungle && var5 != BiomeGenBase.jungleHills) { + if(var5 == BiomeGenBase.swampland) { + ComponentScatteredFeatureSwampHut var7 = new ComponentScatteredFeatureSwampHut(var2, var3 * 16, var4 * 16); + this.components.add(var7); + } else { + ComponentScatteredFeatureDesertPyramid var8 = new ComponentScatteredFeatureDesertPyramid(var2, var3 * 16, var4 * 16); + this.components.add(var8); + } + } else { + ComponentScatteredFeatureJunglePyramid var6 = new ComponentScatteredFeatureJunglePyramid(var2, var3 * 16, var4 * 16); + this.components.add(var6); + } + + this.updateBoundingBox(); + } +} diff --git a/src/net/minecraft/src/StructureScatteredFeatureStones.java b/src/net/minecraft/src/StructureScatteredFeatureStones.java new file mode 100644 index 0000000..cbcb649 --- /dev/null +++ b/src/net/minecraft/src/StructureScatteredFeatureStones.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.Random; + +class StructureScatteredFeatureStones extends StructurePieceBlockSelector { + private StructureScatteredFeatureStones() { + } + + public void selectBlocks(Random var1, int var2, int var3, int var4, boolean var5) { + if(var1.nextFloat() < 0.4F) { + this.selectedBlockId = Block.cobblestone.blockID; + } else { + this.selectedBlockId = Block.cobblestoneMossy.blockID; + } + + } + + StructureScatteredFeatureStones(ComponentScatteredFeaturePieces2 var1) { + this(); + } +} diff --git a/src/net/minecraft/src/StructureStart.java b/src/net/minecraft/src/StructureStart.java new file mode 100644 index 0000000..3a48376 --- /dev/null +++ b/src/net/minecraft/src/StructureStart.java @@ -0,0 +1,84 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.LinkedList; +import java.util.Random; + +public abstract class StructureStart { + protected LinkedList components = new LinkedList(); + protected StructureBoundingBox boundingBox; + + public StructureBoundingBox getBoundingBox() { + return this.boundingBox; + } + + public LinkedList getComponents() { + return this.components; + } + + public void generateStructure(World var1, Random var2, StructureBoundingBox var3) { + Iterator var4 = this.components.iterator(); + + while(var4.hasNext()) { + StructureComponent var5 = (StructureComponent)var4.next(); + if(var5.getBoundingBox().intersectsWith(var3) && !var5.addComponentParts(var1, var2, var3)) { + var4.remove(); + } + } + + } + + protected void updateBoundingBox() { + this.boundingBox = StructureBoundingBox.getNewBoundingBox(); + Iterator var1 = this.components.iterator(); + + while(var1.hasNext()) { + StructureComponent var2 = (StructureComponent)var1.next(); + this.boundingBox.expandTo(var2.getBoundingBox()); + } + + } + + protected void markAvailableHeight(World var1, Random var2, int var3) { + int var4 = 63 - var3; + int var5 = this.boundingBox.getYSize() + 1; + if(var5 < var4) { + var5 += var2.nextInt(var4 - var5); + } + + int var6 = var5 - this.boundingBox.maxY; + this.boundingBox.offset(0, var6, 0); + Iterator var7 = this.components.iterator(); + + while(var7.hasNext()) { + StructureComponent var8 = (StructureComponent)var7.next(); + var8.getBoundingBox().offset(0, var6, 0); + } + + } + + protected void setRandomHeight(World var1, Random var2, int var3, int var4) { + int var5 = var4 - var3 + 1 - this.boundingBox.getYSize(); + boolean var6 = true; + int var10; + if(var5 > 1) { + var10 = var3 + var2.nextInt(var5); + } else { + var10 = var3; + } + + int var7 = var10 - this.boundingBox.minY; + this.boundingBox.offset(0, var7, 0); + Iterator var8 = this.components.iterator(); + + while(var8.hasNext()) { + StructureComponent var9 = (StructureComponent)var8.next(); + var9.getBoundingBox().offset(0, var7, 0); + } + + } + + public boolean isSizeableStructure() { + return true; + } +} diff --git a/src/net/minecraft/src/StructureStrongholdPieceWeight.java b/src/net/minecraft/src/StructureStrongholdPieceWeight.java new file mode 100644 index 0000000..6dfc7a5 --- /dev/null +++ b/src/net/minecraft/src/StructureStrongholdPieceWeight.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +class StructureStrongholdPieceWeight { + public Class pieceClass; + public final int pieceWeight; + public int instancesSpawned; + public int instancesLimit; + + public StructureStrongholdPieceWeight(Class var1, int var2, int var3) { + this.pieceClass = var1; + this.pieceWeight = var2; + this.instancesLimit = var3; + } + + public boolean canSpawnMoreStructuresOfType(int var1) { + return this.instancesLimit == 0 || this.instancesSpawned < this.instancesLimit; + } + + public boolean canSpawnMoreStructures() { + return this.instancesLimit == 0 || this.instancesSpawned < this.instancesLimit; + } +} diff --git a/src/net/minecraft/src/StructureStrongholdPieceWeight2.java b/src/net/minecraft/src/StructureStrongholdPieceWeight2.java new file mode 100644 index 0000000..2438765 --- /dev/null +++ b/src/net/minecraft/src/StructureStrongholdPieceWeight2.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class StructureStrongholdPieceWeight2 extends StructureStrongholdPieceWeight { + StructureStrongholdPieceWeight2(Class var1, int var2, int var3) { + super(var1, var2, var3); + } + + public boolean canSpawnMoreStructuresOfType(int var1) { + return super.canSpawnMoreStructuresOfType(var1) && var1 > 4; + } +} diff --git a/src/net/minecraft/src/StructureStrongholdPieceWeight3.java b/src/net/minecraft/src/StructureStrongholdPieceWeight3.java new file mode 100644 index 0000000..5dc5a06 --- /dev/null +++ b/src/net/minecraft/src/StructureStrongholdPieceWeight3.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class StructureStrongholdPieceWeight3 extends StructureStrongholdPieceWeight { + StructureStrongholdPieceWeight3(Class var1, int var2, int var3) { + super(var1, var2, var3); + } + + public boolean canSpawnMoreStructuresOfType(int var1) { + return super.canSpawnMoreStructuresOfType(var1) && var1 > 5; + } +} diff --git a/src/net/minecraft/src/StructureStrongholdPieces.java b/src/net/minecraft/src/StructureStrongholdPieces.java new file mode 100644 index 0000000..1bd31ad --- /dev/null +++ b/src/net/minecraft/src/StructureStrongholdPieces.java @@ -0,0 +1,151 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +public class StructureStrongholdPieces { + private static final StructureStrongholdPieceWeight[] pieceWeightArray = new StructureStrongholdPieceWeight[]{new StructureStrongholdPieceWeight(ComponentStrongholdStraight.class, 40, 0), new StructureStrongholdPieceWeight(ComponentStrongholdPrison.class, 5, 5), new StructureStrongholdPieceWeight(ComponentStrongholdLeftTurn.class, 20, 0), new StructureStrongholdPieceWeight(ComponentStrongholdRightTurn.class, 20, 0), new StructureStrongholdPieceWeight(ComponentStrongholdRoomCrossing.class, 10, 6), new StructureStrongholdPieceWeight(ComponentStrongholdStairsStraight.class, 5, 5), new StructureStrongholdPieceWeight(ComponentStrongholdStairs.class, 5, 5), new StructureStrongholdPieceWeight(ComponentStrongholdCrossing.class, 5, 4), new StructureStrongholdPieceWeight(ComponentStrongholdChestCorridor.class, 5, 4), new StructureStrongholdPieceWeight2(ComponentStrongholdLibrary.class, 10, 2), new StructureStrongholdPieceWeight3(ComponentStrongholdPortalRoom.class, 20, 1)}; + private static List structurePieceList; + private static Class strongComponentType; + static int totalWeight = 0; + private static final StructureStrongholdStones strongholdStones = new StructureStrongholdStones((StructureStrongholdPieceWeight2)null); + + public static void prepareStructurePieces() { + structurePieceList = new ArrayList(); + StructureStrongholdPieceWeight[] var0 = pieceWeightArray; + int var1 = var0.length; + + for(int var2 = 0; var2 < var1; ++var2) { + StructureStrongholdPieceWeight var3 = var0[var2]; + var3.instancesSpawned = 0; + structurePieceList.add(var3); + } + + strongComponentType = null; + } + + private static boolean canAddStructurePieces() { + boolean var0 = false; + totalWeight = 0; + + StructureStrongholdPieceWeight var2; + for(Iterator var1 = structurePieceList.iterator(); var1.hasNext(); totalWeight += var2.pieceWeight) { + var2 = (StructureStrongholdPieceWeight)var1.next(); + if(var2.instancesLimit > 0 && var2.instancesSpawned < var2.instancesLimit) { + var0 = true; + } + } + + return var0; + } + + private static ComponentStronghold getStrongholdComponentFromWeightedPiece(Class var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + Object var8 = null; + if(var0 == ComponentStrongholdStraight.class) { + var8 = ComponentStrongholdStraight.findValidPlacement(var1, var2, var3, var4, var5, var6, var7); + } else if(var0 == ComponentStrongholdPrison.class) { + var8 = ComponentStrongholdPrison.findValidPlacement(var1, var2, var3, var4, var5, var6, var7); + } else if(var0 == ComponentStrongholdLeftTurn.class) { + var8 = ComponentStrongholdLeftTurn.findValidPlacement(var1, var2, var3, var4, var5, var6, var7); + } else if(var0 == ComponentStrongholdRightTurn.class) { + var8 = ComponentStrongholdRightTurn.findValidPlacement(var1, var2, var3, var4, var5, var6, var7); + } else if(var0 == ComponentStrongholdRoomCrossing.class) { + var8 = ComponentStrongholdRoomCrossing.findValidPlacement(var1, var2, var3, var4, var5, var6, var7); + } else if(var0 == ComponentStrongholdStairsStraight.class) { + var8 = ComponentStrongholdStairsStraight.findValidPlacement(var1, var2, var3, var4, var5, var6, var7); + } else if(var0 == ComponentStrongholdStairs.class) { + var8 = ComponentStrongholdStairs.getStrongholdStairsComponent(var1, var2, var3, var4, var5, var6, var7); + } else if(var0 == ComponentStrongholdCrossing.class) { + var8 = ComponentStrongholdCrossing.findValidPlacement(var1, var2, var3, var4, var5, var6, var7); + } else if(var0 == ComponentStrongholdChestCorridor.class) { + var8 = ComponentStrongholdChestCorridor.findValidPlacement(var1, var2, var3, var4, var5, var6, var7); + } else if(var0 == ComponentStrongholdLibrary.class) { + var8 = ComponentStrongholdLibrary.findValidPlacement(var1, var2, var3, var4, var5, var6, var7); + } else if(var0 == ComponentStrongholdPortalRoom.class) { + var8 = ComponentStrongholdPortalRoom.findValidPlacement(var1, var2, var3, var4, var5, var6, var7); + } + + return (ComponentStronghold)var8; + } + + private static ComponentStronghold getNextComponent(ComponentStrongholdStairs2 var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + if(!canAddStructurePieces()) { + return null; + } else { + if(strongComponentType != null) { + ComponentStronghold var8 = getStrongholdComponentFromWeightedPiece(strongComponentType, var1, var2, var3, var4, var5, var6, var7); + strongComponentType = null; + if(var8 != null) { + return var8; + } + } + + int var13 = 0; + + while(var13 < 5) { + ++var13; + int var9 = var2.nextInt(totalWeight); + Iterator var10 = structurePieceList.iterator(); + + while(var10.hasNext()) { + StructureStrongholdPieceWeight var11 = (StructureStrongholdPieceWeight)var10.next(); + var9 -= var11.pieceWeight; + if(var9 < 0) { + if(!var11.canSpawnMoreStructuresOfType(var7) || var11 == var0.strongholdPieceWeight) { + break; + } + + ComponentStronghold var12 = getStrongholdComponentFromWeightedPiece(var11.pieceClass, var1, var2, var3, var4, var5, var6, var7); + if(var12 != null) { + ++var11.instancesSpawned; + var0.strongholdPieceWeight = var11; + if(!var11.canSpawnMoreStructures()) { + structurePieceList.remove(var11); + } + + return var12; + } + } + } + } + + StructureBoundingBox var14 = ComponentStrongholdCorridor.func_74992_a(var1, var2, var3, var4, var5, var6); + if(var14 != null && var14.minY > 1) { + return new ComponentStrongholdCorridor(var7, var2, var14, var6); + } else { + return null; + } + } + } + + private static StructureComponent getNextValidComponent(ComponentStrongholdStairs2 var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + if(var7 > 50) { + return null; + } else if(Math.abs(var3 - var0.getBoundingBox().minX) <= 112 && Math.abs(var5 - var0.getBoundingBox().minZ) <= 112) { + ComponentStronghold var8 = getNextComponent(var0, var1, var2, var3, var4, var5, var6, var7 + 1); + if(var8 != null) { + var1.add(var8); + var0.field_75026_c.add(var8); + } + + return var8; + } else { + return null; + } + } + + static StructureComponent getNextValidComponentAccess(ComponentStrongholdStairs2 var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + return getNextValidComponent(var0, var1, var2, var3, var4, var5, var6, var7); + } + + static Class setComponentType(Class var0) { + strongComponentType = var0; + return var0; + } + + static StructureStrongholdStones getStrongholdStones() { + return strongholdStones; + } +} diff --git a/src/net/minecraft/src/StructureStrongholdStart.java b/src/net/minecraft/src/StructureStrongholdStart.java new file mode 100644 index 0000000..1bdf690 --- /dev/null +++ b/src/net/minecraft/src/StructureStrongholdStart.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Random; + +class StructureStrongholdStart extends StructureStart { + public StructureStrongholdStart(World var1, Random var2, int var3, int var4) { + StructureStrongholdPieces.prepareStructurePieces(); + ComponentStrongholdStairs2 var5 = new ComponentStrongholdStairs2(0, var2, (var3 << 4) + 2, (var4 << 4) + 2); + this.components.add(var5); + var5.buildComponent(var5, this.components, var2); + ArrayList var6 = var5.field_75026_c; + + while(!var6.isEmpty()) { + int var7 = var2.nextInt(var6.size()); + StructureComponent var8 = (StructureComponent)var6.remove(var7); + var8.buildComponent(var5, this.components, var2); + } + + this.updateBoundingBox(); + this.markAvailableHeight(var1, var2, 10); + } +} diff --git a/src/net/minecraft/src/StructureStrongholdStones.java b/src/net/minecraft/src/StructureStrongholdStones.java new file mode 100644 index 0000000..076a0c9 --- /dev/null +++ b/src/net/minecraft/src/StructureStrongholdStones.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +import java.util.Random; + +class StructureStrongholdStones extends StructurePieceBlockSelector { + private StructureStrongholdStones() { + } + + public void selectBlocks(Random var1, int var2, int var3, int var4, boolean var5) { + if(var5) { + this.selectedBlockId = Block.stoneBrick.blockID; + float var6 = var1.nextFloat(); + if(var6 < 0.2F) { + this.selectedBlockMetaData = 2; + } else if(var6 < 0.5F) { + this.selectedBlockMetaData = 1; + } else if(var6 < 0.55F) { + this.selectedBlockId = Block.silverfish.blockID; + this.selectedBlockMetaData = 2; + } else { + this.selectedBlockMetaData = 0; + } + } else { + this.selectedBlockId = 0; + this.selectedBlockMetaData = 0; + } + + } + + StructureStrongholdStones(StructureStrongholdPieceWeight2 var1) { + this(); + } +} diff --git a/src/net/minecraft/src/StructureVillagePieceWeight.java b/src/net/minecraft/src/StructureVillagePieceWeight.java new file mode 100644 index 0000000..fb8b57a --- /dev/null +++ b/src/net/minecraft/src/StructureVillagePieceWeight.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +public class StructureVillagePieceWeight { + public Class villagePieceClass; + public final int villagePieceWeight; + public int villagePiecesSpawned; + public int villagePiecesLimit; + + public StructureVillagePieceWeight(Class var1, int var2, int var3) { + this.villagePieceClass = var1; + this.villagePieceWeight = var2; + this.villagePiecesLimit = var3; + } + + public boolean canSpawnMoreVillagePiecesOfType(int var1) { + return this.villagePiecesLimit == 0 || this.villagePiecesSpawned < this.villagePiecesLimit; + } + + public boolean canSpawnMoreVillagePieces() { + return this.villagePiecesLimit == 0 || this.villagePiecesSpawned < this.villagePiecesLimit; + } +} diff --git a/src/net/minecraft/src/StructureVillagePieces.java b/src/net/minecraft/src/StructureVillagePieces.java new file mode 100644 index 0000000..c1e69c5 --- /dev/null +++ b/src/net/minecraft/src/StructureVillagePieces.java @@ -0,0 +1,171 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +public class StructureVillagePieces { + public static ArrayList getStructureVillageWeightedPieceList(Random var0, int var1) { + ArrayList var2 = new ArrayList(); + var2.add(new StructureVillagePieceWeight(ComponentVillageHouse4_Garden.class, 4, MathHelper.getRandomIntegerInRange(var0, 2 + var1, 4 + var1 * 2))); + var2.add(new StructureVillagePieceWeight(ComponentVillageChurch.class, 20, MathHelper.getRandomIntegerInRange(var0, 0 + var1, 1 + var1))); + var2.add(new StructureVillagePieceWeight(ComponentVillageHouse1.class, 20, MathHelper.getRandomIntegerInRange(var0, 0 + var1, 2 + var1))); + var2.add(new StructureVillagePieceWeight(ComponentVillageWoodHut.class, 3, MathHelper.getRandomIntegerInRange(var0, 2 + var1, 5 + var1 * 3))); + var2.add(new StructureVillagePieceWeight(ComponentVillageHall.class, 15, MathHelper.getRandomIntegerInRange(var0, 0 + var1, 2 + var1))); + var2.add(new StructureVillagePieceWeight(ComponentVillageField.class, 3, MathHelper.getRandomIntegerInRange(var0, 1 + var1, 4 + var1))); + var2.add(new StructureVillagePieceWeight(ComponentVillageField2.class, 3, MathHelper.getRandomIntegerInRange(var0, 2 + var1, 4 + var1 * 2))); + var2.add(new StructureVillagePieceWeight(ComponentVillageHouse2.class, 15, MathHelper.getRandomIntegerInRange(var0, 0, 1 + var1))); + var2.add(new StructureVillagePieceWeight(ComponentVillageHouse3.class, 8, MathHelper.getRandomIntegerInRange(var0, 0 + var1, 3 + var1 * 2))); + Iterator var3 = var2.iterator(); + + while(var3.hasNext()) { + if(((StructureVillagePieceWeight)var3.next()).villagePiecesLimit == 0) { + var3.remove(); + } + } + + return var2; + } + + private static int func_75079_a(List var0) { + boolean var1 = false; + int var2 = 0; + + StructureVillagePieceWeight var4; + for(Iterator var3 = var0.iterator(); var3.hasNext(); var2 += var4.villagePieceWeight) { + var4 = (StructureVillagePieceWeight)var3.next(); + if(var4.villagePiecesLimit > 0 && var4.villagePiecesSpawned < var4.villagePiecesLimit) { + var1 = true; + } + } + + return var1 ? var2 : -1; + } + + private static ComponentVillage func_75083_a(ComponentVillageStartPiece var0, StructureVillagePieceWeight var1, List var2, Random var3, int var4, int var5, int var6, int var7, int var8) { + Class var9 = var1.villagePieceClass; + Object var10 = null; + if(var9 == ComponentVillageHouse4_Garden.class) { + var10 = ComponentVillageHouse4_Garden.func_74912_a(var0, var2, var3, var4, var5, var6, var7, var8); + } else if(var9 == ComponentVillageChurch.class) { + var10 = ComponentVillageChurch.func_74919_a(var0, var2, var3, var4, var5, var6, var7, var8); + } else if(var9 == ComponentVillageHouse1.class) { + var10 = ComponentVillageHouse1.func_74898_a(var0, var2, var3, var4, var5, var6, var7, var8); + } else if(var9 == ComponentVillageWoodHut.class) { + var10 = ComponentVillageWoodHut.func_74908_a(var0, var2, var3, var4, var5, var6, var7, var8); + } else if(var9 == ComponentVillageHall.class) { + var10 = ComponentVillageHall.func_74906_a(var0, var2, var3, var4, var5, var6, var7, var8); + } else if(var9 == ComponentVillageField.class) { + var10 = ComponentVillageField.func_74900_a(var0, var2, var3, var4, var5, var6, var7, var8); + } else if(var9 == ComponentVillageField2.class) { + var10 = ComponentVillageField2.func_74902_a(var0, var2, var3, var4, var5, var6, var7, var8); + } else if(var9 == ComponentVillageHouse2.class) { + var10 = ComponentVillageHouse2.func_74915_a(var0, var2, var3, var4, var5, var6, var7, var8); + } else if(var9 == ComponentVillageHouse3.class) { + var10 = ComponentVillageHouse3.func_74921_a(var0, var2, var3, var4, var5, var6, var7, var8); + } + + return (ComponentVillage)var10; + } + + private static ComponentVillage getNextVillageComponent(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + int var8 = func_75079_a(var0.structureVillageWeightedPieceList); + if(var8 <= 0) { + return null; + } else { + int var9 = 0; + + while(var9 < 5) { + ++var9; + int var10 = var2.nextInt(var8); + Iterator var11 = var0.structureVillageWeightedPieceList.iterator(); + + while(var11.hasNext()) { + StructureVillagePieceWeight var12 = (StructureVillagePieceWeight)var11.next(); + var10 -= var12.villagePieceWeight; + if(var10 < 0) { + if(!var12.canSpawnMoreVillagePiecesOfType(var7) || var12 == var0.structVillagePieceWeight && var0.structureVillageWeightedPieceList.size() > 1) { + break; + } + + ComponentVillage var13 = func_75083_a(var0, var12, var1, var2, var3, var4, var5, var6, var7); + if(var13 != null) { + ++var12.villagePiecesSpawned; + var0.structVillagePieceWeight = var12; + if(!var12.canSpawnMoreVillagePieces()) { + var0.structureVillageWeightedPieceList.remove(var12); + } + + return var13; + } + } + } + } + + StructureBoundingBox var14 = ComponentVillageTorch.func_74904_a(var0, var1, var2, var3, var4, var5, var6); + if(var14 != null) { + return new ComponentVillageTorch(var0, var7, var2, var14, var6); + } else { + return null; + } + } + } + + private static StructureComponent getNextVillageStructureComponent(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + if(var7 > 50) { + return null; + } else if(Math.abs(var3 - var0.getBoundingBox().minX) <= 112 && Math.abs(var5 - var0.getBoundingBox().minZ) <= 112) { + ComponentVillage var8 = getNextVillageComponent(var0, var1, var2, var3, var4, var5, var6, var7 + 1); + if(var8 != null) { + int var9 = (var8.boundingBox.minX + var8.boundingBox.maxX) / 2; + int var10 = (var8.boundingBox.minZ + var8.boundingBox.maxZ) / 2; + int var11 = var8.boundingBox.maxX - var8.boundingBox.minX; + int var12 = var8.boundingBox.maxZ - var8.boundingBox.minZ; + int var13 = var11 > var12 ? var11 : var12; + if(var0.getWorldChunkManager().areBiomesViable(var9, var10, var13 / 2 + 4, MapGenVillage.villageSpawnBiomes)) { + var1.add(var8); + var0.field_74932_i.add(var8); + return var8; + } + } + + return null; + } else { + return null; + } + } + + private static StructureComponent getNextComponentVillagePath(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + if(var7 > 3 + var0.terrainType) { + return null; + } else if(Math.abs(var3 - var0.getBoundingBox().minX) <= 112 && Math.abs(var5 - var0.getBoundingBox().minZ) <= 112) { + StructureBoundingBox var8 = ComponentVillagePathGen.func_74933_a(var0, var1, var2, var3, var4, var5, var6); + if(var8 != null && var8.minY > 10) { + ComponentVillagePathGen var9 = new ComponentVillagePathGen(var0, var7, var2, var8, var6); + int var10 = (var9.boundingBox.minX + var9.boundingBox.maxX) / 2; + int var11 = (var9.boundingBox.minZ + var9.boundingBox.maxZ) / 2; + int var12 = var9.boundingBox.maxX - var9.boundingBox.minX; + int var13 = var9.boundingBox.maxZ - var9.boundingBox.minZ; + int var14 = var12 > var13 ? var12 : var13; + if(var0.getWorldChunkManager().areBiomesViable(var10, var11, var14 / 2 + 4, MapGenVillage.villageSpawnBiomes)) { + var1.add(var9); + var0.field_74930_j.add(var9); + return var9; + } + } + + return null; + } else { + return null; + } + } + + static StructureComponent getNextStructureComponent(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + return getNextVillageStructureComponent(var0, var1, var2, var3, var4, var5, var6, var7); + } + + static StructureComponent getNextStructureComponentVillagePath(ComponentVillageStartPiece var0, List var1, Random var2, int var3, int var4, int var5, int var6, int var7) { + return getNextComponentVillagePath(var0, var1, var2, var3, var4, var5, var6, var7); + } +} diff --git a/src/net/minecraft/src/StructureVillageStart.java b/src/net/minecraft/src/StructureVillageStart.java new file mode 100644 index 0000000..fa55845 --- /dev/null +++ b/src/net/minecraft/src/StructureVillageStart.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Random; + +class StructureVillageStart extends StructureStart { + private boolean hasMoreThanTwoComponents = false; + + public StructureVillageStart(World var1, Random var2, int var3, int var4, int var5) { + ArrayList var6 = StructureVillagePieces.getStructureVillageWeightedPieceList(var2, var5); + ComponentVillageStartPiece var7 = new ComponentVillageStartPiece(var1.getWorldChunkManager(), 0, var2, (var3 << 4) + 2, (var4 << 4) + 2, var6, var5); + this.components.add(var7); + var7.buildComponent(var7, this.components, var2); + ArrayList var8 = var7.field_74930_j; + ArrayList var9 = var7.field_74932_i; + + int var10; + while(!var8.isEmpty() || !var9.isEmpty()) { + StructureComponent var11; + if(var8.isEmpty()) { + var10 = var2.nextInt(var9.size()); + var11 = (StructureComponent)var9.remove(var10); + var11.buildComponent(var7, this.components, var2); + } else { + var10 = var2.nextInt(var8.size()); + var11 = (StructureComponent)var8.remove(var10); + var11.buildComponent(var7, this.components, var2); + } + } + + this.updateBoundingBox(); + var10 = 0; + Iterator var13 = this.components.iterator(); + + while(var13.hasNext()) { + StructureComponent var12 = (StructureComponent)var13.next(); + if(!(var12 instanceof ComponentVillageRoadPiece)) { + ++var10; + } + } + + this.hasMoreThanTwoComponents = var10 > 2; + } + + public boolean isSizeableStructure() { + return this.hasMoreThanTwoComponents; + } +} diff --git a/src/net/minecraft/src/SyntaxErrorException.java b/src/net/minecraft/src/SyntaxErrorException.java new file mode 100644 index 0000000..d971738 --- /dev/null +++ b/src/net/minecraft/src/SyntaxErrorException.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class SyntaxErrorException extends CommandException { + public SyntaxErrorException() { + this("commands.generic.snytax", new Object[0]); + } + + public SyntaxErrorException(String var1, Object... var2) { + super(var1, var2); + } +} diff --git a/src/net/minecraft/src/TaskLongRunning.java b/src/net/minecraft/src/TaskLongRunning.java new file mode 100644 index 0000000..0941a5b --- /dev/null +++ b/src/net/minecraft/src/TaskLongRunning.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +public abstract class TaskLongRunning implements Runnable { + protected GuiScreenLongRunningTask field_96579_b; + + public void func_96574_a(GuiScreenLongRunningTask var1) { + this.field_96579_b = var1; + } + + public void func_96575_a(String var1) { + this.field_96579_b.func_96209_a(var1); + } + + public void func_96576_b(String var1) { + this.field_96579_b.func_96210_b(var1); + } + + public Minecraft func_96578_b() { + return this.field_96579_b.func_96208_g(); + } + + public boolean func_96577_c() { + return this.field_96579_b.func_96207_h(); + } + + public void func_96573_a() { + } + + public void func_96572_a(GuiButton var1) { + } + + public void func_96571_d() { + } +} diff --git a/src/net/minecraft/src/TaskOnlineConnect.java b/src/net/minecraft/src/TaskOnlineConnect.java new file mode 100644 index 0000000..fae5071 --- /dev/null +++ b/src/net/minecraft/src/TaskOnlineConnect.java @@ -0,0 +1,86 @@ +package net.minecraft.src; + +import java.io.IOException; + +public class TaskOnlineConnect extends TaskLongRunning { + private NetClientHandler field_96586_a; + private final McoServer field_96585_c; + private final GuiScreen field_96584_d; + + public TaskOnlineConnect(GuiScreen var1, McoServer var2) { + this.field_96584_d = var1; + this.field_96585_c = var2; + } + + public void run() { + this.func_96576_b(StringTranslate.getInstance().translateKey("mco.connect.connecting")); + McoClient var1 = new McoClient(this.func_96578_b().session); + boolean var2 = false; + boolean var3 = false; + McoServerAddress var4 = null; + + for(int var5 = 0; var5 < 10 && !this.func_96577_c(); ++var5) { + try { + var4 = var1.func_96374_a(this.field_96585_c.field_96408_a); + var2 = true; + } catch (ExceptionRetryCall var7) { + } catch (ExceptionMcoService var8) { + var3 = true; + this.func_96575_a(var8.getLocalizedMessage()); + break; + } catch (IOException var9) { + } catch (Exception var10) { + var3 = true; + this.func_96575_a(var10.getLocalizedMessage()); + } + + if(var2) { + break; + } + + this.func_96581_e(); + } + + if(!this.func_96577_c() && !var3) { + if(var2) { + ServerAddress var11 = ServerAddress.func_78860_a(var4.field_96417_a); + this.func_96582_a(var11.getIP(), var11.getPort()); + } else { + this.func_96578_b().displayGuiScreen(this.field_96584_d); + } + } + + } + + private void func_96581_e() { + try { + Thread.sleep(5000L); + } catch (InterruptedException var2) { + System.err.println(var2); + } + + } + + private void func_96582_a(String var1, int var2) { + (new ThreadOnlineConnect(this, var1, var2)).start(); + } + + public void func_96573_a() { + if(this.field_96586_a != null) { + this.field_96586_a.processReadPackets(); + } + + } + + static NetClientHandler func_96583_a(TaskOnlineConnect var0, NetClientHandler var1) { + return var0.field_96586_a = var1; + } + + static GuiScreen func_98172_a(TaskOnlineConnect var0) { + return var0.field_96584_d; + } + + static NetClientHandler func_96580_a(TaskOnlineConnect var0) { + return var0.field_96586_a; + } +} diff --git a/src/net/minecraft/src/TaskResetWorld.java b/src/net/minecraft/src/TaskResetWorld.java new file mode 100644 index 0000000..d0eced6 --- /dev/null +++ b/src/net/minecraft/src/TaskResetWorld.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +import java.io.IOException; + +class TaskResetWorld extends TaskLongRunning { + private final long field_96591_c; + private final String field_104066_d; + final GuiScreenResetWorld field_96592_a; + + public TaskResetWorld(GuiScreenResetWorld var1, long var2, String var4) { + this.field_96592_a = var1; + this.field_96591_c = var2; + this.field_104066_d = var4; + } + + public void run() { + McoClient var1 = new McoClient(this.func_96578_b().session); + String var2 = StringTranslate.getInstance().translateKey("mco.reset.world.resetting.screen.title"); + this.func_96576_b(var2); + + try { + var1.func_96376_d(this.field_96591_c, this.field_104066_d); + GuiScreenResetWorld.func_96147_b(this.field_96592_a).displayGuiScreen(GuiScreenResetWorld.func_96148_a(this.field_96592_a)); + } catch (ExceptionMcoService var4) { + this.func_96575_a(var4.field_96391_b); + } catch (IOException var5) { + } + + } +} diff --git a/src/net/minecraft/src/TaskWorldCreation.java b/src/net/minecraft/src/TaskWorldCreation.java new file mode 100644 index 0000000..c589b52 --- /dev/null +++ b/src/net/minecraft/src/TaskWorldCreation.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.io.UnsupportedEncodingException; + +class TaskWorldCreation extends TaskLongRunning { + private final String field_96589_c; + private final String field_96587_d; + private final String field_96588_e; + private final String field_104065_f; + final GuiScreenCreateOnlineWorld field_96590_a; + + public TaskWorldCreation(GuiScreenCreateOnlineWorld var1, String var2, String var3, String var4, String var5) { + this.field_96590_a = var1; + this.field_96589_c = var2; + this.field_96587_d = var3; + this.field_96588_e = var4; + this.field_104065_f = var5; + } + + public void run() { + String var1 = StringTranslate.getInstance().translateKey("mco.create.world.wait"); + this.func_96576_b(var1); + McoClient var2 = new McoClient(GuiScreenCreateOnlineWorld.func_96248_a(this.field_96590_a).session); + + try { + var2.func_96386_a(this.field_96589_c, this.field_96587_d, this.field_96588_e, this.field_104065_f); + GuiScreenCreateOnlineWorld.func_96246_c(this.field_96590_a).displayGuiScreen(GuiScreenCreateOnlineWorld.func_96247_b(this.field_96590_a)); + } catch (ExceptionMcoService var4) { + this.func_96575_a(var4.field_96391_b); + } catch (UnsupportedEncodingException var5) { + } catch (IOException var6) { + } catch (Exception var7) { + this.func_96575_a("Failed"); + } + + } +} diff --git a/src/net/minecraft/src/TcpConnection.java b/src/net/minecraft/src/TcpConnection.java new file mode 100644 index 0000000..fe016ed --- /dev/null +++ b/src/net/minecraft/src/TcpConnection.java @@ -0,0 +1,379 @@ +package net.minecraft.src; + +import java.io.BufferedOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.net.Socket; +import java.net.SocketAddress; +import java.net.SocketException; +import java.security.PrivateKey; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Iterator; +import java.util.List; +import java.util.concurrent.atomic.AtomicInteger; +import javax.crypto.SecretKey; + +public class TcpConnection implements INetworkManager { + public static AtomicInteger field_74471_a = new AtomicInteger(); + public static AtomicInteger field_74469_b = new AtomicInteger(); + private final Object sendQueueLock; + private final ILogAgent field_98215_i; + private Socket networkSocket; + private final SocketAddress remoteSocketAddress; + private volatile DataInputStream socketInputStream; + private volatile DataOutputStream socketOutputStream; + private volatile boolean isRunning; + private volatile boolean isTerminating; + private List readPackets; + private List dataPackets; + private List chunkDataPackets; + private NetHandler theNetHandler; + private boolean isServerTerminating; + private Thread writeThread; + private Thread readThread; + private String terminationReason; + private Object[] field_74480_w; + private int field_74490_x; + private int sendQueueByteLength; + public static int[] field_74470_c = new int[256]; + public static int[] field_74467_d = new int[256]; + public int field_74468_e; + boolean isInputBeingDecrypted; + boolean isOutputEncrypted; + private SecretKey sharedKeyForEncryption; + private PrivateKey field_74463_A; + private int chunkDataPacketsDelay; + + public TcpConnection(ILogAgent var1, Socket var2, String var3, NetHandler var4) throws IOException { + this(var1, var2, var3, var4, (PrivateKey)null); + } + + public TcpConnection(ILogAgent var1, Socket var2, String var3, NetHandler var4, PrivateKey var5) throws IOException { + this.sendQueueLock = new Object(); + this.isRunning = true; + this.isTerminating = false; + this.readPackets = Collections.synchronizedList(new ArrayList()); + this.dataPackets = Collections.synchronizedList(new ArrayList()); + this.chunkDataPackets = Collections.synchronizedList(new ArrayList()); + this.isServerTerminating = false; + this.terminationReason = ""; + this.field_74490_x = 0; + this.sendQueueByteLength = 0; + this.field_74468_e = 0; + this.isInputBeingDecrypted = false; + this.isOutputEncrypted = false; + this.sharedKeyForEncryption = null; + this.field_74463_A = null; + this.chunkDataPacketsDelay = 50; + this.field_74463_A = var5; + this.networkSocket = var2; + this.field_98215_i = var1; + this.remoteSocketAddress = var2.getRemoteSocketAddress(); + this.theNetHandler = var4; + + try { + var2.setSoTimeout(30000); + var2.setTrafficClass(24); + } catch (SocketException var7) { + System.err.println(var7.getMessage()); + } + + this.socketInputStream = new DataInputStream(var2.getInputStream()); + this.socketOutputStream = new DataOutputStream(new BufferedOutputStream(var2.getOutputStream(), 5120)); + this.readThread = new TcpReaderThread(this, var3 + " read thread"); + this.writeThread = new TcpWriterThread(this, var3 + " write thread"); + this.readThread.start(); + this.writeThread.start(); + } + + public void closeConnections() { + this.wakeThreads(); + this.writeThread = null; + this.readThread = null; + } + + public void setNetHandler(NetHandler var1) { + this.theNetHandler = var1; + } + + public void addToSendQueue(Packet var1) { + if(!this.isServerTerminating) { + Object var2 = this.sendQueueLock; + synchronized(var2) { + this.sendQueueByteLength += var1.getPacketSize() + 1; + this.dataPackets.add(var1); + } + } + } + + private boolean sendPacket() { + boolean var1 = false; + + try { + int[] var10000; + int var10001; + Packet var2; + if(this.field_74468_e == 0 || !this.dataPackets.isEmpty() && System.currentTimeMillis() - ((Packet)this.dataPackets.get(0)).creationTimeMillis >= (long)this.field_74468_e) { + var2 = this.func_74460_a(false); + if(var2 != null) { + Packet.writePacket(var2, this.socketOutputStream); + if(var2 instanceof Packet252SharedKey && !this.isOutputEncrypted) { + if(!this.theNetHandler.isServerHandler()) { + this.sharedKeyForEncryption = ((Packet252SharedKey)var2).getSharedKey(); + } + + this.encryptOuputStream(); + } + + var10000 = field_74467_d; + var10001 = var2.getPacketId(); + var10000[var10001] += var2.getPacketSize() + 1; + var1 = true; + } + } + + if(this.chunkDataPacketsDelay-- <= 0 && (this.field_74468_e == 0 || !this.chunkDataPackets.isEmpty() && System.currentTimeMillis() - ((Packet)this.chunkDataPackets.get(0)).creationTimeMillis >= (long)this.field_74468_e)) { + var2 = this.func_74460_a(true); + if(var2 != null) { + Packet.writePacket(var2, this.socketOutputStream); + var10000 = field_74467_d; + var10001 = var2.getPacketId(); + var10000[var10001] += var2.getPacketSize() + 1; + this.chunkDataPacketsDelay = 0; + var1 = true; + } + } + + return var1; + } catch (Exception var3) { + if(!this.isTerminating) { + this.onNetworkError(var3); + } + + return false; + } + } + + private Packet func_74460_a(boolean var1) { + Packet var2 = null; + List var3 = var1 ? this.chunkDataPackets : this.dataPackets; + Object var4 = this.sendQueueLock; + synchronized(var4) { + while(!var3.isEmpty() && var2 == null) { + var2 = (Packet)var3.remove(0); + this.sendQueueByteLength -= var2.getPacketSize() + 1; + if(this.func_74454_a(var2, var1)) { + var2 = null; + } + } + + return var2; + } + } + + private boolean func_74454_a(Packet var1, boolean var2) { + if(!var1.isRealPacket()) { + return false; + } else { + List var3 = var2 ? this.chunkDataPackets : this.dataPackets; + Iterator var4 = var3.iterator(); + + Packet var5; + do { + if(!var4.hasNext()) { + return false; + } + + var5 = (Packet)var4.next(); + } while(var5.getPacketId() != var1.getPacketId()); + + return var1.containsSameEntityIDAs(var5); + } + } + + public void wakeThreads() { + if(this.readThread != null) { + this.readThread.interrupt(); + } + + if(this.writeThread != null) { + this.writeThread.interrupt(); + } + + } + + private boolean readPacket() { + boolean var1 = false; + + try { + Packet var2 = Packet.readPacket(this.field_98215_i, this.socketInputStream, this.theNetHandler.isServerHandler(), this.networkSocket); + if(var2 != null) { + if(var2 instanceof Packet252SharedKey && !this.isInputBeingDecrypted) { + if(this.theNetHandler.isServerHandler()) { + this.sharedKeyForEncryption = ((Packet252SharedKey)var2).getSharedKey(this.field_74463_A); + } + + this.decryptInputStream(); + } + + int[] var10000 = field_74470_c; + int var10001 = var2.getPacketId(); + var10000[var10001] += var2.getPacketSize() + 1; + if(!this.isServerTerminating) { + if(var2.canProcessAsync() && this.theNetHandler.canProcessPacketsAsync()) { + this.field_74490_x = 0; + var2.processPacket(this.theNetHandler); + } else { + this.readPackets.add(var2); + } + } + + var1 = true; + } else { + this.networkShutdown("disconnect.endOfStream", new Object[0]); + } + + return var1; + } catch (Exception var3) { + if(!this.isTerminating) { + this.onNetworkError(var3); + } + + return false; + } + } + + private void onNetworkError(Exception var1) { + var1.printStackTrace(); + this.networkShutdown("disconnect.genericReason", new Object[]{"Internal exception: " + var1.toString()}); + } + + public void networkShutdown(String var1, Object... var2) { + if(this.isRunning) { + this.isTerminating = true; + this.terminationReason = var1; + this.field_74480_w = var2; + this.isRunning = false; + (new TcpMasterThread(this)).start(); + + try { + this.socketInputStream.close(); + } catch (Throwable var6) { + } + + try { + this.socketOutputStream.close(); + } catch (Throwable var5) { + } + + try { + this.networkSocket.close(); + } catch (Throwable var4) { + } + + this.socketInputStream = null; + this.socketOutputStream = null; + this.networkSocket = null; + } + } + + public void processReadPackets() { + if(this.sendQueueByteLength > 2097152) { + this.networkShutdown("disconnect.overflow", new Object[0]); + } + + if(this.readPackets.isEmpty()) { + if(this.field_74490_x++ == 1200) { + this.networkShutdown("disconnect.timeout", new Object[0]); + } + } else { + this.field_74490_x = 0; + } + + int var1 = 1000; + + while(!this.readPackets.isEmpty() && var1-- >= 0) { + Packet var2 = (Packet)this.readPackets.remove(0); + var2.processPacket(this.theNetHandler); + } + + this.wakeThreads(); + if(this.isTerminating && this.readPackets.isEmpty()) { + this.theNetHandler.handleErrorMessage(this.terminationReason, this.field_74480_w); + } + + } + + public SocketAddress getSocketAddress() { + return this.remoteSocketAddress; + } + + public void serverShutdown() { + if(!this.isServerTerminating) { + this.wakeThreads(); + this.isServerTerminating = true; + this.readThread.interrupt(); + (new TcpMonitorThread(this)).start(); + } + } + + private void decryptInputStream() throws IOException { + this.isInputBeingDecrypted = true; + InputStream var1 = this.networkSocket.getInputStream(); + this.socketInputStream = new DataInputStream(CryptManager.decryptInputStream(this.sharedKeyForEncryption, var1)); + } + + private void encryptOuputStream() throws IOException { + this.socketOutputStream.flush(); + this.isOutputEncrypted = true; + BufferedOutputStream var1 = new BufferedOutputStream(CryptManager.encryptOuputStream(this.sharedKeyForEncryption, this.networkSocket.getOutputStream()), 5120); + this.socketOutputStream = new DataOutputStream(var1); + } + + public int packetSize() { + return this.chunkDataPackets.size(); + } + + public Socket getSocket() { + return this.networkSocket; + } + + static boolean isRunning(TcpConnection var0) { + return var0.isRunning; + } + + static boolean isServerTerminating(TcpConnection var0) { + return var0.isServerTerminating; + } + + static boolean readNetworkPacket(TcpConnection var0) { + return var0.readPacket(); + } + + static boolean sendNetworkPacket(TcpConnection var0) { + return var0.sendPacket(); + } + + static DataOutputStream getOutputStream(TcpConnection var0) { + return var0.socketOutputStream; + } + + static boolean isTerminating(TcpConnection var0) { + return var0.isTerminating; + } + + static void sendError(TcpConnection var0, Exception var1) { + var0.onNetworkError(var1); + } + + static Thread getReadThread(TcpConnection var0) { + return var0.readThread; + } + + static Thread getWriteThread(TcpConnection var0) { + return var0.writeThread; + } +} diff --git a/src/net/minecraft/src/TcpMasterThread.java b/src/net/minecraft/src/TcpMasterThread.java new file mode 100644 index 0000000..abc198f --- /dev/null +++ b/src/net/minecraft/src/TcpMasterThread.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +class TcpMasterThread extends Thread { + final TcpConnection theTcpConnection; + + TcpMasterThread(TcpConnection var1) { + this.theTcpConnection = var1; + } + + public void run() { + try { + Thread.sleep(5000L); + if(TcpConnection.getReadThread(this.theTcpConnection).isAlive()) { + try { + TcpConnection.getReadThread(this.theTcpConnection).stop(); + } catch (Throwable var3) { + } + } + + if(TcpConnection.getWriteThread(this.theTcpConnection).isAlive()) { + try { + TcpConnection.getWriteThread(this.theTcpConnection).stop(); + } catch (Throwable var2) { + } + } + } catch (InterruptedException var4) { + var4.printStackTrace(); + } + + } +} diff --git a/src/net/minecraft/src/TcpMonitorThread.java b/src/net/minecraft/src/TcpMonitorThread.java new file mode 100644 index 0000000..80b9e7f --- /dev/null +++ b/src/net/minecraft/src/TcpMonitorThread.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +class TcpMonitorThread extends Thread { + final TcpConnection theTcpConnection; + + TcpMonitorThread(TcpConnection var1) { + this.theTcpConnection = var1; + } + + public void run() { + try { + Thread.sleep(2000L); + if(TcpConnection.isRunning(this.theTcpConnection)) { + TcpConnection.getWriteThread(this.theTcpConnection).interrupt(); + this.theTcpConnection.networkShutdown("disconnect.closed", new Object[0]); + } + } catch (Exception var2) { + var2.printStackTrace(); + } + + } +} diff --git a/src/net/minecraft/src/TcpReaderThread.java b/src/net/minecraft/src/TcpReaderThread.java new file mode 100644 index 0000000..72ac2ff --- /dev/null +++ b/src/net/minecraft/src/TcpReaderThread.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +class TcpReaderThread extends Thread { + final TcpConnection theTcpConnection; + + TcpReaderThread(TcpConnection var1, String var2) { + super(var2); + this.theTcpConnection = var1; + } + + public void run() { + TcpConnection.field_74471_a.getAndIncrement(); + + try { + while(TcpConnection.isRunning(this.theTcpConnection) && !TcpConnection.isServerTerminating(this.theTcpConnection)) { + while(true) { + if(!TcpConnection.readNetworkPacket(this.theTcpConnection)) { + try { + sleep(2L); + } catch (InterruptedException var5) { + } + } + } + } + } finally { + TcpConnection.field_74471_a.getAndDecrement(); + } + + } +} diff --git a/src/net/minecraft/src/TcpWriterThread.java b/src/net/minecraft/src/TcpWriterThread.java new file mode 100644 index 0000000..7595fd5 --- /dev/null +++ b/src/net/minecraft/src/TcpWriterThread.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import java.io.IOException; + +class TcpWriterThread extends Thread { + final TcpConnection theTcpConnection; + + TcpWriterThread(TcpConnection var1, String var2) { + super(var2); + this.theTcpConnection = var1; + } + + public void run() { + TcpConnection.field_74469_b.getAndIncrement(); + + try { + while(TcpConnection.isRunning(this.theTcpConnection)) { + boolean var1; + for(var1 = false; TcpConnection.sendNetworkPacket(this.theTcpConnection); var1 = true) { + } + + try { + if(var1 && TcpConnection.getOutputStream(this.theTcpConnection) != null) { + TcpConnection.getOutputStream(this.theTcpConnection).flush(); + } + } catch (IOException var8) { + if(!TcpConnection.isTerminating(this.theTcpConnection)) { + TcpConnection.sendError(this.theTcpConnection, var8); + } + + var8.printStackTrace(); + } + + try { + sleep(2L); + } catch (InterruptedException var7) { + } + } + } finally { + TcpConnection.field_74469_b.getAndDecrement(); + } + + } +} diff --git a/src/net/minecraft/src/Teleporter.java b/src/net/minecraft/src/Teleporter.java new file mode 100644 index 0000000..1b4a109 --- /dev/null +++ b/src/net/minecraft/src/Teleporter.java @@ -0,0 +1,394 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.Random; + +public class Teleporter { + private final WorldServer worldServerInstance; + private final Random random; + private final LongHashMap destinationCoordinateCache = new LongHashMap(); + private final List destinationCoordinateKeys = new ArrayList(); + + public Teleporter(WorldServer var1) { + this.worldServerInstance = var1; + this.random = new Random(var1.getSeed()); + } + + public void placeInPortal(Entity var1, double var2, double var4, double var6, float var8) { + if(this.worldServerInstance.provider.dimensionId != 1) { + if(!this.placeInExistingPortal(var1, var2, var4, var6, var8)) { + this.makePortal(var1); + this.placeInExistingPortal(var1, var2, var4, var6, var8); + } + } else { + int var9 = MathHelper.floor_double(var1.posX); + int var10 = MathHelper.floor_double(var1.posY) - 1; + int var11 = MathHelper.floor_double(var1.posZ); + byte var12 = 1; + byte var13 = 0; + + for(int var14 = -2; var14 <= 2; ++var14) { + for(int var15 = -2; var15 <= 2; ++var15) { + for(int var16 = -1; var16 < 3; ++var16) { + int var17 = var9 + var15 * var12 + var14 * var13; + int var18 = var10 + var16; + int var19 = var11 + var15 * var13 - var14 * var12; + boolean var20 = var16 < 0; + this.worldServerInstance.setBlock(var17, var18, var19, var20 ? Block.obsidian.blockID : 0); + } + } + } + + var1.setLocationAndAngles((double)var9, (double)var10, (double)var11, var1.rotationYaw, 0.0F); + var1.motionX = var1.motionY = var1.motionZ = 0.0D; + } + } + + public boolean placeInExistingPortal(Entity var1, double var2, double var4, double var6, float var8) { + short var9 = 128; + double var10 = -1.0D; + int var12 = 0; + int var13 = 0; + int var14 = 0; + int var15 = MathHelper.floor_double(var1.posX); + int var16 = MathHelper.floor_double(var1.posZ); + long var17 = ChunkCoordIntPair.chunkXZ2Int(var15, var16); + boolean var19 = true; + double var27; + int var48; + if(this.destinationCoordinateCache.containsItem(var17)) { + PortalPosition var20 = (PortalPosition)this.destinationCoordinateCache.getValueByKey(var17); + var10 = 0.0D; + var12 = var20.posX; + var13 = var20.posY; + var14 = var20.posZ; + var20.lastUpdateTime = this.worldServerInstance.getTotalWorldTime(); + var19 = false; + } else { + for(var48 = var15 - var9; var48 <= var15 + var9; ++var48) { + double var21 = (double)var48 + 0.5D - var1.posX; + + for(int var23 = var16 - var9; var23 <= var16 + var9; ++var23) { + double var24 = (double)var23 + 0.5D - var1.posZ; + + for(int var26 = this.worldServerInstance.getActualHeight() - 1; var26 >= 0; --var26) { + if(this.worldServerInstance.getBlockId(var48, var26, var23) == Block.portal.blockID) { + while(this.worldServerInstance.getBlockId(var48, var26 - 1, var23) == Block.portal.blockID) { + --var26; + } + + var27 = (double)var26 + 0.5D - var1.posY; + double var29 = var21 * var21 + var27 * var27 + var24 * var24; + if(var10 < 0.0D || var29 < var10) { + var10 = var29; + var12 = var48; + var13 = var26; + var14 = var23; + } + } + } + } + } + } + + if(var10 >= 0.0D) { + if(var19) { + this.destinationCoordinateCache.add(var17, new PortalPosition(this, var12, var13, var14, this.worldServerInstance.getTotalWorldTime())); + this.destinationCoordinateKeys.add(Long.valueOf(var17)); + } + + double var49 = (double)var12 + 0.5D; + double var25 = (double)var13 + 0.5D; + var27 = (double)var14 + 0.5D; + int var50 = -1; + if(this.worldServerInstance.getBlockId(var12 - 1, var13, var14) == Block.portal.blockID) { + var50 = 2; + } + + if(this.worldServerInstance.getBlockId(var12 + 1, var13, var14) == Block.portal.blockID) { + var50 = 0; + } + + if(this.worldServerInstance.getBlockId(var12, var13, var14 - 1) == Block.portal.blockID) { + var50 = 3; + } + + if(this.worldServerInstance.getBlockId(var12, var13, var14 + 1) == Block.portal.blockID) { + var50 = 1; + } + + int var30 = var1.getTeleportDirection(); + if(var50 > -1) { + int var31 = Direction.rotateLeft[var50]; + int var32 = Direction.offsetX[var50]; + int var33 = Direction.offsetZ[var50]; + int var34 = Direction.offsetX[var31]; + int var35 = Direction.offsetZ[var31]; + boolean var36 = !this.worldServerInstance.isAirBlock(var12 + var32 + var34, var13, var14 + var33 + var35) || !this.worldServerInstance.isAirBlock(var12 + var32 + var34, var13 + 1, var14 + var33 + var35); + boolean var37 = !this.worldServerInstance.isAirBlock(var12 + var32, var13, var14 + var33) || !this.worldServerInstance.isAirBlock(var12 + var32, var13 + 1, var14 + var33); + if(var36 && var37) { + var50 = Direction.rotateOpposite[var50]; + var31 = Direction.rotateOpposite[var31]; + var32 = Direction.offsetX[var50]; + var33 = Direction.offsetZ[var50]; + var34 = Direction.offsetX[var31]; + var35 = Direction.offsetZ[var31]; + var48 = var12 - var34; + var49 -= (double)var34; + int var22 = var14 - var35; + var27 -= (double)var35; + var36 = !this.worldServerInstance.isAirBlock(var48 + var32 + var34, var13, var22 + var33 + var35) || !this.worldServerInstance.isAirBlock(var48 + var32 + var34, var13 + 1, var22 + var33 + var35); + var37 = !this.worldServerInstance.isAirBlock(var48 + var32, var13, var22 + var33) || !this.worldServerInstance.isAirBlock(var48 + var32, var13 + 1, var22 + var33); + } + + float var38 = 0.5F; + float var39 = 0.5F; + if(!var36 && var37) { + var38 = 1.0F; + } else if(var36 && !var37) { + var38 = 0.0F; + } else if(var36 && var37) { + var39 = 0.0F; + } + + var49 += (double)((float)var34 * var38 + var39 * (float)var32); + var27 += (double)((float)var35 * var38 + var39 * (float)var33); + float var40 = 0.0F; + float var41 = 0.0F; + float var42 = 0.0F; + float var43 = 0.0F; + if(var50 == var30) { + var40 = 1.0F; + var41 = 1.0F; + } else if(var50 == Direction.rotateOpposite[var30]) { + var40 = -1.0F; + var41 = -1.0F; + } else if(var50 == Direction.rotateRight[var30]) { + var42 = 1.0F; + var43 = -1.0F; + } else { + var42 = -1.0F; + var43 = 1.0F; + } + + double var44 = var1.motionX; + double var46 = var1.motionZ; + var1.motionX = var44 * (double)var40 + var46 * (double)var43; + var1.motionZ = var44 * (double)var42 + var46 * (double)var41; + var1.rotationYaw = var8 - (float)(var30 * 90) + (float)(var50 * 90); + } else { + var1.motionX = var1.motionY = var1.motionZ = 0.0D; + } + + var1.setLocationAndAngles(var49, var25, var27, var1.rotationYaw, var1.rotationPitch); + return true; + } else { + return false; + } + } + + public boolean makePortal(Entity var1) { + byte var2 = 16; + double var3 = -1.0D; + int var5 = MathHelper.floor_double(var1.posX); + int var6 = MathHelper.floor_double(var1.posY); + int var7 = MathHelper.floor_double(var1.posZ); + int var8 = var5; + int var9 = var6; + int var10 = var7; + int var11 = 0; + int var12 = this.random.nextInt(4); + + int var13; + double var14; + int var16; + double var17; + int var19; + int var20; + int var21; + int var22; + int var23; + int var24; + int var25; + int var26; + int var27; + double var31; + double var32; + for(var13 = var5 - var2; var13 <= var5 + var2; ++var13) { + var14 = (double)var13 + 0.5D - var1.posX; + + for(var16 = var7 - var2; var16 <= var7 + var2; ++var16) { + var17 = (double)var16 + 0.5D - var1.posZ; + + label296: + for(var19 = this.worldServerInstance.getActualHeight() - 1; var19 >= 0; --var19) { + if(this.worldServerInstance.isAirBlock(var13, var19, var16)) { + while(var19 > 0 && this.worldServerInstance.isAirBlock(var13, var19 - 1, var16)) { + --var19; + } + + for(var20 = var12; var20 < var12 + 4; ++var20) { + var21 = var20 % 2; + var22 = 1 - var21; + if(var20 % 4 >= 2) { + var21 = -var21; + var22 = -var22; + } + + for(var23 = 0; var23 < 3; ++var23) { + for(var24 = 0; var24 < 4; ++var24) { + for(var25 = -1; var25 < 4; ++var25) { + var26 = var13 + (var24 - 1) * var21 + var23 * var22; + var27 = var19 + var25; + int var28 = var16 + (var24 - 1) * var22 - var23 * var21; + if(var25 < 0 && !this.worldServerInstance.getBlockMaterial(var26, var27, var28).isSolid() || var25 >= 0 && !this.worldServerInstance.isAirBlock(var26, var27, var28)) { + continue label296; + } + } + } + } + + var31 = (double)var19 + 0.5D - var1.posY; + var32 = var14 * var14 + var31 * var31 + var17 * var17; + if(var3 < 0.0D || var32 < var3) { + var3 = var32; + var8 = var13; + var9 = var19; + var10 = var16; + var11 = var20 % 4; + } + } + } + } + } + } + + if(var3 < 0.0D) { + for(var13 = var5 - var2; var13 <= var5 + var2; ++var13) { + var14 = (double)var13 + 0.5D - var1.posX; + + for(var16 = var7 - var2; var16 <= var7 + var2; ++var16) { + var17 = (double)var16 + 0.5D - var1.posZ; + + label234: + for(var19 = this.worldServerInstance.getActualHeight() - 1; var19 >= 0; --var19) { + if(this.worldServerInstance.isAirBlock(var13, var19, var16)) { + while(var19 > 0 && this.worldServerInstance.isAirBlock(var13, var19 - 1, var16)) { + --var19; + } + + for(var20 = var12; var20 < var12 + 2; ++var20) { + var21 = var20 % 2; + var22 = 1 - var21; + + for(var23 = 0; var23 < 4; ++var23) { + for(var24 = -1; var24 < 4; ++var24) { + var25 = var13 + (var23 - 1) * var21; + var26 = var19 + var24; + var27 = var16 + (var23 - 1) * var22; + if(var24 < 0 && !this.worldServerInstance.getBlockMaterial(var25, var26, var27).isSolid() || var24 >= 0 && !this.worldServerInstance.isAirBlock(var25, var26, var27)) { + continue label234; + } + } + } + + var31 = (double)var19 + 0.5D - var1.posY; + var32 = var14 * var14 + var31 * var31 + var17 * var17; + if(var3 < 0.0D || var32 < var3) { + var3 = var32; + var8 = var13; + var9 = var19; + var10 = var16; + var11 = var20 % 2; + } + } + } + } + } + } + } + + int var29 = var8; + int var15 = var9; + var16 = var10; + int var30 = var11 % 2; + int var18 = 1 - var30; + if(var11 % 4 >= 2) { + var30 = -var30; + var18 = -var18; + } + + boolean var33; + if(var3 < 0.0D) { + if(var9 < 70) { + var9 = 70; + } + + if(var9 > this.worldServerInstance.getActualHeight() - 10) { + var9 = this.worldServerInstance.getActualHeight() - 10; + } + + var15 = var9; + + for(var19 = -1; var19 <= 1; ++var19) { + for(var20 = 1; var20 < 3; ++var20) { + for(var21 = -1; var21 < 3; ++var21) { + var22 = var29 + (var20 - 1) * var30 + var19 * var18; + var23 = var15 + var21; + var24 = var16 + (var20 - 1) * var18 - var19 * var30; + var33 = var21 < 0; + this.worldServerInstance.setBlock(var22, var23, var24, var33 ? Block.obsidian.blockID : 0); + } + } + } + } + + for(var19 = 0; var19 < 4; ++var19) { + for(var20 = 0; var20 < 4; ++var20) { + for(var21 = -1; var21 < 4; ++var21) { + var22 = var29 + (var20 - 1) * var30; + var23 = var15 + var21; + var24 = var16 + (var20 - 1) * var18; + var33 = var20 == 0 || var20 == 3 || var21 == -1 || var21 == 3; + this.worldServerInstance.setBlock(var22, var23, var24, var33 ? Block.obsidian.blockID : Block.portal.blockID, 0, 2); + } + } + + for(var20 = 0; var20 < 4; ++var20) { + for(var21 = -1; var21 < 4; ++var21) { + var22 = var29 + (var20 - 1) * var30; + var23 = var15 + var21; + var24 = var16 + (var20 - 1) * var18; + this.worldServerInstance.notifyBlocksOfNeighborChange(var22, var23, var24, this.worldServerInstance.getBlockId(var22, var23, var24)); + } + } + } + + return true; + } + + public void removeStalePortalLocations(long var1) { + if(var1 % 100L == 0L) { + Iterator var3 = this.destinationCoordinateKeys.iterator(); + long var4 = var1 - 600L; + + while(true) { + Long var6; + PortalPosition var7; + do { + if(!var3.hasNext()) { + return; + } + + var6 = (Long)var3.next(); + var7 = (PortalPosition)this.destinationCoordinateCache.getValueByKey(var6.longValue()); + } while(var7 != null && var7.lastUpdateTime >= var4); + + var3.remove(); + this.destinationCoordinateCache.remove(var6.longValue()); + } + } + } +} diff --git a/src/net/minecraft/src/Tessellator.java b/src/net/minecraft/src/Tessellator.java new file mode 100644 index 0000000..7345f43 --- /dev/null +++ b/src/net/minecraft/src/Tessellator.java @@ -0,0 +1,353 @@ +package net.minecraft.src; + +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.ShortBuffer; +import org.lwjgl.opengl.ARBVertexBufferObject; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL15; +import org.lwjgl.opengl.GLContext; + +public class Tessellator { + private static boolean convertQuadsToTriangles = false; + private static boolean tryVBO = false; + private ByteBuffer byteBuffer; + private IntBuffer intBuffer; + private FloatBuffer floatBuffer; + private ShortBuffer shortBuffer; + private int[] rawBuffer; + private int vertexCount = 0; + private double textureU; + private double textureV; + private int brightness; + private int color; + private boolean hasColor = false; + private boolean hasTexture = false; + private boolean hasBrightness = false; + private boolean hasNormals = false; + private int rawBufferIndex = 0; + private int addedVertices = 0; + private boolean isColorDisabled = false; + private int drawMode; + private double xOffset; + private double yOffset; + private double zOffset; + private int normal; + public static final Tessellator instance = new Tessellator(2097152); + private boolean isDrawing = false; + private boolean useVBO = false; + private IntBuffer vertexBuffers; + private int vboIndex = 0; + private int vboCount = 10; + private int bufferSize; + + private Tessellator(int var1) { + this.bufferSize = var1; + this.byteBuffer = GLAllocation.createDirectByteBuffer(var1 * 4); + this.intBuffer = this.byteBuffer.asIntBuffer(); + this.floatBuffer = this.byteBuffer.asFloatBuffer(); + this.shortBuffer = this.byteBuffer.asShortBuffer(); + this.rawBuffer = new int[var1]; + this.useVBO = tryVBO && GLContext.getCapabilities().GL_ARB_vertex_buffer_object; + if(this.useVBO) { + this.vertexBuffers = GLAllocation.createDirectIntBuffer(this.vboCount); + ARBVertexBufferObject.glGenBuffersARB(this.vertexBuffers); + } + + } + + public int draw() { + if(!this.isDrawing) { + throw new IllegalStateException("Not tesselating!"); + } else { + this.isDrawing = false; + if(this.vertexCount > 0) { + this.intBuffer.clear(); + this.intBuffer.put(this.rawBuffer, 0, this.rawBufferIndex); + this.byteBuffer.position(0); + this.byteBuffer.limit(this.rawBufferIndex * 4); + if(this.useVBO) { + this.vboIndex = (this.vboIndex + 1) % this.vboCount; + ARBVertexBufferObject.glBindBufferARB(GL15.GL_ARRAY_BUFFER, this.vertexBuffers.get(this.vboIndex)); + ARBVertexBufferObject.glBufferDataARB(GL15.GL_ARRAY_BUFFER, this.byteBuffer, GL15.GL_STREAM_DRAW); + } + + if(this.hasTexture) { + if(this.useVBO) { + GL11.glTexCoordPointer(2, GL11.GL_FLOAT, 32, 12L); + } else { + this.floatBuffer.position(3); + GL11.glTexCoordPointer(2, 32, (FloatBuffer)this.floatBuffer); + } + + GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY); + } + + if(this.hasBrightness) { + OpenGlHelper.setClientActiveTexture(OpenGlHelper.lightmapTexUnit); + if(this.useVBO) { + GL11.glTexCoordPointer(2, GL11.GL_SHORT, 32, 28L); + } else { + this.shortBuffer.position(14); + GL11.glTexCoordPointer(2, 32, (ShortBuffer)this.shortBuffer); + } + + GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY); + OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit); + } + + if(this.hasColor) { + if(this.useVBO) { + GL11.glColorPointer(4, GL11.GL_UNSIGNED_BYTE, 32, 20L); + } else { + this.byteBuffer.position(20); + GL11.glColorPointer(4, true, 32, this.byteBuffer); + } + + GL11.glEnableClientState(GL11.GL_COLOR_ARRAY); + } + + if(this.hasNormals) { + if(this.useVBO) { + GL11.glNormalPointer(GL11.GL_UNSIGNED_BYTE, 32, 24L); + } else { + this.byteBuffer.position(24); + GL11.glNormalPointer(32, (ByteBuffer)this.byteBuffer); + } + + GL11.glEnableClientState(GL11.GL_NORMAL_ARRAY); + } + + if(this.useVBO) { + GL11.glVertexPointer(3, GL11.GL_FLOAT, 32, 0L); + } else { + this.floatBuffer.position(0); + GL11.glVertexPointer(3, 32, (FloatBuffer)this.floatBuffer); + } + + GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY); + if(this.drawMode == 7 && convertQuadsToTriangles) { + GL11.glDrawArrays(GL11.GL_TRIANGLES, GL11.GL_POINTS, this.vertexCount); + } else { + GL11.glDrawArrays(this.drawMode, GL11.GL_POINTS, this.vertexCount); + } + + GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY); + if(this.hasTexture) { + GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY); + } + + if(this.hasBrightness) { + OpenGlHelper.setClientActiveTexture(OpenGlHelper.lightmapTexUnit); + GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY); + OpenGlHelper.setClientActiveTexture(OpenGlHelper.defaultTexUnit); + } + + if(this.hasColor) { + GL11.glDisableClientState(GL11.GL_COLOR_ARRAY); + } + + if(this.hasNormals) { + GL11.glDisableClientState(GL11.GL_NORMAL_ARRAY); + } + } + + int var1 = this.rawBufferIndex * 4; + this.reset(); + return var1; + } + } + + private void reset() { + this.vertexCount = 0; + this.byteBuffer.clear(); + this.rawBufferIndex = 0; + this.addedVertices = 0; + } + + public void startDrawingQuads() { + this.startDrawing(7); + } + + public void startDrawing(int var1) { + if(this.isDrawing) { + throw new IllegalStateException("Already tesselating!"); + } else { + this.isDrawing = true; + this.reset(); + this.drawMode = var1; + this.hasNormals = false; + this.hasColor = false; + this.hasTexture = false; + this.hasBrightness = false; + this.isColorDisabled = false; + } + } + + public void setTextureUV(double var1, double var3) { + this.hasTexture = true; + this.textureU = var1; + this.textureV = var3; + } + + public void setBrightness(int var1) { + this.hasBrightness = true; + this.brightness = var1; + } + + public void setColorOpaque_F(float var1, float var2, float var3) { + this.setColorOpaque((int)(var1 * 255.0F), (int)(var2 * 255.0F), (int)(var3 * 255.0F)); + } + + public void setColorRGBA_F(float var1, float var2, float var3, float var4) { + this.setColorRGBA((int)(var1 * 255.0F), (int)(var2 * 255.0F), (int)(var3 * 255.0F), (int)(var4 * 255.0F)); + } + + public void setColorOpaque(int var1, int var2, int var3) { + this.setColorRGBA(var1, var2, var3, 255); + } + + public void setColorRGBA(int var1, int var2, int var3, int var4) { + if(!this.isColorDisabled) { + if(var1 > 255) { + var1 = 255; + } + + if(var2 > 255) { + var2 = 255; + } + + if(var3 > 255) { + var3 = 255; + } + + if(var4 > 255) { + var4 = 255; + } + + if(var1 < 0) { + var1 = 0; + } + + if(var2 < 0) { + var2 = 0; + } + + if(var3 < 0) { + var3 = 0; + } + + if(var4 < 0) { + var4 = 0; + } + + this.hasColor = true; + if(ByteOrder.nativeOrder() == ByteOrder.LITTLE_ENDIAN) { + this.color = var4 << 24 | var3 << 16 | var2 << 8 | var1; + } else { + this.color = var1 << 24 | var2 << 16 | var3 << 8 | var4; + } + + } + } + + public void addVertexWithUV(double var1, double var3, double var5, double var7, double var9) { + this.setTextureUV(var7, var9); + this.addVertex(var1, var3, var5); + } + + public void addVertex(double var1, double var3, double var5) { + ++this.addedVertices; + if(this.drawMode == 7 && convertQuadsToTriangles && this.addedVertices % 4 == 0) { + for(int var7 = 0; var7 < 2; ++var7) { + int var8 = 8 * (3 - var7); + if(this.hasTexture) { + this.rawBuffer[this.rawBufferIndex + 3] = this.rawBuffer[this.rawBufferIndex - var8 + 3]; + this.rawBuffer[this.rawBufferIndex + 4] = this.rawBuffer[this.rawBufferIndex - var8 + 4]; + } + + if(this.hasBrightness) { + this.rawBuffer[this.rawBufferIndex + 7] = this.rawBuffer[this.rawBufferIndex - var8 + 7]; + } + + if(this.hasColor) { + this.rawBuffer[this.rawBufferIndex + 5] = this.rawBuffer[this.rawBufferIndex - var8 + 5]; + } + + this.rawBuffer[this.rawBufferIndex + 0] = this.rawBuffer[this.rawBufferIndex - var8 + 0]; + this.rawBuffer[this.rawBufferIndex + 1] = this.rawBuffer[this.rawBufferIndex - var8 + 1]; + this.rawBuffer[this.rawBufferIndex + 2] = this.rawBuffer[this.rawBufferIndex - var8 + 2]; + ++this.vertexCount; + this.rawBufferIndex += 8; + } + } + + if(this.hasTexture) { + this.rawBuffer[this.rawBufferIndex + 3] = Float.floatToRawIntBits((float)this.textureU); + this.rawBuffer[this.rawBufferIndex + 4] = Float.floatToRawIntBits((float)this.textureV); + } + + if(this.hasBrightness) { + this.rawBuffer[this.rawBufferIndex + 7] = this.brightness; + } + + if(this.hasColor) { + this.rawBuffer[this.rawBufferIndex + 5] = this.color; + } + + if(this.hasNormals) { + this.rawBuffer[this.rawBufferIndex + 6] = this.normal; + } + + this.rawBuffer[this.rawBufferIndex + 0] = Float.floatToRawIntBits((float)(var1 + this.xOffset)); + this.rawBuffer[this.rawBufferIndex + 1] = Float.floatToRawIntBits((float)(var3 + this.yOffset)); + this.rawBuffer[this.rawBufferIndex + 2] = Float.floatToRawIntBits((float)(var5 + this.zOffset)); + this.rawBufferIndex += 8; + ++this.vertexCount; + if(this.vertexCount % 4 == 0 && this.rawBufferIndex >= this.bufferSize - 32) { + this.draw(); + this.isDrawing = true; + } + + } + + public void setColorOpaque_I(int var1) { + int var2 = var1 >> 16 & 255; + int var3 = var1 >> 8 & 255; + int var4 = var1 & 255; + this.setColorOpaque(var2, var3, var4); + } + + public void setColorRGBA_I(int var1, int var2) { + int var3 = var1 >> 16 & 255; + int var4 = var1 >> 8 & 255; + int var5 = var1 & 255; + this.setColorRGBA(var3, var4, var5, var2); + } + + public void disableColor() { + this.isColorDisabled = true; + } + + public void setNormal(float var1, float var2, float var3) { + this.hasNormals = true; + byte var4 = (byte)((int)(var1 * 127.0F)); + byte var5 = (byte)((int)(var2 * 127.0F)); + byte var6 = (byte)((int)(var3 * 127.0F)); + this.normal = var4 & 255 | (var5 & 255) << 8 | (var6 & 255) << 16; + } + + public void setTranslation(double var1, double var3, double var5) { + this.xOffset = var1; + this.yOffset = var3; + this.zOffset = var5; + } + + public void addTranslation(float var1, float var2, float var3) { + this.xOffset += (double)var1; + this.yOffset += (double)var2; + this.zOffset += (double)var3; + } +} diff --git a/src/net/minecraft/src/Texture.java b/src/net/minecraft/src/Texture.java new file mode 100644 index 0000000..4ce4616 --- /dev/null +++ b/src/net/minecraft/src/Texture.java @@ -0,0 +1,297 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.nio.ByteBuffer; +import javax.imageio.ImageIO; +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class Texture { + private int glTextureId; + private int textureId; + private int textureType; + private final int width; + private final int height; + private final int textureDepth; + private final int textureFormat; + private final int textureTarget; + private final int textureMinFilter; + private final int textureMagFilter; + private final int textureWrap; + private final boolean mipmapActive; + private final String textureName; + private Rect2i textureRect; + private boolean transferred; + private boolean autoCreate; + private boolean textureNotModified; + private ByteBuffer textureData; + + private Texture(String var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9) { + this.textureName = var1; + this.textureType = var2; + this.width = var3; + this.height = var4; + this.textureDepth = var5; + this.textureFormat = var7; + this.textureMinFilter = var8; + this.textureMagFilter = var9; + this.textureWrap = var6; + this.textureRect = new Rect2i(0, 0, var3, var4); + if(var4 == 1 && var5 == 1) { + this.textureTarget = 3552; + } else if(var5 == 1) { + this.textureTarget = 3553; + } else { + this.textureTarget = '\u806f'; + } + + this.mipmapActive = var8 != 9728 && var8 != 9729 || var9 != 9728 && var9 != 9729; + if(var2 != 2) { + this.glTextureId = GL11.glGenTextures(); + GL11.glBindTexture(this.textureTarget, this.glTextureId); + GL11.glTexParameteri(this.textureTarget, GL11.GL_TEXTURE_MIN_FILTER, var8); + GL11.glTexParameteri(this.textureTarget, GL11.GL_TEXTURE_MAG_FILTER, var9); + GL11.glTexParameteri(this.textureTarget, GL11.GL_TEXTURE_WRAP_S, var6); + GL11.glTexParameteri(this.textureTarget, GL11.GL_TEXTURE_WRAP_T, var6); + } else { + this.glTextureId = -1; + } + + this.textureId = TextureManager.instance().getNextTextureId(); + } + + public Texture(String var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, BufferedImage var9) { + this(var1, var2, var3, var4, 1, var5, var6, var7, var8, var9); + } + + public Texture(String var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, int var9, BufferedImage var10) { + this(var1, var2, var3, var4, var5, var6, var7, var8, var9); + if(var10 == null) { + if(var3 != -1 && var4 != -1) { + byte[] var11 = new byte[var3 * var4 * var5 * 4]; + + for(int var12 = 0; var12 < var11.length; ++var12) { + var11[var12] = 0; + } + + this.textureData = ByteBuffer.allocateDirect(var11.length); + this.textureData.clear(); + this.textureData.put(var11); + this.textureData.position(0).limit(var11.length); + if(this.autoCreate) { + this.uploadTexture(); + } else { + this.textureNotModified = false; + } + } else { + this.transferred = false; + } + } else { + this.transferred = true; + this.transferFromImage(var10); + if(var2 != 2) { + this.uploadTexture(); + this.autoCreate = false; + } + } + + } + + public final Rect2i getTextureRect() { + return this.textureRect; + } + + public void fillRect(Rect2i var1, int var2) { + if(this.textureTarget != '\u806f') { + Rect2i var3 = new Rect2i(0, 0, this.width, this.height); + var3.intersection(var1); + this.textureData.position(0); + + for(int var4 = var3.getRectY(); var4 < var3.getRectY() + var3.getRectHeight(); ++var4) { + int var5 = var4 * this.width * 4; + + for(int var6 = var3.getRectX(); var6 < var3.getRectX() + var3.getRectWidth(); ++var6) { + this.textureData.put(var5 + var6 * 4 + 0, (byte)(var2 >> 24 & 255)); + this.textureData.put(var5 + var6 * 4 + 1, (byte)(var2 >> 16 & 255)); + this.textureData.put(var5 + var6 * 4 + 2, (byte)(var2 >> 8 & 255)); + this.textureData.put(var5 + var6 * 4 + 3, (byte)(var2 >> 0 & 255)); + } + } + + if(this.autoCreate) { + this.uploadTexture(); + } else { + this.textureNotModified = false; + } + + } + } + + public void writeImage(String var1) { + BufferedImage var2 = new BufferedImage(this.width, this.height, 2); + ByteBuffer var3 = this.getTextureData(); + byte[] var4 = new byte[this.width * this.height * 4]; + var3.position(0); + var3.get(var4); + + for(int var5 = 0; var5 < this.width; ++var5) { + for(int var6 = 0; var6 < this.height; ++var6) { + int var7 = var6 * this.width * 4 + var5 * 4; + byte var8 = 0; + int var10 = var8 | (var4[var7 + 2] & 255) << 0; + var10 |= (var4[var7 + 1] & 255) << 8; + var10 |= (var4[var7 + 0] & 255) << 16; + var10 |= (var4[var7 + 3] & 255) << 24; + var2.setRGB(var5, var6, var10); + } + } + + this.textureData.position(this.width * this.height * 4); + + try { + ImageIO.write(var2, "png", new File(Minecraft.getMinecraftDir(), var1)); + } catch (IOException var9) { + var9.printStackTrace(); + } + + } + + public void copyFrom(int var1, int var2, Texture var3, boolean var4) { + if(this.textureTarget != '\u806f') { + ByteBuffer var5 = var3.getTextureData(); + this.textureData.position(0); + var5.position(0); + + for(int var6 = 0; var6 < var3.getHeight(); ++var6) { + int var7 = var2 + var6; + int var8 = var6 * var3.getWidth() * 4; + int var9 = var7 * this.width * 4; + if(var4) { + var7 = var2 + (var3.getHeight() - var6); + } + + for(int var10 = 0; var10 < var3.getWidth(); ++var10) { + int var11 = var9 + (var10 + var1) * 4; + int var12 = var8 + var10 * 4; + if(var4) { + var11 = var1 + var10 * this.width * 4 + var7 * 4; + } + + this.textureData.put(var11 + 0, var5.get(var12 + 0)); + this.textureData.put(var11 + 1, var5.get(var12 + 1)); + this.textureData.put(var11 + 2, var5.get(var12 + 2)); + this.textureData.put(var11 + 3, var5.get(var12 + 3)); + } + } + + this.textureData.position(this.width * this.height * 4); + if(this.autoCreate) { + this.uploadTexture(); + } else { + this.textureNotModified = false; + } + + } + } + + public void func_104062_b(int var1, int var2, Texture var3) { + GL11.glBindTexture(this.textureTarget, this.glTextureId); + GL11.glTexSubImage2D(this.textureTarget, 0, var1, var2, var3.getWidth(), var3.getHeight(), this.textureFormat, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)((ByteBuffer)var3.getTextureData().position(0))); + this.textureNotModified = true; + } + + public void transferFromImage(BufferedImage var1) { + if(this.textureTarget != '\u806f') { + int var2 = var1.getWidth(); + int var3 = var1.getHeight(); + if(var2 <= this.width && var3 <= this.height) { + int[] var4 = new int[]{3, 0, 1, 2}; + int[] var5 = new int[]{3, 2, 1, 0}; + int[] var6 = this.textureFormat == '\u80e1' ? var5 : var4; + int[] var7 = new int[this.width * this.height]; + int var8 = var1.getTransparency(); + var1.getRGB(0, 0, this.width, this.height, var7, 0, var2); + byte[] var9 = new byte[this.width * this.height * 4]; + + for(int var10 = 0; var10 < this.height; ++var10) { + for(int var11 = 0; var11 < this.width; ++var11) { + int var12 = var10 * this.width + var11; + int var13 = var12 * 4; + var9[var13 + var6[0]] = (byte)(var7[var12] >> 24 & 255); + var9[var13 + var6[1]] = (byte)(var7[var12] >> 16 & 255); + var9[var13 + var6[2]] = (byte)(var7[var12] >> 8 & 255); + var9[var13 + var6[3]] = (byte)(var7[var12] >> 0 & 255); + } + } + + this.textureData = ByteBuffer.allocateDirect(var9.length); + this.textureData.clear(); + this.textureData.put(var9); + this.textureData.limit(var9.length); + if(this.autoCreate) { + this.uploadTexture(); + } else { + this.textureNotModified = false; + } + + } else { + Minecraft.getMinecraft().getLogAgent().logWarning("transferFromImage called with a BufferedImage with dimensions (" + var2 + ", " + var3 + ") larger than the Texture dimensions (" + this.width + ", " + this.height + "). Ignoring."); + } + } + } + + public int getTextureId() { + return this.textureId; + } + + public int getGlTextureId() { + return this.glTextureId; + } + + public int getWidth() { + return this.width; + } + + public int getHeight() { + return this.height; + } + + public String getTextureName() { + return this.textureName; + } + + public void bindTexture(int var1) { + if(this.textureDepth == 1) { + GL11.glEnable(GL11.GL_TEXTURE_2D); + } else { + GL11.glEnable(GL12.GL_TEXTURE_3D); + } + + OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit + var1); + GL11.glBindTexture(this.textureTarget, this.glTextureId); + if(!this.textureNotModified) { + this.uploadTexture(); + } + + } + + public void uploadTexture() { + this.textureData.flip(); + if(this.height != 1 && this.textureDepth != 1) { + GL12.glTexImage3D(this.textureTarget, 0, this.textureFormat, this.width, this.height, this.textureDepth, 0, this.textureFormat, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)this.textureData); + } else if(this.height != 1) { + GL11.glTexImage2D(this.textureTarget, 0, this.textureFormat, this.width, this.height, 0, this.textureFormat, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)this.textureData); + } else { + GL11.glTexImage1D(this.textureTarget, 0, this.textureFormat, this.width, 0, this.textureFormat, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)this.textureData); + } + + this.textureNotModified = true; + } + + public ByteBuffer getTextureData() { + return this.textureData; + } +} diff --git a/src/net/minecraft/src/TextureClock.java b/src/net/minecraft/src/TextureClock.java new file mode 100644 index 0000000..45a68cf --- /dev/null +++ b/src/net/minecraft/src/TextureClock.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +public class TextureClock extends TextureStitched { + private double field_94239_h; + private double field_94240_i; + + public TextureClock() { + super("compass"); + } + + public void updateAnimation() { + Minecraft var1 = Minecraft.getMinecraft(); + double var2 = 0.0D; + if(var1.theWorld != null && var1.thePlayer != null) { + float var4 = var1.theWorld.getCelestialAngle(1.0F); + var2 = (double)var4; + if(!var1.theWorld.provider.isSurfaceWorld()) { + var2 = Math.random(); + } + } + + double var7; + for(var7 = var2 - this.field_94239_h; var7 < -0.5D; ++var7) { + } + + while(var7 >= 0.5D) { + --var7; + } + + if(var7 < -1.0D) { + var7 = -1.0D; + } + + if(var7 > 1.0D) { + var7 = 1.0D; + } + + this.field_94240_i += var7 * 0.1D; + this.field_94240_i *= 0.8D; + this.field_94239_h += this.field_94240_i; + + int var6; + for(var6 = (int)((this.field_94239_h + 1.0D) * (double)this.textureList.size()) % this.textureList.size(); var6 < 0; var6 = (var6 + this.textureList.size()) % this.textureList.size()) { + } + + if(var6 != this.frameCounter) { + this.frameCounter = var6; + this.textureSheet.copyFrom(this.originX, this.originY, (Texture)this.textureList.get(this.frameCounter), this.rotated); + } + + } +} diff --git a/src/net/minecraft/src/TextureCompass.java b/src/net/minecraft/src/TextureCompass.java new file mode 100644 index 0000000..de1c335 --- /dev/null +++ b/src/net/minecraft/src/TextureCompass.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +public class TextureCompass extends TextureStitched { + public static TextureCompass compassTexture; + public double currentAngle; + public double angleDelta; + + public TextureCompass() { + super("compass"); + compassTexture = this; + } + + public void updateAnimation() { + Minecraft var1 = Minecraft.getMinecraft(); + if(var1.theWorld != null && var1.thePlayer != null) { + this.updateCompass(var1.theWorld, var1.thePlayer.posX, var1.thePlayer.posZ, (double)var1.thePlayer.rotationYaw, false, false); + } else { + this.updateCompass((World)null, 0.0D, 0.0D, 0.0D, true, false); + } + + } + + public void updateCompass(World var1, double var2, double var4, double var6, boolean var8, boolean var9) { + double var10 = 0.0D; + if(var1 != null && !var8) { + ChunkCoordinates var12 = var1.getSpawnPoint(); + double var13 = (double)var12.posX - var2; + double var15 = (double)var12.posZ - var4; + var6 %= 360.0D; + var10 = -((var6 - 90.0D) * Math.PI / 180.0D - Math.atan2(var15, var13)); + if(!var1.provider.isSurfaceWorld()) { + var10 = Math.random() * (double)((float)Math.PI) * 2.0D; + } + } + + if(var9) { + this.currentAngle = var10; + } else { + double var17; + for(var17 = var10 - this.currentAngle; var17 < -Math.PI; var17 += Math.PI * 2.0D) { + } + + while(var17 >= Math.PI) { + var17 -= Math.PI * 2.0D; + } + + if(var17 < -1.0D) { + var17 = -1.0D; + } + + if(var17 > 1.0D) { + var17 = 1.0D; + } + + this.angleDelta += var17 * 0.1D; + this.angleDelta *= 0.8D; + this.currentAngle += this.angleDelta; + } + + int var18; + for(var18 = (int)((this.currentAngle / (Math.PI * 2.0D) + 1.0D) * (double)this.textureList.size()) % this.textureList.size(); var18 < 0; var18 = (var18 + this.textureList.size()) % this.textureList.size()) { + } + + if(var18 != this.frameCounter) { + this.frameCounter = var18; + this.textureSheet.copyFrom(this.originX, this.originY, (Texture)this.textureList.get(this.frameCounter), this.rotated); + } + + } +} diff --git a/src/net/minecraft/src/TextureManager.java b/src/net/minecraft/src/TextureManager.java new file mode 100644 index 0000000..c5d56a2 --- /dev/null +++ b/src/net/minecraft/src/TextureManager.java @@ -0,0 +1,106 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import javax.imageio.ImageIO; +import net.minecraft.client.Minecraft; + +public class TextureManager { + private static TextureManager instance; + private int nextTextureID = 0; + private final HashMap texturesMap = new HashMap(); + private final HashMap mapNameToId = new HashMap(); + + public static void init() { + instance = new TextureManager(); + } + + public static TextureManager instance() { + return instance; + } + + public int getNextTextureId() { + return this.nextTextureID++; + } + + public void registerTexture(String var1, Texture var2) { + this.mapNameToId.put(var1, Integer.valueOf(var2.getTextureId())); + if(!this.texturesMap.containsKey(Integer.valueOf(var2.getTextureId()))) { + this.texturesMap.put(Integer.valueOf(var2.getTextureId()), var2); + } + + } + + public void registerTexture(Texture var1) { + if(this.texturesMap.containsValue(var1)) { + Minecraft.getMinecraft().getLogAgent().logWarning("TextureManager.registerTexture called, but this texture has already been registered. ignoring."); + } else { + this.texturesMap.put(Integer.valueOf(var1.getTextureId()), var1); + } + } + + public Stitcher createStitcher(String var1) { + int var2 = Minecraft.getGLMaximumTextureSize(); + return new Stitcher(var1, var2, var2, true); + } + + public List createTexture(String var1) { + ArrayList var2 = new ArrayList(); + ITexturePack var3 = Minecraft.getMinecraft().texturePackList.getSelectedTexturePack(); + + try { + BufferedImage var9 = ImageIO.read(var3.getResourceAsStream("/" + var1)); + int var10 = var9.getHeight(); + int var11 = var9.getWidth(); + String var12 = this.getBasename(var1); + if(this.hasAnimationTxt(var1, var3)) { + int var13 = var11; + int var14 = var11; + int var15 = var10 / var11; + + for(int var16 = 0; var16 < var15; ++var16) { + Texture var17 = this.makeTexture(var12, 2, var13, var14, 10496, 6408, 9728, 9728, false, var9.getSubimage(0, var14 * var16, var13, var14)); + var2.add(var17); + } + } else if(var11 == var10) { + var2.add(this.makeTexture(var12, 2, var11, var10, 10496, 6408, 9728, 9728, false, var9)); + } else { + Minecraft.getMinecraft().getLogAgent().logWarning("TextureManager.createTexture: Skipping " + var1 + " because of broken aspect ratio and not animation"); + } + + return var2; + } catch (FileNotFoundException var18) { + Minecraft.getMinecraft().getLogAgent().logWarning("TextureManager.createTexture called for file " + var1 + ", but that file does not exist. Ignoring."); + } catch (IOException var19) { + Minecraft.getMinecraft().getLogAgent().logWarning("TextureManager.createTexture encountered an IOException when trying to read file " + var1 + ". Ignoring."); + } + + return var2; + } + + private String getBasename(String var1) { + File var2 = new File(var1); + return var2.getName().substring(0, var2.getName().lastIndexOf(46)); + } + + private boolean hasAnimationTxt(String var1, ITexturePack var2) { + String var3 = "/" + var1.substring(0, var1.lastIndexOf(46)) + ".txt"; + boolean var4 = var2.func_98138_b("/" + var1, false); + return Minecraft.getMinecraft().texturePackList.getSelectedTexturePack().func_98138_b(var3, !var4); + } + + public Texture makeTexture(String var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8, boolean var9, BufferedImage var10) { + Texture var11 = new Texture(var1, var2, var3, var4, var5, var6, var7, var8, var10); + this.registerTexture(var11); + return var11; + } + + public Texture createEmptyTexture(String var1, int var2, int var3, int var4, int var5) { + return this.makeTexture(var1, var2, var3, var4, 10496, var5, 9728, 9728, false, (BufferedImage)null); + } +} diff --git a/src/net/minecraft/src/TextureMap.java b/src/net/minecraft/src/TextureMap.java new file mode 100644 index 0000000..d380b92 --- /dev/null +++ b/src/net/minecraft/src/TextureMap.java @@ -0,0 +1,175 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import net.minecraft.client.Minecraft; + +public class TextureMap implements IconRegister { + private final int textureType; + private final String textureName; + private final String basePath; + private final String textureExt; + private final HashMap mapTexturesStiched = new HashMap(); + private BufferedImage missingImage = new BufferedImage(64, 64, 2); + private TextureStitched missingTextureStiched; + private Texture atlasTexture; + private final List listTextureStiched = new ArrayList(); + private final Map textureStichedMap = new HashMap(); + + public TextureMap(int var1, String var2, String var3, BufferedImage var4) { + this.textureType = var1; + this.textureName = var2; + this.basePath = var3; + this.textureExt = ".png"; + this.missingImage = var4; + } + + public void refreshTextures() { + this.textureStichedMap.clear(); + int var2; + int var3; + if(this.textureType == 0) { + Block[] var1 = Block.blocksList; + var2 = var1.length; + + for(var3 = 0; var3 < var2; ++var3) { + Block var4 = var1[var3]; + if(var4 != null) { + var4.registerIcons(this); + } + } + + Minecraft.getMinecraft().renderGlobal.registerDestroyBlockIcons(this); + RenderManager.instance.updateIcons(this); + } + + Item[] var19 = Item.itemsList; + var2 = var19.length; + + for(var3 = 0; var3 < var2; ++var3) { + Item var23 = var19[var3]; + if(var23 != null && var23.getSpriteNumber() == this.textureType) { + var23.registerIcons(this); + } + } + + HashMap var20 = new HashMap(); + Stitcher var21 = TextureManager.instance().createStitcher(this.textureName); + this.mapTexturesStiched.clear(); + this.listTextureStiched.clear(); + Texture var22 = TextureManager.instance().makeTexture("missingno", 2, this.missingImage.getWidth(), this.missingImage.getHeight(), 10496, 6408, 9728, 9728, false, this.missingImage); + StitchHolder var24 = new StitchHolder(var22); + var21.addStitchHolder(var24); + var20.put(var24, Arrays.asList(new Texture[]{var22})); + Iterator var5 = this.textureStichedMap.keySet().iterator(); + + while(var5.hasNext()) { + String var6 = (String)var5.next(); + String var7 = this.basePath + var6 + this.textureExt; + List var8 = TextureManager.instance().createTexture(var7); + if(!var8.isEmpty()) { + StitchHolder var9 = new StitchHolder((Texture)var8.get(0)); + var21.addStitchHolder(var9); + var20.put(var9, var8); + } + } + + try { + var21.doStitch(); + } catch (StitcherException var18) { + throw var18; + } + + this.atlasTexture = var21.getTexture(); + var5 = var21.getStichSlots().iterator(); + + while(var5.hasNext()) { + StitchSlot var25 = (StitchSlot)var5.next(); + StitchHolder var27 = var25.getStitchHolder(); + Texture var28 = var27.func_98150_a(); + String var29 = var28.getTextureName(); + List var10 = (List)var20.get(var27); + TextureStitched var11 = (TextureStitched)this.textureStichedMap.get(var29); + boolean var12 = false; + if(var11 == null) { + var12 = true; + var11 = TextureStitched.makeTextureStitched(var29); + if(!var29.equals("missingno")) { + Minecraft.getMinecraft().getLogAgent().logWarning("Couldn\'t find premade icon for " + var29 + " doing " + this.textureName); + } + } + + var11.init(this.atlasTexture, var10, var25.getOriginX(), var25.getOriginY(), var27.func_98150_a().getWidth(), var27.func_98150_a().getHeight(), var27.isRotated()); + this.mapTexturesStiched.put(var29, var11); + if(!var12) { + this.textureStichedMap.remove(var29); + } + + if(var10.size() > 1) { + this.listTextureStiched.add(var11); + String var13 = this.basePath + var29 + ".txt"; + ITexturePack var14 = Minecraft.getMinecraft().texturePackList.getSelectedTexturePack(); + boolean var15 = !var14.func_98138_b("/" + this.basePath + var29 + ".png", false); + + try { + InputStream var16 = var14.func_98137_a("/" + var13, var15); + Minecraft.getMinecraft().getLogAgent().logInfo("Found animation info for: " + var13); + var11.readAnimationInfo(new BufferedReader(new InputStreamReader(var16))); + } catch (IOException var17) { + } + } + } + + this.missingTextureStiched = (TextureStitched)this.mapTexturesStiched.get("missingno"); + var5 = this.textureStichedMap.values().iterator(); + + while(var5.hasNext()) { + TextureStitched var26 = (TextureStitched)var5.next(); + var26.copyFrom(this.missingTextureStiched); + } + + this.atlasTexture.writeImage("debug.stitched_" + this.textureName + ".png"); + this.atlasTexture.uploadTexture(); + } + + public void updateAnimations() { + Iterator var1 = this.listTextureStiched.iterator(); + + while(var1.hasNext()) { + TextureStitched var2 = (TextureStitched)var1.next(); + var2.updateAnimation(); + } + + } + + public Texture getTexture() { + return this.atlasTexture; + } + + public Icon registerIcon(String var1) { + if(var1 == null) { + (new RuntimeException("Don\'t register null!")).printStackTrace(); + } + + TextureStitched var2 = (TextureStitched)this.textureStichedMap.get(var1); + if(var2 == null) { + var2 = TextureStitched.makeTextureStitched(var1); + this.textureStichedMap.put(var1, var2); + } + + return var2; + } + + public Icon getMissingIcon() { + return this.missingTextureStiched; + } +} diff --git a/src/net/minecraft/src/TextureOffset.java b/src/net/minecraft/src/TextureOffset.java new file mode 100644 index 0000000..970830c --- /dev/null +++ b/src/net/minecraft/src/TextureOffset.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class TextureOffset { + public final int textureOffsetX; + public final int textureOffsetY; + + public TextureOffset(int var1, int var2) { + this.textureOffsetX = var1; + this.textureOffsetY = var2; + } +} diff --git a/src/net/minecraft/src/TexturePackCustom.java b/src/net/minecraft/src/TexturePackCustom.java new file mode 100644 index 0000000..0a766e4 --- /dev/null +++ b/src/net/minecraft/src/TexturePackCustom.java @@ -0,0 +1,74 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; +import java.util.Enumeration; +import java.util.zip.ZipEntry; +import java.util.zip.ZipException; +import java.util.zip.ZipFile; + +public class TexturePackCustom extends TexturePackImplementation { + private ZipFile texturePackZipFile; + + public TexturePackCustom(String var1, File var2, ITexturePack var3) { + super(var1, var2, var2.getName(), var3); + } + + public void deleteTexturePack(RenderEngine var1) { + super.deleteTexturePack(var1); + + try { + if(this.texturePackZipFile != null) { + this.texturePackZipFile.close(); + } + } catch (IOException var3) { + } + + this.texturePackZipFile = null; + } + + protected InputStream func_98139_b(String var1) throws IOException { + this.openTexturePackFile(); + ZipEntry var2 = this.texturePackZipFile.getEntry(var1.substring(1)); + if(var2 == null) { + throw new FileNotFoundException(var1); + } else { + return this.texturePackZipFile.getInputStream(var2); + } + } + + public boolean func_98140_c(String var1) { + try { + this.openTexturePackFile(); + return this.texturePackZipFile.getEntry(var1.substring(1)) != null; + } catch (Exception var3) { + return false; + } + } + + private void openTexturePackFile() throws IOException, ZipException { + if(this.texturePackZipFile == null) { + this.texturePackZipFile = new ZipFile(this.texturePackFile); + } + } + + public boolean isCompatible() { + try { + this.openTexturePackFile(); + Enumeration var1 = this.texturePackZipFile.entries(); + + while(var1.hasMoreElements()) { + ZipEntry var2 = (ZipEntry)var1.nextElement(); + if(var2.getName().startsWith("textures/")) { + return true; + } + } + } catch (Exception var3) { + } + + boolean var4 = this.func_98140_c("terrain.png") || this.func_98140_c("gui/items.png"); + return !var4; + } +} diff --git a/src/net/minecraft/src/TexturePackDefault.java b/src/net/minecraft/src/TexturePackDefault.java new file mode 100644 index 0000000..237b543 --- /dev/null +++ b/src/net/minecraft/src/TexturePackDefault.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +public class TexturePackDefault extends TexturePackImplementation { + public TexturePackDefault() { + super("default", (File)null, "Default", (ITexturePack)null); + } + + protected void loadDescription() { + this.firstDescriptionLine = "The default look of Minecraft"; + } + + public boolean func_98140_c(String var1) { + return TexturePackDefault.class.getResourceAsStream(var1) != null; + } + + public boolean isCompatible() { + return true; + } + + protected InputStream func_98139_b(String var1) throws IOException { + InputStream var2 = TexturePackDefault.class.getResourceAsStream(var1); + if(var2 == null) { + throw new FileNotFoundException(var1); + } else { + return var2; + } + } +} diff --git a/src/net/minecraft/src/TexturePackDownloadSuccess.java b/src/net/minecraft/src/TexturePackDownloadSuccess.java new file mode 100644 index 0000000..b1620e3 --- /dev/null +++ b/src/net/minecraft/src/TexturePackDownloadSuccess.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import java.io.File; + +class TexturePackDownloadSuccess implements IDownloadSuccess { + final TexturePackList texturePacks; + + TexturePackDownloadSuccess(TexturePackList var1) { + this.texturePacks = var1; + } + + public void onSuccess(File var1) { + if(TexturePackList.isDownloading(this.texturePacks)) { + TexturePackList.setSelectedTexturePack(this.texturePacks, new TexturePackCustom(TexturePackList.generateTexturePackID(this.texturePacks, var1), var1, TexturePackList.func_98143_h())); + TexturePackList.getMinecraft(this.texturePacks).scheduleTexturePackRefresh(); + } + } +} diff --git a/src/net/minecraft/src/TexturePackFolder.java b/src/net/minecraft/src/TexturePackFolder.java new file mode 100644 index 0000000..91bb7f1 --- /dev/null +++ b/src/net/minecraft/src/TexturePackFolder.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.io.InputStream; + +public class TexturePackFolder extends TexturePackImplementation { + public TexturePackFolder(String var1, File var2, ITexturePack var3) { + super(var1, var2, var2.getName(), var3); + } + + protected InputStream func_98139_b(String var1) throws IOException { + File var2 = new File(this.texturePackFile, var1.substring(1)); + if(!var2.exists()) { + throw new FileNotFoundException(var1); + } else { + return new BufferedInputStream(new FileInputStream(var2)); + } + } + + public boolean func_98140_c(String var1) { + File var2 = new File(this.texturePackFile, var1); + return var2.exists() && var2.isFile(); + } + + public boolean isCompatible() { + File var1 = new File(this.texturePackFile, "textures/"); + boolean var2 = var1.exists() && var1.isDirectory(); + boolean var3 = this.func_98140_c("terrain.png") || this.func_98140_c("gui/items.png"); + return var2 || !var3; + } +} diff --git a/src/net/minecraft/src/TexturePackImplementation.java b/src/net/minecraft/src/TexturePackImplementation.java new file mode 100644 index 0000000..0df33ce --- /dev/null +++ b/src/net/minecraft/src/TexturePackImplementation.java @@ -0,0 +1,145 @@ +package net.minecraft.src; + +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 javax.imageio.ImageIO; +import org.lwjgl.opengl.GL11; + +public abstract class TexturePackImplementation implements ITexturePack { + private final String texturePackID; + private final String texturePackFileName; + protected final File texturePackFile; + protected String firstDescriptionLine; + protected String secondDescriptionLine; + private final ITexturePack field_98141_g; + protected BufferedImage thumbnailImage; + private int thumbnailTextureName = -1; + + protected TexturePackImplementation(String var1, File var2, String var3, ITexturePack var4) { + this.texturePackID = var1; + this.texturePackFileName = var3; + this.texturePackFile = var2; + this.field_98141_g = var4; + this.loadThumbnailImage(); + this.loadDescription(); + } + + private static String trimStringToGUIWidth(String var0) { + if(var0 != null && var0.length() > 34) { + var0 = var0.substring(0, 34); + } + + return var0; + } + + private void loadThumbnailImage() { + InputStream var1 = null; + + try { + var1 = this.func_98137_a("/pack.png", false); + this.thumbnailImage = ImageIO.read(var1); + } catch (IOException var11) { + } finally { + try { + if(var1 != null) { + var1.close(); + } + } catch (IOException var10) { + } + + } + + } + + protected void loadDescription() { + InputStream var1 = null; + BufferedReader var2 = null; + + try { + var1 = this.func_98139_b("/pack.txt"); + var2 = new BufferedReader(new InputStreamReader(var1)); + this.firstDescriptionLine = trimStringToGUIWidth(var2.readLine()); + this.secondDescriptionLine = trimStringToGUIWidth(var2.readLine()); + } catch (IOException var12) { + } finally { + try { + if(var2 != null) { + var2.close(); + } + + if(var1 != null) { + var1.close(); + } + } catch (IOException var11) { + } + + } + + } + + public InputStream func_98137_a(String var1, boolean var2) throws IOException { + try { + return this.func_98139_b(var1); + } catch (IOException var4) { + if(this.field_98141_g != null && var2) { + return this.field_98141_g.func_98137_a(var1, true); + } else { + throw var4; + } + } + } + + public InputStream getResourceAsStream(String var1) throws IOException { + return this.func_98137_a(var1, true); + } + + protected abstract InputStream func_98139_b(String var1) throws IOException; + + public void deleteTexturePack(RenderEngine var1) { + if(this.thumbnailImage != null && this.thumbnailTextureName != -1) { + var1.deleteTexture(this.thumbnailTextureName); + } + + } + + public void bindThumbnailTexture(RenderEngine var1) { + if(this.thumbnailImage != null) { + if(this.thumbnailTextureName == -1) { + this.thumbnailTextureName = var1.allocateAndSetupTexture(this.thumbnailImage); + } + + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.thumbnailTextureName); + var1.resetBoundTexture(); + } else { + var1.bindTexture("/gui/unknown_pack.png"); + } + + } + + public boolean func_98138_b(String var1, boolean var2) { + boolean var3 = this.func_98140_c(var1); + return !var3 && var2 && this.field_98141_g != null ? this.field_98141_g.func_98138_b(var1, var2) : var3; + } + + public abstract boolean func_98140_c(String var1); + + public String getTexturePackID() { + return this.texturePackID; + } + + public String getTexturePackFileName() { + return this.texturePackFileName; + } + + public String getFirstDescriptionLine() { + return this.firstDescriptionLine; + } + + public String getSecondDescriptionLine() { + return this.secondDescriptionLine; + } +} diff --git a/src/net/minecraft/src/TexturePackList.java b/src/net/minecraft/src/TexturePackList.java new file mode 100644 index 0000000..c537713 --- /dev/null +++ b/src/net/minecraft/src/TexturePackList.java @@ -0,0 +1,178 @@ +package net.minecraft.src; + +import java.io.File; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import net.minecraft.client.Minecraft; + +public class TexturePackList { + private static final ITexturePack defaultTexturePack = new TexturePackDefault(); + private final Minecraft mc; + private final File texturePackDir; + private final File mpTexturePackFolder; + private List availableTexturePacks = new ArrayList(); + private Map texturePackCache = new HashMap(); + private ITexturePack selectedTexturePack; + private boolean isDownloading; + + public TexturePackList(File var1, Minecraft var2) { + this.mc = var2; + this.texturePackDir = new File(var1, "texturepacks"); + this.mpTexturePackFolder = new File(var1, "texturepacks-mp-cache"); + this.createTexturePackDirs(); + this.updateAvaliableTexturePacks(); + } + + private void createTexturePackDirs() { + if(!this.texturePackDir.isDirectory()) { + this.texturePackDir.delete(); + this.texturePackDir.mkdirs(); + } + + if(!this.mpTexturePackFolder.isDirectory()) { + this.mpTexturePackFolder.delete(); + this.mpTexturePackFolder.mkdirs(); + } + + } + + public boolean setTexturePack(ITexturePack var1) { + if(var1 == this.selectedTexturePack) { + return false; + } else { + this.isDownloading = false; + this.selectedTexturePack = var1; + this.mc.gameSettings.skin = var1.getTexturePackFileName(); + this.mc.gameSettings.saveOptions(); + return true; + } + } + + public void requestDownloadOfTexture(String var1) { + String var2 = var1.substring(var1.lastIndexOf("/") + 1); + if(var2.contains("?")) { + var2 = var2.substring(0, var2.indexOf("?")); + } + + if(var2.endsWith(".zip")) { + File var3 = new File(this.mpTexturePackFolder, var2); + this.downloadTexture(var1, var3); + } + } + + private void downloadTexture(String var1, File var2) { + HashMap var3 = new HashMap(); + GuiProgress var4 = new GuiProgress(); + var3.put("X-Minecraft-Username", this.mc.session.username); + var3.put("X-Minecraft-Version", "1.5.2"); + var3.put("X-Minecraft-Supported-Resolutions", "16"); + this.isDownloading = true; + this.mc.displayGuiScreen(var4); + HttpUtil.downloadTexturePack(var2, var1, new TexturePackDownloadSuccess(this), var3, 10000000, var4); + } + + public boolean getIsDownloading() { + return this.isDownloading; + } + + public void onDownloadFinished() { + this.isDownloading = false; + this.updateAvaliableTexturePacks(); + this.mc.scheduleTexturePackRefresh(); + } + + public void updateAvaliableTexturePacks() { + ArrayList var1 = new ArrayList(); + this.selectedTexturePack = defaultTexturePack; + var1.add(defaultTexturePack); + Iterator var2 = this.getTexturePackDirContents().iterator(); + + while(var2.hasNext()) { + File var3 = (File)var2.next(); + String var4 = this.generateTexturePackID(var3); + if(var4 != null) { + Object var5 = (ITexturePack)this.texturePackCache.get(var4); + if(var5 == null) { + var5 = var3.isDirectory() ? new TexturePackFolder(var4, var3, defaultTexturePack) : new TexturePackCustom(var4, var3, defaultTexturePack); + this.texturePackCache.put(var4, var5); + } + + if(((ITexturePack)var5).getTexturePackFileName().equals(this.mc.gameSettings.skin)) { + this.selectedTexturePack = (ITexturePack)var5; + } + + var1.add(var5); + } + } + + this.availableTexturePacks.removeAll(var1); + var2 = this.availableTexturePacks.iterator(); + + while(var2.hasNext()) { + ITexturePack var6 = (ITexturePack)var2.next(); + var6.deleteTexturePack(this.mc.renderEngine); + this.texturePackCache.remove(var6.getTexturePackID()); + } + + this.availableTexturePacks = var1; + } + + private String generateTexturePackID(File var1) { + return var1.isFile() && var1.getName().toLowerCase().endsWith(".zip") ? var1.getName() + ":" + var1.length() + ":" + var1.lastModified() : (var1.isDirectory() && (new File(var1, "pack.txt")).exists() ? var1.getName() + ":folder:" + var1.lastModified() : null); + } + + private List getTexturePackDirContents() { + return this.texturePackDir.exists() && this.texturePackDir.isDirectory() ? Arrays.asList(this.texturePackDir.listFiles()) : Collections.emptyList(); + } + + public List availableTexturePacks() { + return Collections.unmodifiableList(this.availableTexturePacks); + } + + public ITexturePack getSelectedTexturePack() { + return this.selectedTexturePack; + } + + public boolean func_77300_f() { + if(!this.mc.gameSettings.serverTextures) { + return false; + } else { + ServerData var1 = this.mc.getServerData(); + return var1 == null ? true : var1.func_78840_c(); + } + } + + public boolean getAcceptsTextures() { + if(!this.mc.gameSettings.serverTextures) { + return false; + } else { + ServerData var1 = this.mc.getServerData(); + return var1 == null ? false : var1.getAcceptsTextures(); + } + } + + static boolean isDownloading(TexturePackList var0) { + return var0.isDownloading; + } + + static ITexturePack setSelectedTexturePack(TexturePackList var0, ITexturePack var1) { + return var0.selectedTexturePack = var1; + } + + static String generateTexturePackID(TexturePackList var0, File var1) { + return var0.generateTexturePackID(var1); + } + + static ITexturePack func_98143_h() { + return defaultTexturePack; + } + + static Minecraft getMinecraft(TexturePackList var0) { + return var0.mc; + } +} diff --git a/src/net/minecraft/src/TextureStitched.java b/src/net/minecraft/src/TextureStitched.java new file mode 100644 index 0000000..186dcdd --- /dev/null +++ b/src/net/minecraft/src/TextureStitched.java @@ -0,0 +1,159 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.util.ArrayList; +import java.util.List; + +public class TextureStitched implements Icon { + private final String textureName; + protected Texture textureSheet; + protected List textureList; + private List listAnimationTuples; + protected boolean rotated; + protected int originX; + protected int originY; + private int width; + private int height; + private float minU; + private float maxU; + private float minV; + private float maxV; + private float widthNorm; + private float heightNorm; + protected int frameCounter = 0; + protected int tickCounter = 0; + + public static TextureStitched makeTextureStitched(String var0) { + return (TextureStitched)("clock".equals(var0) ? new TextureClock() : ("compass".equals(var0) ? new TextureCompass() : new TextureStitched(var0))); + } + + protected TextureStitched(String var1) { + this.textureName = var1; + } + + public void init(Texture var1, List var2, int var3, int var4, int var5, int var6, boolean var7) { + this.textureSheet = var1; + this.textureList = var2; + this.originX = var3; + this.originY = var4; + this.width = var5; + this.height = var6; + this.rotated = var7; + float var8 = 0.01F / (float)var1.getWidth(); + float var9 = 0.01F / (float)var1.getHeight(); + this.minU = (float)var3 / (float)var1.getWidth() + var8; + this.maxU = (float)(var3 + var5) / (float)var1.getWidth() - var8; + this.minV = (float)var4 / (float)var1.getHeight() + var9; + this.maxV = (float)(var4 + var6) / (float)var1.getHeight() - var9; + this.widthNorm = (float)var5 / 16.0F; + this.heightNorm = (float)var6 / 16.0F; + } + + public void copyFrom(TextureStitched var1) { + this.init(var1.textureSheet, var1.textureList, var1.originX, var1.originY, var1.width, var1.height, var1.rotated); + } + + public int getOriginX() { + return this.originX; + } + + public int getOriginY() { + return this.originY; + } + + public float getMinU() { + return this.minU; + } + + public float getMaxU() { + return this.maxU; + } + + public float getInterpolatedU(double var1) { + float var3 = this.maxU - this.minU; + return this.minU + var3 * ((float)var1 / 16.0F); + } + + public float getMinV() { + return this.minV; + } + + public float getMaxV() { + return this.maxV; + } + + public float getInterpolatedV(double var1) { + float var3 = this.maxV - this.minV; + return this.minV + var3 * ((float)var1 / 16.0F); + } + + public String getIconName() { + return this.textureName; + } + + public int getSheetWidth() { + return this.textureSheet.getWidth(); + } + + public int getSheetHeight() { + return this.textureSheet.getHeight(); + } + + public void updateAnimation() { + if(this.listAnimationTuples != null) { + Tuple var1 = (Tuple)this.listAnimationTuples.get(this.frameCounter); + ++this.tickCounter; + if(this.tickCounter >= ((Integer)var1.getSecond()).intValue()) { + int var2 = ((Integer)var1.getFirst()).intValue(); + this.frameCounter = (this.frameCounter + 1) % this.listAnimationTuples.size(); + this.tickCounter = 0; + var1 = (Tuple)this.listAnimationTuples.get(this.frameCounter); + int var3 = ((Integer)var1.getFirst()).intValue(); + if(var2 != var3 && var3 >= 0 && var3 < this.textureList.size()) { + this.textureSheet.func_104062_b(this.originX, this.originY, (Texture)this.textureList.get(var3)); + } + } + } else { + int var4 = this.frameCounter; + this.frameCounter = (this.frameCounter + 1) % this.textureList.size(); + if(var4 != this.frameCounter) { + this.textureSheet.func_104062_b(this.originX, this.originY, (Texture)this.textureList.get(this.frameCounter)); + } + } + + } + + public void readAnimationInfo(BufferedReader var1) { + ArrayList var2 = new ArrayList(); + + try { + for(String var3 = var1.readLine(); var3 != null; var3 = var1.readLine()) { + var3 = var3.trim(); + if(var3.length() > 0) { + String[] var4 = var3.split(","); + String[] var5 = var4; + int var6 = var4.length; + + for(int var7 = 0; var7 < var6; ++var7) { + String var8 = var5[var7]; + int var9 = var8.indexOf(42); + if(var9 > 0) { + Integer var10 = new Integer(var8.substring(0, var9)); + Integer var11 = new Integer(var8.substring(var9 + 1)); + var2.add(new Tuple(var10, var11)); + } else { + var2.add(new Tuple(new Integer(var8), Integer.valueOf(1))); + } + } + } + } + } catch (Exception var12) { + System.err.println("Failed to read animation info for " + this.textureName + ": " + var12.getMessage()); + } + + if(!var2.isEmpty() && var2.size() < 600) { + this.listAnimationTuples = var2; + } + + } +} diff --git a/src/net/minecraft/src/TexturedQuad.java b/src/net/minecraft/src/TexturedQuad.java new file mode 100644 index 0000000..d67a195 --- /dev/null +++ b/src/net/minecraft/src/TexturedQuad.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +public class TexturedQuad { + public PositionTextureVertex[] vertexPositions; + public int nVertices; + private boolean invertNormal; + + public TexturedQuad(PositionTextureVertex[] var1) { + this.nVertices = 0; + this.invertNormal = false; + this.vertexPositions = var1; + this.nVertices = var1.length; + } + + public TexturedQuad(PositionTextureVertex[] var1, int var2, int var3, int var4, int var5, float var6, float var7) { + this(var1); + float var8 = 0.0F / var6; + float var9 = 0.0F / var7; + var1[0] = var1[0].setTexturePosition((float)var4 / var6 - var8, (float)var3 / var7 + var9); + var1[1] = var1[1].setTexturePosition((float)var2 / var6 + var8, (float)var3 / var7 + var9); + var1[2] = var1[2].setTexturePosition((float)var2 / var6 + var8, (float)var5 / var7 - var9); + var1[3] = var1[3].setTexturePosition((float)var4 / var6 - var8, (float)var5 / var7 - var9); + } + + public void flipFace() { + PositionTextureVertex[] var1 = new PositionTextureVertex[this.vertexPositions.length]; + + for(int var2 = 0; var2 < this.vertexPositions.length; ++var2) { + var1[var2] = this.vertexPositions[this.vertexPositions.length - var2 - 1]; + } + + this.vertexPositions = var1; + } + + public void draw(Tessellator var1, float var2) { + Vec3 var3 = this.vertexPositions[1].vector3D.subtract(this.vertexPositions[0].vector3D); + Vec3 var4 = this.vertexPositions[1].vector3D.subtract(this.vertexPositions[2].vector3D); + Vec3 var5 = var4.crossProduct(var3).normalize(); + var1.startDrawingQuads(); + if(this.invertNormal) { + var1.setNormal(-((float)var5.xCoord), -((float)var5.yCoord), -((float)var5.zCoord)); + } else { + var1.setNormal((float)var5.xCoord, (float)var5.yCoord, (float)var5.zCoord); + } + + for(int var6 = 0; var6 < 4; ++var6) { + PositionTextureVertex var7 = this.vertexPositions[var6]; + var1.addVertexWithUV((double)((float)var7.vector3D.xCoord * var2), (double)((float)var7.vector3D.yCoord * var2), (double)((float)var7.vector3D.zCoord * var2), (double)var7.texturePositionX, (double)var7.texturePositionY); + } + + var1.draw(); + } +} diff --git a/src/net/minecraft/src/ThreadClientSleep.java b/src/net/minecraft/src/ThreadClientSleep.java new file mode 100644 index 0000000..a0ddd5e --- /dev/null +++ b/src/net/minecraft/src/ThreadClientSleep.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +public class ThreadClientSleep extends Thread { + final Minecraft mc; + + public ThreadClientSleep(Minecraft var1, String var2) { + super(var2); + this.mc = var1; + } + + public void run() { + while(this.mc.running) { + try { + Thread.sleep(2147483647L); + } catch (InterruptedException var2) { + } + } + + } +} diff --git a/src/net/minecraft/src/ThreadConnectToOnlineServer.java b/src/net/minecraft/src/ThreadConnectToOnlineServer.java new file mode 100644 index 0000000..0f01c14 --- /dev/null +++ b/src/net/minecraft/src/ThreadConnectToOnlineServer.java @@ -0,0 +1,115 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.net.ConnectException; +import java.net.SocketTimeoutException; +import java.net.UnknownHostException; + +class ThreadConnectToOnlineServer extends Thread { + final McoServer field_96597_a; + final GuiSlotOnlineServerList field_96596_b; + + ThreadConnectToOnlineServer(GuiSlotOnlineServerList var1, McoServer var2) { + this.field_96596_b = var1; + this.field_96597_a = var2; + } + + public void run() { + boolean var27 = false; + + Object var41; + label194: { + label195: { + label196: { + label197: { + label198: { + try { + var27 = true; + if(!this.field_96597_a.field_96411_l) { + this.field_96597_a.field_96411_l = true; + this.field_96597_a.field_96412_m = -2L; + this.field_96597_a.field_96414_k = ""; + GuiScreenOnlineServers.func_101014_j(); + long var1 = System.nanoTime(); + GuiScreenOnlineServers.func_101002_a(this.field_96596_b.field_96294_a, this.field_96597_a); + long var3 = System.nanoTime(); + this.field_96597_a.field_96412_m = (var3 - var1) / 1000000L; + var27 = false; + } else if(this.field_96597_a.field_102022_m) { + this.field_96597_a.field_102022_m = false; + GuiScreenOnlineServers.func_101002_a(this.field_96596_b.field_96294_a, this.field_96597_a); + var27 = false; + } else { + var27 = false; + } + break label194; + } catch (UnknownHostException var35) { + this.field_96597_a.field_96412_m = -1L; + var27 = false; + } catch (SocketTimeoutException var36) { + this.field_96597_a.field_96412_m = -1L; + var27 = false; + break label198; + } catch (ConnectException var37) { + this.field_96597_a.field_96412_m = -1L; + var27 = false; + break label197; + } catch (IOException var38) { + this.field_96597_a.field_96412_m = -1L; + var27 = false; + break label196; + } catch (Exception var39) { + this.field_96597_a.field_96412_m = -1L; + var27 = false; + break label195; + } finally { + if(var27) { + Object var12 = GuiScreenOnlineServers.func_101007_h(); + synchronized(var12) { + GuiScreenOnlineServers.func_101013_k(); + } + } + } + + var41 = GuiScreenOnlineServers.func_101007_h(); + synchronized(var41) { + GuiScreenOnlineServers.func_101013_k(); + return; + } + } + + var41 = GuiScreenOnlineServers.func_101007_h(); + synchronized(var41) { + GuiScreenOnlineServers.func_101013_k(); + return; + } + } + + var41 = GuiScreenOnlineServers.func_101007_h(); + synchronized(var41) { + GuiScreenOnlineServers.func_101013_k(); + return; + } + } + + var41 = GuiScreenOnlineServers.func_101007_h(); + synchronized(var41) { + GuiScreenOnlineServers.func_101013_k(); + return; + } + } + + var41 = GuiScreenOnlineServers.func_101007_h(); + synchronized(var41) { + GuiScreenOnlineServers.func_101013_k(); + return; + } + } + + var41 = GuiScreenOnlineServers.func_101007_h(); + synchronized(var41) { + GuiScreenOnlineServers.func_101013_k(); + } + + } +} diff --git a/src/net/minecraft/src/ThreadConnectToServer.java b/src/net/minecraft/src/ThreadConnectToServer.java new file mode 100644 index 0000000..e2ec8a7 --- /dev/null +++ b/src/net/minecraft/src/ThreadConnectToServer.java @@ -0,0 +1,47 @@ +package net.minecraft.src; + +import java.net.ConnectException; +import java.net.UnknownHostException; + +class ThreadConnectToServer extends Thread { + final String ip; + final int port; + final GuiConnecting connectingGui; + + ThreadConnectToServer(GuiConnecting var1, String var2, int var3) { + this.connectingGui = var1; + this.ip = var2; + this.port = var3; + } + + public void run() { + try { + GuiConnecting.setNetClientHandler(this.connectingGui, new NetClientHandler(GuiConnecting.func_74256_a(this.connectingGui), this.ip, this.port)); + if(GuiConnecting.isCancelled(this.connectingGui)) { + return; + } + + GuiConnecting.getNetClientHandler(this.connectingGui).addToSendQueue(new Packet2ClientProtocol(61, GuiConnecting.func_74254_c(this.connectingGui).session.username, this.ip, this.port)); + } catch (UnknownHostException var2) { + if(GuiConnecting.isCancelled(this.connectingGui)) { + return; + } + + GuiConnecting.func_74250_f(this.connectingGui).displayGuiScreen(new GuiDisconnected(GuiConnecting.func_98097_e(this.connectingGui), "connect.failed", "disconnect.genericReason", new Object[]{"Unknown host \'" + this.ip + "\'"})); + } catch (ConnectException var3) { + if(GuiConnecting.isCancelled(this.connectingGui)) { + return; + } + + GuiConnecting.func_74251_g(this.connectingGui).displayGuiScreen(new GuiDisconnected(GuiConnecting.func_98097_e(this.connectingGui), "connect.failed", "disconnect.genericReason", new Object[]{var3.getMessage()})); + } catch (Exception var4) { + if(GuiConnecting.isCancelled(this.connectingGui)) { + return; + } + + var4.printStackTrace(); + GuiConnecting.func_98096_h(this.connectingGui).displayGuiScreen(new GuiDisconnected(GuiConnecting.func_98097_e(this.connectingGui), "connect.failed", "disconnect.genericReason", new Object[]{var4.toString()})); + } + + } +} diff --git a/src/net/minecraft/src/ThreadDownloadImage.java b/src/net/minecraft/src/ThreadDownloadImage.java new file mode 100644 index 0000000..a69fd47 --- /dev/null +++ b/src/net/minecraft/src/ThreadDownloadImage.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import java.net.HttpURLConnection; +import java.net.URL; +import javax.imageio.ImageIO; + +class ThreadDownloadImage extends Thread { + final String location; + final IImageBuffer buffer; + final ThreadDownloadImageData imageData; + + ThreadDownloadImage(ThreadDownloadImageData var1, String var2, IImageBuffer var3) { + this.imageData = var1; + this.location = var2; + this.buffer = var3; + } + + public void run() { + HttpURLConnection var1 = null; + + try { + URL var2 = new URL(this.location); + var1 = (HttpURLConnection)var2.openConnection(); + var1.setDoInput(true); + var1.setDoOutput(false); + var1.connect(); + if(var1.getResponseCode() / 100 != 4) { + if(this.buffer == null) { + this.imageData.image = ImageIO.read(var1.getInputStream()); + } else { + this.imageData.image = this.buffer.parseUserSkin(ImageIO.read(var1.getInputStream())); + } + + return; + } + } catch (Exception var6) { + var6.printStackTrace(); + return; + } finally { + var1.disconnect(); + } + + } +} diff --git a/src/net/minecraft/src/ThreadDownloadImageData.java b/src/net/minecraft/src/ThreadDownloadImageData.java new file mode 100644 index 0000000..c863060 --- /dev/null +++ b/src/net/minecraft/src/ThreadDownloadImageData.java @@ -0,0 +1,14 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; + +public class ThreadDownloadImageData { + public BufferedImage image; + public int referenceCount = 1; + public int textureName = -1; + public boolean textureSetupComplete = false; + + public ThreadDownloadImageData(String var1, IImageBuffer var2) { + (new ThreadDownloadImage(this, var1, var2)).start(); + } +} diff --git a/src/net/minecraft/src/ThreadDownloadResources.java b/src/net/minecraft/src/ThreadDownloadResources.java new file mode 100644 index 0000000..539ae7d --- /dev/null +++ b/src/net/minecraft/src/ThreadDownloadResources.java @@ -0,0 +1,135 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.net.URL; +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import net.minecraft.client.Minecraft; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +public class ThreadDownloadResources extends Thread { + public File resourcesFolder; + private Minecraft mc; + private boolean closing = false; + + public ThreadDownloadResources(File var1, Minecraft var2) { + this.mc = var2; + this.setName("Resource download thread"); + this.setDaemon(true); + this.resourcesFolder = new File(var1, "resources/"); + if(!this.resourcesFolder.exists() && !this.resourcesFolder.mkdirs()) { + throw new RuntimeException("The working directory could not be created: " + this.resourcesFolder); + } + } + + public void run() { + try { + URL var1 = new URL("http://s3.amazonaws.com/MinecraftResources/"); + DocumentBuilderFactory var2 = DocumentBuilderFactory.newInstance(); + DocumentBuilder var3 = var2.newDocumentBuilder(); + Document var4 = var3.parse(var1.openStream()); + NodeList var5 = var4.getElementsByTagName("Contents"); + + for(int var6 = 0; var6 < 2; ++var6) { + for(int var7 = 0; var7 < var5.getLength(); ++var7) { + Node var8 = var5.item(var7); + if(var8.getNodeType() == 1) { + Element var9 = (Element)var8; + String var10 = var9.getElementsByTagName("Key").item(0).getChildNodes().item(0).getNodeValue(); + long var11 = Long.parseLong(var9.getElementsByTagName("Size").item(0).getChildNodes().item(0).getNodeValue()); + if(var11 > 0L) { + this.downloadAndInstallResource(var1, var10, var11, var6); + if(this.closing) { + return; + } + } + } + } + } + } catch (Exception var13) { + this.loadResource(this.resourcesFolder, ""); + var13.printStackTrace(); + } + + } + + public void reloadResources() { + this.loadResource(this.resourcesFolder, ""); + } + + private void loadResource(File var1, String var2) { + File[] var3 = var1.listFiles(); + + for(int var4 = 0; var4 < var3.length; ++var4) { + if(var3[var4].isDirectory()) { + this.loadResource(var3[var4], var2 + var3[var4].getName() + "/"); + } else { + try { + this.mc.installResource(var2 + var3[var4].getName(), var3[var4]); + } catch (Exception var6) { + this.mc.getLogAgent().logWarning("Failed to add " + var2 + var3[var4].getName() + " in resources"); + } + } + } + + } + + private void downloadAndInstallResource(URL var1, String var2, long var3, int var5) { + try { + int var6 = var2.indexOf("/"); + String var7 = var2.substring(0, var6); + if(var7.equalsIgnoreCase("sound3")) { + if(var5 != 0) { + return; + } + } else if(var5 != 1) { + return; + } + + File var8 = new File(this.resourcesFolder, var2); + if(!var8.exists() || var8.length() != var3) { + var8.getParentFile().mkdirs(); + String var9 = var2.replaceAll(" ", "%20"); + this.downloadResource(new URL(var1, var9), var8, var3); + if(this.closing) { + return; + } + } + + this.mc.installResource(var2, var8); + } catch (Exception var10) { + var10.printStackTrace(); + } + + } + + private void downloadResource(URL var1, File var2, long var3) throws IOException { + byte[] var5 = new byte[4096]; + DataInputStream var6 = new DataInputStream(var1.openStream()); + DataOutputStream var7 = new DataOutputStream(new FileOutputStream(var2)); + boolean var8 = false; + + do { + int var9 = var6.read(var5); + if(var9 < 0) { + var6.close(); + var7.close(); + return; + } + + var7.write(var5, 0, var9); + } while(!this.closing); + + } + + public void closeMinecraft() { + this.closing = true; + } +} diff --git a/src/net/minecraft/src/ThreadLanServerFind.java b/src/net/minecraft/src/ThreadLanServerFind.java new file mode 100644 index 0000000..7d48138 --- /dev/null +++ b/src/net/minecraft/src/ThreadLanServerFind.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.InetAddress; +import java.net.MulticastSocket; +import java.net.SocketTimeoutException; +import net.minecraft.client.Minecraft; + +public class ThreadLanServerFind extends Thread { + private final LanServerList localServerList; + private final InetAddress broadcastAddress; + private final MulticastSocket socket; + + public ThreadLanServerFind(LanServerList var1) throws IOException { + super("LanServerDetector"); + this.localServerList = var1; + 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[] var2 = new byte[1024]; + + while(!this.isInterrupted()) { + DatagramPacket var1 = new DatagramPacket(var2, var2.length); + + try { + this.socket.receive(var1); + } catch (SocketTimeoutException var5) { + continue; + } catch (IOException var6) { + var6.printStackTrace(); + break; + } + + String var3 = new String(var1.getData(), var1.getOffset(), var1.getLength()); + Minecraft.getMinecraft().getLogAgent().logFine(var1.getAddress() + ": " + var3); + this.localServerList.func_77551_a(var3, var1.getAddress()); + } + + try { + this.socket.leaveGroup(this.broadcastAddress); + } catch (IOException var4) { + } + + this.socket.close(); + } +} diff --git a/src/net/minecraft/src/ThreadLanServerPing.java b/src/net/minecraft/src/ThreadLanServerPing.java new file mode 100644 index 0000000..b5dbcdd --- /dev/null +++ b/src/net/minecraft/src/ThreadLanServerPing.java @@ -0,0 +1,83 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.net.DatagramPacket; +import java.net.DatagramSocket; +import java.net.InetAddress; +import net.minecraft.client.Minecraft; + +public class ThreadLanServerPing extends Thread { + private final String motd; + private final DatagramSocket socket; + private boolean isStopping = true; + private final String address; + + public ThreadLanServerPing(String var1, String var2) throws IOException { + super("LanServerPinger"); + this.motd = var1; + this.address = var2; + this.setDaemon(true); + this.socket = new DatagramSocket(); + } + + public void run() { + String var1 = getPingResponse(this.motd, this.address); + byte[] var2 = var1.getBytes(); + + while(!this.isInterrupted() && this.isStopping) { + try { + InetAddress var3 = InetAddress.getByName("224.0.2.60"); + DatagramPacket var4 = new DatagramPacket(var2, var2.length, var3, 4445); + this.socket.send(var4); + } catch (IOException var6) { + Minecraft.getMinecraft().getLogAgent().logWarning("LanServerPinger: " + var6.getMessage()); + break; + } + + try { + sleep(1500L); + } catch (InterruptedException var5) { + } + } + + } + + public void interrupt() { + super.interrupt(); + this.isStopping = false; + } + + public static String getPingResponse(String var0, String var1) { + return "[MOTD]" + var0 + "[/MOTD][AD]" + var1 + "[/AD]"; + } + + public static String getMotdFromPingResponse(String var0) { + int var1 = var0.indexOf("[MOTD]"); + if(var1 < 0) { + return "missing no"; + } else { + int var2 = var0.indexOf("[/MOTD]", var1 + "[MOTD]".length()); + return var2 < var1 ? "missing no" : var0.substring(var1 + "[MOTD]".length(), var2); + } + } + + public static String getAdFromPingResponse(String var0) { + int var1 = var0.indexOf("[/MOTD]"); + if(var1 < 0) { + return null; + } else { + int var2 = var0.indexOf("[/MOTD]", var1 + "[/MOTD]".length()); + if(var2 >= 0) { + return null; + } else { + int var3 = var0.indexOf("[AD]", var1 + "[/MOTD]".length()); + if(var3 < 0) { + return null; + } else { + int var4 = var0.indexOf("[/AD]", var3 + "[AD]".length()); + return var4 < var3 ? null : var0.substring(var3 + "[AD]".length(), var4); + } + } + } + } +} diff --git a/src/net/minecraft/src/ThreadLoginVerifier.java b/src/net/minecraft/src/ThreadLoginVerifier.java new file mode 100644 index 0000000..c43d1e7 --- /dev/null +++ b/src/net/minecraft/src/ThreadLoginVerifier.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.math.BigInteger; +import java.net.URL; +import java.net.URLEncoder; + +class ThreadLoginVerifier extends Thread { + final NetLoginHandler loginHandler; + + ThreadLoginVerifier(NetLoginHandler var1) { + this.loginHandler = var1; + } + + public void run() { + try { + String var1 = (new BigInteger(CryptManager.getServerIdHash(NetLoginHandler.getServerId(this.loginHandler), NetLoginHandler.getLoginMinecraftServer(this.loginHandler).getKeyPair().getPublic(), NetLoginHandler.getSharedKey(this.loginHandler)))).toString(16); + URL var2 = new URL("http://session.minecraft.net/game/checkserver.jsp?user=" + URLEncoder.encode(NetLoginHandler.getClientUsername(this.loginHandler), "UTF-8") + "&serverId=" + URLEncoder.encode(var1, "UTF-8")); + BufferedReader var3 = new BufferedReader(new InputStreamReader(var2.openStream())); + String var4 = var3.readLine(); + var3.close(); + if(!"YES".equals(var4)) { + this.loginHandler.raiseErrorAndDisconnect("Failed to verify username!"); + return; + } + + NetLoginHandler.func_72531_a(this.loginHandler, true); + } catch (Exception var5) { + this.loginHandler.raiseErrorAndDisconnect("Failed to verify username! [internal error " + var5 + "]"); + var5.printStackTrace(); + } + + } +} diff --git a/src/net/minecraft/src/ThreadMinecraftServer.java b/src/net/minecraft/src/ThreadMinecraftServer.java new file mode 100644 index 0000000..17f7052 --- /dev/null +++ b/src/net/minecraft/src/ThreadMinecraftServer.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class ThreadMinecraftServer extends Thread { + final MinecraftServer theServer; + + public ThreadMinecraftServer(MinecraftServer var1, String var2) { + super(var2); + this.theServer = var1; + } + + public void run() { + this.theServer.run(); + } +} diff --git a/src/net/minecraft/src/ThreadOnlineConnect.java b/src/net/minecraft/src/ThreadOnlineConnect.java new file mode 100644 index 0000000..35aeb51 --- /dev/null +++ b/src/net/minecraft/src/ThreadOnlineConnect.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.net.ConnectException; +import java.net.UnknownHostException; + +class ThreadOnlineConnect extends Thread { + final String field_96595_a; + final int field_96593_b; + final TaskOnlineConnect field_96594_c; + + ThreadOnlineConnect(TaskOnlineConnect var1, String var2, int var3) { + this.field_96594_c = var1; + this.field_96595_a = var2; + this.field_96593_b = var3; + } + + public void run() { + try { + TaskOnlineConnect.func_96583_a(this.field_96594_c, new NetClientHandler(this.field_96594_c.func_96578_b(), this.field_96595_a, this.field_96593_b, TaskOnlineConnect.func_98172_a(this.field_96594_c))); + if(this.field_96594_c.func_96577_c()) { + return; + } + + this.field_96594_c.func_96576_b(StringTranslate.getInstance().translateKey("mco.connect.authorizing")); + TaskOnlineConnect.func_96580_a(this.field_96594_c).addToSendQueue(new Packet2ClientProtocol(61, this.field_96594_c.func_96578_b().session.username, this.field_96595_a, this.field_96593_b)); + } catch (UnknownHostException var2) { + if(this.field_96594_c.func_96577_c()) { + return; + } + + this.field_96594_c.func_96578_b().displayGuiScreen(new GuiScreenDisconnectedOnline(TaskOnlineConnect.func_98172_a(this.field_96594_c), "connect.failed", "disconnect.genericReason", new Object[]{"Unknown host \'" + this.field_96595_a + "\'"})); + } catch (ConnectException var3) { + if(this.field_96594_c.func_96577_c()) { + return; + } + + this.field_96594_c.func_96578_b().displayGuiScreen(new GuiScreenDisconnectedOnline(TaskOnlineConnect.func_98172_a(this.field_96594_c), "connect.failed", "disconnect.genericReason", new Object[]{var3.getMessage()})); + } catch (Exception var4) { + if(this.field_96594_c.func_96577_c()) { + return; + } + + var4.printStackTrace(); + this.field_96594_c.func_96578_b().displayGuiScreen(new GuiScreenDisconnectedOnline(TaskOnlineConnect.func_98172_a(this.field_96594_c), "connect.failed", "disconnect.genericReason", new Object[]{var4.toString()})); + } + + } +} diff --git a/src/net/minecraft/src/ThreadOnlineScreen.java b/src/net/minecraft/src/ThreadOnlineScreen.java new file mode 100644 index 0000000..1583b47 --- /dev/null +++ b/src/net/minecraft/src/ThreadOnlineScreen.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +class ThreadOnlineScreen extends Thread { + final GuiScreenOnlineServers field_98173_a; + + ThreadOnlineScreen(GuiScreenOnlineServers var1) { + this.field_98173_a = var1; + } + + public void run() { + McoClient var1 = new McoClient(GuiScreenOnlineServers.func_96177_a(this.field_98173_a).session); + + try { + GuiScreenOnlineServers.func_98081_a(this.field_98173_a, var1.func_96379_c()); + } catch (Exception var3) { + GuiScreenOnlineServers.func_98081_a(this.field_98173_a, 0); + } + + } +} diff --git a/src/net/minecraft/src/ThreadPollServers.java b/src/net/minecraft/src/ThreadPollServers.java new file mode 100644 index 0000000..f89e798 --- /dev/null +++ b/src/net/minecraft/src/ThreadPollServers.java @@ -0,0 +1,109 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.net.ConnectException; +import java.net.SocketTimeoutException; +import java.net.UnknownHostException; + +class ThreadPollServers extends Thread { + final ServerData pollServersServerData; + final GuiSlotServer serverSlotContainer; + + ThreadPollServers(GuiSlotServer var1, ServerData var2) { + this.serverSlotContainer = var1; + this.pollServersServerData = var2; + } + + public void run() { + boolean var27 = false; + + Object var41; + label183: { + label184: { + label185: { + label186: { + label187: { + try { + var27 = true; + this.pollServersServerData.serverMOTD = EnumChatFormatting.DARK_GRAY + "Polling.."; + long var1 = System.nanoTime(); + GuiMultiplayer.func_82291_a(this.pollServersServerData); + long var3 = System.nanoTime(); + this.pollServersServerData.pingToServer = (var3 - var1) / 1000000L; + var27 = false; + break label183; + } catch (UnknownHostException var35) { + this.pollServersServerData.pingToServer = -1L; + this.pollServersServerData.serverMOTD = EnumChatFormatting.DARK_RED + "Can\'t resolve hostname"; + var27 = false; + } catch (SocketTimeoutException var36) { + this.pollServersServerData.pingToServer = -1L; + this.pollServersServerData.serverMOTD = EnumChatFormatting.DARK_RED + "Can\'t reach server"; + var27 = false; + break label187; + } catch (ConnectException var37) { + this.pollServersServerData.pingToServer = -1L; + this.pollServersServerData.serverMOTD = EnumChatFormatting.DARK_RED + "Can\'t reach server"; + var27 = false; + break label186; + } catch (IOException var38) { + this.pollServersServerData.pingToServer = -1L; + this.pollServersServerData.serverMOTD = EnumChatFormatting.DARK_RED + "Communication error"; + var27 = false; + break label185; + } catch (Exception var39) { + this.pollServersServerData.pingToServer = -1L; + this.pollServersServerData.serverMOTD = "ERROR: " + var39.getClass(); + var27 = false; + break label184; + } finally { + if(var27) { + Object var12 = GuiMultiplayer.getLock(); + synchronized(var12) { + GuiMultiplayer.decreaseThreadsPending(); + } + } + } + + var41 = GuiMultiplayer.getLock(); + synchronized(var41) { + GuiMultiplayer.decreaseThreadsPending(); + return; + } + } + + var41 = GuiMultiplayer.getLock(); + synchronized(var41) { + GuiMultiplayer.decreaseThreadsPending(); + return; + } + } + + var41 = GuiMultiplayer.getLock(); + synchronized(var41) { + GuiMultiplayer.decreaseThreadsPending(); + return; + } + } + + var41 = GuiMultiplayer.getLock(); + synchronized(var41) { + GuiMultiplayer.decreaseThreadsPending(); + return; + } + } + + var41 = GuiMultiplayer.getLock(); + synchronized(var41) { + GuiMultiplayer.decreaseThreadsPending(); + return; + } + } + + var41 = GuiMultiplayer.getLock(); + synchronized(var41) { + GuiMultiplayer.decreaseThreadsPending(); + } + + } +} diff --git a/src/net/minecraft/src/ThreadShutdown.java b/src/net/minecraft/src/ThreadShutdown.java new file mode 100644 index 0000000..dfa2675 --- /dev/null +++ b/src/net/minecraft/src/ThreadShutdown.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +public final class ThreadShutdown extends Thread { + public void run() { + Minecraft.stopIntegratedServer(); + } +} diff --git a/src/net/minecraft/src/ThreadStatSyncherReceive.java b/src/net/minecraft/src/ThreadStatSyncherReceive.java new file mode 100644 index 0000000..0e8090d --- /dev/null +++ b/src/net/minecraft/src/ThreadStatSyncherReceive.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +class ThreadStatSyncherReceive extends Thread { + final StatsSyncher syncher; + + ThreadStatSyncherReceive(StatsSyncher var1) { + this.syncher = var1; + } + + public void run() { + try { + if(StatsSyncher.func_77419_a(this.syncher) != null) { + StatsSyncher.func_77414_a(this.syncher, StatsSyncher.func_77419_a(this.syncher), StatsSyncher.func_77408_b(this.syncher), StatsSyncher.func_77407_c(this.syncher), StatsSyncher.func_77411_d(this.syncher)); + } else if(StatsSyncher.func_77408_b(this.syncher).exists()) { + StatsSyncher.func_77416_a(this.syncher, StatsSyncher.func_77410_a(this.syncher, StatsSyncher.func_77408_b(this.syncher), StatsSyncher.func_77407_c(this.syncher), StatsSyncher.func_77411_d(this.syncher))); + } + } catch (Exception var5) { + var5.printStackTrace(); + } finally { + StatsSyncher.setBusy(this.syncher, false); + } + + } +} diff --git a/src/net/minecraft/src/ThreadStatSyncherSend.java b/src/net/minecraft/src/ThreadStatSyncherSend.java new file mode 100644 index 0000000..95996fd --- /dev/null +++ b/src/net/minecraft/src/ThreadStatSyncherSend.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import java.util.Map; + +class ThreadStatSyncherSend extends Thread { + final Map field_77483_a; + final StatsSyncher syncher; + + ThreadStatSyncherSend(StatsSyncher var1, Map var2) { + this.syncher = var1; + this.field_77483_a = var2; + } + + public void run() { + try { + StatsSyncher.func_77414_a(this.syncher, this.field_77483_a, StatsSyncher.getUnsentDataFile(this.syncher), StatsSyncher.getUnsentTempFile(this.syncher), StatsSyncher.getUnsentOldFile(this.syncher)); + } catch (Exception var5) { + var5.printStackTrace(); + } finally { + StatsSyncher.setBusy(this.syncher, false); + } + + } +} diff --git a/src/net/minecraft/src/ThreadTitleScreen.java b/src/net/minecraft/src/ThreadTitleScreen.java new file mode 100644 index 0000000..75a5dbb --- /dev/null +++ b/src/net/minecraft/src/ThreadTitleScreen.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.IOException; + +class ThreadTitleScreen extends Thread { + final StringTranslate field_98135_a; + final int field_98133_b; + final int field_98134_c; + final GuiMainMenu field_98132_d; + + ThreadTitleScreen(GuiMainMenu var1, StringTranslate var2, int var3, int var4) { + this.field_98132_d = var1; + this.field_98135_a = var2; + this.field_98133_b = var3; + this.field_98134_c = var4; + } + + public void run() { + McoClient var1 = new McoClient(GuiMainMenu.func_98058_a(this.field_98132_d).session); + boolean var2 = false; + + for(int var3 = 0; var3 < 3; ++var3) { + try { + Boolean var4 = var1.func_96375_b(); + if(var4.booleanValue()) { + GuiMainMenu.func_98061_a(this.field_98132_d, this.field_98135_a, this.field_98133_b, this.field_98134_c); + } + + GuiMainMenu.func_98059_a(var4.booleanValue()); + } catch (ExceptionRetryCall var6) { + var2 = true; + } catch (ExceptionMcoService var7) { + } catch (IOException var8) { + } + + if(!var2) { + break; + } + + try { + Thread.sleep(10000L); + } catch (InterruptedException var5) { + Thread.currentThread().interrupt(); + } + } + + } +} diff --git a/src/net/minecraft/src/ThreadedFileIOBase.java b/src/net/minecraft/src/ThreadedFileIOBase.java new file mode 100644 index 0000000..4e5c25b --- /dev/null +++ b/src/net/minecraft/src/ThreadedFileIOBase.java @@ -0,0 +1,68 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class ThreadedFileIOBase implements Runnable { + public static final ThreadedFileIOBase threadedIOInstance = new ThreadedFileIOBase(); + private List threadedIOQueue = Collections.synchronizedList(new ArrayList()); + private volatile long writeQueuedCounter = 0L; + private volatile long savedIOCounter = 0L; + private volatile boolean isThreadWaiting = false; + + private ThreadedFileIOBase() { + Thread var1 = new Thread(this, "File IO Thread"); + var1.setPriority(1); + var1.start(); + } + + public void run() { + while(true) { + this.processQueue(); + } + } + + private void processQueue() { + for(int var1 = 0; var1 < this.threadedIOQueue.size(); ++var1) { + IThreadedFileIO var2 = (IThreadedFileIO)this.threadedIOQueue.get(var1); + boolean var3 = var2.writeNextIO(); + if(!var3) { + this.threadedIOQueue.remove(var1--); + ++this.savedIOCounter; + } + + try { + Thread.sleep(this.isThreadWaiting ? 0L : 10L); + } catch (InterruptedException var6) { + var6.printStackTrace(); + } + } + + if(this.threadedIOQueue.isEmpty()) { + try { + Thread.sleep(25L); + } catch (InterruptedException var5) { + var5.printStackTrace(); + } + } + + } + + public void queueIO(IThreadedFileIO var1) { + if(!this.threadedIOQueue.contains(var1)) { + ++this.writeQueuedCounter; + this.threadedIOQueue.add(var1); + } + } + + public void waitForFinish() throws InterruptedException { + this.isThreadWaiting = true; + + while(this.writeQueuedCounter != this.savedIOCounter) { + Thread.sleep(10L); + } + + this.isThreadWaiting = false; + } +} diff --git a/src/net/minecraft/src/TileEntity.java b/src/net/minecraft/src/TileEntity.java new file mode 100644 index 0000000..94086f8 --- /dev/null +++ b/src/net/minecraft/src/TileEntity.java @@ -0,0 +1,176 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; +import net.minecraft.server.MinecraftServer; + +public class TileEntity { + private static Map nameToClassMap = new HashMap(); + private static Map classToNameMap = new HashMap(); + protected World worldObj; + public int xCoord; + public int yCoord; + public int zCoord; + protected boolean tileEntityInvalid; + public int blockMetadata = -1; + public Block blockType; + + private static void addMapping(Class var0, String var1) { + if(nameToClassMap.containsKey(var1)) { + throw new IllegalArgumentException("Duplicate id: " + var1); + } else { + nameToClassMap.put(var1, var0); + classToNameMap.put(var0, var1); + } + } + + public World getWorldObj() { + return this.worldObj; + } + + public void setWorldObj(World var1) { + this.worldObj = var1; + } + + public boolean func_70309_m() { + return this.worldObj != null; + } + + public void readFromNBT(NBTTagCompound var1) { + this.xCoord = var1.getInteger("x"); + this.yCoord = var1.getInteger("y"); + this.zCoord = var1.getInteger("z"); + } + + public void writeToNBT(NBTTagCompound var1) { + String var2 = (String)classToNameMap.get(this.getClass()); + if(var2 == null) { + throw new RuntimeException(this.getClass() + " is missing a mapping! This is a bug!"); + } else { + var1.setString("id", var2); + var1.setInteger("x", this.xCoord); + var1.setInteger("y", this.yCoord); + var1.setInteger("z", this.zCoord); + } + } + + public void updateEntity() { + } + + public static TileEntity createAndLoadEntity(NBTTagCompound var0) { + TileEntity var1 = null; + + try { + Class var2 = (Class)nameToClassMap.get(var0.getString("id")); + if(var2 != null) { + var1 = (TileEntity)var2.newInstance(); + } + } catch (Exception var3) { + var3.printStackTrace(); + } + + if(var1 != null) { + var1.readFromNBT(var0); + } else { + MinecraftServer.getServer().getLogAgent().logWarning("Skipping TileEntity with id " + var0.getString("id")); + } + + return var1; + } + + public int getBlockMetadata() { + if(this.blockMetadata == -1) { + this.blockMetadata = this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord); + } + + return this.blockMetadata; + } + + public void onInventoryChanged() { + if(this.worldObj != null) { + this.blockMetadata = this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord); + this.worldObj.updateTileEntityChunkAndDoNothing(this.xCoord, this.yCoord, this.zCoord, this); + if(this.getBlockType() != null) { + this.worldObj.func_96440_m(this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID); + } + } + + } + + public double getDistanceFrom(double var1, double var3, double var5) { + double var7 = (double)this.xCoord + 0.5D - var1; + double var9 = (double)this.yCoord + 0.5D - var3; + double var11 = (double)this.zCoord + 0.5D - var5; + return var7 * var7 + var9 * var9 + var11 * var11; + } + + public double getMaxRenderDistanceSquared() { + return 4096.0D; + } + + public Block getBlockType() { + if(this.blockType == null) { + this.blockType = Block.blocksList[this.worldObj.getBlockId(this.xCoord, this.yCoord, this.zCoord)]; + } + + return this.blockType; + } + + public Packet getDescriptionPacket() { + return null; + } + + public boolean isInvalid() { + return this.tileEntityInvalid; + } + + public void invalidate() { + this.tileEntityInvalid = true; + } + + public void validate() { + this.tileEntityInvalid = false; + } + + public boolean receiveClientEvent(int var1, int var2) { + return false; + } + + public void updateContainingBlockInfo() { + this.blockType = null; + this.blockMetadata = -1; + } + + public void func_85027_a(CrashReportCategory var1) { + var1.addCrashSectionCallable("Name", new CallableTileEntityName(this)); + CrashReportCategory.func_85068_a(var1, this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID, this.getBlockMetadata()); + var1.addCrashSectionCallable("Actual block type", new CallableTileEntityID(this)); + var1.addCrashSectionCallable("Actual block data value", new CallableTileEntityData(this)); + } + + static Map getClassToNameMap() { + return classToNameMap; + } + + static { + addMapping(TileEntityFurnace.class, "Furnace"); + addMapping(TileEntityChest.class, "Chest"); + addMapping(TileEntityEnderChest.class, "EnderChest"); + addMapping(TileEntityRecordPlayer.class, "RecordPlayer"); + addMapping(TileEntityDispenser.class, "Trap"); + addMapping(TileEntityDropper.class, "Dropper"); + addMapping(TileEntitySign.class, "Sign"); + addMapping(TileEntityMobSpawner.class, "MobSpawner"); + addMapping(TileEntityNote.class, "Music"); + addMapping(TileEntityPiston.class, "Piston"); + addMapping(TileEntityBrewingStand.class, "Cauldron"); + addMapping(TileEntityEnchantmentTable.class, "EnchantTable"); + addMapping(TileEntityEndPortal.class, "Airportal"); + addMapping(TileEntityCommandBlock.class, "Control"); + addMapping(TileEntityBeacon.class, "Beacon"); + addMapping(TileEntitySkull.class, "Skull"); + addMapping(TileEntityDaylightDetector.class, "DLDetector"); + addMapping(TileEntityHopper.class, "Hopper"); + addMapping(TileEntityComparator.class, "Comparator"); + } +} diff --git a/src/net/minecraft/src/TileEntityBeacon.java b/src/net/minecraft/src/TileEntityBeacon.java new file mode 100644 index 0000000..24e96f2 --- /dev/null +++ b/src/net/minecraft/src/TileEntityBeacon.java @@ -0,0 +1,262 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class TileEntityBeacon extends TileEntity implements IInventory { + public static final Potion[][] effectsList = new Potion[][]{{Potion.moveSpeed, Potion.digSpeed}, {Potion.resistance, Potion.jump}, {Potion.damageBoost}, {Potion.regeneration}}; + private long field_82137_b; + private float field_82138_c; + private boolean isBeaconActive; + private int levels = -1; + private int primaryEffect; + private int secondaryEffect; + private ItemStack payment; + private String field_94048_i; + + public void updateEntity() { + if(this.worldObj.getTotalWorldTime() % 80L == 0L) { + this.updateState(); + this.addEffectsToPlayers(); + } + + } + + private void addEffectsToPlayers() { + if(this.isBeaconActive && this.levels > 0 && !this.worldObj.isRemote && this.primaryEffect > 0) { + double var1 = (double)(this.levels * 10 + 10); + byte var3 = 0; + if(this.levels >= 4 && this.primaryEffect == this.secondaryEffect) { + var3 = 1; + } + + AxisAlignedBB var4 = AxisAlignedBB.getAABBPool().getAABB((double)this.xCoord, (double)this.yCoord, (double)this.zCoord, (double)(this.xCoord + 1), (double)(this.yCoord + 1), (double)(this.zCoord + 1)).expand(var1, var1, var1); + var4.maxY = (double)this.worldObj.getHeight(); + List var5 = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, var4); + Iterator var6 = var5.iterator(); + + EntityPlayer var7; + while(var6.hasNext()) { + var7 = (EntityPlayer)var6.next(); + var7.addPotionEffect(new PotionEffect(this.primaryEffect, 180, var3, true)); + } + + if(this.levels >= 4 && this.primaryEffect != this.secondaryEffect && this.secondaryEffect > 0) { + var6 = var5.iterator(); + + while(var6.hasNext()) { + var7 = (EntityPlayer)var6.next(); + var7.addPotionEffect(new PotionEffect(this.secondaryEffect, 180, 0, true)); + } + } + } + + } + + private void updateState() { + if(!this.worldObj.canBlockSeeTheSky(this.xCoord, this.yCoord + 1, this.zCoord)) { + this.isBeaconActive = false; + this.levels = 0; + } else { + this.isBeaconActive = true; + this.levels = 0; + + for(int var1 = 1; var1 <= 4; this.levels = var1++) { + int var2 = this.yCoord - var1; + if(var2 < 0) { + break; + } + + boolean var3 = true; + + for(int var4 = this.xCoord - var1; var4 <= this.xCoord + var1 && var3; ++var4) { + for(int var5 = this.zCoord - var1; var5 <= this.zCoord + var1; ++var5) { + int var6 = this.worldObj.getBlockId(var4, var2, var5); + if(var6 != Block.blockEmerald.blockID && var6 != Block.blockGold.blockID && var6 != Block.blockDiamond.blockID && var6 != Block.blockIron.blockID) { + var3 = false; + break; + } + } + } + + if(!var3) { + break; + } + } + + if(this.levels == 0) { + this.isBeaconActive = false; + } + } + + } + + public float func_82125_v_() { + if(!this.isBeaconActive) { + return 0.0F; + } else { + int var1 = (int)(this.worldObj.getTotalWorldTime() - this.field_82137_b); + this.field_82137_b = this.worldObj.getTotalWorldTime(); + if(var1 > 1) { + this.field_82138_c -= (float)var1 / 40.0F; + if(this.field_82138_c < 0.0F) { + this.field_82138_c = 0.0F; + } + } + + this.field_82138_c += 0.025F; + if(this.field_82138_c > 1.0F) { + this.field_82138_c = 1.0F; + } + + return this.field_82138_c; + } + } + + public int getPrimaryEffect() { + return this.primaryEffect; + } + + public int getSecondaryEffect() { + return this.secondaryEffect; + } + + public int getLevels() { + return this.levels; + } + + public void setLevels(int var1) { + this.levels = var1; + } + + public void setPrimaryEffect(int var1) { + this.primaryEffect = 0; + + for(int var2 = 0; var2 < this.levels && var2 < 3; ++var2) { + Potion[] var3 = effectsList[var2]; + int var4 = var3.length; + + for(int var5 = 0; var5 < var4; ++var5) { + Potion var6 = var3[var5]; + if(var6.id == var1) { + this.primaryEffect = var1; + return; + } + } + } + + } + + public void setSecondaryEffect(int var1) { + this.secondaryEffect = 0; + if(this.levels >= 4) { + for(int var2 = 0; var2 < 4; ++var2) { + Potion[] var3 = effectsList[var2]; + int var4 = var3.length; + + for(int var5 = 0; var5 < var4; ++var5) { + Potion var6 = var3[var5]; + if(var6.id == var1) { + this.secondaryEffect = var1; + return; + } + } + } + } + + } + + public Packet getDescriptionPacket() { + NBTTagCompound var1 = new NBTTagCompound(); + this.writeToNBT(var1); + return new Packet132TileEntityData(this.xCoord, this.yCoord, this.zCoord, 3, var1); + } + + public double getMaxRenderDistanceSquared() { + return 65536.0D; + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + this.primaryEffect = var1.getInteger("Primary"); + this.secondaryEffect = var1.getInteger("Secondary"); + this.levels = var1.getInteger("Levels"); + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setInteger("Primary", this.primaryEffect); + var1.setInteger("Secondary", this.secondaryEffect); + var1.setInteger("Levels", this.levels); + } + + public int getSizeInventory() { + return 1; + } + + public ItemStack getStackInSlot(int var1) { + return var1 == 0 ? this.payment : null; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(var1 == 0 && this.payment != null) { + if(var2 >= this.payment.stackSize) { + ItemStack var3 = this.payment; + this.payment = null; + return var3; + } else { + this.payment.stackSize -= var2; + return new ItemStack(this.payment.itemID, var2, this.payment.getItemDamage()); + } + } else { + return null; + } + } + + public ItemStack getStackInSlotOnClosing(int var1) { + if(var1 == 0 && this.payment != null) { + ItemStack var2 = this.payment; + this.payment = null; + return var2; + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + if(var1 == 0) { + this.payment = var2; + } + + } + + public String getInvName() { + return this.isInvNameLocalized() ? this.field_94048_i : "container.beacon"; + } + + public boolean isInvNameLocalized() { + return this.field_94048_i != null && this.field_94048_i.length() > 0; + } + + public void func_94047_a(String var1) { + this.field_94048_i = var1; + } + + public int getInventoryStackLimit() { + return 1; + } + + public boolean isUseableByPlayer(EntityPlayer var1) { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : var1.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + + public void openChest() { + } + + public void closeChest() { + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return var2.itemID == Item.emerald.itemID || var2.itemID == Item.diamond.itemID || var2.itemID == Item.ingotGold.itemID || var2.itemID == Item.ingotIron.itemID; + } +} diff --git a/src/net/minecraft/src/TileEntityBeaconRenderer.java b/src/net/minecraft/src/TileEntityBeaconRenderer.java new file mode 100644 index 0000000..791caff --- /dev/null +++ b/src/net/minecraft/src/TileEntityBeaconRenderer.java @@ -0,0 +1,100 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class TileEntityBeaconRenderer extends TileEntitySpecialRenderer { + public void renderTileEntityBeaconAt(TileEntityBeacon var1, double var2, double var4, double var6, float var8) { + float var9 = var1.func_82125_v_(); + if(var9 > 0.0F) { + Tessellator var10 = Tessellator.instance; + this.bindTextureByName("/misc/beam.png"); + GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, 10497.0F); + GL11.glTexParameterf(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, 10497.0F); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_BLEND); + GL11.glDepthMask(true); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); + float var11 = (float)var1.getWorldObj().getTotalWorldTime() + var8; + float var12 = -var11 * 0.2F - (float)MathHelper.floor_float(-var11 * 0.1F); + byte var13 = 1; + double var14 = (double)var11 * 0.025D * (1.0D - (double)(var13 & 1) * 2.5D); + var10.startDrawingQuads(); + var10.setColorRGBA(255, 255, 255, 32); + double var16 = (double)var13 * 0.2D; + double var18 = 0.5D + Math.cos(var14 + Math.PI * 0.75D) * var16; + double var20 = 0.5D + Math.sin(var14 + Math.PI * 0.75D) * var16; + double var22 = 0.5D + Math.cos(var14 + Math.PI * 0.25D) * var16; + double var24 = 0.5D + Math.sin(var14 + Math.PI * 0.25D) * var16; + double var26 = 0.5D + Math.cos(var14 + Math.PI * 1.25D) * var16; + double var28 = 0.5D + Math.sin(var14 + Math.PI * 1.25D) * var16; + double var30 = 0.5D + Math.cos(var14 + Math.PI * 1.75D) * var16; + double var32 = 0.5D + Math.sin(var14 + Math.PI * 1.75D) * var16; + double var34 = (double)(256.0F * var9); + double var36 = 0.0D; + double var38 = 1.0D; + double var40 = (double)(-1.0F + var12); + double var42 = (double)(256.0F * var9) * (0.5D / var16) + var40; + var10.addVertexWithUV(var2 + var18, var4 + var34, var6 + var20, var38, var42); + var10.addVertexWithUV(var2 + var18, var4, var6 + var20, var38, var40); + var10.addVertexWithUV(var2 + var22, var4, var6 + var24, var36, var40); + var10.addVertexWithUV(var2 + var22, var4 + var34, var6 + var24, var36, var42); + var10.addVertexWithUV(var2 + var30, var4 + var34, var6 + var32, var38, var42); + var10.addVertexWithUV(var2 + var30, var4, var6 + var32, var38, var40); + var10.addVertexWithUV(var2 + var26, var4, var6 + var28, var36, var40); + var10.addVertexWithUV(var2 + var26, var4 + var34, var6 + var28, var36, var42); + var10.addVertexWithUV(var2 + var22, var4 + var34, var6 + var24, var38, var42); + var10.addVertexWithUV(var2 + var22, var4, var6 + var24, var38, var40); + var10.addVertexWithUV(var2 + var30, var4, var6 + var32, var36, var40); + var10.addVertexWithUV(var2 + var30, var4 + var34, var6 + var32, var36, var42); + var10.addVertexWithUV(var2 + var26, var4 + var34, var6 + var28, var38, var42); + var10.addVertexWithUV(var2 + var26, var4, var6 + var28, var38, var40); + var10.addVertexWithUV(var2 + var18, var4, var6 + var20, var36, var40); + var10.addVertexWithUV(var2 + var18, var4 + var34, var6 + var20, var36, var42); + var10.draw(); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glDepthMask(false); + var10.startDrawingQuads(); + var10.setColorRGBA(255, 255, 255, 32); + double var44 = 0.2D; + double var15 = 0.2D; + double var17 = 0.8D; + double var19 = 0.2D; + double var21 = 0.2D; + double var23 = 0.8D; + double var25 = 0.8D; + double var27 = 0.8D; + double var29 = (double)(256.0F * var9); + double var31 = 0.0D; + double var33 = 1.0D; + double var35 = (double)(-1.0F + var12); + double var37 = (double)(256.0F * var9) + var35; + var10.addVertexWithUV(var2 + var44, var4 + var29, var6 + var15, var33, var37); + var10.addVertexWithUV(var2 + var44, var4, var6 + var15, var33, var35); + var10.addVertexWithUV(var2 + var17, var4, var6 + var19, var31, var35); + var10.addVertexWithUV(var2 + var17, var4 + var29, var6 + var19, var31, var37); + var10.addVertexWithUV(var2 + var25, var4 + var29, var6 + var27, var33, var37); + var10.addVertexWithUV(var2 + var25, var4, var6 + var27, var33, var35); + var10.addVertexWithUV(var2 + var21, var4, var6 + var23, var31, var35); + var10.addVertexWithUV(var2 + var21, var4 + var29, var6 + var23, var31, var37); + var10.addVertexWithUV(var2 + var17, var4 + var29, var6 + var19, var33, var37); + var10.addVertexWithUV(var2 + var17, var4, var6 + var19, var33, var35); + var10.addVertexWithUV(var2 + var25, var4, var6 + var27, var31, var35); + var10.addVertexWithUV(var2 + var25, var4 + var29, var6 + var27, var31, var37); + var10.addVertexWithUV(var2 + var21, var4 + var29, var6 + var23, var33, var37); + var10.addVertexWithUV(var2 + var21, var4, var6 + var23, var33, var35); + var10.addVertexWithUV(var2 + var44, var4, var6 + var15, var31, var35); + var10.addVertexWithUV(var2 + var44, var4 + var29, var6 + var15, var31, var37); + var10.draw(); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDepthMask(true); + } + + } + + public void renderTileEntityAt(TileEntity var1, double var2, double var4, double var6, float var8) { + this.renderTileEntityBeaconAt((TileEntityBeacon)var1, var2, var4, var6, var8); + } +} diff --git a/src/net/minecraft/src/TileEntityBrewingStand.java b/src/net/minecraft/src/TileEntityBrewingStand.java new file mode 100644 index 0000000..832f3bc --- /dev/null +++ b/src/net/minecraft/src/TileEntityBrewingStand.java @@ -0,0 +1,247 @@ +package net.minecraft.src; + +import java.util.List; + +public class TileEntityBrewingStand extends TileEntity implements ISidedInventory { + private static final int[] field_102017_a = new int[]{3}; + private static final int[] field_102016_b = new int[]{0, 1, 2}; + private ItemStack[] brewingItemStacks = new ItemStack[4]; + private int brewTime; + private int filledSlots; + private int ingredientID; + private String field_94132_e; + + public String getInvName() { + return this.isInvNameLocalized() ? this.field_94132_e : "container.brewing"; + } + + public boolean isInvNameLocalized() { + return this.field_94132_e != null && this.field_94132_e.length() > 0; + } + + public void func_94131_a(String var1) { + this.field_94132_e = var1; + } + + public int getSizeInventory() { + return this.brewingItemStacks.length; + } + + public void updateEntity() { + if(this.brewTime > 0) { + --this.brewTime; + if(this.brewTime == 0) { + this.brewPotions(); + this.onInventoryChanged(); + } else if(!this.canBrew()) { + this.brewTime = 0; + this.onInventoryChanged(); + } else if(this.ingredientID != this.brewingItemStacks[3].itemID) { + this.brewTime = 0; + this.onInventoryChanged(); + } + } else if(this.canBrew()) { + this.brewTime = 400; + this.ingredientID = this.brewingItemStacks[3].itemID; + } + + int var1 = this.getFilledSlots(); + if(var1 != this.filledSlots) { + this.filledSlots = var1; + this.worldObj.setBlockMetadataWithNotify(this.xCoord, this.yCoord, this.zCoord, var1, 2); + } + + super.updateEntity(); + } + + public int getBrewTime() { + return this.brewTime; + } + + private boolean canBrew() { + if(this.brewingItemStacks[3] != null && this.brewingItemStacks[3].stackSize > 0) { + ItemStack var1 = this.brewingItemStacks[3]; + if(!Item.itemsList[var1.itemID].isPotionIngredient()) { + return false; + } else { + boolean var2 = false; + + for(int var3 = 0; var3 < 3; ++var3) { + if(this.brewingItemStacks[var3] != null && this.brewingItemStacks[var3].itemID == Item.potion.itemID) { + int var4 = this.brewingItemStacks[var3].getItemDamage(); + int var5 = this.getPotionResult(var4, var1); + if(!ItemPotion.isSplash(var4) && ItemPotion.isSplash(var5)) { + var2 = true; + break; + } + + List var6 = Item.potion.getEffects(var4); + List var7 = Item.potion.getEffects(var5); + if((var4 <= 0 || var6 != var7) && (var6 == null || !var6.equals(var7) && var7 != null) && var4 != var5) { + var2 = true; + break; + } + } + } + + return var2; + } + } else { + return false; + } + } + + private void brewPotions() { + if(this.canBrew()) { + ItemStack var1 = this.brewingItemStacks[3]; + + for(int var2 = 0; var2 < 3; ++var2) { + if(this.brewingItemStacks[var2] != null && this.brewingItemStacks[var2].itemID == Item.potion.itemID) { + int var3 = this.brewingItemStacks[var2].getItemDamage(); + int var4 = this.getPotionResult(var3, var1); + List var5 = Item.potion.getEffects(var3); + List var6 = Item.potion.getEffects(var4); + if(var3 > 0 && var5 == var6 || var5 != null && (var5.equals(var6) || var6 == null)) { + if(!ItemPotion.isSplash(var3) && ItemPotion.isSplash(var4)) { + this.brewingItemStacks[var2].setItemDamage(var4); + } + } else if(var3 != var4) { + this.brewingItemStacks[var2].setItemDamage(var4); + } + } + } + + if(Item.itemsList[var1.itemID].hasContainerItem()) { + this.brewingItemStacks[3] = new ItemStack(Item.itemsList[var1.itemID].getContainerItem()); + } else { + --this.brewingItemStacks[3].stackSize; + if(this.brewingItemStacks[3].stackSize <= 0) { + this.brewingItemStacks[3] = null; + } + } + + } + } + + private int getPotionResult(int var1, ItemStack var2) { + return var2 == null ? var1 : (Item.itemsList[var2.itemID].isPotionIngredient() ? PotionHelper.applyIngredient(var1, Item.itemsList[var2.itemID].getPotionEffect()) : var1); + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + NBTTagList var2 = var1.getTagList("Items"); + this.brewingItemStacks = new ItemStack[this.getSizeInventory()]; + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + if(var5 >= 0 && var5 < this.brewingItemStacks.length) { + this.brewingItemStacks[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + + this.brewTime = var1.getShort("BrewTime"); + if(var1.hasKey("CustomName")) { + this.field_94132_e = var1.getString("CustomName"); + } + + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setShort("BrewTime", (short)this.brewTime); + NBTTagList var2 = new NBTTagList(); + + for(int var3 = 0; var3 < this.brewingItemStacks.length; ++var3) { + if(this.brewingItemStacks[var3] != null) { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.brewingItemStacks[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + + var1.setTag("Items", var2); + if(this.isInvNameLocalized()) { + var1.setString("CustomName", this.field_94132_e); + } + + } + + public ItemStack getStackInSlot(int var1) { + return var1 >= 0 && var1 < this.brewingItemStacks.length ? this.brewingItemStacks[var1] : null; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(var1 >= 0 && var1 < this.brewingItemStacks.length) { + ItemStack var3 = this.brewingItemStacks[var1]; + this.brewingItemStacks[var1] = null; + return var3; + } else { + return null; + } + } + + public ItemStack getStackInSlotOnClosing(int var1) { + if(var1 >= 0 && var1 < this.brewingItemStacks.length) { + ItemStack var2 = this.brewingItemStacks[var1]; + this.brewingItemStacks[var1] = null; + return var2; + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + if(var1 >= 0 && var1 < this.brewingItemStacks.length) { + this.brewingItemStacks[var1] = var2; + } + + } + + public int getInventoryStackLimit() { + return 64; + } + + public boolean isUseableByPlayer(EntityPlayer var1) { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : var1.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + + public void openChest() { + } + + public void closeChest() { + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return var1 == 3 ? Item.itemsList[var2.itemID].isPotionIngredient() : var2.itemID == Item.potion.itemID || var2.itemID == Item.glassBottle.itemID; + } + + public void setBrewTime(int var1) { + this.brewTime = var1; + } + + public int getFilledSlots() { + int var1 = 0; + + for(int var2 = 0; var2 < 3; ++var2) { + if(this.brewingItemStacks[var2] != null) { + var1 |= 1 << var2; + } + } + + return var1; + } + + public int[] getAccessibleSlotsFromSide(int var1) { + return var1 == 1 ? field_102017_a : field_102016_b; + } + + public boolean canInsertItem(int var1, ItemStack var2, int var3) { + return this.isStackValidForSlot(var1, var2); + } + + public boolean canExtractItem(int var1, ItemStack var2, int var3) { + return true; + } +} diff --git a/src/net/minecraft/src/TileEntityChest.java b/src/net/minecraft/src/TileEntityChest.java new file mode 100644 index 0000000..cc0f195 --- /dev/null +++ b/src/net/minecraft/src/TileEntityChest.java @@ -0,0 +1,340 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class TileEntityChest extends TileEntity implements IInventory { + private ItemStack[] chestContents = new ItemStack[36]; + public boolean adjacentChestChecked = false; + public TileEntityChest adjacentChestZNeg; + public TileEntityChest adjacentChestXPos; + public TileEntityChest adjacentChestXNeg; + public TileEntityChest adjacentChestZPosition; + public float lidAngle; + public float prevLidAngle; + public int numUsingPlayers; + private int ticksSinceSync; + private int field_94046_i = -1; + private String field_94045_s; + + public int getSizeInventory() { + return 27; + } + + public ItemStack getStackInSlot(int var1) { + return this.chestContents[var1]; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.chestContents[var1] != null) { + ItemStack var3; + if(this.chestContents[var1].stackSize <= var2) { + var3 = this.chestContents[var1]; + this.chestContents[var1] = null; + this.onInventoryChanged(); + return var3; + } else { + var3 = this.chestContents[var1].splitStack(var2); + if(this.chestContents[var1].stackSize == 0) { + this.chestContents[var1] = null; + } + + this.onInventoryChanged(); + return var3; + } + } else { + return null; + } + } + + public ItemStack getStackInSlotOnClosing(int var1) { + if(this.chestContents[var1] != null) { + ItemStack var2 = this.chestContents[var1]; + this.chestContents[var1] = null; + return var2; + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.chestContents[var1] = var2; + if(var2 != null && var2.stackSize > this.getInventoryStackLimit()) { + var2.stackSize = this.getInventoryStackLimit(); + } + + this.onInventoryChanged(); + } + + public String getInvName() { + return this.isInvNameLocalized() ? this.field_94045_s : "container.chest"; + } + + public boolean isInvNameLocalized() { + return this.field_94045_s != null && this.field_94045_s.length() > 0; + } + + public void func_94043_a(String var1) { + this.field_94045_s = var1; + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + NBTTagList var2 = var1.getTagList("Items"); + this.chestContents = new ItemStack[this.getSizeInventory()]; + if(var1.hasKey("CustomName")) { + this.field_94045_s = var1.getString("CustomName"); + } + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + int var5 = var4.getByte("Slot") & 255; + if(var5 >= 0 && var5 < this.chestContents.length) { + this.chestContents[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + NBTTagList var2 = new NBTTagList(); + + for(int var3 = 0; var3 < this.chestContents.length; ++var3) { + if(this.chestContents[var3] != null) { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.chestContents[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + + var1.setTag("Items", var2); + if(this.isInvNameLocalized()) { + var1.setString("CustomName", this.field_94045_s); + } + + } + + public int getInventoryStackLimit() { + return 64; + } + + public boolean isUseableByPlayer(EntityPlayer var1) { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : var1.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + + public void updateContainingBlockInfo() { + super.updateContainingBlockInfo(); + this.adjacentChestChecked = false; + } + + private void func_90009_a(TileEntityChest var1, int var2) { + if(var1.isInvalid()) { + this.adjacentChestChecked = false; + } else if(this.adjacentChestChecked) { + switch(var2) { + case 0: + if(this.adjacentChestZPosition != var1) { + this.adjacentChestChecked = false; + } + break; + case 1: + if(this.adjacentChestXNeg != var1) { + this.adjacentChestChecked = false; + } + break; + case 2: + if(this.adjacentChestZNeg != var1) { + this.adjacentChestChecked = false; + } + break; + case 3: + if(this.adjacentChestXPos != var1) { + this.adjacentChestChecked = false; + } + } + } + + } + + public void checkForAdjacentChests() { + if(!this.adjacentChestChecked) { + this.adjacentChestChecked = true; + this.adjacentChestZNeg = null; + this.adjacentChestXPos = null; + this.adjacentChestXNeg = null; + this.adjacentChestZPosition = null; + if(this.func_94044_a(this.xCoord - 1, this.yCoord, this.zCoord)) { + this.adjacentChestXNeg = (TileEntityChest)this.worldObj.getBlockTileEntity(this.xCoord - 1, this.yCoord, this.zCoord); + } + + if(this.func_94044_a(this.xCoord + 1, this.yCoord, this.zCoord)) { + this.adjacentChestXPos = (TileEntityChest)this.worldObj.getBlockTileEntity(this.xCoord + 1, this.yCoord, this.zCoord); + } + + if(this.func_94044_a(this.xCoord, this.yCoord, this.zCoord - 1)) { + this.adjacentChestZNeg = (TileEntityChest)this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord - 1); + } + + if(this.func_94044_a(this.xCoord, this.yCoord, this.zCoord + 1)) { + this.adjacentChestZPosition = (TileEntityChest)this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord + 1); + } + + if(this.adjacentChestZNeg != null) { + this.adjacentChestZNeg.func_90009_a(this, 0); + } + + if(this.adjacentChestZPosition != null) { + this.adjacentChestZPosition.func_90009_a(this, 2); + } + + if(this.adjacentChestXPos != null) { + this.adjacentChestXPos.func_90009_a(this, 1); + } + + if(this.adjacentChestXNeg != null) { + this.adjacentChestXNeg.func_90009_a(this, 3); + } + + } + } + + private boolean func_94044_a(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.worldObj.getBlockId(var1, var2, var3)]; + return var4 != null && var4 instanceof BlockChest ? ((BlockChest)var4).isTrapped == this.func_98041_l() : false; + } + + public void updateEntity() { + super.updateEntity(); + this.checkForAdjacentChests(); + ++this.ticksSinceSync; + float var1; + if(!this.worldObj.isRemote && this.numUsingPlayers != 0 && (this.ticksSinceSync + this.xCoord + this.yCoord + this.zCoord) % 200 == 0) { + this.numUsingPlayers = 0; + var1 = 5.0F; + List var2 = this.worldObj.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getAABBPool().getAABB((double)((float)this.xCoord - var1), (double)((float)this.yCoord - var1), (double)((float)this.zCoord - var1), (double)((float)(this.xCoord + 1) + var1), (double)((float)(this.yCoord + 1) + var1), (double)((float)(this.zCoord + 1) + var1))); + Iterator var3 = var2.iterator(); + + label93: + while(true) { + IInventory var5; + do { + EntityPlayer var4; + do { + if(!var3.hasNext()) { + break label93; + } + + var4 = (EntityPlayer)var3.next(); + } while(!(var4.openContainer instanceof ContainerChest)); + + var5 = ((ContainerChest)var4.openContainer).getLowerChestInventory(); + } while(var5 != this && (!(var5 instanceof InventoryLargeChest) || !((InventoryLargeChest)var5).isPartOfLargeChest(this))); + + ++this.numUsingPlayers; + } + } + + this.prevLidAngle = this.lidAngle; + var1 = 0.1F; + double var11; + if(this.numUsingPlayers > 0 && this.lidAngle == 0.0F && this.adjacentChestZNeg == null && this.adjacentChestXNeg == null) { + double var8 = (double)this.xCoord + 0.5D; + var11 = (double)this.zCoord + 0.5D; + if(this.adjacentChestZPosition != null) { + var11 += 0.5D; + } + + if(this.adjacentChestXPos != null) { + var8 += 0.5D; + } + + this.worldObj.playSoundEffect(var8, (double)this.yCoord + 0.5D, var11, "random.chestopen", 0.5F, this.worldObj.rand.nextFloat() * 0.1F + 0.9F); + } + + if(this.numUsingPlayers == 0 && this.lidAngle > 0.0F || this.numUsingPlayers > 0 && this.lidAngle < 1.0F) { + float var9 = this.lidAngle; + if(this.numUsingPlayers > 0) { + this.lidAngle += var1; + } else { + this.lidAngle -= var1; + } + + if(this.lidAngle > 1.0F) { + this.lidAngle = 1.0F; + } + + float var10 = 0.5F; + if(this.lidAngle < var10 && var9 >= var10 && this.adjacentChestZNeg == null && this.adjacentChestXNeg == null) { + var11 = (double)this.xCoord + 0.5D; + double var6 = (double)this.zCoord + 0.5D; + if(this.adjacentChestZPosition != null) { + var6 += 0.5D; + } + + if(this.adjacentChestXPos != null) { + var11 += 0.5D; + } + + this.worldObj.playSoundEffect(var11, (double)this.yCoord + 0.5D, var6, "random.chestclosed", 0.5F, this.worldObj.rand.nextFloat() * 0.1F + 0.9F); + } + + if(this.lidAngle < 0.0F) { + this.lidAngle = 0.0F; + } + } + + } + + public boolean receiveClientEvent(int var1, int var2) { + if(var1 == 1) { + this.numUsingPlayers = var2; + return true; + } else { + return super.receiveClientEvent(var1, var2); + } + } + + public void openChest() { + if(this.numUsingPlayers < 0) { + this.numUsingPlayers = 0; + } + + ++this.numUsingPlayers; + this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID, 1, this.numUsingPlayers); + this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID); + this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord - 1, this.zCoord, this.getBlockType().blockID); + } + + public void closeChest() { + if(this.getBlockType() != null && this.getBlockType() instanceof BlockChest) { + --this.numUsingPlayers; + this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID, 1, this.numUsingPlayers); + this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord, this.zCoord, this.getBlockType().blockID); + this.worldObj.notifyBlocksOfNeighborChange(this.xCoord, this.yCoord - 1, this.zCoord, this.getBlockType().blockID); + } + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return true; + } + + public void invalidate() { + super.invalidate(); + this.updateContainingBlockInfo(); + this.checkForAdjacentChests(); + } + + public int func_98041_l() { + if(this.field_94046_i == -1) { + if(this.worldObj == null || !(this.getBlockType() instanceof BlockChest)) { + return 0; + } + + this.field_94046_i = ((BlockChest)this.getBlockType()).isTrapped; + } + + return this.field_94046_i; + } +} diff --git a/src/net/minecraft/src/TileEntityChestRenderer.java b/src/net/minecraft/src/TileEntityChestRenderer.java new file mode 100644 index 0000000..e99923a --- /dev/null +++ b/src/net/minecraft/src/TileEntityChestRenderer.java @@ -0,0 +1,119 @@ +package net.minecraft.src; + +import java.util.Calendar; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class TileEntityChestRenderer extends TileEntitySpecialRenderer { + private ModelChest chestModel = new ModelChest(); + private ModelChest largeChestModel = new ModelLargeChest(); + private boolean isChristmas; + + public TileEntityChestRenderer() { + Calendar var1 = Calendar.getInstance(); + if(var1.get(2) + 1 == 12 && var1.get(5) >= 24 && var1.get(5) <= 26) { + this.isChristmas = true; + } + + } + + public void renderTileEntityChestAt(TileEntityChest var1, double var2, double var4, double var6, float var8) { + int var9; + if(!var1.func_70309_m()) { + var9 = 0; + } else { + Block var10 = var1.getBlockType(); + var9 = var1.getBlockMetadata(); + if(var10 instanceof BlockChest && var9 == 0) { + ((BlockChest)var10).unifyAdjacentChests(var1.getWorldObj(), var1.xCoord, var1.yCoord, var1.zCoord); + var9 = var1.getBlockMetadata(); + } + + var1.checkForAdjacentChests(); + } + + if(var1.adjacentChestZNeg == null && var1.adjacentChestXNeg == null) { + ModelChest var14; + if(var1.adjacentChestXPos == null && var1.adjacentChestZPosition == null) { + var14 = this.chestModel; + if(var1.func_98041_l() == 1) { + this.bindTextureByName("/item/chests/trap_small.png"); + } else if(this.isChristmas) { + this.bindTextureByName("/item/xmaschest.png"); + } else { + this.bindTextureByName("/item/chest.png"); + } + } else { + var14 = this.largeChestModel; + if(var1.func_98041_l() == 1) { + this.bindTextureByName("/item/chests/trap_large.png"); + } else if(this.isChristmas) { + this.bindTextureByName("/item/largexmaschest.png"); + } else { + this.bindTextureByName("/item/largechest.png"); + } + } + + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float)var2, (float)var4 + 1.0F, (float)var6 + 1.0F); + GL11.glScalef(1.0F, -1.0F, -1.0F); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + short var11 = 0; + if(var9 == 2) { + var11 = 180; + } + + if(var9 == 3) { + var11 = 0; + } + + if(var9 == 4) { + var11 = 90; + } + + if(var9 == 5) { + var11 = -90; + } + + if(var9 == 2 && var1.adjacentChestXPos != null) { + GL11.glTranslatef(1.0F, 0.0F, 0.0F); + } + + if(var9 == 5 && var1.adjacentChestZPosition != null) { + GL11.glTranslatef(0.0F, 0.0F, -1.0F); + } + + GL11.glRotatef((float)var11, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + float var12 = var1.prevLidAngle + (var1.lidAngle - var1.prevLidAngle) * var8; + float var13; + if(var1.adjacentChestZNeg != null) { + var13 = var1.adjacentChestZNeg.prevLidAngle + (var1.adjacentChestZNeg.lidAngle - var1.adjacentChestZNeg.prevLidAngle) * var8; + if(var13 > var12) { + var12 = var13; + } + } + + if(var1.adjacentChestXNeg != null) { + var13 = var1.adjacentChestXNeg.prevLidAngle + (var1.adjacentChestXNeg.lidAngle - var1.adjacentChestXNeg.prevLidAngle) * var8; + if(var13 > var12) { + var12 = var13; + } + } + + var12 = 1.0F - var12; + var12 = 1.0F - var12 * var12 * var12; + var14.chestLid.rotateAngleX = -(var12 * (float)Math.PI / 2.0F); + var14.renderAll(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + } + + public void renderTileEntityAt(TileEntity var1, double var2, double var4, double var6, float var8) { + this.renderTileEntityChestAt((TileEntityChest)var1, var2, var4, var6, var8); + } +} diff --git a/src/net/minecraft/src/TileEntityCommandBlock.java b/src/net/minecraft/src/TileEntityCommandBlock.java new file mode 100644 index 0000000..165862b --- /dev/null +++ b/src/net/minecraft/src/TileEntityCommandBlock.java @@ -0,0 +1,86 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class TileEntityCommandBlock extends TileEntity implements ICommandSender { + private int succesCount = 0; + private String command = ""; + private String commandSenderName = "@"; + + public void setCommand(String var1) { + this.command = var1; + this.onInventoryChanged(); + } + + public String getCommand() { + return this.command; + } + + public int executeCommandOnPowered(World var1) { + if(var1.isRemote) { + return 0; + } else { + MinecraftServer var2 = MinecraftServer.getServer(); + if(var2 != null && var2.isCommandBlockEnabled()) { + ICommandManager var3 = var2.getCommandManager(); + return var3.executeCommand(this, this.command); + } else { + return 0; + } + } + } + + public String getCommandSenderName() { + return this.commandSenderName; + } + + public void setCommandSenderName(String var1) { + this.commandSenderName = var1; + } + + public void sendChatToPlayer(String var1) { + } + + public boolean canCommandSenderUseCommand(int var1, String var2) { + return var1 <= 2; + } + + public String translateString(String var1, Object... var2) { + return var1; + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setString("Command", this.command); + var1.setInteger("SuccessCount", this.succesCount); + var1.setString("CustomName", this.commandSenderName); + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + this.command = var1.getString("Command"); + this.succesCount = var1.getInteger("SuccessCount"); + if(var1.hasKey("CustomName")) { + this.commandSenderName = var1.getString("CustomName"); + } + + } + + public ChunkCoordinates getPlayerCoordinates() { + return new ChunkCoordinates(this.xCoord, this.yCoord, this.zCoord); + } + + public Packet getDescriptionPacket() { + NBTTagCompound var1 = new NBTTagCompound(); + this.writeToNBT(var1); + return new Packet132TileEntityData(this.xCoord, this.yCoord, this.zCoord, 2, var1); + } + + public int func_96103_d() { + return this.succesCount; + } + + public void func_96102_a(int var1) { + this.succesCount = var1; + } +} diff --git a/src/net/minecraft/src/TileEntityComparator.java b/src/net/minecraft/src/TileEntityComparator.java new file mode 100644 index 0000000..de54bea --- /dev/null +++ b/src/net/minecraft/src/TileEntityComparator.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +public class TileEntityComparator extends TileEntity { + private int field_96101_a = 0; + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setInteger("OutputSignal", this.field_96101_a); + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + this.field_96101_a = var1.getInteger("OutputSignal"); + } + + public int func_96100_a() { + return this.field_96101_a; + } + + public void func_96099_a(int var1) { + this.field_96101_a = var1; + } +} diff --git a/src/net/minecraft/src/TileEntityDaylightDetector.java b/src/net/minecraft/src/TileEntityDaylightDetector.java new file mode 100644 index 0000000..6fbb9b0 --- /dev/null +++ b/src/net/minecraft/src/TileEntityDaylightDetector.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class TileEntityDaylightDetector extends TileEntity { + public void updateEntity() { + if(this.worldObj != null && !this.worldObj.isRemote && this.worldObj.getTotalWorldTime() % 20L == 0L) { + this.blockType = this.getBlockType(); + if(this.blockType != null && this.blockType instanceof BlockDaylightDetector) { + ((BlockDaylightDetector)this.blockType).updateLightLevel(this.worldObj, this.xCoord, this.yCoord, this.zCoord); + } + } + + } +} diff --git a/src/net/minecraft/src/TileEntityDispenser.java b/src/net/minecraft/src/TileEntityDispenser.java new file mode 100644 index 0000000..f521d42 --- /dev/null +++ b/src/net/minecraft/src/TileEntityDispenser.java @@ -0,0 +1,151 @@ +package net.minecraft.src; + +import java.util.Random; + +public class TileEntityDispenser extends TileEntity implements IInventory { + private ItemStack[] dispenserContents = new ItemStack[9]; + private Random dispenserRandom = new Random(); + protected String customName; + + public int getSizeInventory() { + return 9; + } + + public ItemStack getStackInSlot(int var1) { + return this.dispenserContents[var1]; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.dispenserContents[var1] != null) { + ItemStack var3; + if(this.dispenserContents[var1].stackSize <= var2) { + var3 = this.dispenserContents[var1]; + this.dispenserContents[var1] = null; + this.onInventoryChanged(); + return var3; + } else { + var3 = this.dispenserContents[var1].splitStack(var2); + if(this.dispenserContents[var1].stackSize == 0) { + this.dispenserContents[var1] = null; + } + + this.onInventoryChanged(); + return var3; + } + } else { + return null; + } + } + + public ItemStack getStackInSlotOnClosing(int var1) { + if(this.dispenserContents[var1] != null) { + ItemStack var2 = this.dispenserContents[var1]; + this.dispenserContents[var1] = null; + return var2; + } else { + return null; + } + } + + public int getRandomStackFromInventory() { + int var1 = -1; + int var2 = 1; + + for(int var3 = 0; var3 < this.dispenserContents.length; ++var3) { + if(this.dispenserContents[var3] != null && this.dispenserRandom.nextInt(var2++) == 0) { + var1 = var3; + } + } + + return var1; + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.dispenserContents[var1] = var2; + if(var2 != null && var2.stackSize > this.getInventoryStackLimit()) { + var2.stackSize = this.getInventoryStackLimit(); + } + + this.onInventoryChanged(); + } + + public int addItem(ItemStack var1) { + for(int var2 = 0; var2 < this.dispenserContents.length; ++var2) { + if(this.dispenserContents[var2] == null || this.dispenserContents[var2].itemID == 0) { + this.setInventorySlotContents(var2, var1); + return var2; + } + } + + return -1; + } + + public String getInvName() { + return this.isInvNameLocalized() ? this.customName : "container.dispenser"; + } + + public void setCustomName(String var1) { + this.customName = var1; + } + + public boolean isInvNameLocalized() { + return this.customName != null; + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + NBTTagList var2 = var1.getTagList("Items"); + this.dispenserContents = new ItemStack[this.getSizeInventory()]; + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + int var5 = var4.getByte("Slot") & 255; + if(var5 >= 0 && var5 < this.dispenserContents.length) { + this.dispenserContents[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + + if(var1.hasKey("CustomName")) { + this.customName = var1.getString("CustomName"); + } + + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + NBTTagList var2 = new NBTTagList(); + + for(int var3 = 0; var3 < this.dispenserContents.length; ++var3) { + if(this.dispenserContents[var3] != null) { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.dispenserContents[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + + var1.setTag("Items", var2); + if(this.isInvNameLocalized()) { + var1.setString("CustomName", this.customName); + } + + } + + public int getInventoryStackLimit() { + return 64; + } + + public boolean isUseableByPlayer(EntityPlayer var1) { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : var1.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + + public void openChest() { + } + + public void closeChest() { + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return true; + } +} diff --git a/src/net/minecraft/src/TileEntityDropper.java b/src/net/minecraft/src/TileEntityDropper.java new file mode 100644 index 0000000..0917b1b --- /dev/null +++ b/src/net/minecraft/src/TileEntityDropper.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class TileEntityDropper extends TileEntityDispenser { + public String getInvName() { + return this.isInvNameLocalized() ? this.customName : "container.dropper"; + } +} diff --git a/src/net/minecraft/src/TileEntityEnchantmentTable.java b/src/net/minecraft/src/TileEntityEnchantmentTable.java new file mode 100644 index 0000000..74b2a35 --- /dev/null +++ b/src/net/minecraft/src/TileEntityEnchantmentTable.java @@ -0,0 +1,117 @@ +package net.minecraft.src; + +import java.util.Random; + +public class TileEntityEnchantmentTable extends TileEntity { + public int tickCount; + public float pageFlip; + public float pageFlipPrev; + public float field_70373_d; + public float field_70374_e; + public float bookSpread; + public float bookSpreadPrev; + public float bookRotation2; + public float bookRotationPrev; + public float bookRotation; + private static Random rand = new Random(); + private String field_94136_s; + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + if(this.func_94135_b()) { + var1.setString("CustomName", this.field_94136_s); + } + + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + if(var1.hasKey("CustomName")) { + this.field_94136_s = var1.getString("CustomName"); + } + + } + + public void updateEntity() { + super.updateEntity(); + this.bookSpreadPrev = this.bookSpread; + this.bookRotationPrev = this.bookRotation2; + EntityPlayer var1 = this.worldObj.getClosestPlayer((double)((float)this.xCoord + 0.5F), (double)((float)this.yCoord + 0.5F), (double)((float)this.zCoord + 0.5F), 3.0D); + if(var1 != null) { + double var2 = var1.posX - (double)((float)this.xCoord + 0.5F); + double var4 = var1.posZ - (double)((float)this.zCoord + 0.5F); + this.bookRotation = (float)Math.atan2(var4, var2); + this.bookSpread += 0.1F; + if(this.bookSpread < 0.5F || rand.nextInt(40) == 0) { + float var6 = this.field_70373_d; + + do { + this.field_70373_d += (float)(rand.nextInt(4) - rand.nextInt(4)); + } while(var6 == this.field_70373_d); + } + } else { + this.bookRotation += 0.02F; + this.bookSpread -= 0.1F; + } + + while(this.bookRotation2 >= (float)Math.PI) { + this.bookRotation2 -= (float)Math.PI * 2.0F; + } + + while(this.bookRotation2 < -((float)Math.PI)) { + this.bookRotation2 += (float)Math.PI * 2.0F; + } + + while(this.bookRotation >= (float)Math.PI) { + this.bookRotation -= (float)Math.PI * 2.0F; + } + + while(this.bookRotation < -((float)Math.PI)) { + this.bookRotation += (float)Math.PI * 2.0F; + } + + float var7; + for(var7 = this.bookRotation - this.bookRotation2; var7 >= (float)Math.PI; var7 -= (float)Math.PI * 2.0F) { + } + + while(var7 < -((float)Math.PI)) { + var7 += (float)Math.PI * 2.0F; + } + + this.bookRotation2 += var7 * 0.4F; + if(this.bookSpread < 0.0F) { + this.bookSpread = 0.0F; + } + + if(this.bookSpread > 1.0F) { + this.bookSpread = 1.0F; + } + + ++this.tickCount; + this.pageFlipPrev = this.pageFlip; + float var3 = (this.field_70373_d - this.pageFlip) * 0.4F; + float var8 = 0.2F; + if(var3 < -var8) { + var3 = -var8; + } + + if(var3 > var8) { + var3 = var8; + } + + this.field_70374_e += (var3 - this.field_70374_e) * 0.9F; + this.pageFlip += this.field_70374_e; + } + + public String func_94133_a() { + return this.func_94135_b() ? this.field_94136_s : "container.enchant"; + } + + public boolean func_94135_b() { + return this.field_94136_s != null && this.field_94136_s.length() > 0; + } + + public void func_94134_a(String var1) { + this.field_94136_s = var1; + } +} diff --git a/src/net/minecraft/src/TileEntityEndPortal.java b/src/net/minecraft/src/TileEntityEndPortal.java new file mode 100644 index 0000000..64b43cc --- /dev/null +++ b/src/net/minecraft/src/TileEntityEndPortal.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public class TileEntityEndPortal extends TileEntity { +} diff --git a/src/net/minecraft/src/TileEntityEnderChest.java b/src/net/minecraft/src/TileEntityEnderChest.java new file mode 100644 index 0000000..7ef36c6 --- /dev/null +++ b/src/net/minecraft/src/TileEntityEnderChest.java @@ -0,0 +1,77 @@ +package net.minecraft.src; + +public class TileEntityEnderChest extends TileEntity { + public float lidAngle; + public float prevLidAngle; + public int numUsingPlayers; + private int ticksSinceSync; + + public void updateEntity() { + super.updateEntity(); + if(++this.ticksSinceSync % 20 * 4 == 0) { + this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, Block.enderChest.blockID, 1, this.numUsingPlayers); + } + + this.prevLidAngle = this.lidAngle; + float var1 = 0.1F; + double var4; + if(this.numUsingPlayers > 0 && this.lidAngle == 0.0F) { + double var2 = (double)this.xCoord + 0.5D; + var4 = (double)this.zCoord + 0.5D; + this.worldObj.playSoundEffect(var2, (double)this.yCoord + 0.5D, var4, "random.chestopen", 0.5F, this.worldObj.rand.nextFloat() * 0.1F + 0.9F); + } + + if(this.numUsingPlayers == 0 && this.lidAngle > 0.0F || this.numUsingPlayers > 0 && this.lidAngle < 1.0F) { + float var8 = this.lidAngle; + if(this.numUsingPlayers > 0) { + this.lidAngle += var1; + } else { + this.lidAngle -= var1; + } + + if(this.lidAngle > 1.0F) { + this.lidAngle = 1.0F; + } + + float var3 = 0.5F; + if(this.lidAngle < var3 && var8 >= var3) { + var4 = (double)this.xCoord + 0.5D; + double var6 = (double)this.zCoord + 0.5D; + this.worldObj.playSoundEffect(var4, (double)this.yCoord + 0.5D, var6, "random.chestclosed", 0.5F, this.worldObj.rand.nextFloat() * 0.1F + 0.9F); + } + + if(this.lidAngle < 0.0F) { + this.lidAngle = 0.0F; + } + } + + } + + public boolean receiveClientEvent(int var1, int var2) { + if(var1 == 1) { + this.numUsingPlayers = var2; + return true; + } else { + return super.receiveClientEvent(var1, var2); + } + } + + public void invalidate() { + this.updateContainingBlockInfo(); + super.invalidate(); + } + + public void openChest() { + ++this.numUsingPlayers; + this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, Block.enderChest.blockID, 1, this.numUsingPlayers); + } + + public void closeChest() { + --this.numUsingPlayers; + this.worldObj.addBlockEvent(this.xCoord, this.yCoord, this.zCoord, Block.enderChest.blockID, 1, this.numUsingPlayers); + } + + public boolean isUseableByPlayer(EntityPlayer var1) { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : var1.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } +} diff --git a/src/net/minecraft/src/TileEntityEnderChestRenderer.java b/src/net/minecraft/src/TileEntityEnderChestRenderer.java new file mode 100644 index 0000000..1a8ec65 --- /dev/null +++ b/src/net/minecraft/src/TileEntityEnderChestRenderer.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class TileEntityEnderChestRenderer extends TileEntitySpecialRenderer { + private ModelChest theEnderChestModel = new ModelChest(); + + public void renderEnderChest(TileEntityEnderChest var1, double var2, double var4, double var6, float var8) { + int var9 = 0; + if(var1.func_70309_m()) { + var9 = var1.getBlockMetadata(); + } + + this.bindTextureByName("/item/enderchest.png"); + GL11.glPushMatrix(); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef((float)var2, (float)var4 + 1.0F, (float)var6 + 1.0F); + GL11.glScalef(1.0F, -1.0F, -1.0F); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + short var10 = 0; + if(var9 == 2) { + var10 = 180; + } + + if(var9 == 3) { + var10 = 0; + } + + if(var9 == 4) { + var10 = 90; + } + + if(var9 == 5) { + var10 = -90; + } + + GL11.glRotatef((float)var10, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + float var11 = var1.prevLidAngle + (var1.lidAngle - var1.prevLidAngle) * var8; + var11 = 1.0F - var11; + var11 = 1.0F - var11 * var11 * var11; + this.theEnderChestModel.chestLid.rotateAngleX = -(var11 * (float)Math.PI / 2.0F); + this.theEnderChestModel.renderAll(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + } + + public void renderTileEntityAt(TileEntity var1, double var2, double var4, double var6, float var8) { + this.renderEnderChest((TileEntityEnderChest)var1, var2, var4, var6, var8); + } +} diff --git a/src/net/minecraft/src/TileEntityFurnace.java b/src/net/minecraft/src/TileEntityFurnace.java new file mode 100644 index 0000000..6e4ac02 --- /dev/null +++ b/src/net/minecraft/src/TileEntityFurnace.java @@ -0,0 +1,256 @@ +package net.minecraft.src; + +public class TileEntityFurnace extends TileEntity implements ISidedInventory { + private static final int[] field_102010_d = new int[]{0}; + private static final int[] field_102011_e = new int[]{2, 1}; + private static final int[] field_102009_f = new int[]{1}; + private ItemStack[] furnaceItemStacks = new ItemStack[3]; + public int furnaceBurnTime = 0; + public int currentItemBurnTime = 0; + public int furnaceCookTime = 0; + private String field_94130_e; + + public int getSizeInventory() { + return this.furnaceItemStacks.length; + } + + public ItemStack getStackInSlot(int var1) { + return this.furnaceItemStacks[var1]; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.furnaceItemStacks[var1] != null) { + ItemStack var3; + if(this.furnaceItemStacks[var1].stackSize <= var2) { + var3 = this.furnaceItemStacks[var1]; + this.furnaceItemStacks[var1] = null; + return var3; + } else { + var3 = this.furnaceItemStacks[var1].splitStack(var2); + if(this.furnaceItemStacks[var1].stackSize == 0) { + this.furnaceItemStacks[var1] = null; + } + + return var3; + } + } else { + return null; + } + } + + public ItemStack getStackInSlotOnClosing(int var1) { + if(this.furnaceItemStacks[var1] != null) { + ItemStack var2 = this.furnaceItemStacks[var1]; + this.furnaceItemStacks[var1] = null; + return var2; + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.furnaceItemStacks[var1] = var2; + if(var2 != null && var2.stackSize > this.getInventoryStackLimit()) { + var2.stackSize = this.getInventoryStackLimit(); + } + + } + + public String getInvName() { + return this.isInvNameLocalized() ? this.field_94130_e : "container.furnace"; + } + + public boolean isInvNameLocalized() { + return this.field_94130_e != null && this.field_94130_e.length() > 0; + } + + public void func_94129_a(String var1) { + this.field_94130_e = var1; + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + NBTTagList var2 = var1.getTagList("Items"); + this.furnaceItemStacks = new ItemStack[this.getSizeInventory()]; + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + if(var5 >= 0 && var5 < this.furnaceItemStacks.length) { + this.furnaceItemStacks[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + + this.furnaceBurnTime = var1.getShort("BurnTime"); + this.furnaceCookTime = var1.getShort("CookTime"); + this.currentItemBurnTime = getItemBurnTime(this.furnaceItemStacks[1]); + if(var1.hasKey("CustomName")) { + this.field_94130_e = var1.getString("CustomName"); + } + + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setShort("BurnTime", (short)this.furnaceBurnTime); + var1.setShort("CookTime", (short)this.furnaceCookTime); + NBTTagList var2 = new NBTTagList(); + + for(int var3 = 0; var3 < this.furnaceItemStacks.length; ++var3) { + if(this.furnaceItemStacks[var3] != null) { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.furnaceItemStacks[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + + var1.setTag("Items", var2); + if(this.isInvNameLocalized()) { + var1.setString("CustomName", this.field_94130_e); + } + + } + + public int getInventoryStackLimit() { + return 64; + } + + public int getCookProgressScaled(int var1) { + return this.furnaceCookTime * var1 / 200; + } + + public int getBurnTimeRemainingScaled(int var1) { + if(this.currentItemBurnTime == 0) { + this.currentItemBurnTime = 200; + } + + return this.furnaceBurnTime * var1 / this.currentItemBurnTime; + } + + public boolean isBurning() { + return this.furnaceBurnTime > 0; + } + + public void updateEntity() { + boolean var1 = this.furnaceBurnTime > 0; + boolean var2 = false; + if(this.furnaceBurnTime > 0) { + --this.furnaceBurnTime; + } + + if(!this.worldObj.isRemote) { + if(this.furnaceBurnTime == 0 && this.canSmelt()) { + this.currentItemBurnTime = this.furnaceBurnTime = getItemBurnTime(this.furnaceItemStacks[1]); + if(this.furnaceBurnTime > 0) { + var2 = true; + if(this.furnaceItemStacks[1] != null) { + --this.furnaceItemStacks[1].stackSize; + if(this.furnaceItemStacks[1].stackSize == 0) { + Item var3 = this.furnaceItemStacks[1].getItem().getContainerItem(); + this.furnaceItemStacks[1] = var3 != null ? new ItemStack(var3) : null; + } + } + } + } + + if(this.isBurning() && this.canSmelt()) { + ++this.furnaceCookTime; + if(this.furnaceCookTime == 200) { + this.furnaceCookTime = 0; + this.smeltItem(); + var2 = true; + } + } else { + this.furnaceCookTime = 0; + } + + if(var1 != this.furnaceBurnTime > 0) { + var2 = true; + BlockFurnace.updateFurnaceBlockState(this.furnaceBurnTime > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord); + } + } + + if(var2) { + this.onInventoryChanged(); + } + + } + + private boolean canSmelt() { + if(this.furnaceItemStacks[0] == null) { + return false; + } else { + ItemStack var1 = FurnaceRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0].getItem().itemID); + return var1 == null ? false : (this.furnaceItemStacks[2] == null ? true : (!this.furnaceItemStacks[2].isItemEqual(var1) ? false : (this.furnaceItemStacks[2].stackSize < this.getInventoryStackLimit() && this.furnaceItemStacks[2].stackSize < this.furnaceItemStacks[2].getMaxStackSize() ? true : this.furnaceItemStacks[2].stackSize < var1.getMaxStackSize()))); + } + } + + public void smeltItem() { + if(this.canSmelt()) { + ItemStack var1 = FurnaceRecipes.smelting().getSmeltingResult(this.furnaceItemStacks[0].getItem().itemID); + if(this.furnaceItemStacks[2] == null) { + this.furnaceItemStacks[2] = var1.copy(); + } else if(this.furnaceItemStacks[2].itemID == var1.itemID) { + ++this.furnaceItemStacks[2].stackSize; + } + + --this.furnaceItemStacks[0].stackSize; + if(this.furnaceItemStacks[0].stackSize <= 0) { + this.furnaceItemStacks[0] = null; + } + + } + } + + public static int getItemBurnTime(ItemStack var0) { + if(var0 == null) { + return 0; + } else { + int var1 = var0.getItem().itemID; + Item var2 = var0.getItem(); + if(var1 < 256 && Block.blocksList[var1] != null) { + Block var3 = Block.blocksList[var1]; + if(var3 == Block.woodSingleSlab) { + return 150; + } + + if(var3.blockMaterial == Material.wood) { + return 300; + } + } + + return var2 instanceof ItemTool && ((ItemTool)var2).getToolMaterialName().equals("WOOD") ? 200 : (var2 instanceof ItemSword && ((ItemSword)var2).getToolMaterialName().equals("WOOD") ? 200 : (var2 instanceof ItemHoe && ((ItemHoe)var2).getMaterialName().equals("WOOD") ? 200 : (var1 == Item.stick.itemID ? 100 : (var1 == Item.coal.itemID ? 1600 : (var1 == Item.bucketLava.itemID ? 20000 : (var1 == Block.sapling.blockID ? 100 : (var1 == Item.blazeRod.itemID ? 2400 : 0))))))); + } + } + + public static boolean isItemFuel(ItemStack var0) { + return getItemBurnTime(var0) > 0; + } + + public boolean isUseableByPlayer(EntityPlayer var1) { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : var1.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + + public void openChest() { + } + + public void closeChest() { + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return var1 == 2 ? false : (var1 == 1 ? isItemFuel(var2) : true); + } + + public int[] getAccessibleSlotsFromSide(int var1) { + return var1 == 0 ? field_102011_e : (var1 == 1 ? field_102010_d : field_102009_f); + } + + public boolean canInsertItem(int var1, ItemStack var2, int var3) { + return this.isStackValidForSlot(var1, var2); + } + + public boolean canExtractItem(int var1, ItemStack var2, int var3) { + return var3 != 0 || var1 != 1 || var2.itemID == Item.bucketEmpty.itemID; + } +} diff --git a/src/net/minecraft/src/TileEntityHopper.java b/src/net/minecraft/src/TileEntityHopper.java new file mode 100644 index 0000000..166b81a --- /dev/null +++ b/src/net/minecraft/src/TileEntityHopper.java @@ -0,0 +1,370 @@ +package net.minecraft.src; + +import java.util.List; + +public class TileEntityHopper extends TileEntity implements Hopper { + private ItemStack[] hopperItemStacks = new ItemStack[5]; + private String inventoryName; + private int transferCooldown = -1; + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + NBTTagList var2 = var1.getTagList("Items"); + this.hopperItemStacks = new ItemStack[this.getSizeInventory()]; + if(var1.hasKey("CustomName")) { + this.inventoryName = var1.getString("CustomName"); + } + + this.transferCooldown = var1.getInteger("TransferCooldown"); + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + if(var5 >= 0 && var5 < this.hopperItemStacks.length) { + this.hopperItemStacks[var5] = ItemStack.loadItemStackFromNBT(var4); + } + } + + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + NBTTagList var2 = new NBTTagList(); + + for(int var3 = 0; var3 < this.hopperItemStacks.length; ++var3) { + if(this.hopperItemStacks[var3] != null) { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.hopperItemStacks[var3].writeToNBT(var4); + var2.appendTag(var4); + } + } + + var1.setTag("Items", var2); + var1.setInteger("TransferCooldown", this.transferCooldown); + if(this.isInvNameLocalized()) { + var1.setString("CustomName", this.inventoryName); + } + + } + + public void onInventoryChanged() { + super.onInventoryChanged(); + } + + public int getSizeInventory() { + return this.hopperItemStacks.length; + } + + public ItemStack getStackInSlot(int var1) { + return this.hopperItemStacks[var1]; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.hopperItemStacks[var1] != null) { + ItemStack var3; + if(this.hopperItemStacks[var1].stackSize <= var2) { + var3 = this.hopperItemStacks[var1]; + this.hopperItemStacks[var1] = null; + return var3; + } else { + var3 = this.hopperItemStacks[var1].splitStack(var2); + if(this.hopperItemStacks[var1].stackSize == 0) { + this.hopperItemStacks[var1] = null; + } + + return var3; + } + } else { + return null; + } + } + + public ItemStack getStackInSlotOnClosing(int var1) { + if(this.hopperItemStacks[var1] != null) { + ItemStack var2 = this.hopperItemStacks[var1]; + this.hopperItemStacks[var1] = null; + return var2; + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.hopperItemStacks[var1] = var2; + if(var2 != null && var2.stackSize > this.getInventoryStackLimit()) { + var2.stackSize = this.getInventoryStackLimit(); + } + + } + + public String getInvName() { + return this.isInvNameLocalized() ? this.inventoryName : "container.hopper"; + } + + public boolean isInvNameLocalized() { + return this.inventoryName != null && this.inventoryName.length() > 0; + } + + public void setInventoryName(String var1) { + this.inventoryName = var1; + } + + public int getInventoryStackLimit() { + return 64; + } + + public boolean isUseableByPlayer(EntityPlayer var1) { + return this.worldObj.getBlockTileEntity(this.xCoord, this.yCoord, this.zCoord) != this ? false : var1.getDistanceSq((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D) <= 64.0D; + } + + public void openChest() { + } + + public void closeChest() { + } + + public boolean isStackValidForSlot(int var1, ItemStack var2) { + return true; + } + + public void updateEntity() { + if(this.worldObj != null && !this.worldObj.isRemote) { + --this.transferCooldown; + if(!this.isCoolingDown()) { + this.setTransferCooldown(0); + this.func_98045_j(); + } + + } + } + + public boolean func_98045_j() { + if(this.worldObj != null && !this.worldObj.isRemote) { + if(!this.isCoolingDown() && BlockHopper.getIsBlockNotPoweredFromMetadata(this.getBlockMetadata())) { + boolean var1 = this.insertItemToInventory() | suckItemsIntoHopper(this); + if(var1) { + this.setTransferCooldown(8); + this.onInventoryChanged(); + return true; + } + } + + return false; + } else { + return false; + } + } + + private boolean insertItemToInventory() { + IInventory var1 = this.getOutputInventory(); + if(var1 == null) { + return false; + } else { + for(int var2 = 0; var2 < this.getSizeInventory(); ++var2) { + if(this.getStackInSlot(var2) != null) { + ItemStack var3 = this.getStackInSlot(var2).copy(); + ItemStack var4 = insertStack(var1, this.decrStackSize(var2, 1), Facing.oppositeSide[BlockHopper.getDirectionFromMetadata(this.getBlockMetadata())]); + if(var4 == null || var4.stackSize == 0) { + var1.onInventoryChanged(); + return true; + } + + this.setInventorySlotContents(var2, var3); + } + } + + return false; + } + } + + public static boolean suckItemsIntoHopper(Hopper var0) { + IInventory var1 = getInventoryAboveHopper(var0); + if(var1 != null) { + byte var2 = 0; + if(var1 instanceof ISidedInventory && var2 > -1) { + ISidedInventory var7 = (ISidedInventory)var1; + int[] var8 = var7.getAccessibleSlotsFromSide(var2); + + for(int var5 = 0; var5 < var8.length; ++var5) { + if(func_102012_a(var0, var1, var8[var5], var2)) { + return true; + } + } + } else { + int var3 = var1.getSizeInventory(); + + for(int var4 = 0; var4 < var3; ++var4) { + if(func_102012_a(var0, var1, var4, var2)) { + return true; + } + } + } + } else { + EntityItem var6 = func_96119_a(var0.getWorldObj(), var0.getXPos(), var0.getYPos() + 1.0D, var0.getZPos()); + if(var6 != null) { + return func_96114_a(var0, var6); + } + } + + return false; + } + + private static boolean func_102012_a(Hopper var0, IInventory var1, int var2, int var3) { + ItemStack var4 = var1.getStackInSlot(var2); + if(var4 != null && canExtractItemFromInventory(var1, var4, var2, var3)) { + ItemStack var5 = var4.copy(); + ItemStack var6 = insertStack(var0, var1.decrStackSize(var2, 1), -1); + if(var6 == null || var6.stackSize == 0) { + var1.onInventoryChanged(); + return true; + } + + var1.setInventorySlotContents(var2, var5); + } + + return false; + } + + public static boolean func_96114_a(IInventory var0, EntityItem var1) { + boolean var2 = false; + if(var1 == null) { + return false; + } else { + ItemStack var3 = var1.getEntityItem().copy(); + ItemStack var4 = insertStack(var0, var3, -1); + if(var4 != null && var4.stackSize != 0) { + var1.setEntityItemStack(var4); + } else { + var2 = true; + var1.setDead(); + } + + return var2; + } + } + + public static ItemStack insertStack(IInventory var0, ItemStack var1, int var2) { + if(var0 instanceof ISidedInventory && var2 > -1) { + ISidedInventory var6 = (ISidedInventory)var0; + int[] var7 = var6.getAccessibleSlotsFromSide(var2); + + for(int var5 = 0; var5 < var7.length && var1 != null && var1.stackSize > 0; ++var5) { + var1 = func_102014_c(var0, var1, var7[var5], var2); + } + } else { + int var3 = var0.getSizeInventory(); + + for(int var4 = 0; var4 < var3 && var1 != null && var1.stackSize > 0; ++var4) { + var1 = func_102014_c(var0, var1, var4, var2); + } + } + + if(var1 != null && var1.stackSize == 0) { + var1 = null; + } + + return var1; + } + + private static boolean func_102015_a(IInventory var0, ItemStack var1, int var2, int var3) { + return !var0.isStackValidForSlot(var2, var1) ? false : !(var0 instanceof ISidedInventory) || ((ISidedInventory)var0).canInsertItem(var2, var1, var3); + } + + private static boolean canExtractItemFromInventory(IInventory var0, ItemStack var1, int var2, int var3) { + return !(var0 instanceof ISidedInventory) || ((ISidedInventory)var0).canExtractItem(var2, var1, var3); + } + + private static ItemStack func_102014_c(IInventory var0, ItemStack var1, int var2, int var3) { + ItemStack var4 = var0.getStackInSlot(var2); + if(func_102015_a(var0, var1, var2, var3)) { + boolean var5 = false; + if(var4 == null) { + var0.setInventorySlotContents(var2, var1); + var1 = null; + var5 = true; + } else if(areItemStacksEqualItem(var4, var1)) { + int var6 = var1.getMaxStackSize() - var4.stackSize; + int var7 = Math.min(var1.stackSize, var6); + var1.stackSize -= var7; + var4.stackSize += var7; + var5 = var7 > 0; + } + + if(var5) { + if(var0 instanceof TileEntityHopper) { + ((TileEntityHopper)var0).setTransferCooldown(8); + } + + var0.onInventoryChanged(); + } + } + + return var1; + } + + private IInventory getOutputInventory() { + int var1 = BlockHopper.getDirectionFromMetadata(this.getBlockMetadata()); + return getInventoryAtLocation(this.getWorldObj(), (double)(this.xCoord + Facing.offsetsXForSide[var1]), (double)(this.yCoord + Facing.offsetsYForSide[var1]), (double)(this.zCoord + Facing.offsetsZForSide[var1])); + } + + public static IInventory getInventoryAboveHopper(Hopper var0) { + return getInventoryAtLocation(var0.getWorldObj(), var0.getXPos(), var0.getYPos() + 1.0D, var0.getZPos()); + } + + public static EntityItem func_96119_a(World var0, double var1, double var3, double var5) { + List var7 = var0.selectEntitiesWithinAABB(EntityItem.class, AxisAlignedBB.getAABBPool().getAABB(var1, var3, var5, var1 + 1.0D, var3 + 1.0D, var5 + 1.0D), IEntitySelector.selectAnything); + return var7.size() > 0 ? (EntityItem)var7.get(0) : null; + } + + public static IInventory getInventoryAtLocation(World var0, double var1, double var3, double var5) { + IInventory var7 = null; + int var8 = MathHelper.floor_double(var1); + int var9 = MathHelper.floor_double(var3); + int var10 = MathHelper.floor_double(var5); + TileEntity var11 = var0.getBlockTileEntity(var8, var9, var10); + if(var11 != null && var11 instanceof IInventory) { + var7 = (IInventory)var11; + if(var7 instanceof TileEntityChest) { + int var12 = var0.getBlockId(var8, var9, var10); + Block var13 = Block.blocksList[var12]; + if(var13 instanceof BlockChest) { + var7 = ((BlockChest)var13).getInventory(var0, var8, var9, var10); + } + } + } + + if(var7 == null) { + List var14 = var0.getEntitiesWithinAABBExcludingEntity((Entity)null, AxisAlignedBB.getAABBPool().getAABB(var1, var3, var5, var1 + 1.0D, var3 + 1.0D, var5 + 1.0D), IEntitySelector.selectInventories); + if(var14 != null && var14.size() > 0) { + var7 = (IInventory)var14.get(var0.rand.nextInt(var14.size())); + } + } + + return var7; + } + + private static boolean areItemStacksEqualItem(ItemStack var0, ItemStack var1) { + return var0.itemID != var1.itemID ? false : (var0.getItemDamage() != var1.getItemDamage() ? false : (var0.stackSize > var0.getMaxStackSize() ? false : ItemStack.areItemStackTagsEqual(var0, var1))); + } + + public double getXPos() { + return (double)this.xCoord; + } + + public double getYPos() { + return (double)this.yCoord; + } + + public double getZPos() { + return (double)this.zCoord; + } + + public void setTransferCooldown(int var1) { + this.transferCooldown = var1; + } + + public boolean isCoolingDown() { + return this.transferCooldown > 0; + } +} diff --git a/src/net/minecraft/src/TileEntityMobSpawner.java b/src/net/minecraft/src/TileEntityMobSpawner.java new file mode 100644 index 0000000..a935824 --- /dev/null +++ b/src/net/minecraft/src/TileEntityMobSpawner.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +public class TileEntityMobSpawner extends TileEntity { + private final MobSpawnerBaseLogic field_98050_a = new TileEntityMobSpawnerLogic(this); + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + this.field_98050_a.readFromNBT(var1); + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + this.field_98050_a.writeToNBT(var1); + } + + public void updateEntity() { + this.field_98050_a.updateSpawner(); + super.updateEntity(); + } + + public Packet getDescriptionPacket() { + NBTTagCompound var1 = new NBTTagCompound(); + this.writeToNBT(var1); + var1.removeTag("SpawnPotentials"); + return new Packet132TileEntityData(this.xCoord, this.yCoord, this.zCoord, 1, var1); + } + + public boolean receiveClientEvent(int var1, int var2) { + return this.field_98050_a.setDelayToMin(var1) ? true : super.receiveClientEvent(var1, var2); + } + + public MobSpawnerBaseLogic func_98049_a() { + return this.field_98050_a; + } +} diff --git a/src/net/minecraft/src/TileEntityMobSpawnerLogic.java b/src/net/minecraft/src/TileEntityMobSpawnerLogic.java new file mode 100644 index 0000000..6049418 --- /dev/null +++ b/src/net/minecraft/src/TileEntityMobSpawnerLogic.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +class TileEntityMobSpawnerLogic extends MobSpawnerBaseLogic { + final TileEntityMobSpawner mobSpawnerEntity; + + TileEntityMobSpawnerLogic(TileEntityMobSpawner var1) { + this.mobSpawnerEntity = var1; + } + + public void func_98267_a(int var1) { + this.mobSpawnerEntity.worldObj.addBlockEvent(this.mobSpawnerEntity.xCoord, this.mobSpawnerEntity.yCoord, this.mobSpawnerEntity.zCoord, Block.mobSpawner.blockID, var1, 0); + } + + public World getSpawnerWorld() { + return this.mobSpawnerEntity.worldObj; + } + + public int getSpawnerX() { + return this.mobSpawnerEntity.xCoord; + } + + public int getSpawnerY() { + return this.mobSpawnerEntity.yCoord; + } + + public int getSpawnerZ() { + return this.mobSpawnerEntity.zCoord; + } + + public void setRandomMinecart(WeightedRandomMinecart var1) { + super.setRandomMinecart(var1); + if(this.getSpawnerWorld() != null) { + this.getSpawnerWorld().markBlockForUpdate(this.mobSpawnerEntity.xCoord, this.mobSpawnerEntity.yCoord, this.mobSpawnerEntity.zCoord); + } + + } +} diff --git a/src/net/minecraft/src/TileEntityMobSpawnerRenderer.java b/src/net/minecraft/src/TileEntityMobSpawnerRenderer.java new file mode 100644 index 0000000..5d02c31 --- /dev/null +++ b/src/net/minecraft/src/TileEntityMobSpawnerRenderer.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class TileEntityMobSpawnerRenderer extends TileEntitySpecialRenderer { + public void renderTileEntityMobSpawner(TileEntityMobSpawner var1, double var2, double var4, double var6, float var8) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2 + 0.5F, (float)var4, (float)var6 + 0.5F); + func_98144_a(var1.func_98049_a(), var2, var4, var6, var8); + GL11.glPopMatrix(); + } + + public static void func_98144_a(MobSpawnerBaseLogic var0, double var1, double var3, double var5, float var7) { + Entity var8 = var0.func_98281_h(); + if(var8 != null) { + var8.setWorld(var0.getSpawnerWorld()); + float var9 = 7.0F / 16.0F; + GL11.glTranslatef(0.0F, 0.4F, 0.0F); + GL11.glRotatef((float)(var0.field_98284_d + (var0.field_98287_c - var0.field_98284_d) * (double)var7) * 10.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-30.0F, 1.0F, 0.0F, 0.0F); + GL11.glTranslatef(0.0F, -0.4F, 0.0F); + GL11.glScalef(var9, var9, var9); + var8.setLocationAndAngles(var1, var3, var5, 0.0F, 0.0F); + RenderManager.instance.renderEntityWithPosYaw(var8, 0.0D, 0.0D, 0.0D, 0.0F, var7); + } + + } + + public void renderTileEntityAt(TileEntity var1, double var2, double var4, double var6, float var8) { + this.renderTileEntityMobSpawner((TileEntityMobSpawner)var1, var2, var4, var6, var8); + } +} diff --git a/src/net/minecraft/src/TileEntityNote.java b/src/net/minecraft/src/TileEntityNote.java new file mode 100644 index 0000000..d36b1e8 --- /dev/null +++ b/src/net/minecraft/src/TileEntityNote.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +public class TileEntityNote extends TileEntity { + public byte note = 0; + public boolean previousRedstoneState = false; + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setByte("note", this.note); + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + this.note = var1.getByte("note"); + if(this.note < 0) { + this.note = 0; + } + + if(this.note > 24) { + this.note = 24; + } + + } + + public void changePitch() { + this.note = (byte)((this.note + 1) % 25); + this.onInventoryChanged(); + } + + public void triggerNote(World var1, int var2, int var3, int var4) { + if(var1.getBlockMaterial(var2, var3 + 1, var4) == Material.air) { + Material var5 = var1.getBlockMaterial(var2, var3 - 1, var4); + byte var6 = 0; + if(var5 == Material.rock) { + var6 = 1; + } + + if(var5 == Material.sand) { + var6 = 2; + } + + if(var5 == Material.glass) { + var6 = 3; + } + + if(var5 == Material.wood) { + var6 = 4; + } + + var1.addBlockEvent(var2, var3, var4, Block.music.blockID, var6, this.note); + } + } +} diff --git a/src/net/minecraft/src/TileEntityPiston.java b/src/net/minecraft/src/TileEntityPiston.java new file mode 100644 index 0000000..0bf1170 --- /dev/null +++ b/src/net/minecraft/src/TileEntityPiston.java @@ -0,0 +1,147 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class TileEntityPiston extends TileEntity { + private int storedBlockID; + private int storedMetadata; + private int storedOrientation; + private boolean extending; + private boolean shouldHeadBeRendered; + private float progress; + private float lastProgress; + private List pushedObjects = new ArrayList(); + + public TileEntityPiston() { + } + + public TileEntityPiston(int var1, int var2, int var3, boolean var4, boolean var5) { + this.storedBlockID = var1; + this.storedMetadata = var2; + this.storedOrientation = var3; + this.extending = var4; + this.shouldHeadBeRendered = var5; + } + + public int getStoredBlockID() { + return this.storedBlockID; + } + + public int getBlockMetadata() { + return this.storedMetadata; + } + + public boolean isExtending() { + return this.extending; + } + + public int getPistonOrientation() { + return this.storedOrientation; + } + + public boolean shouldRenderHead() { + return this.shouldHeadBeRendered; + } + + public float getProgress(float var1) { + if(var1 > 1.0F) { + var1 = 1.0F; + } + + return this.lastProgress + (this.progress - this.lastProgress) * var1; + } + + public float getOffsetX(float var1) { + return this.extending ? (this.getProgress(var1) - 1.0F) * (float)Facing.offsetsXForSide[this.storedOrientation] : (1.0F - this.getProgress(var1)) * (float)Facing.offsetsXForSide[this.storedOrientation]; + } + + public float getOffsetY(float var1) { + return this.extending ? (this.getProgress(var1) - 1.0F) * (float)Facing.offsetsYForSide[this.storedOrientation] : (1.0F - this.getProgress(var1)) * (float)Facing.offsetsYForSide[this.storedOrientation]; + } + + public float getOffsetZ(float var1) { + return this.extending ? (this.getProgress(var1) - 1.0F) * (float)Facing.offsetsZForSide[this.storedOrientation] : (1.0F - this.getProgress(var1)) * (float)Facing.offsetsZForSide[this.storedOrientation]; + } + + private void updatePushedObjects(float var1, float var2) { + if(this.extending) { + var1 = 1.0F - var1; + } else { + --var1; + } + + AxisAlignedBB var3 = Block.pistonMoving.getAxisAlignedBB(this.worldObj, this.xCoord, this.yCoord, this.zCoord, this.storedBlockID, var1, this.storedOrientation); + if(var3 != null) { + List var4 = this.worldObj.getEntitiesWithinAABBExcludingEntity((Entity)null, var3); + if(!var4.isEmpty()) { + this.pushedObjects.addAll(var4); + Iterator var5 = this.pushedObjects.iterator(); + + while(var5.hasNext()) { + Entity var6 = (Entity)var5.next(); + var6.moveEntity((double)(var2 * (float)Facing.offsetsXForSide[this.storedOrientation]), (double)(var2 * (float)Facing.offsetsYForSide[this.storedOrientation]), (double)(var2 * (float)Facing.offsetsZForSide[this.storedOrientation])); + } + + this.pushedObjects.clear(); + } + } + + } + + public void clearPistonTileEntity() { + if(this.lastProgress < 1.0F && this.worldObj != null) { + this.lastProgress = this.progress = 1.0F; + this.worldObj.removeBlockTileEntity(this.xCoord, this.yCoord, this.zCoord); + this.invalidate(); + if(this.worldObj.getBlockId(this.xCoord, this.yCoord, this.zCoord) == Block.pistonMoving.blockID) { + this.worldObj.setBlock(this.xCoord, this.yCoord, this.zCoord, this.storedBlockID, this.storedMetadata, 3); + this.worldObj.notifyBlockOfNeighborChange(this.xCoord, this.yCoord, this.zCoord, this.storedBlockID); + } + } + + } + + public void updateEntity() { + this.lastProgress = this.progress; + if(this.lastProgress >= 1.0F) { + this.updatePushedObjects(1.0F, 0.25F); + this.worldObj.removeBlockTileEntity(this.xCoord, this.yCoord, this.zCoord); + this.invalidate(); + if(this.worldObj.getBlockId(this.xCoord, this.yCoord, this.zCoord) == Block.pistonMoving.blockID) { + this.worldObj.setBlock(this.xCoord, this.yCoord, this.zCoord, this.storedBlockID, this.storedMetadata, 3); + this.worldObj.notifyBlockOfNeighborChange(this.xCoord, this.yCoord, this.zCoord, this.storedBlockID); + } + + } else { + this.progress += 0.5F; + if(this.progress >= 1.0F) { + this.progress = 1.0F; + } + + if(this.extending) { + this.updatePushedObjects(this.progress, this.progress - this.lastProgress + 1.0F / 16.0F); + } + + } + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + this.storedBlockID = var1.getInteger("blockId"); + this.storedMetadata = var1.getInteger("blockData"); + this.storedOrientation = var1.getInteger("facing"); + this.lastProgress = this.progress = var1.getFloat("progress"); + this.extending = var1.getBoolean("extending"); + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setInteger("blockId", this.storedBlockID); + var1.setInteger("blockData", this.storedMetadata); + var1.setInteger("facing", this.storedOrientation); + var1.setFloat("progress", this.lastProgress); + var1.setBoolean("extending", this.extending); + } +} diff --git a/src/net/minecraft/src/TileEntityRecordPlayer.java b/src/net/minecraft/src/TileEntityRecordPlayer.java new file mode 100644 index 0000000..532ae6b --- /dev/null +++ b/src/net/minecraft/src/TileEntityRecordPlayer.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +public class TileEntityRecordPlayer extends TileEntity { + private ItemStack record; + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + if(var1.hasKey("RecordItem")) { + this.func_96098_a(ItemStack.loadItemStackFromNBT(var1.getCompoundTag("RecordItem"))); + } else if(var1.getInteger("Record") > 0) { + this.func_96098_a(new ItemStack(var1.getInteger("Record"), 1, 0)); + } + + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + if(this.func_96097_a() != null) { + var1.setCompoundTag("RecordItem", this.func_96097_a().writeToNBT(new NBTTagCompound())); + var1.setInteger("Record", this.func_96097_a().itemID); + } + + } + + public ItemStack func_96097_a() { + return this.record; + } + + public void func_96098_a(ItemStack var1) { + this.record = var1; + this.onInventoryChanged(); + } +} diff --git a/src/net/minecraft/src/TileEntityRenderer.java b/src/net/minecraft/src/TileEntityRenderer.java new file mode 100644 index 0000000..ed065fe --- /dev/null +++ b/src/net/minecraft/src/TileEntityRenderer.java @@ -0,0 +1,119 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; +import org.lwjgl.opengl.GL11; + +public class TileEntityRenderer { + private Map specialRendererMap = new HashMap(); + public static TileEntityRenderer instance = new TileEntityRenderer(); + private FontRenderer fontRenderer; + public static double staticPlayerX; + public static double staticPlayerY; + public static double staticPlayerZ; + public RenderEngine renderEngine; + public World worldObj; + public EntityLiving entityLivingPlayer; + public float playerYaw; + public float playerPitch; + public double playerX; + public double playerY; + public double playerZ; + + private TileEntityRenderer() { + this.specialRendererMap.put(TileEntitySign.class, new TileEntitySignRenderer()); + this.specialRendererMap.put(TileEntityMobSpawner.class, new TileEntityMobSpawnerRenderer()); + this.specialRendererMap.put(TileEntityPiston.class, new TileEntityRendererPiston()); + this.specialRendererMap.put(TileEntityChest.class, new TileEntityChestRenderer()); + this.specialRendererMap.put(TileEntityEnderChest.class, new TileEntityEnderChestRenderer()); + this.specialRendererMap.put(TileEntityEnchantmentTable.class, new RenderEnchantmentTable()); + this.specialRendererMap.put(TileEntityEndPortal.class, new RenderEndPortal()); + this.specialRendererMap.put(TileEntityBeacon.class, new TileEntityBeaconRenderer()); + this.specialRendererMap.put(TileEntitySkull.class, new TileEntitySkullRenderer()); + Iterator var1 = this.specialRendererMap.values().iterator(); + + while(var1.hasNext()) { + TileEntitySpecialRenderer var2 = (TileEntitySpecialRenderer)var1.next(); + var2.setTileEntityRenderer(this); + } + + } + + public TileEntitySpecialRenderer getSpecialRendererForClass(Class var1) { + TileEntitySpecialRenderer var2 = (TileEntitySpecialRenderer)this.specialRendererMap.get(var1); + if(var2 == null && var1 != TileEntity.class) { + var2 = this.getSpecialRendererForClass(var1.getSuperclass()); + this.specialRendererMap.put(var1, var2); + } + + return var2; + } + + public boolean hasSpecialRenderer(TileEntity var1) { + return this.getSpecialRendererForEntity(var1) != null; + } + + public TileEntitySpecialRenderer getSpecialRendererForEntity(TileEntity var1) { + return var1 == null ? null : this.getSpecialRendererForClass(var1.getClass()); + } + + public void cacheActiveRenderInfo(World var1, RenderEngine var2, FontRenderer var3, EntityLiving var4, float var5) { + if(this.worldObj != var1) { + this.setWorld(var1); + } + + this.renderEngine = var2; + this.entityLivingPlayer = var4; + this.fontRenderer = var3; + this.playerYaw = var4.prevRotationYaw + (var4.rotationYaw - var4.prevRotationYaw) * var5; + this.playerPitch = var4.prevRotationPitch + (var4.rotationPitch - var4.prevRotationPitch) * var5; + this.playerX = var4.lastTickPosX + (var4.posX - var4.lastTickPosX) * (double)var5; + this.playerY = var4.lastTickPosY + (var4.posY - var4.lastTickPosY) * (double)var5; + this.playerZ = var4.lastTickPosZ + (var4.posZ - var4.lastTickPosZ) * (double)var5; + } + + public void renderTileEntity(TileEntity var1, float var2) { + if(var1.getDistanceFrom(this.playerX, this.playerY, this.playerZ) < var1.getMaxRenderDistanceSquared()) { + int var3 = this.worldObj.getLightBrightnessForSkyBlocks(var1.xCoord, var1.yCoord, var1.zCoord, 0); + int var4 = var3 % 65536; + int var5 = var3 / 65536; + OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, (float)var4 / 1.0F, (float)var5 / 1.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.renderTileEntityAt(var1, (double)var1.xCoord - staticPlayerX, (double)var1.yCoord - staticPlayerY, (double)var1.zCoord - staticPlayerZ, var2); + } + + } + + public void renderTileEntityAt(TileEntity var1, double var2, double var4, double var6, float var8) { + TileEntitySpecialRenderer var9 = this.getSpecialRendererForEntity(var1); + if(var9 != null) { + try { + var9.renderTileEntityAt(var1, var2, var4, var6, var8); + } catch (Throwable var13) { + CrashReport var11 = CrashReport.makeCrashReport(var13, "Rendering Tile Entity"); + CrashReportCategory var12 = var11.makeCategory("Tile Entity Details"); + var1.func_85027_a(var12); + throw new ReportedException(var11); + } + } + + } + + public void setWorld(World var1) { + this.worldObj = var1; + Iterator var2 = this.specialRendererMap.values().iterator(); + + while(var2.hasNext()) { + TileEntitySpecialRenderer var3 = (TileEntitySpecialRenderer)var2.next(); + if(var3 != null) { + var3.onWorldChange(var1); + } + } + + } + + public FontRenderer getFontRenderer() { + return this.fontRenderer; + } +} diff --git a/src/net/minecraft/src/TileEntityRendererPiston.java b/src/net/minecraft/src/TileEntityRendererPiston.java new file mode 100644 index 0000000..58dd1d7 --- /dev/null +++ b/src/net/minecraft/src/TileEntityRendererPiston.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import org.lwjgl.opengl.GL11; + +public class TileEntityRendererPiston extends TileEntitySpecialRenderer { + private RenderBlocks blockRenderer; + + public void renderPiston(TileEntityPiston var1, double var2, double var4, double var6, float var8) { + Block var9 = Block.blocksList[var1.getStoredBlockID()]; + if(var9 != null && var1.getProgress(var8) < 1.0F) { + Tessellator var10 = Tessellator.instance; + this.bindTextureByName("/terrain.png"); + RenderHelper.disableStandardItemLighting(); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_CULL_FACE); + if(Minecraft.isAmbientOcclusionEnabled()) { + GL11.glShadeModel(GL11.GL_SMOOTH); + } else { + GL11.glShadeModel(GL11.GL_FLAT); + } + + var10.startDrawingQuads(); + var10.setTranslation((double)((float)var2 - (float)var1.xCoord + var1.getOffsetX(var8)), (double)((float)var4 - (float)var1.yCoord + var1.getOffsetY(var8)), (double)((float)var6 - (float)var1.zCoord + var1.getOffsetZ(var8))); + var10.setColorOpaque(1, 1, 1); + if(var9 == Block.pistonExtension && var1.getProgress(var8) < 0.5F) { + this.blockRenderer.renderPistonExtensionAllFaces(var9, var1.xCoord, var1.yCoord, var1.zCoord, false); + } else if(var1.shouldRenderHead() && !var1.isExtending()) { + Block.pistonExtension.setHeadTexture(((BlockPistonBase)var9).getPistonExtensionTexture()); + this.blockRenderer.renderPistonExtensionAllFaces(Block.pistonExtension, var1.xCoord, var1.yCoord, var1.zCoord, var1.getProgress(var8) < 0.5F); + Block.pistonExtension.clearHeadTexture(); + var10.setTranslation((double)((float)var2 - (float)var1.xCoord), (double)((float)var4 - (float)var1.yCoord), (double)((float)var6 - (float)var1.zCoord)); + this.blockRenderer.renderPistonBaseAllFaces(var9, var1.xCoord, var1.yCoord, var1.zCoord); + } else { + this.blockRenderer.renderBlockAllFaces(var9, var1.xCoord, var1.yCoord, var1.zCoord); + } + + var10.setTranslation(0.0D, 0.0D, 0.0D); + var10.draw(); + RenderHelper.enableStandardItemLighting(); + } + + } + + public void onWorldChange(World var1) { + this.blockRenderer = new RenderBlocks(var1); + } + + public void renderTileEntityAt(TileEntity var1, double var2, double var4, double var6, float var8) { + this.renderPiston((TileEntityPiston)var1, var2, var4, var6, var8); + } +} diff --git a/src/net/minecraft/src/TileEntitySign.java b/src/net/minecraft/src/TileEntitySign.java new file mode 100644 index 0000000..efcd412 --- /dev/null +++ b/src/net/minecraft/src/TileEntitySign.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +public class TileEntitySign extends TileEntity { + public String[] signText = new String[]{"", "", "", ""}; + public int lineBeingEdited = -1; + private boolean isEditable = true; + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setString("Text1", this.signText[0]); + var1.setString("Text2", this.signText[1]); + var1.setString("Text3", this.signText[2]); + var1.setString("Text4", this.signText[3]); + } + + public void readFromNBT(NBTTagCompound var1) { + this.isEditable = false; + super.readFromNBT(var1); + + for(int var2 = 0; var2 < 4; ++var2) { + this.signText[var2] = var1.getString("Text" + (var2 + 1)); + if(this.signText[var2].length() > 15) { + this.signText[var2] = this.signText[var2].substring(0, 15); + } + } + + } + + public Packet getDescriptionPacket() { + String[] var1 = new String[4]; + System.arraycopy(this.signText, 0, var1, 0, 4); + return new Packet130UpdateSign(this.xCoord, this.yCoord, this.zCoord, var1); + } + + public boolean isEditable() { + return this.isEditable; + } + + public void setEditable(boolean var1) { + this.isEditable = var1; + } +} diff --git a/src/net/minecraft/src/TileEntitySignRenderer.java b/src/net/minecraft/src/TileEntitySignRenderer.java new file mode 100644 index 0000000..f66ea81 --- /dev/null +++ b/src/net/minecraft/src/TileEntitySignRenderer.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class TileEntitySignRenderer extends TileEntitySpecialRenderer { + private ModelSign modelSign = new ModelSign(); + + public void renderTileEntitySignAt(TileEntitySign var1, double var2, double var4, double var6, float var8) { + Block var9 = var1.getBlockType(); + GL11.glPushMatrix(); + float var10 = 2.0F / 3.0F; + float var12; + if(var9 == Block.signPost) { + GL11.glTranslatef((float)var2 + 0.5F, (float)var4 + 12.0F / 16.0F * var10, (float)var6 + 0.5F); + float var11 = (float)(var1.getBlockMetadata() * 360) / 16.0F; + GL11.glRotatef(-var11, 0.0F, 1.0F, 0.0F); + this.modelSign.signStick.showModel = true; + } else { + int var16 = var1.getBlockMetadata(); + var12 = 0.0F; + if(var16 == 2) { + var12 = 180.0F; + } + + if(var16 == 4) { + var12 = 90.0F; + } + + if(var16 == 5) { + var12 = -90.0F; + } + + GL11.glTranslatef((float)var2 + 0.5F, (float)var4 + 12.0F / 16.0F * var10, (float)var6 + 0.5F); + GL11.glRotatef(-var12, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, -(5.0F / 16.0F), -(7.0F / 16.0F)); + this.modelSign.signStick.showModel = false; + } + + this.bindTextureByName("/item/sign.png"); + GL11.glPushMatrix(); + GL11.glScalef(var10, -var10, -var10); + this.modelSign.renderSign(); + GL11.glPopMatrix(); + FontRenderer var17 = this.getFontRenderer(); + var12 = (float)(1.0D / 60.0D) * var10; + GL11.glTranslatef(0.0F, 0.5F * var10, 0.07F * var10); + GL11.glScalef(var12, -var12, var12); + GL11.glNormal3f(0.0F, 0.0F, -1.0F * var12); + GL11.glDepthMask(false); + byte var13 = 0; + + for(int var14 = 0; var14 < var1.signText.length; ++var14) { + String var15 = var1.signText[var14]; + if(var14 == var1.lineBeingEdited) { + var15 = "> " + var15 + " <"; + var17.drawString(var15, -var17.getStringWidth(var15) / 2, var14 * 10 - var1.signText.length * 5, var13); + } else { + var17.drawString(var15, -var17.getStringWidth(var15) / 2, var14 * 10 - var1.signText.length * 5, var13); + } + } + + GL11.glDepthMask(true); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glPopMatrix(); + } + + public void renderTileEntityAt(TileEntity var1, double var2, double var4, double var6, float var8) { + this.renderTileEntitySignAt((TileEntitySign)var1, var2, var4, var6, var8); + } +} diff --git a/src/net/minecraft/src/TileEntitySkull.java b/src/net/minecraft/src/TileEntitySkull.java new file mode 100644 index 0000000..26ac52c --- /dev/null +++ b/src/net/minecraft/src/TileEntitySkull.java @@ -0,0 +1,51 @@ +package net.minecraft.src; + +public class TileEntitySkull extends TileEntity { + private int skullType; + private int skullRotation; + private String extraType = ""; + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setByte("SkullType", (byte)(this.skullType & 255)); + var1.setByte("Rot", (byte)(this.skullRotation & 255)); + var1.setString("ExtraType", this.extraType); + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + this.skullType = var1.getByte("SkullType"); + this.skullRotation = var1.getByte("Rot"); + if(var1.hasKey("ExtraType")) { + this.extraType = var1.getString("ExtraType"); + } + + } + + public Packet getDescriptionPacket() { + NBTTagCompound var1 = new NBTTagCompound(); + this.writeToNBT(var1); + return new Packet132TileEntityData(this.xCoord, this.yCoord, this.zCoord, 4, var1); + } + + public void setSkullType(int var1, String var2) { + this.skullType = var1; + this.extraType = var2; + } + + public int getSkullType() { + return this.skullType; + } + + public int func_82119_b() { + return this.skullRotation; + } + + public void setSkullRotation(int var1) { + this.skullRotation = var1; + } + + public String getExtraType() { + return this.extraType; + } +} diff --git a/src/net/minecraft/src/TileEntitySkullRenderer.java b/src/net/minecraft/src/TileEntitySkullRenderer.java new file mode 100644 index 0000000..e7d3fce --- /dev/null +++ b/src/net/minecraft/src/TileEntitySkullRenderer.java @@ -0,0 +1,85 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class TileEntitySkullRenderer extends TileEntitySpecialRenderer { + public static TileEntitySkullRenderer skullRenderer; + private ModelSkeletonHead field_82396_c = new ModelSkeletonHead(0, 0, 64, 32); + private ModelSkeletonHead field_82395_d = new ModelSkeletonHead(0, 0, 64, 64); + + public void renderTileEntitySkullAt(TileEntitySkull var1, double var2, double var4, double var6, float var8) { + this.func_82393_a((float)var2, (float)var4, (float)var6, var1.getBlockMetadata() & 7, (float)(var1.func_82119_b() * 360) / 16.0F, var1.getSkullType(), var1.getExtraType()); + } + + public void setTileEntityRenderer(TileEntityRenderer var1) { + super.setTileEntityRenderer(var1); + skullRenderer = this; + } + + public void func_82393_a(float var1, float var2, float var3, int var4, float var5, int var6, String var7) { + ModelSkeletonHead var8 = this.field_82396_c; + switch(var6) { + case 0: + default: + this.bindTextureByName("/mob/skeleton.png"); + break; + case 1: + this.bindTextureByName("/mob/skeleton_wither.png"); + break; + case 2: + this.bindTextureByName("/mob/zombie.png"); + var8 = this.field_82395_d; + break; + case 3: + if(var7 != null && var7.length() > 0) { + String var9 = "http://skins.minecraft.net/MinecraftSkins/" + StringUtils.stripControlCodes(var7) + ".png"; + if(!skullRenderer.tileEntityRenderer.renderEngine.hasImageData(var9)) { + skullRenderer.tileEntityRenderer.renderEngine.obtainImageData(var9, new ImageBufferDownload()); + } + + this.bindTextureByURL(var9, "/mob/char.png"); + } else { + this.bindTextureByName("/mob/char.png"); + } + break; + case 4: + this.bindTextureByName("/mob/creeper.png"); + } + + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_CULL_FACE); + if(var4 != 1) { + switch(var4) { + case 2: + GL11.glTranslatef(var1 + 0.5F, var2 + 0.25F, var3 + 0.74F); + break; + case 3: + GL11.glTranslatef(var1 + 0.5F, var2 + 0.25F, var3 + 0.26F); + var5 = 180.0F; + break; + case 4: + GL11.glTranslatef(var1 + 0.74F, var2 + 0.25F, var3 + 0.5F); + var5 = 270.0F; + break; + case 5: + default: + GL11.glTranslatef(var1 + 0.26F, var2 + 0.25F, var3 + 0.5F); + var5 = 90.0F; + } + } else { + GL11.glTranslatef(var1 + 0.5F, var2, var3 + 0.5F); + } + + float var10 = 1.0F / 16.0F; + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glScalef(-1.0F, -1.0F, 1.0F); + GL11.glEnable(GL11.GL_ALPHA_TEST); + var8.render((Entity)null, 0.0F, 0.0F, 0.0F, var5, 0.0F, var10); + GL11.glPopMatrix(); + } + + public void renderTileEntityAt(TileEntity var1, double var2, double var4, double var6, float var8) { + this.renderTileEntitySkullAt((TileEntitySkull)var1, var2, var4, var6, var8); + } +} diff --git a/src/net/minecraft/src/TileEntitySpecialRenderer.java b/src/net/minecraft/src/TileEntitySpecialRenderer.java new file mode 100644 index 0000000..a88ee8f --- /dev/null +++ b/src/net/minecraft/src/TileEntitySpecialRenderer.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public abstract class TileEntitySpecialRenderer { + protected TileEntityRenderer tileEntityRenderer; + + public abstract void renderTileEntityAt(TileEntity var1, double var2, double var4, double var6, float var8); + + protected void bindTextureByName(String var1) { + RenderEngine var2 = this.tileEntityRenderer.renderEngine; + if(var2 != null) { + var2.bindTexture(var1); + } + + } + + protected void bindTextureByURL(String var1, String var2) { + RenderEngine var3 = this.tileEntityRenderer.renderEngine; + if(var3 != null) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var3.getTextureForDownloadableImage(var1, var2)); + } + + var3.resetBoundTexture(); + } + + public void setTileEntityRenderer(TileEntityRenderer var1) { + this.tileEntityRenderer = var1; + } + + public void onWorldChange(World var1) { + } + + public FontRenderer getFontRenderer() { + return this.tileEntityRenderer.getFontRenderer(); + } +} diff --git a/src/net/minecraft/src/Timer.java b/src/net/minecraft/src/Timer.java new file mode 100644 index 0000000..c898579 --- /dev/null +++ b/src/net/minecraft/src/Timer.java @@ -0,0 +1,65 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +public class Timer { + float ticksPerSecond; + private double lastHRTime; + public int elapsedTicks; + public float renderPartialTicks; + public float timerSpeed = 1.0F; + public float elapsedPartialTicks = 0.0F; + private long lastSyncSysClock; + private long lastSyncHRClock; + private long field_74285_i; + private double timeSyncAdjustment = 1.0D; + + public Timer(float var1) { + this.ticksPerSecond = var1; + this.lastSyncSysClock = Minecraft.getSystemTime(); + this.lastSyncHRClock = System.nanoTime() / 1000000L; + } + + public void updateTimer() { + long var1 = Minecraft.getSystemTime(); + long var3 = var1 - this.lastSyncSysClock; + long var5 = System.nanoTime() / 1000000L; + double var7 = (double)var5 / 1000.0D; + if(var3 <= 1000L && var3 >= 0L) { + this.field_74285_i += var3; + if(this.field_74285_i > 1000L) { + long var9 = var5 - this.lastSyncHRClock; + double var11 = (double)this.field_74285_i / (double)var9; + this.timeSyncAdjustment += (var11 - this.timeSyncAdjustment) * (double)0.2F; + this.lastSyncHRClock = var5; + this.field_74285_i = 0L; + } + + if(this.field_74285_i < 0L) { + this.lastSyncHRClock = var5; + } + } else { + this.lastHRTime = var7; + } + + this.lastSyncSysClock = var1; + double var13 = (var7 - this.lastHRTime) * this.timeSyncAdjustment; + this.lastHRTime = var7; + if(var13 < 0.0D) { + var13 = 0.0D; + } + + if(var13 > 1.0D) { + var13 = 1.0D; + } + + this.elapsedPartialTicks = (float)((double)this.elapsedPartialTicks + var13 * (double)this.timerSpeed * (double)this.ticksPerSecond); + this.elapsedTicks = (int)this.elapsedPartialTicks; + this.elapsedPartialTicks -= (float)this.elapsedTicks; + if(this.elapsedTicks > 10) { + this.elapsedTicks = 10; + } + + this.renderPartialTicks = this.elapsedPartialTicks; + } +} diff --git a/src/net/minecraft/src/TimerTaskMcoServerListUpdate.java b/src/net/minecraft/src/TimerTaskMcoServerListUpdate.java new file mode 100644 index 0000000..6c3ffbe --- /dev/null +++ b/src/net/minecraft/src/TimerTaskMcoServerListUpdate.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.util.Collections; +import java.util.List; +import java.util.TimerTask; + +class TimerTaskMcoServerListUpdate extends TimerTask { + McoClient field_98262_a; + final McoServerList field_98261_b; + + private TimerTaskMcoServerListUpdate(McoServerList var1) { + this.field_98261_b = var1; + this.field_98262_a = new McoClient(McoServerList.func_100014_a(this.field_98261_b)); + } + + public void run() { + if(!McoServerList.func_98249_b(this.field_98261_b)) { + this.func_98260_a(); + } + + } + + private void func_98260_a() { + try { + List var1 = this.field_98262_a.func_96382_a().field_96430_d; + this.func_101018_a(var1); + McoServerList.func_98247_a(this.field_98261_b, var1); + } catch (ExceptionMcoService var2) { + } catch (IOException var3) { + System.err.println(var3); + } + + } + + private void func_101018_a(List var1) { + Collections.sort(var1, new TimerTaskMcoServerListUpdateComparator(this, McoServerList.func_100014_a(this.field_98261_b).username, (McoServerListINNER1)null)); + } + + TimerTaskMcoServerListUpdate(McoServerList var1, McoServerListINNER1 var2) { + this(var1); + } +} diff --git a/src/net/minecraft/src/TimerTaskMcoServerListUpdateComparator.java b/src/net/minecraft/src/TimerTaskMcoServerListUpdateComparator.java new file mode 100644 index 0000000..d3814f0 --- /dev/null +++ b/src/net/minecraft/src/TimerTaskMcoServerListUpdateComparator.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +import java.util.Comparator; + +class TimerTaskMcoServerListUpdateComparator implements Comparator { + private final String field_102024_b; + final TimerTaskMcoServerListUpdate field_102025_a; + + private TimerTaskMcoServerListUpdateComparator(TimerTaskMcoServerListUpdate var1, String var2) { + this.field_102025_a = var1; + this.field_102024_b = var2; + } + + public int func_102023_a(McoServer var1, McoServer var2) { + if(var1.field_96405_e.equals(var2.field_96405_e)) { + return var1.field_96408_a < var2.field_96408_a ? 1 : (var1.field_96408_a > var2.field_96408_a ? -1 : 0); + } else if(var1.field_96405_e.equals(this.field_102024_b)) { + return -1; + } else if(var2.field_96405_e.equals(this.field_102024_b)) { + return 1; + } else { + if(var1.field_96404_d.equals("CLOSED") || var2.field_96404_d.equals("CLOSED")) { + if(var1.field_96404_d.equals("CLOSED")) { + return 1; + } + + if(var2.field_96404_d.equals("CLOSED")) { + return 0; + } + } + + return var1.field_96408_a < var2.field_96408_a ? 1 : (var1.field_96408_a > var2.field_96408_a ? -1 : 0); + } + } + + public int compare(Object var1, Object var2) { + return this.func_102023_a((McoServer)var1, (McoServer)var2); + } + + TimerTaskMcoServerListUpdateComparator(TimerTaskMcoServerListUpdate var1, String var2, McoServerListINNER1 var3) { + this(var1, var2); + } +} diff --git a/src/net/minecraft/src/Tuple.java b/src/net/minecraft/src/Tuple.java new file mode 100644 index 0000000..1636c4b --- /dev/null +++ b/src/net/minecraft/src/Tuple.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class Tuple { + private Object first; + private Object second; + + public Tuple(Object var1, Object var2) { + this.first = var1; + this.second = var2; + } + + public Object getFirst() { + return this.first; + } + + public Object getSecond() { + return this.second; + } +} diff --git a/src/net/minecraft/src/ValueObject.java b/src/net/minecraft/src/ValueObject.java new file mode 100644 index 0000000..7fd490d --- /dev/null +++ b/src/net/minecraft/src/ValueObject.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; + +public abstract class ValueObject { + public String toString() { + StringBuilder var1 = new StringBuilder("{"); + Field[] var2 = this.getClass().getFields(); + int var3 = var2.length; + + for(int var4 = 0; var4 < var3; ++var4) { + Field var5 = var2[var4]; + if(!func_96394_a(var5)) { + try { + var1.append(var5.getName()).append("=").append(var5.get(this)).append(" "); + } catch (IllegalAccessException var7) { + } + } + } + + var1.deleteCharAt(var1.length() - 1); + var1.append('}'); + return var1.toString(); + } + + private static boolean func_96394_a(Field var0) { + return Modifier.isStatic(var0.getModifiers()); + } +} diff --git a/src/net/minecraft/src/ValueObjectList.java b/src/net/minecraft/src/ValueObjectList.java new file mode 100644 index 0000000..ca6e086 --- /dev/null +++ b/src/net/minecraft/src/ValueObjectList.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +import argo.jdom.JdomParser; +import argo.jdom.JsonNode; +import argo.jdom.JsonRootNode; +import argo.saj.InvalidSyntaxException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class ValueObjectList extends ValueObject { + public List field_96430_d; + + public static ValueObjectList func_98161_a(String var0) { + ValueObjectList var1 = new ValueObjectList(); + var1.field_96430_d = new ArrayList(); + + try { + JsonRootNode var2 = (new JdomParser()).parse(var0); + if(var2.isArrayNode(new Object[]{"servers"})) { + Iterator var3 = var2.getArrayNode(new Object[]{"servers"}).iterator(); + + while(var3.hasNext()) { + JsonNode var4 = (JsonNode)var3.next(); + var1.field_96430_d.add(McoServer.func_98163_a(var4)); + } + } + } catch (InvalidSyntaxException var5) { + } catch (IllegalArgumentException var6) { + } + + return var1; + } +} diff --git a/src/net/minecraft/src/ValueObjectSubscription.java b/src/net/minecraft/src/ValueObjectSubscription.java new file mode 100644 index 0000000..b4df954 --- /dev/null +++ b/src/net/minecraft/src/ValueObjectSubscription.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import argo.jdom.JdomParser; +import argo.jdom.JsonRootNode; +import argo.saj.InvalidSyntaxException; + +public class ValueObjectSubscription extends ValueObject { + public long field_98171_a; + public int field_98170_b; + + public static ValueObjectSubscription func_98169_a(String var0) { + ValueObjectSubscription var1 = new ValueObjectSubscription(); + + try { + JsonRootNode var2 = (new JdomParser()).parse(var0); + var1.field_98171_a = Long.parseLong(var2.getNumberValue(new Object[]{"startDate"})); + var1.field_98170_b = Integer.parseInt(var2.getNumberValue(new Object[]{"daysLeft"})); + } catch (InvalidSyntaxException var3) { + } catch (IllegalArgumentException var4) { + } + + return var1; + } +} diff --git a/src/net/minecraft/src/Vec3.java b/src/net/minecraft/src/Vec3.java new file mode 100644 index 0000000..1570839 --- /dev/null +++ b/src/net/minecraft/src/Vec3.java @@ -0,0 +1,158 @@ +package net.minecraft.src; + +public class Vec3 { + public static final Vec3Pool fakePool = new Vec3Pool(-1, -1); + public final Vec3Pool myVec3LocalPool; + public double xCoord; + public double yCoord; + public double zCoord; + + public static Vec3 createVectorHelper(double var0, double var2, double var4) { + return new Vec3(fakePool, var0, var2, var4); + } + + protected Vec3(Vec3Pool var1, double var2, double var4, double var6) { + if(var2 == -0.0D) { + var2 = 0.0D; + } + + if(var4 == -0.0D) { + var4 = 0.0D; + } + + if(var6 == -0.0D) { + var6 = 0.0D; + } + + this.xCoord = var2; + this.yCoord = var4; + this.zCoord = var6; + this.myVec3LocalPool = var1; + } + + protected Vec3 setComponents(double var1, double var3, double var5) { + this.xCoord = var1; + this.yCoord = var3; + this.zCoord = var5; + return this; + } + + public Vec3 subtract(Vec3 var1) { + return this.myVec3LocalPool.getVecFromPool(var1.xCoord - this.xCoord, var1.yCoord - this.yCoord, var1.zCoord - this.zCoord); + } + + public Vec3 normalize() { + double var1 = (double)MathHelper.sqrt_double(this.xCoord * this.xCoord + this.yCoord * this.yCoord + this.zCoord * this.zCoord); + return var1 < 1.0E-4D ? this.myVec3LocalPool.getVecFromPool(0.0D, 0.0D, 0.0D) : this.myVec3LocalPool.getVecFromPool(this.xCoord / var1, this.yCoord / var1, this.zCoord / var1); + } + + public double dotProduct(Vec3 var1) { + return this.xCoord * var1.xCoord + this.yCoord * var1.yCoord + this.zCoord * var1.zCoord; + } + + public Vec3 crossProduct(Vec3 var1) { + return this.myVec3LocalPool.getVecFromPool(this.yCoord * var1.zCoord - this.zCoord * var1.yCoord, this.zCoord * var1.xCoord - this.xCoord * var1.zCoord, this.xCoord * var1.yCoord - this.yCoord * var1.xCoord); + } + + public Vec3 addVector(double var1, double var3, double var5) { + return this.myVec3LocalPool.getVecFromPool(this.xCoord + var1, this.yCoord + var3, this.zCoord + var5); + } + + public double distanceTo(Vec3 var1) { + double var2 = var1.xCoord - this.xCoord; + double var4 = var1.yCoord - this.yCoord; + double var6 = var1.zCoord - this.zCoord; + return (double)MathHelper.sqrt_double(var2 * var2 + var4 * var4 + var6 * var6); + } + + public double squareDistanceTo(Vec3 var1) { + double var2 = var1.xCoord - this.xCoord; + double var4 = var1.yCoord - this.yCoord; + double var6 = var1.zCoord - this.zCoord; + return var2 * var2 + var4 * var4 + var6 * var6; + } + + public double squareDistanceTo(double var1, double var3, double var5) { + double var7 = var1 - this.xCoord; + double var9 = var3 - this.yCoord; + double var11 = var5 - this.zCoord; + return var7 * var7 + var9 * var9 + var11 * var11; + } + + public double lengthVector() { + return (double)MathHelper.sqrt_double(this.xCoord * this.xCoord + this.yCoord * this.yCoord + this.zCoord * this.zCoord); + } + + public Vec3 getIntermediateWithXValue(Vec3 var1, double var2) { + double var4 = var1.xCoord - this.xCoord; + double var6 = var1.yCoord - this.yCoord; + double var8 = var1.zCoord - this.zCoord; + if(var4 * var4 < (double)1.0E-7F) { + return null; + } else { + double var10 = (var2 - this.xCoord) / var4; + return var10 >= 0.0D && var10 <= 1.0D ? this.myVec3LocalPool.getVecFromPool(this.xCoord + var4 * var10, this.yCoord + var6 * var10, this.zCoord + var8 * var10) : null; + } + } + + public Vec3 getIntermediateWithYValue(Vec3 var1, double var2) { + double var4 = var1.xCoord - this.xCoord; + double var6 = var1.yCoord - this.yCoord; + double var8 = var1.zCoord - this.zCoord; + if(var6 * var6 < (double)1.0E-7F) { + return null; + } else { + double var10 = (var2 - this.yCoord) / var6; + return var10 >= 0.0D && var10 <= 1.0D ? this.myVec3LocalPool.getVecFromPool(this.xCoord + var4 * var10, this.yCoord + var6 * var10, this.zCoord + var8 * var10) : null; + } + } + + public Vec3 getIntermediateWithZValue(Vec3 var1, double var2) { + double var4 = var1.xCoord - this.xCoord; + double var6 = var1.yCoord - this.yCoord; + double var8 = var1.zCoord - this.zCoord; + if(var8 * var8 < (double)1.0E-7F) { + return null; + } else { + double var10 = (var2 - this.zCoord) / var8; + return var10 >= 0.0D && var10 <= 1.0D ? this.myVec3LocalPool.getVecFromPool(this.xCoord + var4 * var10, this.yCoord + var6 * var10, this.zCoord + var8 * var10) : null; + } + } + + public String toString() { + return "(" + this.xCoord + ", " + this.yCoord + ", " + this.zCoord + ")"; + } + + public void rotateAroundX(float var1) { + float var2 = MathHelper.cos(var1); + float var3 = MathHelper.sin(var1); + double var4 = this.xCoord; + double var6 = this.yCoord * (double)var2 + this.zCoord * (double)var3; + double var8 = this.zCoord * (double)var2 - this.yCoord * (double)var3; + this.xCoord = var4; + this.yCoord = var6; + this.zCoord = var8; + } + + public void rotateAroundY(float var1) { + float var2 = MathHelper.cos(var1); + float var3 = MathHelper.sin(var1); + double var4 = this.xCoord * (double)var2 + this.zCoord * (double)var3; + double var6 = this.yCoord; + double var8 = this.zCoord * (double)var2 - this.xCoord * (double)var3; + this.xCoord = var4; + this.yCoord = var6; + this.zCoord = var8; + } + + public void rotateAroundZ(float var1) { + float var2 = MathHelper.cos(var1); + float var3 = MathHelper.sin(var1); + double var4 = this.xCoord * (double)var2 + this.yCoord * (double)var3; + double var6 = this.yCoord * (double)var2 - this.xCoord * (double)var3; + double var8 = this.zCoord; + this.xCoord = var4; + this.yCoord = var6; + this.zCoord = var8; + } +} diff --git a/src/net/minecraft/src/Vec3Pool.java b/src/net/minecraft/src/Vec3Pool.java new file mode 100644 index 0000000..1a5f4bc --- /dev/null +++ b/src/net/minecraft/src/Vec3Pool.java @@ -0,0 +1,76 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class Vec3Pool { + private final int truncateArrayResetThreshold; + private final int minimumSize; + private final List vec3Cache = new ArrayList(); + private int nextFreeSpace = 0; + private int maximumSizeSinceLastTruncation = 0; + private int resetCount = 0; + + public Vec3Pool(int var1, int var2) { + this.truncateArrayResetThreshold = var1; + this.minimumSize = var2; + } + + public Vec3 getVecFromPool(double var1, double var3, double var5) { + if(this.func_82589_e()) { + return new Vec3(this, var1, var3, var5); + } else { + Vec3 var7; + if(this.nextFreeSpace >= this.vec3Cache.size()) { + var7 = new Vec3(this, var1, var3, var5); + this.vec3Cache.add(var7); + } else { + var7 = (Vec3)this.vec3Cache.get(this.nextFreeSpace); + var7.setComponents(var1, var3, var5); + } + + ++this.nextFreeSpace; + return var7; + } + } + + public void clear() { + if(!this.func_82589_e()) { + if(this.nextFreeSpace > this.maximumSizeSinceLastTruncation) { + this.maximumSizeSinceLastTruncation = this.nextFreeSpace; + } + + if(this.resetCount++ == this.truncateArrayResetThreshold) { + int var1 = Math.max(this.maximumSizeSinceLastTruncation, this.vec3Cache.size() - this.minimumSize); + + while(this.vec3Cache.size() > var1) { + this.vec3Cache.remove(var1); + } + + this.maximumSizeSinceLastTruncation = 0; + this.resetCount = 0; + } + + this.nextFreeSpace = 0; + } + } + + public void clearAndFreeCache() { + if(!this.func_82589_e()) { + this.nextFreeSpace = 0; + this.vec3Cache.clear(); + } + } + + public int getPoolSize() { + return this.vec3Cache.size(); + } + + public int func_82590_d() { + return this.nextFreeSpace; + } + + private boolean func_82589_e() { + return this.minimumSize < 0 || this.truncateArrayResetThreshold < 0; + } +} diff --git a/src/net/minecraft/src/Village.java b/src/net/minecraft/src/Village.java new file mode 100644 index 0000000..2f488c3 --- /dev/null +++ b/src/net/minecraft/src/Village.java @@ -0,0 +1,437 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.TreeMap; + +public class Village { + private World worldObj; + private final List villageDoorInfoList = new ArrayList(); + private final ChunkCoordinates centerHelper = new ChunkCoordinates(0, 0, 0); + private final ChunkCoordinates center = new ChunkCoordinates(0, 0, 0); + private int villageRadius = 0; + private int lastAddDoorTimestamp = 0; + private int tickCounter = 0; + private int numVillagers = 0; + private int noBreedTicks; + private TreeMap playerReputation = new TreeMap(); + private List villageAgressors = new ArrayList(); + private int numIronGolems = 0; + + public Village() { + } + + public Village(World var1) { + this.worldObj = var1; + } + + public void func_82691_a(World var1) { + this.worldObj = var1; + } + + public void tick(int var1) { + this.tickCounter = var1; + this.removeDeadAndOutOfRangeDoors(); + this.removeDeadAndOldAgressors(); + if(var1 % 20 == 0) { + this.updateNumVillagers(); + } + + if(var1 % 30 == 0) { + this.updateNumIronGolems(); + } + + int var2 = this.numVillagers / 10; + if(this.numIronGolems < var2 && this.villageDoorInfoList.size() > 20 && this.worldObj.rand.nextInt(7000) == 0) { + Vec3 var3 = this.tryGetIronGolemSpawningLocation(MathHelper.floor_float((float)this.center.posX), MathHelper.floor_float((float)this.center.posY), MathHelper.floor_float((float)this.center.posZ), 2, 4, 2); + if(var3 != null) { + EntityIronGolem var4 = new EntityIronGolem(this.worldObj); + var4.setPosition(var3.xCoord, var3.yCoord, var3.zCoord); + this.worldObj.spawnEntityInWorld(var4); + ++this.numIronGolems; + } + } + + } + + private Vec3 tryGetIronGolemSpawningLocation(int var1, int var2, int var3, int var4, int var5, int var6) { + for(int var7 = 0; var7 < 10; ++var7) { + int var8 = var1 + this.worldObj.rand.nextInt(16) - 8; + int var9 = var2 + this.worldObj.rand.nextInt(6) - 3; + int var10 = var3 + this.worldObj.rand.nextInt(16) - 8; + if(this.isInRange(var8, var9, var10) && this.isValidIronGolemSpawningLocation(var8, var9, var10, var4, var5, var6)) { + return this.worldObj.getWorldVec3Pool().getVecFromPool((double)var8, (double)var9, (double)var10); + } + } + + return null; + } + + private boolean isValidIronGolemSpawningLocation(int var1, int var2, int var3, int var4, int var5, int var6) { + if(!this.worldObj.doesBlockHaveSolidTopSurface(var1, var2 - 1, var3)) { + return false; + } else { + int var7 = var1 - var4 / 2; + int var8 = var3 - var6 / 2; + + for(int var9 = var7; var9 < var7 + var4; ++var9) { + for(int var10 = var2; var10 < var2 + var5; ++var10) { + for(int var11 = var8; var11 < var8 + var6; ++var11) { + if(this.worldObj.isBlockNormalCube(var9, var10, var11)) { + return false; + } + } + } + } + + return true; + } + } + + private void updateNumIronGolems() { + List var1 = this.worldObj.getEntitiesWithinAABB(EntityIronGolem.class, AxisAlignedBB.getAABBPool().getAABB((double)(this.center.posX - this.villageRadius), (double)(this.center.posY - 4), (double)(this.center.posZ - this.villageRadius), (double)(this.center.posX + this.villageRadius), (double)(this.center.posY + 4), (double)(this.center.posZ + this.villageRadius))); + this.numIronGolems = var1.size(); + } + + private void updateNumVillagers() { + List var1 = this.worldObj.getEntitiesWithinAABB(EntityVillager.class, AxisAlignedBB.getAABBPool().getAABB((double)(this.center.posX - this.villageRadius), (double)(this.center.posY - 4), (double)(this.center.posZ - this.villageRadius), (double)(this.center.posX + this.villageRadius), (double)(this.center.posY + 4), (double)(this.center.posZ + this.villageRadius))); + this.numVillagers = var1.size(); + if(this.numVillagers == 0) { + this.playerReputation.clear(); + } + + } + + public ChunkCoordinates getCenter() { + return this.center; + } + + public int getVillageRadius() { + return this.villageRadius; + } + + public int getNumVillageDoors() { + return this.villageDoorInfoList.size(); + } + + public int getTicksSinceLastDoorAdding() { + return this.tickCounter - this.lastAddDoorTimestamp; + } + + public int getNumVillagers() { + return this.numVillagers; + } + + public boolean isInRange(int var1, int var2, int var3) { + return this.center.getDistanceSquared(var1, var2, var3) < (float)(this.villageRadius * this.villageRadius); + } + + public List getVillageDoorInfoList() { + return this.villageDoorInfoList; + } + + public VillageDoorInfo findNearestDoor(int var1, int var2, int var3) { + VillageDoorInfo var4 = null; + int var5 = Integer.MAX_VALUE; + Iterator var6 = this.villageDoorInfoList.iterator(); + + while(var6.hasNext()) { + VillageDoorInfo var7 = (VillageDoorInfo)var6.next(); + int var8 = var7.getDistanceSquared(var1, var2, var3); + if(var8 < var5) { + var4 = var7; + var5 = var8; + } + } + + return var4; + } + + public VillageDoorInfo findNearestDoorUnrestricted(int var1, int var2, int var3) { + VillageDoorInfo var4 = null; + int var5 = Integer.MAX_VALUE; + Iterator var6 = this.villageDoorInfoList.iterator(); + + while(var6.hasNext()) { + VillageDoorInfo var7 = (VillageDoorInfo)var6.next(); + int var8 = var7.getDistanceSquared(var1, var2, var3); + if(var8 > 256) { + var8 *= 1000; + } else { + var8 = var7.getDoorOpeningRestrictionCounter(); + } + + if(var8 < var5) { + var4 = var7; + var5 = var8; + } + } + + return var4; + } + + public VillageDoorInfo getVillageDoorAt(int var1, int var2, int var3) { + if(this.center.getDistanceSquared(var1, var2, var3) > (float)(this.villageRadius * this.villageRadius)) { + return null; + } else { + Iterator var4 = this.villageDoorInfoList.iterator(); + + VillageDoorInfo var5; + do { + if(!var4.hasNext()) { + return null; + } + + var5 = (VillageDoorInfo)var4.next(); + } while(var5.posX != var1 || var5.posZ != var3 || Math.abs(var5.posY - var2) > 1); + + return var5; + } + } + + public void addVillageDoorInfo(VillageDoorInfo var1) { + this.villageDoorInfoList.add(var1); + this.centerHelper.posX += var1.posX; + this.centerHelper.posY += var1.posY; + this.centerHelper.posZ += var1.posZ; + this.updateVillageRadiusAndCenter(); + this.lastAddDoorTimestamp = var1.lastActivityTimestamp; + } + + public boolean isAnnihilated() { + return this.villageDoorInfoList.isEmpty(); + } + + public void addOrRenewAgressor(EntityLiving var1) { + Iterator var2 = this.villageAgressors.iterator(); + + VillageAgressor var3; + do { + if(!var2.hasNext()) { + this.villageAgressors.add(new VillageAgressor(this, var1, this.tickCounter)); + return; + } + + var3 = (VillageAgressor)var2.next(); + } while(var3.agressor != var1); + + var3.agressionTime = this.tickCounter; + } + + public EntityLiving findNearestVillageAggressor(EntityLiving var1) { + double var2 = Double.MAX_VALUE; + VillageAgressor var4 = null; + + for(int var5 = 0; var5 < this.villageAgressors.size(); ++var5) { + VillageAgressor var6 = (VillageAgressor)this.villageAgressors.get(var5); + double var7 = var6.agressor.getDistanceSqToEntity(var1); + if(var7 <= var2) { + var4 = var6; + var2 = var7; + } + } + + return var4 != null ? var4.agressor : null; + } + + public EntityPlayer func_82685_c(EntityLiving var1) { + double var2 = Double.MAX_VALUE; + EntityPlayer var4 = null; + Iterator var5 = this.playerReputation.keySet().iterator(); + + while(var5.hasNext()) { + String var6 = (String)var5.next(); + if(this.isPlayerReputationTooLow(var6)) { + EntityPlayer var7 = this.worldObj.getPlayerEntityByName(var6); + if(var7 != null) { + double var8 = var7.getDistanceSqToEntity(var1); + if(var8 <= var2) { + var4 = var7; + var2 = var8; + } + } + } + } + + return var4; + } + + private void removeDeadAndOldAgressors() { + Iterator var1 = this.villageAgressors.iterator(); + + while(true) { + VillageAgressor var2; + do { + if(!var1.hasNext()) { + return; + } + + var2 = (VillageAgressor)var1.next(); + } while(var2.agressor.isEntityAlive() && Math.abs(this.tickCounter - var2.agressionTime) <= 300); + + var1.remove(); + } + } + + private void removeDeadAndOutOfRangeDoors() { + boolean var1 = false; + boolean var2 = this.worldObj.rand.nextInt(50) == 0; + Iterator var3 = this.villageDoorInfoList.iterator(); + + while(true) { + VillageDoorInfo var4; + do { + if(!var3.hasNext()) { + if(var1) { + this.updateVillageRadiusAndCenter(); + } + + return; + } + + var4 = (VillageDoorInfo)var3.next(); + if(var2) { + var4.resetDoorOpeningRestrictionCounter(); + } + } while(this.isBlockDoor(var4.posX, var4.posY, var4.posZ) && Math.abs(this.tickCounter - var4.lastActivityTimestamp) <= 1200); + + this.centerHelper.posX -= var4.posX; + this.centerHelper.posY -= var4.posY; + this.centerHelper.posZ -= var4.posZ; + var1 = true; + var4.isDetachedFromVillageFlag = true; + var3.remove(); + } + } + + private boolean isBlockDoor(int var1, int var2, int var3) { + int var4 = this.worldObj.getBlockId(var1, var2, var3); + return var4 <= 0 ? false : var4 == Block.doorWood.blockID; + } + + private void updateVillageRadiusAndCenter() { + int var1 = this.villageDoorInfoList.size(); + if(var1 == 0) { + this.center.set(0, 0, 0); + this.villageRadius = 0; + } else { + this.center.set(this.centerHelper.posX / var1, this.centerHelper.posY / var1, this.centerHelper.posZ / var1); + int var2 = 0; + + VillageDoorInfo var4; + for(Iterator var3 = this.villageDoorInfoList.iterator(); var3.hasNext(); var2 = Math.max(var4.getDistanceSquared(this.center.posX, this.center.posY, this.center.posZ), var2)) { + var4 = (VillageDoorInfo)var3.next(); + } + + this.villageRadius = Math.max(32, (int)Math.sqrt((double)var2) + 1); + } + } + + public int getReputationForPlayer(String var1) { + Integer var2 = (Integer)this.playerReputation.get(var1); + return var2 != null ? var2.intValue() : 0; + } + + public int setReputationForPlayer(String var1, int var2) { + int var3 = this.getReputationForPlayer(var1); + int var4 = MathHelper.clamp_int(var3 + var2, -30, 10); + this.playerReputation.put(var1, Integer.valueOf(var4)); + return var4; + } + + public boolean isPlayerReputationTooLow(String var1) { + return this.getReputationForPlayer(var1) <= -15; + } + + public void readVillageDataFromNBT(NBTTagCompound var1) { + this.numVillagers = var1.getInteger("PopSize"); + this.villageRadius = var1.getInteger("Radius"); + this.numIronGolems = var1.getInteger("Golems"); + this.lastAddDoorTimestamp = var1.getInteger("Stable"); + this.tickCounter = var1.getInteger("Tick"); + this.noBreedTicks = var1.getInteger("MTick"); + this.center.posX = var1.getInteger("CX"); + this.center.posY = var1.getInteger("CY"); + this.center.posZ = var1.getInteger("CZ"); + this.centerHelper.posX = var1.getInteger("ACX"); + this.centerHelper.posY = var1.getInteger("ACY"); + this.centerHelper.posZ = var1.getInteger("ACZ"); + NBTTagList var2 = var1.getTagList("Doors"); + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + VillageDoorInfo var5 = new VillageDoorInfo(var4.getInteger("X"), var4.getInteger("Y"), var4.getInteger("Z"), var4.getInteger("IDX"), var4.getInteger("IDZ"), var4.getInteger("TS")); + this.villageDoorInfoList.add(var5); + } + + NBTTagList var6 = var1.getTagList("Players"); + + for(int var7 = 0; var7 < var6.tagCount(); ++var7) { + NBTTagCompound var8 = (NBTTagCompound)var6.tagAt(var7); + this.playerReputation.put(var8.getString("Name"), Integer.valueOf(var8.getInteger("S"))); + } + + } + + public void writeVillageDataToNBT(NBTTagCompound var1) { + var1.setInteger("PopSize", this.numVillagers); + var1.setInteger("Radius", this.villageRadius); + var1.setInteger("Golems", this.numIronGolems); + var1.setInteger("Stable", this.lastAddDoorTimestamp); + var1.setInteger("Tick", this.tickCounter); + var1.setInteger("MTick", this.noBreedTicks); + var1.setInteger("CX", this.center.posX); + var1.setInteger("CY", this.center.posY); + var1.setInteger("CZ", this.center.posZ); + var1.setInteger("ACX", this.centerHelper.posX); + var1.setInteger("ACY", this.centerHelper.posY); + var1.setInteger("ACZ", this.centerHelper.posZ); + NBTTagList var2 = new NBTTagList("Doors"); + Iterator var3 = this.villageDoorInfoList.iterator(); + + while(var3.hasNext()) { + VillageDoorInfo var4 = (VillageDoorInfo)var3.next(); + NBTTagCompound var5 = new NBTTagCompound("Door"); + var5.setInteger("X", var4.posX); + var5.setInteger("Y", var4.posY); + var5.setInteger("Z", var4.posZ); + var5.setInteger("IDX", var4.insideDirectionX); + var5.setInteger("IDZ", var4.insideDirectionZ); + var5.setInteger("TS", var4.lastActivityTimestamp); + var2.appendTag(var5); + } + + var1.setTag("Doors", var2); + NBTTagList var8 = new NBTTagList("Players"); + Iterator var9 = this.playerReputation.keySet().iterator(); + + while(var9.hasNext()) { + String var7 = (String)var9.next(); + NBTTagCompound var6 = new NBTTagCompound(var7); + var6.setString("Name", var7); + var6.setInteger("S", ((Integer)this.playerReputation.get(var7)).intValue()); + var8.appendTag(var6); + } + + var1.setTag("Players", var8); + } + + public void endMatingSeason() { + this.noBreedTicks = this.tickCounter; + } + + public boolean isMatingSeason() { + return this.noBreedTicks == 0 || this.tickCounter - this.noBreedTicks >= 3600; + } + + public void func_82683_b(int var1) { + Iterator var2 = this.playerReputation.keySet().iterator(); + + while(var2.hasNext()) { + String var3 = (String)var2.next(); + this.setReputationForPlayer(var3, var1); + } + + } +} diff --git a/src/net/minecraft/src/VillageAgressor.java b/src/net/minecraft/src/VillageAgressor.java new file mode 100644 index 0000000..be16207 --- /dev/null +++ b/src/net/minecraft/src/VillageAgressor.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +class VillageAgressor { + public EntityLiving agressor; + public int agressionTime; + final Village villageObj; + + VillageAgressor(Village var1, EntityLiving var2, int var3) { + this.villageObj = var1; + this.agressor = var2; + this.agressionTime = var3; + } +} diff --git a/src/net/minecraft/src/VillageCollection.java b/src/net/minecraft/src/VillageCollection.java new file mode 100644 index 0000000..82f4916 --- /dev/null +++ b/src/net/minecraft/src/VillageCollection.java @@ -0,0 +1,273 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +public class VillageCollection extends WorldSavedData { + private World worldObj; + private final List villagerPositionsList = new ArrayList(); + private final List newDoors = new ArrayList(); + private final List villageList = new ArrayList(); + private int tickCounter = 0; + + public VillageCollection(String var1) { + super(var1); + } + + public VillageCollection(World var1) { + super("villages"); + this.worldObj = var1; + this.markDirty(); + } + + public void func_82566_a(World var1) { + this.worldObj = var1; + Iterator var2 = this.villageList.iterator(); + + while(var2.hasNext()) { + Village var3 = (Village)var2.next(); + var3.func_82691_a(var1); + } + + } + + public void addVillagerPosition(int var1, int var2, int var3) { + if(this.villagerPositionsList.size() <= 64) { + if(!this.isVillagerPositionPresent(var1, var2, var3)) { + this.villagerPositionsList.add(new ChunkCoordinates(var1, var2, var3)); + } + + } + } + + public void tick() { + ++this.tickCounter; + Iterator var1 = this.villageList.iterator(); + + while(var1.hasNext()) { + Village var2 = (Village)var1.next(); + var2.tick(this.tickCounter); + } + + this.removeAnnihilatedVillages(); + this.dropOldestVillagerPosition(); + this.addNewDoorsToVillageOrCreateVillage(); + if(this.tickCounter % 400 == 0) { + this.markDirty(); + } + + } + + private void removeAnnihilatedVillages() { + Iterator var1 = this.villageList.iterator(); + + while(var1.hasNext()) { + Village var2 = (Village)var1.next(); + if(var2.isAnnihilated()) { + var1.remove(); + this.markDirty(); + } + } + + } + + public List getVillageList() { + return this.villageList; + } + + public Village findNearestVillage(int var1, int var2, int var3, int var4) { + Village var5 = null; + float var6 = Float.MAX_VALUE; + Iterator var7 = this.villageList.iterator(); + + while(var7.hasNext()) { + Village var8 = (Village)var7.next(); + float var9 = var8.getCenter().getDistanceSquared(var1, var2, var3); + if(var9 < var6) { + int var10 = var4 + var8.getVillageRadius(); + if(var9 <= (float)(var10 * var10)) { + var5 = var8; + var6 = var9; + } + } + } + + return var5; + } + + private void dropOldestVillagerPosition() { + if(!this.villagerPositionsList.isEmpty()) { + this.addUnassignedWoodenDoorsAroundToNewDoorsList((ChunkCoordinates)this.villagerPositionsList.remove(0)); + } + } + + private void addNewDoorsToVillageOrCreateVillage() { + for(int var1 = 0; var1 < this.newDoors.size(); ++var1) { + VillageDoorInfo var2 = (VillageDoorInfo)this.newDoors.get(var1); + boolean var3 = false; + Iterator var4 = this.villageList.iterator(); + + while(var4.hasNext()) { + Village var5 = (Village)var4.next(); + int var6 = (int)var5.getCenter().getDistanceSquared(var2.posX, var2.posY, var2.posZ); + int var7 = 32 + var5.getVillageRadius(); + if(var6 <= var7 * var7) { + var5.addVillageDoorInfo(var2); + var3 = true; + break; + } + } + + if(!var3) { + Village var8 = new Village(this.worldObj); + var8.addVillageDoorInfo(var2); + this.villageList.add(var8); + this.markDirty(); + } + } + + this.newDoors.clear(); + } + + private void addUnassignedWoodenDoorsAroundToNewDoorsList(ChunkCoordinates var1) { + byte var2 = 16; + byte var3 = 4; + byte var4 = 16; + + for(int var5 = var1.posX - var2; var5 < var1.posX + var2; ++var5) { + for(int var6 = var1.posY - var3; var6 < var1.posY + var3; ++var6) { + for(int var7 = var1.posZ - var4; var7 < var1.posZ + var4; ++var7) { + if(this.isWoodenDoorAt(var5, var6, var7)) { + VillageDoorInfo var8 = this.getVillageDoorAt(var5, var6, var7); + if(var8 == null) { + this.addDoorToNewListIfAppropriate(var5, var6, var7); + } else { + var8.lastActivityTimestamp = this.tickCounter; + } + } + } + } + } + + } + + private VillageDoorInfo getVillageDoorAt(int var1, int var2, int var3) { + Iterator var4 = this.newDoors.iterator(); + + VillageDoorInfo var5; + do { + if(!var4.hasNext()) { + var4 = this.villageList.iterator(); + + VillageDoorInfo var6; + do { + if(!var4.hasNext()) { + return null; + } + + Village var7 = (Village)var4.next(); + var6 = var7.getVillageDoorAt(var1, var2, var3); + } while(var6 == null); + + return var6; + } + + var5 = (VillageDoorInfo)var4.next(); + } while(var5.posX != var1 || var5.posZ != var3 || Math.abs(var5.posY - var2) > 1); + + return var5; + } + + private void addDoorToNewListIfAppropriate(int var1, int var2, int var3) { + int var4 = ((BlockDoor)Block.doorWood).getDoorOrientation(this.worldObj, var1, var2, var3); + int var5; + int var6; + if(var4 != 0 && var4 != 2) { + var5 = 0; + + for(var6 = -5; var6 < 0; ++var6) { + if(this.worldObj.canBlockSeeTheSky(var1, var2, var3 + var6)) { + --var5; + } + } + + for(var6 = 1; var6 <= 5; ++var6) { + if(this.worldObj.canBlockSeeTheSky(var1, var2, var3 + var6)) { + ++var5; + } + } + + if(var5 != 0) { + this.newDoors.add(new VillageDoorInfo(var1, var2, var3, 0, var5 > 0 ? -2 : 2, this.tickCounter)); + } + } else { + var5 = 0; + + for(var6 = -5; var6 < 0; ++var6) { + if(this.worldObj.canBlockSeeTheSky(var1 + var6, var2, var3)) { + --var5; + } + } + + for(var6 = 1; var6 <= 5; ++var6) { + if(this.worldObj.canBlockSeeTheSky(var1 + var6, var2, var3)) { + ++var5; + } + } + + if(var5 != 0) { + this.newDoors.add(new VillageDoorInfo(var1, var2, var3, var5 > 0 ? -2 : 2, 0, this.tickCounter)); + } + } + + } + + private boolean isVillagerPositionPresent(int var1, int var2, int var3) { + Iterator var4 = this.villagerPositionsList.iterator(); + + ChunkCoordinates var5; + do { + if(!var4.hasNext()) { + return false; + } + + var5 = (ChunkCoordinates)var4.next(); + } while(var5.posX != var1 || var5.posY != var2 || var5.posZ != var3); + + return true; + } + + private boolean isWoodenDoorAt(int var1, int var2, int var3) { + int var4 = this.worldObj.getBlockId(var1, var2, var3); + return var4 == Block.doorWood.blockID; + } + + public void readFromNBT(NBTTagCompound var1) { + this.tickCounter = var1.getInteger("Tick"); + NBTTagList var2 = var1.getTagList("Villages"); + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + Village var5 = new Village(); + var5.readVillageDataFromNBT(var4); + this.villageList.add(var5); + } + + } + + public void writeToNBT(NBTTagCompound var1) { + var1.setInteger("Tick", this.tickCounter); + NBTTagList var2 = new NBTTagList("Villages"); + Iterator var3 = this.villageList.iterator(); + + while(var3.hasNext()) { + Village var4 = (Village)var3.next(); + NBTTagCompound var5 = new NBTTagCompound("Village"); + var4.writeVillageDataToNBT(var5); + var2.appendTag(var5); + } + + var1.setTag("Villages", var2); + } +} diff --git a/src/net/minecraft/src/VillageDoorInfo.java b/src/net/minecraft/src/VillageDoorInfo.java new file mode 100644 index 0000000..43e3976 --- /dev/null +++ b/src/net/minecraft/src/VillageDoorInfo.java @@ -0,0 +1,65 @@ +package net.minecraft.src; + +public class VillageDoorInfo { + public final int posX; + public final int posY; + public final int posZ; + public final int insideDirectionX; + public final int insideDirectionZ; + public int lastActivityTimestamp; + public boolean isDetachedFromVillageFlag = false; + private int doorOpeningRestrictionCounter = 0; + + public VillageDoorInfo(int var1, int var2, int var3, int var4, int var5, int var6) { + this.posX = var1; + this.posY = var2; + this.posZ = var3; + this.insideDirectionX = var4; + this.insideDirectionZ = var5; + this.lastActivityTimestamp = var6; + } + + public int getDistanceSquared(int var1, int var2, int var3) { + int var4 = var1 - this.posX; + int var5 = var2 - this.posY; + int var6 = var3 - this.posZ; + return var4 * var4 + var5 * var5 + var6 * var6; + } + + public int getInsideDistanceSquare(int var1, int var2, int var3) { + int var4 = var1 - this.posX - this.insideDirectionX; + int var5 = var2 - this.posY; + int var6 = var3 - this.posZ - this.insideDirectionZ; + return var4 * var4 + var5 * var5 + var6 * var6; + } + + public int getInsidePosX() { + return this.posX + this.insideDirectionX; + } + + public int getInsidePosY() { + return this.posY; + } + + public int getInsidePosZ() { + return this.posZ + this.insideDirectionZ; + } + + public boolean isInside(int var1, int var2) { + int var3 = var1 - this.posX; + int var4 = var2 - this.posZ; + return var3 * this.insideDirectionX + var4 * this.insideDirectionZ >= 0; + } + + public void resetDoorOpeningRestrictionCounter() { + this.doorOpeningRestrictionCounter = 0; + } + + public void incrementDoorOpeningRestrictionCounter() { + ++this.doorOpeningRestrictionCounter; + } + + public int getDoorOpeningRestrictionCounter() { + return this.doorOpeningRestrictionCounter; + } +} diff --git a/src/net/minecraft/src/VillageSiege.java b/src/net/minecraft/src/VillageSiege.java new file mode 100644 index 0000000..80cf02d --- /dev/null +++ b/src/net/minecraft/src/VillageSiege.java @@ -0,0 +1,166 @@ +package net.minecraft.src; + +import java.util.Iterator; +import java.util.List; + +public class VillageSiege { + private World worldObj; + private boolean field_75535_b = false; + private int field_75536_c = -1; + private int field_75533_d; + private int field_75534_e; + private Village theVillage; + private int field_75532_g; + private int field_75538_h; + private int field_75539_i; + + public VillageSiege(World var1) { + this.worldObj = var1; + } + + public void tick() { + boolean var1 = false; + if(var1) { + if(this.field_75536_c == 2) { + this.field_75533_d = 100; + return; + } + } else { + if(this.worldObj.isDaytime()) { + this.field_75536_c = 0; + return; + } + + if(this.field_75536_c == 2) { + return; + } + + if(this.field_75536_c == 0) { + float var2 = this.worldObj.getCelestialAngle(0.0F); + if((double)var2 < 0.5D || (double)var2 > 0.501D) { + return; + } + + this.field_75536_c = this.worldObj.rand.nextInt(10) == 0 ? 1 : 2; + this.field_75535_b = false; + if(this.field_75536_c == 2) { + return; + } + } + } + + if(!this.field_75535_b) { + if(!this.func_75529_b()) { + return; + } + + this.field_75535_b = true; + } + + if(this.field_75534_e > 0) { + --this.field_75534_e; + } else { + this.field_75534_e = 2; + if(this.field_75533_d > 0) { + this.spawnZombie(); + --this.field_75533_d; + } else { + this.field_75536_c = 2; + } + + } + } + + private boolean func_75529_b() { + List var1 = this.worldObj.playerEntities; + Iterator var2 = var1.iterator(); + + Vec3 var10; + do { + do { + do { + do { + do { + if(!var2.hasNext()) { + return false; + } + + EntityPlayer var3 = (EntityPlayer)var2.next(); + this.theVillage = this.worldObj.villageCollectionObj.findNearestVillage((int)var3.posX, (int)var3.posY, (int)var3.posZ, 1); + } while(this.theVillage == null); + } while(this.theVillage.getNumVillageDoors() < 10); + } while(this.theVillage.getTicksSinceLastDoorAdding() < 20); + } while(this.theVillage.getNumVillagers() < 20); + + ChunkCoordinates var4 = this.theVillage.getCenter(); + float var5 = (float)this.theVillage.getVillageRadius(); + boolean var6 = false; + + for(int var7 = 0; var7 < 10; ++var7) { + this.field_75532_g = var4.posX + (int)((double)(MathHelper.cos(this.worldObj.rand.nextFloat() * (float)Math.PI * 2.0F) * var5) * 0.9D); + this.field_75538_h = var4.posY; + this.field_75539_i = var4.posZ + (int)((double)(MathHelper.sin(this.worldObj.rand.nextFloat() * (float)Math.PI * 2.0F) * var5) * 0.9D); + var6 = false; + Iterator var8 = this.worldObj.villageCollectionObj.getVillageList().iterator(); + + while(var8.hasNext()) { + Village var9 = (Village)var8.next(); + if(var9 != this.theVillage && var9.isInRange(this.field_75532_g, this.field_75538_h, this.field_75539_i)) { + var6 = true; + break; + } + } + + if(!var6) { + break; + } + } + + if(var6) { + return false; + } + + var10 = this.func_75527_a(this.field_75532_g, this.field_75538_h, this.field_75539_i); + } while(var10 == null); + + this.field_75534_e = 0; + this.field_75533_d = 20; + return true; + } + + private boolean spawnZombie() { + Vec3 var1 = this.func_75527_a(this.field_75532_g, this.field_75538_h, this.field_75539_i); + if(var1 == null) { + return false; + } else { + EntityZombie var2; + try { + var2 = new EntityZombie(this.worldObj); + var2.initCreature(); + var2.setVillager(false); + } catch (Exception var4) { + var4.printStackTrace(); + return false; + } + + var2.setLocationAndAngles(var1.xCoord, var1.yCoord, var1.zCoord, this.worldObj.rand.nextFloat() * 360.0F, 0.0F); + this.worldObj.spawnEntityInWorld(var2); + ChunkCoordinates var3 = this.theVillage.getCenter(); + var2.setHomeArea(var3.posX, var3.posY, var3.posZ, this.theVillage.getVillageRadius()); + return true; + } + } + + private Vec3 func_75527_a(int var1, int var2, int var3) { + for(int var4 = 0; var4 < 10; ++var4) { + int var5 = var1 + this.worldObj.rand.nextInt(16) - 8; + int var6 = var2 + this.worldObj.rand.nextInt(6) - 3; + int var7 = var3 + this.worldObj.rand.nextInt(16) - 8; + if(this.theVillage.isInRange(var5, var6, var7) && SpawnerAnimals.canCreatureTypeSpawnAtLocation(EnumCreatureType.monster, this.worldObj, var5, var6, var7)) { + this.worldObj.getWorldVec3Pool().getVecFromPool((double)var5, (double)var6, (double)var7); + } + } + + return null; + } +} diff --git a/src/net/minecraft/src/WatchableObject.java b/src/net/minecraft/src/WatchableObject.java new file mode 100644 index 0000000..2a564c5 --- /dev/null +++ b/src/net/minecraft/src/WatchableObject.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +public class WatchableObject { + private final int objectType; + private final int dataValueId; + private Object watchedObject; + private boolean watched; + + public WatchableObject(int var1, int var2, Object var3) { + this.dataValueId = var2; + this.watchedObject = var3; + this.objectType = var1; + this.watched = true; + } + + public int getDataValueId() { + return this.dataValueId; + } + + public void setObject(Object var1) { + this.watchedObject = var1; + } + + public Object getObject() { + return this.watchedObject; + } + + public int getObjectType() { + return this.objectType; + } + + public boolean isWatched() { + return this.watched; + } + + public void setWatched(boolean var1) { + this.watched = var1; + } + + static boolean setWatchableObjectWatched(WatchableObject var0, boolean var1) { + return var0.watched = var1; + } +} diff --git a/src/net/minecraft/src/WeightedRandom.java b/src/net/minecraft/src/WeightedRandom.java new file mode 100644 index 0000000..66d7fff --- /dev/null +++ b/src/net/minecraft/src/WeightedRandom.java @@ -0,0 +1,80 @@ +package net.minecraft.src; + +import java.util.Collection; +import java.util.Iterator; +import java.util.Random; + +public class WeightedRandom { + public static int getTotalWeight(Collection var0) { + int var1 = 0; + + WeightedRandomItem var3; + for(Iterator var2 = var0.iterator(); var2.hasNext(); var1 += var3.itemWeight) { + var3 = (WeightedRandomItem)var2.next(); + } + + return var1; + } + + public static WeightedRandomItem getRandomItem(Random var0, Collection var1, int var2) { + if(var2 <= 0) { + throw new IllegalArgumentException(); + } else { + int var3 = var0.nextInt(var2); + Iterator var4 = var1.iterator(); + + WeightedRandomItem var5; + do { + if(!var4.hasNext()) { + return null; + } + + var5 = (WeightedRandomItem)var4.next(); + var3 -= var5.itemWeight; + } while(var3 >= 0); + + return var5; + } + } + + public static WeightedRandomItem getRandomItem(Random var0, Collection var1) { + return getRandomItem(var0, var1, getTotalWeight(var1)); + } + + public static int getTotalWeight(WeightedRandomItem[] var0) { + int var1 = 0; + WeightedRandomItem[] var2 = var0; + int var3 = var0.length; + + for(int var4 = 0; var4 < var3; ++var4) { + WeightedRandomItem var5 = var2[var4]; + var1 += var5.itemWeight; + } + + return var1; + } + + public static WeightedRandomItem getRandomItem(Random var0, WeightedRandomItem[] var1, int var2) { + if(var2 <= 0) { + throw new IllegalArgumentException(); + } else { + int var3 = var0.nextInt(var2); + WeightedRandomItem[] var4 = var1; + int var5 = var1.length; + + for(int var6 = 0; var6 < var5; ++var6) { + WeightedRandomItem var7 = var4[var6]; + var3 -= var7.itemWeight; + if(var3 < 0) { + return var7; + } + } + + return null; + } + } + + public static WeightedRandomItem getRandomItem(Random var0, WeightedRandomItem[] var1) { + return getRandomItem(var0, var1, getTotalWeight(var1)); + } +} diff --git a/src/net/minecraft/src/WeightedRandomChestContent.java b/src/net/minecraft/src/WeightedRandomChestContent.java new file mode 100644 index 0000000..586ba23 --- /dev/null +++ b/src/net/minecraft/src/WeightedRandomChestContent.java @@ -0,0 +1,80 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WeightedRandomChestContent extends WeightedRandomItem { + private ItemStack theItemId = null; + private int theMinimumChanceToGenerateItem; + private int theMaximumChanceToGenerateItem; + + public WeightedRandomChestContent(int var1, int var2, int var3, int var4, int var5) { + super(var5); + this.theItemId = new ItemStack(var1, 1, var2); + this.theMinimumChanceToGenerateItem = var3; + this.theMaximumChanceToGenerateItem = var4; + } + + public WeightedRandomChestContent(ItemStack var1, int var2, int var3, int var4) { + super(var4); + this.theItemId = var1; + this.theMinimumChanceToGenerateItem = var2; + this.theMaximumChanceToGenerateItem = var3; + } + + public static void generateChestContents(Random var0, WeightedRandomChestContent[] var1, IInventory var2, int var3) { + for(int var4 = 0; var4 < var3; ++var4) { + WeightedRandomChestContent var5 = (WeightedRandomChestContent)WeightedRandom.getRandomItem(var0, (WeightedRandomItem[])var1); + int var6 = var5.theMinimumChanceToGenerateItem + var0.nextInt(var5.theMaximumChanceToGenerateItem - var5.theMinimumChanceToGenerateItem + 1); + if(var5.theItemId.getMaxStackSize() >= var6) { + ItemStack var9 = var5.theItemId.copy(); + var9.stackSize = var6; + var2.setInventorySlotContents(var0.nextInt(var2.getSizeInventory()), var9); + } else { + for(int var7 = 0; var7 < var6; ++var7) { + ItemStack var8 = var5.theItemId.copy(); + var8.stackSize = 1; + var2.setInventorySlotContents(var0.nextInt(var2.getSizeInventory()), var8); + } + } + } + + } + + public static void generateDispenserContents(Random var0, WeightedRandomChestContent[] var1, TileEntityDispenser var2, int var3) { + for(int var4 = 0; var4 < var3; ++var4) { + WeightedRandomChestContent var5 = (WeightedRandomChestContent)WeightedRandom.getRandomItem(var0, (WeightedRandomItem[])var1); + int var6 = var5.theMinimumChanceToGenerateItem + var0.nextInt(var5.theMaximumChanceToGenerateItem - var5.theMinimumChanceToGenerateItem + 1); + if(var5.theItemId.getMaxStackSize() >= var6) { + ItemStack var9 = var5.theItemId.copy(); + var9.stackSize = var6; + var2.setInventorySlotContents(var0.nextInt(var2.getSizeInventory()), var9); + } else { + for(int var7 = 0; var7 < var6; ++var7) { + ItemStack var8 = var5.theItemId.copy(); + var8.stackSize = 1; + var2.setInventorySlotContents(var0.nextInt(var2.getSizeInventory()), var8); + } + } + } + + } + + public static WeightedRandomChestContent[] func_92080_a(WeightedRandomChestContent[] var0, WeightedRandomChestContent... var1) { + WeightedRandomChestContent[] var2 = new WeightedRandomChestContent[var0.length + var1.length]; + int var3 = 0; + + for(int var4 = 0; var4 < var0.length; ++var4) { + var2[var3++] = var0[var4]; + } + + WeightedRandomChestContent[] var8 = var1; + int var5 = var1.length; + + for(int var6 = 0; var6 < var5; ++var6) { + WeightedRandomChestContent var7 = var8[var6]; + var2[var3++] = var7; + } + + return var2; + } +} diff --git a/src/net/minecraft/src/WeightedRandomItem.java b/src/net/minecraft/src/WeightedRandomItem.java new file mode 100644 index 0000000..4b79d5b --- /dev/null +++ b/src/net/minecraft/src/WeightedRandomItem.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public class WeightedRandomItem { + protected int itemWeight; + + public WeightedRandomItem(int var1) { + this.itemWeight = var1; + } +} diff --git a/src/net/minecraft/src/WeightedRandomMinecart.java b/src/net/minecraft/src/WeightedRandomMinecart.java new file mode 100644 index 0000000..b6561cb --- /dev/null +++ b/src/net/minecraft/src/WeightedRandomMinecart.java @@ -0,0 +1,65 @@ +package net.minecraft.src; + +public class WeightedRandomMinecart extends WeightedRandomItem { + public final NBTTagCompound field_98222_b; + public final String minecartName; + final MobSpawnerBaseLogic field_98221_d; + + public WeightedRandomMinecart(MobSpawnerBaseLogic var1, NBTTagCompound var2) { + super(var2.getInteger("Weight")); + this.field_98221_d = var1; + NBTTagCompound var3 = var2.getCompoundTag("Properties"); + String var4 = var2.getString("Type"); + if(var4.equals("Minecart")) { + if(var3 != null) { + switch(var3.getInteger("Type")) { + case 0: + var4 = "MinecartRideable"; + break; + case 1: + var4 = "MinecartChest"; + break; + case 2: + var4 = "MinecartFurnace"; + } + } else { + var4 = "MinecartRideable"; + } + } + + this.field_98222_b = var3; + this.minecartName = var4; + } + + public WeightedRandomMinecart(MobSpawnerBaseLogic var1, NBTTagCompound var2, String var3) { + super(1); + this.field_98221_d = var1; + if(var3.equals("Minecart")) { + if(var2 != null) { + switch(var2.getInteger("Type")) { + case 0: + var3 = "MinecartRideable"; + break; + case 1: + var3 = "MinecartChest"; + break; + case 2: + var3 = "MinecartFurnace"; + } + } else { + var3 = "MinecartRideable"; + } + } + + this.field_98222_b = var2; + this.minecartName = var3; + } + + public NBTTagCompound func_98220_a() { + NBTTagCompound var1 = new NBTTagCompound(); + var1.setCompoundTag("Properties", this.field_98222_b); + var1.setString("Type", this.minecartName); + var1.setInteger("Weight", this.itemWeight); + return var1; + } +} diff --git a/src/net/minecraft/src/World.java b/src/net/minecraft/src/World.java new file mode 100644 index 0000000..8377ad2 --- /dev/null +++ b/src/net/minecraft/src/World.java @@ -0,0 +1,2814 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import java.util.Set; + +public abstract class World implements IBlockAccess { + public boolean scheduledUpdatesAreImmediate = false; + public List loadedEntityList = new ArrayList(); + protected List unloadedEntityList = new ArrayList(); + public List loadedTileEntityList = new ArrayList(); + private List addedTileEntityList = new ArrayList(); + private List entityRemoval = new ArrayList(); + public List playerEntities = new ArrayList(); + public List weatherEffects = new ArrayList(); + private long cloudColour = 16777215L; + public int skylightSubtracted = 0; + protected int updateLCG = (new Random()).nextInt(); + protected final int DIST_HASH_MAGIC = 1013904223; + protected float prevRainingStrength; + protected float rainingStrength; + protected float prevThunderingStrength; + protected float thunderingStrength; + public int lastLightningBolt = 0; + public int difficultySetting; + public Random rand = new Random(); + public final WorldProvider provider; + protected List worldAccesses = new ArrayList(); + protected IChunkProvider chunkProvider; + protected final ISaveHandler saveHandler; + protected WorldInfo worldInfo; + public boolean findingSpawnPoint; + public MapStorage mapStorage; + public final VillageCollection villageCollectionObj; + protected final VillageSiege villageSiegeObj = new VillageSiege(this); + public final Profiler theProfiler; + private final Vec3Pool vecPool = new Vec3Pool(300, 2000); + private final Calendar theCalendar = Calendar.getInstance(); + protected Scoreboard worldScoreboard = new Scoreboard(); + private final ILogAgent worldLogAgent; + private ArrayList collidingBoundingBoxes = new ArrayList(); + private boolean scanningTileEntities; + protected boolean spawnHostileMobs = true; + protected boolean spawnPeacefulMobs = true; + protected Set activeChunkSet = new HashSet(); + private int ambientTickCountdown = this.rand.nextInt(12000); + int[] lightUpdateBlockList = new int[-Short.MIN_VALUE]; + public boolean isRemote = false; + + public BiomeGenBase getBiomeGenForCoords(int var1, int var2) { + if(this.blockExists(var1, 0, var2)) { + Chunk var3 = this.getChunkFromBlockCoords(var1, var2); + if(var3 != null) { + return var3.getBiomeGenForWorldCoords(var1 & 15, var2 & 15, this.provider.worldChunkMgr); + } + } + + return this.provider.worldChunkMgr.getBiomeGenAt(var1, var2); + } + + public WorldChunkManager getWorldChunkManager() { + return this.provider.worldChunkMgr; + } + + public World(ISaveHandler var1, String var2, WorldProvider var3, WorldSettings var4, Profiler var5, ILogAgent var6) { + this.saveHandler = var1; + this.theProfiler = var5; + this.worldInfo = new WorldInfo(var4, var2); + this.provider = var3; + this.mapStorage = new MapStorage(var1); + this.worldLogAgent = var6; + VillageCollection var7 = (VillageCollection)this.mapStorage.loadData(VillageCollection.class, "villages"); + if(var7 == null) { + this.villageCollectionObj = new VillageCollection(this); + this.mapStorage.setData("villages", this.villageCollectionObj); + } else { + this.villageCollectionObj = var7; + this.villageCollectionObj.func_82566_a(this); + } + + var3.registerWorld(this); + this.chunkProvider = this.createChunkProvider(); + this.calculateInitialSkylight(); + this.calculateInitialWeather(); + } + + public World(ISaveHandler var1, String var2, WorldSettings var3, WorldProvider var4, Profiler var5, ILogAgent var6) { + this.saveHandler = var1; + this.theProfiler = var5; + this.mapStorage = new MapStorage(var1); + this.worldLogAgent = var6; + this.worldInfo = var1.loadWorldInfo(); + if(var4 != null) { + this.provider = var4; + } else if(this.worldInfo != null && this.worldInfo.getDimension() != 0) { + this.provider = WorldProvider.getProviderForDimension(this.worldInfo.getDimension()); + } else { + this.provider = WorldProvider.getProviderForDimension(0); + } + + if(this.worldInfo == null) { + this.worldInfo = new WorldInfo(var3, var2); + } else { + this.worldInfo.setWorldName(var2); + } + + this.provider.registerWorld(this); + this.chunkProvider = this.createChunkProvider(); + if(!this.worldInfo.isInitialized()) { + try { + this.initialize(var3); + } catch (Throwable var11) { + CrashReport var8 = CrashReport.makeCrashReport(var11, "Exception initializing level"); + + try { + this.addWorldInfoToCrashReport(var8); + } catch (Throwable var10) { + } + + throw new ReportedException(var8); + } + + this.worldInfo.setServerInitialized(true); + } + + VillageCollection var7 = (VillageCollection)this.mapStorage.loadData(VillageCollection.class, "villages"); + if(var7 == null) { + this.villageCollectionObj = new VillageCollection(this); + this.mapStorage.setData("villages", this.villageCollectionObj); + } else { + this.villageCollectionObj = var7; + this.villageCollectionObj.func_82566_a(this); + } + + this.calculateInitialSkylight(); + this.calculateInitialWeather(); + } + + protected abstract IChunkProvider createChunkProvider(); + + protected void initialize(WorldSettings var1) { + this.worldInfo.setServerInitialized(true); + } + + public void setSpawnLocation() { + this.setSpawnLocation(8, 64, 8); + } + + public int getFirstUncoveredBlock(int var1, int var2) { + int var3; + for(var3 = 63; !this.isAirBlock(var1, var3 + 1, var2); ++var3) { + } + + return this.getBlockId(var1, var3, var2); + } + + public int getBlockId(int var1, int var2, int var3) { + if(var1 >= -30000000 && var3 >= -30000000 && var1 < 30000000 && var3 < 30000000) { + if(var2 < 0) { + return 0; + } else if(var2 >= 256) { + return 0; + } else { + Chunk var4 = null; + + try { + var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + return var4.getBlockID(var1 & 15, var2, var3 & 15); + } catch (Throwable var8) { + CrashReport var6 = CrashReport.makeCrashReport(var8, "Exception getting block type in world"); + CrashReportCategory var7 = var6.makeCategory("Requested block coordinates"); + var7.addCrashSection("Found chunk", Boolean.valueOf(var4 == null)); + var7.addCrashSection("Location", CrashReportCategory.getLocationInfo(var1, var2, var3)); + throw new ReportedException(var6); + } + } + } else { + return 0; + } + } + + public boolean isAirBlock(int var1, int var2, int var3) { + return this.getBlockId(var1, var2, var3) == 0; + } + + public boolean blockHasTileEntity(int var1, int var2, int var3) { + int var4 = this.getBlockId(var1, var2, var3); + return Block.blocksList[var4] != null && Block.blocksList[var4].hasTileEntity(); + } + + public int blockGetRenderType(int var1, int var2, int var3) { + int var4 = this.getBlockId(var1, var2, var3); + return Block.blocksList[var4] != null ? Block.blocksList[var4].getRenderType() : -1; + } + + public boolean blockExists(int var1, int var2, int var3) { + return var2 >= 0 && var2 < 256 ? this.chunkExists(var1 >> 4, var3 >> 4) : false; + } + + public boolean doChunksNearChunkExist(int var1, int var2, int var3, int var4) { + return this.checkChunksExist(var1 - var4, var2 - var4, var3 - var4, var1 + var4, var2 + var4, var3 + var4); + } + + public boolean checkChunksExist(int var1, int var2, int var3, int var4, int var5, int var6) { + if(var5 >= 0 && var2 < 256) { + var1 >>= 4; + var3 >>= 4; + var4 >>= 4; + var6 >>= 4; + + for(int var7 = var1; var7 <= var4; ++var7) { + for(int var8 = var3; var8 <= var6; ++var8) { + if(!this.chunkExists(var7, var8)) { + return false; + } + } + } + + return true; + } else { + return false; + } + } + + protected boolean chunkExists(int var1, int var2) { + return this.chunkProvider.chunkExists(var1, var2); + } + + public Chunk getChunkFromBlockCoords(int var1, int var2) { + return this.getChunkFromChunkCoords(var1 >> 4, var2 >> 4); + } + + public Chunk getChunkFromChunkCoords(int var1, int var2) { + return this.chunkProvider.provideChunk(var1, var2); + } + + public boolean setBlock(int var1, int var2, int var3, int var4, int var5, int var6) { + if(var1 >= -30000000 && var3 >= -30000000 && var1 < 30000000 && var3 < 30000000) { + if(var2 < 0) { + return false; + } else if(var2 >= 256) { + return false; + } else { + Chunk var7 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + int var8 = 0; + if((var6 & 1) != 0) { + var8 = var7.getBlockID(var1 & 15, var2, var3 & 15); + } + + boolean var9 = var7.setBlockIDWithMetadata(var1 & 15, var2, var3 & 15, var4, var5); + this.theProfiler.startSection("checkLight"); + this.updateAllLightTypes(var1, var2, var3); + this.theProfiler.endSection(); + if(var9) { + if((var6 & 2) != 0 && (!this.isRemote || (var6 & 4) == 0)) { + this.markBlockForUpdate(var1, var2, var3); + } + + if(!this.isRemote && (var6 & 1) != 0) { + this.notifyBlockChange(var1, var2, var3, var8); + Block var10 = Block.blocksList[var4]; + if(var10 != null && var10.hasComparatorInputOverride()) { + this.func_96440_m(var1, var2, var3, var4); + } + } + } + + return var9; + } + } else { + return false; + } + } + + public Material getBlockMaterial(int var1, int var2, int var3) { + int var4 = this.getBlockId(var1, var2, var3); + return var4 == 0 ? Material.air : Block.blocksList[var4].blockMaterial; + } + + public int getBlockMetadata(int var1, int var2, int var3) { + if(var1 >= -30000000 && var3 >= -30000000 && var1 < 30000000 && var3 < 30000000) { + if(var2 < 0) { + return 0; + } else if(var2 >= 256) { + return 0; + } else { + Chunk var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + var1 &= 15; + var3 &= 15; + return var4.getBlockMetadata(var1, var2, var3); + } + } else { + return 0; + } + } + + public boolean setBlockMetadataWithNotify(int var1, int var2, int var3, int var4, int var5) { + if(var1 >= -30000000 && var3 >= -30000000 && var1 < 30000000 && var3 < 30000000) { + if(var2 < 0) { + return false; + } else if(var2 >= 256) { + return false; + } else { + Chunk var6 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + int var7 = var1 & 15; + int var8 = var3 & 15; + boolean var9 = var6.setBlockMetadata(var7, var2, var8, var4); + if(var9) { + int var10 = var6.getBlockID(var7, var2, var8); + if((var5 & 2) != 0 && (!this.isRemote || (var5 & 4) == 0)) { + this.markBlockForUpdate(var1, var2, var3); + } + + if(!this.isRemote && (var5 & 1) != 0) { + this.notifyBlockChange(var1, var2, var3, var10); + Block var11 = Block.blocksList[var10]; + if(var11 != null && var11.hasComparatorInputOverride()) { + this.func_96440_m(var1, var2, var3, var10); + } + } + } + + return var9; + } + } else { + return false; + } + } + + public boolean setBlockToAir(int var1, int var2, int var3) { + return this.setBlock(var1, var2, var3, 0, 0, 3); + } + + public boolean destroyBlock(int var1, int var2, int var3, boolean var4) { + int var5 = this.getBlockId(var1, var2, var3); + if(var5 > 0) { + int var6 = this.getBlockMetadata(var1, var2, var3); + this.playAuxSFX(2001, var1, var2, var3, var5 + (var6 << 12)); + if(var4) { + Block.blocksList[var5].dropBlockAsItem(this, var1, var2, var3, var6, 0); + } + + return this.setBlock(var1, var2, var3, 0, 0, 3); + } else { + return false; + } + } + + public boolean setBlock(int var1, int var2, int var3, int var4) { + return this.setBlock(var1, var2, var3, var4, 0, 3); + } + + public void markBlockForUpdate(int var1, int var2, int var3) { + for(int var4 = 0; var4 < this.worldAccesses.size(); ++var4) { + ((IWorldAccess)this.worldAccesses.get(var4)).markBlockForUpdate(var1, var2, var3); + } + + } + + public void notifyBlockChange(int var1, int var2, int var3, int var4) { + this.notifyBlocksOfNeighborChange(var1, var2, var3, var4); + } + + public void markBlocksDirtyVertical(int var1, int var2, int var3, int var4) { + int var5; + if(var3 > var4) { + var5 = var4; + var4 = var3; + var3 = var5; + } + + if(!this.provider.hasNoSky) { + for(var5 = var3; var5 <= var4; ++var5) { + this.updateLightByType(EnumSkyBlock.Sky, var1, var5, var2); + } + } + + this.markBlockRangeForRenderUpdate(var1, var3, var2, var1, var4, var2); + } + + public void markBlockRangeForRenderUpdate(int var1, int var2, int var3, int var4, int var5, int var6) { + for(int var7 = 0; var7 < this.worldAccesses.size(); ++var7) { + ((IWorldAccess)this.worldAccesses.get(var7)).markBlockRangeForRenderUpdate(var1, var2, var3, var4, var5, var6); + } + + } + + public void notifyBlocksOfNeighborChange(int var1, int var2, int var3, int var4) { + this.notifyBlockOfNeighborChange(var1 - 1, var2, var3, var4); + this.notifyBlockOfNeighborChange(var1 + 1, var2, var3, var4); + this.notifyBlockOfNeighborChange(var1, var2 - 1, var3, var4); + this.notifyBlockOfNeighborChange(var1, var2 + 1, var3, var4); + this.notifyBlockOfNeighborChange(var1, var2, var3 - 1, var4); + this.notifyBlockOfNeighborChange(var1, var2, var3 + 1, var4); + } + + public void notifyBlocksOfNeighborChange(int var1, int var2, int var3, int var4, int var5) { + if(var5 != 4) { + this.notifyBlockOfNeighborChange(var1 - 1, var2, var3, var4); + } + + if(var5 != 5) { + this.notifyBlockOfNeighborChange(var1 + 1, var2, var3, var4); + } + + if(var5 != 0) { + this.notifyBlockOfNeighborChange(var1, var2 - 1, var3, var4); + } + + if(var5 != 1) { + this.notifyBlockOfNeighborChange(var1, var2 + 1, var3, var4); + } + + if(var5 != 2) { + this.notifyBlockOfNeighborChange(var1, var2, var3 - 1, var4); + } + + if(var5 != 3) { + this.notifyBlockOfNeighborChange(var1, var2, var3 + 1, var4); + } + + } + + public void notifyBlockOfNeighborChange(int var1, int var2, int var3, int var4) { + if(!this.isRemote) { + int var5 = this.getBlockId(var1, var2, var3); + Block var6 = Block.blocksList[var5]; + if(var6 != null) { + try { + var6.onNeighborBlockChange(this, var1, var2, var3, var4); + } catch (Throwable var13) { + CrashReport var8 = CrashReport.makeCrashReport(var13, "Exception while updating neighbours"); + CrashReportCategory var9 = var8.makeCategory("Block being updated"); + + int var10; + try { + var10 = this.getBlockMetadata(var1, var2, var3); + } catch (Throwable var12) { + var10 = -1; + } + + var9.addCrashSectionCallable("Source block type", new CallableLvl1(this, var4)); + CrashReportCategory.func_85068_a(var9, var1, var2, var3, var5, var10); + throw new ReportedException(var8); + } + } + + } + } + + public boolean isBlockTickScheduled(int var1, int var2, int var3, int var4) { + return false; + } + + public boolean canBlockSeeTheSky(int var1, int var2, int var3) { + return this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4).canBlockSeeTheSky(var1 & 15, var2, var3 & 15); + } + + public int getFullBlockLightValue(int var1, int var2, int var3) { + if(var2 < 0) { + return 0; + } else { + if(var2 >= 256) { + var2 = 255; + } + + return this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4).getBlockLightValue(var1 & 15, var2, var3 & 15, 0); + } + } + + public int getBlockLightValue(int var1, int var2, int var3) { + return this.getBlockLightValue_do(var1, var2, var3, true); + } + + public int getBlockLightValue_do(int var1, int var2, int var3, boolean var4) { + if(var1 >= -30000000 && var3 >= -30000000 && var1 < 30000000 && var3 < 30000000) { + if(var4) { + int var5 = this.getBlockId(var1, var2, var3); + if(Block.useNeighborBrightness[var5]) { + int var6 = this.getBlockLightValue_do(var1, var2 + 1, var3, false); + int var7 = this.getBlockLightValue_do(var1 + 1, var2, var3, false); + int var8 = this.getBlockLightValue_do(var1 - 1, var2, var3, false); + int var9 = this.getBlockLightValue_do(var1, var2, var3 + 1, false); + int var10 = this.getBlockLightValue_do(var1, var2, var3 - 1, false); + if(var7 > var6) { + var6 = var7; + } + + if(var8 > var6) { + var6 = var8; + } + + if(var9 > var6) { + var6 = var9; + } + + if(var10 > var6) { + var6 = var10; + } + + return var6; + } + } + + if(var2 < 0) { + return 0; + } else { + if(var2 >= 256) { + var2 = 255; + } + + Chunk var11 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + var1 &= 15; + var3 &= 15; + return var11.getBlockLightValue(var1, var2, var3, this.skylightSubtracted); + } + } else { + return 15; + } + } + + public int getHeightValue(int var1, int var2) { + if(var1 >= -30000000 && var2 >= -30000000 && var1 < 30000000 && var2 < 30000000) { + if(!this.chunkExists(var1 >> 4, var2 >> 4)) { + return 0; + } else { + Chunk var3 = this.getChunkFromChunkCoords(var1 >> 4, var2 >> 4); + return var3.getHeightValue(var1 & 15, var2 & 15); + } + } else { + return 0; + } + } + + public int getChunkHeightMapMinimum(int var1, int var2) { + if(var1 >= -30000000 && var2 >= -30000000 && var1 < 30000000 && var2 < 30000000) { + if(!this.chunkExists(var1 >> 4, var2 >> 4)) { + return 0; + } else { + Chunk var3 = this.getChunkFromChunkCoords(var1 >> 4, var2 >> 4); + return var3.heightMapMinimum; + } + } else { + return 0; + } + } + + public int getSkyBlockTypeBrightness(EnumSkyBlock var1, int var2, int var3, int var4) { + if(this.provider.hasNoSky && var1 == EnumSkyBlock.Sky) { + return 0; + } else { + if(var3 < 0) { + var3 = 0; + } + + if(var3 >= 256) { + return var1.defaultLightValue; + } else if(var2 >= -30000000 && var4 >= -30000000 && var2 < 30000000 && var4 < 30000000) { + int var5 = var2 >> 4; + int var6 = var4 >> 4; + if(!this.chunkExists(var5, var6)) { + return var1.defaultLightValue; + } else if(Block.useNeighborBrightness[this.getBlockId(var2, var3, var4)]) { + int var12 = this.getSavedLightValue(var1, var2, var3 + 1, var4); + int var8 = this.getSavedLightValue(var1, var2 + 1, var3, var4); + int var9 = this.getSavedLightValue(var1, var2 - 1, var3, var4); + int var10 = this.getSavedLightValue(var1, var2, var3, var4 + 1); + int var11 = this.getSavedLightValue(var1, var2, var3, var4 - 1); + if(var8 > var12) { + var12 = var8; + } + + if(var9 > var12) { + var12 = var9; + } + + if(var10 > var12) { + var12 = var10; + } + + if(var11 > var12) { + var12 = var11; + } + + return var12; + } else { + Chunk var7 = this.getChunkFromChunkCoords(var5, var6); + return var7.getSavedLightValue(var1, var2 & 15, var3, var4 & 15); + } + } else { + return var1.defaultLightValue; + } + } + } + + public int getSavedLightValue(EnumSkyBlock var1, int var2, int var3, int var4) { + if(var3 < 0) { + var3 = 0; + } + + if(var3 >= 256) { + var3 = 255; + } + + if(var2 >= -30000000 && var4 >= -30000000 && var2 < 30000000 && var4 < 30000000) { + int var5 = var2 >> 4; + int var6 = var4 >> 4; + if(!this.chunkExists(var5, var6)) { + return var1.defaultLightValue; + } else { + Chunk var7 = this.getChunkFromChunkCoords(var5, var6); + return var7.getSavedLightValue(var1, var2 & 15, var3, var4 & 15); + } + } else { + return var1.defaultLightValue; + } + } + + public void setLightValue(EnumSkyBlock var1, int var2, int var3, int var4, int var5) { + if(var2 >= -30000000 && var4 >= -30000000 && var2 < 30000000 && var4 < 30000000) { + if(var3 >= 0) { + if(var3 < 256) { + if(this.chunkExists(var2 >> 4, var4 >> 4)) { + Chunk var6 = this.getChunkFromChunkCoords(var2 >> 4, var4 >> 4); + var6.setLightValue(var1, var2 & 15, var3, var4 & 15, var5); + + for(int var7 = 0; var7 < this.worldAccesses.size(); ++var7) { + ((IWorldAccess)this.worldAccesses.get(var7)).markBlockForRenderUpdate(var2, var3, var4); + } + + } + } + } + } + } + + public void markBlockForRenderUpdate(int var1, int var2, int var3) { + for(int var4 = 0; var4 < this.worldAccesses.size(); ++var4) { + ((IWorldAccess)this.worldAccesses.get(var4)).markBlockForRenderUpdate(var1, var2, var3); + } + + } + + public int getLightBrightnessForSkyBlocks(int var1, int var2, int var3, int var4) { + int var5 = this.getSkyBlockTypeBrightness(EnumSkyBlock.Sky, var1, var2, var3); + int var6 = this.getSkyBlockTypeBrightness(EnumSkyBlock.Block, var1, var2, var3); + if(var6 < var4) { + var6 = var4; + } + + return var5 << 20 | var6 << 4; + } + + public float getBrightness(int var1, int var2, int var3, int var4) { + int var5 = this.getBlockLightValue(var1, var2, var3); + if(var5 < var4) { + var5 = var4; + } + + return this.provider.lightBrightnessTable[var5]; + } + + public float getLightBrightness(int var1, int var2, int var3) { + return this.provider.lightBrightnessTable[this.getBlockLightValue(var1, var2, var3)]; + } + + public boolean isDaytime() { + return this.skylightSubtracted < 4; + } + + public MovingObjectPosition rayTraceBlocks(Vec3 var1, Vec3 var2) { + return this.rayTraceBlocks_do_do(var1, var2, false, false); + } + + public MovingObjectPosition rayTraceBlocks_do(Vec3 var1, Vec3 var2, boolean var3) { + return this.rayTraceBlocks_do_do(var1, var2, var3, false); + } + + public MovingObjectPosition rayTraceBlocks_do_do(Vec3 var1, Vec3 var2, boolean var3, boolean var4) { + if(!Double.isNaN(var1.xCoord) && !Double.isNaN(var1.yCoord) && !Double.isNaN(var1.zCoord)) { + if(!Double.isNaN(var2.xCoord) && !Double.isNaN(var2.yCoord) && !Double.isNaN(var2.zCoord)) { + int var5 = MathHelper.floor_double(var2.xCoord); + int var6 = MathHelper.floor_double(var2.yCoord); + int var7 = MathHelper.floor_double(var2.zCoord); + int var8 = MathHelper.floor_double(var1.xCoord); + int var9 = MathHelper.floor_double(var1.yCoord); + int var10 = MathHelper.floor_double(var1.zCoord); + int var11 = this.getBlockId(var8, var9, var10); + int var12 = this.getBlockMetadata(var8, var9, var10); + Block var13 = Block.blocksList[var11]; + if((!var4 || var13 == null || var13.getCollisionBoundingBoxFromPool(this, var8, var9, var10) != null) && var11 > 0 && var13.canCollideCheck(var12, var3)) { + MovingObjectPosition var14 = var13.collisionRayTrace(this, var8, var9, var10, var1, var2); + if(var14 != null) { + return var14; + } + } + + var11 = 200; + + while(var11-- >= 0) { + if(Double.isNaN(var1.xCoord) || Double.isNaN(var1.yCoord) || Double.isNaN(var1.zCoord)) { + return null; + } + + if(var8 == var5 && var9 == var6 && var10 == var7) { + return null; + } + + boolean var39 = true; + boolean var40 = true; + boolean var41 = true; + double var15 = 999.0D; + double var17 = 999.0D; + double var19 = 999.0D; + if(var5 > var8) { + var15 = (double)var8 + 1.0D; + } else if(var5 < var8) { + var15 = (double)var8 + 0.0D; + } else { + var39 = false; + } + + if(var6 > var9) { + var17 = (double)var9 + 1.0D; + } else if(var6 < var9) { + var17 = (double)var9 + 0.0D; + } else { + var40 = false; + } + + if(var7 > var10) { + var19 = (double)var10 + 1.0D; + } else if(var7 < var10) { + var19 = (double)var10 + 0.0D; + } else { + var41 = false; + } + + double var21 = 999.0D; + double var23 = 999.0D; + double var25 = 999.0D; + double var27 = var2.xCoord - var1.xCoord; + double var29 = var2.yCoord - var1.yCoord; + double var31 = var2.zCoord - var1.zCoord; + if(var39) { + var21 = (var15 - var1.xCoord) / var27; + } + + if(var40) { + var23 = (var17 - var1.yCoord) / var29; + } + + if(var41) { + var25 = (var19 - var1.zCoord) / var31; + } + + boolean var33 = false; + byte var42; + if(var21 < var23 && var21 < var25) { + if(var5 > var8) { + var42 = 4; + } else { + var42 = 5; + } + + var1.xCoord = var15; + var1.yCoord += var29 * var21; + var1.zCoord += var31 * var21; + } else if(var23 < var25) { + if(var6 > var9) { + var42 = 0; + } else { + var42 = 1; + } + + var1.xCoord += var27 * var23; + var1.yCoord = var17; + var1.zCoord += var31 * var23; + } else { + if(var7 > var10) { + var42 = 2; + } else { + var42 = 3; + } + + var1.xCoord += var27 * var25; + var1.yCoord += var29 * var25; + var1.zCoord = var19; + } + + Vec3 var34 = this.getWorldVec3Pool().getVecFromPool(var1.xCoord, var1.yCoord, var1.zCoord); + var8 = (int)(var34.xCoord = (double)MathHelper.floor_double(var1.xCoord)); + if(var42 == 5) { + --var8; + ++var34.xCoord; + } + + var9 = (int)(var34.yCoord = (double)MathHelper.floor_double(var1.yCoord)); + if(var42 == 1) { + --var9; + ++var34.yCoord; + } + + var10 = (int)(var34.zCoord = (double)MathHelper.floor_double(var1.zCoord)); + if(var42 == 3) { + --var10; + ++var34.zCoord; + } + + int var35 = this.getBlockId(var8, var9, var10); + int var36 = this.getBlockMetadata(var8, var9, var10); + Block var37 = Block.blocksList[var35]; + if((!var4 || var37 == null || var37.getCollisionBoundingBoxFromPool(this, var8, var9, var10) != null) && var35 > 0 && var37.canCollideCheck(var36, var3)) { + MovingObjectPosition var38 = var37.collisionRayTrace(this, var8, var9, var10, var1, var2); + if(var38 != null) { + return var38; + } + } + } + + return null; + } else { + return null; + } + } else { + return null; + } + } + + public void playSoundAtEntity(Entity var1, String var2, float var3, float var4) { + if(var1 != null && var2 != null) { + for(int var5 = 0; var5 < this.worldAccesses.size(); ++var5) { + ((IWorldAccess)this.worldAccesses.get(var5)).playSound(var2, var1.posX, var1.posY - (double)var1.yOffset, var1.posZ, var3, var4); + } + + } + } + + public void playSoundToNearExcept(EntityPlayer var1, String var2, float var3, float var4) { + if(var1 != null && var2 != null) { + for(int var5 = 0; var5 < this.worldAccesses.size(); ++var5) { + ((IWorldAccess)this.worldAccesses.get(var5)).playSoundToNearExcept(var1, var2, var1.posX, var1.posY - (double)var1.yOffset, var1.posZ, var3, var4); + } + + } + } + + public void playSoundEffect(double var1, double var3, double var5, String var7, float var8, float var9) { + if(var7 != null) { + for(int var10 = 0; var10 < this.worldAccesses.size(); ++var10) { + ((IWorldAccess)this.worldAccesses.get(var10)).playSound(var7, var1, var3, var5, var8, var9); + } + + } + } + + public void playSound(double var1, double var3, double var5, String var7, float var8, float var9, boolean var10) { + } + + public void playRecord(String var1, int var2, int var3, int var4) { + for(int var5 = 0; var5 < this.worldAccesses.size(); ++var5) { + ((IWorldAccess)this.worldAccesses.get(var5)).playRecord(var1, var2, var3, var4); + } + + } + + public void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12) { + for(int var14 = 0; var14 < this.worldAccesses.size(); ++var14) { + ((IWorldAccess)this.worldAccesses.get(var14)).spawnParticle(var1, var2, var4, var6, var8, var10, var12); + } + + } + + public boolean addWeatherEffect(Entity var1) { + this.weatherEffects.add(var1); + return true; + } + + public boolean spawnEntityInWorld(Entity var1) { + int var2 = MathHelper.floor_double(var1.posX / 16.0D); + int var3 = MathHelper.floor_double(var1.posZ / 16.0D); + boolean var4 = var1.field_98038_p; + if(var1 instanceof EntityPlayer) { + var4 = true; + } + + if(!var4 && !this.chunkExists(var2, var3)) { + return false; + } else { + if(var1 instanceof EntityPlayer) { + EntityPlayer var5 = (EntityPlayer)var1; + this.playerEntities.add(var5); + this.updateAllPlayersSleepingFlag(); + } + + this.getChunkFromChunkCoords(var2, var3).addEntity(var1); + this.loadedEntityList.add(var1); + this.obtainEntitySkin(var1); + return true; + } + } + + protected void obtainEntitySkin(Entity var1) { + for(int var2 = 0; var2 < this.worldAccesses.size(); ++var2) { + ((IWorldAccess)this.worldAccesses.get(var2)).onEntityCreate(var1); + } + + } + + protected void releaseEntitySkin(Entity var1) { + for(int var2 = 0; var2 < this.worldAccesses.size(); ++var2) { + ((IWorldAccess)this.worldAccesses.get(var2)).onEntityDestroy(var1); + } + + } + + public void removeEntity(Entity var1) { + if(var1.riddenByEntity != null) { + var1.riddenByEntity.mountEntity((Entity)null); + } + + if(var1.ridingEntity != null) { + var1.mountEntity((Entity)null); + } + + var1.setDead(); + if(var1 instanceof EntityPlayer) { + this.playerEntities.remove(var1); + this.updateAllPlayersSleepingFlag(); + } + + } + + public void removePlayerEntityDangerously(Entity var1) { + var1.setDead(); + if(var1 instanceof EntityPlayer) { + this.playerEntities.remove(var1); + this.updateAllPlayersSleepingFlag(); + } + + int var2 = var1.chunkCoordX; + int var3 = var1.chunkCoordZ; + if(var1.addedToChunk && this.chunkExists(var2, var3)) { + this.getChunkFromChunkCoords(var2, var3).removeEntity(var1); + } + + this.loadedEntityList.remove(var1); + this.releaseEntitySkin(var1); + } + + public void addWorldAccess(IWorldAccess var1) { + this.worldAccesses.add(var1); + } + + public void removeWorldAccess(IWorldAccess var1) { + this.worldAccesses.remove(var1); + } + + public List getCollidingBoundingBoxes(Entity var1, AxisAlignedBB var2) { + this.collidingBoundingBoxes.clear(); + int var3 = MathHelper.floor_double(var2.minX); + int var4 = MathHelper.floor_double(var2.maxX + 1.0D); + int var5 = MathHelper.floor_double(var2.minY); + int var6 = MathHelper.floor_double(var2.maxY + 1.0D); + int var7 = MathHelper.floor_double(var2.minZ); + int var8 = MathHelper.floor_double(var2.maxZ + 1.0D); + + for(int var9 = var3; var9 < var4; ++var9) { + for(int var10 = var7; var10 < var8; ++var10) { + if(this.blockExists(var9, 64, var10)) { + for(int var11 = var5 - 1; var11 < var6; ++var11) { + Block var12 = Block.blocksList[this.getBlockId(var9, var11, var10)]; + if(var12 != null) { + var12.addCollisionBoxesToList(this, var9, var11, var10, var2, this.collidingBoundingBoxes, var1); + } + } + } + } + } + + double var14 = 0.25D; + List var15 = this.getEntitiesWithinAABBExcludingEntity(var1, var2.expand(var14, var14, var14)); + + for(int var16 = 0; var16 < var15.size(); ++var16) { + AxisAlignedBB var13 = ((Entity)var15.get(var16)).getBoundingBox(); + if(var13 != null && var13.intersectsWith(var2)) { + this.collidingBoundingBoxes.add(var13); + } + + var13 = var1.getCollisionBox((Entity)var15.get(var16)); + if(var13 != null && var13.intersectsWith(var2)) { + this.collidingBoundingBoxes.add(var13); + } + } + + return this.collidingBoundingBoxes; + } + + public List getCollidingBlockBounds(AxisAlignedBB var1) { + this.collidingBoundingBoxes.clear(); + int var2 = MathHelper.floor_double(var1.minX); + int var3 = MathHelper.floor_double(var1.maxX + 1.0D); + int var4 = MathHelper.floor_double(var1.minY); + int var5 = MathHelper.floor_double(var1.maxY + 1.0D); + int var6 = MathHelper.floor_double(var1.minZ); + int var7 = MathHelper.floor_double(var1.maxZ + 1.0D); + + for(int var8 = var2; var8 < var3; ++var8) { + for(int var9 = var6; var9 < var7; ++var9) { + if(this.blockExists(var8, 64, var9)) { + for(int var10 = var4 - 1; var10 < var5; ++var10) { + Block var11 = Block.blocksList[this.getBlockId(var8, var10, var9)]; + if(var11 != null) { + var11.addCollisionBoxesToList(this, var8, var10, var9, var1, this.collidingBoundingBoxes, (Entity)null); + } + } + } + } + } + + return this.collidingBoundingBoxes; + } + + public int calculateSkylightSubtracted(float var1) { + float var2 = this.getCelestialAngle(var1); + float var3 = 1.0F - (MathHelper.cos(var2 * (float)Math.PI * 2.0F) * 2.0F + 0.5F); + if(var3 < 0.0F) { + var3 = 0.0F; + } + + if(var3 > 1.0F) { + var3 = 1.0F; + } + + var3 = 1.0F - var3; + var3 = (float)((double)var3 * (1.0D - (double)(this.getRainStrength(var1) * 5.0F) / 16.0D)); + var3 = (float)((double)var3 * (1.0D - (double)(this.getWeightedThunderStrength(var1) * 5.0F) / 16.0D)); + var3 = 1.0F - var3; + return (int)(var3 * 11.0F); + } + + public float getSunBrightness(float var1) { + float var2 = this.getCelestialAngle(var1); + float var3 = 1.0F - (MathHelper.cos(var2 * (float)Math.PI * 2.0F) * 2.0F + 0.2F); + if(var3 < 0.0F) { + var3 = 0.0F; + } + + if(var3 > 1.0F) { + var3 = 1.0F; + } + + var3 = 1.0F - var3; + var3 = (float)((double)var3 * (1.0D - (double)(this.getRainStrength(var1) * 5.0F) / 16.0D)); + var3 = (float)((double)var3 * (1.0D - (double)(this.getWeightedThunderStrength(var1) * 5.0F) / 16.0D)); + return var3 * 0.8F + 0.2F; + } + + public Vec3 getSkyColor(Entity var1, float var2) { + float var3 = this.getCelestialAngle(var2); + float var4 = MathHelper.cos(var3 * (float)Math.PI * 2.0F) * 2.0F + 0.5F; + if(var4 < 0.0F) { + var4 = 0.0F; + } + + if(var4 > 1.0F) { + var4 = 1.0F; + } + + int var5 = MathHelper.floor_double(var1.posX); + int var6 = MathHelper.floor_double(var1.posZ); + BiomeGenBase var7 = this.getBiomeGenForCoords(var5, var6); + float var8 = var7.getFloatTemperature(); + int var9 = var7.getSkyColorByTemp(var8); + float var10 = (float)(var9 >> 16 & 255) / 255.0F; + float var11 = (float)(var9 >> 8 & 255) / 255.0F; + float var12 = (float)(var9 & 255) / 255.0F; + var10 *= var4; + var11 *= var4; + var12 *= var4; + float var13 = this.getRainStrength(var2); + float var14; + float var15; + if(var13 > 0.0F) { + var14 = (var10 * 0.3F + var11 * 0.59F + var12 * 0.11F) * 0.6F; + var15 = 1.0F - var13 * (12.0F / 16.0F); + var10 = var10 * var15 + var14 * (1.0F - var15); + var11 = var11 * var15 + var14 * (1.0F - var15); + var12 = var12 * var15 + var14 * (1.0F - var15); + } + + var14 = this.getWeightedThunderStrength(var2); + if(var14 > 0.0F) { + var15 = (var10 * 0.3F + var11 * 0.59F + var12 * 0.11F) * 0.2F; + float var16 = 1.0F - var14 * (12.0F / 16.0F); + var10 = var10 * var16 + var15 * (1.0F - var16); + var11 = var11 * var16 + var15 * (1.0F - var16); + var12 = var12 * var16 + var15 * (1.0F - var16); + } + + if(this.lastLightningBolt > 0) { + var15 = (float)this.lastLightningBolt - var2; + if(var15 > 1.0F) { + var15 = 1.0F; + } + + var15 *= 0.45F; + var10 = var10 * (1.0F - var15) + 0.8F * var15; + var11 = var11 * (1.0F - var15) + 0.8F * var15; + var12 = var12 * (1.0F - var15) + 1.0F * var15; + } + + return this.getWorldVec3Pool().getVecFromPool((double)var10, (double)var11, (double)var12); + } + + public float getCelestialAngle(float var1) { + return this.provider.calculateCelestialAngle(this.worldInfo.getWorldTime(), var1); + } + + public int getMoonPhase() { + return this.provider.getMoonPhase(this.worldInfo.getWorldTime()); + } + + public float getCelestialAngleRadians(float var1) { + float var2 = this.getCelestialAngle(var1); + return var2 * (float)Math.PI * 2.0F; + } + + public Vec3 getCloudColour(float var1) { + float var2 = this.getCelestialAngle(var1); + float var3 = MathHelper.cos(var2 * (float)Math.PI * 2.0F) * 2.0F + 0.5F; + if(var3 < 0.0F) { + var3 = 0.0F; + } + + if(var3 > 1.0F) { + var3 = 1.0F; + } + + float var4 = (float)(this.cloudColour >> 16 & 255L) / 255.0F; + float var5 = (float)(this.cloudColour >> 8 & 255L) / 255.0F; + float var6 = (float)(this.cloudColour & 255L) / 255.0F; + float var7 = this.getRainStrength(var1); + float var8; + float var9; + if(var7 > 0.0F) { + var8 = (var4 * 0.3F + var5 * 0.59F + var6 * 0.11F) * 0.6F; + var9 = 1.0F - var7 * 0.95F; + var4 = var4 * var9 + var8 * (1.0F - var9); + var5 = var5 * var9 + var8 * (1.0F - var9); + var6 = var6 * var9 + var8 * (1.0F - var9); + } + + var4 *= var3 * 0.9F + 0.1F; + var5 *= var3 * 0.9F + 0.1F; + var6 *= var3 * 0.85F + 0.15F; + var8 = this.getWeightedThunderStrength(var1); + if(var8 > 0.0F) { + var9 = (var4 * 0.3F + var5 * 0.59F + var6 * 0.11F) * 0.2F; + float var10 = 1.0F - var8 * 0.95F; + var4 = var4 * var10 + var9 * (1.0F - var10); + var5 = var5 * var10 + var9 * (1.0F - var10); + var6 = var6 * var10 + var9 * (1.0F - var10); + } + + return this.getWorldVec3Pool().getVecFromPool((double)var4, (double)var5, (double)var6); + } + + public Vec3 getFogColor(float var1) { + float var2 = this.getCelestialAngle(var1); + return this.provider.getFogColor(var2, var1); + } + + public int getPrecipitationHeight(int var1, int var2) { + return this.getChunkFromBlockCoords(var1, var2).getPrecipitationHeight(var1 & 15, var2 & 15); + } + + public int getTopSolidOrLiquidBlock(int var1, int var2) { + Chunk var3 = this.getChunkFromBlockCoords(var1, var2); + int var4 = var3.getTopFilledSegment() + 15; + var1 &= 15; + + for(var2 &= 15; var4 > 0; --var4) { + int var5 = var3.getBlockID(var1, var4, var2); + if(var5 != 0 && Block.blocksList[var5].blockMaterial.blocksMovement() && Block.blocksList[var5].blockMaterial != Material.leaves) { + return var4 + 1; + } + } + + return -1; + } + + public float getStarBrightness(float var1) { + float var2 = this.getCelestialAngle(var1); + float var3 = 1.0F - (MathHelper.cos(var2 * (float)Math.PI * 2.0F) * 2.0F + 0.25F); + if(var3 < 0.0F) { + var3 = 0.0F; + } + + if(var3 > 1.0F) { + var3 = 1.0F; + } + + return var3 * var3 * 0.5F; + } + + public void scheduleBlockUpdate(int var1, int var2, int var3, int var4, int var5) { + } + + public void func_82740_a(int var1, int var2, int var3, int var4, int var5, int var6) { + } + + public void scheduleBlockUpdateFromLoad(int var1, int var2, int var3, int var4, int var5, int var6) { + } + + public void updateEntities() { + this.theProfiler.startSection("entities"); + this.theProfiler.startSection("global"); + + int var1; + Entity var2; + CrashReport var4; + CrashReportCategory var5; + for(var1 = 0; var1 < this.weatherEffects.size(); ++var1) { + var2 = (Entity)this.weatherEffects.get(var1); + + try { + ++var2.ticksExisted; + var2.onUpdate(); + } catch (Throwable var8) { + var4 = CrashReport.makeCrashReport(var8, "Ticking entity"); + var5 = var4.makeCategory("Entity being ticked"); + if(var2 == null) { + var5.addCrashSection("Entity", "~~NULL~~"); + } else { + var2.func_85029_a(var5); + } + + throw new ReportedException(var4); + } + + if(var2.isDead) { + this.weatherEffects.remove(var1--); + } + } + + this.theProfiler.endStartSection("remove"); + this.loadedEntityList.removeAll(this.unloadedEntityList); + + int var3; + int var13; + for(var1 = 0; var1 < this.unloadedEntityList.size(); ++var1) { + var2 = (Entity)this.unloadedEntityList.get(var1); + var3 = var2.chunkCoordX; + var13 = var2.chunkCoordZ; + if(var2.addedToChunk && this.chunkExists(var3, var13)) { + this.getChunkFromChunkCoords(var3, var13).removeEntity(var2); + } + } + + for(var1 = 0; var1 < this.unloadedEntityList.size(); ++var1) { + this.releaseEntitySkin((Entity)this.unloadedEntityList.get(var1)); + } + + this.unloadedEntityList.clear(); + this.theProfiler.endStartSection("regular"); + + for(var1 = 0; var1 < this.loadedEntityList.size(); ++var1) { + var2 = (Entity)this.loadedEntityList.get(var1); + if(var2.ridingEntity != null) { + if(!var2.ridingEntity.isDead && var2.ridingEntity.riddenByEntity == var2) { + continue; + } + + var2.ridingEntity.riddenByEntity = null; + var2.ridingEntity = null; + } + + this.theProfiler.startSection("tick"); + if(!var2.isDead) { + try { + this.updateEntity(var2); + } catch (Throwable var7) { + var4 = CrashReport.makeCrashReport(var7, "Ticking entity"); + var5 = var4.makeCategory("Entity being ticked"); + var2.func_85029_a(var5); + throw new ReportedException(var4); + } + } + + this.theProfiler.endSection(); + this.theProfiler.startSection("remove"); + if(var2.isDead) { + var3 = var2.chunkCoordX; + var13 = var2.chunkCoordZ; + if(var2.addedToChunk && this.chunkExists(var3, var13)) { + this.getChunkFromChunkCoords(var3, var13).removeEntity(var2); + } + + this.loadedEntityList.remove(var1--); + this.releaseEntitySkin(var2); + } + + this.theProfiler.endSection(); + } + + this.theProfiler.endStartSection("tileEntities"); + this.scanningTileEntities = true; + Iterator var14 = this.loadedTileEntityList.iterator(); + + while(var14.hasNext()) { + TileEntity var9 = (TileEntity)var14.next(); + if(!var9.isInvalid() && var9.func_70309_m() && this.blockExists(var9.xCoord, var9.yCoord, var9.zCoord)) { + try { + var9.updateEntity(); + } catch (Throwable var6) { + var4 = CrashReport.makeCrashReport(var6, "Ticking tile entity"); + var5 = var4.makeCategory("Tile entity being ticked"); + var9.func_85027_a(var5); + throw new ReportedException(var4); + } + } + + if(var9.isInvalid()) { + var14.remove(); + if(this.chunkExists(var9.xCoord >> 4, var9.zCoord >> 4)) { + Chunk var11 = this.getChunkFromChunkCoords(var9.xCoord >> 4, var9.zCoord >> 4); + if(var11 != null) { + var11.removeChunkBlockTileEntity(var9.xCoord & 15, var9.yCoord, var9.zCoord & 15); + } + } + } + } + + this.scanningTileEntities = false; + if(!this.entityRemoval.isEmpty()) { + this.loadedTileEntityList.removeAll(this.entityRemoval); + this.entityRemoval.clear(); + } + + this.theProfiler.endStartSection("pendingTileEntities"); + if(!this.addedTileEntityList.isEmpty()) { + for(int var10 = 0; var10 < this.addedTileEntityList.size(); ++var10) { + TileEntity var12 = (TileEntity)this.addedTileEntityList.get(var10); + if(!var12.isInvalid()) { + if(!this.loadedTileEntityList.contains(var12)) { + this.loadedTileEntityList.add(var12); + } + + if(this.chunkExists(var12.xCoord >> 4, var12.zCoord >> 4)) { + Chunk var15 = this.getChunkFromChunkCoords(var12.xCoord >> 4, var12.zCoord >> 4); + if(var15 != null) { + var15.setChunkBlockTileEntity(var12.xCoord & 15, var12.yCoord, var12.zCoord & 15, var12); + } + } + + this.markBlockForUpdate(var12.xCoord, var12.yCoord, var12.zCoord); + } + } + + this.addedTileEntityList.clear(); + } + + this.theProfiler.endSection(); + this.theProfiler.endSection(); + } + + public void addTileEntity(Collection var1) { + if(this.scanningTileEntities) { + this.addedTileEntityList.addAll(var1); + } else { + this.loadedTileEntityList.addAll(var1); + } + + } + + public void updateEntity(Entity var1) { + this.updateEntityWithOptionalForce(var1, true); + } + + public void updateEntityWithOptionalForce(Entity var1, boolean var2) { + int var3 = MathHelper.floor_double(var1.posX); + int var4 = MathHelper.floor_double(var1.posZ); + byte var5 = 32; + if(!var2 || this.checkChunksExist(var3 - var5, 0, var4 - var5, var3 + var5, 0, var4 + var5)) { + var1.lastTickPosX = var1.posX; + var1.lastTickPosY = var1.posY; + var1.lastTickPosZ = var1.posZ; + var1.prevRotationYaw = var1.rotationYaw; + var1.prevRotationPitch = var1.rotationPitch; + if(var2 && var1.addedToChunk) { + if(var1.ridingEntity != null) { + var1.updateRidden(); + } else { + ++var1.ticksExisted; + var1.onUpdate(); + } + } + + this.theProfiler.startSection("chunkCheck"); + if(Double.isNaN(var1.posX) || Double.isInfinite(var1.posX)) { + var1.posX = var1.lastTickPosX; + } + + if(Double.isNaN(var1.posY) || Double.isInfinite(var1.posY)) { + var1.posY = var1.lastTickPosY; + } + + if(Double.isNaN(var1.posZ) || Double.isInfinite(var1.posZ)) { + var1.posZ = var1.lastTickPosZ; + } + + if(Double.isNaN((double)var1.rotationPitch) || Double.isInfinite((double)var1.rotationPitch)) { + var1.rotationPitch = var1.prevRotationPitch; + } + + if(Double.isNaN((double)var1.rotationYaw) || Double.isInfinite((double)var1.rotationYaw)) { + var1.rotationYaw = var1.prevRotationYaw; + } + + int var6 = MathHelper.floor_double(var1.posX / 16.0D); + int var7 = MathHelper.floor_double(var1.posY / 16.0D); + int var8 = MathHelper.floor_double(var1.posZ / 16.0D); + if(!var1.addedToChunk || var1.chunkCoordX != var6 || var1.chunkCoordY != var7 || var1.chunkCoordZ != var8) { + if(var1.addedToChunk && this.chunkExists(var1.chunkCoordX, var1.chunkCoordZ)) { + this.getChunkFromChunkCoords(var1.chunkCoordX, var1.chunkCoordZ).removeEntityAtIndex(var1, var1.chunkCoordY); + } + + if(this.chunkExists(var6, var8)) { + var1.addedToChunk = true; + this.getChunkFromChunkCoords(var6, var8).addEntity(var1); + } else { + var1.addedToChunk = false; + } + } + + this.theProfiler.endSection(); + if(var2 && var1.addedToChunk && var1.riddenByEntity != null) { + if(!var1.riddenByEntity.isDead && var1.riddenByEntity.ridingEntity == var1) { + this.updateEntity(var1.riddenByEntity); + } else { + var1.riddenByEntity.ridingEntity = null; + var1.riddenByEntity = null; + } + } + + } + } + + public boolean checkNoEntityCollision(AxisAlignedBB var1) { + return this.checkNoEntityCollision(var1, (Entity)null); + } + + public boolean checkNoEntityCollision(AxisAlignedBB var1, Entity var2) { + List var3 = this.getEntitiesWithinAABBExcludingEntity((Entity)null, var1); + + for(int var4 = 0; var4 < var3.size(); ++var4) { + Entity var5 = (Entity)var3.get(var4); + if(!var5.isDead && var5.preventEntitySpawning && var5 != var2) { + return false; + } + } + + return true; + } + + public boolean checkBlockCollision(AxisAlignedBB var1) { + int var2 = MathHelper.floor_double(var1.minX); + int var3 = MathHelper.floor_double(var1.maxX + 1.0D); + int var4 = MathHelper.floor_double(var1.minY); + int var5 = MathHelper.floor_double(var1.maxY + 1.0D); + int var6 = MathHelper.floor_double(var1.minZ); + int var7 = MathHelper.floor_double(var1.maxZ + 1.0D); + if(var1.minX < 0.0D) { + --var2; + } + + if(var1.minY < 0.0D) { + --var4; + } + + if(var1.minZ < 0.0D) { + --var6; + } + + for(int var8 = var2; var8 < var3; ++var8) { + for(int var9 = var4; var9 < var5; ++var9) { + for(int var10 = var6; var10 < var7; ++var10) { + Block var11 = Block.blocksList[this.getBlockId(var8, var9, var10)]; + if(var11 != null) { + return true; + } + } + } + } + + return false; + } + + public boolean isAnyLiquid(AxisAlignedBB var1) { + int var2 = MathHelper.floor_double(var1.minX); + int var3 = MathHelper.floor_double(var1.maxX + 1.0D); + int var4 = MathHelper.floor_double(var1.minY); + int var5 = MathHelper.floor_double(var1.maxY + 1.0D); + int var6 = MathHelper.floor_double(var1.minZ); + int var7 = MathHelper.floor_double(var1.maxZ + 1.0D); + if(var1.minX < 0.0D) { + --var2; + } + + if(var1.minY < 0.0D) { + --var4; + } + + if(var1.minZ < 0.0D) { + --var6; + } + + for(int var8 = var2; var8 < var3; ++var8) { + for(int var9 = var4; var9 < var5; ++var9) { + for(int var10 = var6; var10 < var7; ++var10) { + Block var11 = Block.blocksList[this.getBlockId(var8, var9, var10)]; + if(var11 != null && var11.blockMaterial.isLiquid()) { + return true; + } + } + } + } + + return false; + } + + public boolean isBoundingBoxBurning(AxisAlignedBB var1) { + int var2 = MathHelper.floor_double(var1.minX); + int var3 = MathHelper.floor_double(var1.maxX + 1.0D); + int var4 = MathHelper.floor_double(var1.minY); + int var5 = MathHelper.floor_double(var1.maxY + 1.0D); + int var6 = MathHelper.floor_double(var1.minZ); + int var7 = MathHelper.floor_double(var1.maxZ + 1.0D); + if(this.checkChunksExist(var2, var4, var6, var3, var5, var7)) { + for(int var8 = var2; var8 < var3; ++var8) { + for(int var9 = var4; var9 < var5; ++var9) { + for(int var10 = var6; var10 < var7; ++var10) { + int var11 = this.getBlockId(var8, var9, var10); + if(var11 == Block.fire.blockID || var11 == Block.lavaMoving.blockID || var11 == Block.lavaStill.blockID) { + return true; + } + } + } + } + } + + return false; + } + + public boolean handleMaterialAcceleration(AxisAlignedBB var1, Material var2, Entity var3) { + int var4 = MathHelper.floor_double(var1.minX); + int var5 = MathHelper.floor_double(var1.maxX + 1.0D); + int var6 = MathHelper.floor_double(var1.minY); + int var7 = MathHelper.floor_double(var1.maxY + 1.0D); + int var8 = MathHelper.floor_double(var1.minZ); + int var9 = MathHelper.floor_double(var1.maxZ + 1.0D); + if(!this.checkChunksExist(var4, var6, var8, var5, var7, var9)) { + return false; + } else { + boolean var10 = false; + Vec3 var11 = this.getWorldVec3Pool().getVecFromPool(0.0D, 0.0D, 0.0D); + + for(int var12 = var4; var12 < var5; ++var12) { + for(int var13 = var6; var13 < var7; ++var13) { + for(int var14 = var8; var14 < var9; ++var14) { + Block var15 = Block.blocksList[this.getBlockId(var12, var13, var14)]; + if(var15 != null && var15.blockMaterial == var2) { + double var16 = (double)((float)(var13 + 1) - BlockFluid.getFluidHeightPercent(this.getBlockMetadata(var12, var13, var14))); + if((double)var7 >= var16) { + var10 = true; + var15.velocityToAddToEntity(this, var12, var13, var14, var3, var11); + } + } + } + } + } + + if(var11.lengthVector() > 0.0D && var3.func_96092_aw()) { + var11 = var11.normalize(); + double var18 = 0.014D; + var3.motionX += var11.xCoord * var18; + var3.motionY += var11.yCoord * var18; + var3.motionZ += var11.zCoord * var18; + } + + return var10; + } + } + + public boolean isMaterialInBB(AxisAlignedBB var1, Material var2) { + int var3 = MathHelper.floor_double(var1.minX); + int var4 = MathHelper.floor_double(var1.maxX + 1.0D); + int var5 = MathHelper.floor_double(var1.minY); + int var6 = MathHelper.floor_double(var1.maxY + 1.0D); + int var7 = MathHelper.floor_double(var1.minZ); + int var8 = MathHelper.floor_double(var1.maxZ + 1.0D); + + for(int var9 = var3; var9 < var4; ++var9) { + for(int var10 = var5; var10 < var6; ++var10) { + for(int var11 = var7; var11 < var8; ++var11) { + Block var12 = Block.blocksList[this.getBlockId(var9, var10, var11)]; + if(var12 != null && var12.blockMaterial == var2) { + return true; + } + } + } + } + + return false; + } + + public boolean isAABBInMaterial(AxisAlignedBB var1, Material var2) { + int var3 = MathHelper.floor_double(var1.minX); + int var4 = MathHelper.floor_double(var1.maxX + 1.0D); + int var5 = MathHelper.floor_double(var1.minY); + int var6 = MathHelper.floor_double(var1.maxY + 1.0D); + int var7 = MathHelper.floor_double(var1.minZ); + int var8 = MathHelper.floor_double(var1.maxZ + 1.0D); + + for(int var9 = var3; var9 < var4; ++var9) { + for(int var10 = var5; var10 < var6; ++var10) { + for(int var11 = var7; var11 < var8; ++var11) { + Block var12 = Block.blocksList[this.getBlockId(var9, var10, var11)]; + if(var12 != null && var12.blockMaterial == var2) { + int var13 = this.getBlockMetadata(var9, var10, var11); + double var14 = (double)(var10 + 1); + if(var13 < 8) { + var14 = (double)(var10 + 1) - (double)var13 / 8.0D; + } + + if(var14 >= var1.minY) { + return true; + } + } + } + } + } + + return false; + } + + public Explosion createExplosion(Entity var1, double var2, double var4, double var6, float var8, boolean var9) { + return this.newExplosion(var1, var2, var4, var6, var8, false, var9); + } + + public Explosion newExplosion(Entity var1, double var2, double var4, double var6, float var8, boolean var9, boolean var10) { + Explosion var11 = new Explosion(this, var1, var2, var4, var6, var8); + var11.isFlaming = var9; + var11.isSmoking = var10; + var11.doExplosionA(); + var11.doExplosionB(true); + return var11; + } + + public float getBlockDensity(Vec3 var1, AxisAlignedBB var2) { + double var3 = 1.0D / ((var2.maxX - var2.minX) * 2.0D + 1.0D); + double var5 = 1.0D / ((var2.maxY - var2.minY) * 2.0D + 1.0D); + double var7 = 1.0D / ((var2.maxZ - var2.minZ) * 2.0D + 1.0D); + int var9 = 0; + int var10 = 0; + + for(float var11 = 0.0F; var11 <= 1.0F; var11 = (float)((double)var11 + var3)) { + for(float var12 = 0.0F; var12 <= 1.0F; var12 = (float)((double)var12 + var5)) { + for(float var13 = 0.0F; var13 <= 1.0F; var13 = (float)((double)var13 + var7)) { + double var14 = var2.minX + (var2.maxX - var2.minX) * (double)var11; + double var16 = var2.minY + (var2.maxY - var2.minY) * (double)var12; + double var18 = var2.minZ + (var2.maxZ - var2.minZ) * (double)var13; + if(this.rayTraceBlocks(this.getWorldVec3Pool().getVecFromPool(var14, var16, var18), var1) == null) { + ++var9; + } + + ++var10; + } + } + } + + return (float)var9 / (float)var10; + } + + public boolean extinguishFire(EntityPlayer var1, int var2, int var3, int var4, int var5) { + if(var5 == 0) { + --var3; + } + + if(var5 == 1) { + ++var3; + } + + if(var5 == 2) { + --var4; + } + + if(var5 == 3) { + ++var4; + } + + if(var5 == 4) { + --var2; + } + + if(var5 == 5) { + ++var2; + } + + if(this.getBlockId(var2, var3, var4) == Block.fire.blockID) { + this.playAuxSFXAtEntity(var1, 1004, var2, var3, var4, 0); + this.setBlockToAir(var2, var3, var4); + return true; + } else { + return false; + } + } + + public String getDebugLoadedEntities() { + return "All: " + this.loadedEntityList.size(); + } + + public String getProviderName() { + return this.chunkProvider.makeString(); + } + + public TileEntity getBlockTileEntity(int var1, int var2, int var3) { + if(var2 >= 0 && var2 < 256) { + TileEntity var4 = null; + int var5; + TileEntity var6; + if(this.scanningTileEntities) { + for(var5 = 0; var5 < this.addedTileEntityList.size(); ++var5) { + var6 = (TileEntity)this.addedTileEntityList.get(var5); + if(!var6.isInvalid() && var6.xCoord == var1 && var6.yCoord == var2 && var6.zCoord == var3) { + var4 = var6; + break; + } + } + } + + if(var4 == null) { + Chunk var7 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + if(var7 != null) { + var4 = var7.getChunkBlockTileEntity(var1 & 15, var2, var3 & 15); + } + } + + if(var4 == null) { + for(var5 = 0; var5 < this.addedTileEntityList.size(); ++var5) { + var6 = (TileEntity)this.addedTileEntityList.get(var5); + if(!var6.isInvalid() && var6.xCoord == var1 && var6.yCoord == var2 && var6.zCoord == var3) { + var4 = var6; + break; + } + } + } + + return var4; + } else { + return null; + } + } + + public void setBlockTileEntity(int var1, int var2, int var3, TileEntity var4) { + if(var4 != null && !var4.isInvalid()) { + if(this.scanningTileEntities) { + var4.xCoord = var1; + var4.yCoord = var2; + var4.zCoord = var3; + Iterator var5 = this.addedTileEntityList.iterator(); + + while(var5.hasNext()) { + TileEntity var6 = (TileEntity)var5.next(); + if(var6.xCoord == var1 && var6.yCoord == var2 && var6.zCoord == var3) { + var6.invalidate(); + var5.remove(); + } + } + + this.addedTileEntityList.add(var4); + } else { + this.loadedTileEntityList.add(var4); + Chunk var7 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + if(var7 != null) { + var7.setChunkBlockTileEntity(var1 & 15, var2, var3 & 15, var4); + } + } + } + + } + + public void removeBlockTileEntity(int var1, int var2, int var3) { + TileEntity var4 = this.getBlockTileEntity(var1, var2, var3); + if(var4 != null && this.scanningTileEntities) { + var4.invalidate(); + this.addedTileEntityList.remove(var4); + } else { + if(var4 != null) { + this.addedTileEntityList.remove(var4); + this.loadedTileEntityList.remove(var4); + } + + Chunk var5 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + if(var5 != null) { + var5.removeChunkBlockTileEntity(var1 & 15, var2, var3 & 15); + } + } + + } + + public void markTileEntityForDespawn(TileEntity var1) { + this.entityRemoval.add(var1); + } + + public boolean isBlockOpaqueCube(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return var4 == null ? false : var4.isOpaqueCube(); + } + + public boolean isBlockNormalCube(int var1, int var2, int var3) { + return Block.isNormalCube(this.getBlockId(var1, var2, var3)); + } + + public boolean func_85174_u(int var1, int var2, int var3) { + int var4 = this.getBlockId(var1, var2, var3); + if(var4 != 0 && Block.blocksList[var4] != null) { + AxisAlignedBB var5 = Block.blocksList[var4].getCollisionBoundingBoxFromPool(this, var1, var2, var3); + return var5 != null && var5.getAverageEdgeLength() >= 1.0D; + } else { + return false; + } + } + + public boolean doesBlockHaveSolidTopSurface(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return this.isBlockTopFacingSurfaceSolid(var4, this.getBlockMetadata(var1, var2, var3)); + } + + public boolean isBlockTopFacingSurfaceSolid(Block var1, int var2) { + return var1 == null ? false : (var1.blockMaterial.isOpaque() && var1.renderAsNormalBlock() ? true : (var1 instanceof BlockStairs ? (var2 & 4) == 4 : (var1 instanceof BlockHalfSlab ? (var2 & 8) == 8 : (var1 instanceof BlockHopper ? true : (var1 instanceof BlockSnow ? (var2 & 7) == 7 : false))))); + } + + public boolean isBlockNormalCubeDefault(int var1, int var2, int var3, boolean var4) { + if(var1 >= -30000000 && var3 >= -30000000 && var1 < 30000000 && var3 < 30000000) { + Chunk var5 = this.chunkProvider.provideChunk(var1 >> 4, var3 >> 4); + if(var5 != null && !var5.isEmpty()) { + Block var6 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return var6 == null ? false : var6.blockMaterial.isOpaque() && var6.renderAsNormalBlock(); + } else { + return var4; + } + } else { + return var4; + } + } + + public void calculateInitialSkylight() { + int var1 = this.calculateSkylightSubtracted(1.0F); + if(var1 != this.skylightSubtracted) { + this.skylightSubtracted = var1; + } + + } + + public void setAllowedSpawnTypes(boolean var1, boolean var2) { + this.spawnHostileMobs = var1; + this.spawnPeacefulMobs = var2; + } + + public void tick() { + this.updateWeather(); + } + + private void calculateInitialWeather() { + if(this.worldInfo.isRaining()) { + this.rainingStrength = 1.0F; + if(this.worldInfo.isThundering()) { + this.thunderingStrength = 1.0F; + } + } + + } + + protected void updateWeather() { + if(!this.provider.hasNoSky) { + int var1 = this.worldInfo.getThunderTime(); + if(var1 <= 0) { + if(this.worldInfo.isThundering()) { + this.worldInfo.setThunderTime(this.rand.nextInt(12000) + 3600); + } else { + this.worldInfo.setThunderTime(this.rand.nextInt(168000) + 12000); + } + } else { + --var1; + this.worldInfo.setThunderTime(var1); + if(var1 <= 0) { + this.worldInfo.setThundering(!this.worldInfo.isThundering()); + } + } + + int var2 = this.worldInfo.getRainTime(); + if(var2 <= 0) { + if(this.worldInfo.isRaining()) { + this.worldInfo.setRainTime(this.rand.nextInt(12000) + 12000); + } else { + this.worldInfo.setRainTime(this.rand.nextInt(168000) + 12000); + } + } else { + --var2; + this.worldInfo.setRainTime(var2); + if(var2 <= 0) { + this.worldInfo.setRaining(!this.worldInfo.isRaining()); + } + } + + this.prevRainingStrength = this.rainingStrength; + if(this.worldInfo.isRaining()) { + this.rainingStrength = (float)((double)this.rainingStrength + 0.01D); + } else { + this.rainingStrength = (float)((double)this.rainingStrength - 0.01D); + } + + if(this.rainingStrength < 0.0F) { + this.rainingStrength = 0.0F; + } + + if(this.rainingStrength > 1.0F) { + this.rainingStrength = 1.0F; + } + + this.prevThunderingStrength = this.thunderingStrength; + if(this.worldInfo.isThundering()) { + this.thunderingStrength = (float)((double)this.thunderingStrength + 0.01D); + } else { + this.thunderingStrength = (float)((double)this.thunderingStrength - 0.01D); + } + + if(this.thunderingStrength < 0.0F) { + this.thunderingStrength = 0.0F; + } + + if(this.thunderingStrength > 1.0F) { + this.thunderingStrength = 1.0F; + } + + } + } + + public void toggleRain() { + this.worldInfo.setRainTime(1); + } + + protected void setActivePlayerChunksAndCheckLight() { + this.activeChunkSet.clear(); + this.theProfiler.startSection("buildList"); + + int var1; + EntityPlayer var2; + int var3; + int var4; + for(var1 = 0; var1 < this.playerEntities.size(); ++var1) { + var2 = (EntityPlayer)this.playerEntities.get(var1); + var3 = MathHelper.floor_double(var2.posX / 16.0D); + var4 = MathHelper.floor_double(var2.posZ / 16.0D); + byte var5 = 7; + + for(int var6 = -var5; var6 <= var5; ++var6) { + for(int var7 = -var5; var7 <= var5; ++var7) { + this.activeChunkSet.add(new ChunkCoordIntPair(var6 + var3, var7 + var4)); + } + } + } + + this.theProfiler.endSection(); + if(this.ambientTickCountdown > 0) { + --this.ambientTickCountdown; + } + + this.theProfiler.startSection("playerCheckLight"); + if(!this.playerEntities.isEmpty()) { + var1 = this.rand.nextInt(this.playerEntities.size()); + var2 = (EntityPlayer)this.playerEntities.get(var1); + var3 = MathHelper.floor_double(var2.posX) + this.rand.nextInt(11) - 5; + var4 = MathHelper.floor_double(var2.posY) + this.rand.nextInt(11) - 5; + int var8 = MathHelper.floor_double(var2.posZ) + this.rand.nextInt(11) - 5; + this.updateAllLightTypes(var3, var4, var8); + } + + this.theProfiler.endSection(); + } + + protected void moodSoundAndLightCheck(int var1, int var2, Chunk var3) { + this.theProfiler.endStartSection("moodSound"); + if(this.ambientTickCountdown == 0 && !this.isRemote) { + this.updateLCG = this.updateLCG * 3 + 1013904223; + int var4 = this.updateLCG >> 2; + int var5 = var4 & 15; + int var6 = var4 >> 8 & 15; + int var7 = var4 >> 16 & 127; + int var8 = var3.getBlockID(var5, var7, var6); + var5 += var1; + var6 += var2; + if(var8 == 0 && this.getFullBlockLightValue(var5, var7, var6) <= this.rand.nextInt(8) && this.getSavedLightValue(EnumSkyBlock.Sky, var5, var7, var6) <= 0) { + EntityPlayer var9 = this.getClosestPlayer((double)var5 + 0.5D, (double)var7 + 0.5D, (double)var6 + 0.5D, 8.0D); + if(var9 != null && var9.getDistanceSq((double)var5 + 0.5D, (double)var7 + 0.5D, (double)var6 + 0.5D) > 4.0D) { + this.playSoundEffect((double)var5 + 0.5D, (double)var7 + 0.5D, (double)var6 + 0.5D, "ambient.cave.cave", 0.7F, 0.8F + this.rand.nextFloat() * 0.2F); + this.ambientTickCountdown = this.rand.nextInt(12000) + 6000; + } + } + } + + this.theProfiler.endStartSection("checkLight"); + var3.enqueueRelightChecks(); + } + + protected void tickBlocksAndAmbiance() { + this.setActivePlayerChunksAndCheckLight(); + } + + public boolean isBlockFreezable(int var1, int var2, int var3) { + return this.canBlockFreeze(var1, var2, var3, false); + } + + public boolean isBlockFreezableNaturally(int var1, int var2, int var3) { + return this.canBlockFreeze(var1, var2, var3, true); + } + + public boolean canBlockFreeze(int var1, int var2, int var3, boolean var4) { + BiomeGenBase var5 = this.getBiomeGenForCoords(var1, var3); + float var6 = var5.getFloatTemperature(); + if(var6 > 0.15F) { + return false; + } else { + if(var2 >= 0 && var2 < 256 && this.getSavedLightValue(EnumSkyBlock.Block, var1, var2, var3) < 10) { + int var7 = this.getBlockId(var1, var2, var3); + if((var7 == Block.waterStill.blockID || var7 == Block.waterMoving.blockID) && this.getBlockMetadata(var1, var2, var3) == 0) { + if(!var4) { + return true; + } + + boolean var8 = true; + if(var8 && this.getBlockMaterial(var1 - 1, var2, var3) != Material.water) { + var8 = false; + } + + if(var8 && this.getBlockMaterial(var1 + 1, var2, var3) != Material.water) { + var8 = false; + } + + if(var8 && this.getBlockMaterial(var1, var2, var3 - 1) != Material.water) { + var8 = false; + } + + if(var8 && this.getBlockMaterial(var1, var2, var3 + 1) != Material.water) { + var8 = false; + } + + if(!var8) { + return true; + } + } + } + + return false; + } + } + + public boolean canSnowAt(int var1, int var2, int var3) { + BiomeGenBase var4 = this.getBiomeGenForCoords(var1, var3); + float var5 = var4.getFloatTemperature(); + if(var5 > 0.15F) { + return false; + } else { + if(var2 >= 0 && var2 < 256 && this.getSavedLightValue(EnumSkyBlock.Block, var1, var2, var3) < 10) { + int var6 = this.getBlockId(var1, var2 - 1, var3); + int var7 = this.getBlockId(var1, var2, var3); + if(var7 == 0 && Block.snow.canPlaceBlockAt(this, var1, var2, var3) && var6 != 0 && var6 != Block.ice.blockID && Block.blocksList[var6].blockMaterial.blocksMovement()) { + return true; + } + } + + return false; + } + } + + public void updateAllLightTypes(int var1, int var2, int var3) { + if(!this.provider.hasNoSky) { + this.updateLightByType(EnumSkyBlock.Sky, var1, var2, var3); + } + + this.updateLightByType(EnumSkyBlock.Block, var1, var2, var3); + } + + private int computeLightValue(int var1, int var2, int var3, EnumSkyBlock var4) { + if(var4 == EnumSkyBlock.Sky && this.canBlockSeeTheSky(var1, var2, var3)) { + return 15; + } else { + int var5 = this.getBlockId(var1, var2, var3); + int var6 = var4 == EnumSkyBlock.Sky ? 0 : Block.lightValue[var5]; + int var7 = Block.lightOpacity[var5]; + if(var7 >= 15 && Block.lightValue[var5] > 0) { + var7 = 1; + } + + if(var7 < 1) { + var7 = 1; + } + + if(var7 >= 15) { + return 0; + } else if(var6 >= 14) { + return var6; + } else { + for(int var8 = 0; var8 < 6; ++var8) { + int var9 = var1 + Facing.offsetsXForSide[var8]; + int var10 = var2 + Facing.offsetsYForSide[var8]; + int var11 = var3 + Facing.offsetsZForSide[var8]; + int var12 = this.getSavedLightValue(var4, var9, var10, var11) - var7; + if(var12 > var6) { + var6 = var12; + } + + if(var6 >= 14) { + return var6; + } + } + + return var6; + } + } + } + + public void updateLightByType(EnumSkyBlock var1, int var2, int var3, int var4) { + if(this.doChunksNearChunkExist(var2, var3, var4, 17)) { + int var5 = 0; + int var6 = 0; + this.theProfiler.startSection("getBrightness"); + int var7 = this.getSavedLightValue(var1, var2, var3, var4); + int var8 = this.computeLightValue(var2, var3, var4, var1); + int var9; + int var10; + int var11; + int var12; + int var13; + int var14; + int var15; + int var16; + int var17; + if(var8 > var7) { + this.lightUpdateBlockList[var6++] = 133152; + } else if(var8 < var7) { + this.lightUpdateBlockList[var6++] = 133152 | var7 << 18; + + label90: + while(true) { + do { + do { + do { + if(var5 >= var6) { + var5 = 0; + break label90; + } + + var9 = this.lightUpdateBlockList[var5++]; + var10 = (var9 & 63) - 32 + var2; + var11 = (var9 >> 6 & 63) - 32 + var3; + var12 = (var9 >> 12 & 63) - 32 + var4; + var13 = var9 >> 18 & 15; + var14 = this.getSavedLightValue(var1, var10, var11, var12); + } while(var14 != var13); + + this.setLightValue(var1, var10, var11, var12, 0); + } while(var13 <= 0); + + var15 = MathHelper.abs_int(var10 - var2); + var16 = MathHelper.abs_int(var11 - var3); + var17 = MathHelper.abs_int(var12 - var4); + } while(var15 + var16 + var17 >= 17); + + for(int var18 = 0; var18 < 6; ++var18) { + int var19 = var10 + Facing.offsetsXForSide[var18]; + int var20 = var11 + Facing.offsetsYForSide[var18]; + int var21 = var12 + Facing.offsetsZForSide[var18]; + int var22 = Math.max(1, Block.lightOpacity[this.getBlockId(var19, var20, var21)]); + var14 = this.getSavedLightValue(var1, var19, var20, var21); + if(var14 == var13 - var22 && var6 < this.lightUpdateBlockList.length) { + this.lightUpdateBlockList[var6++] = var19 - var2 + 32 | var20 - var3 + 32 << 6 | var21 - var4 + 32 << 12 | var13 - var22 << 18; + } + } + } + } + + this.theProfiler.endSection(); + this.theProfiler.startSection("checkedPosition < toCheckCount"); + + while(var5 < var6) { + var9 = this.lightUpdateBlockList[var5++]; + var10 = (var9 & 63) - 32 + var2; + var11 = (var9 >> 6 & 63) - 32 + var3; + var12 = (var9 >> 12 & 63) - 32 + var4; + var13 = this.getSavedLightValue(var1, var10, var11, var12); + var14 = this.computeLightValue(var10, var11, var12, var1); + if(var14 != var13) { + this.setLightValue(var1, var10, var11, var12, var14); + if(var14 > var13) { + var15 = Math.abs(var10 - var2); + var16 = Math.abs(var11 - var3); + var17 = Math.abs(var12 - var4); + boolean var23 = var6 < this.lightUpdateBlockList.length - 6; + if(var15 + var16 + var17 < 17 && var23) { + if(this.getSavedLightValue(var1, var10 - 1, var11, var12) < var14) { + this.lightUpdateBlockList[var6++] = var10 - 1 - var2 + 32 + (var11 - var3 + 32 << 6) + (var12 - var4 + 32 << 12); + } + + if(this.getSavedLightValue(var1, var10 + 1, var11, var12) < var14) { + this.lightUpdateBlockList[var6++] = var10 + 1 - var2 + 32 + (var11 - var3 + 32 << 6) + (var12 - var4 + 32 << 12); + } + + if(this.getSavedLightValue(var1, var10, var11 - 1, var12) < var14) { + this.lightUpdateBlockList[var6++] = var10 - var2 + 32 + (var11 - 1 - var3 + 32 << 6) + (var12 - var4 + 32 << 12); + } + + if(this.getSavedLightValue(var1, var10, var11 + 1, var12) < var14) { + this.lightUpdateBlockList[var6++] = var10 - var2 + 32 + (var11 + 1 - var3 + 32 << 6) + (var12 - var4 + 32 << 12); + } + + if(this.getSavedLightValue(var1, var10, var11, var12 - 1) < var14) { + this.lightUpdateBlockList[var6++] = var10 - var2 + 32 + (var11 - var3 + 32 << 6) + (var12 - 1 - var4 + 32 << 12); + } + + if(this.getSavedLightValue(var1, var10, var11, var12 + 1) < var14) { + this.lightUpdateBlockList[var6++] = var10 - var2 + 32 + (var11 - var3 + 32 << 6) + (var12 + 1 - var4 + 32 << 12); + } + } + } + } + } + + this.theProfiler.endSection(); + } + } + + public boolean tickUpdates(boolean var1) { + return false; + } + + public List getPendingBlockUpdates(Chunk var1, boolean var2) { + return null; + } + + public List getEntitiesWithinAABBExcludingEntity(Entity var1, AxisAlignedBB var2) { + return this.getEntitiesWithinAABBExcludingEntity(var1, var2, (IEntitySelector)null); + } + + public List getEntitiesWithinAABBExcludingEntity(Entity var1, AxisAlignedBB var2, IEntitySelector var3) { + ArrayList var4 = new ArrayList(); + int var5 = MathHelper.floor_double((var2.minX - 2.0D) / 16.0D); + int var6 = MathHelper.floor_double((var2.maxX + 2.0D) / 16.0D); + int var7 = MathHelper.floor_double((var2.minZ - 2.0D) / 16.0D); + int var8 = MathHelper.floor_double((var2.maxZ + 2.0D) / 16.0D); + + for(int var9 = var5; var9 <= var6; ++var9) { + for(int var10 = var7; var10 <= var8; ++var10) { + if(this.chunkExists(var9, var10)) { + this.getChunkFromChunkCoords(var9, var10).getEntitiesWithinAABBForEntity(var1, var2, var4, var3); + } + } + } + + return var4; + } + + public List getEntitiesWithinAABB(Class var1, AxisAlignedBB var2) { + return this.selectEntitiesWithinAABB(var1, var2, (IEntitySelector)null); + } + + public List selectEntitiesWithinAABB(Class var1, AxisAlignedBB var2, IEntitySelector var3) { + int var4 = MathHelper.floor_double((var2.minX - 2.0D) / 16.0D); + int var5 = MathHelper.floor_double((var2.maxX + 2.0D) / 16.0D); + int var6 = MathHelper.floor_double((var2.minZ - 2.0D) / 16.0D); + int var7 = MathHelper.floor_double((var2.maxZ + 2.0D) / 16.0D); + ArrayList var8 = new ArrayList(); + + for(int var9 = var4; var9 <= var5; ++var9) { + for(int var10 = var6; var10 <= var7; ++var10) { + if(this.chunkExists(var9, var10)) { + this.getChunkFromChunkCoords(var9, var10).getEntitiesOfTypeWithinAAAB(var1, var2, var8, var3); + } + } + } + + return var8; + } + + public Entity findNearestEntityWithinAABB(Class var1, AxisAlignedBB var2, Entity var3) { + List var4 = this.getEntitiesWithinAABB(var1, var2); + Entity var5 = null; + double var6 = Double.MAX_VALUE; + + for(int var8 = 0; var8 < var4.size(); ++var8) { + Entity var9 = (Entity)var4.get(var8); + if(var9 != var3) { + double var10 = var3.getDistanceSqToEntity(var9); + if(var10 <= var6) { + var5 = var9; + var6 = var10; + } + } + } + + return var5; + } + + public abstract Entity getEntityByID(int var1); + + public List getLoadedEntityList() { + return this.loadedEntityList; + } + + public void updateTileEntityChunkAndDoNothing(int var1, int var2, int var3, TileEntity var4) { + if(this.blockExists(var1, var2, var3)) { + this.getChunkFromBlockCoords(var1, var3).setChunkModified(); + } + + } + + public int countEntities(Class var1) { + int var2 = 0; + + for(int var3 = 0; var3 < this.loadedEntityList.size(); ++var3) { + Entity var4 = (Entity)this.loadedEntityList.get(var3); + if((!(var4 instanceof EntityLiving) || !((EntityLiving)var4).func_104002_bU()) && var1.isAssignableFrom(var4.getClass())) { + ++var2; + } + } + + return var2; + } + + public void addLoadedEntities(List var1) { + this.loadedEntityList.addAll(var1); + + for(int var2 = 0; var2 < var1.size(); ++var2) { + this.obtainEntitySkin((Entity)var1.get(var2)); + } + + } + + public void unloadEntities(List var1) { + this.unloadedEntityList.addAll(var1); + } + + public boolean canPlaceEntityOnSide(int var1, int var2, int var3, int var4, boolean var5, int var6, Entity var7, ItemStack var8) { + int var9 = this.getBlockId(var2, var3, var4); + Block var10 = Block.blocksList[var9]; + Block var11 = Block.blocksList[var1]; + AxisAlignedBB var12 = var11.getCollisionBoundingBoxFromPool(this, var2, var3, var4); + if(var5) { + var12 = null; + } + + if(var12 != null && !this.checkNoEntityCollision(var12, var7)) { + return false; + } else { + if(var10 != null && (var10 == Block.waterMoving || var10 == Block.waterStill || var10 == Block.lavaMoving || var10 == Block.lavaStill || var10 == Block.fire || var10.blockMaterial.isReplaceable())) { + var10 = null; + } + + return var10 != null && var10.blockMaterial == Material.circuits && var11 == Block.anvil ? true : var1 > 0 && var10 == null && var11.canPlaceBlockOnSide(this, var2, var3, var4, var6, var8); + } + } + + public PathEntity getPathEntityToEntity(Entity var1, Entity var2, float var3, boolean var4, boolean var5, boolean var6, boolean var7) { + this.theProfiler.startSection("pathfind"); + int var8 = MathHelper.floor_double(var1.posX); + int var9 = MathHelper.floor_double(var1.posY + 1.0D); + int var10 = MathHelper.floor_double(var1.posZ); + int var11 = (int)(var3 + 16.0F); + int var12 = var8 - var11; + int var13 = var9 - var11; + int var14 = var10 - var11; + int var15 = var8 + var11; + int var16 = var9 + var11; + int var17 = var10 + var11; + ChunkCache var18 = new ChunkCache(this, var12, var13, var14, var15, var16, var17, 0); + PathEntity var19 = (new PathFinder(var18, var4, var5, var6, var7)).createEntityPathTo(var1, var2, var3); + this.theProfiler.endSection(); + return var19; + } + + public PathEntity getEntityPathToXYZ(Entity var1, int var2, int var3, int var4, float var5, boolean var6, boolean var7, boolean var8, boolean var9) { + this.theProfiler.startSection("pathfind"); + int var10 = MathHelper.floor_double(var1.posX); + int var11 = MathHelper.floor_double(var1.posY); + int var12 = MathHelper.floor_double(var1.posZ); + int var13 = (int)(var5 + 8.0F); + int var14 = var10 - var13; + int var15 = var11 - var13; + int var16 = var12 - var13; + int var17 = var10 + var13; + int var18 = var11 + var13; + int var19 = var12 + var13; + ChunkCache var20 = new ChunkCache(this, var14, var15, var16, var17, var18, var19, 0); + PathEntity var21 = (new PathFinder(var20, var6, var7, var8, var9)).createEntityPathTo(var1, var2, var3, var4, var5); + this.theProfiler.endSection(); + return var21; + } + + public int isBlockProvidingPowerTo(int var1, int var2, int var3, int var4) { + int var5 = this.getBlockId(var1, var2, var3); + return var5 == 0 ? 0 : Block.blocksList[var5].isProvidingStrongPower(this, var1, var2, var3, var4); + } + + public int getBlockPowerInput(int var1, int var2, int var3) { + byte var4 = 0; + int var5 = Math.max(var4, this.isBlockProvidingPowerTo(var1, var2 - 1, var3, 0)); + if(var5 >= 15) { + return var5; + } else { + var5 = Math.max(var5, this.isBlockProvidingPowerTo(var1, var2 + 1, var3, 1)); + if(var5 >= 15) { + return var5; + } else { + var5 = Math.max(var5, this.isBlockProvidingPowerTo(var1, var2, var3 - 1, 2)); + if(var5 >= 15) { + return var5; + } else { + var5 = Math.max(var5, this.isBlockProvidingPowerTo(var1, var2, var3 + 1, 3)); + if(var5 >= 15) { + return var5; + } else { + var5 = Math.max(var5, this.isBlockProvidingPowerTo(var1 - 1, var2, var3, 4)); + if(var5 >= 15) { + return var5; + } else { + var5 = Math.max(var5, this.isBlockProvidingPowerTo(var1 + 1, var2, var3, 5)); + return var5 >= 15 ? var5 : var5; + } + } + } + } + } + } + + public boolean getIndirectPowerOutput(int var1, int var2, int var3, int var4) { + return this.getIndirectPowerLevelTo(var1, var2, var3, var4) > 0; + } + + public int getIndirectPowerLevelTo(int var1, int var2, int var3, int var4) { + if(this.isBlockNormalCube(var1, var2, var3)) { + return this.getBlockPowerInput(var1, var2, var3); + } else { + int var5 = this.getBlockId(var1, var2, var3); + return var5 == 0 ? 0 : Block.blocksList[var5].isProvidingWeakPower(this, var1, var2, var3, var4); + } + } + + public boolean isBlockIndirectlyGettingPowered(int var1, int var2, int var3) { + return this.getIndirectPowerLevelTo(var1, var2 - 1, var3, 0) > 0 ? true : (this.getIndirectPowerLevelTo(var1, var2 + 1, var3, 1) > 0 ? true : (this.getIndirectPowerLevelTo(var1, var2, var3 - 1, 2) > 0 ? true : (this.getIndirectPowerLevelTo(var1, var2, var3 + 1, 3) > 0 ? true : (this.getIndirectPowerLevelTo(var1 - 1, var2, var3, 4) > 0 ? true : this.getIndirectPowerLevelTo(var1 + 1, var2, var3, 5) > 0)))); + } + + public int getStrongestIndirectPower(int var1, int var2, int var3) { + int var4 = 0; + + for(int var5 = 0; var5 < 6; ++var5) { + int var6 = this.getIndirectPowerLevelTo(var1 + Facing.offsetsXForSide[var5], var2 + Facing.offsetsYForSide[var5], var3 + Facing.offsetsZForSide[var5], var5); + if(var6 >= 15) { + return 15; + } + + if(var6 > var4) { + var4 = var6; + } + } + + return var4; + } + + public EntityPlayer getClosestPlayerToEntity(Entity var1, double var2) { + return this.getClosestPlayer(var1.posX, var1.posY, var1.posZ, var2); + } + + public EntityPlayer getClosestPlayer(double var1, double var3, double var5, double var7) { + double var9 = -1.0D; + EntityPlayer var11 = null; + + for(int var12 = 0; var12 < this.playerEntities.size(); ++var12) { + EntityPlayer var13 = (EntityPlayer)this.playerEntities.get(var12); + double var14 = var13.getDistanceSq(var1, var3, var5); + if((var7 < 0.0D || var14 < var7 * var7) && (var9 == -1.0D || var14 < var9)) { + var9 = var14; + var11 = var13; + } + } + + return var11; + } + + public EntityPlayer getClosestVulnerablePlayerToEntity(Entity var1, double var2) { + return this.getClosestVulnerablePlayer(var1.posX, var1.posY, var1.posZ, var2); + } + + public EntityPlayer getClosestVulnerablePlayer(double var1, double var3, double var5, double var7) { + double var9 = -1.0D; + EntityPlayer var11 = null; + + for(int var12 = 0; var12 < this.playerEntities.size(); ++var12) { + EntityPlayer var13 = (EntityPlayer)this.playerEntities.get(var12); + if(!var13.capabilities.disableDamage && var13.isEntityAlive()) { + double var14 = var13.getDistanceSq(var1, var3, var5); + double var16 = var7; + if(var13.isSneaking()) { + var16 = var7 * (double)0.8F; + } + + if(var13.isInvisible()) { + float var18 = var13.func_82243_bO(); + if(var18 < 0.1F) { + var18 = 0.1F; + } + + var16 *= (double)(0.7F * var18); + } + + if((var7 < 0.0D || var14 < var16 * var16) && (var9 == -1.0D || var14 < var9)) { + var9 = var14; + var11 = var13; + } + } + } + + return var11; + } + + public EntityPlayer getPlayerEntityByName(String var1) { + for(int var2 = 0; var2 < this.playerEntities.size(); ++var2) { + if(var1.equals(((EntityPlayer)this.playerEntities.get(var2)).username)) { + return (EntityPlayer)this.playerEntities.get(var2); + } + } + + return null; + } + + public void sendQuittingDisconnectingPacket() { + } + + public void checkSessionLock() throws MinecraftException { + this.saveHandler.checkSessionLock(); + } + + public void func_82738_a(long var1) { + this.worldInfo.incrementTotalWorldTime(var1); + } + + public long getSeed() { + return this.worldInfo.getSeed(); + } + + public long getTotalWorldTime() { + return this.worldInfo.getWorldTotalTime(); + } + + public long getWorldTime() { + return this.worldInfo.getWorldTime(); + } + + public void setWorldTime(long var1) { + this.worldInfo.setWorldTime(var1); + } + + public ChunkCoordinates getSpawnPoint() { + return new ChunkCoordinates(this.worldInfo.getSpawnX(), this.worldInfo.getSpawnY(), this.worldInfo.getSpawnZ()); + } + + public void setSpawnLocation(int var1, int var2, int var3) { + this.worldInfo.setSpawnPosition(var1, var2, var3); + } + + public void joinEntityInSurroundings(Entity var1) { + int var2 = MathHelper.floor_double(var1.posX / 16.0D); + int var3 = MathHelper.floor_double(var1.posZ / 16.0D); + byte var4 = 2; + + for(int var5 = var2 - var4; var5 <= var2 + var4; ++var5) { + for(int var6 = var3 - var4; var6 <= var3 + var4; ++var6) { + this.getChunkFromChunkCoords(var5, var6); + } + } + + if(!this.loadedEntityList.contains(var1)) { + this.loadedEntityList.add(var1); + } + + } + + public boolean canMineBlock(EntityPlayer var1, int var2, int var3, int var4) { + return true; + } + + public void setEntityState(Entity var1, byte var2) { + } + + public IChunkProvider getChunkProvider() { + return this.chunkProvider; + } + + public void addBlockEvent(int var1, int var2, int var3, int var4, int var5, int var6) { + if(var4 > 0) { + Block.blocksList[var4].onBlockEventReceived(this, var1, var2, var3, var5, var6); + } + + } + + public ISaveHandler getSaveHandler() { + return this.saveHandler; + } + + public WorldInfo getWorldInfo() { + return this.worldInfo; + } + + public GameRules getGameRules() { + return this.worldInfo.getGameRulesInstance(); + } + + public void updateAllPlayersSleepingFlag() { + } + + public float getWeightedThunderStrength(float var1) { + return (this.prevThunderingStrength + (this.thunderingStrength - this.prevThunderingStrength) * var1) * this.getRainStrength(var1); + } + + public float getRainStrength(float var1) { + return this.prevRainingStrength + (this.rainingStrength - this.prevRainingStrength) * var1; + } + + public void setRainStrength(float var1) { + this.prevRainingStrength = var1; + this.rainingStrength = var1; + } + + public boolean isThundering() { + return (double)this.getWeightedThunderStrength(1.0F) > 0.9D; + } + + public boolean isRaining() { + return (double)this.getRainStrength(1.0F) > 0.2D; + } + + public boolean canLightningStrikeAt(int var1, int var2, int var3) { + if(!this.isRaining()) { + return false; + } else if(!this.canBlockSeeTheSky(var1, var2, var3)) { + return false; + } else if(this.getPrecipitationHeight(var1, var3) > var2) { + return false; + } else { + BiomeGenBase var4 = this.getBiomeGenForCoords(var1, var3); + return var4.getEnableSnow() ? false : var4.canSpawnLightningBolt(); + } + } + + public boolean isBlockHighHumidity(int var1, int var2, int var3) { + BiomeGenBase var4 = this.getBiomeGenForCoords(var1, var3); + return var4.isHighHumidity(); + } + + public void setItemData(String var1, WorldSavedData var2) { + this.mapStorage.setData(var1, var2); + } + + public WorldSavedData loadItemData(Class var1, String var2) { + return this.mapStorage.loadData(var1, var2); + } + + public int getUniqueDataId(String var1) { + return this.mapStorage.getUniqueDataId(var1); + } + + public void func_82739_e(int var1, int var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < this.worldAccesses.size(); ++var6) { + ((IWorldAccess)this.worldAccesses.get(var6)).broadcastSound(var1, var2, var3, var4, var5); + } + + } + + public void playAuxSFX(int var1, int var2, int var3, int var4, int var5) { + this.playAuxSFXAtEntity((EntityPlayer)null, var1, var2, var3, var4, var5); + } + + public void playAuxSFXAtEntity(EntityPlayer var1, int var2, int var3, int var4, int var5, int var6) { + try { + for(int var7 = 0; var7 < this.worldAccesses.size(); ++var7) { + ((IWorldAccess)this.worldAccesses.get(var7)).playAuxSFX(var1, var2, var3, var4, var5, var6); + } + + } catch (Throwable var10) { + CrashReport var8 = CrashReport.makeCrashReport(var10, "Playing level event"); + CrashReportCategory var9 = var8.makeCategory("Level event being played"); + var9.addCrashSection("Block coordinates", CrashReportCategory.getLocationInfo(var3, var4, var5)); + var9.addCrashSection("Event source", var1); + var9.addCrashSection("Event type", Integer.valueOf(var2)); + var9.addCrashSection("Event data", Integer.valueOf(var6)); + throw new ReportedException(var8); + } + } + + public int getHeight() { + return 256; + } + + public int getActualHeight() { + return this.provider.hasNoSky ? 128 : 256; + } + + public IUpdatePlayerListBox func_82735_a(EntityMinecart var1) { + return null; + } + + public Random setRandomSeed(int var1, int var2, int var3) { + long var4 = (long)var1 * 341873128712L + (long)var2 * 132897987541L + this.getWorldInfo().getSeed() + (long)var3; + this.rand.setSeed(var4); + return this.rand; + } + + public ChunkPosition findClosestStructure(String var1, int var2, int var3, int var4) { + return this.getChunkProvider().findClosestStructure(this, var1, var2, var3, var4); + } + + public boolean extendedLevelsInChunkCache() { + return false; + } + + public double getHorizon() { + return this.worldInfo.getTerrainType() == WorldType.FLAT ? 0.0D : 63.0D; + } + + public CrashReportCategory addWorldInfoToCrashReport(CrashReport var1) { + CrashReportCategory var2 = var1.makeCategoryDepth("Affected level", 1); + var2.addCrashSection("Level name", this.worldInfo == null ? "????" : this.worldInfo.getWorldName()); + var2.addCrashSectionCallable("All players", new CallableLvl2(this)); + var2.addCrashSectionCallable("Chunk stats", new CallableLvl3(this)); + + try { + this.worldInfo.addToCrashReport(var2); + } catch (Throwable var4) { + var2.addCrashSectionThrowable("Level Data Unobtainable", var4); + } + + return var2; + } + + public void destroyBlockInWorldPartially(int var1, int var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < this.worldAccesses.size(); ++var6) { + IWorldAccess var7 = (IWorldAccess)this.worldAccesses.get(var6); + var7.destroyBlockPartially(var1, var2, var3, var4, var5); + } + + } + + public Vec3Pool getWorldVec3Pool() { + return this.vecPool; + } + + public Calendar getCurrentDate() { + if(this.getTotalWorldTime() % 600L == 0L) { + this.theCalendar.setTimeInMillis(System.currentTimeMillis()); + } + + return this.theCalendar; + } + + public void func_92088_a(double var1, double var3, double var5, double var7, double var9, double var11, NBTTagCompound var13) { + } + + public Scoreboard getScoreboard() { + return this.worldScoreboard; + } + + public void func_96440_m(int var1, int var2, int var3, int var4) { + for(int var5 = 0; var5 < 4; ++var5) { + int var6 = var1 + Direction.offsetX[var5]; + int var7 = var3 + Direction.offsetZ[var5]; + int var8 = this.getBlockId(var6, var2, var7); + if(var8 != 0) { + Block var9 = Block.blocksList[var8]; + if(Block.redstoneComparatorIdle.func_94487_f(var8)) { + var9.onNeighborBlockChange(this, var6, var2, var7, var4); + } else if(Block.isNormalCube(var8)) { + var6 += Direction.offsetX[var5]; + var7 += Direction.offsetZ[var5]; + var8 = this.getBlockId(var6, var2, var7); + var9 = Block.blocksList[var8]; + if(Block.redstoneComparatorIdle.func_94487_f(var8)) { + var9.onNeighborBlockChange(this, var6, var2, var7, var4); + } + } + } + } + + } + + public ILogAgent getWorldLogAgent() { + return this.worldLogAgent; + } +} diff --git a/src/net/minecraft/src/WorldChunkManager.java b/src/net/minecraft/src/WorldChunkManager.java new file mode 100644 index 0000000..6e39962 --- /dev/null +++ b/src/net/minecraft/src/WorldChunkManager.java @@ -0,0 +1,176 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class WorldChunkManager { + private GenLayer genBiomes; + private GenLayer biomeIndexLayer; + private BiomeCache biomeCache; + private List biomesToSpawnIn; + + protected WorldChunkManager() { + this.biomeCache = new BiomeCache(this); + this.biomesToSpawnIn = new ArrayList(); + this.biomesToSpawnIn.add(BiomeGenBase.forest); + this.biomesToSpawnIn.add(BiomeGenBase.plains); + this.biomesToSpawnIn.add(BiomeGenBase.taiga); + this.biomesToSpawnIn.add(BiomeGenBase.taigaHills); + this.biomesToSpawnIn.add(BiomeGenBase.forestHills); + this.biomesToSpawnIn.add(BiomeGenBase.jungle); + this.biomesToSpawnIn.add(BiomeGenBase.jungleHills); + } + + public WorldChunkManager(long var1, WorldType var3) { + this(); + GenLayer[] var4 = GenLayer.initializeAllBiomeGenerators(var1, var3); + this.genBiomes = var4[0]; + this.biomeIndexLayer = var4[1]; + } + + public WorldChunkManager(World var1) { + this(var1.getSeed(), var1.getWorldInfo().getTerrainType()); + } + + public List getBiomesToSpawnIn() { + return this.biomesToSpawnIn; + } + + public BiomeGenBase getBiomeGenAt(int var1, int var2) { + return this.biomeCache.getBiomeGenAt(var1, var2); + } + + public float[] getRainfall(float[] var1, int var2, int var3, int var4, int var5) { + IntCache.resetIntCache(); + if(var1 == null || var1.length < var4 * var5) { + var1 = new float[var4 * var5]; + } + + int[] var6 = this.biomeIndexLayer.getInts(var2, var3, var4, var5); + + for(int var7 = 0; var7 < var4 * var5; ++var7) { + float var8 = (float)BiomeGenBase.biomeList[var6[var7]].getIntRainfall() / 65536.0F; + if(var8 > 1.0F) { + var8 = 1.0F; + } + + var1[var7] = var8; + } + + return var1; + } + + public float getTemperatureAtHeight(float var1, int var2) { + return var1; + } + + public float[] getTemperatures(float[] var1, int var2, int var3, int var4, int var5) { + IntCache.resetIntCache(); + if(var1 == null || var1.length < var4 * var5) { + var1 = new float[var4 * var5]; + } + + int[] var6 = this.biomeIndexLayer.getInts(var2, var3, var4, var5); + + for(int var7 = 0; var7 < var4 * var5; ++var7) { + float var8 = (float)BiomeGenBase.biomeList[var6[var7]].getIntTemperature() / 65536.0F; + if(var8 > 1.0F) { + var8 = 1.0F; + } + + var1[var7] = var8; + } + + return var1; + } + + public BiomeGenBase[] getBiomesForGeneration(BiomeGenBase[] var1, int var2, int var3, int var4, int var5) { + IntCache.resetIntCache(); + if(var1 == null || var1.length < var4 * var5) { + var1 = new BiomeGenBase[var4 * var5]; + } + + int[] var6 = this.genBiomes.getInts(var2, var3, var4, var5); + + for(int var7 = 0; var7 < var4 * var5; ++var7) { + var1[var7] = BiomeGenBase.biomeList[var6[var7]]; + } + + return var1; + } + + public BiomeGenBase[] loadBlockGeneratorData(BiomeGenBase[] var1, int var2, int var3, int var4, int var5) { + return this.getBiomeGenAt(var1, var2, var3, var4, var5, true); + } + + public BiomeGenBase[] getBiomeGenAt(BiomeGenBase[] var1, int var2, int var3, int var4, int var5, boolean var6) { + IntCache.resetIntCache(); + if(var1 == null || var1.length < var4 * var5) { + var1 = new BiomeGenBase[var4 * var5]; + } + + if(var6 && var4 == 16 && var5 == 16 && (var2 & 15) == 0 && (var3 & 15) == 0) { + BiomeGenBase[] var9 = this.biomeCache.getCachedBiomes(var2, var3); + System.arraycopy(var9, 0, var1, 0, var4 * var5); + return var1; + } else { + int[] var7 = this.biomeIndexLayer.getInts(var2, var3, var4, var5); + + for(int var8 = 0; var8 < var4 * var5; ++var8) { + var1[var8] = BiomeGenBase.biomeList[var7[var8]]; + } + + return var1; + } + } + + public boolean areBiomesViable(int var1, int var2, int var3, List var4) { + IntCache.resetIntCache(); + int var5 = var1 - var3 >> 2; + int var6 = var2 - var3 >> 2; + int var7 = var1 + var3 >> 2; + int var8 = var2 + var3 >> 2; + int var9 = var7 - var5 + 1; + int var10 = var8 - var6 + 1; + int[] var11 = this.genBiomes.getInts(var5, var6, var9, var10); + + for(int var12 = 0; var12 < var9 * var10; ++var12) { + BiomeGenBase var13 = BiomeGenBase.biomeList[var11[var12]]; + if(!var4.contains(var13)) { + return false; + } + } + + return true; + } + + public ChunkPosition findBiomePosition(int var1, int var2, int var3, List var4, Random var5) { + IntCache.resetIntCache(); + int var6 = var1 - var3 >> 2; + int var7 = var2 - var3 >> 2; + int var8 = var1 + var3 >> 2; + int var9 = var2 + var3 >> 2; + int var10 = var8 - var6 + 1; + int var11 = var9 - var7 + 1; + int[] var12 = this.genBiomes.getInts(var6, var7, var10, var11); + ChunkPosition var13 = null; + int var14 = 0; + + for(int var15 = 0; var15 < var10 * var11; ++var15) { + int var16 = var6 + var15 % var10 << 2; + int var17 = var7 + var15 / var10 << 2; + BiomeGenBase var18 = BiomeGenBase.biomeList[var12[var15]]; + if(var4.contains(var18) && (var13 == null || var5.nextInt(var14 + 1) == 0)) { + var13 = new ChunkPosition(var16, 0, var17); + ++var14; + } + } + + return var13; + } + + public void cleanupCache() { + this.biomeCache.cleanupCache(); + } +} diff --git a/src/net/minecraft/src/WorldChunkManagerHell.java b/src/net/minecraft/src/WorldChunkManagerHell.java new file mode 100644 index 0000000..e8e853c --- /dev/null +++ b/src/net/minecraft/src/WorldChunkManagerHell.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +public class WorldChunkManagerHell extends WorldChunkManager { + private BiomeGenBase biomeGenerator; + private float hellTemperature; + private float rainfall; + + public WorldChunkManagerHell(BiomeGenBase var1, float var2, float var3) { + this.biomeGenerator = var1; + this.hellTemperature = var2; + this.rainfall = var3; + } + + public BiomeGenBase getBiomeGenAt(int var1, int var2) { + return this.biomeGenerator; + } + + public BiomeGenBase[] getBiomesForGeneration(BiomeGenBase[] var1, int var2, int var3, int var4, int var5) { + if(var1 == null || var1.length < var4 * var5) { + var1 = new BiomeGenBase[var4 * var5]; + } + + Arrays.fill(var1, 0, var4 * var5, this.biomeGenerator); + return var1; + } + + public float[] getTemperatures(float[] var1, int var2, int var3, int var4, int var5) { + if(var1 == null || var1.length < var4 * var5) { + var1 = new float[var4 * var5]; + } + + Arrays.fill(var1, 0, var4 * var5, this.hellTemperature); + return var1; + } + + public float[] getRainfall(float[] var1, int var2, int var3, int var4, int var5) { + if(var1 == null || var1.length < var4 * var5) { + var1 = new float[var4 * var5]; + } + + Arrays.fill(var1, 0, var4 * var5, this.rainfall); + return var1; + } + + public BiomeGenBase[] loadBlockGeneratorData(BiomeGenBase[] var1, int var2, int var3, int var4, int var5) { + if(var1 == null || var1.length < var4 * var5) { + var1 = new BiomeGenBase[var4 * var5]; + } + + Arrays.fill(var1, 0, var4 * var5, this.biomeGenerator); + return var1; + } + + public BiomeGenBase[] getBiomeGenAt(BiomeGenBase[] var1, int var2, int var3, int var4, int var5, boolean var6) { + return this.loadBlockGeneratorData(var1, var2, var3, var4, var5); + } + + public ChunkPosition findBiomePosition(int var1, int var2, int var3, List var4, Random var5) { + return var4.contains(this.biomeGenerator) ? new ChunkPosition(var1 - var3 + var5.nextInt(var3 * 2 + 1), 0, var2 - var3 + var5.nextInt(var3 * 2 + 1)) : null; + } + + public boolean areBiomesViable(int var1, int var2, int var3, List var4) { + return var4.contains(this.biomeGenerator); + } +} diff --git a/src/net/minecraft/src/WorldClient.java b/src/net/minecraft/src/WorldClient.java new file mode 100644 index 0000000..2b63dbb --- /dev/null +++ b/src/net/minecraft/src/WorldClient.java @@ -0,0 +1,316 @@ +package net.minecraft.src; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.Random; +import java.util.Set; +import net.minecraft.client.Minecraft; + +public class WorldClient extends World { + private NetClientHandler sendQueue; + private ChunkProviderClient clientChunkProvider; + private IntHashMap entityHashSet = new IntHashMap(); + private Set entityList = new HashSet(); + private Set entitySpawnQueue = new HashSet(); + private final Minecraft mc = Minecraft.getMinecraft(); + private final Set previousActiveChunkSet = new HashSet(); + + public WorldClient(NetClientHandler var1, WorldSettings var2, int var3, int var4, Profiler var5, ILogAgent var6) { + super(new SaveHandlerMP(), "MpServer", (WorldProvider)WorldProvider.getProviderForDimension(var3), (WorldSettings)var2, var5, var6); + this.sendQueue = var1; + this.difficultySetting = var4; + this.setSpawnLocation(8, 64, 8); + this.mapStorage = var1.mapStorage; + } + + public void tick() { + super.tick(); + this.func_82738_a(this.getTotalWorldTime() + 1L); + this.setWorldTime(this.getWorldTime() + 1L); + this.theProfiler.startSection("reEntryProcessing"); + + for(int var1 = 0; var1 < 10 && !this.entitySpawnQueue.isEmpty(); ++var1) { + Entity var2 = (Entity)this.entitySpawnQueue.iterator().next(); + this.entitySpawnQueue.remove(var2); + if(!this.loadedEntityList.contains(var2)) { + this.spawnEntityInWorld(var2); + } + } + + this.theProfiler.endStartSection("connection"); + this.sendQueue.processReadPackets(); + this.theProfiler.endStartSection("chunkCache"); + this.clientChunkProvider.unloadQueuedChunks(); + this.theProfiler.endStartSection("tiles"); + this.tickBlocksAndAmbiance(); + this.theProfiler.endSection(); + } + + public void invalidateBlockReceiveRegion(int var1, int var2, int var3, int var4, int var5, int var6) { + } + + protected IChunkProvider createChunkProvider() { + this.clientChunkProvider = new ChunkProviderClient(this); + return this.clientChunkProvider; + } + + protected void tickBlocksAndAmbiance() { + super.tickBlocksAndAmbiance(); + this.previousActiveChunkSet.retainAll(this.activeChunkSet); + if(this.previousActiveChunkSet.size() == this.activeChunkSet.size()) { + this.previousActiveChunkSet.clear(); + } + + int var1 = 0; + Iterator var2 = this.activeChunkSet.iterator(); + + while(var2.hasNext()) { + ChunkCoordIntPair var3 = (ChunkCoordIntPair)var2.next(); + if(!this.previousActiveChunkSet.contains(var3)) { + int var4 = var3.chunkXPos * 16; + int var5 = var3.chunkZPos * 16; + this.theProfiler.startSection("getChunk"); + Chunk var6 = this.getChunkFromChunkCoords(var3.chunkXPos, var3.chunkZPos); + this.moodSoundAndLightCheck(var4, var5, var6); + this.theProfiler.endSection(); + this.previousActiveChunkSet.add(var3); + ++var1; + if(var1 >= 10) { + return; + } + } + } + + } + + public void doPreChunk(int var1, int var2, boolean var3) { + if(var3) { + this.clientChunkProvider.loadChunk(var1, var2); + } else { + this.clientChunkProvider.unloadChunk(var1, var2); + } + + if(!var3) { + this.markBlockRangeForRenderUpdate(var1 * 16, 0, var2 * 16, var1 * 16 + 15, 256, var2 * 16 + 15); + } + + } + + public boolean spawnEntityInWorld(Entity var1) { + boolean var2 = super.spawnEntityInWorld(var1); + this.entityList.add(var1); + if(!var2) { + this.entitySpawnQueue.add(var1); + } + + return var2; + } + + public void removeEntity(Entity var1) { + super.removeEntity(var1); + this.entityList.remove(var1); + } + + protected void obtainEntitySkin(Entity var1) { + super.obtainEntitySkin(var1); + if(this.entitySpawnQueue.contains(var1)) { + this.entitySpawnQueue.remove(var1); + } + + } + + protected void releaseEntitySkin(Entity var1) { + super.releaseEntitySkin(var1); + if(this.entityList.contains(var1)) { + if(var1.isEntityAlive()) { + this.entitySpawnQueue.add(var1); + } else { + this.entityList.remove(var1); + } + } + + } + + public void addEntityToWorld(int var1, Entity var2) { + Entity var3 = this.getEntityByID(var1); + if(var3 != null) { + this.removeEntity(var3); + } + + this.entityList.add(var2); + var2.entityId = var1; + if(!this.spawnEntityInWorld(var2)) { + this.entitySpawnQueue.add(var2); + } + + this.entityHashSet.addKey(var1, var2); + } + + public Entity getEntityByID(int var1) { + return (Entity)(var1 == this.mc.thePlayer.entityId ? this.mc.thePlayer : (Entity)this.entityHashSet.lookup(var1)); + } + + public Entity removeEntityFromWorld(int var1) { + Entity var2 = (Entity)this.entityHashSet.removeObject(var1); + if(var2 != null) { + this.entityList.remove(var2); + this.removeEntity(var2); + } + + return var2; + } + + public boolean setBlockAndMetadataAndInvalidate(int var1, int var2, int var3, int var4, int var5) { + this.invalidateBlockReceiveRegion(var1, var2, var3, var1, var2, var3); + return super.setBlock(var1, var2, var3, var4, var5, 3); + } + + public void sendQuittingDisconnectingPacket() { + this.sendQueue.quitWithPacket(new Packet255KickDisconnect("Quitting")); + } + + public IUpdatePlayerListBox func_82735_a(EntityMinecart var1) { + return new SoundUpdaterMinecart(this.mc.sndManager, var1, this.mc.thePlayer); + } + + protected void updateWeather() { + if(!this.provider.hasNoSky) { + this.prevRainingStrength = this.rainingStrength; + if(this.worldInfo.isRaining()) { + this.rainingStrength = (float)((double)this.rainingStrength + 0.01D); + } else { + this.rainingStrength = (float)((double)this.rainingStrength - 0.01D); + } + + if(this.rainingStrength < 0.0F) { + this.rainingStrength = 0.0F; + } + + if(this.rainingStrength > 1.0F) { + this.rainingStrength = 1.0F; + } + + this.prevThunderingStrength = this.thunderingStrength; + if(this.worldInfo.isThundering()) { + this.thunderingStrength = (float)((double)this.thunderingStrength + 0.01D); + } else { + this.thunderingStrength = (float)((double)this.thunderingStrength - 0.01D); + } + + if(this.thunderingStrength < 0.0F) { + this.thunderingStrength = 0.0F; + } + + if(this.thunderingStrength > 1.0F) { + this.thunderingStrength = 1.0F; + } + + } + } + + public void doVoidFogParticles(int var1, int var2, int var3) { + byte var4 = 16; + Random var5 = new Random(); + + for(int var6 = 0; var6 < 1000; ++var6) { + int var7 = var1 + this.rand.nextInt(var4) - this.rand.nextInt(var4); + int var8 = var2 + this.rand.nextInt(var4) - this.rand.nextInt(var4); + int var9 = var3 + this.rand.nextInt(var4) - this.rand.nextInt(var4); + int var10 = this.getBlockId(var7, var8, var9); + if(var10 == 0 && this.rand.nextInt(8) > var8 && this.provider.getWorldHasVoidParticles()) { + this.spawnParticle("depthsuspend", (double)((float)var7 + this.rand.nextFloat()), (double)((float)var8 + this.rand.nextFloat()), (double)((float)var9 + this.rand.nextFloat()), 0.0D, 0.0D, 0.0D); + } else if(var10 > 0) { + Block.blocksList[var10].randomDisplayTick(this, var7, var8, var9, var5); + } + } + + } + + public void removeAllEntities() { + this.loadedEntityList.removeAll(this.unloadedEntityList); + + int var1; + Entity var2; + int var3; + int var4; + for(var1 = 0; var1 < this.unloadedEntityList.size(); ++var1) { + var2 = (Entity)this.unloadedEntityList.get(var1); + var3 = var2.chunkCoordX; + var4 = var2.chunkCoordZ; + if(var2.addedToChunk && this.chunkExists(var3, var4)) { + this.getChunkFromChunkCoords(var3, var4).removeEntity(var2); + } + } + + for(var1 = 0; var1 < this.unloadedEntityList.size(); ++var1) { + this.releaseEntitySkin((Entity)this.unloadedEntityList.get(var1)); + } + + this.unloadedEntityList.clear(); + + for(var1 = 0; var1 < this.loadedEntityList.size(); ++var1) { + var2 = (Entity)this.loadedEntityList.get(var1); + if(var2.ridingEntity != null) { + if(!var2.ridingEntity.isDead && var2.ridingEntity.riddenByEntity == var2) { + continue; + } + + var2.ridingEntity.riddenByEntity = null; + var2.ridingEntity = null; + } + + if(var2.isDead) { + var3 = var2.chunkCoordX; + var4 = var2.chunkCoordZ; + if(var2.addedToChunk && this.chunkExists(var3, var4)) { + this.getChunkFromChunkCoords(var3, var4).removeEntity(var2); + } + + this.loadedEntityList.remove(var1--); + this.releaseEntitySkin(var2); + } + } + + } + + public CrashReportCategory addWorldInfoToCrashReport(CrashReport var1) { + CrashReportCategory var2 = super.addWorldInfoToCrashReport(var1); + var2.addCrashSectionCallable("Forced entities", new CallableMPL1(this)); + var2.addCrashSectionCallable("Retry entities", new CallableMPL2(this)); + return var2; + } + + public void playSound(double var1, double var3, double var5, String var7, float var8, float var9, boolean var10) { + float var11 = 16.0F; + if(var8 > 1.0F) { + var11 *= var8; + } + + double var12 = this.mc.renderViewEntity.getDistanceSq(var1, var3, var5); + if(var12 < (double)(var11 * var11)) { + if(var10 && var12 > 100.0D) { + double var14 = Math.sqrt(var12) / 40.0D; + this.mc.sndManager.func_92070_a(var7, (float)var1, (float)var3, (float)var5, var8, var9, (int)Math.round(var14 * 20.0D)); + } else { + this.mc.sndManager.playSound(var7, (float)var1, (float)var3, (float)var5, var8, var9); + } + } + + } + + public void func_92088_a(double var1, double var3, double var5, double var7, double var9, double var11, NBTTagCompound var13) { + this.mc.effectRenderer.addEffect(new EntityFireworkStarterFX(this, var1, var3, var5, var7, var9, var11, this.mc.effectRenderer, var13)); + } + + public void func_96443_a(Scoreboard var1) { + this.worldScoreboard = var1; + } + + static Set getEntityList(WorldClient var0) { + return var0.entityList; + } + + static Set getEntitySpawnQueue(WorldClient var0) { + return var0.entitySpawnQueue; + } +} diff --git a/src/net/minecraft/src/WorldGenBigMushroom.java b/src/net/minecraft/src/WorldGenBigMushroom.java new file mode 100644 index 0000000..8616b1f --- /dev/null +++ b/src/net/minecraft/src/WorldGenBigMushroom.java @@ -0,0 +1,154 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenBigMushroom extends WorldGenerator { + private int mushroomType = -1; + + public WorldGenBigMushroom(int var1) { + super(true); + this.mushroomType = var1; + } + + public WorldGenBigMushroom() { + super(false); + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + int var6 = var2.nextInt(2); + if(this.mushroomType >= 0) { + var6 = this.mushroomType; + } + + int var7 = var2.nextInt(3) + 4; + boolean var8 = true; + if(var4 >= 1 && var4 + var7 + 1 < 256) { + int var9; + int var11; + int var12; + int var13; + for(var9 = var4; var9 <= var4 + 1 + var7; ++var9) { + byte var10 = 3; + if(var9 <= var4 + 3) { + var10 = 0; + } + + for(var11 = var3 - var10; var11 <= var3 + var10 && var8; ++var11) { + for(var12 = var5 - var10; var12 <= var5 + var10 && var8; ++var12) { + if(var9 >= 0 && var9 < 256) { + var13 = var1.getBlockId(var11, var9, var12); + if(var13 != 0 && var13 != Block.leaves.blockID) { + var8 = false; + } + } else { + var8 = false; + } + } + } + } + + if(!var8) { + return false; + } else { + var9 = var1.getBlockId(var3, var4 - 1, var5); + if(var9 != Block.dirt.blockID && var9 != Block.grass.blockID && var9 != Block.mycelium.blockID) { + return false; + } else { + int var16 = var4 + var7; + if(var6 == 1) { + var16 = var4 + var7 - 3; + } + + for(var11 = var16; var11 <= var4 + var7; ++var11) { + var12 = 1; + if(var11 < var4 + var7) { + ++var12; + } + + if(var6 == 0) { + var12 = 3; + } + + for(var13 = var3 - var12; var13 <= var3 + var12; ++var13) { + for(int var14 = var5 - var12; var14 <= var5 + var12; ++var14) { + int var15 = 5; + if(var13 == var3 - var12) { + --var15; + } + + if(var13 == var3 + var12) { + ++var15; + } + + if(var14 == var5 - var12) { + var15 -= 3; + } + + if(var14 == var5 + var12) { + var15 += 3; + } + + if(var6 == 0 || var11 < var4 + var7) { + if((var13 == var3 - var12 || var13 == var3 + var12) && (var14 == var5 - var12 || var14 == var5 + var12)) { + continue; + } + + if(var13 == var3 - (var12 - 1) && var14 == var5 - var12) { + var15 = 1; + } + + if(var13 == var3 - var12 && var14 == var5 - (var12 - 1)) { + var15 = 1; + } + + if(var13 == var3 + (var12 - 1) && var14 == var5 - var12) { + var15 = 3; + } + + if(var13 == var3 + var12 && var14 == var5 - (var12 - 1)) { + var15 = 3; + } + + if(var13 == var3 - (var12 - 1) && var14 == var5 + var12) { + var15 = 7; + } + + if(var13 == var3 - var12 && var14 == var5 + (var12 - 1)) { + var15 = 7; + } + + if(var13 == var3 + (var12 - 1) && var14 == var5 + var12) { + var15 = 9; + } + + if(var13 == var3 + var12 && var14 == var5 + (var12 - 1)) { + var15 = 9; + } + } + + if(var15 == 5 && var11 < var4 + var7) { + var15 = 0; + } + + if((var15 != 0 || var4 >= var4 + var7 - 1) && !Block.opaqueCubeLookup[var1.getBlockId(var13, var11, var14)]) { + this.setBlockAndMetadata(var1, var13, var11, var14, Block.mushroomCapBrown.blockID + var6, var15); + } + } + } + } + + for(var11 = 0; var11 < var7; ++var11) { + var12 = var1.getBlockId(var3, var4 + var11, var5); + if(!Block.opaqueCubeLookup[var12]) { + this.setBlockAndMetadata(var1, var3, var4 + var11, var5, Block.mushroomCapBrown.blockID + var6, 10); + } + } + + return true; + } + } + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/WorldGenBigTree.java b/src/net/minecraft/src/WorldGenBigTree.java new file mode 100644 index 0000000..412730a --- /dev/null +++ b/src/net/minecraft/src/WorldGenBigTree.java @@ -0,0 +1,364 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenBigTree extends WorldGenerator { + static final byte[] otherCoordPairs = new byte[]{(byte)2, (byte)0, (byte)0, (byte)1, (byte)2, (byte)1}; + Random rand = new Random(); + World worldObj; + int[] basePos = new int[]{0, 0, 0}; + int heightLimit = 0; + int height; + double heightAttenuation = 0.618D; + double branchDensity = 1.0D; + double branchSlope = 0.381D; + double scaleWidth = 1.0D; + double leafDensity = 1.0D; + int trunkSize = 1; + int heightLimitLimit = 12; + int leafDistanceLimit = 4; + int[][] leafNodes; + + public WorldGenBigTree(boolean var1) { + super(var1); + } + + void generateLeafNodeList() { + this.height = (int)((double)this.heightLimit * this.heightAttenuation); + if(this.height >= this.heightLimit) { + this.height = this.heightLimit - 1; + } + + int var1 = (int)(1.382D + Math.pow(this.leafDensity * (double)this.heightLimit / 13.0D, 2.0D)); + if(var1 < 1) { + var1 = 1; + } + + int[][] var2 = new int[var1 * this.heightLimit][4]; + int var3 = this.basePos[1] + this.heightLimit - this.leafDistanceLimit; + int var4 = 1; + int var5 = this.basePos[1] + this.height; + int var6 = var3 - this.basePos[1]; + var2[0][0] = this.basePos[0]; + var2[0][1] = var3; + var2[0][2] = this.basePos[2]; + var2[0][3] = var5; + --var3; + + while(true) { + while(var6 >= 0) { + int var7 = 0; + float var8 = this.layerSize(var6); + if(var8 < 0.0F) { + --var3; + --var6; + } else { + for(double var9 = 0.5D; var7 < var1; ++var7) { + double var11 = this.scaleWidth * (double)var8 * ((double)this.rand.nextFloat() + 0.328D); + double var13 = (double)this.rand.nextFloat() * 2.0D * 3.14159D; + int var15 = MathHelper.floor_double(var11 * Math.sin(var13) + (double)this.basePos[0] + var9); + int var16 = MathHelper.floor_double(var11 * Math.cos(var13) + (double)this.basePos[2] + var9); + int[] var17 = new int[]{var15, var3, var16}; + int[] var18 = new int[]{var15, var3 + this.leafDistanceLimit, var16}; + if(this.checkBlockLine(var17, var18) == -1) { + int[] var19 = new int[]{this.basePos[0], this.basePos[1], this.basePos[2]}; + double var20 = Math.sqrt(Math.pow((double)Math.abs(this.basePos[0] - var17[0]), 2.0D) + Math.pow((double)Math.abs(this.basePos[2] - var17[2]), 2.0D)); + double var22 = var20 * this.branchSlope; + if((double)var17[1] - var22 > (double)var5) { + var19[1] = var5; + } else { + var19[1] = (int)((double)var17[1] - var22); + } + + if(this.checkBlockLine(var19, var17) == -1) { + var2[var4][0] = var15; + var2[var4][1] = var3; + var2[var4][2] = var16; + var2[var4][3] = var19[1]; + ++var4; + } + } + } + + --var3; + --var6; + } + } + + this.leafNodes = new int[var4][4]; + System.arraycopy(var2, 0, this.leafNodes, 0, var4); + return; + } + } + + void genTreeLayer(int var1, int var2, int var3, float var4, byte var5, int var6) { + int var7 = (int)((double)var4 + 0.618D); + byte var8 = otherCoordPairs[var5]; + byte var9 = otherCoordPairs[var5 + 3]; + int[] var10 = new int[]{var1, var2, var3}; + int[] var11 = new int[]{0, 0, 0}; + int var12 = -var7; + int var13 = -var7; + + label32: + for(var11[var5] = var10[var5]; var12 <= var7; ++var12) { + var11[var8] = var10[var8] + var12; + var13 = -var7; + + while(true) { + while(true) { + if(var13 > var7) { + continue label32; + } + + double var15 = Math.pow((double)Math.abs(var12) + 0.5D, 2.0D) + Math.pow((double)Math.abs(var13) + 0.5D, 2.0D); + if(var15 > (double)(var4 * var4)) { + ++var13; + } else { + var11[var9] = var10[var9] + var13; + int var14 = this.worldObj.getBlockId(var11[0], var11[1], var11[2]); + if(var14 != 0 && var14 != Block.leaves.blockID) { + ++var13; + } else { + this.setBlockAndMetadata(this.worldObj, var11[0], var11[1], var11[2], var6, 0); + ++var13; + } + } + } + } + } + + } + + float layerSize(int var1) { + if((double)var1 < (double)((float)this.heightLimit) * 0.3D) { + return -1.618F; + } else { + float var2 = (float)this.heightLimit / 2.0F; + float var3 = (float)this.heightLimit / 2.0F - (float)var1; + float var4; + if(var3 == 0.0F) { + var4 = var2; + } else if(Math.abs(var3) >= var2) { + var4 = 0.0F; + } else { + var4 = (float)Math.sqrt(Math.pow((double)Math.abs(var2), 2.0D) - Math.pow((double)Math.abs(var3), 2.0D)); + } + + var4 *= 0.5F; + return var4; + } + } + + float leafSize(int var1) { + return var1 >= 0 && var1 < this.leafDistanceLimit ? (var1 != 0 && var1 != this.leafDistanceLimit - 1 ? 3.0F : 2.0F) : -1.0F; + } + + void generateLeafNode(int var1, int var2, int var3) { + int var4 = var2; + + for(int var5 = var2 + this.leafDistanceLimit; var4 < var5; ++var4) { + float var6 = this.leafSize(var4 - var2); + this.genTreeLayer(var1, var4, var3, var6, (byte)1, Block.leaves.blockID); + } + + } + + void placeBlockLine(int[] var1, int[] var2, int var3) { + int[] var4 = new int[]{0, 0, 0}; + byte var5 = 0; + + byte var6; + for(var6 = 0; var5 < 3; ++var5) { + var4[var5] = var2[var5] - var1[var5]; + if(Math.abs(var4[var5]) > Math.abs(var4[var6])) { + var6 = var5; + } + } + + if(var4[var6] != 0) { + byte var7 = otherCoordPairs[var6]; + byte var8 = otherCoordPairs[var6 + 3]; + byte var9; + if(var4[var6] > 0) { + var9 = 1; + } else { + var9 = -1; + } + + double var10 = (double)var4[var7] / (double)var4[var6]; + double var12 = (double)var4[var8] / (double)var4[var6]; + int[] var14 = new int[]{0, 0, 0}; + int var15 = 0; + + for(int var16 = var4[var6] + var9; var15 != var16; var15 += var9) { + var14[var6] = MathHelper.floor_double((double)(var1[var6] + var15) + 0.5D); + var14[var7] = MathHelper.floor_double((double)var1[var7] + (double)var15 * var10 + 0.5D); + var14[var8] = MathHelper.floor_double((double)var1[var8] + (double)var15 * var12 + 0.5D); + byte var17 = 0; + int var18 = Math.abs(var14[0] - var1[0]); + int var19 = Math.abs(var14[2] - var1[2]); + int var20 = Math.max(var18, var19); + if(var20 > 0) { + if(var18 == var20) { + var17 = 4; + } else if(var19 == var20) { + var17 = 8; + } + } + + this.setBlockAndMetadata(this.worldObj, var14[0], var14[1], var14[2], var3, var17); + } + + } + } + + void generateLeaves() { + int var1 = 0; + + for(int var2 = this.leafNodes.length; var1 < var2; ++var1) { + int var3 = this.leafNodes[var1][0]; + int var4 = this.leafNodes[var1][1]; + int var5 = this.leafNodes[var1][2]; + this.generateLeafNode(var3, var4, var5); + } + + } + + boolean leafNodeNeedsBase(int var1) { + return (double)var1 >= (double)this.heightLimit * 0.2D; + } + + void generateTrunk() { + int var1 = this.basePos[0]; + int var2 = this.basePos[1]; + int var3 = this.basePos[1] + this.height; + int var4 = this.basePos[2]; + int[] var5 = new int[]{var1, var2, var4}; + int[] var6 = new int[]{var1, var3, var4}; + this.placeBlockLine(var5, var6, Block.wood.blockID); + if(this.trunkSize == 2) { + ++var5[0]; + ++var6[0]; + this.placeBlockLine(var5, var6, Block.wood.blockID); + ++var5[2]; + ++var6[2]; + this.placeBlockLine(var5, var6, Block.wood.blockID); + var5[0] += -1; + var6[0] += -1; + this.placeBlockLine(var5, var6, Block.wood.blockID); + } + + } + + void generateLeafNodeBases() { + int var1 = 0; + int var2 = this.leafNodes.length; + + for(int[] var3 = new int[]{this.basePos[0], this.basePos[1], this.basePos[2]}; var1 < var2; ++var1) { + int[] var4 = this.leafNodes[var1]; + int[] var5 = new int[]{var4[0], var4[1], var4[2]}; + var3[1] = var4[3]; + int var6 = var3[1] - this.basePos[1]; + if(this.leafNodeNeedsBase(var6)) { + this.placeBlockLine(var3, var5, (byte)Block.wood.blockID); + } + } + + } + + int checkBlockLine(int[] var1, int[] var2) { + int[] var3 = new int[]{0, 0, 0}; + byte var4 = 0; + + byte var5; + for(var5 = 0; var4 < 3; ++var4) { + var3[var4] = var2[var4] - var1[var4]; + if(Math.abs(var3[var4]) > Math.abs(var3[var5])) { + var5 = var4; + } + } + + if(var3[var5] == 0) { + return -1; + } else { + byte var6 = otherCoordPairs[var5]; + byte var7 = otherCoordPairs[var5 + 3]; + byte var8; + if(var3[var5] > 0) { + var8 = 1; + } else { + var8 = -1; + } + + double var9 = (double)var3[var6] / (double)var3[var5]; + double var11 = (double)var3[var7] / (double)var3[var5]; + int[] var13 = new int[]{0, 0, 0}; + int var14 = 0; + + int var15; + for(var15 = var3[var5] + var8; var14 != var15; var14 += var8) { + var13[var5] = var1[var5] + var14; + var13[var6] = MathHelper.floor_double((double)var1[var6] + (double)var14 * var9); + var13[var7] = MathHelper.floor_double((double)var1[var7] + (double)var14 * var11); + int var16 = this.worldObj.getBlockId(var13[0], var13[1], var13[2]); + if(var16 != 0 && var16 != Block.leaves.blockID) { + break; + } + } + + return var14 == var15 ? -1 : Math.abs(var14); + } + } + + boolean validTreeLocation() { + int[] var1 = new int[]{this.basePos[0], this.basePos[1], this.basePos[2]}; + int[] var2 = new int[]{this.basePos[0], this.basePos[1] + this.heightLimit - 1, this.basePos[2]}; + int var3 = this.worldObj.getBlockId(this.basePos[0], this.basePos[1] - 1, this.basePos[2]); + if(var3 != 2 && var3 != 3) { + return false; + } else { + int var4 = this.checkBlockLine(var1, var2); + if(var4 == -1) { + return true; + } else if(var4 < 6) { + return false; + } else { + this.heightLimit = var4; + return true; + } + } + } + + public void setScale(double var1, double var3, double var5) { + this.heightLimitLimit = (int)(var1 * 12.0D); + if(var1 > 0.5D) { + this.leafDistanceLimit = 5; + } + + this.scaleWidth = var3; + this.leafDensity = var5; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + this.worldObj = var1; + long var6 = var2.nextLong(); + this.rand.setSeed(var6); + this.basePos[0] = var3; + this.basePos[1] = var4; + this.basePos[2] = var5; + if(this.heightLimit == 0) { + this.heightLimit = 5 + this.rand.nextInt(this.heightLimitLimit); + } + + if(!this.validTreeLocation()) { + return false; + } else { + this.generateLeafNodeList(); + this.generateLeaves(); + this.generateTrunk(); + this.generateLeafNodeBases(); + return true; + } + } +} diff --git a/src/net/minecraft/src/WorldGenCactus.java b/src/net/minecraft/src/WorldGenCactus.java new file mode 100644 index 0000000..f258098 --- /dev/null +++ b/src/net/minecraft/src/WorldGenCactus.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenCactus extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 10; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.isAirBlock(var7, var8, var9)) { + int var10 = 1 + var2.nextInt(var2.nextInt(3) + 1); + + for(int var11 = 0; var11 < var10; ++var11) { + if(Block.cactus.canBlockStay(var1, var7, var8 + var11, var9)) { + var1.setBlock(var7, var8 + var11, var9, Block.cactus.blockID, 0, 2); + } + } + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenClay.java b/src/net/minecraft/src/WorldGenClay.java new file mode 100644 index 0000000..46de9cc --- /dev/null +++ b/src/net/minecraft/src/WorldGenClay.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenClay extends WorldGenerator { + private int clayBlockId = Block.blockClay.blockID; + private int numberOfBlocks; + + public WorldGenClay(int var1) { + this.numberOfBlocks = var1; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + if(var1.getBlockMaterial(var3, var4, var5) != Material.water) { + return false; + } else { + int var6 = var2.nextInt(this.numberOfBlocks - 2) + 2; + byte var7 = 1; + + for(int var8 = var3 - var6; var8 <= var3 + var6; ++var8) { + for(int var9 = var5 - var6; var9 <= var5 + var6; ++var9) { + int var10 = var8 - var3; + int var11 = var9 - var5; + if(var10 * var10 + var11 * var11 <= var6 * var6) { + for(int var12 = var4 - var7; var12 <= var4 + var7; ++var12) { + int var13 = var1.getBlockId(var8, var12, var9); + if(var13 == Block.dirt.blockID || var13 == Block.blockClay.blockID) { + var1.setBlock(var8, var12, var9, this.clayBlockId, 0, 2); + } + } + } + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/WorldGenDeadBush.java b/src/net/minecraft/src/WorldGenDeadBush.java new file mode 100644 index 0000000..c988f9b --- /dev/null +++ b/src/net/minecraft/src/WorldGenDeadBush.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenDeadBush extends WorldGenerator { + private int deadBushID; + + public WorldGenDeadBush(int var1) { + this.deadBushID = var1; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + boolean var6 = false; + + while(true) { + int var11 = var1.getBlockId(var3, var4, var5); + if(var11 != 0 && var11 != Block.leaves.blockID || var4 <= 0) { + for(int var7 = 0; var7 < 4; ++var7) { + int var8 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var9 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var10 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.isAirBlock(var8, var9, var10) && Block.blocksList[this.deadBushID].canBlockStay(var1, var8, var9, var10)) { + var1.setBlock(var8, var9, var10, this.deadBushID, 0, 2); + } + } + + return true; + } + + --var4; + } + } +} diff --git a/src/net/minecraft/src/WorldGenDesertWells.java b/src/net/minecraft/src/WorldGenDesertWells.java new file mode 100644 index 0000000..b901bf3 --- /dev/null +++ b/src/net/minecraft/src/WorldGenDesertWells.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenDesertWells extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + while(var1.isAirBlock(var3, var4, var5) && var4 > 2) { + --var4; + } + + int var6 = var1.getBlockId(var3, var4, var5); + if(var6 != Block.sand.blockID) { + return false; + } else { + int var7; + int var8; + for(var7 = -2; var7 <= 2; ++var7) { + for(var8 = -2; var8 <= 2; ++var8) { + if(var1.isAirBlock(var3 + var7, var4 - 1, var5 + var8) && var1.isAirBlock(var3 + var7, var4 - 2, var5 + var8)) { + return false; + } + } + } + + for(var7 = -1; var7 <= 0; ++var7) { + for(var8 = -2; var8 <= 2; ++var8) { + for(int var9 = -2; var9 <= 2; ++var9) { + var1.setBlock(var3 + var8, var4 + var7, var5 + var9, Block.sandStone.blockID, 0, 2); + } + } + } + + var1.setBlock(var3, var4, var5, Block.waterMoving.blockID, 0, 2); + var1.setBlock(var3 - 1, var4, var5, Block.waterMoving.blockID, 0, 2); + var1.setBlock(var3 + 1, var4, var5, Block.waterMoving.blockID, 0, 2); + var1.setBlock(var3, var4, var5 - 1, Block.waterMoving.blockID, 0, 2); + var1.setBlock(var3, var4, var5 + 1, Block.waterMoving.blockID, 0, 2); + + for(var7 = -2; var7 <= 2; ++var7) { + for(var8 = -2; var8 <= 2; ++var8) { + if(var7 == -2 || var7 == 2 || var8 == -2 || var8 == 2) { + var1.setBlock(var3 + var7, var4 + 1, var5 + var8, Block.sandStone.blockID, 0, 2); + } + } + } + + var1.setBlock(var3 + 2, var4 + 1, var5, Block.stoneSingleSlab.blockID, 1, 2); + var1.setBlock(var3 - 2, var4 + 1, var5, Block.stoneSingleSlab.blockID, 1, 2); + var1.setBlock(var3, var4 + 1, var5 + 2, Block.stoneSingleSlab.blockID, 1, 2); + var1.setBlock(var3, var4 + 1, var5 - 2, Block.stoneSingleSlab.blockID, 1, 2); + + for(var7 = -1; var7 <= 1; ++var7) { + for(var8 = -1; var8 <= 1; ++var8) { + if(var7 == 0 && var8 == 0) { + var1.setBlock(var3 + var7, var4 + 4, var5 + var8, Block.sandStone.blockID, 0, 2); + } else { + var1.setBlock(var3 + var7, var4 + 4, var5 + var8, Block.stoneSingleSlab.blockID, 1, 2); + } + } + } + + for(var7 = 1; var7 <= 3; ++var7) { + var1.setBlock(var3 - 1, var4 + var7, var5 - 1, Block.sandStone.blockID, 0, 2); + var1.setBlock(var3 - 1, var4 + var7, var5 + 1, Block.sandStone.blockID, 0, 2); + var1.setBlock(var3 + 1, var4 + var7, var5 - 1, Block.sandStone.blockID, 0, 2); + var1.setBlock(var3 + 1, var4 + var7, var5 + 1, Block.sandStone.blockID, 0, 2); + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/WorldGenDungeons.java b/src/net/minecraft/src/WorldGenDungeons.java new file mode 100644 index 0000000..4a7b986 --- /dev/null +++ b/src/net/minecraft/src/WorldGenDungeons.java @@ -0,0 +1,125 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenDungeons extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + byte var6 = 3; + int var7 = var2.nextInt(2) + 2; + int var8 = var2.nextInt(2) + 2; + int var9 = 0; + + int var10; + int var11; + int var12; + for(var10 = var3 - var7 - 1; var10 <= var3 + var7 + 1; ++var10) { + for(var11 = var4 - 1; var11 <= var4 + var6 + 1; ++var11) { + for(var12 = var5 - var8 - 1; var12 <= var5 + var8 + 1; ++var12) { + Material var13 = var1.getBlockMaterial(var10, var11, var12); + if(var11 == var4 - 1 && !var13.isSolid()) { + return false; + } + + if(var11 == var4 + var6 + 1 && !var13.isSolid()) { + return false; + } + + if((var10 == var3 - var7 - 1 || var10 == var3 + var7 + 1 || var12 == var5 - var8 - 1 || var12 == var5 + var8 + 1) && var11 == var4 && var1.isAirBlock(var10, var11, var12) && var1.isAirBlock(var10, var11 + 1, var12)) { + ++var9; + } + } + } + } + + if(var9 >= 1 && var9 <= 5) { + for(var10 = var3 - var7 - 1; var10 <= var3 + var7 + 1; ++var10) { + for(var11 = var4 + var6; var11 >= var4 - 1; --var11) { + for(var12 = var5 - var8 - 1; var12 <= var5 + var8 + 1; ++var12) { + if(var10 != var3 - var7 - 1 && var11 != var4 - 1 && var12 != var5 - var8 - 1 && var10 != var3 + var7 + 1 && var11 != var4 + var6 + 1 && var12 != var5 + var8 + 1) { + var1.setBlockToAir(var10, var11, var12); + } else if(var11 >= 0 && !var1.getBlockMaterial(var10, var11 - 1, var12).isSolid()) { + var1.setBlockToAir(var10, var11, var12); + } else if(var1.getBlockMaterial(var10, var11, var12).isSolid()) { + if(var11 == var4 - 1 && var2.nextInt(4) != 0) { + var1.setBlock(var10, var11, var12, Block.cobblestoneMossy.blockID, 0, 2); + } else { + var1.setBlock(var10, var11, var12, Block.cobblestone.blockID, 0, 2); + } + } + } + } + } + + label118: + for(var10 = 0; var10 < 2; ++var10) { + for(var11 = 0; var11 < 3; ++var11) { + var12 = var3 + var2.nextInt(var7 * 2 + 1) - var7; + int var14 = var5 + var2.nextInt(var8 * 2 + 1) - var8; + if(var1.isAirBlock(var12, var4, var14)) { + int var15 = 0; + if(var1.getBlockMaterial(var12 - 1, var4, var14).isSolid()) { + ++var15; + } + + if(var1.getBlockMaterial(var12 + 1, var4, var14).isSolid()) { + ++var15; + } + + if(var1.getBlockMaterial(var12, var4, var14 - 1).isSolid()) { + ++var15; + } + + if(var1.getBlockMaterial(var12, var4, var14 + 1).isSolid()) { + ++var15; + } + + if(var15 == 1) { + var1.setBlock(var12, var4, var14, Block.chest.blockID, 0, 2); + TileEntityChest var16 = (TileEntityChest)var1.getBlockTileEntity(var12, var4, var14); + if(var16 == null) { + break; + } + + int var17 = 0; + + while(true) { + if(var17 >= 8) { + continue label118; + } + + ItemStack var18 = this.pickCheckLootItem(var2); + if(var18 != null) { + var16.setInventorySlotContents(var2.nextInt(var16.getSizeInventory()), var18); + } + + ++var17; + } + } + } + } + } + + var1.setBlock(var3, var4, var5, Block.mobSpawner.blockID, 0, 2); + TileEntityMobSpawner var19 = (TileEntityMobSpawner)var1.getBlockTileEntity(var3, var4, var5); + if(var19 != null) { + var19.func_98049_a().setMobID(this.pickMobSpawner(var2)); + } else { + System.err.println("Failed to fetch mob spawner entity at (" + var3 + ", " + var4 + ", " + var5 + ")"); + } + + return true; + } else { + return false; + } + } + + private ItemStack pickCheckLootItem(Random var1) { + int var2 = var1.nextInt(12); + return var2 == 0 ? new ItemStack(Item.saddle) : (var2 == 1 ? new ItemStack(Item.ingotIron, var1.nextInt(4) + 1) : (var2 == 2 ? new ItemStack(Item.bread) : (var2 == 3 ? new ItemStack(Item.wheat, var1.nextInt(4) + 1) : (var2 == 4 ? new ItemStack(Item.gunpowder, var1.nextInt(4) + 1) : (var2 == 5 ? new ItemStack(Item.silk, var1.nextInt(4) + 1) : (var2 == 6 ? new ItemStack(Item.bucketEmpty) : (var2 == 7 && var1.nextInt(100) == 0 ? new ItemStack(Item.appleGold) : (var2 == 8 && var1.nextInt(2) == 0 ? new ItemStack(Item.redstone, var1.nextInt(4) + 1) : (var2 == 9 && var1.nextInt(10) == 0 ? new ItemStack(Item.itemsList[Item.record13.itemID + var1.nextInt(2)]) : (var2 == 10 ? new ItemStack(Item.dyePowder, 1, 3) : (var2 == 11 ? Item.enchantedBook.func_92109_a(var1) : null))))))))))); + } + + private String pickMobSpawner(Random var1) { + int var2 = var1.nextInt(4); + return var2 == 0 ? "Skeleton" : (var2 == 1 ? "Zombie" : (var2 == 2 ? "Zombie" : (var2 == 3 ? "Spider" : ""))); + } +} diff --git a/src/net/minecraft/src/WorldGenFire.java b/src/net/minecraft/src/WorldGenFire.java new file mode 100644 index 0000000..b18b63f --- /dev/null +++ b/src/net/minecraft/src/WorldGenFire.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenFire extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 64; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.isAirBlock(var7, var8, var9) && var1.getBlockId(var7, var8 - 1, var9) == Block.netherrack.blockID) { + var1.setBlock(var7, var8, var9, Block.fire.blockID, 0, 2); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenFlowers.java b/src/net/minecraft/src/WorldGenFlowers.java new file mode 100644 index 0000000..46b957c --- /dev/null +++ b/src/net/minecraft/src/WorldGenFlowers.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenFlowers extends WorldGenerator { + private int plantBlockId; + + public WorldGenFlowers(int var1) { + this.plantBlockId = var1; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 64; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.isAirBlock(var7, var8, var9) && (!var1.provider.hasNoSky || var8 < 127) && Block.blocksList[this.plantBlockId].canBlockStay(var1, var7, var8, var9)) { + var1.setBlock(var7, var8, var9, this.plantBlockId, 0, 2); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenForest.java b/src/net/minecraft/src/WorldGenForest.java new file mode 100644 index 0000000..4539334 --- /dev/null +++ b/src/net/minecraft/src/WorldGenForest.java @@ -0,0 +1,85 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenForest extends WorldGenerator { + public WorldGenForest(boolean var1) { + super(var1); + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + int var6 = var2.nextInt(3) + 5; + boolean var7 = true; + if(var4 >= 1 && var4 + var6 + 1 <= 256) { + int var8; + int var10; + int var11; + int var12; + for(var8 = var4; var8 <= var4 + 1 + var6; ++var8) { + byte var9 = 1; + if(var8 == var4) { + var9 = 0; + } + + if(var8 >= var4 + 1 + var6 - 2) { + var9 = 2; + } + + for(var10 = var3 - var9; var10 <= var3 + var9 && var7; ++var10) { + for(var11 = var5 - var9; var11 <= var5 + var9 && var7; ++var11) { + if(var8 >= 0 && var8 < 256) { + var12 = var1.getBlockId(var10, var8, var11); + if(var12 != 0 && var12 != Block.leaves.blockID) { + var7 = false; + } + } else { + var7 = false; + } + } + } + } + + if(!var7) { + return false; + } else { + var8 = var1.getBlockId(var3, var4 - 1, var5); + if((var8 == Block.grass.blockID || var8 == Block.dirt.blockID) && var4 < 256 - var6 - 1) { + this.setBlock(var1, var3, var4 - 1, var5, Block.dirt.blockID); + + int var17; + for(var17 = var4 - 3 + var6; var17 <= var4 + var6; ++var17) { + var10 = var17 - (var4 + var6); + var11 = 1 - var10 / 2; + + for(var12 = var3 - var11; var12 <= var3 + var11; ++var12) { + int var13 = var12 - var3; + + for(int var14 = var5 - var11; var14 <= var5 + var11; ++var14) { + int var15 = var14 - var5; + if(Math.abs(var13) != var11 || Math.abs(var15) != var11 || var2.nextInt(2) != 0 && var10 != 0) { + int var16 = var1.getBlockId(var12, var17, var14); + if(var16 == 0 || var16 == Block.leaves.blockID) { + this.setBlockAndMetadata(var1, var12, var17, var14, Block.leaves.blockID, 2); + } + } + } + } + } + + for(var17 = 0; var17 < var6; ++var17) { + var10 = var1.getBlockId(var3, var4 + var17, var5); + if(var10 == 0 || var10 == Block.leaves.blockID) { + this.setBlockAndMetadata(var1, var3, var4 + var17, var5, Block.wood.blockID, 2); + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/WorldGenGlowStone1.java b/src/net/minecraft/src/WorldGenGlowStone1.java new file mode 100644 index 0000000..31ecda6 --- /dev/null +++ b/src/net/minecraft/src/WorldGenGlowStone1.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenGlowStone1 extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + if(!var1.isAirBlock(var3, var4, var5)) { + return false; + } else if(var1.getBlockId(var3, var4 + 1, var5) != Block.netherrack.blockID) { + return false; + } else { + var1.setBlock(var3, var4, var5, Block.glowStone.blockID, 0, 2); + + for(int var6 = 0; var6 < 1500; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 - var2.nextInt(12); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.getBlockId(var7, var8, var9) == 0) { + int var10 = 0; + + for(int var11 = 0; var11 < 6; ++var11) { + int var12 = 0; + if(var11 == 0) { + var12 = var1.getBlockId(var7 - 1, var8, var9); + } + + if(var11 == 1) { + var12 = var1.getBlockId(var7 + 1, var8, var9); + } + + if(var11 == 2) { + var12 = var1.getBlockId(var7, var8 - 1, var9); + } + + if(var11 == 3) { + var12 = var1.getBlockId(var7, var8 + 1, var9); + } + + if(var11 == 4) { + var12 = var1.getBlockId(var7, var8, var9 - 1); + } + + if(var11 == 5) { + var12 = var1.getBlockId(var7, var8, var9 + 1); + } + + if(var12 == Block.glowStone.blockID) { + ++var10; + } + } + + if(var10 == 1) { + var1.setBlock(var7, var8, var9, Block.glowStone.blockID, 0, 2); + } + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/WorldGenGlowStone2.java b/src/net/minecraft/src/WorldGenGlowStone2.java new file mode 100644 index 0000000..866092f --- /dev/null +++ b/src/net/minecraft/src/WorldGenGlowStone2.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenGlowStone2 extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + if(!var1.isAirBlock(var3, var4, var5)) { + return false; + } else if(var1.getBlockId(var3, var4 + 1, var5) != Block.netherrack.blockID) { + return false; + } else { + var1.setBlock(var3, var4, var5, Block.glowStone.blockID, 0, 2); + + for(int var6 = 0; var6 < 1500; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 - var2.nextInt(12); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.getBlockId(var7, var8, var9) == 0) { + int var10 = 0; + + for(int var11 = 0; var11 < 6; ++var11) { + int var12 = 0; + if(var11 == 0) { + var12 = var1.getBlockId(var7 - 1, var8, var9); + } + + if(var11 == 1) { + var12 = var1.getBlockId(var7 + 1, var8, var9); + } + + if(var11 == 2) { + var12 = var1.getBlockId(var7, var8 - 1, var9); + } + + if(var11 == 3) { + var12 = var1.getBlockId(var7, var8 + 1, var9); + } + + if(var11 == 4) { + var12 = var1.getBlockId(var7, var8, var9 - 1); + } + + if(var11 == 5) { + var12 = var1.getBlockId(var7, var8, var9 + 1); + } + + if(var12 == Block.glowStone.blockID) { + ++var10; + } + } + + if(var10 == 1) { + var1.setBlock(var7, var8, var9, Block.glowStone.blockID, 0, 2); + } + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/WorldGenHellLava.java b/src/net/minecraft/src/WorldGenHellLava.java new file mode 100644 index 0000000..fa6841d --- /dev/null +++ b/src/net/minecraft/src/WorldGenHellLava.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenHellLava extends WorldGenerator { + private int hellLavaID; + private boolean field_94524_b = false; + + public WorldGenHellLava(int var1, boolean var2) { + this.hellLavaID = var1; + this.field_94524_b = var2; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + if(var1.getBlockId(var3, var4 + 1, var5) != Block.netherrack.blockID) { + return false; + } else if(var1.getBlockId(var3, var4, var5) != 0 && var1.getBlockId(var3, var4, var5) != Block.netherrack.blockID) { + return false; + } else { + int var6 = 0; + if(var1.getBlockId(var3 - 1, var4, var5) == Block.netherrack.blockID) { + ++var6; + } + + if(var1.getBlockId(var3 + 1, var4, var5) == Block.netherrack.blockID) { + ++var6; + } + + if(var1.getBlockId(var3, var4, var5 - 1) == Block.netherrack.blockID) { + ++var6; + } + + if(var1.getBlockId(var3, var4, var5 + 1) == Block.netherrack.blockID) { + ++var6; + } + + if(var1.getBlockId(var3, var4 - 1, var5) == Block.netherrack.blockID) { + ++var6; + } + + int var7 = 0; + if(var1.isAirBlock(var3 - 1, var4, var5)) { + ++var7; + } + + if(var1.isAirBlock(var3 + 1, var4, var5)) { + ++var7; + } + + if(var1.isAirBlock(var3, var4, var5 - 1)) { + ++var7; + } + + if(var1.isAirBlock(var3, var4, var5 + 1)) { + ++var7; + } + + if(var1.isAirBlock(var3, var4 - 1, var5)) { + ++var7; + } + + if(!this.field_94524_b && var6 == 4 && var7 == 1 || var6 == 5) { + var1.setBlock(var3, var4, var5, this.hellLavaID, 0, 2); + var1.scheduledUpdatesAreImmediate = true; + Block.blocksList[this.hellLavaID].updateTick(var1, var3, var4, var5, var2); + var1.scheduledUpdatesAreImmediate = false; + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/WorldGenHugeTrees.java b/src/net/minecraft/src/WorldGenHugeTrees.java new file mode 100644 index 0000000..e53437e --- /dev/null +++ b/src/net/minecraft/src/WorldGenHugeTrees.java @@ -0,0 +1,166 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenHugeTrees extends WorldGenerator { + private final int baseHeight; + private final int woodMetadata; + private final int leavesMetadata; + + public WorldGenHugeTrees(boolean var1, int var2, int var3, int var4) { + super(var1); + this.baseHeight = var2; + this.woodMetadata = var3; + this.leavesMetadata = var4; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + int var6 = var2.nextInt(3) + this.baseHeight; + boolean var7 = true; + if(var4 >= 1 && var4 + var6 + 1 <= 256) { + int var8; + int var10; + int var11; + int var12; + for(var8 = var4; var8 <= var4 + 1 + var6; ++var8) { + byte var9 = 2; + if(var8 == var4) { + var9 = 1; + } + + if(var8 >= var4 + 1 + var6 - 2) { + var9 = 2; + } + + for(var10 = var3 - var9; var10 <= var3 + var9 && var7; ++var10) { + for(var11 = var5 - var9; var11 <= var5 + var9 && var7; ++var11) { + if(var8 >= 0 && var8 < 256) { + var12 = var1.getBlockId(var10, var8, var11); + if(var12 != 0 && var12 != Block.leaves.blockID && var12 != Block.grass.blockID && var12 != Block.dirt.blockID && var12 != Block.wood.blockID && var12 != Block.sapling.blockID) { + var7 = false; + } + } else { + var7 = false; + } + } + } + } + + if(!var7) { + return false; + } else { + var8 = var1.getBlockId(var3, var4 - 1, var5); + if((var8 == Block.grass.blockID || var8 == Block.dirt.blockID) && var4 < 256 - var6 - 1) { + var1.setBlock(var3, var4 - 1, var5, Block.dirt.blockID, 0, 2); + var1.setBlock(var3 + 1, var4 - 1, var5, Block.dirt.blockID, 0, 2); + var1.setBlock(var3, var4 - 1, var5 + 1, Block.dirt.blockID, 0, 2); + var1.setBlock(var3 + 1, var4 - 1, var5 + 1, Block.dirt.blockID, 0, 2); + this.growLeaves(var1, var3, var5, var4 + var6, 2, var2); + + for(int var14 = var4 + var6 - 2 - var2.nextInt(4); var14 > var4 + var6 / 2; var14 -= 2 + var2.nextInt(4)) { + float var15 = var2.nextFloat() * (float)Math.PI * 2.0F; + var11 = var3 + (int)(0.5F + MathHelper.cos(var15) * 4.0F); + var12 = var5 + (int)(0.5F + MathHelper.sin(var15) * 4.0F); + this.growLeaves(var1, var11, var12, var14, 0, var2); + + for(int var13 = 0; var13 < 5; ++var13) { + var11 = var3 + (int)(1.5F + MathHelper.cos(var15) * (float)var13); + var12 = var5 + (int)(1.5F + MathHelper.sin(var15) * (float)var13); + this.setBlockAndMetadata(var1, var11, var14 - 3 + var13 / 2, var12, Block.wood.blockID, this.woodMetadata); + } + } + + for(var10 = 0; var10 < var6; ++var10) { + var11 = var1.getBlockId(var3, var4 + var10, var5); + if(var11 == 0 || var11 == Block.leaves.blockID) { + this.setBlockAndMetadata(var1, var3, var4 + var10, var5, Block.wood.blockID, this.woodMetadata); + if(var10 > 0) { + if(var2.nextInt(3) > 0 && var1.isAirBlock(var3 - 1, var4 + var10, var5)) { + this.setBlockAndMetadata(var1, var3 - 1, var4 + var10, var5, Block.vine.blockID, 8); + } + + if(var2.nextInt(3) > 0 && var1.isAirBlock(var3, var4 + var10, var5 - 1)) { + this.setBlockAndMetadata(var1, var3, var4 + var10, var5 - 1, Block.vine.blockID, 1); + } + } + } + + if(var10 < var6 - 1) { + var11 = var1.getBlockId(var3 + 1, var4 + var10, var5); + if(var11 == 0 || var11 == Block.leaves.blockID) { + this.setBlockAndMetadata(var1, var3 + 1, var4 + var10, var5, Block.wood.blockID, this.woodMetadata); + if(var10 > 0) { + if(var2.nextInt(3) > 0 && var1.isAirBlock(var3 + 2, var4 + var10, var5)) { + this.setBlockAndMetadata(var1, var3 + 2, var4 + var10, var5, Block.vine.blockID, 2); + } + + if(var2.nextInt(3) > 0 && var1.isAirBlock(var3 + 1, var4 + var10, var5 - 1)) { + this.setBlockAndMetadata(var1, var3 + 1, var4 + var10, var5 - 1, Block.vine.blockID, 1); + } + } + } + + var11 = var1.getBlockId(var3 + 1, var4 + var10, var5 + 1); + if(var11 == 0 || var11 == Block.leaves.blockID) { + this.setBlockAndMetadata(var1, var3 + 1, var4 + var10, var5 + 1, Block.wood.blockID, this.woodMetadata); + if(var10 > 0) { + if(var2.nextInt(3) > 0 && var1.isAirBlock(var3 + 2, var4 + var10, var5 + 1)) { + this.setBlockAndMetadata(var1, var3 + 2, var4 + var10, var5 + 1, Block.vine.blockID, 2); + } + + if(var2.nextInt(3) > 0 && var1.isAirBlock(var3 + 1, var4 + var10, var5 + 2)) { + this.setBlockAndMetadata(var1, var3 + 1, var4 + var10, var5 + 2, Block.vine.blockID, 4); + } + } + } + + var11 = var1.getBlockId(var3, var4 + var10, var5 + 1); + if(var11 == 0 || var11 == Block.leaves.blockID) { + this.setBlockAndMetadata(var1, var3, var4 + var10, var5 + 1, Block.wood.blockID, this.woodMetadata); + if(var10 > 0) { + if(var2.nextInt(3) > 0 && var1.isAirBlock(var3 - 1, var4 + var10, var5 + 1)) { + this.setBlockAndMetadata(var1, var3 - 1, var4 + var10, var5 + 1, Block.vine.blockID, 8); + } + + if(var2.nextInt(3) > 0 && var1.isAirBlock(var3, var4 + var10, var5 + 2)) { + this.setBlockAndMetadata(var1, var3, var4 + var10, var5 + 2, Block.vine.blockID, 4); + } + } + } + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } + + private void growLeaves(World var1, int var2, int var3, int var4, int var5, Random var6) { + byte var7 = 2; + + for(int var8 = var4 - var7; var8 <= var4; ++var8) { + int var9 = var8 - var4; + int var10 = var5 + 1 - var9; + + for(int var11 = var2 - var10; var11 <= var2 + var10 + 1; ++var11) { + int var12 = var11 - var2; + + for(int var13 = var3 - var10; var13 <= var3 + var10 + 1; ++var13) { + int var14 = var13 - var3; + if((var12 >= 0 || var14 >= 0 || var12 * var12 + var14 * var14 <= var10 * var10) && (var12 <= 0 && var14 <= 0 || var12 * var12 + var14 * var14 <= (var10 + 1) * (var10 + 1)) && (var6.nextInt(4) != 0 || var12 * var12 + var14 * var14 <= (var10 - 1) * (var10 - 1))) { + int var15 = var1.getBlockId(var11, var8, var13); + if(var15 == 0 || var15 == Block.leaves.blockID) { + this.setBlockAndMetadata(var1, var11, var8, var13, Block.leaves.blockID, this.leavesMetadata); + } + } + } + } + } + + } +} diff --git a/src/net/minecraft/src/WorldGenLakes.java b/src/net/minecraft/src/WorldGenLakes.java new file mode 100644 index 0000000..79d1958 --- /dev/null +++ b/src/net/minecraft/src/WorldGenLakes.java @@ -0,0 +1,122 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenLakes extends WorldGenerator { + private int blockIndex; + + public WorldGenLakes(int var1) { + this.blockIndex = var1; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + var3 -= 8; + + for(var5 -= 8; var4 > 5 && var1.isAirBlock(var3, var4, var5); --var4) { + } + + if(var4 <= 4) { + return false; + } else { + var4 -= 4; + boolean[] var6 = new boolean[2048]; + int var7 = var2.nextInt(4) + 4; + + int var8; + for(var8 = 0; var8 < var7; ++var8) { + double var9 = var2.nextDouble() * 6.0D + 3.0D; + double var11 = var2.nextDouble() * 4.0D + 2.0D; + double var13 = var2.nextDouble() * 6.0D + 3.0D; + double var15 = var2.nextDouble() * (16.0D - var9 - 2.0D) + 1.0D + var9 / 2.0D; + double var17 = var2.nextDouble() * (8.0D - var11 - 4.0D) + 2.0D + var11 / 2.0D; + double var19 = var2.nextDouble() * (16.0D - var13 - 2.0D) + 1.0D + var13 / 2.0D; + + for(int var21 = 1; var21 < 15; ++var21) { + for(int var22 = 1; var22 < 15; ++var22) { + for(int var23 = 1; var23 < 7; ++var23) { + double var24 = ((double)var21 - var15) / (var9 / 2.0D); + double var26 = ((double)var23 - var17) / (var11 / 2.0D); + double var28 = ((double)var22 - var19) / (var13 / 2.0D); + double var30 = var24 * var24 + var26 * var26 + var28 * var28; + if(var30 < 1.0D) { + var6[(var21 * 16 + var22) * 8 + var23] = true; + } + } + } + } + } + + int var10; + int var32; + boolean var33; + for(var8 = 0; var8 < 16; ++var8) { + for(var32 = 0; var32 < 16; ++var32) { + for(var10 = 0; var10 < 8; ++var10) { + var33 = !var6[(var8 * 16 + var32) * 8 + var10] && (var8 < 15 && var6[((var8 + 1) * 16 + var32) * 8 + var10] || var8 > 0 && var6[((var8 - 1) * 16 + var32) * 8 + var10] || var32 < 15 && var6[(var8 * 16 + var32 + 1) * 8 + var10] || var32 > 0 && var6[(var8 * 16 + (var32 - 1)) * 8 + var10] || var10 < 7 && var6[(var8 * 16 + var32) * 8 + var10 + 1] || var10 > 0 && var6[(var8 * 16 + var32) * 8 + (var10 - 1)]); + if(var33) { + Material var12 = var1.getBlockMaterial(var3 + var8, var4 + var10, var5 + var32); + if(var10 >= 4 && var12.isLiquid()) { + return false; + } + + if(var10 < 4 && !var12.isSolid() && var1.getBlockId(var3 + var8, var4 + var10, var5 + var32) != this.blockIndex) { + return false; + } + } + } + } + } + + for(var8 = 0; var8 < 16; ++var8) { + for(var32 = 0; var32 < 16; ++var32) { + for(var10 = 0; var10 < 8; ++var10) { + if(var6[(var8 * 16 + var32) * 8 + var10]) { + var1.setBlock(var3 + var8, var4 + var10, var5 + var32, var10 >= 4 ? 0 : this.blockIndex, 0, 2); + } + } + } + } + + for(var8 = 0; var8 < 16; ++var8) { + for(var32 = 0; var32 < 16; ++var32) { + for(var10 = 4; var10 < 8; ++var10) { + if(var6[(var8 * 16 + var32) * 8 + var10] && var1.getBlockId(var3 + var8, var4 + var10 - 1, var5 + var32) == Block.dirt.blockID && var1.getSavedLightValue(EnumSkyBlock.Sky, var3 + var8, var4 + var10, var5 + var32) > 0) { + BiomeGenBase var34 = var1.getBiomeGenForCoords(var3 + var8, var5 + var32); + if(var34.topBlock == Block.mycelium.blockID) { + var1.setBlock(var3 + var8, var4 + var10 - 1, var5 + var32, Block.mycelium.blockID, 0, 2); + } else { + var1.setBlock(var3 + var8, var4 + var10 - 1, var5 + var32, Block.grass.blockID, 0, 2); + } + } + } + } + } + + if(Block.blocksList[this.blockIndex].blockMaterial == Material.lava) { + for(var8 = 0; var8 < 16; ++var8) { + for(var32 = 0; var32 < 16; ++var32) { + for(var10 = 0; var10 < 8; ++var10) { + var33 = !var6[(var8 * 16 + var32) * 8 + var10] && (var8 < 15 && var6[((var8 + 1) * 16 + var32) * 8 + var10] || var8 > 0 && var6[((var8 - 1) * 16 + var32) * 8 + var10] || var32 < 15 && var6[(var8 * 16 + var32 + 1) * 8 + var10] || var32 > 0 && var6[(var8 * 16 + (var32 - 1)) * 8 + var10] || var10 < 7 && var6[(var8 * 16 + var32) * 8 + var10 + 1] || var10 > 0 && var6[(var8 * 16 + var32) * 8 + (var10 - 1)]); + if(var33 && (var10 < 4 || var2.nextInt(2) != 0) && var1.getBlockMaterial(var3 + var8, var4 + var10, var5 + var32).isSolid()) { + var1.setBlock(var3 + var8, var4 + var10, var5 + var32, Block.stone.blockID, 0, 2); + } + } + } + } + } + + if(Block.blocksList[this.blockIndex].blockMaterial == Material.water) { + for(var8 = 0; var8 < 16; ++var8) { + for(var32 = 0; var32 < 16; ++var32) { + byte var35 = 4; + if(var1.isBlockFreezable(var3 + var8, var4 + var35, var5 + var32)) { + var1.setBlock(var3 + var8, var4 + var35, var5 + var32, Block.ice.blockID, 0, 2); + } + } + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/WorldGenLiquids.java b/src/net/minecraft/src/WorldGenLiquids.java new file mode 100644 index 0000000..e159fd8 --- /dev/null +++ b/src/net/minecraft/src/WorldGenLiquids.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenLiquids extends WorldGenerator { + private int liquidBlockId; + + public WorldGenLiquids(int var1) { + this.liquidBlockId = var1; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + if(var1.getBlockId(var3, var4 + 1, var5) != Block.stone.blockID) { + return false; + } else if(var1.getBlockId(var3, var4 - 1, var5) != Block.stone.blockID) { + return false; + } else if(var1.getBlockId(var3, var4, var5) != 0 && var1.getBlockId(var3, var4, var5) != Block.stone.blockID) { + return false; + } else { + int var6 = 0; + if(var1.getBlockId(var3 - 1, var4, var5) == Block.stone.blockID) { + ++var6; + } + + if(var1.getBlockId(var3 + 1, var4, var5) == Block.stone.blockID) { + ++var6; + } + + if(var1.getBlockId(var3, var4, var5 - 1) == Block.stone.blockID) { + ++var6; + } + + if(var1.getBlockId(var3, var4, var5 + 1) == Block.stone.blockID) { + ++var6; + } + + int var7 = 0; + if(var1.isAirBlock(var3 - 1, var4, var5)) { + ++var7; + } + + if(var1.isAirBlock(var3 + 1, var4, var5)) { + ++var7; + } + + if(var1.isAirBlock(var3, var4, var5 - 1)) { + ++var7; + } + + if(var1.isAirBlock(var3, var4, var5 + 1)) { + ++var7; + } + + if(var6 == 3 && var7 == 1) { + var1.setBlock(var3, var4, var5, this.liquidBlockId, 0, 2); + var1.scheduledUpdatesAreImmediate = true; + Block.blocksList[this.liquidBlockId].updateTick(var1, var3, var4, var5, var2); + var1.scheduledUpdatesAreImmediate = false; + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/WorldGenMinable.java b/src/net/minecraft/src/WorldGenMinable.java new file mode 100644 index 0000000..1e174e6 --- /dev/null +++ b/src/net/minecraft/src/WorldGenMinable.java @@ -0,0 +1,63 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenMinable extends WorldGenerator { + private int minableBlockId; + private int numberOfBlocks; + private int field_94523_c; + + public WorldGenMinable(int var1, int var2) { + this(var1, var2, Block.stone.blockID); + } + + public WorldGenMinable(int var1, int var2, int var3) { + this.minableBlockId = var1; + this.numberOfBlocks = var2; + this.field_94523_c = var3; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + float var6 = var2.nextFloat() * (float)Math.PI; + double var7 = (double)((float)(var3 + 8) + MathHelper.sin(var6) * (float)this.numberOfBlocks / 8.0F); + double var9 = (double)((float)(var3 + 8) - MathHelper.sin(var6) * (float)this.numberOfBlocks / 8.0F); + double var11 = (double)((float)(var5 + 8) + MathHelper.cos(var6) * (float)this.numberOfBlocks / 8.0F); + double var13 = (double)((float)(var5 + 8) - MathHelper.cos(var6) * (float)this.numberOfBlocks / 8.0F); + double var15 = (double)(var4 + var2.nextInt(3) - 2); + double var17 = (double)(var4 + var2.nextInt(3) - 2); + + for(int var19 = 0; var19 <= this.numberOfBlocks; ++var19) { + double var20 = var7 + (var9 - var7) * (double)var19 / (double)this.numberOfBlocks; + double var22 = var15 + (var17 - var15) * (double)var19 / (double)this.numberOfBlocks; + double var24 = var11 + (var13 - var11) * (double)var19 / (double)this.numberOfBlocks; + double var26 = var2.nextDouble() * (double)this.numberOfBlocks / 16.0D; + double var28 = (double)(MathHelper.sin((float)var19 * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * var26 + 1.0D; + double var30 = (double)(MathHelper.sin((float)var19 * (float)Math.PI / (float)this.numberOfBlocks) + 1.0F) * var26 + 1.0D; + int var32 = MathHelper.floor_double(var20 - var28 / 2.0D); + int var33 = MathHelper.floor_double(var22 - var30 / 2.0D); + int var34 = MathHelper.floor_double(var24 - var28 / 2.0D); + int var35 = MathHelper.floor_double(var20 + var28 / 2.0D); + int var36 = MathHelper.floor_double(var22 + var30 / 2.0D); + int var37 = MathHelper.floor_double(var24 + var28 / 2.0D); + + for(int var38 = var32; var38 <= var35; ++var38) { + double var39 = ((double)var38 + 0.5D - var20) / (var28 / 2.0D); + if(var39 * var39 < 1.0D) { + for(int var41 = var33; var41 <= var36; ++var41) { + double var42 = ((double)var41 + 0.5D - var22) / (var30 / 2.0D); + if(var39 * var39 + var42 * var42 < 1.0D) { + for(int var44 = var34; var44 <= var37; ++var44) { + double var45 = ((double)var44 + 0.5D - var24) / (var28 / 2.0D); + if(var39 * var39 + var42 * var42 + var45 * var45 < 1.0D && var1.getBlockId(var38, var41, var44) == this.field_94523_c) { + var1.setBlock(var38, var41, var44, this.minableBlockId, 0, 2); + } + } + } + } + } + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenPumpkin.java b/src/net/minecraft/src/WorldGenPumpkin.java new file mode 100644 index 0000000..af140f8 --- /dev/null +++ b/src/net/minecraft/src/WorldGenPumpkin.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenPumpkin extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 64; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.isAirBlock(var7, var8, var9) && var1.getBlockId(var7, var8 - 1, var9) == Block.grass.blockID && Block.pumpkin.canPlaceBlockAt(var1, var7, var8, var9)) { + var1.setBlock(var7, var8, var9, Block.pumpkin.blockID, var2.nextInt(4), 2); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenReed.java b/src/net/minecraft/src/WorldGenReed.java new file mode 100644 index 0000000..8f62bcc --- /dev/null +++ b/src/net/minecraft/src/WorldGenReed.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenReed extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 20; ++var6) { + int var7 = var3 + var2.nextInt(4) - var2.nextInt(4); + int var8 = var4; + int var9 = var5 + var2.nextInt(4) - var2.nextInt(4); + if(var1.isAirBlock(var7, var4, var9) && (var1.getBlockMaterial(var7 - 1, var4 - 1, var9) == Material.water || var1.getBlockMaterial(var7 + 1, var4 - 1, var9) == Material.water || var1.getBlockMaterial(var7, var4 - 1, var9 - 1) == Material.water || var1.getBlockMaterial(var7, var4 - 1, var9 + 1) == Material.water)) { + int var10 = 2 + var2.nextInt(var2.nextInt(3) + 1); + + for(int var11 = 0; var11 < var10; ++var11) { + if(Block.reed.canBlockStay(var1, var7, var8 + var11, var9)) { + var1.setBlock(var7, var8 + var11, var9, Block.reed.blockID, 0, 2); + } + } + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenSand.java b/src/net/minecraft/src/WorldGenSand.java new file mode 100644 index 0000000..f83dd2d --- /dev/null +++ b/src/net/minecraft/src/WorldGenSand.java @@ -0,0 +1,39 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenSand extends WorldGenerator { + private int sandID; + private int radius; + + public WorldGenSand(int var1, int var2) { + this.sandID = var2; + this.radius = var1; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + if(var1.getBlockMaterial(var3, var4, var5) != Material.water) { + return false; + } else { + int var6 = var2.nextInt(this.radius - 2) + 2; + byte var7 = 2; + + for(int var8 = var3 - var6; var8 <= var3 + var6; ++var8) { + for(int var9 = var5 - var6; var9 <= var5 + var6; ++var9) { + int var10 = var8 - var3; + int var11 = var9 - var5; + if(var10 * var10 + var11 * var11 <= var6 * var6) { + for(int var12 = var4 - var7; var12 <= var4 + var7; ++var12) { + int var13 = var1.getBlockId(var8, var12, var9); + if(var13 == Block.dirt.blockID || var13 == Block.grass.blockID) { + var1.setBlock(var8, var12, var9, this.sandID, 0, 2); + } + } + } + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/WorldGenShrub.java b/src/net/minecraft/src/WorldGenShrub.java new file mode 100644 index 0000000..20064bf --- /dev/null +++ b/src/net/minecraft/src/WorldGenShrub.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenShrub extends WorldGenerator { + private int field_76527_a; + private int field_76526_b; + + public WorldGenShrub(int var1, int var2) { + this.field_76526_b = var1; + this.field_76527_a = var2; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + boolean var6 = false; + + while(true) { + int var15 = var1.getBlockId(var3, var4, var5); + if(var15 != 0 && var15 != Block.leaves.blockID || var4 <= 0) { + int var7 = var1.getBlockId(var3, var4, var5); + if(var7 == Block.dirt.blockID || var7 == Block.grass.blockID) { + ++var4; + this.setBlockAndMetadata(var1, var3, var4, var5, Block.wood.blockID, this.field_76526_b); + + for(int var8 = var4; var8 <= var4 + 2; ++var8) { + int var9 = var8 - var4; + int var10 = 2 - var9; + + for(int var11 = var3 - var10; var11 <= var3 + var10; ++var11) { + int var12 = var11 - var3; + + for(int var13 = var5 - var10; var13 <= var5 + var10; ++var13) { + int var14 = var13 - var5; + if((Math.abs(var12) != var10 || Math.abs(var14) != var10 || var2.nextInt(2) != 0) && !Block.opaqueCubeLookup[var1.getBlockId(var11, var8, var13)]) { + this.setBlockAndMetadata(var1, var11, var8, var13, Block.leaves.blockID, this.field_76527_a); + } + } + } + } + } + + return true; + } + + --var4; + } + } +} diff --git a/src/net/minecraft/src/WorldGenSpikes.java b/src/net/minecraft/src/WorldGenSpikes.java new file mode 100644 index 0000000..cef0be6 --- /dev/null +++ b/src/net/minecraft/src/WorldGenSpikes.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenSpikes extends WorldGenerator { + private int replaceID; + + public WorldGenSpikes(int var1) { + this.replaceID = var1; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + if(var1.isAirBlock(var3, var4, var5) && var1.getBlockId(var3, var4 - 1, var5) == this.replaceID) { + int var6 = var2.nextInt(32) + 6; + int var7 = var2.nextInt(4) + 1; + + int var8; + int var9; + int var10; + int var11; + for(var8 = var3 - var7; var8 <= var3 + var7; ++var8) { + for(var9 = var5 - var7; var9 <= var5 + var7; ++var9) { + var10 = var8 - var3; + var11 = var9 - var5; + if(var10 * var10 + var11 * var11 <= var7 * var7 + 1 && var1.getBlockId(var8, var4 - 1, var9) != this.replaceID) { + return false; + } + } + } + + for(var8 = var4; var8 < var4 + var6 && var8 < 128; ++var8) { + for(var9 = var3 - var7; var9 <= var3 + var7; ++var9) { + for(var10 = var5 - var7; var10 <= var5 + var7; ++var10) { + var11 = var9 - var3; + int var12 = var10 - var5; + if(var11 * var11 + var12 * var12 <= var7 * var7 + 1) { + var1.setBlock(var9, var8, var10, Block.obsidian.blockID, 0, 2); + } + } + } + } + + EntityEnderCrystal var13 = new EntityEnderCrystal(var1); + var13.setLocationAndAngles((double)((float)var3 + 0.5F), (double)(var4 + var6), (double)((float)var5 + 0.5F), var2.nextFloat() * 360.0F, 0.0F); + var1.spawnEntityInWorld(var13); + var1.setBlock(var3, var4 + var6, var5, Block.bedrock.blockID, 0, 2); + return true; + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/WorldGenSwamp.java b/src/net/minecraft/src/WorldGenSwamp.java new file mode 100644 index 0000000..42554d7 --- /dev/null +++ b/src/net/minecraft/src/WorldGenSwamp.java @@ -0,0 +1,128 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenSwamp extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + int var6; + for(var6 = var2.nextInt(4) + 5; var1.getBlockMaterial(var3, var4 - 1, var5) == Material.water; --var4) { + } + + boolean var7 = true; + if(var4 >= 1 && var4 + var6 + 1 <= 128) { + int var8; + int var10; + int var11; + int var12; + for(var8 = var4; var8 <= var4 + 1 + var6; ++var8) { + byte var9 = 1; + if(var8 == var4) { + var9 = 0; + } + + if(var8 >= var4 + 1 + var6 - 2) { + var9 = 3; + } + + for(var10 = var3 - var9; var10 <= var3 + var9 && var7; ++var10) { + for(var11 = var5 - var9; var11 <= var5 + var9 && var7; ++var11) { + if(var8 >= 0 && var8 < 128) { + var12 = var1.getBlockId(var10, var8, var11); + if(var12 != 0 && var12 != Block.leaves.blockID) { + if(var12 != Block.waterStill.blockID && var12 != Block.waterMoving.blockID) { + var7 = false; + } else if(var8 > var4) { + var7 = false; + } + } + } else { + var7 = false; + } + } + } + } + + if(!var7) { + return false; + } else { + var8 = var1.getBlockId(var3, var4 - 1, var5); + if((var8 == Block.grass.blockID || var8 == Block.dirt.blockID) && var4 < 128 - var6 - 1) { + this.setBlock(var1, var3, var4 - 1, var5, Block.dirt.blockID); + + int var13; + int var16; + for(var16 = var4 - 3 + var6; var16 <= var4 + var6; ++var16) { + var10 = var16 - (var4 + var6); + var11 = 2 - var10 / 2; + + for(var12 = var3 - var11; var12 <= var3 + var11; ++var12) { + var13 = var12 - var3; + + for(int var14 = var5 - var11; var14 <= var5 + var11; ++var14) { + int var15 = var14 - var5; + if((Math.abs(var13) != var11 || Math.abs(var15) != var11 || var2.nextInt(2) != 0 && var10 != 0) && !Block.opaqueCubeLookup[var1.getBlockId(var12, var16, var14)]) { + this.setBlock(var1, var12, var16, var14, Block.leaves.blockID); + } + } + } + } + + for(var16 = 0; var16 < var6; ++var16) { + var10 = var1.getBlockId(var3, var4 + var16, var5); + if(var10 == 0 || var10 == Block.leaves.blockID || var10 == Block.waterMoving.blockID || var10 == Block.waterStill.blockID) { + this.setBlock(var1, var3, var4 + var16, var5, Block.wood.blockID); + } + } + + for(var16 = var4 - 3 + var6; var16 <= var4 + var6; ++var16) { + var10 = var16 - (var4 + var6); + var11 = 2 - var10 / 2; + + for(var12 = var3 - var11; var12 <= var3 + var11; ++var12) { + for(var13 = var5 - var11; var13 <= var5 + var11; ++var13) { + if(var1.getBlockId(var12, var16, var13) == Block.leaves.blockID) { + if(var2.nextInt(4) == 0 && var1.getBlockId(var12 - 1, var16, var13) == 0) { + this.generateVines(var1, var12 - 1, var16, var13, 8); + } + + if(var2.nextInt(4) == 0 && var1.getBlockId(var12 + 1, var16, var13) == 0) { + this.generateVines(var1, var12 + 1, var16, var13, 2); + } + + if(var2.nextInt(4) == 0 && var1.getBlockId(var12, var16, var13 - 1) == 0) { + this.generateVines(var1, var12, var16, var13 - 1, 1); + } + + if(var2.nextInt(4) == 0 && var1.getBlockId(var12, var16, var13 + 1) == 0) { + this.generateVines(var1, var12, var16, var13 + 1, 4); + } + } + } + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } + + private void generateVines(World var1, int var2, int var3, int var4, int var5) { + this.setBlockAndMetadata(var1, var2, var3, var4, Block.vine.blockID, var5); + int var6 = 4; + + while(true) { + --var3; + if(var1.getBlockId(var2, var3, var4) != 0 || var6 <= 0) { + return; + } + + this.setBlockAndMetadata(var1, var2, var3, var4, Block.vine.blockID, var5); + --var6; + } + } +} diff --git a/src/net/minecraft/src/WorldGenTaiga1.java b/src/net/minecraft/src/WorldGenTaiga1.java new file mode 100644 index 0000000..04b0833 --- /dev/null +++ b/src/net/minecraft/src/WorldGenTaiga1.java @@ -0,0 +1,83 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenTaiga1 extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + int var6 = var2.nextInt(5) + 7; + int var7 = var6 - var2.nextInt(2) - 3; + int var8 = var6 - var7; + int var9 = 1 + var2.nextInt(var8 + 1); + boolean var10 = true; + if(var4 >= 1 && var4 + var6 + 1 <= 128) { + int var11; + int var13; + int var14; + int var15; + int var18; + for(var11 = var4; var11 <= var4 + 1 + var6 && var10; ++var11) { + boolean var12 = true; + if(var11 - var4 < var7) { + var18 = 0; + } else { + var18 = var9; + } + + for(var13 = var3 - var18; var13 <= var3 + var18 && var10; ++var13) { + for(var14 = var5 - var18; var14 <= var5 + var18 && var10; ++var14) { + if(var11 >= 0 && var11 < 128) { + var15 = var1.getBlockId(var13, var11, var14); + if(var15 != 0 && var15 != Block.leaves.blockID) { + var10 = false; + } + } else { + var10 = false; + } + } + } + } + + if(!var10) { + return false; + } else { + var11 = var1.getBlockId(var3, var4 - 1, var5); + if((var11 == Block.grass.blockID || var11 == Block.dirt.blockID) && var4 < 128 - var6 - 1) { + this.setBlock(var1, var3, var4 - 1, var5, Block.dirt.blockID); + var18 = 0; + + for(var13 = var4 + var6; var13 >= var4 + var7; --var13) { + for(var14 = var3 - var18; var14 <= var3 + var18; ++var14) { + var15 = var14 - var3; + + for(int var16 = var5 - var18; var16 <= var5 + var18; ++var16) { + int var17 = var16 - var5; + if((Math.abs(var15) != var18 || Math.abs(var17) != var18 || var18 <= 0) && !Block.opaqueCubeLookup[var1.getBlockId(var14, var13, var16)]) { + this.setBlockAndMetadata(var1, var14, var13, var16, Block.leaves.blockID, 1); + } + } + } + + if(var18 >= 1 && var13 == var4 + var7 + 1) { + --var18; + } else if(var18 < var9) { + ++var18; + } + } + + for(var13 = 0; var13 < var6 - 1; ++var13) { + var14 = var1.getBlockId(var3, var4 + var13, var5); + if(var14 == 0 || var14 == Block.leaves.blockID) { + this.setBlockAndMetadata(var1, var3, var4 + var13, var5, Block.wood.blockID, 1); + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/WorldGenTaiga2.java b/src/net/minecraft/src/WorldGenTaiga2.java new file mode 100644 index 0000000..a17d593 --- /dev/null +++ b/src/net/minecraft/src/WorldGenTaiga2.java @@ -0,0 +1,99 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenTaiga2 extends WorldGenerator { + public WorldGenTaiga2(boolean var1) { + super(var1); + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + int var6 = var2.nextInt(4) + 6; + int var7 = 1 + var2.nextInt(2); + int var8 = var6 - var7; + int var9 = 2 + var2.nextInt(2); + boolean var10 = true; + if(var4 >= 1 && var4 + var6 + 1 <= 256) { + int var11; + int var13; + int var15; + int var21; + for(var11 = var4; var11 <= var4 + 1 + var6 && var10; ++var11) { + boolean var12 = true; + if(var11 - var4 < var7) { + var21 = 0; + } else { + var21 = var9; + } + + for(var13 = var3 - var21; var13 <= var3 + var21 && var10; ++var13) { + for(int var14 = var5 - var21; var14 <= var5 + var21 && var10; ++var14) { + if(var11 >= 0 && var11 < 256) { + var15 = var1.getBlockId(var13, var11, var14); + if(var15 != 0 && var15 != Block.leaves.blockID) { + var10 = false; + } + } else { + var10 = false; + } + } + } + } + + if(!var10) { + return false; + } else { + var11 = var1.getBlockId(var3, var4 - 1, var5); + if((var11 == Block.grass.blockID || var11 == Block.dirt.blockID) && var4 < 256 - var6 - 1) { + this.setBlock(var1, var3, var4 - 1, var5, Block.dirt.blockID); + var21 = var2.nextInt(2); + var13 = 1; + byte var22 = 0; + + int var16; + int var17; + for(var15 = 0; var15 <= var8; ++var15) { + var16 = var4 + var6 - var15; + + for(var17 = var3 - var21; var17 <= var3 + var21; ++var17) { + int var18 = var17 - var3; + + for(int var19 = var5 - var21; var19 <= var5 + var21; ++var19) { + int var20 = var19 - var5; + if((Math.abs(var18) != var21 || Math.abs(var20) != var21 || var21 <= 0) && !Block.opaqueCubeLookup[var1.getBlockId(var17, var16, var19)]) { + this.setBlockAndMetadata(var1, var17, var16, var19, Block.leaves.blockID, 1); + } + } + } + + if(var21 >= var13) { + var21 = var22; + var22 = 1; + ++var13; + if(var13 > var9) { + var13 = var9; + } + } else { + ++var21; + } + } + + var15 = var2.nextInt(3); + + for(var16 = 0; var16 < var6 - var15; ++var16) { + var17 = var1.getBlockId(var3, var4 + var16, var5); + if(var17 == 0 || var17 == Block.leaves.blockID) { + this.setBlockAndMetadata(var1, var3, var4 + var16, var5, Block.wood.blockID, 1); + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/WorldGenTallGrass.java b/src/net/minecraft/src/WorldGenTallGrass.java new file mode 100644 index 0000000..35d0010 --- /dev/null +++ b/src/net/minecraft/src/WorldGenTallGrass.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenTallGrass extends WorldGenerator { + private int tallGrassID; + private int tallGrassMetadata; + + public WorldGenTallGrass(int var1, int var2) { + this.tallGrassID = var1; + this.tallGrassMetadata = var2; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + boolean var6 = false; + + while(true) { + int var11 = var1.getBlockId(var3, var4, var5); + if(var11 != 0 && var11 != Block.leaves.blockID || var4 <= 0) { + for(int var7 = 0; var7 < 128; ++var7) { + int var8 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var9 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var10 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.isAirBlock(var8, var9, var10) && Block.blocksList[this.tallGrassID].canBlockStay(var1, var8, var9, var10)) { + var1.setBlock(var8, var9, var10, this.tallGrassID, this.tallGrassMetadata, 2); + } + } + + return true; + } + + --var4; + } + } +} diff --git a/src/net/minecraft/src/WorldGenTrees.java b/src/net/minecraft/src/WorldGenTrees.java new file mode 100644 index 0000000..3752d7b --- /dev/null +++ b/src/net/minecraft/src/WorldGenTrees.java @@ -0,0 +1,174 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenTrees extends WorldGenerator { + private final int minTreeHeight; + private final boolean vinesGrow; + private final int metaWood; + private final int metaLeaves; + + public WorldGenTrees(boolean var1) { + this(var1, 4, 0, 0, false); + } + + public WorldGenTrees(boolean var1, int var2, int var3, int var4, boolean var5) { + super(var1); + this.minTreeHeight = var2; + this.metaWood = var3; + this.metaLeaves = var4; + this.vinesGrow = var5; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + int var6 = var2.nextInt(3) + this.minTreeHeight; + boolean var7 = true; + if(var4 >= 1 && var4 + var6 + 1 <= 256) { + int var8; + byte var9; + int var11; + int var12; + for(var8 = var4; var8 <= var4 + 1 + var6; ++var8) { + var9 = 1; + if(var8 == var4) { + var9 = 0; + } + + if(var8 >= var4 + 1 + var6 - 2) { + var9 = 2; + } + + for(int var10 = var3 - var9; var10 <= var3 + var9 && var7; ++var10) { + for(var11 = var5 - var9; var11 <= var5 + var9 && var7; ++var11) { + if(var8 >= 0 && var8 < 256) { + var12 = var1.getBlockId(var10, var8, var11); + if(var12 != 0 && var12 != Block.leaves.blockID && var12 != Block.grass.blockID && var12 != Block.dirt.blockID && var12 != Block.wood.blockID) { + var7 = false; + } + } else { + var7 = false; + } + } + } + } + + if(!var7) { + return false; + } else { + var8 = var1.getBlockId(var3, var4 - 1, var5); + if((var8 == Block.grass.blockID || var8 == Block.dirt.blockID) && var4 < 256 - var6 - 1) { + this.setBlock(var1, var3, var4 - 1, var5, Block.dirt.blockID); + var9 = 3; + byte var19 = 0; + + int var13; + int var14; + int var15; + for(var11 = var4 - var9 + var6; var11 <= var4 + var6; ++var11) { + var12 = var11 - (var4 + var6); + var13 = var19 + 1 - var12 / 2; + + for(var14 = var3 - var13; var14 <= var3 + var13; ++var14) { + var15 = var14 - var3; + + for(int var16 = var5 - var13; var16 <= var5 + var13; ++var16) { + int var17 = var16 - var5; + if(Math.abs(var15) != var13 || Math.abs(var17) != var13 || var2.nextInt(2) != 0 && var12 != 0) { + int var18 = var1.getBlockId(var14, var11, var16); + if(var18 == 0 || var18 == Block.leaves.blockID) { + this.setBlockAndMetadata(var1, var14, var11, var16, Block.leaves.blockID, this.metaLeaves); + } + } + } + } + } + + for(var11 = 0; var11 < var6; ++var11) { + var12 = var1.getBlockId(var3, var4 + var11, var5); + if(var12 == 0 || var12 == Block.leaves.blockID) { + this.setBlockAndMetadata(var1, var3, var4 + var11, var5, Block.wood.blockID, this.metaWood); + if(this.vinesGrow && var11 > 0) { + if(var2.nextInt(3) > 0 && var1.isAirBlock(var3 - 1, var4 + var11, var5)) { + this.setBlockAndMetadata(var1, var3 - 1, var4 + var11, var5, Block.vine.blockID, 8); + } + + if(var2.nextInt(3) > 0 && var1.isAirBlock(var3 + 1, var4 + var11, var5)) { + this.setBlockAndMetadata(var1, var3 + 1, var4 + var11, var5, Block.vine.blockID, 2); + } + + if(var2.nextInt(3) > 0 && var1.isAirBlock(var3, var4 + var11, var5 - 1)) { + this.setBlockAndMetadata(var1, var3, var4 + var11, var5 - 1, Block.vine.blockID, 1); + } + + if(var2.nextInt(3) > 0 && var1.isAirBlock(var3, var4 + var11, var5 + 1)) { + this.setBlockAndMetadata(var1, var3, var4 + var11, var5 + 1, Block.vine.blockID, 4); + } + } + } + } + + if(this.vinesGrow) { + for(var11 = var4 - 3 + var6; var11 <= var4 + var6; ++var11) { + var12 = var11 - (var4 + var6); + var13 = 2 - var12 / 2; + + for(var14 = var3 - var13; var14 <= var3 + var13; ++var14) { + for(var15 = var5 - var13; var15 <= var5 + var13; ++var15) { + if(var1.getBlockId(var14, var11, var15) == Block.leaves.blockID) { + if(var2.nextInt(4) == 0 && var1.getBlockId(var14 - 1, var11, var15) == 0) { + this.growVines(var1, var14 - 1, var11, var15, 8); + } + + if(var2.nextInt(4) == 0 && var1.getBlockId(var14 + 1, var11, var15) == 0) { + this.growVines(var1, var14 + 1, var11, var15, 2); + } + + if(var2.nextInt(4) == 0 && var1.getBlockId(var14, var11, var15 - 1) == 0) { + this.growVines(var1, var14, var11, var15 - 1, 1); + } + + if(var2.nextInt(4) == 0 && var1.getBlockId(var14, var11, var15 + 1) == 0) { + this.growVines(var1, var14, var11, var15 + 1, 4); + } + } + } + } + } + + if(var2.nextInt(5) == 0 && var6 > 5) { + for(var11 = 0; var11 < 2; ++var11) { + for(var12 = 0; var12 < 4; ++var12) { + if(var2.nextInt(4 - var11) == 0) { + var13 = var2.nextInt(3); + this.setBlockAndMetadata(var1, var3 + Direction.offsetX[Direction.rotateOpposite[var12]], var4 + var6 - 5 + var11, var5 + Direction.offsetZ[Direction.rotateOpposite[var12]], Block.cocoaPlant.blockID, var13 << 2 | var12); + } + } + } + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } + + private void growVines(World var1, int var2, int var3, int var4, int var5) { + this.setBlockAndMetadata(var1, var2, var3, var4, Block.vine.blockID, var5); + int var6 = 4; + + while(true) { + --var3; + if(var1.getBlockId(var2, var3, var4) != 0 || var6 <= 0) { + return; + } + + this.setBlockAndMetadata(var1, var2, var3, var4, Block.vine.blockID, var5); + --var6; + } + } +} diff --git a/src/net/minecraft/src/WorldGenVines.java b/src/net/minecraft/src/WorldGenVines.java new file mode 100644 index 0000000..adaade3 --- /dev/null +++ b/src/net/minecraft/src/WorldGenVines.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenVines extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + int var6 = var3; + + for(int var7 = var5; var4 < 128; ++var4) { + if(var1.isAirBlock(var3, var4, var5)) { + for(int var8 = 2; var8 <= 5; ++var8) { + if(Block.vine.canPlaceBlockOnSide(var1, var3, var4, var5, var8)) { + var1.setBlock(var3, var4, var5, Block.vine.blockID, 1 << Direction.facingToDirection[Facing.oppositeSide[var8]], 2); + break; + } + } + } else { + var3 = var6 + var2.nextInt(4) - var2.nextInt(4); + var5 = var7 + var2.nextInt(4) - var2.nextInt(4); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenWaterlily.java b/src/net/minecraft/src/WorldGenWaterlily.java new file mode 100644 index 0000000..0ee3eb0 --- /dev/null +++ b/src/net/minecraft/src/WorldGenWaterlily.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenWaterlily extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 10; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.isAirBlock(var7, var8, var9) && Block.waterlily.canPlaceBlockAt(var1, var7, var8, var9)) { + var1.setBlock(var7, var8, var9, Block.waterlily.blockID, 0, 2); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenerator.java b/src/net/minecraft/src/WorldGenerator.java new file mode 100644 index 0000000..0fe326b --- /dev/null +++ b/src/net/minecraft/src/WorldGenerator.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +import java.util.Random; + +public abstract class WorldGenerator { + private final boolean doBlockNotify; + + public WorldGenerator() { + this.doBlockNotify = false; + } + + public WorldGenerator(boolean var1) { + this.doBlockNotify = var1; + } + + public abstract boolean generate(World var1, Random var2, int var3, int var4, int var5); + + public void setScale(double var1, double var3, double var5) { + } + + protected void setBlock(World var1, int var2, int var3, int var4, int var5) { + this.setBlockAndMetadata(var1, var2, var3, var4, var5, 0); + } + + protected void setBlockAndMetadata(World var1, int var2, int var3, int var4, int var5, int var6) { + if(this.doBlockNotify) { + var1.setBlock(var2, var3, var4, var5, var6, 3); + } else { + var1.setBlock(var2, var3, var4, var5, var6, 2); + } + + } +} diff --git a/src/net/minecraft/src/WorldGeneratorBonusChest.java b/src/net/minecraft/src/WorldGeneratorBonusChest.java new file mode 100644 index 0000000..fef6345 --- /dev/null +++ b/src/net/minecraft/src/WorldGeneratorBonusChest.java @@ -0,0 +1,63 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGeneratorBonusChest extends WorldGenerator { + private final WeightedRandomChestContent[] theBonusChestGenerator; + private final int itemsToGenerateInBonusChest; + + public WorldGeneratorBonusChest(WeightedRandomChestContent[] var1, int var2) { + this.theBonusChestGenerator = var1; + this.itemsToGenerateInBonusChest = var2; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + boolean var6 = false; + + while(true) { + int var12 = var1.getBlockId(var3, var4, var5); + if(var12 != 0 && var12 != Block.leaves.blockID || var4 <= 1) { + if(var4 < 1) { + return false; + } else { + ++var4; + + for(int var7 = 0; var7 < 4; ++var7) { + int var8 = var3 + var2.nextInt(4) - var2.nextInt(4); + int var9 = var4 + var2.nextInt(3) - var2.nextInt(3); + int var10 = var5 + var2.nextInt(4) - var2.nextInt(4); + if(var1.isAirBlock(var8, var9, var10) && var1.doesBlockHaveSolidTopSurface(var8, var9 - 1, var10)) { + var1.setBlock(var8, var9, var10, Block.chest.blockID, 0, 2); + TileEntityChest var11 = (TileEntityChest)var1.getBlockTileEntity(var8, var9, var10); + if(var11 != null && var11 != null) { + WeightedRandomChestContent.generateChestContents(var2, this.theBonusChestGenerator, var11, this.itemsToGenerateInBonusChest); + } + + if(var1.isAirBlock(var8 - 1, var9, var10) && var1.doesBlockHaveSolidTopSurface(var8 - 1, var9 - 1, var10)) { + var1.setBlock(var8 - 1, var9, var10, Block.torchWood.blockID, 0, 2); + } + + if(var1.isAirBlock(var8 + 1, var9, var10) && var1.doesBlockHaveSolidTopSurface(var8 - 1, var9 - 1, var10)) { + var1.setBlock(var8 + 1, var9, var10, Block.torchWood.blockID, 0, 2); + } + + if(var1.isAirBlock(var8, var9, var10 - 1) && var1.doesBlockHaveSolidTopSurface(var8 - 1, var9 - 1, var10)) { + var1.setBlock(var8, var9, var10 - 1, Block.torchWood.blockID, 0, 2); + } + + if(var1.isAirBlock(var8, var9, var10 + 1) && var1.doesBlockHaveSolidTopSurface(var8 - 1, var9 - 1, var10)) { + var1.setBlock(var8, var9, var10 + 1, Block.torchWood.blockID, 0, 2); + } + + return true; + } + } + + return false; + } + } + + --var4; + } + } +} diff --git a/src/net/minecraft/src/WorldInfo.java b/src/net/minecraft/src/WorldInfo.java new file mode 100644 index 0000000..c228866 --- /dev/null +++ b/src/net/minecraft/src/WorldInfo.java @@ -0,0 +1,420 @@ +package net.minecraft.src; + +public class WorldInfo { + private long randomSeed; + private WorldType terrainType = WorldType.DEFAULT; + private String generatorOptions = ""; + private int spawnX; + private int spawnY; + private int spawnZ; + private long totalTime; + private long worldTime; + private long lastTimePlayed; + private long sizeOnDisk; + private NBTTagCompound playerTag; + private int dimension; + private String levelName; + private int saveVersion; + private boolean raining; + private int rainTime; + private boolean thundering; + private int thunderTime; + private EnumGameType theGameType; + private boolean mapFeaturesEnabled; + private boolean hardcore; + private boolean allowCommands; + private boolean initialized; + private GameRules theGameRules = new GameRules(); + + protected WorldInfo() { + } + + public WorldInfo(NBTTagCompound var1) { + this.randomSeed = var1.getLong("RandomSeed"); + if(var1.hasKey("generatorName")) { + String var2 = var1.getString("generatorName"); + this.terrainType = WorldType.parseWorldType(var2); + if(this.terrainType == null) { + this.terrainType = WorldType.DEFAULT; + } else if(this.terrainType.isVersioned()) { + int var3 = 0; + if(var1.hasKey("generatorVersion")) { + var3 = var1.getInteger("generatorVersion"); + } + + this.terrainType = this.terrainType.getWorldTypeForGeneratorVersion(var3); + } + + if(var1.hasKey("generatorOptions")) { + this.generatorOptions = var1.getString("generatorOptions"); + } + } + + this.theGameType = EnumGameType.getByID(var1.getInteger("GameType")); + if(var1.hasKey("MapFeatures")) { + this.mapFeaturesEnabled = var1.getBoolean("MapFeatures"); + } else { + this.mapFeaturesEnabled = true; + } + + this.spawnX = var1.getInteger("SpawnX"); + this.spawnY = var1.getInteger("SpawnY"); + this.spawnZ = var1.getInteger("SpawnZ"); + this.totalTime = var1.getLong("Time"); + if(var1.hasKey("DayTime")) { + this.worldTime = var1.getLong("DayTime"); + } else { + this.worldTime = this.totalTime; + } + + this.lastTimePlayed = var1.getLong("LastPlayed"); + this.sizeOnDisk = var1.getLong("SizeOnDisk"); + this.levelName = var1.getString("LevelName"); + this.saveVersion = var1.getInteger("version"); + this.rainTime = var1.getInteger("rainTime"); + this.raining = var1.getBoolean("raining"); + this.thunderTime = var1.getInteger("thunderTime"); + this.thundering = var1.getBoolean("thundering"); + this.hardcore = var1.getBoolean("hardcore"); + if(var1.hasKey("initialized")) { + this.initialized = var1.getBoolean("initialized"); + } else { + this.initialized = true; + } + + if(var1.hasKey("allowCommands")) { + this.allowCommands = var1.getBoolean("allowCommands"); + } else { + this.allowCommands = this.theGameType == EnumGameType.CREATIVE; + } + + if(var1.hasKey("Player")) { + this.playerTag = var1.getCompoundTag("Player"); + this.dimension = this.playerTag.getInteger("Dimension"); + } + + if(var1.hasKey("GameRules")) { + this.theGameRules.readGameRulesFromNBT(var1.getCompoundTag("GameRules")); + } + + } + + public WorldInfo(WorldSettings var1, String var2) { + this.randomSeed = var1.getSeed(); + this.theGameType = var1.getGameType(); + this.mapFeaturesEnabled = var1.isMapFeaturesEnabled(); + this.levelName = var2; + this.hardcore = var1.getHardcoreEnabled(); + this.terrainType = var1.getTerrainType(); + this.generatorOptions = var1.func_82749_j(); + this.allowCommands = var1.areCommandsAllowed(); + this.initialized = false; + } + + public WorldInfo(WorldInfo var1) { + this.randomSeed = var1.randomSeed; + this.terrainType = var1.terrainType; + this.generatorOptions = var1.generatorOptions; + this.theGameType = var1.theGameType; + this.mapFeaturesEnabled = var1.mapFeaturesEnabled; + this.spawnX = var1.spawnX; + this.spawnY = var1.spawnY; + this.spawnZ = var1.spawnZ; + this.totalTime = var1.totalTime; + this.worldTime = var1.worldTime; + this.lastTimePlayed = var1.lastTimePlayed; + this.sizeOnDisk = var1.sizeOnDisk; + this.playerTag = var1.playerTag; + this.dimension = var1.dimension; + this.levelName = var1.levelName; + this.saveVersion = var1.saveVersion; + this.rainTime = var1.rainTime; + this.raining = var1.raining; + this.thunderTime = var1.thunderTime; + this.thundering = var1.thundering; + this.hardcore = var1.hardcore; + this.allowCommands = var1.allowCommands; + this.initialized = var1.initialized; + this.theGameRules = var1.theGameRules; + } + + public NBTTagCompound getNBTTagCompound() { + NBTTagCompound var1 = new NBTTagCompound(); + this.updateTagCompound(var1, this.playerTag); + return var1; + } + + public NBTTagCompound cloneNBTCompound(NBTTagCompound var1) { + NBTTagCompound var2 = new NBTTagCompound(); + this.updateTagCompound(var2, var1); + return var2; + } + + private void updateTagCompound(NBTTagCompound var1, NBTTagCompound var2) { + var1.setLong("RandomSeed", this.randomSeed); + var1.setString("generatorName", this.terrainType.getWorldTypeName()); + var1.setInteger("generatorVersion", this.terrainType.getGeneratorVersion()); + var1.setString("generatorOptions", this.generatorOptions); + var1.setInteger("GameType", this.theGameType.getID()); + var1.setBoolean("MapFeatures", this.mapFeaturesEnabled); + var1.setInteger("SpawnX", this.spawnX); + var1.setInteger("SpawnY", this.spawnY); + var1.setInteger("SpawnZ", this.spawnZ); + var1.setLong("Time", this.totalTime); + var1.setLong("DayTime", this.worldTime); + var1.setLong("SizeOnDisk", this.sizeOnDisk); + var1.setLong("LastPlayed", System.currentTimeMillis()); + var1.setString("LevelName", this.levelName); + var1.setInteger("version", this.saveVersion); + var1.setInteger("rainTime", this.rainTime); + var1.setBoolean("raining", this.raining); + var1.setInteger("thunderTime", this.thunderTime); + var1.setBoolean("thundering", this.thundering); + var1.setBoolean("hardcore", this.hardcore); + var1.setBoolean("allowCommands", this.allowCommands); + var1.setBoolean("initialized", this.initialized); + var1.setCompoundTag("GameRules", this.theGameRules.writeGameRulesToNBT()); + if(var2 != null) { + var1.setCompoundTag("Player", var2); + } + + } + + public long getSeed() { + return this.randomSeed; + } + + public int getSpawnX() { + return this.spawnX; + } + + public int getSpawnY() { + return this.spawnY; + } + + public int getSpawnZ() { + return this.spawnZ; + } + + public long getWorldTotalTime() { + return this.totalTime; + } + + public long getWorldTime() { + return this.worldTime; + } + + public long getSizeOnDisk() { + return this.sizeOnDisk; + } + + public NBTTagCompound getPlayerNBTTagCompound() { + return this.playerTag; + } + + public int getDimension() { + return this.dimension; + } + + public void setSpawnX(int var1) { + this.spawnX = var1; + } + + public void setSpawnY(int var1) { + this.spawnY = var1; + } + + public void setSpawnZ(int var1) { + this.spawnZ = var1; + } + + public void incrementTotalWorldTime(long var1) { + this.totalTime = var1; + } + + public void setWorldTime(long var1) { + this.worldTime = var1; + } + + public void setSpawnPosition(int var1, int var2, int var3) { + this.spawnX = var1; + this.spawnY = var2; + this.spawnZ = var3; + } + + public String getWorldName() { + return this.levelName; + } + + public void setWorldName(String var1) { + this.levelName = var1; + } + + public int getSaveVersion() { + return this.saveVersion; + } + + public void setSaveVersion(int var1) { + this.saveVersion = var1; + } + + public long getLastTimePlayed() { + return this.lastTimePlayed; + } + + public boolean isThundering() { + return this.thundering; + } + + public void setThundering(boolean var1) { + this.thundering = var1; + } + + public int getThunderTime() { + return this.thunderTime; + } + + public void setThunderTime(int var1) { + this.thunderTime = var1; + } + + public boolean isRaining() { + return this.raining; + } + + public void setRaining(boolean var1) { + this.raining = var1; + } + + public int getRainTime() { + return this.rainTime; + } + + public void setRainTime(int var1) { + this.rainTime = var1; + } + + public EnumGameType getGameType() { + return this.theGameType; + } + + public boolean isMapFeaturesEnabled() { + return this.mapFeaturesEnabled; + } + + public void setGameType(EnumGameType var1) { + this.theGameType = var1; + } + + public boolean isHardcoreModeEnabled() { + return this.hardcore; + } + + public WorldType getTerrainType() { + return this.terrainType; + } + + public void setTerrainType(WorldType var1) { + this.terrainType = var1; + } + + public String getGeneratorOptions() { + return this.generatorOptions; + } + + public boolean areCommandsAllowed() { + return this.allowCommands; + } + + public boolean isInitialized() { + return this.initialized; + } + + public void setServerInitialized(boolean var1) { + this.initialized = var1; + } + + public GameRules getGameRulesInstance() { + return this.theGameRules; + } + + public void addToCrashReport(CrashReportCategory var1) { + var1.addCrashSectionCallable("Level seed", new CallableLevelSeed(this)); + var1.addCrashSectionCallable("Level generator", new CallableLevelGenerator(this)); + var1.addCrashSectionCallable("Level generator options", new CallableLevelGeneratorOptions(this)); + var1.addCrashSectionCallable("Level spawn location", new CallableLevelSpawnLocation(this)); + var1.addCrashSectionCallable("Level time", new CallableLevelTime(this)); + var1.addCrashSectionCallable("Level dimension", new CallableLevelDimension(this)); + var1.addCrashSectionCallable("Level storage version", new CallableLevelStorageVersion(this)); + var1.addCrashSectionCallable("Level weather", new CallableLevelWeather(this)); + var1.addCrashSectionCallable("Level game mode", new CallableLevelGamemode(this)); + } + + static WorldType getTerrainTypeOfWorld(WorldInfo var0) { + return var0.terrainType; + } + + static boolean getMapFeaturesEnabled(WorldInfo var0) { + return var0.mapFeaturesEnabled; + } + + static String getWorldGeneratorOptions(WorldInfo var0) { + return var0.generatorOptions; + } + + static int getSpawnXCoordinate(WorldInfo var0) { + return var0.spawnX; + } + + static int getSpawnYCoordinate(WorldInfo var0) { + return var0.spawnY; + } + + static int getSpawnZCoordinate(WorldInfo var0) { + return var0.spawnZ; + } + + static long func_85126_g(WorldInfo var0) { + return var0.totalTime; + } + + static long getWorldTime(WorldInfo var0) { + return var0.worldTime; + } + + static int func_85122_i(WorldInfo var0) { + return var0.dimension; + } + + static int getSaveVersion(WorldInfo var0) { + return var0.saveVersion; + } + + static int getRainTime(WorldInfo var0) { + return var0.rainTime; + } + + static boolean getRaining(WorldInfo var0) { + return var0.raining; + } + + static int getThunderTime(WorldInfo var0) { + return var0.thunderTime; + } + + static boolean getThundering(WorldInfo var0) { + return var0.thundering; + } + + static EnumGameType getGameType(WorldInfo var0) { + return var0.theGameType; + } + + static boolean func_85117_p(WorldInfo var0) { + return var0.hardcore; + } + + static boolean func_85131_q(WorldInfo var0) { + return var0.allowCommands; + } +} diff --git a/src/net/minecraft/src/WorldManager.java b/src/net/minecraft/src/WorldManager.java new file mode 100644 index 0000000..e4303be --- /dev/null +++ b/src/net/minecraft/src/WorldManager.java @@ -0,0 +1,71 @@ +package net.minecraft.src; + +import java.util.Iterator; +import net.minecraft.server.MinecraftServer; + +public class WorldManager implements IWorldAccess { + private MinecraftServer mcServer; + private WorldServer theWorldServer; + + public WorldManager(MinecraftServer var1, WorldServer var2) { + this.mcServer = var1; + this.theWorldServer = var2; + } + + public void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12) { + } + + public void onEntityCreate(Entity var1) { + this.theWorldServer.getEntityTracker().addEntityToTracker(var1); + } + + public void onEntityDestroy(Entity var1) { + this.theWorldServer.getEntityTracker().removeEntityFromAllTrackingPlayers(var1); + } + + public void playSound(String var1, double var2, double var4, double var6, float var8, float var9) { + this.mcServer.getConfigurationManager().sendToAllNear(var2, var4, var6, var8 > 1.0F ? (double)(16.0F * var8) : 16.0D, this.theWorldServer.provider.dimensionId, new Packet62LevelSound(var1, var2, var4, var6, var8, var9)); + } + + public void playSoundToNearExcept(EntityPlayer var1, String var2, double var3, double var5, double var7, float var9, float var10) { + this.mcServer.getConfigurationManager().sendToAllNearExcept(var1, var3, var5, var7, var9 > 1.0F ? (double)(16.0F * var9) : 16.0D, this.theWorldServer.provider.dimensionId, new Packet62LevelSound(var2, var3, var5, var7, var9, var10)); + } + + public void markBlockRangeForRenderUpdate(int var1, int var2, int var3, int var4, int var5, int var6) { + } + + public void markBlockForUpdate(int var1, int var2, int var3) { + this.theWorldServer.getPlayerManager().flagChunkForUpdate(var1, var2, var3); + } + + public void markBlockForRenderUpdate(int var1, int var2, int var3) { + } + + public void playRecord(String var1, int var2, int var3, int var4) { + } + + public void playAuxSFX(EntityPlayer var1, int var2, int var3, int var4, int var5, int var6) { + this.mcServer.getConfigurationManager().sendToAllNearExcept(var1, (double)var3, (double)var4, (double)var5, 64.0D, this.theWorldServer.provider.dimensionId, new Packet61DoorChange(var2, var3, var4, var5, var6, false)); + } + + public void broadcastSound(int var1, int var2, int var3, int var4, int var5) { + this.mcServer.getConfigurationManager().sendPacketToAllPlayers(new Packet61DoorChange(var1, var2, var3, var4, var5, true)); + } + + public void destroyBlockPartially(int var1, int var2, int var3, int var4, int var5) { + Iterator var6 = this.mcServer.getConfigurationManager().playerEntityList.iterator(); + + while(var6.hasNext()) { + EntityPlayerMP var7 = (EntityPlayerMP)var6.next(); + if(var7 != null && var7.worldObj == this.theWorldServer && var7.entityId != var1) { + double var8 = (double)var2 - var7.posX; + double var10 = (double)var3 - var7.posY; + double var12 = (double)var4 - var7.posZ; + if(var8 * var8 + var10 * var10 + var12 * var12 < 1024.0D) { + var7.playerNetServerHandler.sendPacketToPlayer(new Packet55BlockDestroy(var1, var2, var3, var4, var5)); + } + } + } + + } +} diff --git a/src/net/minecraft/src/WorldProvider.java b/src/net/minecraft/src/WorldProvider.java new file mode 100644 index 0000000..2ba979f --- /dev/null +++ b/src/net/minecraft/src/WorldProvider.java @@ -0,0 +1,150 @@ +package net.minecraft.src; + +public abstract class WorldProvider { + public World worldObj; + public WorldType terrainType; + public String field_82913_c; + public WorldChunkManager worldChunkMgr; + public boolean isHellWorld = false; + public boolean hasNoSky = false; + public float[] lightBrightnessTable = new float[16]; + public int dimensionId = 0; + private float[] colorsSunriseSunset = new float[4]; + + public final void registerWorld(World var1) { + this.worldObj = var1; + this.terrainType = var1.getWorldInfo().getTerrainType(); + this.field_82913_c = var1.getWorldInfo().getGeneratorOptions(); + this.registerWorldChunkManager(); + this.generateLightBrightnessTable(); + } + + protected void generateLightBrightnessTable() { + float var1 = 0.0F; + + for(int var2 = 0; var2 <= 15; ++var2) { + float var3 = 1.0F - (float)var2 / 15.0F; + this.lightBrightnessTable[var2] = (1.0F - var3) / (var3 * 3.0F + 1.0F) * (1.0F - var1) + var1; + } + + } + + protected void registerWorldChunkManager() { + if(this.worldObj.getWorldInfo().getTerrainType() == WorldType.FLAT) { + FlatGeneratorInfo var1 = FlatGeneratorInfo.createFlatGeneratorFromString(this.worldObj.getWorldInfo().getGeneratorOptions()); + this.worldChunkMgr = new WorldChunkManagerHell(BiomeGenBase.biomeList[var1.getBiome()], 0.5F, 0.5F); + } else { + this.worldChunkMgr = new WorldChunkManager(this.worldObj); + } + + } + + public IChunkProvider createChunkGenerator() { + return (IChunkProvider)(this.terrainType == WorldType.FLAT ? new ChunkProviderFlat(this.worldObj, this.worldObj.getSeed(), this.worldObj.getWorldInfo().isMapFeaturesEnabled(), this.field_82913_c) : new ChunkProviderGenerate(this.worldObj, this.worldObj.getSeed(), this.worldObj.getWorldInfo().isMapFeaturesEnabled())); + } + + public boolean canCoordinateBeSpawn(int var1, int var2) { + int var3 = this.worldObj.getFirstUncoveredBlock(var1, var2); + return var3 == Block.grass.blockID; + } + + public float calculateCelestialAngle(long var1, float var3) { + int var4 = (int)(var1 % 24000L); + float var5 = ((float)var4 + var3) / 24000.0F - 0.25F; + if(var5 < 0.0F) { + ++var5; + } + + if(var5 > 1.0F) { + --var5; + } + + float var6 = var5; + var5 = 1.0F - (float)((Math.cos((double)var5 * Math.PI) + 1.0D) / 2.0D); + var5 = var6 + (var5 - var6) / 3.0F; + return var5; + } + + public int getMoonPhase(long var1) { + return (int)(var1 / 24000L) % 8; + } + + public boolean isSurfaceWorld() { + return true; + } + + public float[] calcSunriseSunsetColors(float var1, float var2) { + float var3 = 0.4F; + float var4 = MathHelper.cos(var1 * (float)Math.PI * 2.0F) - 0.0F; + float var5 = -0.0F; + if(var4 >= var5 - var3 && var4 <= var5 + var3) { + float var6 = (var4 - var5) / var3 * 0.5F + 0.5F; + float var7 = 1.0F - (1.0F - MathHelper.sin(var6 * (float)Math.PI)) * 0.99F; + var7 *= var7; + this.colorsSunriseSunset[0] = var6 * 0.3F + 0.7F; + this.colorsSunriseSunset[1] = var6 * var6 * 0.7F + 0.2F; + this.colorsSunriseSunset[2] = var6 * var6 * 0.0F + 0.2F; + this.colorsSunriseSunset[3] = var7; + return this.colorsSunriseSunset; + } else { + return null; + } + } + + public Vec3 getFogColor(float var1, float var2) { + float var3 = MathHelper.cos(var1 * (float)Math.PI * 2.0F) * 2.0F + 0.5F; + if(var3 < 0.0F) { + var3 = 0.0F; + } + + if(var3 > 1.0F) { + var3 = 1.0F; + } + + float var4 = 192.0F / 255.0F; + float var5 = 216.0F / 255.0F; + float var6 = 1.0F; + var4 *= var3 * 0.94F + 0.06F; + var5 *= var3 * 0.94F + 0.06F; + var6 *= var3 * 0.91F + 0.09F; + return this.worldObj.getWorldVec3Pool().getVecFromPool((double)var4, (double)var5, (double)var6); + } + + public boolean canRespawnHere() { + return true; + } + + public static WorldProvider getProviderForDimension(int var0) { + return (WorldProvider)(var0 == -1 ? new WorldProviderHell() : (var0 == 0 ? new WorldProviderSurface() : (var0 == 1 ? new WorldProviderEnd() : null))); + } + + public float getCloudHeight() { + return 128.0F; + } + + public boolean isSkyColored() { + return true; + } + + public ChunkCoordinates getEntrancePortalLocation() { + return null; + } + + public int getAverageGroundLevel() { + return this.terrainType == WorldType.FLAT ? 4 : 64; + } + + public boolean getWorldHasVoidParticles() { + return this.terrainType != WorldType.FLAT && !this.hasNoSky; + } + + public double getVoidFogYFactor() { + return this.terrainType == WorldType.FLAT ? 1.0D : 1.0D / 32.0D; + } + + public boolean doesXZShowFog(int var1, int var2) { + return false; + } + + public abstract String getDimensionName(); +} diff --git a/src/net/minecraft/src/WorldProviderEnd.java b/src/net/minecraft/src/WorldProviderEnd.java new file mode 100644 index 0000000..750e778 --- /dev/null +++ b/src/net/minecraft/src/WorldProviderEnd.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +public class WorldProviderEnd extends WorldProvider { + public void registerWorldChunkManager() { + this.worldChunkMgr = new WorldChunkManagerHell(BiomeGenBase.sky, 0.5F, 0.0F); + this.dimensionId = 1; + this.hasNoSky = true; + } + + public IChunkProvider createChunkGenerator() { + return new ChunkProviderEnd(this.worldObj, this.worldObj.getSeed()); + } + + public float calculateCelestialAngle(long var1, float var3) { + return 0.0F; + } + + public float[] calcSunriseSunsetColors(float var1, float var2) { + return null; + } + + public Vec3 getFogColor(float var1, float var2) { + int var3 = 10518688; + float var4 = MathHelper.cos(var1 * (float)Math.PI * 2.0F) * 2.0F + 0.5F; + if(var4 < 0.0F) { + var4 = 0.0F; + } + + if(var4 > 1.0F) { + var4 = 1.0F; + } + + float var5 = (float)(var3 >> 16 & 255) / 255.0F; + float var6 = (float)(var3 >> 8 & 255) / 255.0F; + float var7 = (float)(var3 & 255) / 255.0F; + var5 *= var4 * 0.0F + 0.15F; + var6 *= var4 * 0.0F + 0.15F; + var7 *= var4 * 0.0F + 0.15F; + return this.worldObj.getWorldVec3Pool().getVecFromPool((double)var5, (double)var6, (double)var7); + } + + public boolean isSkyColored() { + return false; + } + + public boolean canRespawnHere() { + return false; + } + + public boolean isSurfaceWorld() { + return false; + } + + public float getCloudHeight() { + return 8.0F; + } + + public boolean canCoordinateBeSpawn(int var1, int var2) { + int var3 = this.worldObj.getFirstUncoveredBlock(var1, var2); + return var3 == 0 ? false : Block.blocksList[var3].blockMaterial.blocksMovement(); + } + + public ChunkCoordinates getEntrancePortalLocation() { + return new ChunkCoordinates(100, 50, 0); + } + + public int getAverageGroundLevel() { + return 50; + } + + public boolean doesXZShowFog(int var1, int var2) { + return true; + } + + public String getDimensionName() { + return "The End"; + } +} diff --git a/src/net/minecraft/src/WorldProviderHell.java b/src/net/minecraft/src/WorldProviderHell.java new file mode 100644 index 0000000..832240d --- /dev/null +++ b/src/net/minecraft/src/WorldProviderHell.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +public class WorldProviderHell extends WorldProvider { + public void registerWorldChunkManager() { + this.worldChunkMgr = new WorldChunkManagerHell(BiomeGenBase.hell, 1.0F, 0.0F); + this.isHellWorld = true; + this.hasNoSky = true; + this.dimensionId = -1; + } + + public Vec3 getFogColor(float var1, float var2) { + return this.worldObj.getWorldVec3Pool().getVecFromPool((double)0.2F, (double)0.03F, (double)0.03F); + } + + protected void generateLightBrightnessTable() { + float var1 = 0.1F; + + for(int var2 = 0; var2 <= 15; ++var2) { + float var3 = 1.0F - (float)var2 / 15.0F; + this.lightBrightnessTable[var2] = (1.0F - var3) / (var3 * 3.0F + 1.0F) * (1.0F - var1) + var1; + } + + } + + public IChunkProvider createChunkGenerator() { + return new ChunkProviderHell(this.worldObj, this.worldObj.getSeed()); + } + + public boolean isSurfaceWorld() { + return false; + } + + public boolean canCoordinateBeSpawn(int var1, int var2) { + return false; + } + + public float calculateCelestialAngle(long var1, float var3) { + return 0.5F; + } + + public boolean canRespawnHere() { + return false; + } + + public boolean doesXZShowFog(int var1, int var2) { + return true; + } + + public String getDimensionName() { + return "Nether"; + } +} diff --git a/src/net/minecraft/src/WorldProviderSurface.java b/src/net/minecraft/src/WorldProviderSurface.java new file mode 100644 index 0000000..0601b3f --- /dev/null +++ b/src/net/minecraft/src/WorldProviderSurface.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class WorldProviderSurface extends WorldProvider { + public String getDimensionName() { + return "Overworld"; + } +} diff --git a/src/net/minecraft/src/WorldRenderer.java b/src/net/minecraft/src/WorldRenderer.java new file mode 100644 index 0000000..292a50c --- /dev/null +++ b/src/net/minecraft/src/WorldRenderer.java @@ -0,0 +1,215 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import org.lwjgl.opengl.GL11; + +public class WorldRenderer { + public World worldObj; + private int glRenderList = -1; + private static Tessellator tessellator = Tessellator.instance; + public static int chunksUpdated = 0; + public int posX; + public int posY; + public int posZ; + public int posXMinus; + public int posYMinus; + public int posZMinus; + public int posXClip; + public int posYClip; + public int posZClip; + public boolean isInFrustum = false; + public boolean[] skipRenderPass = new boolean[2]; + public int posXPlus; + public int posYPlus; + public int posZPlus; + public boolean needsUpdate; + public AxisAlignedBB rendererBoundingBox; + public int chunkIndex; + public boolean isVisible = true; + public boolean isWaitingOnOcclusionQuery; + public int glOcclusionQuery; + public boolean isChunkLit; + private boolean isInitialized = false; + public List tileEntityRenderers = new ArrayList(); + private List tileEntities; + private int bytesDrawn; + + public WorldRenderer(World var1, List var2, int var3, int var4, int var5, int var6) { + this.worldObj = var1; + this.tileEntities = var2; + this.glRenderList = var6; + this.posX = -999; + this.setPosition(var3, var4, var5); + this.needsUpdate = false; + } + + public void setPosition(int var1, int var2, int var3) { + if(var1 != this.posX || var2 != this.posY || var3 != this.posZ) { + this.setDontDraw(); + this.posX = var1; + this.posY = var2; + this.posZ = var3; + this.posXPlus = var1 + 8; + this.posYPlus = var2 + 8; + this.posZPlus = var3 + 8; + this.posXClip = var1 & 1023; + this.posYClip = var2; + this.posZClip = var3 & 1023; + this.posXMinus = var1 - this.posXClip; + this.posYMinus = var2 - this.posYClip; + this.posZMinus = var3 - this.posZClip; + float var4 = 6.0F; + this.rendererBoundingBox = AxisAlignedBB.getBoundingBox((double)((float)var1 - var4), (double)((float)var2 - var4), (double)((float)var3 - var4), (double)((float)(var1 + 16) + var4), (double)((float)(var2 + 16) + var4), (double)((float)(var3 + 16) + var4)); + GL11.glNewList(this.glRenderList + 2, GL11.GL_COMPILE); + RenderItem.renderAABB(AxisAlignedBB.getAABBPool().getAABB((double)((float)this.posXClip - var4), (double)((float)this.posYClip - var4), (double)((float)this.posZClip - var4), (double)((float)(this.posXClip + 16) + var4), (double)((float)(this.posYClip + 16) + var4), (double)((float)(this.posZClip + 16) + var4))); + GL11.glEndList(); + this.markDirty(); + } + } + + private void setupGLTranslation() { + GL11.glTranslatef((float)this.posXClip, (float)this.posYClip, (float)this.posZClip); + } + + public void updateRenderer() { + if(this.needsUpdate) { + this.needsUpdate = false; + int var1 = this.posX; + int var2 = this.posY; + int var3 = this.posZ; + int var4 = this.posX + 16; + int var5 = this.posY + 16; + int var6 = this.posZ + 16; + + for(int var7 = 0; var7 < 2; ++var7) { + this.skipRenderPass[var7] = true; + } + + Chunk.isLit = false; + HashSet var21 = new HashSet(); + var21.addAll(this.tileEntityRenderers); + this.tileEntityRenderers.clear(); + byte var8 = 1; + ChunkCache var9 = new ChunkCache(this.worldObj, var1 - var8, var2 - var8, var3 - var8, var4 + var8, var5 + var8, var6 + var8, var8); + if(!var9.extendedLevelsInChunkCache()) { + ++chunksUpdated; + RenderBlocks var10 = new RenderBlocks(var9); + this.bytesDrawn = 0; + + for(int var11 = 0; var11 < 2; ++var11) { + boolean var12 = false; + boolean var13 = false; + boolean var14 = false; + + for(int var15 = var2; var15 < var5; ++var15) { + for(int var16 = var3; var16 < var6; ++var16) { + for(int var17 = var1; var17 < var4; ++var17) { + int var18 = var9.getBlockId(var17, var15, var16); + if(var18 > 0) { + if(!var14) { + var14 = true; + GL11.glNewList(this.glRenderList + var11, GL11.GL_COMPILE); + GL11.glPushMatrix(); + this.setupGLTranslation(); + float var19 = 1.000001F; + GL11.glTranslatef(-8.0F, -8.0F, -8.0F); + GL11.glScalef(var19, var19, var19); + GL11.glTranslatef(8.0F, 8.0F, 8.0F); + tessellator.startDrawingQuads(); + tessellator.setTranslation((double)(-this.posX), (double)(-this.posY), (double)(-this.posZ)); + } + + Block var23 = Block.blocksList[var18]; + if(var23 != null) { + if(var11 == 0 && var23.hasTileEntity()) { + TileEntity var20 = var9.getBlockTileEntity(var17, var15, var16); + if(TileEntityRenderer.instance.hasSpecialRenderer(var20)) { + this.tileEntityRenderers.add(var20); + } + } + + int var24 = var23.getRenderBlockPass(); + if(var24 != var11) { + var12 = true; + } else if(var24 == var11) { + var13 |= var10.renderBlockByRenderType(var23, var17, var15, var16); + } + } + } + } + } + } + + if(var14) { + this.bytesDrawn += tessellator.draw(); + GL11.glPopMatrix(); + GL11.glEndList(); + tessellator.setTranslation(0.0D, 0.0D, 0.0D); + } else { + var13 = false; + } + + if(var13) { + this.skipRenderPass[var11] = false; + } + + if(!var12) { + break; + } + } + } + + HashSet var22 = new HashSet(); + var22.addAll(this.tileEntityRenderers); + var22.removeAll(var21); + this.tileEntities.addAll(var22); + var21.removeAll(this.tileEntityRenderers); + this.tileEntities.removeAll(var21); + this.isChunkLit = Chunk.isLit; + this.isInitialized = true; + } + } + + public float distanceToEntitySquared(Entity var1) { + float var2 = (float)(var1.posX - (double)this.posXPlus); + float var3 = (float)(var1.posY - (double)this.posYPlus); + float var4 = (float)(var1.posZ - (double)this.posZPlus); + return var2 * var2 + var3 * var3 + var4 * var4; + } + + public void setDontDraw() { + for(int var1 = 0; var1 < 2; ++var1) { + this.skipRenderPass[var1] = true; + } + + this.isInFrustum = false; + this.isInitialized = false; + } + + public void stopRendering() { + this.setDontDraw(); + this.worldObj = null; + } + + public int getGLCallListForPass(int var1) { + return !this.isInFrustum ? -1 : (!this.skipRenderPass[var1] ? this.glRenderList + var1 : -1); + } + + public void updateInFrustum(ICamera var1) { + this.isInFrustum = var1.isBoundingBoxInFrustum(this.rendererBoundingBox); + } + + public void callOcclusionQueryList() { + GL11.glCallList(this.glRenderList + 2); + } + + public boolean skipAllRenderPasses() { + return !this.isInitialized ? false : this.skipRenderPass[0] && this.skipRenderPass[1]; + } + + public void markDirty() { + this.needsUpdate = true; + } +} diff --git a/src/net/minecraft/src/WorldSavedData.java b/src/net/minecraft/src/WorldSavedData.java new file mode 100644 index 0000000..f44fca7 --- /dev/null +++ b/src/net/minecraft/src/WorldSavedData.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public abstract class WorldSavedData { + public final String mapName; + private boolean dirty; + + public WorldSavedData(String var1) { + this.mapName = var1; + } + + public abstract void readFromNBT(NBTTagCompound var1); + + public abstract void writeToNBT(NBTTagCompound var1); + + public void markDirty() { + this.setDirty(true); + } + + public void setDirty(boolean var1) { + this.dirty = var1; + } + + public boolean isDirty() { + return this.dirty; + } +} diff --git a/src/net/minecraft/src/WorldServer.java b/src/net/minecraft/src/WorldServer.java new file mode 100644 index 0000000..872e83c --- /dev/null +++ b/src/net/minecraft/src/WorldServer.java @@ -0,0 +1,725 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import java.util.Set; +import java.util.TreeSet; +import net.minecraft.server.MinecraftServer; + +public class WorldServer extends World { + private final MinecraftServer mcServer; + private final EntityTracker theEntityTracker; + private final PlayerManager thePlayerManager; + private Set field_73064_N; + private TreeSet pendingTickListEntries; + public ChunkProviderServer theChunkProviderServer; + public boolean canNotSave; + private boolean allPlayersSleeping; + private int updateEntityTick = 0; + private final Teleporter field_85177_Q; + private ServerBlockEventList[] blockEventCache = new ServerBlockEventList[]{new ServerBlockEventList((ServerBlockEvent)null), new ServerBlockEventList((ServerBlockEvent)null)}; + private int blockEventCacheIndex = 0; + private static final WeightedRandomChestContent[] bonusChestContent = new WeightedRandomChestContent[]{new WeightedRandomChestContent(Item.stick.itemID, 0, 1, 3, 10), new WeightedRandomChestContent(Block.planks.blockID, 0, 1, 3, 10), new WeightedRandomChestContent(Block.wood.blockID, 0, 1, 3, 10), new WeightedRandomChestContent(Item.axeStone.itemID, 0, 1, 1, 3), new WeightedRandomChestContent(Item.axeWood.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.pickaxeStone.itemID, 0, 1, 1, 3), new WeightedRandomChestContent(Item.pickaxeWood.itemID, 0, 1, 1, 5), new WeightedRandomChestContent(Item.appleRed.itemID, 0, 2, 3, 5), new WeightedRandomChestContent(Item.bread.itemID, 0, 2, 3, 3)}; + private ArrayList field_94579_S = new ArrayList(); + private IntHashMap entityIdMap; + + public WorldServer(MinecraftServer var1, ISaveHandler var2, String var3, int var4, WorldSettings var5, Profiler var6, ILogAgent var7) { + super(var2, var3, var5, WorldProvider.getProviderForDimension(var4), var6, var7); + this.mcServer = var1; + this.theEntityTracker = new EntityTracker(this); + this.thePlayerManager = new PlayerManager(this, var1.getConfigurationManager().getViewDistance()); + if(this.entityIdMap == null) { + this.entityIdMap = new IntHashMap(); + } + + if(this.field_73064_N == null) { + this.field_73064_N = new HashSet(); + } + + if(this.pendingTickListEntries == null) { + this.pendingTickListEntries = new TreeSet(); + } + + this.field_85177_Q = new Teleporter(this); + this.worldScoreboard = new ServerScoreboard(var1); + ScoreboardSaveData var8 = (ScoreboardSaveData)this.mapStorage.loadData(ScoreboardSaveData.class, "scoreboard"); + if(var8 == null) { + var8 = new ScoreboardSaveData(); + this.mapStorage.setData("scoreboard", var8); + } + + var8.func_96499_a(this.worldScoreboard); + ((ServerScoreboard)this.worldScoreboard).func_96547_a(var8); + } + + public void tick() { + super.tick(); + if(this.getWorldInfo().isHardcoreModeEnabled() && this.difficultySetting < 3) { + this.difficultySetting = 3; + } + + this.provider.worldChunkMgr.cleanupCache(); + if(this.areAllPlayersAsleep()) { + boolean var1 = false; + if(this.spawnHostileMobs && this.difficultySetting >= 1) { + } + + if(!var1) { + long var2 = this.worldInfo.getWorldTime() + 24000L; + this.worldInfo.setWorldTime(var2 - var2 % 24000L); + this.wakeAllPlayers(); + } + } + + this.theProfiler.startSection("mobSpawner"); + if(this.getGameRules().getGameRuleBooleanValue("doMobSpawning")) { + SpawnerAnimals.findChunksForSpawning(this, this.spawnHostileMobs, this.spawnPeacefulMobs, this.worldInfo.getWorldTotalTime() % 400L == 0L); + } + + this.theProfiler.endStartSection("chunkSource"); + this.chunkProvider.unloadQueuedChunks(); + int var4 = this.calculateSkylightSubtracted(1.0F); + if(var4 != this.skylightSubtracted) { + this.skylightSubtracted = var4; + } + + this.worldInfo.incrementTotalWorldTime(this.worldInfo.getWorldTotalTime() + 1L); + this.worldInfo.setWorldTime(this.worldInfo.getWorldTime() + 1L); + this.theProfiler.endStartSection("tickPending"); + this.tickUpdates(false); + this.theProfiler.endStartSection("tickTiles"); + this.tickBlocksAndAmbiance(); + this.theProfiler.endStartSection("chunkMap"); + this.thePlayerManager.updatePlayerInstances(); + this.theProfiler.endStartSection("village"); + this.villageCollectionObj.tick(); + this.villageSiegeObj.tick(); + this.theProfiler.endStartSection("portalForcer"); + this.field_85177_Q.removeStalePortalLocations(this.getTotalWorldTime()); + this.theProfiler.endSection(); + this.sendAndApplyBlockEvents(); + } + + public SpawnListEntry spawnRandomCreature(EnumCreatureType var1, int var2, int var3, int var4) { + List var5 = this.getChunkProvider().getPossibleCreatures(var1, var2, var3, var4); + return var5 != null && !var5.isEmpty() ? (SpawnListEntry)WeightedRandom.getRandomItem(this.rand, (Collection)var5) : null; + } + + public void updateAllPlayersSleepingFlag() { + this.allPlayersSleeping = !this.playerEntities.isEmpty(); + Iterator var1 = this.playerEntities.iterator(); + + while(var1.hasNext()) { + EntityPlayer var2 = (EntityPlayer)var1.next(); + if(!var2.isPlayerSleeping()) { + this.allPlayersSleeping = false; + break; + } + } + + } + + protected void wakeAllPlayers() { + this.allPlayersSleeping = false; + Iterator var1 = this.playerEntities.iterator(); + + while(var1.hasNext()) { + EntityPlayer var2 = (EntityPlayer)var1.next(); + if(var2.isPlayerSleeping()) { + var2.wakeUpPlayer(false, false, true); + } + } + + this.resetRainAndThunder(); + } + + private void resetRainAndThunder() { + this.worldInfo.setRainTime(0); + this.worldInfo.setRaining(false); + this.worldInfo.setThunderTime(0); + this.worldInfo.setThundering(false); + } + + public boolean areAllPlayersAsleep() { + if(this.allPlayersSleeping && !this.isRemote) { + Iterator var1 = this.playerEntities.iterator(); + + EntityPlayer var2; + do { + if(!var1.hasNext()) { + return true; + } + + var2 = (EntityPlayer)var1.next(); + } while(var2.isPlayerFullyAsleep()); + + return false; + } else { + return false; + } + } + + public void setSpawnLocation() { + if(this.worldInfo.getSpawnY() <= 0) { + this.worldInfo.setSpawnY(64); + } + + int var1 = this.worldInfo.getSpawnX(); + int var2 = this.worldInfo.getSpawnZ(); + int var3 = 0; + + while(this.getFirstUncoveredBlock(var1, var2) == 0) { + var1 += this.rand.nextInt(8) - this.rand.nextInt(8); + var2 += this.rand.nextInt(8) - this.rand.nextInt(8); + ++var3; + if(var3 == 10000) { + break; + } + } + + this.worldInfo.setSpawnX(var1); + this.worldInfo.setSpawnZ(var2); + } + + protected void tickBlocksAndAmbiance() { + super.tickBlocksAndAmbiance(); + int var1 = 0; + int var2 = 0; + Iterator var3 = this.activeChunkSet.iterator(); + + while(var3.hasNext()) { + ChunkCoordIntPair var4 = (ChunkCoordIntPair)var3.next(); + int var5 = var4.chunkXPos * 16; + int var6 = var4.chunkZPos * 16; + this.theProfiler.startSection("getChunk"); + Chunk var7 = this.getChunkFromChunkCoords(var4.chunkXPos, var4.chunkZPos); + this.moodSoundAndLightCheck(var5, var6, var7); + this.theProfiler.endStartSection("tickChunk"); + var7.updateSkylight(); + this.theProfiler.endStartSection("thunder"); + int var8; + int var9; + int var10; + int var11; + if(this.rand.nextInt(100000) == 0 && this.isRaining() && this.isThundering()) { + this.updateLCG = this.updateLCG * 3 + 1013904223; + var8 = this.updateLCG >> 2; + var9 = var5 + (var8 & 15); + var10 = var6 + (var8 >> 8 & 15); + var11 = this.getPrecipitationHeight(var9, var10); + if(this.canLightningStrikeAt(var9, var11, var10)) { + this.addWeatherEffect(new EntityLightningBolt(this, (double)var9, (double)var11, (double)var10)); + } + } + + this.theProfiler.endStartSection("iceandsnow"); + int var13; + if(this.rand.nextInt(16) == 0) { + this.updateLCG = this.updateLCG * 3 + 1013904223; + var8 = this.updateLCG >> 2; + var9 = var8 & 15; + var10 = var8 >> 8 & 15; + var11 = this.getPrecipitationHeight(var9 + var5, var10 + var6); + if(this.isBlockFreezableNaturally(var9 + var5, var11 - 1, var10 + var6)) { + this.setBlock(var9 + var5, var11 - 1, var10 + var6, Block.ice.blockID); + } + + if(this.isRaining() && this.canSnowAt(var9 + var5, var11, var10 + var6)) { + this.setBlock(var9 + var5, var11, var10 + var6, Block.snow.blockID); + } + + if(this.isRaining()) { + BiomeGenBase var12 = this.getBiomeGenForCoords(var9 + var5, var10 + var6); + if(var12.canSpawnLightningBolt()) { + var13 = this.getBlockId(var9 + var5, var11 - 1, var10 + var6); + if(var13 != 0) { + Block.blocksList[var13].fillWithRain(this, var9 + var5, var11 - 1, var10 + var6); + } + } + } + } + + this.theProfiler.endStartSection("tickTiles"); + ExtendedBlockStorage[] var19 = var7.getBlockStorageArray(); + var9 = var19.length; + + for(var10 = 0; var10 < var9; ++var10) { + ExtendedBlockStorage var20 = var19[var10]; + if(var20 != null && var20.getNeedsRandomTick()) { + for(int var21 = 0; var21 < 3; ++var21) { + this.updateLCG = this.updateLCG * 3 + 1013904223; + var13 = this.updateLCG >> 2; + int var14 = var13 & 15; + int var15 = var13 >> 8 & 15; + int var16 = var13 >> 16 & 15; + int var17 = var20.getExtBlockID(var14, var16, var15); + ++var2; + Block var18 = Block.blocksList[var17]; + if(var18 != null && var18.getTickRandomly()) { + ++var1; + var18.updateTick(this, var14 + var5, var16 + var20.getYLocation(), var15 + var6, this.rand); + } + } + } + } + + this.theProfiler.endSection(); + } + + } + + public boolean isBlockTickScheduled(int var1, int var2, int var3, int var4) { + NextTickListEntry var5 = new NextTickListEntry(var1, var2, var3, var4); + return this.field_94579_S.contains(var5); + } + + public void scheduleBlockUpdate(int var1, int var2, int var3, int var4, int var5) { + this.func_82740_a(var1, var2, var3, var4, var5, 0); + } + + public void func_82740_a(int var1, int var2, int var3, int var4, int var5, int var6) { + NextTickListEntry var7 = new NextTickListEntry(var1, var2, var3, var4); + byte var8 = 0; + if(this.scheduledUpdatesAreImmediate && var4 > 0) { + if(Block.blocksList[var4].func_82506_l()) { + if(this.checkChunksExist(var7.xCoord - var8, var7.yCoord - var8, var7.zCoord - var8, var7.xCoord + var8, var7.yCoord + var8, var7.zCoord + var8)) { + int var9 = this.getBlockId(var7.xCoord, var7.yCoord, var7.zCoord); + if(var9 == var7.blockID && var9 > 0) { + Block.blocksList[var9].updateTick(this, var7.xCoord, var7.yCoord, var7.zCoord, this.rand); + } + } + + return; + } + + var5 = 1; + } + + if(this.checkChunksExist(var1 - var8, var2 - var8, var3 - var8, var1 + var8, var2 + var8, var3 + var8)) { + if(var4 > 0) { + var7.setScheduledTime((long)var5 + this.worldInfo.getWorldTotalTime()); + var7.func_82753_a(var6); + } + + if(!this.field_73064_N.contains(var7)) { + this.field_73064_N.add(var7); + this.pendingTickListEntries.add(var7); + } + } + + } + + public void scheduleBlockUpdateFromLoad(int var1, int var2, int var3, int var4, int var5, int var6) { + NextTickListEntry var7 = new NextTickListEntry(var1, var2, var3, var4); + var7.func_82753_a(var6); + if(var4 > 0) { + var7.setScheduledTime((long)var5 + this.worldInfo.getWorldTotalTime()); + } + + if(!this.field_73064_N.contains(var7)) { + this.field_73064_N.add(var7); + this.pendingTickListEntries.add(var7); + } + + } + + public void updateEntities() { + if(this.playerEntities.isEmpty()) { + if(this.updateEntityTick++ >= 1200) { + return; + } + } else { + this.resetUpdateEntityTick(); + } + + super.updateEntities(); + } + + public void resetUpdateEntityTick() { + this.updateEntityTick = 0; + } + + public boolean tickUpdates(boolean var1) { + int var2 = this.pendingTickListEntries.size(); + if(var2 != this.field_73064_N.size()) { + throw new IllegalStateException("TickNextTick list out of synch"); + } else { + if(var2 > 1000) { + var2 = 1000; + } + + this.theProfiler.startSection("cleaning"); + + NextTickListEntry var4; + for(int var3 = 0; var3 < var2; ++var3) { + var4 = (NextTickListEntry)this.pendingTickListEntries.first(); + if(!var1 && var4.scheduledTime > this.worldInfo.getWorldTotalTime()) { + break; + } + + this.pendingTickListEntries.remove(var4); + this.field_73064_N.remove(var4); + this.field_94579_S.add(var4); + } + + this.theProfiler.endSection(); + this.theProfiler.startSection("ticking"); + Iterator var14 = this.field_94579_S.iterator(); + + while(var14.hasNext()) { + var4 = (NextTickListEntry)var14.next(); + var14.remove(); + byte var5 = 0; + if(this.checkChunksExist(var4.xCoord - var5, var4.yCoord - var5, var4.zCoord - var5, var4.xCoord + var5, var4.yCoord + var5, var4.zCoord + var5)) { + int var6 = this.getBlockId(var4.xCoord, var4.yCoord, var4.zCoord); + if(var6 > 0 && Block.isAssociatedBlockID(var6, var4.blockID)) { + try { + Block.blocksList[var6].updateTick(this, var4.xCoord, var4.yCoord, var4.zCoord, this.rand); + } catch (Throwable var13) { + CrashReport var8 = CrashReport.makeCrashReport(var13, "Exception while ticking a block"); + CrashReportCategory var9 = var8.makeCategory("Block being ticked"); + + int var10; + try { + var10 = this.getBlockMetadata(var4.xCoord, var4.yCoord, var4.zCoord); + } catch (Throwable var12) { + var10 = -1; + } + + CrashReportCategory.func_85068_a(var9, var4.xCoord, var4.yCoord, var4.zCoord, var6, var10); + throw new ReportedException(var8); + } + } + } else { + this.scheduleBlockUpdate(var4.xCoord, var4.yCoord, var4.zCoord, var4.blockID, 0); + } + } + + this.theProfiler.endSection(); + this.field_94579_S.clear(); + return !this.pendingTickListEntries.isEmpty(); + } + } + + public List getPendingBlockUpdates(Chunk var1, boolean var2) { + ArrayList var3 = null; + ChunkCoordIntPair var4 = var1.getChunkCoordIntPair(); + int var5 = (var4.chunkXPos << 4) - 2; + int var6 = var5 + 16 + 2; + int var7 = (var4.chunkZPos << 4) - 2; + int var8 = var7 + 16 + 2; + + for(int var9 = 0; var9 < 2; ++var9) { + Iterator var10; + if(var9 == 0) { + var10 = this.pendingTickListEntries.iterator(); + } else { + var10 = this.field_94579_S.iterator(); + if(!this.field_94579_S.isEmpty()) { + System.out.println(this.field_94579_S.size()); + } + } + + while(var10.hasNext()) { + NextTickListEntry var11 = (NextTickListEntry)var10.next(); + if(var11.xCoord >= var5 && var11.xCoord < var6 && var11.zCoord >= var7 && var11.zCoord < var8) { + if(var2) { + this.field_73064_N.remove(var11); + var10.remove(); + } + + if(var3 == null) { + var3 = new ArrayList(); + } + + var3.add(var11); + } + } + } + + return var3; + } + + public void updateEntityWithOptionalForce(Entity var1, boolean var2) { + if(!this.mcServer.getCanSpawnAnimals() && (var1 instanceof EntityAnimal || var1 instanceof EntityWaterMob)) { + var1.setDead(); + } + + if(!this.mcServer.getCanSpawnNPCs() && var1 instanceof INpc) { + var1.setDead(); + } + + if(!(var1.riddenByEntity instanceof EntityPlayer)) { + super.updateEntityWithOptionalForce(var1, var2); + } + + } + + public void uncheckedUpdateEntity(Entity var1, boolean var2) { + super.updateEntityWithOptionalForce(var1, var2); + } + + protected IChunkProvider createChunkProvider() { + IChunkLoader var1 = this.saveHandler.getChunkLoader(this.provider); + this.theChunkProviderServer = new ChunkProviderServer(this, var1, this.provider.createChunkGenerator()); + return this.theChunkProviderServer; + } + + public List getAllTileEntityInBox(int var1, int var2, int var3, int var4, int var5, int var6) { + ArrayList var7 = new ArrayList(); + + for(int var8 = 0; var8 < this.loadedTileEntityList.size(); ++var8) { + TileEntity var9 = (TileEntity)this.loadedTileEntityList.get(var8); + if(var9.xCoord >= var1 && var9.yCoord >= var2 && var9.zCoord >= var3 && var9.xCoord < var4 && var9.yCoord < var5 && var9.zCoord < var6) { + var7.add(var9); + } + } + + return var7; + } + + public boolean canMineBlock(EntityPlayer var1, int var2, int var3, int var4) { + return !this.mcServer.func_96290_a(this, var2, var3, var4, var1); + } + + protected void initialize(WorldSettings var1) { + if(this.entityIdMap == null) { + this.entityIdMap = new IntHashMap(); + } + + if(this.field_73064_N == null) { + this.field_73064_N = new HashSet(); + } + + if(this.pendingTickListEntries == null) { + this.pendingTickListEntries = new TreeSet(); + } + + this.createSpawnPosition(var1); + super.initialize(var1); + } + + protected void createSpawnPosition(WorldSettings var1) { + if(!this.provider.canRespawnHere()) { + this.worldInfo.setSpawnPosition(0, this.provider.getAverageGroundLevel(), 0); + } else { + this.findingSpawnPoint = true; + WorldChunkManager var2 = this.provider.worldChunkMgr; + List var3 = var2.getBiomesToSpawnIn(); + Random var4 = new Random(this.getSeed()); + ChunkPosition var5 = var2.findBiomePosition(0, 0, 256, var3, var4); + int var6 = 0; + int var7 = this.provider.getAverageGroundLevel(); + int var8 = 0; + if(var5 != null) { + var6 = var5.x; + var8 = var5.z; + } else { + this.getWorldLogAgent().logWarning("Unable to find spawn biome"); + } + + int var9 = 0; + + while(!this.provider.canCoordinateBeSpawn(var6, var8)) { + var6 += var4.nextInt(64) - var4.nextInt(64); + var8 += var4.nextInt(64) - var4.nextInt(64); + ++var9; + if(var9 == 1000) { + break; + } + } + + this.worldInfo.setSpawnPosition(var6, var7, var8); + this.findingSpawnPoint = false; + if(var1.isBonusChestEnabled()) { + this.createBonusChest(); + } + + } + } + + protected void createBonusChest() { + WorldGeneratorBonusChest var1 = new WorldGeneratorBonusChest(bonusChestContent, 10); + + for(int var2 = 0; var2 < 10; ++var2) { + int var3 = this.worldInfo.getSpawnX() + this.rand.nextInt(6) - this.rand.nextInt(6); + int var4 = this.worldInfo.getSpawnZ() + this.rand.nextInt(6) - this.rand.nextInt(6); + int var5 = this.getTopSolidOrLiquidBlock(var3, var4) + 1; + if(var1.generate(this, this.rand, var3, var5, var4)) { + break; + } + } + + } + + public ChunkCoordinates getEntrancePortalLocation() { + return this.provider.getEntrancePortalLocation(); + } + + public void saveAllChunks(boolean var1, IProgressUpdate var2) throws MinecraftException { + if(this.chunkProvider.canSave()) { + if(var2 != null) { + var2.displayProgressMessage("Saving level"); + } + + this.saveLevel(); + if(var2 != null) { + var2.resetProgresAndWorkingMessage("Saving chunks"); + } + + this.chunkProvider.saveChunks(var1, var2); + } + } + + public void func_104140_m() { + if(this.chunkProvider.canSave()) { + this.chunkProvider.func_104112_b(); + } + } + + protected void saveLevel() throws MinecraftException { + this.checkSessionLock(); + this.saveHandler.saveWorldInfoWithPlayer(this.worldInfo, this.mcServer.getConfigurationManager().getHostPlayerData()); + this.mapStorage.saveAllData(); + } + + protected void obtainEntitySkin(Entity var1) { + super.obtainEntitySkin(var1); + this.entityIdMap.addKey(var1.entityId, var1); + Entity[] var2 = var1.getParts(); + if(var2 != null) { + for(int var3 = 0; var3 < var2.length; ++var3) { + this.entityIdMap.addKey(var2[var3].entityId, var2[var3]); + } + } + + } + + protected void releaseEntitySkin(Entity var1) { + super.releaseEntitySkin(var1); + this.entityIdMap.removeObject(var1.entityId); + Entity[] var2 = var1.getParts(); + if(var2 != null) { + for(int var3 = 0; var3 < var2.length; ++var3) { + this.entityIdMap.removeObject(var2[var3].entityId); + } + } + + } + + public Entity getEntityByID(int var1) { + return (Entity)this.entityIdMap.lookup(var1); + } + + public boolean addWeatherEffect(Entity var1) { + if(super.addWeatherEffect(var1)) { + this.mcServer.getConfigurationManager().sendToAllNear(var1.posX, var1.posY, var1.posZ, 512.0D, this.provider.dimensionId, new Packet71Weather(var1)); + return true; + } else { + return false; + } + } + + public void setEntityState(Entity var1, byte var2) { + Packet38EntityStatus var3 = new Packet38EntityStatus(var1.entityId, var2); + this.getEntityTracker().sendPacketToAllAssociatedPlayers(var1, var3); + } + + public Explosion newExplosion(Entity var1, double var2, double var4, double var6, float var8, boolean var9, boolean var10) { + Explosion var11 = new Explosion(this, var1, var2, var4, var6, var8); + var11.isFlaming = var9; + var11.isSmoking = var10; + var11.doExplosionA(); + var11.doExplosionB(false); + if(!var10) { + var11.affectedBlockPositions.clear(); + } + + Iterator var12 = this.playerEntities.iterator(); + + while(var12.hasNext()) { + EntityPlayer var13 = (EntityPlayer)var12.next(); + if(var13.getDistanceSq(var2, var4, var6) < 4096.0D) { + ((EntityPlayerMP)var13).playerNetServerHandler.sendPacketToPlayer(new Packet60Explosion(var2, var4, var6, var8, var11.affectedBlockPositions, (Vec3)var11.func_77277_b().get(var13))); + } + } + + return var11; + } + + public void addBlockEvent(int var1, int var2, int var3, int var4, int var5, int var6) { + BlockEventData var7 = new BlockEventData(var1, var2, var3, var4, var5, var6); + Iterator var8 = this.blockEventCache[this.blockEventCacheIndex].iterator(); + + BlockEventData var9; + do { + if(!var8.hasNext()) { + this.blockEventCache[this.blockEventCacheIndex].add(var7); + return; + } + + var9 = (BlockEventData)var8.next(); + } while(!var9.equals(var7)); + + } + + private void sendAndApplyBlockEvents() { + while(!this.blockEventCache[this.blockEventCacheIndex].isEmpty()) { + int var1 = this.blockEventCacheIndex; + this.blockEventCacheIndex ^= 1; + Iterator var2 = this.blockEventCache[var1].iterator(); + + while(var2.hasNext()) { + BlockEventData var3 = (BlockEventData)var2.next(); + if(this.onBlockEventReceived(var3)) { + this.mcServer.getConfigurationManager().sendToAllNear((double)var3.getX(), (double)var3.getY(), (double)var3.getZ(), 64.0D, this.provider.dimensionId, new Packet54PlayNoteBlock(var3.getX(), var3.getY(), var3.getZ(), var3.getBlockID(), var3.getEventID(), var3.getEventParameter())); + } + } + + this.blockEventCache[var1].clear(); + } + + } + + private boolean onBlockEventReceived(BlockEventData var1) { + int var2 = this.getBlockId(var1.getX(), var1.getY(), var1.getZ()); + return var2 == var1.getBlockID() ? Block.blocksList[var2].onBlockEventReceived(this, var1.getX(), var1.getY(), var1.getZ(), var1.getEventID(), var1.getEventParameter()) : false; + } + + public void flush() { + this.saveHandler.flush(); + } + + protected void updateWeather() { + boolean var1 = this.isRaining(); + super.updateWeather(); + if(var1 != this.isRaining()) { + if(var1) { + this.mcServer.getConfigurationManager().sendPacketToAllPlayers(new Packet70GameEvent(2, 0)); + } else { + this.mcServer.getConfigurationManager().sendPacketToAllPlayers(new Packet70GameEvent(1, 0)); + } + } + + } + + public MinecraftServer getMinecraftServer() { + return this.mcServer; + } + + public EntityTracker getEntityTracker() { + return this.theEntityTracker; + } + + public PlayerManager getPlayerManager() { + return this.thePlayerManager; + } + + public Teleporter getDefaultTeleporter() { + return this.field_85177_Q; + } +} diff --git a/src/net/minecraft/src/WorldServerMulti.java b/src/net/minecraft/src/WorldServerMulti.java new file mode 100644 index 0000000..5b86814 --- /dev/null +++ b/src/net/minecraft/src/WorldServerMulti.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class WorldServerMulti extends WorldServer { + public WorldServerMulti(MinecraftServer var1, ISaveHandler var2, String var3, int var4, WorldSettings var5, WorldServer var6, Profiler var7, ILogAgent var8) { + super(var1, var2, var3, var4, var5, var7, var8); + this.mapStorage = var6.mapStorage; + this.worldScoreboard = var6.getScoreboard(); + this.worldInfo = new DerivedWorldInfo(var6.getWorldInfo()); + } + + protected void saveLevel() throws MinecraftException { + } +} diff --git a/src/net/minecraft/src/WorldSettings.java b/src/net/minecraft/src/WorldSettings.java new file mode 100644 index 0000000..c66570b --- /dev/null +++ b/src/net/minecraft/src/WorldSettings.java @@ -0,0 +1,76 @@ +package net.minecraft.src; + +public final class WorldSettings { + private final long seed; + private final EnumGameType theGameType; + private final boolean mapFeaturesEnabled; + private final boolean hardcoreEnabled; + private final WorldType terrainType; + private boolean commandsAllowed; + private boolean bonusChestEnabled; + private String field_82751_h; + + public WorldSettings(long var1, EnumGameType var3, boolean var4, boolean var5, WorldType var6) { + this.field_82751_h = ""; + this.seed = var1; + this.theGameType = var3; + this.mapFeaturesEnabled = var4; + this.hardcoreEnabled = var5; + this.terrainType = var6; + } + + public WorldSettings(WorldInfo var1) { + this(var1.getSeed(), var1.getGameType(), var1.isMapFeaturesEnabled(), var1.isHardcoreModeEnabled(), var1.getTerrainType()); + } + + public WorldSettings enableBonusChest() { + this.bonusChestEnabled = true; + return this; + } + + public WorldSettings enableCommands() { + this.commandsAllowed = true; + return this; + } + + public WorldSettings func_82750_a(String var1) { + this.field_82751_h = var1; + return this; + } + + public boolean isBonusChestEnabled() { + return this.bonusChestEnabled; + } + + public long getSeed() { + return this.seed; + } + + public EnumGameType getGameType() { + return this.theGameType; + } + + public boolean getHardcoreEnabled() { + return this.hardcoreEnabled; + } + + public boolean isMapFeaturesEnabled() { + return this.mapFeaturesEnabled; + } + + public WorldType getTerrainType() { + return this.terrainType; + } + + public boolean areCommandsAllowed() { + return this.commandsAllowed; + } + + public static EnumGameType getGameTypeById(int var0) { + return EnumGameType.getByID(var0); + } + + public String func_82749_j() { + return this.field_82751_h; + } +} diff --git a/src/net/minecraft/src/WorldType.java b/src/net/minecraft/src/WorldType.java new file mode 100644 index 0000000..551a525 --- /dev/null +++ b/src/net/minecraft/src/WorldType.java @@ -0,0 +1,74 @@ +package net.minecraft.src; + +public class WorldType { + public static final WorldType[] worldTypes = new WorldType[16]; + public static final WorldType DEFAULT = (new WorldType(0, "default", 1)).setVersioned(); + public static final WorldType FLAT = new WorldType(1, "flat"); + public static final WorldType LARGE_BIOMES = new WorldType(2, "largeBiomes"); + public static final WorldType DEFAULT_1_1 = (new WorldType(8, "default_1_1", 0)).setCanBeCreated(false); + private final int worldTypeId; + private final String worldType; + private final int generatorVersion; + private boolean canBeCreated; + private boolean isWorldTypeVersioned; + + private WorldType(int var1, String var2) { + this(var1, var2, 0); + } + + private WorldType(int var1, String var2, int var3) { + this.worldType = var2; + this.generatorVersion = var3; + this.canBeCreated = true; + this.worldTypeId = var1; + worldTypes[var1] = this; + } + + public String getWorldTypeName() { + return this.worldType; + } + + public String getTranslateName() { + return "generator." + this.worldType; + } + + public int getGeneratorVersion() { + return this.generatorVersion; + } + + public WorldType getWorldTypeForGeneratorVersion(int var1) { + return this == DEFAULT && var1 == 0 ? DEFAULT_1_1 : this; + } + + private WorldType setCanBeCreated(boolean var1) { + this.canBeCreated = var1; + return this; + } + + public boolean getCanBeCreated() { + return this.canBeCreated; + } + + private WorldType setVersioned() { + this.isWorldTypeVersioned = true; + return this; + } + + public boolean isVersioned() { + return this.isWorldTypeVersioned; + } + + public static WorldType parseWorldType(String var0) { + for(int var1 = 0; var1 < worldTypes.length; ++var1) { + if(worldTypes[var1] != null && worldTypes[var1].worldType.equalsIgnoreCase(var0)) { + return worldTypes[var1]; + } + } + + return null; + } + + public int getWorldTypeID() { + return this.worldTypeId; + } +} diff --git a/src/net/minecraft/src/WrongUsageException.java b/src/net/minecraft/src/WrongUsageException.java new file mode 100644 index 0000000..58063f2 --- /dev/null +++ b/src/net/minecraft/src/WrongUsageException.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class WrongUsageException extends SyntaxErrorException { + public WrongUsageException(String var1, Object... var2) { + super(var1, var2); + } +}