From b335840495b449f8a845d0912ecce9179d6aec02 Mon Sep 17 00:00:00 2001 From: peytonplayz595 <106421860+PeytonPlayz595@users.noreply.github.com> Date: Sat, 23 Sep 2023 01:47:15 -0500 Subject: [PATCH] Upload src --- .classpath | 25 + .project | 53 + .settings/org.eclipse.jdt.core.prefs | 14 + Client.launch | 20 + .../minecraft/client/MinecraftApplet.class | Bin 0 -> 3691 bytes .../minecraft/isom/IsomPreviewApplet.class | Bin 0 -> 685 bytes bin/net/minecraft/src/AxisAlignedBB.class | Bin 0 -> 4998 bytes bin/net/minecraft/src/Block.class | Bin 0 -> 16322 bytes bin/net/minecraft/src/BlockBookshelf.class | Bin 0 -> 584 bytes bin/net/minecraft/src/BlockBreakable.class | Bin 0 -> 689 bytes bin/net/minecraft/src/BlockChest.class | Bin 0 -> 4836 bytes bin/net/minecraft/src/BlockContainer.class | Bin 0 -> 788 bytes bin/net/minecraft/src/BlockCrops.class | Bin 0 -> 3449 bytes bin/net/minecraft/src/BlockDirt.class | Bin 0 -> 346 bytes bin/net/minecraft/src/BlockDoor.class | Bin 0 -> 3709 bytes bin/net/minecraft/src/BlockFarmland.class | Bin 0 -> 2677 bytes bin/net/minecraft/src/BlockFire.class | Bin 0 -> 5082 bytes bin/net/minecraft/src/BlockFlower.class | Bin 0 -> 2052 bytes bin/net/minecraft/src/BlockFlowing.class | Bin 0 -> 4369 bytes bin/net/minecraft/src/BlockFluid.class | Bin 0 -> 5976 bytes bin/net/minecraft/src/BlockFurnace.class | Bin 0 -> 3145 bytes bin/net/minecraft/src/BlockGears.class | Bin 0 -> 812 bytes bin/net/minecraft/src/BlockGlass.class | Bin 0 -> 350 bytes bin/net/minecraft/src/BlockGrass.class | Bin 0 -> 1377 bytes bin/net/minecraft/src/BlockGravel.class | Bin 0 -> 529 bytes bin/net/minecraft/src/BlockLadder.class | Bin 0 -> 2163 bytes bin/net/minecraft/src/BlockLeaves.class | Bin 0 -> 1826 bytes bin/net/minecraft/src/BlockLeavesBase.class | Bin 0 -> 695 bytes bin/net/minecraft/src/BlockLog.class | Bin 0 -> 728 bytes .../minecraft/src/BlockMinecartTrack.class | Bin 0 -> 2463 bytes bin/net/minecraft/src/BlockMobSpawner.class | Bin 0 -> 584 bytes bin/net/minecraft/src/BlockMushroom.class | Bin 0 -> 721 bytes bin/net/minecraft/src/BlockObsidian.class | Bin 0 -> 504 bytes bin/net/minecraft/src/BlockOre.class | Bin 0 -> 793 bytes bin/net/minecraft/src/BlockOreBlock.class | Bin 0 -> 528 bytes bin/net/minecraft/src/BlockSand.class | Bin 0 -> 1758 bytes bin/net/minecraft/src/BlockSapling.class | Bin 0 -> 993 bytes bin/net/minecraft/src/BlockSign.class | Bin 0 -> 1712 bytes bin/net/minecraft/src/BlockSponge.class | Bin 0 -> 1045 bytes bin/net/minecraft/src/BlockStairs.class | Bin 0 -> 5884 bytes bin/net/minecraft/src/BlockStationary.class | Bin 0 -> 943 bytes bin/net/minecraft/src/BlockStep.class | Bin 0 -> 1654 bytes bin/net/minecraft/src/BlockStone.class | Bin 0 -> 504 bytes bin/net/minecraft/src/BlockTNT.class | Bin 0 -> 1296 bytes bin/net/minecraft/src/BlockTorch.class | Bin 0 -> 3450 bytes bin/net/minecraft/src/BlockWorkbench.class | Bin 0 -> 813 bytes bin/net/minecraft/src/CanvasCrashReport.class | Bin 0 -> 394 bytes bin/net/minecraft/src/CanvasIsomPreview.class | Bin 0 -> 10326 bytes .../minecraft/src/CanvasMinecraftApplet.class | Bin 0 -> 614 bytes bin/net/minecraft/src/CanvasMojangLogo.class | Bin 0 -> 1110 bytes bin/net/minecraft/src/ChatLine.class | Bin 0 -> 341 bytes bin/net/minecraft/src/Chunk.class | Bin 0 -> 9928 bytes bin/net/minecraft/src/ChunkCache.class | Bin 0 -> 2690 bytes bin/net/minecraft/src/ChunkLoader.class | Bin 0 -> 6508 bytes bin/net/minecraft/src/ChunkPosition.class | Bin 0 -> 583 bytes .../minecraft/src/ChunkProviderGenerate.class | Bin 0 -> 11544 bytes bin/net/minecraft/src/ChunkProviderIso.class | Bin 0 -> 1782 bytes .../src/ChunkProviderLoadOrGenerate.class | Bin 0 -> 4071 bytes bin/net/minecraft/src/ClippingHelper.class | Bin 0 -> 1007 bytes .../src/ClippingHelperImplementation.class | Bin 0 -> 3390 bytes .../minecraft/src/CompressedStreamTools.class | Bin 0 -> 1663 bytes bin/net/minecraft/src/CraftingManager.class | Bin 0 -> 5443 bytes bin/net/minecraft/src/CraftingRecipe.class | Bin 0 -> 1267 bytes bin/net/minecraft/src/EffectRenderer.class | Bin 0 -> 4803 bytes bin/net/minecraft/src/Entity.class | Bin 0 -> 16277 bytes bin/net/minecraft/src/EntityAnimal.class | Bin 0 -> 1101 bytes bin/net/minecraft/src/EntityArrow.class | Bin 0 -> 6886 bytes bin/net/minecraft/src/EntityBubbleFX.class | Bin 0 -> 1673 bytes bin/net/minecraft/src/EntityCreature.class | Bin 0 -> 3797 bytes bin/net/minecraft/src/EntityCreeper.class | Bin 0 -> 1758 bytes bin/net/minecraft/src/EntityDiggingFX.class | Bin 0 -> 1673 bytes bin/net/minecraft/src/EntityExplodeFX.class | Bin 0 -> 1542 bytes bin/net/minecraft/src/EntityFX.class | Bin 0 -> 3209 bytes bin/net/minecraft/src/EntityFallingSand.class | Bin 0 -> 2330 bytes bin/net/minecraft/src/EntityFlameFX.class | Bin 0 -> 1781 bytes bin/net/minecraft/src/EntityGiant.class | Bin 0 -> 760 bytes bin/net/minecraft/src/EntityItem.class | Bin 0 -> 5030 bytes bin/net/minecraft/src/EntityLavaFX.class | Bin 0 -> 1926 bytes bin/net/minecraft/src/EntityList.class | Bin 0 -> 3407 bytes bin/net/minecraft/src/EntityLiving.class | Bin 0 -> 11884 bytes bin/net/minecraft/src/EntityMinecart.class | Bin 0 -> 10923 bytes bin/net/minecraft/src/EntityMonster.class | Bin 0 -> 2331 bytes bin/net/minecraft/src/EntityPainting.class | Bin 0 -> 5007 bytes bin/net/minecraft/src/EntityPickupFX.class | Bin 0 -> 2114 bytes bin/net/minecraft/src/EntityPig.class | Bin 0 -> 1414 bytes bin/net/minecraft/src/EntityPlayer.class | Bin 0 -> 6489 bytes bin/net/minecraft/src/EntityPlayerSP.class | Bin 0 -> 5426 bytes bin/net/minecraft/src/EntityRainFX.class | Bin 0 -> 1975 bytes bin/net/minecraft/src/EntityRenderer.class | Bin 0 -> 16747 bytes bin/net/minecraft/src/EntitySheep.class | Bin 0 -> 1734 bytes bin/net/minecraft/src/EntitySkeleton.class | Bin 0 -> 2252 bytes bin/net/minecraft/src/EntitySmokeFX.class | Bin 0 -> 1784 bytes bin/net/minecraft/src/EntitySorter.class | Bin 0 -> 738 bytes bin/net/minecraft/src/EntitySpider.class | Bin 0 -> 1951 bytes bin/net/minecraft/src/EntitySplashFX.class | Bin 0 -> 612 bytes bin/net/minecraft/src/EntityTNTPrimed.class | Bin 0 -> 2253 bytes bin/net/minecraft/src/EntityZombie.class | Bin 0 -> 1205 bytes bin/net/minecraft/src/EnumArt.class | Bin 0 -> 2278 bytes bin/net/minecraft/src/EnumOS.class | Bin 0 -> 1028 bytes bin/net/minecraft/src/EnumOSIsom.class | Bin 0 -> 1056 bytes bin/net/minecraft/src/EnumSkyBlock.class | Bin 0 -> 1002 bytes bin/net/minecraft/src/Explosion.class | Bin 0 -> 4234 bytes bin/net/minecraft/src/FontRenderer.class | Bin 0 -> 4221 bytes bin/net/minecraft/src/Frustrum.class | Bin 0 -> 1061 bytes bin/net/minecraft/src/GLAllocation.class | Bin 0 -> 2040 bytes bin/net/minecraft/src/GameSettings.class | Bin 0 -> 7127 bytes bin/net/minecraft/src/Gui.class | Bin 0 -> 1633 bytes bin/net/minecraft/src/GuiButton.class | Bin 0 -> 1872 bytes bin/net/minecraft/src/GuiChest.class | Bin 0 -> 2183 bytes bin/net/minecraft/src/GuiContainer.class | Bin 0 -> 5956 bytes bin/net/minecraft/src/GuiControls.class | Bin 0 -> 2602 bytes bin/net/minecraft/src/GuiCrafting.class | Bin 0 -> 3217 bytes bin/net/minecraft/src/GuiCreateWorld.class | Bin 0 -> 3047 bytes bin/net/minecraft/src/GuiDeleteWorld.class | Bin 0 -> 1929 bytes bin/net/minecraft/src/GuiEditSign.class | Bin 0 -> 3370 bytes bin/net/minecraft/src/GuiErrorScreen.class | Bin 0 -> 813 bytes bin/net/minecraft/src/GuiFurnace.class | Bin 0 -> 2135 bytes bin/net/minecraft/src/GuiGameOver.class | Bin 0 -> 2514 bytes bin/net/minecraft/src/GuiIngame.class | Bin 0 -> 7409 bytes bin/net/minecraft/src/GuiIngameMenu.class | Bin 0 -> 2318 bytes bin/net/minecraft/src/GuiInventory.class | Bin 0 -> 4656 bytes bin/net/minecraft/src/GuiMainMenu.class | Bin 0 -> 6930 bytes bin/net/minecraft/src/GuiOptions.class | Bin 0 -> 2002 bytes bin/net/minecraft/src/GuiScreen.class | Bin 0 -> 3869 bytes bin/net/minecraft/src/GuiSmallButton.class | Bin 0 -> 295 bytes bin/net/minecraft/src/GuiYesNo.class | Bin 0 -> 1462 bytes bin/net/minecraft/src/IBlockAccess.class | Bin 0 -> 380 bytes bin/net/minecraft/src/ICamera.class | Bin 0 -> 216 bytes bin/net/minecraft/src/IChunkLoader.class | Bin 0 -> 413 bytes bin/net/minecraft/src/IChunkProvider.class | Bin 0 -> 392 bytes bin/net/minecraft/src/IInventory.class | Bin 0 -> 455 bytes bin/net/minecraft/src/IProgressUpdate.class | Bin 0 -> 253 bytes bin/net/minecraft/src/IWorldAccess.class | Bin 0 -> 448 bytes bin/net/minecraft/src/ImageBuffer.class | Bin 0 -> 210 bytes .../minecraft/src/ImageBufferDownload.class | Bin 0 -> 1939 bytes .../minecraft/src/InventoryCraftResult.class | Bin 0 -> 1026 bytes bin/net/minecraft/src/InventoryCrafting.class | Bin 0 -> 1456 bytes .../minecraft/src/InventoryLargeChest.class | Bin 0 -> 1426 bytes bin/net/minecraft/src/InventoryPlayer.class | Bin 0 -> 5984 bytes bin/net/minecraft/src/IsoImageBuffer.class | Bin 0 -> 813 bytes bin/net/minecraft/src/Item.class | Bin 0 -> 7273 bytes bin/net/minecraft/src/ItemArmor.class | Bin 0 -> 678 bytes bin/net/minecraft/src/ItemAxe.class | Bin 0 -> 555 bytes bin/net/minecraft/src/ItemBlock.class | Bin 0 -> 1402 bytes bin/net/minecraft/src/ItemBow.class | Bin 0 -> 1168 bytes bin/net/minecraft/src/ItemBucket.class | Bin 0 -> 2638 bytes bin/net/minecraft/src/ItemDoor.class | Bin 0 -> 1694 bytes bin/net/minecraft/src/ItemFlintAndSteel.class | Bin 0 -> 1164 bytes bin/net/minecraft/src/ItemFood.class | Bin 0 -> 619 bytes bin/net/minecraft/src/ItemHoe.class | Bin 0 -> 1996 bytes bin/net/minecraft/src/ItemMinecart.class | Bin 0 -> 899 bytes bin/net/minecraft/src/ItemPainting.class | Bin 0 -> 860 bytes bin/net/minecraft/src/ItemPickaxe.class | Bin 0 -> 1273 bytes bin/net/minecraft/src/ItemRenderer.class | Bin 0 -> 8216 bytes bin/net/minecraft/src/ItemSaddle.class | Bin 0 -> 677 bytes bin/net/minecraft/src/ItemSeeds.class | Bin 0 -> 796 bytes bin/net/minecraft/src/ItemSign.class | Bin 0 -> 1277 bytes bin/net/minecraft/src/ItemSoup.class | Bin 0 -> 586 bytes bin/net/minecraft/src/ItemSpade.class | Bin 0 -> 587 bytes bin/net/minecraft/src/ItemStack.class | Bin 0 -> 3814 bytes bin/net/minecraft/src/ItemSword.class | Bin 0 -> 854 bytes bin/net/minecraft/src/ItemTool.class | Bin 0 -> 1207 bytes bin/net/minecraft/src/KeyBinding.class | Bin 0 -> 347 bytes .../minecraft/src/LoadingScreenRenderer.class | Bin 0 -> 3368 bytes bin/net/minecraft/src/Material.class | Bin 0 -> 1323 bytes bin/net/minecraft/src/MaterialLiquid.class | Bin 0 -> 340 bytes bin/net/minecraft/src/MaterialLogic.class | Bin 0 -> 396 bytes .../minecraft/src/MaterialTransparent.class | Bin 0 -> 408 bytes bin/net/minecraft/src/MathHelper.class | Bin 0 -> 1199 bytes .../minecraft/src/MetadataChunkBlock.class | Bin 0 -> 2409 bytes .../minecraft/src/MinecartTrackLogic.class | Bin 0 -> 4895 bytes bin/net/minecraft/src/Minecraft.class | Bin 0 -> 26081 bytes .../minecraft/src/MinecraftAppletImpl.class | Bin 0 -> 904 bytes bin/net/minecraft/src/MinecraftError.class | Bin 0 -> 219 bytes bin/net/minecraft/src/ModelBase.class | Bin 0 -> 357 bytes bin/net/minecraft/src/ModelBiped.class | Bin 0 -> 2030 bytes bin/net/minecraft/src/ModelCreeper.class | Bin 0 -> 1536 bytes bin/net/minecraft/src/ModelMinecart.class | Bin 0 -> 1354 bytes bin/net/minecraft/src/ModelPig.class | Bin 0 -> 296 bytes bin/net/minecraft/src/ModelQuadruped.class | Bin 0 -> 1481 bytes bin/net/minecraft/src/ModelRenderer.class | Bin 0 -> 3238 bytes bin/net/minecraft/src/ModelSheep.class | Bin 0 -> 593 bytes bin/net/minecraft/src/ModelSheepFur.class | Bin 0 -> 935 bytes bin/net/minecraft/src/ModelSkeleton.class | Bin 0 -> 797 bytes bin/net/minecraft/src/ModelSpider.class | Bin 0 -> 2785 bytes bin/net/minecraft/src/ModelZombie.class | Bin 0 -> 987 bytes bin/net/minecraft/src/MouseHelper.class | Bin 0 -> 2090 bytes bin/net/minecraft/src/MovementInput.class | Bin 0 -> 607 bytes .../src/MovementInputFromOptions.class | Bin 0 -> 1360 bytes .../minecraft/src/MovingObjectPosition.class | Bin 0 -> 949 bytes bin/net/minecraft/src/NBTBase.class | Bin 0 -> 2445 bytes bin/net/minecraft/src/NBTTagByte.class | Bin 0 -> 1239 bytes bin/net/minecraft/src/NBTTagByteArray.class | Bin 0 -> 1342 bytes bin/net/minecraft/src/NBTTagCompound.class | Bin 0 -> 5234 bytes bin/net/minecraft/src/NBTTagDouble.class | Bin 0 -> 1249 bytes bin/net/minecraft/src/NBTTagEnd.class | Bin 0 -> 583 bytes bin/net/minecraft/src/NBTTagFloat.class | Bin 0 -> 1243 bytes bin/net/minecraft/src/NBTTagInt.class | Bin 0 -> 1233 bytes bin/net/minecraft/src/NBTTagList.class | Bin 0 -> 2129 bytes bin/net/minecraft/src/NBTTagLong.class | Bin 0 -> 1238 bytes bin/net/minecraft/src/NBTTagShort.class | Bin 0 -> 1250 bytes bin/net/minecraft/src/NBTTagString.class | Bin 0 -> 1449 bytes bin/net/minecraft/src/NextTickListEntry.class | Bin 0 -> 1235 bytes bin/net/minecraft/src/NibbleArray.class | Bin 0 -> 741 bytes bin/net/minecraft/src/NoiseGenerator.class | Bin 0 -> 220 bytes .../minecraft/src/NoiseGeneratorOctaves.class | Bin 0 -> 1231 bytes .../minecraft/src/NoiseGeneratorPerlin.class | Bin 0 -> 3025 bytes bin/net/minecraft/src/OSMap.class | Bin 0 -> 727 bytes bin/net/minecraft/src/OSMapIsom.class | Bin 0 -> 747 bytes bin/net/minecraft/src/OpenGlCapsChecker.class | Bin 0 -> 483 bytes bin/net/minecraft/src/PanelCrashReport.class | Bin 0 -> 4716 bytes bin/net/minecraft/src/Path.class | Bin 0 -> 1966 bytes bin/net/minecraft/src/PathEntity.class | Bin 0 -> 1004 bytes bin/net/minecraft/src/PathPoint.class | Bin 0 -> 1590 bytes bin/net/minecraft/src/Pathfinder.class | Bin 0 -> 5241 bytes bin/net/minecraft/src/PlayerController.class | Bin 0 -> 2227 bytes .../src/PlayerControllerCreative.class | Bin 0 -> 1470 bytes .../minecraft/src/PlayerControllerSP.class | Bin 0 -> 4482 bytes .../minecraft/src/PositionTextureVertex.class | Bin 0 -> 861 bytes bin/net/minecraft/src/RecipeSorter.class | Bin 0 -> 731 bytes bin/net/minecraft/src/RecipesArmor.class | Bin 0 -> 1948 bytes bin/net/minecraft/src/RecipesCrafting.class | Bin 0 -> 916 bytes bin/net/minecraft/src/RecipesFood.class | Bin 0 -> 965 bytes bin/net/minecraft/src/RecipesIngots.class | Bin 0 -> 1201 bytes bin/net/minecraft/src/RecipesTools.class | Bin 0 -> 1981 bytes bin/net/minecraft/src/RecipesWeapons.class | Bin 0 -> 1707 bytes bin/net/minecraft/src/Render.class | Bin 0 -> 6447 bytes bin/net/minecraft/src/RenderArrow.class | Bin 0 -> 2049 bytes bin/net/minecraft/src/RenderBlocks.class | Bin 0 -> 23876 bytes bin/net/minecraft/src/RenderCreeper.class | Bin 0 -> 1253 bytes bin/net/minecraft/src/RenderEngine.class | Bin 0 -> 6910 bytes bin/net/minecraft/src/RenderEntity.class | Bin 0 -> 672 bytes bin/net/minecraft/src/RenderFallingSand.class | Bin 0 -> 1374 bytes bin/net/minecraft/src/RenderGiantZombie.class | Bin 0 -> 667 bytes bin/net/minecraft/src/RenderGlobal.class | Bin 0 -> 26570 bytes bin/net/minecraft/src/RenderHelper.class | Bin 0 -> 1775 bytes bin/net/minecraft/src/RenderItem.class | Bin 0 -> 5409 bytes bin/net/minecraft/src/RenderList.class | Bin 0 -> 1522 bytes bin/net/minecraft/src/RenderLiving.class | Bin 0 -> 3422 bytes bin/net/minecraft/src/RenderManager.class | Bin 0 -> 5499 bytes bin/net/minecraft/src/RenderMinecart.class | Bin 0 -> 2586 bytes bin/net/minecraft/src/RenderPainting.class | Bin 0 -> 3347 bytes bin/net/minecraft/src/RenderPig.class | Bin 0 -> 774 bytes bin/net/minecraft/src/RenderPlayer.class | Bin 0 -> 3334 bytes bin/net/minecraft/src/RenderSheep.class | Bin 0 -> 785 bytes bin/net/minecraft/src/RenderSorter.class | Bin 0 -> 821 bytes bin/net/minecraft/src/RenderSpider.class | Bin 0 -> 1222 bytes bin/net/minecraft/src/RenderTNTPrimed.class | Bin 0 -> 1501 bytes bin/net/minecraft/src/ScaledResolution.class | Bin 0 -> 556 bytes bin/net/minecraft/src/Session.class | Bin 0 -> 1891 bytes bin/net/minecraft/src/SignModel.class | Bin 0 -> 606 bytes bin/net/minecraft/src/Slot.class | Bin 0 -> 1594 bytes bin/net/minecraft/src/SlotArmor.class | Bin 0 -> 870 bytes bin/net/minecraft/src/SlotCrafting.class | Bin 0 -> 914 bytes bin/net/minecraft/src/SoundManager.class | Bin 0 -> 4530 bytes bin/net/minecraft/src/SoundPool.class | Bin 0 -> 2016 bytes bin/net/minecraft/src/SoundPoolEntry.class | Bin 0 -> 377 bytes bin/net/minecraft/src/SpawnerAnimals.class | Bin 0 -> 3155 bytes bin/net/minecraft/src/SpawnerMonsters.class | Bin 0 -> 849 bytes bin/net/minecraft/src/StepSound.class | Bin 0 -> 1114 bytes bin/net/minecraft/src/StepSoundGlass.class | Bin 0 -> 356 bytes bin/net/minecraft/src/StepSoundSand.class | Bin 0 -> 353 bytes .../minecraft/src/TerrainTextureManager.class | Bin 0 -> 4484 bytes bin/net/minecraft/src/Tessellator.class | Bin 0 -> 6069 bytes bin/net/minecraft/src/TextureFX.class | Bin 0 -> 486 bytes bin/net/minecraft/src/TextureFlamesFX.class | Bin 0 -> 1567 bytes bin/net/minecraft/src/TextureGearsFX.class | Bin 0 -> 1751 bytes bin/net/minecraft/src/TextureLavaFX.class | Bin 0 -> 1788 bytes bin/net/minecraft/src/TextureLavaFlowFX.class | Bin 0 -> 1897 bytes bin/net/minecraft/src/TextureWaterFX.class | Bin 0 -> 1576 bytes .../minecraft/src/TextureWaterFlowFX.class | Bin 0 -> 1626 bytes bin/net/minecraft/src/TexturedQuad.class | Bin 0 -> 1776 bytes .../minecraft/src/ThreadDownloadImage.class | Bin 0 -> 1589 bytes .../src/ThreadDownloadImageData.class | Bin 0 -> 675 bytes .../src/ThreadDownloadResources.class | Bin 0 -> 4017 bytes .../minecraft/src/ThreadRunIsoClient.class | Bin 0 -> 656 bytes .../minecraft/src/ThreadSleepForever.class | Bin 0 -> 691 bytes bin/net/minecraft/src/TileEntity.class | Bin 0 -> 3503 bytes bin/net/minecraft/src/TileEntityChest.class | Bin 0 -> 2154 bytes bin/net/minecraft/src/TileEntityFurnace.class | Bin 0 -> 5238 bytes .../minecraft/src/TileEntityMobSpawner.class | Bin 0 -> 3397 bytes .../src/TileEntityMobSpawnerRenderer.class | Bin 0 -> 1796 bytes .../minecraft/src/TileEntityRenderer.class | Bin 0 -> 3810 bytes bin/net/minecraft/src/TileEntitySign.class | Bin 0 -> 1469 bytes .../src/TileEntitySignRenderer.class | Bin 0 -> 2143 bytes .../src/TileEntitySpecialRenderer.class | Bin 0 -> 950 bytes bin/net/minecraft/src/Timer.class | Bin 0 -> 1131 bytes .../minecraft/src/UnexpectedThrowable.class | Bin 0 -> 404 bytes bin/net/minecraft/src/Vec3D.class | Bin 0 -> 3441 bytes bin/net/minecraft/src/World.class | Bin 0 -> 32054 bytes bin/net/minecraft/src/WorldGenDungeons.class | Bin 0 -> 3217 bytes bin/net/minecraft/src/WorldGenFlowers.class | Bin 0 -> 895 bytes bin/net/minecraft/src/WorldGenLiquids.class | Bin 0 -> 1010 bytes bin/net/minecraft/src/WorldGenMinable.class | Bin 0 -> 1589 bytes bin/net/minecraft/src/WorldGenTrees.class | Bin 0 -> 1807 bytes bin/net/minecraft/src/WorldGenerator.class | Bin 0 -> 350 bytes bin/net/minecraft/src/WorldIso.class | Bin 0 -> 716 bytes bin/net/minecraft/src/WorldRenderer.class | Bin 0 -> 5873 bytes jars/deobfuscated-source.jar | Bin 0 -> 367966 bytes jars/deobfuscated.jar | Bin 0 -> 833329 bytes md5/original.md5 | 294 +++ .../net/minecraft/client/MinecraftApplet.java | 105 ++ .../net/minecraft/isom/IsomPreviewApplet.java | 22 + source/net/minecraft/src/AxisAlignedBB.java | 313 ++++ source/net/minecraft/src/Block.java | 432 +++++ source/net/minecraft/src/BlockBookshelf.java | 17 + source/net/minecraft/src/BlockBreakable.java | 19 + source/net/minecraft/src/BlockChest.java | 196 ++ source/net/minecraft/src/BlockContainer.java | 23 + source/net/minecraft/src/BlockCrops.java | 110 ++ source/net/minecraft/src/BlockDirt.java | 7 + source/net/minecraft/src/BlockDoor.java | 154 ++ source/net/minecraft/src/BlockFarmland.java | 93 + source/net/minecraft/src/BlockFire.java | 225 +++ source/net/minecraft/src/BlockFlower.java | 58 + source/net/minecraft/src/BlockFlowing.java | 253 +++ source/net/minecraft/src/BlockFluid.java | 273 +++ source/net/minecraft/src/BlockFurnace.java | 106 ++ source/net/minecraft/src/BlockGears.java | 33 + source/net/minecraft/src/BlockGlass.java | 13 + source/net/minecraft/src/BlockGrass.java | 37 + source/net/minecraft/src/BlockGravel.java | 13 + source/net/minecraft/src/BlockLadder.java | 121 ++ source/net/minecraft/src/BlockLeaves.java | 53 + source/net/minecraft/src/BlockLeavesBase.java | 19 + source/net/minecraft/src/BlockLog.java | 22 + .../net/minecraft/src/BlockMinecartTrack.java | 92 + source/net/minecraft/src/BlockMobSpawner.java | 15 + source/net/minecraft/src/BlockMushroom.java | 17 + source/net/minecraft/src/BlockObsidian.java | 17 + source/net/minecraft/src/BlockOre.java | 17 + source/net/minecraft/src/BlockOreBlock.java | 12 + source/net/minecraft/src/BlockSand.java | 53 + source/net/minecraft/src/BlockSapling.java | 28 + source/net/minecraft/src/BlockSign.java | 54 + source/net/minecraft/src/BlockSponge.java | 35 + source/net/minecraft/src/BlockStairs.java | 249 +++ source/net/minecraft/src/BlockStationary.java | 25 + source/net/minecraft/src/BlockStep.java | 59 + source/net/minecraft/src/BlockStone.java | 13 + source/net/minecraft/src/BlockTNT.java | 29 + source/net/minecraft/src/BlockTorch.java | 166 ++ source/net/minecraft/src/BlockWorkbench.java | 17 + .../net/minecraft/src/CanvasCrashReport.java | 11 + .../net/minecraft/src/CanvasIsomPreview.java | 378 ++++ .../minecraft/src/CanvasMinecraftApplet.java | 22 + .../net/minecraft/src/CanvasMojangLogo.java | 29 + source/net/minecraft/src/ChatLine.java | 11 + source/net/minecraft/src/Chunk.java | 473 +++++ source/net/minecraft/src/ChunkCache.java | 123 ++ source/net/minecraft/src/ChunkLoader.java | 186 ++ source/net/minecraft/src/ChunkPosition.java | 26 + .../minecraft/src/ChunkProviderGenerate.java | 610 +++++++ .../net/minecraft/src/ChunkProviderIso.java | 66 + .../src/ChunkProviderLoadOrGenerate.java | 203 +++ source/net/minecraft/src/ClippingHelper.java | 18 + .../src/ClippingHelperImplementation.java | 82 + .../minecraft/src/CompressedStreamTools.java | 50 + source/net/minecraft/src/CraftingManager.java | 107 ++ source/net/minecraft/src/CraftingRecipe.java | 64 + source/net/minecraft/src/EffectRenderer.java | 162 ++ source/net/minecraft/src/Entity.java | 728 ++++++++ source/net/minecraft/src/EntityAnimal.java | 23 + source/net/minecraft/src/EntityArrow.java | 217 +++ source/net/minecraft/src/EntityBubbleFX.java | 36 + source/net/minecraft/src/EntityCreature.java | 125 ++ source/net/minecraft/src/EntityCreeper.java | 64 + source/net/minecraft/src/EntityDiggingFX.java | 32 + source/net/minecraft/src/EntityExplodeFX.java | 38 + source/net/minecraft/src/EntityFX.java | 99 + .../net/minecraft/src/EntityFallingSand.java | 78 + source/net/minecraft/src/EntityFlameFX.java | 59 + source/net/minecraft/src/EntityGiant.java | 17 + source/net/minecraft/src/EntityItem.java | 180 ++ source/net/minecraft/src/EntityLavaFX.java | 54 + source/net/minecraft/src/EntityList.java | 72 + source/net/minecraft/src/EntityLiving.java | 548 ++++++ source/net/minecraft/src/EntityMinecart.java | 520 ++++++ source/net/minecraft/src/EntityMonster.java | 70 + source/net/minecraft/src/EntityPainting.java | 212 +++ source/net/minecraft/src/EntityPickupFX.java | 54 + source/net/minecraft/src/EntityPig.java | 47 + source/net/minecraft/src/EntityPlayer.java | 219 +++ source/net/minecraft/src/EntityPlayerSP.java | 118 ++ source/net/minecraft/src/EntityRainFX.java | 53 + source/net/minecraft/src/EntityRenderer.java | 623 +++++++ source/net/minecraft/src/EntitySheep.java | 49 + source/net/minecraft/src/EntitySkeleton.java | 52 + source/net/minecraft/src/EntitySmokeFX.java | 63 + source/net/minecraft/src/EntitySorter.java | 19 + source/net/minecraft/src/EntitySpider.java | 56 + source/net/minecraft/src/EntitySplashFX.java | 15 + source/net/minecraft/src/EntityTNTPrimed.java | 68 + source/net/minecraft/src/EntityZombie.java | 25 + source/net/minecraft/src/EnumArt.java | 37 + source/net/minecraft/src/EnumOS.java | 9 + source/net/minecraft/src/EnumOSIsom.java | 9 + source/net/minecraft/src/EnumSkyBlock.java | 12 + source/net/minecraft/src/Explosion.java | 130 ++ source/net/minecraft/src/FontRenderer.java | 177 ++ source/net/minecraft/src/Frustrum.java | 22 + source/net/minecraft/src/GLAllocation.java | 62 + source/net/minecraft/src/GameSettings.java | 202 +++ source/net/minecraft/src/Gui.java | 54 + source/net/minecraft/src/GuiButton.java | 61 + source/net/minecraft/src/GuiChest.java | 54 + source/net/minecraft/src/GuiContainer.java | 226 +++ source/net/minecraft/src/GuiControls.java | 52 + source/net/minecraft/src/GuiCrafting.java | 75 + source/net/minecraft/src/GuiCreateWorld.java | 69 + source/net/minecraft/src/GuiDeleteWorld.java | 31 + source/net/minecraft/src/GuiEditSign.java | 77 + source/net/minecraft/src/GuiErrorScreen.java | 19 + source/net/minecraft/src/GuiFurnace.java | 48 + source/net/minecraft/src/GuiGameOver.java | 48 + source/net/minecraft/src/GuiIngame.java | 222 +++ source/net/minecraft/src/GuiIngameMenu.java | 50 + source/net/minecraft/src/GuiInventory.java | 117 ++ source/net/minecraft/src/GuiMainMenu.java | 71 + source/net/minecraft/src/GuiOptions.java | 45 + source/net/minecraft/src/GuiScreen.java | 138 ++ source/net/minecraft/src/GuiSmallButton.java | 7 + source/net/minecraft/src/GuiYesNo.java | 31 + source/net/minecraft/src/IBlockAccess.java | 15 + source/net/minecraft/src/ICamera.java | 7 + source/net/minecraft/src/IChunkLoader.java | 15 + source/net/minecraft/src/IChunkProvider.java | 15 + source/net/minecraft/src/IInventory.java | 17 + source/net/minecraft/src/IProgressUpdate.java | 9 + source/net/minecraft/src/IWorldAccess.java | 17 + source/net/minecraft/src/ImageBuffer.java | 7 + .../minecraft/src/ImageBufferDownload.java | 88 + .../minecraft/src/InventoryCraftResult.java | 38 + .../net/minecraft/src/InventoryCrafting.java | 59 + .../minecraft/src/InventoryLargeChest.java | 47 + source/net/minecraft/src/InventoryPlayer.java | 329 ++++ source/net/minecraft/src/IsoImageBuffer.java | 32 + source/net/minecraft/src/Item.java | 141 ++ source/net/minecraft/src/ItemArmor.java | 20 + source/net/minecraft/src/ItemAxe.java | 9 + source/net/minecraft/src/ItemBlock.java | 52 + source/net/minecraft/src/ItemBow.java | 17 + source/net/minecraft/src/ItemBucket.java | 82 + source/net/minecraft/src/ItemDoor.java | 62 + .../net/minecraft/src/ItemFlintAndSteel.java | 44 + source/net/minecraft/src/ItemFood.java | 17 + source/net/minecraft/src/ItemHoe.java | 37 + source/net/minecraft/src/ItemMinecart.java | 19 + source/net/minecraft/src/ItemPainting.java | 37 + source/net/minecraft/src/ItemPickaxe.java | 15 + source/net/minecraft/src/ItemRenderer.java | 361 ++++ source/net/minecraft/src/ItemSaddle.java | 24 + source/net/minecraft/src/ItemSeeds.java | 25 + source/net/minecraft/src/ItemSign.java | 26 + source/net/minecraft/src/ItemSoup.java | 12 + source/net/minecraft/src/ItemSpade.java | 9 + source/net/minecraft/src/ItemStack.java | 128 ++ source/net/minecraft/src/ItemSword.java | 28 + source/net/minecraft/src/ItemTool.java | 44 + source/net/minecraft/src/KeyBinding.java | 11 + .../minecraft/src/LoadingScreenRenderer.java | 124 ++ source/net/minecraft/src/Material.java | 37 + source/net/minecraft/src/MaterialLiquid.java | 11 + source/net/minecraft/src/MaterialLogic.java | 15 + .../minecraft/src/MaterialTransparent.java | 15 + source/net/minecraft/src/MathHelper.java | 58 + .../net/minecraft/src/MetadataChunkBlock.java | 153 ++ .../net/minecraft/src/MinecartTrackLogic.java | 250 +++ source/net/minecraft/src/Minecraft.java | 1025 +++++++++++ .../minecraft/src/MinecraftAppletImpl.java | 20 + source/net/minecraft/src/MinecraftError.java | 4 + source/net/minecraft/src/ModelBase.java | 11 + source/net/minecraft/src/ModelBiped.java | 73 + source/net/minecraft/src/ModelCreeper.java | 56 + source/net/minecraft/src/ModelMinecart.java | 47 + source/net/minecraft/src/ModelPig.java | 11 + source/net/minecraft/src/ModelQuadruped.java | 49 + source/net/minecraft/src/ModelRenderer.java | 131 ++ source/net/minecraft/src/ModelSheep.java | 13 + source/net/minecraft/src/ModelSheepFur.java | 26 + source/net/minecraft/src/ModelSkeleton.java | 21 + source/net/minecraft/src/ModelSpider.java | 116 ++ source/net/minecraft/src/ModelZombie.java | 21 + source/net/minecraft/src/MouseHelper.java | 81 + source/net/minecraft/src/MovementInput.java | 17 + .../src/MovementInputFromOptions.java | 67 + .../minecraft/src/MovingObjectPosition.java | 26 + source/net/minecraft/src/NBTBase.java | 102 ++ source/net/minecraft/src/NBTTagByte.java | 32 + source/net/minecraft/src/NBTTagByteArray.java | 35 + source/net/minecraft/src/NBTTagCompound.java | 128 ++ source/net/minecraft/src/NBTTagDouble.java | 32 + source/net/minecraft/src/NBTTagEnd.java | 21 + source/net/minecraft/src/NBTTagFloat.java | 32 + source/net/minecraft/src/NBTTagInt.java | 32 + source/net/minecraft/src/NBTTagList.java | 62 + source/net/minecraft/src/NBTTagLong.java | 32 + source/net/minecraft/src/NBTTagShort.java | 32 + source/net/minecraft/src/NBTTagString.java | 35 + .../net/minecraft/src/NextTickListEntry.java | 44 + source/net/minecraft/src/NibbleArray.java | 36 + source/net/minecraft/src/NoiseGenerator.java | 4 + .../minecraft/src/NoiseGeneratorOctaves.java | 61 + .../minecraft/src/NoiseGeneratorPerlin.java | 162 ++ source/net/minecraft/src/OSMap.java | 28 + source/net/minecraft/src/OSMapIsom.java | 28 + .../net/minecraft/src/OpenGlCapsChecker.java | 9 + .../net/minecraft/src/PanelCrashReport.java | 85 + source/net/minecraft/src/Path.java | 119 ++ source/net/minecraft/src/PathEntity.java | 27 + source/net/minecraft/src/PathPoint.java | 44 + source/net/minecraft/src/Pathfinder.java | 205 +++ .../net/minecraft/src/PlayerController.java | 60 + .../src/PlayerControllerCreative.java | 33 + .../net/minecraft/src/PlayerControllerSP.java | 124 ++ .../minecraft/src/PositionTextureVertex.java | 27 + source/net/minecraft/src/RecipeSorter.java | 19 + source/net/minecraft/src/RecipesArmor.java | 18 + source/net/minecraft/src/RecipesCrafting.java | 9 + source/net/minecraft/src/RecipesFood.java | 8 + source/net/minecraft/src/RecipesIngots.java | 15 + source/net/minecraft/src/RecipesTools.java | 18 + source/net/minecraft/src/RecipesWeapons.java | 20 + source/net/minecraft/src/Render.java | 224 +++ source/net/minecraft/src/RenderArrow.java | 67 + source/net/minecraft/src/RenderBlocks.java | 1401 +++++++++++++++ source/net/minecraft/src/RenderCreeper.java | 56 + source/net/minecraft/src/RenderEngine.java | 254 +++ source/net/minecraft/src/RenderEntity.java | 11 + .../net/minecraft/src/RenderFallingSand.java | 27 + .../net/minecraft/src/RenderGiantZombie.java | 20 + source/net/minecraft/src/RenderGlobal.java | 1083 +++++++++++ source/net/minecraft/src/RenderHelper.java | 49 + source/net/minecraft/src/RenderItem.java | 193 ++ source/net/minecraft/src/RenderList.java | 61 + source/net/minecraft/src/RenderLiving.java | 133 ++ source/net/minecraft/src/RenderManager.java | 107 ++ source/net/minecraft/src/RenderMinecart.java | 70 + source/net/minecraft/src/RenderPainting.java | 119 ++ source/net/minecraft/src/RenderPig.java | 17 + source/net/minecraft/src/RenderPlayer.java | 55 + source/net/minecraft/src/RenderSheep.java | 17 + source/net/minecraft/src/RenderSorter.java | 21 + source/net/minecraft/src/RenderSpider.java | 38 + source/net/minecraft/src/RenderTNTPrimed.java | 54 + .../net/minecraft/src/ScaledResolution.java | 26 + source/net/minecraft/src/Session.java | 48 + source/net/minecraft/src/SignModel.java | 17 + source/net/minecraft/src/Slot.java | 50 + source/net/minecraft/src/SlotArmor.java | 20 + source/net/minecraft/src/SlotCrafting.java | 23 + source/net/minecraft/src/SoundManager.java | 138 ++ source/net/minecraft/src/SoundPool.java | 42 + source/net/minecraft/src/SoundPoolEntry.java | 13 + source/net/minecraft/src/SpawnerAnimals.java | 97 + source/net/minecraft/src/SpawnerMonsters.java | 17 + source/net/minecraft/src/StepSound.java | 29 + source/net/minecraft/src/StepSoundGlass.java | 11 + source/net/minecraft/src/StepSoundSand.java | 11 + .../minecraft/src/TerrainTextureManager.java | 214 +++ source/net/minecraft/src/Tessellator.java | 298 +++ source/net/minecraft/src/TextureFX.java | 16 + source/net/minecraft/src/TextureFlamesFX.java | 77 + source/net/minecraft/src/TextureGearsFX.java | 65 + source/net/minecraft/src/TextureLavaFX.java | 81 + .../net/minecraft/src/TextureLavaFlowFX.java | 85 + source/net/minecraft/src/TextureWaterFX.java | 85 + .../net/minecraft/src/TextureWaterFlowFX.java | 86 + source/net/minecraft/src/TexturedQuad.java | 47 + .../minecraft/src/ThreadDownloadImage.java | 44 + .../src/ThreadDownloadImageData.java | 14 + .../src/ThreadDownloadResources.java | 117 ++ .../net/minecraft/src/ThreadRunIsoClient.java | 21 + .../net/minecraft/src/ThreadSleepForever.java | 22 + source/net/minecraft/src/TileEntity.java | 86 + source/net/minecraft/src/TileEntityChest.java | 80 + .../net/minecraft/src/TileEntityFurnace.java | 190 ++ .../minecraft/src/TileEntityMobSpawner.java | 94 + .../src/TileEntityMobSpawnerRenderer.java | 36 + .../net/minecraft/src/TileEntityRenderer.java | 86 + source/net/minecraft/src/TileEntitySign.java | 26 + .../minecraft/src/TileEntitySignRenderer.java | 41 + .../src/TileEntitySpecialRenderer.java | 20 + source/net/minecraft/src/Timer.java | 58 + .../minecraft/src/UnexpectedThrowable.java | 11 + source/net/minecraft/src/Vec3D.java | 135 ++ source/net/minecraft/src/World.java | 1599 +++++++++++++++++ .../net/minecraft/src/WorldGenDungeons.java | 116 ++ source/net/minecraft/src/WorldGenFlowers.java | 24 + source/net/minecraft/src/WorldGenLiquids.java | 61 + source/net/minecraft/src/WorldGenMinable.java | 47 + source/net/minecraft/src/WorldGenTrees.java | 78 + source/net/minecraft/src/WorldGenerator.java | 10 + source/net/minecraft/src/WorldIso.java | 16 + source/net/minecraft/src/WorldRenderer.java | 214 +++ src/net/minecraft/client/MinecraftApplet.java | 105 ++ src/net/minecraft/isom/IsomPreviewApplet.java | 22 + src/net/minecraft/src/AxisAlignedBB.java | 313 ++++ src/net/minecraft/src/Block.java | 432 +++++ src/net/minecraft/src/BlockBookshelf.java | 17 + src/net/minecraft/src/BlockBreakable.java | 19 + src/net/minecraft/src/BlockChest.java | 196 ++ src/net/minecraft/src/BlockContainer.java | 23 + src/net/minecraft/src/BlockCrops.java | 110 ++ src/net/minecraft/src/BlockDirt.java | 7 + src/net/minecraft/src/BlockDoor.java | 154 ++ src/net/minecraft/src/BlockFarmland.java | 93 + src/net/minecraft/src/BlockFire.java | 225 +++ src/net/minecraft/src/BlockFlower.java | 58 + src/net/minecraft/src/BlockFlowing.java | 253 +++ src/net/minecraft/src/BlockFluid.java | 273 +++ src/net/minecraft/src/BlockFurnace.java | 106 ++ src/net/minecraft/src/BlockGears.java | 33 + src/net/minecraft/src/BlockGlass.java | 13 + src/net/minecraft/src/BlockGrass.java | 37 + src/net/minecraft/src/BlockGravel.java | 13 + src/net/minecraft/src/BlockLadder.java | 121 ++ src/net/minecraft/src/BlockLeaves.java | 53 + src/net/minecraft/src/BlockLeavesBase.java | 19 + src/net/minecraft/src/BlockLog.java | 22 + src/net/minecraft/src/BlockMinecartTrack.java | 92 + src/net/minecraft/src/BlockMobSpawner.java | 15 + src/net/minecraft/src/BlockMushroom.java | 17 + src/net/minecraft/src/BlockObsidian.java | 17 + src/net/minecraft/src/BlockOre.java | 17 + src/net/minecraft/src/BlockOreBlock.java | 12 + src/net/minecraft/src/BlockSand.java | 53 + src/net/minecraft/src/BlockSapling.java | 28 + src/net/minecraft/src/BlockSign.java | 54 + src/net/minecraft/src/BlockSponge.java | 35 + src/net/minecraft/src/BlockStairs.java | 249 +++ src/net/minecraft/src/BlockStationary.java | 25 + src/net/minecraft/src/BlockStep.java | 59 + src/net/minecraft/src/BlockStone.java | 13 + src/net/minecraft/src/BlockTNT.java | 29 + src/net/minecraft/src/BlockTorch.java | 166 ++ src/net/minecraft/src/BlockWorkbench.java | 17 + src/net/minecraft/src/CanvasCrashReport.java | 11 + src/net/minecraft/src/CanvasIsomPreview.java | 378 ++++ .../minecraft/src/CanvasMinecraftApplet.java | 22 + src/net/minecraft/src/CanvasMojangLogo.java | 29 + src/net/minecraft/src/ChatLine.java | 11 + src/net/minecraft/src/Chunk.java | 473 +++++ src/net/minecraft/src/ChunkCache.java | 123 ++ src/net/minecraft/src/ChunkLoader.java | 186 ++ src/net/minecraft/src/ChunkPosition.java | 26 + .../minecraft/src/ChunkProviderGenerate.java | 610 +++++++ src/net/minecraft/src/ChunkProviderIso.java | 66 + .../src/ChunkProviderLoadOrGenerate.java | 203 +++ src/net/minecraft/src/ClippingHelper.java | 18 + .../src/ClippingHelperImplementation.java | 82 + .../minecraft/src/CompressedStreamTools.java | 50 + src/net/minecraft/src/CraftingManager.java | 107 ++ src/net/minecraft/src/CraftingRecipe.java | 64 + src/net/minecraft/src/EffectRenderer.java | 162 ++ src/net/minecraft/src/Entity.java | 728 ++++++++ src/net/minecraft/src/EntityAnimal.java | 23 + src/net/minecraft/src/EntityArrow.java | 217 +++ src/net/minecraft/src/EntityBubbleFX.java | 36 + src/net/minecraft/src/EntityCreature.java | 125 ++ src/net/minecraft/src/EntityCreeper.java | 64 + src/net/minecraft/src/EntityDiggingFX.java | 32 + src/net/minecraft/src/EntityExplodeFX.java | 38 + src/net/minecraft/src/EntityFX.java | 99 + src/net/minecraft/src/EntityFallingSand.java | 78 + src/net/minecraft/src/EntityFlameFX.java | 59 + src/net/minecraft/src/EntityGiant.java | 17 + src/net/minecraft/src/EntityItem.java | 180 ++ src/net/minecraft/src/EntityLavaFX.java | 54 + src/net/minecraft/src/EntityList.java | 72 + src/net/minecraft/src/EntityLiving.java | 548 ++++++ src/net/minecraft/src/EntityMinecart.java | 520 ++++++ src/net/minecraft/src/EntityMonster.java | 70 + src/net/minecraft/src/EntityPainting.java | 212 +++ src/net/minecraft/src/EntityPickupFX.java | 54 + src/net/minecraft/src/EntityPig.java | 47 + src/net/minecraft/src/EntityPlayer.java | 219 +++ src/net/minecraft/src/EntityPlayerSP.java | 118 ++ src/net/minecraft/src/EntityRainFX.java | 53 + src/net/minecraft/src/EntityRenderer.java | 623 +++++++ src/net/minecraft/src/EntitySheep.java | 49 + src/net/minecraft/src/EntitySkeleton.java | 52 + src/net/minecraft/src/EntitySmokeFX.java | 63 + src/net/minecraft/src/EntitySorter.java | 19 + src/net/minecraft/src/EntitySpider.java | 56 + src/net/minecraft/src/EntitySplashFX.java | 15 + src/net/minecraft/src/EntityTNTPrimed.java | 68 + src/net/minecraft/src/EntityZombie.java | 25 + src/net/minecraft/src/EnumArt.java | 37 + src/net/minecraft/src/EnumOS.java | 9 + src/net/minecraft/src/EnumOSIsom.java | 9 + src/net/minecraft/src/EnumSkyBlock.java | 12 + src/net/minecraft/src/Explosion.java | 130 ++ src/net/minecraft/src/FontRenderer.java | 177 ++ src/net/minecraft/src/Frustrum.java | 22 + src/net/minecraft/src/GLAllocation.java | 62 + src/net/minecraft/src/GameSettings.java | 202 +++ src/net/minecraft/src/Gui.java | 54 + src/net/minecraft/src/GuiButton.java | 61 + src/net/minecraft/src/GuiChest.java | 54 + src/net/minecraft/src/GuiContainer.java | 226 +++ src/net/minecraft/src/GuiControls.java | 52 + src/net/minecraft/src/GuiCrafting.java | 75 + src/net/minecraft/src/GuiCreateWorld.java | 69 + src/net/minecraft/src/GuiDeleteWorld.java | 31 + src/net/minecraft/src/GuiEditSign.java | 77 + src/net/minecraft/src/GuiErrorScreen.java | 19 + src/net/minecraft/src/GuiFurnace.java | 48 + src/net/minecraft/src/GuiGameOver.java | 48 + src/net/minecraft/src/GuiIngame.java | 222 +++ src/net/minecraft/src/GuiIngameMenu.java | 50 + src/net/minecraft/src/GuiInventory.java | 117 ++ src/net/minecraft/src/GuiMainMenu.java | 71 + src/net/minecraft/src/GuiOptions.java | 45 + src/net/minecraft/src/GuiScreen.java | 138 ++ src/net/minecraft/src/GuiSmallButton.java | 7 + src/net/minecraft/src/GuiYesNo.java | 31 + src/net/minecraft/src/IBlockAccess.java | 15 + src/net/minecraft/src/ICamera.java | 7 + src/net/minecraft/src/IChunkLoader.java | 15 + src/net/minecraft/src/IChunkProvider.java | 15 + src/net/minecraft/src/IInventory.java | 17 + src/net/minecraft/src/IProgressUpdate.java | 9 + src/net/minecraft/src/IWorldAccess.java | 17 + src/net/minecraft/src/ImageBuffer.java | 7 + .../minecraft/src/ImageBufferDownload.java | 88 + .../minecraft/src/InventoryCraftResult.java | 38 + src/net/minecraft/src/InventoryCrafting.java | 59 + .../minecraft/src/InventoryLargeChest.java | 47 + src/net/minecraft/src/InventoryPlayer.java | 329 ++++ src/net/minecraft/src/IsoImageBuffer.java | 32 + src/net/minecraft/src/Item.java | 141 ++ src/net/minecraft/src/ItemArmor.java | 20 + src/net/minecraft/src/ItemAxe.java | 9 + src/net/minecraft/src/ItemBlock.java | 52 + src/net/minecraft/src/ItemBow.java | 17 + src/net/minecraft/src/ItemBucket.java | 82 + src/net/minecraft/src/ItemDoor.java | 62 + src/net/minecraft/src/ItemFlintAndSteel.java | 44 + src/net/minecraft/src/ItemFood.java | 17 + src/net/minecraft/src/ItemHoe.java | 37 + src/net/minecraft/src/ItemMinecart.java | 19 + src/net/minecraft/src/ItemPainting.java | 37 + src/net/minecraft/src/ItemPickaxe.java | 15 + src/net/minecraft/src/ItemRenderer.java | 361 ++++ src/net/minecraft/src/ItemSaddle.java | 24 + src/net/minecraft/src/ItemSeeds.java | 25 + src/net/minecraft/src/ItemSign.java | 26 + src/net/minecraft/src/ItemSoup.java | 12 + src/net/minecraft/src/ItemSpade.java | 9 + src/net/minecraft/src/ItemStack.java | 128 ++ src/net/minecraft/src/ItemSword.java | 28 + src/net/minecraft/src/ItemTool.java | 44 + src/net/minecraft/src/KeyBinding.java | 11 + .../minecraft/src/LoadingScreenRenderer.java | 124 ++ src/net/minecraft/src/Material.java | 37 + src/net/minecraft/src/MaterialLiquid.java | 11 + src/net/minecraft/src/MaterialLogic.java | 15 + .../minecraft/src/MaterialTransparent.java | 15 + src/net/minecraft/src/MathHelper.java | 58 + src/net/minecraft/src/MetadataChunkBlock.java | 153 ++ src/net/minecraft/src/MinecartTrackLogic.java | 250 +++ src/net/minecraft/src/Minecraft.java | 1025 +++++++++++ .../minecraft/src/MinecraftAppletImpl.java | 20 + src/net/minecraft/src/MinecraftError.java | 4 + src/net/minecraft/src/ModelBase.java | 11 + src/net/minecraft/src/ModelBiped.java | 73 + src/net/minecraft/src/ModelCreeper.java | 56 + src/net/minecraft/src/ModelMinecart.java | 47 + src/net/minecraft/src/ModelPig.java | 11 + src/net/minecraft/src/ModelQuadruped.java | 49 + src/net/minecraft/src/ModelRenderer.java | 131 ++ src/net/minecraft/src/ModelSheep.java | 13 + src/net/minecraft/src/ModelSheepFur.java | 26 + src/net/minecraft/src/ModelSkeleton.java | 21 + src/net/minecraft/src/ModelSpider.java | 116 ++ src/net/minecraft/src/ModelZombie.java | 21 + src/net/minecraft/src/MouseHelper.java | 81 + src/net/minecraft/src/MovementInput.java | 17 + .../src/MovementInputFromOptions.java | 67 + .../minecraft/src/MovingObjectPosition.java | 26 + src/net/minecraft/src/NBTBase.java | 102 ++ src/net/minecraft/src/NBTTagByte.java | 32 + src/net/minecraft/src/NBTTagByteArray.java | 35 + src/net/minecraft/src/NBTTagCompound.java | 128 ++ src/net/minecraft/src/NBTTagDouble.java | 32 + src/net/minecraft/src/NBTTagEnd.java | 21 + src/net/minecraft/src/NBTTagFloat.java | 32 + src/net/minecraft/src/NBTTagInt.java | 32 + src/net/minecraft/src/NBTTagList.java | 62 + src/net/minecraft/src/NBTTagLong.java | 32 + src/net/minecraft/src/NBTTagShort.java | 32 + src/net/minecraft/src/NBTTagString.java | 35 + src/net/minecraft/src/NextTickListEntry.java | 44 + src/net/minecraft/src/NibbleArray.java | 36 + src/net/minecraft/src/NoiseGenerator.java | 4 + .../minecraft/src/NoiseGeneratorOctaves.java | 61 + .../minecraft/src/NoiseGeneratorPerlin.java | 162 ++ src/net/minecraft/src/OSMap.java | 28 + src/net/minecraft/src/OSMapIsom.java | 28 + src/net/minecraft/src/OpenGlCapsChecker.java | 9 + src/net/minecraft/src/PanelCrashReport.java | 85 + src/net/minecraft/src/Path.java | 119 ++ src/net/minecraft/src/PathEntity.java | 27 + src/net/minecraft/src/PathPoint.java | 44 + src/net/minecraft/src/Pathfinder.java | 205 +++ src/net/minecraft/src/PlayerController.java | 60 + .../src/PlayerControllerCreative.java | 33 + src/net/minecraft/src/PlayerControllerSP.java | 124 ++ .../minecraft/src/PositionTextureVertex.java | 27 + src/net/minecraft/src/RecipeSorter.java | 19 + src/net/minecraft/src/RecipesArmor.java | 18 + src/net/minecraft/src/RecipesCrafting.java | 9 + src/net/minecraft/src/RecipesFood.java | 8 + src/net/minecraft/src/RecipesIngots.java | 15 + src/net/minecraft/src/RecipesTools.java | 18 + src/net/minecraft/src/RecipesWeapons.java | 20 + src/net/minecraft/src/Render.java | 224 +++ src/net/minecraft/src/RenderArrow.java | 67 + src/net/minecraft/src/RenderBlocks.java | 1401 +++++++++++++++ src/net/minecraft/src/RenderCreeper.java | 56 + src/net/minecraft/src/RenderEngine.java | 254 +++ src/net/minecraft/src/RenderEntity.java | 11 + src/net/minecraft/src/RenderFallingSand.java | 27 + src/net/minecraft/src/RenderGiantZombie.java | 20 + src/net/minecraft/src/RenderGlobal.java | 1083 +++++++++++ src/net/minecraft/src/RenderHelper.java | 49 + src/net/minecraft/src/RenderItem.java | 193 ++ src/net/minecraft/src/RenderList.java | 61 + src/net/minecraft/src/RenderLiving.java | 133 ++ src/net/minecraft/src/RenderManager.java | 107 ++ src/net/minecraft/src/RenderMinecart.java | 70 + src/net/minecraft/src/RenderPainting.java | 119 ++ src/net/minecraft/src/RenderPig.java | 17 + src/net/minecraft/src/RenderPlayer.java | 55 + src/net/minecraft/src/RenderSheep.java | 17 + src/net/minecraft/src/RenderSorter.java | 21 + src/net/minecraft/src/RenderSpider.java | 38 + src/net/minecraft/src/RenderTNTPrimed.java | 54 + src/net/minecraft/src/ScaledResolution.java | 26 + src/net/minecraft/src/Session.java | 48 + src/net/minecraft/src/SignModel.java | 17 + src/net/minecraft/src/Slot.java | 50 + src/net/minecraft/src/SlotArmor.java | 20 + src/net/minecraft/src/SlotCrafting.java | 23 + src/net/minecraft/src/SoundManager.java | 138 ++ src/net/minecraft/src/SoundPool.java | 42 + src/net/minecraft/src/SoundPoolEntry.java | 13 + src/net/minecraft/src/SpawnerAnimals.java | 97 + src/net/minecraft/src/SpawnerMonsters.java | 17 + src/net/minecraft/src/StepSound.java | 29 + src/net/minecraft/src/StepSoundGlass.java | 11 + src/net/minecraft/src/StepSoundSand.java | 11 + .../minecraft/src/TerrainTextureManager.java | 214 +++ src/net/minecraft/src/Tessellator.java | 298 +++ src/net/minecraft/src/TextureFX.java | 16 + src/net/minecraft/src/TextureFlamesFX.java | 77 + src/net/minecraft/src/TextureGearsFX.java | 65 + src/net/minecraft/src/TextureLavaFX.java | 81 + src/net/minecraft/src/TextureLavaFlowFX.java | 85 + src/net/minecraft/src/TextureWaterFX.java | 85 + src/net/minecraft/src/TextureWaterFlowFX.java | 86 + src/net/minecraft/src/TexturedQuad.java | 47 + .../minecraft/src/ThreadDownloadImage.java | 44 + .../src/ThreadDownloadImageData.java | 14 + .../src/ThreadDownloadResources.java | 117 ++ src/net/minecraft/src/ThreadRunIsoClient.java | 21 + src/net/minecraft/src/ThreadSleepForever.java | 22 + src/net/minecraft/src/TileEntity.java | 86 + src/net/minecraft/src/TileEntityChest.java | 80 + src/net/minecraft/src/TileEntityFurnace.java | 190 ++ .../minecraft/src/TileEntityMobSpawner.java | 94 + .../src/TileEntityMobSpawnerRenderer.java | 36 + src/net/minecraft/src/TileEntityRenderer.java | 86 + src/net/minecraft/src/TileEntitySign.java | 26 + .../minecraft/src/TileEntitySignRenderer.java | 41 + .../src/TileEntitySpecialRenderer.java | 20 + src/net/minecraft/src/Timer.java | 58 + .../minecraft/src/UnexpectedThrowable.java | 11 + src/net/minecraft/src/Vec3D.java | 135 ++ src/net/minecraft/src/World.java | 1599 +++++++++++++++++ src/net/minecraft/src/WorldGenDungeons.java | 116 ++ src/net/minecraft/src/WorldGenFlowers.java | 24 + src/net/minecraft/src/WorldGenLiquids.java | 61 + src/net/minecraft/src/WorldGenMinable.java | 47 + src/net/minecraft/src/WorldGenTrees.java | 78 + src/net/minecraft/src/WorldGenerator.java | 10 + src/net/minecraft/src/WorldIso.java | 16 + src/net/minecraft/src/WorldRenderer.java | 214 +++ 889 files changed, 56634 insertions(+) create mode 100644 .classpath create mode 100644 .project create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 Client.launch create mode 100644 bin/net/minecraft/client/MinecraftApplet.class create mode 100644 bin/net/minecraft/isom/IsomPreviewApplet.class create mode 100644 bin/net/minecraft/src/AxisAlignedBB.class create mode 100644 bin/net/minecraft/src/Block.class create mode 100644 bin/net/minecraft/src/BlockBookshelf.class create mode 100644 bin/net/minecraft/src/BlockBreakable.class create mode 100644 bin/net/minecraft/src/BlockChest.class create mode 100644 bin/net/minecraft/src/BlockContainer.class create mode 100644 bin/net/minecraft/src/BlockCrops.class create mode 100644 bin/net/minecraft/src/BlockDirt.class create mode 100644 bin/net/minecraft/src/BlockDoor.class create mode 100644 bin/net/minecraft/src/BlockFarmland.class create mode 100644 bin/net/minecraft/src/BlockFire.class create mode 100644 bin/net/minecraft/src/BlockFlower.class create mode 100644 bin/net/minecraft/src/BlockFlowing.class create mode 100644 bin/net/minecraft/src/BlockFluid.class create mode 100644 bin/net/minecraft/src/BlockFurnace.class create mode 100644 bin/net/minecraft/src/BlockGears.class create mode 100644 bin/net/minecraft/src/BlockGlass.class create mode 100644 bin/net/minecraft/src/BlockGrass.class create mode 100644 bin/net/minecraft/src/BlockGravel.class create mode 100644 bin/net/minecraft/src/BlockLadder.class create mode 100644 bin/net/minecraft/src/BlockLeaves.class create mode 100644 bin/net/minecraft/src/BlockLeavesBase.class create mode 100644 bin/net/minecraft/src/BlockLog.class create mode 100644 bin/net/minecraft/src/BlockMinecartTrack.class create mode 100644 bin/net/minecraft/src/BlockMobSpawner.class create mode 100644 bin/net/minecraft/src/BlockMushroom.class create mode 100644 bin/net/minecraft/src/BlockObsidian.class create mode 100644 bin/net/minecraft/src/BlockOre.class create mode 100644 bin/net/minecraft/src/BlockOreBlock.class create mode 100644 bin/net/minecraft/src/BlockSand.class create mode 100644 bin/net/minecraft/src/BlockSapling.class create mode 100644 bin/net/minecraft/src/BlockSign.class create mode 100644 bin/net/minecraft/src/BlockSponge.class create mode 100644 bin/net/minecraft/src/BlockStairs.class create mode 100644 bin/net/minecraft/src/BlockStationary.class create mode 100644 bin/net/minecraft/src/BlockStep.class create mode 100644 bin/net/minecraft/src/BlockStone.class create mode 100644 bin/net/minecraft/src/BlockTNT.class create mode 100644 bin/net/minecraft/src/BlockTorch.class create mode 100644 bin/net/minecraft/src/BlockWorkbench.class create mode 100644 bin/net/minecraft/src/CanvasCrashReport.class create mode 100644 bin/net/minecraft/src/CanvasIsomPreview.class create mode 100644 bin/net/minecraft/src/CanvasMinecraftApplet.class create mode 100644 bin/net/minecraft/src/CanvasMojangLogo.class create mode 100644 bin/net/minecraft/src/ChatLine.class create mode 100644 bin/net/minecraft/src/Chunk.class create mode 100644 bin/net/minecraft/src/ChunkCache.class create mode 100644 bin/net/minecraft/src/ChunkLoader.class create mode 100644 bin/net/minecraft/src/ChunkPosition.class create mode 100644 bin/net/minecraft/src/ChunkProviderGenerate.class create mode 100644 bin/net/minecraft/src/ChunkProviderIso.class create mode 100644 bin/net/minecraft/src/ChunkProviderLoadOrGenerate.class create mode 100644 bin/net/minecraft/src/ClippingHelper.class create mode 100644 bin/net/minecraft/src/ClippingHelperImplementation.class create mode 100644 bin/net/minecraft/src/CompressedStreamTools.class create mode 100644 bin/net/minecraft/src/CraftingManager.class create mode 100644 bin/net/minecraft/src/CraftingRecipe.class create mode 100644 bin/net/minecraft/src/EffectRenderer.class create mode 100644 bin/net/minecraft/src/Entity.class create mode 100644 bin/net/minecraft/src/EntityAnimal.class create mode 100644 bin/net/minecraft/src/EntityArrow.class create mode 100644 bin/net/minecraft/src/EntityBubbleFX.class create mode 100644 bin/net/minecraft/src/EntityCreature.class create mode 100644 bin/net/minecraft/src/EntityCreeper.class create mode 100644 bin/net/minecraft/src/EntityDiggingFX.class create mode 100644 bin/net/minecraft/src/EntityExplodeFX.class create mode 100644 bin/net/minecraft/src/EntityFX.class create mode 100644 bin/net/minecraft/src/EntityFallingSand.class create mode 100644 bin/net/minecraft/src/EntityFlameFX.class create mode 100644 bin/net/minecraft/src/EntityGiant.class create mode 100644 bin/net/minecraft/src/EntityItem.class create mode 100644 bin/net/minecraft/src/EntityLavaFX.class create mode 100644 bin/net/minecraft/src/EntityList.class create mode 100644 bin/net/minecraft/src/EntityLiving.class create mode 100644 bin/net/minecraft/src/EntityMinecart.class create mode 100644 bin/net/minecraft/src/EntityMonster.class create mode 100644 bin/net/minecraft/src/EntityPainting.class create mode 100644 bin/net/minecraft/src/EntityPickupFX.class create mode 100644 bin/net/minecraft/src/EntityPig.class create mode 100644 bin/net/minecraft/src/EntityPlayer.class create mode 100644 bin/net/minecraft/src/EntityPlayerSP.class create mode 100644 bin/net/minecraft/src/EntityRainFX.class create mode 100644 bin/net/minecraft/src/EntityRenderer.class create mode 100644 bin/net/minecraft/src/EntitySheep.class create mode 100644 bin/net/minecraft/src/EntitySkeleton.class create mode 100644 bin/net/minecraft/src/EntitySmokeFX.class create mode 100644 bin/net/minecraft/src/EntitySorter.class create mode 100644 bin/net/minecraft/src/EntitySpider.class create mode 100644 bin/net/minecraft/src/EntitySplashFX.class create mode 100644 bin/net/minecraft/src/EntityTNTPrimed.class create mode 100644 bin/net/minecraft/src/EntityZombie.class create mode 100644 bin/net/minecraft/src/EnumArt.class create mode 100644 bin/net/minecraft/src/EnumOS.class create mode 100644 bin/net/minecraft/src/EnumOSIsom.class create mode 100644 bin/net/minecraft/src/EnumSkyBlock.class create mode 100644 bin/net/minecraft/src/Explosion.class create mode 100644 bin/net/minecraft/src/FontRenderer.class create mode 100644 bin/net/minecraft/src/Frustrum.class create mode 100644 bin/net/minecraft/src/GLAllocation.class create mode 100644 bin/net/minecraft/src/GameSettings.class create mode 100644 bin/net/minecraft/src/Gui.class create mode 100644 bin/net/minecraft/src/GuiButton.class create mode 100644 bin/net/minecraft/src/GuiChest.class create mode 100644 bin/net/minecraft/src/GuiContainer.class create mode 100644 bin/net/minecraft/src/GuiControls.class create mode 100644 bin/net/minecraft/src/GuiCrafting.class create mode 100644 bin/net/minecraft/src/GuiCreateWorld.class create mode 100644 bin/net/minecraft/src/GuiDeleteWorld.class create mode 100644 bin/net/minecraft/src/GuiEditSign.class create mode 100644 bin/net/minecraft/src/GuiErrorScreen.class create mode 100644 bin/net/minecraft/src/GuiFurnace.class create mode 100644 bin/net/minecraft/src/GuiGameOver.class create mode 100644 bin/net/minecraft/src/GuiIngame.class create mode 100644 bin/net/minecraft/src/GuiIngameMenu.class create mode 100644 bin/net/minecraft/src/GuiInventory.class create mode 100644 bin/net/minecraft/src/GuiMainMenu.class create mode 100644 bin/net/minecraft/src/GuiOptions.class create mode 100644 bin/net/minecraft/src/GuiScreen.class create mode 100644 bin/net/minecraft/src/GuiSmallButton.class create mode 100644 bin/net/minecraft/src/GuiYesNo.class create mode 100644 bin/net/minecraft/src/IBlockAccess.class create mode 100644 bin/net/minecraft/src/ICamera.class create mode 100644 bin/net/minecraft/src/IChunkLoader.class create mode 100644 bin/net/minecraft/src/IChunkProvider.class create mode 100644 bin/net/minecraft/src/IInventory.class create mode 100644 bin/net/minecraft/src/IProgressUpdate.class create mode 100644 bin/net/minecraft/src/IWorldAccess.class create mode 100644 bin/net/minecraft/src/ImageBuffer.class create mode 100644 bin/net/minecraft/src/ImageBufferDownload.class create mode 100644 bin/net/minecraft/src/InventoryCraftResult.class create mode 100644 bin/net/minecraft/src/InventoryCrafting.class create mode 100644 bin/net/minecraft/src/InventoryLargeChest.class create mode 100644 bin/net/minecraft/src/InventoryPlayer.class create mode 100644 bin/net/minecraft/src/IsoImageBuffer.class create mode 100644 bin/net/minecraft/src/Item.class create mode 100644 bin/net/minecraft/src/ItemArmor.class create mode 100644 bin/net/minecraft/src/ItemAxe.class create mode 100644 bin/net/minecraft/src/ItemBlock.class create mode 100644 bin/net/minecraft/src/ItemBow.class create mode 100644 bin/net/minecraft/src/ItemBucket.class create mode 100644 bin/net/minecraft/src/ItemDoor.class create mode 100644 bin/net/minecraft/src/ItemFlintAndSteel.class create mode 100644 bin/net/minecraft/src/ItemFood.class create mode 100644 bin/net/minecraft/src/ItemHoe.class create mode 100644 bin/net/minecraft/src/ItemMinecart.class create mode 100644 bin/net/minecraft/src/ItemPainting.class create mode 100644 bin/net/minecraft/src/ItemPickaxe.class create mode 100644 bin/net/minecraft/src/ItemRenderer.class create mode 100644 bin/net/minecraft/src/ItemSaddle.class create mode 100644 bin/net/minecraft/src/ItemSeeds.class create mode 100644 bin/net/minecraft/src/ItemSign.class create mode 100644 bin/net/minecraft/src/ItemSoup.class create mode 100644 bin/net/minecraft/src/ItemSpade.class create mode 100644 bin/net/minecraft/src/ItemStack.class create mode 100644 bin/net/minecraft/src/ItemSword.class create mode 100644 bin/net/minecraft/src/ItemTool.class create mode 100644 bin/net/minecraft/src/KeyBinding.class create mode 100644 bin/net/minecraft/src/LoadingScreenRenderer.class create mode 100644 bin/net/minecraft/src/Material.class create mode 100644 bin/net/minecraft/src/MaterialLiquid.class create mode 100644 bin/net/minecraft/src/MaterialLogic.class create mode 100644 bin/net/minecraft/src/MaterialTransparent.class create mode 100644 bin/net/minecraft/src/MathHelper.class create mode 100644 bin/net/minecraft/src/MetadataChunkBlock.class create mode 100644 bin/net/minecraft/src/MinecartTrackLogic.class create mode 100644 bin/net/minecraft/src/Minecraft.class create mode 100644 bin/net/minecraft/src/MinecraftAppletImpl.class create mode 100644 bin/net/minecraft/src/MinecraftError.class create mode 100644 bin/net/minecraft/src/ModelBase.class create mode 100644 bin/net/minecraft/src/ModelBiped.class create mode 100644 bin/net/minecraft/src/ModelCreeper.class create mode 100644 bin/net/minecraft/src/ModelMinecart.class create mode 100644 bin/net/minecraft/src/ModelPig.class create mode 100644 bin/net/minecraft/src/ModelQuadruped.class create mode 100644 bin/net/minecraft/src/ModelRenderer.class create mode 100644 bin/net/minecraft/src/ModelSheep.class create mode 100644 bin/net/minecraft/src/ModelSheepFur.class create mode 100644 bin/net/minecraft/src/ModelSkeleton.class create mode 100644 bin/net/minecraft/src/ModelSpider.class create mode 100644 bin/net/minecraft/src/ModelZombie.class create mode 100644 bin/net/minecraft/src/MouseHelper.class create mode 100644 bin/net/minecraft/src/MovementInput.class create mode 100644 bin/net/minecraft/src/MovementInputFromOptions.class create mode 100644 bin/net/minecraft/src/MovingObjectPosition.class create mode 100644 bin/net/minecraft/src/NBTBase.class create mode 100644 bin/net/minecraft/src/NBTTagByte.class create mode 100644 bin/net/minecraft/src/NBTTagByteArray.class create mode 100644 bin/net/minecraft/src/NBTTagCompound.class create mode 100644 bin/net/minecraft/src/NBTTagDouble.class create mode 100644 bin/net/minecraft/src/NBTTagEnd.class create mode 100644 bin/net/minecraft/src/NBTTagFloat.class create mode 100644 bin/net/minecraft/src/NBTTagInt.class create mode 100644 bin/net/minecraft/src/NBTTagList.class create mode 100644 bin/net/minecraft/src/NBTTagLong.class create mode 100644 bin/net/minecraft/src/NBTTagShort.class create mode 100644 bin/net/minecraft/src/NBTTagString.class create mode 100644 bin/net/minecraft/src/NextTickListEntry.class create mode 100644 bin/net/minecraft/src/NibbleArray.class create mode 100644 bin/net/minecraft/src/NoiseGenerator.class create mode 100644 bin/net/minecraft/src/NoiseGeneratorOctaves.class create mode 100644 bin/net/minecraft/src/NoiseGeneratorPerlin.class create mode 100644 bin/net/minecraft/src/OSMap.class create mode 100644 bin/net/minecraft/src/OSMapIsom.class create mode 100644 bin/net/minecraft/src/OpenGlCapsChecker.class create mode 100644 bin/net/minecraft/src/PanelCrashReport.class create mode 100644 bin/net/minecraft/src/Path.class create mode 100644 bin/net/minecraft/src/PathEntity.class create mode 100644 bin/net/minecraft/src/PathPoint.class create mode 100644 bin/net/minecraft/src/Pathfinder.class create mode 100644 bin/net/minecraft/src/PlayerController.class create mode 100644 bin/net/minecraft/src/PlayerControllerCreative.class create mode 100644 bin/net/minecraft/src/PlayerControllerSP.class create mode 100644 bin/net/minecraft/src/PositionTextureVertex.class create mode 100644 bin/net/minecraft/src/RecipeSorter.class create mode 100644 bin/net/minecraft/src/RecipesArmor.class create mode 100644 bin/net/minecraft/src/RecipesCrafting.class create mode 100644 bin/net/minecraft/src/RecipesFood.class create mode 100644 bin/net/minecraft/src/RecipesIngots.class create mode 100644 bin/net/minecraft/src/RecipesTools.class create mode 100644 bin/net/minecraft/src/RecipesWeapons.class create mode 100644 bin/net/minecraft/src/Render.class create mode 100644 bin/net/minecraft/src/RenderArrow.class create mode 100644 bin/net/minecraft/src/RenderBlocks.class create mode 100644 bin/net/minecraft/src/RenderCreeper.class create mode 100644 bin/net/minecraft/src/RenderEngine.class create mode 100644 bin/net/minecraft/src/RenderEntity.class create mode 100644 bin/net/minecraft/src/RenderFallingSand.class create mode 100644 bin/net/minecraft/src/RenderGiantZombie.class create mode 100644 bin/net/minecraft/src/RenderGlobal.class create mode 100644 bin/net/minecraft/src/RenderHelper.class create mode 100644 bin/net/minecraft/src/RenderItem.class create mode 100644 bin/net/minecraft/src/RenderList.class create mode 100644 bin/net/minecraft/src/RenderLiving.class create mode 100644 bin/net/minecraft/src/RenderManager.class create mode 100644 bin/net/minecraft/src/RenderMinecart.class create mode 100644 bin/net/minecraft/src/RenderPainting.class create mode 100644 bin/net/minecraft/src/RenderPig.class create mode 100644 bin/net/minecraft/src/RenderPlayer.class create mode 100644 bin/net/minecraft/src/RenderSheep.class create mode 100644 bin/net/minecraft/src/RenderSorter.class create mode 100644 bin/net/minecraft/src/RenderSpider.class create mode 100644 bin/net/minecraft/src/RenderTNTPrimed.class create mode 100644 bin/net/minecraft/src/ScaledResolution.class create mode 100644 bin/net/minecraft/src/Session.class create mode 100644 bin/net/minecraft/src/SignModel.class create mode 100644 bin/net/minecraft/src/Slot.class create mode 100644 bin/net/minecraft/src/SlotArmor.class create mode 100644 bin/net/minecraft/src/SlotCrafting.class create mode 100644 bin/net/minecraft/src/SoundManager.class create mode 100644 bin/net/minecraft/src/SoundPool.class create mode 100644 bin/net/minecraft/src/SoundPoolEntry.class create mode 100644 bin/net/minecraft/src/SpawnerAnimals.class create mode 100644 bin/net/minecraft/src/SpawnerMonsters.class create mode 100644 bin/net/minecraft/src/StepSound.class create mode 100644 bin/net/minecraft/src/StepSoundGlass.class create mode 100644 bin/net/minecraft/src/StepSoundSand.class create mode 100644 bin/net/minecraft/src/TerrainTextureManager.class create mode 100644 bin/net/minecraft/src/Tessellator.class create mode 100644 bin/net/minecraft/src/TextureFX.class create mode 100644 bin/net/minecraft/src/TextureFlamesFX.class create mode 100644 bin/net/minecraft/src/TextureGearsFX.class create mode 100644 bin/net/minecraft/src/TextureLavaFX.class create mode 100644 bin/net/minecraft/src/TextureLavaFlowFX.class create mode 100644 bin/net/minecraft/src/TextureWaterFX.class create mode 100644 bin/net/minecraft/src/TextureWaterFlowFX.class create mode 100644 bin/net/minecraft/src/TexturedQuad.class create mode 100644 bin/net/minecraft/src/ThreadDownloadImage.class create mode 100644 bin/net/minecraft/src/ThreadDownloadImageData.class create mode 100644 bin/net/minecraft/src/ThreadDownloadResources.class create mode 100644 bin/net/minecraft/src/ThreadRunIsoClient.class create mode 100644 bin/net/minecraft/src/ThreadSleepForever.class create mode 100644 bin/net/minecraft/src/TileEntity.class create mode 100644 bin/net/minecraft/src/TileEntityChest.class create mode 100644 bin/net/minecraft/src/TileEntityFurnace.class create mode 100644 bin/net/minecraft/src/TileEntityMobSpawner.class create mode 100644 bin/net/minecraft/src/TileEntityMobSpawnerRenderer.class create mode 100644 bin/net/minecraft/src/TileEntityRenderer.class create mode 100644 bin/net/minecraft/src/TileEntitySign.class create mode 100644 bin/net/minecraft/src/TileEntitySignRenderer.class create mode 100644 bin/net/minecraft/src/TileEntitySpecialRenderer.class create mode 100644 bin/net/minecraft/src/Timer.class create mode 100644 bin/net/minecraft/src/UnexpectedThrowable.class create mode 100644 bin/net/minecraft/src/Vec3D.class create mode 100644 bin/net/minecraft/src/World.class create mode 100644 bin/net/minecraft/src/WorldGenDungeons.class create mode 100644 bin/net/minecraft/src/WorldGenFlowers.class create mode 100644 bin/net/minecraft/src/WorldGenLiquids.class create mode 100644 bin/net/minecraft/src/WorldGenMinable.class create mode 100644 bin/net/minecraft/src/WorldGenTrees.class create mode 100644 bin/net/minecraft/src/WorldGenerator.class create mode 100644 bin/net/minecraft/src/WorldIso.class create mode 100644 bin/net/minecraft/src/WorldRenderer.class create mode 100644 jars/deobfuscated-source.jar create mode 100644 jars/deobfuscated.jar create mode 100644 md5/original.md5 create mode 100644 source/net/minecraft/client/MinecraftApplet.java create mode 100644 source/net/minecraft/isom/IsomPreviewApplet.java create mode 100644 source/net/minecraft/src/AxisAlignedBB.java create mode 100644 source/net/minecraft/src/Block.java create mode 100644 source/net/minecraft/src/BlockBookshelf.java create mode 100644 source/net/minecraft/src/BlockBreakable.java create mode 100644 source/net/minecraft/src/BlockChest.java create mode 100644 source/net/minecraft/src/BlockContainer.java create mode 100644 source/net/minecraft/src/BlockCrops.java create mode 100644 source/net/minecraft/src/BlockDirt.java create mode 100644 source/net/minecraft/src/BlockDoor.java create mode 100644 source/net/minecraft/src/BlockFarmland.java create mode 100644 source/net/minecraft/src/BlockFire.java create mode 100644 source/net/minecraft/src/BlockFlower.java create mode 100644 source/net/minecraft/src/BlockFlowing.java create mode 100644 source/net/minecraft/src/BlockFluid.java create mode 100644 source/net/minecraft/src/BlockFurnace.java create mode 100644 source/net/minecraft/src/BlockGears.java create mode 100644 source/net/minecraft/src/BlockGlass.java create mode 100644 source/net/minecraft/src/BlockGrass.java create mode 100644 source/net/minecraft/src/BlockGravel.java create mode 100644 source/net/minecraft/src/BlockLadder.java create mode 100644 source/net/minecraft/src/BlockLeaves.java create mode 100644 source/net/minecraft/src/BlockLeavesBase.java create mode 100644 source/net/minecraft/src/BlockLog.java create mode 100644 source/net/minecraft/src/BlockMinecartTrack.java create mode 100644 source/net/minecraft/src/BlockMobSpawner.java create mode 100644 source/net/minecraft/src/BlockMushroom.java create mode 100644 source/net/minecraft/src/BlockObsidian.java create mode 100644 source/net/minecraft/src/BlockOre.java create mode 100644 source/net/minecraft/src/BlockOreBlock.java create mode 100644 source/net/minecraft/src/BlockSand.java create mode 100644 source/net/minecraft/src/BlockSapling.java create mode 100644 source/net/minecraft/src/BlockSign.java create mode 100644 source/net/minecraft/src/BlockSponge.java create mode 100644 source/net/minecraft/src/BlockStairs.java create mode 100644 source/net/minecraft/src/BlockStationary.java create mode 100644 source/net/minecraft/src/BlockStep.java create mode 100644 source/net/minecraft/src/BlockStone.java create mode 100644 source/net/minecraft/src/BlockTNT.java create mode 100644 source/net/minecraft/src/BlockTorch.java create mode 100644 source/net/minecraft/src/BlockWorkbench.java create mode 100644 source/net/minecraft/src/CanvasCrashReport.java create mode 100644 source/net/minecraft/src/CanvasIsomPreview.java create mode 100644 source/net/minecraft/src/CanvasMinecraftApplet.java create mode 100644 source/net/minecraft/src/CanvasMojangLogo.java create mode 100644 source/net/minecraft/src/ChatLine.java create mode 100644 source/net/minecraft/src/Chunk.java create mode 100644 source/net/minecraft/src/ChunkCache.java create mode 100644 source/net/minecraft/src/ChunkLoader.java create mode 100644 source/net/minecraft/src/ChunkPosition.java create mode 100644 source/net/minecraft/src/ChunkProviderGenerate.java create mode 100644 source/net/minecraft/src/ChunkProviderIso.java create mode 100644 source/net/minecraft/src/ChunkProviderLoadOrGenerate.java create mode 100644 source/net/minecraft/src/ClippingHelper.java create mode 100644 source/net/minecraft/src/ClippingHelperImplementation.java create mode 100644 source/net/minecraft/src/CompressedStreamTools.java create mode 100644 source/net/minecraft/src/CraftingManager.java create mode 100644 source/net/minecraft/src/CraftingRecipe.java create mode 100644 source/net/minecraft/src/EffectRenderer.java create mode 100644 source/net/minecraft/src/Entity.java create mode 100644 source/net/minecraft/src/EntityAnimal.java create mode 100644 source/net/minecraft/src/EntityArrow.java create mode 100644 source/net/minecraft/src/EntityBubbleFX.java create mode 100644 source/net/minecraft/src/EntityCreature.java create mode 100644 source/net/minecraft/src/EntityCreeper.java create mode 100644 source/net/minecraft/src/EntityDiggingFX.java create mode 100644 source/net/minecraft/src/EntityExplodeFX.java create mode 100644 source/net/minecraft/src/EntityFX.java create mode 100644 source/net/minecraft/src/EntityFallingSand.java create mode 100644 source/net/minecraft/src/EntityFlameFX.java create mode 100644 source/net/minecraft/src/EntityGiant.java create mode 100644 source/net/minecraft/src/EntityItem.java create mode 100644 source/net/minecraft/src/EntityLavaFX.java create mode 100644 source/net/minecraft/src/EntityList.java create mode 100644 source/net/minecraft/src/EntityLiving.java create mode 100644 source/net/minecraft/src/EntityMinecart.java create mode 100644 source/net/minecraft/src/EntityMonster.java create mode 100644 source/net/minecraft/src/EntityPainting.java create mode 100644 source/net/minecraft/src/EntityPickupFX.java create mode 100644 source/net/minecraft/src/EntityPig.java create mode 100644 source/net/minecraft/src/EntityPlayer.java create mode 100644 source/net/minecraft/src/EntityPlayerSP.java create mode 100644 source/net/minecraft/src/EntityRainFX.java create mode 100644 source/net/minecraft/src/EntityRenderer.java create mode 100644 source/net/minecraft/src/EntitySheep.java create mode 100644 source/net/minecraft/src/EntitySkeleton.java create mode 100644 source/net/minecraft/src/EntitySmokeFX.java create mode 100644 source/net/minecraft/src/EntitySorter.java create mode 100644 source/net/minecraft/src/EntitySpider.java create mode 100644 source/net/minecraft/src/EntitySplashFX.java create mode 100644 source/net/minecraft/src/EntityTNTPrimed.java create mode 100644 source/net/minecraft/src/EntityZombie.java create mode 100644 source/net/minecraft/src/EnumArt.java create mode 100644 source/net/minecraft/src/EnumOS.java create mode 100644 source/net/minecraft/src/EnumOSIsom.java create mode 100644 source/net/minecraft/src/EnumSkyBlock.java create mode 100644 source/net/minecraft/src/Explosion.java create mode 100644 source/net/minecraft/src/FontRenderer.java create mode 100644 source/net/minecraft/src/Frustrum.java create mode 100644 source/net/minecraft/src/GLAllocation.java create mode 100644 source/net/minecraft/src/GameSettings.java create mode 100644 source/net/minecraft/src/Gui.java create mode 100644 source/net/minecraft/src/GuiButton.java create mode 100644 source/net/minecraft/src/GuiChest.java create mode 100644 source/net/minecraft/src/GuiContainer.java create mode 100644 source/net/minecraft/src/GuiControls.java create mode 100644 source/net/minecraft/src/GuiCrafting.java create mode 100644 source/net/minecraft/src/GuiCreateWorld.java create mode 100644 source/net/minecraft/src/GuiDeleteWorld.java create mode 100644 source/net/minecraft/src/GuiEditSign.java create mode 100644 source/net/minecraft/src/GuiErrorScreen.java create mode 100644 source/net/minecraft/src/GuiFurnace.java create mode 100644 source/net/minecraft/src/GuiGameOver.java create mode 100644 source/net/minecraft/src/GuiIngame.java create mode 100644 source/net/minecraft/src/GuiIngameMenu.java create mode 100644 source/net/minecraft/src/GuiInventory.java create mode 100644 source/net/minecraft/src/GuiMainMenu.java create mode 100644 source/net/minecraft/src/GuiOptions.java create mode 100644 source/net/minecraft/src/GuiScreen.java create mode 100644 source/net/minecraft/src/GuiSmallButton.java create mode 100644 source/net/minecraft/src/GuiYesNo.java create mode 100644 source/net/minecraft/src/IBlockAccess.java create mode 100644 source/net/minecraft/src/ICamera.java create mode 100644 source/net/minecraft/src/IChunkLoader.java create mode 100644 source/net/minecraft/src/IChunkProvider.java create mode 100644 source/net/minecraft/src/IInventory.java create mode 100644 source/net/minecraft/src/IProgressUpdate.java create mode 100644 source/net/minecraft/src/IWorldAccess.java create mode 100644 source/net/minecraft/src/ImageBuffer.java create mode 100644 source/net/minecraft/src/ImageBufferDownload.java create mode 100644 source/net/minecraft/src/InventoryCraftResult.java create mode 100644 source/net/minecraft/src/InventoryCrafting.java create mode 100644 source/net/minecraft/src/InventoryLargeChest.java create mode 100644 source/net/minecraft/src/InventoryPlayer.java create mode 100644 source/net/minecraft/src/IsoImageBuffer.java create mode 100644 source/net/minecraft/src/Item.java create mode 100644 source/net/minecraft/src/ItemArmor.java create mode 100644 source/net/minecraft/src/ItemAxe.java create mode 100644 source/net/minecraft/src/ItemBlock.java create mode 100644 source/net/minecraft/src/ItemBow.java create mode 100644 source/net/minecraft/src/ItemBucket.java create mode 100644 source/net/minecraft/src/ItemDoor.java create mode 100644 source/net/minecraft/src/ItemFlintAndSteel.java create mode 100644 source/net/minecraft/src/ItemFood.java create mode 100644 source/net/minecraft/src/ItemHoe.java create mode 100644 source/net/minecraft/src/ItemMinecart.java create mode 100644 source/net/minecraft/src/ItemPainting.java create mode 100644 source/net/minecraft/src/ItemPickaxe.java create mode 100644 source/net/minecraft/src/ItemRenderer.java create mode 100644 source/net/minecraft/src/ItemSaddle.java create mode 100644 source/net/minecraft/src/ItemSeeds.java create mode 100644 source/net/minecraft/src/ItemSign.java create mode 100644 source/net/minecraft/src/ItemSoup.java create mode 100644 source/net/minecraft/src/ItemSpade.java create mode 100644 source/net/minecraft/src/ItemStack.java create mode 100644 source/net/minecraft/src/ItemSword.java create mode 100644 source/net/minecraft/src/ItemTool.java create mode 100644 source/net/minecraft/src/KeyBinding.java create mode 100644 source/net/minecraft/src/LoadingScreenRenderer.java create mode 100644 source/net/minecraft/src/Material.java create mode 100644 source/net/minecraft/src/MaterialLiquid.java create mode 100644 source/net/minecraft/src/MaterialLogic.java create mode 100644 source/net/minecraft/src/MaterialTransparent.java create mode 100644 source/net/minecraft/src/MathHelper.java create mode 100644 source/net/minecraft/src/MetadataChunkBlock.java create mode 100644 source/net/minecraft/src/MinecartTrackLogic.java create mode 100644 source/net/minecraft/src/Minecraft.java create mode 100644 source/net/minecraft/src/MinecraftAppletImpl.java create mode 100644 source/net/minecraft/src/MinecraftError.java create mode 100644 source/net/minecraft/src/ModelBase.java create mode 100644 source/net/minecraft/src/ModelBiped.java create mode 100644 source/net/minecraft/src/ModelCreeper.java create mode 100644 source/net/minecraft/src/ModelMinecart.java create mode 100644 source/net/minecraft/src/ModelPig.java create mode 100644 source/net/minecraft/src/ModelQuadruped.java create mode 100644 source/net/minecraft/src/ModelRenderer.java create mode 100644 source/net/minecraft/src/ModelSheep.java create mode 100644 source/net/minecraft/src/ModelSheepFur.java create mode 100644 source/net/minecraft/src/ModelSkeleton.java create mode 100644 source/net/minecraft/src/ModelSpider.java create mode 100644 source/net/minecraft/src/ModelZombie.java create mode 100644 source/net/minecraft/src/MouseHelper.java create mode 100644 source/net/minecraft/src/MovementInput.java create mode 100644 source/net/minecraft/src/MovementInputFromOptions.java create mode 100644 source/net/minecraft/src/MovingObjectPosition.java create mode 100644 source/net/minecraft/src/NBTBase.java create mode 100644 source/net/minecraft/src/NBTTagByte.java create mode 100644 source/net/minecraft/src/NBTTagByteArray.java create mode 100644 source/net/minecraft/src/NBTTagCompound.java create mode 100644 source/net/minecraft/src/NBTTagDouble.java create mode 100644 source/net/minecraft/src/NBTTagEnd.java create mode 100644 source/net/minecraft/src/NBTTagFloat.java create mode 100644 source/net/minecraft/src/NBTTagInt.java create mode 100644 source/net/minecraft/src/NBTTagList.java create mode 100644 source/net/minecraft/src/NBTTagLong.java create mode 100644 source/net/minecraft/src/NBTTagShort.java create mode 100644 source/net/minecraft/src/NBTTagString.java create mode 100644 source/net/minecraft/src/NextTickListEntry.java create mode 100644 source/net/minecraft/src/NibbleArray.java create mode 100644 source/net/minecraft/src/NoiseGenerator.java create mode 100644 source/net/minecraft/src/NoiseGeneratorOctaves.java create mode 100644 source/net/minecraft/src/NoiseGeneratorPerlin.java create mode 100644 source/net/minecraft/src/OSMap.java create mode 100644 source/net/minecraft/src/OSMapIsom.java create mode 100644 source/net/minecraft/src/OpenGlCapsChecker.java create mode 100644 source/net/minecraft/src/PanelCrashReport.java create mode 100644 source/net/minecraft/src/Path.java create mode 100644 source/net/minecraft/src/PathEntity.java create mode 100644 source/net/minecraft/src/PathPoint.java create mode 100644 source/net/minecraft/src/Pathfinder.java create mode 100644 source/net/minecraft/src/PlayerController.java create mode 100644 source/net/minecraft/src/PlayerControllerCreative.java create mode 100644 source/net/minecraft/src/PlayerControllerSP.java create mode 100644 source/net/minecraft/src/PositionTextureVertex.java create mode 100644 source/net/minecraft/src/RecipeSorter.java create mode 100644 source/net/minecraft/src/RecipesArmor.java create mode 100644 source/net/minecraft/src/RecipesCrafting.java create mode 100644 source/net/minecraft/src/RecipesFood.java create mode 100644 source/net/minecraft/src/RecipesIngots.java create mode 100644 source/net/minecraft/src/RecipesTools.java create mode 100644 source/net/minecraft/src/RecipesWeapons.java create mode 100644 source/net/minecraft/src/Render.java create mode 100644 source/net/minecraft/src/RenderArrow.java create mode 100644 source/net/minecraft/src/RenderBlocks.java create mode 100644 source/net/minecraft/src/RenderCreeper.java create mode 100644 source/net/minecraft/src/RenderEngine.java create mode 100644 source/net/minecraft/src/RenderEntity.java create mode 100644 source/net/minecraft/src/RenderFallingSand.java create mode 100644 source/net/minecraft/src/RenderGiantZombie.java create mode 100644 source/net/minecraft/src/RenderGlobal.java create mode 100644 source/net/minecraft/src/RenderHelper.java create mode 100644 source/net/minecraft/src/RenderItem.java create mode 100644 source/net/minecraft/src/RenderList.java create mode 100644 source/net/minecraft/src/RenderLiving.java create mode 100644 source/net/minecraft/src/RenderManager.java create mode 100644 source/net/minecraft/src/RenderMinecart.java create mode 100644 source/net/minecraft/src/RenderPainting.java create mode 100644 source/net/minecraft/src/RenderPig.java create mode 100644 source/net/minecraft/src/RenderPlayer.java create mode 100644 source/net/minecraft/src/RenderSheep.java create mode 100644 source/net/minecraft/src/RenderSorter.java create mode 100644 source/net/minecraft/src/RenderSpider.java create mode 100644 source/net/minecraft/src/RenderTNTPrimed.java create mode 100644 source/net/minecraft/src/ScaledResolution.java create mode 100644 source/net/minecraft/src/Session.java create mode 100644 source/net/minecraft/src/SignModel.java create mode 100644 source/net/minecraft/src/Slot.java create mode 100644 source/net/minecraft/src/SlotArmor.java create mode 100644 source/net/minecraft/src/SlotCrafting.java create mode 100644 source/net/minecraft/src/SoundManager.java create mode 100644 source/net/minecraft/src/SoundPool.java create mode 100644 source/net/minecraft/src/SoundPoolEntry.java create mode 100644 source/net/minecraft/src/SpawnerAnimals.java create mode 100644 source/net/minecraft/src/SpawnerMonsters.java create mode 100644 source/net/minecraft/src/StepSound.java create mode 100644 source/net/minecraft/src/StepSoundGlass.java create mode 100644 source/net/minecraft/src/StepSoundSand.java create mode 100644 source/net/minecraft/src/TerrainTextureManager.java create mode 100644 source/net/minecraft/src/Tessellator.java create mode 100644 source/net/minecraft/src/TextureFX.java create mode 100644 source/net/minecraft/src/TextureFlamesFX.java create mode 100644 source/net/minecraft/src/TextureGearsFX.java create mode 100644 source/net/minecraft/src/TextureLavaFX.java create mode 100644 source/net/minecraft/src/TextureLavaFlowFX.java create mode 100644 source/net/minecraft/src/TextureWaterFX.java create mode 100644 source/net/minecraft/src/TextureWaterFlowFX.java create mode 100644 source/net/minecraft/src/TexturedQuad.java create mode 100644 source/net/minecraft/src/ThreadDownloadImage.java create mode 100644 source/net/minecraft/src/ThreadDownloadImageData.java create mode 100644 source/net/minecraft/src/ThreadDownloadResources.java create mode 100644 source/net/minecraft/src/ThreadRunIsoClient.java create mode 100644 source/net/minecraft/src/ThreadSleepForever.java create mode 100644 source/net/minecraft/src/TileEntity.java create mode 100644 source/net/minecraft/src/TileEntityChest.java create mode 100644 source/net/minecraft/src/TileEntityFurnace.java create mode 100644 source/net/minecraft/src/TileEntityMobSpawner.java create mode 100644 source/net/minecraft/src/TileEntityMobSpawnerRenderer.java create mode 100644 source/net/minecraft/src/TileEntityRenderer.java create mode 100644 source/net/minecraft/src/TileEntitySign.java create mode 100644 source/net/minecraft/src/TileEntitySignRenderer.java create mode 100644 source/net/minecraft/src/TileEntitySpecialRenderer.java create mode 100644 source/net/minecraft/src/Timer.java create mode 100644 source/net/minecraft/src/UnexpectedThrowable.java create mode 100644 source/net/minecraft/src/Vec3D.java create mode 100644 source/net/minecraft/src/World.java create mode 100644 source/net/minecraft/src/WorldGenDungeons.java create mode 100644 source/net/minecraft/src/WorldGenFlowers.java create mode 100644 source/net/minecraft/src/WorldGenLiquids.java create mode 100644 source/net/minecraft/src/WorldGenMinable.java create mode 100644 source/net/minecraft/src/WorldGenTrees.java create mode 100644 source/net/minecraft/src/WorldGenerator.java create mode 100644 source/net/minecraft/src/WorldIso.java create mode 100644 source/net/minecraft/src/WorldRenderer.java create mode 100644 src/net/minecraft/client/MinecraftApplet.java create mode 100644 src/net/minecraft/isom/IsomPreviewApplet.java create mode 100644 src/net/minecraft/src/AxisAlignedBB.java create mode 100644 src/net/minecraft/src/Block.java create mode 100644 src/net/minecraft/src/BlockBookshelf.java create mode 100644 src/net/minecraft/src/BlockBreakable.java create mode 100644 src/net/minecraft/src/BlockChest.java create mode 100644 src/net/minecraft/src/BlockContainer.java create mode 100644 src/net/minecraft/src/BlockCrops.java create mode 100644 src/net/minecraft/src/BlockDirt.java create mode 100644 src/net/minecraft/src/BlockDoor.java create mode 100644 src/net/minecraft/src/BlockFarmland.java create mode 100644 src/net/minecraft/src/BlockFire.java create mode 100644 src/net/minecraft/src/BlockFlower.java create mode 100644 src/net/minecraft/src/BlockFlowing.java create mode 100644 src/net/minecraft/src/BlockFluid.java create mode 100644 src/net/minecraft/src/BlockFurnace.java create mode 100644 src/net/minecraft/src/BlockGears.java create mode 100644 src/net/minecraft/src/BlockGlass.java create mode 100644 src/net/minecraft/src/BlockGrass.java create mode 100644 src/net/minecraft/src/BlockGravel.java create mode 100644 src/net/minecraft/src/BlockLadder.java create mode 100644 src/net/minecraft/src/BlockLeaves.java create mode 100644 src/net/minecraft/src/BlockLeavesBase.java create mode 100644 src/net/minecraft/src/BlockLog.java create mode 100644 src/net/minecraft/src/BlockMinecartTrack.java create mode 100644 src/net/minecraft/src/BlockMobSpawner.java create mode 100644 src/net/minecraft/src/BlockMushroom.java create mode 100644 src/net/minecraft/src/BlockObsidian.java create mode 100644 src/net/minecraft/src/BlockOre.java create mode 100644 src/net/minecraft/src/BlockOreBlock.java create mode 100644 src/net/minecraft/src/BlockSand.java create mode 100644 src/net/minecraft/src/BlockSapling.java create mode 100644 src/net/minecraft/src/BlockSign.java create mode 100644 src/net/minecraft/src/BlockSponge.java create mode 100644 src/net/minecraft/src/BlockStairs.java create mode 100644 src/net/minecraft/src/BlockStationary.java create mode 100644 src/net/minecraft/src/BlockStep.java create mode 100644 src/net/minecraft/src/BlockStone.java create mode 100644 src/net/minecraft/src/BlockTNT.java create mode 100644 src/net/minecraft/src/BlockTorch.java create mode 100644 src/net/minecraft/src/BlockWorkbench.java create mode 100644 src/net/minecraft/src/CanvasCrashReport.java create mode 100644 src/net/minecraft/src/CanvasIsomPreview.java create mode 100644 src/net/minecraft/src/CanvasMinecraftApplet.java create mode 100644 src/net/minecraft/src/CanvasMojangLogo.java create mode 100644 src/net/minecraft/src/ChatLine.java create mode 100644 src/net/minecraft/src/Chunk.java create mode 100644 src/net/minecraft/src/ChunkCache.java create mode 100644 src/net/minecraft/src/ChunkLoader.java create mode 100644 src/net/minecraft/src/ChunkPosition.java create mode 100644 src/net/minecraft/src/ChunkProviderGenerate.java create mode 100644 src/net/minecraft/src/ChunkProviderIso.java create mode 100644 src/net/minecraft/src/ChunkProviderLoadOrGenerate.java create mode 100644 src/net/minecraft/src/ClippingHelper.java create mode 100644 src/net/minecraft/src/ClippingHelperImplementation.java create mode 100644 src/net/minecraft/src/CompressedStreamTools.java create mode 100644 src/net/minecraft/src/CraftingManager.java create mode 100644 src/net/minecraft/src/CraftingRecipe.java create mode 100644 src/net/minecraft/src/EffectRenderer.java create mode 100644 src/net/minecraft/src/Entity.java create mode 100644 src/net/minecraft/src/EntityAnimal.java create mode 100644 src/net/minecraft/src/EntityArrow.java create mode 100644 src/net/minecraft/src/EntityBubbleFX.java create mode 100644 src/net/minecraft/src/EntityCreature.java create mode 100644 src/net/minecraft/src/EntityCreeper.java create mode 100644 src/net/minecraft/src/EntityDiggingFX.java create mode 100644 src/net/minecraft/src/EntityExplodeFX.java create mode 100644 src/net/minecraft/src/EntityFX.java create mode 100644 src/net/minecraft/src/EntityFallingSand.java create mode 100644 src/net/minecraft/src/EntityFlameFX.java create mode 100644 src/net/minecraft/src/EntityGiant.java create mode 100644 src/net/minecraft/src/EntityItem.java create mode 100644 src/net/minecraft/src/EntityLavaFX.java create mode 100644 src/net/minecraft/src/EntityList.java create mode 100644 src/net/minecraft/src/EntityLiving.java create mode 100644 src/net/minecraft/src/EntityMinecart.java create mode 100644 src/net/minecraft/src/EntityMonster.java create mode 100644 src/net/minecraft/src/EntityPainting.java create mode 100644 src/net/minecraft/src/EntityPickupFX.java create mode 100644 src/net/minecraft/src/EntityPig.java create mode 100644 src/net/minecraft/src/EntityPlayer.java create mode 100644 src/net/minecraft/src/EntityPlayerSP.java create mode 100644 src/net/minecraft/src/EntityRainFX.java create mode 100644 src/net/minecraft/src/EntityRenderer.java create mode 100644 src/net/minecraft/src/EntitySheep.java create mode 100644 src/net/minecraft/src/EntitySkeleton.java create mode 100644 src/net/minecraft/src/EntitySmokeFX.java create mode 100644 src/net/minecraft/src/EntitySorter.java create mode 100644 src/net/minecraft/src/EntitySpider.java create mode 100644 src/net/minecraft/src/EntitySplashFX.java create mode 100644 src/net/minecraft/src/EntityTNTPrimed.java create mode 100644 src/net/minecraft/src/EntityZombie.java create mode 100644 src/net/minecraft/src/EnumArt.java create mode 100644 src/net/minecraft/src/EnumOS.java create mode 100644 src/net/minecraft/src/EnumOSIsom.java create mode 100644 src/net/minecraft/src/EnumSkyBlock.java create mode 100644 src/net/minecraft/src/Explosion.java create mode 100644 src/net/minecraft/src/FontRenderer.java create mode 100644 src/net/minecraft/src/Frustrum.java create mode 100644 src/net/minecraft/src/GLAllocation.java create mode 100644 src/net/minecraft/src/GameSettings.java create mode 100644 src/net/minecraft/src/Gui.java create mode 100644 src/net/minecraft/src/GuiButton.java create mode 100644 src/net/minecraft/src/GuiChest.java create mode 100644 src/net/minecraft/src/GuiContainer.java create mode 100644 src/net/minecraft/src/GuiControls.java create mode 100644 src/net/minecraft/src/GuiCrafting.java create mode 100644 src/net/minecraft/src/GuiCreateWorld.java create mode 100644 src/net/minecraft/src/GuiDeleteWorld.java create mode 100644 src/net/minecraft/src/GuiEditSign.java create mode 100644 src/net/minecraft/src/GuiErrorScreen.java create mode 100644 src/net/minecraft/src/GuiFurnace.java create mode 100644 src/net/minecraft/src/GuiGameOver.java create mode 100644 src/net/minecraft/src/GuiIngame.java create mode 100644 src/net/minecraft/src/GuiIngameMenu.java create mode 100644 src/net/minecraft/src/GuiInventory.java create mode 100644 src/net/minecraft/src/GuiMainMenu.java create mode 100644 src/net/minecraft/src/GuiOptions.java create mode 100644 src/net/minecraft/src/GuiScreen.java create mode 100644 src/net/minecraft/src/GuiSmallButton.java create mode 100644 src/net/minecraft/src/GuiYesNo.java create mode 100644 src/net/minecraft/src/IBlockAccess.java create mode 100644 src/net/minecraft/src/ICamera.java create mode 100644 src/net/minecraft/src/IChunkLoader.java create mode 100644 src/net/minecraft/src/IChunkProvider.java create mode 100644 src/net/minecraft/src/IInventory.java create mode 100644 src/net/minecraft/src/IProgressUpdate.java create mode 100644 src/net/minecraft/src/IWorldAccess.java create mode 100644 src/net/minecraft/src/ImageBuffer.java create mode 100644 src/net/minecraft/src/ImageBufferDownload.java create mode 100644 src/net/minecraft/src/InventoryCraftResult.java create mode 100644 src/net/minecraft/src/InventoryCrafting.java create mode 100644 src/net/minecraft/src/InventoryLargeChest.java create mode 100644 src/net/minecraft/src/InventoryPlayer.java create mode 100644 src/net/minecraft/src/IsoImageBuffer.java create mode 100644 src/net/minecraft/src/Item.java create mode 100644 src/net/minecraft/src/ItemArmor.java create mode 100644 src/net/minecraft/src/ItemAxe.java create mode 100644 src/net/minecraft/src/ItemBlock.java create mode 100644 src/net/minecraft/src/ItemBow.java create mode 100644 src/net/minecraft/src/ItemBucket.java create mode 100644 src/net/minecraft/src/ItemDoor.java create mode 100644 src/net/minecraft/src/ItemFlintAndSteel.java create mode 100644 src/net/minecraft/src/ItemFood.java create mode 100644 src/net/minecraft/src/ItemHoe.java create mode 100644 src/net/minecraft/src/ItemMinecart.java create mode 100644 src/net/minecraft/src/ItemPainting.java create mode 100644 src/net/minecraft/src/ItemPickaxe.java create mode 100644 src/net/minecraft/src/ItemRenderer.java create mode 100644 src/net/minecraft/src/ItemSaddle.java create mode 100644 src/net/minecraft/src/ItemSeeds.java create mode 100644 src/net/minecraft/src/ItemSign.java create mode 100644 src/net/minecraft/src/ItemSoup.java create mode 100644 src/net/minecraft/src/ItemSpade.java create mode 100644 src/net/minecraft/src/ItemStack.java create mode 100644 src/net/minecraft/src/ItemSword.java create mode 100644 src/net/minecraft/src/ItemTool.java create mode 100644 src/net/minecraft/src/KeyBinding.java create mode 100644 src/net/minecraft/src/LoadingScreenRenderer.java create mode 100644 src/net/minecraft/src/Material.java create mode 100644 src/net/minecraft/src/MaterialLiquid.java create mode 100644 src/net/minecraft/src/MaterialLogic.java create mode 100644 src/net/minecraft/src/MaterialTransparent.java create mode 100644 src/net/minecraft/src/MathHelper.java create mode 100644 src/net/minecraft/src/MetadataChunkBlock.java create mode 100644 src/net/minecraft/src/MinecartTrackLogic.java create mode 100644 src/net/minecraft/src/Minecraft.java create mode 100644 src/net/minecraft/src/MinecraftAppletImpl.java create mode 100644 src/net/minecraft/src/MinecraftError.java create mode 100644 src/net/minecraft/src/ModelBase.java create mode 100644 src/net/minecraft/src/ModelBiped.java create mode 100644 src/net/minecraft/src/ModelCreeper.java create mode 100644 src/net/minecraft/src/ModelMinecart.java create mode 100644 src/net/minecraft/src/ModelPig.java create mode 100644 src/net/minecraft/src/ModelQuadruped.java create mode 100644 src/net/minecraft/src/ModelRenderer.java create mode 100644 src/net/minecraft/src/ModelSheep.java create mode 100644 src/net/minecraft/src/ModelSheepFur.java create mode 100644 src/net/minecraft/src/ModelSkeleton.java create mode 100644 src/net/minecraft/src/ModelSpider.java create mode 100644 src/net/minecraft/src/ModelZombie.java create mode 100644 src/net/minecraft/src/MouseHelper.java create mode 100644 src/net/minecraft/src/MovementInput.java create mode 100644 src/net/minecraft/src/MovementInputFromOptions.java create mode 100644 src/net/minecraft/src/MovingObjectPosition.java create mode 100644 src/net/minecraft/src/NBTBase.java create mode 100644 src/net/minecraft/src/NBTTagByte.java create mode 100644 src/net/minecraft/src/NBTTagByteArray.java create mode 100644 src/net/minecraft/src/NBTTagCompound.java create mode 100644 src/net/minecraft/src/NBTTagDouble.java create mode 100644 src/net/minecraft/src/NBTTagEnd.java create mode 100644 src/net/minecraft/src/NBTTagFloat.java create mode 100644 src/net/minecraft/src/NBTTagInt.java create mode 100644 src/net/minecraft/src/NBTTagList.java create mode 100644 src/net/minecraft/src/NBTTagLong.java create mode 100644 src/net/minecraft/src/NBTTagShort.java create mode 100644 src/net/minecraft/src/NBTTagString.java create mode 100644 src/net/minecraft/src/NextTickListEntry.java create mode 100644 src/net/minecraft/src/NibbleArray.java create mode 100644 src/net/minecraft/src/NoiseGenerator.java create mode 100644 src/net/minecraft/src/NoiseGeneratorOctaves.java create mode 100644 src/net/minecraft/src/NoiseGeneratorPerlin.java create mode 100644 src/net/minecraft/src/OSMap.java create mode 100644 src/net/minecraft/src/OSMapIsom.java create mode 100644 src/net/minecraft/src/OpenGlCapsChecker.java create mode 100644 src/net/minecraft/src/PanelCrashReport.java create mode 100644 src/net/minecraft/src/Path.java create mode 100644 src/net/minecraft/src/PathEntity.java create mode 100644 src/net/minecraft/src/PathPoint.java create mode 100644 src/net/minecraft/src/Pathfinder.java create mode 100644 src/net/minecraft/src/PlayerController.java create mode 100644 src/net/minecraft/src/PlayerControllerCreative.java create mode 100644 src/net/minecraft/src/PlayerControllerSP.java create mode 100644 src/net/minecraft/src/PositionTextureVertex.java create mode 100644 src/net/minecraft/src/RecipeSorter.java create mode 100644 src/net/minecraft/src/RecipesArmor.java create mode 100644 src/net/minecraft/src/RecipesCrafting.java create mode 100644 src/net/minecraft/src/RecipesFood.java create mode 100644 src/net/minecraft/src/RecipesIngots.java create mode 100644 src/net/minecraft/src/RecipesTools.java create mode 100644 src/net/minecraft/src/RecipesWeapons.java create mode 100644 src/net/minecraft/src/Render.java create mode 100644 src/net/minecraft/src/RenderArrow.java create mode 100644 src/net/minecraft/src/RenderBlocks.java create mode 100644 src/net/minecraft/src/RenderCreeper.java create mode 100644 src/net/minecraft/src/RenderEngine.java create mode 100644 src/net/minecraft/src/RenderEntity.java create mode 100644 src/net/minecraft/src/RenderFallingSand.java create mode 100644 src/net/minecraft/src/RenderGiantZombie.java create mode 100644 src/net/minecraft/src/RenderGlobal.java create mode 100644 src/net/minecraft/src/RenderHelper.java create mode 100644 src/net/minecraft/src/RenderItem.java create mode 100644 src/net/minecraft/src/RenderList.java create mode 100644 src/net/minecraft/src/RenderLiving.java create mode 100644 src/net/minecraft/src/RenderManager.java create mode 100644 src/net/minecraft/src/RenderMinecart.java create mode 100644 src/net/minecraft/src/RenderPainting.java create mode 100644 src/net/minecraft/src/RenderPig.java create mode 100644 src/net/minecraft/src/RenderPlayer.java create mode 100644 src/net/minecraft/src/RenderSheep.java create mode 100644 src/net/minecraft/src/RenderSorter.java create mode 100644 src/net/minecraft/src/RenderSpider.java create mode 100644 src/net/minecraft/src/RenderTNTPrimed.java create mode 100644 src/net/minecraft/src/ScaledResolution.java create mode 100644 src/net/minecraft/src/Session.java create mode 100644 src/net/minecraft/src/SignModel.java create mode 100644 src/net/minecraft/src/Slot.java create mode 100644 src/net/minecraft/src/SlotArmor.java create mode 100644 src/net/minecraft/src/SlotCrafting.java create mode 100644 src/net/minecraft/src/SoundManager.java create mode 100644 src/net/minecraft/src/SoundPool.java create mode 100644 src/net/minecraft/src/SoundPoolEntry.java create mode 100644 src/net/minecraft/src/SpawnerAnimals.java create mode 100644 src/net/minecraft/src/SpawnerMonsters.java create mode 100644 src/net/minecraft/src/StepSound.java create mode 100644 src/net/minecraft/src/StepSoundGlass.java create mode 100644 src/net/minecraft/src/StepSoundSand.java create mode 100644 src/net/minecraft/src/TerrainTextureManager.java create mode 100644 src/net/minecraft/src/Tessellator.java create mode 100644 src/net/minecraft/src/TextureFX.java create mode 100644 src/net/minecraft/src/TextureFlamesFX.java create mode 100644 src/net/minecraft/src/TextureGearsFX.java create mode 100644 src/net/minecraft/src/TextureLavaFX.java create mode 100644 src/net/minecraft/src/TextureLavaFlowFX.java create mode 100644 src/net/minecraft/src/TextureWaterFX.java create mode 100644 src/net/minecraft/src/TextureWaterFlowFX.java create mode 100644 src/net/minecraft/src/TexturedQuad.java create mode 100644 src/net/minecraft/src/ThreadDownloadImage.java create mode 100644 src/net/minecraft/src/ThreadDownloadImageData.java create mode 100644 src/net/minecraft/src/ThreadDownloadResources.java create mode 100644 src/net/minecraft/src/ThreadRunIsoClient.java create mode 100644 src/net/minecraft/src/ThreadSleepForever.java create mode 100644 src/net/minecraft/src/TileEntity.java create mode 100644 src/net/minecraft/src/TileEntityChest.java create mode 100644 src/net/minecraft/src/TileEntityFurnace.java create mode 100644 src/net/minecraft/src/TileEntityMobSpawner.java create mode 100644 src/net/minecraft/src/TileEntityMobSpawnerRenderer.java create mode 100644 src/net/minecraft/src/TileEntityRenderer.java create mode 100644 src/net/minecraft/src/TileEntitySign.java create mode 100644 src/net/minecraft/src/TileEntitySignRenderer.java create mode 100644 src/net/minecraft/src/TileEntitySpecialRenderer.java create mode 100644 src/net/minecraft/src/Timer.java create mode 100644 src/net/minecraft/src/UnexpectedThrowable.java create mode 100644 src/net/minecraft/src/Vec3D.java create mode 100644 src/net/minecraft/src/World.java create mode 100644 src/net/minecraft/src/WorldGenDungeons.java create mode 100644 src/net/minecraft/src/WorldGenFlowers.java create mode 100644 src/net/minecraft/src/WorldGenLiquids.java create mode 100644 src/net/minecraft/src/WorldGenMinable.java create mode 100644 src/net/minecraft/src/WorldGenTrees.java create mode 100644 src/net/minecraft/src/WorldGenerator.java create mode 100644 src/net/minecraft/src/WorldIso.java create mode 100644 src/net/minecraft/src/WorldRenderer.java diff --git a/.classpath b/.classpath new file mode 100644 index 0000000..e6805c3 --- /dev/null +++ b/.classpath @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project new file mode 100644 index 0000000..2a6673c --- /dev/null +++ b/.project @@ -0,0 +1,53 @@ + + + Minecraft Client + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + + + libraries + 2 + $%7BPARENT-1-PROJECT_LOC%7D/libraries + + + + + -2486028203069162932 + + 9 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-src + + + + -2486028203069162931 + + 9 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-jars + + + + -2486028203069162930 + + 9 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-source + + + + diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..fb58fda --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,14 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabledorg.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.5 +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.5 diff --git a/Client.launch b/Client.launch new file mode 100644 index 0000000..b4ae3ed --- /dev/null +++ b/Client.launch @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/bin/net/minecraft/client/MinecraftApplet.class b/bin/net/minecraft/client/MinecraftApplet.class new file mode 100644 index 0000000000000000000000000000000000000000..f6e5e58fbf90e6d5fa701ac1b7bc41cafdbdeb7a GIT binary patch literal 3691 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/Block.class b/bin/net/minecraft/src/Block.class new file mode 100644 index 0000000000000000000000000000000000000000..309a60889d76c15d838f4cc7f08282c5c54d5491 GIT binary patch literal 16322 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 Z*I}q0;m{rVkiHmUC1DQ)l1V~*{6C!^K_UPE literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockBookshelf.class b/bin/net/minecraft/src/BlockBookshelf.class new file mode 100644 index 0000000000000000000000000000000000000000..f5dc9f1ed450e2c94e8e25bae1882a14837e84f8 GIT binary patch literal 584 zcmaKpO;5r=5Qg6^9|c5E5kCMExft|d0rd?kiW_9|v+g76XQIqkYY9xfLqcv(C6bkfWw1b6pt*jyQ33ol;b!CFO8(CA^DW zO_*5CV-4$hq*2MEiWKQU5tk+($epK{f{{I<4ls{Gj92K? RxDg>grGAhiWs1==3*YK&fKLDb literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockBreakable.class b/bin/net/minecraft/src/BlockBreakable.class new file mode 100644 index 0000000000000000000000000000000000000000..98f1cc1d3c648b78f569baee3f7559828944be48 GIT binary patch literal 689 zcmah`OHbQC5dOw?Y!aLj3WgQ}1bQF|kKD=uRH>mt+6r2!K^(Yk?1h?`g!;jc;lzy# zmrAV=9QXnKO;y!dE2>%nst>y}H{rx)8g4m9|d9zVc&vl(v%CZ|%uc#i5Kg4;u#rYkLqV z!q_fjK4hm|74OS##1%J8KAy=hncB{}oSO9pYfmPh2U!$!!a%jvC)E#BtOCMv{ShD0 z=Eiz&eP1QXrr=Ktlsl>PdwcS1=u+wove;KUp|+gJ8SPlfp6+4&M4n3*CCs@PLD9jy ziv`qNEMmz;1>=O;!}0#rAWT02AuRr9KYBg$57~duMJOGsG`AGI2b&c|LlB&zoz%e%73=uHAr|p7kBZ*PKz-b;g4g9A=l9Ph1%r za%cD^{%e@mfADr*arxvO@u@uyhCQsVROdYF7N&*QcJmvI3sgKESeJ0jEAAl&c!e7j ew4%X|;9d#jq|kQ#%a@9mNt$YTXH4Y zc~C+rA+#kfX-OZ+08T@|z=WB$BzB5Rr^7HXEy?hj;XlI+KbT>Lfj<-s=DWKq$q%JL zKd$aQ=iGD8cV74INB{lF`v5lJq8AUNT}LB!Xm~_N5yD$~~anv9tOB^~jExqD=&&rEei`UXi^ z+HYna8caryb(tqJBPnx-nJ`oFsKDB~j)a+M8sdg%Dsm*#lukvP!j|avXw*!nTf+R+ zhXwqdnMm~5uE?;ZQUh(OSfI5%l^p7fOADku+*1;bB=!zQqNc4dBe1;Cd5r4Y*#Ipvzgy#%=8D|W9Me00@4FWZbH`@@x8IvKeUd)yZD>n>$RjPSj z4(srO99}f=HJmdrhL;R{T@L5v@G@R8(1J|{zJUt@_Z3i@7&Q}_Wa?x`B-L*^Dd4jf zwNX1E3RoHrXSd12U)AuMf!FayK~(t&Fno&*u-VB(Cc@H43EaC_WNw+T7#0gyd7X{s zU?kDsw5M;tj53+477OoUex~9wv6bV=Br~<9Kt^SSm`}BJ;ZG8f?VzYmj%8K}gcC9I zL^$EpzkpzQ>e)07^EkE6DRj-2Zz~ANatk3Pha*pqn5`pyW=Ar4Y-Cu#^*D>SG^;V6 za006=%>|6j3lUF%TRY>Y%v=a9`)Q>tHY>lviO#_!ok!$_sx6m?ROU^v&$SOGBNV3> z+DS>v_9YJx&?GmUAWw}mdBcRN$w}K#f7TE5+on5ring}40&wyMNVgmEkR6ecbUGek zBcc`Zn4x4Qo=hC1|MRP!99?=aJsdfna7r%WWYDrgrZ}BNp0y;NwgR&|nHq`=%BW;< zP~*Nj`|7X~urrg2C;D3oS)X(KUAXeV0@YxfWA{lmxL7UVEiA)+jM@?UjeC-rUL?RH@7}E+RqAo*WE%tO-s8z4j!jhKk<-CD&g>iJWNb zFF|#PT9&9vqT81AWQkr$^w>mimgtd0EmRzI2a7Mm;32BgI{|sVN=(`~ejRjs#_?fM zNVko-4Am9V8?y^9@k~Iqabz+3?!b1OUf{klzM$35J~bXxcqlWEMoj zhG>aNxR#ia6_Z#kF`pE3hx~-%zYM=b5C{;96`??FZ&2^O=D>1~{Ri^hXxcUs+6l;|U*A{|p`w)d-1Z-u>IKQM98)gt18sVY3*+D&~u{O=1Ld>9ClrJd{v{OaV;*%A5^ei2|=-46)f!wr+rC6*x*p%P5*eYk^ z3`*~27abPjXO7($JLwkL7uQv@mD$zLj9*#JT(nvN7r|=Q>Vn3=9d@Fr()}=Hkf1>+ zHvFyh9X8@Y=YWrygDRO5MIpD-`X;T4^swO0xP{XI7tpNsS%B6%kH-Fc6U{7Ps*$PkJ*s`+~-oCM*a<)S68=J<` z9=WZ;-hIy$DyLA@Y?M}S^jFFp<+(NIEBpgvH?V9Tq4eH9(w5Jokx<)MX-s0p#O&cS zs+gE9wNqjWE9G;*PVqxn%K3Bbqi0aX&z)8L+NtCB$_9R}wBrRF;CISloMVcNv6sGt zXZVfsJYK;~exbaF3%HF}**jmu-}yc9PrQMDUKP2#~iiHQ`v+))9~{}TmKg4!g>YRmH#uYT1j)E F?SH1@Ap!sZ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockContainer.class b/bin/net/minecraft/src/BlockContainer.class new file mode 100644 index 0000000000000000000000000000000000000000..75b66977897c9ebd0cac66878f9bd11f9d210953 GIT binary patch literal 788 zcmaiy+fKqj5QhK7LZz0X96W&niV5I>#0$N^m?+Vt33{PMuM1sGwX{hoBtDimka*z( z_)x~#T0=yPX)@iNo$sI7nSK9weFJcaEd_Bb3bQ24vVvKxC|E^KZ1ZBZCSzSjfgyHe zIhKFSP^{=Jhx_%eq^4_fhGdIEF8kd!_il`~O`cLk z{})zW=hSvPPba3yO@=~cO13-Kv(1LC>mr*L0$0524h)+d58MwV&K%$JpGC>lDIzzP z&A%cV49d0J_d5KXd<^M;Zn}1mnnhqBA@wV|+v-6?pYlD$&^E^dNvJ zBymkJsI=R}41IuH%k7N7UTDdXAgdrkHi{U10?0w|# zBo0U=O2lGqJHM8dMwkiywIQS-qGMhQ3Q16z8nVPQ(eY4YKh#KlYs3PLA>>IuMSPmb Pj3kNiQC@}&*$A?q1tg{P literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockCrops.class b/bin/net/minecraft/src/BlockCrops.class new file mode 100644 index 0000000000000000000000000000000000000000..2ffa0a20b8630c06e623228fcfd2aa7515b461e2 GIT binary patch literal 3449 zcmaJ@ZBrZ96@IR?(xTNOgwR@G3BLsr0ZkN#7^}#!F(`86U_*e~u^lI@qy-klt|G0B zX`3c(sq^BxO<&x`nWS-(51!6+I#Z7$&m=Sboay)egZ_a|`=QgObob#N!`{)0D_9p;`aYMl%o(W(8M->vsq+_%!9eo4f(}@6%W0H$0ZkJW?B%b9W z$F(P<$uGFwbI9|xlUzK{T}??76Xaz=cp1cWfE1^sW22*^-1xMN85y$yyns0ceVA9! zi-iD*Z*dQ20yv8oBLw3m1sCx$w|j+)MH#w`0)zjEX_?MZ246CtA3DPzP1z-bp=;W- zjMMe?f>B-23uRjAFY4C9idma2>y~q(YH!Sl>15e1uI00|F_|Aa&(JyV=*6{DdZoEd zsaHz6V=S1(HHL%9Y0Gd@>*Tvw)t8)9ty)Z-wX5Y)CZEqwuj-fdRNXPlsX5&$+3Oh& zXzxS!4CQ1L84fHPjzF?tTz2YJBUiQ8=gpFF+$xs50z(CA;&R-oo25-cfNC zKUQ&#`}qkd@-~RJb3v5ciAbn(WqX6yEw)oH$i~o95VR!@T+Ulf&M+`ej+)_cvd&o3 zwob*AlIJ-KL$oY>Pug{>RAUGvbK;LH+ngh88G=OSvQf&JMwxu|wPC+7%rM9&dO=qF_$*U znmZRXR$AWkJoGAcA>r9cQ3{_QKzY{b2GDCIflW&Diy+;xTl;Z_`FT9@oKBSp~ZL>F65FFJO0Q^v1}fz!4v5~t=Z%cxG3 z^;*p!!0+9EaMOp|-p>(z%0_L#-I&>l@4l4>Hu7t^jroQ9>}LwAM$yUKpQ@&dDZN~t zHytA*<2{DK9r3lp#<1t%cGyp^;z4?k0s%<;{slvlW@phsb6{jRp12D(ocI);VW|Oc zM9K|Eq`{>i7xXJcd|Wo*|09_*43XRoKS`Nn2ZH1{OdkL}G#Z9VPKPnlJY*Ce`Uk@C z+mP>|<0fS379{WQY0V=%`NLQWK42OqOk>?zH^KY_rY6xWqDAOQ(}fYOyI(445gtiTFdfx; zT7~UZ)6s2h@Hdbn5z==jZbISPKY|jAMtZDtH0Fy%3u)h0gx$LLyRB}L*R}Bb=+r_t z5YoDCAQ1C)T4`U*_lK`)R7HZu2jImcM3w=>iPMh}n@33=CqB;*nJyCX)~Iq@RH+ZC zKwnUa{zBi9f5k!k4Nu`8WPJ}$GY<~2FveIE<7_`NEQzBmg(uk|q*w-%>?EexEOMgW zSw!yPHH2gg$YjEphkoJ@@J_HV(Zj@JkU#zdKcl5i8l;&=_5Tym?MZ5*=c&O?3lv^3nYNGO>86u7J$c`F!+yTgZA!P5 z=4eKrMW@RW&A4 z^RE`t9c|VEZPt{}(R*$raV6GKxYmCq7ARcPq$@F{aP4#Sox6?QcM-pf#CWhT7*;+- z|43i3fj!ibx9-)qTk$CY_6*%5FCvO_RPggu+bOO%R>DBxwhjaTq47V#^x`GCG9 z`OTri`z1ounr~9VDfGigHxrO;rn~<(_QpTMKA?g9@vwXo>TMjjgGcB(@@!{cA#-4v z9Ign*bS1?nc&@)m7~GWZrYAS@NMBEVnM#-88XUnd>8X(A&k5%*=n^?c^A4Jyr{9JD E0XfDNFaQ7m literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockDirt.class b/bin/net/minecraft/src/BlockDirt.class new file mode 100644 index 0000000000000000000000000000000000000000..f03defd20b896de66dbcb9ad2711fc1ecfab37b1 GIT binary patch literal 346 zcmaKoF;Bu!5Xb*lD5bRmf{BT+uo!W$BLjv(2nk7X!E}F=r+Hf1^55R{q zUKv~n-f(ySyI(GMclg%X=f&k)Ji10>ATMIbV=xh=dl5y%ZL0&^dfXo;vW>o_wvdWjt;9kRwa(! ZL%XvD?O<(=Otq-NVsFDe(k|x~yk91UQcwT@ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockDoor.class b/bin/net/minecraft/src/BlockDoor.class new file mode 100644 index 0000000000000000000000000000000000000000..98ca75a6d98c3a3c385a1073b93eb1698f5329e3 GIT binary patch literal 3709 zcmbtWYf~H78Ga60X(h1;AuL}II1pn8%dv6lgft;GcVabM93Uo+)0jnC!Gh4@)q9lQc~_(+|dz8M~7YeDQ}iykyb@4dL-H=>{4V)-oZ8P{G&&I*1GcfyyTn;!<5fy zxn!mKTm%;Ka+#5KXXRq+nA0&Y5PHQf+TH~Ltu1r%G9P_T&Jw5{vWwQp(!#XmPMFgL zo;*EcdA$WEJ3nEqcuTG|=sFAIcFyW4=7ufL%$c4k5Nyk2PG$sZ#yvATKWr|Rg$=tj zx@cZsvig>$sVmTS@-2aS*DB^Lx2H7XxC>@MDW@pyj48sz>Y~p}g-3ZhZWXMoXXSdG zrDD!5&h$Df(uqrsQxNEC8!B2}`vTq0x@O*MFS*(FNyjbZIy3aC0qtXs2=@1QOSXf3aTfYwMr%B2QyqtE&Yz; zjyV*hDS;U6$;|c@?CiXi`?g>z#4=FyY;W~a!CbZ6PFcp-v{cxW_3UMO_y4P8xspzC z#Ik2*rybY#cGfJ;F!1I|fp2GCfhuC>`dw#nQ95$4Ei*J{E}QL3o?U1kGmANAp;Ka} zF1wZdF>`goHM7*c@{PJHB;vA_J=fp)L_#GT3_HsN)9CaZ!F9U5k(ZC5f1{QJMfQyoW zUi2Aw0UZXugL4L+$2lFIfh8;(95T-scp05KZWvgRC#zEK2YA=Odw5^Rnt_}6p+MYK zsXddUxogg%MKeFbEgc^i_%VKB;HUVIIp58cEjT61z|ZiJfsgTtfuG~Nj!zBz0-qW9 zT$<@dkAZ#+2&DFR+jevUhn_$cXxL8~CPH1?WD{#Q9ET8TtWdu#CRV1I2zs&>1^@bK z3I7bo%SxtL9#{f`MU4G-4+})v2GyVJnxp&G?(SeFm7q{z?u@(;N1lR5g_uz5y!Lht7MaERrAy?nC`qXTI#o5kFAohh2- zK=(_khAfR}@>L+Qzvmdu-ae%2BB%Rc!7+($PU%6Sevwm!C@$s(@_Duh{ch{;@Avg7 zyW^hA2I?FflqpPX1yvy!_CuXrQla=G-~Sr;86>eb$04D}J*A9iEpS*=D2O6x64nBT zD*!=C5+z1y*3NVEDG;EA-@)VR(;0`xetQN2ZG6AXPpQUdI-U9o;vuTiar1WwB(woz zFrCm^^VM?U|MYRWY$EtuatoZ~+JF#Oof^W3A%Z%7>g!QWnn8{d=x}qrRpWxRaE| zcz7*1o9hTBHEoUD$)Lx5@V=6wPgTmlGxPwCww}nGx%f7`wAgX}{-9+^cIDE@5G375)j8nTT`~?9M zpijdIV<25!U2W7D1Xbz|YSf$2D&Mqws7)ILU$tQa3o79@r)FW}w zIQ0OBHgPy{WG>ObMow*j<|}YE?&H)X68-#kFspKEL@~+IzR7;M!koTMV7lIc)fu8*p;tT=SRd}1&$ytlcz)sHY zVnwk8HqkV>f%!m(E*W-mb{Fv-2F<4`@uPQSVwgN7TBhvC5np9Rik{Th5%cSwB(9&@ z0a!1G2^e0K_mu>$GXXApYl#V1W&&=eSEF`p=1K~z=qN+RU- zq^#l`F(^@Z$PZ$BIvfce2|dKqdz<_-Hu>ii<;`oC4{~-SQu^8*RHw9DXl(;O(fa;%a$9z1S4L`D@51+GURYa;&4pckLmLts^P-vW)7@{~+wOb6eR7 QArMV>OGAV7t_rXI2hGYH?f?J) literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockFarmland.class b/bin/net/minecraft/src/BlockFarmland.class new file mode 100644 index 0000000000000000000000000000000000000000..8bfec8c6b6a12a66d144ad152eca3c64b2d15797 GIT binary patch literal 2677 zcma)8T~iZh6nEUI4^xn$2ppjqgf3XG+Y#jo^o6#I4z*0a{X6$oA4}Kpn2MH?b+hm zqV3O{i+QeeFWbR{m(M!|$8*QMqH8(s^0>D#<$G%vJufdXnwoa)AhX7kOTKw4$Q1mg z%!23Vt&vvBIq9 zubKJrytlL}&__7oaNgbsioPvj%sG}l=2|m$U|MEi3aBai%?UKl1?JM~jJaNkC0<;o zf<5m@OGkEuJ$>8!%FGl4C!e`wx|X*#B3Wwo+(|cZg1ZZ5ew9234DW1ZJ2B<+p|wV* zFyVXag<0G57w?kl9c@WYcw&J8_|+4J=g!*B^2(y;honrbnC>ze?Ag&06RzP?ftX`u z>3`j}1ootIH9{tb@j0*PFWFO$EQXfQ%arM_i7)T zbX>;`4WH}y0$*ylsl&vgjt?-XVM&JtTgNRd>lnbGjukjMZp-tl$m>{xtHYDK>vH1` zd>sYp=MXYF0`%!Pf}^BtJHc;26li;ghCs*mof%24W3s5D%f762fn<&Pt*Wtfd&t|n z?SyG=U6iGpV=-^!+)CLB2w9&6JCMbA!JYO@`chKYWR*2>IgBD~w*nKDnhHN*3379q zDG%5&ORPj9WCz#45LzI@8Wg?Jf6Tq?sal=gpUQ@xTIS!dK{tuF8%98L*`ql(C_iKv zZ;f1p&k5$D8gjLX7o1>a)(f0l3{Yb`v!TgMqT2mcH6}`K%4SzA$EU0I9jMUCnaHw` ztNv>EVV@~J%bQx;TY?Qy#gL^f_R3ybYkHrMAAwLO1hz;L2ps@5~Ar{cv*tB@FP_P z_EB~qN~xiq-zLP+$`{N&8b1J?8r|rrI2htwrRKh58&n|wv4Ki(SdPCS{lwsLDmW>t2-d_b}DvaQi~DL&R_bEf{9PPx7D62uH&h<=SKzG`Oe!gP0I6 z&@8&2L*^fy z0RIjF{&`O&%wJ!FS@F&U1Hwm(1v-I%w?Lt8bYWC mT_4hzQT}DY(TdAnvMgI8#xjTumazBjj=N69V^pZahyMZmSx+PY literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockFire.class b/bin/net/minecraft/src/BlockFire.class new file mode 100644 index 0000000000000000000000000000000000000000..38f7cfc9a242362ff6fec977905b1e8945a47ac6 GIT binary patch literal 5082 zcmb7HdvH|M8ULN#yU*Mtn+=zcCnyz@fQf>{2hTi+1QUXQP~W+`dy_2L?2Y?Cf^S7^ z)mYnVZQ_dtI&@mvS_W5bt<`qgTC3BSGkrPJPXF#do#~8ICVl+Qxx32-0@wu3z27_x2eA)h@+~2Uak-F`hucz|D8t=IYMW@7 zA1SGt);6tKvqsxEJv}2;GxET!w&8;hKJ;V1oVmw`13pX&7|~HP8MSuXTar;bn=(hN z-gwFqaNX7?5H=(6L_9OO+wL|q(NSl`yFQ+bXEq9Wn)~`%_6TU*c8ohJ`{PM#dv-ix zrFNT<1ZT?9R;DYPO71i>l)O||`b$TwOt+m##M5y**=1*wv3PQ%%RbPXvd4GWc0yoN zbAQsxw2u=onlgto?depseXpHL#MViS1r|FG#M7OL_(;-WzZcYeXbwMWY0XK8iy=Jf`EY z6dsqu=j8BtJmJHWI-bImj;HYj9nZ+23*9=th%f2*GM?3O1Gf6`oQ|*Hc^#Y4siOy5 zbbM8An#O>RK5X-0Mj$XOjgy0p7x1Evm+-Q*@fCq!!c2`=>2Z6EYe(=kf%dsvmV0oqDCVPY?4;N@ypcxdD*at3Q)47m_>|b7HAvu;7s9iu)8A>2uM5ef} zM?jE2+C8?-RC^Pax!>Z>rRUq(uN1hy@myaNw4=a)Mr?a5J!&O}*{w23GSU-G*qKrG z1a?u$k-=oYZSqj9`BrK50%21e7YMO56!w6XG1-sILhq&Fb+RQ(PYP>$FB5x%O;%qxLI{I@;07Ud!6>_bXKRUvmnC-0$^7MpxPjZKuV(*s)Tc5uh zN|6Z9pO!tigjaM6?`9W&S-a|u<;!O^G?sK51llQ`q~zu^)mquU_$c_L;CJ2wrw|M^h1NS#8CNLf^>is!hGNcIxwED;wHzwG$5REa zl+67 z(CQlp&wy7b_YA@=CR7c#ts$`Ed>x-2Zgz=RIXcF8`2^(3T6A!fL6VZ3b-7QRrPsvy zYd(eErPR9?*KwSO=RF&51vRe6x)MFtg6FnUV|@{?o|3fB9a?lYpv?0IY~;v;UDq=V zIz4@4WkaLEBvf{I4W?)o^=iWKYC}1M)H?%Nl|#5SuUS2V<$Tp*a@(S51PrhDm{_k? z-8mS0kBfGx>nJRq!7>Sa1husuUk)`hdDOhBW_bM*Gx#?j$M6aFX+yN9O025&=HKDv(&p6TgAh;9rEja1Cp za;($<_m0YP%QK{|t;1LAHJHE}!#9h;!t_bVK5zs+?Km`dhriY4U3cDxDf%Fbf4D%u92QS2EB6!#Se)tMOo7^t&T2J778Z4u$r(wn;!H(;hBdWV z)}@ngr@>4p3)%6)Rs7k;zkTFaPu{fGXqt~3#@!tr1)4+MG(7GT1XPtGqukKpm7**Z z!&?xQk)Vv>FOAh~!iV|^dvd_Vu> zdq8gZptZ^VW_XUlZ+MTxV|dQM1sQSRNfPNP1?h)t4)vl_qTW~}Nq647 zrN#U&n&DlOPfE4J1x;NGrP+NZ9~XD6TbbF9fxMXm1oZOY&y)hz76E5U%is*_olERl z)Z#fT$MXu^4Y8b{+cB7jHuJWwDTQt*fp!|Z(}Gc{d~nJyeCDLEx=m+z(hKYiFR?GZ zqE6G`T2aP>b`j^DU72US7;c&PqGS#R?LsO6NQeAfGWf3)oFWDEq zG?FX5OJ>9yCriSyct(6f$%@&kmU`VXjh=MMVymAM&!_{=|Wlw~T_^T7cZdf+~Uz|9_zGI(8Rp{v10OG%_rWzp$O^ z`a0Xrf{XL~o@e~|K=XFWJ5zx^U2y)fd_1L{^N>D8MBh~)-dSue0m(7l{krCiyz=O;-~nn_z1rff5AuMADsIHe_*%xqbrC%x$5v|*Jb$Fbq(h>;IFDW iu0Z+PIkfY_+%$(UADzx)zQjov*Sc6nH_=rWcK#1CR!_PB literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockFlower.class b/bin/net/minecraft/src/BlockFlower.class new file mode 100644 index 0000000000000000000000000000000000000000..3fcebcb3d38dc2c0fc9f520ee9aecc7b05c41cda GIT binary patch literal 2052 zcma)6TXz~&6#gbmAdn#!63nH!)}|q}2CJ>DrZ$08(ou3Tp^2v62Id5&8D?-8Z2D8` zOI^PB;)A*>UCRf5fJ^_9%e@anlVvUni_JdgeEasDz0V(i|Mok8+c=2gZQP7u47Z{f z#XB()x7B-vKmSsf381d50K9i6hIjEEYfDiA-;LsZ++%H-h16EqOO_!y7OQM=pS2HI z%d=Qx@gM>{f)5ph?^=%K-&4??()ER11?sA63I+WI%MlyRT1j|Cqh#|=*>JXOqbzc^ zTRzPC3Z_#9NBEfGZo>ly0&dKEZ51oO~;AtC6*>iX+TiZizx#jm^68byKW1OT}z<$n9uOJhA&vWjw>4GkdAf;CB%@&DoO1=^r%%@D@;%EShQoDkx`u*@Gsx_~h{u_fei49sVyMI|uM@LJ zx>FQKe$%7872+`75I*! zOarMeP>k-1XEeyi)EQ|?^ctU2B@?IVI6hYpDak5$>`cp}`5imYA^Ga1v9N`iw}ef( z40IA(7rsIBWzchAdTw31&o*>l)D$E-MekXDb;I?o1Db>gS0RTy(eY8B$@X^*yGa}l zzM2~$idC_5NG9#V_c2S)))>8iKrdA4!b_kMY4r#_v<5QiOTR#QiLUg-uLz~p7Su#{ zKAi~99rUuGUuiB8dCdPU^!!XF)NCZj5hfWSH$8|WiUhr`NeZ$EjSy3q4g$@io4!DQ z`r5>#Y9=W{w1wD@uN;L5NXL{7%|T%F0A2J2u26ElFQ7fg2x;*b=zEShY5k;qhlu(E z)DU~>k}0)44dF8Fgb|twtx$jQ1O;Ai(Jm*QWfa3i zo`N}C4P0EMTG&PG47-?2d4jl@Bs-efz~&+CFaxQMP2yWjwRM?C3qvgoOEuI&a*s1< z7nG1!G((KelF!TJb50f)f-+Ce=|u=a>;xod0*9{+^n8!LU@`Ixqa5y-{AcG-m+DYA zI=sTvrEx6?Fi!tmLznUs$#w^{>Ap^@>v-b?j<2&zUdu_`n}k^WAGn)@%Yf0`rW{xL QQ~%vCcWD0xN5WhG0Q#=6zyJUM literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockFlowing.class b/bin/net/minecraft/src/BlockFlowing.class new file mode 100644 index 0000000000000000000000000000000000000000..96595004a72e663e035637c62289a8b9bd920f4c GIT binary patch literal 4369 zcma)9dvH|M8ULN#y^r0!AsfO?Oh_v5-$b|D=R+=LA>>Xgx4LOvSdbfb_i+2|Is zDU9{lETkubo3Tas?iR9D$TlI{<;2H?d|akGWYjApA*4^%k}^t#kw$-nWI)z-%9Ot%F`Roy;fti>-xx zvb7^oOy|8sX4%}$3ZXT*R9d03oh%!M2m8|b?nGaPE0N)$6d6UI!nMtl$mz-DGpS{5 zZEYf_#NO>CcPlKsDtr5`#J!2u;i8vm-I&Oxa)a8CimqZJxw|7Vr1e|4$3ou1e1!_} zt}R>4t*kAuCq-@zyF zNe64N*1@M_Z0gBn4gG zU8Z2%CryIwAwz)BhirOJku}JLX6@9}vMW7aap#6y(d(zNmNr%#sV{Gr-JFDtO{2Py z+?h@dXME^x(hWzlrse5)7CQSkq`iTieYyOaor&xKJ!vea{)=iw;zw-II1&zipB*X-3AVGL_E_>B*`>TQNO25eB6e zt1wf;U=k@4f^DaAxqMG9M|rHqYIP znY?tGc`F9_pEXSiDQo>@W%C|ffnnP&?yA@iJU^{ zyWCY+L|OxbGzyb{QCOG?8+C9HkQy(^Yv;O2uI70Sjc#ZRM%>V&mXk0;y{<6^t4A;R z+xEEhsk95IqiXEhc-S|6UPCBF z#cp^Ek$8lxp+qGl%^RV5>L70KKE&6CWoe3YnbrWXs zs2h#hM-XwNaeGugF`LIJC14yuj9=$CDvrVo>P1eb97VHhiu9Sjl6u#6&99@n&alQ% zIYJp`+z!$!E+4`Q*N&U6eGoD2a&Qc>o>9d0#I?szrAHFlF-)B>t{z2|YmLAuhicmB zgt7J@CH}Z0xIxT0f?A$tTtXttrL-FAdGUQ~bj@FW(lrm@QP&(n)wrbE5$r81yJl(F zH7Q7kQcGu^bWo2FO?Bbm;t>X?oG7|cR~HVI*L1f0HKVlVr_5h7C#>~K2IH02$Iz)x;4U?WF7O7JGg;Zb)c2X;_0@E(h;HZV`E!?D(vcw4fqw^QgOn!6Pf`-}WP;njsySb+JA{xoF z)T*woKF3G|OVZDb}_%JqOk9IDC-~}vH?s=vyAh*76 zsM_IIJYK5`{xNQ`h+Nxx9ml6EM^y**ql-_f&3sI4=L@P2j}a1&GpbMGX+rh|K9G*`X>^P)qceC0X9?jS zQ`XN3V*$=|R9u9uR4fvWUPMeOJ8Cyqox`m2R2h(mSSi@A5*3oJ_kwXldon_&L$1Nt zcQz0e(rS%T4C$?op{ZQMkVs1mxvgVpNesvyIk8$ z>~S=m#LPojD8pHLI7fyb(!=SJVk3A=3f)+A60?_@b-WF(I~E#8>2-j0~HgjHi{YCa8V%jN1{R zP%xnp{6p(=5W0X`3+tnmEBO;%ey@}iZlpqky!sj8hE8KnIXTqI@~OPsOnIY^cT)dt b^d2$!FFJURIJ}@01)*kB^6iuuK-+%+W(lEn literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockFluid.class b/bin/net/minecraft/src/BlockFluid.class new file mode 100644 index 0000000000000000000000000000000000000000..f43dc519084ab35d6fe45ec981a50790fa439f80 GIT binary patch literal 5976 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockGears.class b/bin/net/minecraft/src/BlockGears.class new file mode 100644 index 0000000000000000000000000000000000000000..c7e392f6115b7bb49f54f7c1ab7863041e76b84e GIT binary patch literal 812 zcma)(&u$Yj5XL`ml5U%(1PCRN1gc(8!ht<<2r9}36-5dKm8wYGoLx6Ec9!au z-O;GG&rlwkR4~-XQj47;n+UtdCyG29Q{je2DVa;7V^io<>S=6_wynwD7^4`TcgI?| zD5K28@&gy;Hi_ODtJ406ieC{N9Lap3*RyT(PR(AZ=-rp6Y)@Zy%c|(JT8eBwN7}82tf{=vE?IecbMR1^b5J z3*AWE`w-9>Vufyu&g!q67TF3#0(SC;_4R;NI#*GhXnveo0P=W+5DH2hH2xQ4n0HUC~*oSoF>GIw zo}6(jjO1!^Grnfv-Y{DCKpl`6U5 zRiVqtIAw@0bz^dIBEQaNO6SW{#q0XOxx4TYFbx0Z_%$+Y{Ugte;7gYW+wkZ~R~{%e z0_q`cyEFxa@!sZezwf_*J=4YzIgY%bX$@^++JxUX145^Gt*0MvNF30i9y9y`oa@AQ&w;BPcUI8JbWdC1FD9;DbK|o(X|f(;Hr)`T+=az>pE`WCdasrB5vup zjXOH-;vUC+9S_i{V*-;p9*V#zOzU_gqD(y2(TyBK?%yE}TM|ddxEZ?s^~?}CfooMs zgG%7nJeo3h1WApsB11osaD1JJv-U+Hk?Gmay6NpJ#lVC-YfdP%c8EH{kW~3Sk`-BW#YI>GGL;6t zjO2QxR~bSe^A9K-oRm8F2KurxuOqcV@W_*qcA@S;tD|XQ2k#GJPqhxr7e0p4J3uBRqAdpe!+Zg)eEI@4H|g%GiP5Na9{k`wXSJY+kB?a{DF--BT6$ad&4; zGK{s1@~)0m?~CNL;(p@k!yr{C?1!;;b(E-q4mVS}Kpr;7f z`U~)>Z@&0YeSo!m@CW$p&+sQ$m;2rc9}6POC&^kjnSIVZXYYIV9e)4&*WUn4<8C`% z#kB-FFqS|D)_Hb;olHUcFP(hDxyO!nomLH7kXRSK4K5*19hP>wC2@w@95O z(_O8YC0l0Y1M0k31?#7%U(}TQECp9C+#yfZ@Z1&KDer7~zTCR7W4dK=%#RzU8#uw< zUEizKY!)*zOOMPaX0{PHmF#`fwY=)=IEg0KyoO)07acK+v@Eh@T9i2@(lxxH<4xpr zbYfb=jE=YPwvJic*3pBPbi6E;iPL$oWM=Cx5UgyCkxKiE#V?Av3PsfN0b zc4@Polal*TW4WUc?bZy1?N#+SMB_1ZLRHm{Lo}cW9m`VVIaM|==-GC0Ax_)yJr44H zj(m;@ENs! z&I|ViX@5!UZXt&f-}2j3UdBB-Bue_6#h;!$t1&sAUJJ-#1^bI1SPaZDpD&2TAUg{3l_x-8Il7X2{UOjq4ZK0 zFJZ4-%ZuLh#;%gC<%JK>m+%FAg03olX9BhgW=*os-~Rdb-rqUT|N8Ye09Wu$5<|!v z=)rIj-FVNSc;CPX3I-2G)$C#tmvC8$F}3_asf?@H6$2k)LLGdhY$uhts$6}n07 z1k8$bHkReC?Um)OfUpJPS6$Byt_j3)wmo!5K%4Q)QXpM)J-N`>UYE6HXT8E5qfsq8 zfn0V=TLKqzMNbBWZ7P*&&PGtE*Gh#Izg8(v+O}Q%&e?GajliuGZaZGt-=0*SQ%iwU z+M0K&hYr*C8jcsZ!GqbFU#-frfR#JJk|2|A`5&EAxs%*e$#m#%Hba)}zNPHq01@PhZCrv+Kvd)wm+5HxBM1AHKQ`0NNo6el^;p^>7expRiA3B(ZPXyyAe zPavYt5Xoou5zT8&XupJpy_DTF0+KNJrO`oGCLQ#l|Ip1J;TiD5a3-sjEgHv~h(AOS z8;@tKczIm6bdGC3V~*$J2`iD+xEQlEb(pl0YQl}|u%%lGE7^qp1c|3e{zMdeN%835 z_q_z=^F5uinP(VF3q=z~6CL3++Jw2HFh`&;k0V8yMi;*xW-v%uAo3}eVTmPJ=6scV zYdqUP2KSN0_c+TL_)q+aULjs0#eb*BzCi5g*T?M>ol&* Bi?RR! literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockLeavesBase.class b/bin/net/minecraft/src/BlockLeavesBase.class new file mode 100644 index 0000000000000000000000000000000000000000..002661c80a11049435967a0d513a23623c03c3c8 GIT binary patch literal 695 zcmah`OHUI~6#nkabOwg06zl*(K^_a*qI9PVj0we=#i#%3cbr*QMW7q2D6m=o zi;rx_gWzm82q;Z=B!60<+|5*Qwy%a`7q>gelYm}F+Ok?OI;2LFwpB{or)s1;xLEcu zfk_7|9v)-W!y48-R4^m3c7MJFMPweiO<4+Wcw&uUikok;##ZDXw^&ZF5%Q`$2Q5_VgN}>04i6d@dMeU1vO4!C`ip z`GPCcW9}l~g8v%kr(bxxsCazxlK9jfhvOceY}J;1>jtKUXLj=ojE|`JIfgc5Ph4t{s>Ou(tOaQ&{C+B_JEH_6d?gsB}*v>QgPqd+iGdzP2DwZ{|YB= zT)0qykT~!I_)&;i$L#?EUTJ1`=DnFWU+!gUHWLX$doX;<-|;Zl zauUAgX`-gP+Yy5&lN(HD5G@9EkA;3QQSr&4xX^hf_A@mdNz>X0p(^!}=JCk^pOyV< zBb8^d*q263y`T=&@gt+a!CfEsu;&q;_#Zy z(EUepA?<)`kx4!wjps_y2G)ju)2~6h3>!53e*k9PD`T^RC{4sgl$NVtU^M^g0&1a~ z3OjSw9*t_#&orM!$At%m8ofePQ6b;l>0g0;LuDsueMR*%g&1y;Z4dxNb?Gz;nvZ%( z?vXd-iuLIRZ&M8L$u`g|aqHxZDp#<+VCheAKCHM)IG(|go>jT`N{Sl4+`}t)l aXc=y$5H@er!flG!sMg%)v<|Ek`POgnESM$$ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockMinecartTrack.class b/bin/net/minecraft/src/BlockMinecartTrack.class new file mode 100644 index 0000000000000000000000000000000000000000..6fcdd0c5a8329bfbfdf47b27e0e3e4c017a3b47d GIT binary patch literal 2463 zcma)8TT>fl7=AXVg|I*|w?(yGz&-cIob>1O5fC zbw;o3c+nd#)N$yjGyVX7Q+0g4Z#PYWSWRYjzr64Bo}cfX{Q389e*hT8<7V8za2m&P zGciR;8lAW$9wS0F+JZ5RC#KH;&6ItR#sntCH>g?-{u@*Q=NlB|2}Q%;++dunMf3D}MfnCWh>5l1cPYej8p*xEewl_>S;K&#ipai<`PrX0m7A8A>v?QhJ;d^wYgS!mf%+Rm^C(hmSO5QPS`+?rS)WGa62zPsOZ;Im~NVz@myz zG%R6R!wNptki%sStGKFR4WB8vaFpB!V$Hf`+Ym7xXn2T64GoTF$h438l`vB6sAi5d z^K6~Bt;w)GqiP4fg5Czat^vu|v%K2xLWpbMc97Kyn)_$uM=1M_=J7VC6=Z7ct#dWS zpd~@8&UHbM5(&Foaw2vsP^f88xFi>^yzR>tg!~SdLFka2dvgJ6!Pe|xbKVW?jXedb z2rKE*Zj$iQOWrR9*0zFUwHg~3(C^(w6qF7QjJeSgsox29E4d>sk=$OZILq~WoQoT1 zMS|Qo0oKi5x1b`gDQ{BbpiJ`=H8-UFuTT>hNoJGD7dV+sHhqtdu*4=&;!Ct0DmW$!J|Ro$ zVhP>+-Ghrv@H!)$rC$}X*SM&p8SWg;M?uG!jBI3YCiMcXgTJ6TlQCaH6(><}=r?T4 zdFdyKSf)q{;==#v(Iw*EXBy$ydiWN-jAx|pa7dx=Au2ARKLU#3h%Utvhnt?GW&nc` z?mSr`hS+!!uDlwvFQ_1hpInK?8)QKykl;~y0@5np|b9#l2eH^Pd RGUWP0rt*kJ*JN_n{{fdL6sQ0I literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockMobSpawner.class b/bin/net/minecraft/src/BlockMobSpawner.class new file mode 100644 index 0000000000000000000000000000000000000000..83d828b8d5cd5336153852d51b7387d29ae524ec GIT binary patch literal 584 zcmaKp%}&BV6ot=FXrUJH2mb&Q*bs0bOBWg!5=}@z7Z4KNP3vf?rNv>Y@ts_#8xl=? z03XVDi>L{xvzW;}^WA&ro_TwJeg&|NjT9EJXhO%5ft(2q%LY~qtTO1kuJ5WnhD5d5 zto0b;jo?f$WLvH;j>5hzWS83>DVYnQ_PxNlI`EaN?ifndTFV!z-Y3$L{9M(C(y4b{ zPka(P43;}Q9`Nf>G(ww7Xw}*&gV_l}>4-xD8FJ&2?ZEB~_^mJG)+N8;2G%UBBX7Y# zfuZtWm!H&#E;5v7>8T#{^gozJ;44n!NQV3@(&kD?mwRNABp(=xzs&yy(e!1q^gkl9 zn=I*}j0F8nv^2zNiX<3P6jdnF=rlJA#V4>4VviJ&gOP?9?Fr&^qUK;ta!RB#x=Fr3 hI~gJV@SUNL^%U)CWF~Z;&WMg__fuS&^lWs4`459Xg^~aO literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockMushroom.class b/bin/net/minecraft/src/BlockMushroom.class new file mode 100644 index 0000000000000000000000000000000000000000..53920e682f9846c7fed177c3f6d1b51eb3970a88 GIT binary patch literal 721 zcmZ`$%Wl(95Ir~Xqj4P)0;Po{ElnG6fOVt5XBm3#*?{_8=j1^LmuTcxJKu2dJco}yXyE@r^^|1RiF$-t^u?@ifk-U z40QU<)@QIr$?iAG-Qz{+=pA;er}8s{@{zh|H1drCp+Y08Kqqd=LA#rCuA)Q+XrG`q z?|t}#)2I&8X1Gio=lZ))$$-r}t@e^KgI2G;!%Ckb#h0-@!@^tW%6lkf$y6%-;GC(3 RE0j@D>O5vdceN-l{Q|VUmy-Yh literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockObsidian.class b/bin/net/minecraft/src/BlockObsidian.class new file mode 100644 index 0000000000000000000000000000000000000000..d2a2846d66d7a4aff7e4d4711a071095e3e14183 GIT binary patch literal 504 zcmZ{g$w~u35QhKG*2y>;jV3V*1o4u1aE=}#9yAC8LBWXko<(R)y5por@SVIUg5bdi z@S()&5CV$nLsi#bUoF(v_s1uIBeWdkv01_vD%Nas>~K^W3dd4ObHb4C`hM?*A$O*u zn4vtBD!xc3L7ZHRU~H9#R460O(;(5)X&f3j(!N`sLr2BNo6urmB5sX0OG58g zAwzowF)~`wocfA1Ls2h=Gc<-Ps6GP^?4tgFf%(`&j*eC}bUEtW0Q;6bEaIf+l&J$>g4wY=Jb)2^Z@Nu0wv__!XHqWdFitN^jUUDE|N~ C$Z0kJ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockOre.class b/bin/net/minecraft/src/BlockOre.class new file mode 100644 index 0000000000000000000000000000000000000000..2b2586a30a92ae27f452cb4c958b6e130f68a3c0 GIT binary patch literal 793 zcmaKqO>fgc5Qg7P(roQ+2wzFtGzC(iB!SlS#G!}-iI6O%Ahpo@#@>phu^qM>1pkH` z7cNARkT~!I_)&=2d~j*tGM;(8&%ERD{`&pnCx9n7@UV^zA8Xk3;G^bIw&en4b!@wE z%aylXc88>65?&{)xw-B`l91B8l;xBASgI80;pk-;awu9iub(r@JPEJK4X%o^PyAP+)N zqIiX>T@*+G{PtFT4E7zlZ&cCka2j$HIXtYAauwI+%p1}jbI_h3KSp7KmCq1k6er+c zusu^(7pgZ^xl_Lql$*9LQY+9v*C`f}uU0y=EZo4&xkZhh&OBFe%xs()Q>Loo-k|yi D?A5R| literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockOreBlock.class b/bin/net/minecraft/src/BlockOreBlock.class new file mode 100644 index 0000000000000000000000000000000000000000..a336cbb274ae777fee5b53e66afafabece27e264 GIT binary patch literal 528 zcmaKoy-or_6ot?1udKU(AfhaZKNV0wX`!)@gk%%Y0%Gm3jAjLP&A1qz#mbJxMx!yY z@Bw@%?Edvb&6Gap248~y)2JsPtUh};A z8H3i2MuH*N4MK4;n+}B>@Zp4%@}-E6Cy_rMhulOxDQL?dtvJC^9Hnvb<*bYV9n$p+4J-?1M{#;vFemHpn!6P zN%sm>O{jE$Y{Pv5dxg@dzCe8>g&~vZX;&w&0Vky_tS;FO%~Hs-=W6$G8qZMk`OyL; h_wKtoU%*WC2XZOtJcC%kf=#ypHRrTxJ(`^KvtQDmb%Ou^ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockSand.class b/bin/net/minecraft/src/BlockSand.class new file mode 100644 index 0000000000000000000000000000000000000000..c9b6e44f4efa48e7aa47254e791d1e032245e017 GIT binary patch literal 1758 zcmah}T~ixn6nF>Nq;So|Fh)#zABy?Nz^HbMfhG)Gmw+2ddLPT{ClWd)W;{vwL=uy@Cf-dkwd~_o6K! znic9hcgk+%^Z97E;%@DZW0Q6w@DCGo)HdyHzb<&eZ`8^hw|DiJXvfS|CyZzmm@F<7 zWSO)Tx5^F39Mf?Woab+fa?(8HHc(JCqJH^d)fD)SR2|A6r@+w*-#qLdMn(!@#&FOVG5cVRw8XIkIGnI~vZ z>-(^t{_`p;PP0^Pg6PuA?4XA2R53>tNBMP<`pmM`yLg`u*hTCBqXvxDzsO(V11eot zT$ERmEB=g@XNNW(eYwm&cooo>$^5{{NDtGTOlBV~*R_=P1iJPtrR}114{blo%P!he z+Q=R{#`HAlcm4uHdx|#k->LgrOzOPOJj*&)IGn3!!w_rb$bFb~M!!5ZQmtjJNNe#Dk^kPbeJ8{C_)sWLL&7iK@t}WIWqB+x?t}rMYUV}6A zmu;7Cb&hJ>-?eHEW%SN*!xDVguD2NGa%Go`;t_%BzO^rkZNFZudcMeIwt{`)AzcF2gO)e}l#bOxhYU!q`wm8`GguVZk2qbyvZmbLYlYGI@laqpD zP404^9R9Dnm#vk|M55KCf#y>NW@4O1EJ>pYM4(6?!ElXsCB$eCOysk}r(mf_DWB?@ z+V7Qtp4wF6P`&~v9|^^9onk7i(4bOnobGWNcqS*}g7Yl=0<`lp!y{=W6Fo(gR?1#l z37{t9@9;7cjRnw7upJ@-#1_@Gn(Tj%RG3Js%3gr@2h4}to&b9F3wocQ!dTWa+Ds-Y zi321~kPH#|Pw0~%DKZj@%#$b}LBCfYCaL*ZYJY(m-=MZP2~i=zoFx0mVvvw=M1Ej{ NeMf=1xEa!9egVt;*;N1l literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockSign.class b/bin/net/minecraft/src/BlockSign.class new file mode 100644 index 0000000000000000000000000000000000000000..df7db30cb21534fd9d8e63e13e180f4225c0b414 GIT binary patch literal 1712 zcma)6T~ixX7=BK&VM($O2m~l!jrA)D*tFGJY$`1T(6xM2Kp4GplPs|9W;bp&0(brm z{R7^3p^k)^I-_2Dl-TzMxL?yWQp*;8~f!p|4#~mGWIzCCD4|k<$DS>=&|LR}y5%mq ze)Wku`$oWUni~!4yOv#URcO#p0(IUATOgauuX=V^tkYFBu=c`YGpH7~9oOz4m_XlF zXjPxAS&eQGsjB5Ya;>VZh!#SDtGQQj?D~OQE19O5XBcs(CQHz;YcHhT3LUq&X?Zoj zUXpoad~e-$_75t4ps33StRsWYzL8#4EV1Rcf~vj3xS6D~-ePmE%Xa7}8(6}!fpM%D z_zYJJj9}Ej=P(V7;fjtg3_QfDz~q}s!9rhjcloGlH$unv1ja9RH(OLg-9A5*F4qja zhxc`?8`!`j17Bj(z!qiUz8B%UTEz01XyjZe6D*qmkJZVL!2T~&`%I8%$`6?$L6$j&s?mK)-{Wjj|@|lRTEI_942edX4{~-D6>YwQQdgc`U ze-k8=NHT$lN~@o6&`FZ64AQ*I6~la}b0y@Z>C%=F;~&TtW+taH+9^^$(gnY@Z@Vj9 z`x%-_qQl%tHm4Y4h)h3_^~fRLC7j|cUB?(_{N>bVd04SJEIt7Vwgz)zU& t1frs8W3Y|1`i!gxoW4(H(X%;2yzIDqrPZi#f8DCoDWZGsLfxxw z-Lh?NGmI6=E)Pl#N~`+TMo?<{)zSmcuiNvcDLW0V1y*%y+1l)7UhA|!E$m@t=LdPV|Yq+3e3Kw-0M0grS9W%JZkn1P; zryIlQf4(!M`@bw(0rwrjr#2-GL-v?ayJ_y};RcCi^z;Zme*pwpsD~ z#Z8NJXV63*-5&DvZX)!UfI)=l22O!q0C^?y2gt^YnLV)g7$_!Y-(m0#g&2ltjZp%i zP`OHbjiNEcJH@Z4m1ufTnNzZcV$Z3DO7`({+|CJCGc>Z~&Ke=%hmEk%0b z_7f4tejrBwI7=Ns`THa0(>?On9XTHLk(-CfuN@`Nb;x@IsQb_){WnSfS<=5fN}nY9 kG|^{>K1=jDERijfze@3kn2_{IsE6neFxi72mU@i*0bz#bCjbBd literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockStairs.class b/bin/net/minecraft/src/BlockStairs.class new file mode 100644 index 0000000000000000000000000000000000000000..a91244b16e825a1f831f426701e28e83a0d25145 GIT binary patch literal 5884 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 I&xbJm6W=|=G5`Po literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/BlockStep.class b/bin/net/minecraft/src/BlockStep.class new file mode 100644 index 0000000000000000000000000000000000000000..b045bafe3b00c90099ebde43955b1578d9b787bc GIT binary patch literal 1654 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/CanvasIsomPreview.class b/bin/net/minecraft/src/CanvasIsomPreview.class new file mode 100644 index 0000000000000000000000000000000000000000..d3c14006e426819f8c29dfc9eafbdb91dff0c9a8 GIT binary patch literal 10326 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/CanvasMojangLogo.class b/bin/net/minecraft/src/CanvasMojangLogo.class new file mode 100644 index 0000000000000000000000000000000000000000..e26319964152b42815cdeef1e2f7d5c3d22602d1 GIT binary patch literal 1110 zcmZ`&+foxj5IqwTHY`gBfq)QHM8IUhtO{O(s6@23DhNeXO5cWL2#d*XYIg&aAKk-!B77o(U`aS78ZE@P$-Lzq=C zr{Ic;DAFqV8F}dP`Mk6iR9wY^f~*Py*A!e=aDyRSbt(?Sg~C2R;08bR4Xeg0!dPwW z?h03wP3h$rdY3KR@>dvo(wUc(mUqg6VX$D?;#s4%Bi!eFr%I85qR&fj)_J|{N9x?N zeTLEWX@#dQukTqUFDH@IqSJ6o;)x}*lX-3*aBtn&=XRw)on>WP8j=`gn6`y))Tm&| z<-5M&xg}$h+oGCxxwp3^>W)iw28>F>GUQO%x?NGQs9^~=72MK@yE__&F~Tq$3~M=t zxv_Rs5_R8lY=%Uag2z@(*d7IC<+~d0A*W$k9ur7uxQ`VD4;Uu92`$b7t~Pc&;T{NA z!9xv?u=>xw{~VK;>|(XNz{w2 z0uHn**|y65ULYs)Zzg|JAHz_WoQ`xD`pPap4CY~2JX1Od)Ts^$0;`-Z_L;@igr$AaQ9 T^pHJ4$tlcWlA@F3hj9KEfG7!3 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ChatLine.class b/bin/net/minecraft/src/ChatLine.class new file mode 100644 index 0000000000000000000000000000000000000000..3dafc050166927ff03a94ac762e63db7747503ad GIT binary patch literal 341 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 a#wD^%;*9eR_z%8Ulh%Kd@=r|r>%Rfo@d{x8 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ChunkCache.class b/bin/net/minecraft/src/ChunkCache.class new file mode 100644 index 0000000000000000000000000000000000000000..9e9113c488e8c24a1b0905e3f180ffa461ded520 GIT binary patch literal 2690 zcmbtVOKenC82(P@&fJ+hw+~7$rJb2#dA3ubP;q#)@+y=T3RPPkwmy1i=F(0(oxzz~ zgf4tURwlZ0fguruqzlm~Db=_z#)M#W?Z%B;RwgE{8U(*{?hI2yNld(p|NQ^?pXdDF zf9}r@zxy7*F60eF&=W#4UXWy;B>Q!=%JqPOb{sTt2)&XV4pBT}P|+vJQQyPHZ{ZX7 z`ys{t5cXg|l4Ft_m&SwA?Sv#JLr7pqDqfW2C4=N;9m6_Cbes|hq$X!`(`N<5Kv@_S zFx2kBLczWy5E&aA%sFo7OeW`~3idg-vsg%V_Da8Qf#6&DLN+~=oDyhS!R(CG(k#%E z$z|Mq0_)qJYBiv~_R|7dZ$9k^)DAM`$=R8tQy8(6S?*L1yLM{&gneGgI%sQ5IPRfr zJ~cg%W|}s}Xy;Mt%ey0)taBviW?Y_RgVL^$zhcBvtEFopGcoDroMN#Yv(Hlu%Kg)J zc9zA|(Xb*Px#$Y$GQ+4WKq^&PCmh#K+pfKQ%XXbY#?A_~KCPk?C6jI)X9QMdiYnI0 zd|}4U_Rc1m-8<^24mQsi&d(N7P9M+8TT`v+wNsPMwki99ZDJ!{F|i&SOvKP)Vx1(< zpw+}E#&o=D;x%-bcpY0!yn%5O+oiYzT_)m^vyn8Bl1^#KIg&ev2@}sr?IbcLrZ8?@5;#!{c7*Iz(m`bTGG(KsduqDv^q^5j(0xP(w zumZj|iL^$xN!?dpAwT0?Ts~h&v+XgqrhNshl!3oOWTje;$ivGLsI(QJ2{dFSmMTaq zLA+{=Pzx7bJ5w0WQ=M?y|yCmF}QjcoF*W<*=B4^xI{F^xoI1#4V%=RFj5y6oWL3Iu^K=do8G8;kDR@ zRXC1%oW*LmT<0jii$=83Ydy3_IE=84W*zOK`~eSOiY2ry@wh_HW9j%VynA+bE@Qo7E_#-PWaVHv@Xlv6{)LzI~pTdMDP~9t03!cflk`Yx+9DkWyLX8 zyADl!B{r}HvOcya5M=IWv9(me@lpjH|2bvoD+UrOWet4fH}j&lpn(YlwxP2Wcq0RA z)S9Ft! zU&m5R(!V10HJ{;+Sbfb6+_$tV_|QvToA6uy+o)T>s!vfP*?O|qkfT}~kNKD^5r{{$ z@u70gS*81 zPZ+~5{MG!*Kh5v_(fp01Le@?g56~kXp--W|jC{d18;0?S81-`~w_ zeY}2hmj34~Se2XbW?_N=oa8KII15vpg)C=bhO?0S*DUPB^Q8)o(caG+Y$=0Av$RhT zx{WpS62^^|*0q4O68_%A8C-!PUkO)5r2GI4qF?75BG`l7rMUf!D&s~OqZGPpuhyj9 igYKJ0u!&f2s?_d9y~vs`RiduZv4?*L!EVaz-Twf(K`K`O literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ChunkLoader.class b/bin/net/minecraft/src/ChunkLoader.class new file mode 100644 index 0000000000000000000000000000000000000000..2ca13ee5986d730d35f075e86c0836a526f4a3bf GIT binary patch literal 6508 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ChunkProviderGenerate.class b/bin/net/minecraft/src/ChunkProviderGenerate.class new file mode 100644 index 0000000000000000000000000000000000000000..ad5931a6bfa8a91d37cb1dc673e95313b4f76455 GIT binary patch literal 11544 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 MRfFz#!hxRue+skir~m)} literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ChunkProviderIso.class b/bin/net/minecraft/src/ChunkProviderIso.class new file mode 100644 index 0000000000000000000000000000000000000000..9095d230a38d875590247aa127cd8076efab3ef1 GIT binary patch literal 1782 zcma)6-%}e^7(F*xvPsyGKn)lYC{UG`{eZB z(0{-eA8^LdQLB&bjDM1&j_2+MDPwSa*l+LMd+zzpJ>R$Yx4(Y+6~H{U<49vx#oIBw zhIdrl4g*giCv!5)%Wx--5Z;Y*bXSH2IbDn~yeGqwiudD4V!0P9D5+SDV*tx4K2Wiy zVqG9&93I(^S^~p+72EWRk1g9YT>T5L*m8~Hs$5(Uh<@p~je2$ep+Ke!>{Gc)Sg%i3 zarCRj-{6-(-`W$a(nVD*%ZngpuWC-Wws%q$Vjl86&d2T*`D88JFaff z`q9heoc%B{Sx%o;VD54a|J9Bd=N*uSz#tU<{wy0Wl8`Ks|7Ml=hO8T7l(?%HV;tvf zgE-zV7%x17DD(^bf>0ab!a&dSXd98j^)}SPjW(j+6U3r04kN8P&=Yq!9iSC7~kpJJfZRd=v72>71lWr=(Xy%pc{WW^+HHU%|=d^eL|R zGQce<+7ZYY@Zr<^a+5X{S^XJ5O$1^~B}!llg${X!#FAW`*N`xNxXpMSH#)FkzGW+f n6j_I$)&cGgXVXj+w2Z{b-66kTui_T@z4$+H%f!t{2Hg4^d0%>2 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ChunkProviderLoadOrGenerate.class b/bin/net/minecraft/src/ChunkProviderLoadOrGenerate.class new file mode 100644 index 0000000000000000000000000000000000000000..6cb1fa6933c06e4a158c29de641960b724acd2aa GIT binary patch literal 4071 zcmaJ^{c}{+8Gg>*ySv%Vg@nKoHoFM{qJ&LCh^=WG5Cwu78oo?G3{-NndlQyycH`~_ zP?V~Tg00qC@guP+ZMAf!)Z&zc3AN1BwxR7zr$6);r=96<{U@x&KJU3V3CgB3$@zRg zp7WmfdC%Ry+`M)jz}N8OFj{dSh=U<)#KXoPoOUInL()7FM4tgXjWB#TEGtJs9DPfg zM`e0cnto|)X$C|t8RjSzf`dVs4$1VGG-+v$mtzx#Wg{b2Mr183&2Tw#7!BbuB7M3XPvR+&IwQ@uMdaxqo(baFAikpz9?00) z;T^}uvcn3|?yOU69Z6@MWZoVuwifcqR=u@ZVM$VC_T_UY(kUmeu(pJ3mlmFrp;Eb4 z>dx6(rG8NrSAq%wtx!;?Ib1?mo2OLS$y`2@+Ba`%*m&nlvX{o zFGtg=tHf5H-m3hv1`%yZXVb;43Xe9HK;*hAvEhcoJJ+K7^P$>sP{G`hOF0S^-HiX9 zv5^5M-)j$KxZ*}}=c#m|NcjH7uC5JzypW!vogCh6k9tzpsCzg1qzbhnR>JXI48ucC zQIEG36{-sM31{c2V&2wEop#Yyh?hFBt1fUuqNAt0kkQ=eSjH|A?D|q#UrG!jqk-_e z0iJ4oV_yldT@27r-YFCgjHYOPvz$9Jmd!As+BR+4n@KqZ_YkyTG|Fx;X=i%~jOKfC zWBH_We_BFVuYt~mTdrkq{sAZJyrbK9{`e0wIB9PY8RR9-S@XEI&cLeb6^Gmmqg%WCrnbdr&K-ds|KJV_UN zoqXO-XZLvt&&9gi9o))(f|Gppn9{!Z3I9J|OJt@F49%aEde@sCVV22@Y!Dn}x8I1+Qf6&ZW|WEUFAo)^Sn=I!kAVSiu_mgoEL9 zVL@U|iRgTh)lz;OUYMPtk-04~rmMt~!dz)`t5PT_?@(_#IgB-Y99yCIqLuNbBlY-f z`-Ew_C+&1k;_9AUWDnu6?nz_zJ|QLhFzwun``B*d>_r4&vhPk@g-R?l@mu(&U?i%{ zDfo38Nc;xAN1Ce2J}NVes|ZaYoVbE8_shNBN;FMjNuqfQOA{?qsQ8ff6t=V7h;p_S z^bo>Qj#t1!4Jy%$WyD@ZT+4}K1#3Wr^j%3UmJ1Krn=lZdc3+Hc{1>ny&OUGf7Q4z> z_{~eP%GGDK#@V!+wGp$j{#bvzpPNR+f7dJ;yb-(b`>66}vG_EWO(1AqglSx&b)Uvr zqdi4YO>|MjQHNT7Wz?YstFe<(7R=~PbSR~a`>Nl zNq4y_hhn7P^(scRgp0(J-R63y zv}>qseomkb3+|#G0S?szG$A9JE>i6hXf5HLvcO2B|Sch=@CU!9$KSMkSpA~Qa z4?6YVu1`rDpS-MYg5qV8PYB+|D_?p8esx&}{9huOQfp#Q%Pf|*$ifxWO<{G*(NQv`pFFV{gcPM524GMhS{SnmM(8ut5!~mrV+65L zkvKtZi*LUN?kK_X#|7#H)2vQQ4XtSgYYkjP+3sdS`H<2-a5cyEJaV6x%0Q zy-pL)8SXyG{ihg(XXbn-gJ>}6mESU+?-AaCpQ^2icrDYk!;G4mIBTLN3uz5~SIm;~ z?3&`WGq}@4)SSk8sie1h9%uc3j`j0-*2=Ry?K$4h3rx0`wC6G~A2#yrbh-z7UDxU< z9$QfV!`N!Ho6WOmGur(TT_~^rWWG$g-X+~*(`cMPVBA#Wes%HlPbh7)2O_$jP~i+g z8j%1iY&JFlsd_TI0&7x8<<6$D(i^$PIu|w~-i9%S4daHY^Uf^C1V0^pq?wOV literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ClippingHelper.class b/bin/net/minecraft/src/ClippingHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..6b6ca14f4cbdc303265e38d8b647949ff1f01b08 GIT binary patch literal 1007 zcmb7CJ#W)c6g|(MjbppvBVfKtnP@WL2q9Qd2Z|z)CNSpSIZo&gU=1@1 z3kyqyghYje5E~LIOo+e0p8!;GUvT0CkfOff-21NIIp^KyyMOTR1AuEdZ(t6N4xD5?x!u%vrv<28A>oEzwB_DwiN0}xUT2QpPXQC6lrf<@j3hmbq)t(yFXT;l zgm(8KQwG%PZ^7ynS|1@vdypxAukAs}qnbzU^-$_4;R&dOGFd7lr^11TMY;wxjN^ag zC7WtC-Q}Bn)v8(*?FIW>e*?K{U6vbzi|ssD8iQKf&o^pg;HcxB))@Hqv*+w-L38v& z@YW07q@7b5JN(~oq2NvV%_8D^L7X(4?yo#{&-=rxf;Qzhi`OrBlXiby^IyN^f;Z(i zlc>tOPb~KG;EJ+Ke_ui|2?mW_neEdEe}Tci(o9t8gbDcPz3K`r4{eRjGZf`p{oMduDcK*SkPbA3T>c=X~FsZ_e!a$I)<)~(iih1G7YFz+>1RvPW)bFR1I zcFV05&uzKwUbWZgw2vwnUg>t4ZjH?@R(svX-P3FJy4$6NO0#;qT4*;qg_75)_Ix`< z47ED9T<>2}|!-t@?lUUqxs zAc38^{7X}yEu`9=Zma4wJ|F-yx3p9$a}LHxdd$^4!EIgZtaWQ{slk}W{!57|maL6e zvCYIO8>caEV+%%XY-PnOLxK4rNlL(_Jojcbdyyp|j$)savQ_ zPun<;3pOe!+qlT^F5$9`D_FE~m5r{k<_)}Q<8|y*F!leAPQmt<1t{3|tjj{>l;?G7 z{P-1QYhAb6bNdch!IoS(|Dv-WeHM_4;61;#6j-b8cYE*hI-n!ZmGUJ8o1Rxj3iO)i zR;kQ3(}_RNgHG96_7>b8-1Ha{N(FY%pTC4(`cugxvEYVg}sx^kRRC*!j zV631@fz%3a;K=TkWm22#+ccV{{RR>CS6(fvH4jlwg&^dnz8@Q~gk{LtzC* z?Q1kULw*YN+b14EnQ)v(NPGiT4m3H?za$?zY-%?U2VhW}!~jynYEe6e9RhI|#{;ad zV64NW_KP6aA~sNzfeekP;6%(_LSv|vJ)<*fkvC0hH8#|W&70KeY^>Ax5t1busyB+` z?M1dO2f7>>d=Tzh=xPn)0x6YXcgf#{`2+cp7RJvLUqf9->MiOu z(d(?wraxs%kC4u$KVgeB@_lW`S;qhiQ0bRh$Djxf7c^QRC%%wnUXEI1zG|__CK{iZ zlpveweC8y@)bOV^O&4i7%dz}$k|zw8{vtdT4Ihx)6P8 zEy}>ZFl3A}NNbEinqv%P=E#CU?`P18evlqvNCwsjLn<&w7zUV`G0UqSmsQG!V1h0ii|u6Q&1$M6uwN!IE6IFD5N5)H6&-qodyhBg)eR`yS#kewx zUCIsYR_-IG{DypD3=@f4*pv7SlZn5uSDnU`dK(4xF^cL_Ol$L)(e7cNb|3q-2RNWT z!9neJ9Mb;8VeKEx>O(l9PvWRPk2$@9V|o?G^*cDBe~6R%$2g^bj??=0nAd;78U1gZ zHB6KY2MfkH&KYwk8`p5&XySsgii&X$7mbf_iH_>B@guGnKVgw_+a(`%%7Xpv0Mg%L Y)7uX*^Z-UE27mKm(#yY_ToTCr3sP*#DgXcg literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/CompressedStreamTools.class b/bin/net/minecraft/src/CompressedStreamTools.class new file mode 100644 index 0000000000000000000000000000000000000000..13554c509e63358efecd9da2d54daa75070ba860 GIT binary patch literal 1663 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 SeS_9B>ExT_%eO4}*#7}5{B#5W literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/CraftingRecipe.class b/bin/net/minecraft/src/CraftingRecipe.class new file mode 100644 index 0000000000000000000000000000000000000000..18358e553b113650b8fcd12d0d3e37fc56387ca4 GIT binary patch literal 1267 zcmaJ<-)j_C7(I7p?#%A&#Kh{Pn(U^={BU=o*=Wrw(FCa?4E|^_MW~_B$;>o6nyg_n zQ7F=AO{qMu8HvrC{ zW}^pVdE_ykhl67Z$_gq9JOvXr;kbnpiZy8ysurd!oD`7vlPIkV2w%Xg$H`JX73fJC zOU*b+;zoKcSQXF~7%ep8we{t6J`KV<0;Q{sIIXTEjW}!uzo*r;W?1#pcqI#;6UcSg ze#C3fCygYX6BsS~{(`^f!OBemY7U;do%dfAmEXK{BgT-a;6jp*Xtlx;kWR)vf zUhpfoC^kz;on4k4*5mNbHASTil6?P`;yGb64$}BW=0adt9p6(6uU?ANPP+Nz52n=1 z6&Avtzq{THeiDdM-q(2r`c&rXa?n_+{ zzKb5dA_+~2k!m^aS57!e2uk{vc!;Zc@+HR+?jzul(AFWE8ljyr zMy8nc6!*?DHiz%122^J5KodJCh<@iiBtPE5&UMwjqc)qofApGkrMZQcUNc>jlXX`X zqnhQKrKpzEYI)b%#1%KUiOa5~Y;0lH%_$FCIPDr67~(wh=UR~wWg(;f+hi^O1P4{f zwRY`IxROa2cJq%Q_3f5PkAJr$@qzKh=?rVi*3j=Los7}#IF%n`)61Ae1wX*UuQ-kd zy+6Q7{7GJm{J&7k+z-Iofll{1@c};xA^P5-w_63l3LWWIVUktQn5q9Y^1o25#aGZ7 r?3XA!Wu()0lOr%g9A=+859laQs$H804F0mN^zY`+aW%p{4Wpj`joR;^ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EffectRenderer.class b/bin/net/minecraft/src/EffectRenderer.class new file mode 100644 index 0000000000000000000000000000000000000000..1c95a4c5781d54ce5dd8210ef632a0350ea403f1 GIT binary patch literal 4803 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 OzQckcU6CcvOR&;O54&fU(v_uO;O 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityAnimal.class b/bin/net/minecraft/src/EntityAnimal.class new file mode 100644 index 0000000000000000000000000000000000000000..534c4a9cf08099348ced85743dff778c3f22a21f GIT binary patch literal 1101 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

n&}mHrzD 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityDiggingFX.class b/bin/net/minecraft/src/EntityDiggingFX.class new file mode 100644 index 0000000000000000000000000000000000000000..c20225c76f43c18c43db28e66b29439821bbe6e8 GIT binary patch literal 1673 zcmZ{kTXWk~5Xb+gQEXY3FLBbyNz*_e1>1p!mP=inq|K!cDWMHbnj4oQ+o!HvS9WDN zq)+g~3=f&T7TtQL8 zB+?;dFcZRgyu+h+d2~^^Humf%9?de|V_affX1uRl{~k~l8FSyg_?EQ~l=+u0|K!n! zjE@*s7+Jb2tV~#Pe5f(ID!*#}D5KBQU3k2pY+j18Ka;bG&y0ecgTNWMjzB}7+ zinBX4r&`LbcvqkBQnglmm`iU9D9g2y6o{?U^jpnG1?g;=g(@jpS-Sb%b@PdI1O`&+ zHG!xj?UHmhOvkl~oRjMJ=q=f3$ZFMeYfdijUHlwvv(|KqGH>y`ksG#axldNCa@n%W z`Q3{Z^T5>c8die1p(Bq~9iK4Pa8t*pjCICmj9ZM`j19);j62xWvBkK{*kC zhimqhJan55osysT zhsm6VyH?n5hsm6V$r+~3Y?o)rvC0ozn;MQXQ~5N#{`uZR?rKPZctg6&wQ9||T{j;$ zbdjO=`7 zCY4l@fux$$lKSrunX%|G&a^P#4U`rJGnq^xu-`(EZncF_X73nU#BM?Rl@_2TB90?K z97LS#7=om!xQr0ypi#z~nC?7woUEYCGs-Wo<_0_^LcD;th_pTN9AONRtz?cd5Rcb? zARA8Tb|De5v#OycqJ?az9jkII=EpQc<5)NmCsnItbuvSAC)k#!j~*6(qe48*M#vwb z`z+gzK1zC&e1q;J+m1d)dMq=2g7Iv8#^8lR70;+`6Re!z+>8;qVCa?mMu2%_L=B}q zh#7;P9&Eenkr6&R!NkAv3w}Ngy7S4Ue61_L;H}@AUod!m(nJ07d-v1MC!O-W{hZcv z!E1~moJ9f?7{(=xAWPmNM(LMi;4zZ;k*fTZs{S+1;V(=G`s0hMm=qSZn84dyVWj>6 Dw&#IG literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityExplodeFX.class b/bin/net/minecraft/src/EntityExplodeFX.class new file mode 100644 index 0000000000000000000000000000000000000000..fa943a3a9e66f0eec852f5046bc1d5bf6008259f GIT binary patch literal 1542 zcmZ`(-BTM?6#rcayUVgbjBB&fFFlmw8=2YPzZXeOO-(U3$8d$=YGn3D zfTek9_La~Pq||TwyzWVi5G#3Km9tPfGo|wY5n*87neY1*A(Qw-n3>j3zR!9VDwI*DmV;W~FyAad0!+5&?avbxr&=52q?$~(ji__kZL{bkD!N(Cko|K)DYuGekHu>#MZ zPKS$~DxQ0zRJcQm8?~3J6Bh|hF`GLC3dVYxIroScww*RP%i29$+ER; zX?PivGS)QQz)cOeu&!Z)A;<7OK9F%+!-x1t!zRc&&ro0}GT7MC@G4%@u+8>63?+s# zLxsU%sIr}l^BO#sYPh4pM_pj#c%fV1trfVOYvm4am457YWRRaEE9Ta1SKcA61tcch(65;^t$$5kaj#P2t%X=v|9V} zt~d?qvmmO!LoNEY?F#gD_A54pI?}EdtZ)W8+N`xVx6Lk=D6N`Tr>vElZ|^RLA~TeE zhar&}s-VM=coZn~(_goPRy*fyivsJNKxJOGkHQaQll`Px)@4 z3CT3nW29^v+A&fwX+1>m0n}JuIi}@vP4v@mpozhbqOC8-qGc`L#51OjSev`6L$ByK zQSd(R*=)l2mNFFJ|BF#5gguBt!Wezb7ioW;KJhYCe2PBYhenn(((U>tNY5vt=J<ak;6T2pJ4`yoCPvv%*6{*$Q0BuD{n$u3z!>W!9WPb5yDdAGWtNo| zuaIeCpW?Sn&vi^m&9cI!bcM~Cp(221sbHOoc@73nz(kxbdkAwli7ZaxHcrzgeg+Mk h#U~iXXEYjLQd_^KcD_!hC3H>xi91yK8=>C|{{rdTSsnlY literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityFX.class b/bin/net/minecraft/src/EntityFX.class new file mode 100644 index 0000000000000000000000000000000000000000..31f573ed1c85801f9a3321b3daf048487140a8b4 GIT binary patch literal 3209 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 atAnQuo1ebgza*jlF=WHM?dO{ZeSZUw7yNJl literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityFlameFX.class b/bin/net/minecraft/src/EntityFlameFX.class new file mode 100644 index 0000000000000000000000000000000000000000..97a24a7164342f2eaf84c27c081e263e854de45d GIT binary patch literal 1781 zcmZ`(T~ixn6n-{MHX$s5(hLbLrC&kQrI1oTN=s>4K7v%J6ey+m#gc4bL$Vu}4btA} zbb4jI)0wK{jDNtH&KTNp)O#Jh^;&P7@y0)(t8LOSFnMDsWLC8^tAD4vx-z|AVMw0^^IcxFU8_2wJ?^$xTzpoEE^SbA#apT1xikVdcm?S@1la^=^5MfG8M}<^R7|! zGFxswbHj1Vg^>yWIk}`DIPMgkCecJ9T=Nt3zd!IH6UXc$CB!wO#2@S4Eu0&n2WFjh4fSksWlfQC~7 z1p!l_h=DNHHEh7rP{O8$GAbHuksN_DcuvFfctJx|0=^~S3Tz2@0yTkc3~P8BI~s1G zqTtB?N&Z*O3JyNiV_8AC;&_&0Q&J`#YdqJ6eTBTahFu^NGtzvf=2_*;JS|RTL_x=Y zZ3He6en!Tb!v72$9RSMd3h8B zWIQMZDRZ2Nr)dr$h7MZ4*89`RU{Xy+lF_905Q?sUfj}JlHj|Nj9RX28z8a+(5>@q8 zjjEca8s0^u@hNt;lA;aH>J8btowBuuXJivbJ zq7z@?0LkE8*rNnX+}pw^XIM@5-P9UCU3cx_h*a0AB_fGPsq8}c@0e##=lpo*{{jrMd`m2U9y3@lHi^_$QA0_?O%032 z){nEmE$uGZ1Z8b4+qjK8CRR+`Wyn1jQm7XU#Y$6h6%2*sQ5tqtFiN9fH%SMbjp_#m z<5kk(3^PrNzZ(zRJbfRw2gG?QmK&f219UBL{ z>rhX6yWMA)zibLU(5vm%CRy@piFOFkN5i5BhB!vHd1ddh@X$Wt(g0k-_ruVB8H znc$M|853lEcYT7K|M3K-YxgEFwP|_z{sflqpTH)Qjww1$;d~(thO2~SScF;na+rci zxh%}lgDk_w8Zn!2DCafI{;gnzJcIrykl6G>v2==pXLLXR)63C4Q1#R-of%yJ4SyA( A)Bpeg literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityItem.class b/bin/net/minecraft/src/EntityItem.class new file mode 100644 index 0000000000000000000000000000000000000000..d4fe056e0743de12c39dc00f694c3b4b343b1579 GIT binary patch literal 5030 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityLavaFX.class b/bin/net/minecraft/src/EntityLavaFX.class new file mode 100644 index 0000000000000000000000000000000000000000..495b8719afdbfa8a8b04cbda3262b736106e4dd8 GIT binary patch literal 1926 zcmZ`(-E$LF6#s3SZql$#+fYqufl??CmXGkEf)-n#A&9n6+VWKu*(BSLG}(=tO(}kV zQF#%be5lSa`s5ok&alAn;G>QX_~Jj{lQWJFKKh{J_&b}VqQK7F-#z!-v*(<9e&^mF z{=WMSfW5d9!A=}#LlOtokzbdVzMxiChXh6iQV|?RIyijq-u>Y7WB2Zh?uft(0!Ia2 z3=TIoUQ!S2qz8TxjA7h&xwN$OnL6@4CkkSIOyIb{gun?&VN#?ifoXx00;dE{3!I4% z&Wbb>#>)}Bf>+g%>vvB4c6sd`**d3={Qk#}KQpY@yrz!)GCO;os}RnIU?}J+8S}=3 z;kbot$(+g>B~yWtR-o=LSOs@jL4RV*GTmgkV3}FRn01p?C!0KNJEh!EDwW!DN5x;%UvMq6TBUg+y@dgyj%npgrx{v7;!%O7 z`HNX98LsUNrTtGLhHdL)C1<#d(UK5F`;=>B=f;gnBXVTQt~psVU63@o>N$+@py@L^ zikvj;K}JIsISr=3tUw+YLMUh`VopN|yET*rECE|!7j}nG(eOGP4OO@rYM9q>QKSWd zXYrhdOXBMdfj0%-5_ntS9f5bTU&DKNUqNfNY|oh?e4yb&e5Bzr7Bzf~c?D}9F8G5- zP|*80gY+2%>mOCeWx^Vqh03;Duq~P^DFuzy*=1>lG&zQqQxF@If+cHip_H7Y#x4&j z=={GQJdh7TTN3BaUfW3RX1NlP1F~?>1U6>PILURz5jy zxEI)ul8#;WoipQT^Y3wE;b5Nbm7}z=?9o!8!Ugm1Zdyz;v6^EZWw$Ln5Z3=ISh1_D zLAc_W^Ao-(8rGqyp(q;qYicOASDSsEG7Tmlz9`q>c&4ae)nhMkd|SqkFC!PiF0_9(wc^53BUf zT^@SB_EUa_xEmTVgm$L6itpA&KAF3)0;AMVQk&-iY;^G2bm9uSa1}8gZ7=pU4%o{% zKo0@!#IO`u^>)^(CFy0zh zXXZb9 zTV#*?>JRWMa+6#8m30+nc7OUu0Dd9)K{EX4SzXhp~4ve+R8_A8(G?pYux#qZTS@&^9H%ROOC%~Gd@o*5wz_13;P0p;vCC1?8g}S2hyFr A%K!iX literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityList.class b/bin/net/minecraft/src/EntityList.class new file mode 100644 index 0000000000000000000000000000000000000000..0533390ecef5ee21d9b7d2ce09dc3cf85ca1fb70 GIT binary patch literal 3407 zcmb7G`B&Uj6#l{hFNCyUy4wZ1vy@J?Xcua=AhakTI-^MI7G_dNnMuY>psiZ>ec$(e ztNYP<4%T|~^r!ydpWxr(@%X(YFf*r<9xbPHZ(i>5z3<+4U;g~(+#djT;Rg*3xUqrS zP$PyhBDI^OHY#wlz%3f;krGI2xD~evj0xPXLC3g?!y1m@4h@aCvjKPEZiDeM8nUot z$fE+20#h26<3<5n#W9VMrv-8<@&b+uSD>KcUI9-mL@JT__&@pq? zOwRarF3H6n8fK(H+D!%a3x@UkY{&NZD@e4p-=?6p&&^uW-FB>znf!$1rOk;PS2Q!5 zU2xjc7KYE6&SWx3+*7s?X6TXOmSjB3^sRo!xBZiY&Y0`vvI-8CyGPbTj^!uw%$o7c zqkgjJWs-q)PkWU&VLWbXQOY+n)5H~_tjIUux%rXaw1Tm=DlzybZBF*N`GPy+WP7Su z{D=Hala?QX3AdqOd$n8<-u8=0QlRe3ysYCDysBX3#hxJ+ z*0bc*epI@Rn>yaY+XCi>+X79K-{j=N?y37f2n~;yMLu z;*1AMQfbZsA;o(<)Knb>bf}VA$vBkO$@se3R>dKhFz!VTb=^3pvBtud6rcO zY!|dxu&HS)XZfx}uq8DXY^q>qW#IaGC6?ENw(0ofHIlIr54-sZo84PKudI$^VALj~ ziQqRjYif!+XVyrrkBgNaNsoGV-r{U&2$i%%yD`pwz|8T?O{PqT9*q@GvCIz3*<^YQ ztCrN*){@7T10^?tra;g1+S^VtIH2Y zc-k|iZx!|{=QIn-YuAPgE4_kBp?LChwlebQcl~2dp@Qn$C`2kw{?d3~D<%L$&0* zn1(L*fIvb%n5~4B|&!Or6L%V>+Z5?xHK8>Yka9KwX3d6dR3AQfxN1NU_yulcL?|kfPJrCPkOAU5cc!Ly9YmE2Y?J zbW3rSaWzG$dv1`7L9q2y(z2Vy+e3o(qMcp4gQ$10Z};=BpRGAWf>P|R!|X4U1WmD~ mF5k?Ol~d#;fkDQq!43GDQX>ne@h!e$bKJvcmCq*sPy7oM)Sqtv literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityLiving.class b/bin/net/minecraft/src/EntityLiving.class new file mode 100644 index 0000000000000000000000000000000000000000..1b127c53770099ed54f5fdbff555a5c11cdc7f28 GIT binary patch literal 11884 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityMonster.class b/bin/net/minecraft/src/EntityMonster.class new file mode 100644 index 0000000000000000000000000000000000000000..febcbc49c773a9129f3e886f5d2f93ba93ef1d3c GIT binary patch literal 2331 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 LHLH_a^3e4^jnuv> literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityPickupFX.class b/bin/net/minecraft/src/EntityPickupFX.class new file mode 100644 index 0000000000000000000000000000000000000000..972e79ea77d0854b65f7173e32f4b66751c10d41 GIT binary patch literal 2114 zcmZ`(O;;Ob6n=&PNrnlu#WWK>3!)7vEmkX%(pKB1X;EmgK!I9qhh!KA!c00Dp!l)v zq8`ra)}1>yZsb7i@p$|Jy7M2nbm`KK$LG$Br}Z=>=Y8(I@4fGRKkjqq*MENc1;Bgw zDoGd@Cgo2JRT4HU-lJFCUhELgBjNzh~VVMe)Nd>JN#-qz(wCvnk zS*dff#K{Y`WBZpBEaV#GT5!E;Wuk#2I@6(^X#3Le9Rl@|uX`>b; zS1r>oElwFbrWb_p0n}M{(<_@LTlVSc8OS)eUZx5DG*gyZsd{jZ+mcF-`>hQp@jg%h?@_YJ2^IuA6s(EpF4Mi>((<&@LI~*EsNQs zXGQdKE}ia9_oRED;rMu;p58;oV!q5CbgPijvwO%|g>0rz{@QbN?V+1%R6YH4SI=-{ zpYDpikDj4t=za0VcaY{Ar}?VK`OonEbbbW0eB&-mqZ=-I@HH#&4f^mMy$2-7&m_lh ztjO;q#~-A}pZt{mMOyrglS&LZWq{OB@D_7~w78BKHJ~fM#KJT`kn&UENPbH?JVT$H xrzxoUF;WVwvPvt>+R91Z<_t4rndBXui;{LxO46p5?};H{T7wyhcvn0a`xgQm@mBx< literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityPig.class b/bin/net/minecraft/src/EntityPig.class new file mode 100644 index 0000000000000000000000000000000000000000..ee32a89fdf893f09926b00560b8968efc32a8699 GIT binary patch literal 1414 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 Ipy3n$52g`ar~m)} literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityPlayerSP.class b/bin/net/minecraft/src/EntityPlayerSP.class new file mode 100644 index 0000000000000000000000000000000000000000..7c61aab0394d72f186520e2cbdd87a8bf4c60cad GIT binary patch literal 5426 zcma)A2Yl4l8UM=|WDD5_vkfHJjM(QzAPE68iVY?XHn=$hA?b*?lWpNU>7vu&Ivwds z_nt}G(4DTdOF$hAkox!Y)6;w3_kZ91p6LJX2nuRfT5@!E-b`7q?X5dGhjn6)(`R5--&7BD`33ULv$FmD$T=c)4u6 zLd7dJti`J|^yAekUZY_HUaR7D8k+HX6}M`L;WnYXy_&-tRJ>7M?vUZ6hBx8O8qa!* zinnU$z}u=hyj^DRkmWn83HnYI?~>=cEAOMi8n)s+8s3Y$1mS&x@P48HfQq|S+@qi- z?VK>vrtS6FnVhGfvEMem&a`El3D+3*IvW`E&{vxn|b%0{Z>t zL`YmaYS_t?$%R4gXBEtC?z>L-7mT}>XYRE<%bOT-4s;JGSRbW3cZQ6S9w(h~a(2>J zW}#~u$$+!hb<#d>UDC>CDC@pMeLbUQR(unM*4JmBp!*zm!bhqvaqUf7Ufde7&m+c= zl?sIwBA-}9W(93D9=`~umstgb8RC*i#11yQbG*re9)yMrq`2mT?)DP#+;SO zn8`lROe?s!xh2BKvgdn{F;tL;VidJhpc|feI4~CjF-nwR(?4H#Y{49~5@WdxF)2C#01zMSIBuLUbnL^Fj=kvB zk;k--4-YpdspC^JoRQ(v_>7Lv%J3jQr{nP$)bV*4zJMVehrqy_8&5c{spE?{tKv&KzKpLZ zs4iMe$5-(+1*^&vJBY-7E9;34gDSqR;~V&-YhFsGy-7 zWM9tm<5M7hq~pi<34IbtRtQL;y#9PdJyLdX7+*s3GaWz24LW{-vkF$0 zpIeM49lyk{bo?5>QSnDi>G&hg>iCnmz!2;I8Gli* z=6sw%u=QT6iZ>wI#Y%{(i!($`knL(X0NfEq)dCn8`ba#9#yb*)bldiIy=Y5$2*Fxsza2?j#+l6 z(vh)8sCU{JGkY96VfgvXS=KXbj}?1EbNR6?U<9wi5aO=oSCHv*dmLEx9V z8oyzcTGjHzsF@h!JC7Bx8GU|kR%!+XVA+cZ<8ylym7@#$SR6-8SHaQ<^YuwkR9l5! zL?1;&M6o1=GP9+Xn{^fu&-VLj*im;z8KP9jx}sXjjBQ2|HDUWzurWf52${*;ZDdW~ zz8ZT+(F#i<_*-aAA>sj2RTXTCB8omGBz zFE52ApR?i#*ED%+SQ7=x;v4My24NySrUQM#{r?YP1XlEwqPBFU2(A+I6Tt-|cw6oV zYj`V)ryP%|@0ot)H#YZ0oKox&zN`z0zQ;%#Bj(|3kYbN<$)MAhmz$x$x?tvYMZC&_ z9%YSyzN@cAO2ViWR!k<+`H6!D_cPCV=S0Xc_I-M&d z&1EE$!J6DE&x_i7t#7J&Nl?c#QoCnd0ILdDzY7|?P;2R;IyNzhn}c?sjLL$K`;q_m5_0SnJ!_F48qF!Dvd0AJLd8|eKj^kfS^*-A+-JX<@&6?~_x6Z5@Ax3a3{K9l- zd=IGY{4Q5x0IjM%dnr6%P{9rZdR(;t)gGWfXbg3P}xXn4`MKsx!2bUXo|%q zp-p1`6!dUfGlkl4S~rCSB8UPJq~6!Efyb}pajR&b)!gBQKg4VgF>3@emdC=_H0n$2 zwU|SYHPob$(l?Rmnj-5uzA4o2Z zr-k;4k(!?%A^(xBd@<01OS5C{m literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityRainFX.class b/bin/net/minecraft/src/EntityRainFX.class new file mode 100644 index 0000000000000000000000000000000000000000..e0e78c7a43e9d842d88c4584ca91bc8643079f41 GIT binary patch literal 1975 zcmaJ>OLG)e6#hC)rjw>K32}6i5E3GwGZSRwp@0bqgki#H0)d2AM4>a&37vGhhn}7g z@QDw623#6S|ASUBfpX!(a-$ViF5J4Z%9U;{mGV2C8L*0ASM_(#J?Gr-p2xlS$9vy= z3t%^HXxNUvdOVB%aQ{y`ckZWF!+snH^$jiG4eeWAzAMH7frA2RfkOfrfx%Gkrk^#9 z(&5m)(swsRmksaVNE&|O{@)hmyBY5PVMP%8i?ZiSA`J-)3mg$RDlj5&Oc;-c`+q;1 z5FVM0iheBI|BEPu`q#X%(r_AQH1uFx;ANSf)$j^lRdG(mc?IEK%dz}E z1)cFB$MjRPmSg5TW71C*y)H99bUK|lsUURF&6^4uhv;&oG&^B>W5$F{O~f;u zyy=Y?o^Rzu5nqjK%q$j7+ctdH>&XP4kk+}*i9+7+xoS;Z6b+-kk((Jd3IVwaLxDEx zmb{#qv4nfwA;-7;%f}7N$(-IcZOj=uc3?tB4tW)(j!8`ExPZJ4OJEu^I&6Vi0SB&* z0xs(CWLlKz^VqG!7w3||oWLc4d4bCUSMZvS*RfZ}8+cR4TXwnsT+POoYlX0<%auoXPHTAlCrtkO1h*7Ysd zA(xV7ucTrr+i<2*3D z2ka7i6s=Cj%z3}$nOPo>d9KWowP^aI))hL{#xogdcw^Oh&@<-PS;kn^3>)(Yrsx_f zxJAZaSMbcakw6p;W2|Z@iiWXPH59d3cg|cXHPeh&%F)08R+MSeU^+a2gPvP*Br{om zNsj!{iD?C`kGv2H+8^$jl=HA@7fg@!n6zEjJC}D$!37D$(+TDtdw5aMECo$draxf2 za_+0W?TTl!*~BU#R9$-57%s~ehpdYwi{bPBFagynj=HwYACQ{9!7Ij_6b?uk$|~^( z`)BNcs)58KChwf%AF!BDD4tDZ(8XtEyF4^l1BI7vCvg{NUm=1zj&`y;-V$mFMDx)FU9BGa$p)uLa z*}7yD%_N8-IupecIrn-QEnjm#1x)Fn))SdtQ4p#D3EwYA#$}kBG-#g%Xlcy zjK74MT*4+U-n@uJP>(I2e^F7=jkSKdO2y)eTu&Kvn6Z{p*-na}AKTxHJ|kia6gg2CW>Y{MT&;ZL5of7r_x$QnWIU$CRGzmZhY Mvxgn%4ffslFK~9$)Bpeg literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityRenderer.class b/bin/net/minecraft/src/EntityRenderer.class new file mode 100644 index 0000000000000000000000000000000000000000..d41a19d7e2e93d090e1ecb7793eb9d8054c119cc GIT binary patch literal 16747 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 To1~S($m~WL?~GtR^Zox18873z literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntitySheep.class b/bin/net/minecraft/src/EntitySheep.class new file mode 100644 index 0000000000000000000000000000000000000000..daa0499d69a80db9ba61105e9a69088b60702107 GIT binary patch literal 1734 zcma)6%W@k<6g@4CJkl_hW%-eq$RUm$tOr=(kp$w{#*c_7Ct#O9TeG?FHfW>n)* zcx>3DSWv}+C0Vk74GW+grHTbrY^m@Gdg(ui~dIK#uIqRO1szwgO)UmR?J@Nl z)bT1_Q}Mcvt0<}{>39RzbX>;`9Xr@n@urTq@V1V3@UD)Va%V_0j|Cl1Vv*0umgIA) zDC?-8sw0U-9VTi55w^ADwuYsq{nFK}eANc4`BthEV215jybuarazxsuG7wYCTDa$na}4^L-KpCBS9od47P9>XN{KQS&qHK z8mtqM7sxdogI5S9Q@Mlqje{L$|HL5WKgU`?qm&zt(=-iRU^+Rd_O6syr6WH03sc{k3c$3tEA(h_(&J(w|??T+G&Jn zRayla!iXV)qufzSEcEGqVRVG3&(iw{+{4G29})f>AEg!YD)dE2soh)+o>iul*)LE_ ze}~8Rp(}b9qvu02p`Cq1C9I3FcBZq=Ti2zj(vBnrR7xKd#mVGqM^e$#7(!aA$GJBrc3lu%Y q-g~chjH@7bF#h;AT!eqI5#O~)VCGSP83Lbr6kwLTPqRt@OMe0~RD#3+ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntitySkeleton.class b/bin/net/minecraft/src/EntitySkeleton.class new file mode 100644 index 0000000000000000000000000000000000000000..371ae13162d63bd63fd7cfd8510e8b8146792c13 GIT binary patch literal 2252 zcmaJ?>vI!T6#w0JlWo&m+AO6_kUpRwNy;>W%B$EmB}7u&A~ZaT57;J~bem*1Y&MkQ z3m^DKQ2}jr9RC16h|>f{XZ)@M|BIiTaTp!X-3_9)IGLP#@44sP^E=P|<m!*}l7 z6}*$;$x~9SPw38IN|0mX;TH2H>r7)pKd&3P+JbS&uyuQpp=T{? z?&VNI=(jIex~;jKlsPq)V%WBp4&9{G+(ENgGAo7))o*EP#??$%X3^1Y&1rVrGD}HY zD<(4z$RvYr+N@Yw`Q$X*72v}n#o%lB_eMvkKhgTq8g z#yJiPWeyt^j`LWMae-qI7dc+S0>{gOyn_*jBaV-8mE#k9N=XsmqXpH-MJH8z zj^i_2oOl9H$ zf@#~L@)%-hS`g)QWOkk*_|Rfw=vr;ZsY8Zly&P8;ZM{eqsLW1N(kQQPkj5-MH)k7K zxlF|xN`w=%l+5xe1{SC4Uj3#B%weri62N)3V4BvMj9GDNS_;L(R31Wq#$CviKdl;L z1v8zW*0j`|Hl3$3_J)$lq`)DGjQs6(#nubaV@{69?RF;=|KO1$1_dfnFjd=eL}1P8 zB5sV#23BKrU8KajU6gVnaA2)|a65L5=(P zPS4s}CTV1}3)oC^bhj9@@Pdh(EHlLq9KC zXhJj5@O8~A#1)z+A}f$;@GN0G!fWux`xW{6*LX^>>ECo4&9wO3rG=In_!4@E*IL6m zrER`nY0tLK-}nl?h@b7K!XLQ>MPO)fFl;2-;)CHM1nuA$M=OrPPv0#CPdVt=Jz_{0 z#)u1zb<&5cg|2E_mG$)Q&4Cqk2q?L6+HIg+OKzWsmd<5d{1IIN!}dsfPZgb!fG2z#p$>%e9oS)BRR*(FL?coak3DdG7;WUm z1`2#9IoyR!2%sN9?8HX$_7O}G=M1`OR`<|M?!`6q(J<`Cci4(5wmaeRq2UiKH#YuG zI!p}Ddiu816Ymv?-}xZrBu_RYl-vQ5q&d5m{I37X50ZS8a&Qpwx_mFKj9!wz$Kxw_ U;#=CfH6`i~*hTaZtqn;01y-*Zy8r+H literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntitySmokeFX.class b/bin/net/minecraft/src/EntitySmokeFX.class new file mode 100644 index 0000000000000000000000000000000000000000..690deff1a72e18caeecfa7ca61f4ff8d6a3f622a GIT binary patch literal 1784 zcmaJ?&r=(96#p!Vy8)I!DK-4EP@ruH4rxJKluG!K2B}af(3WDWEXe|aWH)X$3_a?B zOV#N`9XgJq2M^A8amFp^!IK{JZj>)xs+cq zodsh>&guN$(3Hf69n;E~PNe_^(I>?$n8l)*%Nefi45!ME#MaHbMtXC`DER3@wsp0T zF*5rok$jDp?oIZMWo@Q=GDGPDI|` zG7tP%MAT=9gEQ&aB`bpy{7B;bJQTicGcibc0E5Kms73i1g}CamzG!o>S=INTd`Vrw z^TZld5jE7(N21R8Q9mKfIN%*WDjW{)p(=LcD+HPl-1HC-Sv`E|%7fQS{&idTXe9g!ZaxR`Mc-59(3Q&@BD?UNW_Nct+Oa9y(<0 z^l(BrYgq~|duX90@+q{~eRRbdG-@pkp>;9lG9J3ckzMIYdr&1fz*ps~-Nz{|$N6@A zcn@vj$4;KEbduc@S@Z3^6+6!oxzb^gC1>C6;StYPTzQ1Z+G9>GkqzK9nTfJ7y=X>^ zzdjBu|B2*}f&+Vt>|{B3B@XOc9KUzjrd>AbGqUvsDcUDV-(jT8T{Qyz4>9);<7DeX InfjOh0sxeTDF6Tf literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntitySorter.class b/bin/net/minecraft/src/EntitySorter.class new file mode 100644 index 0000000000000000000000000000000000000000..7f0ab5fa1d01967fab5477a94d30f35546d94c91 GIT binary patch literal 738 zcmah{OHbQC5dOw7F&GDumS=b$ss;z)BZmM&LLecfMIs2!8+)lt6Pqp@r2Y|3z4y{f zB_0w7#F-z3m`!{DLe<00dLG~Bnf>PR>FyrD8kSr*m>5DHlP+vbIhc0YDLa^PFzaBB zFcPNiGofU(ljvCgB$Vrk)ImE=WT?c64$f5=^l~*qemzcNy-Ap>{JU)Vh+uE0ktB@P zndfV#-IVH3G+P`YLD+c@e4MIQbRd&RDyeGku)i)?-XjzmT7=)fh_j5_$z~yZuGCM( zg$PV{JwnEK7=FhTGtr$(F1B z6|5WNRawZVS)RhMKFmL$7jbHhii z){pVg@kvLV>iFOcFX~hU>iFRJs-u5^Z@&6B*l|2}Hyt`9&d!`Y_x#THIrskd?@vDi zcoy&K7{uuSo(m$5GfMJ@kr5@C&*ybICY9v$?|(>OTplNsB$>$LWDsXDrQ;k@>i7@| z>+#_y@pWGalG?PC5jlq$$<64P#YHvwmox;_qWtnV7k~v9U3gQZ`N^(uZbqy~wsHZL45@#3=MyG94B+8a;W?dsM5>+>wxazp2 z+*s@igL2l%nGAcU37@T%=S_Fcm@knel(+2MrIN8m5@$jPBU_ZtVhy~VvxOzr#u(Z% zQfrZ1UuW+&$u1{&EAGG`RdI^~K}v;8_cT+_(; zmMPaMd$w%_Q%t!|B`wTyI>*o)jinj%j8k*7X3COPcK9Zlij_0nOFjqy*m7|@Og(gadT}WhvYuN>womMqP#=1#xOEl$8BUpBp%}m8KsdX&H&`Is| zgHF0uVL{ktwMq*VO~nWdtjLwRIKRly)nG;Zg=09dJ53K_;1zGz`~VEy4V?HG-T z<$>KkIdiKj3_ELPmgbxX@mTjo@Ha~d2xEkH^9kH8-05y#$NQG9Z_^pqk(&IGG1ZmPM)ky!?qx!?7 lKSF&!iP5@#FZ~($*S<$|6S1#}^%q928a%hB=--5~{{a3WyR!fQ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntitySplashFX.class b/bin/net/minecraft/src/EntitySplashFX.class new file mode 100644 index 0000000000000000000000000000000000000000..2272abeb87681c2a2623e8e9d5cf99e25e702f49 GIT binary patch literal 612 zcmaJ;%TC)s6g?A+?HH5r2rxX#BLPZXsaYWwP*?y)NR$OZEp*kv8HC%!j?4tnA1Q*r zs8kEl1s}i<@HfC6OCTWxcX95Vdynp8?# z+l6La!?1-B3!@C?QW%A5nV~$l6-iZXhLH>saj2@tNl^V3Cyn~zT4o=`=@95g7>T~i|X^+mKYZefhUsm1LikbbE1{p*nm)$dxXA&!syy-z>IiE!cK zor`fyxR}J0i!v%MrZvopQ0C=ey`u07+>3Zo&ew zKd>|Jdmrbx!OcrBuP>LP!`uG{!}yWH;7;M}0`Ix4ox|P2**S(iZl~z47HIPOI&M%_qD@s{x23*33 zTg?=P)NLiP(}H2^_H5c5PNW6&t`q@j z(rSLdES1eEqjrQ2@|CSIQ3>#B2rZFSqBEu}^WITuG1^C!JT2zgEbV#))+;~C8i+D-KCA=)-6^6?^eU+ux z*wyPSy}|G%!&|)eHcRg?yvs1p?%!j@`#2;c#c%~z1-L3Dv!J>0fs7CFk$|q{)vFzc zN!O@=DXO^}AItazpUPOkbphe~ang+x2)&`LN$6||iiN|9tT$>o(S)ySG9r`kzs!R6s_B9Car zvSyJ{MW+T3BdLD&T{79(DcXsc_1S4M%9xdVa|)50FKy}hyk?E5#ex&MhmSJdoB~GN)-S=(@ z2rfUhbM4q6XM04oY(2yM*&P{NYOztr60KUSNeJ&;F^0!a=JB(ZKPy1I-&MzXM1kkyN;J;K|bybLC zT&uK?aHKtC+pY8xu2abMBGxZOxs##+#pXgg{X4J$e(c0*%0~c0=)`fX!6}OS9J-K2 z2n9NqfX9)jN56wcfjq3D3~aa#w|E0$^Eb561WtnFDA!|vWEYxR<7}P8AwtTlumL{D z;0I3NMvjukO&lkUVG2|^eG|a|Hs|@6v=*Q*NMERm9@Yf{=q+$2YIZCKSq|0KLuA^w zfWEqEq+v>GmP2)#(x5e+5wn!BFW^(E*hb%jH?Wa>Z1+bAS=to9jtq@qpU+ptPEKU) zq$x@ssJI?%rbKR`boJ1`m)hz9#L!%KDbQOAO+*i8N0O&u-b zFpktcMe5xwZ}smXX4BOw_AW8K&MpV3Q)9$BdXLptXSFIst70GJ>HnkzwfF#S@`RI> GC;tISC-2q( literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EntityZombie.class b/bin/net/minecraft/src/EntityZombie.class new file mode 100644 index 0000000000000000000000000000000000000000..f19a3fe25a636208ebef3be930daeda269ca1de2 GIT binary patch literal 1205 zcmZ`&TTc@~6#fPlwq2({3j(5oikEg#*82?s#ab;CFO<6)vu&sCV!PXHrzrjhA2lH{ z{sLb#fW`-ZfWiObyNU5k%L56L&7PV4&g?ng`OcZ2f4~0#a1GB5^x|Xyr-JCgX>FW9 zwL7CsRGF9o6GH~=&Z^II28Lm&-Fam$DDOqJyJX-pu4s3D1KQa3_AiB9Rl%{8DZtHqW5l^>TutJw^V9wQ@%I zvv#ILNSo)ToK?py%vEx>B%nE}&WF;{&c2+sD?7(R1tH_US4m1yPUh;Tk_<-LtNB@x za8#u5Jy$w%ZP_bl95K9Nui6}k&__wFvX`;mH1LXB;26ai$2e|t+`$CLUBq?V<4E8> z#{(oeCNZTW#W9VC9FH)?@mQHBnBhocR>vI2JQg?>)&ED)uVaa08BaN$VS=H5uNJ%6 zF%0Z?VA^x5QuqwI6t88?r@|sBRg6`#-GY^tK4~?=5G;GEB3%)J#9#^1(UwXv@(Z^h ziv*HBfmf;lk1{I^hxTm`L(g6^_0CZiry94{q*HD*W|^Ur8qp|a!gmTq>56KV+8a&8 zh=f-0s*995PV=xg=Cmz~4@9Y=s^j^R=lL&kUadX_S~MObzUu#_#zLvWS=*f`c~q1T zvqh19xkmFAO(v5ua%#TqQt3O|)TC3gW(e`hq)kU%uU!}w;*y$)l4r~M>?p2zM~U0L zm#3OB(myYVuj1PKAL-N?%EYThCoe@V>E^_19H)!YOV!h+ktMwIS>>@jEWk981FYICL&lWDs>c$_QE6#7!8v)nb_9eZ0&2m zK%e{2$2u-*S8vPL_FMF0^rfqN?*wHnEpfSjbN>76J^Splhrj;)mYD{NNT++|Z?bI-(y1o1vEswPe`*G!yddM3^=YbMSzKQM8Q`Jst% zX5GXDvti;5rf*`B*)(yU`M^Y;`H_hN^J5bin4g%KVm>r+k@=~KY364pW|*IwxWxP- zjxP;FFS{kDWMJo<=lZ#|iszQ=&WfLF)XTYPuenyJ`{T5$@X&Y5%xcN;48&x8%s}Kq zZH=O%^Hs<54RkCz4d12bWpd5eYE=XAsamsMa>*ICU57&Lrq|%5xk%gGx?894D~?~j z%h{R@@V!m#rPG!N-=uw zp7X%TQ3eZ9lO#yil0CIc*ylyt8FLVh@~Z zlWQ5ujBLF#GF4lqvU=vIvsasICAWUVDRH53NpWq(KrZuY%_CdCexl-4{7D0cUK2X| zYPMPWjV#dh*p*e!@tbve|G?`)+xyIka<%=2aE1fNHs$20nAoDcNosh)rb{ooGZj9m z)t;lnd@~lV@y9c7;Ss)~D*kusEZoG`78dc?!kd`2@D?sxm}7H=%~dvwxMkr4PFgs{ z<}{l#Y|gSd$7Y<(1e-V5OtLx8CeNn8<^r23HW%4UvzcLY2`3G7zZ@t&2u)DATJz{! zeVLI>ZMjyu=a%_fIk~y9Q&p$Y7~iz5J(HUwIV;8WZ;oqkqg%@#rEm2({RJAx5Aaa| zBAr%92Nu$qg>-Boom@zV7t;BK)B+)OK}d}dQZIzm4k2|!NKFw^Uxd^eA$3Pc4Wi1D zd_h9GBOzUrkZwvymj$RDeD}1DpaXB?Itkcr^4~xhCgmE=jt)LUEIYQ2cs3PThnY=9*U^zp#nzF? zrsC`9eDdPWLx|J!5LK`nok-Ie_h1{DB=%GA49rvEK{Nc7#RL+=(n-`3Nj z?@|#7Xzg;u~Y`2Swq#Xp(1_>k%5jp~-2{g@n37r9k z308mugsuP?LU({Hp(ns0f(me$kPL8ypaUGUpTc-KiPzCbLlr>^QH;_&7HBdTY3|l& z+8!f;?`S@sz`~#C!r$n|Kj<+Ol#xNwC_o#x(Q7o&XMBs4@jd#D-{^Y?wdeO;yeD(~ F{(l$ZxiJvWW^-brf{0naJXaFjWIH zCM{M)M$N#i@aqQVgnw#aUifDQ^1?sY@q$4Od>(&fC^Wg(uXTOyxsh|+uk|9gw#Vb{ zfn8_Ndtu;2evf8nK0gZ2Xr^`@Hx!YWf8gO6r`gKkPV?QK&9L}>Ts7^~31W}7-YJ#G zCMvt(k;jl}600|Hx9vr5opwMGT~;_aW~i2$C(fx;3mo35+5O1poqBm}^M=p;{uaaB ze|EkuA2OtDzr&q=98sfWNkoi>ODf4-Ya{K1JdN9XZIN)M9mbLC?fZgtdZ=er5Vo)& zuC8EV11}l!w~23|h)oOkv20-mISaGG%n36uOddIg$!iHj3%VOO2sw4kmC7T0585Z5 z+b32VqetHjoL;X!l6Ixyzg6qo>-1={^a8c*1;GU%PjsXwM$!{0>4_IGRS>779STxd z#1iPr2`!Ts!yJHpMdA|4&x9E6lGWr|lJbkVca@)zQ8TMlzCpc&ax*_6Btk;gFCs}F zpjTFxE}(t6QTzc#5?FzOhh&GOJ`qVVIzOPavU>6Y#yL_Fn2H2x2`p8D2?-`O2{IB) z=@LvEKdC};K<}uf43M^4>HrgVOB*0#xAXy~?Q^heQUyA*P-p@wX{F&Y=)WXtJ9LHw MhEyL>R8TJc1=R`ACIA2c literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EnumOSIsom.class b/bin/net/minecraft/src/EnumOSIsom.class new file mode 100644 index 0000000000000000000000000000000000000000..95ea77701cd6f85598813ac947686a94d43aa7fa GIT binary patch literal 1056 zcmah|@lVr06#j1O+OBjA#uzZC6GYuWw}~PqBLqS)Az9oHRg%S@x>A;6cTKvM`G5G2 z=t#t9H2mxzWqfxeFoS_>^4@*#-o5wTch}#4zW)NSfmdlLs2W(os)nM5CkAqODojns zj6sVvkx|z%D||yoLHK7n=7e9P&+h%|0YlpIdfblUkeVecBBF0Pq?+8-7;7oy+Pt~n771xsK^!{nYfrGxUTItt z$4iFNO_yS#j13cuSTZq#yop(13c}0@GmkvO{wQl)!M8&=Pquj1kyZB+iliOo*N*SyiqjDZh;Sm-z`9HFCA#?T+dGkiI9-> z%Sh4(Xe+CwGpJv#6@NgH1eT%WA=wL3pNOOwy&q6IIW2hx{S;{l3`K$o3CxrP83`s; z39=GQX%bB9KdC};L~p92j4)w!QX^!njygit>S!ZOTc==Gq>6NAp-=`X(n`f+&_7Gm QcIXTVTu^;PQ9-%#7hp8oY5)KL literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/EnumSkyBlock.class b/bin/net/minecraft/src/EnumSkyBlock.class new file mode 100644 index 0000000000000000000000000000000000000000..133869602b5f963c6c18de0dfd85cfd2bcefd7a9 GIT binary patch literal 1002 zcma)4ZBNrs6n^g7u3ag6bD~2)-qda&b*S;f7J?E;mMjueSwj5Om2MWgF6mkl|CNp? zMx)`gKgxJ+U1oiW&?fiX^ZK0gocrzjr>_8>;9&+LR#n`=T^S`A_f$+n=SPKmstU3y z$u+L5E68(sU&aQ5V4l2TSZw)DX!Kp*u>-3c8pFUgcKxVN&S&1hKB+TE@r9vq;q$29ae|jt z$0Lgz*V*qfJkndo)~RK9mfthXFmU}|y>f*{8m{k#TMRe;k>6}q+6)=f?fF(11%xN+ zu}Nvz-Z)RtdCX=4oDXvIOfqjAMx1Te=*dmfV->f{yeohtHAa>K?-$6=@_Bg#GPsTz&`wBOCdof_1oi=` z3kYvXW4K9YI`#<^U&ibtJ{4QlqFDV1=>p>4@hMIYQgQut2!se|)wQ{Eq^tAqA-|g- zWXTJvpN5Jl`sYbYVF3zmV{wf50uot)+GmJ|MMcQx&XGBT8mm*H5Nn$Bg}lOumVPLX ZpqXc2f5M1FheQwpLHq<-qVYN4$`A2{*RlWr literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/Explosion.class b/bin/net/minecraft/src/Explosion.class new file mode 100644 index 0000000000000000000000000000000000000000..c9d41e8de20d814976f262fc045153ec9a2c2d8f GIT binary patch literal 4234 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/FontRenderer.class b/bin/net/minecraft/src/FontRenderer.class new file mode 100644 index 0000000000000000000000000000000000000000..532a79a8cd58e6f02af56d60602c5abb6af08f64 GIT binary patch literal 4221 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 af%t95<2rb}U&19sqfP^9Nw1@3_x}LNjg>$E literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/Frustrum.class b/bin/net/minecraft/src/Frustrum.class new file mode 100644 index 0000000000000000000000000000000000000000..57190631a7cf35a84a7fa06f38c72e425a99916a GIT binary patch literal 1061 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/Gui.class b/bin/net/minecraft/src/Gui.class new file mode 100644 index 0000000000000000000000000000000000000000..f172c1df739da5b969eb05214c201fa6b3ece1d3 GIT binary patch literal 1633 zcmZ`)&u<%55dJp)v0i)qv)wu-aoR$EI8GWjrO;59LSxr%B?F=f%?+~gZk#pSU9?`e zQ4a+PRG)I;!asnxfRI37A`XZP7f#%{00+c@6WoFC*{N-mcBLK9yf^dB%s20?fBfg$ z?*LrFjVLlWsUVG~gOzsy8P7x!#3><83voulSrnoa^FkDbSP)_{igQ>Jq7*E@2Z*)v zGL~grkPyD#Fz=eS1gS>jise}TRSAK@{A~%riffn>k`2o-U+v!6GQD+u%jQbT@br6i zPd6;n@o$+;UxHG&Ie0`|Mr>EOWqPKu=6jaYlCV-}IHq5^L#(E!Z~LW=*DTds5$_mu z^vaF4epfHqy3;BRgUUn{cu|4(2uBmfy1DCj3I2*}==QLH=$hO0nr6)s1xD&!Ye~SV z&~Qw}5ge7Exn8Se-)pz*lKYP7@TcBbURLoeE~#G-T5r$tYB-Rk0Wp^h=mKT-W3*iQ6*$;m9^D z!`~rMg~RimzbWD9c(@yuzq7WZ8!i(}KgRvwI3!1PiGVj)R76xK>cdIij|}e%3l&4B z7NX8GK$)d=22<2{2a4Z7D#pIX)E5KqX|cvV;U7epZw^llW2Cov*HYa1TMMP8@2Bza zgNK=bvm(<>jm-$n$kEj$WLq~pKtBb1K)wvTW+_Px*p zQ|UlpAM%%oTu$baeJHtPHj-7c(X8A@G?&cxW_yV~V!7nZNXx3(cs7xZ4IE~ATJXRl zKUVut2YHx{dBTIt;W0VeBm_{9Bu#UO@na&cNgOwjzy?>hNs&kLcS-*PQvU(T-y`uK zlKPKG{l}Qb=fv12tv_G}KVcR>BadH*_B)Q_Pn^JC9G}F!*@Iz~IE*l}9$8q-FD&*E z57~wm)IxnE#)S>1c8Y0FGb}#}K6?-xWAGD#3hZT`L358rjX&5~lo>zEBv)j<5y7&O zQv}P(OklG&tA#gv#jh~6mk(?{%*yROVuz_k+IxMZ=%j`I=SB0$ZUh`+jlBfw2uma! z`Hb>Sx^QY^DvE>J7kPNkA%Z1Nr$k!L^Uq@$Z{h;p=cn!yT*RmR+VOkAKBsWvKh*?V APyhe` literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/GuiButton.class b/bin/net/minecraft/src/GuiButton.class new file mode 100644 index 0000000000000000000000000000000000000000..7b36d5346b227c07897b6a0a780e9fab662a6bdb GIT binary patch literal 1872 zcmah~OH}! zuKNq-1O9Wj9@SrVsjEnMX3X6KixH_ny~1=eyRg|GxYQz$jK@ zXv0tp?HGDL6dbRd8@{pkqeItbn%dSpJ59$O(iuY^Si{3q&6+l**3plw8V>Pvu6-DQ^|? zkC%MUaSH;8xrh0$^O<7aEo5qI;{qYa63}fo|Db475~~7{BW;*DCLGuCZwj=hbGh7E z|Na#Lb-HBP0?l)dYu~ACKCr!I8BCy4`uv|)%<}TvQx)HrRrjUmT-(oVGQygdU-vU* zZ!I%_tc~Y#GEd`@pI`fGKED-&*YUA{v018=?FG*+mu2x96ZZ1}v87VQTeD{zSw+)q z#i`{Pl*c!4328}k20GAbpi7co^clD)$pxu)OVT6BdAz0Lwt-JDCy*+6g-mh#VWF5Q zZP_l_?A*|hfqC3vEtx{ak?-J^ThQ^TfdzbKU=d3OmT}j>3ho*B9A5}@ojvSHk<3ze zSK$2F^_i0EFWRnUd$uQ_q-C4x1V8B{t6YE0-B>H`skB$6nF zB$&vB1W>?*!u* zDNP!6gsX_1rWxix5^#=fB^|7{6DGB*JZ+Y@WrCMQpr32OIRq2Q za>RuB4B;IyI`9k)*VUHB-zYRDn)cEB0&#=C7idwlS~txiPte~(9({t|K&PzS{{hKh zk%~%1SNEVQ*)Ub@dqkD2wugpPcn4uEtC?Jl@Qo_*!ITzHZrrD$Xhl+WABp2_uE>oj zn^fDk>YE2C2FwnXRx!RZ^sz5RH6F1TDRFKe$vxbaMZDQK6&R=A7_^mkavCAXq2ES= zw3i+2LnHsHx;glZoWW&2_h|7YVPLWQ4*OrkyZ8=+c!>;t=6rs~5dOfhXvK&a#~2X? z&Qbpd%Q~)zN%1$Dg#H)4x$-B23OWxSA!-#0AAak2R&57EU9tt7k(`a3QJ_-}W)v(^ eIi1mubgfk%W}pY1q8)3tsM%bfQ5n-3Xv4FEg-0vX=a*Cna;%Ngn|oK zY+Si=t4B7v^&DEPoa54kF5S3d<=Q{M!x6tXNkeLLn3K8hy?gKb-u>~t%y0kx{0o2+ z_$-Azcsq%Hj7XtNaYTyIP8`NjIXfoBn1bUeBr)E}O(&)1lyrC}igV}Ar7(fhQgBBPyZ0(Ob*;Aey81(n2J>M$(Ud=TN z#skY2h-M|`Hox;k+Ts_>PD{tsoLBQp*0dcSD3N8&MwX0whKkpbRk0rjRP4ooihWYd z;HrvicwfZ_(lCoTf!^(9opZcE0?aG8uHpu6s`wDMRNTf#3O-ix3GS%)6h#F*X8|RF zv|g^+dTBGUk*Zr(V5+dNsGzK(0$arr?y7L)!OK#(Qh2Be^luMgGa2^1y>as>fxX)u zUh+bq+i*yX>noO@cdNC447e?zm91dT{@iNvC#*fG5q}`n+|{IwECzX_6=YfUT3|bR z!CnbSxC`yr)7syOSMw*I&&w`$Zv|!~hG`09vh@=k!!7IA7M841Ffqu`)kUU0Yq_T7 zOUfK*bH;Rw2jfgJStfebSY~3ovV$$SbAfNWW%{(Kaw`f!Bzf!Z0)4HqH82|4M3za1 zfi^+SY~Ea+wr6|Gnr3F`huK|p%iPjF!+QR8kM_~GdeloWZ`}`SJ^{B>wh{dxd!OH-#8?Ca8T^#ckfM}Fo@I(T!EsXU%_Gi1RvlzI>m{95RW`Z zhd3=KIzxF2*?J>+T%0q6rB<0~IcdugyHBuXGXgO81q8TrSMwz65OtPEA zks7C!Jo$&NC{XpRlW;+q;eor@ef4n{j87V;^6I za}sDE6N^TriLa!N)>B-^Yf{}%6sd`7Uq}~CnqCHWP_h&wthbI`IKpqzD8oC7lMM43 P#`sw{&M=4Q6T$F*PkIf| literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/GuiContainer.class b/bin/net/minecraft/src/GuiContainer.class new file mode 100644 index 0000000000000000000000000000000000000000..15b6a852de680fca323f5d10245910c25be7fc25 GIT binary patch literal 5956 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/GuiControls.class b/bin/net/minecraft/src/GuiControls.class new file mode 100644 index 0000000000000000000000000000000000000000..323c8212c66eae7bede85743013db53d33d8dca9 GIT binary patch literal 2602 zcmaJ@Yf}?f7=AX83t<(AAlM)v6%E0Hmuj`3QbN&GP%9Lx_QH}qz)G^4?w(+=_tv(5 zp)-DQ`l0q?J0mjM8K)mR{RjOkolfaP0P9*-x{fHxa4feUe5Ody{`lfQqffvZbu zm{i(RNnFO26oXAGyBQVlog@XbN_xEx8yg#H`>qn)h~s7)w>0Qw!xgriF1SM28um}x zLJpNITNGSlK@NFtVdz4|^2Ng%8ojFGj3tXgLu&H2v0@Ar4SR8DTDq3KNR_x#mX>3C z8hXN<86`0-q@=D#<-~kNO2^Kd8nnEI*ob9Y@|=dzOqlH!kT7AbSL z=5nPpFWebpUZIYw7`&8*x{OlXH7$+8@{~~y%4kr_)ZwEr9fy(8aR9wK`fwTB8xM}8V6`P7!FQNJ>OTNLDQ|4m96dPkfw6)6?M z-}uz#i{~9f7_lX0QUbqQUE#&gBj_6avq^l0&zZb)JzCF*hW3)NELh`$A+K99s-rTrYFe*hk##g=QIu)B2*B4mWYr-~#D_kND zA;LtB2D6Y-o^ouBv@kb|dOEBTJZD%_ssKOB-9H=07wSEHqv7Co%e3qjXITWD)6d5Q zdynI;#_=sVHt9Ial`_HSZCkjxqTzXhN&2BSNr4al>0LBzvnafSzTxmrEHx+38LG|| zqJFDJf0KAMM}dnRJI%Bu#c&+oY3SQ=zc6eXy8d5}-L9M8DWDz^u6wI1_Cn4P)dZ_E z+al*EG`6%X#{uppD6ixEQg$6$HWgVzU6w__CdO#Ft18|o|>EwIbX&eHr7@QRWB0x2NCUWT;h$6;#h$GC+0(C#Hc&lN%sNz11fsw z6Qm;e9Zl-IlL*(a=U#-^{u+3MR^obq7K+;Vi$2EQhv?2K0n<64EYzAtPtgw0avNnY z5)9Z*lpQQpJCUbx3Y{277baQQITlnQZbZG0xW7G3%=}CQm{$VKqYP7jA175bwIs$4 z&Iz@y#jf@~{A#fuq9L2^T*tm`NPeyRSmi@Z*M7~XJ|>$OLDjjAKi0arHAN`<8KiF=UE7RGRV|KkJVtgMCv#8mCa35n!vBC@b57Fx Tm$-+o$g->4C%Au`zia;iVsDcZ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/GuiCrafting.class b/bin/net/minecraft/src/GuiCrafting.class new file mode 100644 index 0000000000000000000000000000000000000000..aa0b141e3592cf07906eb7e6b234f59534735045 GIT binary patch literal 3217 zcmbtWTW}Lq82(Ofn`{>dl_JojP@#|(B-|`Yp%hw*sjVPI5JBxW*(M9=ZryHx;sw-- zcf8*(55D;9477M1l^LDU8GZK2XP@*{N5t=JnzYazamHkFuK(rx|L;HN=5y18sR-!|}4i#Z+larmY=~U3AB8FWx=*DgZx2w>Qk%~Q1>kcW?8$%!N zRIvwpV>El0ihbyp&HftPjRR8TU=;TR(b3VN;t=kQ;;>viBK7Wz;(iqmU_gbAK{?9G zy_{?e*$k;{@(KzHOo92Pb=Z(A4pHg+7(vhvEWxDMGD^q@=75jUO`k3LgH6IWNb=o;YU|uhg+*ukPG@SkVV38|x z`dvMHtWO{D<_eAq)Y#VUlG$0bM~$37FeUXD*p?SmpYA&5$h9hum5SN%?A`5 zQ&1FGnsf9M(yVQ{Izc$ywqxWSyJY2hB}yNOodkB3L@3oQv8era$;lesro2qXN;DLu7(z@)?mRVO|w<{i?&-qBdw1pcu<3b zQGtd2(o%|6H(;ZN5{_#)fs+cxG@Qai3Le(*2p-jN8fO$drr~isp%oQCJ|fV$D(}eVUD>>c_XU!(BbbqV-+as@oYgYhKow=VRs{lwGXnKKg03;_l`7AaU(wC< z)RxJ}I+<%$4uYhG6vTUFfuu{WSxonuqb^U<;B{^J9k43uwtwHvOaZytEzgvmM6>H`R&RVP~p!C9r5zqM3S6ylaIQCtnwqabqfT-RQL;itjV5oZ-mWmiZ`j&yZjs zKDXIS30}MM2Jh$fFW{ThfoGsmhgu#Q-Tmk z(SGBkTXJads^c>Sp_yFQ*-k!PJaIH%Oxq)d#cp@+`t>Z#e6iCm+RmmS0VUPVkGv#m z2FYL5W{5|Gi{TSy&MmM%Sq>#qFwA^`N2pHbU`jgIXXo@HDd&1D#o)d8(a669tN0%# zz%O4GZ^So)eHen5{mpFG0-^*JA+G-3G6~W083Kn|B9Tc1FCfHO_|POG7ofD9NAxqq z4z+L);!g?2AC51dg!&0;0yr4lmWX_a?ZNgWyA5Swtt^~OL<$4(hGe{!-TZ{?CNZb1 zHXaloUHNG|!1kN6i4K~G$7b4ColJxV;xQ^m%Qp7=*!a=2@ilEoV*$>hj?dUaOtSxi^GjHQ zA5f29+5d(HtfQsnP_LjJK?N%nkZ}Bkh}ifi!a@!<$w4!d&!@Ib0gjQPAQe}Wg1N!1 z^)iM=ndtfn%jm55XX zrRyYJ)8!`IGUfOZwWRiuc@ zo{ylhUmQ7)8}^Kc2Y*%ligl`z)Hfnv35~B z5s%a^p1=}sS|5+HPs9gu;Q?<|LKAcbk}LDSokVvqeLHCLHf)(n(kZ4W%-tR;lZ0e# z!vvOY)A+fFWm9X336HRwI9;9#7u(sd;4i^(Yp8{Z30 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/GuiCreateWorld.class b/bin/net/minecraft/src/GuiCreateWorld.class new file mode 100644 index 0000000000000000000000000000000000000000..769506bda9ed54e5d3b900d1880187de0651356d GIT binary patch literal 3047 zcmaJ@`*Raj6#j0Kc0;<*5L!ziV0cLyY@?_M6i}L4D6~aM1;JOBWy`Y{Fep z3@k$i2h?y-4TCWp!r=r(j>K>`?ooS3HRRPis)l=`I2J<;$6Ih8P9z|3B#QfE*o6n0 zsKvhsY6}!2eSZQ8gz!*|st-po7KO2l+Nab|P@6?%RB9NHA%zL$eNuy|=F{qUN*!Ba zT)K2geU=nzTZ1FeS~gs1dk3m!zTiq}3#=QmrI#(4wk){DxR3z}S3s}$f(NBh zl&(Nx=(I6yWG%y<$mTuQv?nODoFaxNbCy|{l0^Y=QlNQ{X`9|YfmHgM9=eVRL~>41 z65J3`j8sdfq&sSyvbduu8$=@zPAkFXdCw?J4I5?uTtivIBh;IaUf!6N1EwWMj1u+Q z(}P`0fofm?Ey`qH)$<&?LRF*SnT~z8bjKaHq_AHNZlKcZ!=-hCi4|Sr%zPS~(}RNp z{%+o>x&Wn(j(TyG*S=^*!8*bE4(cz&g z5btvwuj08zd02XrPO;M3jOi%O=y(*p8fJ7nhR1b0fhPslHY{X-TgOv)TE{bZT3}gs zN|wsrOsZQ!c~--7I-bW1QM|~Q^5$dmh}~~irgXf7m!o(^xq4N{UIn_fpP)S%fbQw( zVVQG=U67WJ*A({Gm6LtAQ^y;4leuh&D6rutL;={Y<1K8z8vG!?I^M=RI^M+&9q-|N z9UtIB9sALDH6M$T&Q$x9HJz*?NJEX0zR^)*BIlIKPSqv};#ZQqA-v)FOA}DA{@HJm zXYq86fi=IqF?@uNnJ_x^d`Bgc!uqflpRac7AQd{(}(1=wE7Lt z5a>?_B%gP&l=58-?%w6W^7^(E9NTjpYsjp41RhwadZv|CI}~U-V-~$h-s?f)pOogr zB;{6<@q-OK@@A~?(^t2^+iMh=)%F@(zj+)vb(-|=?P9CY{OD55iKgOn?1?L6YmKJs zkU&(V(jqn7*CnuZvALSaK!a;fv(i@mgb+fe8cK!6eXm|Y#vCu2m9k~b)O#T>2MgqS zwNhLb%sfEG-mbbrzZ^HJmezIa5)J^_EVDkdGO?%pzlC?%2aB+Yg(Q#)qe8pN1InGqI%o{Xl z+tSThMx`Q2&`%a;zGfrnPX`UVXvxavK(TizmPI?4DUQyRWdrg17s<~vX3eQSyKICj*9B<**UhaoD zw`VRuWD=qC2xr3Q5y@;jkES1aAaE-?8KMxz>^^C();f;Q+py$w48QzFWJjk4eW z#2SS6CZpfri*3os*hRJb6QU#Ce;}JVhh@JYb|T3|OOq8Z7P-*l%~pJMa&j!O`~p_| zjMfm2&*Fry8wYkrx)Uqskhs06Gjd&18&;Lt&~B>v)kKGV5v!HRwGDSh>V{tkiP=js zGlxzUUdRt`J3|43ieM!JOVHvfBpKjA27VMBILVzVI`I|Hzr{LyhxPo&idjSCUo>mj zDgMEJ4ZHrvy?--P5$r~9Ey0KAB23XFvod_++WBPs4n0`UA|igM1Bv;?*gy*#eFr*1 z|6mOr+^Jy?E%HID+4Y!JLA}xWz@tkt`si3(A4{yMM?NnZZ@yA=CB7R=tgQGgp@D6hL4)XU9iKi;igmAKR z6%p|Pui=tJrEuM(42$2eiH5n1e1=peqNvU7Aop|Fyhvuj`5H7+eI}Jl*>5NZ#&E)_UB2?K(T5ZYD<_-LX`BM~cOKhD(I1t4VGhZt`aPu!g&I-WINqV%rZ~ z!o_pDZJ=KBTY)9k92MdMQCU4l-F(WAxPd85GZ>NGJXXgIte|9I755mj0~3mP8d$@+ zfeoxv4NBazgsa?@HGE;SOqH5qi9x%K)(9eztt3Jch-9VTpe#;D7oy{@#q$zzf zO3IXVCycn=VMwj`z6@o+o0~$`eLI{;;HxCQHc-QsBJfbdBLmx*Ht-F0H0&Cf#bX2C z;ydcmKq5V5`9DZ05WHL8l&W39<=#P|CIiPipc01dE^i2Ki+~|h`7fkMO|pDX2EJQy zLP?24kd}1Zg0c`Ge(cz?&cMo4(zV%ulmCNORcS;E3?I2wbBphy2`zLcf@cVmD zg(ZuNyCkRsA#41ot%oXakR~QcP(9cv86pyESPYj3$a(Wj+%yQ^;|GRI3v9tWc3juo z6Q=8j(j>8pBN5CpOf~qSDEXen<+da1vIp_Zm{9fpoyP!mOEn(9|mX9DLs37%p5X|*T3$phiZp0I;z z-o0Ja@I=X+T0DO)FULFb4@F0aQMK3T$>9el8um#?72iK>HA$gm&l5q(N5=L7p7^wL|4m*(HAiCOQ&G@Ozbxd{X*CDsG@ZoL$qr2Vn|{XBV^5D zrgL(Q?2PW_^S@&FCE`1&1nm-WH)Y$j(NYOFjh~-nlBXE?9eNDg=YI7lCKlD`eCOMxaYm{)60x10D>`zENN2YosKSQyeHZw?%lg`nh)Z6 z*q-<>AV-cTo-dDFPok$hDoB^Ja;G`Zu~)%u=ds|s^ACFDKi{2ymIpzKUywdtlretJ zkCzmLoU|>3Ij*~gP!JiJ(q^@op_$oO%C&Vf+ovEXOjmaoQhL@@uye!|Zfr(3McURT z-I!yiW8=CZ2G?x3VpAcX(Oi+R3Z^S;1xivuKxA}xgzFUej_9WD9#ycrAaQ zSQ)NskjqaNW+sF^u1(1E`lX}e1zkaHhcpaXCT9u5azsXfT0Taq6d{*uX;-(*)54y# z>=|j$T5W$ih!*O(|DPPmgN(l^p}qVqttCFIRgz5=m(i%-Gu8>L$L9WOAq^ zO<4syEry7Vf-s#9GJc8SehIOP!{{g8QrPNH+Bzc~N6U)CDjq|RiYL&k;vf#Gcp0zw z@v4f?qu-A&sQ4njq@a1@Ev%he#h2ycE9fP11C}Y|W?xb98osKM;8cALUsv%B^!o8l z72iU?if`lfk8@g%%#ZJ=_%7a1@jZOsj~}S`A+D-;6W0`+(I(OvF`3QjQ`5$bY2}}{ z9k(z$H^1=0v3O!&aOn7O^63*JqbEEg| zF11J7c0RH@*3tRo-u{cvz4+3RqbjcBN5n2}S+3*ST7FcxIV4Zm9T) zJpMcQsfwTB=YIS`#V@7gSNOGx-^k{-cvr=HGVI^ssvo~s@dv!G;sg9q#iBGlj$s8m zssg%tXJl5|GF{s;Ms&yJnaX)maCIXlCFFd4DRb5&q(|Bi8p*%iva>N`ZYpcUbTeOY zV<*JIgr(VJP(+xL$73QdG&9sBO=6zSGLxn}l4UO>ax4gv@-;JQLRBSc zM^_61k*LDWH8r8j=uY0y7D(6CocXvkEbB{Y7?3$KF6N2DmWvf(t`({9{e_Fj8N$p; z2w59gfa;vW1Zl*YreG_v?5yU71tlZqPff~eNOmTJSVECuD~f_`Gukvunwi$zv$~t( z$Z@sOjkQ+-zjC5PRrgJ@R1Anotzfuu)|ITy5=mUuNwRB9aBo}I%hoCg4^>zY3uKK{S~H}qE^CZgZdvb_`jSC|L59Qy(U&R-VilY4sHC1Y2+7( zhktzAII58^TdC)BRO{4cNr(>Zv`7{uNi}O0I#P=puZ#;AeU-BOoUqqV9Yx2SKk9&SW?U z`Hk@W<%oI{n{J`L24~lIif|8LGe55)++z!aX{7(B)^=&*OreFhmd@9g1xrzEIjDKxx~%i13?eVYm4jAzFmDhzPqa z%3sh}M3Zz?QvuM!grJqMw4n(*Iog8(TJQv|^goE9761Q&k3!(Rmd*I<4KzgQ(&Nea zUMBDq{rzp!wS-&N6qn12aQzL$0ILz4j5wL>5zomle>(L@wWcWMyTct=xH|FJ4g%S}hDn@pMtg|? zx}3d+BwokUcmpSJ4I?ESd{F+2OEtXqBz@ITdz*cba4h3bxP=EW#d(19Y5t7=0|r@D AE&u=k literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/GuiErrorScreen.class b/bin/net/minecraft/src/GuiErrorScreen.class new file mode 100644 index 0000000000000000000000000000000000000000..1bdab86ae9efbdee152b4339f7d14f4db868a598 GIT binary patch literal 813 zcmah{+iuf95Iq~mxwvi{94M5ukkS_105v>;1gemtriv6HL@FM5bK`AdNFB5|lztWx zY9$`{06q$HCTY0^30pfmdpu|6%&fnC|MC^UBRq7lfYmbQaYM{aD|=S2TiJ_B#o@6o z*qWGI7P2f8Y+a5ULfb6jb`f_J>@-e?TEXkQ2|t9vFiiSEH#Kq6f1;32^~Y49@H9^1 zbVtGRw_Xu#jv_J^J8`0)kB<(t*$)pSM^VD|#<7AEnee#VGg>F4`|Wm1h^4psWdG!y zj#$=jwgqy!qp|7fRxJD~xx2=U%#^t;id=Z8y6~~(q9Nuk?zy;+Z5NBExCrpT#U=5s z;+jG|(P?l*VLcNbronsD3;s;1Q2S@dg;@JIj?#gGYE$??$Nd2ZP?2`_Oc=#FNnh$7 zp)#A2N1AXCM*=62Hrh}_XSPD?w+If_lY~tsBO{uQTj8<)KjQ2iO%z~_*Sf%eBFC3g znRuKD_dHk(Rocrut#Vh~?Zz3@CprpOXbTh2qFwqKx;**Hh`+;14CAP2C1ZjjYXGf= zWi>t{$7OkW&pt(=LBGgV65JkEUVG(JI2Y*LIhst-+REk`++VepU^D9+waeYlV~73i ZvbQ{zas9luNVK?SBzg>}@k0(PKLCreqly3k literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/GuiFurnace.class b/bin/net/minecraft/src/GuiFurnace.class new file mode 100644 index 0000000000000000000000000000000000000000..077c724abfcb3fce4d57ca6323d608a914ba0ff9 GIT binary patch literal 2135 zcmZuyOLNm!6#i~3S+*k*CB>ANc_n~jASx6>N+3-Mn7TMT; zhE-?UO;;>S7u~iqH1siTSM8$x1^pr2bUM)Q+QtcE%j0ve&i&50=bZ1{t3RLr^eceV zSjk`)j-;^@N2NHXVKf5;W-s2raj7|x!kY<9O-*HR5~oralgiUljHmGy&ZIDr!C9Qk zU=nZ3*_2#+M~d@OOlK%AWH5}2QWT}Qq~To+B>`ih9tBp-DFyeOAP%E7frI71iOpp% zaB7jY5Syz}&7AXm=VB0h@mjHopAbl%^#U)R6u6x4V$pVZ&9~N^Xrc?G)9J_u0?Kq~ zI|BV>25_amJnuwv*1S*6mP%~Z?#@^%jdu<2X}Bz~*N&|Fm+Ibh7{nG$qGA|1ZWPu7 zyDT>rNaUs44%~Ss9=oR0Uwt9~QLI&R^%h7WaogpWy$>DE27#n0$U z;A*&|;}cXhFphcDbl7loEJ#aNibW|rEa|ulU&k^69U%gN-JMZxBqp$@>vFrI0{c4w z?a-V23Ji5(ItUi%^IkTZEYm8pEX%r@_1N>xvbP$uu`YD$r_B_1Yo<~=povncB#G>M z)iE2vvTcEEzPY1s1+IB@e#xoD6C<|;^aXa%tP|KyB)eu`mxe8FLNLxQW!sEkE6Luh z#E}=c0^2w5+f=@cR9&lhpR(Ho4`k1BO(550^O=_ik~{C}taW>tnM92&E(R`5x@XeN zvx(@Q$z}vIah-V1c@WnlI((&qtxQH3dNzz))4#vu`ewM|1RO4vj~{27yZ&_OhtbIe z9)f(4kEEw}-V5xuPbJ^rOug^f@uGnGpjnaRqT{)XF@4KYw$S!WXj}d)iKFj4*=`Y@ z_EyjHc4}0chn}47WY|(Q=Pf(4&NA-@E>>!m@30Z%mNIH$ro-^=wJ3BWXLYr?jQzYc zckzNIBl5U&mf(C3_EPSn`V=xysr{qy45D!Kd-N2ZBJnenTZN+uW84^c2K7fIdvIez zuTX!gi(WNiW2mi9Oy-hLa3L|KWECU*1Si`Lj%1abQZ>?xRU^fJT5*ntDI%pv(|~ZY8cWmEP(%@iGOig6(e+e5Qmy2M3DvL zDh@G1Z7^k=HIjqrbz~Z^y+(?oZd7fx+R(}nc@t6gkqVHMer|SxDk&JQ8hSOW+5`C3&^a1?SyipJtc>mJ*wMgVmDmGSi6Vd$8iZ`r z`~>R@rnZF@+=?Og*f5STwQ-iJ#MCMn!5tLv5XbNtM)3q@qt+>i=XfXtZw?|PgN6SA D_^%Ka literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/GuiGameOver.class b/bin/net/minecraft/src/GuiGameOver.class new file mode 100644 index 0000000000000000000000000000000000000000..d16514b90f4cc6c0ebcf558035f0092546fc36e8 GIT binary patch literal 2514 zcmaJ@YjYD-7=E@%yJ@%4il{_dqAk>>P`OFByQj&vo87RxX{k35 z?|1Pse(;Mk*m9Y1_~wj%$r_)0U5A}uAaHdA*@4#RQEMpPV^b4JB$ za(-RKXdIo`ADJEpA~&w?*%Rmau{ciPq#VYjxi?~%h~WPH`%;&c;z{{}Q*oTeRDu-G zNrLB9Tu{(-*mA7kh=Rz#&eIB_Y1b4A+D0u$oG2A$gg2?r*p#ReHd3+_v}Oa{m><)N z6-{hjEKM#Ig{h!%Af1s`+H@nZTxVQ(v#wW=n&iN!BZ5?cW(`lD4N|^mq-gGFDF|F= zNFIutp1znhJRuy?8pvdZrL^62g-_tPUh>6=ULX}RJxh4jEqR6*wj{fDBBb)_Mor=%ed zOU0aqdDt2XAkalo!zF3Kd-R*izG?6gDA-s_X3F(!Q$q<03VLeQba70#oUxF?A}*^~ z((tzQ@*TXZ;XS-hnlcDUmr>}`a0OR2d>{eW@S%#2G<=Lt7^|bM8~A~z7so`9cTK;o z37^LBnTF5tg@!%Y`>5BiMp!|M;W~lm+M||FU)o1y$Wx`jvQttrq+s1z2}{GUh3;`) zw9Fu{K*=!4d12-9G_Z-;&XkSVx|2&~1J81DVO2zQljYMnP^CRNGbfB-NESguf%)pG zQ(9xIg+?xQ^8P^0Z2Q9ZS**m>v6C$;X(f^qWZF59*;z}4R)iz_gj5wt%i==y%4H;L z*z$|EzQhc!*7u|Op{x%**Ni-4A;PL)O1kTHP^b*i?Xr7DJl(W}6HG8Z3Yuk9`IBwb z>3X@8y*QV%Q*Kc>oJL0X(yErT$4h>GOlQO|D~RRntfAXtR(9a2kY@)bFeC|l>(@cZy`yyxXQ6P$cu4CQ~@g=^JSBw-LN^Tbl8@8a&i?r()dN5@Ld9M6G zcLKkrCMw)jd@Vcbx`O_&7sA4}oCSAYRO-8IY?ybY>n*AHfiWL--T6|HX~{T_@Y1&K zvpN<0TwVSZ8|CIbt~;hJ{QmO6q1q5uN!A>cH+CKPxhni>pH+z}CepfXXRSaCsrXUB zwi^HHaZ}LycpUopwd&y4321^M?{AI+-1Tr)I5!TiK>3{u1v@Js3b`A60R0te2)#6T z6AiZ!p^l5Yh@OdZ(b#CWnub554@`&{v@yQ8y>agx`k>pX)pn<>3p1kqF-; zW7m|}nAo(8&9|_nwYBvYx&|riPV`81qs{R5CVH3g c`=kcX<2%lAYQMqv_?EuE$$gCbGknhe2fOxhCjbBd literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/GuiIngame.class b/bin/net/minecraft/src/GuiIngame.class new file mode 100644 index 0000000000000000000000000000000000000000..022b346d452fd264cd202edfb2da887ba7e46f1e GIT binary patch literal 7409 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 QHi_@% literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/GuiInventory.class b/bin/net/minecraft/src/GuiInventory.class new file mode 100644 index 0000000000000000000000000000000000000000..b98eb817e3b4fb102d98c6e1f3b1e7c54330efa9 GIT binary patch literal 4656 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/GuiOptions.class b/bin/net/minecraft/src/GuiOptions.class new file mode 100644 index 0000000000000000000000000000000000000000..424af2b95d18bd411c785a746c3e46788ae3c88b GIT binary patch literal 2002 zcmZ`)TT>fl7=AX%vLP%G!l6I_0c}kJ5)ai@p%n=R(?V$*q@}jXlKm2vZg%5lV_UEN z6OK0wz0g}{IH;ZR+VMyDLmWqZ-`yldT`u-JyvOG~ef#_0zx)c|3Y-`waXE^2JMjwM zr<7f37(RPmLRZ}r+%Q~INJy;iX=2=VWO$m{ltrMu;RYHHOQQZ;FhPJ~n74|_A` zu)FALrN?Vpt;z4zN{slnaLTq*6*?h52hCE$b!}^&jl^_Ed(ui+!IV&k7H_(H`tGzrN-bzhUpn6oX{vCaD2+#Drt*|vm=9h6k)Y)+u8qQc;IL0KCQ zwAC`fj#CQuR6K^MqKa7+7HkzYe5vA1yd_~Q&_FW{=V5K-b|OIeOzA1jmRIcca@(L( zpb$%bh^t23l@Rwkwc#3OmMPSF@)JXMcc}$;g;CihneK{kZ;EG2hNV+?N*GKP(m@SA zOvNtzpTXtt@#dlJg&I!NshtK>XT;Zc_C(2@Pd}he5EgeRNl0`H8Fc8c3)hb$Z`zu> zshJJxB$-@#ovR!5nyEeWhmBOKrQn%eYfUf(8qf-DHf5%1vOVSJcYpI0U?79s{mY`P zHB5JjhNOHC*oG0J^E90zJZ7|qc*wlF#2pI>X}Vn_dYJaX%n77SB6NgsX66Wy%B2l2guP$d4cE_lR9Oy z58vrYxz>mM-EE@8;vHsuI2rlcyUEF8be%x`8Qme=`$m$!KmEzq@7ap$zJa*T2T$+m zc3j;~^qwH@E3`!W@Y{c7`|!hdqOUEGp!3nb%a4*W*S~H%rDX-3N Jla&zO`3LzG>7)Pv literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/GuiScreen.class b/bin/net/minecraft/src/GuiScreen.class new file mode 100644 index 0000000000000000000000000000000000000000..e74f333de40f74d9e79e861c5dcad6b658ec0b34 GIT binary patch literal 3869 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/IBlockAccess.class b/bin/net/minecraft/src/IBlockAccess.class new file mode 100644 index 0000000000000000000000000000000000000000..bcaf31e92b5d109a34e9c40723765a3368862d3b GIT binary patch literal 380 zcmZ{g!A=4(5QhIj+*K3>9>BzS(ThEL@T3NkCV~e&c`K!^#j=}p2NPe-gAd?C8Ha|A zB*aT6{rk=Q|MdIk^9#Tg203~;`h-s5_%>AbP0t9~xz_qZ69$d?OmmR|2m z$7R)f#>A%B8F8X6A^{Yi5oeo0(y=DH(Rrn?N}I&t$wt#G>!( z6nRp`g$Z}dscUSWWueDv8Lb;ha3OU9Z>*Ipmvi$jrYGAAY*LbH#i?M*LOo39&T>W| lwB+A_tWDTK8<4t-EY%!)sqU}!4i3`&5MAjY9Ld?j@h@n!VR--m literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ICamera.class b/bin/net/minecraft/src/ICamera.class new file mode 100644 index 0000000000000000000000000000000000000000..8942933310161022783c867577b2c069b4a00c28 GIT binary patch literal 216 zcmZXOu?oU46h-gT+G=%h65JhhF{6W%wG;}1g5cm5Yb=pAfh3iFn}Z+VM~N-CIbAp$ z4)^_ez5uK+3@``~5+>3{x>8rE@<`XIN=#*4RT5_Nof3|fQi;s)n`72wY*S0SDP*q1 zHHy}YGht|jJ7_DN)QaHG<2YWN2;oszCKHJ)1YwkJc_|EE-uZ(QrvKfaKp3|QE4a$p d{&E+Y^9h7b^BL%Pgf2Xw*&h6c5Q3JY{{?EgH}e1h literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/IChunkLoader.class b/bin/net/minecraft/src/IChunkLoader.class new file mode 100644 index 0000000000000000000000000000000000000000..fda6a94a62cac671612616b733bbf03d46a3384a GIT binary patch literal 413 zcmZ{gK~DlP5QX0$u(FB*-aW&`p40&z%bTu0-#-9cqL<+~Lx<2Rot#}gFYF89qCd7eh*x8^^71i=$}4g2d^sBy#o(V= z+8Yw`(MsvJV4STobQxO7rT&4Q?}qLq4(S3(xY4cmd(HCVlYl8p) literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/IChunkProvider.class b/bin/net/minecraft/src/IChunkProvider.class new file mode 100644 index 0000000000000000000000000000000000000000..0c33ae98a89d57f2c931e183d39360a5327ce1f9 GIT binary patch literal 392 zcmZvYF;BxV5QX2Bwkd6a0%AmBYgkB`7&0P|A|Vy2f}xvnOi2k&WIGYRje#G)k3yW? zsiKRYeDB?NXaD?ueFM0`NrXv+W5P(jHTwPTv#`z*dU2LrE(zn>RBe%~TW=E1efdEv zmwXgjNh4leVvS6Koe~ChRX3$@iZG3Lx0bF4oVHV+7;3&70xmTRifkEp*8-yz55lLl6u5}hznas=QWxGPEhJ?vT(WmjmLQL<0Z- literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/IWorldAccess.class b/bin/net/minecraft/src/IWorldAccess.class new file mode 100644 index 0000000000000000000000000000000000000000..ae29718791b61f0228037357b3397f986cc12290 GIT binary patch literal 448 zcmZvY!A=4(7=)*Yte~i%7d0A>>%~2K;DkYvO$-`{dM@2xER-&3i-uS8-~;$j#&#u& z(M#v@%|A1J|9E`^aDn{@%?Nu8r&Dewmns*Nw$6GaM^D4t*d9@4?`9cy#88RTG(Ed# zIQVA!T#x7%R1MIQtIiZ(4Dz|o7!Kp>F@NTX@{VNSjMSr6r_}o63 zC!LWYV;R=sfY*F!Bd9AwnMV4M8m5YJi@zceEQS8#r5QF5wVW=<+2g8*0)!~{K%xr_|5d8sA(xtV#X z$wi52CHloh$@)l&fLg%T=OpH(>-#5Vr6!lKF)}bRFacf7z`)4D$iU3N0%9?+0!bzY FHUJ%bI~o80 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ImageBufferDownload.class b/bin/net/minecraft/src/ImageBufferDownload.class new file mode 100644 index 0000000000000000000000000000000000000000..448251e6b40d85fd7e50144ab05513bbec155d51 GIT binary patch literal 1939 zcmbtUOKcle6g@99_QcL48K*IXe2SY=YC9hTN!=z6sndK~mwbSfMo@%0u_y7gi4(?? zM6jreRIx;?yFu~>78NR@aitO!J1n3?W0wWg(UqJf&^T!qtm(DodCR$E&M(nZziK)~>y4u2%wD$(0>jbCYv#I{ zFgM(U2begwwyWZo?9g=XK|jeU!|o?TgUvetwxxwm+fs{F=QHVR8CX0BJV*U^p+ z9nYXuM;lrN+Ml#189k!o97YcZdKqTsDbKp)=orJejtPl<9v3uZbX>$MhgZomRcU1k zu8v7e>3A9~I-bV~9nVQ~5>bH@1~|F{754Dt3(pt{_(e({{;%?kXZ=xn{L^h#(1@+DNJ&x`{@!f}Ss=EyTbWfL} zh)2-MsGaL6BM_%ISVr9==w;Mzq9Lv*M#M16Xe5kcq>V@!MqDwB>Sv>pREqL5cYA9&R^|KYGKW2c|U~8jSy~@;8&CCEx-7*^5ZQZ?bl)THpc%y zO!r-Gy~Yz~ovHy1y!9F>REQT|6aPne6*ePE{rjo^8LFS5{k(>X*qm|_VZ?gc#S&j+bM&p!mj9f16aZnC&;ElD-;UjX8 z{XM$FA+@VT*Fh}~^_)+=<0gq88tXVsfu<*N#wqZ`-^DOw`1u$3iVi^_{0mm_^E)_>An%r2jNr- zYz~<)TKZ!dy>`cQ-qdC?cD&Eh4o+ndhta1b!xp%%0*cHIoO#HSM;*I+MNyMEBpSIs znYTOL;fZ_d_UCRe>pOAe1v3h(PN_H{R%Hd+9s5e&YJz{^e#}JgE|NN_V5M#l1~E^I zgzi$2%8W)TGfP)J4n5yvi}f(beHgr_Y&jJ$op2dVmO{TAERUw&iyl?2ntCH4SE39 zD3hQ@iXAjyVVA3FOjzXH;W4%2m{%GDrG)98v+l$J`)d(vWbLRKI?>_;oVogCeZbzUX9YRLhtX$^8 zn2*4Z1qC_e6@D#-uoOZegk^z9%hoDyOGe8U7=K+dbvxfMOub@hZ|r=_s^nE$Z_-B#>FdC% zn%NQv6q{A1>?@IAW52PjTbtT;ohPxHZp(7c<@cvEtgKf$WYMZwt~c4*WLnL1NOrzC zg)t=B&>CbON@q&D+JTm@Yi2E9wk>wa(tD~@#vyi9m`bz4Yj}Gc{JOT+E_$TpFH41VcB|BfO0TKDL416ivG-yqQ%cpa>#5f zCp(Q|5HnHqAtsQx;u=KJgWf3mF~Iv!Y%@f02eA5X;uAHNJef7v+4rs?Eb*Eqs=o-9+HZl3BTdEkiF+N&GxEy5Jv zQ8xsld_6uX03V!BYUNmJK^vxj5JOyVaQB4B0Bth+4I-ON?Ht3G%^tz`1O8(KvUA4> zex;xD;2KAeYnTxc=25usMuOP{hB4A+OwkIWf|BL47uw|<_HiA>7+0Bmg2nl0Lxctr zg~JQrLBbM9w!sNn$?G5Jx(FPmBZcuc@JqX;S1#)>ymUW~5K4YR!rg2*MwDrS*%O2p z4&C$Q2_mkqK>SB2mvBO6_c?MD*g9BZgxTZFpJGQdn8Z8>k;63BxO<9Ol#s?IGT5SL zf)N}~?k`dy`2R4Luby~Ukww<-CnDygo%hN+8$qw*Ujl!O9PBdVZhF#t62%^06n=%k ZX_n)r8D$Eor8wht=X0OOvvl}y>pue;JUjpZ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/InventoryLargeChest.class b/bin/net/minecraft/src/InventoryLargeChest.class new file mode 100644 index 0000000000000000000000000000000000000000..797ca6313274cb74bd53cff31bd9f7ad8dc599b9 GIT binary patch literal 1426 zcma)5O-~b16g@L76xyL+i+~galxkZF1LDU*;--m7O~sfJwmP(98EmIyI$-qQuyW%< z6Nsq`e}F&AcmoKp zm?AbsY{l>(hV2+0YKXd4%hr&p99gH9*|gk-S@k`~Z9LTwKRG_Oz0#rG@ipA8xVCS$ z9M`US);r(qcr~+Jc28~BZ+jobyV?HG_a5DGT*rT=;dSn6=Ib+EZ_V$MbE#b?=gA7m z?4Gm^Y;VsxXi_uPu>Gp@$?ntA5Xt4sdI24M_?1t=jvtTWz*k@p7)5 zA4bNvTgs0$PpHdF>sS$p;Sp7JHb|+3iH4P2`JZX#I*MMu1@uDk0+GV{1)|@m zXJaX6FhV&-&vAZnW==4NAh8W$rXn+GD$_Y4U5scboFl3(Z@=_2jVhl>%3GKZBNur} zz*nMFf;TGP|h$fKm$d+i%}h)F(ED)^^l~xswBXl#UeE^=&R)z zZZkJ$7$WQwAwuKUAmJJ0{x`xx7qJK-k_sYtUB<}tFtRTK46aCs@#cRpid~EiFoKs% zB&Z{$rnbaMFC)vuo0L*h6nZvJ7_MRnCZN*YxNz-aT*KvQ(7w_vXmU WU?GyKM@25fI)8@^hTK!s?*9Rx-ykdi literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/InventoryPlayer.class b/bin/net/minecraft/src/InventoryPlayer.class new file mode 100644 index 0000000000000000000000000000000000000000..736ed7811775a908fee7517d3e34e260480c5b45 GIT binary patch literal 5984 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 N>9~fY9h}QS_`wzSth=5kz0>fO z$$y#3l!t{!zVegDB<%m!c{CbK1aiaBV?ljPwrA;LDx*`^^lij48EUc@VeBVCExoFtZlQ~w zg@!&`$C|+I-*fxDsX)WLLEx%$=lS$P&N!iLe=xxwU#!YUEZLWKFP+;aJ@*HM`v#hi0 i26@}$F8`X^z{`1ROjn|wR0++o)Yc7Fg&eUsk+ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/Item.class b/bin/net/minecraft/src/Item.class new file mode 100644 index 0000000000000000000000000000000000000000..01d12821bd01e5c70198b975392671c8a6bdf9ba GIT binary patch literal 7273 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ItemAxe.class b/bin/net/minecraft/src/ItemAxe.class new file mode 100644 index 0000000000000000000000000000000000000000..d54ff24a5145f0e0cac7614578a5cf1c6a3fae14 GIT binary patch literal 555 zcmaJ;%SyvQ6g|^NlBUu6Z0$o^bzya3mkJi4ibA2dNfCmpG@aVmG$Tn`{Vn4{5cC85 zDDjRITxezB+&lN4`~LWReFt!a-3&CW>BwMRMLvTh3KBLX6eW~YlvPw1@;y&Dqwr!d z;7;UDdF$48{V-xE-E@2&HO8*boxmPMjWBQ;XOeuvpfp|IjZPWT^>%yznjv*A`kW!x zA^O#1+~Yyl?s;Ua>yaPc*;Ctqj;sL#n+%0HwGC{c zYM>@zTfz>i48`BHfiU%S3 zv>9i}!-$&H=n4Q0F2^G+LArqj!bSS+Ax-B1vIk|Q5`(=U@$^m45$Z$+RFWFKB`nW^ sj*%ieP*dNKw30DWrj?43Hm!6F#k70m0jcU+)&50DwBN2xg~at9W@qQyot>F)=Kg&5`VD~ZP`8lB zksLc14~fftuMJmW^rdR*>CZdsv?*l{=K6Tqb)_T!!9wzK0!N%(3QwOjKwe#JF`VeRL- zvo(0zYJ}U7>s5Uf$cTDqQRQ&@j`N!%VPj0<6C5-#C-D`&miPwWN|x}fiE|R?6*4bz z0T(4MVL{@1T$WhG6%!SSB~&G@;s=SE54Wq1vEjv9zvfy38E11;y2xA}h~;G`{M`w{L{8zrMpJ)41j` z?BDL+6*!vIJ0H-`9%NkJ7AX%}0#gaeHQvL?8U6>eSghs;+k=H-UG+@4?F1X;MjZLU z27TmsY9(xMcUXs^Lb1y9Xj%4S_ckYCi%qM8Sz2HBT*Y6ZQmK6Gr&=wpV44G(=O_xK zR7+AzQD=uz9^!5Z1}(sJX>t#uG&w5p>no&6FEOO`xpWUk59!qx+R3Msd0qibq>;sl zo^gxL#xc=%DK26kt-v3)`4pLl>3?j~c%~F#n`xzFXvt`W7E>t(Em^IInO$U_B0cnc zwzP|sZP;l$Gt`6m1TkY$wz>1!*}h%vddNP(t@qFXu+1KF)F0)o=3_hEUov_b&+cMh z4|1>$%jR$}&`0w7@APnB<`zRRTCXUcGmR8f(krYPFwCS!nD!`Tp3-Iw$C&sye{>T# zjwuvz1gBW_IUM8EpWu+6rN9v6#k|yEL{dD3vv-b5yci-Dk9#BAfQc}RAZ>Y=)Y~dz`%BvY^Pj&6W>A! zmP8XDz`!dR&$RX0P25e+7{^4E)T>%tGck$l zU6|6?4HGvp9a%mFy7sZ-XA%LCztb}GH1a>U_gmD=f>-lPPF851Tzjs0hjY93fz4rI zfMX761GhQmaff38cR3cd zC)^q;Lx-)&GK>Uy)6ghvU9{R*-j$&cUp$Qk|(RRit`K5?KaoxEklIXz!PvhxYD_vuD(iZ-VhG0*S%%?u8jVF_=-;P}q1%_`Rn;61 z!+g+IHo;7jf@{m|bV2z-ZfCMtz4c2$G5=ZCyg1MabhuUBw-05rMozZ4jR)my@knga zV~x?P)n5pd0RtolNt-1-L}&NR*csSNgarr>14_>I6pyG9Z}2NwYrP44xapio;S(V8G7sJoBcq6p+*U-k;Ei+ W-I#`cE`1mwGz_*tl|~zmmwy19M>y61 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ItemBucket.class b/bin/net/minecraft/src/ItemBucket.class new file mode 100644 index 0000000000000000000000000000000000000000..4722f206081b1d4110eee7d6bd4421f677ed5b1a GIT binary patch literal 2638 zcmah~*;7+j82_Cla7l6@VNJrK#g$dGDuzWx4U||A6f0tD?IpRuB^ymH2zIm8?rz-` zUpmu{&h!bbqSJQT$IkSne?U9ar@nN2>`d3ue&4+b(&0{<$^Cu%a?bhgx!>LY;%fjq zaMgt-bUM+9oeaAec00+?#juBAFT*~D5JNXZ55r>&y$oR&g4i$NaYyHcKes!&!k!;o z=tDolf&8vADn&nb8gQW%gHE*JAj2VsA%??jc*2Pz7-sG$!-#}qPU`PT7i#eo+m5sN zH2a@mhi6=*QBGusoHX84GOVkKL)!R+zAvstVgl23eMwbsNswzKt&Hg{nRKLuorZKJ66>%q z4yV%bsFk5RscZV&U|g9~(;f8|kq^@f6dL*al_{e&31bq*B}_=r1YAR@>2yTx(YR+1 zN9~=C#8iFLq%xz(Xu+h67&gg>Gc+?Kkd%>Pm|}RAA&ra-one|`hT$Z`EW;d52^4Y0 zmbj7}Z|PTbs{Wje=kbD!7a3l{DH*5nvW!=_#u&QFCF5usj zs+E@Ir)C*?M2&0>32ayy+Mk-ylH&uTlWIgCOl34(OC@Rg>Wm?j6UwY{#zWdEIz}gn zAtj-V6JI=)R%Z^SbcF*3H9ayxgWN+ik^Z;Nv)pe)IVs@Ic^Faw+o|wT3a1VoQwE#U zj+h!EIn6OsLqv|GRYg~6X?iM6+fo+_g{&slSbK-%N$|Y%s_`k6;_Z=Ch8NybPphzJ zG};BH5{>547pIlE!)Ya=?v1A+vCN5RO5nKFduNujcymm{F{>7>4uLv$>T^@-z*w)Q z(*-fgb!nGOhIYhcXd}Gis%~^e%Td#sLRU&H-6CPjN?8}mUTHB5O9}E$GE19gv5;ID z%JHzYsw+`NSEwzcG+k*WnQU9bnm%zLrE6nz0uo!p_0+X{)VL3Z%{qRII(%tRjVh~M zHf+W{8K<|Ot{XF3pCL#YEvg#3=E`kNI7+p(%up(>5ofRC4r+1@?ny@bv;8mcwZQ0g zd9&S#DSeKv`9`|O0RbCdT*TRkZ^355EhOzC*-o^gq3RAqgX1=A4c@NXus2lShU112 z`6%0wM<@{%&}YX9FJU>{lw~WnnYrw{Nnb^!{*Z%?=3B_4C!gt<&oMa~WKp80fT^is ztCJoV({Z2Ud@Rz&E^c~crdb{P6w*_~G^=y_CBM_}z6(!#p)Y@?qLM(lV5{l?4iYCFlKRF<-HPrHqU4wO2F+3Ii1l zx8RtEY*@){QczFP>)i+rY)t$rp|tpO(0t(9g_tf|~z9w@I|M9odC zx`vHQ^6Gh1W(7+6$nck_9l41$cd&M0$%kUrUBk5{nPRT2j9JeyTy?`d^3Mhy7_8%C z=7quMF<)uw^9|nAOU(OCeSyJ?rBWNOpma&7Sw!7DR%K;g8MR!WZMlKVH!jeK*udkm zNW%sc(P(*SbiAlXF?ON^2T=+YW%SW3r%zr5&cR3DA3r`p0H2`}H)wzsQH}3WgP*Yq zzhE`)(GdTNHTVl_g$?V36YGT+8$>fUiZ;}V5E_MoCXqn1n8jvs8e7B}Y!m0OU0g&^ zTt=I?icawLZ;dc}_ji+k8Fe!~E^Q`fU7e1M-&DxpzAt%Ozy zJ8U+a-ENlcpMIW}0Ar0qJ!>aA;8(jSMWn%a9$^wsx-EA{Q5lS`#knvFMj(Sz!j{7 zki;1kr*Kw?*HpZYb0HSvDn@Z$%3TJe>{l#u2S9M)Z}#FVgcQ;tj3Fb$gz%aarzs&W zs2IVtjEgefAOz>_y6s*kNU1{lHa~Js#UjL3?7FqKTPsN{GYGtm#SNbDD#EY|P zKJaqOxFq9E8J7v6b!WFxww7&CQAA|SJ5J-mJ@XS&gN}X;GcYtBoFU_?hFM(GFo$^! zZ{fO(1r1p&YFI)}LmoFYEDP(maZ^J9w=}#1gD}*)HIazW-y0+h_XfO12xBMF;}ana zoHX!8!gH^gpXJS(xy>C@fuQlb7j@nKoK-y>m#R+rK0&E)#T$-OAq@7|h-Wp&n=YGm z-b>l?6pJq5bg%8cT#(pLxZ${_YdiH#^HZ*BnJ{v){#Dc6xoK4&SUfgutIEaPtvI_L zm!woa&8_s=O)u%1)2Nx%+-`~c38vZ{2yI)ghZeYjmX=-Ql4!1wCnTC}e8YBk)*RQ~ z+GALFdlVY#z^j&PR!rCIVa9Y}z4mIM4g10UZ&UuO6@C=<^f z!k3W_;s1%1gjZN5Ah8Va9Yh#1;!qeF#84}Q?+@0;+4xsomL4PEfA%myKSP?*B|V@A zj}X`w%E+yu$u2H`c)48dr9^Hp38L_8`=$an>K{OxJV**j6iWu2Lr8C`D zWk-l_h{R$v$`Sg!v#7BP_R3b`3b)%gv3Y=mR5@hvjMwY)R{agm@;S^4)p*HKKE*K1 z%N=DB7|ftq=FmK|XOa1nXA0b6609=1&VSz9%&|M{e;4QQ9meq|&Xa@`Eg(%x$j}NV z=sir*CZ^~PE|SSVXd9QPiW&NXe@$QG3O&MA`Vq7A9M?E6u!8|5`2yoaq$o;%mOiBa wM1e9+$rzC_Dr1Z>aluFQ4+g1YqxG<98yV!!vh9p`{EH-!8e=M-_NMUa|NVeni2wiq literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ItemFlintAndSteel.class b/bin/net/minecraft/src/ItemFlintAndSteel.class new file mode 100644 index 0000000000000000000000000000000000000000..ae8445bdc640a7ac94a06ab98ec662f23d7e7bbd GIT binary patch literal 1164 zcmZux-A)rh6#k}cciZjqS6NXC3If`epCSsVMSjaBHI*2vl9+h0ZMSt{yGxeAfH&R{ zeFv_50BN!JuaLz+>yLq=-^mhHSW!QqqMRAeg z*e+joD@ATu&g7=~%G7WHJsL8Y(r^<~3Z^yO!fl3F)%LAPyGAlC4KtWkFsI=T?rOM) ztb%zB_pzX0QNxnhyo?nEs~U3XVHj?$^PlU9QtMR=THV|Wv=r^vM4ja+js)e*x>=)n z@A-W}AQ;q|#aA4!yp^v|j*=oSv^PQ$>W@vAuy{d;&g^pA$q2-&XBoQw$LKoO+T(`f znVg|5nKCG~+mrOQ%J^q?kM9CKE26t7AUQh{KI-a$Ng z6d^EC71ZlApFxN|pgW!T43?IT5lVM09i#0dfs{n*^P3V#y*5wAI*@zxF#5@7-dJrz_ z;lG0%3~@y}LZpFcT-}VvN)2eujYnwzgpLL}H^!s}x}*=pBoy#|5D1PDZ;cptqJx-s zlk{E^-$(r*DHuiqDfDBU{sGg3%n-7S5f~VSOMi$rz12)fpv`RR~2YM5B-3C zRCH#e3$!oi%*=N=bIy7Hczpw~kFo{@SrrK^i;z>Xg1m-RtSMMmP+-u8mf;+^{>0-9 ztizBvusxd}GQ=yLPW6I8ZutX?A>Fk->ty2gt>E0~JM@zAy$-kBGy7)9TaImx7$%jj zXYqzhR5LKHd1D-y4MFO0!yGjuz)L@H22sGV$8A16b&RPMG^-KHUt8*;=T8FDYTM#p zNrAL|f3SON+!;DF6m={>)lq_~U_-~I$XhzLQDi7Y|5z9>$E59W|}YBNaBh}R!~TvB0`BxzIR LD6|>EBrJUbpa_p? literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ItemHoe.class b/bin/net/minecraft/src/ItemHoe.class new file mode 100644 index 0000000000000000000000000000000000000000..915a3663e4af20cfe59282689ca576c31ad7bdcd GIT binary patch literal 1996 zcmZ`)-BTM?6#re=uU0t&b|BRXgE{MmyEhWiaEGJY#%k&nsw5yk{l!?C9>5iX%)ppGMWSX9Vs|-Oe&Vsh(<(BcGj3ov& zV{bb-J!Ob;xJY-&*3WNfH#CkH@Dax{G8~tYk#U7%1*;q%V~yh~KH>Nj*JOOg@wu?M z4syu~l0#mG&QU;-V;u&^h9H|TIZCiNY!P@1U&wGc%5XWhVKDTZ-G6n9qAZ5)v+7fL zIBsA^RJ<$59>+~l(wDf!5c7AVZ8CKD>lnJuDi$wMT`yERPh&*WlO7=7(24X(3H_eVXC_WeCK+U- zoUu)VBGt#m00fGTRxUI2`M7yWFA6<5`t;$6p5kW3X4A8@-Mrzrgz&QhQmiJ|Fikz5 zGIWy)QOd5qMH6Qc-|OR*IZ>0RPrFamG^&KjQ_J@Fz`PjRgsEA@M8yVX&Z98GL7T#dC&7$lZSVwb3fw zTiT9QJD*lxS80zT-+6KFi!3L!x)D4Et_3R#@ z{#Oz+yi7C7<3r)r zjS9lGv_hy>(6%}xRnR_sh)Afhf{uOMIm!AxZb_p}^`kt(BTYZR4oAm>!mfhOXmEo^ zgM~2P$c{IMW8*D8^3X$ct%)L|&0dkw7Wy>Yj)t;#AEJBh06oX(Jx1R|YpgY-9^tv+ zSZf96zUJ)b|Gt$T5QcRgp37(_zKKxd^al%K9L<v^a+JLNK;qYRRI=1oNGYHqv6wgpnI?ASxIkI3 zWXC`70o{Q5kU-)C_$Gw7GYJSOwxv6sIp@C4T>t$2?FWE6xMhK3+Qb-UEL_5@i8+*{ zxoluwdq5luIu<0hXkrP=238DQVbJddVUXNs(8_M*DJ>79j?XZ$6@>oIVXy7SyQ1Bt z6Eh0k#P2=n)Ax(=R_G^<9&x-_yi6MX*lS3%l?ZRYnF2lvlOQ>I+!aTDoQ6M(;%=wu z(o=cPFs|Zki-Tcqs}&u_p1&E$LZ)P*ZJAoc$=Yl2MsSRyz;P9;2Ci{jN7+Dyqly~G z4XiROjaEA-=x-Pqq0X^}hJkgCo6>1v)an1s4AbcZ2Hq3zR0pl#Jr&GchM7^WYMH@$ zLYAb4!!Dy?%4#Q&FjSWP197kS!v40@m zh67pLa9G@Yn%jWWluo75w*HL)jZ9yTgA@VFG?|>H5XgXfK!NN8?P|2o&^lHvor6`i zQ)Ir-mSK`?0a>y+dUYCKgHESV96ElW6O+)*x~D(PA&ZzM-OTds!AtUkP&=pc$ThetZ{u908 z2XJE|l4#u+c}W&blu$Ns z1r?4(jw*w8-wV9>0fSoW)VJw*682q&{Dv2}FGv2K8@&>H1JW2_(1~6D^^o{CwT-}y zTR!X*vmo~3qpg8Ba-&K1oiG~o+a3DqyA0Dwo=tI>);7E0 zD01BAo&+)@3vCIHG6n~C-ir6af{7^$OIT)D83&fuP9voAiiN9K_F4;#mA?@7Y788bqL0!30-QECY=j|Z87lr-BGkJ9EwwFviF7Y5=k6G zad;>`1Q*?Of>c?ZROrH|E%#X&PxpUO1bZkK*7ZKQG!UI`Mt&JEIZ&b&Nw-PP&}%g+ zXJC!Oqf=zQl1y77nxm@%vh-^d!AYA#K8^fMvPssS&A%Y4oY-7Fmanp|+ngUmQzfGj zla-84jJB@-gwku;s-3kpTR($(&nO$;k^PL>rew5Ry>H-Z|CGoHCC?-<9-~0KNiZY` zi*(ZjBab5KOPE0gbJU GmEu1*mcd{E literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ItemPickaxe.class b/bin/net/minecraft/src/ItemPickaxe.class new file mode 100644 index 0000000000000000000000000000000000000000..39ffc60b7755aa1fa2c54e5fefacac39289ed4fc GIT binary patch literal 1273 zcmZ{jTTc^F5Xb+g+je`|LKOsoq9~}PC`Cn4LAhV5En=2vst;znY{^QyYj&4Leef&z z74)I-;)@kyqR|iFhceD=i;_swxG6Wq8@DX&JhsmA$O%=-CB6JT1_kT0 z#xi3Ct1{LUf`;JwoQW_qFLtJ zzXkUmu}iMGWoni{U)w1PDE?C~nOfDhwrFCuWBgU3zHim8kV7U%^DE|CRnOoTW^>N5 zDM`XN7c|dsOpQFLW0D?vX<3eG@6byt;?PEsF#X7J-7e9BxSnm%Gsay{Go2-S*Wa0@ zrkd6^KXIsaCVAvW!FJu(%|aJ#t%7s(-|3-0Q~)u4fB%bKpQHpq%a9@tk~V=5S%73_ zAe3rAd_^FW`U2?_*#yoIJA8kH;zZF&6gZ2a*6r^UKR{>RjWrP5Ls#YiQusaO;6C0; z`*=g z8t7Du!3L6QG1R~bwHR*Tq*|04=u(RjDp@Ti$rL3)wr&z+lu1OXITA7Im;|*HQa?ld Qn`X11Af+9lbOBuW0|plzh5!Hn literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ItemRenderer.class b/bin/net/minecraft/src/ItemRenderer.class new file mode 100644 index 0000000000000000000000000000000000000000..b2c7bf261501f898e467b87f5a9d069ea847ef82 GIT binary patch literal 8216 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ItemSaddle.class b/bin/net/minecraft/src/ItemSaddle.class new file mode 100644 index 0000000000000000000000000000000000000000..82bb47eb8b2dd22908c60928b07cdbb710ff6567 GIT binary patch literal 677 zcmZvZ%TC)s7=_OyP6oTC384f^D3^pv5CU0MT~Jj>1*Av;RZ4|`-4L5F1)C}{2zV2C z3nbD?T~uYuLm|#MTo%M5jXnS6JIDXr-T(au;4?ltu<_2u07lG~ml(BSVa&#Rj5~}J zBqk(22&BL0P)A<{thw6!7GK|vJzpSG*P*|8672cyA8PN25x1i}@5o;ZBORR!tjyIz zKdJ^SYqr&XRPD5z)mr2SjYu^Qm-{4poppVx!`8Bq8jMRf)UQVc`#?uec&BlE(r)_e z+DK<&ZY;m_Q=KXo4&Jz!#FUF^ObHZTTj_zm>z0cd6eUV7W=;KDWCSK&*S|;zQSHjmTqWx38(^`LM5J=43eZH^AF6PZGlX8h4kcPe^b9 zL*>FBh_cm1qMTjnB6-aq$HzU#O9fI~X*Nn^i4x`?9}(L`nu=287S<&uEB|3_F5Vz@ zh1?>6sfC>zq%E(Dw1FmK=s01Z3rQC)Bf|ua5n1F{mKnM%l0WpUQer5{ge)&qenY<4 Qb7KE_@S(r4Y3e5{|tEQ^&6CEmC;l zQ{V&g0!oX-10TRQA;jz|Z=`;hot-l?XMA>k|NZ$3z+-IKu;5uRv0!5nS1l~znlv?e zUAAx?Hw>&8SY@#KNfsXO4^KD)^BF3eaT<#)hH~Ba8?PDkXIVtp>`t8Wz0*OT=lelF zp@@~GzTksb1^I94J1H0K0p)~wa3tDA9=0Xg6+w91nF78@MJ$FdlVHg6X?QQolc?j< z*EnRDQGIrUlL@!o%}(=>Z^v?wsv_b%D(-&>J_asathun^7+8046SoZ9c5w%HUDV;Y zXrO7J<>DS3hS~*l%XSP4(@|2TuEbgVA6J7j*zdS_Dy8)!5|y;{8>H@(e3iuDh&V}j zv>o$=3YMlQrV=|0hI%poIm28r;poNU{az;GqanePONn;TugNE&=PTsdjX!a$(WY3m zISiVVjXaHf7c*q5bZgPQM5oiN{Qzq&pF#Vk(r3w56=a}HP2}D&T*Bo^;b)4<##^4D ze?hr4+VFI*>{ZTDdSrU$cj#l3zhYH|^|xN7IfizQO0RV=hM`AiWJaYCbonxYE!_4Yf~b@n2c)@oB$8FYGxLZ1>G30mVGB0m!zjkAQ(VR!Kl$91aZkp5 z2G5kHYhs!~iln2P^pi9SDnnpJ)790Za!xhZd9FknpP{FPTHdJ8`FUhTS4F%`n7qk% zMZ99>W;aU|i6JCXUxi{8%-e>|2IeDkReMM0XgP>^K>ISj+9t8b@YcUDPZh zO?D!!sE_UQms~+RIuwj!Lcs$}$e2{{5RVi*Mnb`qrFo)Y8Z$Cx70h8?Mp8iv3knvo zBx6}Y+VXvhXAJ%IRjpIbbMjeAsbB>ehR%B21u2GhXCrm6%wMN?nHQ-DmS#}sZWo%> z-jJ%J-fzBS&a1X!PB8R2&FZq`lxM}MnOBWG0rG-KfvC`r)O-GGQG9^xw{FS;XDEI+> zlz1b8Ac-?@XXc)B?%c=6=j%IwV>C4=D92`9!G?+oHZ^3irJ$-{o1t*x_>Mef$hQWA z_Lw2p6*JCI8ah5d3%w~1F0H9cp0e--~F0(X`K^nB^a=-jm;9+>R}6rLd`BUx*n)HCf4^PQ|0!^A<8 TCGt;y#47!xk!+3p8I-;Nw?2`R literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ItemSpade.class b/bin/net/minecraft/src/ItemSpade.class new file mode 100644 index 0000000000000000000000000000000000000000..b909044bc99da17c8f643cefb8b17fe85cc592ed GIT binary patch literal 587 zcmZ{h+e*Vg5QhJ4bLb&jkF7meTNSKc*h>YAprTSJ-lPb{t8KC^(KL}H?Ryz71VJCb zhZ1L{=!J%be>XedOm_bH_QDZ0$UEg{L zFGnL`Mb1o|jk)865kuv!=ZUC2aXeuKd=$0Az-pgM_=G|0IGz)oGN`R?cmI|_x$tel zQ0NhUGo1`Y(C0&!ZZaLqowMndBy*-e4J>ix$mn7>5)<>0+v4z^&$xjc@&*iSGL#bj zZlI1W0}V6{Y)jcelcD;T{wYnp{2%T6zRS>{7P`sJ$~UXyfQKPNJ;{=587E&9+X=|K zauO$zkb5>cNF`^&MUw`VrJ0d2vUxhC=xkttbdkRHpwhU2{6STz#b7T;J$>T^(j38n zPJ4#d5|-yl$57}VXy|W957IFdbD+df&4C(2GY47>-Fyc7t)x*VD2ri*_7qmX0EX6r AhX4Qo literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ItemStack.class b/bin/net/minecraft/src/ItemStack.class new file mode 100644 index 0000000000000000000000000000000000000000..a1ad5d9c715fd48843b4f444ed380b9faf07ffb1 GIT binary patch literal 3814 zcmb_fYf}?v6n+*0xv+pBpcqh8w2)9PTB{bd3W!GW3gWF^mSlyMBukS8Mcdl@y|vb_ z{n(G4PTSEi)6Vn<^hb62oOd?_!@}rHKXBf6_dU;Z&UxSN z$!=1_B*}?8f4S``h zMcVo?o}Zo1Oqsa}V=B!z?Q7!_0*v~dCum;L`dU?|3LNNCOI24wt<_xBW|tr7*`bLE zV|v)m%-QqVl%kL1=hBulE@9EoK{B5^iZ!J%$hb_Kjy!AF(zTW@)pSuy+Sx=lW!~3N z+11Tx2j}yqi#_V+-SMnrIg97h#-f=U^l{^|olB<%dA~&WH4U}2Fz)0g^C|=DXJ=GH zgJ=7qH9g}Dr!Bee6+bUrD?a95aBr=v7sC{}m$Mvm!e+!ZjQZIr&xMc0G8GLqInzju z=Io53t!D(z826P)x1=TNd^2KXjA<5LB&9ZP$ZM6}8Dq|?%J7WkxL4A!)6YToaLih; zveT+m>g?=@nRjybq8IX@6q~BH1{!v)PUefGzGd$o4oWrDCyne$Bey`xmq;Nq-o$c} zrgVKUQ$vfF^1S6b&U>{aO;+#a|6I1{Uu4{#&n3-KOM0|Um{o*&?-~n+jxO{BaZks6 zbjm}&h~6L;bv$t2Jk+sMcDqHqCgK?Ou$fnnh-GTw7|`(^-q*1YZ|e8}k92&9k8}*; zV;!I1QwcRIeu0Ug64M)6q34|t;E z6i(|H!xgX`zY88iRNbpOu)>R6q>7srW)P@WTX#?CQkEnQ=!GT~H}mLHe42~uZh z(P4-9sSJrqh&lCWntf=x$K8*H%i^msUqXEXUL#jCzH6-PcH<9MDK38x^3} z&q$S@kro=+q%eJ}j6`{pRbFkOk*EUndw@f{q1>b?wuI_f<#Wa$`W&HH8+RoaTTn%v zb_RAUO>RRSI_T_n#WdhC9Vb(OTCF}zvG(T(m*~U|iF$y!2s1-<9M2m$oi{VY66QS~ zIbQK z5N~%?ep*0Nys??v;FAJc;*Famg6eIF$W2Is?Q#k& zIL#6nBOO1v9_g@0x-CZ50yayjk+gtTsXTJ3cPmQ8B|OihTtE{pvi`^xXt!4SnpFjGttlgjgHf?04m}#wMKEmb2a7} zt}D74W9he-O5Yt#v#3Ryh?7WoxL)>_G;8BBF51SLDqw3l)m literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ItemSword.class b/bin/net/minecraft/src/ItemSword.class new file mode 100644 index 0000000000000000000000000000000000000000..3482a7f0281f3055f659e671d28b2dcda72f6be1 GIT binary patch literal 854 zcmb7CO>fgc6r4@$xN+T(w$MVIKvUW(F%mf<6a)xDB});Ppqz1?B{i*WpX6?!#O62q7cwc5Og8d_&EKQ^u zs%$iUa+HRL0{7d4M5=B~T$lx~RCk(%U0=y~sDkjYH>a2rd!0Rj>OrKQB`Q+q0+0V& zr(h1ElPH<=wC8%7HeS`>R7w#*);$5|-% zBHfi*{>P_jHop5hI0+mqqUB%9G+khAew8C>=U$ySILmuG zjNbC*Dz_Jtyi8b6f`-TWz_nAf_%aswW&}#w8&@XRi*Oj1xa-3}nYrP)pCLSBhLTs` zY@E$d_N<0^@Nx#@L(Z=;u8|EYn$)zZx5DUBjqeBbUy3fXRxGcW?|&03JOpZt%On+7 zZ_$zlR_+*|Q2BF-&2tcCVwK2MT>T4Q$?@hKytcMZUos#K5z?BQ* zuW(^p=*EzkP)%I$1NbAm$6 z^&H!`%0Z#w+l6})Ji|+;Ty|~O@$AC~-b25>>-eiy;P|dp6%fk;9a~n-syOS7B`jy2vH16LxpjfWLVe2-=v*P4`+K!b$6vEHtMsHxfo1Qk zTD##{MVhXP6O;mfy%Dk%xRY(6q!>80Fm$HHWh6649jR?MIF~U0-+7|Q6?fnDDl<|> zSKSM9FFK9DuOB*F0%QNq%FYyJWH&`E{?=2YRcKUmCdYnjrTU(4JIij^D5-dj1IRzM z_AMP3kk`?HP8~hy)}bS|Akd|fl9h0k@3x(G%3Vxy4_8tRZzzMS0zqjPX)p2g3UPXX zMRV{IgxM2oB5oQ@B+ULq6N*WbG`oh4gCCdhhT1Y@(9bFZ{4yBE<*=TH z_;~FsDl!p4DpE;_;KPVh`hqO b5#Hb`GbyCp_MV$4eUdBq-w_<8q(AZ#Z{h>E literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/KeyBinding.class b/bin/net/minecraft/src/KeyBinding.class new file mode 100644 index 0000000000000000000000000000000000000000..4745aff85b1fbe556362073e96f7ad8998e1a247 GIT binary patch literal 347 zcmZWlF;2rk5S+E095yBn22!P=ON@jI3JMSfAf$*0ilFqib3_-CGrC-m@+^u7iGm04 zD8$+nDQI?YRx`7+_xhW=01dQ#c-XH>EN~!jNNByt^{reMM!i~9YC=4mWp7zJ z&-64MS)=syf*_c6Q%)p-288CN(#l>DI=%noL4Qo}{>af#Y5A~P~8 z2n)r9e!RNUTeKpEZMT7CeGm=ag@|YQYStd7dvijC#lmm@mjl<*IBQW z)he-D3Zax3dQbx8N+{4mDdi|li4_f*0cQBX4EzUt>nHvIKJ)_v=6P50fvpM3%EGu z@;oVtuA&}OlB6Xu6qqU+F)c|(l9`&G37X@trpNu0zmeBg=+DOixto;+E`FJTXyd<6^1<7(Lh$~mF$m3=1mbq)hyi~NH;zhg^ z#Pag8+UuwsiCZH5Q8!jL?>^0 zm8%tfbg6xC?`Z{JrOL5v!A+Y3mUQTz6LtTI}OYAI&w}%!H+cj7(dbQt~BwU6#J=U{u$oa@N;?mKpuaA z4>kN!?tX<|EBK9ukEGCV@v(xN8a}~Q1;5j9OXAhIR+|0uX)`B-5!kai;;P6CG_1*w zOwF2U*5>Zb!h(%S!e5%kNNd35UX^Ato&iiwk`G- znb`r`Hmh81B>}}PI1Z~$K&zDD8O!iy*gS)*)XLRy)5^>+f^hpF%TFMhF}-r8E6lV+ z_ART|D*{T!?zK&wj%yivSZ9yV5Boh8&DavSL4&iw@)qbv#vXCKnJn|#-sk_MAxe$A zx|3)0<}{nPePCcf-q%`A-qW2l5!+d%jn_fOVWDvVu^;-K4EvacT}7bWF=Y-)?AQ$1 zdJZ-pBb76y;8J1LX&}+d*vBl#Smle+W!LNDBp}`=3%bD+HL%Hhvv$@U$>|ph=6Q*t zZWyOc*E8qOSl-Mj8EqL68F)wz5@M9G`>cF<7)4h3B|wDE2Pk9rJLPw6I_r2VBcXcu z1M4`dhrgbql7D|-SMuNF&$r5rH#0V)8(F%!waT0vESJ#MP2JCcD(*!Up}$RXyhoN@lj@#e3ba9nH1--mwE0iH$?qy*5G zx($(v2bK`@X(&}fcnLMB;1ZP7z9rP&B$vQbq&uLH)+5AKMFb6`E&O$Wyo45__k20dr9n?>hIilrd%WX6a?=K>Dge2Y-iV2j^ z6l)PBBuZ$Gwk{?@i_s>uG$C2Swpa_Fj3?Fn0`G*zq;tvL3(kBmb-o1A=+-FWqxYPkOq4R zX_VpZ++aD-uwt3@a&#A8Ys@C>eEWv@EVYZat76<8N-~+TuCQFtq?=9lKuG(1rr-|AU?vFokD3Vl)*ppP^?M3WODp9GBM}6L?{Q0{g_HDa?QiIW@hP&z#;jo=h!?w|-C2GQUL&IcOJ$)!) z|BCeoed`HrF;Txr4IQ*A_ldg6)nh`Pta?*nhkdUcY%mT6pcoAeM*NW?9$kA5uICN@4{z(8@uS;t=X&6AbX*Fq>waMShn3Kgm8$vj{zw{fm5gnI-rt|L}ed z&)_Yb#5){W?_&%fQsN_=!V>>m@fV!Ir+60s#0370vm$`!L=B!7DqaxvI48E^yx5IN zu?M=?k16p8(&9-N;si`FiD{8VMqI*-cm3 zKoXZ3-KD?|yyUk^3Zdk(coz``heSw0y$}jU=mI{&q=JLXY@mRABMO2s$Psb!zu#;Q AWB>pF literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/Material.class b/bin/net/minecraft/src/Material.class new file mode 100644 index 0000000000000000000000000000000000000000..0d13514805f745f5bfeea71838e25d32c161613e GIT binary patch literal 1323 zcma)6%Tm-p6g`;-8A5>Jp~y>6L;;oY{eTe_bPydL7L--83n7fbkYJJl*REZ=cCQ<2 z7F0P^et;ikd2TbtDl9CrIOq25bGy&&boI|)-+utOiNRQ*ve1);}jPxy=SmOroG+^!Ni?3oSp|wL-^_ zO$=aAL*MaY6K64KVn|?E;G7f;A760Tor&`z9uc@86+{222r8~^VpOyj1uhAU35*L& z2wWDpB5+lf%S)>T{=Z6Ld1KqLWBSVSrUD)4m8KZ=igm?wub2%eW)F(#Q88^Qrc=eV zqL^+J(~x3%QcPQl=}a-rDW*Tgv`B7(CjWwXjiW)bM$S$gK>Nl(!}W#;NON=pH;E$c zBa1YZ{(3~$!~Cs(b(y2Oe(G+YKsQ9)ofGIrkmFm>Xhlo&DUk0=9jVs`NY{|5Bg?3% z20e*#Nz|M~Mjb8GnKiT~QCl+GUPqp@9W`_&xvnJYPIfz$c)?^=$>-;5%&B|cv(FtLtSY@!W5+VP%m*9X>pL?=F>3!ho3;U3pX G;r?#`FXgEK literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/MaterialLiquid.class b/bin/net/minecraft/src/MaterialLiquid.class new file mode 100644 index 0000000000000000000000000000000000000000..38a818775c1158210290b511197f96c79f86cfd4 GIT binary patch literal 340 zcmZ{ey=nqc5QWdUf5~c8NGAl6PA%LrO-LgM0b^rGk?y))<;uEC?%vH)rLhWF_y9hX zWX4n~nc|$8;p1@jhwTo)Bib=M+(c+bXc59ElNvu6vZ)>!L2qA`)7Gf$j~=YlmukRAK)BDfOV*s7 zTD5RVY18BsCUpKs@PHb3m+`<|5wM1Q-LVsU(EkB#c;RlW;qfWx6|PwY?XU}4^S{qH Q35zc|@0^pQx+I|S3u0+JWB>pF literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/MaterialLogic.class b/bin/net/minecraft/src/MaterialLogic.class new file mode 100644 index 0000000000000000000000000000000000000000..b2574d86c8b3b39b3bc23247b067182e8f64032c GIT binary patch literal 396 zcma)%J5K^Z6ot=aU$}xiN)lu2l)^1-j0GeR612fs*bT!-MwXpqcJNo(P?1pZ1N>2j zJ0upEm@vgTGbi7D%=gcB2jCv96ag+0G!irk@q;e3dn5!mx37e-Z)S?n80$hkua;9~ zU&J)$B+=!>Nh=_1iD3>jHn6%>EWu=wb5liU&Pv9CA{);~$cy~msF~2U^i9PCWKx@A6{;csK i3|Ol;WA$i<-J_M@>ksFfr6+K{)ALf8QK{-g!EDy?XL*Y$>{?j9@JAsXy0n1?&q_K zvSXf9;$+&5>Pk;H;3J{)to(pYzpBgEp=IX?xmY(pR6eTbwp7|2Z6?A-TefAvutUrt<4aC8^2T0`w`3 nWD!j_W+b|UUD1Gcr3SPSef;9WvV03JY}(s`YYEp3m(W@REa*qA literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/MathHelper.class b/bin/net/minecraft/src/MathHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..1133a97b709eb99af51ea4c48e009ac1975f34d8 GIT binary patch literal 1199 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 IXX&>80Tr__D*ylh literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/Minecraft.class b/bin/net/minecraft/src/Minecraft.class new file mode 100644 index 0000000000000000000000000000000000000000..8269f6d59d6dad2eccdb7ad6efc4e98dcfec4a7c GIT binary patch literal 26081 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 DD!cNh literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/MinecraftError.class b/bin/net/minecraft/src/MinecraftError.class new file mode 100644 index 0000000000000000000000000000000000000000..7289b294aa061473ef1b1caaab75ce5594f8e3bd GIT binary patch literal 219 zcmY*TI|{-;5Pg%c#)yTrpq*N{rH$B#R%)ZzZ{jMEWCLsBy{rTa58$E1Nx;Gxc*Fb5 zFz?Uv1z?JH02_gimXDC&%@UmybAmk_9SF`MKPp0JooKZ!vq+h}j8ayDU0#}4t&)m# zH*Cj7o{FV0xtUz#O@?sb68c&dBKz6mYGUyp=Hpddq*9+ny^aAaeyJ+r<}-{QvtG>s Ucl-d|Yujh^SOzZ;8aypDzegZ03;+NC literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ModelBase.class b/bin/net/minecraft/src/ModelBase.class new file mode 100644 index 0000000000000000000000000000000000000000..482f8abbaef3fb010ce62cbb2db25cc2a37992b0 GIT binary patch literal 357 zcmaivyH3PF3`MUu*@O-Iq(g{;ZlNG04MGB>RJ;U;ev&oOtgz(*mR zfGB8iVR^2P@7N!oZ|?w(u$3XgB*iqvj4<-g+SE7B){ea=P(etJwb9{(5Y6`=2=TdH zFky0`4PUKSCA)i7Hlies&4L|aFfY1j>6zznYl8~fnp0CZET-9=UAu}4-A;`!#jZJ1 zo)4GmNez)8CF~du`AUAMoO%qocUAt&5vDDfH_Fucb-Cm!#Czz;8Gvkz7=5WCsl-b1 rhP-yW4$wb%1-*3OKyo7TH=1Gd2i+DWZHd2F>oxoz%LE(Ad=KL<%*s9M literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ModelBiped.class b/bin/net/minecraft/src/ModelBiped.class new file mode 100644 index 0000000000000000000000000000000000000000..de309a725d4c8ac209cd19614cefae3b30ff3045 GIT binary patch literal 2030 zcmah~OK)366#gc@@ontu*cqDGZS$=2a2$v!fhJ9wcbmlElr~KRX(?dGH;FCBE;lZZ zT_wZ<38_1lh#$a$iaaV1G%VPlcE=70v0}vzHf#{zjP1k@R3y^OnRC8x&Y5q{9sl_E z*WUpc#-;~ROsZkZg8@vNnDM~CYy&-)jDvfC@jZdccUcW{Dll(M(xukFS3^U__`_?z8{>(`PmJ-8hZ737V&XLuuM0G!GI#9sf}KnY zbS3h3F}9V-+iOm8y%^he)?$l=w4GbB^J&|$oiPF5A^tr(=~VbLh4crN*ivR=vpDT+ z30NANu-8k=5>QqJi%W%KvY094r}G;*dt1PBy>QoAv*$8u6Td#!j5_;ZHu-MS z!iyMD!v!_GB+&6cQYhG}g=g`cg`2o#;SJojFsPO>H9W6|b82`KZ&`RjSwm{Lh%pPJ z7!hbxiDS8Bej~P+EN)tO8>}ORq=_{PY1kIlm1hGixb-RZ=pzW6d0IHRO>%uC9#^us zlj-zK;eBeMw2H^$TC6~oSXT>~e33vE*Nm-<;}m$$;wCT5QIgtP&{ewTYF+H6|EiKl zTd;F?Y;NLOEAS%J1sm7tFx%11-PT$eTWAdH_XvPKj0&}QR7F-_%K{LVn)Lx)Ey@@!40Vi7fJ;2gdeDj zRo;m1!xjAo#;VJ;kNRC^+<{w~@`N-4C)9s<4-Lxa^>(Mcd+=y*ptFSbGUBa4ODk0( zcxwrPKtS*BBf}?6uWaPzmRa82R|}4m!G41MG9Vjeqj?1O%O+oSEfusRS{l1}M$Pi% zF_x6g)ht&zMGL_#vXS*vWuQX_t5Q_JA%a8Y458zskgviyl7AhicwZ;^tTm$vE$Bgz zA6E#I^snGFKbkXm2d(%JZMctie1;BuiB5dWj(W^4_z7YBhHm_U9wE>xB>F@rB4QBz z;yj{a9s^>T9Vhr@j+J}iBX*(5tc%fbcTdm=)(72tIK|4{$~aBKS26q*LspEIiV><9 zUTqv5sh6Dtz7;+`6)ikW2j7SYpNMm8-%&R3EE_n%pB$lHjB>Z#q5v#OsCID&4cVIC zMVq$kwcSoz$9B+Gij-IFyHGKISaxJ(XX+ukeA({oq4R8(9xG*OUzk9tfHf$3x;1M3 z2-Q+X$)3Z_LPr^@y#Cc4gnMMK+CcVYWnU__3!Ud*f%Q^AG1_}%gp7VN2v_yXS}(Ef zM}khkPeDgvQLYe0>%};woIspiavM`9V4D3ggHI{#7r2BUa2dZ~4u4`^c(6c;$H}k5 F#6K;@j0^w( literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ModelCreeper.class b/bin/net/minecraft/src/ModelCreeper.class new file mode 100644 index 0000000000000000000000000000000000000000..bb357f8dafb1266920cfa8c5a4810b0ab0ed5842 GIT binary patch literal 1536 zcmah}-EJF27(G*uy|KNH*IN>|jftB$1;>S$#Aypn+aykK>n15xK|tGH>6fL|J!!gW9k->s|@&J&(b6I00Z5H*yIk`+sN9W~}esn>uJm_I>>xFl;xfr8a z(rK40T$W`u_cY2MSF~A{%Z0DUVpzedT>i0Ck}K8Z-xkUi)&%4o<<$kIHhtAC-fj45 zC-81}i=AMnxYe$!)-C1NRiJ_;fe}spLU{qRYVG=$bS`U^)my^A+>a>{Lf}Z?(H#x6$@j{oR)82*loR z-wSqBrJ=J@X1KLLsn1j}*YrO3Y`lio1+p*Mho-IDm_*jbyQtW>ifcAb>z`BFOly$2ML;ooEN+_zG!!gA@3UdEes{e!~R*;(`CeBY(!@{uf!nry(+!5(P|)CFI0) zJ`2IOaJF}#xX-I$vFmyvH*+Q})8TYvA1-H>IylZCJ_r(nAUOz}L69=R^PNm{cJR_9 zcxlEtf0iBd>^aY;coA=64Rh?zXW5_PTV5(X#iypRbjSQXjGH)Y;xyw#&OOn5jFaxE z=1g-B8cJ%&ov0l~ofo31q4ej&PMX&96n=qXmN?WRR&fp=;XIoBw-+23{2QM8AGl2# Awg3PC literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ModelMinecart.class b/bin/net/minecraft/src/ModelMinecart.class new file mode 100644 index 0000000000000000000000000000000000000000..2ce2e1ea97012ccf108550985a716bcd6930f406 GIT binary patch literal 1354 zcmah}OHUI~6#j1KaZ4HKP$;ibo+70n)he(65iudD0b{@ziHTug1}K)6Ob23Ixlp$5 zT(~hYF>W;xNF<6Y6Lq6**}5|E4;Z7Kd)umAfSvTrJ?DJiJ&$|ty#M*~HGp9Z2T+T4 zj*be1&>4UaUF!ZFK&*}l(amvOJ@+nnP(ezMI{x6p7qN<|dG8|fgCGzfKLON%htnIjtJHnukrn6~pj6sR@ zUS&`(5Sbx3MWjm`YYUEh#ahUaMRz5Kp&~XZe*#@K>sgC8r>*rOs3z}tGda)l(z)#U z>~hATECRE+4R_I*Op9GYGW@j2$a1}bRcq5SP>%+Nw*RDRpblYyJz-z~2?Hl_ilJKU zkjPls<;1k*tr$q+w1G213<}YVp~JT>rNIz6B>04tr=+!5DkZAbE!&>R-J+623sR}n zq_CR*)OF2BVf{g*c*aS}C-m zMv-g;d^g~SM()q?U9h;xU%|HxCH?}6vIpOsVg`1h&I(8cLa#b%^dAaHrs@Y%I z%&Z$V{bx;cj1Q?YP%`3anXRZ0AuSTsDtDk49FXMnyr=y z{$x2pl>}{mtHo1o0q1thpWO>i+NLaqb`*u26xc3j=tnX1Vn)S`i-qu`D7-|Gp^6M8 z8LHSuK%PS~RJjd9EH!DBOFbE?Dq8)?P&Hwn%TsS6c^j=Hb*S`Ifg?(1-cNUaguW9O zQHePiSS8OIs7D&CWN}Gli~LI~v&_n%E4Q*$N`;9$MH# zMA;LxvS(;xduV5G(ZN2Ulcua0k;1IOqS^CPCh@{yhJxKo+c1?O9_FV07-3-!^JIg* zgPOaXJ^l4n)Zl}tp=-rDxw2+m)UO!;6?=;YiiYtW^G){l^w-Y)6 MK)0UBj`+~_8`*3T*8l(j literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ModelPig.class b/bin/net/minecraft/src/ModelPig.class new file mode 100644 index 0000000000000000000000000000000000000000..e8c9906b7515357626304d8b43c437eb4627efbb GIT binary patch literal 296 zcmZ{ey-ve06ot>tf8CaLW&**Gb|51QVnM2e1QiIx?j#1eY7=A<-irx|p%2i9LOmXk z7{J5z^|{}t>)rR)7Qi_s3L%CmMk&UE`4$^wY3pUZfs+g{iZbTQI~5b zQNHkV_0aaNG7Iao@h#!?oqai5>32Osgag50W4dBPy>j}wE8bjH{9uBke}?zHu3i6X zYC)V|a}$mc@SFYw;C95U316p7g?BceCc{t22YW%vsz`!dO3oYEFT+o~aq@>TprObP H$OKS(qBJyd literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ModelQuadruped.class b/bin/net/minecraft/src/ModelQuadruped.class new file mode 100644 index 0000000000000000000000000000000000000000..4e6c62fc9468465c1d9c2e77e41dd5fc7f9b14dd GIT binary patch literal 1481 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ModelSheep.class b/bin/net/minecraft/src/ModelSheep.class new file mode 100644 index 0000000000000000000000000000000000000000..fbb8d41c69374d620653c51b5ffeec07882740d5 GIT binary patch literal 593 zcmZ{i&2G~`5Xb+UIJOgS$Yv?Dw1Irkf|CQeRN~MIMO3mBDXkzyMI4=YQC+2WXiT^q6PLpvr z1BWUKRH71%wK$$*lVb}nI9|f#Xk(M1wj?ym!O&RZen0brWOk+khJxGobO*Hdvrdkc zPv+)eN$CHgcIXcLAb1;pr6yg^^ZNb8L1L=XVVwGD7)S5oFiHv3{_OBk9DGBQ?zIX% z7)^?pg<36QV|wh(zj8>9({?Aa4-U=q8<~I G!|FX};CiP3 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ModelSheepFur.class b/bin/net/minecraft/src/ModelSheepFur.class new file mode 100644 index 0000000000000000000000000000000000000000..c6e453b6510e9abad6e067c8437f3613a4b63f9b GIT binary patch literal 935 zcmZ{jT~8B16o%hzx82fi=`e+US)>&|+NxB(L+N0G;*hVxMb zaA62%a8d2m0JXPIvYdVMRu(R)wH}4X)FQ)@iF#WG`~gv&^=%<`>#jZZ%y@3-7{@gQ6J6m{cc{5#8&93;p53Z??3(DB!WOo~ zrgh9vIXbzH}SjvF$(Ddm=wMJY>|J>9Oqw1UDZ3qE!Y({^`-sUTEp)aBl2Y$D^ z#z;fZ5XLBJnNDt=e&8$gFWE#4CUk5e4j03Cg#=!M;T=Zs0UY0u#1HEFNgltD!f&LN QC^AYKS-OWJ`37+AFQ!kk;s5{u literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ModelSkeleton.class b/bin/net/minecraft/src/ModelSkeleton.class new file mode 100644 index 0000000000000000000000000000000000000000..21df225c29a27547f5d622ae7ad6a10370ed598a GIT binary patch literal 797 zcmZ`%%Wl&^6g`uS9~Ak+Y|WGNt&A|%Sni6_O7*l6k^mTdR{ zz5sTtk!XuRf=aOBqY!tT1_&s!G@g6!Ip@CS$Ink+09?go1G6}$(yn z;QJI-zInd?c63`%(Ni_@E%G(;Df2XMt&MJV9cOebF;uQ6X_DVyDEli982GI$77R{1 zNyXjmVOPleQFlNdV?EoJJrN|z@a_<5u>MpGM4qLqPon3M1rLW97E_ToheYnlsGm2t zWUpCZJ0gvR6jH&?S~!Pg3+LfmSV6$~nA$~)kV58$5WRXj~|Ep2HRdf}=EOA(cK)KLD4G*hlUD$bI|D}RB?q~Xp7!(2osNB hp${85X7CCQUeko$5bqsL=OfMM8_kE|2&t8D^cT?3qO1S_ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ModelSpider.class b/bin/net/minecraft/src/ModelSpider.class new file mode 100644 index 0000000000000000000000000000000000000000..3757cb2a478a4a533cd823b2e4d5c2ba24874b71 GIT binary patch literal 2785 zcmai0OKcNY6g|(L#IZfW<01Cg5C|a&goGr7U&1d52@NqM0TO=U@5B>hvde823>)%5xm^;JDInw*TZMaDu~0r8gFM z#My+>yJz-&h0LJzJP15edRtx(`EUxSm7a$Wzg7B3r}Q$>cjKF1nKQ&mDj%ONb``b*jfsug$-2!$0(;AjtP|<-+D&m+_F@=PRPKKK~Y~iq#!!{1vIdpO8=CFgqP7Zs~r=l0M zl4U%5M<$+4c8tV}7gbCnsp2As6p|jKRa`|Y_%SX^G2Q|-)HDy~T1jL{~Y3bzS@RUI9 zQ`SRwI%H;M%{)EdsT@5Wh0MvxT}Wjq#wQD?r;X80FT5Xu`%RhPM$3_UEk|m%9I4}S zq^8S}`YuOmy&S3ga-;_!M|uV{y2+8AI>kMJ>tj?=1+J==+YtVJT3}Dhr*KVZYdp8% zz6GV_CKSDbu1c+nuZDSexaN1)UbwDT&BH78Znu>Ci1O)Gd})<@*>a!1_PT#jtEp1# zC$V2w$-7$fk+*7#{g(GKN3ZFYd4Ti*UDJblP}3?ZY;{1d;H6YQsn$uYv-UByt}lP8 zx`xy>W!^QGxB8@ah}5An?~vtPrVf)jT;?6NycfIT+@(Qkqs-f|yvx)PQb)?XBbK)w zd~)GYl1IzTqn5dpe9M?MID+%8`g5_S^9Ng_@XmB~_@wxgOB&_%JEnzDm#dMBD`gLTpt z+euq&06iF{B_E?jpQ95niGIvdRq$zO-G+OBwxCX%@Oim%MPHSr2Fkob=5_j-Zr*hP z!!vga^_1y`$4Y9bq_0g|AY^zJ^KdC)ln{|clc+S&8@j9X#%{0l_g1Hks!3~h-SEya zoVH+%;Z>K&5RnXRGHgTptA?eu$%t)alTky?!eoQql&((uC+}dLzCJzInC|vjCB3<% z=C^AbN@}WIYbmK!bB)bf$?Og`lHD>cNwcL|K-So7siw&qn=RFX+>wc!SZ(;6j#y~U zhBXrUZ4|PQLxv?(ZPKuiLq;U5w#lf49Fpg(Hb=d3q0 zo8&nOIV8_nZv<_U=OiS_rI-1h{OuWpiv6^+hiEs)unq_4m*^n9&cjq0p%;0S{sbJN z-{-?9;s~x{3@>9Gui+@(BK89u$2?BpOPs{_n843;O8kM-!i_V+z**6XbF}x*i!odf z(};@~F)7}_lz0aT@e%zuxQl7=6_VlyTok_{CH_L%<-#SGhK#EYGp;sdUAvKU9l)$> U0+(G$Ogn}X?AmSOPUec>Aj~vMeTKI zx+KDP6D1ipWZYzkJg^)qm|mJ#*K+Dlb}s+_^|y8Y^zIV(}5%*f3P2abCqm^r;wu&X5$S-Y}e+ zzGwt>8KWw0VNAtsjLW#A;x2TRlo(erDZG2a+{YM0zrzE)N$XWT!whuatLn$5G4!30 zU$EBrDnr75V>z`Y&#igfr#rCX=_Rz(Bi>l!9x3Bn4k?o_4ih&~5q-*5tscyKO@?gg zjCp15ta6WgQw#(Dp)jbPkd}wSu22{bDRJ{?#_{a(N%Bituj=~9(o^WAw*$0+39-p$ zDC(z^(b-Yh1^Yk_!v(UD5Nsz)zl1DNSs5}E${iL4hjM8t-I0#$qOGuvcCEwSLu67` zRS}s-);3#klt4MY192*?Q`TZ>S&Q4|#tsBs`4b<7vX!P(Zt=rbRE0xy#e-hLvTu?O1X+7d1R6+D`{7F;{{j1ReI)!jZkXjki uW)x9+iwfot!xG|n1r>G5zD5#nk-~f8@1YCdq2UL*@e4hqY(MpA!=>LvFW-Ft literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/MouseHelper.class b/bin/net/minecraft/src/MouseHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..b62ac20fed3b5f57bee32d32156780d6d910990f GIT binary patch literal 2090 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/NBTBase.class b/bin/net/minecraft/src/NBTBase.class new file mode 100644 index 0000000000000000000000000000000000000000..97463064d04b366e7432977a3718d112696473ef GIT binary patch literal 2445 zcmaJ@Yf~F#6n-|O?6NFSmICEkXtfOi38G>xSmjzNkd!8Xv{br;g@(%plTBM}z0Bx0 z{ifrL{sCwFw9aTN;`r4We~zCW$LDO41{^|W&OYy+_gtQH-pl5%e}DS}z?=9?#{gng zh~Son`D)xoTt!018N_rd7euotqa}H~UyWtlkgYyH!vhT|4O<$vHSB2E)!=AIYuMB9p@xix ztO{2}PC>=Cy|2KW-Lf89ksZs~jKtkc%Gn%NP&txvQtoxygnAYg1jp0swt~9Zlw(J8 zyK8nPVXf^@bM{dt<=P2rb3E<1w&P|MG>7s5Q|ZWrskB21 z4;e0FTkFSsn~wWVJ4IJ@({>a4d(22eW8}y88DW1e)N>O5nz(Bvx96-qpQnmPbjcQ6 zB84PJEAE+fY&WvY@{$>A!;NG!$w+i8F=l0LcEb>&QES&0wh9JLWO-_Y8oy7a5QCvp z%**w!E=eAKw__XmW^{(ePG_!5->gkZte{b>Pgra{p3Y^G_Ebt%)F_nQFNOwQ!|MiK z#h?PHcx+%F+!SpmHj8;Copl4#xM|=cylY?>BL?2abrnwxJjKTb-VyaD_|)L(xvHSO zT%fUims~o^O~)UkGwvxorX9|f4L+N8xQbi-^u{V1uRxPgzH?PFEOf~?@H^rgZZ805t zaX%b0Eat8+8p^feUkxl-PG-JjRfY?RDc)#D4fFSpf-3(6=1qg4X}OOyU*)?ro^&TH z2D^Dh5Adp25RgN_k%e5wdS3(CjhDlOll zCP=(S4G+gLjUp$-_vRttjKm)zO8olp&j|bp&8+wVs*F7<1Dpmb^9C5@SVh1XS20G_ zI41a%7?)`1GYR*SUsya9-&6P1jr>|Qp$e0j;=4H5#0p|h_y9o#BW>TK`VeQ9pQF-i z`xWY3A15>gjMf)^hN`|2nNCswTKQ~4HQM%@6}o-U#bSNM4nk|g{O8jkdW$#3Aj zLh{>0VcXry(E0(Y1CYUYFhyY;poWUxXQ-7%=R45E3S=pCrl?1Vse72N*H2afrK{9+ zX5!^k=*!=9SLpa{>yLZ_U;9s4VOblngTM?WPPt1-Qno2s$`i`xlrM{YIYb@%bJjaV zJ<%jK5YG`CiA}_2;(1~Vv6a|HY$tXQJBb&FUBqtUMNcX9bO<%f)X&{Az%?DjEO%dm z3%J4^wT^4p;f%|j^OU>h3$FcFwEBjNDZQ?RF`|}!tbd07`F-&_QR=^6sDFiH`4#Jz zy(lpzC^slKDRY!t6zRz#W!b#snJ;xG_PlqK+jU zw;8g{V<~pI+Z7C~%8-8Hc#eF@FjQLEWzcGVi#+*F#}ixK!=?xtyy=ofD^-<$>|@|a z(ctZx?@8gwkYT2@xzCTd<@nYsF8Ov>cDk~nz{cxOw&+O5_d*@Z6g3dMb&gv&&#ilB zRJ|=^f8U6V3;_w_SB-WM7pYamDF{m-grMQQifzu3M!O=`*=VT zWTgKgKM*tyo6C2O+@n({c{G`6n%QNkbUak8tuqv(43UhEcjO<4M9nzZ2Dhaj9P4;S zTe9i<2i*>XS@%2<)Lb5hf@c3YnO}d5Sj9KoYq=sU#>C3yGWsk@@|dWmJ^=o{55L{q z7dEX}pD77ZIGjvx`Zv6$y9TFt~ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/NBTTagByteArray.class b/bin/net/minecraft/src/NBTTagByteArray.class new file mode 100644 index 0000000000000000000000000000000000000000..11d7ff7b0c91bbb8b469d5b74e890a4311147216 GIT binary patch literal 1342 zcmaJ>YflqF6g^WO+m;1Nd5Juv0$PevpP&|0S|v6?_yExl#1BImVWI3cyHm9P#2?`Y zO*95#_yPVXk>1#t_9=2d-hLE@I{K+VOM3c^Kx@I=3c7TwcOYe(sgT7{We80(B`Z(aM2yCcw-o~|b>OLr$*_vV;v-K+W~wd|O3 z`&RQCOq4&p?X0QLhK)`eadcR?W#cwxZDf(KaL2}7+_P~X3EnX8c{IKy{@@*Zb|Ci^TUe6% zt)q9j3$zTo+0RTD<+bp{+@EtY8Kw@Ucicm7Uo|>VCtH>!?fEqe&pBEvp0{7E2-ro} zReqr?gFta!J~evY%u$#6m2|huDwwPX<}Q}eIwchaon|Y#{s16;wcqA0opP@AijpcZrV5^ zp>1V|fhQX94E^B~1JBHSN8~J~3oVT4L@SA7Ff2Vt5^d7VHR1+lGT#t6IYLVW;r0lv z5uE2pGHWmT(MJpN@kQd=kAVi;B3F}ZXyyoQ0*jfEpHY_5AZ%|YOfno8goP_CWQg`^ z6DcQ5E_li(KOj S$l)0lNHfKAl;<1#-~0oywJ9S2 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/NBTTagCompound.class b/bin/net/minecraft/src/NBTTagCompound.class new file mode 100644 index 0000000000000000000000000000000000000000..ffbdd5c4a111e7fbbfba5dc958171ceb60e9fd8c GIT binary patch literal 5234 zcmb7H`ClC68UN1i!m!J5hd=_MAtA|fB$!|lD;gCH2IOdkk`k)zuuNdXGD~*{3~8&q zw1>UyY0~?ohgxkhNMg13Vek9CZENp;z)#cfGc(H`%;G0M>^t+m^E}_@ex7%q{NIJg z0UXAELkMC~#hDO%SPY^AFDu5&@rq*Hfjf)QjaSO@DiyC5!q*hzwYWef`s{S5k3+m!bgMT{FsW5 z3o{M4-6BMdM~t#ecJ3c!XpEo5S3J!b8@N}ykKZn!yuDGQu z9*-Hi>233g=1~=&WeBJByIXxatAI8MR?dT#H(vTF0$e&yElcKy{rrk$LA9fqbDj|q>8neku>`xb2VIp zYZX+aJJT^eInCyw;c9fMcv!>d@Oc%>8Xm!U4J&w5!zwN)*y3rg)VhX?cud6?G(3(c zG<*@)YWNbqtl=1XHGBmN8or9JY4|$6p`hLqhH6Rzigw>ruq_{roq|I2Ed_P?h?s;z z^27$RBn5@$$qi)LNhn0$R?v`7mJ<%4`i_Fed{k?lK?uLAp&tVpzK8E?_yK;X;Yawf zhM(Z48h(bKYxo6zso_`nwE}4P4SuWPcaoLc^P#6wbt8M3Od51dX!t$;!1=G))_tPp=J!k;w!8BZywOlL>0Wh8Vf&c<71A9DQk4y{cWBH5=IrKZ3)&W2Hv zhOlR0;esBUH#o;?Q;BPj#qM}4W<+FAG1oVxdD7?X2pom34x6)>Q@W8=Ws4g$PP585 zwb;=DroG9olA(!HlttBwFg^|=2uvTzYWu}L!%61O z<_(nygzY&N2-~AM5Vi+vAZ*W0&xXzESP*uGUvY%j89i!xOrw;xjGdomD#&W=sjutJ zqsu4QI7TJA6e!HRP*ScFsRItCqNusH

JKSp2Ea95|tqawA9`aJ&?=FnGCfPbxEH zx(;$>x|1Z3jGl3BOT8id1%KsNWjpU|iKwJ|&8$9S@D>-*t>aN^nr}%0 zD*h%#_)i5*>B@?l3-KAly>vNXJ$i&y$xG_{=;noLaAG8j0?ho=l4D`!a*; zVmS4FOgATEMzYCa>|C!##z_{V+zdU)$1~_XV&y_~>#^7{iu6!UpK zZs1-xU&?2I&jT&X2&|$&;UFwjFwnLNRl!+Q^QB1PybBKQZG9A>rAtq@`d3lxgJAn0 z*bPv*mZA*h{7+GV9sG~62UTd{-;Dj(j4pl+!uJfyRCI5}job#P?omE_aFeS@geLfT z5_S~P6i{5rK-+ngo}(dh%J(v=Q|`y{rAtqd))BuIg?!&a5%pAJ8-+GdXd`w}5m$8Z z8E7gA(xMd^+^+ZP_!RH?%R~3`q1Z+h+DE&&_Tgr(;;g;YTXd`tZCcw}&!fUoC)dv{ z^h7I}I0RkRD^Xyx*4nHWQ8`w>f+`|x@$1;c9yg?6^2tf(8?zJhupZ1YCAnh2fb9l;CM5VHNyFxIq! z=MZ7LH^LDjTu0tf9M6N$IM%j;9YomajnGAeZt}hmV|fso1Ys8uc6%fA5aA~Bp1`<^ zus#v?c(e8~5hQzFgj-$KTirY_Z)vSR3pKEWfdAg}2&c=*Db+!i(~zCNt?*r9<@!~0 zsJM+Sz5(q A9ThjvgDu$$%BAC1^$m(UZUvLI`hu{Rg;wrt2L zOm7Go%rU%f8T%f{F?=EoDLpNUQyW4S=Rh_rqy51g$dhSEAHil2b0Lqp;n|rPo}$Vt zaxfd0vHzhQ%u_a|3SZ?AbBK7eFkRGM7qux9HRyk=C^Ubcl9l8VIw%4s?6LBI%5Mc&$a6%&*!n=s+fEZv6kVq+ozfP{9T7!AkW!R-N3HRptwa)p2O50v>Chg_K$&S~PEr2EkMKbg zje!S0z>hMnGtAMjnaE=!_OsgH-(ifinu2*<0xG`q#$)q zzSl+Hs~4l;1*R?ql%>x~Mtj<tt*!U?|c6e`2-1pb9qDh1nH9zy1+Olx>Zkin~V=7 zKQpd?Y0>BaT;(~5D?Ck^bIfO~X;bAX`hYLIMe#FiWQw*JnNJLo-bZ+f$F$D!p5lFu H|66|m#`{v%rUtg8-TLvLJm|^9gFnC@ zWt@dTkeJxR%8WdmShID@5bydk!H^$% zQjDU-R0KAk&NUJUKC`*o^`#P0g$$ME@SZ<#%k!-sS9~Csk!tH6nf{X_mdf*GXrjhY zcnmxxerc<}wc|)_#HK5h{k$Yc8mPmNQvO5*o^%@Rv0+emd#N6v)bVybuDcc9gMfT;S4c) zOZ_Flv=2p-Zl{!)M$g~D-snI}P}F6t2x(+stWGsT49(c5rEx%ToFrMwhsgaW$nFT} qXQ4n+Jxral_BCQJ6n7`d)9naFikjD;ta-7b@w!JWQK3Ybf$|U1K4?$? literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/NBTTagFloat.class b/bin/net/minecraft/src/NBTTagFloat.class new file mode 100644 index 0000000000000000000000000000000000000000..0daf4deeacf40343255e829fb205ffb7dfe992ae GIT binary patch literal 1243 zcmaJ=T~pIQ6g^u?)24y)ji{gqNGVGEMy=yRs~wp^c%Xw1J}v1|0wLQ;wkZF^AK`<} z=s57;5Aa7h-c5ppkKrZRz4x4Z&z`&c=kM`v0L!SFFmR)Q9BvjdiK!xP;r0-vW(~|4 zxXWN}dy=b7?sWwNYcS+qxxTAjGxU@fHW{*Y*`iEo)%C?%cYjL+O}^z(BwKFi{J^Kc zRieq;b?GbNtB_&5yt>N|xa~^&4Oe`S`RO=}j5*kjQU+iD;Fh72PTNTC|&vGC*(T z7ufd**hgOzndqC1fF}AAc!lCoM#C#JKan}*^rMG3eaI5JfD)}s7$CH6GoSE^iM$XeKi$};Zoar0W$A~_jqBD$QEKz+uIbG y7~25o%s8$kxH}2X)FO}33w%3=pQ1BPP%J~tXY@CT@dVHDl%mtL&(mI4nfV714HL=$ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/NBTTagInt.class b/bin/net/minecraft/src/NBTTagInt.class new file mode 100644 index 0000000000000000000000000000000000000000..34bb6909d68f1cb01bc45567b1d4f7e632c51143 GIT binary patch literal 1233 zcmaJ=TT|0O6#ll9rlg_ej)Or6)74ptIp|*ooRLbFA9!nN%+-I1ULfLzyh8yya%8o+U zK8ejRb*Z<`BdTHaSQTgeLyPzdFtl#5m&9;PJitR59wX`Z z_^zNyxLm#W)HaH1{ascY!_5D2DAP+a==qS|dVT1WqZ4fteJ#3`V-L_@{RQ?t z1`g8KL?-@bW1xv*3a^qq_Gox@`X@4{oFe*&Gl(pq2T-DO2}6X|Y35U2VX^uHnM3qt za7s*)jZo523==p@$@G&S#n^dzb@32chBJ8+`UKG@d*}?~m`JO>nl_oqeWkFBYD{DR vv}Y1mQrxW+XX+x4&<}h&ho7Myr^uEe=2QBc#CVKnctX}P-Sc$UQEvYOp|TIl literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/NBTTagList.class b/bin/net/minecraft/src/NBTTagList.class new file mode 100644 index 0000000000000000000000000000000000000000..9ea521f68a36f774bbbc5d2ed33a2e2d220d2ba3 GIT binary patch literal 2129 zcmaJ?OH&kA6#nkaNW;(qDr!JPl!wEhj)@qJC<%iQC*ffNkr-o=%ScJund&EeNtWeVSW#AfTUYEyx&p4h56^>_O=dPc-sg0hknzgDK5ibYlj4rNB>$RG3 zdg801vu0f13oR7rK5%qthp%HheHFY-S610EF6FsQkL2d5VUto5n~~kT@TzH;KxD$5J-2fhEgGv9-u$RGG6&aiMf) z@~=*3QkO~sb}!UHhAk}>r^_>XmB5aQuWd%PB1_|Qe8CW@9(F?DI$@8$)MMCFJ&J9y zs#hF#Nl}{x*DP}t8XYyv*-T-tuYKHGU=7^|ukYKw+Vvj#D^9JweYGA=^Rcw}{3ZBfhea#44d+I%!_dj`1b63<y9W>cJpc-FLmbON%9O*YV+K=MY{mf$gc@UUys#n5xuj}q$1zkdj#M1*L7 zXn+>jXhkm$AtT=lvK-^XaGM-8=Q1&#qE<6fy{W(W`us`N9tu*Vb(%Auh8mG?NaFw{ z6WO5+98?gf8)#9uQ5TQo=*h0f=o1P*q4ip-BSmCw0=0uo4kfVgC`pvR??&0psGTCl z9wL`3dl~UQqV2~h_cw`MP%_4UqgxSVe;r6xJNI#(PHyYHIeg0lq zfp1&A;0%+Ox@$b3Dn`z9S>O7r1jF!|wWk)1CDc{d%P^D#gpyGITDr(hf@~CU5BF(+ zjO0J$2ZE+ybM@9yd$bD_4+k?wBfF@Sfd{&?RfhR6PpG0JkGumBix~x5+OmT=hcinBepH&0T7#1${cUf%=)Bnd|mY$PAZ;15PH;8sw+R=rg)uhvG=mGjF zKfu0*z%Tg0T6g?e6CYcO|HzI_Ob6vp{0J9X zrDegw5AdTbZ_f-eJjzX{``&Zz#>{pa`>fEBEoFfdg>4%dsA#!L}6aC4Yka|Y%O z++i@o9T})C-suSj<}l<|J>OF=8T!hLTMXH{Y>}t5?)hS)x4$idCg1LmC0lm1fAC}A zDbeKZy7ZOsRmd<=Uf<;h-1emXiYva^Q{A4bYOwkGlPkK)lYVGmfuaV2x6W|K&vG07 z3Dsx|)jaG{VydggkXO=Cf#Y3p{u&Rdj*$~(8k_&LU>H8Jp6W&QN6JPOYqc9%z@aoS5{IFnMND9%jbq{= z9?>irO=6$#2^x&c)jLn^&@EIvn$Z|d@1kf19_t>TG0a7YB0)X>K<L(5jac9^nbtzM$gkLOGn5uoXH#0$B90XqBD$PJgNFx(qyLp z3x#D=V=M!pJrlT^;BF;2Qx|!Re&Fjl{0#LtNwy3zSLoLy#uGfpQ?ky|J5O&N<@R5N Ct`(U8 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/NBTTagString.class b/bin/net/minecraft/src/NBTTagString.class new file mode 100644 index 0000000000000000000000000000000000000000..05b4c4d6bd7f55e9bd9e2140b772c112e29adfdb GIT binary patch literal 1449 zcmaJ>TTc@~6#k}Mw)7%UE`k>X1c6qq_gnD-RU!$(0~KR@8rrceYRvw!SCOF*~;*&{^~< zH0@onUA5Y%Z7RPcHyvt*X4}yQkY3layz@lXLpuw3fxg$ityM`@i=L~Ms{?`KEwt_B zA4)CP8oJ)l1%ppKdQ(<)ZF_ED;SwYJN>&bFhYw|8rt23z+UepxNqCZqn<#S#NGAs0<)Qb^-i3Q42{CiiQ#>^Q0_odv(zs4<;?gat+( z)#`e8yjkUO*VE(DalF^6Vm$R*xSYZjvtLc&8cwq^i=L-xE$dH|-tsCzZ#S;TaU;dX z-VzvdmCn~#`LZux>U`jr^HGihqemJn%7E$g?GxUs!a%5E&6n3Aq%(Wk{Z6oUVb7kH zmROhQeOPS)%XEde3EajV0U_AZn%q(Ba9QeSw%+0?&@ycHxuZsLcgNG-dr@{5iP0>$}y8x7g=(Jb*}=~f&SOf`Xp zb{Y}Q0icFfUfLkh!3G*AJ+t8;o3=%G4F4gKjlA%xfwC$+1w|@azBy&hK}c% z&d=!jVLZfOJPf0YYZ{#l)x%I}YL6qs50u0o3NZ^k76zyQ1~EjSVKl?tgh=MH9})Y4 z?idd98X~`8exP?w755R09)@RgUtkH4;$iqG;U^++LFr^GL9+`w?C6WXjKnxKzffQWOXkuJ2osPE92ewlKuKW?M zj4|D@Vd1NqxG=i)HyPu(GYufdgh}Rm-22_{oO8eX^Y_eKeuyLyZ$tHzqsi--hAc}q1HXy*;=)?dj}$AyHyUlh0P3k zCR(ny{x==dT*>6?u9vG3&S~0Dyj-j4z=1lTfj6=R4l;^r%~Isn{J`; zAI7YSEI8HP1&|@dN7ozersLkLNWrOpSj*BPK@I6`hoLP3nccEA#U8q*N3(Xo*y3pUVRNx%#1s(*6 zC?t|3l@yx~lgdScPH{!xJo5mgP4F8)Qur(ShJ*=3YW|rt?I?u>ohH~xiqWmnE)474L2;Daz!9k! zXDJ8UJ5VN9xpSK+Mwb7pH_$_Sm^;Yd`uZfbF!#f~{lSAg*gvX2AU5S|jzCSs)G=a8RKt>Y{Tb2Ysw}>xOB_|8D(x2os=?_WPC39)STxOEA((#v>-OF+ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/NibbleArray.class b/bin/net/minecraft/src/NibbleArray.class new file mode 100644 index 0000000000000000000000000000000000000000..9b815ff8f08ff6e2e25c30d1b7d3aeb0878ef7f3 GIT binary patch literal 741 zcmZvY&uSA<7{$+>+?kud&BQuw(>5)-N>XTqLX;w+6@;MHMPn9rHA%)YHBDtQm6}D! zD->My1+sA?D1wMf7e0+oP(1fezzS~epYPn?cg}ZzU48oj;4W6Pknl1{VM$?GVMRdp z{n!_<4)+9{`{6K*AFx<$)jHfBpY{WR;S%9wO0b!gVVF97d#1dPj^4;viYMZ^51VC z`|tcb6v}zna0DvDAa0y6MlbST$Bj|cYg~IySOblLKRjx@=pF|>+R~zfTO3t#bb*p? z#FNdlLYixaw{7Yc_l5dbi29lwe@}mb^~n%fU8fFml1#x+3b{F3C#l)2VYmLn>EF)L zCr=_zKJgr|ry_T6&CQ)xTy;KOpEji@<+y2coirWKxrAH)49l~3+~Q=0;{2kID~wgf23E0)b+oZ*B4%{NT}CW3 nTZy@ogm<_LHY#YJpHOlJnfg1hW5nC0gAFV9P`_R@#y9@}n8a-3 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/NoiseGenerator.class b/bin/net/minecraft/src/NoiseGenerator.class new file mode 100644 index 0000000000000000000000000000000000000000..157de097a012f13fa81576544df2090ac748bfa2 GIT binary patch literal 220 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 E3y_-)5&!@I literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/OSMap.class b/bin/net/minecraft/src/OSMap.class new file mode 100644 index 0000000000000000000000000000000000000000..63fd4e24275815fd664f5925cc8ce705df2ef240 GIT binary patch literal 727 zcmaJ2lI3R(ow1jM#^Sg8+vnrv3xy4jWeX#Gb% zS3yOjKfninl6Ynb1`&mwd+)h(&g{K+=KIgDX8`Wuri}%x*l3|`!N#h^XidR&0~ZzO zD04}f%LX_A3EkO^pqPX%f_VI1ZU1uDJ%fq?!vnFIoj-7pUJi|IH>pUZK? zjJe}SGiKe(rT=D6zMXB^UQ(ofFboyX9(mlkbtI3agGDq9Ty?OCYYrUL9b8A(!4`S~ zYl`AVGJfUmCtl&d9)>|Q8Kh~FI_N9fwlX)+6==ml?oL^fpURiHo29;6{zhPFe#&Tk z6!^J7`)~3fE~X=o%^uHM@AUeIyZ_=n5U8@(;vI|pAIV74Nf^thoE=ALWJx5`kdrk| z!g!LLFse?apJdqJ^(^qtSe=>!BaMsWVP=U@hhETEw?9LiG7vaNTPu?lm{|Tz{eeoE z9e#m!_Rao?$_Mr7pHS6D@1Z{{p+Q)kLzA#JhZdnx!c*w5(BuoLv9wKe>9=qjcj)ip z5uVU%Wi9tvE=smZzItUA6?JMFR4r1qOkI=8^HjE|U8TB>0oIuTR$#s`c-r2dhP^bo HtKq^g`Xz}X literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/OSMapIsom.class b/bin/net/minecraft/src/OSMapIsom.class new file mode 100644 index 0000000000000000000000000000000000000000..7dab6ad0a8f1beffef698493768f00fb19539f50 GIT binary patch literal 747 zcmah{U279T6g{)aW;feSQfq9}rk_^Rq>2GS1ucST0>!p@h}4HZO*X4;-4EH1)_>%4 z6;w*;5AeaCB%WD9g9r*c_ug~ooY{Nt%#UB^mjE8&u7w%QTUbD&3=4~8MoS7d4J<3L zqRgr?YX;U0YzUZ9awz@GO$4-~U4hb$7kcSafkL};C{TPJja`A-o)@|YSuk?rS90Vt zW9~TqgjpG;(s{oxKTNi)VU)#=+xHZ&Iv8?iH;ICK$MQtlsG?@zrj1S9vSFiQ<2G70 zw$K(>Qk1SQ!?)doXqY+g`kw2LdvP4aHad#7t;`*?1e&3nb_15>#PUtrO=72e^(%qd z=}CjpvFoG)%YO@cVHOOAsyH@&G8w~0yK}VnFYXfooxNut1y=t@G@^Lyh0@RG$?+OV zFX;8{ZxCk;1g_DR@?-%f z=B}teQOL9X@6awUtS=~hR$uWe^y1(XiZ63$5b9HC5|*a0Olair3`LYt=c_5Pv`w_= zw{Ra1=pW)4UeIfKEst3)a<)mndU<6kD%8}ds!}yaU7gD7R4!1vNOc1}G?@YBVZJta O+Ww!0z0|p@;l^)036U-U literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/OpenGlCapsChecker.class b/bin/net/minecraft/src/OpenGlCapsChecker.class new file mode 100644 index 0000000000000000000000000000000000000000..030397e063d8ee9fb0ae16aca4a4c1abb23d8df9 GIT binary patch literal 483 zcma)2yH3ME5S&d&OpGB3j{rdw5fljpE-64rV2LyqkpNMoiR|Mr7aTkI!K2}eXpoRV z6np?5g;)oW5NWt#_HJ%w_io-lUf%$0VMRv)Gdjwslu*U2hB*!MgyN10RI*FRH(RHK z2`fC4gtDyyd6*7d8J#$;&rDTZNO8G$wBHfJPh%AZBTJW{ABSlq;T40_}Zp~P7HA{li|F=o=n$O@G5 TFUUP1fB*1Dp7k`C%VGKxsv~kl literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/PanelCrashReport.class b/bin/net/minecraft/src/PanelCrashReport.class new file mode 100644 index 0000000000000000000000000000000000000000..fc5f548a228927ba599f7f9d9d5bf4ddebd79166 GIT binary patch literal 4716 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/Path.class b/bin/net/minecraft/src/Path.class new file mode 100644 index 0000000000000000000000000000000000000000..b78ff40631679f6c3c26449fb84be096a312fd5c GIT binary patch literal 1966 zcmah}U2{`a6kR7dH#bSsmI7%Av8BZ#X%ZR;UnQ-8d_+66fCfRzRC}9TN=llPn_DeB zs4vd==nKp!45PzCb;bvsq14e4-+l7u_yE+kZ-VWpQzw)2vG+b_ueJ6*_xBe+KLv0U zC&Ji*q=~^0I+2ng9fA)T6Z?V~3L}7Q82fP`OixaRgW^79;;{bYQ^3R#6Gs)o3zmE1 zV!cvx8w$PG#%s2lov+mFl4D(Wvkj+|z4$UDhR(|qwct;n4eUWV`6C&OQG(3WI1K- zDh)w$c7DOV?P)Seaf|gur(_o@qC-gBLvz-LRs>OWDnjBwu7G0-On;j8RHXJG5Zn*Y5fmx1Y z-7eJ^s7q?&vF4p4V;gRIY4QZ#Qf^h~QvH(U%-Yg;1=8tc=Y!4c6Op_Xb>bWZaiN=I zjJrehE6&?ft5B&fjbGtgfj{M6f&P(pg&iC_;OFRv=C1<=t#RyZ-SCKe@lK^5!?=(3 zUl6#u)m%mJx71^3{{2tCMxU(p5-*<+i$CKR!%qmMGLnrZ*{6$XnO0z=QdhZ{)YF9V z1mW}#OyKjNq!8vh$fp@1u{QJ|g1u99;uIL$vS;4meJN)wn^cdYV9O;V33?dw=`QK!yH3w^aEZlW_gB$Pm=Kgv{J3Io^s49RU$W$ zVa8#dc!*p=m-U_FLbWHCH)1+&&~^7d0?X(YYa(tG<3@sm~yO` zG#Td-69SMr+Ts{yF2w5{~G=1$V zAKcn899qUUFT}{@gYlq*gkokaME(0?=ANbkhb1Br4;148Asp4C%jk`TTHaXG8!X0y zp4Xs24bS#3fgCm~NZrI+lXB`l$gk8vHJ(fT>9U*IP0p^7h2!vief5pLmIM#@vkBJ>;)O6q%#9ZEgN z?&i8vrmk(FHMWm#sm=!>AC3V6YWC-T&hjB?Cnx4|DJ|sBL+O@qL;^jukEBn Jzvj93{skC_bV2|C literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/PathEntity.class b/bin/net/minecraft/src/PathEntity.class new file mode 100644 index 0000000000000000000000000000000000000000..909088accc16ad0f1ffe3b574bc1fc9880ce0b9b GIT binary patch literal 1004 zcmaJF8ga8*MD*JMb_a9zU< zENNKAP4y8~$?b{^DIIBK!pMekiy_oXJESwngn*8DnBNf2exC2hYZQo|8>#_4C=O9!{m@yDV%)l&SVca&bD%YHW zJGg6LO=i|5vSA>PdkhPctsN>e#H4oa&~$3Kr(RSN6$*ua8-^skHG|$)fUF^3=xbJ5 zL#ra)p;ZOlEY49pPrD7m6lHwWS&|evRL|FX4NOAn!bJRY86pg;^4}XR73Ko9@6uZ`A literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/PathPoint.class b/bin/net/minecraft/src/PathPoint.class new file mode 100644 index 0000000000000000000000000000000000000000..8c18215515c7260f9d05e8491452e03b51504a22 GIT binary patch literal 1590 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/PlayerControllerCreative.class b/bin/net/minecraft/src/PlayerControllerCreative.class new file mode 100644 index 0000000000000000000000000000000000000000..f212e2c423baad69311509ed1d421590d6f27003 GIT binary patch literal 1470 zcmah}+fEZv6kTUpI!rs|CUUc20a0j`Dqaw|s1%TD3&a9OeHz*$3`}Rp%mBe>|G+=+ zg%=;x)DSf>zM1$*#;E&D%gxr1Np`#US!eD0`SJVnR{+CU2%-@^3L4O>-~##-T*M`z z_A3}bOhFudGA=8)g250HxGLkCf)Iv+sKs@K#0|l4Q^qYB!wi8j-PGL)hG>7<=T0FWiJ<=MtF%ZFFFn!JoA9oS{BV*14_13bz-v6@x5(!NK6`7bwLtA9H6@+c6n> ztC3EduI}zG7}_qkJ>GEE)p8pdZL>@lcGj#dBR^$pJF`nu9`7@Tuw_26Y$Kms)67+J z8mY$ZAw1Gr%Us&bYc3&!S!>JA@flsj+F5d(v`p8w41?QAn`^GV%?H=DZB0cJ&ZxMJ z5gB(>jABg2xQYqfRdEmZWlX9_VoJs|!@0_OrCeU{l94f^;sIu5q*Oe_BZk&W^rT_s zHdLgM5pL&H%!_}W=wgUfqW>2+L(l18232=b<|238jMqd)7453Lcf2>$O5NP%rfb=| z)XFO3kvcdoH<_4{|Mt0E0@6S8oTk=BfAU{Bu-myB$s~%&N?L6sAblO2DA^3kmVk1pIDI1y!M9Kkn z(60zv^1UTl%Da?E8)>w3Bt@Zm%7qGuLe(E79rVfC8?4BvXbq0xV>0`Ah_gopd_uq{L*)06FnG+r?Lm?806rzepAO-1e8#_( z#>woge|vFuE`-nGb3%8%1{d&z%syX(Cvj1@d_i=+q~ePzzNDZgIg;Oz&L)TNRiMNw z)_oQ8V+v+Z(e2bT`hY>=-3sb*d1KT$J%wG65MDctf}PKf#j_(;s++(z@(MI(Yp-b^ z)lHiWGg+&^jd)H!Wy$`M{gz>OW=zXS=JkHNvye}A7B{zBW=2mJx)jXPooVS%aEob~ z_B{$(+B}Z;Oflcwc6Wt;Yx zOXBhpu?ni%gmHbruu_g24jP&4sF6|-Y>UNW?eyEMxUDCLd-R+mOU0KdE}1ry!w&rv zA(@2pM!~SlTuf^~!Ckj^758Y^Dqx#{?bxBATfj~MyTGWm&KU9@H#-Un7Eh;f!%-w* zL`7(4nznRyr}YBQESl-ev1}$`QuUUZ2;##=+OV_M9prZB4I?M1GNY7u&P*A3al=Cqg2tKld(8pSYT*nVIJcs8s{189V@B)6U z;YGZp;a(yB32tckDSoEn=NewdFEqS@6B>Sr6DoeC;n(<$hF9@h6~EK)dr{{PcumD0 zHT+2y@4`t9I!-EBHr=Y}X~*jE|H(W(6tj(tb48iX(^(WRX^+?an65=vZ2xVU*mZmw zMsDYdwl_*SV~V-b71ZXlwr-nQt4}|rz?VrfPwrR=J-tvWlnSctLBqNF3L+ki+^XQ| ztm3KAROyM8>LB|{{S>yxuyxiFo$ZB^rp)jv{*^^H-pk@Y1oiaxo|&RWI3Rg8KKi)L~-Zk}Pin47hPwn$*4c8nb^5IrYl z7IJJHdk)89)+mK$^J6TM32B0b{j9nQ79RJI>qwx?x}Q~z41;wzd;9oc1qH=;7*|QbH;5~#LJV5@BHhBrW(|DOD{2J;fa2M&q zef4w0a{?~eTp?@V=DZ2azenT%h*s1vKBTV$q68v8nM1Nrh{gpxb z8~y!vdi)>!YW^pV<6n3uZsI;g;S*CL8b)yLO{`aLqF=?ae`A%enbA2;DmVKcX8a_A z`^3=Nb5BCTK)^HR!D zP)g}r$|>nqBbzBXLQ1`q$FX7_-z}B|q{xo5Y`R%CiOrnNFR#k%!mN~FEUGca`+Nq= N_(zC>1aUqj{|7Y~en9{L literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/PositionTextureVertex.class b/bin/net/minecraft/src/PositionTextureVertex.class new file mode 100644 index 0000000000000000000000000000000000000000..332bab41f87a49b7c7239e72f88124fc440dcb5c GIT binary patch literal 861 zcma)4UvJV-6#rc)?dUq0Y@-7eoq&TH>BAm;aM1@F;=`gQF2p^SdNo~GYf4%C5_}g; zBp6Nn0DdUr??R_BG{!!hbMMLd{kiA#$Iq|d0X)Q^i8>l4inw9mrpmWWl+i5nbX$cx zDjXQNE3k1XgEUT#Jc0U2BvbbyjAW4bZ&P=Y1ny7{>?1#fWTgkmn-cI zFq8>R(ObX!-_0vK%{;*BrK<+>RXj}sIS7@Q=17t2f|%o-~dY%^Zxtq%h_bJc0h+Oy8=3xuuNr3DI~ zmY6D|i2`Gp{U%X6*v+sll&Ax2enauhX|)&7KK=&jYyt(9*j@&BLL!Y-+gYIG-2V)H z4&7dFTbu=z21tbwH32;QMm|}D?(Mc75AsP#}aLm5>H+Db3}0C z#)S$l#I-+4oRd`W14Y6NnaRA*OwOFgr@MOqtC+RHF`h;WKWtc-;P`1%Fv&5+G0pLd zA?HQnK>0yyTLhvdBZj$pAeGzk0~vpEk0Z~my)CLTq}KevSAQ55O5dno+Gnt8;eSaD z>qOq^b(%8T6U{bdm|)oaitWAV) zxNQ-%+}-A(^i=g@Ml**Vp3}5_ltwl#Et1!NCw_9He18_>Ce%@$(Z)#13-E zGt7LfdktsEzaNlcG*0!D-*#*9p9mGwmduhq(@aaMKEXewSt+}PBCVK%VUR4Zr=+`J zk`2M3OoradFz5m7@-0}oat-5(B8DvaY+O4?*CicmX=6l5bQ`47q~h`o%nI2VxN(7z zm+&0ix`1U~QjHPQQltd+ERavZ%w^YU-x$USc|FNI@iZ}0t~|h6CcD9amM6m`@&ZMp Ilru2)476OR{r~^~ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RecipesArmor.class b/bin/net/minecraft/src/RecipesArmor.class new file mode 100644 index 0000000000000000000000000000000000000000..9834a348a9f3902aa1881c6fa0885a98e316d8b6 GIT binary patch literal 1948 zcmZ{k+gB4;6vn@knPieMAQwR?Xaz5YSWO$Nwt`lTMQOQMV`(DRI!O-6z$8P5f!=E` z_-FXyOP`z7YL{KG`rQAhUA^snW)fKtSJwLF>~p^J%|82F{`mLVHh}YZm_!`s44gOc zW*l$DaUp>*OcxXQ>ft})(WOfjxAZZM`9?=s$F%rIsdbBuY$ zO~(6-TZ|mzHsb@v0^>u@BX6K!;7$_9u$aVMe3ZmJd~D#pK$j;=_Nu&T`M&h(YXbWh z7iX5O4J++f^-4PDdv?7tABE1Q=>&*F9 zX=T=0ZMx*#b+06+Y_{wP{jPX5*E`J%FmVc}1^U`9r+fDjDd&7X&peVhF^<%(nXNVM zm>KjLpidQ1GEs&!v4o0=D#K&41|FFB7T+28-oy{s6ga$h%Fgl%9M~(k>bRv9 zfoREb{i?uVn@v>`Iwty(?a`JUdXZ#`hDny7{dfIo&#em_Y@_Ank<2LDR?V%Kn-i|P z4z)Y0(y2**Mp}MVdUSq+I9s)BvJ0b}FQwDcUTgX!18rbrt~!=4TRuq@hBiUabWtOL zNtLrvabVKn$jVyFBf(KHkx*gaG1Tsw zsS@(t>U(}4$k($<^cqlUH!Npe&M#5@$Fk!)o`sf%>OZpgEbO|yREySy7dZ2xMAV6# z*m+&UOEM2CZ*g~YBMYo_8v|c?| z(0ijfVl3#0atHNB3B<5Blu<8hW8q|_rH)?^OU1Wf6f|PIpf!*nmj;q#&_D-GXu!-B zj0U|{G|&`vDbYS9>QocbA~T4wt( z?gg#k%$#;k@7Fon*2|A^nOpt3em^su`5i|uL{I*PV}-%!QyizVQk`f#)~{zMukQS> zI6;}6%00m=o4WY%zh|2f;v-HgqS6{wTOCIy5*R=Sj>E)RitbXoNMlv>;0&qzp#P1C U_y+?9;^I%-_)D$f4P|upf4|q^Hvj+t literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RecipesCrafting.class b/bin/net/minecraft/src/RecipesCrafting.class new file mode 100644 index 0000000000000000000000000000000000000000..4de1d773bc8f231bd3c87cbc68607673cdeb7284 GIT binary patch literal 916 zcmah{U2hUW6g{)BA8falVzsSpwYXZL#jaYlCKw+iF=>L5xWWmLXkCc2yqn9{__cqe;c$egZ@VP{%N zr;{$fJC|=f+|e3m`$-ha+E9jjO|{7x5jE&ljH0CfA&NT<8HzUYn4<@&J`J=f%oFD5 zv__VZ)i;m9zK}!R6B?snif{o}2o?1+MK!XYwthgXA0c&&wDl8uJ(V;3dOBzNbzONz z*8K*{ubW56_+Md9=rjMPJLl-LL^sFkmy|kzJ`px1!e`~?kfy?PdS3?K!^B5eRPZ5_Chw8g6n_7;=x@z>S|Uq$|}|44Hb^5e)N9HxMrdep^H@?Y2iJ zs@>`A3dikSnm>sc&(Gq#;0j;e-r)Fkv4QOGdEvxBbDY99(GW?&Z0J(^{X+Zr}t zaNN;w7xy%5N^>7Ijt3eZVvC`ed}|^rhQ;K)%!NT|heMCl^ca?>h?k&kk}~aM#&_~J z7S6J-AJ~!Y#3Ewg$F?^Rt$iY{)T_-Y7$ROu=C$L6&Jn|`Kjf*}|ECccHvc7eT)XYp6Jk!wMNNSc=BQug zNP#*HI@xpN6=`L(X4g-^-qVJmKsGl%Op{%}d9o7vjZRavzN>vk${Hbkf{dR3f~=J; zD-*#ZS@^dy?)< W#2nI;ZWb*{{4F@ixIlgii$4LZ4C_?@ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RecipesIngots.class b/bin/net/minecraft/src/RecipesIngots.class new file mode 100644 index 0000000000000000000000000000000000000000..655c51e4fa5ebd508c782e017029522b8f7c56f2 GIT binary patch literal 1201 zcmZuxT~E_s6n@^eTh~%x4g{tX#361&n1YHj@Pi>{2_ME9l7*|TE3>e*q;#0*t#|$l zZ@iYM7!1T~f08lkc?&~j&63ln=REH@&pGeuzW+Kn0x*q56(TOn7?yEGK?l+bG>mX` zm7`IPu5px6(2J~$oQyFU*Hv_4JcbDsdE8KO6O-IC6~iqVw;4J-%e1$xl5aJ37<$*& zmo|-EBVRY1T7I>%X_VpKlP!^o$KZzvG$tB1g7UTQ(e{W_bmku2c67b8FeyZe`Kkre|7(E#cAlr07Flx)c9HX8t!0P!(H6dFvC%SqgjsTI699$hW>V?^L5wUV(4p+ z@L4fj3=agoaD{wY>2zAg0}T)HNXEQ|A{Kb)F#}6847F$YuUQ7A!bLoB>s5wi$TS0u zbUzAB)b)>f10g)Fm}qK{PWLUV-a1qAT!%pm0t>d$a2+ZoS6e6*c8AAR`OWqG9d_}B z;TfiHd31c&s5h# zWO7AXu2|qwbo~?54?(31WL2sIsw~lu773}7dIyLiLXp?vTq^ew>d`xR{F#~*C%>U% z}>L`{;@ViW1#aikk>G(Rlg`;(A$5O8RG<3%E%suIwX0ZBPS=9-^O+ zBIBI%MquxMzvUtYaFK(M$;$Mv5~GnQ7$MnD>CGqKD|F!!MHL7?A+R5KNgWIZM~D6Z Df@dO> literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RecipesTools.class b/bin/net/minecraft/src/RecipesTools.class new file mode 100644 index 0000000000000000000000000000000000000000..31fd54e3acb918540767046075e9952b4d333dae GIT binary patch literal 1981 zcmZ{lTUQ%Z6vzK3Gs#Sn3FT5~5v))w1!@~jYpbQLS}GOgQaeZ!@zP;3Ku9u!lY!Q2 zz2N;){R(~Y#TQxDx^%(v!6(0wE^m9EnFJQ#%E~YM?DOAy_Sxs0$?yOCyb0h8zDXg2 za~jTTxS-<+9Z%|bO2Y;aSFWNep0|F~OK*Ofjx7o@ZQT zn2c%03yc}YHAbFMV7$nfWxT|AnehtaRmOFO#hBwdYz;*XP6~sVPhkOzJX12@;FsKmVS#k08w;H3F45H7l4A!XN}MaX zrQm{qGB7wJppJM&M_}K0$#o`Is&kG%ZOv84ld_7%tMa*&tAAkJb%Jb_M7D3u2icl$ zXGhqgCr?gh9(#lt%iHkQ6EVd&FPHQ>TCu*`T3zJVGeV5~4! z88;X=8LucGc+0*qL?s&)~G`#D+&!w`TP`l z8<8xI!WO-#e4VU%m^8yMGPlBL5QcT_b*E&n_#(A!9sZF;%eQR0`qaZ!tFq!u%~PWX zMh3UN0~#7?bi5W&PX&5+Z}N^SOIy*nRFpqJiX8G7Z$=tEae zT6C!8FQvpO2s{diQRrkr^bg&G7}7QnD=3K#C|^0e*U2bWn;qrRY8>>XM>vE~YNJUy2S%(F0P{BSpO=((0naQq(6!4@%JyDe5=P zyEyti^-th5u?Y%Mfl8ku;^aMp$HJcCH)u%E><#67_s|bGs^m8Bpb}c$xk=@;+OG0w zQ!U=XBwOvOdOg>j`xOIcj_&+PFyj++euLaEsvsh7TD&Vz|xXDTzB0AE%MW-8Amu z6ZTA}@hLuIYla=O2IdUR^ZGu+=LR0|(~@{7&=-1ceapM=M3EQzErI@(m6;7^$0;`) zf30jqVclPw6zGk4(~;NgBF$GfJU1dz@t`qCY9IsJ8EYZJcqKG$+sSXP~qKe;1d|_e% zizb#BY%H5tVR*#wCBs(?Uo$*ra2Vdid4YlMy1Bgq!zVjb{ajR4!ZlHYXJQr05^E+V zux_Hxp)X*A`ae>nVzlDOl8H@z+rTmvXPaoUG19%k|NAF!wwrRh5xARl$XhfSn=}MN zCmfvO@VK}^m5#a<1wNlQ9c2(rhk-9Jc!G+{CXuYwoo3+I4g~jt2HUMCL0DT10+@*SHRKXM@s zIh1dr71g;TqusqaHoyXxUzUVA)ybnX+L<;^POAn_1PU+HPEM<9)~Yusi-Z$~%$BR3 z6Rmq8M(G1#(3hu&el*j{qQO&7!FK}!*GXNPi@V}gLpV=Ob%Q-2?;*p#I18W#Z z-n@A;^UchgnNNA?ohP0K@Ge#B!Vz5O!1XQ^;5sJ`;|2$AbfL&xd`K`K7I2e*o1GZN zEiPP!j|dnOaH|8ixlo4No%ks3aN=XQ)7EwkU~9ShHJ5CBT)VU6drY97~=v?i~2b^`1Z+%P45UL zL$PRDp|&d-%{C0glhJTG)SGR{q{9t+XOe7Ga1Nv*(L`$~6IEE8hkl2(P1-V(e`_KY z?$7KGQ9@0g6Q%@{h=*L6zEC7J+#SE15>$tRW+HYChTc0wlzme?8P9H3C=9OLuV8DV zK#J<3);os=dZOulp`HXW#gUZBS)neNN9@*QHl97UvAw;$qeB?E6RA*SUvwlpl;&xF zuKvf$rjD)1b1Xk2uW1`oi(Sc%xJa%2 zJBo@1CEeLjxPM1z(0EPF_CP9~h;*b=1Ew*ie7z{R zGLKOVYC55OCc9lp!#N6ky7>WO?1>pWJ3Bi%IEs=B%=5c?do$5&OG|6(Sq`_1#4|04 zcq|!>w6+QpIqWhIo5z;rlR5jCA&_$BJYn9GvuF&D`mH!IZP${Fn7(jzr-stuXh&Rv z$!(rnEis{?7coY{d{daQA0LcHG+c^*QmCF!V=^+MT|)>x8p0rbRKP#rA07CvhVS9~ z8h(J+H2e@h((q&agb|ra#~KpDM`MYG)L=BpVO!UlH5z`3A35+Z8vYeObKvJ1eu39D z{2O8#{vB^<_z&UxpLl~I(vXd&)1i2B^7djcLbclTMp`= zlq%3vp|WYJNPt~AG+d4=G*zsensO<(rZiQesZwg8%6L*O5a1Eu6;Lj~r~I0#z#9$~ z(3CEiO2I5tiyW#-Q;Su#rk1E04MXS`)6gV?c&~zfHis}|r|qsGYj(7OS%-Rg*%JDl@@UlFFOg zIvM0W@#J&{v;{lmVpUI{>`0~OWj^CxPg`y>Q|3u|`WQp*!9?g-G`&9_ z9X@23U~ejG%5sP-qx8@)ZK*^my`EA$l#$N1r$fUmIeUgekqnDlC=%HpO=qJc2jbbj zi|Li(AakXeEo~9fQVyRhHE2B+)!v#kEzOPA1dDjbP%^Ag6znwIN^E;{FiSgR`dLJS zmx!;mL@1Np7Z3OEPGt_V__lLr(3sBL;bRDv!%XZYCYD3K#2Cu51Y@8NxYCjD}z56tZ>$THxK0-o;IAH|^nnE4y*o(1{?*U8TvMC%zKX+_W=O#t0 zrHDe}y!GR7jl;d;+;dmupyg09&9Bs;5Kar=;hzmjq$ba=aqphMf>ZE}!`tZeI~SB)t$8_76ZXcUK#j0@xy!z3m1p(u40+sdNg*hxbg{lo6 zt;y?M+*Iyv@{z1sNRv%|^C^~G=GNR3sByc!wE_Q4*L&-Z_K=;%&jglMdU9A6@VoCg zj`vl10^UG*@2ETA>m4l(l#B+-MsrwR>2c4%YO}Fk-6STu)Fd`}Sa>oq@BzQp+vE@U z2z>#s_nf0mUMjSLikv+2K~W+&ft7~U>cv+DhVO5|QqC)3r`Jod2mw^l_lvOt)mY2f z2Gn3HYOx)4=qBwEEMuFsoN;juow9jSjWC*J$sM~Q~-@?G2eTap-HXAMzs!`R3k1_o3I&aYO@>#XLz{Wfx`}D3JVJh zq~no~16dis?&xYh02`CZsJIa2R1E5%$Nl;Q>OF-8p2ETjteT9n4X#T5c^PODsr5OW zx53Tr)!Z&_(&)=o@3AQDbOBgf$^2Qo} zjo)_y1Ac#Ft-sb^aRNvDfyO$2onJqJ_f)#MU2BW@>vCvpTR4E*kA`_UXRTJMYHtbzj+?$6+sP_EnbC?z(R*hZcYF4UDqZuwD{wt}qvE z#zH4s?zD%=+lQ^;=7oNjAhv~dPq?|tTx>TM)j_?&5YNao7A*pW&Hf457=JTdu%^cpo0em3ReL@h$CYzFA$P3h{pB z!w1xIW*`X%4F!Ki8{J*_7HOP3ai!_4f-l0sq5^fsQ}PR=cvNk0SXtV^8&~OAu~IL} zp|jG#)cNilub6{j(8cc#es|`u%RubThuAZdLXJ!$+-~NbX zv}s<}BTR{%r-y}@rRlWz($Z4HrA%yw-;MHTUg_g3VZe>dW*_23{xG|Zn^*#GX3-mE zQM-lZ?<34%W6Wl^GFWe8VBXG9{3!0k9e9X8vp&w*bIfbs#a;ZV;1hhazgyYyNxpf1 zN-e>0bw2K4*1A{i#i!L_+@}&ap{~UJ>J~hp?!klVBu=UcJfvR4!|KQQjQR~etNw(~ zsW$gvWQKLG|H9HG-GajrgXznI%)<8ob{O5B6sT z5+1PEuR0Cav|jR`3c$CRXI@QgBWnGb` zNSdJaIb7WAD$`v)>`%qG$u?=MNegH~?5SU6G#CLb;LPD5$qyYznS~_klIg@>CkdGM srGh`ut-|-QiNDdcvGVW1PiUf_@~!4)MiRH9;BD;jQsoblz5v($4dWYEZ~y=R literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderArrow.class b/bin/net/minecraft/src/RenderArrow.class new file mode 100644 index 0000000000000000000000000000000000000000..ca8067fd2f32730988d005394d4e76863b2f18d8 GIT binary patch literal 2049 zcmaJ?O>Em_7=FGu&5!N2shh;<*0FXQTbgbS-A|XTTi14J_Cq_mwcFVEo0~X^GuO@> zryaLxLfj_x0Fw|B2S7qXT!5)W98iyF2PAGBKwLO;MhG$9&uM6;7M$e$zW4F_pXalm z{{8KD08XMV;s{QMFfQUS&WJdR2`=%1YA?w4@cKYhFz=w<)LgXV5lq(F0ljeZJ3S73t#zc_p) zFzM}^+AD#Lfu z)2g0#5Cnw^_BGuq=nlia|Bka2LR_%xPF~L$JbR?+>SYoVTJn=;?-cbaQLpqO87cN5Uo3v*3bj zaPwuNO3QCk4;fa?)vP?#zjp_^wY57=q$-&+R+FIq=Hx&_Gwas z<%_ymdI5f75Ww*Ez$J#Q$v8J4OYvWuPf!jasuliH2)eo3q6r9l;~s85O`dl}Wxt`W{*t ztsSXvz`mpn!zjss2XaXSB1xvgen?OOUo@ro)*&>ghqZ)%EfH92pkw$60`v>=wWx+G zOG>CH$x;JhLPYvWeD&@~l1%VdkWY)km?ULnr8Cnh#H5H=zVoiqWo5cTZA!P4i74Hf zo_0)$h;0_VN+c6ilm>b!Mf6=YT+GDOnDqWf=u=}#tkOVyMU7Q5aW&pdt*ElZD^sKV z(?CM$<9df0<;$)Wg*+SRJ`poerm zj|_IHgmkxT$cqs2+C-?AcjD}`XOH>VlMM`U=J-73{6KsGLd2jjeMCfwH6xHQgHBvV z7v|87c|@>?9%xYL@z#rbWK~BD4-v;2aqK-L@B#Yp33lOg>_!9q*uY+Vj{*EhRQ?J3 z@GJJ?Hypqpc#+9C$OdqT9Y>O#!VsH6isdlOZsRbsaD+X?2zyLV%MUTiKE+Y?1w9nM z#&Oob3HB6Y>}Q;0za!%VPWd`8>XUHB7r|LyFD5{*MGQfBMg{Z+aX5&SAP7ERkX(KL zUcg`Yh5ZSWj>;IlxSMBdgxVL$T}cgZAeBt`69F}(hSxE?bha?rAOuIg)ZlgjI+IRVCqgGuje10Pq=&A&i4}0Op+(B8wyLV8xtXcQw1%3N!At5IYO0zl7qkp+ZmJqQWn8?*2&TNo<7%3k>Z)tZ z?AbLdTb4J~F!2Bl*!ud3mB7H{*}tx#u4NQc@6z8w)$cGS zHNLSLz_X@-q8ZDV%&%#hT{*uVIkHq2hb{0XC5JZGHPpJudvpfgtT$o`eyNSe9e;>P z= z?$`nPr-voaY6vjR%{A4tmMyPr(u~{PfF`#zN75w@s0J3P1Bdxx701IuhUHF)irY9 zm^g8w7Mn!gPpoOE0!tDZ4BT~E9uno|fW}5ZcN#Xfv@|Z!s3~(;z z1?Ubu(v3RVqLXWMa)nN=)X7ykxmqXfI@zp~?K;^;tzHfVIG@7-j&L-<1zZ^5A}$Va zH(=%N+#^8O(scpu$-M&HoBITKFD~(N-vF0#zX12=vH%a@fdRUn+5&U~5+1~Z13ZL> z2IywG#mjpKco^^F<$VKO&ie&8hJ@~>djed+!vj1*C;Rir0FUC)0UpC+13XT5`(9L` z`*d=@P9D(7gGhKhO8Eeu5THBht^iNuNdca$+fLD-4%Eq1olMiobe<95nH**+>}bc$ zvDV_`<%0rzFgnYJa1W+#9jhiX2g0Y>Gq}F8p?2`h`HO0*ps2+i+suXosj088ge<@? zcPzIRO3Z~G6m%?hRJ_x+rmn*3!d_UUS#}yu0A8n{xu(SgKCW?jLv{1GN|>#g4bY_) z$XQ8eGMVJjY;VxXC?rYTmD>CsiXQn&waYSnR>6foa^Hkg_|Z{U8jTpaoG2C)d<3)&5E%T++Oss9mb8YJ}TSi2IH} zB!|XoN##o1#%11iz&eD`GQT_IkjT2`S&j9&bI?%mPV4PKHL(2+Eo19|TT2|U=0Inf zS`KKcTmct;@bb!PO+z&vt;oP)jVaH2s>k4Neu^kes%b#zP_@VW1&DNjn9@A0Zkfp+ zJt|rQFe2uquHkU&375=d(}M_HtDCKHeut7N7>H0~Q|;jT6^m-?2RAOQK{Pga(zKyN znF6)-i1ZqoVK-|QpgjOu3P?RMdpHYmyCR{zAnt^Aj^-8q(Y(S%;#y1$-+3X@i|{l7 z^#rcb{&y4i7u!knm)l9|MD;J*PR1Q5WV#q>0eO(71BDlJ2Oni3&7}ZED8mGKi4Agp z0A$q6>jY#RT0R-5la&H38!a!T%WO!)QAgv;1=^@JWEcrK8Ev#KWF*$fY@_8N!diSh!5sY8 zzcJ8f9UR%?b}+b`iHdJJ19mTk6qOryQvPsH!YGDg-a9E$wvD2LHjyU~^F}>kul{SN zf;=j$@a0i)#8+G4&!g@Y0dqWyFy`wb{@UVokw8^Qt&8|pWVTb!HmWyAvd}87iWgg@ zGt5yn8@omR+Dx=I8xJM)fp+no#3x8ic@eFv80rbQ=w&r)U_xPUYt4=8o!0PXdZA2vVS@d+9#5l8wo|Wi4~AM?L23F@o-)Q!!yVO- zCp&AkcV)RRR+4GVym01*I7a8@%Mm^di zF(G6{0u{Lte?=gYTj6(*s%lfOOIzvvs8O^w+;jf=;qAP-gN#JLu>mNQ z^VSv1d216(vO6h3wTM4rm!tx;3T=S9Elk3e1T(3`qOc2Waq`{n&U3o^HF~7bo1P02 zJDfzHnkTChx|~ErN?8&a9l^#4=@e^9aT3-P$Vp`>6m{Jhr~Bx- zNf1?A8k4$ZvNtZqNkmv>U6A2`P12e;m7Ny5-AjSIJBpG=(*bLB#_hg>_UrD88Aa>h z2deb{id^@;wju=uOM549E1gj$8}eN_b{$Z1hq(LMf9RnfZ(1C?x@w4uyiBRM!Q z7IduJ26``QL<&u2!suxBJHr>r1@qxHtUOE2ojeSI%b|E{D_8Th3wpXVn4qE9p+Q4& zX$V;~Sa~)LcAlooF?R9RR<5R@jb61ar~_EtGTzH=><#qh}}Fu=A{Ow>jjtwsI{kkIRY9bvgY1RLcIl>_`%? zVz*1Kc!lEZbvPdCOuUM1_Bxy@u8s3nTMd^}D2VeGB`$CGPT=j{iM&NYoVO@R;%yRl zI^$z!{C0V3>0~Nzb*^LAJGB;_@w*fI(}k*aV$qVg;Ao1Sse2es9&#(obs?HDj*>Yt znII(&YXGkk76O*3vSaxw;?_E_4R#vyk+ z{tlpNn4lg`6RDCW(GrB<%jh7?4-ZCweF%2NX30vsIo})SR7djFP3{6h<&L+988U3 zDJ>P}(K4}>n#5DoEIy&*#80$B=F>_!gpQX7(h0JbR>?JVqTEC$$$MzEe4S2}pV4W` zOQ);ev<5qjXQ*RntvZR;sa85uZKt!;Yjm#ql-8^7=?`iboo8U(+KAEx#$I%xF_bPc zM$yH_RJz2NO_v(;=rW^@E;p7_tFe+c7$?#d#yZ+)TuE1AR=&x2g03>&rp?A*>1yK} z+G6}d*Lc$DT2D{9&a*FF@0mhvp80g6X9eBlIh(e6uB4kichW7M`{`ECQ*@i>Rl42t z5#8bWH{I#=(_P+T+UDJx?)L6W_jt$Bz250`pZ7?*-&;!$c$?`#@5%I#_gs3|+e(jk zZ=*-OkI^5!Z_;Dlujp}~q$hk~deT=$Px;2u)4l`g8Q)>_tZzO&=UYb4`_|G6zE=8^ z?`C?@_b9#OdxKu~eNM0VexX;>a_F_RVtPHTAH9)Qj{WHI^j6wT>_*SUX7oaOJ8e0= zlXechn|2kwmv$F+m!F{z(%z>J)4r#V{9gLlUyM!S66_K0O`rHj(5L=M*vUN#8@Y}2 zcmHYhh5s`8(tk63<$oAEwy)6F{!i&UbAomzrTTyjx(*y zO_)}OoSNZ;n$h4svBKcKu_AM7Y0mP@`DQDf4l}YgT!eX^jv5QCX`Xo#NsnY%6FRG0 z$EAe}%xR!gp3`Z$T``goNh){Y$ICT*iy}P{vne{qG;F|$saOY`E=&zg*KncQH^6FB z-Jynq*X@^6!^IM>p((ef;d+jgFjh92IA!MGL_(3MH5N{}eGMt6JZzQQDB^Tm<++iR za+fBjT*G%MnwK(G;9DG`-K~fV)1k?Q8Lwee?NHUBhTAWvhTAU(M#!W*?osGgEXxr6 z3m)a)@F+jRqx=Mq@(Vo5uka{4X%y6O5);j2rnxNO2P7?J4;>GEKZAYr2ONdiz<#<0 z{^B+c&^??%k8>tH%~|w3XVZI}LpwRh-LR`Tiu3pw?3*pc#^8k<khgADeMP!FD)w~uZ0!q0qZi(v?2}zt>rsUnGAW_sl42ae0QzMo3x(i z!&;M1|6v6$ZVid^5#FPd`NT`p()| z)VdT{nK}x}ogXW*E_yzMr*77zd&r}%qSYafaTTo$c|2E96U>?SDq4&S7E_0q&_m&n zjWZk$$MP-ch2cVtPopge7sR4%REaiNT0PRD2sJG_^TYWugqONvG#qtk)XfXpXrS2@ z4K~l}j#b(0g;iO%Gb@`!_6d1FT{n|dSYwdbEnFO!A1e-bL)xv4vcg5UDGGN-il{W4 zw?167J{(!^+LUl;eYkjiII43j+ZN7WAMUn3T(BP2(#{F54|iW5F4Q@eB?@=U>Da0x zd0A0-!=mwq$ZJR{xJeeNkDbTnB={cTCukbYbf~V7WJcEAZ zne+=E1fP5`d$0+e!LzWvKO4GtC^q2_;}V{OZT7>lt$qY{(U0WeJeSAvQ9OZ<#yFvCn|H#MjYrKL# z;g!(tslSdI5J>z$MM>)FMiL_7M>MQoI5Qo(ijxPn z#;$|LhM=*x{KtO(KUoY;whY1aST5XkUML7DwOn+bZQ^qs7mXWtS_2oZ%OUUKT*pOQ zUrn|KY~n@|wjIeJWNYU8~&I}z`bQ||W4DYqtw+Ggm{G99N$t5xpO;gq{{IOP@< zMtn@rIu6AqKh7J64i`?mhRvN0n4B8!xH>g#Sf&}(gJjR}`BqaoVXj;k`!(ex>82gzv*kwD@1QewV8@j8IU!3aG3`vlW+zdFrIe1gv{N|d zfu;87KX}OguJ1HGti8$9PWzbyWbK}s`<;9z2Iwvf&Nk}C+i}dd9f)uu$wpUWqZ|2q z(X9>k*ZQ}vonjqO-UpQT1LXri`5^f45Rl>6l7$kJ*9`1!k$6#~3|MQttc`xE4rDvwG}<=(q4HqwxUlSjjt$)21+BotVl`i;;KlW z+K7sjR7E@ye>^8IlCPuQ-B+uM7tzEA`PmS&WwWs95XW!K7jYJ;F~}a;m3ib0M)LDCfnT75_)l~MzlgP>m#`-EGPUq4 zbOOJM=;bvSr`PFxeuFOOH)%7!Mc474=_dXQz07YTLU{*~$h$ah_a0)8_YpIEz!&g` zd_8}}_w&b?8~l~O<-Z9Je}d@YQxW6O#BBZ?^Mk*OQ}_$a555%l@K@qb{14M;r4idk z3tEc9gO;v}Vb;DBYUCXXqPy0-qHMSeZHc z#?H*`XYIjEz{;v~i*?nA*UgT)_gGhrreX4FfVEL4C^a)6-#Q~#OMMy^91Ua?MzRtz z&_rjLQL9<;A2M14WWB;fnK;o7En*uZ`EHhPW>r(o>R^WPTx z|JmsMH@Ns4qZe1dKj8=ti99kyh%!Vz<%uvAhyv;@3aLyK(LSP>#)xh-MRcb_MGu-M zdeUOi3+mS!>emPAw-?l}1nSop>Q@T&>j(Ag5A`d9`VD~k4TSm)g8B`H`VE2l4Tbvc z4fPua_1lLxiG2}wQ2SA>B|_RU62ieT0hV%tJ7X9Q%Nrxn7GST*$ExA}PIIiY1{bvxj5p zcmtJ$yc?)z)F+2+pn|AR;gTEm8Mp+ZJ`XO2yjhl~1rLn*1F`hr)L0-mEtZj4k(pJI zjniV&hua5{^dhW2SeDygpUR5{+i6BD&%9Ujtfx?a%)3zLJm=fbR%sYMP;DU4)XGPz z^0YD)g5@tSk2nE)G$mDSpKqGC}R4{XsFw|JUSSM6lOKz zWI;6k&{Ma)bR(su$BNsiFx1W6!bdgt9<}bFLxYDc(h+ijewbrF6uQH#XAeb~J*0<= z7R3`xBQUwNHq9_;)~iqJBHgi|Q;TJu+DK3Pu1b4Wr(Vc89_7@lGV4{LgKF4T`!JT*K{{V7I&{Ndt7@x+`K*)t(?TG392gEg`o zaf5dYzf@EXc9us&kqwjvzE`i#qL>cyCGx>^;R~(99*6mqS%w@=&XECiC#@;;q z);-kCWLgi4u=J=e6dBgajT&aJa9*q@*60d~uokE1?6F>06pt0@q<0%FGm({G>8>YM z3Jc5%g{X>3x-P2e3o1@FiRpz(Jps{zmRQZK)EkI;0+s_O5uFJK9S?QKWZFEI*C*5+ z@&d^^qSh3%l2DJe0UQAfmMyYQ&6S!N1@Vmjp&m&s2AHECDlQITAw3)$1RA$cMtD#- zuqZaDjr_RFz?~^$gS3pC6IT_Ff+;iS&0fA%#}f z04ocPb(YywXRV2F+s+|nk<9Hhw=9yqosJ5nx#ub|2VV?hJQc=x8s&@W)K|=)7BQ1H zh=Xt}@({X8%%W?=Y`R_?N;iqa=vFa@?huF5HgN>qCyu0N#9Vq^97P|Cqv?Bb46~@_ z3{k_`VgW}n*Y775@=#I7!$m!h7fX1mXyC&|BiD$fyhJSHX3@+iixxgdtl-PVO1@4U z&v%Iv_$jf9zlO;Ti<4l6SBqM4s%RFciPQ0SnOGxk5NC+3;!LqkoF(oSXN&vAIWWlQ ziYLW+;(2ktcu`y=UKbaOzo7O9;&Sn^xI%m_Hi{p`m6F6JnI*Q!JaLVTh-+n$xK8#E z*UJ*oCdFp6*tRC;ubko+$s+dx5=Z#?Q*`jLoN_^%0=QX*&w#b zCb3-}FWTj);vRX1xL2Mf?vv+<`{gC#0l7guD6bZe$ZN%;@;32D`LK9Qz9b%(ABrdB zx8g}027gL<#M3HUJgdUu1yv^gq{fIB)uG}gwNSjQR*5s!sp56DPQ0Pki#N5i;Z2mk z3vZ#OB`uX;ljJ778?lt~JLF^i1lyd_OIyu5U2Q<>Dkz$#RKwsCoe0sHdzbdvg($w)Z*>*&D6oiRUUW|y zsPy+Vv37{@X7VnoqR4NzB>EZKTSC7&W<>y4NLSeGBHAj;jr5pDmU}~9?-shWFyvLM ztIK`GxSpWz^m$?<1e-c9ly)y2tthIlCnIpHoo#0h_ecFvbsdGH{&qTM15FNluqWYJ zV{jYopHNl%>hw^0wr>l3ZaSQP*b_>>hmH--TVz)E+s{_pHC}GpwJ3l*V{OBNTTQm> z_X!TcQEL+KkQDEdN4!s2;sXkc52>g4h|0ys6vL^D$>LL*DL$h);&VD${GF=AS2&IF z4?00b)3EUVD-B{yvamG2^%pAStX&u@ABGtW zGldl_*8|GfJG{*rP;oI{cg}z?+<}-yA7n?&;zP`mrXws2PCHeW4S?SYA#@7I(#?Cg zK=UaO4usPYAb7*+u|O0<0BamiOm~<^^R0i5L$ml}br18|cR0PwoK+Ns*6MxUn* z$5JWqX#j4L0su4vK#c z0>DDemb&-^U=#I)Sp7mu{7PONy-ydrC<}%oPclVuqGK;ukzrEdNWMX%rH^LGG+H42 z)FRVym?uD|$Sk^8W>cHYq3tqA56WD6ROZv`GEASz2>nY&X{Rh;A&WU*cEfgVcivC- z;L)-tkH^;T9Jv=Sk|n%S_T^J#DX)=be7PLJTjfB$T@ErubfDJx(Uf87yq9jbYzSug z8?D9YF*_*!53-4uSS<;K1@>W;m}qiBJh`acz}p|$C*;ts)oX)`8)8tkY+wA*8#3G? zpY^f}B-5*Rck8vYPFSIqLn%{YZ%+=R0dgOT$$e3ZcS$Ym>KVKbQiRhfL$yNqI>z>h z|BOYkOoSY`WI-cv$qr}eOAg9Bi()~P;gX9oT=GzcO9*A&MX`L8;Sxp}E)kUB5>4nR z;yEkU3nj##dUDfB2PfocSuRX^Bc(9v3ulH47lng5$wy)eqZ6NM+oq=;0JX%5Q&Z5` zld4u)=%7K4i3anSqp~h*r5rt>X{Uw_FaQOeV9(Nsb9EB#3OfJ-do_Z^Wb8UThPtAY z$GBr*X?!7&HfCP7sSBLh8eN`FB34zzNF% zoC{KMy7NsJr~O_CmwfM5PN)}f zE(FfRn79{?F_Nsn+;}+oB#uAI{b8R*Qm!0DVL6(*$uY1|W1)WIV5i2@aCrcYl@n;P zoJcd}Bsxq^rlaK)s>UJ2#d0bRBTlCaM+KW> zo?uJNTNd`fQiZ*+MeVfQvYPFbHb<6gyJuPq`$XGuiXflStMC$~wj<_3#l2+bV*0Ae zeP#g!OCRb=sjhQzuqv@S&f;w#oUYkmwhgWTK`Rl993S%sPl(}sUMm%rrE7DFh$Dr% zP?|0T-F}pW(*sGQqicRZ`X4|jOHWS^1T@r;;ZE~tEnb-;*+x>{KwfzxrOTV(YPV8v zynt9DZ=rtjRytJPMu*EgX^p&#*1^tRAn%5oy^k)J_tQrC0Bx2J(zWs-x=}t%cgsiM zav!57<>U04e1hJSPt!;88Tv#%OJB(6AkxocF7P7zQe-+;~Nh)?;F8;y~q0nc<->uJ}9NvxQ6O32M-J$ zm^_qa!2_LJ!WZN%xM%}yJ0oZ_WclT<)$v=GOH>^1?7D2Zjjjut79+GrmfC)!Md zG;IMi>ZD039;<39=jP+>U6OwW=l()L`8EvDJK);8G*G?=-~T>MkRQ-g`5}zXM>J1< zO!e}wFgSmsljSFLj{KA^!HMV1@^cuTztdgv3wlU?Nl(kKz_ovXYu_SZvd-H2N&Si~ zHXb%?2!+OP&+RUn?o0(07}CCo=?)o?wFLGQXLO$FFj>M zJ=^F+%Q*yM8A)zG14|%2tcApr-Mf9~5S;bSQaEP9KFM+doxx7iu-&9n*sfD|U~40w z`(eUf-8J2Q4ckos+Z_e%v&%C>nHwpiKTeg)P-aVcCgjX|w>5-wCh+H8^F402jWT_= ziSy*H`{SZB5hvo*K702#;m;Fsy1v`Qc}my)OxOK%lSG`_XYU>-{CN^i$9J1JPwl#& zE;*AE*$%oR&}D zt1$hlBFw6g1FDF#RCn&Jdhp(=C-0|v@&2kek5wf+Q}yLTR4LC<{kT^3=Vhvlm#aa1 ziW z8nI@yl$zBtywlP|=c{JgsE(ss)e5>-t)wT^DtbYkNU!5vm-p0ad|mHk`bM2XyVR+i zsZQf!bvh4FYfNtMMR-vqh(K-^-k`T9z*q>wiVV(A>J>43?jc8iz5(Aj`rpIdqq^d* z=AXkba5sgWDa=k3g;egY19#5^ch3TM&jokagS&qKch3WN&j)ue0Cz70cP|2WF9vrn z19vY6cU!^Tjo|K;;I97O<5l49W^ngvaCZy1dkwgIEx3E#@8d2$US)Il2U~Z?{MU7N zZU@~xDn)k@@5xru-z3P3Wa66yc@h zFd1&1(bNprkM@B~M}L!)-I0zs!;jN15UCr$@EgJKo51i}!0=na@Y}%f+rjWV!0Ny^wp6Ai(1ycY@$m6JYa~JBJW9c`(T=xGZAV~sTgPz3lM5VSZfWvb0 zF)l8t67Uiv;AKd_E0BQKApvhd0^WoKyafsPGbG?Ikbrj}0q;Tr-h%|Z4+;1P67Vr3 z;IEK?Pay%HK>|L91bhhz_zDv64@kh*kbrL>0pCIbzJmmO4+;1I67bL8DFOIwoh?0~}Xw`SdQWzQuFbYj-g7+A1U%fqd6R zq>8|g5P_c{0zX3peuW6^gb3`SeGQ_i2Gh}opk_nS35G$d4G*1WcxkQS$2+I#bPe83 zz0Js?M~!TH9?QpX8HhrS5Pfds(|1Ogb{G*>MwD}n0`6rL@=&9Q#~8)GQv~qQ!v9So zfM_mnk3~RpHHpaucHrhlc}W7|c!?AdFnW+-^rV2%i-LH~xX>t}-bP=DKq*9^A4H%( zL|_0!U?4K}Fh`>0A zz<7wj0T6)+zf%Mr!pqy{x5&i)Sc8LPVh3LzfS+N0tV@M(u;;Ph8vS<pVIW=xzlIH>>UbGix(zXlMqy1tAr?n$pqTBVY=K(_gmI{t zmZGrMEes@-*;`V&OfTgG4+PC^bQb3Pn`tlPCJt*g zgG!sJBpIL!&-}WTRWU21@P-@?*x-d8yl9M-7Sda<59xDb#$*!46!I7cLOP~Wjxmi2 zjOo8oq*caT zI@36c&NYt43+=~1dXA;*@B;gdMkU>1%%^Qe6{M(|o-k_YWn%%oY1Go&#zOiSFSvha zETW$be7xAGhcqqWfYHE(Mk6F@DVG|{c!1Hw`xwo9fYHKJjpaN?zYLE)WRkHHr?2(A Qp>JuaewpeKvwx5NAIM0zlmGw# literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderCreeper.class b/bin/net/minecraft/src/RenderCreeper.class new file mode 100644 index 0000000000000000000000000000000000000000..446c90f28cab1fa11f86d4346f4b424e86416d92 GIT binary patch literal 1253 zcma))%Wu&HgyT%Q39oPNfT&jflvf=G=%Yhl(3)(%`Ba82{x`1IWCVC z>{-JCA;f|uEZ6`739&?@&U*eCW`@skW&!PtMwY*GU+13RIrseb*ZYqEPT`b>LplUz zl^;0QF@-rD6R?!?pX2E~4l8G8|In4y&CTDHa}*tAEGR!71eDb#*BbW$4HX?Gs<9l= za8$#hK<2C)xY4RWy1Z~rKxy=@OM!`|8_3HW>unicb=p2xgd<>;n}LjK>)h*v&W)%x z2s^c(g2;{TH9{%-GCX6)myE4NPUlw3>5qKp|A(Kwa7kdYAId8-xGuwn-dyp5F^w8-C>WeOHG63H*=mFs{DV+Xy?-cH>OV5kZpCqUYRZ>ZPrT zw^%8El(&JMD8y1Ta12WtmJJ+_?Fj=XQ5QI{)&HBq8Q6_IvFzLS>^Df;(j+I6tORDZ zE7}nFyfctV#ijZGNAdnxwIsZ?fPpS$Co$QUS->6Phf^UH^tTkRJJjTMcu_&1!<0e@yZ8?U*95S zrr$z&%@u(nRY!`dVGLO)ag9cP&*`Ue=W=!K4OH8(%#8OAn&p{Uuf3vJxyMhT=4{J& z^bD$DTb4Kcd2WZ-E-K!N%Ap<)gOyBCE%JYdTpTwwjJphj;~X-yyBK{M<0xSgbIfC& z^cAiy^5khUT_9Bpd-;KssXtLlrL-aKz7g#!((d5yFI9`QD@su@4ez1ae*!iAl9Msd z9QPj9)q?sInRIL?@%Ia4sr7hR&%~m|k}atD-FFL_eE#l(f|k!xvkzW=$GxAmDUtL5 zD?LL!MDAG}CV7o|g7l|R#VU@Vfulq29MWH~GxY_gFo-^l{Uh{wqNjPiUa5Y<1dE;j n{&AL>+Hv}n7$|wvSePd@Da?EYQm_lC literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderEngine.class b/bin/net/minecraft/src/RenderEngine.class new file mode 100644 index 0000000000000000000000000000000000000000..7203b49fdd1583ae19d2567754717a3894271055 GIT binary patch literal 6910 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 AIRF3v literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderEntity.class b/bin/net/minecraft/src/RenderEntity.class new file mode 100644 index 0000000000000000000000000000000000000000..8cf56d0dc9bf004f63ea91f9fd017ed782d4a48f GIT binary patch literal 672 zcmZ`%T~8B16g{_;ZrP3&L8N|AZB;0cxZ%kMj7is8U#b#qjQY0iPM3jYhU|yp&oVKw z;ej8(k22nIO|-GToHO^%xo76ynadyN7XTh(*M*B!7uT`2gd145(6DgR!Yvm|xNUdu zIM{H|BvhU#t+JmF=4EFX2B8m_4^zdbnCF*Rh zLvdk3ZDevCDjoTTg{?X5ch6MXja8&&===NZ9S3PPRO90VlfEZVZ#MN|HvC9fPJT`I z^<|c!TF08> literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderFallingSand.class b/bin/net/minecraft/src/RenderFallingSand.class new file mode 100644 index 0000000000000000000000000000000000000000..1a50c855135642723647623b70dabaabdcc10b55 GIT binary patch literal 1374 zcmaJ>Yg5xe6g>;EY15TQd9)y+;wuCt;#)vaEY)gNq!mP+aRLn?8j?^(n zI^+1+ALV#A(Sey(Co^~N?%s3v+`T9J^Viq!0B+#5f@CaYbxj6)V>iT*nRJ-4y1QNH{5Wr-Yf7aa&}VkufXd z4ntR9xYb3|t(yLv(>!EqeJ48#8~jN=%FIPPMO;~s`N@|b7fdT9E-VY}ls z*WxJPzKjPPMLgtqgc8SNJYnebd`oveytN$NtC=nh_e&EK98a;p@eGSH${ZCu=UBob z$FeXlu)^_D1iTXLPB*h_x+acO7-<>WR5(MfIpN=%Re}wp>U}8NpG21mRHfxC)Ps%3 zM(EpH(X`?lZr~W9xla973vqMOj%QRW=2lqu3D~EW#O>;i;aYl`kghc)T9|DYbT$iO!frLCZjpfukC|r-_W+Q zkM>=4H=vwDh0&(M6SX;|%fB(1VAxvOwI*=qFyMX+5rToNxk}(Z+rttLCI!BAd(-wcJ5&@yda2 OtDEkN;Vk)WIQJXkn?W`J literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderGiantZombie.class b/bin/net/minecraft/src/RenderGiantZombie.class new file mode 100644 index 0000000000000000000000000000000000000000..ceaa20a4fa6e884a6f69be9ce2b099b77500d334 GIT binary patch literal 667 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderHelper.class b/bin/net/minecraft/src/RenderHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..1ec03913b03815649c7150d3c0c12db9411eebc4 GIT binary patch literal 1775 zcmaJ>OLH4V5dOxN_1wsoA}f+#0ZB3IJSDTNiOre}Jl`|FrtG=8`Ax%T+Id_A9>Cnd-mZ?X)qU|!F&|gupq^CDN0e4u^7Tq2+IO7-LV|^`fj6P zxB}_wruK1Gn7_6GMvAVmpVYqj-4U0RY zb#q6qYMy4-HMd^zjIFBKeBhaOQ((lfdmqMk46oFk%$Qo{Z>m>HW9kxrJ&(h)y4B7( zT61bZhKW0dT{qkthP7?D)AG6s@+b%lJ8rXReY)ASiq5uSb6T#>%qX~lih`R` zyoG8AD+*R|OTlftt>6x73hqkrjucZkuV4-9a&%%-|~J+)2cnt>c$G2k2j*~ zyS3F3^%<_Illq!P(Je#cT{BGoBn#fMe|wkJ&Z@mTEzq#c?Gs5{t}a-Xqide&*zCN+ z`gVO-61UPLGJEDM-wZ(TAz=S-737+&N_mdjIA_6m;QS+q?|j3_wvjZA;Duw;1>X?J zCStc+=ucdOFNKt`b;^!=8UqB05+DYJ|0GT!gE-;TBREmxd4N{`_;3Lqj*@TzA1;sx zgcIq$76y{RQZiJIEv672Od;BWa)48-bVwxoFa3x(#~{a0yoE#yN&i6P^LeF((?>dD zu~@g>S11(PdI~ARrjKDoFIXNt1xx)YSn6G{iE-8^lZe%Fx!hr-Y^OkL80OUzEKri= zIZc^jfrd#@ngu$;s%QB1XZhxj@QoPdhdzdFlJx~9@FgkzhNM2C^)ICK57PN3z5XVl zQTckbshuPVVMd8h?x}m3z+NV}$AWyz9f1zVs_%25?Q@gQy(DGwdyE`lbe&V~0AqQM z0>?QHxp#nZId!m-zSl*BaEaMYGpizFUpyk4naU;uB11zhO#Fb6PAOzRf{uc&VEF0( E0D^*iDF6Tf literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderItem.class b/bin/net/minecraft/src/RenderItem.class new file mode 100644 index 0000000000000000000000000000000000000000..7f17a594be810c2b29f5686fe26f97ce57ee8f1b GIT binary patch literal 5409 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderLiving.class b/bin/net/minecraft/src/RenderLiving.class new file mode 100644 index 0000000000000000000000000000000000000000..068082fe57d0959c10fec9a206ca42752fb54707 GIT binary patch literal 3422 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 P)H&A4)CWi;2Os<&@oeh^ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderMinecart.class b/bin/net/minecraft/src/RenderMinecart.class new file mode 100644 index 0000000000000000000000000000000000000000..08cbc15b206fd9a86851dfe1ee9e5d7f4c4dd905 GIT binary patch literal 2586 zcmaJ?>30-W7XQ6Y)74%52%*!RsuqxdqjoxwCW4p+NQ4-{NhFYn;yOijb*GX_RjjTg zfD5?cu2BaWS7uyi+~r`5dfd)Y=NylI@(=Lye4DQxkITK)iO5Mbo%eh9zIV5G?|rYn z{`tdC09=B1Rcu3lw2PPow&F?!yH!Nd&&+^|J=mK-Ck7dY7_MU2$8a^nHLZ}pRD!=T7z_tgtcDruE*%Xe6cl6Ki8VhC^{m%< z$BK3D?GAT1oKkehCU&+5W%e`7V5=CxX!O!XHs1*+jxm+OccWdT$D*EsaTTq6s+-|6 zRf!{retHy$e*Dch-$u6*rD6h;EIp;*AnPAea9F`D0!zodqUH44u4Nj2Ah4>>wSvMJ z^S)6E3Kich^s~rzqhfUm#J1S39c&Y*$u;d0i0+_0fn|N9aOK3<0m~mU4mh+T41s)Z z5o4FRfgK#0ci7p})6?6_mX;0%hB?}AjE4pk+$s<+dV4LmX!!zb|Jc+S6Y8Kh;hR>k z%>mR`Rp%YGj2M%K#HH9SaT{(ISp5g*oL7+OLbrk=5=U9*4%{hm7sK5Q_b?n|xR>ER z+%NF}ZkKqF;UPRM@d$4`$}r9F7>hiPCnWxk;}TEegg`9^Rd5WqTDT$}? zjKs5ePU3l-l=vr3D)^Vg3wTlDC7cwHg~0NC!**N7-Lk~Xctzq>JR@-K!ZTH~u-);@ z(Tak9OZ*3~NxY6X$a}#Ktg!;uoee2?Q{pYWE%6Sv3p6gYb$00_E<^94a%X2=KwoHT zzOLHBt$micu}46y3>!snYS2E+-9(Nuo?k9FQzK=k;Eh`@O_%qzwo*3A&cH-vm=fsQ z2Z?ozN-$)bqXS;$8qy?F(eaS{{m%aCDowv%y|%haQ><(SWPnndqYiCaq>sZe=|U_Y z_pQmjUSI^a=MLC`IZVCmpUumvwcVvs#iBd5nr;56(b&Nqp63@Sjzjar;W;8<6pQ3L z@aR@Zhw=~%&$DzT>9h&g^T!M)%-f3GpM}1}2n_ckfh80VYet!;DHn2-*CF3vJ)Pc7ZqL%udfX3F>BCvO>3u3M-;mRl0{?8C|g6us6|#+F03^7{7%am z=L=p_u|wCrO;qZ-lIKquezC{)>7l<`A!jKvq)9O%lyxDbI6jwQ1D0*EQ>^F7?_O)ODn2b2*K0E@_F818w!$)K@q)C!^QR zpuQvh8#l#lCY$~*lx(Uaoy}Bh(ctN_Y_>=B7>nq7 zEithynIQS8P%=cFEN43!vJEphr}o5CXk}^zFOU*LdKN3wST&kPqc`0a=cUXn)~0dZ z=yY3sZd#8{>#^xsoS(Wti+UC%Z#L&T@qY(Y(ys6PCm7M1}&*VTZ0z4x!qw?0F8Oy1SQnXi( z0i59j0mxIn~lq0rDQ z)?%GlkM&|RT0}Pr;tFgKd(bL|ut{8pi^T-m#4TtSN6;beL#H^7E#f6?6|Z5NIE60p zIl9Fc)XtYvl)JPyPD?j{Jlzkw_!8?Jis~cL`d; nmZm1pH-CoCoKC%<#kIr?ww$>DDrE$8?&Z|<0)Hhsg1%n?>P=@P literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderPainting.class b/bin/net/minecraft/src/RenderPainting.class new file mode 100644 index 0000000000000000000000000000000000000000..db3664ee5c4f26993f7b9aa327901c20dcd331b3 GIT binary patch literal 3347 zcma)8TWlOx8UAK=?D6i5V|(rO*s&cuY0_-$B-=Qxv$fM)*UqK3li1FcmU!$PuQwUb zIJ4v2px{CXv}GYcprt@51*v@mbJ&I)o)kn@7?f>`~8AWtc8(}1#{L@Ye5 z9Hy+Y|9~JTNqU0S1G9+Yleico8CBjUix`=Lj0rL>>}F%IFd;@cTU?o^M2^1XQ{@9&ckNp3qs z*28Yrl2Fy3cdWsgsWHnNF~@8ok}07*+3#3>YKm*)o;l&C3f_3C*YWfIjgw}cZztE2 z$z=NagrpQP;@b*onqH?r17|f>W}WAjxOxc;bTU{RUOyxxQ^?% zq2ne#B_ZK@xs-kFQqE4f)0V^6k^WtsIzEkOBxotq^HY~^?wodVIzEHX>X^l|IzERR zDn75{7QUe4wjf^=8^c%RV z;+s0Yg%@?agu6PvEy&A4*LUz;72nhG3cj!6RUJRTYdU_28xq?7UzT<3#S?4tt=u{Z z4XafxCPozp#IkrWmE>`e`ZafJmjpd$pPVU74w$}|zaC6Sc%Tcm>01*#z{$Qa=h2)! zhkFb&qPMBu9W_HB7?$3Bkb|M*8g>5>y)G#gZ3=3x>Opb)6H4psE z)IrZ@?NsFK;c?RzUNo+bv)2juB$O3c2Ip8p$4cY#5>z)h(?m-nVhkXYFND5ojM<%D z47p{s_7SU4ux##u%QIe)cM87gj5D6rH9TI%ORsCl>iHSZyvA5h&6rtMXq34abiFCl zX6>8V>>11Rt?Os={^V&<%1KsrCL^{*$x@E5X}2IE%1CHl?Hk>mJZjm~qWts;+jYH* zS$8IABT6!}joTpP8L@a>p!ICtv&Q|r>#+X4pl%0D$IJ=&jcddco}dy7BWhjk!U`5f zaLx7X?1`~U%+wkR&x%zlGFB@JmgpAS&>=6MoAe!Syf}5DU-bn^JM7x7w|fE`*>fLb zPnY;bVOQX&jAQl<(r(VSBf=3--ToG&_Ir@ezlF$~P<|4~h_8Y876B?0RFIQ3R+4-J z<1 z!&xNo6zXvi2K{G?3cXg2Q+^{5i8uSVE1h(COYl(dqSrgSvY6-&gLtE=tT}n@imX;gwi}3 z$YpQGTby)tI1hwFq$W|;G8$+I=kaj9jH5QbAzc@5O((Q;JvY(dw1Lyccw2fs|4s3Y z>1O_0wDblpxBe8Hy4xDt=J8Nto2JD#&tpqto1qtts-jU*G-`@Qyf}}CiB&FQ)hn=d z0Uxp25+7wljIt$6)AR>=xfU%Nbw#6oNpFZHR$#PGK4Qj_-Vmc~38TN-a>aDGp=hjM zp_o|XM=>fU*0iKJbbzuYjEC}p-q7euy&<+zFR{?pGQAWg}rrEqPT-UpdmrZ>d65zF+3vLRN|JCCimH0kyKwA_l3YNF0$ zh>E|@Y5~@>=9^ey&8(^xR#GcAvD$XBdU`nO!$TOxX5Iz2;0hkbv)IZHdy?PkZFm#y z_!%qm7wj(YUopVSf zltfvgd>)UaRU`NEMFj!2Y-qqs*Jh{m(M*76vhiGstsf^YT8$d*L*% zaaZsnykKWEDEG048&Y3i&)^RuQ`&-^Y|JsLW=nquoyi8Jq1>o2qVw3j)WXA$$qbwI MRZ8`eTSni10YFyxDgXcg literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderPig.class b/bin/net/minecraft/src/RenderPig.class new file mode 100644 index 0000000000000000000000000000000000000000..6a6b1fe169c9795dc5afe2e9b71572b8da52525c GIT binary patch literal 774 zcmaJfgc5Pj>ocIuim1VVv^ekM|yMDdYBtEeiX5>kpPQgO&_6E9(lV^{X3f}hg< z0WMsSP>?uOocU3RS;uM)P4Qtz2z%`olQG_9FJzp_1y$sT}RU+3Pbr=qWz@biyw(Trv3=O#=U&2z?Qs@+4uX z-cQq&mom(loL)4EhvHc3@`a2*j@sw^lDlxQ;bIe8)T=j+242E_KM?JUaO7eeJ1%xn zWmvzf#%;eY3Rqp3a$AdG<1WE0I_vZvP3DTHqLvb&<^rTahOI>^%z=6tD?!BlGx1qX zVv?X-@9NRLfQKWmr(!LX&a!8t`?RAzjh?5I(O(XXL|UQOC9g%kN!D#NYd^snttpJ} zFl$*k=T%*wZfu$?h=2w`xZv-?_5{E3Pq^2mQ nbVm7*E(#A(%D8rjNmp_j&EK#pQ`j0l>%k(6wCW?W1|I(dfk?J( literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderPlayer.class b/bin/net/minecraft/src/RenderPlayer.class new file mode 100644 index 0000000000000000000000000000000000000000..da8f79acbfc99aef8f13359da81be573cf000065 GIT binary patch literal 3334 zcmb_e+fx%)82=sEWRtLnhPy@-MGc{ls#OuRDqw2bAV{c+wzW%g2rHXix>-PawfC#N zU)0uV-+XbV(-v{YPCNF+hxRY%L!UaG{tJDo{myO*kwmmJCBt|2eCPLF&Uf4W`S0sL z0@#HwWb_8W&?oJqeE?w`^kWNRf;=S1AwlAPG~wX@9zi02o#>ZwSg;5DP%s!I!QlXH zAN7->qkeSan0Pua$cP{(1UV_lV}d*`z)uL3r-Z>LrM+i`=}xFJM#Wi5khBc$!s+UtcUH{HRV_>P$?ta`qs%a;9-eHPQ?#bK~Zeo*v>xnp=Zv zF1M^t32j>3(eY^+(|Oo}XoU&3}M4n+)-c2Vm9U}A$ zq2;oxAc{#ro>E{Tr=S%P1#N=dCy0$H8Pf`8a7Mu_o@Q86tS)ZztWzBd+R>rl89YmI z>oH9`XItuIKexxtbgs&a=X`ix!3#L6;6=Qo;AOm`;8nb);C1ozh9GYW@|GZP3-XR2 z=kTtA_wc@g?bxf}158rY7W+|H76ST!AiK$xr8UUlN$I9NF4l3U2PDlhsTJh3re;l% zb}3`(w3M(?7~*9BZi??1FQ;A^>WXh6qRFtX_`vB&*E+Yz!?07e&86zaZC^FVyB&-_ zOP6$b3~NjD(;}R~uNl+auuW^0VPgqw{NLkz`!O^ZySfBK&Fzc_akaRSq|h_0564?e zsV9gN8=4bxhTCp5R)_C|C0K>!^k$qIltvDV2k;?2qB$3JY)08B)-h>h80xd?1n)JC zlxiQ->~VU^*{WevLvINek16tQY1s%{x~Zmz`5Al4qIRn-Atxq@e^gA@LtLc_YA$if z+cHU7{WN1{^7&z6nk~rBaFtT+>gzGnloR)CNXv}d)N>4qgH7-;cUy3r;B@K5V`m%8 zaXVkYG|KWO*Dqf};zsi9z}OhcQhZ}Hz}<+;_*iuFd76lep`!9JCwP9?yU~uRDN#={ zE|O@%G$*F0f0ejlaI04*H#nu>d|@c_I^4k_#<0$FEv{g9aaIaAw+Rl^8<4Y(Lla`*!#ISW%nzyvB z79*5aAHC|MxS!}&+MOf`M(g&-_h2Ix*H9KLzXmB1nSjD2C#yZHPZ7Yc!^&@I~tX)p|VS~lL_@_+Z_DfP(w{@-}+suqt#B zvP8J@s|X54^-@MnNcs{!M_(bXHYAaSLQY)~r#|EnqTVIIhGKT4(L0Yu=}P$(x@wsd zoETQo^9l+_75!GCmiB8AL<_31A2k>vPKrWkqn=(&4Y))h{F<_L6Kn7rLinA~e^7pR zP_&Pu?iPI=dSz^p(Zpozl(9>uue~yd(|n686(5$nhpf6+2D?SB$V=sk57O2tTfnUIraJIqJGNkM&D!ZKaCaMp6%A-+z|fL9#n(X6#?M z-fr?*{5AW2K=Vj>a6@uL3T{k}c!Dj-5pQr)azqYpPJV~VMK@gcWxC!05-dXxKBH9x U{S#ckr&RDqXfFoS5dA0r0TR&yGynhq literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderSheep.class b/bin/net/minecraft/src/RenderSheep.class new file mode 100644 index 0000000000000000000000000000000000000000..9da7c1fe819695f855fd89c568235de53ad1b978 GIT binary patch literal 785 zcmaJ}b74?O)*! z^uh(H3K9pzxj(AvtQ`p?QueT;*_rod_RakHdwU1q9X1?HqUxZC*&^n&eLV>aZ*0tK zXTe6z#v+5Y7es+-GBh_^kx*Vgh(uTNQ{^SH>mA0v2tV*d>^>XZ-}=g6exziE=@u~@ zrTvbO$Gj8L3*!uHm*^(Gou+bU5cOQF zVAaJM))^L`it?y!7bQ%OO?p(4Vd*JJ9?x55SQ+=L2k|p~D~V7KN@PKX<>!HVE>mI5 z{bTV%rINI$Znm@nUdW@K*H%(1rn78PfJ@=ixK8N%McN*H3Sgww6x}X)+vJ;M-Fjo= z2CTk4gmFziO^)soMS%(0GK&y4Ws*1}WD`afovT+0LzuNolp4P=aS7Y}1+#EPKqDh@ t$bw30igHG0RNvEb;Uy{~u2o{vm7IFx9#(A#Tf_4nEV9U|&X6_m>L2vcyDR_z literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderSorter.class b/bin/net/minecraft/src/RenderSorter.class new file mode 100644 index 0000000000000000000000000000000000000000..da3f48b108078b71cf92bd1683d08b954ec7bf99 GIT binary patch literal 821 zcmah{O>fgc5Pjn~F>#!Z)X{ zlOeD26`|?}V=W?29>mih)_<4q27E$o(UPZ_PNU1iSo}x`c|JxuAHSRoe>*6$E%B|% zaf7|x{03^azQXvzH~yz=ON<5An_QpgY90mUS>1?pSQ19mA=ZA7Pm% zXjIH&6l#1iPO#Q$p29eT*`E0ipC%yF_{Ik6&>mblF&T;@yx=5MSLIn_tJ2wcI+ hOnsZx)82~B)=y;He9n+dxu%Wh*n{DO3VQ=r{{k%jz7qfd literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderSpider.class b/bin/net/minecraft/src/RenderSpider.class new file mode 100644 index 0000000000000000000000000000000000000000..b50d98ac61ef9c78c2dff153898c102040b4fd87 GIT binary patch literal 1222 zcmah}YfsZq7=F&yZEQPSHb9V@jEibS+v=`KBTS{8<&vd&$|22F9CgoAT&JR}Tb|*alxs#+a|+oa!^D4C z8`-xE?PX7`yx&x7tqr<$&D&Iu*EH4J-?BZ`Gi>X|Elb9cVd?&sUGBbJH>+EkMM=C? zUH8T;S_}Ow5@oyYRJ5WYG^T<8ftLJ%dPJIsuPWXoi_Cz;(Su$Ak2q%Wn4w2Gw09NP zcjKLQqPh8+rE@&N9LGEs7}(qPDk3+yuT*FV_%4oTFZ6=jgVA({=RBcJ~)i28xKPaJ3wKT=O3 zMq%g^BH_~jbLnUUF+Rl`XxmH24~nVe&nA+oA=fVU}{7!2lL8NH2&Ribe>Bh!HrDp=cuacy8((oegyT kt6-GqBe>I|kC6?+h=flcY9J*N3M>i~Pf%}^#zM&a2JeRrk^lez literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/RenderTNTPrimed.class b/bin/net/minecraft/src/RenderTNTPrimed.class new file mode 100644 index 0000000000000000000000000000000000000000..09bce8e5ad8854dc02a01d4421571ddf59cafdaa GIT binary patch literal 1501 zcmaJ>&u<$=6#mBE_{VzO)TYilCA3L_;@EArf&NIFlC+8A*2PKP+LRx+wY_#X-OO6+ zb<-kog=>Taq7~|?R}P>iwLk(+2%&P}gajA(Gf;(ivkOht1hmrIH*dc8&CK`S%#VM4 z^$mbicw5C7@=+92gpiNpc^pyZX-0ZSRXm3&Y4kWoaZEWs4k&YX?%b8JX=ULD8qQZ9 z{S?EiD&b#?<2X)8qLWdal9(B3PD^t}nptViM)A5t&qXmG#W{v#!*-fCu9~7{x~9u8 zUJ<6JuUW!ux<=d6du~$?W)~!|H_H$?YYEGnV+iLauQ4c#PRnE%u29ZOf30D?!xF>u{8UDvS0 zR9AF3%D5E88ypoZbFAPpL&kACy1l;Iv2~|w3i@5BOiy!EafRcmG&R&Y-o!PIx8#N< zc5dhyl{j9+OS=M}IVVGQC)vL;s=ez*%UQ2k@5us{=qMe#+V5RoHayq5|Fqs$QN*tMo%%jtye7_GW_%j>%|naNe8#JX*Wj$R`^(V3N1)pl;j z?xUpqt{LyxMXML|p^_`h5bb+O z1d&9?Ua*O{)E7;Lp40d@sG6FfcqAb`{_#CTxb!r2^~sNG zYC5snm`P~)Q z;2bo%hWl}e)W1U5cS-vuX}(UHzfTMwl5!uBcAw&9+{0nq$1C_8Ic#DQ-y)CiQNSY{ z!Ou8~UvLb+Vw#YkwUoy=9g6>ngOA~bNc+Q-8B}tLDxwl5oiBWc(Og!^Mzoj~-@^Xw TD$2(e^y;Q?g0gbthcNj!&$&-@ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ScaledResolution.class b/bin/net/minecraft/src/ScaledResolution.class new file mode 100644 index 0000000000000000000000000000000000000000..c1f805080e6a88bc703da5191aedb7446c0611b6 GIT binary patch literal 556 zcmZuu%Syvg6r7W!jjhqP+WNo;=t{FN;Kq%JAXE!Jz>4C|G`+Ubm`a=a1#bNaS8m)0 z7Quxd;9vL$et|lP4@Bg`oCh;=&b{~f?ePh~62`MgVK@T=#TZH^Mof$f`a7N*sQQ6l zkD3Ch2&~V}hVmQDNRVFkLqA#(q~`F(-0)~YK(ZqpCdcK58N+Iwy-U}vBjx!&oP zd;V1qHdIvo?XJ(w(?9pq{vMI7wz_RkmHpVI^eNd@omS9|{8qSd;$FBGG8nUvhH0S> zreHQyk#oisytaEBIi0rW{1poFvD69Nu;J{~PL#*%aEE=&@C8zQ7LA9NNk&&j9l}Xj zVn3@Z)&}Fc{Q$8ideH329&}^HzK1qt90dhgy~ZdjJ*n_|jm)JkH}5a@VN3~P2{S#; z^t)t`MVwBCnKbX?xC{niVG%hjBabo)7$7GP?VVtdB_iO`LSF7`wJAn6k&0KjWx|gm VrjuronE#im|D}$RTA)zF&<7&qWgh?l literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/Session.class b/bin/net/minecraft/src/Session.class new file mode 100644 index 0000000000000000000000000000000000000000..7ae8fca6bc01018c564e27209cc43cbebf215222 GIT binary patch literal 1891 zcmaKt>rxy=6vzL~E-bqYY~&I`E|5FRLRc>`(SXr_644DoHWI<>>}<0P%ucV}vmjC9 z{eF1>AHeU%im7N-9v~0k1NZ=b*AJHG%tFx?6$|P&|L#8L^yxm`z4!n5^&Wup_%4GS z&ZjYqCm2tra3O3yc>TMaC7z z9OEiup79c6fl*>yW4z2*WL#&w!dPM~r|~LYyv@)I!-&vuu))}5yu;Yyfg6l>8SgRPXWV3b!1$2y5#wXV zCyY-yozEP6jxQX1iLX-l+QB#YR$w5MQK3c~<7sy#Dj4k*wwFz{imvR%7-);t{vw?akkvn$!0X<}qqpuP)vQ(&g4JaekYA?Ecdisk_D#o)=0Liv)Vf)f z!HPg43TfloRoVCz-z9&mz@;s^yEU>=4YKKLUL;=?=IK&KbTy@0qva%xe}i(O%QCxj z1O976In~)Cpy0=q~!pqMh8%HUo&iC;%J#zahDF2dzJ&?H2#1 z?xMW~*JGWwbjH#hmUb-NY3VLYXDz+Y(hpg>+tNLj?zMEErT1I9-_i#xJz(jBmOfDfC+9wS{*Dv)11Iq(PT_By7Ht?7 j-N=bSjEFq);v7cB6g|juI3t!ZE>`Ib2|P~ox8U5rXN0cz literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/SignModel.class b/bin/net/minecraft/src/SignModel.class new file mode 100644 index 0000000000000000000000000000000000000000..174e6fcd8a1039edb41a3a1240ec428529c24b99 GIT binary patch literal 606 zcmah`$x6gP5Pdz#Ow1TFG4AU)uHzgG=)r>v;t~kBfFpu8Gf6AaF@rIRM}J9h0R@+< zA0<||gC0CcLs9jr`n}iHAD>Sz0Om23hlxH7{dr_CprZ|g>iY_yz8_L}y#YjHNHm7k zHxRbe#EKe5G?WYPO}4-)?^V59N~R(VF| zKv5o{+(WJ0LAA4X&ep76%gDAqpyj)7nQ}m<0o~T@ysc#|Q}%DAOc%v|9mu? tICRX?7q6q0@&$6g^Lt?buNqW0LTZPXkRICB#rZ+l0@g0WnZAlMV}3Q7n-N94RBoX~I8Y z37c-Zpfk9gbiohcKf!RWWCKkyWZ`qA`_8-fymO!Y;nRQb0bIj_BFZ>lKtE;$>H-%8 zE(-iqz$IK3xFT>>;98Lj*L(3Zei4`xn9t)z9yb*VQ8S1w-*I;ol%-JKS@fcjS)k&rub^Pca;RJT|=ihRiWH_a`}ntGz3F9eRO(EpJ2e`{^7x#92jT9cW|x*J>3 zqo5VJkGI`$gHL&8!sN&TOD#a@Rz;Di`Lds7;L80Oijx7dXW{on@{Yf z=kR=oX_ob*+?-VIVcXYp^fs+OXF=XHvDh7@V44{(7Ed#gZ z<&MBzfdv5*)jSpr{E8(5_i*2Ug(@{2ydbH4W$9IKQcL~u+Hcmk1D^(GC$}nt);nqIwt-mkrpSB&NEhI42(TcoXTn9FyEG;A;&mj z{tIPJx1pIcZDh>RHgt1PZzF3CX4}a9O^(6{aSVB45juKNfPoVF*s;W#{TQbfg;8?S z>aUQYGGNVo2kjm5Y3OmX&70|CAq_=luIj_1&iu%r?%Wt=Hmf_YF`Yb>%d7h88;p%G zos;xH^3+M^^*^C!{$dv`(KnQI6b}aQ18?0FPe04EkCRb=_7ST}-R7SZCTLzNQ=;N> z*8B&(Ur${+*VL69BiKXX9J{7vC&`j*iMliV>3c9Vyxq4) zs!rm^&YnwjOllwR?wQ_0Uk3jdRw4=9QbLW#oZ{A6f-+DMCrveNzqlFZ`DGD>H`(D8 VrO_Tr3i}U!fp%RaYg(#d<};p8P?7)u literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/SlotArmor.class b/bin/net/minecraft/src/SlotArmor.class new file mode 100644 index 0000000000000000000000000000000000000000..78e3d94f2160845076e487bcb67673cfedbff456 GIT binary patch literal 870 zcmb7C!EVz)6r2}3ahy1*X>nT8LIZ83BrW8~!4(3EK$Z%ZR6X>B>ny2hvaYsHML&fb zw_dm)wIFdoaOI;AZ{4Uusu9AH*H4~#^JZuF=dZ8d06fHM1!XMQuy9K+%?cK=WZ|}r zBAOQNSXd_5p&BP@=k!PrC?Gh)NgT)%A=5;i5?b3*q`h%0MWn(vY42D?y%&Eld_rk6 zmT~%sAlm;T=i^(6OhcZa{2V;EGUEsQban~mRx)6>GuzzrYBJszYA4(u@t|P|M1f;n7r}F%;=j28Sw{$UzV#GLQrDj$pJqoK2;lOjIPE z$9h=3KT6UkI=lyO!;{cK4J`*%I1X%7EZlW)4=aSl>j7#LS!XVKrAugB@6{;bS>E3G zT>c|Uo#bDPD5KIG~1oLqhZWPi?3Fh?^^+`-Z)pTPJzD$zctjsN5$19N*QmV zyK&z$y`oq80_v_`pwRWK3mBi6L);6@!sNBg8a8gQ;ymjSSF=;4fM*q$v9|sh<_{F# zV@X%vQ9MVfdk*6REb|Oy;|!+pk%`(Gcs%i1$6Qt$%f@5A@wf?ZD!amlHKXdzXc5;v Sc&(c+JzX|y2MzvL!2E9l7t_lC literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/SlotCrafting.class b/bin/net/minecraft/src/SlotCrafting.class new file mode 100644 index 0000000000000000000000000000000000000000..86b401b89888defc7375986a94dc3efe0fefb152 GIT binary patch literal 914 zcmb7CL2DCH5dLO2$+nwq(?k=si8ZY)Y@%(zi-#01k;+0VLZpJXm(3cUO?J!nrD)In zCB1m@A}A6M9zFO6{4XNvylseuE(I_1=FNQb&Ae~k_upT>0(giG8y3p*$f1(Q4cye` zmNv^4supU5ydR5KYEP(Gz9FpahJk90WEdpj)=})YJTE*BLKVet+l1V<45fNR=(#D- zCu7-(LM6C9Zl~lgP+gt%Jg>1&$aJE9Kq%}o;nVS`7sSs+Z^)6nJn~d9+80CFC)Cqs z(fO_t{z1F(lCTto&!m4aKHQ0;QFjk%3T22M`{oJ>fs(oC;RE%>PewR$&mR zt~?258%)aq6zuNL$fNR93FfpCl>Ll!R56mv&_h>iiKc{+NW4mXJM@ zeH(eU4&NS3^QGp!&2pxkE$2Rin)g4!_>fdBuwCRDFpFM7kvVvH6sGmdd>WiJ%=a^V zj$>dnzn<~ueFn^-aV>MZ+WZJ(0+VotHSJd?$QbyBLUPGWkTvn*l<3``A9@G_dWZ_L gY?ruk5jB2{%l;NeOB}Uf{(?apKN&-~megGT3xEXUFaQ7m literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/SoundManager.class b/bin/net/minecraft/src/SoundManager.class new file mode 100644 index 0000000000000000000000000000000000000000..840db0ddd129faafc4a2c3fdb966b6ebd537a419 GIT binary patch literal 4530 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 R5?Um3NY*DA9f@iN{2wNHP{;rP literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/SpawnerAnimals.class b/bin/net/minecraft/src/SpawnerAnimals.class new file mode 100644 index 0000000000000000000000000000000000000000..76aead623e1bc79140c245e61b6c57883e484eba GIT binary patch literal 3155 zcmai0ZBrZ96@IQHv`8#S2v!mV2-vYLkg?jNRlwL_N0?YGwh8zR=fz%03l@l7EUj#l zm&R==eNCG-Z5lhNJ9Q_+mwaeDSn0IWOfu8ShqjZS(68-J=%k71b5|H+3#Vc@d+t3i z&$;KGb9VoB=T9F1coH}L*omin=toMDQAv*Y(StD`$bhh8V^ta|Xg1b9J` z^PbUbfPxDObU(V0QIPc`2SdS(f>}Ry|BZ@EfL`x0g;XEgAyN<8%6DJyFoj*+iL!~#{aMSaFjl#1EJ z8LL>x4M`V`Q?{O+Kc+8kSa!}D_M~p+tOe(Ad2@Ec%A0oDOkFIS^8&*Ucb880ZUg1m zO<1M8owrP;A+Tr^XRP9;dx3Lb;Bp&>N1QwlZ6irf6s_5!Q7To>KGd65VDe_Bta34H zjOAr!TAX7U#lvQPK`)f{$$L`q6<8|vA)(?+__B(}@q~&+TvAa4udAmvfe%2bIEY~t zHp&VvtGI%z0*}^O-IoiAx}@Soyrke|6|dkMDqh7)Du!@C#WfksHzoO&B;Ureitk`W z!FN@B58qeu1N>0MkEH%}=T+P)y@0JHn=6EG@CTu{4WcHsqpJI?H)5%D$^T$1&Z$c+@Dc0T|v)!Lo|y zb5_}DSWj$JI+FJ1XwUKyOZ94^Ng?Ki#;?DI9(dgUn=LBI9?2ck-<+hxRRWT%tDpf+@VGj ztx}d*vWw-cZ4u>(*fxW0%XJownF0$kvBiktcit%XBau1)aeeXl`J#rhazP-2M?(4q|&+oY}_(BH4s3WbXrjLJqH1S>9 z0+rGM3~qRur;hZLi1)3*T|wQ!4l=G==ynfx2K~1X?TdTjYw(H>p;Sf_PuJb{u_s?jU);wCB=6xUP@93d=*pPD!iQbMbJi_#KFhb7kDxUk-jIfJA z2i?iK{xvlI5lu-inSf*ziNbSxK9HdGeR0jJ@wCDHzBb<)nv;I{2qhcjqa~@vHNV!N zsTH(dN1gk<&87ASgx{4r?qs9Z=)EO=tND{nT0=6RsmWl_n{0L`Lt2P}WvxjKhinP2YGc-FGjDPMC)Y_X64A(Yk&8yck?>rEzqw2#8i~$j z2HGNRp-10z%xB~!X!VbK{(|mlcc^Eof*s^{PP^k|ANvry_J>!|xIfYssbG&*_g-6= z(K1ZNCo@w)EYv&KP(j}oK?U*aP?zgOye(Y8-sO;3z4P*NBkA+>03mLQkHla3Jy@;i zPn?G9W;6D%S$05UYwpBjtms{Az}>9iJxH;}C(w&Y^dW;dKP&sOK#fam-ZE=%iOu^8 z{j9KQZ_;XwZTk;ADHIHd00sqnLv&$C?7#uB7Y9WW!{QJ|#1syR=Wtk@M@nQcDhfCv zE@Mnw!_(po92IXPEpFn3_y|*sctU)PXT;wzDL%m|@h_Yf|G^pYUz~Mu?z$B8yBhI= z(}ll*y3Sx5xu>9qVT>qH1b+$|NP*_h;1cVIqU9kfQduhA!9QL64e>L2_h;}a*tO1& YssCrS&Temdm}lTqiUkg_nO!*iKWYu%p#T5? literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/SpawnerMonsters.class b/bin/net/minecraft/src/SpawnerMonsters.class new file mode 100644 index 0000000000000000000000000000000000000000..f70eef287e13730121f83784bac8e398d1f6d83a GIT binary patch literal 849 zcma)4U279T6g`t}vdK2KNo=gu#HM~GEq3vxK12$#AS|R3ja0;!PLnZ?Zf3<RHXw zBn8`of>m+XZ$cCq&^h(DOUqM>W%q(CDpL2 zrLv(4UMK1;!|qu|o@)~g+F{r_!{mh5)v>fvD|(XG(~0SeM>17gnTQCpr&Vl)iMLbt zMJ%FTL;;?QYelT1;bNnR>$t(NJ|Ema0x9<vVJoB&XoeK*J{mM-d73(6rP0tS zLu(O5LN3s08xBn!u(VmbyXKsLZEhVQ^Mw$Gr4+{k?P-rZ)fcFGnL16m2{B!|eNx-{ ziiI-6F`R=kJ`Hx96!^1BW5P@MgVTK{Tc0K5z9ajh>QuAU+zE1@Pvt8l2r^qC@q1(@ MAbEx|VHs3@1JQ@qu>b%7 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/StepSound.class b/bin/net/minecraft/src/StepSound.class new file mode 100644 index 0000000000000000000000000000000000000000..d30a8be95b7597daab320341af4fd55a92f0a563 GIT binary patch literal 1114 zcmb7DT~8B16g|_HZd;aCJ_Hd#!4})1RDJQG#0Q!*njn~z;Db-Yb}UP`yUp&Dgn#0% zFq%kAc<=}Kql{;0DU~)RKJ1;DJLjHz@42(Teqa6s@Cq+8u&|s)68DW+G3LP>uO3-g zx3D2F6KU0L1U6_;u&stLnYf+ zg$gVbOXCRyY{DAX?FeLu4jol@4S#lcv27Z(F@wi8Qb^m#VA_U_X@NVtL7*cY%I-U* zPl9HYOCp~_!Nw+@2(0)@S30cR3FRkUi9&}G4b)@sjc^CYr^?X+Y~(0|B1+W8h_x-K zO-Hs>E$|(wKe+mYyGTo4M*^D@RGZMJg|ew|aC3@@oDy(@jiWF0R9!)vm=(qkx`b|$o`F>z^T<#IiUxA0`T{QvzaRlF&r#jl( zfTAWnuiw1XHD zTo=keAj(@8h?Vmfh?ff&NPMH8v!-2S6v&q#W14(fGR^ZH39`=(m{z$8qNd8<5&tp_ zOLt{2u-R+{gZO literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/StepSoundGlass.class b/bin/net/minecraft/src/StepSoundGlass.class new file mode 100644 index 0000000000000000000000000000000000000000..88548c3ff02ea1e7c012f24af4d659411ece6d3e GIT binary patch literal 356 zcmaJ+%SyvQ6g@YsO&U{MAK;=J7ZqBC#+?g`3x&8TZX)id$rwhHiA<(`S6vA%`~W{n zyi-L4!GZgjd(OFM=KbUK4Ztb3L$uKgu;rugV?gN4lvehfus@#PizgA6LKksrjnc(g zl1y$1?aMlsg#KJC+v+Ue|HcO3QCphJj^(0N@=3kMJmw6t->o|zGMHf~JD&-$$;4F93v1TFrnJ01r+fZ%gC u;;EYlN5`YX7tk~Jgn)DS&GgsYF5kZtL$1VlYsXvtkli|<%XyQlhv*YG6-_Dt literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/StepSoundSand.class b/bin/net/minecraft/src/StepSoundSand.class new file mode 100644 index 0000000000000000000000000000000000000000..43485240b7f6bc38cfb9573d904d9335d0c94c9f GIT binary patch literal 353 zcmaJ+y-EW?5dP*8bC*kEGzb$49M105MkSRpWs*6oO*u`| z(Ji5VwJey>ooU0@>&2Yyjha_7>6Gj)EvtuYxi$siU^x2gL5KymIj7oddYR+LEk9GH z82goN?4UtttppjDR&BT<92s`WLN?}B-MM6Cb9vM+C87Th181noNBs#T#2L1rRYl~!E3$X>4)s?fTrY@)Bx>IydX>A literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/TerrainTextureManager.class b/bin/net/minecraft/src/TerrainTextureManager.class new file mode 100644 index 0000000000000000000000000000000000000000..9ae9b2e713ac2edebd4084fdd72cebf3f92c2e8b GIT binary patch literal 4484 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/Tessellator.class b/bin/net/minecraft/src/Tessellator.class new file mode 100644 index 0000000000000000000000000000000000000000..89de137be1eda28c111c397d1bb4b1c64a599d4e GIT binary patch literal 6069 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 RNzW@NK9*KoPN6bf@gGPIcgz3) literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/TextureFX.class b/bin/net/minecraft/src/TextureFX.class new file mode 100644 index 0000000000000000000000000000000000000000..6af5f67cd8ef7a3adc2410d3761e9fc2eb0f7e2b GIT binary patch literal 486 zcmYLF%T5A85Uhda>GJY{BKW`)?!i5JF&=!7kQhyb7^A0Q8F3K?vn~exD-XoP7(c*| zGS;j{GfCBSPj^-Ke15%s0N6!6i!>@3q_AqBYM^Fd&A@sJ8!2oGWc-ort0Ngof!Otd zNqA%3(mgd55G{d%)UrQ(y1zZvvO82gX0KQks%bb0REu#s^oOeLKP!Rcp0E9IU%+a# zwl7GB;~vw66JM*-$*8M>juBzuSa*EyP9WYeb=mfK5_qafA%T47N4t5sGmwwcMhRsb z8Dwqbkhf8QZKG&l4z@s5tI!?MzzgI}=spCV`zIh!G!pJm>b`r{9VjnEo$IIhMG0^X zWO)-tC}QeIOpA!=LXNSbgn8luqjSbF@|N=o;gl@Ar)P*c@fqR} s#C3XtUKURdNou9A%qePguG2$c3FTk?O4P-v{@as$0{0edGUKd#1F#`Y*8l(j literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/TextureFlamesFX.class b/bin/net/minecraft/src/TextureFlamesFX.class new file mode 100644 index 0000000000000000000000000000000000000000..3bfff49c1e5f54a430dd2527afb5b1d1ae7dff17 GIT binary patch literal 1567 zcmZ`(OKclu5dOyAhaa0}v+*_wi(66*P2IFkpg2$LJRO2kP-%op;oyzEiS5|y$Z=3O zATALcS_ujQ6cr&z4%`q$Esv@NP6#THK;py|i6i2Igb>2azfMAccC|bIeDnC`|7U0S z)?e2@12BM85HZ{r#QiuL!a?)|Vd9t&aVh=M`;iciqgNTzIhHRa{psfBJD&1&Q<2g? zFD^=x79dT0#bWXW7HN(U6eol@sUo4GkD%w)YBk5LXNol^Q?n}$!S{5A&{DQn_ZyYb zqFbz|2vX1Nu_t+%tmZkkb*|_-kF8Y}oZ7s-P-cr#b?1w@WrDv)#I>BQ+qvb__KN3L z(MbrMt*+H_PNpcrBlFIBeT{3Ex%O)2+{u#ttgWJ7!vlCw#VHLBA*tamSQT;e~>1nbT*=LjAD_fC|n;v~`{H-`|N zyF-NN-NHXBhW12fH-oZY`aT|({{bUEv(sYzFP5GIK@4- zU3;ng+)82E6)nzl)_Fp(Sh1I!DZ6fqH#UK8eya!h75gBGMzJP|UU?Q0{R81{Mj5vI zcs&yT5OftjOVjXbMof@I8HoIa=?#T8Bzmv$?S`M_4R&&2?ES?AgVvQiQoQpuqy>e!QnCI~gndO+s8J6Rs;x)+eE}6T+=V>Es;a6d` z`iujmL8U{{UVj^kCbaMyZ$SwQ&1fwd`oe`&2kRxHt#lzNc`BpZ-d>2>hDI{L$%f$Z zH`T?K(lnQA-^6%SKUCnuj})?|s)q|%Jzq`+cZ``P40%x1cVO5IrpyqxHJntLBx0!r ze>Qq)en*$GrnCoSX59ly)(l*l_xjN)M!@Hdz(+X2x{eUqcpMBKwRZIK$PKYJ#RGSq z2cyVCR%Tpd`#KNDMcji|d04J<&KI2fCI8R9!BPBx9{h+ne&XNQFU;~AbN`M$G|*2z zoFe|_sRKzG#sH-;NHZ9sM=?rI@Q3~sQsg2{&tr@(Vw_&a1igkydJ`Gi#teOcN9ZPI z=@#Pj9p-okz)k24_@Su0FTMy|Dd0g?n=l5Iz2xI>%X5czF$vroXzTobx9P*Ze*@`%F}wf( literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/TextureGearsFX.class b/bin/net/minecraft/src/TextureGearsFX.class new file mode 100644 index 0000000000000000000000000000000000000000..ff3115d4d8e07fddea1beabb7d49924d6fa9a283 GIT binary patch literal 1751 zcmZ`)&2QUe82`Po6DN+_IBC7KYYSalSdw+g)@|u0{chSov#~Z~Lpu;RaZ{(MT_x_Q zkeGHD6B4I!-33iZJ))ttObGY`5C`r%a6ufoa6t&QJg<||!8A*LpZEECpReC*|9JTA z4*-U7Gk^rn@nulPX`Bzhk0f7Ge7V4vixP(XxFq8;uEEzWEM;uM7uXa3|1S@H8`B+N1>Wkav6*pBX)w#C4*3;`~hv#WNE z!E>7gAuh<7rBc;sie1UE*StxFz6sMZok<2UmW{thWX>)bNqf3}mFpmWV z8FVW+gFXdaeAk256ui!tUUW0`T85L_qUgn%zV4*zwPNbOr!lmWzFti6>XO@5S;C@% zC1fSMt>7IjOUNm>ifat*Cx%;Y8@M^8$MZ>zgU zrMaqJuQLS8hO=VS-G(#t#g92q2G+a`%JL~I4%_zB!bY8a`@)deQ70+;y!!(wq=Qh1@7m?ePp5r1Z zU(<^OmF}0@!5hD1RJRR+r%*Qu-C`^g&k$3zsrrCh#Juk49OkoxBtP9ex*+gyK+(>_ zG38Q%l}ia(E@d2dVCX0A7xEK`I*G5rp2E{r_y$5k*oT-1i}+67hxd5nOLTcR#L_;b zgqQRYeN#HcX(MFs==ZJ(J z34Zz-NN5!)#G5$VDAvSNX|q(x2SJEiAAM6)8N)+5o%h*u-`e>vYk)LZF~`YP)q(g2ZuV%J9eQ7O`~_E|a* z^}AFS(m^fo2pLU&gc&WM_CCg#CUbI$!h5v*8^*ma zA!!Po6I4}KMB1S0Z){t%Ah$}llIR78015XX3h7Yu$TXi#r>069LP1j==8rkCptYQE z-h$S8!ubkX=wbf8$o3BZxG&K9>l12!V~BSMcp%8B^gTO6pR*wX+Zc^;o<@9~#`FPA zq(U>n@hOe?3!KMSNaA~>@DncJXZlw>#})iWzl+~7%zPMOA&jyfjInbV zXQP;4i|A)L^s!Y;y8sx4bco9y5Br-CaD>mH5EO`I9(ovKz#)c+PLpy8VnYf11usD) I=9Uou2dWlyP5=M^ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/TextureLavaFX.class b/bin/net/minecraft/src/TextureLavaFX.class new file mode 100644 index 0000000000000000000000000000000000000000..a61f76dd04b807780186ef2aea20d37b9992410f GIT binary patch literal 1788 zcmZ`(-A^1<6#t#s`PeUD85k&CDAjHeww2u$x>!nCzII_-Xe5xP5gv9HrtEH)fovDj zsqH zoO9>r%_mO*bm5{0C-J&~b}yO`@t_e=0jC6<7SN%gQ|?Pu{U!Im4|s6~F*&}v`nlYH z6p;IvljEbm{3`bx`@<`rU;5!AFWl%-;t8V39r#E>5eB>fo1 zh#x6jAT--nDKgI|oGF@DOOflvnaB%C3Bi|IB(D(a4{8Sr3*zIv1wO&p!g9`@BQ%V@ z#EuJFlMxOnd)B&UaKDKymCz0!K9$GJF?{>x9hC2|rN2aSMDAoyIBKU#s$yelcul*Q4-Jib`^BC^^ zT(9AlXJfJ<^P2tw@gPfzp#+6+l37nWQ1xC+HIyc2qlLl`ARDTo1p?W0G?Q3SXruhw zip=Bjg9(Z=Te6*uELYm{zx zm>2mWlyHNaJIWR3=HA02!3Luh`9#S7={gjDA|$dZzC=i`%j@--JH4S$UO&W*ka;6s zy@3UV{SL39zbSAeYsi6f*|ebqeA#qhwh&Xd$>f%(IieES7CnaAYiQg(j}s&q)UvL0 z)5nt>Q0(QjA@2$bN8J_Fv@|I`t2`oRPI6}M2~QVb@I2K)M?GqBh$pQ9-3an8p%It) zDx~=uFEpBSWnF+|Uhpyx=^CWa*m7o_6Opj#i=AA5j50S<76$Jvt3-B6$54Cpjl@IIWDCZIVQ`ZNu0BXFhP4-6Wj&AB0;| AegFUf literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/TextureLavaFlowFX.class b/bin/net/minecraft/src/TextureLavaFlowFX.class new file mode 100644 index 0000000000000000000000000000000000000000..8b1ff5af9d849cdcb082de1a81008ecdff9d0b7a GIT binary patch literal 1897 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ThreadDownloadImageData.class b/bin/net/minecraft/src/ThreadDownloadImageData.class new file mode 100644 index 0000000000000000000000000000000000000000..b3b27cc42f9792521d181f7b46a97d2373462dad GIT binary patch literal 675 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/ThreadRunIsoClient.class b/bin/net/minecraft/src/ThreadRunIsoClient.class new file mode 100644 index 0000000000000000000000000000000000000000..0b4cd7ef18ac3349f8ec5b2f84afe19634140942 GIT binary patch literal 656 zcma)3%}x_h7(I8UbnGx76-tZpqgInr6K3fGf-@c3h+?!v5K;VijA##c`e$*}u#AN6ElMYCpDx<<=LYWar~R zbDBmsRyy1HDu*(_JeC3!;Ct8zu!*ezPi^EGo(nA7lCUfF=Wy>wr21K$u-%KLf-#4Cp@T8x}%K1T-sHt&ui7*Z@0OH$JYWlh+U7C!*3n|BMY?Z z^likiUqIAf{em;1C$LCdgiFjLM~wniczUW#dC?tjqy7`l815NL*7}W{KgQhoaEYg z6L3c2Pd)Sjc$Oae1en>-!Xc;!f8&|?=9`__y}kSS3&0k92jeK&a4_Q#%xajkF^`vN z%Hv0pB$}~cVbQ{pg=Ge#6EZARW1)gh6pK*uZz|}^FxdO&Z8KzcqBv6T7&g8CGOI`Y zga>UNw}P6IQQX?D>@%d^cbkG?vPz0y2Au;T>-?Zi5mOFgLQj(>YKn))d%X8I=hV6b z8H(LV6HE0&DR{Hi7NWP?mEuImx4M;!ELL2&m~in5t1imOTUc|kj@K?cR2UYYj`S&3 zLdro;iRQ=eq3EfoOYO^}qmOoD$UW&iq#26d^Yhw$p+0cY(dsF$p{Gmt6_<)(eze)+ zo*69KM@(B|U=3ZP$JG*_EBjccs~o30q?71*>Cd1qi^*XG*dgDfNWp(|4d!oL!thg9 zF#Ri}&WCkVgwxOu!6FIU|}H^`&WgKJofAtEI&;fCb^Q3py7);z9cEXtl=v5Ppkrk8qCjWL%iB^sdCfN}3wAAQEtCl{ ztbCqgtBzX`I5-lhSGL?jQYk&v0?7C^VogbQy&2!il}HzIiPmf@f2QVD=BKj)!y|3< z=1bNpq`XSiYq)vE#aOI4KHZ~;%tkeD`Sxkocl;%RtvRyv?Ne@k*0b^}(CPn&a~t7V zryO#o=QbB?f4b~Zf7`bx(^5{N7h|5AcCXp4@70!4Mf$*|d;5qzqZ894BDO#FRSRFmVFMP5cti^k;V&l6;dK*##oq+BC?=|$&RX@NDxm!v$vxAkxmJ!r(!!I8QA-e$3EYpvUWWNMT>>#WhcjCiaYt^aUrmyVwLQa=Mr|w@ryjk^!Drb zHGq|RU*7`mlemJ&#?Vo1P}^f|^l9O;qTzawKpWq#?Hu$KD>Ci+c0oFBjp-|ju$FZq zsbplLjf}QP3fdYqCBl6MZ=}~j5qIkGic_z%2ga>e~m9f zgP9{$wsw-Rsb_1dJX&%vvsCwO_Pq{I#&%nvnByg%4rth?E9|O!G9^cik$AJn$s@iSPue9K|Nyd;x$|{#L9Gp`c-ebP4v#*_Q0)rdlVThkG z5A)-u8-|=IJQ;FgaTl`hs-06s?Hnp<=S<;l5Q77b>*Kub;V!s$jopTLOQAi%wOaut zbGF+Mbpajx)&h>)LL_kq9TASEE%(rQIdK<;t}Tq4pKvE)&*jX<*9 zE)mfO6Px)#7sD_=_$IIoDMC9Sc2N?CNhmKB%G*1Zi1jSPco$KgOm*tzX_GqjHI z`x6+T(mT;l{)2dctj?@5e3=Y8h;d%(wv5epuqA>I5SttSC;IPU>tzYNOH$gh?fpb- z`}i_;Q1;k6h%RG*vU%!Nr%gQd@zgYJA9S)Fq+xr>Ax_iwVI2Dzlmj$}#{W9Y$Iq(hgy7FzJ6n5C=7V%wLoGqhsY-1t8brN$3@fZek< zq0jL=m>?`cv-aLZ|1HD=io47nEMs5dO|p$p*ZoX`AV7x^r4|qJHbEO2K@<}e@1eU?0X`Ep#!e6b$~bB79(niQ@s zqlHNs);@I^=qgM`2ebjLG|)59Q_2lQ2co6i8>AL0YlFNxM}Fs-RkL)$9E1JTs-~9G zfrW7oBbRSu^lfOXr$}rpmUs{2u?J&^<(7<1$n8k%A#P1G2Kg&R{!%f>xE~*7;$C3> rWH8EKNE3L5VSk$M5x%^`U6$}IM(}MW`X%1``TjA&F01vbTCe{XtEyw} literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/TileEntityChest.class b/bin/net/minecraft/src/TileEntityChest.class new file mode 100644 index 0000000000000000000000000000000000000000..97d2e3218b1c974cabd4d94de537ce74b2bb5277 GIT binary patch literal 2154 zcma)7T~ixn6n@@(un?B704WH8qLhY^5~M(DDPIYsO&g*%v52*uNnyn(*)Yjc2QR$x z4|wB+-c?6$bf(Us&c2jgo(cRK;TSH32szS@ghep|o7fs7Bt+K+vy_9KK(L&xdHcGhKAu%*xSluj*1Uo{GKQ)r(BW5m^ z_UwqHLaP`gS<=jG7cGVJq2%ZpMO!wB#txE{3PYjf*)g{NYHp_rsHbdLH84{7sA;A< z6@WDABW#AJa|PD#3XP^d%00?Ow{zxJG-H+W<`%hWE*ZJaM5$Ov$Fd3+LUoeTlFeTbQ zvcVXQ(~s?0oN#x&k}-O4iyeb5R1;kQ+WEn zL8tSQwhxuL^u&4ZufXf*Ch7MTd^Nk0YA(BvFgpR-*nI~A@RN&9_R>X|0scJCVGcc5 zCRYh^G)hk$?vXzc)ZltSY>GUMRWYWB(M^v*yG$e#IYc1B!r=-UzD09H&S&rlg-&Td zsROCgSTI0l2H38Ya6=6+X9Sn3nQNT-wc|8Nab6r%#~XjZ#B%q z&CdAT^T9|3`eQ6af)%vnlBhdW^=v?1N*D3*5vCPOBoIJ$E1GLiC?H~_+Q9-~l^?E8ew-%A3#|HX4 z31GXuM|j84%o6h~w15^YakMewjdO_0M7ct3f^rGBaSL}SWg0f-Ho-jYVCJQLd@k*a O$9FwVmq|vuaQPn+l-fA} literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/TileEntityFurnace.class b/bin/net/minecraft/src/TileEntityFurnace.class new file mode 100644 index 0000000000000000000000000000000000000000..d70ab2555ce296198b2a6f7c7e661b683cc555cb GIT binary patch literal 5238 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 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/TileEntityMobSpawner.class b/bin/net/minecraft/src/TileEntityMobSpawner.class new file mode 100644 index 0000000000000000000000000000000000000000..7a8cadcf017bd3ed482611f8f8be6974f8e6a4e5 GIT binary patch literal 3397 zcma)8`*&1V75>i5WL~-CF-$@pl%g%k%w*Y=wuA;!$YTfu0}V+Eg;M2a<`OQM+#6;l zFYr+ni7(VrwM8ugKB8@XpveIK;8K@MT`rgZfiBn5pZpVCNc{G_Gmxwd*38N|`|Pv# zxA)n5pMB4t?*H;v0CwVT7`reOLMM&{F)Z_l45Ko<6v9y)6Y6Cdj>~W&j8|~d-#tZb z{t4^VFo%zb>_@{m1wDwdFc+yH(!S(*z}I&G@ORI==4gnp5yokZ2XH0~6KBJiK*ry_ z)!C+CjY|l7Qh=;V*q9RNb24OoeM>+X&B)1+7m;cI-oKaB-PsYCk;Bc(Fc-vp80T>z zh>ywqabbQ!s87o9S^%F4;L{2fX(OZ0E2sg|llIs^QXw*UR-e(^GrBe2K9bLx*7$A( z@4P-sF>VK@vc}ADS^2w6%gpcLW-NYG@!WRWP^ca>E#vU?8Z4yH}+Y1Gf$@~-DT2su`+Au>He%edAN5}VOwm_ zGV<+{w3W*0r}OQ(Y^t3*qxyKCJvn7hTj|~6RCqRP=8aL?Q3{XP)7g~KZ;Drqqnun* zhwQPDDSg&5vQNp;HT0rS!)|oZ(IInO!wcA>p$FX>K7)$^d{)CHENJ)~x-@)VhA*Hi zfG=wJ5-w}lD}w#lui?x1N&sKg@H(zAzPU+z!qD&rzQ)Drj6TW5LG%Uibq(LZn+jXj zAIWua(41i!0(eWqReUpmZ)x~8-qvsp-_dX#Hv+h+;k)>rhVSDC8W!~lPvkTKrprjtWRQ{R%jmfrt;gc4e0P|P!sF|s+B0Y7dNSs?Wu$w1 z73vAmE0>ey+-uLtbsn zo*r>0xjJ0#Dc%>YcyK4zk_tLh^)UNxa(p@SyxZm2SHn^WNqgGqg=~D%LxnY9F{ZxQ zK%6r5IU_%0=ghomTRm2K*v{)hGUjr`{(dQlY6-t?Ii2c&ktM!cnrx&Ir?TAKJ*b7p z%C*R1eg&`IRhpa1(6GI#F1M~v?WDi5?qp}qAs0=`A~yzf!g<5&oD2C9fy z4ZboEgy$YwyxsgXOLKSey*WxmsG=u`=QvtG^;OTP*tx`kHfsu~9lLyhi_jX*L2|-t zIGq)u5s9?M8!D=*stVZXtfQ;e$7v-}N4Douq<+l0oLWW|S5;ALdh;5#BxIlTxUflA zxOBzh%3nptbDa?=pi$^+s1XT|FU`O%s+)n1fVU%97px21RIgLO$AAAFH2oUQyF!hj zKfrfOIE|qKHj`K#MOpezIbn6DFsD0sEQ&2rY~@(M2Mc)OE}m5A2-k&c{5KF3KW;UK zey_Ha(A-#U6Dv;CwvAJJBGp+*PN>NB7tnIbmtN@HKt@)G1O4mu%V&)flO_r z^=xGUvC>8X@vFEl+j6Lcx1+YMwkCQL7s(1PMA4RdsCt=8y7Qrll#|Fu?m9_*+s#62CzUeuo(Tf;j$0oPVGV|HM-&fp)bWPpci+t~&6X+KnCR zBs$bN>{M6qym}X%>MnMv-}0gMXS|^Pg*~1i_Ig^;?b(SQ&wg}y4k76o#y-zc#5^Z) z&~u6}8@V_`(C*`c*X!L@x$!@!Q0g8w2he;EN7M?RZCU`G+*FD@B?RzqEUfT&{?d+c zDpsUDkmJOGZ@Jj*XZFe~csA*@{VrbOFq zY)`aBo+;p2={jwZ=L*=d1|vdSz$n|zON_k4`WR98ek)?_En+nbRtKTzkFS88gd*j6 cqk!ihb}$$01i@Y**h%)8R|#|2Io^x^1qFsN!2kdN literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/TileEntityMobSpawnerRenderer.class b/bin/net/minecraft/src/TileEntityMobSpawnerRenderer.class new file mode 100644 index 0000000000000000000000000000000000000000..9ac15dc58aa1451dc5ef85dac8b932d23d49b797 GIT binary patch literal 1796 zcma)7TXWk)6#mv$BTL>mj&re{268Daj@?FtTSHP(N?j)brwwsPNV&?2qAFEnk1RLz zfk)n8CNKN~X5bm7v@Xna!VAnWhhq!ZIo`#49Pf+e1ANHw z5y~=%S``MzHcXBkLGnze*>3T1oWZjU)Bg|sC>sogCn;3wreW*O5qhZRS(>xIYdKo2 zZo2eYEYHj^aLZY3iiYw%`{Ura?&)sB(S37=8Y)*R1+_o1SF0`;8B$@-Il60U6;g36 zYP;T}Y6OiLwM?JF&mF^FtL~bHKR?xZ#W30#NLZP&-5@&yhG!C+@M_r&D#NgN+u9YIpq;1tK3I#6q{M)Cv0UE!X)mZ zFO{5CXR#W$Wx3usyue=TIbMK-G>5{Y;^ zb{8WpoD=~?AOb3(pVl}9&M}By3MqjC`sgPli6sos+ck&{4B-`tfV+0k+EIhuQC?#$e8?#!LL ze&fHdy$;|2{u#$090N0PMBv0QfU^ej2F}IN0H+BqJOc#-ABrO$@_rMF2%2yjvqI(! z%*WA+^P+pfz{7ET7$1q#(IY}WD*itvem^ec6GA>Ier z&D3)0K@G2xoms^{z+HTe{Fs{~qT0KJ7(xw+W#04illM-{D0J1pbXryg zzO4fa!PIsfh8$|pB397A&sg(>o>6ED`4di%omMbHj$xH%45l<=7!8LU*9i_Q)FpcF zQ-}_ElZ>WiltCSzJvU+dr>u!QCC%f3l|9R(Xx_jN6uNVEFupR28P6ZeTg9Tnkwlow zyyfQ7S~l2QBj`#3S9xMsZPQk9l~iFzVofiDy^LvdO<>`nDU99B!I-#GUdK9;vlYnB*Eetf-Y5>nkd@#`=nq$Ve(%!vd|Gu)@w-kSYp;+OBQ2 z-O)gy=O&iJ!^7IRg-2fvRraiv_i7!UVdJ4}zEp?tac|bo+8N$#g^mii@PKT8pR@=Q zCo!(DzS1u4wu;lNP7{alPF|X|TE)1Na}^RdQz>s~-~|&u#6@Gp$6GDC`-o~xT1AE$zE&z4d;hE&!6ODJVNF| ziD`JaH0ii8K>aL)XLYCV-_fLs(CZl_Bx39lUDw(geChXu>*dRaQ*70MMol<|y@y2kB$c5KDZ=fD|3H8W( z$Wcja&?EbV9@!=I$hM$I_5(e#5$KT}K##oo9An&pO`CpBk-LN_>Nq}>yaJV6M&!&D z)GZ*Iyo_jD{W2QJ8%t=c!)YywEhA1*Q$@4{Q(+0s3ZtndtW$Un?VPkI_Mq0WzT_g- zUwrFdFLRFw-bw_`I~%@*R`$`9>r?1kI$L9X0K%~nL-;$ph?>N)RW zB6bth9wsJ%y-4Y;8=?M#y#^sDJb?F=w(O^6gf{EM^`@&Zq8AaZd-1x*2I>)z_E3+A zd4%;R-MwVKqhuZv^9~{tEJ`0uXt|%#${|WGPGPS^H`WDcY?20a+JGplO zn>oFVTZC-Uv#E~ynTZ8#)$(m3+Ad^UNxnnNcZ%p%Av<#&^-rA5E?}2l=n>g&AwA`V zJ$fM_vR)yH@gE)+N*7j4ZY=wtll|p-z z+EIELPcb*U_}jxD>m{`jea}9R!{jiVU;Ro55Lw2T2>wmV+I!OCfeMG~j49KA&_{XdM`+CKmQ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/TileEntitySign.class b/bin/net/minecraft/src/TileEntitySign.class new file mode 100644 index 0000000000000000000000000000000000000000..daf17e418c54d40aa9fc2d5eb97293a0001d5717 GIT binary patch literal 1469 zcmaJ>OK;Oa5dJnVyQv`|rR5b$fj;tp1`3o%pg=F1&d;DRC-HC)m#&!D?z)2fOWl40a=d4oUWxfZvY zxr%g5tC?qrwMY`{W{E;dxOO`a{R)q?gRRtJ0gu@K+e~V#&fe{=uFp4n)$B<+QtJ2SF zxNP7GuKMzvzh3ayiw2G>3L8k`<9q1Hk39BjBy&FRpXvpo>sFifB7{*eiL4hU-+Rm1SGTqCvZEtov3`WVagi~m7*A-OC>)mPk7`;Qh$E`+7xRX7{ ze1E;WG~3GcNSr#7CUCN7YChnhD|yHNyx gLSyqkycAA&z7r^UI}CU60QbmpmSmlh&C!4E50<51O8@`> literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/TileEntitySignRenderer.class b/bin/net/minecraft/src/TileEntitySignRenderer.class new file mode 100644 index 0000000000000000000000000000000000000000..64c814ee6a3356a9e1fc9b0552390d83fdf04445 GIT binary patch literal 2143 zcmah~-E&h#6#s3L<|a4WHVuTde3bH0NLy{>L%^m|XiFg4l#f&p@oST8liS|h8*jFS z&iLSiI{4!7hL4UfJUfFS;tcxiU*MB(&ghJP0po~g6G{t>B{SK3&+hO1_P6JpJ@?mt zA3g$b63WD0Bn`Y~q65hg25`j0Q5^G6(z1W@44}>9CU)a>|Jl!4=7}Iqngl)N|M}_6 z8`^zbLsR~V+qb{+zuCC_w>Bp>hMrk+m|L#o zr8h6~Hq9`>Fq~*ZHgDPToTDtYs%cX*Gc##T)Rj}Bu#^?mroVx=4a_p^^rTZH&SySZ zH=nDDn~wAthPI}EMs4QYWv?L9M8dFZolEb3rO7Y7u|=^WIQHWJLAHnh#~}6@$a2i# z0LMjK;<$_}968K0bSEt(E6ExWk5!!#$2+*naZQ8X)$r?jcu$)*@IJ=}_>kixe9RD; za$QwZo~UM}D!av6PXHo_JVyaV4v7Vh63QHw-ez#Kz~@iJaR`SQ5--E8ot|NIOK4RV zEMc#s2R5VAuA|lg5gpE?Eu2y^r##CkF~nT2l(cUymh7Zkl@2}5&mK9#z)SX}vDNvbK^r4o@!6osPlq6*AV@s{i>u4>Sh8~kVe9QouUQYeG8n?7%&o2oGfVcI>s5q(jBq`q z=J^xvPYkyy_Kg_2JV9Laei6{(bpbdNG77O}+8d3ulyPB6qP zVo6TBPC=+^mMYU*O$kTU7!I{NU%OqpNqs9V*Q}x{|4(Enwr0^2H`fx_*M>fm$><1D z4yIk(^^PwXuyxH=84j+;+HzLhCHb@xTGG>^pj>a&0Nvxjtm`f)4e9FCadZ$K2<3X}sY1%+!Hy0b& zK2k?)JnTEcV|?^Jc0BqHQa@w-=y+FiD*i3T`nw*Y4;b(25BE3!b@Z!FJH{hsx#<-w z7kzc?yodcSL43~Hy(f1${TkRs@^nZ#phJ?^J0L`%GZ9Ca<~YXCh2s>Eljy-DB1oeb z8AOrAHtN&csS(Ghz3zZZzMrBWUtlM`#xC5Y&*+boq~B=%cS_73l$t*&H3`~b2>vJV zU>X=Ou-oVJb#!zX7-qmf`ZGK77z2+fGt^%xk8Al1kuaUl(O=mU5nOqrNbpel-;{SIL$7xa*JQ|ih(x45GNc{%n8Elw z?sJA>hcb^Qqkzkv9}Fq7A!F`@<8T~wPyGv_tL->T%QaiAR$H^L1(E3Y_@$ai{^{z- z9}#ic>74lIzBly6!0Rd*i9u6i%V%6A)smmN%WKVnF-LL0ReLPdJjhUU+y|sCVyGup zcRZ0HZ&SY*Dv5~hDGwumIA?pSb=%0pwvmHn;)*Wd9k~0YiRa zu(U+ZfqQIh(c)%lk;&KXA!~(f>K5IP$lIis>1h22*mVpn(4C2cX@iy!tK=J4Lur=s z4rw|-seXgh4bq2udyOfKDOQsFLX5~!X^S%Rl(~+_v-}!Tbf`wXaf?)vW5v+|2`mzl cCN{%Y>D3amy51C-?_@J1Dz&bs6ieaRUqof-^Z)<= literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/Timer.class b/bin/net/minecraft/src/Timer.class new file mode 100644 index 0000000000000000000000000000000000000000..3ad56ca0bac57ba40d4194186bbaba53e2a14243 GIT binary patch literal 1131 zcmY*ZO>Yxd6g|)Ocry0XHjZ)JmNqq?$pA4BXmCq|fhwXXd?=1UT_7|Wzl4eHaWo!R zqPt2}7eQ&eKx&Z?>Y`G&t;DE^1zXfgUADi0KLP5wgONa%?!E8cbMKsc-jn}+`Q#~p z1+;Rg;;4n)m=n_wb4<+f98O?fqLUJxG6)BX=UbBc_|*yN=h?G=-M{|}E7{f$EjmEz z3t~=-X`1-N#HR{{$oIO#YdUOeZxD18)RIE3=MJNbE31BAGx52Ct$Xg)P3Ut)ylad#@>rrDEdW|uWlFV=P++d?|b!}67TvlV<>X_eonnlPvoD6>JVrK#NjFh})sK7= zVpgc)4L-e_ypDBtN7U<6kt10@XHN WVmXt^lwROqI&Cdd@52e3BmVH_yhb= z##w@)2eZkWoymJ&cIW%&^9#Tw4n5S-a$zGh5;@p+aKO;a#hhz7D`lY=qTV=tO_NEg zMoGWaQjM+{T(RV0V`x_lcYkB@G_IwR)>%4D1A4jJs*A{PunPb%@Sm}Wu` z(riK#uU{-Q7x&UMM^8#DXM&d^AH3+|%~;OOJAHU)`)I)Nu>+UkM2Rw)5{&EgxlHDo zC;wy_TH9YfW@92VSe@<=$F!L`t*eI6Q0W#LFjYp!LzC2}?t&Z^)gb-=i%(am#b+y6 X?`z{OX+$6pz+T5)>`|DJ8g%drz++sd literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/Vec3D.class b/bin/net/minecraft/src/Vec3D.class new file mode 100644 index 0000000000000000000000000000000000000000..1a87e114aa5b89f90696b5ec41aaa158b1dd22a8 GIT binary patch literal 3441 zcmb_f+fx%)9R8Lho3Jb!j2G4$-cXXLM8!)Hypmc_6ct3!T3wPg#DrbkY#gEOv@d;Y zpLKefX`g(o^-^y$oj&&;=zCxL)@R4|JG%>s3e40I-Lt>5=lm|;cfQ|Y_~X^{-vAuI z%_xp5kkHr2AuEOtn{WajiEsVF8W6)tF+HVVH3sD`=_h`~-qT_@BZeWdVr zv;VKZ*Y)j`56}Mj&yU=i;4>PI`APq>6Z}-`@ljkJM$xJYjX9FXVb4+LGC9HZ^FOZf2@z znK{R}?q(`ZF2ikIS!N0M*?Ch!e2}YWs#6oDGh$4X`9&#OMYm{_i?f`BlBrP%YJCO? z&BLydE1fo`0}r`ZxEy9}UQ#+VS4_9ho|?8T({d{kVwLKI>lir#-kV&ssHMtnv}|W8 zC~9qTshup=u2jxCcD^d|H5&Q+9GOa<3>#L?9I+*=TcQy1+)}w&H5@Zr=i$TSnp!rk zf;%}EmL&1x>VoMGSgz?znfW5m<6_aB92+&tRnoX`@mxzD(n2xEgP04gT?*D>u08BJ zMXMlT1OehN!8)b#HV>x_cXF=RnkqLP_iEm*di@hlW>Y5=6fjBgC8Zr3#s3t^ zoH9ygpKav~S4e}F(4y#$R=-zkh=Nm!q9{0+lF(jTD_Xbgk{KMNAMOMj%XVg>psM9T z+b&h7snG$;GM&D%QK^{Bakn0L5W}at->~v!v(oN6_SEqclu`HPHOG;eX>)~K=e_RK6 zT!QBf+aIxTJ_Q;Y4NVwv8u7wYwA2FnCwPGF8HV+PR2f7tIUoXvrz8T1r>!;_o3DZ%lGW=`!ud;dg+@pT|LvZ~aUsyl zArVPbE=q_CETuwVc~v!gYvPlzG_Oz^&83A<9%YI>^K@s3QqbKhoI3$O)!lM3S<=ILxRldnUG_=)nSOpx_@~)V ztOHnyll*mXiYxo(vy22;cKy#RZ)O-`hO^9Yjv3B-8TJP_hM1w5^=$9(Ky*h_K7>X+ zLL*-2ZqlQAw4^ucjfBvoH zSh-d4zd@HWUgvGzo_LA;>H-VcHq zBA6wDPl@0&BKVvLzF>`CE{fm~4hJeq2Wm_NY83K`KW8w!c^iI3MIV{}eYV}ZP=WXh sw2nW4{t)4XezQd>QgLk_rBEAi3}wE>UqLrWd5Ntt%z2FS5k43G18C*C@Bjb+ literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/World.class b/bin/net/minecraft/src/World.class new file mode 100644 index 0000000000000000000000000000000000000000..fd408abb4d559ceba7307c82160d501b141b9ece GIT binary patch literal 32054 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 WoH3gG@-4h4qXxGX<=dR9-v1ALw{SB6 literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/WorldGenDungeons.class b/bin/net/minecraft/src/WorldGenDungeons.class new file mode 100644 index 0000000000000000000000000000000000000000..678fc1a585a3f03fbf1ace21f1f52c9766e10db1 GIT binary patch literal 3217 zcmaJ^TWlNG5j}Ug%U!Nk;zQhsjHtx2B%2gzE3RWYmh9Ay{0LLYX+_s^>^%6`wZw?r zWyqDCq-okFO8Z;%Cy4SPIr$(0xM*V}GTH)dfT9l==wE@hC{Q2)ilRV^07V0|i5hk8 zlA=^os$h+0=bk$=XJ+o*)t%3O{8Io&@og2uNUJ!2qbgE(NX0=M*=)D-7P_C9C8-%;1S9E;5LdwqY{(r%IN2ez8(8YZvl` zGFg;4(=uy$htxyyDa&-mDg-Ik@>iX)daXD%YuC!g#MHC-Yx%K7r&J!B$yM*=kWqVf9IBVm1MlA;cIw_Q~A1vmz&x* zG<=h5-{RsGE?(tgiHq0p5_LYiV3tkCwrE%`+m%9zYUIsUO9rnp81{CCyt{%7dv*u$ zsj|sc-!2e_z}?fpaBnAgnufDh%2VB%_-$QgkS+6hCu2D@;qgo&Lzp?!d8BOfncUnq z80W*f!<=nGXw2kNJ!_XshI?LUuGLL988UfY2jo0dZ#kbWIrHajr*xHCBlA`FFzmq8 zO@*>5+66jpb*i>GZP)9xExJQOE}Cak;0!XS85l+F+P0ZND)PaiTsAY@8aalc-KcJX z$UU!7w)CQzv96gG^@y^eTY@4*h+o^7E!)ndZ8-#~)2zocJ0#qm!3loJsFiK!RH6sY zAk=v_8Sd$9bMuPu*7JtJPithCXq0~cPWKew?k3@*(@z&pjn8##S7e6gD-~*Hp86|Y zpEvVVQs3O7Rkg3X2SBWs$_rHc!eVj3bk0<&4pqsQuU5c=mhK-juWkLCU4&O-1pfeFM5| zh(=n~Rnl@|?rr=+7s=42cj=<;buHi5C0*etP1m^U8o!s+Rl;a%@QinJuxPBJJKDVl zaT${5W_$ntT6q|9wSs+{5m(UPbnBY^?GUR-a38DK+m0kHLw6s<91l#7-X$Mf(pY0- zeyNM(^pZ+4t^33q!V%r4ye*7%68x7-tjSO`Zs4Px=>5t~&rRvECc71!+Lq^$t@KCR zR9A3cJN*@eT6ufc;GJ#2*1O)sa5H_wt(#k_yHJ@nS=uJPfn&|!tGGWUQ~TaPUkh*x z@_SI4uETAcuVr&b?PaV`UjqL4?T-U)6z`OyVS$DF}H(}n?!@=!zI!}x<(4QWz>79$1|-+ zx1hEdv_p4&0BzjwNeA>mK)C^L1If|U8oI}W(cmx98}+B6{x$Rvi)e5S{-pp-!0+5? zXfoH50~A!cg}|m~_jwKEI5aFTQx9w_t`<%13t5%`fr z04L}xYKD&0)99twb(mh%ee}AE;5+EY?-9cvY5haO{e|#<$6ov!LrlXki(!Nv!an9; zKYJB%wu}UO2czsqNU}Rfu|MG;`rp^DSOD>x&(hDU|hkr9?LC9Gmvco*k|5Ae9~bIb^LkQIJ|i^6X)EBpbM zgumj7@Hadud`$j7p*WwR;ORoq6NTX!g6SE-9B~D48r;AhbjcW!k&whPuzlj8}~HuPK-vXuW9K^@^d5R zZX?pbcVp7(CN%0oUyga((0jK-&6wO?=-<9D6;s*^vF!_oV*&EjN@T$Gz9$wSFVSRx zjsdl$wRWGoCbAzA1$WwLwgl44G;bBR>OoLlA}kV&L?WU7lT;uA(3e_^|1 z=k%4({S6Fp+Dd3o15wV?)%={F5*lnk3hli+;B)lOsJQ{VA+5vDd_Euj32~UhJm}_j Fe$6`DBana zVPs)p0YQ)$fSI2J2)NIQKuVkCzI(6FJ3jZ^_x<vYEZBwI?EhYjui%dCv>9pdKkOgw#UG12IX=P1?g3WT+OcEqvJ;G`3$q2Ao6by zdR;%c>vTivs9S#ICr(P~TCEfLsnsKhn>deBtDm^mW}JjxyYtw2>R5v`2(3F#^+91>3bS) zMeUEJ&;UXRtqN6oO&Yx}21%GtnM8RJGZbg3GO3p6)XYy{X89wecNw}waRxF)6*=M% zEDVP+H@^23`HXi@ZYhRRy7n47m1apDLVh?pycRcdO`bJG^jfNspFk8E1~*irFhuSZ z%=gHfA0S=)2IXI$zr@_Q5Z{JSH=ir)&7T*!whEG6M+l)q{so!+MDGWQr+1n$7=HnzE6PLw literal 0 HcmV?d00001 diff --git a/bin/net/minecraft/src/WorldGenLiquids.class b/bin/net/minecraft/src/WorldGenLiquids.class new file mode 100644 index 0000000000000000000000000000000000000000..9d83e011eeba8a6ecc436e07194a11b379b8cd15 GIT binary patch literal 1010 zcmZ`%O=}ZT6g@AQ%p}uEP18(b8q+rQqiG@yDx_e$-@*+QxZ-{NHc_6=HsrZUuoHmwX)8@$_(Nq(=y%53_`ZNaF3R&wr(&S ztC*It+-=tl=dM<75fWTAEW^=U+Mdf+EW<6diPCVird#MZjY8FST6(GSP%Rq-C!S>!4T#xSiQ1X;q2 zf>~rF%qcjDQwmN)R&WOM44Dxx`7g#WJDS5gvK$+pgJsO2_;b@(vlAYmny5;Nx!4&PV$( zC=|n#jD(60f7%Q7=7cvjqOdG*j{^@I;nr^#CFrVrI6O7v`HJ>8WJi|L?!4U>&?bEc6KX! zgAfuzAS*eg2P7mUI8b`%g$t-jD};Ini4&))2e=^a904_aGfqMawtv2zdEc8i^Ue3P zKR)^HA%HVj2q2CLKVp~^As0Xfc?AW}Y$fzKfMb~Q%n?zHj*Hw05sJRqlLXSoH!B}B zxbSOt6hIm${Wyi^L^v&`&ntLA!8F6rTHVsCP4i;YHX4;>238@^T3@T0t*a{%Z8P}J z)vda7p23@|RPt{!crMw?CPQeUZkex1@*6^hVW4JOW=nTycq+GGnNE>5FpZYJ;uPC0 zqj=qJHJ4`=R`qxF;<{6B7GKw`WqWO=Lb`7;3|@0|qp_&plyVBrC^*XyxMr`n46|Gp zJ4B_#Wz$;hp8SN+QgIk16�DjEe9gW~dIiO;fjO#YNqDN5MH2FX6n33nI*7PQ^uB zQZbL06_iz6#uXJ6vHTUh%8=@F{D1dmNcQK5Yp`1k@jeuW;s0I(gF7d#*Ke8cIpwCU zI}#}~B>pcVO1fe;Z<@4+yIr@aE4gx>xNgIyo+(13Vv&L;SIJXX0|J=0*JYn*pLv36 zrgPAFAN5uedmLDjsQqonwx|b(dURG&=+c#{v=XTgwD;5r6x!5bq{z{6vZaf@)Gaxp zhRG+RCMLizMzhnDchfUexDQr1ybV_&u?_b(1TlZqCl3(-g)BR7=gS~L#4{Dw% z-wpyx-lfe_=;_Ibdpe>;gvK5AHdnZxD>W^$*$~L4ZIq%s#7B7O87#(we2@p9!8jEX zl#3cssCH>oi)>I`@^BUvrB=82Xd`5l68#e6JjxSM4B53?(@8D4KQnIK!S_7I$M;ex zEww)rsn0n-Se4e&`!kVxUrTOAF>LT?txK^>87ahUe_)IS zafD4E$>xw^H;`sFGVEgBMYzx#$71I(MrdFP(<-S3?5 z=Dhp;qtCwrFo-J=)Z<75htL{9GvX$WqRqrHv@7qpi4#@tq*}HsNJj)u;*?r;Dw8nK zWuRLiG?LDy3!?(T&crnVZ9M0C0`-&WtoM9zY0k@Eb>=dRgcrQ5mv;(u`#LAHULm*kh*Q>j$qC4su>f-}E3s(AsNrP?ya!*eNNiPO!|Off%x9W{s&+$bAH_` z0)i#=g}k#u-lMg6Csdxatu<)PE zPMtHyb{cZa&KpHjpxbFjf&$Zg>;sny{qCLNerP?k!Xv#WEe&uA?SKV=|^3hNqS1+V!&TGel)%4K1>M$7|?ehk-J>q*+GC2CQxw zWtAA)9=M4EJFBX0)l?})jrU4X+ILD8t*1`hlA&8TuO#p=tD1S!$Hn$Jz5^&gb<>_ z!gU5>2AT~VVt|i7^=PPYzIUgXsRtKN9x7f8ErFn5MZw!2AK;G? zXH)PZF6_+gn>X+6e0_g>0=UFM3=jJe#t|kA;Z>z8d(Ge_(?d)}%G(PG|%l0mI2ZZog!PN$*<=z2bMpT1o4lVnA!U ySR;vE{v=Ft$GL{p&!tX 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χ0ZYLx^dX~yMyt-2Y_{( zqCg6;1a%Dnvfm$GgTsdoqD&Q_G4m=!_8o4gFhKzpALIvuS^!7+i8@|?fiQ?Dfmk&x zKbYc;{%YoUf61H-Kzo*(0SRHS=-dvd=cpGF*2vUg)>DvP!M>ga=CD4XPmi)nS{2We zv@s-Fg7;ZBbENj}Ni12hFMca#UZ5!EOihOy<6Us83szP$5m|ml;_cqjZ0*wdfj8%V z&kvb)sdS62%H){tmj?GNpyk>rv#fASkJcQCmv^YSnjo)Uk)%0jhL_n`L1tn}uHvRo zK9Ug6h!n3VhAOWSF0a9k=AkW<>i?iVrh;UH&*Q92(QG>a3-fXx+ugo8-OW@7?`|o5 zWYO(am!8h#2+2^CnC9dD?89UuIRjyh+6=T zz5avzvZTNSFKD||2J}yUkj2bUEGJJ1aX4D|eNPqVmvUD~B;nRwoZ-whsmK9lA;7fqDhv9STORzy@>&B+`HYF4guI}P+Xf3=Dtl)sksh(_cMt>9$0;#maZz^K7V$- zi7{7-GKoKQ>^!}bve=*}rh<5*?Ml&KojEO9%Z~JhW|SDI7U%x@#GWqe4v|8G3Bhxm z7j=orXoM`VaxJ#$jTOvS6Yl;@o}KGuC5Na24p_u9ajk=sV5J3etE401`KQ5}FJ*x( z+KG%FjpC|I??x<&w#9ym(7bvh5U?=HE|z9V!9u)dS5YxSrn71w3&Z{{Tu z7w?@t%5>evYOxCHB?u>V>n6ZIT))y z*S=$7zZ;B)(KT~Q|!QmoLv1F*+V7l!LIhm zn@AnVv@2R*B&@5*r%c;t57Xy3f1vQVCi-DF?wptEj+uZyGZ2jTJ7752YKg-tbcDU^ zv%Ntz;J~lRR0+1E5t9_DkU$%=Qdf?A9OH|dJauCUWPNK1caU8a1^c;JKAHn1yQaKO zb_M+Phk`n*&F^WJt>nA_79UpQ8Ri$GhoR06N!V^LWHkK#O3=L8^K+~4P&`>%sdaRr zbuqwxLAVKOR-h9~k#bak*qC+1PSxz?c_KL&l7UNR5(v}}f)iHcbI_5o(`#d6$?r5R zm#etzh>0_(Oh&QcgJ7u{mxQDoWhF}$BH0L5pE-X@CH^9p3wYwm7F?+mAX=MhsxoV_ zb1^%B5@<5rajYg-LXNGYF*Yx`MR=}lBJ9CM_6XZu>cRORW`UlO1f{K!$uqr^$D z#wMdGhpF)AQA5&f%2TP_94ks)rO7baFZz%<>f~rQph?9@JhATEILUIyP*yMxj@<=D{@uSC#J#&(U7SCyDKM0;(22A5K9 zHk9`qjlI|~JFlJvo)Ld!+wpKGT7>j`ecN--gdr1LAj1)mMlU(znpY=FU@I^hmvoWc zdcqG3qqwB}MxAmkMnh{+tPXn6v^v|q|`VknYc{bk_{S8CcTAb{Jtoytyel4 z)~O8$OWhchwVLjO-Hlk^KNG~Cjy2vILM*DN{x^hPsp%sbu!Gq&K!`*1=yGVTA$fvj zvhk@;f{0l(C524t4}ESYe*tNt>44+a7(8}qGT8aZ-?YjohRRT*51J}tdtVD>2(5`8 z#^xR=m4T9?X2iU1-M=h^M}0;!exyO<l&gF1NL*Caf8eCZ`^N_{4?>oFWGG9GnyQ?F z6#25clYs@_AgX}{Q&^a)5g1A0g$B*t(IOpi^E7Voo@0myj|KR?uhLFyCz96KpIdi<^#P1MlO?>SG*ZR}=s-~)B8_BpU3M*$ma5AbkngfF^h8MIMuUy(@;-YZX6JQZ)G02T7d=K^8UH$Qo>Y#$Q=Mp?0Sj zCPll10^H$H)T`FeOI~(Bg&o5+)2>XpUEq*`C$p8-+;>?jhb;-Lf4!hnGjqMdbA#-Q z^@3wNrv}=i$^{ZzO$pIx ziLjn*Z}$g(8?FcxY&cQ{Min-=jS=@!8ODVR#vE?a>%dh47iKuR4}$S{t*x-{sSt%v z=;UL)9;XGSCpl984?zGHWKUzHz9%Ti_7XA7dp%}ebCSF|D9R!w`8g0&8;FQcdNj9| z;_q}wdB)o%z1{PU{x@wzdndx%vb}Q|vout((nYDYm;werUSduGe5*dVzUB`uqKr zC$2%=^Sk6cmh4%ZOU_fm$4695xFkQJi`XK9;Vu!7W%VM10Rec3JaS)!hdTd(6sy`y z-srk2fbcXuPZ~$Ba#_-@cmgN(gSak(wz8zhhO-`2AzS}C+4L`%Az)r^agnT;`^(aole0N34{Xx*p>XZ zIq+W$mjBSq3Vt)N9nFlbO#Ys0TFXyJ0y7}+UiEhNVK>PKpvtL!YgO>LDd_2^ORqJr z5X+J_5O%h;t*IkGIih!N84#Yrxq@U1KP)DgtcOdMr^sx~H^%sbZr=D&MmT@#x2D+pom1|FLPzKRnj9B|e3vQyIcV@Iwo_@71diVq18p0X3Wy_pW9*D1Jmm+5O zF+tUcl<*4C*X;zHnzrxKx!qrh7r!^<@iOt)AL~`*IZBO~V5;*G*tx<(yZK=?gRZO< zvKIJWz~U@*_G_2F4j&JUE)j*GkJOiRX`8iBJ{tJ^Jq4!kJ_KI>4u<8wPJ#a|Tn@$t zmftJ=f5g0;<#nX`_z}Ep@V^YaDJX*Ytsi>i`^g3Igs1hYTh@xjCW$x25c|I_4=y7~ z$oCB%Nx8U~fNRmP0-~jFNI4Cm;ESijlfIQ|11pO3yNNAelg>4?D0CHV1zIdOA# zm}Jlbk;s@qoVTQU;jsO06%6+pus5&_gP)}-khA=e%bej5bq=rhgA(~UqBFeWo#tE) zVrc4d#ElK;&Lg`jN8^~p@*+;S&)+wPy+Fwb7Gp}Mr+_=PTANsm6?Eci$^wBUWxi-n zjciGLQ8Ot$?2TgyvoE|`xdw-wSz}OVOa#{;bq2=l+u0gg>wu@`b@u^ngvgr#xAbpJL)|Of?@zr4dDov{|N42hIb_)4e8-yiUv+E={`1dM z$jsRBpOxYNORg%0|HVueK*AN>L5;I&0tw@^G5vEH);pJkRDmcVo0w~2_5JCFQel3g zwhl;uFpL{-ieSo>b{y&T=^70%QqdIAaDV8U)H!~cZ)0n13;Kr?Qpq;5wvcI3aNHf> zt{?UDvI9$uAl@^gG}1LG;pfL1S7IT6w=5#uJXwH}xPj5Nv2RsVWFLz(A_6%+n(yTC zF8pnVv7;4dLgBESLN0+8fou=vVC6)Q$B0FkVT3n32%pk2dr;gRzj!yjN5?&_bS6ha z_6~q|_Ks!Q3ZJZVk15q|WI1&hRXiqYNpm-T;aYi?_ed0)6H_{`7 zRw@n*|9N3N=ZbKdt)z@aA$ljRMq>J+#6w2my1>l>O{d4M^QX9XYzO=S{niEpJNumL z9d^4HMLBEdAK+Mr1k4um3hm17P)&-YZM${F5b7O1s(Tj}u`7rcJ(@3*RqvnG;19^M zyob*nNR8JIiz>3Ksu*e&yUyCivyG$m7D;>2f27w`)08V1DXR#>iXq5NKGo&8PxH3l zRt>^z5i(jw#b054IVM&1Y-Cul%zOyVRE~7hhU2svgXi+owMoP+iVP_mO2d6LV-cn| z?*yJ$%xD1Ms9=luF~4L2L%^oe!yX@~O7UEEPFby$tZ8jATz`o9t(k4}QdI!5<1M&TNqsA_1| z62U6dPO5_FAQ(p>74e0E7o-WDg%?v<%W7xvHG3BG(26s3Tx+?;H1|CHjf*|fHYYq} zT}#w08>!@_PdFGK-qGGEXDx}oZ7F!H)f>`P)U_bBYM$ zs{e*Eyw=Gb88KCd@%jVBRT8c^?=1jU^LrHulQ{yq@#w#&n~51PXASDkQUALz*1NfY zYYf&N$%Jf;7&9Bp{c-A&hO*j}y@5N$*lNiP^yFSG7s7J>ycS}CRQXY&RaeaP6;`r} zj5`1aTYiA7t#OQRtlJ1QsFkjkCc-v}W@Tt{xDxw2Zsrfi;wt1$sTC>i(aS@zos*OB zzsf@J-&{JI8|n@j_?T2RU^9DaIAs*XxS->MLB4uY4b1d$dr7oOBp?|0jH1od1U_0& zQJ#KW}q?3_j91~}~**Tl4*IBwj=pCk7 zFB_%p~Q6UsG22=b?d5WSwk8NRukvf(Mn?C@}m{2 zObqK+(N3qNA2?8T9f~oLi8`?R>;=I$>5tm;_x>*DTQ zdQXyeltH|)GWK=yMZ1!3&hdQirk1P}J-vfpnW$%zz^HJQpt7%(tW%1V>2lc4r$lm3 z$j$9?i)*t-DrNY~t%$6K@vra6txg9TPlR|#vvt#PhRTpKvAlG2$GcPt-Bm&1;i^eJ zgUmMIZgrlVe7&OdHk;3jtRVhXN4u)6d>_B7WYzz;jyl-dIsP5Q3N@{mId&AEOYu9r zcJADtN`kXmnvxm}iTRS}0jY@Go`$aJS@UqwOhuZ9T~)UBv&{Zb1W}w}7gtZbf$YEB;VKm| zx4I0N#{fSE83atslV*8Lw!6k6bO*_Y7=}t+mL(v-;bVV!>t};ia;}d>z%Yr~{yu2Y zK3F4uvL*47LHKMWWfRowp;s>zT1dmb%OLLj;@?yX#h!#Jhh(MrB{?b259Hg<89+Wz zX+|*bx=-p>9Q`;jqQ3whMRK#dlG5YmTwmPJBgwTu>my|zP5{V2%qF-$go5-LJ@Wzn zP*zx#vPe3J1QUUU)BuDAZOyIsOgLbcw2gw{No@(#V2W!Nz#m62TvPw+?pG}eOSyGU z@T2)W`0CiLv9@c79?>7}IW{|36?EhIp9OF)u7j0V32iiAFmpg$sM6|EbCKHD7Jw$A z+Ed4jGtm{|pM%&?IJt9)<;IwK$k#~1Bq|4Y;?)#tU-!7d6Vp-NguPZW%|zaNoCf%N zfZS@Cl~f%_>gGIC37F^s*|WU1W?v*bYrf=itRV@WrCSmdUkV>eU8@bo!X)s!K>SaoWxo3FM~7N$_cLnDS9Ssq|1_^oH*gJ};h`WJqqSbOdRP8bsaBBo`9V5M75b zRNPF@Q%9y_^6L3144AqrzuYj3(c7Z6D~=Zy;`x`zIXfl4hx5n6OF9IWV;(&hvPo7Y zH8L>uhtF&{2V7eQls9k=Ay+K$->2mk2an&Eiu{_a8K^Uo%5cf)$Nsf4LC`mOLrrgf z^^jQlMr}Wd!K3fwjDS2S5UFtF>T~C`{>bINmSM^Q!i=Pp9HqL*HPBsY%QZqaz z7^Xl|SGB+*Eqy6On^GM5GJ+%QI+0y&(*O>A(!9s;9f+GjZH^G@&KcxW(e>d;3uYi? znsp^~M(2RW4KVvx#mH-e->GPkPm*dBMQ2b%*FT4Epc143IKGeidcgi$LdXBlcwX4t z;U73J64e9sZI2@S%?rhQTo!~pUdV8JAX=Qz6f{C&#X{`&ZL$zZ?YlngQ7!~E4IV$W zWnhBTU0}-#teaf)k%;p{Y6KfnHscUc*bZ@k!}2ewE0$CsJ-BWPPDQ;WZ-Z=X#Otaw z@2G|8Ite6WFQ^rk_DP;~L|<~eb8wl!`YWYoSFSR8e}B>3@7sT_P59rh{)f(4*w*%+ zvNWNtWxK|T;`4p57rYqWpPMV)xMif38SA_m>^&AbUf=tSU#fmW6pbbP(XjsWil_b9 zLMv$r1}l~vY2@yPE97WUc-eE1DL|0$927Qe=tg;&;fXdTCOYPr&`>*f%I()hQLg`o zpHL3Xymoyi$h?rQ-yS+F&>;^z#$ISU1k$Ssh&KnXg>WY1F66H1A8Jgf`rdW(GSnzH z3`Cm|f7aHX0K0JDH`~GY!=g+yN6a;33T`;>TSmAX{S*?iW2lZcd8%T-KByXKBb>L3 zQufo{QX^MU3{B}ELneJGeM<>Mr(%Fr{4Iz|vggZNHm<^Hn#SWX_{@iG1SuywkW#rOUbxS;Bjk}u>4 zQdM!}dR_VZz%DO^1Y3FpZ2neuK-@z0Q>&Oxf#L`W!u`|7fUuySOs4@d%uh=D$JW|? zC3&iimGfRd4n1WMj&;y-H%T!sIIrrI?^8%$A)S#GD$L|;R+L$#oGs9YnO>Htm&lSR zGG(my>v9cnGOR{R_zbA=*@c-qBd+zN96B-)#^f3OlwdrqT4V@^34$Q5hMFSj>~h;n zliTgvz)3#qqet6xtt9UC%+}$Lsfj=J@s05$asyOA!C*~+9|?J$a8ot#FyPhW{ctb;*}SV@500Q`4u%J`D1fQ_?VZi5w5SxwE*Z+qW+S;5-biz+09fta><&k zD=Em{xYx-MjCZVZc-ceX{usZll3@Cll!j6bw@u1r^cZx(>d;DYGAL<1zBC}E2s|=q zn!@JR$=B)YX1cKq(Z%wH07X4}1E_*jbLYM)M!wh%sO+Zs;PIbZH1t%mhuk0forZeU z`g1WXv7d{Eq}W2Qb1+Rv(tpqg4rp?Pf&Lc7(b+0>ahP*()Xo8HOwwGD^kp`&-wU>a zborH6fCMMy{5~%Hg$CKFbu(;HbX7a&XUYsv1}fxI$hdjM3@wu%=;0I;0j?tLBG*MH z-T&h3ouVskn{MHbZQHh;j%~YR+qP}n=ydFk(^1E^Z5#jU=Xt;HKiK>2gS`&cSQ#Tn zb=O^0*Su=Zc`V%^P{Y&Gc2ZHG)Sbp>B6$k=cBlxx9CnNfop16C`<0HR)63z>vKj{aN)aXTM4r}y3-Hq_Xu=wywHm>%GU6d2`>;(;ubl$=IHm3M|FxGl zwRV{4#XLn<(C{4WkP~shnVkSq$ak#wc}w`U0!26_c4GuqgZqq>qOTohiuPO(0rGmW zXpxb2CP-EucQ~7p7n_E2U9^hayKG!9WgyP11Do~6g1)4l3P;e9hTJ2sL88UyS|eUm zRg#y%z1MX;6<_Y1=!=*FeSOsT4+OyvdMjYYHdO2(vF`rM8i^SN2iqYh?vT-<3w7=J zr_kzrxUMYk&@;zLLuwx3Ju;gc5WTMsXL!gpeu$HJmEq%^dEKrI-Q%^DP$SDei`8&62T(Q~fr3}`~oL?YgvJUE;60gNwo#Jj|h{79~!v$ZI`Lcdk#+#tfTPmrF zJ<)aheE6AzBIpMP0!xX05vp+J)QW05_P+hR{EW3M5)E?&Vq1^}iQK+PBx+qWRA`KZ zOz=b$ZNvzl(cKl~jWP=L;2vb|mZ^mT z1(TYAQQ5BR#Y+CuS*F>y4-f)@M{1VTptU4@GJKLFlwguevo(x|;1#wi6+q z@R4YH<%077^dr{QeDjX)bslW&`>WO0>n$EDYGC#8Bl;3R5o9fSP`RWqXUUHZ!3NO? z+>RAAW8&A**Kn}+O!)gXOJEOc)yAmV6oFUag%GrafxxDYV+i@UIxzuRI8$I47@nBk z;CNSHxXJroT=&?VZJRhwHG(x#*1sWvB}p6lrKZKBis57`DhYf#pz2j3?sTa!vX!suD#OG@#Vg{U4Jy~F%cYdK4X%5mBu%&ae&AF>7Q4Mn;RbinRSG-H-+AuPj%(;VU z;HzQ}k^7R-XokT)2&n-tQ@X0FpODrUe-P8)3FE6{FPKskbvLMxXNz7ZsEk7WY^%-P zChiMS{biFH*jt<{hN5c1_>uy>?03MZ^E>maApT$tb=;5NCHBlQ?j|vBugy|C+r~5{ zYUVJagA@<_zoMdxn@P~-ra4rK>WtT@V5%r4HDs}|S1GKlHI1rD#*S@aEqfcSFgxM)$P) zoEGU4y3f%c=#VpO3})dkPq~chb8R$Iji9xew=$?}N4DVYx9y&60UU>0XdNH?z`f)6_v^7@)x)fMRC61Fw}K! z&9!{p=`nJv#h@qWcS$(iz$RLEQX(`=hTi_OGAOa9F2CF41;oJgDJWSh%QIt=V&2)s;Vf^s6Mqb1iX&7{K zb_KBwNY^P$3~pWB*RAqbiI}kMaxi!{2aE=1?71j@nc{qe7zpmJU37bvJXt_LCZD_; z^cUwkJE1=S-Y)Kq3Yk9_!Iji>nNNt4T$iPemDN{a%GKK^%_4px;S)JzkeZY+A-KX- zB-7;i6kTV?n*m)(cTheXGNxlhCK4}fc;bt?s6}vHfo3oPFx()o zPE|Gbv=$OXyfwG{VSed}(85NTRTO`z9PZDN;>6ehVxJ_qNR|&uqZN|JO{H&Y8r7ym zsiLf9FYo_}F=jkcVi4I#^5>6$g&tXr>-SowU*icxR`-`_uk6)qpN3H|6ZVF`+ z>Mpq@O=hM)55-0wg}^>Tt1%cdt|mm55DlDUZ*E0+Pp_Ad*)3F*($`57wq2E=w1%?!=6+jr z&>Hi;nr@$Hibj?TuoqOQEF;~cn z51Z_aYBs8aqUNnDZ|EiwKv9Y;0Bl~}g4MJRVTQetd=*VyGYQIZty0O>vwKJRCjWEe zuwKVyR{6YlRh|8Pj>BqAv1<^Ig8SR-my)K-85;FYoQAWEN;IrX(2VJLRsv00>rz@} z^NK^Y>S_L?rq6kUh^|Trbs#KAr&t!f`<5YDM$F~1l~WXVKJ;EDDG~5 zBpx-_w_YxI@M~B`u~i1>kt}x=r40kRMk_?C&faNImY07+yOIB?0TEfG-@c;w;}QaS zccxm-cVjUm11h0OCc}pSOmEZRl;si(?7Z)q6BL(yTTONSOp$K7S|#)liEDC=qd5~B zjhSELQkSpaNVUd+>1<4%O;yUJe;uP7=px9!dCr<~Nzfbk9JG_hy2+?m9lnjvOS6NY z0_-W+78pABBODnL#0S^YEZhBCeXG?N44NdL3zu3gqj`6E(8El|4Qe0uH2GE=lKmYC z3woFN(JOcsBHdW^mI@89$>QAOxg~`QCJ!C^|_dbq|Mb{=|W5aa&V%d-V}?(NGp%n(+Tvo6y#WFMi` znRgvyDUDpR!D2JLKU}Tc$f9(72kLU??UM`_F3rZeZ=+GM^5C9q0L~@T0&Ikfe*pi; zPJo_(yi?N)f$MM*>G-xbG#x$QcBbYjyu&G-t{XE?*n*5wZN!6dVAn^&QL&)t;vlx9 zJg+9yNEH3l-PeMt;2UH2$&Hs5^OUFHa?4b;A|<*;ZHeE~7c=s{sp9@X=0tMyiI$p$(l63{Lm^9`CUYPD9TIm;o`xLsxr^?} zIuIacg(z02fb)*a+jTcL@&I#qCgcEe9mar!zzV3QNL$N!trR-s3fO0`NyO67>nkA8 z6c{t<87MQP2u^cZZXK~({4|DgNP0Nv%)Ep}t)@gu3r1#%mUm!sSPyU)O^WA}lQj=@ z=S+AP$1A#+FHt*xN2~I-HB`_ttmympLRI&xv-p+h#MgYd?SKzEGf4 zCswg1B$7ZP2VgpcPw6hR_a>=iUsTj#4_jjQa&>~Ym2XS zyI6)gx!9*y=AsSu}Ys_iHSxjhwnlZ)`k_B~v*q zS$4#coHOk?pQ|X{Ycfj}V-iN0p;X}3@_-=ic7&{d|Iw1g^u|$9MpOL#5EWjpQH8bN zWtIReb#;I&nS2gjaAAmGxDVmPm6#%|{y3NlrN>9cBp1PzJ_|f=!RD0Ihqaa)RVMbD zN`VaJD}B2iVCNlDbZD~(sEQcW#8$m5@>Xy11BIm_fYrL4`gyhO0g_>&pnzV9+osU% z@P48>_Zf=!m*d->SCqGQoOA*Cj(cd_ts}77SVP0-jiEczigf8}_Ag+IGGW>-8ZNU; z$!$Fq@|{?nhh&}T?^+a6QCYx??ug}Q-RPCg_!3QDE@pf& z_@kx|p0~DkRqOpuO=4>SoG1VSq$)6q=?(zYZ2@XB|2>aM{+`GGWA_VCbO1PpqWZ!s zefD1|kwJ?z3kNn3spuX_NtC3d{%{xYz&w*o-&xZ1LXK>Hd(7!DJ9DtD4h}x&I?Q4@ z^d*y^B;OCMYgtf5nngNhYM z?kW7@N3MDIrk>cjiambM^oJcS4>dAnH1v`cg(2_^&WD;T|rArW(j6`>hlnO(6P6oFj(X)j}E zj>UYK0ZDN1G2nwq+_HRX@)~%^GFT_e0vSa+6z2%NkqefCmTn`^8R?tu6^Ax(K7R22p$R%khw#fRruN?vV?(zV({XA=w z`i-yGxr-+Lj@p5}pwg+Dd_rHPR+dVQP*Z9pOm{_1^URUTAG_b1 zi{wBmyJ;$`?$`^#c?!9I+ml#+BF@?3sS5JEXyQ0Nn##E}R3@!5OjI%HJp@=auysY? zWE!g5wHP_jSbYM?km*dYArWh++m>~21&ABiMq9>x)FB} zo+<>oHC{BxPuwc0I!h_XPMYf(TW(HboE2e=P>UFQu|DGNk-wXrx_H;*5x{YfkG8GW zOsx{6+dGePZ~tOuG<9BYRz%@Y=>=uE2-Br`Wi0ql(TwrhceaijD?W7HGi(+-oo!Sr#5_s z*vVvl@`q;%k3sE_Q`HNm2#Yhitlt*y>`K0?Wlqhc9dg%f+9dl38&%nFxrA}0MKSsR zdeYJf4u8VOysn0p(!5H4(U8KE`K>a|3=!0WJtIs5oYG02(q^m?^|j*({_JSC5Do_l z1cm!MSZ+{}op2aiA00g}>rcuxWCygBcaR_O`U9&I^(Xc)JSo^Z4UYYU=j0pc_NjLi z57p^3a>Z6FSsuzo0+OHCLxudw6FjVu%Cbw_D#15B&Z#eQ+4T!;8Lyt>ua1&6joW`%AA+uYEMNcWbV*Q+ppQ;&ZMl*r5t4$ zkhw5Spq~BQ=lS{h^^RPf?PkzMuIY>Rkn&yXMaOz*2aEbgwR~0oi)aQ>5dJh8!{?LW z+iMZ6m0isC6eH?67FsFDyq^f;O{ehh0|)Ynw@*QLdcODvn^(D7(xt=;JR|9Mh+tYY z6d1S~_iv(Cd6u5&eXa;iH5aLr5NT7`JFsM96Ib0f{4K4D>$ zC$%UY5*U=&l6%?NySwfYK{P)JDak9mWQ~yRdF9uGA;jhLczuLw(xS_b2)u*VX-g7b zv4)5`QmuYlqfdX?)=YH7Ev5{&Ps~pW2UDM=EFvPVN**Zq2>$SSF}54glnP7^4j-h- zjMBwukq#UjPNS`c10xVW>+D^-%tzoP%ifXr`Jk1!ua`&%3mWAyP>VVZAP<0~Ucyt(U0~-f{bubrw^=&lynw^VIX#Q|tG|^sNX)FahQpq=v|`|__7T|&i5n?} z#h_7JQ)wDv*OXqnKjSE8hNJ6yNa%n_&_bVKP;LP8(X-R-PXCDXw=vM722Rqd28~;k z7Xg{?+RZA|zi7?bVwN7EpsuQKQ?4oJ3M%GLGRnFw~Net4hNO@sI&g3W!bjCCe;@+>DaHn*+l6?ScnWi<7RJ9hj z(5p!tqRGS+cScIO+7l^`TjF=6a1ALs;`9#b~lEUPncMhU#Fw)+s2VPwUKSir$8LO z7XE#w+ACq13oZvw) z>`h=Jt~kD``r#Cei7X6bS!Y2F``x0gf6?g)=A_#m^qY#Fx=+n=WF=BxXpxfoYj@+P zg+UKCp~h;7bjdnW;!<5S7H{4%EQ2^d{?zhK2eFV=@vjuxb82R)zxwJe2au;`cm%N2z!cA$cq*Nj zmHKM7l>!|4vFBP1P~(vUuz@so1M$MP!MrE}hJqATAgF+;@`GTFF;$rc0_HVnjc2mQ zq+EIjb#s^ph38Ta@QxM@pPPSrYioAVFl=V*WA6oeJ36&SlI}(+ zaK-0!Pg#7~t5*~2IF2YVPR^;TQ_8djfK{@vK$Gchz!pu@a4M&LR7B4fcVIgeaW^Vk z)JtU-f*7=gjED{8>O}|8%sIOc%R54Uedqdq2WP}Gk+#7tZD#*~~YvCp{Hg(Y>Psq4(-7=E@h?AEvQ~9lzq5dQC zvw})l49~rYe7)^}I)bE&&-teFW^-b>NL&SPi&J=<4s;) zj3M`uH@d2uIRxrJ7<%=BVEZn1&Bu?66pj)$h!(N0mV2*- z`~JtX)3SB^c}cc$ttQ)N+yqC5Uj`1^V4oSdrsDeCgwSsg6w>W=I zb&?UxHzS;d4o0bUI(g!$&^b3h#{`~hK6|zqE>0L$tHrlm)@5(W%S3Oae2proJRBKP z7n+yGfR_|HNK(XEEQ(k%)=|-?x zX0RXW6sMU?Q}V1dF2gW7SvT|VRapW))I@02@RmFAdo>Sq_B9IWpuUEPVk^imfM zj%kBuVoUN-|M^RrAHVKPoA~c#kWuy5^Y8J3n+P;D?x|l|`&POYmkvT(n`#X&e>{~6 zaFzrZY~-`1)v$KH4J&bXS6?5OZz|}rOPfnLSSJ!6e#2%1a>p*}WeA5_g2mQOtWTdK z+uu-BB?S}cCVcCpym2nc*Q~#$HZ3)ZOt{~Te%6#uO*fs;R?E!VjK)QycRRehuAw8#G({ zO4*goSM)J$p36!RK)57&*`vI@BK$dV-gMuCCIe2JnSVu2{&wPYakMos`WL_NRM)nf z1!yR36u(2nK_u5ACvG$ckh7|BtL~6v?f{+l%F1O}SV9aPvlqO(;jUWP+9jNrlupa?mH4@QUhQxRWRFbw0O z{+KfW_68D!nkQDt=Q_}{G9dqKvH|Nrp+K^ij`}JEk-aswJ+tDQ6!{A+B4-SSTQRjw zKf4`k`irgDoe+55l}g#FG~0!<1ot8r36P;mhzm9-qQ+ND1Q3)|sM^k_dCj*I^nPb4 z$Q89!3!IWXaf~3$9#Dz`Oho!qAxvE}V_St)M2GtbDCV|mmk3Y%)h3?|dcWp9Q;@tMT&{r@G0&=J{$Z;5wTq~4o!_r1 zQZHUnmh;Kc;AcSQXGbEyifXNck3^7yneu@nJNP1-wVSHyU*;=IJNRzPc9y%f2Q@ZFA!p6};BxJ(#c`H|Sz*TfKle3BDnIH@l9O-PVNB1WJN|Xf8Rq zRuVTjyqtwjZi;oe$fam9rUL&}R&k{imxMTpKW=29U3urFUF>(YclTJ2GM!!if*UYMP7S++FqujoYF6JB-+E>dNO zELHAPN-?Ej?9jSXv%s@N#)UVAIS=<+5HFa{vcT|FhQ!3Z^^zV23{p_K-xoZgs^2pQ z=#gaU^#s{04IwhYC%fb7qvWA$&}5du-~P6p3>h_>XD8g(mD$Fg*IFDU+&?7vQx}-_?Qw?ymwKd#e?y}FGWv^~7&!jB z-Wj7PYX!`N$XB!FH|zkWSxZost0V1o0-&xa`^&bQr*e)d^yg9&<*8tR})R#Jc;06@~-!bhk5N}D8HX4+(S7*gQ7r-wVeus7IP8-vk%^xcF z541)pJz|loUJe^YBae?~g`B1G^wujTR{1;9SmXM)+3&_Go%_Q%2p+?-rye7Wyu~gp^{o!?~u@y?PAlO(jX|BCEl!Fj64V~O;;NR&`$upRWFVrks z#E0U#gc+!wU?zD(k+uRIJzNE?)be91Sm^t-jJ>kpZZ=UP$_jmj8ZJx}#?$J~LGd?-lQWXa4`6h0*t+vKntb^2OI$4~Du zcVJ1eC}4h5=H+#2uK|jfz-L5W1PH+&#e*UwR=q;>thnWwBJjwlCb86w0Z85j*l1-~ zk}0%cQK{(pEk6n4*!}1*`Ky0*5>cb|LGP#w1ia)@blC04DWO}c7XJ3FgM;WY`kh_q z+WADBm$LS`1sm6)WNsT0)nf^U^7O^1HMAB!T2|i@*dcG9kSmDUOf2f0(mS5oNCE1O zcJ=_3qih+n5^FWC%`V6em!zVjYxh{~vsg32Ky@(HpM%k%OcV4{AN=reO0u%-XDP0f3JHiR#z;8r@!YTn7T-zLSu~ZUK}3X1}Wp92}Zz3mL>aDh!;EQ{y}F z9Y1?4IlUi!XCUqnen${rA-Q%N>xoqk*f* zzv7p&a^nEuIaq#*c(*C05W^Kb4ygiEu^+1_<;^qgE~q3l1&j|DPBXB;+~JpB3w^dy z{3T@%GrsFrkw?6jk5=C4o{4V9l4J_{Fn$~UacK$=Alsr_@~7&hx_h{$;#B(LNnNL1 zdui>TS4oThET!S4hN<|Vt}a3c5Fo20_}OOZ3cBr z$V(D>+ZfukamjAa*#jRtMd?xs$JJY$WtXDUADepx?|D0-Q`$D}aXk45@#lTAJGtQc z1$dtr|N1`tB`7im#>W4-7&}+j1-wwGKCbznf?ibc(w*L1I5;MxSRuWcDYjE)ztnK6 z>-VG_B{Uv4DWom0#LqZk&MFXbmv6WZH>!$gvU|3W#2^(&J290}?OPLbw|dK>CPX2I zpmvep0&$K?kWnu2XX1Z((o3d+LJ$%vKr)ihy1#+U6M~77 zr`X(s=38m`%|tQhdLn?~J3rvuA;3}YYs{`k*|IGsPBa{N@Qg{- zGiTQJYQ*ML$R_zMe{V1#o#>FeH13kG2<5w+$qK%ff$9E`2uLN#aD;BG`DwH;{Q9FY ze?0UxAe{ZVYE$oB?M^$1Wo5;tLQgCnn6``Jic0j>IYI}gVP0F1Sb;9SsxivG4Lfq=KXsh;T>>0>+w~o$6$osv{zzd$Z^I?GH150#Tf~i-- z${E}J5o`lq0e+rAEy>&mR%vB{Z;~vUTvvR<0IT)2YGLbv_h{ans2}@F{WnhX@n`p? zc({7s`Q;3lJS7RT)D8yf01+33+lsKTG`Ct zaG$Qj>vbnLdi&;H8UbAA`Vw5`2&Wv%4B3@x*C<;UBDR+ZH%=-xlM%PEh^6+1LLKJJ zf@p)1DG-!pQ+Rg>=w3Y#3b<7eHGkhGZAGGEcq@TqtAQ_vleKvcz+OYzao^j*y0C2}nWWQ$9u#6T0w)GMPuWx@-{n|c%5MvR-(?!c zQSxA94C$ofcwd&h+j#_`s9_B0>$|RnB*f_Zc&ayY)%x*oW|qfo!t)NUV?@bmrs%h+ z-k==m#weX{p56*HVO}5CQ3w4I2>O0~KiR$!F>^cwzZ5drV z7IYjIu1VtD1Z941^J}y(?8FzL)WhR>9o72YbLNMQR}Gl~(?|*@VAZ|yl=Te1<6Iuk zJ&NB@gG#1OT-J#pOHP&SC0Y8xMqSIZ-?T}+bX^G%C9VdIP3%aWlB|d3&@w>;>Q9=NUWAfpkP$>C2V5A+7(wA-|OH1ivl;F2^j# zF1OsPTp9n1ztSE4eGT@qlCn}luGyK)SMwRK5j1+t{VJ(@nw1hn(?QO{lZqY&GH>cM zM2-mC>^+)@D7NuAT-TltUQ@Al2A7&v;+lQm@qHWyzPKiYdAYaftYr=+|LZni`1axX zb;<>f$P&K{pWd$>jIbKBWO5VcY-E z)TBW`QNKV!LVme{;!p<^^8fvi1AhG%8o<8^D`epGKa}ukssB*IYrB$Bh4PzU^r;N* zOB9gqVA#_vyzXRn*2y4uy0g}Dn&8kb3?5wFTum*}AvOY}mdg3%pa# zYPi_z>z_7Rh`>Zd0BDhNfUy7fkpD3y`EMb&Gy7-d*e3qZ;P4M05bwcU7_m7Hu2eyY zC|+-+t4D05-O^ezVbMbBxMR_A{{v~t!qxOan=2W@8Va`VsEO$KI^x&XJ~zOWN?49fz=VvLD9}a&tHTDfB>BC~Xp;eFK~3ax zJZuq39)tmy+wdNn>(0EE>i7QiynDh2q7Jsm3GG`>IxIdx5Em?50w9VA-hx-oLW6NT z9J?Hn6hFmJy<-bYMg`qyt0qv4DYQ40IX{|%BGZ-O*0!Z(=Wo8gx``K6;JBJqe>s4{)BNHfd=vg5TwDsP8$20!Bj2bLAO%(yxvx(q2|xu=P*fHRou9BLUe^ zZON&R$G0Euxg@{#z$pAd)7|?(5kthu7b3GSFV8RQB&kybC*31=#~AT9jRf}x@=BKD zSpp%4w2JW4_Dr^R>X_q31BuhI5Ls~xx?jDTR3t$LzR*2;30>sW=W@BMnnTf zt_&OzecKcjhK^7xAhTKeUg zO~LFVgsxD}#OZ_&^taWczM%ohR{byF%GUNOxdb?({3owq+=37g0C)&y4!$-ev}u_# zZ()T7moRGrr)BYzXI2GjSUX?t@WP7fc{RD@{+9^I%F;6)L2I(2!s4_|g ziq=qk9)4XNi1mR+@z_G}5lG$&-d=%>G(wChKgwPE5$g)7mpbawFO2enNZH_{Nj|OK z<8bjZv2-Pb#vEAn)jBQcF`hu0x8%Y?Hqv6^s*KAN!&3L=j|U!y;7Mg79mQ*-c-}9gLE2LNqHpE zL!k1c{Gd!8Ekggwy^=rC&*>tDPG@ZS^RZ>?m7cXdn3>rk&x^C#Wb@73EGeb>DN5~g-U4J*{c~(vlMXWJSmisJS zsqX_ZVG66$n(!1yQXW1pm>+RkDoE6DjxipfJ*4W=ErohB$FtF_?%Ebwslo2LheVqp z&5rYuGo`R7o!g#U@Dd-^-{s%pnVZ^SBf0qTm-U+cC*+32#R7{I_(sez$DAqIL~nk`foao+L?2fBAT ziAZtdX|3FNc}_C|qwppXQMH;U(V)jUQnBbvgFf=VwKk1`L5{=(gpk&CIG9#NJosOt zt7;WR6oXhk;ofu7ma(rN7Norq$k6HLfw&k|z$MLH@vh z+u<2W>0EGbg|m6;zo}$WTb(w~QA_a<1M_onKVE1hUTNEDBkgK*Ref$o4{7uI{k4!{ zhWQ;uQ&~3a@=RNyD`gC)@G?eRA;^2bIJ|k26{TCIp{5=A z&=2o_%r}HO+7Va)4?yj&J@PLPLEg~G!q~#V_TNSs+ZzeY1Tf)XVZ4mrg_IVo*+6H= zMPHy8Zghy4C|+kr6Ma};tUyBw#!dYC-2Dc0j^qa!JSRhIOmZ<_Y`&C;u`s$p44*;1VbJN3kbl5^nG77*j|+Vw@Bb zYZ|V|6@iRfnX7eu$Ap}e=-VZ^Y+xPbnSlq(rPnR-3P~5TyV7hu1x>4Z(!j>PX08KH z5arKpDA}^Lbc{Rt#x%_{S2*ojxKdCA+1ep9B0wnIlD_15G-o~>!~}NsL6xla+;wPv zdr+&0BK^gQy$8ozkjTg`=6TsJuj>Oh!s2+KD0TEWTA)=QQUessu22SS8|=(^&w%rfaUKnoT~Vi&}tbfk-*O!g7NwtvuqLC|L` z)TYqYAOzcjz=NwEciSTbMTB+NN>GAuh#kYeHAUm`PWyzRb{6xoNCb|EC{*o?jUG@t zI|AM=Y6r?W3)nL#A~*6>kEPH{l~cU}hXVX{#Z_FS!PauUK%cqXQEK8!w)#~^-oeyog_Y9sOyl4+WmZe*EtU#B)| z%#r~te%W;l3y%Aci=rgE7cZ}6D;h)coTVjA+6Y@zn46&5>N8>V1c=I+?5R}hK6VoQ zAJNIAk)Gx+O)91|EZ2>GBnwa*2!^CfVkE1b8Jv9Lzz(qGZ;!P#)|R|DLt5N>BBrw_ zr=V3gk5ubpbb=}o$hA&w!c@YymtbIisv2~bkk{Lh`N2IR{w}3Y-dg% zWp6{=jAO^6JAIl#t?o!jmU0Bo5h;pK7h>c}z$Gw)fyhM7YTY$TT?6?76Y1IZQR>`E z{dy$K*f)34;4Hx6vZM)7xiK?8({s^%xBo@re2IgWRC|)cR~D>^rOSQdZD86JM^=K5 z+I17X%~1RVg`(=lU~HV?T$X{x%bRDDJ;mtZG&2F#0J7HNA%rOevGq=f467Z81$t?Dr(y+9p35G4* zBM7^8k8QoNq`idC_Q`)LdWocfE-9dzPyh9x`Ioz2WdnQb|JgPUQIeJabIZd3^=a@k zUUU)sc?xp?gb5SnK3`(Gh^I>yG$80Ae1(} zM`b#KNUP-Cvs%w6N{1RG&skE^0F#12#n^G%(c`*T6Pl__t3Up?^M{nv!~p6Q0H+qR zAJ~URdz-UT{88LHr{4?_m%&(Dd_o*xZ^ePfJ0luP{Xm6rkv0vLHrLC|=#PFJt1~y2 zPL3U8gg@H%5T{+t5$FUVOIy!IJ=q!WlN}O9!W-fWc8j&>tcx8RxLab3h3X*&7put~ zw^_2Y91wI~-O%ZRay3gs(5V|`9QNHYOQo+pqQ*gPc_3hzHQmQ}Hp8RnXHP42!w#Qp z3seh8Yp7ViBBDXsEuoAx80^_oU^J!q&qk7U5Km=Vbm`WBsF)H;N7xtt z?VOC|23G4EpMjL81vN)~T@c3@znOQ%HE7iY?E${XI-xm}o6!}d*1%4Yp8?wE6lBAh zXys?XmD`W8>Qieguj=uy7+**C`qxXBS8!M71Y~-KL9RsK?JB)~YL34lj5rQ!2jkRf(2y}GFVf8fV6=u7zTh&HpIZy;z_uZER z@RI(bm8hZ*?g!&zS!QKIT~Ta|Aj2po0^D^%xm?fovt1Tdq)qV4c6DgH;w8^I=}Y7v zwBu=7lH^Up%n!xY-k&84p}qLM10^QbaL__7XP2@aDcntHkk)6y%s0MFgqw;rU9EL@_u{6S$q#ZxQ!tq5%Wr5suY@fN}5a`ROqPU)KnCgNP*!FTPz%87` zh$*aG`9I)J;pl}@7c3D&xd?94$G=MlKiubm)dWv$S^gaLE#8rb-}Uy$z2~jXyce>7 z{E4CZnr+|(D&PhgMWUh-=KR6IZL810h6PPh0WH4{kp#RSD$3vmMMZ7(=KLFW;Clm4 zJ0TDIBosx!DBX=M(5}{^QhJ`2#8uN*!#mTQSn2sxDI4=lmTQAa{l)bw-7LTjy-+fe4rDhuwVJup4hs!R>0;Fg`5S{V4@F^pDEtW@)s zDy3>wN76`xst4DB?45nsx(}7~rx{AsO!HXjBc&=2Xx#69J#jZ)V5oHhNV-$_!BaOI zLogqu_ACwMYGE*b?fogvz^ZruI=V>=t9eKQN>JQiOAzs2nx4I#t=WIrqsqT+0s0-h zI1zqVNT4w)5=6-31?LgM+7;Dv4Muk1qO~Ne3JSlv7a1gub`hvWPw&l5-B@Tif`5!a z*M3Q|Zv9dzVS!wIRJeKim}#Tv6lo#bIQZC9e7YzGEgjYg)Jq)t^_6dq(!w8GUw6YF zCdf@h7l9Ar*apOM%b&@Y6daYprI631)gDyYAqVwGj}qe&!>_FKMpb{OY|~f=XQKkn zMLEaNk}J4NOb~YWv`SM>*6>b>Lu=288BTcz#;psE=8u6-CZQ6QvN|(#SG21X3OZm{ zoL)sxaT183NZn`N;WEJ2Xj$6Lv*gCSnP8slz2;n5+RNE@@t=3#6f}$*=}D9DIWh0B z{92N^E!t1^lG^*26ZTJ-*`KqY7)!%B=QrIzd*>K4S2tVL)06usSE{NK_XMr z_K4a|yQVO#>*%iatKdhag1D>*q6Fp^h7Ad#bdoqsk#Am9N*IytRTJnM?r0fK2llqO zvBGEkyJ-1ef*Xi{T4BFJg|R%|>^<$JTMLbXzTjNeHlPi-nMQBF+XYAcPGq=r*qV+( zhHa6~YaPC4IyApfe)J$>G{EhR^6!b-Ebxdo?mUMK%j7SU!@|G$A1|oN?T>f+_qe zRcio7QjOA5K0QFhZ;yz6%YE~%P(e%JuzU0%cfmgJDSXmy|?f0Ev*ZS~U_&bxdr%Pd~*bYGkk)T`buk}Zb= z4KRZ&2*H#HJBkLP*xf~a^4v)^#z`Q`Kfn1S;8Wdps_~jJ1W$U`L-%A&rZ7L#kK`R) zK3>BcCS1BS%Hme&Ebp;Eo*4u{u)E-~>{;ZO@aH>3Cl4khst-Kt(-v8W-{fH&ACkrh z=5Wj1FPxrn&f&CwH*hehOV`MQFujfx2xVaY&U$QA!m+zJB4u|_RhTl-p=n_#I=5J- z)Rfkhm{RKVJ$d=$vvFqiS0Z&0A8n!|6}lnz8n9+{S~68@6&t+TQ~{)RSja;@Kx}k& zld|pzR(6N^6tOFRhB#<;U{#89d6fj|RGWHuwo9QPZ1{w9hkcJ5LtYHjMp*M$u$cpx z`pm|&-P>iyx?f+QDaTRPS;pAV_^aB_f>Xk zhoSGt1Eh28boIsxKOrYQPb;^ik@ef+P^J0nHL+wH4Y2K{*3-7|erXuNp=DJe)sMBX z?-c`t2ViW5Z$H7gr~|Um3Fk4sn)2xi#!yR|JjB2SYyc!Q=cJ-(BUDoMW0TcLAaLq3 zg2vl>3}zC7B1(TQ4iix%IK}Q?`QnP@aAl`Bq?_V$gG;$AL`Q1QuH4Tb>jteHjoqwa zr5wsxJ+c-&Fh0o-y3lMQkUlo8bP-nXQ{7k<)S9_@kr;EMKR#*wv^sKy&XK!LuUn?f za^FcoTaEq*Y2PZ$yXORc_mB3C6jwj~S|sYn^&msseuXBEbTVdaso)~( zezf}z;*iI~n(R4j@{s(ntS4gU_2ckGZyj?OV{&TaS@@0#QRM8h*izqxmJaNlN)H4h z`l2^$NbA+@5Dhm9yS>imhDwcv#)rh9{ue>FPUE$*{&EISb&o8jxGy!DD#hcNt;y8!+R~}?J?hd%P#9WX1RKP z7zBi62I<~Hp-y;M)mlf*A>Cj^NZV+b}-OtjEa&&>Wek{39?%_j)*8+{oS2o?fOBP z&sjiyJ8C=sul??SuSa+I)_*4fx-Tx#-v-0KppE~yj@#K9IC}g$9x6%yfiw79rao(j zP%ZOS)doy^zQeec%*)@}T!xl_uq5;Bp=a|veL<_P*+T?*}J@F_Y12QVPwngOpV8HzD zQQOLu^Mr*>6Y@MC`2IGVdKW^R3+ji)E?T~F{kIuK^^j}r26;DOQqcJ=-dxHMp&xuy`Xc6s+LptjjCK0{n7^Ip@pAfVMLe1?FKo(zB=e5|)Q_Ff2mpSgvhTrER^_eZX$9JD5&5Fs*Zj(K694 zwnh{w;dHqpr%R6LdrK>~A9yTESAc9o^=!;ScSdB>`EyuQ!0stR<9mfz{so`IFxmJ` z!Tc19d2W0-Du-D z2x)H>iYX>swmQpTdRl``drJ3W+X&sry3mW4twYkh4I!gO)id1E2I|PR-@Qzvo<|y0>c2kUN%?tG&5~UN)dpVSFA@TwU z3X;>FWFpyLDdAeWBh>jaDD3pbVd)}iKUXEd3rA*ilo5&ZGst|ywE;L5utH^tYUU3I zswAniwpT)a{`0U;zMKB;miX?-^_rk_QtmzYLo^jbDPO4LX!}HOjR}wXwhFB0 zQs-o|m%Ro^QX7K`?(p`EL6njGF?23&VJ{ z_On1!f6|yTPZx#phSb~>hIvsqNbpv0$+&Tv=YM?{A!$o|gJM&;L)q(2Z*qwhFX zJNX&O>eztx?Q#&?{UE`sdCFYvmF4X3MbEls_n9pwzX6*wH;qqOepp>yCLoKw7t|um zqbv{|YF19qdj2swNTmkl>L1CFe+=)x%l~YCqZz*eAbk>Q8%k$AMgUcs)#0d_1N6xB{#YiYy8mU^<#Q=eqU=KsBmp9k>hj zts8X(pFtX0^6UYjX>N{g&m-UAw6R2~RMd_bqdP@}?v5_vdD~(yrryR^$R@1N=E(lo z+PxITMo7aVwqAl9Xn{Ox5A2o}XGn01lQg)Jy&2gKT=W*E0XFj+CsXvY=l(iAmr}gS z-FvUvv8>_GJkCN4Z!>MRiXOSOm%o3vb|HtZZcSD_zvj4)hV3GlE9=}3#=Lnj%>v$? zyiFGkJ+q7+rtKaGPtv;S80sGh+~p?wm-@8H7RM1z2U2Sq_qj@tp#n&BWebtLgZqF2 zZO8pf*(azW1UP-pyJo^sVY~a_41kj)6`AVXtL=l8==cja^KXk~l8npNt4H6B7Tb#j z>Yzx^t+j|n4AwSa^nQO?(v&PNbbgvYjmJCesJ*WLC>n&nyCCaF$>9GwIruM^T*=nK z(Cj~|?pC$7-DiXUk}CcJyYW#A4iq86pY2q34p2!}>F6m_-SS}x2e1{)a>TA#viN>y zcS&%@21h?tQ8u!gd6+#vR{`5xHB`u0YMB60v$Zg0yP3%h41{9 zhu*GT-=1g!QIMiFUi!WZ%OFG_b@^)nZ;&h^V0l5i>Z$VrjHeWKcjm zLQTXF-c)`OFUOt>*wAkw6!KBiXmL0!lX2^Sur8HMli0m(Y%QX6PM zQVN@E2F=UP83gNV+urm(paybKv%)dhgdAjx|I-)!sZ=Z8qo~=|nGPK!L^vWST}B zv$7ZS$8-4dW?xvS&VZYLOqIDn5(ADeLiQWU1VYMCw zEhMLTn&#!&gvhn8)T+(nne&4mBCmK=%Ny4?=Fc%X46aFEh~$#zuFlOIpT9joIteYm z06o*Z4`hc#6Ab?B7~_%Yn#tZ?r8|tED>eGc?QVs6lthU>rMO$E92sMovXd!?*0Gp_&hR+XUrn`0vW z?@n3O*1^)i*yexVEN}V#e;8J{TW5XIX^qh=PnT8dj1fSRaf1RPPOKPO^cRf88=8eb zTobK3LdPN5rMA1$SszLYs){UugJZ0M1x!v$376}J^LS5Ho$*0{NXnaU@t7%jo5-P* ztbp2F%iMzYJZEo|ML3OMUon^w#`|M3sI1MnHC4?LenssDb1(%++!r&;qTye$3?vXZ zsZqqd7kfM?H1m(@yI`U7>Nn|RQ9tSwS|StPjh$Xq?z+`j&YCI*{`Av8U1!UkLDpa< z@!8`?ayHH4Bovf2=8M^7HX0(aN$9W#&KN&s?Y6T!f~cgwsdUV!<0;H2uG5h?ZHZ;O zE)oXkHru|7qH8wHI08hEf;g*)xbq-psn(GN27;d=ao4eUdTA36+zTS77tu}cZ_xfZ ze1PVwQ;HvFA^H;){r9MV?EgG`L46w+eMiBc6$LW|V>{db#T|~G>W2*Aga32a2=xx@ zsT3AGjeCVD#NFQ%!+sRgz-fWp?OBZMpQ>lGb2H<#OJgT6NVber2qhOD-G8KEF5F`o zn8paLr;n`p3l9F_s183CyZngU5oXBDL<>0V370fRm7j(;vfVP->9ZccwTZkw4PbyH zQ;mRG7)#y-fD#&D0%(iQ7<=l)`R%xpef)mMOj4@n#g_=KTIU7$ACUvQD3!B+1VZ`O zKmKH!= zLGA|;AInJpc(Kj`rmfa`uY=2UaLR*Y>fm)^v-mhw%>zT8{db*mA>lb0&y5^eV&GF{E`ae1~6|C-}X9 z*YS-mWS(u(H6(BG9kPP-tdBJ49#_OR;G6=L1C>DR)`&UXkX-_nD z2d{W8G8Q!}{L^Rmi(9*CT!UW7OzI%-(PeGOu3wqx1YR&Up7vWUzy}7n zr0)Ew&<36Yyjzh!De-)LsAp{j`-gVTN+S}@I;O-8qYO{{s)hFfmi-$Mz$Y7qwp#;? z(SMc~5P7sxK+Ac`5lQeuGjuw0GUH-^N!3pY{wts>NwiWSt*)D zr8julQcY&kfXA-`=EQpDz&Qk&5~130@YL)oLR%Sel9w=5Cl{Q++ZF7YZXB=&)^|Hq0h}FbHi;>TC$jO=V8rb_`DBQjBOhaioL4>ZYc` zw3o`L^Tm>$^A%o00D(5ke#an;XAueL3&>IcWs06MsBKI9)SByqroZxezEi3K7Be+d zS>YL5I;|4CTn3>@chX62xg-fyHb@rX2w0oeTOC|xr0LFa&SGJ|+Xj&*RvW{qOtite z8+7xvZ8*ESJsu>~8XQII-|3bq-UNhuYWVfF*)%k&4=O9+Miva)QBgUjUkcD`IT%4V z!JJJ#gxI8RLFbN9KB_cF^b#pGPWo}2&)%l&u?73ILzJ8nhpC`?v{`vhsz{GxyBf0OvVrqafvt8@JY2#&`-N~&tp5DPP}>q``c8=2&*WX?8hLQD(F zBH<6`O5nea5R15`yZ?d1d>0j~DWJWg>!x(|580W){&s*OC2t!NOeE9P+NKjK0EC~I zyz>%KnjZ*O$kBJ-XN4e2bDKyR^eZ?DAbKgw?@Aoqu>`ErJ$$P zs-1)uEQ(>q&zB4=nxqN60B#85^5=#wxU8R?2D40SBr`i?4rw_3LDMLk`chU z;|ron@n=U=uSd?^E|}Aca&e7bG;ZL?SfW?Q=}vVYPclB@RCJio$=+B;G*s`(X;Ei^ z_YCOeIQB{A47_mm?w!TImB34bdNi1j8#HFZF}4U;P~10$u%xF_iHE@){thsrJXMiD z=5AVfNivGJy+g%t`?O$6A@aNSZ{yK*l}_LNp|Gj6P}Naa)+J;UT$`d>aY)|P?a7nL zv6B#nPSDt=q1S6MG^*9g%;u^Z-1W)XHgct_1``*U8N)&h2gEVk$_hg?ZX!wvkD}V%X)kXCj$h`x1#Wu6W_ z2hZFmg5EX5d-m8!>6(X$POnpy2?|-SpfJ|WHYaMCgvn|BU_=|gY6HwS$S@Lq!eUd@ zT;r#}sVrfGBWV33#tcue7K%EMMv`FsWp5TxkK9^sC4-)MRo~~WuictI^&Qw%AAP2&uW=~>w>Glz(5;lA{%-m0JCsBO3N3&|_>#>6>-qJtJdL~WIG zajLZ;Yn5Vs!N$d>)n!5AkuCXHS6zXt`{oX0BR{h!H;_ngFEuf%&qt2E^J zIk3&6)MRqT zu$yaZ1aD2H6L)D#UV|vo;o<=DD4jmM<`!%KulEi7-?L4N6QJMpl^Yf)5)F1c<|wwj zS34xSzFFQGGBvd{GqI(nskt0wLwB!#KYk|?%*4tj9$bt~A#cz4eE$8qUr&>JNm3b; zdIV)xR$MDHuQ?IeZ}0-N`9py&A`qC`6TT(#%bgy{O23hQYIFRa;nh zH%b%t9dvKC@wvq?xPLCsPGRL`*<{Q3%V5uUW*R^o1MO0+j}!dPyq0y-6?8Dius{zr z2w!okvH6qC1K*Q+N0o~2{vm5bIBdIGv1;7QRteoexqB8eDyTXSn_%1+uP)9OC*CoX zPZ=bOZe4IV}tt@}t9PFZ!OntkWlL%@V7WhZE|C*kbKSrW1=sSlOZ)cXat zToQk3dBv(TBD#9Ws9NP?yKl6s3+RwBB2ZIz%>Iu+d6K|VQi*LEA0Lr0Tk&~E+Cs%J z{mHty0liIKWT;=4@Gtxx;H}jO3QfiQ%n~}uCVhJ$8F1unGG=Jyp5GQby{PCOQ~H#H zw}=FI5C;uKn^b*I8iA|qdbNf1XRsTg`$K`GDWo~0VQetN8{iEFdk`?aPi24eH-Qgd zwuViSf;UssmPXA&7fH$v@3|LE-@WN*PRUHkmdE%SEp)TI-})mZL&4hQJe>zH7n7iw zrHc^aSn@a`2zd?PuzQD%L!pI>iL&p&0BOf>bdI8 z(roPrZshW=GG*c(aLA@V1!HMct(v5;L~gE-Y~Oz_)o{69LmUq{<{>_)j%}(=UQjfq zq@Jv0HP9%$9T#WYqnp_+gJ5f6YAxZ}5BSYr>de7U`1ESO%-*#Lu+${7;+Yzvl#0|B@5@XYs*7-^7XE z&d$pCfA~m(r+a0F=%7Jw+mqj5abt-Q9f$qWV#Cqs!X;sixdFf}}Bdm3^q=okG945$TvsNmM6uLsw<3 zZ>w2yLfsId{Sbz2FaAz+ar2lqcwify}rc$=1w*N^eqJO5(einAQ zUFW|7hshH~{*2h~4}{JV&B9}|d6utWt}{u@+xR{2h|gOCf+8vua=72D&B#Dks8WG5 zxvMvl7~7u}H(GFDLxX8${_$|@hb6A*>Jr$>&%^~>(MojLJk_n!j4UyF%8a^@)6{91 zAXXnYwSOU{%zp?b+=&0|-xrxaX0;Ul^V?1Bv?WS-q4?ZAQAF|F@SGV_G&yVDY$f7Q>T$lHXG?XrIB4UrX5H@? zS;4)9#6%)#6YN(o$^6RMWu)H3*`|O`Bq(GYD*aPwSzOZrKtEx>YDk{A)hcqF@5xT#*-fCgPcAL?7^H{Ak0B`wfzlB%(IpX z7oNfY+4`Zm5(ReqQ6$X2HmCmYI=P^kzLV4so7#Vrs60vk4{ib9Tzk9&SZtjTov4)d z8k;{vNwk?DGAC7;t8JJ9d;+QOyRZ`+HaK8-x;I|xElo&bqlP)kgY!M?X3*qpEZKawM$89*|IF@L# zsksDp$RGg7Dk|HWGU*-&Kov!_j6fEX==q`G$>yAi6O31&@m>Xi*4)>cPPgrG%*;>S zKKzrZkGwaj4vdgPw9Vu=Z^YpBc6gSkS09xK{dru?ZJG>{&nSU-^Tj3Bn4f=FojSea zDXFNq1i$?QVt;hb0Zn3t=wTkAGov~O^Y-(J`;Kj@E9#>?<^bLk0doGqZ<-{t_J+}m zS!6|@t6hB0aVdAo4cC+B`Das^4Z_<=($}}^3x>%Hyrx!gayi0__JJZ}KJ%R}ZHlo6 zToJA$AwPE3EoMTRKPmiVcaJHoD~@^V6T6fjbtu06see|YL=>sxYXWb`wt#B%+Bw|G zHjE*S1!NU^mzd-Nq9FI+h~kj}X1HtNeHE_6zn*@;GE2+NQmdQ0cXxCo-2QP>awn-7 z>cA`nT%UpC#<;F8O1vR?%KVO6$5Z?r1SrhQVX2fbGv10e6Rcb@1UwtD**0FU*%(e) z7b5wz{}*=D!!v_U(a9o|BJ{gho0K&s!4d4QI0wR@pr)4T2a+-8`!s_DRx*t{R90K} zSKeD6_!{>e2edbKKh3)a6 zg-mn~j9A7ecSD7qm})a%7XyjGoo_@~)= zBEgIjkdcfTWYgr9kum*?4Hl&)ZtFs{9bUzAIll_m?C@{mKiwy<5NN1gSau-$mJ(L+ zdf-c*ba_$Reu+tRn8UJ3s-V+RLM$8c$YkAbCJUtq#h;=;^SPt0gmj(fC1ihQS0UpZ z@@PC>78Gpx=k(!AAG7G(h+-x=7X)v4eD5D zly+Gb3+1)pGiWW_93~k)Aj*`8YLOCmyjH^JE|`ZEz9r9%dmvS#3hA3n!oJ=DqU^^) z`uQfMPYLC-3j>eX@6?BFKrA9icCm29w& z0Z=dhMQk=3I`~U>#7ol+Ar4zxwST$ z<1knhH4lgWUcTBf(BhxujuS6Qv9 zueh`zfyl6y=V#d-aZzu9?!|jl*nUJPU0_0qcZ8R`gEtik!~lYV~psa%*}PE zM<3i%Ka$K-kG9b?p9Ytjvg?U*Gi2m=YxuaiYq66))`(zQBetMlGM2ufuEM;{az50h zhaTmW|M#flGHQHNvS&gKxh&E!Q=j4;bezl&QiubU#;B|2N-2j4Lz0wmQcxcMY)~ebOd(-4rnV^nrrL1;78Vsu#8#{_82c5x-Ys3Q(d&Qi=o?HLA zBKKd&k9#DPscdme+uic~;N|uUYSdqbp;`kxOaL;bT^Q6rh2JzwOE2V;a)Co!NiDtlB>RwOhi7J<1LMpFW#QurCn#yj3i8@rTmcn&uW z3*12|n&C`XxV5JC`PkA9s^MPnjWZOaNZ|;V#NQbDl2W8^+?9tXd1y65vd(mH*>WXYl3m*~!9`T&tK{hDOoo(F3_$Ch&~1UmNy0$Y5q z#EuIwByP~%_i2f{_0E>14t9CsrbDw#g27;55ZOuh?>SQRbTLY>A)Il`l&{|e1?W~> z7U$!;N%?sAV1iaCYIg~a3?Yb}t8_>wid$$F;>DX_gIGC1v72m0YOZ+Ee|buA*n@c| zIHyO#Tfd9TcUwdSQe@zE0S9;|sY^P$>!wGKg*B``yr05uBKUQt(nW(Cf<Fa04&zwy}#cOPGSnCU_WN!!P|$``i>Wxew6%E zg^e`XFNw?Z#`vL?O>2KBJ;Xi>-c}0u_CUxKqx4(g`v*96;Z43XkIjPaekVAd0RB4F zA&FN=q+VA_oQMnU#XJN}rfWRQSbzzf@M5hrXzM9*W5WAU%7}g4oQaLDX5qO}d;^wi zKy5DbuC{r%@(#a|;6$Vg~o#l#rjd$Xe&7BTCQFSW0zx|VfiAp?q2D--TjCXD}j{fxV(q0d!ufamK$IGfJw8q5us=8%?Cbn{P z#`h12ue}9Ky!_#yXCi6B>ZqMk)yl5xwVdy_({E3g<Yy=PlYR>|*t_i)@;^HpTYovE9zwb~^ zw35+s5`%u7U||t3^`o^jhaUF?_p_VdFgPSo?gwzM$Vgnotr zQv*UFv-HWWpnDU_!FF!uRmu=0W^Ci5g~Z;;@k71Fr_yxyaw5QEb#9V_#QM;m-WT;{ zUQqj5wt z2vzF`APbW5=}Lav_aJj-PA<=iSxFO-Xl71mMT82EBCEWdNFieKRdquZ5`n!{9pD8s zM0TA`^K{EuTW{oDoijsi(u!7!)6Q6n*jpjYV0xl(Ju$O_r1#Ok{(w8LQr%skfs`G_ zI|DtO-*ne?F~H!~8K>$vkFv(%en)mUt%2Jc(EqZHY_NGB@V{?GiOIfjLwV(A;*7k( zCiqQCo?{e6ZUuFpibN(R%0Pn?m`38O8jlWtd+>Pg6HW{xYPxLsJcIX5y7SW&Umr4# zo=>{06P5cS4@ZlVXktA8u$2uH052BYQkr|;feTHgZ)?AN4lwFY;pXn>(Vf^CrjJ~Wof7IVCFOvLye4s_=1qdzyPwxc%fnN9ibv}Mq$ifOglV1 z70d!uCQY1i`xHG)V2R(wA44NZWd}?pwk;^XVGQ72{X3c5P}n)oan`g4hJ#a%Lq<2A z6X4*}Fomv3_yfo`*?o5A%RgkB17*V#!oxE+YJ+r*}9g*o&qx@#{eiR88~z+V;<+@9;Z@_7YOO_ z$PJ_t%%2e6#4AyW2Wgdrom=-J-Ynf-D11;E;}US5n*Vl_4{BW2?@3192yD{&z~=3r zNLU@Bbtz9**6>j3rIe1P&sj2)VH%54rIYW;9irG@PdRFJqEe)o!FCm76e8)s&-gIg z_Y5tlSje4NXGF(Fhwd>(wt3b)%$VQaN|YWds*zq|z&WhQ{7KMG3OG~O_kGhzRMQu# zOZsx}3!Y_=f~<(e^OvEV1tDQ@GkV<{%R2@_&4DgY)&r1l1@77mFG8OJRPl(ltmyerLeF`Bq$u#2PaYAL>I#04evimuMsh! zXZBC}E)4r`w*G(bc?kZK^h(+4|Nk&yKispj2S04yKgQnw2v8glZ6*n2<=PYgz?7_J zLeznFW!B_?wBV6Rl6-(V4*TtWbs(8FM1Hv;0Z#nf{>nMB!+r)S3iU(bM$Dx(pCkm$ zdrxONXXb0`8%v{#ad2we)sH_lpqUXD@9LaYv;5)D7?A4YKV!K~RDa9_F_J|$$p~tr zdSNa=h)m2jGdJ?ep}lF$Mgk4d97H8P?#Se_^1ZfWS&hD>ClmJ=;?RY^qNLGyu|OpW zE+bDQuxs?;CQFcTl4jj+EcxzK1*&HrsQ$7_5!tE(w%PnQ>p1^8kjHOxv}PrXEIcR4 zP5Eonj_^#GXUpU=mKP|);YyVkBNvc2WBO1+7u`x!9}6enetaydF3!|~Q?BAuU(~7v zOV}e=EXv(esl}J#(i5gokm)keLfCLNZ?4h|T`5$6hgkL(-)?|A^j9*SH#BUKl~|7X z^g~{uzaI?myhydezy?5{s7zd^rZhtr3jD`?h#k9Oc5KI=bL)zpJHtaJ239vT` z6X*)?LzlB9>>fc3B0zAo=vY}RMU*FvN{blg^?Kkc$KY_#zh2yo>i+#8o+yt(iCKlx zo$Sn9@SzT!H%>$P;?o^HdCWM5dIYl5ZmhVvN|(4Xdd(fl5Q|LD9_;x#tfymi!**V6Vto=!ecA0ysX@oKvE4f*S!UhAk>o@lDZ$^_67IAh`!l%c?h=fzJM`85* zLc+FG;W4-;U~}PK34dGsC4|*D4OvGET)y!CI2?w@5_V$3GD2denJRZI3i{_Dc^l9MryZF&f-OxJ1eC$X%E?8%V>ddd zI293trEATeG0i35YU54C6rSJizEi0YTqzBH+PYxtI8&f(Bf(CnnW*vHqp;$!_&)PCI5JGMgBoAO9h0U78RG?~G%w7aLzL*F) zZK}z)))rjq0L4$`s*@q^F0Wy3LcYlj47_(3QENZst1E#)PNG;-=pHM33a!+L11`q6 zhc4S4GS@4ef|1I8?D9~kHpyJZ@-B~}qw|H?M}+C5gSs=x>ePm6a#Io<5XU*UasA;L z&G~I*ES66VeY%j`nRb~s91-%t5Pfu`1H!bW)4rw4bfAt7Wkq^#P|>SZobx@Q{BmW6 zKt}sz`$IK9U3YldTAWwxcUmK>ug~}K3H6W9I7;=5Jp5T4fkF8$AU{fUIgItzoQ@xDJmQ))RYBukh0oqcA!=H68$~bLwnj3HSNf^NWuP=s#>$4 zZL@ad*K=PqI3%Izv_s)%z6&hwfU4Hs$u*=Gd@EYRXsgnW!KB^98@vo^378I_w(1gV zcqo1+F)R^X$-1Le)s4F-?s&(%9+c7`g6hGNVbzg zDH1->>Jw4vAg;SA+SODS+!x$fTv%0~R}IG=%*szXK6v)!+3|@xd?~#>Mz4%q)8|;D zjYQ&!>Co392k#*N9IZ3Lnli*sMV;+mXUzUfKj|NLEazbBV*cZhMU8(zfb^aICkkKE zx`^FiLHzCldE+J1h4lOk6XT{DT>E9+Y7S(zUSRIY2J9K!pu%F)wVZS5yxw{2%gbXj ziZ8seE*c>@S3~8%#)u6YI{3R>Cl&2xe1bwlIrDDGKv|pVD09kfOKXzn`|@E1RdvO= zG2Dl?_2{ojqgsqFh3dnb#FF+-mkte0L8NiJj;L;Lw|e(`eR*r7`;wPtbw$ahQoLDD zRZYc`2@ba_S;4o@*V>$OyuMzi}7H{ zT!W7Gcy3p%)|J_VOFgckEr_c)Gb76U6JL?bpBxJdh^Q3+<=IW{K}+;{uGx&8O6U1z zX9Tk>7wargOw$+hEZ1u%Y%}im#4)bk-t0XdIoXZnNOva)+-FB(l0kzdBpV1D(B8jv z9-k*798GTGeMd&&Ua2Lj{R2s2p2r>F=!fgX3uf^2p-RuW(q!g)i5i~e?GzQtV+PHu zRO3hcyvgS;jl#`YFI?;S=ORv3=&*%q-Hs15D2l$M=d}#6Nq!hVWtAG$ znb1d7>i~&O>hn=~aUAIX^4&1$wE!T&sKp#k#tG8NGdTnd8~$lrQ14_Ao>=|rJ%36% z4ipRHU0%lV^JuXGG?q%q24g#EJ(}!rpn0}8d6`WgX+7FhHl+dUcWv6h%E%TaUL>c~bFUNrpynZ=?04<4#RUNx*Ym7;~CjLODvr4g1$Yi~i zygYyzPt?B-ScNaeHE*OB%|yJMcRYGoW=c;lDk8eIO1SWc@W|Gq8ulVBhy5zH?oM^$ zZGY=;x0+~XssUv^c5e#EjJT=(nKN*h4KIpFxamn9*^PsTvRSQBk>04igCL-L6D9V|$k`#tVf|Df zQqhtfM^`|@$zWxLaCRmXvYdId8i2eyT4@Su&b|?zrG|x`(&Wc@ga=4c5@;=!Baf?K zfFcU$C9gRv7x=w|1a@2k-L@!u4x82nrDREZp7j0+#iP+egsLv|79{}22i;Is{;xwJ zYSJ3woLUxce0SuzW(Y#`%ysaR_s5P5*7LKFJ~;Vint6Nimb18HI zDEO&Kgs##{%<1QqNTc?@3|W^e_6l$|5%zGTo6nS)FvFE!BWVc?cd4z?0vcR7;g(EF zAL3w3s)Z|-+WQdEEL7yWTa-tJ6NvRe`a5A-=Qna4xsa z93?g_tLyNlFza8OEl=?A1?|6vx|d@>_K<5@Equ1tK*MU`JT2TTVKKRbu<$)>sMhlG z{OaGy8MQ68^q3OWL-#fi4WF`_3#%EDPENj_ZVfmsA?9k5!Dr#L=K+Po`w+oS9pZ?f z9)koiYwoHxJ>+!x)C{a8pOuW-=me5V2aHWuyNH5GCMI>CFZr9W2ns*-uqb`;NxFS; z1kz;B4$YS=0Q=eANVxJi^SGqoat`bliQUp1^jqD7N=G~l*j&^}^)W#*2fdgJT6J8}TZ-^MygX><@g6`1;(dJ6 z)T376edJ`(;Y?H}e^`;v1(@2(oQ(q1#K7An+d}fff;iAPAY7o*8GwpcMcA#24$~?O z(0G%!_Q5V1x3cd>GsN6pG!s?GrIqJ$J0i$ycQed4G#YS5C_<7$;LU-D>u z<>vR%=cwcX)C|Wm3I{54GvhDo3Copx(MTnCsb7mq{5fntriBFX$y)=Et*#I3JeHs%$9LP#w zj8$|<_jyR9F-WAqeg*z`*-b$HtaFfzbBjvz!ff4k7VgusZ|udNi_zvY4wq|A%g?Lj z;I@SIP<=<7flY*ggEz?YF;0*-QR&$sum+d)Tmpn| zinE!404=bKF!X-Qir^e_-KvyydiYoH@5!P?7q}liRISBWSy?QhM!oK&5TO(w;hw)L{$7+&>};XV2WO^JgJ02% zG=cOBk{@2+)l^jUB%pYJ`Mr=ca)mw4l0r;njTxx}4qZ-~GoEdN_G3G=O9|`Z*xhAd zAj9U_eLFLvu#0Hi(hxh`DS)Zp z$8KdcLl7sOT{6bX(a8uMlrNfWZnquyCDJn?*c$(t)#!T9jD@-NEG> zas?~{u?G7)x?t0Qc0=vj;uD~@aNGl2=%kH_<&%NChmYw5sS|lF?s~@HoA5vEOyBz< zoPotTIwP>S;OE33tZP}pZTB!Y`wad0tbI++&`p0$&eTOhm+9Lq=B%+vk%a6RbO#XI zJg0<7fEcQ9gzQXAM0SrY6&oQxDE-hnb3gOcN{A$Uh0T+BjNbb+D7lUr zIMVacV$|hv zJiH0u0=nm~>28-Ew$p`n9lG@lw@*dX2tbc&ovt(_Q*%;i6AZJI!PHp2YG!aR6*3Qe ze7?_j<d2+wawHzT6e$k2*?m~4KvgQ zKpFe_8y4K5xmWJf_~cq{trD3Asr`)lohvj1o#b(7ofSnegluHaaJkCHyu^=TrZDem z%c)Q6__vc)Y2OdlU9YKWwLg5_X?oz8@O=RrHV{y7ybvijK@*&PS(IrNRtDSDe=~B! zyiXrMq=_fS9kuinSK8V^VjSPR_h}yWSaZDLo}hbmzMyiz~yDOL4sZJ zW@hgD!bGo>41sJYYB*;m(niqm`Ze^i(?)V4(IzLCJ&RqSCm0PxCvKC(N2a6xvcp22 zr&XLAn>0kH4QlkR7@J?0;zwdW}!_X0SLDUV}=d|~(GZ;#2W zCZhDoKGF5vks1+Lv6GIxY01dA01m4df>Qs*@HgxjgJoRd!El+dXB(}!rjU6iW6q52 z4fqDf(~>^Wa6L=o!G-ul-GoY^@rf)+ov>ByQBK93k9sv*fv{hX$msZZOFh4Qv~_o= zjzW{RTRUi2Gph|yA;~FiT4L{#{5Jto4_o$Yb_2y3Z2@?YTg@6x4`%4SNwB_wdk5H? zZe9}1K86Ozk~g`=+#P$6gFNy57~eOZnwphInk*}05d$;z+Ea5d&YO(syH98?mEl1R zGjNVq6F1(!F)i5jD=U<-qMl@jY@2Z*kfPhxG7WCvx>OWrzY!j*|Ep3c;XWq+@d&18BQM=Nke zNe_rsK>f|1>QFC?wh>PV@&xUyW$vj?ec)6N>=a?QihkUyo^!~3*En#J*IB9zWewBr z*PjUMUdfes68L`bzeQ7gJVdGufi=I*)Hl~9EcN6~k#P2w;Hh`00dn*R9GZ5YXJk5> zkyfsT3F42gvhWD8*0VBLVKg(i*uDv7f(Mer`b4Pq`WqS)9pf&w%`PgxrOdt~Oincp z4SuHAmr+rOW-Lfc+EvB!M(D3QaTG053J^5?{ueskqG3h}&bUM{a`n*WY`f9;v&UkY zjN%Kv8&>hG`f{G<%xa^!GZLp^LU!rnSwviWW0TzF zI~Vil+~l*R{GzfpKY(Ey&2sY<(oA5b{`pdg9t#A&o^#YgV z`4V!{w{#A$3Vp@o1HHv+2gCzj5!AoBSu6z^y}9J~-#Y!rkCBodtBR+$)C+eAT~_D5 z_PDVr3-we-)Dd2)lO+!z0xi(vjS{*;l^Pw$BM;8t2;cAj5RSBd2b$>ra7Jm#{##Y( zzf5-izomCl66_TRb94i+jf_2+qUg4+cvvw+qP}n zu3PiYMcjz_CV!mB%)e*HT5GRI(7R*}1U+FgE{RCgvl?U)d-CmzHnZBKg~6gqxqrfq zICDDm;>{^rm`q>8<)Kpvigxx{k7acW$;~7VlpyGPBQL<0A&X&%J}jE^rRIK_@Acy* z`(3K`f+>zVvR}YmCl{oj!x5-MPCxl}c~od}e@Wp-M8jF0*RNR`+^9RQ3H z9?U=7Phan^ej1&!3;QoHWUZLe#a=jPyiUk}ui1w`B$pLZ&m7ck6^zMIO{~8yJ*iB$ zAqF4}@Pv#)DQgTSp2xCQj9KY>Vj=Q_c?iD1)H>T|Sh|6Aa;f?ebEaU!I+ucBwf&(g z5Sv1G;w%~ZQ&yV|5otASs2e!$tI#|T#7LL2{t;7`<=}ALPuLb+4NC%QZy^lwLVh=x zTJJBuOUNqJ-e1dWvTNU2t(qSY_Dg^z*1n)q8}9PB463Asc1!HUpc~Ot&1SI;bUy*f^g6+nqXuSxQtD22odO$O@9LfqIm_)T*X2N*SBX2VBMw(D+ zuZL(y!<>5|?|Jv>FVC0GFWppcUOidSyJS55JxBRR?Fvfg8q^_i83OhP z5I^5WP%ecL;dq)p7G9^Zw8i4tk}0oeYm#{*ki5M+ayCj}Tb$6}ck0Hzr2$G3$bEZM zwquo=t;xyEBB9gRe25wmDQ%IS&~=Uv$;j8we}HY|O`ODk8T~W;S5FJZ{~6f+Kijo` zfnKuz|Bh`^&03a-4gQ~ikXN}x>`_)?_`ed@K-RMqh^l7(O~3NSF4B$YB7P)-*rmh1 z)!WOKp3iO^%EAb%kCDfRX}1&XRH?MP*np904mpO2h;GA(5_6|dKj*=xn-T&jX9twj zJ#9iJ22Y{Ez&(t_y|Iht4!IDd5c#7+ZT}F1g3Ud6L>!`C@eWX52w%`|oMMKjFET(q z3htx6b5T9ci>QSdWCInR?r?u0&wX9tndSiL3?{`R`^}@u7C9~8dE<53!`_#jv&G*1 zn_4{1e|qox^pcE!lmTc%|7jgF4%^saTi3KGmg%MUgM~q75dHk?U6XhY2gVs{MBDfb zH2%{E2ega%>>d1W&|bE0TR$R`6y<^zUz!o? zvavtDin-lKtfELep~;x>C-WTop(`TfP4+q&vk;S>tE!E;QQMr9JmJc2OLc?*)dl>( z60oWnH=vSSVc1$*tq90PKyAQ~94s>_!J*tf;1lvT7rn}edK4gScbllRge7!G(gH+*hQaAQ3GIvg#ZxgY(IJ?IFzpH&BQ78P zFOp}v*xn-?O7WMRaHtY#zvvTehE}%$Eo@3Kll7~{Q z^f@D3;4OP85VEdwSrc3*MvzIFU7}0wlbIeV2=l*`-A~7pFe6+mn#Y<<#iBAObByZG zr&S>_GjQk{xsH=JD*Ow^e+yKZMITsu6Ci7H`pfAOMRp2HCCzPD)UV%p>Lu$opa*%i zYgaJeLk&GdI?WV+?t(_?okss=!!;JR$2y(tjQn|x8?QY(CWCv~t;wy-;6ns#a3}?Y z6H?r;>s5>$?Xy`g57ZqZh(>sqWr5?*)2LZP3l4hBCnfh8)z@DUXHilMweTn?n1eNX z>>TjVeKf4g$dp9_m&y6Hzg2>GIxnv8-5)8i8@t`XE-*Db7 z({U!; z6>g7@Z2w#p^l}%-ANHlGUfHOeClpLPmADD;*;^;dp}TX!XeObyg+XQht^=)Q2O1ih z5&wGqM>8*HtY?Jy0~PtB{eOe)P<^!)^p+4TCh z$mXAuUxtS-bXpl&!Mz8}g`g{@&`3+fm(hPbFH#Tgv7QGi*M3Gq6eci>6C@PP8N)s= z`dezk4WHT!cE8Ap-SXEI2XqtAoF2(Ng%G1b^{FIQ$g1dBzU%htFrxi*ZT~W`TKB_g zz7z~gkIR91d;SZO;M(gQySYYTZ}%Fs&}(0z37X@GHOGu9f? z;I}Nw?cz*yg>+zw4RjVayGS$*orS*k`VM(0IthIhj^{wKljj&l%aDX}S2v5``SR%+ zu8`yG{+i34E3n&NsM9=QIK^&&5s&jHV)>Gz1cFj=D~V0*-%B0m&Z^^c%;gr3-v78i zmyM7@{3}r5;lH*)rvKaq|G$?aZvCTKvNpDH(*M73US*oKES4y85MSVcZ)%K-K=VWw zI{cnsI^r3m1hTL=iBaAqqf2m=Yx90Bf92bDJDp4&>oaaexrCUT_i=XC@k{n1dKvRO zQx=9YI^Kk}K4XfEca7cZYVTKXSC(qg{TYFF5x@TUj&3I=lPw)c~hsxSKPXkv3r|ZX>)5OrRIbWgS+vDo6ez$4P=goCh8csyW)l|ox(Tv z#kKNOm4fX;zIwVohUP+f_(bVF<_SU-4)nCg9uK{8>s_zWWcv96*L#D{yOy?2=jc77 z<$B;mT3hWh+YFJ4gU(ilm+|EOcQN~A=azhl{24F&oCFJ#Psfujy;bG*`gMjk-5z`YoJR>bHaLQ&w(Vknr3d?IE-Q&Iw=G+P_N*0&5!I|n z5Pg|r(|wOpNTjA<&my$|{Y6i`aN-AbW7n!!%DE8J%o3&BWNwz^N#Sylw8fk>>!hVSHa*_^> zz6>!pS>Xbe#hzoLnC@o10Eqk`@I4a>G>qX(~I3eKzR|0 z-~1)+#pK3$1-HC$6T;w4g1_$qGT`kGO@(712Blc~;D^G$X8;}XibP->VK4&aU;5C8 zqQ4gho$!h$U}9e(Fo`vu#A{(@M+La=tpyms;HKoy?5#({EqfJ23jnfI*DP zmCt_-{Q1Mw5&(uVN`^3hhJg%uUVwmXA$DGZtU=*th|QcEa@={>U49!2IWv3taKY4k^)RJkX^Kb9 zuUMc{6Q`0_IYX-`OmeAHKvD@tq++SPmNOtpN{}-;q^KmWWnAkWi>+ad2hObf_X82+ zU*ABy(5Q&|#?%aq#V)v#)j0BlfK@Ec@{q3vA(sEt*zC+6ZL*< z<86O5Up#1G-+J~IBuap)4dcAb_WtJk4H@D<<4dHJqpaAS4zp2Hqf#X0~&u9 zdZz8*mFNYGcqQ%Gapn}sqF~HuNKcHk-ZN{wmvEv8QI(4# zXQ7e3Rzd$c2LTCJZ9{)-ESVJTD5BydCci( z0{tkh3G(#*Pt%C#oUknaX&P8R-TZ$(1V1v^|KJDs<9lP`^wY_u^=<$;-pRlXos97S**YnrX#sJQ|hwa!ObB z;5@mPr59P44q0`U{M}>W9#h{&Vte~Qye@?yEk9PHa5D8G@VbZVXeXb4T|!nVH78mD zp@3;Am#G-NnoW3EGocv3`&(;0WnA7%o6#sYj+kOH^zQA4MLK`NS&hknCIrW0g{-Nn z8GjOW(8>n-xVn13;u+oQ9cRB+?|2#kFC}cBxwASELD*S1HY7LuAz=qPq3Q%z3i~Q> zLSNnu!2qSOF^E{`MYJq{yTH6H!I0`LD7{1k(}=mr7*`da2+?_wud~sJ@y`4S8uU#6 z>a%3iJl$6Mc5M?zBEu3lN@Rj{XO7!x-tC_?WR_2^$pf};QFSgid|4ZWrK$9+6v#Ox zkA{^Ub{RR+zs2!8=#_edhn$&GG!{gp&CJd()1*g9sw9$}h8<$qxW>xh?!MOA4g<*66K8J_b;4BQ>aT^nZVm~ zco_gS_VcdSKT;{qZu_7e0Ygf9Pi2E_D4I|9S*Il$uv)tXE@lXS?)9e4sUOj5AU>XH zpCS174d7o(L~Keq5P}tMR7uQ^PiA{(Let(+vs0zp2-ixE@SPkjeBd?A#Z?~*Za~!+ z);(r2dbBoE+JWfm$C5_LXl8wH2NW zjH2t8?e~4NW0Jd}1&i@3rA>#}U;6fnuku`IH)8@m`_+d=t^-&WL{kG{y)1aMT8Hus z_4yJu{S`gD#gIGjR2|} z)}|w-_Vzfx$WNeAfDaFHMX5ctWrgF3k6N#DNhL%L7u0z;5Vo-6}Whoy)-93$%zRyN;STv%-Ac%^Q#GmY;gAscYV! zw$dcfccD5vM6#k0u5Tm|zJ6s?l+}LNI9x7Oz7_f2@M9X=PInr&7Wr#p{{9sitm(#@ zGaX7V%zfY@j$vL{Fw|Ne5H9gBsiTAQcvp5&L^Rjkqe1(2==4N;k+8d3_4+JU4ToMu zNxl1-X-jqP^}9XZ;&9Ty8q+mjOKISUsJ_M>L-`E+*NO576H1n1^E&#fKumf2o)FEc zR>ErR^ax+}uap82;Pn?4c$qK6e%R36YL0&Q-=D0odOYB@K3s{IxVB#BZ>p~k;3x~eV_7P!SNnywm*XUE8+;SwVr`aOiO?LjxtYJ~hllC9Di>Ih(1zeDzc1Xss=yMgFH-mBYd?;^WBMszOS+uahnmM<-Qkws^ zB{d|sz9#qs(x5F$pP?Ko?ReiuN_TOvYFIc>Bl941ft6Y^ zqKj9)<)x63NE(&Yu~R61OI#K)F=->D$$aX1YLJ}teOTU|yf&1oB&uoIs-ab4Rc<}a z(G>Y+-qRN->Fx00V1{kcs>@7m1qY z5diqnr=Mc3p`dw@jV!l5APk9{CwHzqrueR**oa4|tTCVIL2MX+e4F+3o97cUACR3L zemWWcGRxNBxT&EEvWi(w(woKFdqVt|Ts(P3XMH5X6JuLky2W}Ts{UWTOnuh2xH*Xx z7LY#85rQI7;^DS|pExK$c>$f4c%6cduNT2toSkE(tDfX=QVGeg$X-2}=2M+`Ulb>3dOX{+MXyp7Ia( zO;qY6TC`9`#F7^BMcRAE^rO(UFm;4KVY=|`-+$&ois`4IFz`m8;2Gjg4IhA?{K;Ou zd%@{=1L5#bn)N*k7s_imSylM!o(-Kjmf{9Bw!_`|)x5UR8%yF@-gNn6w(azZn6r#y zkLijdB05@Tg9bB*+evTX#JK<*j1~`F3)@ z^=prS7X}1oAno#5j3pl7@14L{c(so@St9f)@paStbA2b&$cUY zez%!%nTD|Z!MAnLm!ecrVySG2Ot+Q-R#vh5-<($}2^X9}$jd-V&pTi}*9(x8XHPMg z^`{ZiqoX5Fd^47ko+ZDzI;L;o7x()t@TnTN=}i{f!g(l!9{qb*2E}S^;bcq9alg^` z0%kviss2hH!JFMKDjLD5;B4YIfb_K^-qok)O*}j~la2 zV^<<63bpQw4U{O}^Kl=VEGZYkNDNSh3HEK~+Y))NNZiN|*^wpRUVarZJ z2+>4Uq$GsQ|L5I9wHS z<$0cWUKO$x>~WI(s5j|qjUI{Yj&k+o0b2%@<;&d{xjin}dOX@I;?l?AK^xMP{Q}<2 zz=Cd-Ts!Q#CjhVFtB9WgZ;h#@nJluAEYgML6=&h7L2qBC)b*iT`DNSpUz~6K z1?Eo6pIg=Ke;pHW{^QL`*v84+>EH1ShuD@s#v^z2P!D`HpjEjaax|lN``E{NqKhoQ z=Rn2RhG@fqXey0ang7Nn;+em1+q#ezUQpOE70Zpwh{!?LJ=N{=T1+#h(2Ti=tv`bc2A$q|G7GiQo0!I zq69N$$*B8$f%66Kd+}n@M5Iewutxb%k6B@EM)-EOzky6 zNB&_5ss(1)Ky}tQ03@b|?*RfrUvyR>b{-Iq9ibTY-d`zi$lh=(*z>B^G}*U@6HF&l zcY2CdF;(XrUw!z<)O{mFdv?^}zM&#D+{7rKzO?ID-o&~Tvi^3F@v@=3>rVM4?&r@e zrols1N1au7$|juVLw(0NS~r|T+5n&&amSfP520>vVK>vJ^=CFp4N(Au*!$z^t<8W1 z@7NUEv;X}v-`(v;1>qT2HyCVU*z9#G~E;+2zK?{=+(L%A^80;ddeo0W|Xu`Ze+p3_kZj`&T{jh-Fz4?lB{M5>pB59q#ct_kClgza`M~9VYXGg`ijFzgtGo zP|(o6BJf!fL8P&h!V>*6H_OQwl2Q3r({ozi(k1m^*v_DJOGrE?%jj2G{L)O5(TJKy z`_(n>YJ0bIQpM*!M16XV{iqGTU?j)dJmPffd%6(AG1v#gm)L2_-`-!9xF3mcq_rV~ zE7&!CbWPCx_dr^rm$eoo|4xcfmnXQeSD~;ZT1FVuu)B({o{Nn)%WoGdt7_tR@i90V zfVM0+l1dGJdalWCZC%#{6C7*D$pk4)C&YJ-#fz$R(G-G2Eqa_fOQn1S)DIAjFWd}$ zN~bdbAS6?GKwAEl_f^Hb+mtaPUFD-YBxU%Gay{(A1g9NIB$+8(djLz9h zWb#{`8d4sOf3|?h1^M27YFdSaK1Fy{!;tTVdO8OAbcdK@<*c0#RTkD8Pj ziK(Y9irmE|;jStDWa!}wc7qC-?`R|`7z+WqyFtW-Jrr~-6!c#F-BO+3)g=z(P{@yr zf)F{LB7jc(tx~(9)PVI@(0M?C%R%vBH_nS4n*S;Pa^~T3#tCxOyzo(-cf3WZajVLm zeg^E>>o-*Wbssq${Qyyo71@&JAR!!Xo^x4?iclP;mmK1h=doz3eeTRSJ4OeqjYj- zp==)zqjZ98CGQ0TCqQhQ`QMl)ZCh+p7*3@+sjpUOT&4D+NvXl!enrMQG`|>^g009h zJ}p|nbX|-WcD)80JF2*p!x?|V!PljtFIJAc{uQ>bUdMAZCnI%@_}VB&bsPT-lXosu zdmdiujLq;G>&K?@z{0XP=Ap435zoCE$$Xcv{e#J;XrkFlkWu86)Q$pHYQyT92#Nw8 zbQO@XgRhN{6baJU0(~LUdt7t;S^E@Lf!X8%Gn>jsE+JrK-$cwaqmfF%BmCup1k-5&ov2FTB3~D|kjVH4v23O1yq_6fmVONG@9qxS#Kj zpN=7k)}|`AiWpg@S%zu^l}v~9c}!OUsHyMpNBAL+RlmfDe-TnJ*Pm`zav;tAc{kkA zcB6FrI2h9}-;JoaQs41S=J<^$SWHCtHCHzIGMBAKX5=@U4_pS^J_AkEP#bMB0RuM+ zL#(?Gx{rAC1ES&hHW|`ue*Gv(+}Yt9S5b7ysv=J2kJU{UbU`kF@ms=HNw5CeIR{Ui z96~Tp&%DOM@u|(KKyPI2vAAdRWdCMi44klJ@fL2zVJnm`T zLOj${r%JIPQg-_he-`!_KYg0aJ>U;NHG{-I@Ek6PDHYfv87q1PMvwUuB&awNjy4fr zpox)RWgh^MukOytd}a5|z!=S$nu)VoArk2*_;@02011C%nJw_4As_=q?y{DW58Ur= zs(|D-L-$(2Hxp|b#g<3xvl2F)aU*iG@;j{7){Og?Xh)Yq8EcieAFvgf-7eg-&1#nW z0hw{pcknUcpzZN5>s{$awi67#N`Y7D?QFeapKeI!PnoVTq`i~rzhY~0$4Jg_0x^R4 za(YM;0mw5}xmY!n(>B>jO)q*1(+v9eWlFfj>qZIp%T9j1^t9`(q!##Pq+-Q;*dZpY z32wEiitpHPX|15y8NL7r#<$Oj3UuW-gkK_c@>Bu`wX#qfjgfVKiYzx|xaBVgY6I=Q z=RP;G5nZITfqj|Y;J$gjpm!QS_w>&4bXc~7EyFiaVUP{B_3=C)OMCcE@pw^=2A{`W z)I}NfH>xeu-`FX~!=Q`?`@)V^)SW%cf@9&fty$HWHi2_BuwbQK;Fi-kAk6%QEPWMY z#T(mA-DpFF@g&WcdkXE^jP)c=N4@sxKJDqmErMj=dV(hVlj@*)7FW{r4mQ5v!oKcK zE9<+$ulZ5G$hmaRQ@9dkhOIHnZUrADhzLoee2(p--FQWeq@sF}lfMddhX4<+E6~y6 z;JrqpIv8SEzIWJQDL0gpAN3vBpjnjwx4bl3ewS5}#3xMiZNJ9v5MAC&BiFrg2_oHG z^!2Xvca}yQC{EJm^<9q23?`Z_f00+k+dJ#aV%G2zNKom*tem241+Rj$XNR?9!fqj6 z{v{_`#>sALhHu`66ajRhuzq6n0c}yqd?on2Md7|$l{L}?k&Yb+IGaDjA;j-SpNouE ziaw`M9i&BOG?bHM@{XN6phHa0MX)wRBJO=Gj`*TBlZ(kaK`1_lhRM4~fbl&qZOyh0 zkr=KhljBlAoiw>%IFt+XJu%?G(yvKjQSKf5w6SZ>(tG3?HabBzeM(W?t7K&l z?H4eAq=c%^m0gfHyD$wDW0em;<8Cf4w90Squ#Mg>npz^)8*VDn>m12%8-OouU+}J3 zfV7gPbGI@&xH}OWyi|vEID6E^1qf|3n!>#_>W`7uzL=!<3!N}us<`GCal%jaw-rPM zS(Kp$2sK`J3WqN9cz#-Gk~u4@8VeW+8>t<7&nT{wQ#j$K7UQzE8La5p*b3qyoPxMW z@h!8p=Bi`Lr9x>gJI$$0f2wVR?;a_etg*G_unaSFbPiZl+P^303PmX46jNx%Hc#Q2 z!KH0!b;MXDBv>TPqmhF=7f7Q~Zrp~5hgdS4*-!X!UdOBo8Qv870l1 zE(DWfVI_h}&0aMo-uIlJFZPOVks*fio7^w^i<6C0`;T(7dW)w(DyB*p)|=??)WGa1 zRS5wt%r%8&`Uc7PKBvD{C^>duR8Rvhq+tbYp?4Y~IWnZwhQ=q3Rw!>wF3!|p`T{O z4AX_^r&@lp0DQkB^;@l*9g}Y+)ivS)e}^>mhXXep7)F|oehc;;#jsVr-5nTUXj+w3XPG9unu<;3#> z2`>WeJakP7xFOMPhI#YYW05cgv`RXW6L6+yGVj$u+i@N{@WT;GzMB%?Ql^cp#y9lVkn64di=O<-XVC_3kj| zvHQJn97(Vo!Jtvo79pqxPR6K*W4+7wBl}XX$qtMc!lS7G*wZ()m4&On8ps%>|E*y} zx$kMXq04{yhq$#XswhQ5Mt1LBy!Far99i_hz&s0DU(n0J+3a&n%T%e~< z?$cHDO#BrRL?A2&w&KnWd>YDgZn+X-=c)FH4EiOfBf&$CjISQI7-D=Q)HCSUS5+tP z={cepwArqo5+JKE)3VPd1jpY62zs9TD@)lCu0={JbQ*VcIARX2I2TTHfWs#(g~$YA zKGQY;B4AD(&!=)>=l)`<$@vCvO}{cXCJKoqm(U^Z;d9~~d)zr#7o&2PQZGcAU5v2;oUsG z@2qJ&R5r(Lh`DgZ$vtSc`K;&>QOV16b0f=K$_#zpohmw&Zp}zXHpPl=C517IbKYr7 znR{NUjD(l5P7&tZx*XjBz@Yjzy!Bf|c+qUFeAS*0jxK!h&l4r#6Ux*&Bq15!r^mV} zFYn#16W*E!bVYRSab- zHPFLdw)_z`uPnK%(mKGzEk@;Qz#zH70jXdidapxvCWQ+WX}!a?X#9uI{D=}}v7OG1 zTvUeheG%F3LWmU|PLz5x$e!28bem+Z*rZ(?L0|gOWN>?jw{%@-*;f7dGIxpb(`(sq zH>5>(;B46`!c8tJ6U}|?5qELUn=76W#0w?Nde=VQOt6l0fJ{oJ1@B$Nn(>>INmyZ` zk{|;DY>n7|3uNGp-;iz!=wIEwY11B!ax~5xWsmt%l2dClsIFGP z$8;Lg+jLWoBshQ04lHV=+sK~Ii+k1=?kvP&`BD#a*#OeSg`MY?+;J3y2${E@Z$!AH z2{~VaAdd0rOAsaY<0yz2<-BG`0!cITY@EG(!J3{tsP&;=wkds!9iAZS0o#)S?|R`0 zWJY3I)vc4;5>!m}DoFy zq^tX(=z~iDZn9>d?fiMaYs72Hn@Spms7Hnwx;$W&+$uu%xEbv^A5g17;YU%;wUi{e ztc23rKeDoU;XD@pt2|MlU@d`aWOlQrodWmSLhXJTO))I+n91zw`hY@I^`Ao|@Hbav zv~?fY4^ILSxfjVUmx4|!@!sDyP2TXS0m%aiV!lGttikKHX*)4kZq*|B3~jzV+f4@} z8?4?xVn?}t0_wnIZD^I1!CY^&K;w2ZL#O?68hzp{&W{B+r95OU_9@LTVag4lU6LcK z&S`Rf14D3~M}Ed$(U2aoyySwQFE^VWhemj))juMAM5#Nf*_l&~ek#Pe=YvPqF#F3- z{uGpN|HRTr_8eCnBLV>AssA@%jp)B@ z%=m50t@W+`;S@$GTwDI66Mky-e(&;%gTQbi38C^vXxV;m%6{JHj+q?%oH@GXvt)SHxUR$p*4PtLuK09&7XA6@qdoBcze z5A67tgFlivkyES7PGdrD0O~F%KcE=I*r_SPgQSt4EBu#6XrlF9*K{w~y27StSKzUn zSzrXU6TM%)-{27KctHLOYE|C4einlk_Ab+_5afJ=Kx>huV94We(qbmLB@N*UI{(Q* z+F8l&LbK`Eew+>or(y_WEl^LF4T{6L(1FCTNVSYUpAdElTto7R^3_;q`SKsz1z?!B zxF&aM?br5)vXn21E$#!4F8j2+Z!?^n+==1(?f};7=rQS~0N=UJ@A*#?q^cckOc=ZM zYuozzx@CvJ6wZ}@2Pv`nW18ChP)S(+t8Mgu_MH0n!js>@!PfPkx7VqDuDIWX`aLmq z@tu2@XNa~Jl>kGXVtgH2bjmmnHeci#*1f^dgikpnVGJU+_I1tUp_cpsuCLEok7bpW z;^Y)Pbv<&=-WpcTFvb99BOZ-}s(YKOH@bVSTCE$m&S8xGiMu`68<0T#5{Im%a1=2f zNlZSvm;ZbFIP>O^!SDfh7cBa|0b9_w%cqgW^nmsVJub5##4%pq>5s>*epKB>VFf1z z@p568bZa4Vzdh^%9=i4c#Z2{HMNhowq$c>VL069Ht+b$j`g_bl^ucmzs{Gh4Kg^P8 zkGO+kriCERfMH)lkj1a$@eaB~V~Vy2^%F^7Ym^8MlWc5w%I23yWPblw)4Dz#K6Gi9 zxR<1XZoK8Tb6W6VP)isNsNggxf6-(8P}2td%$W~%S>GaV)R?|L{M7k91GJ==`7?&O z7^!;M{r9yIjNQ=*Mk1xWErdG-NT}hiXT=HA96Qi*2t*CH_)&$Bt=t=Jz7yFQ*OB%y zvk7kkgv_ir`Z>71&aiTC3rn!KfjklICa8G6`KH6))6~vrY3|A~aU_i&hi8z)!ioNQ z79Yuw!e}Gu*4OIu+Q+7?;+6xSZykgW3S2Mw^XWDhRb-{Xn{no^5W^G)$)>h3TZ-13 z?tu&7#@Ru7xoOv~iG`(A8q(UPK97tIx+3jjGRoZ7n$y=0y?UUqJs3?;UwR+k5>ec& zdXsn4(G9sJRbvq3qKv+(wWj8X|Rspxoxv&wN-$Vf#vxaqcz~5y<0bHjS z#RqRTt5tAQx*UR?wnhZ;L)|msxKX+kFvycITz>sEL9FLmw2Gh)p%@snOtSEZ5y+`&7FiqLZ#Y}=6P2wb{F1-VMY#dOjRwa_aFdhp{#xF%iY!R|a zbs6jQgXq@!!qqb5oicN9OsC`zTX@iKXvikPRGdc=Nu;fm+O3^iSelZVCz6Odz>)PMVIUL5CfoA&(f=Xfb{t~`A`}_lK_IbH zYEa^XXmeSk%mdbf71sO+gXD&)g#wkBDTI{cX;SatHnk5h_CsSd5rs5RSv=*i{AN?F zbg&8S;t+Tx93Rs<%?{XsHTlzTd2fwN-YPErO5jbj`bA-YMQ-SUAaq`7O3yI!0PIB{mg4|Wjx)|q z{QIn+HGtO>k|d|pWrEhJ?8bli0pnHXDBi<^ZW$cjj%3QDq2AD+WSr#}t^3(x%C8+@ z*}65bBmUTdS9IS(brFS3$m`!jzV9^gLbdhQQ7gK>c^*~1>;gpFnaReDS77~Nyu>kh zV)mJF=h!9twOYodWgq_gHkVu_SBqnMos1IX4H9D^2TqDgC?`uQ;%s6W6B}6^f*PbCg#Aqz;|+7L{tDg`m2x;>%j! zmGMVg)wObX@`7JyRRoJ>!wF%L-V16kxQzQba)+L18I6P{SvE5oOpmo; zb*VPReC_0VyC9p_x}6hHxbNJos#RtMItcdd@@Yil7TdM zvW!z&eD@g3!%MoYkOig@R47GqMv+_l$U`-^c^bjG%}mrgsN;#miomhQQ(g<96~thUZo9=z&w}Q5M1G3{$T=*iT(EvY7+oL zJ=(I^`Kks^*^2?L8m=jwP61~-5n9uQ-d1tnqpfMBE}!Md5>zL$*9^3@ z7<(bClap5L&+2c~`Hq8j(?5pFcT=a+`;Ks5Im63%rGrkT`VX^S2_UPdv{H6mo+&S~ zGG0}ZywO3<`pRuz+tCNgxUTCiti2{XcPVpimra@8xQw2-p{4sW zqeoG?fYr7Tjt#;_|5FjZ{x6@*6MP|t_^s5y<$JdVKn~)ps;xGmhBnsedX-J z+?|K@`xo;nBVcR3rL;uSba3FVo@yogxcrp4dVaG2)2E?)r3!XDNkAZ|e8afO?y{ZT z9I{j1OSw|VZ_hGPA|){(KrA7jn>o0tPrWm+gc>Aa{z?x86)w3I2zC?E(-v%T#mh01 zCJEj8_>0mx>f;*-NM=zaMAFXb$Y~@e6Wq9x?xb|_TITqt2hgA_YyTh& zCoF@GCLzGC!nZb)l=XBLLjB00C#71X)2pf5l4xJVFFOAUgwU_f-{;pPJRPempa!JS z;|nT0qC8EpQijJ4*bCI%mmua~K6L8-g)enfrJx&9MG5jX-{g|(5NH|CtJ|v!HWd&FO=;u;`hs*lrNXGxs;sm+NW`r z8Tt)%q2*A?hg-lUzR%!c&3Pw;cyH_D`$K{T15d$Rgn9XyWP^X;`~R5~{ojs~;14O@ z$=TuG48KOz|ED3n9yfpXv(_1jBOey;&;nk}3J0c)rAu068R#6$xZ?D0NcrBnUD;}6 z!%A176bNI&7w!82AmxHWS%bv0%66?2!`OGE{EB_vK6 zug{d{n8whrjt?6M@4f>;lRc>3%vz#8hN8r1&37mx8-)&LOZ#FFNRp~ktNWuClt`=Y zlaM6_0sBe`r=HA6Ig*I#foU{+5LXN$NTxX?x!t|PIzIo0+H4DAwo-*5rRF5CN!&t=!oA`io>@hC02Z~7R11u_}Ejh~VXh8ULzhpJo(gdXy+_Je4hJkDJXOpJPERD>5P)2Mo#Fi?K9OB`hd7&3f~R>V@NQdVD`W zs%y*#A|11lghV>Oq2^{wK|}sVn^DWhjX<@=W$5*W2f#nc>8Ua>=wo&~2A;6b+ZKV;eVn zI)TsdoR_S)v55IWngDZfoE{M_x}Bh_c~n$_OR95uZ}Y>wQvKqrw)HC){aRHNS^edE*i%U_31-qmE<=W5&Bo-hz6+T z+^T9yjDb{LN{t1nG*7RSqB7G%Q3g8(vHG13iN(%7ec)Et}9&KUR1F|6smr2A(#?`2< zM`OJP!LlC(peZIRUBW2>V^C{u1s6IUbpltxH%0S1qn8o&MC2S#GdagO+cF-ds_>J4 zE@2b69+d)xRHyd`#=o`Crn_`6eAQR+sLx+HNn92!KJ_s<1OTD2mo<6F>gp-`rJ;hJ zo$!Ab=SOgzo~wAH3qU%7T9X$alu&X^5NbI(W0ZMtS*^ckFx*3nnr9x;G0Re)N;vTt zQvVIwzPx`@`s_!U-1M^TX92_7;2gc0`#LI003FH_aWGQlbnWb}V_$F>~pV zhvAs9!Kr8k*+fjCAmSxP7c4iNc7#s&W11~<4^%>lrj?uK-=_h^bdd*9KK2WYVk+D^ z?rgFq5JctCwVR;LRPo4h$t~P^DoNS10vtl=(o!_AcC7pNGh)lVeoE=4eMTj^TlK+? zBjehO0H(E7#bTq+eEoR48Q1l+w*m|7rHglKwr$Jj3e^iQLxBy)+3U1M2EDV{zUch@ zxTdbB+*xz0^~BC92Ffzi8zC(^_gq$gn`{{#&$H#5I-mif_ckT#qY>H?grN$=z}yPr2lqU~?8DeM;s%&0voVp7fAhQB zabn~k;*Hz{&HgMykRT2_qN)CNz!1Ot(_EGxc?G5aB?#V}z=*D%A0?zfCZbp{;uue9 z@KGIE!oW?ydx-^+P42V;%$!XICj_iuPTK-{9>vsz#TATSA}*`?*-GkWKpae@x<|8^ z?EO~rxab-Y@0om9k?TD4V}(zh2Rp?OZhabFf8jfG&h-^^EVU>0YK;-jt#afoKFf5p z<}4DG(FMd(ti+YyQLDo8Fiqsy%>V(F+A|roscycGBZZy9hS>P;eDuq-CQBGJUv^~nH(-N$PzcJ?^Iz)aZ!RT+)x{a|Z)53%77{5y; zumPl4(whTAcf8*&&qY>j%*b5+HjaV~_O?f)!eyISK`^;ktr1`9!y`AHj;>3mx5M*j zvXV0Jw6{Hf_{a17k&{L(`=iE|{#P~j|Lv6eZ-ok)nV9_8rTzzCRw-%OWc&b3>%vd4 z9!dW=1W|D4^7nWv$t;qp^>&uAiNk*Cx^Z80QgP<1o*Vx>#@HIGB!Z!rffKBcZ3_kr zuKC}hfc>A-2*269;EbmOBD`yMCX`?3Aw}U9xJYjh`UV#?P=u($KGFT6e2FUmp1!W# zWGQm0x2RPmouVL6tH%wqc z&;gVfgeV`Jr4858AG2pH(5%G^#^l-xA5cQ*57rcSeCXDt&{7dgn%#QKUSQ7dYCCI3 zzr22j!oN2C^^3^rgh~6?JJrHd2c8aK_zFWO5#a*GKuvGEmMpqOU58@LI2L2+8 zKi98KTTX65mMWy6Ysq(h;J-YDg9rO2X76^KD>U8)4#p^?;074DXCCOMoH)#yoielc z__!bbx?6UbV_wAO%dG)7%V;N9LpIvaKs-U;VJ)wi@d(6^%b}GN!Y{(BCnOZ3J`J%s z!`)UwHIrpxBRM4LZ|A4p6r{G04|9^CPz>b@)vb!unJTnCHSVR3qFRotH6npGd);L! z!V1NiALDHo+KvA)dK`i1eoF^7O#&Km=WP}qKih_<4A#uc*K>u`>^+VSJ6h4G;)x-N z@KBG&(jV<6lWJjk`ejzg$#8uc9%JOW8OXU4Pm?1zRDb2OY>72%`I%*W;5xN@mmZa} zWQkR?=0QI7y@5G=*R^ML0sYy#d&BylmWuK2rK zRHe9M@t@ESYrO9OoTK6e%afDe=$5TC9%PAC24Oo)AM@$#@o`D9Kb*Qu{UP4B>5KgD z>8-QtkHQWa3bXeJo?rTSWB4Yq5bY_22xsnG7%}4qGXyen>a*qiEt1FgFIR0;uAp}) zeQJOc>8%i-=rPrnLZqnQyZNKDVd1-=Mw&;y&ipHBZPWcu%GHRk)U=Q0>lNp!{=LDy zc$lIAM!c3yA=PrCpTD~V z{N5L;Wj@_Dfi}^5dwm!O2ML00d{yP~9~ymYV#ybkPo)8Bt#2Ld0!fP1ek&ZrFf+5< zE~s9OlTNhG+))<|Sq#w*p$@L(p8p2QeR=#m6D!!yEIR;$^xA&;%^KzAR#H*AZHDHS z&A<=+S0$or?mFxQ9YK5@4~GifJFwh8KQ|t-V!!=L*&Nm5e3fw|oAbH9E~VOCETn<( zxQy_ujqtLF)e~^KI|V(-mpbGu+jjw|ra9$~!edKoi@l;_+kC&0seaye(p~1&ID^yGai1J)QeD{ zIikI}zd}71*~8=Bq9?vQd2}&y5R}(l8Z-$0$*N4Bn=aHEg?OExydGLT%bn5tfd*wO zQWjhF%UABv(p4NC0ZWIG#(Z|9AleqzGYY>Xbmx6r#qNL<$P$y0AXm+e@N7L}N z!ow}_h~Y=jzg%BR=h1YnJV+?PRUST)>}okkO8UmPrkE_1HnTwOMB#VkS5OZeu+<<@ z5N!!IZGEXiu$kB546HQA$=g}Vuw5YkXehAt$(h_>6I)sgrMO~$w_xgl$>TLr_y&;> zXEE;{BsRvYh6?LGsww3Sq7eIIbPP2Sjy@B+T3%5yP?1yPWnK|dZk-MCC^HRHK~^z0 zMFNmKv-Y!nR=NcttiH)&ch`yikOXutJ2c~h4v^kSzAFF5T8i^v-%5YC=Wdm@1wM>$ z#HffaS6LcZ5Q&L7J^kZq|GFKkPlwpI015s;`Wu7zy-9D?(N664c<((DL+^C{Gk)N& zB(j;NO-S4>0s;8oWC0kT(OjW`_Zp`AIp+QudQJ()#`8sK3Og$$b9ZzIlb^v8gyiD1 z%joHK1Tj+eK031JmuKy{#p(r8%|Et#^7-cb z-Jera{I6~K-;l1brJmLQHsvNIiI@dCIG&cD6B8rd5lFOwO3{HJF%~``PN^!Gks-Fp zLeNAwQr6D@=|bWh&jG6nBdhd-?B0xzA12v|_gv~rLgmbG4TJ^woad(nTQQ(T2AIB+ z2k{{g}fwtqp)lMj-JOG4!eG zf%g++^kuybP3b~*@ppZoxB}5K>NLy_W_^)vzWo_c;z+5lNRrv-fVHjkcRC3`%Kk5Uzpu#=FnWKNhJB(5lAQ8hKuZ`vjJv z6^-nX*>AL^xX&ib!Mo6$jiJgnkxei6|1e`&4jX|-m`zgTN)~<%Ge(y}AZR1YkbEh= z4s`djsw^3HH?BMxc9&yO>8hh*7!hy8&_gXO4G;1L=5c3Ya@Y#QR58`0coeV$kwqB4 zX?=INEQeB@*q|m+N8DXc1!6S7psIwa;TYpia<|_KbM=XZ3LSEKx6XjQ5#rhG*(Kc8 z3wmlMv+sGNC)>*^hjFTHy00pqO|IXN@80CXGVgvzP_(1q>WE_xT6dIh@;BINA0{K0*#q z43k~NW44pCkscrsHPX>C(GN?1$iw(D^Ya0G3^Q*-=74_|x;7MQ1AJ#=;T}cWV>x63 z#M{LZ4vS^(*VSs$f2t(!eozjWC(Ab)y#(7vuN~@6oGnSu^h6ML0e@KsxSVdA8?=8Q z6(F^scN&{g+s_)`!;@b9Ml-PjT{#mE$~Bj>B}(Sw4+=esqnr3Mt6#rk*uFzVQK5~w z1QOzsSOl(0h~jub&3}5vUkVAN)w&qe%UYPN;5;K&H%=d5KNQD@a|c4+3HTs$2o~JE zg6ZV7C|ua>G5Xa~Rh7Hu4%JrL$}RMn=pEU+yu|0d`i9C=%D59G_? zmoT#KP0Ei)Mm$q?cdex(m;BE@@LxHg5?b5Bzd3BkUAxFTXy5t$0mAN_y>ME(L=^_% z!7L0-bIRrrGQH?+nEEI!kFNiO>}Sd}c6EL2;84){}YtP{PqcFpZG> zz<30z*SL*!9I2%eX(;UAON-e!tZ%ks0a zGEpRU7)m=E0xUjI5&XtRf1k4SR_qLWV7+h{6pkk=6Bs zqTx#)LF=pjKN8AED;FR{MhasmpMLs(yp9UWPdmj*9_tTn&sgR&URQ3p+&YS+YgC%% zFL_aT6MAT!0DZmii%3xBI2!;^xTL@1diHD$SrHNY@S~@lIUxY8noXUS5}3$d3%Yq* zh7G2kJt-^SK^!U1<85+xsRh>XsP%T4GhS;ZE|vuMvH*1xd7H}~rZ8}}Wpmb*I6Hc8buYq1Y1 zQ%oU?$7@Wob@vc@-o2q%8w)CJF5DBBJwGL~l?s(WLOsZy4QRc0&%a2uLPoT`N6*%j z@0J)izYJdTP#eG8rv4o;aL!@<&sWF{@4>RR* zwJ^jEkBp~Dpi0Vl>X#RH@V-mram^`1ic2cX(W*6WqT&ET!Gu@F(9HLLMx_0pHFokp zR{pSmWt|BA1;L7#=~+AegI%R$>!b(h;Ie*v{JKsMrLE+pR7$8sy8J@pvuk!VVPys) z&qYN-pPbEz>7qE-+g&f7FC4=$m7w_mW|T;_0~CeJw^j(Gb}Ojzw*ABn$(T19O-tlZ0#Ekatv%<-TgOl$xvIHA0y7K^*UNKR%NLeN}zL%r=OXvDd zOIG;4&gI&Yg~~a2Hvr-y6Q{>k>2!iF;?barQBjyS^=7L82{4^IaZgZPmp^Qw`)isp zBQ4nRK7^U+bpGQ!uUh<^^dfY$D%;*l39^$gp{?VFk~||3^KQiA=j&K4JFpamrt8-& zF?z*_#uHPqLGMv+aLzPOyVspiSJE8}M5Pp12p=~YuC-mO(&m5n%&bbG)?@r!sjU9I z|Nmk1=j!hN*faCrAAy*ok=1{1=2We0_Jx0b1)?vw&2MmPV6D1%zHHLt5@$l^%yID) zU`k3>w}94>DKwC6h37sulhvp-QGS{Zq`j6z>-F0Qem`}a}6vIzYOsHlRi z`SEdd$-qo+TZ(LH1l;mdQ=nA&GA5RjAe<$4PHgU~(+|1|!i4NWQ&JWWZ2L&bui@ai z_(W8k=F?6*3hYn7Q9wKnn)lhIcTdDzZ`x1&N?XKGoTH2J=jrKL$?y?SYTy)9tS z9=7t$kpKtH6_*aRs?%w&Nr6dzAGwe1WL0V1| zI;NYugaM|PNs%p7FFG(ofgs^o4_88LO6>#>G~lI4Bsb?y@gqrnxr^ug^G16-3if;) zErj2~Lw@bu**pLM?$kB8pH=q5j70ZSy1R{v$V)xrC{kz)Aw?_Klud(Z@Y#CNYo6S0 zPSwCvF7*wc&#Gfvb9Cx^bgrM8MBj%Vcej5}WYD>x+|2>KriaD;&?GskfyTacyZbUx zdzEVKM)fkrw}5GR7xCILXkFTZDvN0LI=j|BDvupt_!mR55+7(IyXz3-nIoyfk}g1w zug$p@7Blz^)~^gO(nZl;L0Tjt@6->&dk+ur!%jf?m<7p+;Z0=3QG#M5)yWZOOY+)L zNh+vi8{=j~MKJ;wM``}yp<8)>cm&dO>Qp(>xa##$Obq@4Q`#vTGf|CN+*sK-uVcEI z)~e{MQt1I^jQoLQvgIQ?YHVRKFl$xezpGH}Iu5dWlNSq1)mX(aY28cutP_zgUosEI zDWtMmgA@iDc{U@_+j796$4KB8G2`kxlpiF*bX4E&G%YEBk4TkGNho%TdG=@W8tzG6 zc)5eeZTzD}=|bY|G{sqa)}7eQ(-&uNbA7 zOy!ALyMcz4C>8agNtK&&c{+l*QI(N$nI1on>iCZRugBO=#b2UM@8!RCv2p8wj|_(=0m^s{p7Oa0K(trCYLqtKg`Qj!9@a3_xMJbJ1-sTe9Xj z$$&A;B8OIm>@&{=jPAl*KpE#-`H>9=m-Hl*gkxTU#A# zhy$`f@?Wy&YB5;nXFoMYQE%~VU1dr#)clQf})5v7uWHz0h6|%RC4*nQLnGQj{U7OuOd(|%ceqthfi^la@Qoh z)bK0-S<@rD)JnK^y;tOyROhz$gb#Oz)9y>M^z@r$^iZ4?jHja4X(HqqmY2L^uCWUW z+pjIaW0jTs^v2;fuM)&$YlbB~<#|&uf@ye`F%dDhC|oQqA+?04HNr83U>3s#?DImv z$^>`)7db1B3&TJc$>&`fb`tM~H087R4h3m6nF`pJvZED)KFFSx?(SZa}@ zJNB4-I$f8%Ol^UaAwdK;cU@d3lZcqGNg@l{NEKOIhr7c$Jk^KRqZH$9wFD=|U+?=Q zw$mr&V2^oVo=OjE{ee(!-8bhpw#BGQpKg(bPh*)*PT%p;z+Zp=SrV?ZcQY3Ab9=Ll z^l#n$-;}$Odd_t$s)#xG$)mywP(~FwiL#s&x+N`za}yQH;w` z7V?G0ZyrwRUT``l@Sumc>$Z-Q>6F;rq)Gs}*lUt}INSQf>fOFZIh)0VD+w$Rvd}QN zQ^KUU&!@D)!3@Gxv0S}8#qgadcj`SkaiUzK$xy+%dQSpPVLqrGKm-9$wF!DFrq6&o zHbL^eEf$D01^}8bosPKjDSjCuJXD319VR!DY|VSK_1GJlY~Jhv@? zy3+QDhHQKF#$7aDJbk zf)zE}<}pg#8Ohl+110IT5H|6|kNCkK=VrsW=foZ&v|dRiD5BN<2o5cyKV_`(^tD@~ zx&#Eju0w$d2`&K)M8vfjWnUo`1iZ=*9?1RmhY~5&fB=0)#2I$2;jo(+mded^j8LL` zY+;RZIGrbJ(8k!On0igZfl^WtM|;QJ zdte{lI4SEmY3@d>^ciHDlC{iUG$%Fn225&f;ryznFevEcWP2G5<#a-gbYBn>nhg!v%~bDiIOj*}&eUhM-N}gh z7`=b?J7KOB7Qgvjqrpp(BBN5NJo1r7ji)S(IrdkmQ%K>Q#gSAU8{G%7d_Y&F5Vp{9 zXDwbeAF_{0tTP=Z%xdP?xD|{oI3g^D%=NqM@f^k0{Qbq{6^-+XDY`gZRn9esPur|XHMdZs4>--+FxkxWJt#-(Et%Z&y8)% zGY}8z$|rT2kPs*wr%68>)~D{7P)?Pv4Ube;md7CyIN3kBolG2!W$Gj>Xp4PAjc2>+ z>R5^`P{k(Qi%THk9^|AofM?r9V2OVCeKhAF-P;w{`bc&tg!cUt4EZ-==P5%I@C!BT?k{*J zoHEPg-n>JBTGFVpL594bp8M|WVh3|(>o%fmv%r1&Yu4w(!5$8GsXw%4mG_wgYf!~e z_LA$P6rE;`mM{{mHdu8*6^kpgUInc97~-|1Fh6Dx+r-atNL|F2+6CHHpqo2A@73xT zX+0Xj_atoLIUL5~E(Vpw{Me-&QswsTSOt@Ttu#~*r|gz+1!txOJ)(c~`{O|Ih-^WK z``A(0oT*iZ=6-byRMNI`=m^{JA}@6qVC=HiwU12s-p(@l8E#{$#-AuZmjKFs!!v~o zRPL_PF1U)V`^xo?D2@gohuY^q)%>sg%fB{eGv^GQ z)P@`5=5rzx7FyCCBu?I+Hd~^;S$;mL==dPhs;Fs$_6WYnd1wubeGt%y^E9aM5ZzIw z63fW}*DNs58i>ueVL^F+zgGkUL@zL?#*)!SG?2BC4heZm_#fo1pj)JF z5JimZW>rHneB)CVFig+4*s*IoQur2M-dMr0(XkUJ9IDI>WNd8sCnm;AcQ88jDzmqJ z=V36-h%-=*X%a-8B!W90;If18z(w0Ks?vn+_?Cj6lT08W6#1i-iy8P3Sxqn{{b7o6nU}L=w&0N& z;p!%!b~H)Me2@aGXj+Zn$C16MbUw?_L8|CfpkdOMon!nakoX~$ft!HvgeX>zzBN8` z(E4iKrAhzM8`*3-HD=W)ElyL8(KAS{4bN~w7ou=INGwqM4dXL?Z-}!g;?^>j; zhsn^#U*0dbqVG=YW$Ud4kB#-^tEU)Yf2UgQcAeU8DRm6}PMeuE#h9$&;*bh%d+q%| zVzsQeSLTQL>vPd)g{ z3(edkZCE@0$8=*&3gaZ_S^d@}3ud6Sx*8KcH&@_=&^uHPmW0=67|{6W#yFCH(V4jS zgS7EPb(w5)O>76mK5P4c7~5G{dm2^59tTshesAmt-Z*@IXj(l3T~KM3kRhu3xnNP1 zvw{F+K$!E?`}j44bK3pV$eum;v8X>t=|<+1fGlOQR-CRdvlm5Q00~650=vNUN;{b2 z<9}`$o)irZEZZxbo1EndA6${adF;po5xQX!=Y1CZ?fsGsY*gnJ&!nuL@Y_uduUer; zpBZUO2}ZF_Jp`7AMvn^U;(l&X-vBTwHsB_IvO1z~rhoiq3hq16r*o>&wf>}z znmJJ8@6XD3f_AdvT<_`@d7yjgup{S7au}aqfw}x=fUH6WB+_oY2ym4wR#6 zV9P}8NClG^%7?{%{$W!=tBE#U3}J6hBpQS=L{219&UI zRl=}OKa_~xq*+Azw^=m?xq7{LNA;VFPg362&gs<$CRRv;HMX9CF-xh^C0?_!Uu;S* zjGgQG8n7-4`}$1}dSd3P-ygHU_N>R4ffg-S5h!m)@?r>jRVjUED4n*zrZD_kNuem* zJ<5aGQoEsR{DPS5AJ{{5u?Y+u7cp&{BH8d??SK8 zxL_w2lkcBJ z&B+t_54H9yZ|gTE{!E=>z|Tn~Mk29m2@dJiPLyY$Aos3N`~)h5#3#oIZOCf#d9Djb zhjz(&WU$n;1+g|1n@bxLzS(CiXU-?xDN_Zd&I~A~u2TK++num%Q40q+;m#tBMk)6` ztytpwEipdv%8FnP)`WZ79%9!aAq%j-@U`n(ltFQiOjfCgWK`>_idLK!Sx)RsQtr;y z6fEbc0wD-k@S1+78oUzP@LwDJF}Tz3xUQwzx?`!Tr+eUwC6EI zVF=Amrz7Z>OFtK_Jhf2Twd+{xd(kl(_R?FMK&@809KjtSihh5I_OEwp!t(% zgAyDNluc!}*`_k&RgZ~Fu+frTTmdzkes(jb`wJIL<$Fl_pALuCg9xHe^1Z}&>buz1ek$sff`8|GEd|LC1{>Uz&V<*|5lWDu z^HQjo2=uGyc8vOKd`)?LQo4$YMeik=Au#iV4H|b|GhGMsCPm5-%?+jREuFOEkKQy} zK2$3w)>VqU6(6ul(@%W2#Vo5z-C-n4*ibt{au2my+{`jCH+l&+YMZ2u z8YO^IfP>oQG17@Qj~rtD5ZWP>cZ5b14M9>(iR0u=6xO>H^&6)YjqlAj+$~dbqcIqW zJ10wUD)Rw5wPom5%PPfps8xu*0i!RVq*iAL=XAut?zB>kg?sRjdwK^yLw~gB+CY5w zC4VOT3EZ`P6<;rA<!_U&hWSb)z95DVy4X{cxitjGv2*m0Jv+xSMR!kxN~86V z24bppL1N-CVlICd1a~uKd@fmzkIhj-{qP8P5^Dh7QfZ;cP%*f4ydGn6)Bo7d4OTii zVlLZ->)^?IGG{x~y4)020NXbw9DG7yQy*#V%FO{8RiQLd!}(4wB5qnDedGXWRP09J zkfGhzS-I;x?i`M&4%N2SYDzGAK%t<$5SIo6iX) zXKtJYR_p|7Oj?~&!@L36u%DPN>V784CDycZf#t;7o>egAJrV=b=wxVCu{Bd0unR<< zNs+I_q$U*ydgnYys~88i;`s_V;b3VV2i;;5=cSy?`^`yb@fE`K`!s#&Ltrz%-y~^> zY7USi5jfngwZ~4dX8Wd|n8l_OnX@uR*l~q9Mgv}I4d4DM9J81uv321x&P&D4sPfvT zE~l3HlW86mc>O7o#N!BbPN_czf^YdPklCcUxBvbUI`tF%TmUDfKdW=%%ln#7)my1*L7P)fz{lUF2w8%ie(T@){5}K;Ap3Vz6rUP9yYQ+Pm{Z zfD$Xh<2u;)f?u?T`;;4AJtt+>=P)A^ySWQ;`V16+gwL1nXsEnL+q9+Q&yiIX7^Kch z^})h34h`x0m9h*oA*f{L@j2dTztUl#_Xc2H=HD&{Tru_n({6*o9hY8 zR92(74|ZS|F%l75pg)mNP=uxU&Tu|_@O4_iO(&aJjx96l9{=f806{eXDX3IaDH7)P+VhJSHBv27h zLl4@SX9-Im)>ZxPYU@nhG~86Qs%lc+d;Y`=(3pr;6R}z?2y-3p+S0(ZRb1}RSoZn* zF9lq5>Y^$+tHCZW4OP_iyuVj`x+^I=-HJG8KwF=CvcJ;ntk@emJ(#8G0HaP=cENO0 zo_Bh`iusy&a&*+F(XVX%5~(*_sVrUT8xyme@JU<}xP7~*c~(~P&RC*iD_eUqn__=+ z#j%Bokaw)q2}9>4p*`2l)^ZTuG4ZMI$0&QSa85@>y$tDW4yKtnr>Qs=aT}sJ?*tYV zdQwoMQBwwfdoO%V+Nw97y1i|mHjh4Hpsg?JeY(^9#MCr#O4UI%lkJPXXs|;uV^#>-0Yu>U+kyYe0X$X(W;7rqKlCL{2{-#YRhuJx=nI>j0(|R z6EX6Jq?7U zi@Iv@N&fq>w>NA$Vc$`0dDJv8_h`^$6MKg$1!HRasD6?NHEdYUXvkCcHr0nJn5~Du zhh${4xt|Z12F9=G8_Kek5e;Bl>qvq`g-$gB1metA$m}tY7A}z89xeyTiS*e1!Ys?8 zkbWPHOgz9^W-tE$<4f+L$)s+P)tUOs&kNOqxP62IC0$$gi*pan=k0NX$F>^*XULVI zj@9@uGP=;%P*^1RgX!A;)_$9d9WbO7mq|-xCBj;Tam#WZ7;9VhCR_Cqja^2nY9S6! zi{j;`A>)Z-2BNJ5P-7+F`0~uO(0p)&$FhM|H~ex?mpUG(NhSzNli%Bb`$O*QDO59T z(%-Xt_zBGDE@vszq;MVC6j#)fZ2ro72Ypz2@`m5alyYOa*BQ+MX%=$=gZL4&Q5b&9 zcb)a4ADIFqi2wSgq_X?nk2>i0TXoWskDh&rUP%Q0J~rO;Z^3$?!Ac1N`2q+6C-vmb z5^?0vUUPqMfS!13TU)qMa4AW59Xk(9&v;%DW88EkzA>C4?)h2yQ7TzLA_8(5Hdkl# zA;c`V%i-OH)Q>1FB9Zk&C!)O#a~1$MyhD3O+h61|%(VmSGL_S<<0do#WU@89W3jLi zc9-d(J2=30w^OXV=TCfemYYqmIQ!Ty@8QAEYZ#a*l9KSIGs2mzU{rSjPtCqXJhf}e zwRyOcGens>MQTBsD7LMC$z=QTAk9>e)cV8wW9HsQZZj`f8u{nWIc&pFX-I7Az^qFn zZEL?O{5OdJNhiOr$tP!}HFxWlsj01i#0K->bcgn8YmD}{f6Lc&)B1EWWQAQzmTJNi zD%3+n5SPQUn6!o=?+7a5<)%C%3?5HrsxcyRAZAq&cpCNrfipLXf-ddBOW`*{jAmM% z5}?Zyje!!`QO4gzX9{MprCpDT9optA{Zc&(u$`364=y$zg||as=T>|p&>Il^kc>ak zYLgRb^CIcGNFb&FfnK$r0u-V&D`I|tEDc%)6Q?9-jD#j;fkMc}lA-#F1Fq{W#QDXu z4~uXB`x?_acMz-tE=i3HiHg*Pil>4o!n8}KuwO381(z0V0p0Dos_s-fKm?!0;LaF7 z8>dzv^pgSkz)lH+ySTT-GfaLKwuO6Og-k${#nel*KS++Hz25Yq^xWJ#YLEaq4-w~D zMub^L#6uC55+1)!4YUW4P!9({nni>kqI)Yk*9NCgb{}@NRsvzw-&w1(`OCRj7ZGq` zfUs_sv=mLPR)=5`(lBby|%O0E@5~Z z#q}JURTj$&oe#QNXtwa$>_9y`xkEy0uUFiZqA#0`Ul7Kl5bN3S_BQ#VAFG)sN)a)f z4gXo-+kU-}+KocGoo#y!9NDbfvYrG4O3ql&0)S+MV9KgjO3XAN-+mno#5(^h6TbbwN znQi2a=}+S3jS^AHwoz{U{}mA znJW9P!8ZDX4#2!IyS%XC60L?f@RVz+^4!c2gGZO4MNbyfTz{n*2~4 zaj&aD?6(ss`^i?=8fX}-R{eZbZ{SbV{V*Z7V`eZyOe=I8wWhi)-E)+!H}jTOD@T}+ z+wa$9?7snc=y|ufrK~RCo)E0uzH=A8*V(~?PaMb&0H#zRz%UAPI0jrBgL)Hjw4Z5P zFXPH=I7*NG*k@!N_#EIHB-^f{EEydbnmGxeX$?)S>*EouHZZU~9X+bsp%uD@6(7^Y zcfMOS_4?cN!3ek)nV2t59in#ZkW5pd^L^@@O)hq07+X~NM>inCxXBjgw1-bmbKg*7zDRbCtXmtldA{suX}I6<5K}upX z!wocbP_AeVLa>@@aG7pRmOGShY1yQe@D}_ZZ{E(%e@HyACLt}$;ff3=^ z9NAJfHVW4BUhkLDU8tyD)wb0YO!e5;{f>UuRVpIB!K)x&hL54^fJhn<&q7C3qKRHE9O|QuKxW`q^L^vh?5d$% zGYAeJ?(B;s{D{t^EVC(v#(r=f<%(-=hCe zM!xm*<5cxK>x8)DrUxFW^iNOsUg_FmZK$Nn=BRuQU)?jKc04~qof}d7SQ*wIBy$x}4*6whB zB*5iuB#>5vP)Q5_=r;AR2k(??>u$rxVS>6;=54XF>&T;jR{|K901<0LHd#SUOXYs> z{SJU=5#PT&^hzk?7#&gf+ClT)XaPnL@MNC0a-8&s!q!G3V)VIc;$g~?MSAY&h5YOg z`i-l2jxLYVW+ER2HzogX5pKt>OcK}R_PNWzGAS)Z^#ZJ@~>6?Pfn*(|tV zj#a22aa_Z?lFv&WDnNh__73A@cJ39Nr#6FM<7i!nzoX^Od&^~DFjiYs)ap#TcOJa& z2gm9tI!cwE@2u0fYaudf?0s3^6~rCW_PphXzCZu*Zz!Zag){z4p-Ei-HiiD1e?!W~ z+QIRELV2Q;Ze)Hm0)I7$zQArE#an17syK>&WsqU(BUp-F1-~-2jTJrFUQOD)=9zte zSmtDrNR^TJna*^(+-!5=vP)f`0fqu#*QELi&Pk30iATS@JipxAPpk1GNJsd4qNJal zSdc?NhxaCc#s#0Y0hUXE9L{`cld8xIpvts8!3Q<^@r*;%0l1U))l~>0R$h(0M^c5BSN#k zP)iP?d^0V2WBEodp_)*YxBtrpQY8g%?=Joh?Jjg`0m$^krn;R_iq&sHWI)ih_lUkI znaw@`SfYs0KPy|MAKw8LSgS6rnpY;O`|d$Pe_m?vmw9#;0J}Tl0})k47gR*o50T3| z$_ECfR+~S_1-ux5z&%Yc#dDo6&J!>Hu=8k0QyfO|RcxpORlJ%Y$GGfilPW_7s3xKg z36@laonF6ifRC#-L%haHT!>nHtB&w0(R~Jz)%MFruEz9ag}t_ zn&uOe`IXSA>WXj_V}L7DUGi$6D~&{4`W)s&iK|e~^(3ZU7t_Avrj<-B7^wyVl&nEy z+)ZRvuKPt+bbv*e_05YYH6>N1)DR5etDKvf>;ln&- z-UL|n7jf7l16v~n)-DFP*l~z5qH=M={ht#b1dfm079|);>zD2K?yCc!UE0Sd|C|rU z*1ulUKavCUe-+UD8%rarXZEv?=YK>8Q$K-{8!SlP&c2^uB(OnD9pyLGCq@F9B&u~z z)XA1r3cx^Cb1;}{j^yiMjE_ArE^+miCPTH*rUqdr3vG9sqac}^edvJX`g2$%ru=(} zLg-mgFt9MNx1M}tKsmb*!V<|*s6qxi<3j_K|VSg4jPyD{H z3KWUS70fJ|cq3;8lQ$CRzAne@BxMTggP0d4bE+|%0Lk~$gxjRJL@|jo0Ac&}l&Kqa zo3dh4vH(S2hqgp}@6_!ahASr<=xB9Um8sQgi+zY~Fw zIK5i6-Y}jx%M0{AKXiV^`8EWgSh25!X?ZASvc%jG187SKLhj(oMJ8WxU3nknX4K3O zE3GKV1x=Jy*fRh;k|MzogoqRmkd!!*LF* z{v^w95=vf%RBV@c59N`?kRnlfXbR2=bqi=AWDCWW`D{55hDMtYLJb=TB2=LR9^lXB z|B_jq_?YZ(#*YVC#M#T5TcbswVl;Y$X3)cQ9sp}$OsnS^bX3l?+2944Rl;& z=FEFRcrVM2luIPQUUvnb)N;g1E6rPB#-LHIp=tI(seB;Kcfdth(MA?=jWTvk3P95u zD;^if^BPEJC!Jl)ma6QZBb@=moh8s?0kO`6C%`|9_KY_x@Od!r08M|O<@w*zjFYO!Cs29Ty z8OWK1J=FR%jI)(e5%$K3=1Ri$TFPAoSU7QX*j+{9MCP+_CO8a!xYo@xlGc z$<)t1#>%H&&LfGi$bjZSNpK~Ar7sQyEmi0Ho~otsZ!j{T2LpZ05?LgS%%LS{+eg4jj+kA~Yw|sGbI2~Rh(yf!~9)jBv)|3EqBzUe!-)k|C zu|5**G&w^yW}70_m&8g%U8)%dRYa2oi}7G4wl6{XWlX$TOSp70rR^t&>+zGg2+Qx5 z=uMfybYYBUNU<`VyE^TS>EA~$Qjgv;vZEGo(_Z~S;3vq`LeM_UM3fL)V-P`kFnCP` z((aK|QQM^--!_mImyrn>cnA@zM>>*U`mzdI92{xpzP=Fes9Q3pIiGllBiLm!pv%Hz zpvKB@u#kv+idqB^P8n@Xz8_}rJA*6B_S4sM+GTYa$a^#x6=YNp*Op~~ee@a|=UnXo ztE*rB_;cFX5t;Nb#ytc@j$J)UJ5b^K-Q(ZD$efWjB678*7leRt8MUw z@UDgdqxnc&u&;mk3a#fF6m8*la>(H3b>I8><53O;9Z_N9!-ab7lgX059raz20nous zAvr2`A={bcf^hCAdE}y*2z*+3?!X48QoYGt`Isd{{o4xbRW)aBGbw728-z{ShHZZJ z^Ilk#Rka9UYY1_ahd2H|&fY1yvaM?yjcuo5+o{;LD|WJC8AFFb^Um7so*C+RnV2CRDBcJ#l2siF=x3vv0kck??MvI za;_j@JHgiK-?hpbZo#zKNMh-^kq^stP89dCsf$0S4i(KamIkq~YeV;gWwDhP8;tX0 zh>Fu`T(FNqU|VQ=w$dhNAeKGXGJemZ3K7*cyZqx}&E_{A8(^cvNu*T6QScOXz$vSo z8{h<>9-S(S#Mv*2d~LWsTyfiyQs)X1fH5-i2r9XFC|Mp5&QkCiH~=^>`%;i+`8#vBvNaG*zXjlC^dMYFHMZGl5k2eNLsoP>pGr&t7ZI&Ei5+ z>DA+r6Y0OZ3-ZN}fqD>q&@op3GCVbIW>FeVN0`lMC$e}BFU;oQTZ1P0RA*!hb%TGh zL*yyHhfOu{X>sTIw{P*JSE%r$Df?{ z$o3sgVdaU+`cCCk*)SSQ$;EfY<4g9p2kH~ZG5Hx=V)PqBU-%+=iw}^DV!=vIf+14@Z83VJjj@+GG~WXa%Mz%(0^JS&)EYpb@qEZ>p`@(Ee%ghtRv+l*=? z=v0WbvW)7tdiAN7#kR(Op!d~@B4DWmNxBy$)~0LEfOPlY45n&CIVN6dQ+y2ff&`wR z`dNB&x3uBrZB^Ya|fPG);X_v$F^~5B0XVkEPSvTF|?S^jUNtBpv#q=dm z1^WnbcCYk?6hx{;;1-U556rLPINdA(M%S33IIYbl3K?n%4v?Z4Yxz?g$sGuI$(D@V z63b1!Jm_BMc^d`Jgw6LEA`qN9iPKF&@UF@^XQr0@MVyPzewFR2%`AFFLGS(U)8h!hSXKCGI0N&TjjXAhV3c`lDCWR2PB&SEN8GG zx1^%gZ+ct`8xU6Om}c>tT76P36PkEx(fy^yPp{x$QYED`;~GTRdS4lbAV+VOUNrH| zYjnYgAv-zjP_WDqM%3xkBKb_doZAH0(9Ug3+=DpsZO=5xj`)LQ=tzZxEm~nn86|hu zxGipCq?W{h{{9_L57}k(m*+dl!8qI+%N|n9es|3`u{OefSug$=mNaKQwYy~3xa{@h?>`Tr=%6Q7~X2OPh^PU=!62e6i9tx1G-QNQ?d*@K}lBALm6Zr}w zUGsk3&~=hkOi=kY;n%n_?otOSwOFhykE-oDEZ}<05{6EZqJPRNW`}RklJ5Ns*AzX1 zv12KC^5PuWjIXJZ)x97D$9&0-OJ@y|c5oihD{^$3>;6Qgc^+DaW0DCnoJEf79qzP6 z&r)e4aNYGL``b4#k#NMas1w|kispX*y;d-?L{s-O3cKi9%DL;QEJn}XtAM^7L8b&~ z6o90gBAP#-DpqBP*`=x_sM>aBxwPr81n^N7?V0CnsD z69~^o@_Bw_qn)6+Kpkm!51L=OkbY0yN?n~N&nG?`vlGnqu2*dVPwd5|^93m51Q*&? zMZ~N9Ehtlvcwf@c_T25aK`Cd7Lj8&by;veRUlepw9dt(W^PEa1OZ-Jv{Z}2?@fv*_ zAtrW|V5+yMc0doX6YCF=An)*hg()s(iu%#lBX zE)m`R<$IwRTt^`E0f<{pF`Sqm*As-kJWPAN?b+-o)?xZZ1M*&0W&^{tr(eB|ln(0U zOW0w@c+qqDAs72+3ytnj%TC2d8*4hOGD#b!XWKN5#q<(vQX|6q{l;sbBX@7Q?A8q~ zTo5)~Q>@At_zr;cot;Y7bNitg0hB^Ttj^DBEB=^Q_{ridup;r&nk=)l=nE_@`YR#U zOEh0jNvf6st#Qe&xyjWIhs+(W#_&eXv4P65gcg|F^No$PiOR%&3egi{;}Jdc?xAhq za=}2$IsHhc1xf|af807_@8C2NgK-Rv!&xt{;d_H7ibmNLX%3TO+{z0E7IIq}MglZz zVxmAx&XXmNVRxUZawNHICPqVgZpkUOY2Ltet>u-1lsRN=dP!sUFABlzMn)r%b%wQI z>sJ^cE#u;xM*+;)?&gj#24UXd(xDC=ipLjk0rU(B3GY3QVZTH~TtnM}Qz8voH;Zxy z(qZl8BeY!qNpTiA5|pD%Shfk$dOzP682dDGg-9c)-}FP|4z);-zMqVeXaLnj(hNE4 z#A1PBsS5pG;N}ohUqu9IGUU);rJ~}R*lN0faaqhpxu~haa~he4`wB!Ze6$TmTd`#y zuS;8zxQO~wT~tXj^WMH6WeOaf*hw5w6l-paA`Pfnr$Z*UUEwP0sGv?IkuHVaeP945 z)?9B%Gi;(lq}2S>a60zySWoO#dD3S0&?c2~j{#{+{<#cWKl@`|*LH$VkTIvImEho1Io!zqCu%T`Ub7+INX>v%%CFl)=J*dIR9N zwrhxCWQxz##n6kAVJ8-IUC`mfYRwwd<9<_%&!LAUqg1Ts-`|uaEl5jv<=0izWQkaQPXw2T7yxtO!Bkd@36^W($BI^Anf$I&4)gi1x< zVl1b4t4^KkXw-TweHQ?houb49p>D3gQ~EjafP#Sc>*JKTgPmf|;*Uik^$ZMJI7Fa{ zIIaK0*)G}~sb7!GkDmeTCwZsePky(V6)m5=g7z|ltWGwlHsyMYq~ICa%QCx1PuM7{ zn`=?f+*@O?3EElxWXAaUVPK2W^$Fei?b^N6H0fnjekotQ>qAUIa_kt|2kH@`8{~j# zd@kYRVs_dLq7_1XKR&(pQI|QS>oPe&lqDPSf_pTTx~EWvP3y!Ei*jRqB!#z`Bsf5K z+_=I$`0X1jPJYj7VNRJ(rABYrO+_AGPYX$5qF@uJ%_bx%MkkCEQQf1Hls=G^ z4ekyYh_tP(MS|AAN6{?PognP3!$48vFy}$FP(WJbDk5Cq7CWHmx+^)+;*193)FRsx zF3;OPR?@T{oGkD2(#@vfRvSE1fBI$1ynJxv*t1$0s5#gMmC|ikVXWmTBEH=%=y+kr=I$d^BjV)gF#+vLtN_h3B?m|&!auMzx%cQ48EFNV_5&!_mzJ$wz9&%?3xNyS=(KRrK-gd zYKstLN8e}!9(~agqga-jj^iMj26h}mIvo^^4?d@n#s#ECQZ;not>Aby)Cf^--Sw9| zsEe5CpucH3e&Kx|xII|J%IRTju^MMbnA<2Hn0Uiuveyo^x|VZdNiKM`6gTqsog!pZ zF!lwbUa6;Ynrtfy>yrqv=(mr8>wy|o+?fUVvmc41$}}n|J<$TmPYGou@z$&X@JCI(tPu@Z!-D>da%?_e6?RTM7HJdlCX}MED7+Kf>2*q- z-e*$gA{N5pV!iz z8g4`E<{p+U94@Aa+WeNs4iFaq3b#y{lL+aUPX1 z&hlhW#r*((-mAUn3Sb?txtRt=Z0>#d{lqUGHQKc_doCGNgGh&ty#eW)&!f0(84U9+ zT?j^Y{q8%yxfSjMSzw!kc?Mv2@}Wv^45reinclT(oIv*Mf@_Rq5Aqk{4(Hii1LF{Uja7H1RC5{}A1Cw&kMWjO$c;Mu(Qaqf z&@*|^37&NA0?zwh$+&uf$P_$5YFT}j7tHL-!AR!I5Ej(g3LAs& zrWmg^zL6(7SVu9_8QvXEI3a_GBM&Y3QBbn7))NV}BM^1kU&VU&ThKy!MI56SXHn-6 z{7jkz@tbk_c@EXRJ5zrg=-D^h<^NVa!}Nh?pugzjYKQiG3C%iJ5e=bb1?5sLma2Qd`{pQBA0#x}Ej; z{8uCi%jBK&;j8SQfcx7)^0(4o>8oS@KW&c=6#mz7e?p|Sa$s)7U?>qaR4?5A5gZ&yfy@k$AF(3~-h1NBp|@6m#d){x z3Mqe2kP9#*Z#Fp~nv)qg35D3hV#&H2#(67ybcKm{#7tqbb|c+_Fr-yNv;^;zh9`XV zVCchr;JS=?Z3&{m?w#?|w3GljNcw~bOPG75V!_F%3aU$id$%y|rMp87|XwFM3%Y)~XmN&vC8{SF}xEI?oESO%5qb{W3vEXXv= z!)3NkE7R*BoP4dcr64D$DBq;Ah*kU=I^m5uJQX-?-cH0^9ZrQ=By8>5`9!1Zp1U~r zM$IAKWoccjs@nAWGcc?js<_v?T1b|S(RV&py2};tT?Z&8da)~Lx){|4sn+7oh?zvU zbxw~i!xImu#Tu#Hy#iH7?87g#c*!t*Sk3b2`s?jMs2<_=*!^b@GK)wO3=Z&ks)TdK z=DGaqi&y6-zFfC96guxgas6d9VY#m2fRvA;`LUFoU?6T!gsv}k+i<&7kulo;d1u1R%ASEbufWX2!4^ds`{TN z$4$xHIqZQFy*rbpCWA(b$B8gX7lgca#)hnC$r!#QUUQejK0WW2@C?e-37A95jQyMv z?u;Plw`1{V)`u+22o4UX^}zL4bEN?Jem|x`g5YDkF_ov`J_$J85gi^-E6fz`*=1Q= z*>cIV!a!-| zgm8sajbxRva3JnhxoJ}SYr>9^t#vY4r45#Bv8KLd@1exn6` z(oaC6*915>4Yqa!3Wq3iRD@ ziwQKyWq;gBHTYAg!9g&C9JEgBIRc;1KSVETdSPk<(j*orp^@n4ntHpbmTV;D=EWEYWe7gUi6_&Y(Htq7vx1Z6>V?g4=9Ejps-Ut_ix)cQ)Z) z%%^6F{FEz}y-9b8|M~RhFHvJ=K_zA zuwH)C^0iperh%taNZNP<32D(xMQ9xJ!8iRN?E^bxTU2h+QC{qnMf4}XQ2!wZ4qFj- z8`f+%rd!8J9mM^p2>jClWMs-dtOWhMg(J0?g+s@@8bOTMb|gHAu1uu996-6!?b&bXTy?Ga*nr zfZ1r<;gv3_x1jpTm9@Tet2Ro01)PWEp~r8&zWuAlcbV1unTIlO`H+=TxZ;9Xgq=&@ zJ3k9P=le*NY)y^wUeWf~Ia;NAvKMhaq#%vGLAKYepMnGyei( zHwu%5`_z33i)aR=cD$FS8a0SHiU){X5ZSoT8C5Dw0fEoHG<+KCUhb? z#;z7@zC#^y!6!Q78?0kYbXI>NKhBY$SMBo-&q!!}iWMGC`@9G&HdBlQ@6;#;k3S9W z3Dy?ua=ztWQ6L&j(RF#T(PMF!?l=q`YVPZ^R;{AAWjhFgYqEB$)rIU62Fyk)J{2Ty zto`Dh5`}wu8^J0PHo`~`(#Rx-^8NXx-WzT$--QgRH=)zMFSD{g{K^{U z^_03=2~PS>J|dI6y}$-bm1TEr!F~jIQ^aic>ZBWg)#EBQo@bz~O4?BxQ`;{uG9KR= z2?_U!<0CSGTL^hd=xT*{S|>j0;2TIMMorgB&@MdZ_*GLy@jxyhTej?*R*sB0Mj&*< z(&y+zc}xa!Pwo#HX-;;BMopeH|Bh+0d zf3(l#y#_Ut&2P#`(&}Qu7YNZoTf16i!oq~E;?e4MP(w-sY`#y!4mDcf!~;Eq!1`*C zZl4PU6b?nU+J%<#Ag-^7x}geAQ`?~u#lEz@_jkF#hh|Kl&quty0$IHW?@DGD| z@kZu*1}BhtgrupIWaHAzjFB1JJ)l$aZ*5QR9(rX7nDmBjpv|GVRyNuRLJ8aU4VfH)^TFrzk-#{H=Kd4|}j9sHm>!Pu`8nP=zWvl3 zSiCgN?&I^oRv+f&NybQ;l$8X8rn_SsNG@a3y-_QMvPead5g00<6L%6Q)Y|y^y#baa zr_(2HJc+>?WAHzsYu(o=)&9Vcmy4@)Wx3BWoU>=eAs z*;45SRs2Xq3W%^lL0XBFgskN&aDgNfH;28871NS-QxayCLeS65V@zFcl{)?*$faA$ zAmW;~ldN+czN!FV?m_jrx;5ZR-H+fZ44}LYaHtvDdtk6GCw0&ad(;i>fa9ir&#~eB z`03u@b4lSEu@(9Ikl2_LDOnE{%au(^KvTj(y`4@d##ybC+HhZmHDd3(iqd4`8cDOV z-NkPVqyYPEy_@MX6ct*8=^#BxHG(04RrVV%w){we9f{ubvm=7XPJSIoJIYcJM~xmo zZ-Gyf?yLv$)2#=rPkfBP>1JewRuWK$Ry=mUyEU=siThyV0-VPWXb%9`{#tRG^@NlW zTJb?oX!DgLWycaEtsr}gFn|`Y;oNlRf4EPlRi(Er>*U zTp#<`a(dftb!Eaun5gv3tGRFMZ+(zQke>*k2cLxL?jq*5gx_>!O1r@=Topls!W;Nu zQet>%F@iyNkU-6WB1JLu#;})12L<*_5>IBV1kNCcraaEBzb&Pa_#;<`Vo-|18L5cf zdyJTcjT!X?%J7W&`bOSEtadwRPAkzV^1U5PJU)1Ywvt1CeyLHiJK=Xz z=YC*_e2yJ-6mP(@fA|OiPtw)ycf_&*yz;*O{>MAOPS7wdGnlydhrSU7n2ZG5?&mH! zc~k9=nQd^SXGC#*DM+s-jb5)laTC$*+zf9b60vDG6oSNyn{LeD;KkmH4}tvt6i*@w z;AH`37yhV1wQ?TzCfA155N4sU<-?OXd*&Vdu`=P^*nRVJrJ0Zvh^{4iYZTlWo zK90p2mB%%(`i=hB=d5r?DNxbXFxq}de#?IEpoAXSR%RL<5!~(Gf7-FKJHKy2)8dr4 z$OYr3hda3cO+3cTFO_cY@R$bBgKinih;|U^PIY0|IUpO2(W z%B)gT?Iq2VH#=0C=H+>x0$=7Jkd_K<2m0waJu39+djQ#9QOYINUJyVWA{9?Oo;l5S zhC1mtw;*jvYs!gelrSn2ulsU06Q9x`s#R-f<-v3|WtSww(f7Q}=ex3V@Vw_{=f%p^ z$-%(=N6_9g*nhW^M`)dJzWz)0Mi;PZ+nvu(VEl2%m$sMIRFb&{8>M^jW2$=G3ST?V zy_oB0{_{(aef}+udeGQwQp8!dvzr~cvYfQ4#JmI395q6ZJ!-NTd^CKmQh!5DSfJ?u zg3@9Jv8bO{Z%*?R zSkGp!6GJv*C1CUR;W`IR4Df(TSHC{WfkhjY9PCqs#B<3@DzG`i2Tuk>udUEl~ z?^1I3I&Lj$py{^-+BxOxi@}{@Q{r>MjCB8MwrOErqZZu zqD=&vSI0V;GN-8Q`~e0@#d^>nGuZyDH)n88#mr#|G@Q4ahu*&ExOkV<^KO@%W?vDu zI+^Q|0fnkyBa!>us9kpi=yc5SU z7{@@13Cnf?xVa6W4JLnOEvjCh4Q0%5SkC^|dA&LzohU=L zxz+|9!G___ok_$g8o4S#7(JJ#ebkk8JV-cc)w^y*NP=?$7XBgY76Sgdv9K#>-p#hB zp{&*A2+!~PRJnGvb_k&q@D*eI4$Af*HHQ&&>fXWa%EZLIT?-`BI=&+IaN8SMQiiwS z5>}nGp(kR$CA3}hKJ`(OZSM4xF>rjmG_;fZ_ysW**N?tSinPGD&GhTg>D04o(0faX_5ERCc65?+ zL+MdYHa9ipMFqqFn9@=dOgI;rg630`*ve{`kpjMLbI~Jnr|P}3Zth}gbMgjdxsdYN zxXe5KgcWSg{_kVkq|1+V~9z-_zgBK$I&v-CZYT zdeYmE*fo9O58zW2v3@xCyF+rxw80#dxn$FB5F87*U!Px(!0erzo0qQ6zFjV5I=gvu zaN#>mCRM-xT;s)2Yv<_0=B(n?_5mS>J@N`*h(I?h;mp7*ECNA)J{Q-0dl)YSAZ{T0neXr5P zf0Ao%u`@vrH*Ej?MA4Op15{!?%5i@$f|HvQKbd)o_aqWx(5SbD9nCvkoj<8BIR=oc z{ttlcZ4yl693~J=iiQD zdk)klDiDy4_TQS_#D9S=ZZ9&my=-A4YjdL^p?m zcP{;^W^!eZ>MRiZo<~+?p6uHJD(a&ww}ySKwWWU&T_^qBL92thZmIRp@{$(25bFkY!et`i#v)wNB*ZU0hQn*r zqsR5b90N2JT4>nE&w=mGYe%z=dD4&J;|>{Xx1@{pyEvE(hc3D{#=VTpo}3&EtdbR- zLOw9G^Dcf%Mu&!&Ef{?sS13V0-5jCc_u<~b-q5wjAUCGTR%}0`AErC}rHTC)OcvTF z{M!L>TL_mCNp%mJg;(nmJwRUq(#vVfrgV)2PKqa*4b~G{zw$11_IP+84zzX1GYxD0r6{%wI zkNWJpOu5`cjXQukJVTcD&h^y~!bzM3Ls?CH4u` znZlDP*Y#ECS>uuVnvm8g{h2wkCsUV%#Oqj5QTk0{LjBI<@%2ANDNk0bfZtf@cSKkDn$~lzZ$8quwPLpj<~Ci($9+$lWYnNda*>SHCJ^t^ zsgaoJGK0Dms8xZUrz?`HeH|<5G?NF|I?;Pl`Dz9CI{rkg6_I;!GRD(z-MS#3u%<|F zqb3Wg>RiOh_GR~r7FjfmXoNQXO!n;+RK=itls^J?MrZYil1SLr*g|+*V zi8gwa-HhngRu@u~z4k-4`n!1ZRLh$>R9;`p71kITrq#V$@gbk^W|uu%#?Dh7R4JEX zi(O8<9Rkxl%*yv}$d(^TGK;EgcrhXD{1Fnyf`h*7!c4Gff~0kR@siF(B^_~Q84fAr zpVi0&X8k+1*|Z$M+y44yqWcpmeQ)a zGN5#yqcrdG?dpImna!e_WRS4X{L?EctCqrDl6frj5w5UP7W9w>G`VstXF+hXgW-sDoX9 z`^XQ0??*5HMI=IbrWf{RgWbHvJWvDVqdYdskVeqw_<%(5^M*zpVkabsI=r&Zh3o`72~_|p1LftlbX z9WSH19>Y2qbnrkM>N}e3*G@g@-orDgDNh9j6WUi>7 zMJGxGiatR%dxA~9h^G&g2OJ{urO>e7(`eKl?&b2u^ zfbo~5^g}B$x^Eg9nnxU6Okb2|(l7;Qt}CuB880NZ7X(3ejvwDx0f;6s8^yGM^Kurg z%q+e$brk1(kiKsD`GQS{i>THQhhd`%bt44`-E1Rvh^=YEnJF$qe%a06HFP1)+_}_# z(>N0@tbECj#|N}llYe}toQJC3{$uh^>M^Ni`t{=G{&n8?w^6yWt;7FvFB7BXr9qjH z`X}3}Hw~gRrUX3i5P3sP1;Hn0&x%WyN##s1Mcyt7&9f`cMN>w{+8=+jBacINBDu9p#g=G=;|srt0p%q|uXK7JyqmHX~(# ze!zdaSRt>?P%IwlPN0KtYgG6h#tT+TofV7ewat2C6VKP!YmICyb?Ycms|z$Qt~vWB&p(wH`bNj;=~rC^`?Y@mJyHI3?d;6IX0`vO$&7?m zn=hC_P?g{aw|YxR66^P1g@iD2rP+X_@cKjnixF9X3#47$63%K&KKkXxbto<5Jt^>L zlxgSY2d_)_3^yA%an}?lW(+kOlS)~=rvh&=M!5Zia@>K8r2`!tyS%@jX*LwkHzW3mq!C}LDEYy+Ew8co}*KT6Het=9zI*U{&w8>j)naDF2{w9>TD7+dsdxJT7uCl;4SqL-gCRNS?31RKwa z6ZwsEa6R(WiK>4Wh)k#t4jE^2wnAh$F@(~3y{3l9S$5?0M&Xm z=FJJ5YuYOqT=`tjn3JP&R*}N%pKAy;O>yrXI|JQwb1CjrJNSJ_T5wLmz%$?BY!Qnh z7rd>s=F!hq65qGDi2J_O>Kz!3)c^@)k5jNet!j(twRfEHnH~Kh^BHz`nBXF#@hnGg z+wjNWNUZ6F%^AM+;(hA9X7PP}|J%EuJ!q!`CBH5L>KnrHT}C>l%ciRhORI8q=Z4ER zjQWAHr_{t}P^VT+q+XUXJzPywSe)o)S9@0fZ@P3_ocy#ySCz>pFq#))|3QJC$$zEU zX(SzK?7m)Jw7+JpzgBv7RtAn{|AUkPDC$`De5I|%sZYB{;v^~aaJZbO!l(`#|CSEG zv2)NoD`^SG!N;pj9L#wD5(mL!I!-Rur(qTpinR+GN{fl-Z|w0hjxdsWFIGQL+Z3ki zSkK|8kryd`CZf={&^$?g*2YO)t@SxO!`2kx^*C@m%3ysaut(u)Tt8xh z9Oml^)LE*zIt8RS;rvl4>ceVC1LppE^!9GZak+Yea>B`*{so*FCu8><3YTvLfJoD- z@Q%qzgZ-if#tc8BB)dh_Wa*`2Dbja`oYy7I=@C5V)|`_+R~TR;^5)Izn^+s3!pDhv zkHQy)xBtQxFC(|U+**Ku2EWJ#|NR&s|H}nTMNUP*!Q2|~zn-0n|1j9Szq0?<^12I4G@uE z4=nVADzppUIX$=j@BZ)Y+W9=B1|wm9+R)?ovv(d`iah=yU3n15-(UA0yFYZ#Cj-gt zH3R~ut!x5kxl3k3%2T)=N|!ov#{{P>cGs3XhG93mV&qAe&h}tb3F`yf#+UuKhy^h# zq?X*!vu&RlvVA|dt=359dwsoHLyer63J*}!XKI7ke!}~Nkxh-<9I+QBcN!AMVc!o;b44s5 z%s=myarSVDBgD#lL*R!~MV)2e&?D^6d;-U;A8{60QE)RFGzH#B?e06&UjxqI%=YES zvdx;*llnHY!ygwUBZDrFqTou~(KHgGp(!A)WU7_cBiD?n|1xEt(tsz&g>c*0Tb)-B zm_WrS7;^}&J;J(=EaIxoU|xX=-m2o)UZUX61cKo#pc*GG5_aj{$EqN%Z$q>&a6dtv zHoH85k~Zt!^xLZ`qq};35`9T6ur>DtnY|M*?kaIL)IXTqIJ#wvf4h#)(^#MXRBlX_ z`?8`t{ILPi>DSSlx3h@&Hmm4t{MsmIQ@?l_AI&kX`D~A}RL1gNnCbtGx{F+o_kchiMC=8U0TZS7h zl8Oq5J!Qxsc*`|86RC@_EiCx;WqF1Q8a<(CQY|-kW~wtu9i|2$7OA48e`-7@^kr?Y zpwE=8$*h!V%#RsQ4)%QWYqQf5u`YI@yrg~_OP(D6Xu&^=j$wB!!2j z@U5g62)+D?E3k$$slpsV+b-5ctC#lbtc6(K{ubPWlK#b5UwpS|S8;#4QsLUZ`3eqfAl5(K{3TrCt#7iOL| z*L1L2)A_FJ$};6JI8O*0 zf>|VnDv$0j^tHvQ;XWYnN%N_jxa?Uwh3;vHxq;vegX(Ff!{SA>w4PC^4!Iu*2-VhMn0j1LM|`dbIK`vxww5*< zIbu%J$r5jX@=rp;2#3sm91!!gBJ2b)jBxh1sz}Yzk@{*T{h2-%>8n9>wSmfUvuevi zJVOGR!?qB^>_~7hi0eKZZJllv6F8^zDPUN5HIT6sB*Fn(|DTB<591NQ`eQHnudS3O z4(}SO?S8u3dLG~R_cPdQ*3Bz{Y?)WiQ0NI|*W95>#`&821l{hYXd~O)+_f$qYyynI zHO$ENlFV{o`8v>Z;7j^aeLl;|FR1rTKnI;a>B=h7(aGdwZVyPp(to2W_u|jQME-m@ zs_Qe|rT2EH>p=ZMpeC4k^$Isul(=VOd}yPAtxjMV@R5AdUSkDT9#f)hGv?EUaIk6e`jB6 zoM!xo9XQHIH_Uvyb~<^M;hj{h5~*W|O(SF;w# z^sk}*w|j%LwX&tVkd>{G<-cnRi0p>xVT22sq`Sj&SQ7{%&g=`{8vnh;yI=)-dU7=5 z8**tw*A{{#gwlCA8B#fzL>RN=3)&JAxkT04F)bE-e6S20$l68KB>lHb9y5zIT-(byRDFd zo3|l$`10>o@Xe6*Mt?oq;9sAQ@atb2fD?oDKN7MI1}07njt)i)qHcCpwvOii(>pA{ zvi#C2xpD;A<41ZY?T<3#HPg6K>MAj+@8UwEspbnZRG{UYCYG+u&$nOvc#Lh&6B(&T zwGz-j-Wc5NNRVxB54TlP%8#s@2y@ctFB>Q++rQg;+T+l&9VsR98APmc+%#@sDJyk* zwNzzS2EBIH-t3f*Bt_%o+*s2)T#lo?ZLS=i-z8@_EvFsgrx+BM@Sv;qPF;=$iJpY>k+ZCz@JZ6-%GI$6CM(U&6-&fLFgLqrG8D-OFH)Y(fvvQXnu&3Ka!^pys#IHTCtqBb3))#s zaW3bvJY8~iOyg(V`5f&*KeE}_WV~3CjRcAAqUAAn#i#E${?bkFshfp7JH*UZ6qb)L zD>Q~&PYS}+H)j;aV4!z0ZsKr1kHkzPzy~+b6At>7|BV^MIAorjrRl!+kc`XWtskw! zV>nw8HbaLH^>zl`fX}pGbhq3%wOmn(F30tHk0YTN{KeAiky=-I~f%G6cdti2<;)5~?QPtx#u2`9B>H_=WJb8TjNZ6B7$8Io~1qo8Y#-n5n_vE@ZIn0!8!M_vYye z?o$wArPPV22kcV7MFD_p}iBuWrY9wzkUWBdLhV-Q5;yGY#=vIx)@P2F3QNN0IBrJy*YT#9(Xgd15z2NGi%|vwVi5VKbHAUo zuIVe&tcG)+b6+39%1^Nb50GT=&CCS~md;92!`#s>6arVPfp>*FQt*;boZScUP(FUK zMo4q<dd(otHBA8wEOO`s2nAN?=##cTs+?}XKSzwOcTlf^Shcua^QrM&7 ztoBv=c%4;K4$8g{csy8G#u@u5S!A68eCw)gN*zWQnynw@t2!oDxp#lP*Z%PV{->W$wSusujM ze$^k()Z-|Cfg4RXa%nJAa>>;kv|V1K9p?>K!$Z-A{v3?HG{JCtqsT;2LB<#h4~wA6 ztj^Baot~wT&qBKumBoJXv$g-FMoW1hfYYumM;;LO7U2`AU7Cw9K_7KFVB8(ns<~SJ zWYbUjr_GfD;0W@;(`MFW`F}Wjr|3-Au35NabZn>7v2EM7t&VNmwr$(CZQHhX)>`}9 z<3D)UJI4PV=PaY{>#12)vnCt#=t7by`utD1p1pgHP~i4~+d_OG+MUSfvSo=Rdy(DeDlEoS0 zdhOac~P>aS+)G2|CQU^&Lh?cltZFelrP%}@C06EYv? zgBN77#a6w3_#0glp<}P{3b=GZ8u3X3uX6#%7$MarjO8POlI@KBA!ewidKC=+{ z6bX39)(O2nyJX=awS*BSTeS1pIxVfj{NG5B;gWj;{0TT$J$zd`jU*}-ei`xgW6-tlw7*FUtX zSAwFn(EO{~hR4i``}&Wvh!GsHUS$y0HKoCy2&;i`)Oaq}fKdbu_UrRMpR&&ZZ&a*d zS|vBWm?a>Nw7qL-IblL8ZgJaAbsboN3t)thFO`v$q4%LvOaRhKvNV4(5Z^8xa97&K zP)UKUr`n3PXWFpg5?tV5yrx0qJpJxOH5_dzwK%av`Y9#}IdE}o0_JB46xd80yjRh$ z)D@zikuDrmC|Z(>wGAmfRuz^auOJB|!egJyPv{%PFgFoI9wBh;pR*AB%B~8QBVN%q zr-Lb6AJKQ}C%alXQ2KnFw*o?n(cHnCtosEw(1^V2T(N+YoSD1d_A{m+Ob1ps;rpJ{GEh{6-&r@feVQ0NGQh2q==zHu-RYIv}>ttwynzm-SF2Y z;F<=8%B4R_{Q0JIt~C=2B1u}(R{<8~0k-xEaCBlR?#!17WYBmRvfeGc9D{uXN=0V^mef zn$^!9yJLd4Bvkp(L^r{9v;=81%?Pg&C(fY*e>A&Q4-FTaaK|<_B%5xn%dC#D`!oF} zvxHzavB{C^b28EMvlG*s>C>W-zPPJdlDH81F+SHCC#(iWZE@jmQ7QCe&joEjl==cT z5WN%q$lw+$a3XzOvsg&SY#+hli7{rPiWKklQBu_ZhuD&lOXVPv5#nIw4eHp&9w}5~ z;pg ze}=s(o(A;|4!+OkGqvO_ZDMqh#N9ZjYQqdk{B*0EN!G;7kM0{!^N347frk%uHT9_%ioidZlNP#}o}fi(NIQVq!HcQs?3&48UExNI#K zD)1SokyDuj^lDo~T!CIkAQ+z~>0cv}&yq>Oxg@cu3Rmi6I-GGnBL!PuSH$`tcTPeI zklWVOM(G?_{UDE+jh*FtQ;wbGchkOQFk^)< z0ktvToe{r~3$!nziQ@`m<*bza*2JtbGDoPF~GxUX}-4_p%uG%Nx*J$4VHo@fS} zGfL`Zt)SoFkZQT+l(omQ3OFRMU00E=F$k1kE1|i_R}=VGPQq0sPQs|+{SvKZG)9@( zKK6(^*qxpauZqoTc6cLO_nEDDPSUf#bbMbBg*=F0FyCd-XxSSi_o(5;Ft617Ys%?c zRGMe{w!(&?_Z-MJxR>YB<#)=gmrgh!Id=saM2C%A_2h{R(Wnt__a4e7)%>3n=we04 zc*(%^F=9%9sl(FL=~&x1IMdv@v89cNlCmZX_rYy%Wp2G#^7caNgww~$Mh0$JJtey| zB#oYFF||GIJaH@?Y}jxj2D3gnvLYxCtI!`*qJ>PZ!-=FvQBlcDNwjssTEfhu>?ZMr z^lQZsRj}bn<&1QRIU+tL&S^T0`LwPXbbldDlhk0S-UiJ)%>M=e695j|F_Gq9wmZ*B z@dyifi{?zfe!*gDW5vLj6TGk2YV=14D3gf<#;WM%utI_Qm0UFCTbY!T#Gu*RzzU&{ z+t)J2C9J{06MJV@^2|wm)J=Q8by2^{V(e3o#zSWU`?S^|osC4fDk5~@+4e}FL18h8 zjQs$1@!C~X)*y&IlKo*cHaTP+qc<`THy|(q#O|ltmLcC`A^Qvc?yFJrZ7z0I&fDO= zgYb*KQ$@hM9~A`=Jqp;}r)0f0gtWsL1v3=O1~%Jg2yN<(vMEG<%|XFnLgLGB1M0`5 zW{U_$;19cfIth)t*DLspVAQ4jZ9@jqQ_mEFc6uU^sj2+NqB2%Qy0 z_Yvu5qrxZW3S#j4WLuijFRn;)|TKsMu$1qxdNky2$LlQ&C`J|k3a=2 zV{Ater2R+XRtP7Bce}j=*BpBw+_m|LT+<}oce%_0U8eZ62*kQbB7Zk>#(JTzteLQj zpJtCr12&o2c|s1Q^n=HecFmF)rfmcP;D}^l@j8u*zW5wow5eCXFjgKB)p+@M#6Tns z$)6v(XvmP>_`aw*ySTSzb?y`;1GO%kdfn2~ye9(*Hc74N=$j0xMPh1tbnrfPPg_9Y zGo4nlVSL|^v#fp@tTvsb+F-Nri)adjwx~bB0KP-2<(b+A@dls(?1?=H=j02hG1!A> zr{`cK%C8J)@0oS$i}kT_7+u8jq%mI@sTV*N+;e=|5Q0}w~ z9!^td0kwwIMylO!;oV_fu|tIZtXeBp6bUPM8s?y+_AnCg8rYa0?HwKfo2RmD!tqvx z`o-Y8??6-H0A_~bf}f5CjvA1n{aSu`YkQh3 z{oej-UPaf|bs#^6`fRhdnmwca8A%1JrxM1F8&*7B?pjePFm5bcyjgFa8w_qdtb->J z;E+)&uUO%f#D;oTlyEJ@?^UytglUm9YbTp_oW1j>pCpOfr0~!^efvt6!wNTPxH+eA zLWg|8#QC~dtG4J~qL^8MU6?A!Pv|}|8UvQ*@)8j=3fGpcBWJ*5zUDtHv}vDV%yQcc)h@HEBG-C%MDdIo z3`Rbv?4`ddclyx~KgVRzs+X)r5C!H!%~i78A{ z`uMIo3D~XW?Ph--&OGXR1YjLkMO&QoMJRriczGd2iCKxd8b{%bX{lx_NL9}j3DhQx z$)8l-Jk66_vf@K7pCOJYB9h|t3f{`F$7P5)UrYf%B-7fdZt}gpD_#k%PBpu-&kP$< zk0hnJhWNhPqC$FeCmv-dD)EApBxI|pfjAtO?=z0qr!Do!*u~{!D+&fRiS_j}mgz+* zB}9VCD+NG$k!AQADbnEO$c_?N{d#=&qQ`IfeGf(o073KI3oIiD>DQ3kwqV;}kR(Rtw<*eBt%Ja=4b8D62=Irw z!d?C)|B^nbf84b**i_R3Z3wJj_+h+0MGodbE+N^gJqc?J(*J`!gEw98 z%$^OGB`F?_2;{Xxjf!jlL+^*Fz9CXeHi>cTE?13^bR#!zaT$TA6TKFwXR2Bcc}sVF z(%oGHFtZ2peOs*Whc6bbt_%cVe1uy#q)2)$9+~)>E9#DezC4S7#w{Ya)rwlnEeb6F zkxS+>6F&qbv;Wey63d+AYqJH4IkJkt%%Rhj*Cj7w?7^JE#=3qZ&T*KP(bWEYfP$$1 zl|plDYK!hFjN8lR7;78Nl4HGAQ#n`9Z=6{Q3aTD|7#H)Y7c>hPEU5KU?qGLs?9*To zI`Po~w#+OdEVS*3;OO-svRVa>K zCJNBJwbk1aK=w_kbg0yGJog{QQ9mciyg~!9Zibua@uynxr1#OLS|^kih)yTE%d&2< zPP!J@*~H?3WP5C)ndR0sOFkE&HM!_O=I?iJ9^hF0GanEn-ZxNvp9i{UH`YX*{PcCp zOy2EopKGp?^xC2G0Qt+&F}$E29T#Y4Ji=Fu1aXt#=wjc6PgzDOTR#5jko7=sd;ISD z|3Uv>-CT_SNQi|UO#dcd9g1dFb2LaF?P4FWpZ*9WcvX%SaB;7oCFIjX+v*1cS{T>o zqc&?0{a!;gYYY>$TySYfBa;uT%tMbY%sVsnEi1CW#-&*>~w^ z{21g9EBEs6*ZV1PFpbL+2}qIHL;%Udql4x5Ne9?9RuBea33qV=cD3IaS7t1qs3(J}*^JssktJ z2O|s!1Px7qC9o=Q^@`MOO*#`rbg2&Sy?Gcr43P9!-BA4_)}Wn9u6D;!C9EcIdvoeY zWgfOhbnYoqU*f?UzS$5xXYuMBtvA1w{5KCeYzJe@q4C~Ud)NgG`=B>(_sqlXv7y3o zrp)smHDLL9_1Rw_k-`?xmEIP|ch&4|pA6}dPGM{#z(ce|z>tFrLS?pjDapt)Dm)lE zAWA>PL7R_7#>}Re>FiOTQ39-bdEN8tG!y_vq*Cr{DWa+ZLyj ze;rR2uxqV0uGSjrM$V{MyQ~OB5n_k`M&C_?DO8p+(MwxQsGcWcyiq4O++!6mw>UN>cj69VhXo&49A;yaFiQa>?h=rbH$#%k_`m7}pA082XK9 z7|8$joc?Eb>KoB~4)*_(Y@bk6|0|~ZcTndcN31a#At+GP-pxeV#k3%l*3?Sz7m@Q% z$9)zVg`2G-bv^_tJ?S*yo|nm*kBln~k-nEJ8X@mrmz6ZUb|_TMX*Dm^bC>luWCh_s zqk7CM@1clEg~7pDH*rU#K@3@h&M=3f$%Z=VdvED>Vn1B>f(0M}t}-0S4V|%VfoXPh z{O~)mn7RpjZ(_+6vPgQGP*ZgyNlmxc@SmL~X+n7Y>lh%KUMp&#g^_iHOnv!!;{EG@ zGirE{jddyb>-R&>qFrEU$WxUK{1I2a;Io?m;igv30A6aU&fQ7#v@@gjiGU zkTl&3R3F9`EE0rda&}6Qys2+*bsIIW# z5?MRR(vrkdu25N~uj?a73YzUhsX}6KcSs3y7jYBiDL+rlw56=F{;t_R8Vp9othC(4 z8mmf+eI9KzBj%p=ul?-3UEjWt^pU6#ACPeDR*soqUyzrfBd^`iaZajMP@n926s1EI(1*dauIZ@GRe$A4XlL{6#f(lpM?rhBg|%cbU1P)HU{KiMQjf< z0&LeI3XbkSg8hp+WFNtNW`1M6_`lW~|7SVl8|(ZghIap)_H0ntvP%2Tq)8Qg!WMDy z@|*tR7Ky(wTu>7{eVn%R^8N{PBV=wMF>8MM)maDapKmaVL*#?_*4cK|M(@NL;uRYY zSTw3lFQqSW45+4vD-)HzH#lod4ei^jX%eMAMyMko{zN6fJ) zHvsUpltlX6XFF6!1EPzX+O@?1Gna${#ht$e!4}LgQ{Hqvwa$f^4sopu4_*0LDUi5^ zavL8id|0cXcJZj**D@H2gM|ZJ6Th+On@+Lc>*`!ESkV?o3S1N|@)O3#Gy!LZgDQNp9!mK`$6aum@{t<>J`|vye39X}`lko~ zm|r;C47||dl{Pm6W*s_w9b?^BdbKlVg(ASdeqcSYr#lGdkoEp;RVAU*F$|*#e8UKt ztW;LG!FkfZSByBM?*!$3(&S0PfdjL^iczC)+^=LqkO&cWtAjDQwQ^?5ZSE{hvW`Aw z$7>0PVU^Mi7qE%luctc0_k){@J?{H#~eF zBPZQuKz<1lp)}4&q*&2LqBt<;PIOMJm^M2X`H1sr`l;{+X7h{K;=GM)0a&pE5~!aE zR_oneuVc9HldgJ%BM`lZ@($jNYKd2G&AOCF3WQ!NS#hY$gG%s|G1^iMb;RWq$G{J@ zC1$L?g8az^3$@y{W|)g3j*eQ=Guq3dm5gD3EXs^--1WT(?23w0thjcX%y|kU%f>aY z9j2rVQRiE~B2U7Lz&#|%`W6CD7H7qrocv`X35+2jLVo&~9aotk zy&d^?Pmqirn+g`KMUJdTU45ktaY@Pcc2)}UR(G_K6Ghdd!N6)(0Z_g!7GpHtYTlh9Xt-4fYsTE_5GE?`U%E zcq}OxS0{?k0ptTbvO_wAmast{lKZ}`Qa}PM%h%IK@QPZqxt*_lxqdw9nG=^cK(I)X zlWa~zTbM#O;Y~rYCx#Hi7|Cb3&~d-A*H?uH0psI(isP#qp5uJk0769B8cdf(u9=Ol zF>sH4XCQS=22rp@S>V=B^yGi-fiw%^4A38TT>-7-TS@6|?vF~6N?n||**t4x$?n_& zfZxp9kJt!lllkkD1E;EXfH9xI^*a3#b9^_{Nb9@WE-azLOE6Ex`q_!QQjCeF878;R+NHVy;1Tp(s7-$z0|=RCORZ@-FrAlAS(b2 zOmp;T1j^N(8Zk%adx2&FyYM`sT5mr`X}eRgU`u~UY_QR81UXEdS^Ma85#w)-^|+T& zyM~I0X(?@ilt;F0t*Ag{T+1Nbs`+dOJ=CPVHCSy+YT_m}8K2uwR>E;-9WqlWX8m+Q zhTahJN3}4E(t%q7BAW2zI_7fE7ThX-+$z`u4Y2ZFLqAvd8EDsxIH|AVB|9z1%l(|q zLwnxR{X6_G_js3{=_RJN_lGnBng}=66m})ShgKp|btVr;lILW86i1~c+e-AqW|0v7 z6z{PTX@N0AI%9__wJ;%wVZcFLUtg^s5Py`JunJHmw>x`{BK(uACoSO`2c{9%__EljsoW<>tLxye{iuTOQBj8;eAO+e*Vi~>x?XH642iJeIimV&tek&MAj zXr>%}Omir)C!DvoXd-)0BXr%^FB90Le)$4&cw9FI(^g5y_i8vGQQ{vO0JM0rvN@zS zh+v$XK}qk4Km<>-)odJ?(Jnin7q0MQsvr+%D9V-+_u07x%CM|zWQTBE z>4cwJ-(kd2!yV0YN}4=z)$N`2$IBB&mF#nfyVMgWKv^N>o|j-3Z&69rn|b_qZHw?NbJ6ftV8SG zt6%!*H}s7)wX%kZv(8ai70kxnUgHU<)vxDQn+Bkh2c`2JeJnyW0C+;^cg9ev#Z_p@ ztAq~RbbjG3^B@p!Z-1w@hd9$i@4iJQk?;KOzo#&M|J$7Z*Keq;mH9trONOGZ*|)~@ zkFBv=iDM?qt4Lq5GbgmpG+SJ_=*_m(***x@*WeiJ>dP%?wk@yB00Z{a=fg2 zHsepgI`n-}w*3}?yNS+Ch>gYbffv)eID#5JR>9BFC3#AsIC%+T;*bMnT>0QjjF1@e z{e&ywvCyf~$aN;L_MsP9MRT+?g;v}5D zX(Y#o`A!7Sed6MUisXgwvKuS=X@u~B;l>7AJi*w65r^Vd+t%`sZZ=;RJ341xsjU4Z z(q!C|Q5!R9D2j_`y9BK1;d_|D=cT1 zF&t8(yuFkY2xR-Z+CLG_!9Gw(D&KpcE1&v+GG~tq?USpjs>0r9d)kr@`0}d1Fx_-04)^9ZbZ;<>~6!m{@I;g@PhLQa0GISS$dhXt-HN@ ze`1OPhG>Fb=WC2D1wGmJ)#2h3r=wkmbjR=oq(DR1G)HvK;vk z>ti?QcT8e4ollAQt%i5@K~~G=$>w=hBGFxRYNLj}TIee7#kYtoE{yvaT!C!U8XJ@x&GCZUaa0-RWEH5_;9iK+hjF)odZ7SlGJ6@_2v@}!asHz+Nz!}n{qQaFq5OJ0ZPzP2ky}!Xr$nB!x@yAUq{8TyanoHz&%57wkWE|?jrC={x0t7${2i6AlL~VO5`FbN z3FCbS-twiC=49o+%yOYn(~{s{e_*RxZ%!`J4Z8AGQirSmjiwT&s@A_eOgjy>)@doLcbN&cFF9%xruWNDK&0$aB3 zx1u!Hg%5a%X{aC}SQ!#rvNT{vgfOh${-d8WLRDz2TwPbOFkzlyk%2TWgQV7$I?1fW zq|^W}R$ZPYlfB~TM{CeoFqyiB0iz$J4}^zY9NS6WkJPi=sN8N`4VW_9x3?W3vUD89 zJsVE_E)q8Wy`RHY(@am&bX@#;n&@^^A)6)ZN??3@Bx9FlB0b(AXHL!TKLtDD?&@`p zY&4nCk0~5d&M=GK#cWG*TaNa67$p)jiV%G@aiyaxR!16HGa_s3psG}IQQ@H4oWK7S zxpwod6S<)6*%X?`7#)^*7nu->2aGLo5IZs?jqm*Ibl@mcdgxTP(+8 z3QJHSmY>P|_+yR2%&a4@Q1R2v*vW#%Qj1f8Z!k0C<$L?`kfKHZCvXUxhD}I_o*gy{ z89Fu&7S6R|CMh)ca%up_PwEyP@~JWP9z+pfa>!?e+Zw*Y8@ECM$Y=RHi3;aL5&?)V zSXj1}Q3fK6xj+tM$bwDJsK0!_~aQHDcn@&v+$yBLgrLYLn}JN zhLPhxX^SAI7eoH!+}7=EcM>lefArzvc)j*Fxw>_LH!5AKbl8_rnVHRLCyS{HBqCNJ z(3g3jUXhkah$QH@o-cijr8$m$t>D|>Kn6+iZd$I&r+5?j=3zAUMTr_l`{PmB3`|eO z*OTit}7me%rYMDJLLea*nuL4SMaMvhECID3dEYKURr5cLt<~g`adc z{jv)2aAzYdL>j37ggO`JKG#;OD+}w!{P?0kPhGoDE;?g6n!8W2lUaT&QLo`-j*moF z&pYWeYwT_9$W`(hq<%Cm%9BYF7p%mJVSc*d0jKR3s(+G5Rs6-#~R`az*rq>y@ ztXB)+i8+$fR0K7kAVOV)e!yGqErzzCmkLz@@U>+J)Qa`SqqgWgtud+;^&8Gy$mC&i zfU&!yKh`9)rTPAW!8u8H%&w5~n%%Oz0doY1EET|Q;WE*}XME|BHgT^fv#Dn%QVuW@ zYwNE!($~Inh{uUyQ#6-XT>yB>?&NpXaZ1w+pI|`CgP2q$y$9KN`)No8-!=0gq$>f! z6HuZ~P)T8z8fs-<7N?;&vDu!yCO_ksZ1fu=Gb3YQrh5m~Fp|uC+A+R~{3;&@{`KSU z2O;*O6Zh1n(U^T)t!-|ri1&HjG?QuzUC+1=f z`q+IP#{zB?ReM^a!GWdJaXZ3*ZeI^RNRoJ2MpX_N;fyUIh@j2@v zK_=OVmaNj_Ay%07hJaN16JWOq()Cs(NNml%zny%z8cBa&kcMIo*(V}J<9)8vsqc;D zIQ${3&^3N=y48Rv5cBhxPbfKX1qfM)+XZU(Lv9Z^7#Q%ziGBowxyG2(ZTYPB-c>^j zX-%H`s^SwNGV{z{Q&r9*8@Vo7fo7+B3oiGqV9<|hhsPf5zY>Tb7M-q?=&$?6%_4u; zd1+$8?=6!XXDA2z$Dbb=l=$SsANz1P7C$?&VLHG=mwiV=gw!G*^x==Ywvc*EQ(bY$ zk44Rvf18}4`x2i|XMh;Vr5GN^{6jPhZ>! zL(^i1VcHsIa*AG*&B@*z>@JunQwwxu8n&AF^Y;l`Yq&gT{*8c}u6BjL_Oc}ZYewo{ zS-YTtslB|Z@jpF14T=_jMWjB{f4sn^2Nl|0kRbu?EusKX%FhFNcpwG9QWwyHw@6zNQLn@1*ks^mon#2of zewx0E8I8CDXLO)W?txjM>H1fH)ixyYH5$t%+ey-chS0Gs8T0xunAemm=w$r+gP)_^ zQJv8BHpInCylrj8siJmKL(^cJ3E5oDP-?-MzCSW^#YCPmCtNnJ1PKuh-6TA5KcN{# z^g0mCp{3uw{b%Am+l}a{cBSP`3_6=tKOf9#I9NSAA9oMRmX1)lJ6hgf{xEpHja7Ah zd!j7%z3mw9lZrbb-HQ4efD(9b6dVYU-lhUNoOu*UxDr)N|MQl{2adH zKDdLph52go_XSq+pb{TF1c4>cGEn}FXv;e*iA3jf@t(a5JCTEkuzQzL#5A(2E&sW@1LN5Sv`CF`uc6(&wwAqe;a%Lm4XS{ z+FIGl>)RR{{_`4S#QeQ@Ew~gh@0Dyw79dj;g=82a^AwLu^H`70$TDM)Du?%py%dr? zT^Zeura5-BIuya=*1>O0a)QaqP~H^VXdY_A5SiL%CI~7~u!gb-=BiieqK`K7eHMca za~JOgO*k*GWX`u5o~Q{3ucW#;=4~!VmqEdvQT3PbuFVZWHdoan<(d8#avb6@Lm6-& zskn~%0^4{U4oz(A>b<+k#3}-tixB<|13*{rW=wf}pT_SCG0|-)!!Y+wjf%-Uwedn# zrYxi`>nNOn@J25QtXm6@LH08{oZy|CBuQ)7&s5k>P0BltsrlV39jmLq@OQp(VKO{^nW-U^zaq0wgi31ZS7aJGCn3yS$7;66dJB3&- z8P$!0op=e5LfMd2sT23I8< z1}KrIY^gnfxIywybB<=3RfZ5whNIMiziP#PfDe-3aC9>i_SMO*$8>YIuy_2%jC0(+ zka*v{1|iZfC)sp*$|0k&K5bJR7avIfRa`Z6hCfJe4WEQQL)AvEnhhjpedkTzIm>aJ zg+gv~S`?;Gd(3RO!tRT7P(YR-bp$}zXLkP5vwG648!U`>#}t@$V5)qToXoCU3*Vxu zL!EwOj)~Yy+OKKd3PjyZf>J1G^)zESZT@U%RbJrm_{FzAKm(CaW|Ks_X@ zKkmm|h5P&T=X$L%R%2>oe&e3kPR&8$^{>SDOzIo77`8E$kvs3#!**rB(g7_lPZ`8A z91MMCa}Bqg74-`JA{e$>jI+s+Hd8IK2m2z$92dvkto{vm3_vZddX8pL@XmV z%Yev#3LVG~6h1S)ao+vE6IA}nVoN*zUw17*Va)Pd8szxC$)JwkoEaNSDHqN`A6jv1o^zerCTydKmLt%(iHy6X1i+h{aCB(At1HxEu04MMh8oH z#&=du^oL7WA;@So*HuH=W%L)ZRs!Z#^}NdbJJHH$bredi^?g2?h&85? zRk0oNXK?g%Ubd9`MMy(c7dkIrSehw4w5{y27p15?X64~ctsOlfWXl3&aLoCM%3unW z>y7;o{-gXEYZr*tZ;f2Hf4NiZ9!f4Gvp_aJ`_KszM1!v%QJjRUS<;n> z9V*?btPVSfYsixko@T}KUZ)Kp;RYR~0;LvZ40cjB;u(S$Mw!5%R=sD~AtoMgn4Tnr z{Yt|hT{U~P=nXmPraS0B(D&~^4#PBd-%GwATh>&ay({>{JlODO(J31{fV)|~l; zz#Vd>2t)ma1~4oNwti?E04MN%YN{`2s)MV88b|`l5ZM+wzZX7qZ+2d%%FUpz_`v0n z;S949cLYAj+{53Y2PN%#Nu6)JYJ4vh{`=efuK^!XOXF|E{vBLvQ2pK}WI_3A``#vO z1~B@y5cy}sn90J2!7=WKR9sEQq#kM*PmD>L{P#NHs_EhL<(;!=yaDTwBY<#B|B%z& z&`?nWuKOJ-+CVZZIl`XztKDHf1B>U~>x5aY8gYEi)_cX3Ia)|MqS!|et?0^4WKZkU zcfo#~B3JBm0OH11V{p1bg#NP=ljFumU#5(4M@yK9x9_mDynQ1c>P@e)ynfvYA*TS09NX7tk#Pl%8wPH6(oVu&~4o7|rV@TEn@%J{>bChvi+S#Fy0~5-(;1wlbe!b4KQyJ^ z2#1(^AfFe=To3vZmtlXDkwE}!43?&R`-d0`oK+yVY^_Qy+CBjOlBoxZ*5W!Hn0m{k zdRA+r^(}cLK}j8?4w2Ug$h+a>CJ}*v0?QMWvxWt2#59_DFQDWp>JmyhXzhvypoj2EaUK7g1`BSKta<{@)~9Dtr*0aD0}N9 zApMAfL<6M22V~5CelZs@?O5&4V^E$-!l{TF{XP$vNOWCT*I`lGwep0zeQ}YW16kCF z#_$n(UsSz`&TN=lo)}S`PzkAbgM2Ic8fQ=-HGkgyOhmLIk2;El}9n~QR{rU5O>w@ zT!ZRZ01rE|;+2q$aB^Q-qR`ZF(@{h$I*B4#PQ&~`$HNIYKI*Wxt%RPJKP)+?JW+6) zn~U-09etre)>6Eyn}*HM=~zUjDo2iF#(%lJS7k3n=R2fg7VkGY8jT|WRTt{h z4gD&K@B}o){lPsZZhhqcG;DE#TueCrK{9ZNAZNYT>adI7$Y3+_;D}&b%smxy;2T64 z;x~@8H(i@cptUTwv)g%#(x7QI?Q{Y7*>cefEmJWD5LlDZ+NEs)I1cMiP z#LPd&v@yMD`eQ$*ojs?_-}5048byYr(6ogU?`eS}2QZmUPdfe;!U{J}h@ZpMg-=JB zk5ya1LfUq_Ra}!RmqI93?E;2w3d7bx48m&0n_78*w{H82HRmS=cp__?u-r;Q^r>T7 zF?89B$fx;)HsLUpC@xpKM*NaTVsR98Qoogx2pM?0o3~mJDu|}$*1i}L5I)KJ-mH5D zx(EFqKzU4;`A~B_8C;nnw0o*Q#ra5KM4)3-dPXjes+;(OPtbb>pxKY=m%d6f@QR3L zvmAFGhG)NQ!-TD9A zU{+)gwqhiPry%}a5U z7~}L-cYW%JV$qhxiiyfrhCC@?C-{!;0mseU-y3kWe%La$aG;}-R570*?23*&?Vjkw zc9)>?Z*ZERGdhvCiRro2vkc8(@I?kplLE!xnGTnY(^fr@gGHSgScvQcu|co8VASI^ z3bWl?*hO8%Z#NfUt)nnfauj_pchx#lFk#Lns3x7&M@x?wF^~MMlOdj zq`_fc3s$p`IhE3qxn1|_%*3!n3!aY~`p||@mrC+XURMWuL4W(58RQ&R4rDFrXg%PR z2Eu{63>NLSd-VAF(Rt)}u_vs8>ipwQpcSvdeB_9*y;grGnqD!z{Y#X*CrYP6scke| zxlHeE|KJiBQn41n7}>#WWpeb(GbBgBy?RvM)j=MuJgL}7uFG;ZU9a6O(v5(A=}dI| z{?%6F!RZ-OYXNsXpGAPYXE*DZr@|lKr@ex<9L|&o_?5I<)k?ntTNo`-=&q2C!*K;~MLr$DP{>+)$;3&+58UKEKCAX|EX zuBvH?u1Z;d1y*6L;#hMTHM54!OewoJx!n06`M7aZSgcAP>sbQ);t*~X1RR+tX*Ehp z%roempZhC427(vEq7B37M+C(g5>XVdgBvmVbv%;UT0!2H+mAhz*E{Kw3e~iEmSfgj zrP~hctllRdGAaSdas7o-3U_^SMNXjwIL6d)RoJm}n$kG$8BK-9Yu$xAg}ZGJN13}`xO>MS2lmur z{=mGmm6r>1h79D9>r~!|7|%L^Uar~YmnRe32Y)H463%Afr$eqj9Q1eYdo*PN=uL|R ziaJy#pb(Z&cM>6iHH=-;c3Y8jz7Y6fP*_~2?G(CAP#=f;u|Zh*hLB)hZm2H3(QBv9 zUdv9k_D@SAysc2s787w8K~83*MwllWnnG8H@bx45Si~?WwKw!+F;qzs$$c9Ah5X-n zm>TkQS7Qf9^?Bqa6Y|dn?jD|UNn3i;T$@4C1FniqB#yiah=y>5J4vYDmLTZXeNz;t zg*l0@NV@17Y|^bZ(0c1J?rmQzXt{(6HP~;dqi0&xm-jp|Ht|UWh`8E=B9#Z{ym9Z& z)w~eA{3_X|oGC!fi1?Lv^oKnLgd()>C?P+M;g5!#o6-sC`%DWQb2_5kxA5>L3bt)5 zD+mw_$f_MQIWcb!46H*oG%+lUKS&S5u7HEY!ZFJniKuXCbKSSbZ=j`}91tItRG!|RUL7kBnlegQ^a$>C@q-aU4L>auL|i-e1!q4o zM3V$oaU%xh%i?W04a|3~1GcvQ5*ex)3^<{`1qQnB$mqXQtN&bc{O$AnL#-qYEgk-* zR|yLLujtUajA2BToq7b&9#Bii7Y`abB8W5Xc~!;kV$x=`u;;tzkV)1DG8u{V=c#KbEepK?J5%iGDOjtoM37l z%b1wslG~K8Bvtb2PL%4xt!}@=NPOa%0h%@tu)Uh+h|#06Mh|uL)lT{)*)ZS;l%o%WJUwFIt?vTlF`FRMr`-8}O-9JO5 z@Cd?+)HHQ(%&bs*jrt64WIvQHq zTiLq&jqeO43#(Hmq`#x2Rk)SCl#&p@ka};^Gn?!LtxD6Tsglt-oZL2Zc;&Kx zi>!Nn=W*`h*Re)f(WS;M$iTzvzlY|bJqPbbBw<@4xG#u+ayo!#jNoVH^U2OtS^?}a z7@I9&U;I1QJkobx+HxNi+)X~ge&2Txdfr#sLnm#VQC=Mpp$flcD>udlvd{>A2%$sb zq-&pccOk=~Gw%@!is?rr@;E(;mL{>bd`ufl=<{JzaxlDl1z|tIKq^%2|KaQ%qbuE- zsL^z6+qP}n?l>LWwr$(CZFFoq={Ox*-O0C4pZCMP_dRFadw)Ft_85DtwQ5z(RW+-o zO(wNG3B3?EEFN03Ck;{lcbfW?6&XZU#ijt>UAuhOHa(8pRmvpliIsj&i}N%rjM$9; z$}AANAYbvCFWh`;pGnoq6|UsVt;HJ^OI>F@NvW+~mVqyov3;v7bvEvgo`PYvy_b*9 zu6vJaeEM>QJd3xJXWbYlB^rS_yc&3!X1Q0{l47yhP%h4)yf4%Uh%DY0lr8Es5ia`4 zmqCKpe&`RhAYcu*zLEZ|`bq*(oZmZ6{Gd-hBpm3&Rw}=pyo#ObU3z*Svx;U{prhWV z2g~ns=+%YW!{7w*UIc&Wp?5+QT$dikHpwf?p7*dP8gr%01uFrM;>$=|4?FK~1P7$d zz$OX^U291w-Rh(T&|np6M29WOrJ?59;-na$(U*QM~pAeJmb$ zsT?5PEBWY5At_%@99ycD88|zoUiM(?lj1WUUx_OWdJ0myR6RG-hj24W>^rRh0zuy~ zgy8n#CbDG=YG6&0^VQR#xfzwcB-FK2k9i1-|;~)=>dQ42CsI$8ZZa>nG-9|TsBEJFvLvRC9vrn2@!mUAG5f#HohP_G72cxa`pSw&TkSiK1i;{=A!tXwQR zJnxcfGU%{c8@ZUO!}5&`FS0GP$Meb7Q3y*rI3L}$qu@w8;2`BA>&r-DB)&w&tJ@J=$;^zxz|%NqW%GAU|3bDL!w zwQg(ky`p`5O#SieLBMoLpuhY$Jo7BC|2SrYRZ&gX7LIXwNWqL$4%~Q!m@H*eph9Qs z7BkU}n!Kf=YQo8EbK6a^QXK(UU+px&zw#$7D_bx1Lo@KT2sVNEFB+2ey4^wN;Mvc= zeClQ1jVA~o7h{k3Z=iwrpM0tufSdonAVbgBO~*}6WFPs;V*5$B^Xv*FF>0<-$ zh$LOF%f^()QgRil@L_)E1T3XFfRp&NcZOGlCH%Qe^A=E`_|_`r}u)Jm}I8 z8JY?)+t=ZenCab*n_pokjg>JjQ)?ELrhRg1mX-y#PL7!-dil1a(#N!4yDiqFXlC1& z%!J!yw*W85KGzg&BG&icVJEYeG*)`hTc)ip3%xS8ra2J1ZRk`ULswUWAAG>;Ey z`kE>Szm!?y=M7smK79@bBc~hee~rfQZ@zRGz)>-0#(ZF@n-(&q+^nvDy9r#bfpatS zo^dR~n=X|TZN^V4JvL3To#`$6NhM^alpXOnULmIVpNi(h{^pAZt3l4uKYA&!?*RQuW(bwrEt;$KvaZ0=S`6itNfk>oLP6$wDbOT zUs;sG3GXX}>=o)hT^)bgF@z*}RJGq@E<<-m3%bHSy5(`55FraxbsoZ&vgzX1)~i9? zn9^74zjUR?!L@-!S6OEBst;r;bTWF#e)a*6Qo}|hsw0Q#NQ-Z;M=$(Hn8_3X z*;Ki_0LF)LCtnU3f>>*DYj%TSe~e2HsYJ-ho5=#>i|WW+&^}@m%hsMDvGkmfbKu%Z z%7Q#6Hefv_*v=$b{KFG&DCq9FoCxMMrF$+^O)`iQ^b2?{SFK@6yMa^xD59&GwFC`_ z?QHNwm*bcG&Hj{B4a_@T*$(34-ZZV-bRL3ml^MqGqrzgccgmC5H0jK2T;G|7WjlJ4hE^7RfA&lnggXqUPT=o|svO`ulZY;ZuW9f={)10?ANn=4AZ zD1w^uE>zqfLK-xsHuKAQS`j>{FeUNkskbW`k)zUYnyfx6V?Z-tM~Xs#3JxFpJ@-h+(GOY6)a5L*Ps=_9Fd<9*{L$U>6<`0WGRWd?=QvK)#W`kEpW-vS^cg{ zy9^9=VC5pqCe{%TOOLjOBAv&@mEh7z8vXg|x0U<4QeE_L*G+|VhNhInms&kYIVdPJ z6><>3x{8YBmG~dG39PS{BM&tAck23SUeiOW% zP(aNfpy~|~sdgYPOTC=^Qds0c7fH&H@TG0b)TjOG)DkoH_md!pR>P2NQ)wzVl+{v& zwN56@fX#x}`>BW?DpUwE1a9*TR*qm%TIM(~*c}^Aqg<#IS#4_IY4DNFQ>0CwW-}Z5 z+lKh{xM!%sY7@sp0JzL&duB~p)%xyb<8r}+M#MxVqfWU%zRiuZ&ARQ$ML(qGhqXHZ{b+&4ykxUo-20ZRJ3-w#DZV7$WCTh*xVetx!5 zDLyIn-e>dnA-Wn`gKaRdx?f35Gsavgj|~+InJJjr5>W}AL^brnNQo|Yp@9HdWWLra z9t~`e2jbCom63Z@W-@B&;#5J`SzgYCtw%z6pd*Aw^d#>8e!&hruUU33m6I?WOaO*( z=gHJsN+K?OfSeb;J^V&{xe5M2BU2$tke@L!xgev=tp<_aDB+GbSS7KaCNJL?8~e%j z=Irsy#l3lW0@^Yfp!Wh9Y2Rjc@YtMEmy(g$ys{YEBqzmS%4h&V4(sOnd*3~lJGw=; z+UB|r+d-1f!zXO(E!-DBFi#YM?4c_ z`KxALAlDNBOr_QFbNl!9fM>c~5Bd=&iQprSdvro`uC{*T?35iYLain2fV;t7fnF2I zK^RIhxHYcPk^;vH-A8Xpu~Chtb>n9Q>E)S_efy3=`FBu=G|d9p8zTZ=9m5wOq|;{i zjE9BD-JFPtHIK$#qRHO2p@7bxw|v^WnFq=TS zgYdJxD)zH>-rw2v=3emguD$dS+7vMQ5IK2Xnt%gmvuyeW)~;$g0+m+%8O+_Ee~;te zQ)u%0EamLv9Vxi(7L=A~H7)cCpF`VBa#V9J@8AEa=Ldz;q^kmGbVL6-gz_Kj`3m-b z4cPd*`vH*E_^bQDSDx_m2PEvp_j_wQDRA4j_|!{-pjeX&-G-TnbUK{Z?CR)`=kdgB zZmUynNFjcoXP>+)`AW^Fq)S9nWew{lK0Xc!ihu+9!i#9zcP}-nrPc9Z6D1zLN{qbIN_@ER*_azz7S(WW1Zv<7g1S` zM;dM;t1UF0u$&g{HHWpu_v3`0IHhZDf91Zx-WNOk=7rkDXR#$rlKAX78{hxPHtcI} z>lpTcb-gO=sLKU%@3V_Ks{TVWYsLUqEDcs1ZZ(>`(=YPk`2)zGW1G z)@f_vDXNa0!lK2-WMeI+zS7x9>R3+_CM-6&qe?C!*(UnfJNuJ?oYQj0>4Di08oQ(` zEI&G05ka+ig941RigK1Au@0-tz}0q(=I<)q%z=`wP&m9Abp^TN6hiuz$W+QOrZF#ezGGz-# zRs*7ao?nruEu{6zQPhM;nb1h<2@$lIT2_y_0KXx-j7e8;p1%K0k{_wFQBuuJ4J z=7<6dZE?aIGtYewboJydhhvnyMNaa?VBI%pLBy8|AyC(lUrj9?NK_RAtBCQ7yv&WP z0XD|q>2t>4fqOKxwSizTJat$M0!eyNwWMtGo*B((lu3urRHL_~#si>*xzehtFqayj z5Y>*8HxX$tq_seAA{nil02%j1G3w zWl~_^=REAP`F{&N1b(+A!{jja0}&T=b&VD+?G1?7QfN*cJcXMNRH=5(&43i*QTMQR zi3zm=D!YqK(SO^9Z4t_r=3i%Ayk@3h-|=$K<`YNc{0OXUv1f_4w#|MT-@(6iT+5*0 z_~tNtW~4+ItHSFlI_MF~iV-J75EV~vK>VB3RZpyq^~lpd3^2AZYlg&Yqef_(P0@>M zNuRGkpSuutey$}Unv?2Q~}Q+L0k zN9rx7OPWqmpM`2h$Y5)7X_Ya}y-`2`kVL5P_TQ7$6|gB8TqV7R}?1G~j^#a3Jl~(CAw@DN7^pW-j zZeM)ahHc~vV1?wMqZ(OLqn2;DxRVRDf{iZREwM6e7p|r1XZf;R1i+VX9m7s2HkeiT zP4bhKhB_WnD4}S1`=jcdol)1v5jbqGf@0ASc2q_YN zzIJOjJ=Zj+N%6A0aIHR6%Bq#*G-`GgQ!z$UO%r~><^9aMnE>~5@@GgL(^5k7)=4(9 zMa5XLED(c^A&kS|(U0xjmhUzMM)R&P!E{XDtB+VjN^Z&l&Y@(Q;i`-7OZS-V#@|B} z-3LB$?kvVyoa~S+1QMAvHPGIb38=R3FTnz{VK%KM7|bTuxjy*K1ki8bRLf*RPNkuF z??ETGOq}Lv=dC0zf~g-o0tIN?#+bgU7Y1=~VARN=ZGaA70 z#`!bRZKwR%fDt!3v?w%}$xVUdFpRd;ZOrJ&#naKtk@q(*&xcbco>df}n-U{E18b6N zd11#)7DX*JzR5@~1cA-!T^5w3cv3V4-AsZ5z^pIY{4i)cr8YVFo&f1Un9(@q(z**F zYr%p1!?i5-UeFOhK`p~wg)8dnRwG{9=C@78-6Pg1L0~$U4fZ2r9jlXDr#C;}r!5pf zZs&6a_o;g}SgV_uBYc6D9-6f(#rUe9le;;To-Jq?B3S0Cb*8S{??BrtpJPtDftPr> zF6=pOHm$8r!9ZyKkdsu3_wxCr_iNHTczIZ?{-Z|A&S}Mbq($FTLe3`@H0kgd(+TRj zcjW42Hm9;QsTSFsFlxV0+4l9}NahD>KDqA)*k8E<7|5R}^#GBH4fub{75pQMQN_l< z+WP;P(4rRmmpB5VC}7$Z!IK72a_i6WEDV8s{rVA&z%%T`7|8uT?JPn_r*y0xTAaBp z`$oak&GiH}q`IwAb9iZLth;p{kP#zk`w83Z`FA7JUX(Qo?apc!8$IdB&KENr30Q>a zp3tA6d7GA)T-=$x25p*g;mJWUa+;`}@xOZ)8J#=pC!_Xj4h#PfQ@%&e97O`s93z15 zpQ|VTIE_Qo#7W-nPhz=5W#F$NUVIeseu!R<<>$3Ia)Zc@>+}~T!3%t}e3m5+#MCmT ztn%p6pFNGnW@3xD(gP3{xxaR@%9JL*BlJR;`bUamA&yy5<3>(fb7!?~SE&a=P3IUX zKohq}$m8uTohO%a9^U z>#Fk@jqxQ57F@z=z3U~xC?n3>SEVFN4FB}kPh0#ch0}bU1Z>ky!3M6NqHRc33_-Mj z?>zDCF>AVUzolacY7%!MiS2l0Y9Os3Yd#8b(R3!J`l(1a?Q00QiLDwpv&FE;&ieTq zB7KaH9LM?Vk+}Rf2*yNc^t<(sE=J0nS@P^Y#7euVRcdQtE-&&~nxj$$5y#e;Fp8^R zp*6Iv1)o;YmxYg4Ym4La1NKVd*v=8qb1l30+OiJ$KD`!@U#T2ThJL4=NZo)aTTKpm zCTN}dc?M^?W#a#`S}(eco=QY~2g&P^5sY^jX;iH9Y2W=NbL)aj8!Pf)R?4OQPCv2i z*;6}ltaXeJT=3Rs4svFF&(DACSjPQ0|qR>KoC6aF`l@Sm;G#Gie z@V-6DMH{k~UAV+aQS8o*)vrteO=u{JSP;8KdaGYseNr$l+AQQ@$ry+2xgKV%7+H9+ zne2aL6V*$Hec|KT_2+U0`yHaM-2JCVfhY%^u?k@E*?{%`v(^81*&rzq02Ry8;E&PE z#dJXr3L=VGVLTC(MiYKPqN%DTEWXDe?@D4!p9=N~_J6sy#HK^oa+;0)2mlFCtffG| zLweUKJ7rkWU`ewzMxf0wjLXgM*%w9nVKH5+f(Hf0$wh~(0bXWB)25+Jud-a7otXep zu!l>F8TWqa)J6#*nS7ne*(8njkW^sf=ueRS@#9yD{>tC$O4${~js~o&{$FqNKb)zE zxr?optewICRDX<#nf%L9iLJst5SXq9f-aTFxF{iRLDr74wlvrvms-${&9O;O`KS?UW;XKHRC?yCaGE z?VZmfi5rH%`+4XQB5mX#%cc6Mh{JN?%N1pg&t^Q0jpT_q8>UqAtN`=xcfHFSjZuncm)OZ%Nf>xR9HXLkzQn2sGZ z(%Tg!GX498*-WD@GDQPa3My>yow1cM=+OtZs#jwtN;WNTB4=fDYB2QLyJI`diS7o- zTmjt*W5u-PSQI$!)EL5$pIsRkM3G$lDU~kkCo(}x&e|(g*tW*Of(KioN#2r%sszXs%i)2 zcVATGc5^o*rW_n_V}6H2e$k`e6W)WBoDq1JHGp19#!2+QYE;;dXU5 zp@lu()DT*ESv!<%Zi~$3JpNIC_h$<@3g!Kp0SlD=*Dd((DSjy%12Yq07gN*!P=wW@ znf`KbVrIlg@c0G|!&4(8(VYHF@XTaHj$5wf?L0Oa+`c`}zGPRYREon)R!Hp9vC}W8 zBCwg~qquskhzqCX9uOriV=;MHA`Wh8V-yDU))3zH^5a}em%$P3ks)(XqP}*&vN9QWQDmaINnIPbz>-jcPV;H>TL8Z#sui1{d_X1h){^}F4J+{EH8=4W@e=A zB#M|2lx(0OyOC?y^06#yb$P$4XEjvH!qp%fsB%!F$ z2>VgJR7e+y+5~(s-Q=m4VA5l}tP{9X=`St^P8)dBK-&vAEn5iNX$k2Pn+#Z7ZU@c7 zM2|ur%Fb`@Bt#|PmamY#iWTXEbUiyHl2ðRL!%h|&D$537+#I2sHWf*h4XJ}9h7 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

{c3AB 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�-sTJ zKG3Biz+KHWKyo^-MK0hc6+}8hl#2!=M_b51`a=OO3j6raL3>)jMFZ2xtvIH;ACtrK zhjJkvC!BcN_d=?{&aKe$1P~O>XN7;jLZJeORNsEL>9S@S2uK~WQ$xCW)+a0r_K!Q0 z%h+MkBUjRnTB`?vuR#|toX=Pqhlda7WsjJBr>w;R^oEMH_A3cQ4mFo|Z80*m}}2hg80%=k#j;BlnUNaz)+ z7y=z{!98e@E`Lt{;hD*8Ej|xG$`CQTdEOJt6tcoPTaPv8#gVrXQi0Yirbn4xw6rP2 ztGKeiEHa?FrV(Crw);enB%b2cZarB320X!BNR6OrqGxhAAw5`-Ic9VJUGdQwrDv7K zvLpyZ^3+AA01X8^8EzEdaF|eEja8?--=P{4=$LR|qM?I~3ZB=wDD|hd#<0M?yrN8~ zCt>)(q=#Bif+`KL^8~Yia5PN#YUSjM&^c5cj2ise^<<2oW8%*+Ck0DH4@Y4HNC%L36kot z?iE3ItAl?-OEJzHVv#{`OM(A?MaZ4is95tHb70YdhtTrnz}81JaM$R6jVWcI9ZE@VpWI_Tmr`I1?Efu+c2e@w$mDNK5TZ8zSf! zufL$f;36C*eR+p>Uj1Y#Ag=(y(LIy8*?2mfb-@nXgj5-=6p)W9&qKYV-dr5Xlgo+% z0fj7o_<#~Gl6XOJqjPW=2aJFPF*GWn>O345KIroA*IY#FZ90x!$uNXTtL2<1sd6EX zL_UUiG0pl5sE2VIs@>4#n)6B`33l=9!{NR`Qug!MqK_sSpg?Lz88ypqYw4iWy;_7w zs)y--SP#H8LJy-(>OEvB#4WwE#ULj&ud)a?8G0ShOXC5Pa#ScYC7zD?r)m;ElMH>K zoSqCa&H~?zGUslfV?wPK(QcRxhc{LNGZh>(bb7bPZZjRz0}9IUQjXYUZutZ_)O?2) ze+4EIiKOevdfsnbd<+8ID6nZ%ysb$@7_Fn2bnkcSIA}0+92gxaTT`VOVa#xjzz@p3 z3}8y<`Wx5-DyU$*65(V`W7*H48`%RlceKQ3MeQ_ZF zl_NAb1X2-bgHIo(ht6h3V2KVhtTfh=ai3CKE~`OCHAKFC`QkiBm}R(dlF)OOGgi9W zPuto`fZ_*4G-opItT@f7vpcY$v@b>je}avChBl5v#F|_v4&tzV`Aj~W1s(jyVw`7B zo8nAu$lKuMT+w{GBnNg~%q>LmJ1^1Uojd=b=)d6;hg_6f2X10N-06o-hneMccv!td zAp19ZPgARxy(mlBDf)u7{?oZ z*mpGs_JAe5MQzEWQ5@$2mlo3v@MX)^dZvRN>42r9!l`}}r@6DKn+0hMy)7%;P#JLB zpuK8HTjhUXaFqX{Iq=z2#`M-BI9WYun(CxPZ34eG;ReX+dWz{U*h-I?S0LxWxa074SI!zAD)l~UFO^`UX8rZO$lAg$#EeuHX%b23L?%!%dw|ay0#Bs<+ Z`rM|=fcJuYpu{|h+E7Rw7(h2L{tpYkg-QSb literal 0 HcmV?d00001 diff --git a/jars/deobfuscated.jar b/jars/deobfuscated.jar new file mode 100644 index 0000000000000000000000000000000000000000..786f946a9901035d3c688f60dba4e16e4a37aa9b GIT binary patch literal 833329 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ⅇ28(eftuc(@29F(C4uVGOfFZGaC@ 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.j8g`d@aBxwEJrwc|-uuXlK$o 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 S+PExogbGF7I}MaH^NUZgrGyTTPLV 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 ZsI8Vb0%r;f219kGYDoG4?gt+DYk$2*XNPihF9 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 z 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 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")); + if(this.getParameter("mppass") != null) { + this.mc.session.mpPassParameter = this.getParameter("mppass"); + } + } + + if(this.getParameter("loadmap_user") != null && this.getParameter("loadmap_id") != null) { + this.mc.objectMouseOverString = this.getParameter("loadmap_user"); + this.mc.rightClickDelayTimer = Integer.parseInt(this.getParameter("loadmap_id")); + } else if(this.getParameter("server") != null && this.getParameter("port") != null) { + this.mc.setServer(this.getParameter("server"), Integer.parseInt(this.getParameter("port"))); + } + + this.mc.appletMode = true; + this.setLayout(new BorderLayout()); + this.add(this.mcCanvas, "Center"); + this.mcCanvas.setFocusable(true); + 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; + } + } + + public void clearApplet() { + this.mcCanvas = null; + this.mc = null; + this.mcThread = null; + + try { + this.removeAll(); + this.validate(); + } catch (Exception var2) { + } + + } +} diff --git a/source/net/minecraft/isom/IsomPreviewApplet.java b/source/net/minecraft/isom/IsomPreviewApplet.java new file mode 100644 index 0000000..b192ed2 --- /dev/null +++ b/source/net/minecraft/isom/IsomPreviewApplet.java @@ -0,0 +1,22 @@ +package net.minecraft.isom; + +import java.applet.Applet; +import java.awt.BorderLayout; +import net.minecraft.src.CanvasIsomPreview; + +public class IsomPreviewApplet extends Applet { + private CanvasIsomPreview isomCanvas = new CanvasIsomPreview(); + + public IsomPreviewApplet() { + this.setLayout(new BorderLayout()); + this.add(this.isomCanvas, "Center"); + } + + public void start() { + this.isomCanvas.start(); + } + + public void stop() { + this.isomCanvas.stop(); + } +} diff --git a/source/net/minecraft/src/AxisAlignedBB.java b/source/net/minecraft/src/AxisAlignedBB.java new file mode 100644 index 0000000..e680fee --- /dev/null +++ b/source/net/minecraft/src/AxisAlignedBB.java @@ -0,0 +1,313 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class AxisAlignedBB { + private static List boundingBoxes = new ArrayList(); + private static int numBoundingBoxesInUse = 0; + 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 void clearBoundingBoxPool() { + numBoundingBoxesInUse = 0; + } + + public static AxisAlignedBB getBoundingBoxFromPool(double var0, double var2, double var4, double var6, double var8, double var10) { + if(numBoundingBoxesInUse >= boundingBoxes.size()) { + boundingBoxes.add(getBoundingBox(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D)); + } + + return ((AxisAlignedBB)boundingBoxes.get(numBoundingBoxesInUse++)).setBounds(var0, var2, var4, var6, var8, var10); + } + + private 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 getBoundingBoxFromPool(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 getBoundingBoxFromPool(var7, var9, var11, var13, var15, var17); + } + + public AxisAlignedBB getOffsetBoundingBox(double var1, double var3, double var5) { + return getBoundingBoxFromPool(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 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 copy() { + return getBoundingBoxFromPool(this.minX, this.minY, this.minZ, this.maxX, this.maxY, this.maxZ); + } + + public MovingObjectPosition calculateIntercept(Vec3D var1, Vec3D var2) { + Vec3D var3 = var1.getIntermediateWithXValue(var2, this.minX); + Vec3D var4 = var1.getIntermediateWithXValue(var2, this.maxX); + Vec3D var5 = var1.getIntermediateWithYValue(var2, this.minY); + Vec3D var6 = var1.getIntermediateWithYValue(var2, this.maxY); + Vec3D var7 = var1.getIntermediateWithZValue(var2, this.minZ); + Vec3D 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; + } + + Vec3D 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(Vec3D var1) { + return var1 == null ? false : var1.yCoord >= this.minY && var1.yCoord <= this.maxY && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ; + } + + private boolean isVecInXZ(Vec3D var1) { + return var1 == null ? false : var1.xCoord >= this.minX && var1.xCoord <= this.maxX && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ; + } + + private boolean isVecInXY(Vec3D 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; + } +} diff --git a/source/net/minecraft/src/Block.java b/source/net/minecraft/src/Block.java new file mode 100644 index 0000000..a962b9d --- /dev/null +++ b/source/net/minecraft/src/Block.java @@ -0,0 +1,432 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Random; + +public class Block { + 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 StepSoundGlass("stone", 1.0F, 1.0F); + public static final StepSound soundClothFootstep = new StepSound("cloth", 1.0F, 1.0F); + public static final StepSound soundSandFootstep = new StepSoundSand("sand", 1.0F, 1.0F); + public static final Block[] blocksList = new Block[256]; + public static final boolean[] tickOnLoad = new boolean[256]; + public static final boolean[] opaqueCubeLookup = new boolean[256]; + public static final int[] lightOpacity = new int[256]; + public static final boolean[] canBlockGrass = new boolean[256]; + public static final int[] lightValue = new int[256]; + public static final Block stone = (new BlockStone(1, 1)).setHardness(1.5F).setResistance(10.0F).setStepSound(soundStoneFootstep); + public static final BlockGrass grass = (BlockGrass)(new BlockGrass(2)).setHardness(0.6F).setStepSound(soundGrassFootstep); + public static final Block dirt = (new BlockDirt(3, 2)).setHardness(0.5F).setStepSound(soundGravelFootstep); + public static final Block cobblestone = (new Block(4, 16, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep); + public static final Block planks = (new Block(5, 4, Material.wood)).setHardness(2.0F).setResistance(5.0F).setStepSound(soundWoodFootstep); + public static final Block sapling = (new BlockSapling(6, 15)).setHardness(0.0F).setStepSound(soundGrassFootstep); + public static final Block bedrock = (new Block(7, 17, Material.rock)).setHardness(-1.0F).setResistance(6000000.0F).setStepSound(soundStoneFootstep); + public static final Block waterMoving = (new BlockFlowing(8, Material.water)).setHardness(100.0F).setLightOpacity(3); + public static final Block waterStill = (new BlockStationary(9, Material.water)).setHardness(100.0F).setLightOpacity(3); + public static final Block lavaMoving = (new BlockFlowing(10, Material.lava)).setHardness(0.0F).setLightValue(1.0F).setLightOpacity(255); + public static final Block lavaStill = (new BlockStationary(11, Material.lava)).setHardness(100.0F).setLightValue(1.0F).setLightOpacity(255); + public static final Block sand = (new BlockSand(12, 18)).setHardness(0.5F).setStepSound(soundSandFootstep); + public static final Block gravel = (new BlockGravel(13, 19)).setHardness(0.6F).setStepSound(soundGravelFootstep); + public static final Block oreGold = (new BlockOre(14, 32)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep); + public static final Block oreIron = (new BlockOre(15, 33)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep); + public static final Block oreCoal = (new BlockOre(16, 34)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep); + public static final Block wood = (new BlockLog(17)).setHardness(2.0F).setStepSound(soundWoodFootstep); + public static final BlockLeaves leaves = (BlockLeaves)(new BlockLeaves(18, 52)).setHardness(0.2F).setLightOpacity(1).setStepSound(soundGrassFootstep); + public static final Block sponge = (new BlockSponge(19)).setHardness(0.6F).setStepSound(soundGrassFootstep); + public static final Block glass = (new BlockGlass(20, 49, Material.glass, false)).setHardness(0.3F).setStepSound(soundGlassFootstep); + public static final Block clothRed = null; + public static final Block clothOrange = null; + public static final Block clothYellow = null; + public static final Block clothChartreuse = null; + public static final Block clothGreen = null; + public static final Block clothSpringGreen = null; + public static final Block clothCyan = null; + public static final Block clothCapri = null; + public static final Block clothUltramarine = null; + public static final Block clothViolet = null; + public static final Block clothPurple = null; + public static final Block clothMagenta = null; + public static final Block clothRose = null; + public static final Block clothDarkGray = null; + public static final Block cloth = (new Block(35, 64, Material.cloth)).setHardness(0.8F).setStepSound(soundClothFootstep); + public static final Block clothWhite = null; + public static final BlockFlower plantYellow = (BlockFlower)(new BlockFlower(37, 13)).setHardness(0.0F).setStepSound(soundGrassFootstep); + public static final BlockFlower plantRed = (BlockFlower)(new BlockFlower(38, 12)).setHardness(0.0F).setStepSound(soundGrassFootstep); + public static final BlockFlower mushroomBrown = (BlockFlower)(new BlockMushroom(39, 29)).setHardness(0.0F).setStepSound(soundGrassFootstep).setLightValue(2.0F / 16.0F); + public static final BlockFlower mushroomRed = (BlockFlower)(new BlockMushroom(40, 28)).setHardness(0.0F).setStepSound(soundGrassFootstep); + public static final Block blockGold = (new BlockOreBlock(41, 39)).setHardness(3.0F).setResistance(10.0F).setStepSound(soundMetalFootstep); + public static final Block blockSteel = (new BlockOreBlock(42, 38)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundMetalFootstep); + public static final Block stairDouble = (new BlockStep(43, true)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep); + public static final Block stairSingle = (new BlockStep(44, false)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep); + public static final Block brick = (new Block(45, 7, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep); + public static final Block tnt = (new BlockTNT(46, 8)).setHardness(0.0F).setStepSound(soundGrassFootstep); + public static final Block bookshelf = (new BlockBookshelf(47, 35)).setHardness(1.5F).setStepSound(soundWoodFootstep); + public static final Block cobblestoneMossy = (new Block(48, 36, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep); + public static final Block obsidian = (new BlockObsidian(49, 37)).setHardness(10.0F).setResistance(20.0F).setStepSound(soundStoneFootstep); + public static final Block torch = (new BlockTorch(50, 80)).setHardness(0.0F).setLightValue(15.0F / 16.0F).setStepSound(soundWoodFootstep); + public static final BlockFire fire = (BlockFire)((BlockFire)(new BlockFire(51, 31)).setHardness(0.0F).setLightValue(1.0F).setStepSound(soundWoodFootstep)); + public static final Block mobSpawner = (new BlockMobSpawner(52, 65)).setHardness(5.0F).setStepSound(soundMetalFootstep); + public static final Block stairCompactWood = new BlockStairs(53, planks); + public static final Block chest = (new BlockChest(54)).setHardness(2.5F).setStepSound(soundWoodFootstep); + public static final Block cog = (new BlockGears(55, 62)).setHardness(0.5F).setStepSound(soundMetalFootstep); + public static final Block oreDiamond = (new BlockOre(56, 50)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep); + public static final Block blockDiamond = (new BlockOreBlock(57, 40)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundMetalFootstep); + public static final Block workbench = (new BlockWorkbench(58)).setHardness(2.5F).setStepSound(soundWoodFootstep); + public static final Block crops = (new BlockCrops(59, 88)).setHardness(0.0F).setStepSound(soundGrassFootstep); + public static final Block tilledField = (new BlockFarmland(60)).setHardness(0.6F).setStepSound(soundGravelFootstep); + public static final Block stoneOvenIdle = (new BlockFurnace(61, false)).setHardness(3.5F).setStepSound(soundStoneFootstep); + public static final Block stoneOvenActive = (new BlockFurnace(62, true)).setHardness(3.5F).setStepSound(soundStoneFootstep).setLightValue(14.0F / 16.0F); + public static final Block signStanding = (new BlockSign(63, TileEntitySign.class, Item.sign.shiftedIndex)).setHardness(1.0F).setStepSound(soundWoodFootstep); + public static final Block doorWood = (new BlockDoor(64)).setHardness(3.0F).setStepSound(soundWoodFootstep); + public static final Block ladder = (new BlockLadder(65, 83)).setHardness(0.4F).setStepSound(soundWoodFootstep); + public static final Block minecartTrack = (new BlockMinecartTrack(66, 128)).setHardness(1.0F).setStepSound(soundMetalFootstep); + public static final Block stairCompactStone = new BlockStairs(67, cobblestone); + public int blockIndexInTexture; + public final int blockID; + protected float blockHardness; + protected float blockResistance; + public double minX; + public double minY; + public double minZ; + public double maxX; + public double maxY; + public double maxZ; + public StepSound stepSound; + public float blockParticleGravity; + public final Material blockMaterial; + + protected Block(int var1, Material var2) { + this.stepSound = soundPowderFootstep; + this.blockParticleGravity = 1.0F; + 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] = this.getCanBlockGrass(); + } + } + + protected Block(int var1, int var2, Material var3) { + this(var1, var3); + this.blockIndexInTexture = var2; + } + + 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; + } + + private boolean getCanBlockGrass() { + return false; + } + + public boolean renderAsNormalBlock() { + return true; + } + + 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 void setTickOnLoad(boolean var1) { + tickOnLoad[this.blockID] = var1; + } + + public 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); + } + + 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.isBlockNormalCube(var2, var3, var4)))))); + } + + public int getBlockTextureGeneric(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return this.getBlockTextureFromSideAndMetadata(var5, var1.getBlockMetadata(var2, var3, var4)); + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return this.getBlockTextureFromSide(var1); + } + + public int getBlockTextureFromSide(int var1) { + return this.blockIndexInTexture; + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return AxisAlignedBB.getBoundingBoxFromPool((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 getCollidingBoundingBoxes(World var1, int var2, int var3, int var4, AxisAlignedBB var5, ArrayList var6) { + AxisAlignedBB var7 = this.getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + if(var7 != null && var5.intersectsWith(var7)) { + var6.add(var7); + } + + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return AxisAlignedBB.getBoundingBoxFromPool((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() { + return 10; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + } + + public int quantityDropped(Random var1) { + return 1; + } + + public int idDropped(int var1, Random var2) { + return this.blockID; + } + + public float blockStrength(EntityPlayer var1) { + return this.blockHardness < 0.0F ? 0.0F : (!var1.canHarvestBlock(this) ? 1.0F / this.blockHardness / 100.0F : var1.getCurrentPlayerStrVsBlock(this) / this.blockHardness / 30.0F); + } + + public void dropBlockAsItem(World var1, int var2, int var3, int var4, int var5) { + this.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, 1.0F); + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) { + int var7 = this.quantityDropped(var1.rand); + + for(int var8 = 0; var8 < var7; ++var8) { + if(var1.rand.nextFloat() <= var6) { + int var9 = this.idDropped(var5, var1.rand); + if(var9 > 0) { + float var10 = 0.7F; + double var11 = (double)(var1.rand.nextFloat() * var10) + (double)(1.0F - var10) * 0.5D; + double var13 = (double)(var1.rand.nextFloat() * var10) + (double)(1.0F - var10) * 0.5D; + double var15 = (double)(var1.rand.nextFloat() * var10) + (double)(1.0F - var10) * 0.5D; + EntityItem var17 = new EntityItem(var1, (double)var2 + var11, (double)var3 + var13, (double)var4 + var15, new ItemStack(var9)); + var17.delayBeforeCanPickup = 10; + var1.spawnEntityInWorld(var17); + } + } + } + + } + + public float getExplosionResistance(Entity var1) { + return this.blockResistance / 5.0F; + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3D var5, Vec3D var6) { + var5 = var5.addVector((double)(-var2), (double)(-var3), (double)(-var4)); + var6 = var6.addVector((double)(-var2), (double)(-var3), (double)(-var4)); + Vec3D var7 = var5.getIntermediateWithXValue(var6, this.minX); + Vec3D var8 = var5.getIntermediateWithXValue(var6, this.maxX); + Vec3D var9 = var5.getIntermediateWithYValue(var6, this.minY); + Vec3D var10 = var5.getIntermediateWithYValue(var6, this.maxY); + Vec3D var11 = var5.getIntermediateWithZValue(var6, this.minZ); + Vec3D 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; + } + + Vec3D var13 = null; + if(var7 != null && (var13 == null || var5.distanceTo(var7) < var5.distanceTo(var13))) { + var13 = var7; + } + + if(var8 != null && (var13 == null || var5.distanceTo(var8) < var5.distanceTo(var13))) { + var13 = var8; + } + + if(var9 != null && (var13 == null || var5.distanceTo(var9) < var5.distanceTo(var13))) { + var13 = var9; + } + + if(var10 != null && (var13 == null || var5.distanceTo(var10) < var5.distanceTo(var13))) { + var13 = var10; + } + + if(var11 != null && (var13 == null || var5.distanceTo(var11) < var5.distanceTo(var13))) { + var13 = var11; + } + + if(var12 != null && (var13 == null || var5.distanceTo(var12) < var5.distanceTo(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(Vec3D var1) { + return var1 == null ? false : var1.yCoord >= this.minY && var1.yCoord <= this.maxY && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ; + } + + private boolean isVecInsideXZBounds(Vec3D var1) { + return var1 == null ? false : var1.xCoord >= this.minX && var1.xCoord <= this.maxX && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ; + } + + private boolean isVecInsideXYBounds(Vec3D 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) { + } + + public int getRenderBlockPass() { + return 0; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return true; + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + return false; + } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + } + + public void onBlockPlaced(World var1, int var2, int var3, int var4, int var5) { + } + + 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, Vec3D var6) { + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + } + + public int getRenderColor(IBlockAccess var1, int var2, int var3, int var4) { + return 16777215; + } + + static { + for(int var0 = 0; var0 < 256; ++var0) { + if(blocksList[var0] != null) { + Item.itemsList[var0] = new ItemBlock(var0 - 256); + } + } + + } +} diff --git a/source/net/minecraft/src/BlockBookshelf.java b/source/net/minecraft/src/BlockBookshelf.java new file mode 100644 index 0000000..e91f8a9 --- /dev/null +++ b/source/net/minecraft/src/BlockBookshelf.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockBookshelf extends Block { + public BlockBookshelf(int var1, int var2) { + super(var1, var2, Material.wood); + } + + public int getBlockTextureFromSide(int var1) { + return var1 <= 1 ? 4 : this.blockIndexInTexture; + } + + public int quantityDropped(Random var1) { + return 0; + } +} diff --git a/source/net/minecraft/src/BlockBreakable.java b/source/net/minecraft/src/BlockBreakable.java new file mode 100644 index 0000000..a037862 --- /dev/null +++ b/source/net/minecraft/src/BlockBreakable.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class BlockBreakable extends Block { + private boolean localFlag; + + protected BlockBreakable(int var1, int var2, Material var3, boolean var4) { + super(var1, var2, var3); + this.localFlag = var4; + } + + 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); + } +} diff --git a/source/net/minecraft/src/BlockChest.java b/source/net/minecraft/src/BlockChest.java new file mode 100644 index 0000000..9807507 --- /dev/null +++ b/source/net/minecraft/src/BlockChest.java @@ -0,0 +1,196 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockChest extends BlockContainer { + private Random random = new Random(); + + protected BlockChest(int var1) { + super(var1, Material.wood); + this.blockIndexInTexture = 26; + } + + public int getBlockTextureGeneric(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(var5 == 1) { + return this.blockIndexInTexture - 1; + } else if(var5 == 0) { + return this.blockIndexInTexture - 1; + } else { + 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; + int var11; + int var12; + byte var13; + if(var6 != this.blockID && var7 != this.blockID) { + if(var8 != this.blockID && var9 != this.blockID) { + byte var14 = 3; + if(Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var7]) { + var14 = 3; + } + + if(Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var6]) { + var14 = 2; + } + + if(Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var9]) { + var14 = 5; + } + + if(Block.opaqueCubeLookup[var9] && !Block.opaqueCubeLookup[var8]) { + var14 = 4; + } + + return var5 == var14 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture; + } else if(var5 != 4 && var5 != 5) { + var10 = 0; + if(var8 == this.blockID) { + var10 = -1; + } + + var11 = var1.getBlockId(var8 == this.blockID ? var2 - 1 : var2 + 1, var3, var4 - 1); + var12 = var1.getBlockId(var8 == this.blockID ? var2 - 1 : var2 + 1, var3, var4 + 1); + if(var5 == 3) { + var10 = -1 - var10; + } + + var13 = 3; + if((Block.opaqueCubeLookup[var6] || Block.opaqueCubeLookup[var11]) && !Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var12]) { + var13 = 3; + } + + if((Block.opaqueCubeLookup[var7] || Block.opaqueCubeLookup[var12]) && !Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var11]) { + var13 = 2; + } + + return (var5 == var13 ? this.blockIndexInTexture + 16 : this.blockIndexInTexture + 32) + var10; + } else { + return this.blockIndexInTexture; + } + } else if(var5 != 2 && var5 != 3) { + var10 = 0; + if(var6 == this.blockID) { + var10 = -1; + } + + var11 = var1.getBlockId(var2 - 1, var3, var6 == this.blockID ? var4 - 1 : var4 + 1); + var12 = var1.getBlockId(var2 + 1, var3, var6 == this.blockID ? var4 - 1 : var4 + 1); + if(var5 == 4) { + var10 = -1 - var10; + } + + var13 = 5; + if((Block.opaqueCubeLookup[var8] || Block.opaqueCubeLookup[var11]) && !Block.opaqueCubeLookup[var9] && !Block.opaqueCubeLookup[var12]) { + var13 = 5; + } + + if((Block.opaqueCubeLookup[var9] || Block.opaqueCubeLookup[var12]) && !Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var11]) { + var13 = 4; + } + + return (var5 == var13 ? this.blockIndexInTexture + 16 : this.blockIndexInTexture + 32) + var10; + } else { + return this.blockIndexInTexture; + } + } + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? this.blockIndexInTexture - 1 : (var1 == 0 ? this.blockIndexInTexture - 1 : (var1 == 3 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture)); + } + + 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 onBlockRemoval(World var1, int var2, int var3, int var4) { + TileEntityChest var5 = (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4); + + for(int var6 = 0; var6 < var5.getSizeInventory(); ++var6) { + ItemStack var7 = var5.getStackInSlot(var6); + if(var7 != null) { + float var8 = this.random.nextFloat() * 0.8F + 0.1F; + float var9 = this.random.nextFloat() * 0.8F + 0.1F; + float var10 = this.random.nextFloat() * 0.8F + 0.1F; + + while(var7.stackSize > 0) { + int var11 = this.random.nextInt(21) + 10; + if(var11 > var7.stackSize) { + var11 = var7.stackSize; + } + + var7.stackSize -= var11; + EntityItem var12 = new EntityItem(var1, (double)((float)var2 + var8), (double)((float)var3 + var9), (double)((float)var4 + var10), new ItemStack(var7.itemID, var11, var7.itemDmg)); + float var13 = 0.05F; + var12.motionX = (double)((float)this.random.nextGaussian() * var13); + var12.motionY = (double)((float)this.random.nextGaussian() * var13 + 0.2F); + var12.motionZ = (double)((float)this.random.nextGaussian() * var13); + var1.spawnEntityInWorld(var12); + } + } + } + + super.onBlockRemoval(var1, var2, var3, var4); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + Object var6 = (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4); + if(var1.isBlockNormalCube(var2, var3 + 1, var4)) { + return true; + } else if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID && var1.isBlockNormalCube(var2 - 1, var3 + 1, var4)) { + return true; + } else if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID && var1.isBlockNormalCube(var2 + 1, var3 + 1, var4)) { + return true; + } else if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID && var1.isBlockNormalCube(var2, var3 + 1, var4 - 1)) { + return true; + } else if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID && var1.isBlockNormalCube(var2, var3 + 1, var4 + 1)) { + return true; + } else { + if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (TileEntityChest)var1.getBlockTileEntity(var2 - 1, var3, var4), (IInventory)var6); + } + + if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (IInventory)var6, (TileEntityChest)var1.getBlockTileEntity(var2 + 1, var3, var4)); + } + + if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4 - 1), (IInventory)var6); + } + + if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (IInventory)var6, (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4 + 1)); + } + + var5.displayGUIChest((IInventory)var6); + return true; + } + } + + protected TileEntity getBlockEntity() { + return new TileEntityChest(); + } +} diff --git a/source/net/minecraft/src/BlockContainer.java b/source/net/minecraft/src/BlockContainer.java new file mode 100644 index 0000000..6b5cee0 --- /dev/null +++ b/source/net/minecraft/src/BlockContainer.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +public abstract class BlockContainer extends Block { + protected BlockContainer(int var1, Material var2) { + super(var1, var2); + } + + protected BlockContainer(int var1, int var2, Material var3) { + super(var1, var2, var3); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + var1.setBlockTileEntity(var2, var3, var4, this.getBlockEntity()); + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + super.onBlockRemoval(var1, var2, var3, var4); + var1.removeBlockTileEntity(var2, var3, var4); + } + + protected abstract TileEntity getBlockEntity(); +} diff --git a/source/net/minecraft/src/BlockCrops.java b/source/net/minecraft/src/BlockCrops.java new file mode 100644 index 0000000..9cb6741 --- /dev/null +++ b/source/net/minecraft/src/BlockCrops.java @@ -0,0 +1,110 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockCrops extends BlockFlower { + protected BlockCrops(int var1, int var2) { + super(var1, var2); + this.blockIndexInTexture = var2; + this.setTickOnLoad(true); + float var3 = 0.5F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, 0.25F, 0.5F + var3); + } + + 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.updateTick(var1, var2, var3, var4); + if(var5.nextInt((int)(100.0F / var7)) == 0) { + ++var6; + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + } + } + } + + } + + private float updateTick(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 getBlockTextureFromSideAndMetadata(int var1, int var2) { + if(var2 < 0) { + var2 = 7; + } + + return this.blockIndexInTexture + var2; + } + + public int getRenderType() { + return 6; + } + + public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) { + super.onBlockDestroyedByPlayer(var1, var2, var3, var4, var5); + + for(int var6 = 0; var6 < 3; ++var6) { + if(var1.rand.nextInt(15) <= var5) { + float var7 = 0.7F; + float var8 = var1.rand.nextFloat() * var7 + (1.0F - var7) * 0.5F; + float var9 = var1.rand.nextFloat() * var7 + (1.0F - var7) * 0.5F; + float var10 = var1.rand.nextFloat() * var7 + (1.0F - var7) * 0.5F; + EntityItem var11 = new EntityItem(var1, (double)((float)var2 + var8), (double)((float)var3 + var9), (double)((float)var4 + var10), new ItemStack(Item.seeds)); + var11.delayBeforeCanPickup = 10; + var1.spawnEntityInWorld(var11); + } + } + + } + + public int idDropped(int var1, Random var2) { + System.out.println("Get resource: " + var1); + return var1 == 7 ? Item.wheat.shiftedIndex : -1; + } + + public int quantityDropped(Random var1) { + return 1; + } +} diff --git a/source/net/minecraft/src/BlockDirt.java b/source/net/minecraft/src/BlockDirt.java new file mode 100644 index 0000000..d3b8a7a --- /dev/null +++ b/source/net/minecraft/src/BlockDirt.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class BlockDirt extends Block { + protected BlockDirt(int var1, int var2) { + super(var1, var2, Material.ground); + } +} diff --git a/source/net/minecraft/src/BlockDoor.java b/source/net/minecraft/src/BlockDoor.java new file mode 100644 index 0000000..25b2c67 --- /dev/null +++ b/source/net/minecraft/src/BlockDoor.java @@ -0,0 +1,154 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockDoor extends Block { + protected BlockDoor(int var1) { + super(var1, Material.wood); + this.blockIndexInTexture = 97; + float var2 = 0.5F; + float var3 = 1.0F; + this.setBlockBounds(0.5F - var2, 0.0F, 0.5F - var2, 0.5F + var2, var3, 0.5F + var2); + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + if(var1 != 0 && var1 != 1) { + int var3 = this.getState(var2); + if((var3 == 0 || var3 == 2) ^ var1 <= 3) { + return this.blockIndexInTexture; + } else { + int var4 = var3 / 2 + (var1 & 1 ^ var3); + var4 += (var2 & 4) / 4; + int var5 = this.blockIndexInTexture - (var2 & 8) * 2; + if((var4 & 1) != 0) { + var5 = -var5; + } + + return var5; + } + } else { + return this.blockIndexInTexture; + } + } + + public boolean isOpaqueCube() { + return false; + } + + 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.getState(var1.getBlockMetadata(var2, var3, var4))); + } + + public void setDoorRotation(int var1) { + float var2 = 3.0F / 16.0F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F); + if(var1 == 0) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var2); + } + + if(var1 == 1) { + this.setBlockBounds(1.0F - var2, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + if(var1 == 2) { + this.setBlockBounds(0.0F, 0.0F, 1.0F - var2, 1.0F, 1.0F, 1.0F); + } + + if(var1 == 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) { + this.blockActivated(var1, var2, var3, var4, var5); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) != 0) { + if(var1.getBlockId(var2, var3 - 1, var4) == this.blockID) { + this.blockActivated(var1, var2, var3 - 1, var4, var5); + } + + return true; + } else { + if(var1.getBlockId(var2, var3 + 1, var4) == this.blockID) { + var1.setBlockMetadataWithNotify(var2, var3 + 1, var4, (var6 ^ 4) + 8); + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 ^ 4); + var1.markBlocksDirty(var2, var3 - 1, var4, var2, var3, var4); + if(Math.random() < 0.5D) { + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.door_open", 1.0F, var1.rand.nextFloat() * 0.1F + 0.9F); + } else { + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.door_close", 1.0F, var1.rand.nextFloat() * 0.1F + 0.9F); + } + + return true; + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) != 0) { + if(var1.getBlockId(var2, var3 - 1, var4) != this.blockID) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } else { + boolean var7 = false; + if(var1.getBlockId(var2, var3 + 1, var4) != this.blockID) { + var1.setBlockWithNotify(var2, var3, var4, 0); + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3 - 1, var4)) { + var1.setBlockWithNotify(var2, var3, var4, 0); + var7 = true; + if(var1.getBlockId(var2, var3 + 1, var4) == this.blockID) { + var1.setBlockWithNotify(var2, var3 + 1, var4, 0); + } + } + + if(var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var6); + } + } + + } + + public int idDropped(int var1, Random var2) { + return (var1 & 8) != 0 ? 0 : Item.door.shiftedIndex; + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3D var5, Vec3D var6) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.collisionRayTrace(var1, var2, var3, var4, var5, var6); + } + + public int getState(int var1) { + return (var1 & 4) == 0 ? var1 - 1 & 3 : var1 & 3; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var3 >= 127 ? false : var1.isBlockNormalCube(var2, var3 - 1, var4) && super.canPlaceBlockAt(var1, var2, var3, var4) && super.canPlaceBlockAt(var1, var2, var3 + 1, var4); + } +} diff --git a/source/net/minecraft/src/BlockFarmland.java b/source/net/minecraft/src/BlockFarmland.java new file mode 100644 index 0000000..790d39c --- /dev/null +++ b/source/net/minecraft/src/BlockFarmland.java @@ -0,0 +1,93 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFarmland extends Block { + protected BlockFarmland(int var1) { + super(var1, Material.ground); + this.blockIndexInTexture = 87; + this.setTickOnLoad(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.getBoundingBoxFromPool((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 int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return var1 == 1 && var2 > 0 ? this.blockIndexInTexture - 1 : (var1 == 1 ? this.blockIndexInTexture : 2); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var5.nextInt(5) == 0) { + if(this.isWaterNearby(var1, var2, var3, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 7); + } else { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 > 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 - 1); + } else if(!this.isCropsNearby(var1, var2, var3, var4)) { + var1.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID); + } + } + } + + } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + if(var1.rand.nextInt(4) == 0) { + var1.setBlockWithNotify(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) { + if(var1.getBlockId(var6, var3 + 1, var7) == Block.crops.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.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID); + } + + } + + public int idDropped(int var1, Random var2) { + return Block.dirt.idDropped(0, var2); + } +} diff --git a/source/net/minecraft/src/BlockFire.java b/source/net/minecraft/src/BlockFire.java new file mode 100644 index 0000000..594e81e --- /dev/null +++ b/source/net/minecraft/src/BlockFire.java @@ -0,0 +1,225 @@ +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]; + + protected BlockFire(int var1, int var2) { + super(var1, var2, Material.fire); + this.setBurnRate(Block.planks.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.cloth.blockID, 30, 60); + this.setTickOnLoad(true); + } + + 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() { + return 20; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 < 15) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 + 1); + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + } + + if(!this.canNeighborCatchFire(var1, var2, var3, var4)) { + if(!var1.isBlockNormalCube(var2, var3 - 1, var4) || var6 > 3) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + } else if(!this.canBlockCatchFire(var1, var2, var3 - 1, var4) && var6 == 15 && var5.nextInt(4) == 0) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } else { + if(var6 % 5 == 0 && var6 > 5) { + this.tryToCatchBlockOnFire(var1, var2 + 1, var3, var4, 300, var5); + this.tryToCatchBlockOnFire(var1, var2 - 1, var3, var4, 300, var5); + this.tryToCatchBlockOnFire(var1, var2, var3 - 1, var4, 100, var5); + this.tryToCatchBlockOnFire(var1, var2, var3 + 1, var4, 200, var5); + this.tryToCatchBlockOnFire(var1, var2, var3, var4 - 1, 300, var5); + this.tryToCatchBlockOnFire(var1, var2, var3, var4 + 1, 300, var5); + + for(int var7 = var2 - 1; var7 <= var2 + 1; ++var7) { + for(int var8 = var4 - 1; var8 <= var4 + 1; ++var8) { + for(int var9 = var3 - 1; var9 <= var3 + 4; ++var9) { + if(var7 != var2 || var9 != var3 || var8 != var4) { + int var10 = 100; + if(var9 > var3 + 1) { + var10 += (var9 - (var3 + 1)) * 100; + } + + int var11 = this.getChanceOfNeighborsEncouragingFire(var1, var7, var9, var8); + if(var11 > 0 && var5.nextInt(var10) <= var11) { + var1.setBlockWithNotify(var7, var9, var8, this.blockID); + } + } + } + } + } + } + + } + } + + private void tryToCatchBlockOnFire(World var1, int var2, int var3, int var4, int var5, Random var6) { + int var7 = this.abilityToCatchFire[var1.getBlockId(var2, var3, var4)]; + if(var6.nextInt(var5) < var7) { + boolean var8 = var1.getBlockId(var2, var3, var4) == Block.tnt.blockID; + if(var6.nextInt(2) == 0) { + var1.setBlockWithNotify(var2, var3, var4, this.blockID); + } else { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + if(var8) { + Block.tnt.onBlockDestroyedByPlayer(var1, var2, var3, var4, 0); + } + } + + } + + private boolean canNeighborCatchFire(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.getBlockId(var2, var3, var4) != 0) { + 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.isBlockNormalCube(var2, var3 - 1, var4) || this.canNeighborCatchFire(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isBlockNormalCube(var2, var3 - 1, var4) && !this.canNeighborCatchFire(var1, var2, var3, var4)) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(!var1.isBlockNormalCube(var2, var3 - 1, var4) && !this.canNeighborCatchFire(var1, var2, var3, var4)) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } else { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + } + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + if(var5.nextInt(24) == 0) { + var1.playSoundEffect((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); + } + + int var6; + float var7; + float var8; + float var9; + if(!var1.isBlockNormalCube(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); + } + } + + } +} diff --git a/source/net/minecraft/src/BlockFlower.java b/source/net/minecraft/src/BlockFlower.java new file mode 100644 index 0000000..8551ad0 --- /dev/null +++ b/source/net/minecraft/src/BlockFlower.java @@ -0,0 +1,58 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFlower extends Block { + protected BlockFlower(int var1, int var2) { + super(var1, Material.plants); + this.blockIndexInTexture = var2; + this.setTickOnLoad(true); + float var3 = 0.2F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, var3 * 3.0F, 0.5F + var3); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return 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)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + return (var1.getBlockLightValue(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/source/net/minecraft/src/BlockFlowing.java b/source/net/minecraft/src/BlockFlowing.java new file mode 100644 index 0000000..7052e0c --- /dev/null +++ b/source/net/minecraft/src/BlockFlowing.java @@ -0,0 +1,253 @@ +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.setBlockAndMetadata(var2, var3, var4, this.blockID + 1, var5); + var1.markBlocksDirty(var2, var3, var4, var2, var3, var4); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + int var6 = this.getFlowDecay(var1, var2, var3, var4); + boolean var7 = true; + int var9; + if(var6 > 0) { + byte var8 = -100; + this.numAdjacentSources = 0; + int var11 = this.getSmallestFlowDecay(var1, var2 - 1, var3, var4, var8); + var11 = this.getSmallestFlowDecay(var1, var2 + 1, var3, var4, var11); + var11 = this.getSmallestFlowDecay(var1, var2, var3, var4 - 1, var11); + var11 = this.getSmallestFlowDecay(var1, var2, var3, var4 + 1, var11); + var9 = var11 + this.fluidType; + if(var9 >= 8 || var11 < 0) { + var9 = -1; + } + + if(this.getFlowDecay(var1, var2, var3 + 1, var4) >= 0) { + int var10 = this.getFlowDecay(var1, var2, var3 + 1, var4); + if(var10 >= 8) { + var9 = var10; + } else { + var9 = var10 + 8; + } + } + + if(this.numAdjacentSources >= 2 && this.blockMaterial == Material.water) { + var9 = 0; + } + + if(this.blockMaterial == Material.lava && var6 < 8 && var9 < 8 && var9 > var6 && var5.nextInt(4) != 0) { + var9 = var6; + var7 = false; + } + + if(var9 != var6) { + var6 = var9; + if(var9 < 0) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, var9); + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + } + } else if(var7) { + this.updateFlow(var1, var2, var3, var4); + } + } else { + this.updateFlow(var1, var2, var3, var4); + } + + if(this.liquidCanDisplaceBlock(var1, var2, var3 - 1, var4)) { + if(var6 >= 8) { + var1.setBlockAndMetadataWithNotify(var2, var3 - 1, var4, this.blockID, var6); + } else { + var1.setBlockAndMetadataWithNotify(var2, var3 - 1, var4, this.blockID, var6 + 8); + } + } else if(var6 >= 0 && (var6 == 0 || this.blockBlocksFlow(var1, var2, var3 - 1, var4))) { + boolean[] var12 = this.getOptimalFlowDirections(var1, var2, var3, var4); + var9 = var6 + this.fluidType; + if(var6 >= 8) { + var9 = 1; + } + + if(var9 >= 8) { + return; + } + + if(var12[0]) { + this.flowIntoBlock(var1, var2 - 1, var3, var4, var9); + } + + if(var12[1]) { + this.flowIntoBlock(var1, var2 + 1, var3, var4, var9); + } + + if(var12[2]) { + this.flowIntoBlock(var1, var2, var3, var4 - 1, var9); + } + + if(var12[3]) { + this.flowIntoBlock(var1, var2, var3, var4 + 1, var9); + } + } + + } + + 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)); + } + } + + var1.setBlockAndMetadataWithNotify(var2, var3, var4, this.blockID, var5); + } + + } + + 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] = 0; + } else { + this.flowCost[var5] = this.calculateFlowCost(var1, var6, var3, var8, 1, var5); + } + } + } + + 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.signStanding.blockID && var5 != Block.ladder.blockID) { + if(var5 == 0) { + return false; + } else { + Material var6 = Block.blocksList[var5].blockMaterial; + return var6.isSolid(); + } + } 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); + } + + } +} diff --git a/source/net/minecraft/src/BlockFluid.java b/source/net/minecraft/src/BlockFluid.java new file mode 100644 index 0000000..cb56215 --- /dev/null +++ b/source/net/minecraft/src/BlockFluid.java @@ -0,0 +1,273 @@ +package net.minecraft.src; + +import java.util.Random; + +public abstract class BlockFluid extends Block { + protected int fluidType = 1; + + protected BlockFluid(int var1, Material var2) { + super(var1, (var2 == Material.lava ? 14 : 12) * 16 + 13, var2); + float var3 = 0.0F; + float var4 = 0.0F; + if(var2 == Material.lava) { + this.fluidType = 2; + } + + this.setBlockBounds(0.0F + var4, 0.0F + var3, 0.0F + var4, 1.0F + var4, 1.0F + var3, 1.0F + var4); + this.setTickOnLoad(true); + } + + public static float getPercentAir(int var0) { + if(var0 >= 8) { + var0 = 0; + } + + float var1 = (float)(var0 + 1) / 9.0F; + return var1; + } + + public int getBlockTextureFromSide(int var1) { + return var1 != 0 && var1 != 1 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture; + } + + protected int getFlowDecay(World var1, int var2, int var3, int var4) { + return var1.getBlockMaterial(var2, var3, var4) != this.blockMaterial ? -1 : var1.getBlockMetadata(var2, var3, var4); + } + + 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 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 : 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) { + return 0; + } + + public int quantityDropped(Random var1) { + return 0; + } + + private Vec3D getFlowVector(IBlockAccess var1, int var2, int var3, int var4) { + Vec3D var5 = Vec3D.createVector(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) { + 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.shouldSideBeRendered(var1, var2, var3, var4 - 1, 2)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2, var3, var4 + 1, 3)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2 - 1, var3, var4, 4)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2 + 1, var3, var4, 5)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2, var3 + 1, var4 - 1, 2)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2, var3 + 1, var4 + 1, 3)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2 - 1, var3 + 1, var4, 4)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(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, Vec3D var6) { + Vec3D var7 = this.getFlowVector(var1, var2, var3, var4); + var6.xCoord += var7.xCoord; + var6.yCoord += var7.yCoord; + var6.zCoord += var7.zCoord; + } + + public int tickRate() { + return this.blockMaterial == Material.water ? 5 : (this.blockMaterial == Material.lava ? 30 : 0); + } + + public float getBlockBrightness(IBlockAccess var1, int var2, int var3, int var4) { + float var5 = var1.getBrightness(var2, var3, var4); + float var6 = var1.getBrightness(var2, var3 + 1, var4); + return var5 > var6 ? var5 : var6; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + super.updateTick(var1, var2, var3, var4, var5); + } + + public int getRenderBlockPass() { + return this.blockMaterial == Material.water ? 1 : 0; + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + if(this.blockMaterial == Material.water && var5.nextInt(64) == 0) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 > 0 && var6 < 8) { + var1.playSoundEffect((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); + } + } + + if(this.blockMaterial == Material.lava && var1.getBlockMaterial(var2, var3 + 1, var4) == Material.air && !var1.isBlockNormalCube(var2, var3 + 1, var4) && var5.nextInt(100) == 0) { + double var12 = (double)((float)var2 + var5.nextFloat()); + double var8 = (double)var3 + this.maxY; + double var10 = (double)((float)var4 + var5.nextFloat()); + var1.spawnParticle("lava", var12, var8, var10, 0.0D, 0.0D, 0.0D); + } + + } + + public static double getFlowDirection(IBlockAccess var0, int var1, int var2, int var3, Material var4) { + Vec3D var5 = null; + if(var4 == Material.water) { + var5 = ((BlockFluid)Block.waterMoving).getFlowVector(var0, var1, var2, var3); + } + + if(var4 == Material.lava) { + var5 = ((BlockFluid)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.setBlockWithNotify(var2, var3, var4, Block.obsidian.blockID); + } else if(var6 <= 4) { + var1.setBlockWithNotify(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); + } + + } +} diff --git a/source/net/minecraft/src/BlockFurnace.java b/source/net/minecraft/src/BlockFurnace.java new file mode 100644 index 0000000..69a78c5 --- /dev/null +++ b/source/net/minecraft/src/BlockFurnace.java @@ -0,0 +1,106 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFurnace extends BlockContainer { + private final boolean isActive; + + protected BlockFurnace(int var1, boolean var2) { + super(var1, Material.rock); + this.isActive = var2; + this.blockIndexInTexture = 45; + } + + 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) { + 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); + } + + public int getBlockTextureGeneric(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(var5 == 1) { + return Block.stone.blockIndexInTexture; + } else if(var5 == 0) { + return Block.stone.blockIndexInTexture; + } else { + int var6 = var1.getBlockMetadata(var2, var3, var4); + return var5 != var6 ? this.blockIndexInTexture : (this.isActive ? this.blockIndexInTexture + 16 : this.blockIndexInTexture - 1); + } + } + + 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 int getBlockTextureFromSide(int var1) { + return var1 == 1 ? Block.stone.blockID : (var1 == 0 ? Block.stone.blockID : (var1 == 3 ? this.blockIndexInTexture - 1 : this.blockIndexInTexture)); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + TileEntityFurnace var6 = (TileEntityFurnace)var1.getBlockTileEntity(var2, var3, var4); + var5.displayGUIFurnace(var6); + 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); + if(var0) { + var1.setBlockWithNotify(var2, var3, var4, Block.stoneOvenActive.blockID); + } else { + var1.setBlockWithNotify(var2, var3, var4, Block.stoneOvenIdle.blockID); + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var5); + var1.setBlockTileEntity(var2, var3, var4, var6); + } + + protected TileEntity getBlockEntity() { + return new TileEntityFurnace(); + } +} diff --git a/source/net/minecraft/src/BlockGears.java b/source/net/minecraft/src/BlockGears.java new file mode 100644 index 0000000..a58762f --- /dev/null +++ b/source/net/minecraft/src/BlockGears.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGears extends Block { + protected BlockGears(int var1, int var2) { + super(var1, var2, Material.circuits); + } + + 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 quantityDropped(Random var1) { + return 1; + } + + public boolean isCollidable() { + return false; + } +} diff --git a/source/net/minecraft/src/BlockGlass.java b/source/net/minecraft/src/BlockGlass.java new file mode 100644 index 0000000..c2672d1 --- /dev/null +++ b/source/net/minecraft/src/BlockGlass.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGlass extends BlockBreakable { + public BlockGlass(int var1, int var2, Material var3, boolean var4) { + super(var1, var2, var3, var4); + } + + public int quantityDropped(Random var1) { + return 0; + } +} diff --git a/source/net/minecraft/src/BlockGrass.java b/source/net/minecraft/src/BlockGrass.java new file mode 100644 index 0000000..f9bff22 --- /dev/null +++ b/source/net/minecraft/src/BlockGrass.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGrass extends Block { + protected BlockGrass(int var1) { + super(var1, Material.ground); + this.blockIndexInTexture = 3; + this.setTickOnLoad(true); + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? 0 : (var1 == 0 ? 2 : 3); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.getBlockLightValue(var2, var3 + 1, var4) < 4 && var1.getBlockMaterial(var2, var3 + 1, var4).getCanBlockGrass()) { + if(var5.nextInt(4) != 0) { + return; + } + + var1.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID); + } else if(var1.getBlockLightValue(var2, var3 + 1, var4) >= 9) { + int var6 = var2 + var5.nextInt(3) - 1; + int var7 = var3 + var5.nextInt(5) - 3; + int var8 = var4 + var5.nextInt(3) - 1; + if(var1.getBlockId(var6, var7, var8) == Block.dirt.blockID && var1.getBlockLightValue(var6, var7 + 1, var8) >= 4 && !var1.getBlockMaterial(var6, var7 + 1, var8).getCanBlockGrass()) { + var1.setBlockWithNotify(var6, var7, var8, Block.grass.blockID); + } + } + + } + + public int idDropped(int var1, Random var2) { + return Block.dirt.idDropped(0, var2); + } +} diff --git a/source/net/minecraft/src/BlockGravel.java b/source/net/minecraft/src/BlockGravel.java new file mode 100644 index 0000000..c0fd641 --- /dev/null +++ b/source/net/minecraft/src/BlockGravel.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGravel extends BlockSand { + public BlockGravel(int var1, int var2) { + super(var1, var2); + } + + public int idDropped(int var1, Random var2) { + return var2.nextInt(10) == 0 ? Item.flint.shiftedIndex : this.blockID; + } +} diff --git a/source/net/minecraft/src/BlockLadder.java b/source/net/minecraft/src/BlockLadder.java new file mode 100644 index 0000000..dfcce6f --- /dev/null +++ b/source/net/minecraft/src/BlockLadder.java @@ -0,0 +1,121 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockLadder extends Block { + protected BlockLadder(int var1, int var2) { + super(var1, var2, Material.circuits); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + float var6 = 2.0F / 16.0F; + if(var5 == 2) { + this.setBlockBounds(0.0F, 0.0F, 1.0F - var6, 1.0F, 1.0F, 1.0F); + } + + if(var5 == 3) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var6); + } + + if(var5 == 4) { + this.setBlockBounds(1.0F - var6, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + if(var5 == 5) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, var6, 1.0F, 1.0F); + } + + return super.getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + float var6 = 2.0F / 16.0F; + if(var5 == 2) { + this.setBlockBounds(0.0F, 0.0F, 1.0F - var6, 1.0F, 1.0F, 1.0F); + } + + if(var5 == 3) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var6); + } + + if(var5 == 4) { + this.setBlockBounds(1.0F - var6, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + if(var5 == 5) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, var6, 1.0F, 1.0F); + } + + return super.getSelectedBoundingBoxFromPool(var1, var2, var3, var4); + } + + 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 void onBlockPlaced(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 == 0 || var5 == 2) && var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var6 = 2; + } + + if((var6 == 0 || var5 == 3) && var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var6 = 3; + } + + if((var6 == 0 || var5 == 4) && var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var6 = 4; + } + + if((var6 == 0 || var5 == 5) && var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var6 = 5; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + } + + 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); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + } + + public int quantityDropped(Random var1) { + return 1; + } +} diff --git a/source/net/minecraft/src/BlockLeaves.java b/source/net/minecraft/src/BlockLeaves.java new file mode 100644 index 0000000..d79b80e --- /dev/null +++ b/source/net/minecraft/src/BlockLeaves.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockLeaves extends BlockLeavesBase { + private int leafTexIndex; + + protected BlockLeaves(int var1, int var2) { + super(var1, var2, Material.leaves, false); + this.leafTexIndex = var2; + this.setTickOnLoad(true); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.getBlockMaterial(var2, var3 - 1, var4).isSolid()) { + byte var6 = 2; + + for(int var7 = var2 - var6; var7 <= var2 + var6; ++var7) { + for(int var8 = var3 - 1; var8 <= var3 + 1; ++var8) { + for(int var9 = var4 - var6; var9 <= var4 + var6; ++var9) { + if(var1.getBlockId(var7, var8, var9) == Block.wood.blockID) { + return; + } + } + } + } + + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } + + public int quantityDropped(Random var1) { + return var1.nextInt(10) == 0 ? 1 : 0; + } + + public int idDropped(int var1, Random var2) { + return Block.sapling.blockID; + } + + public boolean isOpaqueCube() { + return !this.graphicsLevel; + } + + public void setGraphicsLevel(boolean var1) { + this.graphicsLevel = var1; + this.blockIndexInTexture = this.leafTexIndex + (var1 ? 0 : 1); + } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + super.onEntityWalking(var1, var2, var3, var4, var5); + } +} diff --git a/source/net/minecraft/src/BlockLeavesBase.java b/source/net/minecraft/src/BlockLeavesBase.java new file mode 100644 index 0000000..c719d88 --- /dev/null +++ b/source/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, int var2, Material var3, boolean var4) { + super(var1, var2, var3); + this.graphicsLevel = var4; + } + + 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/source/net/minecraft/src/BlockLog.java b/source/net/minecraft/src/BlockLog.java new file mode 100644 index 0000000..357e5a0 --- /dev/null +++ b/source/net/minecraft/src/BlockLog.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockLog extends Block { + protected BlockLog(int var1) { + super(var1, Material.wood); + this.blockIndexInTexture = 20; + } + + public int quantityDropped(Random var1) { + return 1; + } + + public int idDropped(int var1, Random var2) { + return Block.wood.blockID; + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? 21 : (var1 == 0 ? 21 : 20); + } +} diff --git a/source/net/minecraft/src/BlockMinecartTrack.java b/source/net/minecraft/src/BlockMinecartTrack.java new file mode 100644 index 0000000..6566102 --- /dev/null +++ b/source/net/minecraft/src/BlockMinecartTrack.java @@ -0,0 +1,92 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockMinecartTrack extends Block { + protected BlockMinecartTrack(int var1, int var2) { + super(var1, var2, Material.circuits); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F); + } + + 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, Vec3D var5, Vec3D 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 int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return var2 >= 6 ? this.blockIndexInTexture - 16 : this.blockIndexInTexture; + } + + 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.isBlockNormalCube(var2, var3 - 1, var4); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 15); + this.refreshTrackShape(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + boolean var7 = false; + if(!var1.isBlockNormalCube(var2, var3 - 1, var4)) { + var7 = true; + } + + if(var6 == 2 && !var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var7 = true; + } + + if(var6 == 3 && !var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var7 = true; + } + + if(var6 == 4 && !var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var7 = true; + } + + if(var6 == 5 && !var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var7 = true; + } + + if(var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + } + + private void refreshTrackShape(World var1, int var2, int var3, int var4) { + (new MinecartTrackLogic(this, var1, var2, var3, var4)).place(); + } +} diff --git a/source/net/minecraft/src/BlockMobSpawner.java b/source/net/minecraft/src/BlockMobSpawner.java new file mode 100644 index 0000000..b845263 --- /dev/null +++ b/source/net/minecraft/src/BlockMobSpawner.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class BlockMobSpawner extends BlockContainer { + protected BlockMobSpawner(int var1, int var2) { + super(var1, var2, Material.rock); + } + + protected TileEntity getBlockEntity() { + return new TileEntityMobSpawner(); + } + + public boolean isOpaqueCube() { + return false; + } +} diff --git a/source/net/minecraft/src/BlockMushroom.java b/source/net/minecraft/src/BlockMushroom.java new file mode 100644 index 0000000..f129b7b --- /dev/null +++ b/source/net/minecraft/src/BlockMushroom.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class BlockMushroom extends BlockFlower { + protected BlockMushroom(int var1, int var2) { + super(var1, var2); + float var3 = 0.2F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, var3 * 2.0F, 0.5F + var3); + } + + protected boolean canThisPlantGrowOnThisBlockID(int var1) { + return Block.opaqueCubeLookup[var1]; + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + return var1.getBlockLightValue(var2, var3, var4) <= 13 && this.canThisPlantGrowOnThisBlockID(var1.getBlockId(var2, var3 - 1, var4)); + } +} diff --git a/source/net/minecraft/src/BlockObsidian.java b/source/net/minecraft/src/BlockObsidian.java new file mode 100644 index 0000000..c75b227 --- /dev/null +++ b/source/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, int var2) { + super(var1, var2); + } + + public int quantityDropped(Random var1) { + return 1; + } + + public int idDropped(int var1, Random var2) { + return Block.obsidian.blockID; + } +} diff --git a/source/net/minecraft/src/BlockOre.java b/source/net/minecraft/src/BlockOre.java new file mode 100644 index 0000000..a66fd91 --- /dev/null +++ b/source/net/minecraft/src/BlockOre.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockOre extends Block { + public BlockOre(int var1, int var2) { + super(var1, var2, Material.rock); + } + + public int idDropped(int var1, Random var2) { + return this.blockID == Block.oreCoal.blockID ? Item.coal.shiftedIndex : (this.blockID == Block.oreDiamond.blockID ? Item.diamond.shiftedIndex : this.blockID); + } + + public int quantityDropped(Random var1) { + return 1; + } +} diff --git a/source/net/minecraft/src/BlockOreBlock.java b/source/net/minecraft/src/BlockOreBlock.java new file mode 100644 index 0000000..5655234 --- /dev/null +++ b/source/net/minecraft/src/BlockOreBlock.java @@ -0,0 +1,12 @@ +package net.minecraft.src; + +public class BlockOreBlock extends Block { + public BlockOreBlock(int var1, int var2) { + super(var1, Material.iron); + this.blockIndexInTexture = var2; + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? this.blockIndexInTexture - 16 : (var1 == 0 ? this.blockIndexInTexture + 16 : this.blockIndexInTexture); + } +} diff --git a/source/net/minecraft/src/BlockSand.java b/source/net/minecraft/src/BlockSand.java new file mode 100644 index 0000000..451a32e --- /dev/null +++ b/source/net/minecraft/src/BlockSand.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSand extends Block { + public static boolean fallInstantly = false; + + public BlockSand(int var1, int var2) { + super(var1, var2, Material.sand); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + 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) { + EntityFallingSand var8 = new EntityFallingSand(var1, (float)var2 + 0.5F, (float)var3 + 0.5F, (float)var4 + 0.5F, this.blockID); + if(fallInstantly) { + while(!var8.isDead) { + var8.onUpdate(); + } + } else { + var1.spawnEntityInWorld(var8); + } + } + + } + + public int tickRate() { + return 3; + } + + 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; + } + } +} diff --git a/source/net/minecraft/src/BlockSapling.java b/source/net/minecraft/src/BlockSapling.java new file mode 100644 index 0000000..7d13f83 --- /dev/null +++ b/source/net/minecraft/src/BlockSapling.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSapling extends BlockFlower { + protected BlockSapling(int var1, int var2) { + super(var1, var2); + float var3 = 0.4F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, var3 * 2.0F, 0.5F + var3); + } + + 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 && var5.nextInt(5) == 0) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 < 15) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 + 1); + } else { + var1.setBlock(var2, var3, var4, 0); + WorldGenTrees var7 = new WorldGenTrees(); + if(!var7.generate(var1, var5, var2, var3, var4)) { + var1.setBlock(var2, var3, var4, this.blockID); + } + } + } + + } +} diff --git a/source/net/minecraft/src/BlockSign.java b/source/net/minecraft/src/BlockSign.java new file mode 100644 index 0000000..03b8536 --- /dev/null +++ b/source/net/minecraft/src/BlockSign.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSign extends BlockContainer { + private Class signEntityClass; + private int itemDropID; + + protected BlockSign(int var1, Class var2, int var3) { + super(var1, Material.wood); + this.blockIndexInTexture = 4; + this.signEntityClass = var2; + float var4 = 0.25F; + float var5 = 1.625F; + this.setBlockBounds(0.5F - var4, 0.0F, 0.5F - var4, 0.5F + var4, var5, 0.5F + var4); + this.itemDropID = var3; + } + + public int getRenderType() { + return -1; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + protected TileEntity getBlockEntity() { + try { + return (TileEntity)this.signEntityClass.newInstance(); + } catch (Exception var2) { + throw new RuntimeException(var2); + } + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return super.canPlaceBlockAt(var1, var2, var3, var4) && super.canPlaceBlockAt(var1, var2, var3 + 1, var4); + } + + public int idDropped(int var1, Random var2) { + return this.itemDropID; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isBlockNormalCube(var2, var3 - 1, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + } +} diff --git a/source/net/minecraft/src/BlockSponge.java b/source/net/minecraft/src/BlockSponge.java new file mode 100644 index 0000000..d8a441d --- /dev/null +++ b/source/net/minecraft/src/BlockSponge.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +public class BlockSponge extends Block { + protected BlockSponge(int var1) { + super(var1, Material.sponge); + this.blockIndexInTexture = 48; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + byte var5 = 2; + + for(int var6 = var2 - var5; var6 <= var2 + var5; ++var6) { + for(int var7 = var3 - var5; var7 <= var3 + var5; ++var7) { + for(int var8 = var4 - var5; var8 <= var4 + var5; ++var8) { + if(var1.getBlockMaterial(var6, var7, var8) == Material.water) { + } + } + } + } + + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + byte var5 = 2; + + for(int var6 = var2 - var5; var6 <= var2 + var5; ++var6) { + for(int var7 = var3 - var5; var7 <= var3 + var5; ++var7) { + for(int var8 = var4 - var5; var8 <= var4 + var5; ++var8) { + var1.notifyBlocksOfNeighborChange(var6, var7, var8, var1.getBlockId(var6, var7, var8)); + } + } + } + + } +} diff --git a/source/net/minecraft/src/BlockStairs.java b/source/net/minecraft/src/BlockStairs.java new file mode 100644 index 0000000..aec58f7 --- /dev/null +++ b/source/net/minecraft/src/BlockStairs.java @@ -0,0 +1,249 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Random; + +public class BlockStairs extends Block { + private Block modelBlock; + + protected BlockStairs(int var1, Block var2) { + super(var1, var2.blockIndexInTexture, var2.blockMaterial); + this.modelBlock = var2; + this.setHardness(var2.blockHardness); + this.setResistance(var2.blockResistance / 3.0F); + this.setStepSound(var2.stepSound); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 10; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return super.shouldSideBeRendered(var1, var2, var3, var4, var5); + } + + public void getCollidingBoundingBoxes(World var1, int var2, int var3, int var4, AxisAlignedBB var5, ArrayList var6) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + if(var7 == 0) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 0.5F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + } else if(var7 == 1) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 1.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + } else if(var7 == 2) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 0.5F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 1.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + } else if(var7 == 3) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.5F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 0.5F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + } + + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(var1.getBlockMaterial(var2, var3 + 1, var4).isSolid()) { + var1.setBlockWithNotify(var2, var3, var4, this.modelBlock.blockID); + } else { + this.updateState(var1, var2, var3, var4); + this.updateState(var1, var2 + 1, var3 - 1, var4); + this.updateState(var1, var2 - 1, var3 - 1, var4); + this.updateState(var1, var2, var3 - 1, var4 - 1); + this.updateState(var1, var2, var3 - 1, var4 + 1); + this.updateState(var1, var2 + 1, var3 + 1, var4); + this.updateState(var1, var2 - 1, var3 + 1, var4); + this.updateState(var1, var2, var3 + 1, var4 - 1); + this.updateState(var1, var2, var3 + 1, var4 + 1); + } + + this.modelBlock.onNeighborBlockChange(var1, var2, var3, var4, var5); + } + + private void updateState(World var1, int var2, int var3, int var4) { + if(this.isBlockStair(var1, var2, var3, var4)) { + byte var5 = -1; + if(this.isBlockStair(var1, var2 + 1, var3 + 1, var4)) { + var5 = 0; + } + + if(this.isBlockStair(var1, var2 - 1, var3 + 1, var4)) { + var5 = 1; + } + + if(this.isBlockStair(var1, var2, var3 + 1, var4 + 1)) { + var5 = 2; + } + + if(this.isBlockStair(var1, var2, var3 + 1, var4 - 1)) { + var5 = 3; + } + + if(var5 < 0) { + if(this.isBlockSolid(var1, var2 + 1, var3, var4) && !this.isBlockSolid(var1, var2 - 1, var3, var4)) { + var5 = 0; + } + + if(this.isBlockSolid(var1, var2 - 1, var3, var4) && !this.isBlockSolid(var1, var2 + 1, var3, var4)) { + var5 = 1; + } + + if(this.isBlockSolid(var1, var2, var3, var4 + 1) && !this.isBlockSolid(var1, var2, var3, var4 - 1)) { + var5 = 2; + } + + if(this.isBlockSolid(var1, var2, var3, var4 - 1) && !this.isBlockSolid(var1, var2, var3, var4 + 1)) { + var5 = 3; + } + } + + if(var5 < 0) { + if(this.isBlockStair(var1, var2 - 1, var3 - 1, var4)) { + var5 = 0; + } + + if(this.isBlockStair(var1, var2 + 1, var3 - 1, var4)) { + var5 = 1; + } + + if(this.isBlockStair(var1, var2, var3 - 1, var4 - 1)) { + var5 = 2; + } + + if(this.isBlockStair(var1, var2, var3 - 1, var4 + 1)) { + var5 = 3; + } + } + + if(var5 >= 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var5); + } + + } + } + + private boolean isBlockSolid(World var1, int var2, int var3, int var4) { + return var1.getBlockMaterial(var2, var3, var4).isSolid(); + } + + private boolean isBlockStair(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3, var4); + return var5 == 0 ? false : Block.blocksList[var5].getRenderType() == 10; + } + + 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 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 int idDropped(int var1, Random var2) { + return this.modelBlock.idDropped(var1, var2); + } + + public int quantityDropped(Random var1) { + return this.modelBlock.quantityDropped(var1); + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return this.modelBlock.getBlockTextureFromSideAndMetadata(var1, var2); + } + + public int getBlockTextureFromSide(int var1) { + return this.modelBlock.getBlockTextureFromSide(var1); + } + + public int getBlockTextureGeneric(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return this.modelBlock.getBlockTextureGeneric(var1, var2, var3, var4, var5); + } + + public int tickRate() { + return this.modelBlock.tickRate(); + } + + 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, Vec3D 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 onBlockRemoval(World var1, int var2, int var3, int var4) { + this.modelBlock.onBlockRemoval(var1, var2, var3, var4); + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) { + this.modelBlock.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6); + } + + public void dropBlockAsItem(World var1, int var2, int var3, int var4, int var5) { + this.modelBlock.dropBlockAsItem(var1, var2, var3, var4, var5); + } + + 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 blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + return this.modelBlock.blockActivated(var1, var2, var3, var4, var5); + } + + public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4) { + this.modelBlock.onBlockDestroyedByExplosion(var1, var2, var3, var4); + } +} diff --git a/source/net/minecraft/src/BlockStationary.java b/source/net/minecraft/src/BlockStationary.java new file mode 100644 index 0000000..12332ea --- /dev/null +++ b/source/net/minecraft/src/BlockStationary.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class BlockStationary extends BlockFluid { + protected BlockStationary(int var1, Material var2) { + super(var1, var2); + this.setTickOnLoad(false); + } + + 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.updateTick(var1, var2, var3, var4); + } + + } + + private void updateTick(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + var1.editingBlocks = true; + var1.setBlockAndMetadata(var2, var3, var4, this.blockID - 1, var5); + var1.markBlocksDirty(var2, var3, var4, var2, var3, var4); + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID - 1); + var1.editingBlocks = false; + } +} diff --git a/source/net/minecraft/src/BlockStep.java b/source/net/minecraft/src/BlockStep.java new file mode 100644 index 0000000..c9e7fce --- /dev/null +++ b/source/net/minecraft/src/BlockStep.java @@ -0,0 +1,59 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockStep extends Block { + private boolean blockType; + + public BlockStep(int var1, boolean var2) { + super(var1, 6, Material.rock); + this.blockType = var2; + if(!var2) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + } + + this.setLightOpacity(255); + } + + public int getBlockTextureFromSide(int var1) { + return var1 <= 1 ? 6 : 5; + } + + public boolean isOpaqueCube() { + return this.blockType; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(this == Block.stairSingle) { + } + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(this != Block.stairSingle) { + super.onBlockAdded(var1, var2, var3, var4); + } + + int var5 = var1.getBlockId(var2, var3 - 1, var4); + if(var5 == stairSingle.blockID) { + var1.setBlockWithNotify(var2, var3, var4, 0); + var1.setBlockWithNotify(var2, var3 - 1, var4, Block.stairDouble.blockID); + } + + } + + public int idDropped(int var1, Random var2) { + return Block.stairSingle.blockID; + } + + public boolean renderAsNormalBlock() { + return this.blockType; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(this != Block.stairSingle) { + super.shouldSideBeRendered(var1, var2, var3, var4, var5); + } + + return var5 == 1 ? true : (!super.shouldSideBeRendered(var1, var2, var3, var4, var5) ? false : (var5 == 0 ? true : var1.getBlockId(var2, var3, var4) != this.blockID)); + } +} diff --git a/source/net/minecraft/src/BlockStone.java b/source/net/minecraft/src/BlockStone.java new file mode 100644 index 0000000..eae4ecd --- /dev/null +++ b/source/net/minecraft/src/BlockStone.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockStone extends Block { + public BlockStone(int var1, int var2) { + super(var1, var2, Material.rock); + } + + public int idDropped(int var1, Random var2) { + return Block.cobblestone.blockID; + } +} diff --git a/source/net/minecraft/src/BlockTNT.java b/source/net/minecraft/src/BlockTNT.java new file mode 100644 index 0000000..aa103d5 --- /dev/null +++ b/source/net/minecraft/src/BlockTNT.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockTNT extends Block { + public BlockTNT(int var1, int var2) { + super(var1, var2, Material.tnt); + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 0 ? this.blockIndexInTexture + 2 : (var1 == 1 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture); + } + + public int quantityDropped(Random var1) { + return 0; + } + + public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4) { + EntityTNTPrimed var5 = new EntityTNTPrimed(var1, (float)var2 + 0.5F, (float)var3 + 0.5F, (float)var4 + 0.5F); + var5.fuse = var1.rand.nextInt(var5.fuse / 4) + var5.fuse / 8; + var1.spawnEntityInWorld(var5); + } + + public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) { + EntityTNTPrimed var6 = new EntityTNTPrimed(var1, (float)var2 + 0.5F, (float)var3 + 0.5F, (float)var4 + 0.5F); + var1.spawnEntityInWorld(var6); + var1.playSoundAtEntity(var6, "random.fuse", 1.0F, 1.0F); + } +} diff --git a/source/net/minecraft/src/BlockTorch.java b/source/net/minecraft/src/BlockTorch.java new file mode 100644 index 0000000..a099e4a --- /dev/null +++ b/source/net/minecraft/src/BlockTorch.java @@ -0,0 +1,166 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockTorch extends Block { + protected BlockTorch(int var1, int var2) { + super(var1, var2, Material.circuits); + this.setTickOnLoad(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 2; + } + + 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.isBlockNormalCube(var2, var3 - 1, var4)))); + } + + public void onBlockPlaced(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var5 == 1 && var1.isBlockNormalCube(var2, var3 - 1, var4)) { + var6 = 5; + } + + if(var5 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var6 = 4; + } + + if(var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var6 = 3; + } + + if(var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var6 = 2; + } + + if(var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var6 = 1; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + } + + 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.isBlockNormalCube(var2 - 1, var3, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 1); + } else if(var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 2); + } else if(var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 3); + } else if(var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 4); + } else if(var1.isBlockNormalCube(var2, var3 - 1, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 5); + } + + this.dropTorchIfCantStay(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(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.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.isBlockNormalCube(var2, var3 - 1, var4) && var6 == 5) { + var7 = true; + } + + if(var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } + + } + + private boolean dropTorchIfCantStay(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)); + var1.setBlockWithNotify(var2, var3, var4, 0); + return false; + } else { + return true; + } + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3D var5, Vec3D var6) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + 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); + float var7 = (float)var2 + 0.5F; + float var8 = (float)var3 + 0.7F; + float var9 = (float)var4 + 0.5F; + float var10 = 0.22F; + float var11 = 0.27F; + if(var6 == 1) { + var1.spawnParticle("smoke", (double)(var7 - var11), (double)(var8 + var10), (double)var9, 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", (double)(var7 - var11), (double)(var8 + var10), (double)var9, 0.0D, 0.0D, 0.0D); + } else if(var6 == 2) { + var1.spawnParticle("smoke", (double)(var7 + var11), (double)(var8 + var10), (double)var9, 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", (double)(var7 + var11), (double)(var8 + var10), (double)var9, 0.0D, 0.0D, 0.0D); + } else if(var6 == 3) { + var1.spawnParticle("smoke", (double)var7, (double)(var8 + var10), (double)(var9 - var11), 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", (double)var7, (double)(var8 + var10), (double)(var9 - var11), 0.0D, 0.0D, 0.0D); + } else if(var6 == 4) { + var1.spawnParticle("smoke", (double)var7, (double)(var8 + var10), (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", (double)var7, (double)(var8 + var10), (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + } else { + var1.spawnParticle("smoke", (double)var7, (double)var8, (double)var9, 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", (double)var7, (double)var8, (double)var9, 0.0D, 0.0D, 0.0D); + } + + } +} diff --git a/source/net/minecraft/src/BlockWorkbench.java b/source/net/minecraft/src/BlockWorkbench.java new file mode 100644 index 0000000..8b02c5f --- /dev/null +++ b/source/net/minecraft/src/BlockWorkbench.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class BlockWorkbench extends Block { + protected BlockWorkbench(int var1) { + super(var1, Material.wood); + this.blockIndexInTexture = 59; + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? this.blockIndexInTexture - 16 : (var1 == 0 ? Block.planks.getBlockTextureFromSide(0) : (var1 != 2 && var1 != 4 ? this.blockIndexInTexture : this.blockIndexInTexture + 1)); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + var5.displayWorkbenchGUI(); + return true; + } +} diff --git a/source/net/minecraft/src/CanvasCrashReport.java b/source/net/minecraft/src/CanvasCrashReport.java new file mode 100644 index 0000000..caa70c7 --- /dev/null +++ b/source/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/source/net/minecraft/src/CanvasIsomPreview.java b/source/net/minecraft/src/CanvasIsomPreview.java new file mode 100644 index 0000000..d175b90 --- /dev/null +++ b/source/net/minecraft/src/CanvasIsomPreview.java @@ -0,0 +1,378 @@ +package net.minecraft.src; + +import java.awt.Canvas; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferStrategy; +import java.awt.image.ImageObserver; +import java.io.File; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +public class CanvasIsomPreview extends Canvas implements KeyListener, MouseListener, MouseMotionListener, Runnable { + private int currentRender = 0; + private int zoomLevel = 2; + private boolean displayHelpText = true; + private World level; + private File dataFolder = this.getMinecraftDir(); + private boolean running = true; + private List zonesToRender = Collections.synchronizedList(new LinkedList()); + private IsoImageBuffer[][] zoneMap = new IsoImageBuffer[64][64]; + private int translateX; + private int translateY; + private int xPosition; + private int yPosition; + + public File getMinecraftDir() { + if(this.dataFolder == null) { + this.dataFolder = this.getWorkingDirectory("minecraft"); + } + + return this.dataFolder; + } + + public File getWorkingDirectory(String var1) { + String var2 = System.getProperty("user.home", "."); + File var3; + switch(OSMapIsom.osValues[getPlatform().ordinal()]) { + case 1: + case 2: + var3 = new File(var2, '.' + var1 + '/'); + break; + case 3: + String var4 = System.getenv("APPDATA"); + if(var4 != null) { + var3 = new File(var4, "." + var1 + '/'); + } else { + var3 = new File(var2, '.' + var1 + '/'); + } + break; + case 4: + var3 = new File(var2, "Library/Application Support/" + var1); + break; + default: + var3 = new File(var2, var1 + '/'); + } + + if(!var3.exists() && !var3.mkdirs()) { + throw new RuntimeException("The working directory could not be created: " + var3); + } else { + return var3; + } + } + + private static EnumOSIsom getPlatform() { + String var0 = System.getProperty("os.name").toLowerCase(); + return var0.contains("win") ? EnumOSIsom.windows : (var0.contains("mac") ? EnumOSIsom.macos : (var0.contains("solaris") ? EnumOSIsom.solaris : (var0.contains("sunos") ? EnumOSIsom.solaris : (var0.contains("linux") ? EnumOSIsom.linux : (var0.contains("unix") ? EnumOSIsom.linux : EnumOSIsom.unknown))))); + } + + public CanvasIsomPreview() { + for(int var1 = 0; var1 < 64; ++var1) { + for(int var2 = 0; var2 < 64; ++var2) { + this.zoneMap[var1][var2] = new IsoImageBuffer((World)null, var1, var2); + } + } + + this.addMouseListener(this); + this.addMouseMotionListener(this); + this.addKeyListener(this); + this.setFocusable(true); + this.requestFocus(); + this.setBackground(Color.red); + } + + public void loadWorld(String var1) { + this.translateX = this.translateY = 0; + this.level = new WorldIso(this, new File(this.dataFolder, "saves"), var1); + this.level.skylightSubtracted = 0; + List var2 = this.zonesToRender; + synchronized(var2) { + this.zonesToRender.clear(); + + for(int var3 = 0; var3 < 64; ++var3) { + for(int var4 = 0; var4 < 64; ++var4) { + this.zoneMap[var3][var4].setWorldAndChunkPosition(this.level, var3, var4); + } + } + + } + } + + private void setBrightness(int var1) { + List var2 = this.zonesToRender; + synchronized(var2) { + this.level.skylightSubtracted = var1; + this.zonesToRender.clear(); + + for(int var3 = 0; var3 < 64; ++var3) { + for(int var4 = 0; var4 < 64; ++var4) { + this.zoneMap[var3][var4].setWorldAndChunkPosition(this.level, var3, var4); + } + } + + } + } + + public void start() { + (new ThreadRunIsoClient(this)).start(); + + for(int var1 = 0; var1 < 1; ++var1) { + (new Thread(this)).start(); + } + + } + + public void stop() { + this.running = false; + } + + private IsoImageBuffer getZone(int var1, int var2) { + int var3 = var1 & 63; + int var4 = var2 & 63; + IsoImageBuffer var5 = this.zoneMap[var3][var4]; + if(var5.chunkX == var1 && var5.chunkZ == var2) { + return var5; + } else { + List var6 = this.zonesToRender; + synchronized(var6) { + this.zonesToRender.remove(var5); + } + + var5.setChunkPosition(var1, var2); + return var5; + } + } + + public void run() { + TerrainTextureManager var1 = new TerrainTextureManager(); + + while(this.running) { + IsoImageBuffer var2 = null; + List var3 = this.zonesToRender; + synchronized(var3) { + if(this.zonesToRender.size() > 0) { + var2 = (IsoImageBuffer)this.zonesToRender.remove(0); + } + } + + if(var2 != null) { + if(this.currentRender - var2.lastVisible < 2) { + var1.render(var2); + this.repaint(); + } else { + var2.addedToRenderQueue = false; + } + } + + try { + Thread.sleep(2L); + } catch (InterruptedException var5) { + var5.printStackTrace(); + } + } + + } + + public void update(Graphics var1) { + } + + public void paint(Graphics var1) { + } + + public void render() { + BufferStrategy var1 = this.getBufferStrategy(); + if(var1 == null) { + this.createBufferStrategy(2); + } else { + this.render((Graphics2D)var1.getDrawGraphics()); + var1.show(); + } + } + + public void render(Graphics2D var1) { + ++this.currentRender; + AffineTransform var2 = var1.getTransform(); + var1.setClip(0, 0, this.getWidth(), this.getHeight()); + var1.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); + var1.translate(this.getWidth() / 2, this.getHeight() / 2); + var1.scale((double)this.zoomLevel, (double)this.zoomLevel); + var1.translate(this.translateX, this.translateY); + if(this.level != null) { + var1.translate(-(this.level.spawnX + this.level.spawnZ), -(-this.level.spawnX + this.level.spawnZ) + 64); + } + + Rectangle var3 = var1.getClipBounds(); + var1.setColor(new Color(-15724512)); + var1.fillRect(var3.x, var3.y, var3.width, var3.height); + byte var4 = 16; + byte var5 = 3; + int var6 = var3.x / var4 / 2 - 2 - var5; + int var7 = (var3.x + var3.width) / var4 / 2 + 1 + var5; + int var8 = var3.y / var4 - 1 - var5 * 2; + int var9 = (var3.y + var3.height + 16 + 128) / var4 + 1 + var5 * 2; + + int var10; + for(var10 = var8; var10 <= var9; ++var10) { + for(int var11 = var6; var11 <= var7; ++var11) { + int var12 = var11 - (var10 >> 1); + int var13 = var11 + (var10 + 1 >> 1); + IsoImageBuffer var14 = this.getZone(var12, var13); + var14.lastVisible = this.currentRender; + if(!var14.rendered) { + if(!var14.addedToRenderQueue) { + var14.addedToRenderQueue = true; + this.zonesToRender.add(var14); + } + } else { + var14.addedToRenderQueue = false; + if(!var14.noContent) { + int var15 = var11 * var4 * 2 + (var10 & 1) * var4; + int var16 = var10 * var4 - 128 - 16; + var1.drawImage(var14.image, var15, var16, (ImageObserver)null); + } + } + } + } + + if(this.displayHelpText) { + var1.setTransform(var2); + var10 = this.getHeight() - 32 - 4; + var1.setColor(new Color(Integer.MIN_VALUE, true)); + var1.fillRect(4, this.getHeight() - 32 - 4, this.getWidth() - 8, 32); + var1.setColor(Color.WHITE); + String var17 = "F1 - F5: load levels | 0-9: Set time of day | Space: return to spawn | Double click: zoom | Escape: hide this text"; + var1.drawString(var17, this.getWidth() / 2 - var1.getFontMetrics().stringWidth(var17) / 2, var10 + 20); + } + + var1.dispose(); + } + + public void mouseDragged(MouseEvent var1) { + int var2 = var1.getX() / this.zoomLevel; + int var3 = var1.getY() / this.zoomLevel; + this.translateX += var2 - this.xPosition; + this.translateY += var3 - this.yPosition; + this.xPosition = var2; + this.yPosition = var3; + this.repaint(); + } + + public void mouseMoved(MouseEvent var1) { + } + + public void mouseClicked(MouseEvent var1) { + if(var1.getClickCount() == 2) { + this.zoomLevel = 3 - this.zoomLevel; + this.repaint(); + } + + } + + public void mouseEntered(MouseEvent var1) { + } + + public void mouseExited(MouseEvent var1) { + } + + public void mousePressed(MouseEvent var1) { + int var2 = var1.getX() / this.zoomLevel; + int var3 = var1.getY() / this.zoomLevel; + this.xPosition = var2; + this.yPosition = var3; + } + + public void mouseReleased(MouseEvent var1) { + } + + public void keyPressed(KeyEvent var1) { + if(var1.getKeyCode() == 48) { + this.setBrightness(11); + } + + if(var1.getKeyCode() == 49) { + this.setBrightness(10); + } + + if(var1.getKeyCode() == 50) { + this.setBrightness(9); + } + + if(var1.getKeyCode() == 51) { + this.setBrightness(7); + } + + if(var1.getKeyCode() == 52) { + this.setBrightness(6); + } + + if(var1.getKeyCode() == 53) { + this.setBrightness(5); + } + + if(var1.getKeyCode() == 54) { + this.setBrightness(3); + } + + if(var1.getKeyCode() == 55) { + this.setBrightness(2); + } + + if(var1.getKeyCode() == 56) { + this.setBrightness(1); + } + + if(var1.getKeyCode() == 57) { + this.setBrightness(0); + } + + if(var1.getKeyCode() == 112) { + this.loadWorld("World1"); + } + + if(var1.getKeyCode() == 113) { + this.loadWorld("World2"); + } + + if(var1.getKeyCode() == 114) { + this.loadWorld("World3"); + } + + if(var1.getKeyCode() == 115) { + this.loadWorld("World4"); + } + + if(var1.getKeyCode() == 116) { + this.loadWorld("World5"); + } + + if(var1.getKeyCode() == 32) { + this.translateX = this.translateY = 0; + } + + if(var1.getKeyCode() == 27) { + this.displayHelpText = !this.displayHelpText; + } + + this.repaint(); + } + + public void keyReleased(KeyEvent var1) { + } + + public void keyTyped(KeyEvent var1) { + } + + static boolean a(CanvasIsomPreview var0) { + return var0.running; + } +} diff --git a/source/net/minecraft/src/CanvasMinecraftApplet.java b/source/net/minecraft/src/CanvasMinecraftApplet.java new file mode 100644 index 0000000..51f39f3 --- /dev/null +++ b/source/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/source/net/minecraft/src/CanvasMojangLogo.java b/source/net/minecraft/src/CanvasMojangLogo.java new file mode 100644 index 0000000..796b0a3 --- /dev/null +++ b/source/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/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/source/net/minecraft/src/ChatLine.java b/source/net/minecraft/src/ChatLine.java new file mode 100644 index 0000000..98635da --- /dev/null +++ b/source/net/minecraft/src/ChatLine.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class ChatLine { + public String message; + public int updateCounter; + + public ChatLine(String var1) { + this.message = var1; + this.updateCounter = 0; + } +} diff --git a/source/net/minecraft/src/Chunk.java b/source/net/minecraft/src/Chunk.java new file mode 100644 index 0000000..56f534b --- /dev/null +++ b/source/net/minecraft/src/Chunk.java @@ -0,0 +1,473 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Chunk { + public static boolean isLit; + public byte[] blocks; + public boolean isChunkLoaded; + public World worldObj; + public NibbleArray data; + public NibbleArray skylightMap; + public NibbleArray blocklightMap; + public byte[] heightMap; + public int height; + public final int xPosition; + public final int zPosition; + public Map chunkTileEntityMap; + public List[] entities; + public boolean isTerrainPopulated; + public boolean isModified; + public boolean neverSave; + public boolean isChunkRendered; + public boolean hasEntities; + public long lastSaveTime; + + public Chunk(World var1, int var2, int var3) { + this.chunkTileEntityMap = new HashMap(); + this.entities = new List[8]; + this.isTerrainPopulated = false; + this.isModified = false; + this.isChunkRendered = false; + this.hasEntities = false; + this.lastSaveTime = 0L; + this.worldObj = var1; + this.xPosition = var2; + this.zPosition = var3; + this.heightMap = new byte[256]; + + for(int var4 = 0; var4 < this.entities.length; ++var4) { + this.entities[var4] = new ArrayList(); + } + + } + + public Chunk(World var1, byte[] var2, int var3, int var4) { + this(var1, var3, var4); + this.blocks = var2; + this.data = new NibbleArray(var2.length); + this.skylightMap = new NibbleArray(var2.length); + this.blocklightMap = new NibbleArray(var2.length); + } + + 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] & 255; + } + + public void doNothing() { + } + + public void generateHeightMap() { + int var1 = 127; + + int var2; + int var3; + for(var2 = 0; var2 < 16; ++var2) { + for(var3 = 0; var3 < 16; ++var3) { + this.heightMap[var3 << 4 | var2] = -128; + this.relightBlock(var2, 127, var3); + if((this.heightMap[var3 << 4 | var2] & 255) < var1) { + var1 = this.heightMap[var3 << 4 | var2] & 255; + } + } + } + + this.height = var1; + + for(var2 = 0; var2 < 16; ++var2) { + for(var3 = 0; var3 < 16; ++var3) { + this.updateSkylight_do(var2, var3); + } + } + + this.isModified = true; + } + + private void updateSkylight_do(int var1, int var2) { + int var3 = this.getHeightValue(var1, var2); + int var4 = this.xPosition * 16 + var1; + int var5 = this.zPosition * 16 + var2; + this.checkSkylightNeighborHeight(var4 - 1, var5, var3); + this.checkSkylightNeighborHeight(var4 + 1, var5, var3); + this.checkSkylightNeighborHeight(var4, var5 - 1, var3); + this.checkSkylightNeighborHeight(var4, var5 + 1, var3); + } + + private void checkSkylightNeighborHeight(int var1, int var2, int var3) { + int var4 = this.worldObj.getHeightValue(var1, var2); + if(var4 > var3) { + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Sky, var1, var3, var2, var1, var4, var2); + } else if(var4 < var3) { + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Sky, var1, var4, var2, var1, var3, 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 && Block.lightOpacity[this.getBlockID(var1, var5 - 1, var3)] == 0) { + --var5; + } + + if(var5 != var4) { + this.worldObj.markBlockAsNeedsUpdate(var1, var3, var5, var4); + this.heightMap[var3 << 4 | var1] = (byte)var5; + int var6; + int var7; + int var8; + if(var5 < this.height) { + this.height = var5; + } else { + var6 = 127; + + for(var7 = 0; var7 < 16; ++var7) { + for(var8 = 0; var8 < 16; ++var8) { + if((this.heightMap[var8 << 4 | var7] & 255) < var6) { + var6 = this.heightMap[var8 << 4 | var7] & 255; + } + } + } + + this.height = var6; + } + + var6 = this.xPosition * 16 + var1; + var7 = this.zPosition * 16 + var3; + if(var5 < var4) { + for(var8 = var5; var8 < var4; ++var8) { + this.skylightMap.set(var1, var8, var3, 15); + } + } else { + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Sky, var6, var4, var7, var6, var5, var7); + + for(var8 = var4; var8 < var5; ++var8) { + this.skylightMap.set(var1, var8, var3, 0); + } + } + + var8 = 15; + + int var9; + for(var9 = var5; var5 > 0 && var8 > 0; this.skylightMap.set(var1, var5, var3, var8)) { + --var5; + int var10 = Block.lightOpacity[this.getBlockID(var1, var5, var3)]; + if(var10 == 0) { + var10 = 1; + } + + var8 -= var10; + if(var8 < 0) { + var8 = 0; + } + } + + while(var5 > 0 && Block.lightOpacity[this.getBlockID(var1, var5 - 1, var3)] == 0) { + --var5; + } + + if(var5 != var9) { + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Sky, var6 - 1, var5, var7 - 1, var6 + 1, var9, var7 + 1); + } + + this.isModified = true; + } + } + + public int getBlockID(int var1, int var2, int var3) { + return this.blocks[var1 << 11 | var3 << 7 | var2]; + } + + public boolean setBlockIDWithMetadata(int var1, int var2, int var3, int var4, int var5) { + byte var6 = (byte)var4; + int var7 = this.heightMap[var3 << 4 | var1] & 255; + int var8 = this.blocks[var1 << 11 | var3 << 7 | var2] & 255; + if(var8 == var4) { + return false; + } else { + int var9 = this.xPosition * 16 + var1; + int var10 = this.zPosition * 16 + var3; + this.blocks[var1 << 11 | var3 << 7 | var2] = var6; + if(var8 != 0) { + Block.blocksList[var8].onBlockRemoval(this.worldObj, var9, var2, var10); + } + + this.data.set(var1, var2, var3, var5); + if(Block.lightOpacity[var6] != 0) { + if(var2 >= var7) { + this.relightBlock(var1, var2 + 1, var3); + } + } else if(var2 == var7 - 1) { + this.relightBlock(var1, var2, var3); + } + + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Sky, var9, var2, var10, var9, var2, var10); + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Block, var9, var2, var10, var9, var2, var10); + this.updateSkylight_do(var1, var3); + if(var4 != 0) { + Block.blocksList[var4].onBlockAdded(this.worldObj, var9, var2, var10); + } + + this.isModified = true; + return true; + } + } + + public boolean setBlockID(int var1, int var2, int var3, int var4) { + byte var5 = (byte)var4; + int var6 = this.heightMap[var3 << 4 | var1] & 255; + int var7 = this.blocks[var1 << 11 | var3 << 7 | var2] & 255; + if(var7 == var4) { + return false; + } else { + int var8 = this.xPosition * 16 + var1; + int var9 = this.zPosition * 16 + var3; + this.blocks[var1 << 11 | var3 << 7 | var2] = var5; + if(var7 != 0) { + Block.blocksList[var7].onBlockRemoval(this.worldObj, var8, var2, var9); + } + + this.data.set(var1, var2, var3, 0); + if(Block.lightOpacity[var5] != 0) { + if(var2 >= var6) { + this.relightBlock(var1, var2 + 1, var3); + } + } else if(var2 == var6 - 1) { + this.relightBlock(var1, var2, var3); + } + + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Sky, var8, var2, var9, var8, var2, var9); + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Block, var8, var2, var9, var8, var2, var9); + this.updateSkylight_do(var1, var3); + if(var4 != 0) { + Block.blocksList[var4].onBlockAdded(this.worldObj, var8, var2, var9); + } + + this.isModified = true; + return true; + } + } + + public int getBlockMetadata(int var1, int var2, int var3) { + return this.data.get(var1, var2, var3); + } + + public void setBlockMetadata(int var1, int var2, int var3, int var4) { + this.isModified = true; + this.data.set(var1, var2, var3, var4); + } + + public int getSavedLightValue(EnumSkyBlock var1, int var2, int var3, int var4) { + return var1 == EnumSkyBlock.Sky ? this.skylightMap.get(var2, var3, var4) : (var1 == EnumSkyBlock.Block ? this.blocklightMap.get(var2, var3, var4) : 0); + } + + public void setLightValue(EnumSkyBlock var1, int var2, int var3, int var4, int var5) { + this.isModified = true; + if(var1 == EnumSkyBlock.Sky) { + this.skylightMap.set(var2, var3, var4, var5); + } else { + if(var1 != EnumSkyBlock.Block) { + return; + } + + this.blocklightMap.set(var2, var3, var4, var5); + } + + } + + public int getBlockLightValue(int var1, int var2, int var3, int var4) { + int var5 = this.skylightMap.get(var1, var2, var3); + if(var5 > 0) { + isLit = true; + } + + var5 -= var4; + int var6 = this.blocklightMap.get(var1, var2, var3); + if(var6 > var5) { + var5 = var6; + } + + return var5; + } + + 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) { + System.out.println("Wrong location! " + var1); + } + + int var4 = MathHelper.floor_double(var1.posY / 16.0D); + if(var4 < 0) { + var4 = 0; + } + + if(var4 >= this.entities.length) { + var4 = this.entities.length - 1; + } + + this.entities[var4].add(var1); + } + + public void removeEntity(Entity var1) { + this.removeEntityAtIndex(var1, MathHelper.floor_double(var1.posY / 16.0D)); + } + + public void removeEntityAtIndex(Entity var1, int var2) { + if(var2 < 0) { + var2 = 0; + } + + if(var2 >= this.entities.length) { + var2 = this.entities.length - 1; + } + + if(!this.entities[var2].contains(var1)) { + System.out.println("There\'s no such entity to remove: " + var1); + } + + this.entities[var2].remove(var1); + } + + public boolean canBlockSeeTheSky(int var1, int var2, int var3) { + return var2 >= (this.heightMap[var3 << 4 | var1] & 255); + } + + public TileEntity getChunkBlockTileEntity(int var1, int var2, int var3) { + int var4 = var1 + var2 * 1024 + var3 * 1024 * 1024; + TileEntity var5 = (TileEntity)this.chunkTileEntityMap.get(Integer.valueOf(var4)); + if(var5 == null) { + int var6 = this.getBlockID(var1, var2, var3); + BlockContainer var7 = (BlockContainer)Block.blocksList[var6]; + var7.onBlockAdded(this.worldObj, this.xPosition * 16 + var1, var2, this.zPosition * 16 + var3); + var5 = (TileEntity)this.chunkTileEntityMap.get(Integer.valueOf(var4)); + } + + 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); + } + + public void setChunkBlockTileEntity(int var1, int var2, int var3, TileEntity var4) { + int var5 = var1 + var2 * 1024 + var3 * 1024 * 1024; + var4.worldObj = 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 BlockContainer) { + if(this.isChunkLoaded) { + if(this.chunkTileEntityMap.get(Integer.valueOf(var5)) != null) { + this.worldObj.loadedTileEntityList.remove(this.chunkTileEntityMap.get(Integer.valueOf(var5))); + } + + this.worldObj.loadedTileEntityList.add(var4); + } + + this.chunkTileEntityMap.put(Integer.valueOf(var5), var4); + } else { + System.out.println("Attempted to place a tile entity where there was no entity tile!"); + } + } + + public void removeChunkBlockTileEntity(int var1, int var2, int var3) { + int var4 = var1 + var2 * 1024 + var3 * 1024 * 1024; + if(this.isChunkLoaded) { + this.worldObj.loadedTileEntityList.remove(this.chunkTileEntityMap.remove(Integer.valueOf(var4))); + } + + } + + public void onChunkLoad() { + this.isChunkLoaded = true; + this.worldObj.loadedTileEntityList.addAll(this.chunkTileEntityMap.values()); + + for(int var1 = 0; var1 < this.entities.length; ++var1) { + this.worldObj.addLoadedEntities(this.entities[var1]); + } + + } + + public void onChunkUnload() { + this.isChunkLoaded = false; + this.worldObj.loadedTileEntityList.removeAll(this.chunkTileEntityMap.values()); + + for(int var1 = 0; var1 < this.entities.length; ++var1) { + this.worldObj.unloadEntities(this.entities[var1]); + } + + } + + public void setChunkModified() { + this.isModified = true; + } + + public void getEntitiesWithinAABBForEntity(Entity var1, AxisAlignedBB var2, List var3) { + int var4 = MathHelper.floor_double((var2.minY - 2.0D) / 16.0D); + int var5 = MathHelper.floor_double((var2.maxY + 2.0D) / 16.0D); + if(var4 < 0) { + var4 = 0; + } + + if(var5 >= this.entities.length) { + var5 = this.entities.length - 1; + } + + for(int var6 = var4; var6 <= var5; ++var6) { + List var7 = this.entities[var6]; + + for(int var8 = 0; var8 < var7.size(); ++var8) { + Entity var9 = (Entity)var7.get(var8); + if(var9 != var1 && var9.boundingBox.intersectsWith(var2)) { + var3.add(var9); + } + } + } + + } + + public void getEntitiesOfTypeWithinAAAB(Class var1, AxisAlignedBB var2, List var3) { + int var4 = MathHelper.floor_double((var2.minY - 2.0D) / 16.0D); + int var5 = MathHelper.floor_double((var2.maxY + 2.0D) / 16.0D); + if(var4 < 0) { + var4 = 0; + } + + if(var5 >= this.entities.length) { + var5 = this.entities.length - 1; + } + + for(int var6 = var4; var6 <= var5; ++var6) { + List var7 = this.entities[var6]; + + for(int var8 = 0; var8 < var7.size(); ++var8) { + Entity var9 = (Entity)var7.get(var8); + if(var1.isAssignableFrom(var9.getClass()) && var9.boundingBox.intersectsWith(var2)) { + var3.add(var9); + } + } + } + + } + + public boolean needsSaving(boolean var1) { + return this.neverSave ? false : (this.hasEntities && this.worldObj.worldTime != this.lastSaveTime ? true : this.isModified); + } +} diff --git a/source/net/minecraft/src/ChunkCache.java b/source/net/minecraft/src/ChunkCache.java new file mode 100644 index 0000000..8856be6 --- /dev/null +++ b/source/net/minecraft/src/ChunkCache.java @@ -0,0 +1,123 @@ +package net.minecraft.src; + +public class ChunkCache implements IBlockAccess { + private int chunkX; + private int chunkZ; + private Chunk[][] chunkArray; + private World worldObj; + + public ChunkCache(World var1, int var2, int var3, int var4, int var5, int var6, int var7) { + this.worldObj = var1; + this.chunkX = var2 >> 4; + this.chunkZ = var4 >> 4; + int var8 = var5 >> 4; + int var9 = var7 >> 4; + this.chunkArray = new Chunk[var8 - this.chunkX + 1][var9 - this.chunkZ + 1]; + + for(int var10 = this.chunkX; var10 <= var8; ++var10) { + for(int var11 = this.chunkZ; var11 <= var9; ++var11) { + this.chunkArray[var10 - this.chunkX][var11 - this.chunkZ] = var1.getChunkFromChunkCoords(var10, var11); + } + } + + } + + public int getBlockId(int var1, int var2, int var3) { + if(var2 < 0) { + return 0; + } else if(var2 >= 128) { + return 0; + } else { + int var4 = (var1 >> 4) - this.chunkX; + int var5 = (var3 >> 4) - this.chunkZ; + return this.chunkArray[var4][var5].getBlockID(var1 & 15, var2, var3 & 15); + } + } + + 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) { + return World.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 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + int var5; + int var6; + if(var4) { + var5 = this.getBlockId(var1, var2, var3); + if(var5 == Block.stairSingle.blockID || var5 == Block.tilledField.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 >= 128) { + 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 >= 128) { + 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 boolean isBlockNormalCube(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return var4 == null ? false : var4.isOpaqueCube(); + } +} diff --git a/source/net/minecraft/src/ChunkLoader.java b/source/net/minecraft/src/ChunkLoader.java new file mode 100644 index 0000000..4d6af16 --- /dev/null +++ b/source/net/minecraft/src/ChunkLoader.java @@ -0,0 +1,186 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.util.Iterator; + +public class ChunkLoader implements IChunkLoader { + private File saveDir; + private boolean createIfNecessary; + + public ChunkLoader(File var1, boolean var2) { + this.saveDir = var1; + this.createIfNecessary = var2; + } + + private File chunkFileForXZ(int var1, int var2) { + String var3 = "c." + Integer.toString(var1, 36) + "." + Integer.toString(var2, 36) + ".dat"; + String var4 = Integer.toString(var1 & 63, 36); + String var5 = Integer.toString(var2 & 63, 36); + File var6 = new File(this.saveDir, var4); + if(!var6.exists()) { + if(!this.createIfNecessary) { + return null; + } + + var6.mkdir(); + } + + var6 = new File(var6, var5); + if(!var6.exists()) { + if(!this.createIfNecessary) { + return null; + } + + var6.mkdir(); + } + + var6 = new File(var6, var3); + return !var6.exists() && !this.createIfNecessary ? null : var6; + } + + public Chunk loadChunk(World var1, int var2, int var3) { + File var4 = this.chunkFileForXZ(var2, var3); + if(var4 != null && var4.exists()) { + try { + FileInputStream var5 = new FileInputStream(var4); + NBTTagCompound var6 = CompressedStreamTools.readCompressed(var5); + return loadChunkIntoWorldFromCompound(var1, var6.getCompoundTag("Level")); + } catch (Exception var7) { + var7.printStackTrace(); + } + } + + return null; + } + + public void saveChunk(World var1, Chunk var2) { + File var3 = this.chunkFileForXZ(var2.xPosition, var2.zPosition); + if(var3.exists()) { + var1.setSizeOnDisk -= var3.length(); + } + + try { + File var4 = new File(this.saveDir, "tmp_chunk.dat"); + FileOutputStream var5 = new FileOutputStream(var4); + NBTTagCompound var6 = new NBTTagCompound(); + NBTTagCompound var7 = new NBTTagCompound(); + var6.setTag("Level", var7); + this.storeChunkInCompound(var2, var1, var7); + CompressedStreamTools.writeCompressed(var6, var5); + var5.close(); + if(var3.exists()) { + var3.delete(); + } + + var4.renameTo(var3); + var1.setSizeOnDisk += var3.length(); + } catch (Exception var8) { + var8.printStackTrace(); + } + + } + + public void storeChunkInCompound(Chunk var1, World var2, NBTTagCompound var3) { + var3.setInteger("xPos", var1.xPosition); + var3.setInteger("zPos", var1.zPosition); + var3.setLong("LastUpdate", var2.worldTime); + var3.setByteArray("Blocks", var1.blocks); + var3.setByteArray("Data", var1.data.data); + var3.setByteArray("SkyLight", var1.skylightMap.data); + var3.setByteArray("BlockLight", var1.blocklightMap.data); + var3.setByteArray("HeightMap", var1.heightMap); + var3.setBoolean("TerrainPopulated", var1.isTerrainPopulated); + var1.hasEntities = false; + NBTTagList var4 = new NBTTagList(); + + Iterator var6; + NBTTagCompound var8; + for(int var5 = 0; var5 < var1.entities.length; ++var5) { + var6 = var1.entities[var5].iterator(); + + while(var6.hasNext()) { + Entity var7 = (Entity)var6.next(); + var1.hasEntities = true; + var8 = new NBTTagCompound(); + if(var7.addEntityID(var8)) { + var4.setTag(var8); + } + } + } + + var3.setTag("Entities", var4); + NBTTagList var9 = new NBTTagList(); + var6 = var1.chunkTileEntityMap.values().iterator(); + + while(var6.hasNext()) { + TileEntity var10 = (TileEntity)var6.next(); + var8 = new NBTTagCompound(); + var10.writeToNBT(var8); + var9.setTag(var8); + } + + var3.setTag("TileEntities", var9); + } + + public static Chunk loadChunkIntoWorldFromCompound(World var0, NBTTagCompound var1) { + int var2 = var1.getInteger("xPos"); + int var3 = var1.getInteger("zPos"); + Chunk var4 = new Chunk(var0, var2, var3); + var4.blocks = var1.getByteArray("Blocks"); + var4.data = new NibbleArray(var1.getByteArray("Data")); + var4.skylightMap = new NibbleArray(var1.getByteArray("SkyLight")); + var4.blocklightMap = new NibbleArray(var1.getByteArray("BlockLight")); + var4.heightMap = var1.getByteArray("HeightMap"); + var4.isTerrainPopulated = var1.getBoolean("TerrainPopulated"); + if(!var4.data.isValid()) { + var4.data = new NibbleArray(var4.blocks.length); + } + + if(var4.heightMap == null || !var4.skylightMap.isValid()) { + var4.heightMap = new byte[256]; + var4.skylightMap = new NibbleArray(var4.blocks.length); + var4.generateHeightMap(); + } + + if(!var4.blocklightMap.isValid()) { + var4.blocklightMap = new NibbleArray(var4.blocks.length); + var4.doNothing(); + } + + NBTTagList var5 = var1.getTagList("Entities"); + if(var5 != null) { + for(int var6 = 0; var6 < var5.tagCount(); ++var6) { + NBTTagCompound var7 = (NBTTagCompound)var5.tagAt(var6); + Entity var8 = EntityList.createEntityFromNBT(var7, var0); + var4.hasEntities = true; + if(var8 != null) { + var4.addEntity(var8); + } + } + } + + NBTTagList var10 = var1.getTagList("TileEntities"); + if(var10 != null) { + for(int var11 = 0; var11 < var10.tagCount(); ++var11) { + NBTTagCompound var12 = (NBTTagCompound)var10.tagAt(var11); + TileEntity var9 = TileEntity.createAndLoadEntity(var12); + if(var9 != null) { + var4.addTileEntity(var9); + } + } + } + + return var4; + } + + public void chunkTick() { + } + + public void saveExtraData() { + } + + public void saveExtraChunkData(World var1, Chunk var2) { + } +} diff --git a/source/net/minecraft/src/ChunkPosition.java b/source/net/minecraft/src/ChunkPosition.java new file mode 100644 index 0000000..8b19854 --- /dev/null +++ b/source/net/minecraft/src/ChunkPosition.java @@ -0,0 +1,26 @@ +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 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/source/net/minecraft/src/ChunkProviderGenerate.java b/source/net/minecraft/src/ChunkProviderGenerate.java new file mode 100644 index 0000000..5a97630 --- /dev/null +++ b/source/net/minecraft/src/ChunkProviderGenerate.java @@ -0,0 +1,610 @@ +package net.minecraft.src; + +import java.util.Random; + +public class ChunkProviderGenerate implements IChunkProvider { + private Random rand; + private NoiseGeneratorOctaves noiseGen1; + private NoiseGeneratorOctaves noiseGen2; + private NoiseGeneratorOctaves noiseGen3; + private NoiseGeneratorOctaves noiseGen4; + private NoiseGeneratorOctaves noiseGen5; + private NoiseGeneratorOctaves noiseGen6; + private NoiseGeneratorOctaves noiseGen7; + private NoiseGeneratorOctaves mobSpawnerNoise; + private World worldObj; + private double[] noiseArray; + double[] noise3; + double[] noise1; + double[] noise2; + double[] noise6; + double[] noise7; + int[][] unused = new int[32][32]; + + public ChunkProviderGenerate(World var1, long var2) { + this.worldObj = var1; + 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, 4); + this.noiseGen6 = new NoiseGeneratorOctaves(this.rand, 10); + this.noiseGen7 = 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 = 64; + int var6 = var4 + 1; + byte var7 = 17; + int var8 = var4 + 1; + this.noiseArray = this.initializeNoiseField(this.noiseArray, 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.noiseArray[((var9 + 0) * var8 + var10 + 0) * var7 + var11 + 0]; + double var16 = this.noiseArray[((var9 + 0) * var8 + var10 + 1) * var7 + var11 + 0]; + double var18 = this.noiseArray[((var9 + 1) * var8 + var10 + 0) * var7 + var11 + 0]; + double var20 = this.noiseArray[((var9 + 1) * var8 + var10 + 1) * var7 + var11 + 0]; + double var22 = (this.noiseArray[((var9 + 0) * var8 + var10 + 0) * var7 + var11 + 1] - var14) * var12; + double var24 = (this.noiseArray[((var9 + 0) * var8 + var10 + 1) * var7 + var11 + 1] - var16) * var12; + double var26 = (this.noiseArray[((var9 + 1) * var8 + var10 + 0) * var7 + var11 + 1] - var18) * var12; + double var28 = (this.noiseArray[((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.waterStill.blockID; + } + + if(var46 > 0.0D) { + var51 = Block.stone.blockID; + } + + var3[var42] = (byte)var51; + var42 += var43; + var46 += var48; + } + + var33 += var37; + var35 += var39; + } + + var14 += var22; + var16 += var24; + var18 += var26; + var20 += var28; + } + } + } + } + + } + + public void replaceBlocks(int var1, int var2, byte[] var3) { + byte var4 = 64; + + for(int var5 = 0; var5 < 16; ++var5) { + for(int var6 = 0; var6 < 16; ++var6) { + double var7 = (double)(var1 * 16 + var5); + double var9 = (double)(var2 * 16 + var6); + double var11 = 1.0D / 32.0D; + boolean var13 = this.noiseGen4.a(var7 * var11, var9 * var11, 0.0D) + this.rand.nextDouble() * 0.2D > 0.0D; + boolean var14 = this.noiseGen4.a(var9 * var11, 109.0134D, var7 * var11) + this.rand.nextDouble() * 0.2D > 3.0D; + int var15 = (int)(this.noiseGen5.generateNoiseOctaves(var7 * var11 * 2.0D, var9 * var11 * 2.0D) / 3.0D + 3.0D + this.rand.nextDouble() * 0.25D); + int var16 = -1; + int var17 = Block.grass.blockID; + int var18 = Block.dirt.blockID; + int var19 = (var5 * 16 + var6) * 128 + 128; + + for(int var20 = 127; var20 >= 0; --var20) { + --var19; + if(var20 <= 0 + this.rand.nextInt(6) - 1) { + var3[var19] = (byte)Block.bedrock.blockID; + } else if(var3[var19] == 0) { + var16 = -1; + } else if(var3[var19] == Block.stone.blockID) { + if(var16 == -1) { + if(var15 <= 0) { + var17 = 0; + var18 = (byte)Block.stone.blockID; + } else if(var20 >= var4 - 4 && var20 <= var4 + 1) { + var17 = Block.grass.blockID; + var18 = Block.dirt.blockID; + if(var14) { + var17 = 0; + } + + if(var14) { + var18 = Block.gravel.blockID; + } + + if(var13) { + var17 = Block.sand.blockID; + } + + if(var13) { + var18 = Block.sand.blockID; + } + } + + if(var20 < var4 && var17 == 0) { + var17 = Block.waterStill.blockID; + } + + var16 = var15; + if(var20 >= var4 - 1) { + var3[var19] = (byte)var17; + } else { + var3[var19] = (byte)var18; + } + } else if(var16 > 0) { + --var16; + var3[var19] = (byte)var18; + } + } + } + } + } + + } + + public Chunk provideChunk(int var1, int var2) { + this.rand.setSeed((long)var1 * 341873128712L + (long)var2 * 132897987541L); + byte[] var3 = new byte[-Short.MIN_VALUE]; + Chunk var4 = new Chunk(this.worldObj, var3, var1, var2); + this.generateTerrain(var1, var2, var3); + this.replaceBlocks(var1, var2, var3); + this.generateCaves(var1, var2, var3); + var4.generateHeightMap(); + return var4; + } + + protected void generateLargeCaveNode(int var1, int var2, byte[] var3, double var4, double var6, double var8) { + this.generateCaveNode(var1, var2, var3, var4, var6, var8, 1.0F + this.rand.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + } + + protected void generateCaveNode(int var1, int var2, byte[] var3, double var4, double var6, double var8, float var10, float var11, float var12, int var13, int var14, double var15) { + double var17 = (double)(var1 * 16 + 8); + double var19 = (double)(var2 * 16 + 8); + float var21 = 0.0F; + float var22 = 0.0F; + Random var23 = new Random(this.rand.nextLong()); + if(var14 <= 0) { + byte var24 = 112; + var14 = var24 - var23.nextInt(var24 / 4); + } + + boolean var52 = false; + if(var13 == -1) { + var13 = var14 / 2; + var52 = true; + } + + int var25 = var23.nextInt(var14 / 2) + var14 / 4; + + for(boolean var26 = var23.nextInt(6) == 0; var13 < var14; ++var13) { + double var27 = 1.5D + (double)(MathHelper.sin((float)var13 * (float)Math.PI / (float)var14) * var10 * 1.0F); + double var29 = var27 * var15; + float var31 = MathHelper.cos(var12); + float var32 = MathHelper.sin(var12); + var4 += (double)(MathHelper.cos(var11) * var31); + var6 += (double)var32; + var8 += (double)(MathHelper.sin(var11) * var31); + if(var26) { + var12 *= 0.92F; + } else { + var12 *= 0.7F; + } + + var12 += var22 * 0.1F; + var11 += var21 * 0.1F; + var22 *= 0.9F; + var21 *= 12.0F / 16.0F; + var22 += (var23.nextFloat() - var23.nextFloat()) * var23.nextFloat() * 2.0F; + var21 += (var23.nextFloat() - var23.nextFloat()) * var23.nextFloat() * 4.0F; + if(!var52 && var13 == var25 && var10 > 1.0F) { + this.generateCaveNode(var1, var2, var3, var4, var6, var8, var23.nextFloat() * 0.5F + 0.5F, var11 - (float)Math.PI * 0.5F, var12 / 3.0F, var13, var14, 1.0D); + this.generateCaveNode(var1, var2, var3, var4, var6, var8, var23.nextFloat() * 0.5F + 0.5F, var11 + (float)Math.PI * 0.5F, var12 / 3.0F, var13, var14, 1.0D); + return; + } + + if(var52 || var23.nextInt(4) != 0) { + double var33 = var4 - var17; + double var35 = var8 - var19; + double var37 = (double)(var14 - var13); + double var39 = (double)(var10 + 2.0F + 16.0F); + if(var33 * var33 + var35 * var35 - var37 * var37 > var39 * var39) { + return; + } + + if(var4 >= var17 - 16.0D - var27 * 2.0D && var8 >= var19 - 16.0D - var27 * 2.0D && var4 <= var17 + 16.0D + var27 * 2.0D && var8 <= var19 + 16.0D + var27 * 2.0D) { + int var53 = MathHelper.floor_double(var4 - var27) - var1 * 16 - 1; + int var34 = MathHelper.floor_double(var4 + var27) - var1 * 16 + 1; + int var54 = MathHelper.floor_double(var6 - var29) - 1; + int var36 = MathHelper.floor_double(var6 + var29) + 1; + int var55 = MathHelper.floor_double(var8 - var27) - var2 * 16 - 1; + int var38 = MathHelper.floor_double(var8 + var27) - var2 * 16 + 1; + if(var53 < 0) { + var53 = 0; + } + + if(var34 > 16) { + var34 = 16; + } + + if(var54 < 1) { + var54 = 1; + } + + if(var36 > 120) { + var36 = 120; + } + + if(var55 < 0) { + var55 = 0; + } + + if(var38 > 16) { + var38 = 16; + } + + boolean var56 = false; + + int var40; + int var43; + for(var40 = var53; !var56 && var40 < var34; ++var40) { + for(int var41 = var55; !var56 && var41 < var38; ++var41) { + for(int var42 = var36 + 1; !var56 && var42 >= var54 - 1; --var42) { + var43 = (var40 * 16 + var41) * 128 + var42; + if(var42 >= 0 && var42 < 128) { + if(var3[var43] == Block.waterMoving.blockID || var3[var43] == Block.waterStill.blockID) { + var56 = true; + } + + if(var42 != var54 - 1 && var40 != var53 && var40 != var34 - 1 && var41 != var55 && var41 != var38 - 1) { + var42 = var54; + } + } + } + } + } + + if(!var56) { + for(var40 = var53; var40 < var34; ++var40) { + double var57 = ((double)(var40 + var1 * 16) + 0.5D - var4) / var27; + + for(var43 = var55; var43 < var38; ++var43) { + double var44 = ((double)(var43 + var2 * 16) + 0.5D - var8) / var27; + int var46 = (var40 * 16 + var43) * 128 + var36; + boolean var47 = false; + + for(int var48 = var36 - 1; var48 >= var54; --var48) { + double var49 = ((double)var48 + 0.5D - var6) / var29; + if(var49 > -0.7D && var57 * var57 + var49 * var49 + var44 * var44 < 1.0D) { + byte var51 = var3[var46]; + if(var51 == Block.grass.blockID) { + var47 = true; + } + + if(var51 == Block.stone.blockID || var51 == Block.dirt.blockID || var51 == Block.grass.blockID) { + if(var48 < 10) { + var3[var46] = (byte)Block.lavaMoving.blockID; + } else { + var3[var46] = 0; + if(var47 && var3[var46 - 1] == Block.dirt.blockID) { + var3[var46 - 1] = (byte)Block.grass.blockID; + } + } + } + } + + --var46; + } + } + } + + if(var52) { + break; + } + } + } + } + } + + } + + private void generateCaves(int var1, int var2, byte[] var3) { + byte var4 = 8; + this.rand.setSeed(this.worldObj.randomSeed); + long var5 = this.rand.nextLong() / 2L * 2L + 1L; + long var7 = this.rand.nextLong() / 2L * 2L + 1L; + + for(int var9 = var1 - var4; var9 <= var1 + var4; ++var9) { + for(int var10 = var2 - var4; var10 <= var2 + var4; ++var10) { + this.rand.setSeed((long)var9 * var5 + (long)var10 * var7 ^ this.worldObj.randomSeed); + int var11 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(40) + 1) + 1); + if(this.rand.nextInt(15) != 0) { + var11 = 0; + } + + for(int var12 = 0; var12 < var11; ++var12) { + double var13 = (double)(var9 * 16 + this.rand.nextInt(16)); + double var15 = (double)this.rand.nextInt(this.rand.nextInt(120) + 8); + double var17 = (double)(var10 * 16 + this.rand.nextInt(16)); + int var19 = 1; + if(this.rand.nextInt(4) == 0) { + this.generateLargeCaveNode(var1, var2, var3, var13, var15, var17); + var19 += this.rand.nextInt(4); + } + + for(int var20 = 0; var20 < var19; ++var20) { + float var21 = this.rand.nextFloat() * (float)Math.PI * 2.0F; + float var22 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F; + float var23 = this.rand.nextFloat() * 2.0F + this.rand.nextFloat(); + this.generateCaveNode(var1, var2, var3, var13, var15, var17, var23, var21, var22, 0, 0, 1.0D); + } + } + } + } + + } + + 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.noise6 = this.noiseGen6.a(this.noise6, var2, var3, var4, var5, 1, var7, 1.0D, 0.0D, 1.0D); + this.noise7 = this.noiseGen7.a(this.noise7, var2, var3, var4, var5, 1, var7, 100.0D, 0.0D, 100.0D); + this.noise3 = this.noiseGen3.a(this.noise3, var2, var3, var4, var5, var6, var7, var8 / 80.0D, var10 / 160.0D, var8 / 80.0D); + this.noise1 = this.noiseGen1.a(this.noise1, var2, var3, var4, var5, var6, var7, var8, var10, var8); + this.noise2 = this.noiseGen2.a(this.noise2, 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.noise6[var13] + 256.0D) / 512.0D; + if(var16 > 1.0D) { + var16 = 1.0D; + } + + double var18 = 0.0D; + double var20 = this.noise7[var13] / 8000.0D; + if(var20 < 0.0D) { + var20 = -var20; + } + + var20 = var20 * 3.0D - 3.0D; + if(var20 < 0.0D) { + var20 /= 2.0D; + if(var20 < -1.0D) { + var20 = -1.0D; + } + + var20 /= 1.4D; + var20 /= 2.0D; + var16 = 0.0D; + } else { + if(var20 > 1.0D) { + var20 = 1.0D; + } + + var20 /= 6.0D; + } + + var16 += 0.5D; + var20 = var20 * (double)var6 / 16.0D; + double var22 = (double)var6 / 2.0D + var20 * 4.0D; + ++var13; + + for(int var24 = 0; var24 < var6; ++var24) { + double var25 = 0.0D; + double var27 = ((double)var24 - var22) * 12.0D / var16; + if(var27 < 0.0D) { + var27 *= 4.0D; + } + + double var29 = this.noise1[var12] / 512.0D; + double var31 = this.noise2[var12] / 512.0D; + double var33 = (this.noise3[var12] / 10.0D + 1.0D) / 2.0D; + if(var33 < 0.0D) { + var25 = var29; + } else if(var33 > 1.0D) { + var25 = var31; + } else { + var25 = var29 + (var31 - var29) * var33; + } + + var25 -= var27; + double var35; + if(var24 > var6 - 4) { + var35 = (double)((float)(var24 - (var6 - 4)) / 3.0F); + var25 = var25 * (1.0D - var35) + -10.0D * var35; + } + + if((double)var24 < var18) { + var35 = (var18 - (double)var24) / 4.0D; + if(var35 < 0.0D) { + var35 = 0.0D; + } + + if(var35 > 1.0D) { + var35 = 1.0D; + } + + var25 = var25 * (1.0D - var35) + -10.0D * var35; + } + + var1[var12] = var25; + ++var12; + } + } + } + + return var1; + } + + 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; + this.rand.setSeed(this.worldObj.randomSeed); + long var6 = this.rand.nextLong() / 2L * 2L + 1L; + long var8 = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed((long)var2 * var6 + (long)var3 * var8 ^ this.worldObj.randomSeed); + double var10 = 0.25D; + + int var12; + int var13; + int var14; + int var15; + for(var12 = 0; var12 < 4; ++var12) { + var13 = var4 + this.rand.nextInt(16) + 8; + var14 = this.rand.nextInt(128); + var15 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenDungeons()).generate(this.worldObj, this.rand, var13, var14, var15); + } + + for(var12 = 0; var12 < 20; ++var12) { + var13 = var4 + this.rand.nextInt(16); + var14 = this.rand.nextInt(128); + var15 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.dirt.blockID, 32)).generate(this.worldObj, this.rand, var13, var14, var15); + } + + for(var12 = 0; var12 < 10; ++var12) { + var13 = var4 + this.rand.nextInt(16); + var14 = this.rand.nextInt(128); + var15 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.gravel.blockID, 32)).generate(this.worldObj, this.rand, var13, var14, var15); + } + + for(var12 = 0; var12 < 20; ++var12) { + var13 = var4 + this.rand.nextInt(16); + var14 = this.rand.nextInt(128); + var15 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.oreCoal.blockID, 16)).generate(this.worldObj, this.rand, var13, var14, var15); + } + + for(var12 = 0; var12 < 20; ++var12) { + var13 = var4 + this.rand.nextInt(16); + var14 = this.rand.nextInt(64); + var15 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.oreIron.blockID, 8)).generate(this.worldObj, this.rand, var13, var14, var15); + } + + if(this.rand.nextInt(1) == 0) { + var12 = var4 + this.rand.nextInt(16); + var13 = this.rand.nextInt(32); + var14 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.oreGold.blockID, 8)).generate(this.worldObj, this.rand, var12, var13, var14); + } + + if(this.rand.nextInt(4) == 0) { + var12 = var4 + this.rand.nextInt(16); + var13 = this.rand.nextInt(16); + var14 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.oreDiamond.blockID, 8)).generate(this.worldObj, this.rand, var12, var13, var14); + } + + var10 = 0.5D; + var12 = (int)((this.mobSpawnerNoise.generateNoiseOctaves((double)var4 * var10, (double)var5 * var10) / 8.0D + this.rand.nextDouble() * 4.0D + 4.0D) / 3.0D); + if(var12 < 0) { + var12 = 0; + } + + WorldGenTrees var18 = new WorldGenTrees(); + if(this.rand.nextInt(10) == 0) { + ++var12; + } + + int var16; + for(var14 = 0; var14 < var12; ++var14) { + var15 = var4 + this.rand.nextInt(16) + 8; + var16 = var5 + this.rand.nextInt(16) + 8; + var18.setScale(1.0D, 1.0D, 1.0D); + var18.generate(this.worldObj, this.rand, var15, this.worldObj.getHeightValue(var15, var16), var16); + } + + int var17; + for(var14 = 0; var14 < 2; ++var14) { + var15 = var4 + this.rand.nextInt(16) + 8; + var16 = this.rand.nextInt(128); + var17 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.plantYellow.blockID)).generate(this.worldObj, this.rand, var15, var16, var17); + } + + if(this.rand.nextInt(2) == 0) { + var14 = var4 + this.rand.nextInt(16) + 8; + var15 = this.rand.nextInt(128); + var16 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.plantRed.blockID)).generate(this.worldObj, this.rand, var14, var15, var16); + } + + if(this.rand.nextInt(4) == 0) { + var14 = var4 + this.rand.nextInt(16) + 8; + var15 = this.rand.nextInt(128); + var16 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomBrown.blockID)).generate(this.worldObj, this.rand, var14, var15, var16); + } + + if(this.rand.nextInt(8) == 0) { + var14 = var4 + this.rand.nextInt(16) + 8; + var15 = this.rand.nextInt(128); + var16 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomRed.blockID)).generate(this.worldObj, this.rand, var14, var15, var16); + } + + for(var14 = 0; var14 < 50; ++var14) { + var15 = var4 + this.rand.nextInt(16) + 8; + var16 = this.rand.nextInt(this.rand.nextInt(120) + 8); + var17 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenLiquids(Block.waterMoving.blockID)).generate(this.worldObj, this.rand, var15, var16, var17); + } + + for(var14 = 0; var14 < 20; ++var14) { + var15 = var4 + this.rand.nextInt(16) + 8; + var16 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(112) + 8) + 8); + var17 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenLiquids(Block.lavaMoving.blockID)).generate(this.worldObj, this.rand, var15, var16, var17); + } + + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + return true; + } + + public boolean unload100OldestChunks() { + return false; + } + + public boolean canSave() { + return true; + } +} diff --git a/source/net/minecraft/src/ChunkProviderIso.java b/source/net/minecraft/src/ChunkProviderIso.java new file mode 100644 index 0000000..ca7a076 --- /dev/null +++ b/source/net/minecraft/src/ChunkProviderIso.java @@ -0,0 +1,66 @@ +package net.minecraft.src; + +import java.io.IOException; + +public class ChunkProviderIso implements IChunkProvider { + private Chunk[] chunks = new Chunk[256]; + private World worldObj; + private IChunkLoader chunkLoader; + byte[] blocks = new byte[-Short.MIN_VALUE]; + + public ChunkProviderIso(World var1, IChunkLoader var2) { + this.worldObj = var1; + this.chunkLoader = var2; + } + + public boolean chunkExists(int var1, int var2) { + int var3 = var1 & 15 | (var2 & 15) * 16; + return this.chunks[var3] != null && this.chunks[var3].isAtLocation(var1, var2); + } + + public Chunk provideChunk(int var1, int var2) { + int var3 = var1 & 15 | (var2 & 15) * 16; + + try { + if(!this.chunkExists(var1, var2)) { + Chunk var4 = this.getChunkAt(var1, var2); + if(var4 == null) { + var4 = new Chunk(this.worldObj, this.blocks, var1, var2); + var4.isChunkRendered = true; + var4.neverSave = true; + } + + this.chunks[var3] = var4; + } + + return this.chunks[var3]; + } catch (Exception var5) { + var5.printStackTrace(); + return null; + } + } + + private synchronized Chunk getChunkAt(int var1, int var2) { + try { + return this.chunkLoader.loadChunk(this.worldObj, var1, var2); + } catch (IOException var4) { + var4.printStackTrace(); + return null; + } + } + + public void populate(IChunkProvider var1, int var2, int var3) { + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + return true; + } + + public boolean unload100OldestChunks() { + return false; + } + + public boolean canSave() { + return false; + } +} diff --git a/source/net/minecraft/src/ChunkProviderLoadOrGenerate.java b/source/net/minecraft/src/ChunkProviderLoadOrGenerate.java new file mode 100644 index 0000000..b4aff3d --- /dev/null +++ b/source/net/minecraft/src/ChunkProviderLoadOrGenerate.java @@ -0,0 +1,203 @@ +package net.minecraft.src; + +import java.io.IOException; + +public class ChunkProviderLoadOrGenerate implements IChunkProvider { + private Chunk blankChunk; + private IChunkProvider chunkProvider; + private IChunkLoader chunkLoader; + private Chunk[] chunks = new Chunk[1024]; + private World worldObj; + int lastQueriedChunkXPos = -999999999; + int lastQueriedChunkZPos = -999999999; + private Chunk lastQueriedChunk; + + public ChunkProviderLoadOrGenerate(World var1, IChunkLoader var2, IChunkProvider var3) { + this.blankChunk = new Chunk(var1, new byte[-Short.MIN_VALUE], 0, 0); + this.blankChunk.isChunkRendered = true; + this.blankChunk.neverSave = true; + this.worldObj = var1; + this.chunkLoader = var2; + this.chunkProvider = var3; + } + + public boolean chunkExists(int var1, int var2) { + if(var1 == this.lastQueriedChunkXPos && var2 == this.lastQueriedChunkZPos && this.lastQueriedChunk != null) { + return true; + } else { + int var3 = var1 & 31; + int var4 = var2 & 31; + int var5 = var3 + var4 * 32; + return this.chunks[var5] != null && (this.chunks[var5] == this.blankChunk || this.chunks[var5].isAtLocation(var1, var2)); + } + } + + public Chunk provideChunk(int var1, int var2) { + if(var1 == this.lastQueriedChunkXPos && var2 == this.lastQueriedChunkZPos && this.lastQueriedChunk != null) { + return this.lastQueriedChunk; + } else { + int var3 = var1 & 31; + int var4 = var2 & 31; + int var5 = var3 + var4 * 32; + if(!this.chunkExists(var1, var2)) { + BlockSand.fallInstantly = true; + if(this.chunks[var5] != null) { + this.chunks[var5].onChunkUnload(); + this.saveChunk(this.chunks[var5]); + this.saveExtraChunkData(this.chunks[var5]); + } + + Chunk var6 = this.getChunkAt(var1, var2); + if(var6 == null) { + if(this.chunkProvider == null) { + var6 = this.blankChunk; + } else { + var6 = this.chunkProvider.provideChunk(var1, var2); + } + } + + this.chunks[var5] = var6; + if(this.chunks[var5] != null) { + this.chunks[var5].onChunkLoad(); + } + + if(!this.chunks[var5].isTerrainPopulated && this.chunkExists(var1 + 1, var2 + 1) && this.chunkExists(var1, var2 + 1) && this.chunkExists(var1 + 1, var2)) { + this.populate(this, var1, var2); + } + + if(this.chunkExists(var1 - 1, var2) && !this.provideChunk(var1 - 1, var2).isTerrainPopulated && this.chunkExists(var1 - 1, var2 + 1) && this.chunkExists(var1, var2 + 1) && this.chunkExists(var1 - 1, var2)) { + this.populate(this, var1 - 1, var2); + } + + if(this.chunkExists(var1, var2 - 1) && !this.provideChunk(var1, var2 - 1).isTerrainPopulated && this.chunkExists(var1 + 1, var2 - 1) && this.chunkExists(var1, var2 - 1) && this.chunkExists(var1 + 1, var2)) { + this.populate(this, var1, var2 - 1); + } + + if(this.chunkExists(var1 - 1, var2 - 1) && !this.provideChunk(var1 - 1, var2 - 1).isTerrainPopulated && this.chunkExists(var1 - 1, var2 - 1) && this.chunkExists(var1, var2 - 1) && this.chunkExists(var1 - 1, var2)) { + this.populate(this, var1 - 1, var2 - 1); + } + + BlockSand.fallInstantly = false; + } + + this.lastQueriedChunkXPos = var1; + this.lastQueriedChunkZPos = var2; + this.lastQueriedChunk = this.chunks[var5]; + return this.chunks[var5]; + } + } + + private Chunk getChunkAt(int var1, int var2) { + if(this.chunkLoader == null) { + return null; + } else { + try { + Chunk var3 = this.chunkLoader.loadChunk(this.worldObj, var1, var2); + if(var3 != null) { + var3.lastSaveTime = this.worldObj.worldTime; + } + + return var3; + } catch (Exception var4) { + var4.printStackTrace(); + return null; + } + } + } + + private void saveExtraChunkData(Chunk var1) { + if(this.chunkLoader != null) { + try { + this.chunkLoader.saveExtraChunkData(this.worldObj, var1); + } catch (Exception var3) { + var3.printStackTrace(); + } + + } + } + + private void saveChunk(Chunk var1) { + if(this.chunkLoader != null) { + try { + var1.lastSaveTime = this.worldObj.worldTime; + this.chunkLoader.saveChunk(this.worldObj, var1); + } catch (IOException var3) { + var3.printStackTrace(); + } + + } + } + + public void populate(IChunkProvider var1, int var2, int var3) { + Chunk var4 = this.provideChunk(var2, var3); + if(!var4.isTerrainPopulated) { + var4.isTerrainPopulated = true; + if(this.chunkProvider != null) { + this.chunkProvider.populate(var1, var2, var3); + var4.setChunkModified(); + } + } + + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + int var3 = 0; + int var4 = 0; + int var5; + if(var2 != null) { + for(var5 = 0; var5 < this.chunks.length; ++var5) { + if(this.chunks[var5] != null && this.chunks[var5].needsSaving(var1)) { + ++var4; + } + } + } + + var5 = 0; + + for(int var6 = 0; var6 < this.chunks.length; ++var6) { + if(this.chunks[var6] != null) { + if(var1 && !this.chunks[var6].neverSave) { + this.saveExtraChunkData(this.chunks[var6]); + } + + if(this.chunks[var6].needsSaving(var1)) { + this.saveChunk(this.chunks[var6]); + this.chunks[var6].isModified = false; + ++var3; + if(var3 == 2 && !var1) { + return false; + } + + if(var2 != null) { + ++var5; + if(var5 % 10 == 0) { + var2.setLoadingProgress(var5 * 100 / var4); + } + } + } + } + } + + if(var1) { + if(this.chunkLoader == null) { + return true; + } + + this.chunkLoader.saveExtraData(); + } + + return true; + } + + public boolean unload100OldestChunks() { + if(this.chunkLoader != null) { + this.chunkLoader.chunkTick(); + } + + return this.chunkProvider.unload100OldestChunks(); + } + + public boolean canSave() { + return true; + } +} diff --git a/source/net/minecraft/src/ClippingHelper.java b/source/net/minecraft/src/ClippingHelper.java new file mode 100644 index 0000000..df283be --- /dev/null +++ b/source/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/source/net/minecraft/src/ClippingHelperImplementation.java b/source/net/minecraft/src/ClippingHelperImplementation.java new file mode 100644 index 0000000..8bf16a5 --- /dev/null +++ b/source/net/minecraft/src/ClippingHelperImplementation.java @@ -0,0 +1,82 @@ +package net.minecraft.src; + +import java.nio.FloatBuffer; +import org.lwjgl.opengl.GL11; + +public class ClippingHelperImplementation extends ClippingHelper { + private static ClippingHelperImplementation instance = new ClippingHelperImplementation(); + private FloatBuffer projectionMatrixBuffer = GLAllocation.createFloatBuffer(16); + private FloatBuffer modelviewMatrixBuffer = GLAllocation.createFloatBuffer(16); + private FloatBuffer floatBuffer = GLAllocation.createFloatBuffer(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.floatBuffer.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/source/net/minecraft/src/CompressedStreamTools.java b/source/net/minecraft/src/CompressedStreamTools.java new file mode 100644 index 0000000..025017f --- /dev/null +++ b/source/net/minecraft/src/CompressedStreamTools.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; +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 GZIPInputStream(var0)); + + NBTTagCompound var2; + try { + var2 = read(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, var2); + } finally { + var2.close(); + } + + } + + 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/source/net/minecraft/src/CraftingManager.java b/source/net/minecraft/src/CraftingManager.java new file mode 100644 index 0000000..21ff2e3 --- /dev/null +++ b/source/net/minecraft/src/CraftingManager.java @@ -0,0 +1,107 @@ +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()).addRecipe(this); + (new RecipesIngots()).addRecipes(this); + (new RecipesFood()).addRecipes(this); + (new RecipesCrafting()).addRecipes(this); + (new RecipesArmor()).addRecipes(this); + 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.stairSingle, 3), new Object[]{"###", Character.valueOf('#'), Block.cobblestone}); + this.addRecipe(new ItemStack(Block.ladder, 1), new Object[]{"# #", "###", "# #", Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Item.door, 1), new Object[]{"##", "##", "##", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Item.sign, 1), new Object[]{"###", "###", " X ", Character.valueOf('#'), Block.planks, Character.valueOf('X'), Item.stick}); + this.addRecipe(new ItemStack(Block.planks, 4), new Object[]{"#", Character.valueOf('#'), Block.wood}); + this.addRecipe(new ItemStack(Item.stick, 4), new Object[]{"#", "#", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Block.torch, 4), new Object[]{"X", "#", Character.valueOf('X'), Item.coal, Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Item.bowlEmpty, 4), new Object[]{"# #", " # ", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Block.minecartTrack, 16), new Object[]{"X X", "X#X", "X X", Character.valueOf('X'), Item.ingotIron, Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Item.minecart, 1), new Object[]{"# #", "###", Character.valueOf('#'), Item.ingotIron}); + this.addRecipe(new ItemStack(Item.bucketEmpty, 1), new Object[]{"# #", " # ", Character.valueOf('#'), Item.ingotIron}); + this.addRecipe(new ItemStack(Item.striker, 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.stairCompactWood, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Block.stairCompactStone, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), Block.cobblestone}); + this.addRecipe(new ItemStack(Item.painting, 1), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Item.stick, Character.valueOf('X'), Block.cloth}); + this.addRecipe(new ItemStack(Item.appleGold, 1), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Block.blockGold, Character.valueOf('X'), Item.appleRed}); + Collections.sort(this.recipes, new RecipeSorter(this)); + System.out.println(this.recipes.size() + " recipes"); + } + + void 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; + int var15; + for(var12 = new HashMap(); var4 < var2.length; var4 += 2) { + Character var13 = (Character)var2[var4]; + var15 = 0; + if(var2[var4 + 1] instanceof Item) { + var15 = ((Item)var2[var4 + 1]).shiftedIndex; + } else if(var2[var4 + 1] instanceof Block) { + var15 = ((Block)var2[var4 + 1]).blockID; + } + + var12.put(var13, Integer.valueOf(var15)); + } + + int[] var14 = new int[var5 * var6]; + + for(var15 = 0; var15 < var5 * var6; ++var15) { + char var10 = var3.charAt(var15); + if(var12.containsKey(Character.valueOf(var10))) { + var14[var15] = ((Integer)var12.get(Character.valueOf(var10))).intValue(); + } else { + var14[var15] = -1; + } + } + + this.recipes.add(new CraftingRecipe(var5, var6, var14, var1)); + } + + public ItemStack findMatchingRecipe(int[] var1) { + for(int var2 = 0; var2 < this.recipes.size(); ++var2) { + CraftingRecipe var3 = (CraftingRecipe)this.recipes.get(var2); + if(var3.matchRecipe(var1)) { + return var3.createResult(var1); + } + } + + return null; + } +} diff --git a/source/net/minecraft/src/CraftingRecipe.java b/source/net/minecraft/src/CraftingRecipe.java new file mode 100644 index 0000000..37b74c6 --- /dev/null +++ b/source/net/minecraft/src/CraftingRecipe.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +public class CraftingRecipe { + private int width; + private int height; + private int[] ingredientMap; + private ItemStack resultStack; + public final int resultId; + + public CraftingRecipe(int var1, int var2, int[] var3, ItemStack var4) { + this.resultId = var4.itemID; + this.width = var1; + this.height = var2; + this.ingredientMap = var3; + this.resultStack = var4; + } + + public boolean matchRecipe(int[] var1) { + for(int var2 = 0; var2 <= 3 - this.width; ++var2) { + for(int var3 = 0; var3 <= 3 - this.height; ++var3) { + if(this.checkMatch(var1, var2, var3, true)) { + return true; + } + + if(this.checkMatch(var1, var2, var3, false)) { + return true; + } + } + } + + return false; + } + + private boolean checkMatch(int[] 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; + int var9 = -1; + if(var7 >= 0 && var8 >= 0 && var7 < this.width && var8 < this.height) { + if(var4) { + var9 = this.ingredientMap[this.width - var7 - 1 + var8 * this.width]; + } else { + var9 = this.ingredientMap[var7 + var8 * this.width]; + } + } + + if(var1[var5 + var6 * 3] != var9) { + return false; + } + } + } + + return true; + } + + public ItemStack createResult(int[] var1) { + return new ItemStack(this.resultStack.itemID, this.resultStack.stackSize); + } + + public int getRecipeSize() { + return this.width * this.height; + } +} diff --git a/source/net/minecraft/src/EffectRenderer.java b/source/net/minecraft/src/EffectRenderer.java new file mode 100644 index 0000000..8b30d9b --- /dev/null +++ b/source/net/minecraft/src/EffectRenderer.java @@ -0,0 +1,162 @@ +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[3]; + 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 < 3; ++var3) { + this.fxLayers[var3] = new ArrayList(); + } + + } + + public void addEffect(EntityFX var1) { + int var2 = var1.getFXLayer(); + this.fxLayers[var2].add(var1); + } + + public void updateEffects() { + for(int var1 = 0; var1 < 3; ++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 = MathHelper.cos(var1.rotationYaw * (float)Math.PI / 180.0F); + float var4 = MathHelper.sin(var1.rotationYaw * (float)Math.PI / 180.0F); + float var5 = -var4 * MathHelper.sin(var1.rotationPitch * (float)Math.PI / 180.0F); + float var6 = var3 * MathHelper.sin(var1.rotationPitch * (float)Math.PI / 180.0F); + float var7 = MathHelper.cos(var1.rotationPitch * (float)Math.PI / 180.0F); + 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 < 2; ++var8) { + if(this.fxLayers[var8].size() != 0) { + int var9 = 0; + if(var8 == 0) { + var9 = this.renderer.getTexture("/particles.png"); + } + + if(var8 == 1) { + var9 = this.renderer.getTexture("/terrain.png"); + } + + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var9); + Tessellator var10 = Tessellator.instance; + var10.startDrawingQuads(); + + for(int var11 = 0; var11 < this.fxLayers[var8].size(); ++var11) { + EntityFX var12 = (EntityFX)this.fxLayers[var8].get(var11); + var12.renderParticle(var10, var2, var3, var7, var4, var5, var6); + } + + var10.draw(); + } + } + + } + + public void renderLitParticles(Entity var1, float var2) { + byte var3 = 2; + if(this.fxLayers[var3].size() != 0) { + Tessellator var4 = Tessellator.instance; + + for(int var5 = 0; var5 < this.fxLayers[var3].size(); ++var5) { + EntityFX var6 = (EntityFX)this.fxLayers[var3].get(var5); + var6.renderParticle(var4, var2, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F); + } + + } + } + + public void clearEffects(World var1) { + this.worldObj = var1; + + for(int var2 = 0; var2 < 3; ++var2) { + this.fxLayers[var2].clear(); + } + + } + + public void addBlockDestroyEffects(int var1, int var2, int var3) { + int var4 = this.worldObj.getBlockId(var1, var2, var3); + if(var4 != 0) { + Block var5 = Block.blocksList[var4]; + byte var6 = 4; + + for(int var7 = 0; var7 < var6; ++var7) { + for(int var8 = 0; var8 < var6; ++var8) { + for(int var9 = 0; var9 < var6; ++var9) { + double var10 = (double)var1 + ((double)var7 + 0.5D) / (double)var6; + double var12 = (double)var2 + ((double)var8 + 0.5D) / (double)var6; + double var14 = (double)var3 + ((double)var9 + 0.5D) / (double)var6; + this.addEffect(new EntityDiggingFX(this.worldObj, var10, var12, var14, var10 - (double)var1 - 0.5D, var12 - (double)var2 - 0.5D, var14 - (double)var3 - 0.5D, var5)); + } + } + } + + } + } + + 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.maxX - var6.minX - (double)(var7 * 2.0F)) + (double)var7 + var6.minX; + double var10 = (double)var2 + this.rand.nextDouble() * (var6.maxY - var6.minY - (double)(var7 * 2.0F)) + (double)var7 + var6.minY; + double var12 = (double)var3 + this.rand.nextDouble() * (var6.maxZ - var6.minZ - (double)(var7 * 2.0F)) + (double)var7 + var6.minZ; + if(var4 == 0) { + var10 = (double)var2 + var6.minY - (double)var7; + } + + if(var4 == 1) { + var10 = (double)var2 + var6.maxY + (double)var7; + } + + if(var4 == 2) { + var12 = (double)var3 + var6.minZ - (double)var7; + } + + if(var4 == 3) { + var12 = (double)var3 + var6.maxZ + (double)var7; + } + + if(var4 == 4) { + var8 = (double)var1 + var6.minX - (double)var7; + } + + if(var4 == 5) { + var8 = (double)var1 + var6.maxX + (double)var7; + } + + this.addEffect((new EntityDiggingFX(this.worldObj, var8, var10, var12, 0.0D, 0.0D, 0.0D, var6)).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/source/net/minecraft/src/Entity.java b/source/net/minecraft/src/Entity.java new file mode 100644 index 0000000..64fc4ce --- /dev/null +++ b/source/net/minecraft/src/Entity.java @@ -0,0 +1,728 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public abstract class Entity { + public boolean preventEntitySpawning = false; + public Entity riddenByEntity; + public Entity ridingEntity; + protected 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 = false; + public boolean isCollided = false; + public boolean surfaceCollision = 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; + protected boolean canTriggerWalking = true; + protected 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; + public boolean unusedBool = false; + protected Random rand = new Random(); + public int ticksExisted = 0; + public int fireResistance = 1; + public int fire = 0; + protected int maxAir = 300; + protected boolean inWater = false; + public int heartsLife = 0; + public int air = 300; + private boolean isFirstUpdate = true; + public String skinUrl; + private double entityRiderPitchDelta; + private double entityRiderYawDelta; + + public Entity(World var1) { + this.worldObj = var1; + this.setPosition(0.0D, 0.0D, 0.0D); + } + + 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).size() == 0) { + break; + } + + ++this.posY; + } + + this.motionX = this.motionY = this.motionZ = 0.0D; + this.rotationPitch = 0.0F; + } + } + + public void setEntityDead() { + this.isDead = true; + } + + protected void setSize(float var1, float var2) { + this.width = var1; + this.height = var2; + } + + protected void setRotation(float var1, float var2) { + this.rotationYaw = var1; + this.rotationPitch = var2; + } + + 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 / 2.0F; + this.boundingBox.setBounds(var1 - (double)var7, var3 - (double)var8, var5 - (double)var7, var1 + (double)var7, var3 + (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() { + if(this.ridingEntity != null && this.ridingEntity.isDead) { + this.ridingEntity = null; + } + + ++this.ticksExisted; + this.prevDistanceWalkedModified = this.distanceWalkedModified; + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.prevRotationPitch = this.rotationPitch; + this.prevRotationYaw = this.rotationYaw; + if(this.handleWaterMovement()) { + if(!this.inWater && !this.isFirstUpdate) { + 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.worldObj.playSoundAtEntity(this, "random.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; + } + + if(this.fire > 0) { + if(this.fire % 20 == 0) { + this.attackEntityFrom((Entity)null, 1); + } + + --this.fire; + } + + if(this.handleLavaMovement()) { + this.attackEntityFrom((Entity)null, 10); + this.fire = 600; + } + + if(this.posY < -64.0D) { + this.kill(); + } + + this.isFirstUpdate = false; + } + + protected void kill() { + this.setEntityDead(); + } + + 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.size() > 0 ? false : !this.worldObj.getIsAnyLiquid(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 { + double var7 = this.posX; + double var9 = this.posZ; + double var11 = var1; + double var13 = var3; + double var15 = var5; + AxisAlignedBB var17 = this.boundingBox.copy(); + List var18 = this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.addCoord(var1, var3, var5)); + + for(int var19 = 0; var19 < var18.size(); ++var19) { + var3 = ((AxisAlignedBB)var18.get(var19)).calculateYOffset(this.boundingBox, var3); + } + + this.boundingBox.offset(0.0D, var3, 0.0D); + if(!this.surfaceCollision && var13 != var3) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + boolean var29 = this.onGround || var13 != var3 && var13 < 0.0D; + + int var20; + for(var20 = 0; var20 < var18.size(); ++var20) { + var1 = ((AxisAlignedBB)var18.get(var20)).calculateXOffset(this.boundingBox, var1); + } + + this.boundingBox.offset(var1, 0.0D, 0.0D); + if(!this.surfaceCollision && var11 != var1) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + for(var20 = 0; var20 < var18.size(); ++var20) { + var5 = ((AxisAlignedBB)var18.get(var20)).calculateZOffset(this.boundingBox, var5); + } + + this.boundingBox.offset(0.0D, 0.0D, var5); + if(!this.surfaceCollision && var15 != var5) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + double var22; + int var27; + double var30; + if(this.stepHeight > 0.0F && var29 && this.ySize < 0.05F && (var11 != var1 || var15 != var5)) { + var30 = var1; + var22 = var3; + double var24 = var5; + var1 = var11; + var3 = (double)this.stepHeight; + var5 = var15; + AxisAlignedBB var26 = this.boundingBox.copy(); + this.boundingBox.setBB(var17); + var18 = this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.addCoord(var11, var3, var15)); + + for(var27 = 0; var27 < var18.size(); ++var27) { + var3 = ((AxisAlignedBB)var18.get(var27)).calculateYOffset(this.boundingBox, var3); + } + + this.boundingBox.offset(0.0D, var3, 0.0D); + if(!this.surfaceCollision && var13 != var3) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + for(var27 = 0; var27 < var18.size(); ++var27) { + var1 = ((AxisAlignedBB)var18.get(var27)).calculateXOffset(this.boundingBox, var1); + } + + this.boundingBox.offset(var1, 0.0D, 0.0D); + if(!this.surfaceCollision && var11 != var1) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + for(var27 = 0; var27 < var18.size(); ++var27) { + var5 = ((AxisAlignedBB)var18.get(var27)).calculateZOffset(this.boundingBox, var5); + } + + this.boundingBox.offset(0.0D, 0.0D, var5); + if(!this.surfaceCollision && var15 != var5) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + if(var30 * var30 + var24 * var24 >= var1 * var1 + var5 * var5) { + var1 = var30; + var3 = var22; + var5 = var24; + this.boundingBox.setBB(var26); + } else { + this.ySize = (float)((double)this.ySize + 0.5D); + } + } + + 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 = var11 != var1 || var15 != var5; + this.onGround = var13 != var3 && var13 < 0.0D; + this.isCollided = this.isCollidedHorizontally || var13 != var3; + if(this.onGround) { + if(this.fallDistance > 0.0F) { + this.fall(this.fallDistance); + this.fallDistance = 0.0F; + } + } else if(var3 < 0.0D) { + this.fallDistance = (float)((double)this.fallDistance - var3); + } + + if(var11 != var1) { + this.motionX = 0.0D; + } + + if(var13 != var3) { + this.motionY = 0.0D; + } + + if(var15 != var5) { + this.motionZ = 0.0D; + } + + var30 = this.posX - var7; + var22 = this.posZ - var9; + this.distanceWalkedModified = (float)((double)this.distanceWalkedModified + (double)MathHelper.sqrt_double(var30 * var30 + var22 * var22) * 0.6D); + if(this.canTriggerWalking) { + int var31 = MathHelper.floor_double(this.posX); + int var25 = MathHelper.floor_double(this.posY - (double)0.2F - (double)this.yOffset); + int var33 = MathHelper.floor_double(this.posZ); + var27 = this.worldObj.getBlockId(var31, var25, var33); + if(this.distanceWalkedModified > (float)this.nextStepDistance && var27 > 0) { + ++this.nextStepDistance; + StepSound var28 = Block.blocksList[var27].stepSound; + if(!Block.blocksList[var27].blockMaterial.getIsLiquid()) { + this.worldObj.playSoundAtEntity(this, var28.getStepSound(), var28.getVolume() * 0.15F, var28.getPitch()); + } + + Block.blocksList[var27].onEntityWalking(this.worldObj, var31, var25, var33, this); + } + } + + this.ySize *= 0.4F; + boolean var32 = this.handleWaterMovement(); + if(this.worldObj.isBoundingBoxBurning(this.boundingBox)) { + this.dealFireDamage(1); + if(!var32) { + ++this.fire; + if(this.fire == 0) { + this.fire = 300; + } + } + } else if(this.fire <= 0) { + this.fire = -this.fireResistance; + } + + if(var32 && this.fire > 0) { + this.worldObj.playSoundAtEntity(this, "random.fizz", 0.7F, 1.6F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.4F); + this.fire = -this.fireResistance; + } + + } + } + + public AxisAlignedBB getBoundingBox() { + return null; + } + + protected void dealFireDamage(int var1) { + this.attackEntityFrom((Entity)null, var1); + } + + protected void fall(float var1) { + } + + public boolean handleWaterMovement() { + return this.worldObj.handleMaterialAcceleration(this.boundingBox.expand(0.0D, (double)-0.4F, 0.0D), Material.water, this); + } + + 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.getPercentAir(this.worldObj.getBlockMetadata(var4, var5, var6)) - 1.0F / 9.0F; + float var9 = (float)(var5 + 1) - var8; + return var2 < (double)var9; + } else { + return false; + } + } + + protected float getEyeHeight() { + return 0.0F; + } + + public boolean handleLavaMovement() { + return this.worldObj.isMaterialInBB(this.boundingBox.expand(0.0D, (double)-0.4F, 0.0D), Material.lava); + } + + public void moveFlying(float var1, float var2, float var3) { + float var4 = MathHelper.sqrt_float(var1 * var1 + var2 * var2); + if(var4 >= 0.01F) { + 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 float getEntityBrightness(float var1) { + int var2 = MathHelper.floor_double(this.posX); + double var3 = (this.boundingBox.maxY - this.boundingBox.minY) * 0.66D; + int var5 = MathHelper.floor_double(this.posY - (double)this.yOffset + var3); + int var6 = MathHelper.floor_double(this.posZ); + return this.worldObj.getBrightness(var2, var5, var6); + } + + 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 + (double)this.yOffset; + 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) { + 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; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + return false; + } + + public boolean canBeCollidedWith() { + return false; + } + + public boolean canBePushed() { + return false; + } + + public void addToPlayerScore(Entity var1, int var2) { + } + + public boolean isInRangeToRenderVec3D(Vec3D 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; + return var1 < var3 * var3; + } + + public String getTexture() { + return null; + } + + public boolean addEntityID(NBTTagCompound var1) { + String var2 = this.getEntityString(); + if(!this.isDead && var2 != null) { + var1.setString("id", var2); + this.writeToNBT(var1); + return true; + } else { + return false; + } + } + + public void writeToNBT(NBTTagCompound var1) { + var1.setTag("Pos", this.newDoubleNBTList(new double[]{this.posX, this.posY, 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.air); + var1.setBoolean("OnGround", this.onGround); + this.writeEntityToNBT(var1); + } + + public void readFromNBT(NBTTagCompound var1) { + NBTTagList var2 = var1.getTagList("Pos"); + NBTTagList var3 = var1.getTagList("Motion"); + NBTTagList var4 = var1.getTagList("Rotation"); + this.setPosition(0.0D, 0.0D, 0.0D); + this.motionX = ((NBTTagDouble)var3.tagAt(0)).doubleValue; + this.motionY = ((NBTTagDouble)var3.tagAt(1)).doubleValue; + this.motionZ = ((NBTTagDouble)var3.tagAt(2)).doubleValue; + this.prevPosX = this.lastTickPosX = this.posX = ((NBTTagDouble)var2.tagAt(0)).doubleValue; + this.prevPosY = this.lastTickPosY = this.posY = ((NBTTagDouble)var2.tagAt(1)).doubleValue; + this.prevPosZ = this.lastTickPosZ = this.posZ = ((NBTTagDouble)var2.tagAt(2)).doubleValue; + this.prevRotationYaw = this.rotationYaw = ((NBTTagFloat)var4.tagAt(0)).floatValue; + this.prevRotationPitch = this.rotationPitch = ((NBTTagFloat)var4.tagAt(1)).floatValue; + this.fallDistance = var1.getFloat("FallDistance"); + this.fire = var1.getShort("Fire"); + this.air = var1.getShort("Air"); + this.onGround = var1.getBoolean("OnGround"); + this.setPosition(this.posX, this.posY, this.posZ); + this.readEntityFromNBT(var1); + } + + 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.setTag(new NBTTagDouble(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.setTag(new NBTTagFloat(var6)); + } + + return var2; + } + + public EntityItem dropItem(int var1, int var2) { + return this.entityDropItem(var1, var2, 0.0F); + } + + public EntityItem entityDropItem(int var1, int var2, float var3) { + EntityItem var4 = new EntityItem(this.worldObj, this.posX, this.posY + (double)var3, this.posZ, new ItemStack(var1, var2)); + var4.delayBeforeCanPickup = 10; + this.worldObj.spawnEntityInWorld(var4); + return var4; + } + + public boolean isEntityAlive() { + return !this.isDead; + } + + public boolean isEntityInsideOpaqueBlock() { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.posY + (double)this.getEyeHeight()); + int var3 = MathHelper.floor_double(this.posZ); + return this.worldObj.isBlockNormalCube(var1, var2, var3); + } + + 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(); + this.setPosition(this.ridingEntity.posX, this.ridingEntity.posY + (double)this.yOffset + this.ridingEntity.getYOffset(), this.ridingEntity.posZ); + 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 double getYOffset() { + return (double)this.height * 0.75D; + } + + public void mountEntity(Entity var1) { + this.entityRiderPitchDelta = 0.0D; + this.entityRiderYawDelta = 0.0D; + if(this.ridingEntity == var1) { + this.ridingEntity.riddenByEntity = null; + this.ridingEntity = null; + } else { + if(this.ridingEntity != null) { + this.ridingEntity.riddenByEntity = null; + } + + if(var1.riddenByEntity != null) { + var1.riddenByEntity.ridingEntity = null; + } + + this.ridingEntity = var1; + var1.riddenByEntity = this; + } + } +} diff --git a/source/net/minecraft/src/EntityAnimal.java b/source/net/minecraft/src/EntityAnimal.java new file mode 100644 index 0000000..ebf27f5 --- /dev/null +++ b/source/net/minecraft/src/EntityAnimal.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +public abstract class EntityAnimal extends EntityCreature { + public EntityAnimal(World var1) { + super(var1); + } + + protected float getBlockPathWeight(int var1, int var2, int var3) { + return this.worldObj.getBlockId(var1, var2 - 1, var3) == Block.grass.blockID ? 10.0F : this.worldObj.getBrightness(var1, var2, var3) - 0.5F; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + public boolean getCanSpawnHere(double var1, double var3, double var5) { + return this.worldObj.getBlockLightValue(MathHelper.floor_double(var1), MathHelper.floor_double(var3), MathHelper.floor_double(var5)) > 8 && super.getCanSpawnHere(var1, var3, var5); + } +} diff --git a/source/net/minecraft/src/EntityArrow.java b/source/net/minecraft/src/EntityArrow.java new file mode 100644 index 0000000..2417a82 --- /dev/null +++ b/source/net/minecraft/src/EntityArrow.java @@ -0,0 +1,217 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityArrow extends Entity { + private int xTile = -1; + private int yTile = -1; + private int zTile = -1; + private int inTile = 0; + private boolean inGround = false; + public int arrowShake = 0; + private EntityLiving shootingEntity; + private int ticksInGround; + private int ticksInAir = 0; + + public EntityArrow(World var1) { + super(var1); + this.setSize(0.5F, 0.5F); + } + + public EntityArrow(World var1, EntityLiving var2) { + super(var1); + this.shootingEntity = var2; + this.setSize(0.5F, 0.5F); + this.setPositionAndRotation(var2.posX, var2.posY, 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.setArrowHeading(this.motionX, this.motionY, this.motionZ, 1.5F, 1.0F); + } + + public void setArrowHeading(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 onUpdate() { + super.onUpdate(); + if(this.arrowShake > 0) { + --this.arrowShake; + } + + 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.setEntityDead(); + } + + return; + } + + this.inGround = false; + this.motionX *= (double)(this.rand.nextFloat() * 0.2F); + this.motionY *= (double)(this.rand.nextFloat() * 0.2F); + this.motionZ *= (double)(this.rand.nextFloat() * 0.2F); + this.ticksInGround = 0; + this.ticksInAir = 0; + } else { + ++this.ticksInAir; + } + + Vec3D var15 = Vec3D.createVector(this.posX, this.posY, this.posZ); + Vec3D var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + MovingObjectPosition var3 = this.worldObj.rayTraceBlocks(var15, var2); + var15 = Vec3D.createVector(this.posX, this.posY, this.posZ); + var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + if(var3 != null) { + var2 = Vec3D.createVector(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; + + float var10; + for(int var8 = 0; var8 < var5.size(); ++var8) { + Entity var9 = (Entity)var5.get(var8); + if(var9.canBeCollidedWith() && (var9 != this.shootingEntity || this.ticksInAir >= 5)) { + 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); + } + + float var16; + if(var3 != null) { + if(var3.entityHit != null) { + if(var3.entityHit.attackEntityFrom(this.shootingEntity, 4)) { + this.worldObj.playSoundAtEntity(this, "random.drr", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.setEntityDead(); + } 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 = var3.blockX; + this.yTile = var3.blockY; + this.zTile = var3.blockZ; + this.inTile = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); + this.motionX = (double)((float)(var3.hitVec.xCoord - this.posX)); + this.motionY = (double)((float)(var3.hitVec.yCoord - this.posY)); + this.motionZ = (double)((float)(var3.hitVec.zCoord - this.posZ)); + var16 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / (double)var16 * (double)0.05F; + this.posY -= this.motionY / (double)var16 * (double)0.05F; + this.posZ -= this.motionZ / (double)var16 * (double)0.05F; + this.worldObj.playSoundAtEntity(this, "random.drr", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.inGround = true; + this.arrowShake = 7; + } + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + var16 = 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)var16) * 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 var17 = 0.99F; + var10 = 0.03F; + if(this.handleWaterMovement()) { + 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 *= (double)var17; + this.motionY *= (double)var17; + this.motionZ *= (double)var17; + this.motionY -= (double)var10; + 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.arrowShake); + 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.arrowShake = var1.getByte("shake") & 255; + this.inGround = var1.getByte("inGround") == 1; + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(this.inGround && this.shootingEntity == var1 && this.arrowShake <= 0 && var1.inventory.addItemStackToInventory(new ItemStack(Item.arrow.shiftedIndex, 1))) { + this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + var1.onItemPickup(this); + this.setEntityDead(); + } + + } +} diff --git a/source/net/minecraft/src/EntityBubbleFX.java b/source/net/minecraft/src/EntityBubbleFX.java new file mode 100644 index 0000000..e36404b --- /dev/null +++ b/source/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.particleTextureIndex = 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.setEntityDead(); + } + + if(this.particleMaxAge-- <= 0) { + this.setEntityDead(); + } + + } +} diff --git a/source/net/minecraft/src/EntityCreature.java b/source/net/minecraft/src/EntityCreature.java new file mode 100644 index 0000000..db340ed --- /dev/null +++ b/source/net/minecraft/src/EntityCreature.java @@ -0,0 +1,125 @@ +package net.minecraft.src; + +public class EntityCreature extends EntityLiving { + private PathEntity pathToEntity; + protected Entity playerToAttack; + protected boolean hasAttacked = false; + + public EntityCreature(World var1) { + super(var1); + } + + protected boolean canEntityBeSeen(Entity var1) { + return this.worldObj.rayTraceBlocks(Vec3D.createVector(this.posX, this.posY + (double)this.getEyeHeight(), this.posZ), Vec3D.createVector(var1.posX, var1.posY + (double)var1.getEyeHeight(), var1.posZ)) == null; + } + + protected void updatePlayerActionState() { + this.hasAttacked = false; + float var1 = 16.0F; + if(this.playerToAttack == null) { + this.playerToAttack = this.findPlayerToAttack(); + if(this.playerToAttack != null) { + this.pathToEntity = this.worldObj.getPathToEntity(this, this.playerToAttack, var1); + } + } else if(!this.playerToAttack.isEntityAlive()) { + this.playerToAttack = null; + } else { + float var2 = this.playerToAttack.getDistanceToEntity(this); + if(this.canEntityBeSeen(this.playerToAttack)) { + this.attackEntity(this.playerToAttack, var2); + } + } + + int var19; + if(this.hasAttacked || this.playerToAttack == null || this.pathToEntity != null && this.rand.nextInt(20) != 0) { + if(this.pathToEntity == null || this.rand.nextInt(100) == 0) { + var19 = -1; + int var3 = -1; + int var4 = -1; + float var5 = -99999.0F; + + for(int var6 = 0; var6 < 50; ++var6) { + int var7 = MathHelper.floor_double(this.posX + (double)this.rand.nextInt(11) - 5.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(11) - 5.0D); + float var10 = this.getBlockPathWeight(var7, var8, var9); + if(var10 > var5) { + var5 = var10; + var19 = var7; + var3 = var8; + var4 = var9; + } + } + + if(var19 > 0) { + this.pathToEntity = this.worldObj.getEntityPathToXYZ(this, var19, var3, var4, var1); + } + } + } else { + this.pathToEntity = this.worldObj.getPathToEntity(this, this.playerToAttack, var1); + } + + var19 = MathHelper.floor_double(this.boundingBox.minY); + boolean var20 = this.handleWaterMovement(); + boolean var21 = this.handleLavaMovement(); + if(this.pathToEntity != null && this.rand.nextInt(100) != 0) { + Vec3D var22 = this.pathToEntity.getPosition(this); + float var23 = this.width * 2.0F; + + while(var22 != null && var22.squareDistanceTo(this.posX, this.posY, this.posZ) < (double)(var23 * var23) && var22.yCoord <= (double)var19) { + this.pathToEntity.incrementPathIndex(); + if(this.pathToEntity.isFinished()) { + var22 = null; + this.pathToEntity = null; + } else { + var22 = this.pathToEntity.getPosition(this); + } + } + + this.isJumping = false; + if(var22 != null) { + double var24 = var22.xCoord - this.posX; + double var25 = var22.zCoord - this.posZ; + double var11 = var22.yCoord - (double)var19; + this.rotationYaw = (float)(Math.atan2(var25, var24) * 180.0D / (double)((float)Math.PI)) - 90.0F; + this.moveForward = this.moveSpeed; + if(this.hasAttacked && this.playerToAttack != null) { + double var13 = this.playerToAttack.posX - this.posX; + double var15 = this.playerToAttack.posZ - this.posZ; + float var17 = this.rotationYaw; + this.rotationYaw = (float)(Math.atan2(var15, var13) * 180.0D / (double)((float)Math.PI)) - 90.0F; + float var18 = (var17 - this.rotationYaw + 90.0F) * (float)Math.PI / 180.0F; + this.moveStrafing = -MathHelper.sin(var18) * this.moveForward * 1.0F; + this.moveForward = MathHelper.cos(var18) * this.moveForward * 1.0F; + } + + if(var11 != 0.0D) { + this.isJumping = true; + } + } + + if(this.rand.nextFloat() < 0.8F && (var20 || var21)) { + this.isJumping = true; + } + + } else { + super.updatePlayerActionState(); + this.pathToEntity = null; + } + } + + protected void attackEntity(Entity var1, float var2) { + } + + protected float getBlockPathWeight(int var1, int var2, int var3) { + return 0.0F; + } + + protected Entity findPlayerToAttack() { + return null; + } + + public boolean getCanSpawnHere(double var1, double var3, double var5) { + return super.getCanSpawnHere(var1, var3, var5) && this.getBlockPathWeight((int)var1, (int)var3, (int)var5) >= 0.0F; + } +} diff --git a/source/net/minecraft/src/EntityCreeper.java b/source/net/minecraft/src/EntityCreeper.java new file mode 100644 index 0000000..28dfe5f --- /dev/null +++ b/source/net/minecraft/src/EntityCreeper.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +public class EntityCreeper extends EntityMonster { + int timeSinceIgnited; + int lastActiveTime; + int fuseTime = 30; + int creeperState = -1; + + public EntityCreeper(World var1) { + super(var1); + this.texture = "/mob/creeper.png"; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + protected void updatePlayerActionState() { + this.lastActiveTime = this.timeSinceIgnited; + if(this.timeSinceIgnited > 0 && this.creeperState < 0) { + --this.timeSinceIgnited; + } + + if(this.creeperState >= 0) { + this.creeperState = 2; + } + + super.updatePlayerActionState(); + if(this.creeperState != 1) { + this.creeperState = -1; + } + + } + + protected void attackEntity(Entity var1, float var2) { + if(this.creeperState <= 0 && var2 < 3.0F || this.creeperState > 0 && var2 < 7.0F) { + if(this.timeSinceIgnited == 0) { + this.worldObj.playSoundAtEntity(this, "random.fuse", 1.0F, 0.5F); + } + + this.creeperState = 1; + ++this.timeSinceIgnited; + if(this.timeSinceIgnited == this.fuseTime) { + this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 3.0F); + this.setEntityDead(); + } + + this.hasAttacked = true; + } + + } + + public float setCreeperFlashTime(float var1) { + return ((float)this.lastActiveTime + (float)(this.timeSinceIgnited - this.lastActiveTime) * var1) / (float)(this.fuseTime - 2); + } + + protected int getDropItemId() { + return Item.gunpowder.shiftedIndex; + } +} diff --git a/source/net/minecraft/src/EntityDiggingFX.java b/source/net/minecraft/src/EntityDiggingFX.java new file mode 100644 index 0000000..ddc26fb --- /dev/null +++ b/source/net/minecraft/src/EntityDiggingFX.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +public class EntityDiggingFX extends EntityFX { + public EntityDiggingFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12, Block var14) { + super(var1, var2, var4, var6, var8, var10, var12); + this.particleTextureIndex = var14.blockIndexInTexture; + this.particleGravity = var14.blockParticleGravity; + this.particleRed = this.particleGreen = this.particleBlue = 0.6F; + this.particleScale /= 2.0F; + } + + 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.particleTextureIndex % 16) + this.particleTextureJitterX / 4.0F) / 16.0F; + float var9 = var8 + 0.999F / 64.0F; + float var10 = ((float)(this.particleTextureIndex / 16) + this.particleTextureJitterY / 4.0F) / 16.0F; + float var11 = var10 + 0.999F / 64.0F; + float var12 = 0.1F * this.particleScale; + 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 = this.getEntityBrightness(var2); + 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/source/net/minecraft/src/EntityExplodeFX.java b/source/net/minecraft/src/EntityExplodeFX.java new file mode 100644 index 0000000..e6ed054 --- /dev/null +++ b/source/net/minecraft/src/EntityExplodeFX.java @@ -0,0 +1,38 @@ +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 renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + 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.setEntityDead(); + } + + this.particleTextureIndex = 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/source/net/minecraft/src/EntityFX.java b/source/net/minecraft/src/EntityFX.java new file mode 100644 index 0000000..9809da0 --- /dev/null +++ b/source/net/minecraft/src/EntityFX.java @@ -0,0 +1,99 @@ +package net.minecraft.src; + +public class EntityFX extends Entity { + protected int particleTextureIndex; + protected float particleTextureJitterX; + protected float particleTextureJitterY; + protected int particleAge = 0; + protected int particleMaxAge = 0; + protected float particleScale; + protected float particleGravity; + protected float particleRed; + protected float particleGreen; + protected float particleBlue; + public static double interpPosX; + public static double interpPosY; + public static double interpPosZ; + + public EntityFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1); + this.setSize(0.2F, 0.2F); + this.yOffset = this.height / 2.0F; + this.setPosition(var2, var4, var6); + this.particleRed = this.particleGreen = this.particleBlue = 1.0F; + 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; + this.particleTextureJitterX = this.rand.nextFloat() * 3.0F; + this.particleTextureJitterY = this.rand.nextFloat() * 3.0F; + this.particleScale = (this.rand.nextFloat() * 0.5F + 0.5F) * 2.0F; + this.particleMaxAge = (int)(4.0F / (this.rand.nextFloat() * 0.9F + 0.1F)); + this.particleAge = 0; + this.canTriggerWalking = false; + } + + 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 onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + if(this.particleAge++ >= this.particleMaxAge) { + this.setEntityDead(); + } + + 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.particleTextureIndex % 16) / 16.0F; + float var9 = var8 + 0.999F / 16.0F; + float var10 = (float)(this.particleTextureIndex / 16) / 16.0F; + float var11 = var10 + 0.999F / 16.0F; + float var12 = 0.1F * this.particleScale; + 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 = this.getEntityBrightness(var2); + var1.setColorOpaque_F(this.particleRed * var16, this.particleGreen * var16, this.particleBlue * var16); + 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); + } + + public int getFXLayer() { + return 0; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + } + + public void readEntityFromNBT(NBTTagCompound var1) { + } +} diff --git a/source/net/minecraft/src/EntityFallingSand.java b/source/net/minecraft/src/EntityFallingSand.java new file mode 100644 index 0000000..4dc1c13 --- /dev/null +++ b/source/net/minecraft/src/EntityFallingSand.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +public class EntityFallingSand extends Entity { + public int blockID; + public int fallTime = 0; + + public EntityFallingSand(World var1) { + super(var1); + } + + public EntityFallingSand(World var1, float var2, float var3, float var4, int var5) { + super(var1); + this.blockID = var5; + this.preventEntitySpawning = true; + this.setSize(0.98F, 0.98F); + this.yOffset = this.height / 2.0F; + this.setPosition((double)var2, (double)var3, (double)var4); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.canTriggerWalking = false; + this.prevPosX = (double)var2; + this.prevPosY = (double)var3; + this.prevPosZ = (double)var4; + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public void onUpdate() { + if(this.blockID == 0) { + this.setEntityDead(); + } 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; + 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) == this.blockID) { + this.worldObj.setBlockWithNotify(var1, var2, var3, 0); + } + + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + this.motionY *= -0.5D; + this.setEntityDead(); + if(!this.worldObj.canBlockBePlacedAt(this.blockID, var1, var2, var3, true) || !this.worldObj.setBlockWithNotify(var1, var2, var3, this.blockID)) { + this.dropItem(this.blockID, 1); + } + } else if(this.fallTime > 100) { + this.dropItem(this.blockID, 1); + this.setEntityDead(); + } + + } + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + var1.setByte("Tile", (byte)this.blockID); + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + this.blockID = var1.getByte("Tile") & 255; + } + + public World getWorld() { + return this.worldObj; + } +} diff --git a/source/net/minecraft/src/EntityFlameFX.java b/source/net/minecraft/src/EntityFlameFX.java new file mode 100644 index 0000000..192090a --- /dev/null +++ b/source/net/minecraft/src/EntityFlameFX.java @@ -0,0 +1,59 @@ +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.particleTextureIndex = 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 float getEntityBrightness(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.getEntityBrightness(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.setEntityDead(); + } + + 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/source/net/minecraft/src/EntityGiant.java b/source/net/minecraft/src/EntityGiant.java new file mode 100644 index 0000000..115d51d --- /dev/null +++ b/source/net/minecraft/src/EntityGiant.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class EntityGiant extends EntityMonster { + public EntityGiant(World var1) { + super(var1); + this.texture = "/mob/zombie.png"; + this.moveSpeed = 0.5F; + this.attackStrength = 50; + this.health *= 10; + this.yOffset *= 6.0F; + this.setSize(this.width * 6.0F, this.height * 6.0F); + } + + protected float getBlockPathWeight(int var1, int var2, int var3) { + return this.worldObj.getBrightness(var1, var2, var3) - 0.5F; + } +} diff --git a/source/net/minecraft/src/EntityItem.java b/source/net/minecraft/src/EntityItem.java new file mode 100644 index 0000000..785a54e --- /dev/null +++ b/source/net/minecraft/src/EntityItem.java @@ -0,0 +1,180 @@ +package net.minecraft.src; + +public class EntityItem extends Entity { + public ItemStack item; + private int age2; + public int age = 0; + public int delayBeforeCanPickup; + private int health = 5; + public float hoverStart = (float)(Math.random() * Math.PI * 2.0D); + + public EntityItem(World var1, double var2, double var4, double var6, ItemStack var8) { + super(var1); + this.setSize(0.25F, 0.25F); + this.yOffset = this.height / 2.0F; + this.setPosition(var2, var4, var6); + this.item = var8; + 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)); + this.canTriggerWalking = false; + } + + public EntityItem(World var1) { + super(var1); + this.setSize(0.25F, 0.25F); + this.yOffset = this.height / 2.0F; + } + + 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; + 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.worldObj.playSoundAtEntity(this, "random.fizz", 0.4F, 2.0F + this.rand.nextFloat() * 0.4F); + } + + this.pushOutOfBlocks(this.posX, this.posY, this.posZ); + this.handleWaterMovement(); + 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; + } + + ++this.age2; + ++this.age; + if(this.age >= 6000) { + this.setEntityDead(); + } + + } + + public boolean handleWaterMovement() { + return this.worldObj.handleMaterialAcceleration(this.boundingBox, Material.water, this); + } + + private 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; + if(Block.opaqueCubeLookup[this.worldObj.getBlockId(var7, var8, var9)]) { + boolean var16 = !Block.opaqueCubeLookup[this.worldObj.getBlockId(var7 - 1, var8, var9)]; + boolean var17 = !Block.opaqueCubeLookup[this.worldObj.getBlockId(var7 + 1, var8, var9)]; + boolean var18 = !Block.opaqueCubeLookup[this.worldObj.getBlockId(var7, var8 - 1, var9)]; + boolean var19 = !Block.opaqueCubeLookup[this.worldObj.getBlockId(var7, var8 + 1, var9)]; + boolean var20 = !Block.opaqueCubeLookup[this.worldObj.getBlockId(var7, var8, var9 - 1)]; + boolean var21 = !Block.opaqueCubeLookup[this.worldObj.getBlockId(var7, var8, var9 + 1)]; + byte var22 = -1; + double var23 = 9999.0D; + if(var16 && var10 < var23) { + var23 = var10; + var22 = 0; + } + + if(var17 && 1.0D - var10 < var23) { + var23 = 1.0D - var10; + var22 = 1; + } + + if(var18 && var12 < var23) { + var23 = var12; + var22 = 2; + } + + if(var19 && 1.0D - var12 < var23) { + var23 = 1.0D - var12; + var22 = 3; + } + + if(var20 && var14 < var23) { + var23 = var14; + var22 = 4; + } + + if(var21 && 1.0D - var14 < var23) { + var23 = 1.0D - var14; + var22 = 5; + } + + float var25 = this.rand.nextFloat() * 0.2F + 0.1F; + if(var22 == 0) { + this.motionX = (double)(-var25); + } + + if(var22 == 1) { + this.motionX = (double)var25; + } + + if(var22 == 2) { + this.motionY = (double)(-var25); + } + + if(var22 == 3) { + this.motionY = (double)var25; + } + + if(var22 == 4) { + this.motionZ = (double)(-var25); + } + + if(var22 == 5) { + this.motionZ = (double)var25; + } + } + + return false; + } + + protected void dealFireDamage(int var1) { + this.attackEntityFrom((Entity)null, var1); + } + + public boolean attackEntityFrom(Entity var1, int var2) { + this.health -= var2; + if(this.health <= 0) { + this.setEntityDead(); + } + + return false; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("Health", (short)((byte)this.health)); + var1.setShort("Age", (short)this.age); + var1.setCompoundTag("Item", this.item.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.item = new ItemStack(var2); + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(this.delayBeforeCanPickup == 0 && var1.inventory.addItemStackToInventory(this.item)) { + this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + var1.onItemPickup(this); + this.setEntityDead(); + } + + } +} diff --git a/source/net/minecraft/src/EntityLavaFX.java b/source/net/minecraft/src/EntityLavaFX.java new file mode 100644 index 0000000..f6b735f --- /dev/null +++ b/source/net/minecraft/src/EntityLavaFX.java @@ -0,0 +1,54 @@ +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.particleTextureIndex = 49; + } + + public float getEntityBrightness(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.setEntityDead(); + } + + 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/source/net/minecraft/src/EntityList.java b/source/net/minecraft/src/EntityList.java new file mode 100644 index 0000000..0d673ef --- /dev/null +++ b/source/net/minecraft/src/EntityList.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; + +public class EntityList { + private static Map stringToClassMapping = new HashMap(); + private static Map classToStringMapping = new HashMap(); + + private static void addMapping(Class var0, String var1) { + stringToClassMapping.put(var1, var0); + classToStringMapping.put(var0, var1); + } + + public static Entity createEntityInWorld(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; + + 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 { + System.out.println("Skipping Entity with id " + var0.getString("id")); + } + + return var2; + } + + public static String getEntityString(Entity var0) { + return (String)classToStringMapping.get(var0.getClass()); + } + + static { + addMapping(EntityArrow.class, "Arrow"); + addMapping(EntityItem.class, "Item"); + addMapping(EntityPainting.class, "Painting"); + addMapping(EntityLiving.class, "Mob"); + addMapping(EntityMonster.class, "Monster"); + addMapping(EntityCreeper.class, "Creeper"); + addMapping(EntitySkeleton.class, "Skeleton"); + addMapping(EntitySpider.class, "Spider"); + addMapping(EntityGiant.class, "Giant"); + addMapping(EntityZombie.class, "Zombie"); + addMapping(EntityPig.class, "Pig"); + addMapping(EntitySheep.class, "Sheep"); + addMapping(EntityTNTPrimed.class, "PrimedTnt"); + addMapping(EntityFallingSand.class, "FallingSand"); + addMapping(EntityMinecart.class, "Minecart"); + } +} diff --git a/source/net/minecraft/src/EntityLiving.java b/source/net/minecraft/src/EntityLiving.java new file mode 100644 index 0000000..09a9db0 --- /dev/null +++ b/source/net/minecraft/src/EntityLiving.java @@ -0,0 +1,548 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityLiving extends Entity { + public int heartsHalvesLife = 20; + public float unusedRotationPitch2; + public float unusedFloat; + public float unusedRotationPitch; + public float renderYawOffset = 0.0F; + public float prevRenderYawOffset = 0.0F; + protected float ridingRotUnused; + protected float prevRidingRotUnused; + protected float rotationUnused; + protected float prevRotationUnused; + protected boolean unusedBool1 = true; + protected String texture = "/char.png"; + protected boolean unusedBool2 = true; + protected float unusedRotation = 0.0F; + protected String entityType = null; + protected float unusedFloat1 = 1.0F; + protected int scoreValue = 0; + protected float unusedFloat2 = 0.0F; + public int health = 10; + public int prevHealth; + private 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; + public int unusedInt = -1; + public float unusedFloat4 = (float)(Math.random() * (double)0.9F + (double)0.1F); + public float prevLimbYaw; + public float limbYaw; + public float limbSwing; + 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; + + public EntityLiving(World var1) { + super(var1); + this.preventEntitySpawning = true; + this.unusedRotationPitch = (float)(Math.random() + 1.0D) * 0.01F; + this.setPosition(this.posX, this.posY, this.posZ); + this.unusedRotationPitch2 = (float)Math.random() * 12398.0F; + this.rotationYaw = (float)(Math.random() * (double)((float)Math.PI) * 2.0D); + this.unusedFloat = 1.0F; + this.stepHeight = 0.5F; + } + + public String getTexture() { + return this.texture; + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public boolean canBePushed() { + return !this.isDead; + } + + protected float getEyeHeight() { + return this.height * 0.85F; + } + + public void onEntityUpdate() { + super.onEntityUpdate(); + if(this.rand.nextInt(1000) < this.livingSoundTime++) { + this.livingSoundTime = -80; + String var1 = this.getLivingSound(); + if(var1 != null) { + this.worldObj.playSoundAtEntity(this, var1, 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + } + + if(this.isEntityAlive() && this.isEntityInsideOpaqueBlock()) { + this.attackEntityFrom((Entity)null, 1); + } + + int var8; + if(this.isEntityAlive() && this.isInsideOfMaterial(Material.water)) { + --this.air; + if(this.air == -20) { + this.air = 0; + + for(var8 = 0; var8 < 8; ++var8) { + float var2 = this.rand.nextFloat() - this.rand.nextFloat(); + float var3 = this.rand.nextFloat() - this.rand.nextFloat(); + float var4 = this.rand.nextFloat() - this.rand.nextFloat(); + this.worldObj.spawnParticle("bubble", this.posX + (double)var2, this.posY + (double)var3, this.posZ + (double)var4, this.motionX, this.motionY, this.motionZ); + } + + this.attackEntityFrom((Entity)null, 2); + } + + this.fire = 0; + } else { + this.air = this.maxAir; + } + + this.prevCameraPitch = this.cameraPitch; + if(this.attackTime > 0) { + --this.attackTime; + } + + if(this.hurtTime > 0) { + --this.hurtTime; + } + + if(this.heartsLife > 0) { + --this.heartsLife; + } + + if(this.health <= 0) { + ++this.deathTime; + if(this.deathTime > 20) { + this.onEntityDeath(); + this.setEntityDead(); + + for(var8 = 0; var8 < 20; ++var8) { + double var9 = this.rand.nextGaussian() * 0.02D; + double var10 = 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, var9, var10, var6); + } + } + } + + this.prevRotationUnused = this.rotationUnused; + this.prevRenderYawOffset = this.renderYawOffset; + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + } + + 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.ridingRotUnused = this.prevRidingRotUnused; + this.prevRidingRotUnused = 0.0F; + } + + public void onUpdate() { + super.onUpdate(); + this.onLivingUpdate(); + double var1 = this.posX - this.prevPosX; + double var3 = this.posZ - this.prevPosZ; + float var5 = MathHelper.sqrt_double(var1 * var1 + var3 * var3); + float var6 = this.renderYawOffset; + float var7 = 0.0F; + this.ridingRotUnused = this.prevRidingRotUnused; + float var8 = 0.0F; + if(var5 > 0.05F) { + var8 = 1.0F; + var7 = var5 * 3.0F; + var6 = (float)Math.atan2(var3, var1) * 180.0F / (float)Math.PI - 90.0F; + } + + if(!this.onGround) { + var8 = 0.0F; + } + + this.prevRidingRotUnused += (var8 - this.prevRidingRotUnused) * 0.3F; + + float var9; + for(var9 = var6 - this.renderYawOffset; var9 < -180.0F; var9 += 360.0F) { + } + + while(var9 >= 180.0F) { + var9 -= 360.0F; + } + + this.renderYawOffset += var9 * 0.1F; + + float var10; + for(var10 = this.rotationYaw - this.renderYawOffset; var10 < -180.0F; var10 += 360.0F) { + } + + while(var10 >= 180.0F) { + var10 -= 360.0F; + } + + 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; + this.renderYawOffset += var10 * 0.1F; + if(var11) { + var7 *= -1.0F; + } + + 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; + } + + this.rotationUnused += var7; + } + + protected void setSize(float var1, float var2) { + super.setSize(var1, var2); + } + + public void heal(int var1) { + if(this.health > 0) { + this.health += var1; + if(this.health > 20) { + this.health = 20; + } + + this.heartsLife = this.heartsHalvesLife / 2; + } + } + + public boolean attackEntityFrom(Entity var1, int var2) { + this.entityAge = 0; + if(this.health <= 0) { + return false; + } else { + this.limbYaw = 1.5F; + if((float)this.heartsLife > (float)this.heartsHalvesLife / 2.0F) { + if(this.prevHealth - var2 >= this.health) { + return false; + } + + this.health = this.prevHealth - var2; + } else { + this.prevHealth = this.health; + this.heartsLife = this.heartsHalvesLife; + this.health -= var2; + this.hurtTime = this.maxHurtTime = 10; + } + + this.attackedAtYaw = 0.0F; + if(var1 != null) { + double var3 = var1.posX - this.posX; + + double var5; + for(var5 = var1.posZ - this.posZ; var3 * var3 + var5 * var5 < 1.0E-4D; var5 = (Math.random() - Math.random()) * 0.01D) { + var3 = (Math.random() - Math.random()) * 0.01D; + } + + this.attackedAtYaw = (float)(Math.atan2(var5, var3) * 180.0D / (double)((float)Math.PI)) - this.rotationYaw; + this.knockBack(var1, var2, var3, var5); + } else { + this.attackedAtYaw = (float)((int)(Math.random() * 2.0D) * 180); + } + + if(this.health <= 0) { + this.worldObj.playSoundAtEntity(this, this.getDeathSound(), 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + this.onDeath(var1); + } else { + this.worldObj.playSoundAtEntity(this, this.getHurtSound(), 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + + return true; + } + } + + protected String getLivingSound() { + return null; + } + + protected String getHurtSound() { + return "random.hurt"; + } + + protected String getDeathSound() { + return "random.hurt"; + } + + public void knockBack(Entity var1, int var2, double var3, double var5) { + 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)0.4F; + this.motionZ -= var5 / (double)var7 * (double)var8; + if(this.motionY > (double)0.4F) { + this.motionY = (double)0.4F; + } + + } + + public void onDeath(Entity var1) { + if(this.scoreValue > 0 && var1 != null) { + var1.addToPlayerScore(this, this.scoreValue); + } + + this.dead = true; + int var2 = this.getDropItemId(); + if(var2 > 0) { + int var3 = this.rand.nextInt(3); + + for(int var4 = 0; var4 < var3; ++var4) { + this.dropItem(var2, 1); + } + } + + } + + protected int getDropItemId() { + return 0; + } + + protected void fall(float var1) { + int var2 = (int)Math.ceil((double)(var1 - 3.0F)); + if(var2 > 0) { + this.attackEntityFrom((Entity)null, 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.worldObj.playSoundAtEntity(this, var4.getStepSound(), var4.getVolume() * 0.5F, var4.getPitch() * (12.0F / 16.0F)); + } + } + + } + + public void moveEntityWithHeading(float var1, float var2) { + double var3; + if(this.handleWaterMovement()) { + var3 = this.posY; + 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; + 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 if(this.handleLavaMovement()) { + 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 { + this.moveFlying(var1, var2, this.onGround ? 0.1F : 0.02F); + if(this.isOnLadder()) { + this.fallDistance = 0.0F; + if(this.motionY < -0.15D) { + this.motionY = -0.15D; + } + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + if(this.isCollidedHorizontally && this.isOnLadder()) { + this.motionY = 0.2D; + } + + this.motionX *= (double)0.91F; + this.motionY *= (double)0.98F; + this.motionZ *= (double)0.91F; + this.motionY -= 0.08D; + if(this.onGround) { + float var8 = 0.6F; + this.motionX *= (double)var8; + this.motionZ *= (double)var8; + } + } + + this.prevLimbYaw = this.limbYaw; + var3 = this.posX - this.prevPosX; + double var5 = this.posZ - this.prevPosZ; + float var7 = MathHelper.sqrt_double(var3 * var3 + var5 * var5) * 4.0F; + if(var7 > 1.0F) { + var7 = 1.0F; + } + + this.limbYaw += (var7 - 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); + return this.worldObj.getBlockId(var1, var2, var3) == Block.ladder.blockID || this.worldObj.getBlockId(var1, var2 + 1, var3) == Block.ladder.blockID; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("Health", (short)this.health); + var1.setShort("HurtTime", (short)this.hurtTime); + var1.setShort("DeathTime", (short)this.deathTime); + var1.setShort("AttackTime", (short)this.attackTime); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.health = var1.getShort("Health"); + if(!var1.hasKey("Health")) { + this.health = 10; + } + + this.hurtTime = var1.getShort("HurtTime"); + this.deathTime = var1.getShort("DeathTime"); + this.attackTime = var1.getShort("AttackTime"); + } + + public boolean isEntityAlive() { + return !this.isDead && this.health > 0; + } + + public void onLivingUpdate() { + ++this.entityAge; + Entity var1 = this.worldObj.getPlayerEntity(); + 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(var8 > 16384.0D) { + this.setEntityDead(); + } + + if(this.entityAge > 600 && this.rand.nextInt(800) == 0) { + if(var8 < 1024.0D) { + this.entityAge = 0; + } else { + this.setEntityDead(); + } + } + } + + if(this.health <= 0) { + this.isJumping = false; + this.moveStrafing = 0.0F; + this.moveForward = 0.0F; + this.randomYawVelocity = 0.0F; + } else { + this.updatePlayerActionState(); + } + + boolean var10 = this.handleWaterMovement(); + boolean var3 = this.handleLavaMovement(); + if(this.isJumping) { + if(var10) { + this.motionY += (double)0.04F; + } else if(var3) { + this.motionY += (double)0.04F; + } else if(this.onGround) { + this.jump(); + } + } + + this.moveStrafing *= 0.98F; + this.moveForward *= 0.98F; + this.randomYawVelocity *= 0.9F; + this.moveEntityWithHeading(this.moveStrafing, this.moveForward); + List var11 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand((double)0.2F, 0.0D, (double)0.2F)); + if(var11 != null && var11.size() > 0) { + for(int var5 = 0; var5 < var11.size(); ++var5) { + Entity var12 = (Entity)var11.get(var5); + if(var12.canBePushed()) { + var12.applyEntityCollision(this); + } + } + } + + } + + protected void jump() { + this.motionY = (double)0.42F; + } + + protected void updatePlayerActionState() { + if(this.rand.nextFloat() < 0.07F) { + this.moveStrafing = (this.rand.nextFloat() - 0.5F) * this.moveSpeed; + this.moveForward = this.rand.nextFloat() * this.moveSpeed; + } + + this.isJumping = this.rand.nextFloat() < 0.01F; + if(this.rand.nextFloat() < 0.04F) { + this.randomYawVelocity = (this.rand.nextFloat() - 0.5F) * 60.0F; + } + + this.rotationYaw += this.randomYawVelocity; + this.rotationPitch = this.defaultPitch; + boolean var1 = this.handleWaterMovement(); + boolean var2 = this.handleLavaMovement(); + if(var1 || var2) { + this.isJumping = this.rand.nextFloat() < 0.8F; + } + + } + + public void onEntityDeath() { + } + + public boolean getCanSpawnHere(double var1, double var3, double var5) { + this.setPosition(var1, var3 + (double)(this.height / 2.0F), var5); + return this.worldObj.checkIfAABBIsClear(this.boundingBox) && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).size() == 0 && !this.worldObj.getIsAnyLiquid(this.boundingBox); + } + + protected void kill() { + this.attackEntityFrom((Entity)null, 4); + } +} diff --git a/source/net/minecraft/src/EntityMinecart.java b/source/net/minecraft/src/EntityMinecart.java new file mode 100644 index 0000000..34926bb --- /dev/null +++ b/source/net/minecraft/src/EntityMinecart.java @@ -0,0 +1,520 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityMinecart extends Entity implements IInventory { + private ItemStack[] cargoItems; + public int damageTaken; + public int timeSinceHit; + public int forwardDirection; + private boolean isInReverse; + 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}}}; + + public EntityMinecart(World var1) { + super(var1); + this.cargoItems = new ItemStack[36]; + this.damageTaken = 0; + this.timeSinceHit = 0; + this.forwardDirection = 1; + this.isInReverse = false; + this.preventEntitySpawning = true; + this.setSize(0.98F, 0.7F); + this.yOffset = this.height / 2.0F; + this.canTriggerWalking = false; + } + + public AxisAlignedBB getCollisionBox(Entity var1) { + return var1.boundingBox; + } + + public AxisAlignedBB getBoundingBox() { + return this.boundingBox; + } + + 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 getYOffset() { + return (double)this.height * 0.2D; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + this.forwardDirection = -this.forwardDirection; + this.timeSinceHit = 10; + this.damageTaken += var2 * 10; + if(this.damageTaken > 40) { + this.entityDropItem(Item.minecart.shiftedIndex, 1, 0.0F); + this.setEntityDead(); + } + + return true; + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public void setEntityDead() { + 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.itemDmg)); + 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.setEntityDead(); + } + + public void onUpdate() { + if(this.timeSinceHit > 0) { + --this.timeSinceHit; + } + + if(this.damageTaken > 0) { + --this.damageTaken; + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.motionY -= (double)0.04F; + 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 - 1, var3) == Block.minecartTrack.blockID) { + --var2; + } + + double var4 = 0.4D; + double var6 = 1.0D / 128.0D; + if(this.worldObj.getBlockId(var1, var2, var3) == Block.minecartTrack.blockID) { + Vec3D var8 = this.getPos(this.posX, this.posY, this.posZ); + int var9 = this.worldObj.getBlockMetadata(var1, var2, var3); + this.posY = (double)var2; + 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[][] var10 = matrix[var9]; + double var11 = (double)(var10[1][0] - var10[0][0]); + double var13 = (double)(var10[1][2] - var10[0][2]); + double var15 = Math.sqrt(var11 * var11 + var13 * var13); + double var17 = this.motionX * var11 + this.motionZ * var13; + if(var17 < 0.0D) { + var11 = -var11; + var13 = -var13; + } + + double var19 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.motionX = var19 * var11 / var15; + this.motionZ = var19 * var13 / var15; + double var21 = 0.0D; + double var23 = (double)var1 + 0.5D + (double)var10[0][0] * 0.5D; + double var25 = (double)var3 + 0.5D + (double)var10[0][2] * 0.5D; + double var27 = (double)var1 + 0.5D + (double)var10[1][0] * 0.5D; + double var29 = (double)var3 + 0.5D + (double)var10[1][2] * 0.5D; + var11 = var27 - var23; + var13 = var29 - var25; + double var31; + double var33; + if(var11 == 0.0D) { + this.posX = (double)var1 + 0.5D; + var21 = this.posZ - (double)var3; + } else if(var13 == 0.0D) { + this.posZ = (double)var3 + 0.5D; + var21 = this.posX - (double)var1; + } else { + var31 = this.posX - var23; + var33 = this.posZ - var25; + double var35 = (var31 * var11 + var33 * var13) * 2.0D; + var21 = var35; + } + + this.posX = var23 + var11 * var21; + this.posZ = var25 + var13 * var21; + this.setPosition(this.posX, this.posY + (double)this.yOffset, this.posZ); + var31 = this.motionX; + var33 = this.motionZ; + if(this.riddenByEntity != null) { + var31 *= 0.75D; + var33 *= 0.75D; + } + + if(var31 < -var4) { + var31 = -var4; + } + + if(var31 > var4) { + var31 = var4; + } + + if(var33 < -var4) { + var33 = -var4; + } + + if(var33 > var4) { + var33 = var4; + } + + this.moveEntity(var31, 0.0D, var33); + if(var10[0][1] != 0 && MathHelper.floor_double(this.posX) - var1 == var10[0][0] && MathHelper.floor_double(this.posZ) - var3 == var10[0][2]) { + this.setPosition(this.posX, this.posY + (double)var10[0][1], this.posZ); + } else if(var10[1][1] != 0 && MathHelper.floor_double(this.posX) - var1 == var10[1][0] && MathHelper.floor_double(this.posZ) - var3 == var10[1][2]) { + this.setPosition(this.posX, this.posY + (double)var10[1][1], this.posZ); + } + + 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; + } + + Vec3D var41 = this.getPos(this.posX, this.posY, this.posZ); + if(var41 != null && var8 != null) { + double var36 = (var8.yCoord - var41.yCoord) * 0.05D; + var19 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + if(var19 > 0.0D) { + this.motionX = this.motionX / var19 * (var19 + var36); + this.motionZ = this.motionZ / var19 * (var19 + var36); + } + + this.setPosition(this.posX, var41.yCoord, this.posZ); + } + + int var42 = MathHelper.floor_double(this.posX); + int var37 = MathHelper.floor_double(this.posZ); + if(var42 != var1 || var37 != var3) { + var19 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.motionX = var19 * (double)(var42 - var1); + this.motionZ = var19 * (double)(var37 - var3); + } + } else { + if(this.motionX < -var4) { + this.motionX = -var4; + } + + if(this.motionX > var4) { + this.motionX = var4; + } + + if(this.motionZ < -var4) { + this.motionZ = -var4; + } + + if(this.motionZ > var4) { + this.motionZ = var4; + } + + 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; + } + } + + this.rotationPitch = 0.0F; + double var38 = this.prevPosX - this.posX; + double var39 = this.prevPosZ - this.posZ; + if(var38 * var38 + var39 * var39 > 0.001D) { + this.rotationYaw = (float)(Math.atan2(var39, var38) * 180.0D / Math.PI); + if(this.isInReverse) { + this.rotationYaw += 180.0F; + } + } + + double var12; + for(var12 = (double)(this.rotationYaw - this.prevRotationYaw); var12 >= 180.0D; var12 -= 360.0D) { + } + + while(var12 < -180.0D) { + var12 += 360.0D; + } + + if(var12 < -170.0D || var12 >= 170.0D) { + this.rotationYaw += 180.0F; + this.isInReverse = !this.isInReverse; + } + + this.setRotation(this.rotationYaw, this.rotationPitch); + List var14 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand((double)0.2F, 0.0D, (double)0.2F)); + if(var14 != null && var14.size() > 0) { + for(int var40 = 0; var40 < var14.size(); ++var40) { + Entity var16 = (Entity)var14.get(var40); + if(var16 != this.riddenByEntity && var16.canBePushed() && var16 instanceof EntityMinecart) { + var16.applyEntityCollision(this); + } + } + } + + if(this.riddenByEntity != null && this.riddenByEntity.isDead) { + this.riddenByEntity = null; + } + + } + + public Vec3D getPosOffset(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(this.worldObj.getBlockId(var9, var10 - 1, var11) == Block.minecartTrack.blockID) { + --var10; + } + + if(this.worldObj.getBlockId(var9, var10, var11) == Block.minecartTrack.blockID) { + int var12 = this.worldObj.getBlockMetadata(var9, var10, var11); + var3 = (double)var10; + if(var12 >= 2 && var12 <= 5) { + var3 = (double)(var10 + 1); + } + + int[][] var13 = matrix[var12]; + 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); + var14 /= var18; + var16 /= var18; + var1 += var14 * var7; + var5 += var16 * var7; + if(var13[0][1] != 0 && MathHelper.floor_double(var1) - var9 == var13[0][0] && MathHelper.floor_double(var5) - var11 == var13[0][2]) { + var3 += (double)var13[0][1]; + } else if(var13[1][1] != 0 && MathHelper.floor_double(var1) - var9 == var13[1][0] && MathHelper.floor_double(var5) - var11 == var13[1][2]) { + var3 += (double)var13[1][1]; + } + + return this.getPos(var1, var3, var5); + } else { + return null; + } + } + + public Vec3D getPos(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(this.worldObj.getBlockId(var7, var8 - 1, var9) == Block.minecartTrack.blockID) { + --var8; + } + + if(this.worldObj.getBlockId(var7, var8, var9) == Block.minecartTrack.blockID) { + int var10 = this.worldObj.getBlockMetadata(var7, var8, var9); + var3 = (double)var8; + if(var10 >= 2 && var10 <= 5) { + var3 = (double)(var8 + 1); + } + + int[][] var11 = matrix[var10]; + double var12 = 0.0D; + double var14 = (double)var7 + 0.5D + (double)var11[0][0] * 0.5D; + double var16 = (double)var8 + 0.5D + (double)var11[0][1] * 0.5D; + double var18 = (double)var9 + 0.5D + (double)var11[0][2] * 0.5D; + double var20 = (double)var7 + 0.5D + (double)var11[1][0] * 0.5D; + double var22 = (double)var8 + 0.5D + (double)var11[1][1] * 0.5D; + double var24 = (double)var9 + 0.5D + (double)var11[1][2] * 0.5D; + double var26 = var20 - var14; + double var28 = (var22 - var16) * 2.0D; + double var30 = var24 - var18; + if(var26 == 0.0D) { + var1 = (double)var7 + 0.5D; + var12 = var5 - (double)var9; + } else if(var30 == 0.0D) { + var5 = (double)var9 + 0.5D; + var12 = var1 - (double)var7; + } else { + double var32 = var1 - var14; + double var34 = var5 - var18; + double var36 = (var32 * var26 + var34 * var30) * 2.0D; + var12 = var36; + } + + var1 = var14 + var26 * var12; + var3 = var16 + var28 * var12; + var5 = var18 + var30 * var12; + if(var28 < 0.0D) { + ++var3; + } + + if(var28 > 0.0D) { + var3 += 0.5D; + } + + return Vec3D.createVector(var1, var3, var5); + } else { + return null; + } + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + NBTTagList var2 = new NBTTagList(); + + for(int var3 = 0; var3 < this.cargoItems.length; ++var3) { + if(this.cargoItems[var3] != null) { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.cargoItems[var3].writeToNBT(var4); + var2.setTag(var4); + } + } + + var1.setTag("Items", var2); + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + NBTTagList var2 = var1.getTagList("Items"); + this.cargoItems = 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.cargoItems.length) { + this.cargoItems[var5] = new ItemStack(var4); + } + } + + } + + public void applyEntityCollision(Entity var1) { + if(var1 != this.riddenByEntity) { + 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.motionX + this.motionX) / 2.0D; + double var12 = (var1.motionZ + this.motionZ) / 2.0D; + this.motionX = this.motionZ = 0.0D; + this.addVelocity(var10 - var2, 0.0D, var12 - var4); + var1.motionX = var1.motionZ = 0.0D; + var1.addVelocity(var10 + var2, 0.0D, var12 + var4); + } else { + this.addVelocity(-var2, 0.0D, -var4); + var1.addVelocity(var2 / 4.0D, 0.0D, var4 / 4.0D); + } + } + + } + } + + public int getSizeInventory() { + return 27; + } + + public ItemStack getStackInSlot(int var1) { + return this.cargoItems[var1]; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.cargoItems[var1] != null) { + ItemStack var3; + if(this.cargoItems[var1].stackSize <= var2) { + var3 = this.cargoItems[var1]; + this.cargoItems[var1] = null; + return var3; + } else { + var3 = this.cargoItems[var1].splitStack(var2); + if(this.cargoItems[var1].stackSize == 0) { + this.cargoItems[var1] = null; + } + + return var3; + } + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.cargoItems[var1] = var2; + if(var2 != null && var2.stackSize > this.getInventoryStackLimit()) { + var2.stackSize = this.getInventoryStackLimit(); + } + + } + + public String getInvName() { + return "Minecart"; + } + + public int getInventoryStackLimit() { + return 64; + } + + public void onInventoryChanged() { + } + + public boolean interact(EntityPlayer var1) { + var1.mountEntity(this); + return true; + } +} diff --git a/source/net/minecraft/src/EntityMonster.java b/source/net/minecraft/src/EntityMonster.java new file mode 100644 index 0000000..0e0fc19 --- /dev/null +++ b/source/net/minecraft/src/EntityMonster.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +public class EntityMonster extends EntityCreature { + protected int attackStrength = 2; + + public EntityMonster(World var1) { + super(var1); + this.health = 20; + } + + public void onLivingUpdate() { + float var1 = this.getEntityBrightness(1.0F); + if(var1 > 0.5F) { + this.entityAge += 2; + } + + super.onLivingUpdate(); + } + + public void onUpdate() { + super.onUpdate(); + if(this.worldObj.difficultySetting == 0) { + this.setEntityDead(); + } + + } + + protected Entity findPlayerToAttack() { + double var1 = this.worldObj.playerEntity.getDistanceSqToEntity(this); + double var3 = 16.0D; + return var1 < var3 * var3 && this.canEntityBeSeen(this.worldObj.playerEntity) ? this.worldObj.playerEntity : null; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + if(super.attackEntityFrom(var1, var2)) { + if(var1 != this) { + this.playerToAttack = var1; + } + + return true; + } else { + return false; + } + } + + protected void attackEntity(Entity var1, float var2) { + if((double)var2 < 2.5D && var1.boundingBox.maxY > this.boundingBox.minY && var1.boundingBox.minY < this.boundingBox.maxY) { + this.attackTime = 20; + var1.attackEntityFrom(this, this.attackStrength); + } + + } + + protected float getBlockPathWeight(int var1, int var2, int var3) { + return 0.5F - this.worldObj.getBrightness(var1, var2, var3); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + public boolean getCanSpawnHere(double var1, double var3, double var5) { + int var7 = this.worldObj.getBlockLightValue(MathHelper.floor_double(var1), MathHelper.floor_double(var3), MathHelper.floor_double(var5)); + return var7 <= this.rand.nextInt(8) && super.getCanSpawnHere(var1, var3, var5); + } +} diff --git a/source/net/minecraft/src/EntityPainting.java b/source/net/minecraft/src/EntityPainting.java new file mode 100644 index 0000000..3090aa2 --- /dev/null +++ b/source/net/minecraft/src/EntityPainting.java @@ -0,0 +1,212 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class EntityPainting extends Entity { + private int tickCounter; + public int direction; + private int xPosition; + private int yPosition; + private int zPosition; + public EnumArt art; + + public EntityPainting(World var1) { + super(var1); + this.tickCounter = 0; + this.direction = 0; + this.yOffset = 0.0F; + this.setSize(0.5F, 0.5F); + } + + public EntityPainting(World var1, int var2, int var3, int var4, int var5) { + this(var1); + this.xPosition = var2; + this.yPosition = var3; + this.zPosition = var4; + 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.size() > 0) { + this.art = (EnumArt)var6.get(this.rand.nextInt(var6.size())); + } + + this.setDirection(var5); + } + + public void setDirection(int var1) { + this.direction = var1; + this.prevRotationYaw = this.rotationYaw = (float)(var1 * 90); + float var2 = (float)this.art.sizeX; + float var3 = (float)this.art.sizeY; + float var4 = (float)this.art.sizeX; + if(var1 != 0 && var1 != 2) { + var2 = 0.5F; + } else { + var4 = 0.5F; + } + + 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 == 0) { + var7 -= var8; + } + + if(var1 == 1) { + var5 -= var8; + } + + if(var1 == 2) { + var7 += var8; + } + + if(var1 == 3) { + var5 += var8; + } + + if(var1 == 0) { + var5 -= this.getArtSize(this.art.sizeX); + } + + if(var1 == 1) { + var7 += this.getArtSize(this.art.sizeX); + } + + if(var1 == 2) { + var5 += this.getArtSize(this.art.sizeX); + } + + if(var1 == 3) { + var7 -= this.getArtSize(this.art.sizeX); + } + + var6 += this.getArtSize(this.art.sizeY); + this.setPosition((double)var5, (double)var6, (double)var7); + float var9 = -(0.1F / 16.0F); + 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 getArtSize(int var1) { + return var1 == 32 ? 0.5F : (var1 == 64 ? 0.5F : 0.0F); + } + + public void onUpdate() { + if(this.tickCounter++ == 100 && !this.onValidSurface()) { + this.tickCounter = 0; + this.setEntityDead(); + this.worldObj.spawnEntityInWorld(new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, new ItemStack(Item.painting))); + } + + } + + public boolean onValidSurface() { + if(this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).size() > 0) { + return false; + } else { + int var1 = this.art.sizeX / 16; + int var2 = this.art.sizeY / 16; + int var3 = this.xPosition; + int var4 = this.yPosition; + int var5 = this.zPosition; + if(this.direction == 0) { + var3 = MathHelper.floor_double(this.posX - (double)((float)this.art.sizeX / 32.0F)); + } + + if(this.direction == 1) { + var5 = MathHelper.floor_double(this.posZ - (double)((float)this.art.sizeX / 32.0F)); + } + + if(this.direction == 2) { + var3 = MathHelper.floor_double(this.posX - (double)((float)this.art.sizeX / 32.0F)); + } + + if(this.direction == 3) { + var5 = MathHelper.floor_double(this.posZ - (double)((float)this.art.sizeX / 32.0F)); + } + + var4 = MathHelper.floor_double(this.posY - (double)((float)this.art.sizeY / 32.0F)); + + int var7; + for(int var6 = 0; var6 < var1; ++var6) { + for(var7 = 0; var7 < var2; ++var7) { + Material var8; + if(this.direction != 0 && this.direction != 2) { + 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); + + for(var7 = 0; var7 < var9.size(); ++var7) { + if(var9.get(var7) instanceof EntityPainting) { + return false; + } + } + + return true; + } + } + + public boolean canBeCollidedWith() { + return true; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + this.setEntityDead(); + this.worldObj.spawnEntityInWorld(new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, new ItemStack(Item.painting))); + return true; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setByte("Dir", (byte)this.direction); + var1.setString("Motive", this.art.title); + var1.setInteger("TileX", this.xPosition); + var1.setInteger("TileY", this.yPosition); + var1.setInteger("TileZ", this.zPosition); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.direction = var1.getByte("Dir"); + this.xPosition = var1.getInteger("TileX"); + this.yPosition = var1.getInteger("TileY"); + this.zPosition = var1.getInteger("TileZ"); + 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; + } + + this.setDirection(this.direction); + } +} diff --git a/source/net/minecraft/src/EntityPickupFX.java b/source/net/minecraft/src/EntityPickupFX.java new file mode 100644 index 0000000..7faaec3 --- /dev/null +++ b/source/net/minecraft/src/EntityPickupFX.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class EntityPickupFX extends EntityFX { + private Entity entityToPickUp; + private EntityLiving entityPickingUp; + private int age = 0; + private int maxAge = 0; + private float yOffs; + + public EntityPickupFX(World var1, Entity var2, EntityLiving 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); + float var30 = this.worldObj.getBrightness(var27, var28, var29); + var21 -= interpPosX; + var23 -= interpPosY; + var25 -= interpPosZ; + GL11.glColor4f(var30, var30, var30, 1.0F); + 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.setEntityDead(); + } + + } + + public int getFXLayer() { + return 2; + } +} diff --git a/source/net/minecraft/src/EntityPig.java b/source/net/minecraft/src/EntityPig.java new file mode 100644 index 0000000..805c3fd --- /dev/null +++ b/source/net/minecraft/src/EntityPig.java @@ -0,0 +1,47 @@ +package net.minecraft.src; + +public class EntityPig extends EntityAnimal { + public boolean saddled = false; + + public EntityPig(World var1) { + super(var1); + this.texture = "/mob/pig.png"; + this.setSize(0.9F, 0.9F); + this.saddled = false; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setBoolean("Saddle", this.saddled); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.saddled = var1.getBoolean("Saddle"); + } + + protected String getLivingSound() { + return "mob.pig"; + } + + protected String getHurtSound() { + return "mob.pig"; + } + + protected String getDeathSound() { + return "mob.pigdeath"; + } + + public boolean interact(EntityPlayer var1) { + if(this.saddled) { + var1.mountEntity(this); + return true; + } else { + return false; + } + } + + protected int getDropItemId() { + return Item.porkRaw.shiftedIndex; + } +} diff --git a/source/net/minecraft/src/EntityPlayer.java b/source/net/minecraft/src/EntityPlayer.java new file mode 100644 index 0000000..b7db196 --- /dev/null +++ b/source/net/minecraft/src/EntityPlayer.java @@ -0,0 +1,219 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityPlayer extends EntityLiving { + public InventoryPlayer inventory = new InventoryPlayer(this); + public byte unusedMiningCooldown = 0; + public int score = 0; + public float prevCameraYaw; + public float cameraYaw; + protected String username; + private int damageRemainder = 0; + + public EntityPlayer(World var1) { + super(var1); + this.setPositionAndRotation((double)var1.spawnX + 0.5D, (double)var1.spawnY, (double)var1.spawnZ + 0.5D, 0.0F, 0.0F); + this.yOffset = 1.62F; + this.health = 20; + this.entityType = "humanoid"; + this.unusedRotation = 180.0F; + this.fireResistance = 20; + this.texture = "/char.png"; + } + + public void updateRidden() { + super.updateRidden(); + this.prevCameraYaw = this.cameraYaw; + this.cameraYaw = 0.0F; + } + + public void preparePlayerToSpawn() { + this.yOffset = 1.62F; + this.setSize(0.6F, 1.8F); + super.preparePlayerToSpawn(); + if(this.worldObj != null) { + this.worldObj.playerEntity = this; + } + + this.health = 20; + this.deathTime = 0; + } + + public void onLivingUpdate() { + this.worldObj.playMusic(this.posX, this.posY, this.posZ, "calm", 0.0F); + if(this.worldObj.difficultySetting == 0 && this.health < 20 && this.ticksExisted % 20 * 4 == 0) { + this.heal(1); + } + + this.inventory.decrementAnimations(); + this.prevCameraYaw = this.cameraYaw; + super.onLivingUpdate(); + 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.health <= 0) { + var1 = 0.0F; + } + + if(this.onGround || this.health <= 0) { + var2 = 0.0F; + } + + this.cameraYaw += (var1 - this.cameraYaw) * 0.4F; + this.cameraPitch += (var2 - this.cameraPitch) * 0.8F; + if(this.health > 0) { + List var3 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand(1.0D, 0.0D, 1.0D)); + if(var3 != null) { + for(int var4 = 0; var4 < var3.size(); ++var4) { + this.collideWithPlayer((Entity)var3.get(var4)); + } + } + } + + } + + private void collideWithPlayer(Entity var1) { + var1.onCollideWithPlayer(this); + } + + public int getScore() { + return this.score; + } + + public void onDeath(Entity 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); + } + + 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; + } + + public void addToPlayerScore(Entity var1, int var2) { + this.score += var2; + } + + public void dropPlayerItem(ItemStack var1) { + this.dropPlayerItemWithRandomChoice(var1, false); + } + + public void dropPlayerItemWithRandomChoice(ItemStack var1, boolean var2) { + if(var1 != null) { + EntityItem var3 = new EntityItem(this.worldObj, this.posX, this.posY - (double)0.3F, 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.worldObj.spawnEntityInWorld(var3); + } + } + + public float getCurrentPlayerStrVsBlock(Block var1) { + float var2 = this.inventory.getStrVsBlock(var1); + if(this.isInsideOfMaterial(Material.water)) { + var2 /= 5.0F; + } + + if(!this.onGround) { + var2 /= 5.0F; + } + + return var2; + } + + public boolean canHarvestBlock(Block var1) { + return this.inventory.canHarvestBlock(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void displayGUIChest(IInventory var1) { + } + + public void displayWorkbenchGUI() { + } + + public void onItemPickup(Entity var1) { + } + + protected float getEyeHeight() { + return 0.12F; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + this.entityAge = 0; + if(this.health <= 0) { + return false; + } else if((float)this.heartsLife > (float)this.heartsHalvesLife / 2.0F) { + return false; + } else { + if(var1 instanceof EntityMonster || var1 instanceof EntityArrow) { + if(this.worldObj.difficultySetting == 0) { + var2 = 0; + } + + if(this.worldObj.difficultySetting == 1) { + var2 = var2 / 3 + 1; + } + + if(this.worldObj.difficultySetting == 3) { + var2 = var2 * 3 / 2; + } + } + + int var3 = 25 - this.inventory.getTotalArmorValue(); + int var4 = var2 * var3 + this.damageRemainder; + this.inventory.damageArmor(var2); + var2 = var4 / 25; + this.damageRemainder = var4 % 25; + return var2 == 0 ? false : super.attackEntityFrom(var1, var2); + } + } + + public void displayGUIFurnace(TileEntityFurnace var1) { + } + + public void displayGUIEditSign(TileEntitySign var1) { + } + + public void interactWithEntity(Entity var1) { + } +} diff --git a/source/net/minecraft/src/EntityPlayerSP.java b/source/net/minecraft/src/EntityPlayerSP.java new file mode 100644 index 0000000..7b791e1 --- /dev/null +++ b/source/net/minecraft/src/EntityPlayerSP.java @@ -0,0 +1,118 @@ +package net.minecraft.src; + +public class EntityPlayerSP extends EntityPlayer { + public MovementInput movementInput; + private Minecraft mc; + + public EntityPlayerSP(Minecraft var1, World var2, Session var3) { + super(var2); + this.mc = var1; + if(var2 != null) { + if(var2.playerEntity != null) { + var2.setEntityDead(var2.playerEntity); + } + + var2.playerEntity = this; + } + + if(var3 != null && var3.username != null && var3.username.length() > 0) { + this.skinUrl = "http://www.minecraft.net/skin/" + var3.username + ".png"; + } + + this.username = var3.username; + } + + public void updatePlayerActionState() { + this.moveStrafing = this.movementInput.moveStrafe; + this.moveForward = this.movementInput.moveForward; + this.isJumping = this.movementInput.jump; + } + + public void onLivingUpdate() { + this.movementInput.updatePlayerMoveState(this); + super.onLivingUpdate(); + } + + public void resetPlayerKeyState() { + this.movementInput.resetKeyState(); + } + + public void handleKeyPress(int var1, boolean var2) { + this.movementInput.checkKeyForMovementInput(var1, var2); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setInteger("Score", this.score); + var1.setTag("Inventory", this.inventory.writeToNBT(new NBTTagList())); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.score = var1.getInteger("Score"); + NBTTagList var2 = var1.getTagList("Inventory"); + this.inventory.readFromNBT(var2); + } + + public void displayGUIChest(IInventory var1) { + this.mc.displayGuiScreen(new GuiChest(this.inventory, var1)); + } + + public void displayGUIEditSign(TileEntitySign var1) { + this.mc.displayGuiScreen(new GuiEditSign(var1)); + } + + public void displayWorkbenchGUI() { + this.mc.displayGuiScreen(new GuiCrafting(this.inventory)); + } + + public void displayGUIFurnace(TileEntityFurnace var1) { + this.mc.displayGuiScreen(new GuiFurnace(this.inventory, var1)); + } + + public ItemStack getCurrentEquippedItem() { + return this.inventory.getCurrentItem(); + } + + public void displayGUIInventory() { + this.inventory.setInventorySlotContents(this.inventory.currentItem, (ItemStack)null); + } + + public void attackEntity(Entity var1) { + int var2 = this.inventory.getDamageVsEntity(var1); + if(var2 > 0) { + var1.attackEntityFrom(this, var2); + ItemStack var3 = this.getCurrentEquippedItem(); + if(var3 != null && var1 instanceof EntityLiving) { + var3.hitEntity((EntityLiving)var1); + if(var3.stackSize <= 0) { + var3.onItemDestroyedByUse(this); + this.displayGUIInventory(); + } + } + } + + } + + public void onItemPickup(Entity var1) { + this.mc.effectRenderer.addEffect(new EntityPickupFX(this.mc.theWorld, var1, this, -0.5F)); + } + + public int getPlayerArmorValue() { + return this.inventory.getTotalArmorValue(); + } + + public void interactWithEntity(Entity var1) { + if(!var1.interact(this)) { + ItemStack var2 = this.getCurrentEquippedItem(); + if(var2 != null && var1 instanceof EntityLiving) { + var2.useItemOnEntity((EntityLiving)var1); + if(var2.stackSize <= 0) { + var2.onItemDestroyedByUse(this); + this.displayGUIInventory(); + } + } + + } + } +} diff --git a/source/net/minecraft/src/EntityRainFX.java b/source/net/minecraft/src/EntityRainFX.java new file mode 100644 index 0000000..1b3c2bc --- /dev/null +++ b/source/net/minecraft/src/EntityRainFX.java @@ -0,0 +1,53 @@ +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.particleTextureIndex = 16; + this.setSize(0.01F, 0.01F); + this.particleGravity = 0.06F; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + super.renderParticle(var1, var2, var3, var4, var5, var6, var7); + } + + 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.setEntityDead(); + } + + if(this.onGround) { + if(Math.random() < 0.5D) { + this.setEntityDead(); + } + + 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.getIsLiquid() || var1.isSolid()) { + double var2 = (double)((float)(MathHelper.floor_double(this.posY) + 1) - BlockFluid.getPercentAir(this.worldObj.getBlockMetadata(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)))); + if(this.posY < var2) { + this.setEntityDead(); + } + } + + } +} diff --git a/source/net/minecraft/src/EntityRenderer.java b/source/net/minecraft/src/EntityRenderer.java new file mode 100644 index 0000000..7d2ce97 --- /dev/null +++ b/source/net/minecraft/src/EntityRenderer.java @@ -0,0 +1,623 @@ +package net.minecraft.src; + +import java.nio.FloatBuffer; +import java.util.List; +import java.util.Random; +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 { + private Minecraft mc; + private boolean isDisplayActive = false; + private float farPlaneDistance = 0.0F; + public ItemRenderer itemRenderer; + private int rendererUpdateCount; + private Entity pointedEntity = null; + private int mouseDX; + private int mouseDY; + private Random random = new Random(); + volatile int unusedInt1 = 0; + volatile int unusedInt2 = 0; + FloatBuffer fogColorBuffer = GLAllocation.createFloatBuffer(16); + float fogColorRed; + float fogColorGreen; + float fogColorBlue; + private float prevFogColor; + private float fogColor; + + public EntityRenderer(Minecraft var1) { + this.mc = var1; + this.itemRenderer = new ItemRenderer(var1); + } + + public void updateRenderer() { + this.prevFogColor = this.fogColor; + float var1 = this.mc.theWorld.getBrightness(MathHelper.floor_double(this.mc.thePlayer.posX), MathHelper.floor_double(this.mc.thePlayer.posY), MathHelper.floor_double(this.mc.thePlayer.posZ)); + float var2 = (float)(3 - this.mc.gameSettings.renderDistance) / 3.0F; + float var3 = var1 * (1.0F - var2) + var2; + this.fogColor += (var3 - this.fogColor) * 0.1F; + ++this.rendererUpdateCount; + this.itemRenderer.updateEquippedItem(); + if(this.mc.isRaining) { + this.addRainParticles(); + } + + } + + private Vec3D getPlayerPosition(float var1) { + EntityPlayerSP var2 = this.mc.thePlayer; + double var3 = var2.prevPosX + (var2.posX - var2.prevPosX) * (double)var1; + double var5 = var2.prevPosY + (var2.posY - var2.prevPosY) * (double)var1; + double var7 = var2.prevPosZ + (var2.posZ - var2.prevPosZ) * (double)var1; + return Vec3D.createVector(var3, var5, var7); + } + + private void getMouseOver(float var1) { + EntityPlayerSP var2 = this.mc.thePlayer; + float var3 = var2.prevRotationPitch + (var2.rotationPitch - var2.prevRotationPitch) * var1; + float var4 = var2.prevRotationYaw + (var2.rotationYaw - var2.prevRotationYaw) * var1; + Vec3D var5 = this.getPlayerPosition(var1); + float var6 = MathHelper.cos(-var4 * ((float)Math.PI / 180.0F) - (float)Math.PI); + float var7 = MathHelper.sin(-var4 * ((float)Math.PI / 180.0F) - (float)Math.PI); + float var8 = -MathHelper.cos(-var3 * ((float)Math.PI / 180.0F)); + float var9 = MathHelper.sin(-var3 * ((float)Math.PI / 180.0F)); + float var10 = var7 * var8; + float var12 = var6 * var8; + double var13 = (double)this.mc.playerController.getBlockReachDistance(); + Vec3D var15 = var5.addVector((double)var10 * var13, (double)var9 * var13, (double)var12 * var13); + this.mc.objectMouseOver = this.mc.theWorld.rayTraceBlocks(var5, var15); + double var16 = var13; + var5 = this.getPlayerPosition(var1); + if(this.mc.objectMouseOver != null) { + var16 = this.mc.objectMouseOver.hitVec.distanceTo(var5); + } + + if(this.mc.playerController instanceof PlayerControllerCreative) { + var13 = 32.0D; + } else { + if(var16 > 3.0D) { + var16 = 3.0D; + } + + var13 = var16; + } + + var15 = var5.addVector((double)var10 * var13, (double)var9 * var13, (double)var12 * var13); + this.pointedEntity = null; + List var18 = this.mc.theWorld.getEntitiesWithinAABBExcludingEntity(var2, var2.boundingBox.addCoord((double)var10 * var13, (double)var9 * var13, (double)var12 * var13)); + double var19 = 0.0D; + + for(int var21 = 0; var21 < var18.size(); ++var21) { + Entity var22 = (Entity)var18.get(var21); + if(var22.canBeCollidedWith()) { + float var23 = 0.1F; + AxisAlignedBB var24 = var22.boundingBox.expand((double)var23, (double)var23, (double)var23); + MovingObjectPosition var25 = var24.calculateIntercept(var5, var15); + if(var25 != null) { + double var26 = var5.distanceTo(var25.hitVec); + if(var26 < var19 || var19 == 0.0D) { + this.pointedEntity = var22; + var19 = var26; + } + } + } + } + + if(this.pointedEntity != null && !(this.mc.playerController instanceof PlayerControllerCreative)) { + this.mc.objectMouseOver = new MovingObjectPosition(this.pointedEntity); + } + + } + + private float getFOVModifier(float var1) { + EntityPlayerSP var2 = this.mc.thePlayer; + float var3 = 70.0F; + if(var2.isInsideOfMaterial(Material.water)) { + var3 = 60.0F; + } + + if(var2.health <= 0) { + float var4 = (float)var2.deathTime + var1; + var3 /= (1.0F - 500.0F / (var4 + 500.0F)) * 2.0F + 1.0F; + } + + return var3; + } + + private void hurtCameraEffect(float var1) { + EntityPlayerSP var2 = this.mc.thePlayer; + float var3 = (float)var2.hurtTime - var1; + float var4; + if(var2.health <= 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.gameSettings.thirdPersonView) { + EntityPlayerSP var2 = this.mc.thePlayer; + 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) { + EntityPlayerSP var2 = this.mc.thePlayer; + double var3 = var2.prevPosX + (var2.posX - var2.prevPosX) * (double)var1; + double var5 = var2.prevPosY + (var2.posY - var2.prevPosY) * (double)var1; + double var7 = var2.prevPosZ + (var2.posZ - var2.prevPosZ) * (double)var1; + if(this.mc.gameSettings.thirdPersonView) { + double var9 = 4.0D; + double var11 = (double)(-MathHelper.sin(var2.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(var2.rotationPitch / 180.0F * (float)Math.PI)) * var9; + double var13 = (double)(MathHelper.cos(var2.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(var2.rotationPitch / 180.0F * (float)Math.PI)) * var9; + double var15 = (double)(-MathHelper.sin(var2.rotationPitch / 180.0F * (float)Math.PI)) * var9; + + for(int var17 = 0; var17 < 8; ++var17) { + float var18 = (float)((var17 & 1) * 2 - 1); + float var19 = (float)((var17 >> 1 & 1) * 2 - 1); + float var20 = (float)((var17 >> 2 & 1) * 2 - 1); + var18 *= 0.1F; + var19 *= 0.1F; + var20 *= 0.1F; + MovingObjectPosition var21 = this.mc.theWorld.rayTraceBlocks(Vec3D.createVector(var3 + (double)var18, var5 + (double)var19, var7 + (double)var20), Vec3D.createVector(var3 - var11 + (double)var18 + (double)var20, var5 - var15 + (double)var19, var7 - var13 + (double)var20)); + if(var21 != null) { + double var22 = var21.hitVec.distanceTo(Vec3D.createVector(var3, var5, var7)); + if(var22 < var9) { + var9 = var22; + } + } + } + + GL11.glTranslatef(0.0F, 0.0F, (float)(-var9)); + } else { + GL11.glTranslatef(0.0F, 0.0F, -0.1F); + } + + 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); + } + + 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); + } + + GLU.gluPerspective(this.getFOVModifier(var1), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance); + 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); + } + + this.orientCamera(var1); + } + + private void renderHand(float var1, int var2) { + 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) { + this.itemRenderer.renderItemInFirstPerson(var1); + } + + GL11.glPopMatrix(); + if(!this.mc.gameSettings.thirdPersonView) { + this.itemRenderer.renderOverlays(var1); + this.hurtCameraEffect(var1); + } + + if(this.mc.gameSettings.viewBobbing) { + this.setupViewBobbing(var1); + } + + } + + public void updateCameraAndRender(float var1) { + if(this.isDisplayActive && !Display.isActive()) { + this.mc.displayInGameMenu(); + } + + this.isDisplayActive = Display.isActive(); + int var3; + int var9; + int var10; + if(this.mc.inGameHasFocus) { + int var2 = Mouse.getDX() * 0; + var3 = Mouse.getDY() * 0; + this.mc.mouseHelper.mouseXYChange(); + byte var4 = 1; + if(this.mc.gameSettings.invertMouse) { + var4 = -1; + } + + boolean var5 = false; + boolean var6 = false; + var9 = var2 + this.mc.mouseHelper.deltaX; + var10 = var3 - this.mc.mouseHelper.deltaY; + if(var2 != 0 || this.mouseDX != 0) { + System.out.println("xxo: " + var2 + ", " + this.mouseDX + ": " + this.mouseDX + ", xo: " + var9); + } + + if(this.mouseDX != 0) { + this.mouseDX = 0; + } + + if(this.mouseDY != 0) { + this.mouseDY = 0; + } + + if(var2 != 0) { + this.mouseDX = var2; + } + + if(var3 != 0) { + this.mouseDY = var3; + } + + this.mc.thePlayer.setAngles((float)var9, (float)(var10 * var4)); + } + + if(!this.mc.skipRenderWorld) { + ScaledResolution var7 = new ScaledResolution(this.mc.displayWidth, this.mc.displayHeight); + var3 = var7.getScaledWidth(); + int var8 = var7.getScaledHeight(); + var9 = Mouse.getX() * var3 / this.mc.displayWidth; + var10 = var8 - Mouse.getY() * var8 / this.mc.displayHeight - 1; + if(this.mc.theWorld != null) { + this.renderWorld(var1); + this.mc.ingameGUI.renderGameOverlay(var1, this.mc.currentScreen != null, var9, var10); + } else { + GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); + GL11.glClearColor(0.0F, 0.0F, 0.0F, 0.0F); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT | GL11.GL_COLOR_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + this.setupOverlayRendering(); + } + + if(this.mc.currentScreen != null) { + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + this.mc.currentScreen.drawScreen(var9, var10, var1); + } + + } + } + + public void renderWorld(float var1) { + this.getMouseOver(var1); + EntityPlayerSP var2 = this.mc.thePlayer; + RenderGlobal var3 = this.mc.renderGlobal; + EffectRenderer var4 = this.mc.effectRenderer; + double var5 = var2.lastTickPosX + (var2.posX - var2.lastTickPosX) * (double)var1; + double var7 = var2.lastTickPosY + (var2.posY - var2.lastTickPosY) * (double)var1; + double var9 = var2.lastTickPosZ + (var2.posZ - var2.lastTickPosZ) * (double)var1; + + for(int var11 = 0; var11 < 2; ++var11) { + if(this.mc.gameSettings.anaglyph) { + if(var11 == 0) { + GL11.glColorMask(false, true, true, false); + } else { + GL11.glColorMask(true, false, false, false); + } + } + + 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.setupCameraTransform(var1, var11); + ClippingHelperImplementation.getInstance(); + if(this.mc.gameSettings.renderDistance < 2) { + this.setupFog(-1); + var3.renderSky(var1); + } + + GL11.glEnable(GL11.GL_FOG); + this.setupFog(1); + Frustrum var12 = new Frustrum(); + var12.setPosition(var5, var7, var9); + this.mc.renderGlobal.clipRenderersByFrustrum(var12, var1); + this.mc.renderGlobal.updateRenderers(var2, false); + this.setupFog(0); + GL11.glEnable(GL11.GL_FOG); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); + RenderHelper.disableStandardItemLighting(); + var3.sortAndRender(var2, 0, (double)var1); + RenderHelper.enableStandardItemLighting(); + var3.renderEntities(this.getPlayerPosition(var1), var12, var1); + var4.renderLitParticles(var2, var1); + RenderHelper.disableStandardItemLighting(); + this.setupFog(0); + var4.renderParticles(var2, var1); + if(this.mc.objectMouseOver != null && var2.isInsideOfMaterial(Material.water)) { + GL11.glDisable(GL11.GL_ALPHA_TEST); + var3.drawBlockBreaking(var2, this.mc.objectMouseOver, 0, var2.inventory.getCurrentItem(), var1); + var3.drawSelectionBox(var2, this.mc.objectMouseOver, 0, var2.inventory.getCurrentItem(), var1); + GL11.glEnable(GL11.GL_ALPHA_TEST); + } + + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + this.setupFog(0); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); + if(this.mc.gameSettings.fancyGraphics) { + GL11.glColorMask(false, false, false, false); + int var13 = var3.sortAndRender(var2, 1, (double)var1); + GL11.glColorMask(true, true, true, true); + if(this.mc.gameSettings.anaglyph) { + if(var11 == 0) { + GL11.glColorMask(false, true, true, false); + } else { + GL11.glColorMask(true, false, false, false); + } + } + + if(var13 > 0) { + var3.renderAllRenderLists(1, (double)var1); + } + } else { + var3.sortAndRender(var2, 1, (double)var1); + } + + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_BLEND); + if(this.mc.objectMouseOver != null && !var2.isInsideOfMaterial(Material.water)) { + GL11.glDisable(GL11.GL_ALPHA_TEST); + var3.drawBlockBreaking(var2, this.mc.objectMouseOver, 0, var2.inventory.getCurrentItem(), var1); + var3.drawSelectionBox(var2, this.mc.objectMouseOver, 0, var2.inventory.getCurrentItem(), var1); + GL11.glEnable(GL11.GL_ALPHA_TEST); + } + + GL11.glDisable(GL11.GL_FOG); + if(this.mc.isRaining) { + this.renderRain(var1); + } + + if(this.pointedEntity != null) { + } + + this.setupFog(0); + GL11.glEnable(GL11.GL_FOG); + var3.renderClouds(var1); + GL11.glDisable(GL11.GL_FOG); + this.setupFog(1); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + this.renderHand(var1, var11); + if(!this.mc.gameSettings.anaglyph) { + return; + } + } + + GL11.glColorMask(true, true, true, false); + } + + private void addRainParticles() { + EntityPlayerSP var1 = this.mc.thePlayer; + World var2 = this.mc.theWorld; + int var3 = MathHelper.floor_double(var1.posX); + int var4 = MathHelper.floor_double(var1.posY); + int var5 = MathHelper.floor_double(var1.posZ); + byte var6 = 4; + + for(int var7 = 0; var7 < 50; ++var7) { + int var8 = var3 + this.random.nextInt(var6 * 2 + 1) - var6; + int var9 = var5 + this.random.nextInt(var6 * 2 + 1) - var6; + int var10 = var2.getTopSolidOrLiquidBlock(var8, var9); + int var11 = var2.getBlockId(var8, var10 - 1, var9); + if(var10 <= var4 + var6 && var10 >= var4 - var6) { + float var12 = this.random.nextFloat(); + float var13 = this.random.nextFloat(); + if(var11 > 0) { + this.mc.effectRenderer.addEffect(new EntityRainFX(var2, (double)((float)var8 + var12), (double)((float)var10 + 0.1F) - Block.blocksList[var11].minY, (double)((float)var9 + var13))); + } + } + } + + } + + private void renderRain(float var1) { + EntityPlayerSP var2 = this.mc.thePlayer; + World 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); + Tessellator var7 = 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.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/rain.png")); + byte var8 = 5; + + for(int var9 = var4 - var8; var9 <= var4 + var8; ++var9) { + for(int var10 = var6 - var8; var10 <= var6 + var8; ++var10) { + int var11 = var3.getTopSolidOrLiquidBlock(var9, var10); + int var12 = var5 - var8; + int var13 = var5 + var8; + if(var12 < var11) { + var12 = var11; + } + + if(var13 < var11) { + var13 = var11; + } + + float var14 = 2.0F; + if(var12 != var13) { + float var15 = ((float)((this.rendererUpdateCount + var9 * 3121 + var10 * 418711) % 32) + var1) / 32.0F; + double var16 = (double)((float)var9 + 0.5F) - var2.posX; + double var18 = (double)((float)var10 + 0.5F) - var2.posZ; + float var20 = MathHelper.sqrt_double(var16 * var16 + var18 * var18) / (float)var8; + GL11.glColor4f(1.0F, 1.0F, 1.0F, (1.0F - var20 * var20) * 0.7F); + var7.startDrawingQuads(); + var7.addVertexWithUV((double)(var9 + 0), (double)var12, (double)(var10 + 0), (double)(0.0F * var14), (double)((float)var12 * var14 / 8.0F + var15 * var14)); + var7.addVertexWithUV((double)(var9 + 1), (double)var12, (double)(var10 + 1), (double)(1.0F * var14), (double)((float)var12 * var14 / 8.0F + var15 * var14)); + var7.addVertexWithUV((double)(var9 + 1), (double)var13, (double)(var10 + 1), (double)(1.0F * var14), (double)((float)var13 * var14 / 8.0F + var15 * var14)); + var7.addVertexWithUV((double)(var9 + 0), (double)var13, (double)(var10 + 0), (double)(0.0F * var14), (double)((float)var13 * var14 / 8.0F + var15 * var14)); + var7.addVertexWithUV((double)(var9 + 0), (double)var12, (double)(var10 + 1), (double)(0.0F * var14), (double)((float)var12 * var14 / 8.0F + var15 * var14)); + var7.addVertexWithUV((double)(var9 + 1), (double)var12, (double)(var10 + 0), (double)(1.0F * var14), (double)((float)var12 * var14 / 8.0F + var15 * var14)); + var7.addVertexWithUV((double)(var9 + 1), (double)var13, (double)(var10 + 0), (double)(1.0F * var14), (double)((float)var13 * var14 / 8.0F + var15 * var14)); + var7.addVertexWithUV((double)(var9 + 0), (double)var13, (double)(var10 + 1), (double)(0.0F * var14), (double)((float)var13 * var14 / 8.0F + var15 * var14)); + var7.draw(); + } + } + } + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_BLEND); + } + + public void setupOverlayRendering() { + ScaledResolution var1 = new ScaledResolution(this.mc.displayWidth, this.mc.displayHeight); + int var2 = var1.getScaledWidth(); + int var3 = var1.getScaledHeight(); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glOrtho(0.0D, (double)var2, (double)var3, 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) { + World var2 = this.mc.theWorld; + EntityPlayerSP var3 = this.mc.thePlayer; + float var4 = 1.0F / (float)(4 - this.mc.gameSettings.renderDistance); + var4 = 1.0F - (float)Math.pow((double)var4, 0.25D); + Vec3D var5 = var2.getSkyColor(var1); + float var6 = (float)var5.xCoord; + float var7 = (float)var5.yCoord; + float var8 = (float)var5.zCoord; + Vec3D var9 = var2.getFogColor(var1); + this.fogColorRed = (float)var9.xCoord; + this.fogColorGreen = (float)var9.yCoord; + this.fogColorBlue = (float)var9.zCoord; + this.fogColorRed += (var6 - this.fogColorRed) * var4; + this.fogColorGreen += (var7 - this.fogColorGreen) * var4; + this.fogColorBlue += (var8 - this.fogColorBlue) * var4; + if(var3.isInsideOfMaterial(Material.water)) { + this.fogColorRed = 0.02F; + this.fogColorGreen = 0.02F; + this.fogColorBlue = 0.2F; + } else if(var3.isInsideOfMaterial(Material.lava)) { + this.fogColorRed = 0.6F; + this.fogColorGreen = 0.1F; + this.fogColorBlue = 0.0F; + } + + float var10 = this.prevFogColor + (this.fogColor - this.prevFogColor) * var1; + this.fogColorRed *= var10; + this.fogColorGreen *= var10; + this.fogColorBlue *= var10; + if(this.mc.gameSettings.anaglyph) { + float var11 = (this.fogColorRed * 30.0F + this.fogColorGreen * 59.0F + this.fogColorBlue * 11.0F) / 100.0F; + float var12 = (this.fogColorRed * 30.0F + this.fogColorGreen * 70.0F) / 100.0F; + float var13 = (this.fogColorRed * 30.0F + this.fogColorBlue * 70.0F) / 100.0F; + this.fogColorRed = var11; + this.fogColorGreen = var12; + this.fogColorBlue = var13; + } + + GL11.glClearColor(this.fogColorRed, this.fogColorGreen, this.fogColorBlue, 0.0F); + } + + private void setupFog(int var1) { + EntityPlayerSP var2 = this.mc.thePlayer; + 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); + float var3; + float var4; + float var5; + float var6; + float var7; + float var8; + if(var2.isInsideOfMaterial(Material.water)) { + GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP); + GL11.glFogf(GL11.GL_FOG_DENSITY, 0.1F); + var3 = 0.4F; + var4 = 0.4F; + var5 = 0.9F; + if(this.mc.gameSettings.anaglyph) { + var6 = (var3 * 30.0F + var4 * 59.0F + var5 * 11.0F) / 100.0F; + var7 = (var3 * 30.0F + var4 * 70.0F) / 100.0F; + var8 = (var3 * 30.0F + var5 * 70.0F) / 100.0F; + } + } else if(var2.isInsideOfMaterial(Material.lava)) { + GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP); + GL11.glFogf(GL11.GL_FOG_DENSITY, 2.0F); + var3 = 0.4F; + var4 = 0.3F; + var5 = 0.3F; + if(this.mc.gameSettings.anaglyph) { + var6 = (var3 * 30.0F + var4 * 59.0F + var5 * 11.0F) / 100.0F; + var7 = (var3 * 30.0F + var4 * 70.0F) / 100.0F; + var8 = (var3 * 30.0F + var5 * 70.0F) / 100.0F; + } + } else { + GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_LINEAR); + GL11.glFogf(GL11.GL_FOG_START, this.farPlaneDistance * 0.25F); + GL11.glFogf(GL11.GL_FOG_END, this.farPlaneDistance); + if(var1 < 0) { + GL11.glFogf(GL11.GL_FOG_START, 0.0F); + GL11.glFogf(GL11.GL_FOG_END, this.farPlaneDistance * 0.8F); + } + + if(GLContext.getCapabilities().GL_NV_fog_distance) { + GL11.glFogi(NVFogDistance.GL_FOG_DISTANCE_MODE_NV, NVFogDistance.GL_EYE_RADIAL_NV); + } + } + + 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; + } +} diff --git a/source/net/minecraft/src/EntitySheep.java b/source/net/minecraft/src/EntitySheep.java new file mode 100644 index 0000000..33a2bcd --- /dev/null +++ b/source/net/minecraft/src/EntitySheep.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +public class EntitySheep extends EntityAnimal { + public boolean sheared = false; + + public EntitySheep(World var1) { + super(var1); + this.texture = "/mob/sheep.png"; + this.setSize(0.9F, 1.3F); + } + + public boolean attackEntityFrom(Entity var1, int var2) { + if(!this.sheared && var1 instanceof EntityLiving) { + this.sheared = true; + int var3 = 1 + this.rand.nextInt(3); + + for(int var4 = 0; var4 < var3; ++var4) { + EntityItem var5 = this.entityDropItem(Block.cloth.blockID, 1, 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); + } + } + + return super.attackEntityFrom(var1, var2); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setBoolean("Sheared", this.sheared); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.sheared = var1.getBoolean("Sheared"); + } + + protected String getLivingSound() { + return "mob.sheep"; + } + + protected String getHurtSound() { + return "mob.sheep"; + } + + protected String getDeathSound() { + return "mob.sheep"; + } +} diff --git a/source/net/minecraft/src/EntitySkeleton.java b/source/net/minecraft/src/EntitySkeleton.java new file mode 100644 index 0000000..3508baf --- /dev/null +++ b/source/net/minecraft/src/EntitySkeleton.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +public class EntitySkeleton extends EntityMonster { + public EntitySkeleton(World var1) { + super(var1); + this.texture = "/mob/skeleton.png"; + } + + public void onLivingUpdate() { + if(this.worldObj.isDaytime()) { + float var1 = this.getEntityBrightness(1.0F); + if(var1 > 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 < (var1 - 0.4F) * 2.0F) { + this.fire = 300; + } + } + + super.onLivingUpdate(); + } + + protected void attackEntity(Entity var1, float var2) { + if(var2 < 10.0F) { + double var3 = var1.posX - this.posX; + double var5 = var1.posZ - this.posZ; + if(this.attackTime == 0) { + EntityArrow var7 = new EntityArrow(this.worldObj, this); + var7.posY += (double)1.4F; + double var8 = var1.posY - (double)0.2F - var7.posY; + float var10 = MathHelper.sqrt_double(var3 * var3 + var5 * var5) * 0.2F; + this.worldObj.playSoundAtEntity(this, "random.bow", 1.0F, 1.0F / (this.rand.nextFloat() * 0.4F + 0.8F)); + this.worldObj.spawnEntityInWorld(var7); + var7.setArrowHeading(var3, var8 + (double)var10, var5, 0.6F, 12.0F); + this.attackTime = 30; + } + + this.rotationYaw = (float)(Math.atan2(var5, var3) * 180.0D / (double)((float)Math.PI)) - 90.0F; + this.hasAttacked = true; + } + + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + protected int getDropItemId() { + return Item.arrow.shiftedIndex; + } +} diff --git a/source/net/minecraft/src/EntitySmokeFX.java b/source/net/minecraft/src/EntitySmokeFX.java new file mode 100644 index 0000000..269a249 --- /dev/null +++ b/source/net/minecraft/src/EntitySmokeFX.java @@ -0,0 +1,63 @@ +package net.minecraft.src; + +public class EntitySmokeFX extends EntityFX { + float smokeParticleScale; + + public EntitySmokeFX(World var1, double var2, double var4, double var6) { + this(var1, var2, var4, var6, 1.0F); + } + + public EntitySmokeFX(World var1, double var2, double var4, double var6, float var8) { + 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.particleRed = this.particleGreen = this.particleBlue = (float)(Math.random() * (double)0.3F); + this.particleScale *= 12.0F / 16.0F; + this.particleScale *= var8; + this.smokeParticleScale = 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.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.setEntityDead(); + } + + this.particleTextureIndex = 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/source/net/minecraft/src/EntitySorter.java b/source/net/minecraft/src/EntitySorter.java new file mode 100644 index 0000000..f7f866f --- /dev/null +++ b/source/net/minecraft/src/EntitySorter.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.Comparator; + +public class EntitySorter implements Comparator { + private Entity comparedEntity; + + public EntitySorter(Entity var1) { + this.comparedEntity = var1; + } + + public int a(WorldRenderer var1, WorldRenderer var2) { + return var1.distanceToEntitySquared(this.comparedEntity) < var2.distanceToEntitySquared(this.comparedEntity) ? -1 : 1; + } + + public int compare(Object var1, Object var2) { + return this.a((WorldRenderer)var1, (WorldRenderer)var2); + } +} diff --git a/source/net/minecraft/src/EntitySpider.java b/source/net/minecraft/src/EntitySpider.java new file mode 100644 index 0000000..98b540f --- /dev/null +++ b/source/net/minecraft/src/EntitySpider.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +public class EntitySpider extends EntityMonster { + public EntitySpider(World var1) { + super(var1); + this.texture = "/mob/spider.png"; + this.setSize(1.4F, 0.9F); + this.moveSpeed = 0.8F; + } + + protected Entity findPlayerToAttack() { + float var1 = this.getEntityBrightness(1.0F); + if(var1 < 0.5F) { + double var2 = this.worldObj.playerEntity.getDistanceSqToEntity(this); + double var4 = 16.0D; + if(var2 < var4 * var4) { + return this.worldObj.playerEntity; + } + } + + return null; + } + + protected void attackEntity(Entity var1, float var2) { + float var3 = this.getEntityBrightness(1.0F); + if(var3 > 0.5F && this.rand.nextInt(100) == 0) { + this.playerToAttack = 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); + } + + } + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + protected int getDropItemId() { + return Item.silk.shiftedIndex; + } +} diff --git a/source/net/minecraft/src/EntitySplashFX.java b/source/net/minecraft/src/EntitySplashFX.java new file mode 100644 index 0000000..1375ad2 --- /dev/null +++ b/source/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.particleTextureIndex; + if(var10 == 0.0D && (var8 != 0.0D || var12 != 0.0D)) { + this.motionX = var8; + this.motionY = var10 + 0.1D; + this.motionZ = var12; + } + + } +} diff --git a/source/net/minecraft/src/EntityTNTPrimed.java b/source/net/minecraft/src/EntityTNTPrimed.java new file mode 100644 index 0000000..9e59e00 --- /dev/null +++ b/source/net/minecraft/src/EntityTNTPrimed.java @@ -0,0 +1,68 @@ +package net.minecraft.src; + +public class EntityTNTPrimed extends Entity { + public int fuse; + + 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, float var2, float var3, float var4) { + this(var1); + this.setPosition((double)var2, (double)var3, (double)var4); + float var5 = (float)(Math.random() * (double)((float)Math.PI) * 2.0D); + this.motionX = (double)(-MathHelper.sin(var5 * (float)Math.PI / 180.0F) * 0.02F); + this.motionY = (double)0.2F; + this.motionZ = (double)(-MathHelper.cos(var5 * (float)Math.PI / 180.0F) * 0.02F); + this.canTriggerWalking = false; + this.fuse = 80; + this.prevPosX = (double)var2; + this.prevPosY = (double)var3; + this.prevPosZ = (double)var4; + } + + 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.setEntityDead(); + this.createExplosion(); + } else { + this.worldObj.spawnParticle("smoke", this.posX, this.posY + 0.5D, this.posZ, 0.0D, 0.0D, 0.0D); + } + + } + + private void createExplosion() { + float var1 = 4.0F; + this.worldObj.createExplosion((Entity)null, this.posX, this.posY, this.posZ, var1); + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + var1.setByte("Fuse", (byte)this.fuse); + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + this.fuse = var1.getByte("Fuse"); + } +} diff --git a/source/net/minecraft/src/EntityZombie.java b/source/net/minecraft/src/EntityZombie.java new file mode 100644 index 0000000..5e30538 --- /dev/null +++ b/source/net/minecraft/src/EntityZombie.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class EntityZombie extends EntityMonster { + public EntityZombie(World var1) { + super(var1); + this.texture = "/mob/zombie.png"; + this.moveSpeed = 0.5F; + this.attackStrength = 5; + } + + public void onLivingUpdate() { + if(this.worldObj.isDaytime()) { + float var1 = this.getEntityBrightness(1.0F); + if(var1 > 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 < (var1 - 0.4F) * 2.0F) { + this.fire = 300; + } + } + + super.onLivingUpdate(); + } + + protected int getDropItemId() { + return Item.feather.shiftedIndex; + } +} diff --git a/source/net/minecraft/src/EnumArt.java b/source/net/minecraft/src/EnumArt.java new file mode 100644 index 0000000..daa40fa --- /dev/null +++ b/source/net/minecraft/src/EnumArt.java @@ -0,0 +1,37 @@ +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), + Wanderer("Wanderer", 16, 32, 0, 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), + Fighters("Fighters", 64, 32, 0, 96), + Pointer("Pointer", 64, 64, 0, 192); + + 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/source/net/minecraft/src/EnumOS.java b/source/net/minecraft/src/EnumOS.java new file mode 100644 index 0000000..d8447c5 --- /dev/null +++ b/source/net/minecraft/src/EnumOS.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +enum EnumOS { + linux, + solaris, + windows, + macos, + unknown; +} diff --git a/source/net/minecraft/src/EnumOSIsom.java b/source/net/minecraft/src/EnumOSIsom.java new file mode 100644 index 0000000..787fa2a --- /dev/null +++ b/source/net/minecraft/src/EnumOSIsom.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +enum EnumOSIsom { + linux, + solaris, + windows, + macos, + unknown; +} diff --git a/source/net/minecraft/src/EnumSkyBlock.java b/source/net/minecraft/src/EnumSkyBlock.java new file mode 100644 index 0000000..92da84b --- /dev/null +++ b/source/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/source/net/minecraft/src/Explosion.java b/source/net/minecraft/src/Explosion.java new file mode 100644 index 0000000..34001ea --- /dev/null +++ b/source/net/minecraft/src/Explosion.java @@ -0,0 +1,130 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +public class Explosion { + public void doExplosion(World var1, Entity var2, double var3, double var5, double var7, float var9) { + var1.playSoundEffect(var3, var5, var7, "random.explode", 4.0F, (1.0F + (var1.rand.nextFloat() - var1.rand.nextFloat()) * 0.2F) * 0.7F); + HashSet var10 = new HashSet(); + float var11 = var9; + byte var12 = 16; + + int var13; + int var14; + int var15; + double var25; + double var27; + double var29; + for(var13 = 0; var13 < var12; ++var13) { + for(var14 = 0; var14 < var12; ++var14) { + for(var15 = 0; var15 < var12; ++var15) { + if(var13 == 0 || var13 == var12 - 1 || var14 == 0 || var14 == var12 - 1 || var15 == 0 || var15 == var12 - 1) { + double var16 = (double)((float)var13 / ((float)var12 - 1.0F) * 2.0F - 1.0F); + double var18 = (double)((float)var14 / ((float)var12 - 1.0F) * 2.0F - 1.0F); + double var20 = (double)((float)var15 / ((float)var12 - 1.0F) * 2.0F - 1.0F); + double var22 = Math.sqrt(var16 * var16 + var18 * var18 + var20 * var20); + var16 /= var22; + var18 /= var22; + var20 /= var22; + float var24 = var9 * (0.7F + var1.rand.nextFloat() * 0.6F); + var25 = var3; + var27 = var5; + var29 = var7; + + for(float var31 = 0.3F; var24 > 0.0F; var24 -= var31 * (12.0F / 16.0F)) { + int var32 = MathHelper.floor_double(var25); + int var33 = MathHelper.floor_double(var27); + int var34 = MathHelper.floor_double(var29); + int var35 = var1.getBlockId(var32, var33, var34); + if(var35 > 0) { + var24 -= (Block.blocksList[var35].getExplosionResistance(var2) + 0.3F) * var31; + } + + if(var24 > 0.0F) { + var10.add(new ChunkPosition(var32, var33, var34)); + } + + var25 += var16 * (double)var31; + var27 += var18 * (double)var31; + var29 += var20 * (double)var31; + } + } + } + } + } + + var9 *= 2.0F; + var13 = MathHelper.floor_double(var3 - (double)var9 - 1.0D); + var14 = MathHelper.floor_double(var3 + (double)var9 + 1.0D); + var15 = MathHelper.floor_double(var5 - (double)var9 - 1.0D); + int var45 = MathHelper.floor_double(var5 + (double)var9 + 1.0D); + int var17 = MathHelper.floor_double(var7 - (double)var9 - 1.0D); + int var46 = MathHelper.floor_double(var7 + (double)var9 + 1.0D); + List var19 = var1.getEntitiesWithinAABBExcludingEntity(var2, AxisAlignedBB.getBoundingBoxFromPool((double)var13, (double)var15, (double)var17, (double)var14, (double)var45, (double)var46)); + Vec3D var47 = Vec3D.createVector(var3, var5, var7); + + double var55; + double var56; + double var57; + for(int var21 = 0; var21 < var19.size(); ++var21) { + Entity var49 = (Entity)var19.get(var21); + double var23 = var49.getDistance(var3, var5, var7) / (double)var9; + if(var23 <= 1.0D) { + var25 = var49.posX - var3; + var27 = var49.posY - var5; + var29 = var49.posZ - var7; + var55 = (double)MathHelper.sqrt_double(var25 * var25 + var27 * var27 + var29 * var29); + var25 /= var55; + var27 /= var55; + var29 /= var55; + var56 = (double)var1.getBlockDensity(var47, var49.boundingBox); + var57 = (1.0D - var23) * var56; + var49.attackEntityFrom(var2, (int)((var57 * var57 + var57) / 2.0D * 8.0D * (double)var9 + 1.0D)); + var49.motionX += var25 * var57; + var49.motionY += var27 * var57; + var49.motionZ += var29 * var57; + } + } + + var9 = var11; + ArrayList var48 = new ArrayList(); + var48.addAll(var10); + + for(int var50 = var48.size() - 1; var50 >= 0; --var50) { + ChunkPosition var51 = (ChunkPosition)var48.get(var50); + int var52 = var51.x; + int var53 = var51.y; + int var26 = var51.z; + int var54 = var1.getBlockId(var52, var53, var26); + + for(int var28 = 0; var28 < 1; ++var28) { + var29 = (double)((float)var52 + var1.rand.nextFloat()); + var55 = (double)((float)var53 + var1.rand.nextFloat()); + var56 = (double)((float)var26 + var1.rand.nextFloat()); + var57 = var29 - var3; + double var37 = var55 - var5; + double var39 = var56 - var7; + double var41 = (double)MathHelper.sqrt_double(var57 * var57 + var37 * var37 + var39 * var39); + var57 /= var41; + var37 /= var41; + var39 /= var41; + double var43 = 0.5D / (var41 / (double)var9 + 0.1D); + var43 *= (double)(var1.rand.nextFloat() * var1.rand.nextFloat() + 0.3F); + var57 *= var43; + var37 *= var43; + var39 *= var43; + var1.spawnParticle("explode", (var29 + var3 * 1.0D) / 2.0D, (var55 + var5 * 1.0D) / 2.0D, (var56 + var7 * 1.0D) / 2.0D, var57, var37, var39); + var1.spawnParticle("smoke", var29, var55, var56, var57, var37, var39); + } + + if(var54 > 0) { + Block.blocksList[var54].dropBlockAsItemWithChance(var1, var52, var53, var26, var1.getBlockMetadata(var52, var53, var26), 0.3F); + var1.setBlockWithNotify(var52, var53, var26, 0); + Block.blocksList[var54].onBlockDestroyedByExplosion(var1, var52, var53, var26); + } + } + + } +} diff --git a/source/net/minecraft/src/FontRenderer.java b/source/net/minecraft/src/FontRenderer.java new file mode 100644 index 0000000..e8b6015 --- /dev/null +++ b/source/net/minecraft/src/FontRenderer.java @@ -0,0 +1,177 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.nio.IntBuffer; +import javax.imageio.ImageIO; +import org.lwjgl.opengl.GL11; + +public class FontRenderer { + private int[] charWidth = new int[256]; + private int fontTextureName = 0; + private int fontDisplayLists; + private IntBuffer buffer = GLAllocation.createIntBuffer(1024); + + public FontRenderer(GameSettings var1, String var2, RenderEngine var3) { + BufferedImage var4; + try { + var4 = ImageIO.read(RenderEngine.class.getResourceAsStream(var2)); + } catch (IOException var18) { + throw new RuntimeException(var18); + } + + int var5 = var4.getWidth(); + int var6 = var4.getHeight(); + int[] var7 = new int[var5 * var6]; + var4.getRGB(0, 0, var5, var6, var7, 0, var5); + + int var9; + int var10; + int var11; + int var13; + int var15; + int var16; + for(int var8 = 0; var8 < 128; ++var8) { + var9 = var8 % 16; + var10 = var8 / 16; + var11 = 0; + + for(boolean var12 = false; var11 < 8 && !var12; ++var11) { + var13 = var9 * 8 + var11; + var12 = true; + + for(int var14 = 0; var14 < 8 && var12; ++var14) { + var15 = (var10 * 8 + var14) * var5; + var16 = var7[var13 + var15] & 255; + if(var16 > 128) { + var12 = false; + } + } + } + + if(var8 == 32) { + var11 = 4; + } + + this.charWidth[var8] = var11; + } + + this.fontTextureName = var3.getTexture(var2); + this.fontDisplayLists = GLAllocation.generateDisplayLists(288); + Tessellator var19 = Tessellator.instance; + + for(var9 = 0; var9 < 256; ++var9) { + GL11.glNewList(this.fontDisplayLists + var9, GL11.GL_COMPILE); + var19.startDrawingQuads(); + var10 = var9 % 16 * 8; + var11 = var9 / 16 * 8; + float var20 = 7.99F; + var19.addVertexWithUV(0.0D, (double)(0.0F + var20), 0.0D, (double)((float)var10 / 128.0F), (double)(((float)var11 + var20) / 128.0F)); + var19.addVertexWithUV((double)(0.0F + var20), (double)(0.0F + var20), 0.0D, (double)(((float)var10 + var20) / 128.0F), (double)(((float)var11 + var20) / 128.0F)); + var19.addVertexWithUV((double)(0.0F + var20), 0.0D, 0.0D, (double)(((float)var10 + var20) / 128.0F), (double)((float)var11 / 128.0F)); + var19.addVertexWithUV(0.0D, 0.0D, 0.0D, (double)((float)var10 / 128.0F), (double)((float)var11 / 128.0F)); + var19.draw(); + GL11.glTranslatef((float)this.charWidth[var9], 0.0F, 0.0F); + GL11.glEndList(); + } + + for(var9 = 0; var9 < 32; ++var9) { + var10 = (var9 & 8) * 8; + var11 = (var9 & 1) * 191 + var10; + int var21 = ((var9 & 2) >> 1) * 191 + var10; + var13 = ((var9 & 4) >> 2) * 191 + var10; + boolean var22 = var9 >= 16; + if(var1.anaglyph) { + var15 = (var13 * 30 + var21 * 59 + var11 * 11) / 100; + var16 = (var13 * 30 + var21 * 70) / 100; + int var17 = (var13 * 30 + var11 * 70) / 100; + var13 = var15; + var21 = var16; + var11 = var17; + } + + var9 += 2; + if(var22) { + var13 /= 4; + var21 /= 4; + var11 /= 4; + } + + GL11.glColor4f((float)var13 / 255.0F, (float)var21 / 255.0F, (float)var11 / 255.0F, 1.0F); + } + + } + + public void drawStringWithShadow(String var1, int var2, int var3, int var4) { + this.renderString(var1, var2 + 1, var3 + 1, var4, true); + this.drawString(var1, var2, var3, var4); + } + + public void drawString(String var1, int var2, int var3, int var4) { + this.renderString(var1, var2, var3, var4, false); + } + + public void renderString(String var1, int var2, int var3, int var4, boolean var5) { + if(var1 != null) { + if(var5) { + var4 = (var4 & 16579836) >> 2; + } + + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.fontTextureName); + float var6 = (float)(var4 >> 16 & 255) / 255.0F; + float var7 = (float)(var4 >> 8 & 255) / 255.0F; + float var8 = (float)(var4 & 255) / 255.0F; + float var9 = (float)(var4 >> 24 & 255) / 255.0F; + var9 = 1.0F; + GL11.glColor4f(var6, var7, var8, var9); + this.buffer.clear(); + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var3, 0.0F); + + for(int var10 = 0; var10 < var1.length(); ++var10) { + for(; var1.charAt(var10) == 38 && var1.length() > var10 + 1; var10 += 2) { + int var11 = "0123456789abcdef".indexOf(var1.charAt(var10 + 1)); + if(var11 < 0 || var11 > 15) { + var11 = 15; + } + + this.buffer.put(this.fontDisplayLists + 256 + var11 + (var5 ? 16 : 0)); + if(this.buffer.remaining() == 0) { + this.buffer.flip(); + GL11.glCallLists(this.buffer); + this.buffer.clear(); + } + } + + this.buffer.put(this.fontDisplayLists + var1.charAt(var10)); + if(this.buffer.remaining() == 0) { + this.buffer.flip(); + GL11.glCallLists(this.buffer); + this.buffer.clear(); + } + } + + this.buffer.flip(); + GL11.glCallLists(this.buffer); + GL11.glPopMatrix(); + } + } + + public int getStringWidth(String var1) { + if(var1 == null) { + return 0; + } else { + int var2 = 0; + + for(int var3 = 0; var3 < var1.length(); ++var3) { + if(var1.charAt(var3) == 38) { + ++var3; + } else { + var2 += this.charWidth[var1.charAt(var3)]; + } + } + + return var2; + } + } +} diff --git a/source/net/minecraft/src/Frustrum.java b/source/net/minecraft/src/Frustrum.java new file mode 100644 index 0000000..ad411d9 --- /dev/null +++ b/source/net/minecraft/src/Frustrum.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +public class Frustrum implements ICamera { + private ClippingHelper clippingHelper = ClippingHelperImplementation.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/source/net/minecraft/src/GLAllocation.java b/source/net/minecraft/src/GLAllocation.java new file mode 100644 index 0000000..bcde76b --- /dev/null +++ b/source/net/minecraft/src/GLAllocation.java @@ -0,0 +1,62 @@ +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.List; +import org.lwjgl.opengl.GL11; + +public class GLAllocation { + private static List displayLists = new ArrayList(); + private static List textureNames = new ArrayList(); + + public static synchronized int generateDisplayLists(int var0) { + int var1 = GL11.glGenLists(var0); + displayLists.add(Integer.valueOf(var1)); + displayLists.add(Integer.valueOf(var0)); + return var1; + } + + public static synchronized void generateDisplayLists(IntBuffer var0) { + GL11.glGenTextures(var0); + + for(int var1 = var0.position(); var1 < var0.limit(); ++var1) { + textureNames.add(Integer.valueOf(var0.get(var1))); + } + + } + + public static synchronized void deleteTexturesAndDisplayLists() { + for(int var0 = 0; var0 < displayLists.size(); var0 += 2) { + GL11.glDeleteLists(((Integer)displayLists.get(var0)).intValue(), ((Integer)displayLists.get(var0 + 1)).intValue()); + } + + IntBuffer var2 = createIntBuffer(textureNames.size()); + var2.flip(); + GL11.glDeleteTextures(var2); + + for(int var1 = 0; var1 < textureNames.size(); ++var1) { + var2.put(((Integer)textureNames.get(var1)).intValue()); + } + + var2.flip(); + GL11.glDeleteTextures(var2); + displayLists.clear(); + textureNames.clear(); + } + + public static synchronized ByteBuffer createDirectByteBuffer(int var0) { + ByteBuffer var1 = ByteBuffer.allocateDirect(var0).order(ByteOrder.nativeOrder()); + return var1; + } + + public static IntBuffer createIntBuffer(int var0) { + return createDirectByteBuffer(var0 << 2).asIntBuffer(); + } + + public static FloatBuffer createFloatBuffer(int var0) { + return createDirectByteBuffer(var0 << 2).asFloatBuffer(); + } +} diff --git a/source/net/minecraft/src/GameSettings.java b/source/net/minecraft/src/GameSettings.java new file mode 100644 index 0000000..9416cfd --- /dev/null +++ b/source/net/minecraft/src/GameSettings.java @@ -0,0 +1,202 @@ +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 org.lwjgl.input.Keyboard; + +public class GameSettings { + private static final String[] RENDER_DISTANCES = new String[]{"FAR", "NORMAL", "SHORT", "TINY"}; + private static final String[] DIFFICULTIES = new String[]{"Peaceful", "Easy", "Normal", "Hard"}; + public boolean music = true; + public boolean sound = true; + public boolean invertMouse = false; + public boolean showFPS = false; + public int renderDistance = 0; + public boolean viewBobbing = true; + public boolean anaglyph = false; + public boolean limitFramerate = false; + public boolean fancyGraphics = true; + public KeyBinding keyBindForward = new KeyBinding("Forward", 17); + public KeyBinding keyBindLeft = new KeyBinding("Left", 30); + public KeyBinding keyBindBack = new KeyBinding("Back", 31); + public KeyBinding keyBindRight = new KeyBinding("Right", 32); + public KeyBinding keyBindJump = new KeyBinding("Jump", 57); + public KeyBinding keyBindInventory = new KeyBinding("Inventory", 23); + public KeyBinding keyBindDrop = new KeyBinding("Drop", 16); + public KeyBinding keyBindChat = new KeyBinding("Chat", 20); + public KeyBinding keyBindToggleFog = new KeyBinding("Toggle fog", 33); + public KeyBinding keyBindSave = new KeyBinding("Save location", 28); + public KeyBinding keyBindLoad = new KeyBinding("Load location", 19); + public KeyBinding[] keyBindings = new KeyBinding[]{this.keyBindForward, this.keyBindLeft, this.keyBindBack, this.keyBindRight, this.keyBindJump, this.keyBindDrop, this.keyBindInventory, this.keyBindChat, this.keyBindToggleFog, this.keyBindSave, this.keyBindLoad}; + protected Minecraft mc; + private File optionsFile; + public int numberOfOptions = 10; + public int difficulty = 2; + public boolean thirdPersonView = false; + + public GameSettings(Minecraft var1, File var2) { + this.mc = var1; + this.optionsFile = new File(var2, "options.txt"); + this.loadOptions(); + } + + public String getOptionDisplayString(int var1) { + return this.keyBindings[var1].keyDescription + ": " + Keyboard.getKeyName(this.keyBindings[var1].keyCode); + } + + public void setKeyBinding(int var1, int var2) { + this.keyBindings[var1].keyCode = var2; + this.saveOptions(); + } + + public void setOptionFloatValue(int var1, int var2) { + if(var1 == 0) { + this.music = !this.music; + this.mc.sndManager.onSoundOptionsChanged(); + } + + if(var1 == 1) { + this.sound = !this.sound; + this.mc.sndManager.onSoundOptionsChanged(); + } + + if(var1 == 2) { + this.invertMouse = !this.invertMouse; + } + + if(var1 == 3) { + this.showFPS = !this.showFPS; + } + + if(var1 == 4) { + this.renderDistance = this.renderDistance + var2 & 3; + } + + if(var1 == 5) { + this.viewBobbing = !this.viewBobbing; + } + + if(var1 == 6) { + this.anaglyph = !this.anaglyph; + this.mc.renderEngine.refreshTextures(); + } + + if(var1 == 7) { + this.limitFramerate = !this.limitFramerate; + } + + if(var1 == 8) { + this.difficulty = this.difficulty + var2 & 3; + } + + if(var1 == 9) { + this.fancyGraphics = !this.fancyGraphics; + this.mc.renderGlobal.loadRenderers(); + } + + this.saveOptions(); + } + + public String getKeyBinding(int var1) { + return var1 == 0 ? "Music: " + (this.music ? "ON" : "OFF") : (var1 == 1 ? "Sound: " + (this.sound ? "ON" : "OFF") : (var1 == 2 ? "Invert mouse: " + (this.invertMouse ? "ON" : "OFF") : (var1 == 3 ? "Show FPS: " + (this.showFPS ? "ON" : "OFF") : (var1 == 4 ? "Render distance: " + RENDER_DISTANCES[this.renderDistance] : (var1 == 5 ? "View bobbing: " + (this.viewBobbing ? "ON" : "OFF") : (var1 == 6 ? "3d anaglyph: " + (this.anaglyph ? "ON" : "OFF") : (var1 == 7 ? "Limit framerate: " + (this.limitFramerate ? "ON" : "OFF") : (var1 == 8 ? "Difficulty: " + DIFFICULTIES[this.difficulty] : (var1 == 9 ? "Graphics: " + (this.fancyGraphics ? "FANCY" : "FAST") : ""))))))))); + } + + 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) { + var1.close(); + break; + } + + String[] var3 = var2.split(":"); + if(var3[0].equals("music")) { + this.music = var3[1].equals("true"); + } + + if(var3[0].equals("sound")) { + this.sound = var3[1].equals("true"); + } + + if(var3[0].equals("invertYMouse")) { + this.invertMouse = var3[1].equals("true"); + } + + if(var3[0].equals("showFrameRate")) { + this.showFPS = var3[1].equals("true"); + } + + if(var3[0].equals("viewDistance")) { + this.renderDistance = 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("limitFramerate")) { + this.limitFramerate = var3[1].equals("true"); + } + + if(var3[0].equals("difficulty")) { + this.difficulty = Integer.parseInt(var3[1]); + } + + if(var3[0].equals("fancyGraphics")) { + this.fancyGraphics = var3[1].equals("true"); + } + + 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) { + System.out.println("Failed to load options"); + var5.printStackTrace(); + } + + } + + public void saveOptions() { + try { + PrintWriter var1 = new PrintWriter(new FileWriter(this.optionsFile)); + var1.println("music:" + this.music); + var1.println("sound:" + this.sound); + var1.println("invertYMouse:" + this.invertMouse); + var1.println("showFrameRate:" + this.showFPS); + var1.println("viewDistance:" + this.renderDistance); + var1.println("bobView:" + this.viewBobbing); + var1.println("anaglyph3d:" + this.anaglyph); + var1.println("limitFramerate:" + this.limitFramerate); + var1.println("difficulty:" + this.difficulty); + var1.println("fancyGraphics:" + this.fancyGraphics); + + 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) { + System.out.println("Failed to save options"); + var3.printStackTrace(); + } + + } +} diff --git a/source/net/minecraft/src/Gui.java b/source/net/minecraft/src/Gui.java new file mode 100644 index 0000000..8b4c529 --- /dev/null +++ b/source/net/minecraft/src/Gui.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class Gui { + protected float zLevel = 0.0F; + + 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); + Tessellator var15 = Tessellator.instance; + var15.startDrawingQuads(); + var15.setColorRGBA_F(var8, var9, var10, var7); + var15.addVertex((double)var3, (double)var2, 0.0D); + var15.addVertex((double)var1, (double)var2, 0.0D); + var15.setColorRGBA_F(var12, var13, var14, var11); + var15.addVertex((double)var1, (double)var4, 0.0D); + var15.addVertex((double)var3, (double)var4, 0.0D); + var15.draw(); + 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(); + } +} diff --git a/source/net/minecraft/src/GuiButton.java b/source/net/minecraft/src/GuiButton.java new file mode 100644 index 0000000..3fbe2be --- /dev/null +++ b/source/net/minecraft/src/GuiButton.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiButton extends Gui { + private int width; + private int height; + public int xPosition; + public int yPosition; + public String displayString; + public int id; + public boolean enabled; + public boolean enabled2; + + public GuiButton(int var1, int var2, int var3, String var4) { + this(var1, var2, var3, 200, 20, var4); + } + + protected GuiButton(int var1, int var2, int var3, int var4, int var5, String var6) { + this.width = 200; + this.height = 20; + this.enabled = true; + this.enabled2 = true; + this.id = var1; + this.xPosition = var2; + this.yPosition = var3; + this.width = var4; + this.height = var5; + this.displayString = var6; + } + + public void drawButton(Minecraft var1, int var2, int var3) { + if(this.enabled2) { + FontRenderer var4 = var1.fontRenderer; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var1.renderEngine.getTexture("/gui/gui.png")); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + byte var5 = 1; + boolean var6 = var2 >= this.xPosition && var3 >= this.yPosition && var2 < this.xPosition + this.width && var3 < this.yPosition + this.height; + if(!this.enabled) { + var5 = 0; + } else if(var6) { + var5 = 2; + } + + 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); + if(!this.enabled) { + this.drawCenteredString(var4, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, -6250336); + } else if(var6) { + this.drawCenteredString(var4, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, 16777120); + } else { + this.drawCenteredString(var4, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, 14737632); + } + + } + } + + public boolean mousePressed(int var1, int var2) { + return this.enabled && var1 >= this.xPosition && var2 >= this.yPosition && var1 < this.xPosition + this.width && var2 < this.yPosition + this.height; + } +} diff --git a/source/net/minecraft/src/GuiChest.java b/source/net/minecraft/src/GuiChest.java new file mode 100644 index 0000000..730e7f4 --- /dev/null +++ b/source/net/minecraft/src/GuiChest.java @@ -0,0 +1,54 @@ +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) { + 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; + int var5 = (this.inventoryRows - 4) * 18; + + int var6; + int var7; + for(var6 = 0; var6 < this.inventoryRows; ++var6) { + for(var7 = 0; var7 < 9; ++var7) { + this.inventorySlots.add(new Slot(this, var2, var7 + var6 * 9, 8 + var7 * 18, 18 + var6 * 18)); + } + } + + for(var6 = 0; var6 < 3; ++var6) { + for(var7 = 0; var7 < 9; ++var7) { + this.inventorySlots.add(new Slot(this, var1, var7 + (var6 + 1) * 9, 8 + var7 * 18, 103 + var6 * 18 + var5)); + } + } + + for(var6 = 0; var6 < 9; ++var6) { + this.inventorySlots.add(new Slot(this, var1, var6, 8 + var6 * 18, 161 + var5)); + } + + } + + protected void drawGuiContainerForegroundLayer() { + this.fontRenderer.drawString(this.lowerChestInventory.getInvName(), 8, 6, 4210752); + this.fontRenderer.drawString(this.upperChestInventory.getInvName(), 8, this.ySize - 96 + 2, 4210752); + } + + protected void drawGuiContainerBackgroundLayer(float var1) { + int var2 = this.mc.renderEngine.getTexture("/gui/container.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var2); + int var3 = (this.width - this.xSize) / 2; + int var4 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var3, var4, 0, 0, this.xSize, this.inventoryRows * 18 + 17); + this.drawTexturedModalRect(var3, var4 + this.inventoryRows * 18 + 17, 0, 126, this.xSize, 96); + } +} diff --git a/source/net/minecraft/src/GuiContainer.java b/source/net/minecraft/src/GuiContainer.java new file mode 100644 index 0000000..4e3e8fe --- /dev/null +++ b/source/net/minecraft/src/GuiContainer.java @@ -0,0 +1,226 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public abstract class GuiContainer extends GuiScreen { + private static RenderItem itemRenderer = new RenderItem(); + private ItemStack draggedItemStack = null; + protected int xSize = 176; + protected int ySize = 166; + protected List inventorySlots = new ArrayList(); + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + int var4 = (this.width - this.xSize) / 2; + int var5 = (this.height - this.ySize) / 2; + this.drawGuiContainerBackgroundLayer(var3); + GL11.glPushMatrix(); + GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GL11.glPopMatrix(); + 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); + + for(int var6 = 0; var6 < this.inventorySlots.size(); ++var6) { + Slot var7 = (Slot)this.inventorySlots.get(var6); + this.drawSlotInventory(var7); + if(var7.getIsMouseOverSlot(var1, var2)) { + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + int var8 = var7.xDisplayPosition; + int var9 = var7.yDisplayPosition; + this.drawGradientRect(var8, var9, var8 + 16, var9 + 16, -2130706433, -2130706433); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + } + } + + if(this.draggedItemStack != null) { + GL11.glTranslatef(0.0F, 0.0F, 32.0F); + itemRenderer.drawItemIntoGui(this.fontRenderer, this.mc.renderEngine, this.draggedItemStack, var1 - var4 - 8, var2 - var5 - 8); + itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, this.mc.renderEngine, this.draggedItemStack, var1 - var4 - 8, var2 - var5 - 8); + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + this.drawGuiContainerForegroundLayer(); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glPopMatrix(); + } + + protected void drawGuiContainerForegroundLayer() { + } + + protected abstract void drawGuiContainerBackgroundLayer(float var1); + + private void drawSlotInventory(Slot var1) { + IInventory var2 = var1.inventory; + int var3 = var1.slotIndex; + int var4 = var1.xDisplayPosition; + int var5 = var1.yDisplayPosition; + ItemStack var6 = var2.getStackInSlot(var3); + if(var6 == null) { + int var7 = var1.getBackgroundIconIndex(); + if(var7 >= 0) { + GL11.glDisable(GL11.GL_LIGHTING); + this.mc.renderEngine.bindTexture(this.mc.renderEngine.getTexture("/gui/items.png")); + this.drawTexturedModalRect(var4, var5, var7 % 16 * 16, var7 / 16 * 16, 16, 16); + GL11.glEnable(GL11.GL_LIGHTING); + return; + } + } + + itemRenderer.drawItemIntoGui(this.fontRenderer, this.mc.renderEngine, var6, var4, var5); + itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, this.mc.renderEngine, var6, var4, var5); + } + + private Slot getSlotAtPosition(int var1, int var2) { + for(int var3 = 0; var3 < this.inventorySlots.size(); ++var3) { + Slot var4 = (Slot)this.inventorySlots.get(var3); + if(var4.getIsMouseOverSlot(var1, var2)) { + return var4; + } + } + + return null; + } + + protected void mouseClicked(int var1, int var2, int var3) { + if(var3 == 0 || var3 == 1) { + Slot var4 = this.getSlotAtPosition(var1, var2); + int var6; + if(var4 != null) { + var4.onSlotChanged(); + ItemStack var5 = var4.getStack(); + if(var5 != null || this.draggedItemStack != null) { + if(var5 != null && this.draggedItemStack == null) { + var6 = var3 == 0 ? var5.stackSize : (var5.stackSize + 1) / 2; + this.draggedItemStack = var4.inventory.decrStackSize(var4.slotIndex, var6); + if(var5.stackSize == 0) { + var4.putStack((ItemStack)null); + } + + var4.onPickupFromSlot(); + } else if(var5 == null && this.draggedItemStack != null && var4.isItemValid(this.draggedItemStack)) { + var6 = var3 == 0 ? this.draggedItemStack.stackSize : 1; + if(var6 > var4.inventory.getInventoryStackLimit()) { + var6 = var4.inventory.getInventoryStackLimit(); + } + + var4.putStack(this.draggedItemStack.splitStack(var6)); + if(this.draggedItemStack.stackSize == 0) { + this.draggedItemStack = null; + } + } else if(var5 != null && this.draggedItemStack != null) { + if(var4.isItemValid(this.draggedItemStack)) { + if(var5.itemID != this.draggedItemStack.itemID) { + if(this.draggedItemStack.stackSize <= var4.inventory.getInventoryStackLimit()) { + var4.putStack(this.draggedItemStack); + this.draggedItemStack = var5; + } + } else if(var5.itemID == this.draggedItemStack.itemID) { + if(var3 == 0) { + var6 = this.draggedItemStack.stackSize; + if(var6 > var4.inventory.getInventoryStackLimit() - var5.stackSize) { + var6 = var4.inventory.getInventoryStackLimit() - var5.stackSize; + } + + if(var6 > this.draggedItemStack.getMaxStackSize() - var5.stackSize) { + var6 = this.draggedItemStack.getMaxStackSize() - var5.stackSize; + } + + this.draggedItemStack.splitStack(var6); + if(this.draggedItemStack.stackSize == 0) { + this.draggedItemStack = null; + } + + var5.stackSize += var6; + } else if(var3 == 1) { + var6 = 1; + if(var6 > var4.inventory.getInventoryStackLimit() - var5.stackSize) { + var6 = var4.inventory.getInventoryStackLimit() - var5.stackSize; + } + + if(var6 > this.draggedItemStack.getMaxStackSize() - var5.stackSize) { + var6 = this.draggedItemStack.getMaxStackSize() - var5.stackSize; + } + + this.draggedItemStack.splitStack(var6); + if(this.draggedItemStack.stackSize == 0) { + this.draggedItemStack = null; + } + + var5.stackSize += var6; + } + } + } else if(var5.itemID == this.draggedItemStack.itemID && this.draggedItemStack.getMaxStackSize() > 1) { + var6 = var5.stackSize; + if(var6 > 0 && var6 + this.draggedItemStack.stackSize <= this.draggedItemStack.getMaxStackSize()) { + this.draggedItemStack.stackSize += var6; + var5.splitStack(var6); + if(var5.stackSize == 0) { + var4.putStack((ItemStack)null); + } + + var4.onPickupFromSlot(); + } + } + } + } + } else if(this.draggedItemStack != null) { + int var8 = (this.width - this.xSize) / 2; + var6 = (this.height - this.ySize) / 2; + if(var1 < var8 || var2 < var6 || var1 >= var8 + this.xSize || var2 >= var6 + this.xSize) { + EntityPlayerSP var7 = this.mc.thePlayer; + if(var3 == 0) { + var7.dropPlayerItem(this.draggedItemStack); + this.draggedItemStack = null; + } + + if(var3 == 1) { + var7.dropPlayerItem(this.draggedItemStack.splitStack(1)); + if(this.draggedItemStack.stackSize == 0) { + this.draggedItemStack = null; + } + } + } + } + } + + } + + protected void mouseMovedOrUp(int var1, int var2, int var3) { + if(var3 == 0) { + } + + } + + protected void keyTyped(char var1, int var2) { + if(var2 == 1 || var2 == this.mc.gameSettings.keyBindInventory.keyCode) { + this.mc.displayGuiScreen((GuiScreen)null); + } + + } + + public void onGuiClosed() { + if(this.draggedItemStack != null) { + this.mc.thePlayer.dropPlayerItem(this.draggedItemStack); + } + + } + + public void onCraftMatrixChanged(IInventory var1) { + } + + public boolean doesGuiPauseGame() { + return false; + } +} diff --git a/source/net/minecraft/src/GuiControls.java b/source/net/minecraft/src/GuiControls.java new file mode 100644 index 0000000..0d185df --- /dev/null +++ b/source/net/minecraft/src/GuiControls.java @@ -0,0 +1,52 @@ +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; + } + + public void initGui() { + for(int var1 = 0; var1 < this.options.keyBindings.length; ++var1) { + this.controlList.add(new GuiSmallButton(var1, this.width / 2 - 155 + var1 % 2 * 160, this.height / 6 + 24 * (var1 >> 1), this.options.getOptionDisplayString(var1))); + } + + this.controlList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, "Done")); + } + + protected void actionPerformed(GuiButton var1) { + for(int var2 = 0; var2 < this.options.keyBindings.length; ++var2) { + ((GuiButton)this.controlList.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 keyTyped(char var1, int var2) { + if(this.buttonId >= 0) { + this.options.setKeyBinding(this.buttonId, var2); + ((GuiButton)this.controlList.get(this.buttonId)).displayString = this.options.getOptionDisplayString(this.buttonId); + this.buttonId = -1; + } 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); + super.drawScreen(var1, var2, var3); + } +} diff --git a/source/net/minecraft/src/GuiCrafting.java b/source/net/minecraft/src/GuiCrafting.java new file mode 100644 index 0000000..81fe8aa --- /dev/null +++ b/source/net/minecraft/src/GuiCrafting.java @@ -0,0 +1,75 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiCrafting extends GuiContainer { + private InventoryCrafting inventoryCrafting = new InventoryCrafting(this, 3, 3); + private IInventory iInventory = new InventoryCraftResult(); + + public GuiCrafting(InventoryPlayer var1) { + this.inventorySlots.add(new SlotCrafting(this, this.inventoryCrafting, this.iInventory, 0, 124, 35)); + + int var2; + int var3; + for(var2 = 0; var2 < 3; ++var2) { + for(var3 = 0; var3 < 3; ++var3) { + this.inventorySlots.add(new Slot(this, this.inventoryCrafting, var3 + var2 * 3, 30 + var3 * 18, 17 + var2 * 18)); + } + } + + for(var2 = 0; var2 < 3; ++var2) { + for(var3 = 0; var3 < 9; ++var3) { + this.inventorySlots.add(new Slot(this, var1, var3 + (var2 + 1) * 9, 8 + var3 * 18, 84 + var2 * 18)); + } + } + + for(var2 = 0; var2 < 9; ++var2) { + this.inventorySlots.add(new Slot(this, var1, var2, 8 + var2 * 18, 142)); + } + + } + + public void onGuiClosed() { + super.onGuiClosed(); + + for(int var1 = 0; var1 < 9; ++var1) { + ItemStack var2 = this.inventoryCrafting.getStackInSlot(var1); + if(var2 != null) { + this.mc.thePlayer.dropPlayerItem(var2); + } + } + + } + + public void onCraftMatrixChanged(IInventory var1) { + int[] var2 = new int[9]; + + for(int var3 = 0; var3 < 3; ++var3) { + for(int var4 = 0; var4 < 3; ++var4) { + int var5 = var3 + var4 * 3; + ItemStack var6 = this.inventoryCrafting.getStackInSlot(var5); + if(var6 == null) { + var2[var5] = -1; + } else { + var2[var5] = var6.itemID; + } + } + } + + this.iInventory.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(var2)); + } + + protected void drawGuiContainerForegroundLayer() { + this.fontRenderer.drawString("Crafting", 28, 6, 4210752); + this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); + } + + protected void drawGuiContainerBackgroundLayer(float var1) { + int var2 = this.mc.renderEngine.getTexture("/gui/crafting.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var2); + int var3 = (this.width - this.xSize) / 2; + int var4 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var3, var4, 0, 0, this.xSize, this.ySize); + } +} diff --git a/source/net/minecraft/src/GuiCreateWorld.java b/source/net/minecraft/src/GuiCreateWorld.java new file mode 100644 index 0000000..9b49486 --- /dev/null +++ b/source/net/minecraft/src/GuiCreateWorld.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +import java.io.File; + +public class GuiCreateWorld extends GuiScreen { + protected GuiScreen parentGuiScreen; + protected String screenHeader = "Select world"; + private boolean createClicked = false; + + public GuiCreateWorld(GuiScreen var1) { + this.parentGuiScreen = var1; + } + + public void initGui() { + File var1 = Minecraft.getMinecraftDir(); + + for(int var2 = 0; var2 < 5; ++var2) { + NBTTagCompound var3 = World.getLevelData(var1, "World" + (var2 + 1)); + if(var3 == null) { + this.controlList.add(new GuiButton(var2, this.width / 2 - 100, this.height / 6 + 24 * var2, "- empty -")); + } else { + String var4 = "World " + (var2 + 1); + long var5 = var3.getLong("SizeOnDisk"); + var4 = var4 + " (" + (float)(var5 / 1024L * 100L / 1024L) / 100.0F + " MB)"; + this.controlList.add(new GuiButton(var2, this.width / 2 - 100, this.height / 6 + 24 * var2, var4)); + } + } + + this.initButtons(); + } + + protected String getSaveFileName(int var1) { + File var2 = Minecraft.getMinecraftDir(); + return World.getLevelData(var2, "World" + var1) != null ? "World" + var1 : null; + } + + public void initButtons() { + this.controlList.add(new GuiButton(5, this.width / 2 - 100, this.height / 6 + 120 + 12, "Delete world...")); + this.controlList.add(new GuiButton(6, this.width / 2 - 100, this.height / 6 + 168, "Cancel")); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id < 5) { + this.actionPerformed(var1.id + 1); + } else if(var1.id == 5) { + this.mc.displayGuiScreen(new GuiDeleteWorld(this)); + } else if(var1.id == 6) { + this.mc.displayGuiScreen(this.parentGuiScreen); + } + + } + } + + public void actionPerformed(int var1) { + this.mc.displayGuiScreen((GuiScreen)null); + if(!this.createClicked) { + this.createClicked = true; + this.mc.startWorld("World" + var1); + this.mc.displayGuiScreen((GuiScreen)null); + } + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.screenHeader, this.width / 2, 20, 16777215); + super.drawScreen(var1, var2, var3); + } +} diff --git a/source/net/minecraft/src/GuiDeleteWorld.java b/source/net/minecraft/src/GuiDeleteWorld.java new file mode 100644 index 0000000..979aad5 --- /dev/null +++ b/source/net/minecraft/src/GuiDeleteWorld.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +import java.io.File; + +public class GuiDeleteWorld extends GuiCreateWorld { + public GuiDeleteWorld(GuiScreen var1) { + super(var1); + this.screenHeader = "Delete world"; + } + + public void initButtons() { + this.controlList.add(new GuiButton(6, this.width / 2 - 100, this.height / 6 + 168, "Cancel")); + } + + public void actionPerformed(int var1) { + String var2 = this.getSaveFileName(var1); + if(var2 != null) { + this.mc.displayGuiScreen(new GuiYesNo(this, "Are you sure you want to delete this world?", "\'" + var2 + "\' will be lost forever!", var1)); + } + + } + + public void deleteWorld(boolean var1, int var2) { + if(var1) { + File var3 = Minecraft.getMinecraftDir(); + World.deleteWorld(var3, this.getSaveFileName(var2)); + } + + this.mc.displayGuiScreen(this.parentGuiScreen); + } +} diff --git a/source/net/minecraft/src/GuiEditSign.java b/source/net/minecraft/src/GuiEditSign.java new file mode 100644 index 0000000..9ecea6d --- /dev/null +++ b/source/net/minecraft/src/GuiEditSign.java @@ -0,0 +1,77 @@ +package net.minecraft.src; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +public class GuiEditSign extends GuiScreen { + protected String screenTitle = "Edit sign message:"; + private TileEntitySign entitySign; + private int updateCounter; + private int editLine = 0; + + public GuiEditSign(TileEntitySign var1) { + this.entitySign = var1; + } + + public void initGui() { + this.controlList.clear(); + Keyboard.enableRepeatEvents(true); + this.controlList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 120, "Done")); + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + 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("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ,.:-_\'*!\"#%/()=+?[]{}<>".indexOf(var1) >= 0 && this.entitySign.signText[this.editLine].length() < 15) { + this.entitySign.signText[this.editLine] = this.entitySign.signText[this.editLine] + var1; + } + + } + + 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), (float)(this.height / 2), 50.0F); + float var4 = 60.0F; + GL11.glScalef(-var4, -var4, -var4); + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + if(this.updateCounter / 6 % 2 == 0) { + this.entitySign.lineBeingEdited = this.editLine; + } + + GL11.glRotatef((float)(this.entitySign.getBlockMetadata() * 360) / 16.0F, 0.0F, 1.0F, 0.0F); + 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/source/net/minecraft/src/GuiErrorScreen.java b/source/net/minecraft/src/GuiErrorScreen.java new file mode 100644 index 0000000..6707b98 --- /dev/null +++ b/source/net/minecraft/src/GuiErrorScreen.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class GuiErrorScreen extends GuiScreen { + private String title; + private String text; + + public void initGui() { + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawGradientRect(0, 0, this.width, this.height, -12574688, -11530224); + this.drawCenteredString(this.fontRenderer, this.title, this.width / 2, 90, 16777215); + this.drawCenteredString(this.fontRenderer, this.text, this.width / 2, 110, 16777215); + super.drawScreen(var1, var2, var3); + } + + protected void keyTyped(char var1, int var2) { + } +} diff --git a/source/net/minecraft/src/GuiFurnace.java b/source/net/minecraft/src/GuiFurnace.java new file mode 100644 index 0000000..922342d --- /dev/null +++ b/source/net/minecraft/src/GuiFurnace.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiFurnace extends GuiContainer { + private TileEntityFurnace furnaceInventory; + + public GuiFurnace(InventoryPlayer var1, TileEntityFurnace var2) { + this.furnaceInventory = var2; + this.inventorySlots.add(new Slot(this, var2, 0, 56, 17)); + this.inventorySlots.add(new Slot(this, var2, 1, 56, 53)); + this.inventorySlots.add(new Slot(this, var2, 2, 116, 35)); + + int var3; + for(var3 = 0; var3 < 3; ++var3) { + for(int var4 = 0; var4 < 9; ++var4) { + this.inventorySlots.add(new Slot(this, var1, var4 + (var3 + 1) * 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for(var3 = 0; var3 < 9; ++var3) { + this.inventorySlots.add(new Slot(this, var1, var3, 8 + var3 * 18, 142)); + } + + } + + protected void drawGuiContainerForegroundLayer() { + this.fontRenderer.drawString("Furnace", 60, 6, 4210752); + this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); + } + + protected void drawGuiContainerBackgroundLayer(float var1) { + int var2 = this.mc.renderEngine.getTexture("/gui/furnace.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var2); + int var3 = (this.width - this.xSize) / 2; + int var4 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var3, var4, 0, 0, this.xSize, this.ySize); + int var5; + if(this.furnaceInventory.isBurning()) { + var5 = this.furnaceInventory.getBurnTimeRemainingScaled(12); + this.drawTexturedModalRect(var3 + 56, var4 + 36 + 12 - var5, 176, 12 - var5, 14, var5 + 2); + } + + var5 = this.furnaceInventory.getCookProgressScaled(24); + this.drawTexturedModalRect(var3 + 79, var4 + 34, 176, 14, var5 + 1, 16); + } +} diff --git a/source/net/minecraft/src/GuiGameOver.java b/source/net/minecraft/src/GuiGameOver.java new file mode 100644 index 0000000..1eb64b0 --- /dev/null +++ b/source/net/minecraft/src/GuiGameOver.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiGameOver extends GuiScreen { + public void initGui() { + this.controlList.clear(); + this.controlList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 72, "Respawn")); + this.controlList.add(new GuiButton(2, this.width / 2 - 100, this.height / 4 + 96, "Title menu")); + if(this.mc.session == null) { + ((GuiButton)this.controlList.get(1)).enabled = false; + } + + } + + protected void keyTyped(char var1, int var2) { + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 0) { + } + + if(var1.id == 1) { + this.mc.respawn(); + this.mc.displayGuiScreen((GuiScreen)null); + } + + if(var1.id == 2) { + this.mc.changeWorld1((World)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); + this.drawCenteredString(this.fontRenderer, "Game over!", this.width / 2 / 2, 30, 16777215); + GL11.glPopMatrix(); + this.drawCenteredString(this.fontRenderer, "Score: &e" + this.mc.thePlayer.getScore(), this.width / 2, 100, 16777215); + super.drawScreen(var1, var2, var3); + } + + public boolean doesGuiPauseGame() { + return false; + } +} diff --git a/source/net/minecraft/src/GuiIngame.java b/source/net/minecraft/src/GuiIngame.java new file mode 100644 index 0000000..f08a0db --- /dev/null +++ b/source/net/minecraft/src/GuiIngame.java @@ -0,0 +1,222 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class GuiIngame extends Gui { + private static RenderItem itemRenderer = new RenderItem(); + private List chatMessageList = new ArrayList(); + private Random rand = new Random(); + private Minecraft mc; + public String testMessage = null; + private int updateCounter = 0; + public float damageGuiPartialTime; + float prevVignetteBrightness = 1.0F; + + public GuiIngame(Minecraft var1) { + this.mc = var1; + } + + public void renderGameOverlay(float var1, boolean var2, int var3, int var4) { + ScaledResolution var5 = new ScaledResolution(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(this.mc.gameSettings.fancyGraphics) { + this.renderVignette(this.mc.thePlayer.getEntityBrightness(var1), var6, var7); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/gui/gui.png")); + InventoryPlayer var9 = 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 + var9.currentItem * 20, var7 - 22 - 1, 0, 22, 24, 22); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/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); + boolean var10 = this.mc.thePlayer.heartsLife / 3 % 2 == 1; + if(this.mc.thePlayer.heartsLife < 10) { + var10 = false; + } + + int var11 = this.mc.thePlayer.health; + int var12 = this.mc.thePlayer.prevHealth; + this.rand.setSeed((long)(this.updateCounter * 312871)); + int var13; + int var14; + int var15; + if(this.mc.playerController.shouldDrawHUD()) { + var13 = this.mc.thePlayer.getPlayerArmorValue(); + + int var16; + for(var14 = 0; var14 < 10; ++var14) { + var15 = var7 - 32; + if(var13 > 0) { + var16 = var6 / 2 + 91 - var14 * 8 - 9; + if(var14 * 2 + 1 < var13) { + this.drawTexturedModalRect(var16, var15, 34, 9, 9, 9); + } + + if(var14 * 2 + 1 == var13) { + this.drawTexturedModalRect(var16, var15, 25, 9, 9, 9); + } + + if(var14 * 2 + 1 > var13) { + this.drawTexturedModalRect(var16, var15, 16, 9, 9, 9); + } + } + + byte var25 = 0; + if(var10) { + var25 = 1; + } + + int var17 = var6 / 2 - 91 + var14 * 8; + if(var11 <= 4) { + var15 += this.rand.nextInt(2); + } + + this.drawTexturedModalRect(var17, var15, 16 + var25 * 9, 0, 9, 9); + if(var10) { + if(var14 * 2 + 1 < var12) { + this.drawTexturedModalRect(var17, var15, 70, 0, 9, 9); + } + + if(var14 * 2 + 1 == var12) { + this.drawTexturedModalRect(var17, var15, 79, 0, 9, 9); + } + } + + if(var14 * 2 + 1 < var11) { + this.drawTexturedModalRect(var17, var15, 52, 0, 9, 9); + } + + if(var14 * 2 + 1 == var11) { + this.drawTexturedModalRect(var17, var15, 61, 0, 9, 9); + } + } + + if(this.mc.thePlayer.isInsideOfMaterial(Material.water)) { + var14 = (int)Math.ceil((double)(this.mc.thePlayer.air - 2) * 10.0D / 300.0D); + var15 = (int)Math.ceil((double)this.mc.thePlayer.air * 10.0D / 300.0D) - var14; + + for(var16 = 0; var16 < var14 + var15; ++var16) { + if(var16 < var14) { + this.drawTexturedModalRect(var6 / 2 - 91 + var16 * 8, var7 - 32 - 9, 16, 18, 9, 9); + } else { + this.drawTexturedModalRect(var6 / 2 - 91 + var16 * 8, var7 - 32 - 9, 25, 18, 9, 9); + } + } + } + } + + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glPushMatrix(); + GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GL11.glPopMatrix(); + + for(var13 = 0; var13 < 9; ++var13) { + var14 = var6 / 2 - 90 + var13 * 20 + 2; + var15 = var7 - 16 - 3; + this.renderInventorySlot(var13, var14, var15, var1); + } + + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + if(this.mc.gameSettings.showFPS) { + var8.drawStringWithShadow("Minecraft Infdev (" + 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); + long var22 = Runtime.getRuntime().maxMemory(); + long var26 = Runtime.getRuntime().totalMemory(); + long var27 = Runtime.getRuntime().freeMemory(); + long var19 = var26 - var27; + String var21 = "Used memory: " + var19 * 100L / var22 + "% (" + var19 / 1024L / 1024L + "MB) of " + var22 / 1024L / 1024L + "MB"; + this.drawString(var8, var21, var6 - var8.getStringWidth(var21) - 2, 2, 14737632); + var21 = "Allocated memory: " + var26 * 100L / var22 + "% (" + var26 / 1024L / 1024L + "MB)"; + this.drawString(var8, var21, var6 - var8.getStringWidth(var21) - 2, 12, 14737632); + } else { + var8.drawStringWithShadow("Minecraft Infdev", 2, 2, 16777215); + } + + byte var23 = 10; + boolean var24 = false; + + for(var15 = 0; var15 < this.chatMessageList.size() && var15 < var23; ++var15) { + if(((ChatLine)this.chatMessageList.get(var15)).updateCounter < 200 || var24) { + var8.drawStringWithShadow(((ChatLine)this.chatMessageList.get(var15)).message, 2, var7 - 8 - var15 * 9 - 20, 16777215); + } + } + + } + + 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); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/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 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.drawItemIntoGui(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() { + ++this.updateCounter; + + for(int var1 = 0; var1 < this.chatMessageList.size(); ++var1) { + ++((ChatLine)this.chatMessageList.get(var1)).updateCounter; + } + + } +} diff --git a/source/net/minecraft/src/GuiIngameMenu.java b/source/net/minecraft/src/GuiIngameMenu.java new file mode 100644 index 0000000..a6b46fe --- /dev/null +++ b/source/net/minecraft/src/GuiIngameMenu.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +public class GuiIngameMenu extends GuiScreen { + private int updateCounter2 = 0; + private int updateCounter = 0; + + public void initGui() { + this.updateCounter2 = 0; + this.controlList.clear(); + this.controlList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 48, "Save and quit to title..")); + this.controlList.add(new GuiButton(4, this.width / 2 - 100, this.height / 4 + 24, "Back to game")); + this.controlList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96, "Options...")); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 0) { + this.mc.displayGuiScreen(new GuiOptions(this, this.mc.gameSettings)); + } + + if(var1.id == 1) { + this.mc.changeWorld1((World)null); + this.mc.displayGuiScreen(new GuiMainMenu()); + } + + if(var1.id == 4) { + this.mc.displayGuiScreen((GuiScreen)null); + this.mc.setIngameFocus(); + } + + } + + public void updateScreen() { + super.updateScreen(); + ++this.updateCounter; + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + boolean var4 = !this.mc.theWorld.saveWorld(this.updateCounter2++); + if(var4 || this.updateCounter < 20) { + float var5 = ((float)(this.updateCounter % 10) + var3) / 10.0F; + var5 = MathHelper.sin(var5 * (float)Math.PI * 2.0F) * 0.2F + 0.8F; + int var6 = (int)(255.0F * var5); + this.drawString(this.fontRenderer, "Saving level..", 8, this.height - 16, var6 << 16 | var6 << 8 | var6); + } + + this.drawCenteredString(this.fontRenderer, "Game menu", this.width / 2, 40, 16777215); + super.drawScreen(var1, var2, var3); + } +} diff --git a/source/net/minecraft/src/GuiInventory.java b/source/net/minecraft/src/GuiInventory.java new file mode 100644 index 0000000..a145409 --- /dev/null +++ b/source/net/minecraft/src/GuiInventory.java @@ -0,0 +1,117 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class GuiInventory extends GuiContainer { + private InventoryCrafting craftingInventory = new InventoryCrafting(this, 2, 2); + private IInventory craftingResultInventory = new InventoryCraftResult(); + private float xSize_lo; + private float ySize_lo; + + public GuiInventory(IInventory var1) { + this.allowUserInput = true; + this.inventorySlots.add(new SlotCrafting(this, this.craftingInventory, this.craftingResultInventory, 0, 144, 36)); + + int var2; + int var3; + for(var2 = 0; var2 < 2; ++var2) { + for(var3 = 0; var3 < 2; ++var3) { + this.inventorySlots.add(new Slot(this, this.craftingInventory, var3 + var2 * 2, 88 + var3 * 18, 26 + var2 * 18)); + } + } + + for(var2 = 0; var2 < 4; ++var2) { + this.inventorySlots.add(new SlotArmor(this, this, var1, var1.getSizeInventory() - 1 - var2, 8, 8 + var2 * 18, var2)); + } + + for(var2 = 0; var2 < 3; ++var2) { + for(var3 = 0; var3 < 9; ++var3) { + this.inventorySlots.add(new Slot(this, var1, var3 + (var2 + 1) * 9, 8 + var3 * 18, 84 + var2 * 18)); + } + } + + for(var2 = 0; var2 < 9; ++var2) { + this.inventorySlots.add(new Slot(this, var1, var2, 8 + var2 * 18, 142)); + } + + } + + public void onGuiClosed() { + super.onGuiClosed(); + + for(int var1 = 0; var1 < this.craftingInventory.getSizeInventory(); ++var1) { + ItemStack var2 = this.craftingInventory.getStackInSlot(var1); + if(var2 != null) { + this.mc.thePlayer.dropPlayerItem(var2); + } + } + + } + + public void onCraftMatrixChanged(IInventory var1) { + int[] var2 = new int[9]; + + for(int var3 = 0; var3 < 3; ++var3) { + for(int var4 = 0; var4 < 3; ++var4) { + int var5 = -1; + if(var3 < 2 && var4 < 2) { + ItemStack var6 = this.craftingInventory.getStackInSlot(var3 + var4 * 2); + if(var6 != null) { + var5 = var6.itemID; + } + } + + var2[var3 + var4 * 3] = var5; + } + } + + this.craftingResultInventory.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(var2)); + } + + protected void drawGuiContainerForegroundLayer() { + this.fontRenderer.drawString("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 = this.mc.renderEngine.getTexture("/gui/inventory.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var2); + int var3 = (this.width - this.xSize) / 2; + int var4 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var3, var4, 0, 0, this.xSize, this.ySize); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glPushMatrix(); + GL11.glTranslatef((float)(var3 + 51), (float)(var4 + 75), 50.0F); + float var5 = 30.0F; + GL11.glScalef(-var5, var5, var5); + GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); + float var6 = this.mc.thePlayer.renderYawOffset; + float var7 = this.mc.thePlayer.rotationYaw; + float var8 = this.mc.thePlayer.rotationPitch; + float var9 = (float)(var3 + 51) - this.xSize_lo; + float var10 = (float)(var4 + 75 - 50) - this.ySize_lo; + 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)(var10 / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F); + this.mc.thePlayer.renderYawOffset = (float)Math.atan((double)(var9 / 40.0F)) * 20.0F; + this.mc.thePlayer.rotationYaw = (float)Math.atan((double)(var9 / 40.0F)) * 40.0F; + this.mc.thePlayer.rotationPitch = -((float)Math.atan((double)(var10 / 40.0F))) * 20.0F; + GL11.glTranslatef(0.0F, this.mc.thePlayer.yOffset, 0.0F); + RenderManager.instance.renderEntityWithPosYaw(this.mc.thePlayer, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F); + this.mc.thePlayer.renderYawOffset = var6; + this.mc.thePlayer.rotationYaw = var7; + this.mc.thePlayer.rotationPitch = var8; + GL11.glPopMatrix(); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + } +} diff --git a/source/net/minecraft/src/GuiMainMenu.java b/source/net/minecraft/src/GuiMainMenu.java new file mode 100644 index 0000000..2b4f8ad --- /dev/null +++ b/source/net/minecraft/src/GuiMainMenu.java @@ -0,0 +1,71 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiMainMenu extends GuiScreen { + private float updateCounter = 0.0F; + private String[] splashes = new String[]{"Pre-beta!", "As seen on TV!", "Awesome!", "100% pure!", "May contain nuts!", "Better than Prey!", "More polygons!", "Sexy!", "Limited edition!", "Flashing letters!", "Made by Notch!", "Coming soon!", "Best in class!", "When it\'s finished!", "Absolutely dragon free!", "Excitement!", "More than 5000 sold!", "One of a kind!", "700+ hits on YouTube!", "Indev!", "Spiders everywhere!", "Check it out!", "Holy cow, man!", "It\'s a game!", "Made in Sweden!", "Uses LWJGL!", "Reticulating splines!", "Minecraft!", "Yaaay!", "Alpha version!", "Singleplayer!", "Keyboard compatible!", "Undocumented!", "Ingots!", "Exploding creepers!", "That\'s not a moon!", "l33t!", "Create!", "Survive!", "Dungeon!", "Exclusive!", "The bee\'s knees!", "Down with O.P.P.!", "Closed source!", "Classy!", "Wow!", "Not on steam!", "9.95 euro!", "Half price!", "Oh man!", "Check it out!", "Awesome community!", "Pixels!", "Teetsuuuuoooo!", "Kaaneeeedaaaa!", "Now with difficulty!", "Enhanced!", "90% bug free!", "Pretty!", "12 herbs and spices!", "Fat free!", "Absolutely no memes!", "Free dental!", "Ask your doctor!", "Minors welcome!", "Cloud computing!", "Legal in Finland!", "Hard to label!", "Technically good!", "Bringing home the bacon!", "Indie!", "GOTY!", "Ceci n\'est pas une title screen!", "Euclidian!", "Now in 3D!", "Inspirational!", "Herregud!", "Complex cellular automata!", "Yes, sir!", "Played by cowboys!", "OpenGL 1.1!", "Thousands of colors!", "Try it!", "Age of Wonders is better!", "Try the mushroom stew!", "Sensational!", "Hot tamale, hot hot tamale!", "Play him off, keyboard cat!", "Guaranteed!", "Macroscopic!", "Bring it on!", "Random splash!", "Call your mother!", "Monster infighting!", "Loved by millions!", "Ultimate edition!", "Freaky!", "You\'ve got a brand new key!", "Water proof!", "Uninflammable!", "Whoa, dude!", "All inclusive!", "Tell your friends!", "NP is not in P!", "Notch <3 Ez!", "Music by C418!"}; + private String splashString = this.splashes[(int)(Math.random() * (double)this.splashes.length)]; + + public void updateScreen() { + this.updateCounter += 0.01F; + } + + protected void keyTyped(char var1, int var2) { + } + + public void initGui() { + this.controlList.clear(); + this.controlList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 48, "Single player")); + this.controlList.add(new GuiButton(2, this.width / 2 - 100, this.height / 4 + 72, "Multi player")); + this.controlList.add(new GuiButton(3, this.width / 2 - 100, this.height / 4 + 96, "Play tutorial level")); + this.controlList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 120 + 12, "Options...")); + ((GuiButton)this.controlList.get(1)).enabled = false; + ((GuiButton)this.controlList.get(2)).enabled = false; + if(this.mc.session == null) { + ((GuiButton)this.controlList.get(1)).enabled = false; + } + + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 0) { + this.mc.displayGuiScreen(new GuiOptions(this, this.mc.gameSettings)); + } + + if(var1.id == 1) { + this.mc.displayGuiScreen(new GuiCreateWorld(this)); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + Tessellator var4 = Tessellator.instance; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/gui/logo.png")); + short var5 = 256; + byte var6 = 49; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var4.setColorOpaque_I(16777215); + this.drawTexturedModalRect((this.width - var5) / 2, 30, 0, 0, var5, var6); + GL11.glPushMatrix(); + GL11.glTranslatef((float)(this.width / 2 + 90), 70.0F, 0.0F); + GL11.glRotatef(-20.0F, 0.0F, 0.0F, 1.0F); + float var7 = 1.8F - MathHelper.abs(MathHelper.sin((float)(System.currentTimeMillis() % 1000L) / 1000.0F * (float)Math.PI * 2.0F) * 0.1F); + var7 = var7 * 100.0F / (float)(this.fontRenderer.getStringWidth(this.splashString) + 32); + GL11.glScalef(var7, var7, var7); + this.drawCenteredString(this.fontRenderer, this.splashString, 0, -8, 16776960); + GL11.glPopMatrix(); + String var8 = "Copyright Mojang Specifications. Do not distribute."; + this.drawString(this.fontRenderer, var8, this.width - this.fontRenderer.getStringWidth(var8) - 2, this.height - 10, 16777215); + long var9 = Runtime.getRuntime().maxMemory(); + long var11 = Runtime.getRuntime().totalMemory(); + long var13 = Runtime.getRuntime().freeMemory(); + long var15 = var9 - var13; + var8 = "Free memory: " + var15 * 100L / var9 + "% of " + var9 / 1024L / 1024L + "MB"; + this.drawString(this.fontRenderer, var8, this.width - this.fontRenderer.getStringWidth(var8) - 2, 2, 8421504); + var8 = "Allocated memory: " + var11 * 100L / var9 + "% (" + var11 / 1024L / 1024L + "MB)"; + this.drawString(this.fontRenderer, var8, this.width - this.fontRenderer.getStringWidth(var8) - 2, 12, 8421504); + super.drawScreen(var1, var2, var3); + } +} diff --git a/source/net/minecraft/src/GuiOptions.java b/source/net/minecraft/src/GuiOptions.java new file mode 100644 index 0000000..a6b73eb --- /dev/null +++ b/source/net/minecraft/src/GuiOptions.java @@ -0,0 +1,45 @@ +package net.minecraft.src; + +public class GuiOptions extends GuiScreen { + private GuiScreen parentScreen; + protected String screenTitle = "Options"; + private GameSettings options; + + public GuiOptions(GuiScreen var1, GameSettings var2) { + this.parentScreen = var1; + this.options = var2; + } + + public void initGui() { + for(int var1 = 0; var1 < this.options.numberOfOptions; ++var1) { + this.controlList.add(new GuiSmallButton(var1, this.width / 2 - 155 + var1 % 2 * 160, this.height / 6 + 24 * (var1 >> 1), this.options.getKeyBinding(var1))); + } + + this.controlList.add(new GuiButton(100, this.width / 2 - 100, this.height / 6 + 120 + 12, "Controls...")); + this.controlList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, "Done")); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id < 100) { + this.options.setOptionFloatValue(var1.id, 1); + var1.displayString = this.options.getKeyBinding(var1.id); + } + + if(var1.id == 100) { + this.mc.displayGuiScreen(new GuiControls(this, this.options)); + } + + if(var1.id == 200) { + this.mc.displayGuiScreen(this.parentScreen); + } + + } + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215); + super.drawScreen(var1, var2, var3); + } +} diff --git a/source/net/minecraft/src/GuiScreen.java b/source/net/minecraft/src/GuiScreen.java new file mode 100644 index 0000000..392f9fc --- /dev/null +++ b/source/net/minecraft/src/GuiScreen.java @@ -0,0 +1,138 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +public class GuiScreen extends Gui { + protected Minecraft mc; + public int width; + public int height; + protected List controlList = new ArrayList(); + public boolean allowUserInput = false; + protected FontRenderer fontRenderer; + + public void drawScreen(int var1, int var2, float var3) { + for(int var4 = 0; var4 < this.controlList.size(); ++var4) { + GuiButton var5 = (GuiButton)this.controlList.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(); + } + + } + + protected void mouseClicked(int var1, int var2, int var3) { + if(var3 == 0) { + for(int var4 = 0; var4 < this.controlList.size(); ++var4) { + GuiButton var5 = (GuiButton)this.controlList.get(var4); + if(var5.mousePressed(var1, var2)) { + this.mc.sndManager.playSoundFX("random.click", 1.0F, 1.0F); + this.actionPerformed(var5); + } + } + } + + } + + protected void mouseMovedOrUp(int var1, int var2, int var3) { + } + + protected void actionPerformed(GuiButton var1) { + } + + public void setWorldAndResolution(Minecraft var1, int var2, int var3) { + this.mc = var1; + this.fontRenderer = var1.fontRenderer; + this.width = var2; + this.height = var3; + this.initGui(); + } + + public void initGui() { + } + + public void handleInput() { + while(Mouse.next()) { + this.handleMouseInput(); + } + + while(Keyboard.next()) { + this.handleKeyboardInput(); + } + + } + + public void handleMouseInput() { + int var1; + int var2; + if(Mouse.getEventButtonState()) { + var1 = Mouse.getEventX() * this.width / this.mc.displayWidth; + var2 = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1; + this.mouseClicked(var1, var2, Mouse.getEventButton()); + } else { + var1 = Mouse.getEventX() * this.width / this.mc.displayWidth; + var2 = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1; + this.mouseMovedOrUp(var1, var2, Mouse.getEventButton()); + } + + } + + public void handleKeyboardInput() { + if(Keyboard.getEventKeyState()) { + if(Keyboard.getEventKey() == Keyboard.KEY_F11) { + this.mc.toggleFullscreen(); + return; + } + + this.keyTyped(Keyboard.getEventCharacter(), Keyboard.getEventKey()); + } + + } + + 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, 1610941696, -1607454656); + } else { + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_FOG); + Tessellator var2 = Tessellator.instance; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/dirt.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)(0 + var1)); + var2.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, (double)(0 + var1)); + var2.draw(); + } + + } + + public boolean doesGuiPauseGame() { + return true; + } + + public void deleteWorld(boolean var1, int var2) { + } +} diff --git a/source/net/minecraft/src/GuiSmallButton.java b/source/net/minecraft/src/GuiSmallButton.java new file mode 100644 index 0000000..e64c277 --- /dev/null +++ b/source/net/minecraft/src/GuiSmallButton.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class GuiSmallButton extends GuiButton { + public GuiSmallButton(int var1, int var2, int var3, String var4) { + super(var1, var2, var3, 150, 20, var4); + } +} diff --git a/source/net/minecraft/src/GuiYesNo.java b/source/net/minecraft/src/GuiYesNo.java new file mode 100644 index 0000000..3c22273 --- /dev/null +++ b/source/net/minecraft/src/GuiYesNo.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +public class GuiYesNo extends GuiScreen { + private GuiScreen parentScreen; + private String message1; + private String message2; + private int worldNumber; + + public GuiYesNo(GuiScreen var1, String var2, String var3, int var4) { + this.parentScreen = var1; + this.message1 = var2; + this.message2 = var3; + this.worldNumber = var4; + } + + public void initGui() { + this.controlList.add(new GuiSmallButton(0, this.width / 2 - 155 + 0, this.height / 6 + 96, "Yes")); + this.controlList.add(new GuiSmallButton(1, this.width / 2 - 155 + 160, this.height / 6 + 96, "No")); + } + + protected void actionPerformed(GuiButton var1) { + this.parentScreen.deleteWorld(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/source/net/minecraft/src/IBlockAccess.java b/source/net/minecraft/src/IBlockAccess.java new file mode 100644 index 0000000..007ce98 --- /dev/null +++ b/source/net/minecraft/src/IBlockAccess.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public interface IBlockAccess { + int getBlockId(int var1, int var2, int var3); + + TileEntity getBlockTileEntity(int var1, int var2, int var3); + + float getBrightness(int var1, int var2, int var3); + + int getBlockMetadata(int var1, int var2, int var3); + + Material getBlockMaterial(int var1, int var2, int var3); + + boolean isBlockNormalCube(int var1, int var2, int var3); +} diff --git a/source/net/minecraft/src/ICamera.java b/source/net/minecraft/src/ICamera.java new file mode 100644 index 0000000..fb186f4 --- /dev/null +++ b/source/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/source/net/minecraft/src/IChunkLoader.java b/source/net/minecraft/src/IChunkLoader.java new file mode 100644 index 0000000..c197feb --- /dev/null +++ b/source/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; + + void saveExtraChunkData(World var1, Chunk var2); + + void chunkTick(); + + void saveExtraData(); +} diff --git a/source/net/minecraft/src/IChunkProvider.java b/source/net/minecraft/src/IChunkProvider.java new file mode 100644 index 0000000..37743c9 --- /dev/null +++ b/source/net/minecraft/src/IChunkProvider.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public interface IChunkProvider { + boolean chunkExists(int var1, int var2); + + Chunk provideChunk(int var1, int var2); + + void populate(IChunkProvider var1, int var2, int var3); + + boolean saveChunks(boolean var1, IProgressUpdate var2); + + boolean unload100OldestChunks(); + + boolean canSave(); +} diff --git a/source/net/minecraft/src/IInventory.java b/source/net/minecraft/src/IInventory.java new file mode 100644 index 0000000..b4564c7 --- /dev/null +++ b/source/net/minecraft/src/IInventory.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public interface IInventory { + int getSizeInventory(); + + ItemStack getStackInSlot(int var1); + + ItemStack decrStackSize(int var1, int var2); + + void setInventorySlotContents(int var1, ItemStack var2); + + String getInvName(); + + int getInventoryStackLimit(); + + void onInventoryChanged(); +} diff --git a/source/net/minecraft/src/IProgressUpdate.java b/source/net/minecraft/src/IProgressUpdate.java new file mode 100644 index 0000000..1fb3c60 --- /dev/null +++ b/source/net/minecraft/src/IProgressUpdate.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public interface IProgressUpdate { + void displayProgressMessage(String var1); + + void displayLoadingString(String var1); + + void setLoadingProgress(int var1); +} diff --git a/source/net/minecraft/src/IWorldAccess.java b/source/net/minecraft/src/IWorldAccess.java new file mode 100644 index 0000000..abcfcea --- /dev/null +++ b/source/net/minecraft/src/IWorldAccess.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public interface IWorldAccess { + void markBlockAndNeighborsNeedsUpdate(int var1, int var2, int var3); + + void markBlockRangeNeedsUpdate(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 spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12); + + void obtainEntitySkin(Entity var1); + + void releaseEntitySkin(Entity var1); + + void updateAllRenderers(); +} diff --git a/source/net/minecraft/src/ImageBuffer.java b/source/net/minecraft/src/ImageBuffer.java new file mode 100644 index 0000000..149f101 --- /dev/null +++ b/source/net/minecraft/src/ImageBuffer.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; + +public interface ImageBuffer { + BufferedImage parseUserSkin(BufferedImage var1); +} diff --git a/source/net/minecraft/src/ImageBufferDownload.java b/source/net/minecraft/src/ImageBufferDownload.java new file mode 100644 index 0000000..39d9761 --- /dev/null +++ b/source/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 ImageBuffer { + 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/source/net/minecraft/src/InventoryCraftResult.java b/source/net/minecraft/src/InventoryCraftResult.java new file mode 100644 index 0000000..de21b2a --- /dev/null +++ b/source/net/minecraft/src/InventoryCraftResult.java @@ -0,0 +1,38 @@ +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[var1]; + } + + public String getInvName() { + return "Result"; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.stackResult[var1] != null) { + ItemStack var3 = this.stackResult[var1]; + this.stackResult[var1] = null; + return var3; + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.stackResult[var1] = var2; + } + + public int getInventoryStackLimit() { + return 64; + } + + public void onInventoryChanged() { + } +} diff --git a/source/net/minecraft/src/InventoryCrafting.java b/source/net/minecraft/src/InventoryCrafting.java new file mode 100644 index 0000000..b5b78c3 --- /dev/null +++ b/source/net/minecraft/src/InventoryCrafting.java @@ -0,0 +1,59 @@ +package net.minecraft.src; + +public class InventoryCrafting implements IInventory { + private ItemStack[] stackList; + private int gridSize; + private GuiContainer craftingInventory; + + public InventoryCrafting(GuiContainer var1, int var2, int var3) { + this.gridSize = var2 * var3; + this.stackList = new ItemStack[this.gridSize]; + this.craftingInventory = var1; + } + + public int getSizeInventory() { + return this.gridSize; + } + + public ItemStack getStackInSlot(int var1) { + return this.stackList[var1]; + } + + public String getInvName() { + return "Crafting"; + } + + 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.craftingInventory.onCraftMatrixChanged(this); + return var3; + } else { + var3 = this.stackList[var1].splitStack(var2); + if(this.stackList[var1].stackSize == 0) { + this.stackList[var1] = null; + } + + this.craftingInventory.onCraftMatrixChanged(this); + return var3; + } + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.stackList[var1] = var2; + this.craftingInventory.onCraftMatrixChanged(this); + } + + public int getInventoryStackLimit() { + return 64; + } + + public void onInventoryChanged() { + } +} diff --git a/source/net/minecraft/src/InventoryLargeChest.java b/source/net/minecraft/src/InventoryLargeChest.java new file mode 100644 index 0000000..daced98 --- /dev/null +++ b/source/net/minecraft/src/InventoryLargeChest.java @@ -0,0 +1,47 @@ +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; + this.upperChest = var2; + this.lowerChest = var3; + } + + public int getSizeInventory() { + return this.upperChest.getSizeInventory() + this.lowerChest.getSizeInventory(); + } + + public String getInvName() { + return this.name; + } + + 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 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(); + } +} diff --git a/source/net/minecraft/src/InventoryPlayer.java b/source/net/minecraft/src/InventoryPlayer.java new file mode 100644 index 0000000..3c5e832 --- /dev/null +++ b/source/net/minecraft/src/InventoryPlayer.java @@ -0,0 +1,329 @@ +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 EntityPlayer player; + + public InventoryPlayer(EntityPlayer var1) { + this.player = var1; + } + + public ItemStack getCurrentItem() { + return this.mainInventory[this.currentItem]; + } + + 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 storeItemStack(int var1) { + for(int var2 = 0; var2 < this.mainInventory.length; ++var2) { + if(this.mainInventory[var2] != null && this.mainInventory[var2].itemID == var1 && this.mainInventory[var2].stackSize < this.mainInventory[var2].getMaxStackSize() && this.mainInventory[var2].stackSize < this.getInventoryStackLimit()) { + return var2; + } + } + + return -1; + } + + private 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, boolean var2) { + int var3 = this.getInventorySlotContainItem(var1); + if(var3 >= 0 && var3 < 9) { + this.currentItem = var3; + } + } + + 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; + } + + } + + private int storePartialItemStack(int var1, int var2) { + int var3 = this.storeItemStack(var1); + if(var3 < 0) { + var3 = this.getFirstEmptyStack(); + } + + if(var3 < 0) { + return var2; + } else { + if(this.mainInventory[var3] == null) { + this.mainInventory[var3] = new ItemStack(var1, 0); + } + + int var4 = var2; + if(var2 > this.mainInventory[var3].getMaxStackSize() - this.mainInventory[var3].stackSize) { + var4 = this.mainInventory[var3].getMaxStackSize() - this.mainInventory[var3].stackSize; + } + + if(var4 > this.getInventoryStackLimit() - this.mainInventory[var3].stackSize) { + var4 = this.getInventoryStackLimit() - this.mainInventory[var3].stackSize; + } + + if(var4 == 0) { + return var2; + } else { + var2 -= var4; + this.mainInventory[var3].stackSize += var4; + this.mainInventory[var3].animationsToGo = 5; + return var2; + } + } + } + + public void decrementAnimations() { + for(int var1 = 0; var1 < this.mainInventory.length; ++var1) { + if(this.mainInventory[var1] != null && this.mainInventory[var1].animationsToGo > 0) { + --this.mainInventory[var1].animationsToGo; + } + } + + } + + 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 addItemStackToInventory(ItemStack var1) { + if(var1.itemDmg == 0) { + var1.stackSize = this.storePartialItemStack(var1.itemID, var1.stackSize); + if(var1.stackSize == 0) { + return true; + } + } + + int var2 = this.getFirstEmptyStack(); + if(var2 >= 0) { + this.mainInventory[var2] = var1; + this.mainInventory[var2].animationsToGo = 5; + return true; + } else { + return false; + } + } + + 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 void setInventorySlotContents(int var1, ItemStack var2) { + ItemStack[] var3 = this.mainInventory; + if(var1 >= this.mainInventory.length) { + var3 = this.armorInventory; + var1 -= this.mainInventory.length; + } + + 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.setTag(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.setTag(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; + if(var4 >= 0 && var4 < this.mainInventory.length) { + this.mainInventory[var4] = new ItemStack(var3); + } + + if(var4 >= 100 && var4 < this.armorInventory.length + 100) { + this.armorInventory[var4 - 100] = new ItemStack(var3); + } + } + + } + + public int getSizeInventory() { + return this.mainInventory.length + 4; + } + + public ItemStack getStackInSlot(int var1) { + ItemStack[] var2 = this.mainInventory; + if(var1 >= this.mainInventory.length) { + var2 = this.armorInventory; + var1 -= this.mainInventory.length; + } + + return var2[var1]; + } + + public String getInvName() { + return "Inventory"; + } + + 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 != Material.rock && var1.blockMaterial != Material.iron) { + 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; + int var2 = 0; + int var3 = 0; + + for(int var4 = 0; var4 < this.armorInventory.length; ++var4) { + if(this.armorInventory[var4] != null && this.armorInventory[var4].getItem() instanceof ItemArmor) { + int var5 = this.armorInventory[var4].getMaxDamage(); + int var6 = this.armorInventory[var4].itemDmg; + int var7 = var5 - var6; + var2 += var7; + var3 += var5; + int var8 = ((ItemArmor)this.armorInventory[var4].getItem()).damageReduceAmount; + var1 += var8; + } + } + + if(var3 == 0) { + return 0; + } else { + return (var1 - 1) * var2 / var3 + 1; + } + } + + public void damageArmor(int var1) { + 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); + if(this.armorInventory[var2].stackSize == 0) { + this.armorInventory[var2].onItemDestroyedByUse(this.player); + 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() { + } +} diff --git a/source/net/minecraft/src/IsoImageBuffer.java b/source/net/minecraft/src/IsoImageBuffer.java new file mode 100644 index 0000000..51bd4c2 --- /dev/null +++ b/source/net/minecraft/src/IsoImageBuffer.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; + +public class IsoImageBuffer { + public BufferedImage image; + public World level; + public int chunkX; + public int chunkZ; + public boolean rendered = false; + public boolean noContent = false; + public int lastVisible = 0; + public boolean addedToRenderQueue = false; + + public IsoImageBuffer(World var1, int var2, int var3) { + this.level = var1; + this.setChunkPosition(var2, var3); + } + + public void setChunkPosition(int var1, int var2) { + this.rendered = false; + this.chunkX = var1; + this.chunkZ = var2; + this.lastVisible = 0; + this.addedToRenderQueue = false; + } + + public void setWorldAndChunkPosition(World var1, int var2, int var3) { + this.level = var1; + this.setChunkPosition(var2, var3); + } +} diff --git a/source/net/minecraft/src/Item.java b/source/net/minecraft/src/Item.java new file mode 100644 index 0000000..5f953d1 --- /dev/null +++ b/source/net/minecraft/src/Item.java @@ -0,0 +1,141 @@ +package net.minecraft.src; + +import java.util.Random; + +public class Item { + protected static Random itemRand = new Random(); + public static Item[] itemsList = new Item[1024]; + public static Item shovel = (new ItemSpade(0, 2)).setIconIndex(82); + public static Item pickaxeSteel = (new ItemPickaxe(1, 2)).setIconIndex(98); + public static Item axeSteel = (new ItemAxe(2, 2)).setIconIndex(114); + public static Item striker = (new ItemFlintAndSteel(3)).setIconIndex(5); + public static Item appleRed = (new ItemFood(4, 4)).setIconIndex(10); + public static Item bow = (new ItemBow(5)).setIconIndex(21); + public static Item arrow = (new Item(6)).setIconIndex(37); + public static Item coal = (new Item(7)).setIconIndex(7); + public static Item diamond = (new Item(8)).setIconIndex(55); + public static Item ingotIron = (new Item(9)).setIconIndex(23); + public static Item ingotGold = (new Item(10)).setIconIndex(39); + public static Item swordSteel = (new ItemSword(11, 2)).setIconIndex(66); + public static Item swordWood = (new ItemSword(12, 0)).setIconIndex(64); + public static Item shovelWood = (new ItemSpade(13, 0)).setIconIndex(80); + public static Item pickaxeWood = (new ItemPickaxe(14, 0)).setIconIndex(96); + public static Item axeWood = (new ItemAxe(15, 0)).setIconIndex(112); + public static Item swordStone = (new ItemSword(16, 1)).setIconIndex(65); + public static Item shovelStone = (new ItemSpade(17, 1)).setIconIndex(81); + public static Item pickaxeStone = (new ItemPickaxe(18, 1)).setIconIndex(97); + public static Item axeStone = (new ItemAxe(19, 1)).setIconIndex(113); + public static Item swordDiamond = (new ItemSword(20, 3)).setIconIndex(67); + public static Item shovelDiamond = (new ItemSpade(21, 3)).setIconIndex(83); + public static Item pickaxeDiamond = (new ItemPickaxe(22, 3)).setIconIndex(99); + public static Item axeDiamond = (new ItemAxe(23, 3)).setIconIndex(115); + public static Item stick = (new Item(24)).setIconIndex(53); + public static Item bowlEmpty = (new Item(25)).setIconIndex(71); + public static Item bowlSoup = (new ItemSoup(26, 10)).setIconIndex(72); + public static Item swordGold = (new ItemSword(27, 0)).setIconIndex(68); + public static Item shovelGold = (new ItemSpade(28, 0)).setIconIndex(84); + public static Item pickaxeGold = (new ItemPickaxe(29, 0)).setIconIndex(100); + public static Item axeGold = (new ItemAxe(30, 0)).setIconIndex(116); + public static Item silk = (new Item(31)).setIconIndex(8); + public static Item feather = (new Item(32)).setIconIndex(24); + public static Item gunpowder = (new Item(33)).setIconIndex(40); + public static Item hoeWood = (new ItemHoe(34, 0)).setIconIndex(128); + public static Item hoeStone = (new ItemHoe(35, 1)).setIconIndex(129); + public static Item hoeSteel = (new ItemHoe(36, 2)).setIconIndex(130); + public static Item hoeDiamond = (new ItemHoe(37, 3)).setIconIndex(131); + public static Item hoeGold = (new ItemHoe(38, 4)).setIconIndex(132); + public static Item seeds = (new ItemSeeds(39, Block.crops.blockID)).setIconIndex(9); + public static Item wheat = (new Item(40)).setIconIndex(25); + public static Item bread = (new ItemFood(41, 5)).setIconIndex(41); + public static Item helmetLeather = (new ItemArmor(42, 0, 0, 0)).setIconIndex(0); + public static Item plateLeather = (new ItemArmor(43, 0, 0, 1)).setIconIndex(16); + public static Item legsLeather = (new ItemArmor(44, 0, 0, 2)).setIconIndex(32); + public static Item bootsLeather = (new ItemArmor(45, 0, 0, 3)).setIconIndex(48); + public static Item helmetChain = (new ItemArmor(46, 1, 1, 0)).setIconIndex(1); + public static Item plateChain = (new ItemArmor(47, 1, 1, 1)).setIconIndex(17); + public static Item legsChain = (new ItemArmor(48, 1, 1, 2)).setIconIndex(33); + public static Item bootsChain = (new ItemArmor(49, 1, 1, 3)).setIconIndex(49); + public static Item helmetSteel = (new ItemArmor(50, 2, 2, 0)).setIconIndex(2); + public static Item plateSteel = (new ItemArmor(51, 2, 2, 1)).setIconIndex(18); + public static Item legsSteel = (new ItemArmor(52, 2, 2, 2)).setIconIndex(34); + public static Item bootsSteel = (new ItemArmor(53, 2, 2, 3)).setIconIndex(50); + public static Item helmetDiamond = (new ItemArmor(54, 3, 3, 0)).setIconIndex(3); + public static Item plateDiamonhd = (new ItemArmor(55, 3, 3, 1)).setIconIndex(19); + public static Item legsDiamond = (new ItemArmor(56, 3, 3, 2)).setIconIndex(35); + public static Item bootsDiamond = (new ItemArmor(57, 3, 3, 3)).setIconIndex(51); + public static Item helmetGold = (new ItemArmor(58, 1, 4, 0)).setIconIndex(4); + public static Item plateGold = (new ItemArmor(59, 1, 4, 1)).setIconIndex(20); + public static Item legsGold = (new ItemArmor(60, 1, 4, 2)).setIconIndex(36); + public static Item bootsGold = (new ItemArmor(61, 1, 4, 3)).setIconIndex(52); + public static Item flint = (new Item(62)).setIconIndex(6); + public static Item porkRaw = (new ItemFood(63, 3)).setIconIndex(87); + public static Item porkCooked = (new ItemFood(64, 8)).setIconIndex(88); + public static Item painting = (new ItemPainting(65)).setIconIndex(26); + public static Item appleGold = (new ItemFood(66, 42)).setIconIndex(11); + public static Item sign = (new ItemSign(67)).setIconIndex(42); + public static Item door = (new ItemDoor(68)).setIconIndex(43); + public static Item bucketEmpty = (new ItemBucket(69, 0)).setIconIndex(74); + public static Item bucketWater = (new ItemBucket(70, Block.waterMoving.blockID)).setIconIndex(75); + public static Item bucketLava = (new ItemBucket(71, Block.lavaMoving.blockID)).setIconIndex(76); + public static Item minecart = (new ItemMinecart(72)).setIconIndex(135); + public static Item saddle = (new ItemSaddle(73)).setIconIndex(104); + public final int shiftedIndex; + protected int maxStackSize = 64; + protected int maxDamage = 32; + protected int iconIndex; + + protected Item(int var1) { + this.shiftedIndex = 256 + var1; + if(itemsList[256 + var1] != null) { + System.out.println("CONFLICT @ " + var1); + } + + itemsList[256 + var1] = this; + } + + public Item setIconIndex(int var1) { + this.iconIndex = var1; + return this; + } + + public int getIconFromDamage(ItemStack var1) { + return this.iconIndex; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + return false; + } + + public float getStrVsBlock(ItemStack var1, Block var2) { + return 1.0F; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + return var1; + } + + public int getItemStackLimit() { + return this.maxStackSize; + } + + public int getMaxDamage() { + return this.maxDamage; + } + + public void hitEntity(ItemStack var1, EntityLiving var2) { + } + + public void onBlockDestroyed(ItemStack var1, int var2, int var3, int var4, int var5) { + } + + public int getDamageVsEntity(Entity var1) { + return 1; + } + + public boolean canHarvestBlock(Block var1) { + return false; + } + + public void saddleEntity(ItemStack var1, EntityLiving var2) { + } +} diff --git a/source/net/minecraft/src/ItemArmor.java b/source/net/minecraft/src/ItemArmor.java new file mode 100644 index 0000000..e267b4d --- /dev/null +++ b/source/net/minecraft/src/ItemArmor.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class ItemArmor extends Item { + private static final int[] damageReduceAmountArray = new int[]{3, 8, 6, 3}; + private static final int[] maxDamageArray = new int[]{11, 16, 15, 13}; + public final int armorLevel; + public final int armorType; + public final int damageReduceAmount; + public final int renderIndex; + + public ItemArmor(int var1, int var2, int var3, int var4) { + super(var1); + this.armorLevel = var2; + this.armorType = var4; + this.renderIndex = var3; + this.damageReduceAmount = damageReduceAmountArray[var4]; + this.maxDamage = maxDamageArray[var4] * 3 << var2; + this.maxStackSize = 1; + } +} diff --git a/source/net/minecraft/src/ItemAxe.java b/source/net/minecraft/src/ItemAxe.java new file mode 100644 index 0000000..69fdc7d --- /dev/null +++ b/source/net/minecraft/src/ItemAxe.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public class ItemAxe extends ItemTool { + private static Block[] blocksEffectiveAgainst = new Block[]{Block.planks, Block.bookshelf, Block.wood, Block.chest}; + + public ItemAxe(int var1, int var2) { + super(var1, 3, var2, blocksEffectiveAgainst); + } +} diff --git a/source/net/minecraft/src/ItemBlock.java b/source/net/minecraft/src/ItemBlock.java new file mode 100644 index 0000000..5d15793 --- /dev/null +++ b/source/net/minecraft/src/ItemBlock.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +public class ItemBlock extends Item { + private int blockID; + + public ItemBlock(int var1) { + super(var1); + this.blockID = var1 + 256; + this.setIconIndex(Block.blocksList[var1 + 256].getBlockTextureFromSide(2)); + } + + public boolean onItemUse(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; + } + + if(var1.stackSize == 0) { + return false; + } else { + if(var3.canBlockBePlacedAt(this.blockID, var4, var5, var6, false)) { + Block var8 = Block.blocksList[this.blockID]; + if(var3.setBlockWithNotify(var4, var5, var6, this.blockID)) { + Block.blocksList[this.blockID].onBlockPlaced(var3, var4, var5, var6, var7); + var3.playSoundEffect((double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), var8.stepSound.getStepSound(), (var8.stepSound.getVolume() + 1.0F) / 2.0F, var8.stepSound.getPitch() * 0.8F); + --var1.stackSize; + } + } + + return true; + } + } +} diff --git a/source/net/minecraft/src/ItemBow.java b/source/net/minecraft/src/ItemBow.java new file mode 100644 index 0000000..3b7d240 --- /dev/null +++ b/source/net/minecraft/src/ItemBow.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class ItemBow extends Item { + public ItemBow(int var1) { + super(var1); + this.maxStackSize = 1; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + if(var3.inventory.consumeInventoryItem(Item.arrow.shiftedIndex)) { + var2.playSoundAtEntity(var3, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 0.8F)); + var2.spawnEntityInWorld(new EntityArrow(var2, var3)); + } + + return var1; + } +} diff --git a/source/net/minecraft/src/ItemBucket.java b/source/net/minecraft/src/ItemBucket.java new file mode 100644 index 0000000..47af484 --- /dev/null +++ b/source/net/minecraft/src/ItemBucket.java @@ -0,0 +1,82 @@ +package net.minecraft.src; + +public class ItemBucket extends Item { + private int isFull; + + public ItemBucket(int var1, int var2) { + super(var1); + this.maxStackSize = 1; + this.maxDamage = 64; + this.isFull = var2; + } + + 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; + double var11 = var3.prevPosZ + (var3.posZ - var3.prevPosZ) * (double)var4; + Vec3D var13 = Vec3D.createVector(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; + Vec3D var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21); + MovingObjectPosition var24 = var2.rayTraceBlocks_do(var13, var23, this.isFull == 0); + if(var24 == null) { + return var1; + } else { + if(var24.typeOfHit == 0) { + int var25 = var24.blockX; + int var26 = var24.blockY; + int var27 = var24.blockZ; + if(this.isFull == 0) { + if(var2.getBlockMaterial(var25, var26, var27) == Material.water && var2.getBlockMetadata(var25, var26, var27) == 0) { + var2.setBlockWithNotify(var25, var26, var27, 0); + return new ItemStack(Item.bucketWater); + } + + if(var2.getBlockMaterial(var25, var26, var27) == Material.lava && var2.getBlockMetadata(var25, var26, var27) == 0) { + var2.setBlockWithNotify(var25, var26, var27, 0); + return new ItemStack(Item.bucketLava); + } + } else { + if(var24.sideHit == 0) { + --var26; + } + + if(var24.sideHit == 1) { + ++var26; + } + + if(var24.sideHit == 2) { + --var27; + } + + if(var24.sideHit == 3) { + ++var27; + } + + if(var24.sideHit == 4) { + --var25; + } + + if(var24.sideHit == 5) { + ++var25; + } + + if(var2.getBlockId(var25, var26, var27) == 0 || !var2.getBlockMaterial(var25, var26, var27).isSolid()) { + var2.setBlockAndMetadataWithNotify(var25, var26, var27, this.isFull, 0); + return new ItemStack(Item.bucketEmpty); + } + } + } + + return var1; + } + } +} diff --git a/source/net/minecraft/src/ItemDoor.java b/source/net/minecraft/src/ItemDoor.java new file mode 100644 index 0000000..95d9d03 --- /dev/null +++ b/source/net/minecraft/src/ItemDoor.java @@ -0,0 +1,62 @@ +package net.minecraft.src; + +public class ItemDoor extends Item { + public ItemDoor(int var1) { + super(var1); + this.maxDamage = 64; + this.maxStackSize = 1; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(var7 != 1) { + return false; + } else { + ++var5; + if(!Block.doorWood.canPlaceBlockAt(var3, var4, var5, var6)) { + return false; + } else { + int var8 = MathHelper.floor_double((double)((var2.rotationYaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3; + byte var9 = 0; + byte var10 = 0; + if(var8 == 0) { + var10 = 1; + } + + if(var8 == 1) { + var9 = -1; + } + + if(var8 == 2) { + var10 = -1; + } + + if(var8 == 3) { + var9 = 1; + } + + int var11 = (var3.isBlockNormalCube(var4 - var9, var5, var6 - var10) ? 1 : 0) + (var3.isBlockNormalCube(var4 - var9, var5 + 1, var6 - var10) ? 1 : 0); + int var12 = (var3.isBlockNormalCube(var4 + var9, var5, var6 + var10) ? 1 : 0) + (var3.isBlockNormalCube(var4 + var9, var5 + 1, var6 + var10) ? 1 : 0); + boolean var13 = var3.getBlockId(var4 - var9, var5, var6 - var10) == Block.doorWood.blockID || var3.getBlockId(var4 - var9, var5 + 1, var6 - var10) == Block.doorWood.blockID; + boolean var14 = var3.getBlockId(var4 + var9, var5, var6 + var10) == Block.doorWood.blockID || var3.getBlockId(var4 + var9, var5 + 1, var6 + var10) == Block.doorWood.blockID; + boolean var15 = false; + if(var13 && !var14) { + var15 = true; + } else if(var12 > var11) { + var15 = true; + } + + if(var15) { + var8 = var8 - 1 & 3; + var8 += 4; + } + + var3.setBlockWithNotify(var4, var5, var6, Block.doorWood.blockID); + var3.setBlockMetadataWithNotify(var4, var5, var6, var8); + var3.setBlockWithNotify(var4, var5 + 1, var6, Block.doorWood.blockID); + var3.setBlockMetadataWithNotify(var4, var5 + 1, var6, var8 + 8); + --var1.stackSize; + return true; + } + } + } +} diff --git a/source/net/minecraft/src/ItemFlintAndSteel.java b/source/net/minecraft/src/ItemFlintAndSteel.java new file mode 100644 index 0000000..cd682fc --- /dev/null +++ b/source/net/minecraft/src/ItemFlintAndSteel.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +public class ItemFlintAndSteel extends Item { + public ItemFlintAndSteel(int var1) { + super(var1); + this.maxStackSize = 1; + this.maxDamage = 64; + } + + public boolean onItemUse(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); + if(var8 == 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.setBlockWithNotify(var4, var5, var6, Block.fire.blockID); + } + + var1.damageItem(1); + return true; + } +} diff --git a/source/net/minecraft/src/ItemFood.java b/source/net/minecraft/src/ItemFood.java new file mode 100644 index 0000000..d0b8bf9 --- /dev/null +++ b/source/net/minecraft/src/ItemFood.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class ItemFood extends Item { + private int healAmount; + + public ItemFood(int var1, int var2) { + super(var1); + this.healAmount = var2; + this.maxStackSize = 1; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + --var1.stackSize; + var3.heal(this.healAmount); + return var1; + } +} diff --git a/source/net/minecraft/src/ItemHoe.java b/source/net/minecraft/src/ItemHoe.java new file mode 100644 index 0000000..6e2a795 --- /dev/null +++ b/source/net/minecraft/src/ItemHoe.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +public class ItemHoe extends Item { + public ItemHoe(int var1, int var2) { + super(var1); + this.maxStackSize = 1; + this.maxDamage = 32 << var2; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + int var8 = var3.getBlockId(var4, var5, var6); + Material var9 = var3.getBlockMaterial(var4, var5 + 1, var6); + if((var9.isSolid() || var8 != Block.grass.blockID) && var8 != Block.dirt.blockID) { + return false; + } else { + Block var10 = Block.tilledField; + var3.playSoundEffect((double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), var10.stepSound.getStepSound(), (var10.stepSound.getVolume() + 1.0F) / 2.0F, var10.stepSound.getPitch() * 0.8F); + var3.setBlockWithNotify(var4, var5, var6, var10.blockID); + var1.damageItem(1); + if(var3.rand.nextInt(8) == 0 && var8 == Block.grass.blockID) { + byte var11 = 1; + + for(int var12 = 0; var12 < var11; ++var12) { + float var13 = 0.7F; + float var14 = var3.rand.nextFloat() * var13 + (1.0F - var13) * 0.5F; + float var15 = 1.2F; + float var16 = var3.rand.nextFloat() * var13 + (1.0F - var13) * 0.5F; + EntityItem var17 = new EntityItem(var3, (double)((float)var4 + var14), (double)((float)var5 + var15), (double)((float)var6 + var16), new ItemStack(Item.seeds)); + var17.delayBeforeCanPickup = 10; + var3.spawnEntityInWorld(var17); + } + } + + return true; + } + } +} diff --git a/source/net/minecraft/src/ItemMinecart.java b/source/net/minecraft/src/ItemMinecart.java new file mode 100644 index 0000000..2aa4d3f --- /dev/null +++ b/source/net/minecraft/src/ItemMinecart.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class ItemMinecart extends Item { + public ItemMinecart(int var1) { + super(var1); + this.maxStackSize = 1; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + int var8 = var3.getBlockId(var4, var5, var6); + if(var8 == Block.minecartTrack.blockID) { + var3.spawnEntityInWorld(new EntityMinecart(var3, (double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F))); + --var1.stackSize; + return true; + } else { + return false; + } + } +} diff --git a/source/net/minecraft/src/ItemPainting.java b/source/net/minecraft/src/ItemPainting.java new file mode 100644 index 0000000..8cfa711 --- /dev/null +++ b/source/net/minecraft/src/ItemPainting.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +public class ItemPainting extends Item { + public ItemPainting(int var1) { + super(var1); + this.maxDamage = 64; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(var7 == 0) { + return false; + } else if(var7 == 1) { + return false; + } else { + byte var8 = 0; + if(var7 == 4) { + var8 = 1; + } + + if(var7 == 3) { + var8 = 2; + } + + if(var7 == 5) { + var8 = 3; + } + + EntityPainting var9 = new EntityPainting(var3, var4, var5, var6, var8); + if(var9.onValidSurface()) { + var3.spawnEntityInWorld(var9); + --var1.stackSize; + } + + return true; + } + } +} diff --git a/source/net/minecraft/src/ItemPickaxe.java b/source/net/minecraft/src/ItemPickaxe.java new file mode 100644 index 0000000..a5a9ab6 --- /dev/null +++ b/source/net/minecraft/src/ItemPickaxe.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class ItemPickaxe extends ItemTool { + private static Block[] blocksEffectiveAgainst = new Block[]{Block.cobblestone, Block.stairDouble, Block.stairSingle, Block.stone, Block.cobblestoneMossy, Block.oreIron, Block.blockSteel, Block.oreCoal, Block.blockGold, Block.oreGold, Block.oreDiamond, Block.blockDiamond}; + private int getHarvestLevel; + + public ItemPickaxe(int var1, int var2) { + super(var1, 2, var2, blocksEffectiveAgainst); + this.getHarvestLevel = var2; + } + + public boolean canHarvestBlock(Block var1) { + return var1 == Block.obsidian ? this.getHarvestLevel == 3 : (var1 != Block.blockDiamond && var1 != Block.oreDiamond ? (var1 != Block.blockGold && var1 != Block.oreGold ? (var1 != Block.blockSteel && var1 != Block.oreIron ? (var1.blockMaterial == Material.rock ? true : var1.blockMaterial == Material.iron) : this.getHarvestLevel >= 1) : this.getHarvestLevel >= 2) : this.getHarvestLevel >= 2); + } +} diff --git a/source/net/minecraft/src/ItemRenderer.java b/source/net/minecraft/src/ItemRenderer.java new file mode 100644 index 0000000..1d1a353 --- /dev/null +++ b/source/net/minecraft/src/ItemRenderer.java @@ -0,0 +1,361 @@ +package net.minecraft.src; + +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 int swingProgress = 0; + private boolean itemSwingState = false; + private RenderBlocks renderBlocksInstance = new RenderBlocks(); + + public ItemRenderer(Minecraft var1) { + this.mc = var1; + } + + public void renderItemInFirstPerson(float var1) { + float var2 = this.prevEquippedProgress + (this.equippedProgress - this.prevEquippedProgress) * var1; + EntityPlayerSP var3 = this.mc.thePlayer; + GL11.glPushMatrix(); + GL11.glRotatef(var3.prevRotationPitch + (var3.rotationPitch - var3.prevRotationPitch) * var1, 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 var4 = this.mc.theWorld.getBrightness(MathHelper.floor_double(var3.posX), MathHelper.floor_double(var3.posY), MathHelper.floor_double(var3.posZ)); + GL11.glColor4f(var4, var4, var4, 1.0F); + float var5; + float var6; + float var7; + float var8; + if(this.itemToRender != null) { + GL11.glPushMatrix(); + var5 = 0.8F; + if(this.itemSwingState) { + var6 = ((float)this.swingProgress + var1) / 8.0F; + var7 = MathHelper.sin(var6 * (float)Math.PI); + var8 = MathHelper.sin(MathHelper.sqrt_float(var6) * (float)Math.PI); + GL11.glTranslatef(-var8 * 0.4F, MathHelper.sin(MathHelper.sqrt_float(var6) * (float)Math.PI * 2.0F) * 0.2F, -var7 * 0.2F); + } + + GL11.glTranslatef(0.7F * var5, -0.65F * var5 - (1.0F - var2) * 0.6F, -0.9F * var5); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + if(this.itemSwingState) { + var6 = ((float)this.swingProgress + var1) / 8.0F; + var7 = MathHelper.sin(var6 * var6 * (float)Math.PI); + var8 = MathHelper.sin(MathHelper.sqrt_float(var6) * (float)Math.PI); + GL11.glRotatef(-var7 * 20.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var8 * 20.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-var8 * 80.0F, 1.0F, 0.0F, 0.0F); + } + + var6 = 0.4F; + GL11.glScalef(var6, var6, var6); + if(this.itemToRender.itemID < 256 && Block.blocksList[this.itemToRender.itemID].getRenderType() == 0) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); + this.renderBlocksInstance.renderBlockOnInventory(Block.blocksList[this.itemToRender.itemID]); + } else { + if(this.itemToRender.itemID < 256) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); + } else { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/gui/items.png")); + } + + Tessellator var22 = Tessellator.instance; + var8 = (float)(this.itemToRender.getIconIndex() % 16 * 16 + 0) / 256.0F; + float var9 = (float)(this.itemToRender.getIconIndex() % 16 * 16 + 16) / 256.0F; + float var10 = (float)(this.itemToRender.getIconIndex() / 16 * 16 + 0) / 256.0F; + float var11 = (float)(this.itemToRender.getIconIndex() / 16 * 16 + 16) / 256.0F; + float var12 = 1.0F; + float var13 = 0.0F; + float var14 = 0.3F; + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glTranslatef(-var13, -var14, 0.0F); + float var15 = 1.5F; + GL11.glScalef(var15, var15, var15); + 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); + float var16 = 1.0F / 16.0F; + var22.startDrawingQuads(); + var22.setNormal(0.0F, 0.0F, 1.0F); + var22.addVertexWithUV(0.0D, 0.0D, 0.0D, (double)var9, (double)var11); + var22.addVertexWithUV((double)var12, 0.0D, 0.0D, (double)var8, (double)var11); + var22.addVertexWithUV((double)var12, 1.0D, 0.0D, (double)var8, (double)var10); + var22.addVertexWithUV(0.0D, 1.0D, 0.0D, (double)var9, (double)var10); + var22.draw(); + var22.startDrawingQuads(); + var22.setNormal(0.0F, 0.0F, -1.0F); + var22.addVertexWithUV(0.0D, 1.0D, (double)(0.0F - var16), (double)var9, (double)var10); + var22.addVertexWithUV((double)var12, 1.0D, (double)(0.0F - var16), (double)var8, (double)var10); + var22.addVertexWithUV((double)var12, 0.0D, (double)(0.0F - var16), (double)var8, (double)var11); + var22.addVertexWithUV(0.0D, 0.0D, (double)(0.0F - var16), (double)var9, (double)var11); + var22.draw(); + var22.startDrawingQuads(); + var22.setNormal(-1.0F, 0.0F, 0.0F); + + int var17; + float var18; + float var19; + float var20; + for(var17 = 0; var17 < 16; ++var17) { + var18 = (float)var17 / 16.0F; + var19 = var9 + (var8 - var9) * var18 - 0.001953125F; + var20 = var12 * var18; + var22.addVertexWithUV((double)var20, 0.0D, (double)(0.0F - var16), (double)var19, (double)var11); + var22.addVertexWithUV((double)var20, 0.0D, 0.0D, (double)var19, (double)var11); + var22.addVertexWithUV((double)var20, 1.0D, 0.0D, (double)var19, (double)var10); + var22.addVertexWithUV((double)var20, 1.0D, (double)(0.0F - var16), (double)var19, (double)var10); + } + + var22.draw(); + var22.startDrawingQuads(); + var22.setNormal(1.0F, 0.0F, 0.0F); + + for(var17 = 0; var17 < 16; ++var17) { + var18 = (float)var17 / 16.0F; + var19 = var9 + (var8 - var9) * var18 - 0.001953125F; + var20 = var12 * var18 + 1.0F / 16.0F; + var22.addVertexWithUV((double)var20, 1.0D, (double)(0.0F - var16), (double)var19, (double)var10); + var22.addVertexWithUV((double)var20, 1.0D, 0.0D, (double)var19, (double)var10); + var22.addVertexWithUV((double)var20, 0.0D, 0.0D, (double)var19, (double)var11); + var22.addVertexWithUV((double)var20, 0.0D, (double)(0.0F - var16), (double)var19, (double)var11); + } + + var22.draw(); + var22.startDrawingQuads(); + var22.setNormal(0.0F, 1.0F, 0.0F); + + for(var17 = 0; var17 < 16; ++var17) { + var18 = (float)var17 / 16.0F; + var19 = var11 + (var10 - var11) * var18 - 0.001953125F; + var20 = var12 * var18 + 1.0F / 16.0F; + var22.addVertexWithUV(0.0D, (double)var20, 0.0D, (double)var9, (double)var19); + var22.addVertexWithUV((double)var12, (double)var20, 0.0D, (double)var8, (double)var19); + var22.addVertexWithUV((double)var12, (double)var20, (double)(0.0F - var16), (double)var8, (double)var19); + var22.addVertexWithUV(0.0D, (double)var20, (double)(0.0F - var16), (double)var9, (double)var19); + } + + var22.draw(); + var22.startDrawingQuads(); + var22.setNormal(0.0F, -1.0F, 0.0F); + + for(var17 = 0; var17 < 16; ++var17) { + var18 = (float)var17 / 16.0F; + var19 = var11 + (var10 - var11) * var18 - 0.001953125F; + var20 = var12 * var18; + var22.addVertexWithUV((double)var12, (double)var20, 0.0D, (double)var8, (double)var19); + var22.addVertexWithUV(0.0D, (double)var20, 0.0D, (double)var9, (double)var19); + var22.addVertexWithUV(0.0D, (double)var20, (double)(0.0F - var16), (double)var9, (double)var19); + var22.addVertexWithUV((double)var12, (double)var20, (double)(0.0F - var16), (double)var8, (double)var19); + } + + var22.draw(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + } + + GL11.glPopMatrix(); + } else { + GL11.glPushMatrix(); + var5 = 0.8F; + if(this.itemSwingState) { + var6 = ((float)this.swingProgress + var1) / 8.0F; + var7 = MathHelper.sin(var6 * (float)Math.PI); + var8 = MathHelper.sin(MathHelper.sqrt_float(var6) * (float)Math.PI); + GL11.glTranslatef(-var8 * 0.3F, MathHelper.sin(MathHelper.sqrt_float(var6) * (float)Math.PI * 2.0F) * 0.4F, -var7 * 0.4F); + } + + GL11.glTranslatef(0.8F * var5, -(12.0F / 16.0F) * var5 - (1.0F - var2) * 0.6F, -0.9F * var5); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + if(this.itemSwingState) { + var6 = ((float)this.swingProgress + var1) / 8.0F; + var7 = MathHelper.sin(var6 * var6 * (float)Math.PI); + var8 = MathHelper.sin(MathHelper.sqrt_float(var6) * (float)Math.PI); + GL11.glRotatef(var8 * 70.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var7 * 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())); + 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); + Render var21 = RenderManager.instance.getEntityRenderObject(this.mc.thePlayer); + RenderPlayer var23 = (RenderPlayer)var21; + var8 = 1.0F; + GL11.glScalef(var8, var8, var8); + var23.drawFirstPersonHand(); + GL11.glPopMatrix(); + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + } + + public void renderOverlays(float var1) { + GL11.glDisable(GL11.GL_ALPHA_TEST); + int var2; + if(this.mc.thePlayer.fire > 0) { + var2 = this.mc.renderEngine.getTexture("/terrain.png"); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var2); + this.renderFireInFirstPerson(var1); + } + + if(this.mc.theWorld.playerEntity.isEntityInsideOpaqueBlock()) { + 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); + int var5 = this.mc.renderEngine.getTexture("/terrain.png"); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var5); + int var6 = this.mc.theWorld.getBlockId(var2, var3, var4); + if(Block.blocksList[var6] != null) { + this.renderInsideOfBlock(var1, Block.blocksList[var6].getBlockTextureFromSide(2)); + } + } + + if(this.mc.thePlayer.isInsideOfMaterial(Material.water)) { + var2 = this.mc.renderEngine.getTexture("/water.png"); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var2); + this.renderWarpedTextureOverlay(var1); + } + + GL11.glEnable(GL11.GL_ALPHA_TEST); + } + + private void renderInsideOfBlock(float var1, int var2) { + Tessellator var3 = Tessellator.instance; + this.mc.thePlayer.getEntityBrightness(var1); + 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 = 0.0078125F; + float var11 = (float)(var2 % 16) / 256.0F - var10; + float var12 = ((float)(var2 % 16) + 15.99F) / 256.0F + var10; + float var13 = (float)(var2 / 16) / 256.0F - var10; + float var14 = ((float)(var2 / 16) + 15.99F) / 256.0F + var10; + var3.startDrawingQuads(); + var3.addVertexWithUV((double)var5, (double)var7, (double)var9, (double)var12, (double)var14); + var3.addVertexWithUV((double)var6, (double)var7, (double)var9, (double)var11, (double)var14); + var3.addVertexWithUV((double)var6, (double)var8, (double)var9, (double)var11, (double)var13); + var3.addVertexWithUV((double)var5, (double)var8, (double)var9, (double)var12, (double)var13); + 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.getEntityBrightness(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(); + int var5 = Block.fire.blockIndexInTexture + var4 * 16; + int var6 = (var5 & 15) << 4; + int var7 = var5 & 240; + float var8 = (float)var6 / 256.0F; + float var9 = ((float)var6 + 15.99F) / 256.0F; + float var10 = (float)var7 / 256.0F; + float var11 = ((float)var7 + 15.99F) / 256.0F; + float var12 = (0.0F - var3) / 2.0F; + float var13 = var12 + var3; + float var14 = 0.0F - var3 / 2.0F; + float var15 = var14 + var3; + float var16 = -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)var12, (double)var14, (double)var16, (double)var9, (double)var11); + var2.addVertexWithUV((double)var13, (double)var14, (double)var16, (double)var8, (double)var11); + var2.addVertexWithUV((double)var13, (double)var15, (double)var16, (double)var8, (double)var10); + var2.addVertexWithUV((double)var12, (double)var15, (double)var16, (double)var9, (double)var10); + 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; + if(this.itemSwingState) { + ++this.swingProgress; + if(this.swingProgress == 8) { + this.swingProgress = 0; + this.itemSwingState = false; + } + } + + EntityPlayerSP var1 = this.mc.thePlayer; + ItemStack var2 = var1.inventory.getCurrentItem(); + float var4 = 0.4F; + float var5 = var2 == this.itemToRender ? 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; + } + + } + + public void resetEquippedProgress() { + this.equippedProgress = 0.0F; + } + + public void swing() { + this.swingProgress = -1; + this.itemSwingState = true; + } + + public void resetEquippedProgress2() { + this.equippedProgress = 0.0F; + } +} diff --git a/source/net/minecraft/src/ItemSaddle.java b/source/net/minecraft/src/ItemSaddle.java new file mode 100644 index 0000000..9bb552f --- /dev/null +++ b/source/net/minecraft/src/ItemSaddle.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +public class ItemSaddle extends Item { + public ItemSaddle(int var1) { + super(var1); + this.maxStackSize = 1; + this.maxDamage = 64; + } + + public void saddleEntity(ItemStack var1, EntityLiving var2) { + if(var2 instanceof EntityPig) { + EntityPig var3 = (EntityPig)var2; + if(!var3.saddled) { + var3.saddled = true; + --var1.stackSize; + } + } + + } + + public void hitEntity(ItemStack var1, EntityLiving var2) { + this.saddleEntity(var1, var2); + } +} diff --git a/source/net/minecraft/src/ItemSeeds.java b/source/net/minecraft/src/ItemSeeds.java new file mode 100644 index 0000000..91ad225 --- /dev/null +++ b/source/net/minecraft/src/ItemSeeds.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class ItemSeeds extends Item { + private int blockType; + + public ItemSeeds(int var1, int var2) { + super(var1); + this.blockType = var2; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(var7 != 1) { + return false; + } else { + int var8 = var3.getBlockId(var4, var5, var6); + if(var8 == Block.tilledField.blockID) { + var3.setBlockWithNotify(var4, var5 + 1, var6, this.blockType); + --var1.stackSize; + return true; + } else { + return false; + } + } + } +} diff --git a/source/net/minecraft/src/ItemSign.java b/source/net/minecraft/src/ItemSign.java new file mode 100644 index 0000000..f760b3e --- /dev/null +++ b/source/net/minecraft/src/ItemSign.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class ItemSign extends Item { + public ItemSign(int var1) { + super(var1); + this.maxDamage = 64; + this.maxStackSize = 1; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(var7 != 1) { + return false; + } else { + ++var5; + if(!Block.signStanding.canPlaceBlockAt(var3, var4, var5, var6)) { + return false; + } else { + var3.setBlockWithNotify(var4, var5, var6, Block.signStanding.blockID); + var3.setBlockMetadataWithNotify(var4, var5, var6, MathHelper.floor_double((double)((var2.rotationYaw + 180.0F) * 16.0F / 360.0F) - 0.5D) & 15); + --var1.stackSize; + var2.displayGUIEditSign((TileEntitySign)var3.getBlockTileEntity(var4, var5, var6)); + return true; + } + } + } +} diff --git a/source/net/minecraft/src/ItemSoup.java b/source/net/minecraft/src/ItemSoup.java new file mode 100644 index 0000000..7143549 --- /dev/null +++ b/source/net/minecraft/src/ItemSoup.java @@ -0,0 +1,12 @@ +package net.minecraft.src; + +public class ItemSoup extends ItemFood { + public ItemSoup(int var1, int var2) { + super(var1, var2); + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + super.onItemRightClick(var1, var2, var3); + return new ItemStack(Item.bowlEmpty); + } +} diff --git a/source/net/minecraft/src/ItemSpade.java b/source/net/minecraft/src/ItemSpade.java new file mode 100644 index 0000000..5328e68 --- /dev/null +++ b/source/net/minecraft/src/ItemSpade.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public class ItemSpade extends ItemTool { + private static Block[] blocksEffectiveAgainst = new Block[]{Block.grass, Block.dirt, Block.sand, Block.gravel}; + + public ItemSpade(int var1, int var2) { + super(var1, 1, var2, blocksEffectiveAgainst); + } +} diff --git a/source/net/minecraft/src/ItemStack.java b/source/net/minecraft/src/ItemStack.java new file mode 100644 index 0000000..83d7a12 --- /dev/null +++ b/source/net/minecraft/src/ItemStack.java @@ -0,0 +1,128 @@ +package net.minecraft.src; + +public final class ItemStack { + public int stackSize; + public int animationsToGo; + public int itemID; + public int itemDmg; + + public ItemStack(Block var1) { + this((Block)var1, 1); + } + + public ItemStack(Block var1, int var2) { + this(var1.blockID, var2); + } + + public ItemStack(Item var1) { + this((Item)var1, 1); + } + + public ItemStack(Item var1, int var2) { + this(var1.shiftedIndex, var2); + } + + public ItemStack(int var1) { + this(var1, 1); + } + + public ItemStack(int var1, int var2) { + this.stackSize = 0; + this.itemID = var1; + this.stackSize = var2; + } + + public ItemStack(int var1, int var2, int var3) { + this.stackSize = 0; + this.itemID = var1; + this.stackSize = var2; + this.itemDmg = var3; + } + + public ItemStack(NBTTagCompound var1) { + this.stackSize = 0; + this.readFromNBT(var1); + } + + public ItemStack splitStack(int var1) { + this.stackSize -= var1; + return new ItemStack(this.itemID, var1, this.itemDmg); + } + + public Item getItem() { + return Item.itemsList[this.itemID]; + } + + public int getIconIndex() { + return this.getItem().getIconFromDamage(this); + } + + public boolean useItem(EntityPlayer var1, World var2, int var3, int var4, int var5, int var6) { + return this.getItem().onItemUse(this, var1, var2, var3, var4, var5, var6); + } + + 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 NBTTagCompound writeToNBT(NBTTagCompound var1) { + var1.setShort("id", (short)this.itemID); + var1.setByte("Count", (byte)this.stackSize); + var1.setShort("Damage", (short)this.itemDmg); + return var1; + } + + public void readFromNBT(NBTTagCompound var1) { + this.itemID = var1.getShort("id"); + this.stackSize = var1.getByte("Count"); + this.itemDmg = var1.getShort("Damage"); + } + + public int getMaxStackSize() { + return this.getItem().getItemStackLimit(); + } + + public int getMaxDamage() { + return Item.itemsList[this.itemID].getMaxDamage(); + } + + public void damageItem(int var1) { + this.itemDmg += var1; + if(this.itemDmg > this.getMaxDamage()) { + --this.stackSize; + if(this.stackSize < 0) { + this.stackSize = 0; + } + + this.itemDmg = 0; + } + + } + + public void hitEntity(EntityLiving var1) { + Item.itemsList[this.itemID].hitEntity(this, var1); + } + + public void onDestroyBlock(int var1, int var2, int var3, int var4) { + Item.itemsList[this.itemID].onBlockDestroyed(this, var1, var2, var3, var4); + } + + 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 void onItemDestroyedByUse(EntityPlayer var1) { + } + + public void useItemOnEntity(EntityLiving var1) { + Item.itemsList[this.itemID].saddleEntity(this, var1); + } +} diff --git a/source/net/minecraft/src/ItemSword.java b/source/net/minecraft/src/ItemSword.java new file mode 100644 index 0000000..a7c1046 --- /dev/null +++ b/source/net/minecraft/src/ItemSword.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +public class ItemSword extends Item { + private int weaponDamage; + + public ItemSword(int var1, int var2) { + super(var1); + this.maxStackSize = 1; + this.maxDamage = 32 << var2; + this.weaponDamage = 4 + var2 * 2; + } + + public float getStrVsBlock(ItemStack var1, Block var2) { + return 1.5F; + } + + public void hitEntity(ItemStack var1, EntityLiving var2) { + var1.damageItem(1); + } + + public void onBlockDestroyed(ItemStack var1, int var2, int var3, int var4, int var5) { + var1.damageItem(2); + } + + public int getDamageVsEntity(Entity var1) { + return this.weaponDamage; + } +} diff --git a/source/net/minecraft/src/ItemTool.java b/source/net/minecraft/src/ItemTool.java new file mode 100644 index 0000000..9c231e1 --- /dev/null +++ b/source/net/minecraft/src/ItemTool.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +public class ItemTool extends Item { + private Block[] blocksEffectiveAgainst; + private float efficiencyOnProperMaterial = 4.0F; + private int damageVsEntity; + protected int toolMaterial; + + public ItemTool(int var1, int var2, int var3, Block[] var4) { + super(var1); + this.toolMaterial = var3; + this.blocksEffectiveAgainst = var4; + this.maxStackSize = 1; + this.maxDamage = 32 << var3; + if(var3 == 3) { + this.maxDamage *= 2; + } + + this.efficiencyOnProperMaterial = (float)((var3 + 1) * 2); + this.damageVsEntity = var2 + var3; + } + + 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 void hitEntity(ItemStack var1, EntityLiving var2) { + var1.damageItem(2); + } + + public void onBlockDestroyed(ItemStack var1, int var2, int var3, int var4, int var5) { + var1.damageItem(1); + } + + public int getDamageVsEntity(Entity var1) { + return this.damageVsEntity; + } +} diff --git a/source/net/minecraft/src/KeyBinding.java b/source/net/minecraft/src/KeyBinding.java new file mode 100644 index 0000000..6d27b38 --- /dev/null +++ b/source/net/minecraft/src/KeyBinding.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class KeyBinding { + public String keyDescription; + public int keyCode; + + public KeyBinding(String var1, int var2) { + this.keyDescription = var1; + this.keyCode = var2; + } +} diff --git a/source/net/minecraft/src/LoadingScreenRenderer.java b/source/net/minecraft/src/LoadingScreenRenderer.java new file mode 100644 index 0000000..435c9ac --- /dev/null +++ b/source/net/minecraft/src/LoadingScreenRenderer.java @@ -0,0 +1,124 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.Display; +import org.lwjgl.opengl.GL11; + +public class LoadingScreenRenderer implements IProgressUpdate { + private String currentlyDisplayedProgress = ""; + private Minecraft mc; + private String currentlyDisplayedText = ""; + private long systemTime = System.currentTimeMillis(); + private boolean printText = false; + + public LoadingScreenRenderer(Minecraft var1) { + this.mc = var1; + } + + public void printText(String var1) { + this.printText = false; + this.drawScreen(var1); + } + + public void displayProgressMessage(String var1) { + this.printText = true; + this.drawScreen(this.currentlyDisplayedText); + } + + public void drawScreen(String var1) { + if(!this.mc.running) { + if(!this.printText) { + throw new MinecraftError(); + } + } else { + this.currentlyDisplayedText = var1; + ScaledResolution var2 = new ScaledResolution(this.mc.displayWidth, this.mc.displayHeight); + int var3 = var2.getScaledWidth(); + int var4 = var2.getScaledHeight(); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glOrtho(0.0D, (double)var3, (double)var4, 0.0D, 100.0D, 300.0D); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + GL11.glTranslatef(0.0F, 0.0F, -200.0F); + } + } + + public void displayLoadingString(String var1) { + if(!this.mc.running) { + if(!this.printText) { + throw new MinecraftError(); + } + } else { + this.systemTime = 0L; + this.currentlyDisplayedProgress = var1; + this.setLoadingProgress(-1); + this.systemTime = 0L; + } + } + + public void setLoadingProgress(int var1) { + if(!this.mc.running) { + if(!this.printText) { + throw new MinecraftError(); + } + } else { + long var2 = System.currentTimeMillis(); + if(var2 - this.systemTime >= 20L) { + this.systemTime = var2; + ScaledResolution var4 = new ScaledResolution(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, (double)var5, (double)var6, 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; + int var8 = this.mc.renderEngine.getTexture("/dirt.png"); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var8); + float var9 = 32.0F; + var7.startDrawingQuads(); + var7.setColorOpaque_I(4210752); + var7.addVertexWithUV(0.0D, (double)var6, 0.0D, 0.0D, (double)((float)var6 / var9)); + var7.addVertexWithUV((double)var5, (double)var6, 0.0D, (double)((float)var5 / var9), (double)((float)var6 / var9)); + var7.addVertexWithUV((double)var5, 0.0D, 0.0D, (double)((float)var5 / var9), 0.0D); + var7.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, 0.0D); + var7.draw(); + if(var1 >= 0) { + byte var10 = 100; + byte var11 = 2; + int var12 = var5 / 2 - var10 / 2; + int var13 = var6 / 2 + 16; + GL11.glDisable(GL11.GL_TEXTURE_2D); + var7.startDrawingQuads(); + var7.setColorOpaque_I(8421504); + var7.addVertex((double)var12, (double)var13, 0.0D); + var7.addVertex((double)var12, (double)(var13 + var11), 0.0D); + var7.addVertex((double)(var12 + var10), (double)(var13 + var11), 0.0D); + var7.addVertex((double)(var12 + var10), (double)var13, 0.0D); + var7.setColorOpaque_I(8454016); + var7.addVertex((double)var12, (double)var13, 0.0D); + var7.addVertex((double)var12, (double)(var13 + var11), 0.0D); + var7.addVertex((double)(var12 + var1), (double)(var13 + var11), 0.0D); + var7.addVertex((double)(var12 + var1), (double)var13, 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.currentlyDisplayedProgress, (var5 - this.mc.fontRenderer.getStringWidth(this.currentlyDisplayedProgress)) / 2, var6 / 2 - 4 + 8, 16777215); + Display.update(); + + try { + Thread.yield(); + } catch (Exception var14) { + } + + } + } + } +} diff --git a/source/net/minecraft/src/Material.java b/source/net/minecraft/src/Material.java new file mode 100644 index 0000000..1f1bf08 --- /dev/null +++ b/source/net/minecraft/src/Material.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +public class Material { + public static final Material air = new MaterialTransparent(); + public static final Material ground = new Material(); + public static final Material wood = new Material(); + public static final Material rock = new Material(); + public static final Material iron = new Material(); + public static final Material water = new MaterialLiquid(); + public static final Material lava = new MaterialLiquid(); + public static final Material leaves = new Material(); + public static final Material plants = new MaterialLogic(); + public static final Material sponge = new Material(); + public static final Material cloth = new Material(); + public static final Material fire = new MaterialTransparent(); + public static final Material sand = new Material(); + public static final Material circuits = new MaterialLogic(); + public static final Material glass = new Material(); + public static final Material tnt = new Material(); + public static final Material unused = new Material(); + + public boolean getIsLiquid() { + return false; + } + + public boolean isSolid() { + return true; + } + + public boolean getCanBlockGrass() { + return true; + } + + public boolean getIsSolid() { + return true; + } +} diff --git a/source/net/minecraft/src/MaterialLiquid.java b/source/net/minecraft/src/MaterialLiquid.java new file mode 100644 index 0000000..54efda3 --- /dev/null +++ b/source/net/minecraft/src/MaterialLiquid.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class MaterialLiquid extends Material { + public boolean getIsLiquid() { + return true; + } + + public boolean isSolid() { + return false; + } +} diff --git a/source/net/minecraft/src/MaterialLogic.java b/source/net/minecraft/src/MaterialLogic.java new file mode 100644 index 0000000..19d5b0d --- /dev/null +++ b/source/net/minecraft/src/MaterialLogic.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class MaterialLogic extends Material { + public boolean isSolid() { + return false; + } + + public boolean getCanBlockGrass() { + return false; + } + + public boolean getIsSolid() { + return false; + } +} diff --git a/source/net/minecraft/src/MaterialTransparent.java b/source/net/minecraft/src/MaterialTransparent.java new file mode 100644 index 0000000..a475877 --- /dev/null +++ b/source/net/minecraft/src/MaterialTransparent.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class MaterialTransparent extends Material { + public boolean isSolid() { + return false; + } + + public boolean getCanBlockGrass() { + return false; + } + + public boolean getIsSolid() { + return false; + } +} diff --git a/source/net/minecraft/src/MathHelper.java b/source/net/minecraft/src/MathHelper.java new file mode 100644 index 0000000..bd32d54 --- /dev/null +++ b/source/net/minecraft/src/MathHelper.java @@ -0,0 +1,58 @@ +package net.minecraft.src; + +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 floor_double(double var0) { + int var2 = (int)var0; + return var0 < (double)var2 ? var2 - 1 : var2; + } + + public static float abs(float var0) { + return var0 >= 0.0F ? var0 : -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; + } + + 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/source/net/minecraft/src/MetadataChunkBlock.java b/source/net/minecraft/src/MetadataChunkBlock.java new file mode 100644 index 0000000..6f9e4d9 --- /dev/null +++ b/source/net/minecraft/src/MetadataChunkBlock.java @@ -0,0 +1,153 @@ +package net.minecraft.src; + +public class MetadataChunkBlock { + public final EnumSkyBlock skyBlock; + public int x; + public int y; + public int z; + public int maxX; + public int maxY; + public int maxZ; + + public MetadataChunkBlock(EnumSkyBlock var1, int var2, int var3, int var4, int var5, int var6, int var7) { + this.skyBlock = var1; + this.x = var2; + this.y = var3; + this.z = var4; + this.maxX = var5; + this.maxY = var6; + this.maxZ = var7; + } + + public void updateLight(World var1) { + for(int var2 = this.x; var2 <= this.maxX; ++var2) { + for(int var3 = this.z; var3 <= this.maxZ; ++var3) { + if(var1.blockExists(var2, 0, var3)) { + for(int var4 = this.y; var4 <= this.maxY; ++var4) { + if(var4 >= 0 && var4 < 128) { + int var5 = var1.getSavedLightValue(this.skyBlock, var2, var4, var3); + boolean var6 = false; + int var7 = var1.getBlockId(var2, var4, var3); + int var8 = Block.lightOpacity[var7]; + if(var8 == 0) { + var8 = 1; + } + + int var9 = 0; + if(this.skyBlock == EnumSkyBlock.Sky) { + if(var1.canExistingBlockSeeTheSky(var2, var4, var3)) { + var9 = 15; + } + } else if(this.skyBlock == EnumSkyBlock.Block) { + var9 = Block.lightValue[var7]; + } + + int var10; + int var16; + if(var8 >= 15 && var9 == 0) { + var16 = 0; + } else { + var10 = var1.getSavedLightValue(this.skyBlock, var2 - 1, var4, var3); + int var11 = var1.getSavedLightValue(this.skyBlock, var2 + 1, var4, var3); + int var12 = var1.getSavedLightValue(this.skyBlock, var2, var4 - 1, var3); + int var13 = var1.getSavedLightValue(this.skyBlock, var2, var4 + 1, var3); + int var14 = var1.getSavedLightValue(this.skyBlock, var2, var4, var3 - 1); + int var15 = var1.getSavedLightValue(this.skyBlock, var2, var4, var3 + 1); + var16 = var10; + if(var11 > var10) { + var16 = var11; + } + + if(var12 > var16) { + var16 = var12; + } + + if(var13 > var16) { + var16 = var13; + } + + if(var14 > var16) { + var16 = var14; + } + + if(var15 > var16) { + var16 = var15; + } + + var16 -= var8; + if(var16 < 0) { + var16 = 0; + } + + if(var9 > var16) { + var16 = var9; + } + } + + if(var5 != var16) { + var1.setLightValue(this.skyBlock, var2, var4, var3, var16); + var10 = var16 - 1; + if(var10 < 0) { + var10 = 0; + } + + var1.neighborLightPropagationChanged(this.skyBlock, var2 - 1, var4, var3, var10); + var1.neighborLightPropagationChanged(this.skyBlock, var2, var4 - 1, var3, var10); + var1.neighborLightPropagationChanged(this.skyBlock, var2, var4, var3 - 1, var10); + if(var2 + 1 >= this.maxX) { + var1.neighborLightPropagationChanged(this.skyBlock, var2 + 1, var4, var3, var10); + } + + if(var4 + 1 >= this.maxY) { + var1.neighborLightPropagationChanged(this.skyBlock, var2, var4 + 1, var3, var10); + } + + if(var3 + 1 >= this.maxZ) { + var1.neighborLightPropagationChanged(this.skyBlock, var2, var4, var3 + 1, var10); + } + } + } + } + } + } + } + + } + + public boolean getLightUpdated(int var1, int var2, int var3, int var4, int var5, int var6) { + if(var1 >= this.x && var2 >= this.y && var3 >= this.z && var4 <= this.maxX && var5 <= this.maxY && var6 <= this.maxZ) { + return true; + } else { + byte var7 = 1; + if(var1 >= this.x - var7 && var2 >= this.y - var7 && var3 >= this.z - var7 && var4 <= this.maxX + var7 && var5 <= this.maxY + var7 && var6 <= this.maxZ + var7) { + if(var1 < this.x) { + this.x = var1; + } + + if(var2 < this.y) { + this.y = var2; + } + + if(var3 < this.z) { + this.z = var3; + } + + if(var4 > this.maxX) { + this.maxX = var4; + } + + if(var5 > this.maxY) { + this.maxY = var5; + } + + if(var6 > this.maxZ) { + this.maxZ = var6; + } + + return true; + } else { + return false; + } + } + } +} diff --git a/source/net/minecraft/src/MinecartTrackLogic.java b/source/net/minecraft/src/MinecartTrackLogic.java new file mode 100644 index 0000000..87e209a --- /dev/null +++ b/source/net/minecraft/src/MinecartTrackLogic.java @@ -0,0 +1,250 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +class MinecartTrackLogic { + private World worldObj; + private int trackX; + private int trackY; + private int trackZ; + private int trackMetadata; + private List connectedTracks; + final BlockMinecartTrack minecartTrack; + + public MinecartTrackLogic(BlockMinecartTrack var1, World var2, int var3, int var4, int var5) { + this.minecartTrack = var1; + this.connectedTracks = new ArrayList(); + this.worldObj = var2; + this.trackX = var3; + this.trackY = var4; + this.trackZ = var5; + this.trackMetadata = var2.getBlockMetadata(var3, var4, var5); + this.calculateConnectedTracks(); + } + + private void calculateConnectedTracks() { + this.connectedTracks.clear(); + if(this.trackMetadata == 0) { + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ - 1)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ + 1)); + } else if(this.trackMetadata == 1) { + this.connectedTracks.add(new ChunkPosition(this.trackX - 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX + 1, this.trackY, this.trackZ)); + } else if(this.trackMetadata == 2) { + this.connectedTracks.add(new ChunkPosition(this.trackX - 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX + 1, this.trackY + 1, this.trackZ)); + } else if(this.trackMetadata == 3) { + this.connectedTracks.add(new ChunkPosition(this.trackX - 1, this.trackY + 1, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX + 1, this.trackY, this.trackZ)); + } else if(this.trackMetadata == 4) { + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY + 1, this.trackZ - 1)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ + 1)); + } else if(this.trackMetadata == 5) { + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ - 1)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY + 1, this.trackZ + 1)); + } else if(this.trackMetadata == 6) { + this.connectedTracks.add(new ChunkPosition(this.trackX + 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ + 1)); + } else if(this.trackMetadata == 7) { + this.connectedTracks.add(new ChunkPosition(this.trackX - 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ + 1)); + } else if(this.trackMetadata == 8) { + this.connectedTracks.add(new ChunkPosition(this.trackX - 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ - 1)); + } else if(this.trackMetadata == 9) { + this.connectedTracks.add(new ChunkPosition(this.trackX + 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ - 1)); + } + + } + + private void refreshConnectedTracks() { + for(int var1 = 0; var1 < this.connectedTracks.size(); ++var1) { + MinecartTrackLogic var2 = this.getMinecartTrackLogic((ChunkPosition)this.connectedTracks.get(var1)); + if(var2 != null && var2.isConnectedTo(this)) { + this.connectedTracks.set(var1, new ChunkPosition(var2.trackX, var2.trackY, var2.trackZ)); + } else { + this.connectedTracks.remove(var1--); + } + } + + } + + private MinecartTrackLogic getMinecartTrackLogic(ChunkPosition var1) { + return this.worldObj.getBlockId(var1.x, var1.y, var1.z) == this.minecartTrack.blockID ? new MinecartTrackLogic(this.minecartTrack, this.worldObj, var1.x, var1.y, var1.z) : (this.worldObj.getBlockId(var1.x, var1.y + 1, var1.z) == this.minecartTrack.blockID ? new MinecartTrackLogic(this.minecartTrack, this.worldObj, var1.x, var1.y + 1, var1.z) : (this.worldObj.getBlockId(var1.x, var1.y - 1, var1.z) == this.minecartTrack.blockID ? new MinecartTrackLogic(this.minecartTrack, this.worldObj, var1.x, var1.y - 1, var1.z) : null)); + } + + private boolean isConnectedTo(MinecartTrackLogic var1) { + for(int var2 = 0; var2 < this.connectedTracks.size(); ++var2) { + ChunkPosition var3 = (ChunkPosition)this.connectedTracks.get(var2); + if(var3.x == var1.trackX && var3.z == var1.trackZ) { + return true; + } + } + + return false; + } + + private boolean isInTrack(int var1, int var2, int var3) { + for(int var4 = 0; var4 < this.connectedTracks.size(); ++var4) { + ChunkPosition var5 = (ChunkPosition)this.connectedTracks.get(var4); + if(var5.x == var1 && var5.z == var3) { + return true; + } + } + + return false; + } + + private boolean handleKeyPress(MinecartTrackLogic var1) { + if(this.isConnectedTo(var1)) { + return true; + } else if(this.connectedTracks.size() == 2) { + return false; + } else if(this.connectedTracks.size() == 0) { + return true; + } else { + ChunkPosition var2 = (ChunkPosition)this.connectedTracks.get(0); + return var1.trackY == this.trackY && var2.y == this.trackY ? true : true; + } + } + + private void connectToNeighbor(MinecartTrackLogic var1) { + this.connectedTracks.add(new ChunkPosition(var1.trackX, var1.trackY, var1.trackZ)); + boolean var2 = this.isInTrack(this.trackX, this.trackY, this.trackZ - 1); + boolean var3 = this.isInTrack(this.trackX, this.trackY, this.trackZ + 1); + boolean var4 = this.isInTrack(this.trackX - 1, this.trackY, this.trackZ); + boolean var5 = this.isInTrack(this.trackX + 1, this.trackY, this.trackZ); + byte var6 = -1; + if(var2 || var3) { + var6 = 0; + } + + if(var4 || var5) { + var6 = 1; + } + + 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(this.worldObj.getBlockId(this.trackX, this.trackY + 1, this.trackZ - 1) == this.minecartTrack.blockID) { + var6 = 4; + } + + if(this.worldObj.getBlockId(this.trackX, this.trackY + 1, this.trackZ + 1) == this.minecartTrack.blockID) { + var6 = 5; + } + } + + if(var6 == 1) { + if(this.worldObj.getBlockId(this.trackX + 1, this.trackY + 1, this.trackZ) == this.minecartTrack.blockID) { + var6 = 2; + } + + if(this.worldObj.getBlockId(this.trackX - 1, this.trackY + 1, this.trackZ) == this.minecartTrack.blockID) { + var6 = 3; + } + } + + if(var6 < 0) { + var6 = 0; + } + + this.worldObj.setBlockMetadataWithNotify(this.trackX, this.trackY, this.trackZ, var6); + } + + private boolean canConnectFrom(int var1, int var2, int var3) { + MinecartTrackLogic var4 = this.getMinecartTrackLogic(new ChunkPosition(var1, var2, var3)); + if(var4 == null) { + return false; + } else { + var4.refreshConnectedTracks(); + return var4.handleKeyPress(this); + } + } + + public void place() { + boolean var1 = this.canConnectFrom(this.trackX, this.trackY, this.trackZ - 1); + boolean var2 = this.canConnectFrom(this.trackX, this.trackY, this.trackZ + 1); + boolean var3 = this.canConnectFrom(this.trackX - 1, this.trackY, this.trackZ); + boolean var4 = this.canConnectFrom(this.trackX + 1, this.trackY, this.trackZ); + byte var5 = -1; + if(var1 || var2) { + var5 = 0; + } + + if(var3 || var4) { + var5 = 1; + } + + if(var2 && var4 && !var1 && !var3) { + var5 = 6; + } + + if(var2 && var3 && !var1 && !var4) { + var5 = 7; + } + + if(var1 && var3 && !var2 && !var4) { + var5 = 8; + } + + if(var1 && var4 && !var2 && !var3) { + var5 = 9; + } + + if(var5 == 0) { + if(this.worldObj.getBlockId(this.trackX, this.trackY + 1, this.trackZ - 1) == this.minecartTrack.blockID) { + var5 = 4; + } + + if(this.worldObj.getBlockId(this.trackX, this.trackY + 1, this.trackZ + 1) == this.minecartTrack.blockID) { + var5 = 5; + } + } + + if(var5 == 1) { + if(this.worldObj.getBlockId(this.trackX + 1, this.trackY + 1, this.trackZ) == this.minecartTrack.blockID) { + var5 = 2; + } + + if(this.worldObj.getBlockId(this.trackX - 1, this.trackY + 1, this.trackZ) == this.minecartTrack.blockID) { + var5 = 3; + } + } + + if(var5 < 0) { + var5 = 0; + } + + this.trackMetadata = var5; + this.calculateConnectedTracks(); + this.worldObj.setBlockMetadataWithNotify(this.trackX, this.trackY, this.trackZ, var5); + + for(int var6 = 0; var6 < this.connectedTracks.size(); ++var6) { + MinecartTrackLogic var7 = this.getMinecartTrackLogic((ChunkPosition)this.connectedTracks.get(var6)); + if(var7 != null) { + var7.refreshConnectedTracks(); + if(var7.handleKeyPress(this)) { + var7.connectToNeighbor(this); + } + } + } + + } +} diff --git a/source/net/minecraft/src/Minecraft.java b/source/net/minecraft/src/Minecraft.java new file mode 100644 index 0000000..b16dd43 --- /dev/null +++ b/source/net/minecraft/src/Minecraft.java @@ -0,0 +1,1025 @@ +package net.minecraft.src; + +import java.awt.Canvas; +import java.awt.Color; +import java.awt.Component; +import java.awt.Graphics; +import java.io.File; +import net.minecraft.client.MinecraftApplet; +import org.lwjgl.LWJGLException; +import org.lwjgl.input.Controllers; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.Display; +import org.lwjgl.opengl.DisplayMode; +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.glu.GLU; + +public abstract class Minecraft implements Runnable { + public PlayerController playerController = new PlayerControllerSP(this); + private boolean fullscreen = false; + public int displayWidth; + public int displayHeight; + private OpenGlCapsChecker glCapabilities; + private Timer timer = new Timer(20.0F); + public World theWorld; + public RenderGlobal renderGlobal; + public EntityPlayerSP thePlayer; + public EffectRenderer effectRenderer; + public Session session = null; + public String minecraftUri; + public Canvas mcCanvas; + public boolean appletMode = true; + public volatile boolean isGamePaused = false; + public RenderEngine renderEngine; + public FontRenderer fontRenderer; + public GuiScreen currentScreen = null; + public LoadingScreenRenderer loadingScreen = new LoadingScreenRenderer(this); + public EntityRenderer entityRenderer = new EntityRenderer(this); + private ThreadDownloadResources downloadResourcesThread; + private int ticksRan = 0; + private int leftClickCounter = 0; + private int tempDisplayWidth; + private int tempDisplayHeight; + public String objectMouseOverString = null; + public int rightClickDelayTimer = 0; + public GuiIngame ingameGUI; + public boolean skipRenderWorld = false; + public ModelBiped playerModelBiped = new ModelBiped(0.0F); + public MovingObjectPosition objectMouseOver = null; + public GameSettings gameSettings; + protected MinecraftApplet mcApplet; + public SoundManager sndManager = new SoundManager(); + public MouseHelper mouseHelper; + public File mcDataDir; + public static long[] tickTimes = new long[512]; + public static int numRecordedFrameTimes = 0; + private TextureWaterFX textureWaterFX = new TextureWaterFX(); + private TextureLavaFX textureLavaFX = new TextureLavaFX(); + private static File minecraftDir = null; + volatile boolean running = true; + public String debug = ""; + long prevFrameTime = -1L; + public boolean inGameHasFocus = false; + private int mouseTicksRan = 0; + public boolean isRaining = false; + long systemTime = System.currentTimeMillis(); + + public Minecraft(Component var1, Canvas var2, MinecraftApplet var3, int var4, int var5, boolean var6) { + this.tempDisplayWidth = var4; + this.tempDisplayHeight = var5; + this.fullscreen = var6; + this.mcApplet = var3; + new ThreadSleepForever(this, "Timer hack thread"); + this.mcCanvas = var2; + this.displayWidth = var4; + this.displayHeight = var5; + this.fullscreen = var6; + } + + public abstract void displayUnexpectedThrowable(UnexpectedThrowable var1); + + public void setServer(String var1, int 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 Infdev"); + + try { + Display.create(); + } catch (LWJGLException var6) { + var6.printStackTrace(); + + try { + Thread.sleep(1000L); + } catch (InterruptedException var5) { + } + + Display.create(); + } + + this.mcDataDir = getMinecraftDir(); + this.gameSettings = new GameSettings(this, this.mcDataDir); + this.renderEngine = new RenderEngine(this.gameSettings); + this.fontRenderer = new FontRenderer(this.gameSettings, "/default.png", this.renderEngine); + this.loadScreen(); + Keyboard.create(); + Mouse.create(); + this.mouseHelper = new MouseHelper(this.mcCanvas); + + try { + Controllers.create(); + } catch (Exception var4) { + var4.printStackTrace(); + } + + 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.glCapabilities = new OpenGlCapsChecker(); + this.sndManager.loadSoundSettings(this.gameSettings); + this.renderEngine.registerTextureFX(this.textureLavaFX); + this.renderEngine.registerTextureFX(this.textureWaterFX); + this.renderEngine.registerTextureFX(new TextureWaterFlowFX()); + this.renderEngine.registerTextureFX(new TextureLavaFlowFX()); + this.renderEngine.registerTextureFX(new TextureFlamesFX(0)); + this.renderEngine.registerTextureFX(new TextureFlamesFX(1)); + this.renderEngine.registerTextureFX(new TextureGearsFX(0)); + this.renderEngine.registerTextureFX(new TextureGearsFX(1)); + this.renderGlobal = new RenderGlobal(this, this.renderEngine); + GL11.glViewport(0, 0, this.displayWidth, this.displayHeight); + this.displayGuiScreen(new GuiMainMenu()); + 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); + this.playerController.init(); + } + + private void loadScreen() throws LWJGLException { + ScaledResolution var1 = new ScaledResolution(this.displayWidth, this.displayHeight); + int var2 = var1.getScaledWidth(); + int var3 = var1.getScaledHeight(); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT | GL11.GL_COLOR_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glOrtho(0.0D, (double)var2, (double)var3, 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.glDisable(GL11.GL_FOG); + GL11.glEnable(GL11.GL_TEXTURE_2D); + Tessellator var4 = Tessellator.instance; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.renderEngine.getTexture("/dirt.png")); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + float var5 = 32.0F; + var4.startDrawingQuads(); + var4.setColorOpaque_I(4210752); + var4.addVertexWithUV(0.0D, (double)this.displayHeight, 0.0D, 0.0D, (double)((float)this.displayHeight / var5 + 0.0F)); + var4.addVertexWithUV((double)this.displayWidth, (double)this.displayHeight, 0.0D, (double)((float)this.displayWidth / var5), (double)((float)this.displayHeight / var5 + 0.0F)); + var4.addVertexWithUV((double)this.displayWidth, 0.0D, 0.0D, (double)((float)this.displayWidth / var5), 0.0D); + var4.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, 0.0D); + var4.draw(); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + this.fontRenderer.drawStringWithShadow("Loading...", 8, this.displayHeight / 2 - 16, -1); + Display.swapBuffers(); + } + + 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(OSMap.osValues[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; + } + } + + private 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 void displayGuiScreen(GuiScreen var1) { + if(!(this.currentScreen instanceof GuiErrorScreen)) { + if(this.currentScreen != null) { + this.currentScreen.onGuiClosed(); + } + + if(var1 == null && this.theWorld == null) { + var1 = new GuiMainMenu(); + } else if(var1 == null && this.thePlayer.health <= 0) { + var1 = new GuiGameOver(); + } + + this.currentScreen = (GuiScreen)var1; + if(var1 != null) { + this.setIngameNotInFocus(); + ScaledResolution var2 = new ScaledResolution(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); + System.out.println("########## GL ERROR ##########"); + System.out.println("@ " + var1); + System.out.println(var2 + ": " + var3); + System.exit(0); + } + + } + + public void shutdownMinecraftApplet() { + if(this.mcApplet != null) { + this.mcApplet.clearApplet(); + } + + try { + if(this.downloadResourcesThread != null) { + this.downloadResourcesThread.closeMinecraft(); + } + } catch (Exception var8) { + } + + try { + System.out.println("Stopping!"); + this.changeWorld1((World)null); + + try { + GLAllocation.deleteTexturesAndDisplayLists(); + } catch (Exception var6) { + } + + this.sndManager.closeMinecraft(); + Mouse.destroy(); + Keyboard.destroy(); + } finally { + Display.destroy(); + } + + System.gc(); + } + + public void run() { + this.running = true; + + try { + this.startGame(); + } catch (Exception var10) { + var10.printStackTrace(); + this.displayUnexpectedThrowable(new UnexpectedThrowable("Failed to start game", var10)); + return; + } + + try { + long var1 = System.currentTimeMillis(); + int var3 = 0; + + while(this.running && (this.mcApplet == null || this.mcApplet.isActive())) { + AxisAlignedBB.clearBoundingBoxPool(); + Vec3D.initialize(); + if(this.mcCanvas == null && Display.isCloseRequested()) { + this.shutdown(); + } + + if(this.isGamePaused) { + float var4 = this.timer.renderPartialTicks; + this.timer.updateTimer(); + this.timer.renderPartialTicks = var4; + } else { + this.timer.updateTimer(); + } + + for(int var14 = 0; var14 < this.timer.elapsedTicks; ++var14) { + ++this.ticksRan; + this.runTick(); + } + + this.checkGLError("Pre render"); + if(this.isGamePaused) { + this.timer.renderPartialTicks = 1.0F; + } + + this.sndManager.setListener(this.thePlayer, this.timer.renderPartialTicks); + GL11.glEnable(GL11.GL_TEXTURE_2D); + if(this.theWorld != null) { + while(this.theWorld.updatingLighting()) { + } + } + + if(!this.skipRenderWorld) { + this.playerController.setPartialTime(this.timer.renderPartialTicks); + this.entityRenderer.updateCameraAndRender(this.timer.renderPartialTicks); + } + + if(!Display.isActive() && this.fullscreen) { + this.toggleFullscreen(); + } + + if(Keyboard.isKeyDown(Keyboard.KEY_F6)) { + this.displayDebugInfo(); + } else { + this.prevFrameTime = System.nanoTime(); + } + + Thread.yield(); + Display.update(); + 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); + } + + if(this.gameSettings.limitFramerate) { + Thread.sleep(5L); + } + + this.checkGLError("Post render"); + ++var3; + + for(this.isGamePaused = !this.isMultiplayerWorld() && this.currentScreen != null && this.currentScreen.doesGuiPauseGame(); System.currentTimeMillis() >= var1 + 1000L; var3 = 0) { + this.debug = var3 + " fps, " + WorldRenderer.chunksUpdated + " chunk updates"; + WorldRenderer.chunksUpdated = 0; + var1 += 1000L; + } + } + } catch (MinecraftError var11) { + } catch (Exception var12) { + var12.printStackTrace(); + this.displayUnexpectedThrowable(new UnexpectedThrowable("Unexpected error", var12)); + } finally { + this.shutdownMinecraftApplet(); + } + + } + + private void displayDebugInfo() { + if(this.prevFrameTime == -1L) { + this.prevFrameTime = System.nanoTime(); + } + + long var1 = System.nanoTime(); + tickTimes[numRecordedFrameTimes++ & tickTimes.length - 1] = var1 - this.prevFrameTime; + this.prevFrameTime = var1; + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + 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 var3 = Tessellator.instance; + var3.startDrawing(7); + var3.setColorOpaque_I(538968064); + var3.addVertex(0.0D, (double)(this.displayHeight - 100), 0.0D); + var3.addVertex(0.0D, (double)this.displayHeight, 0.0D); + var3.addVertex((double)tickTimes.length, (double)this.displayHeight, 0.0D); + var3.addVertex((double)tickTimes.length, (double)(this.displayHeight - 100), 0.0D); + var3.draw(); + long var4 = 0L; + + int var6; + for(var6 = 0; var6 < tickTimes.length; ++var6) { + var4 += tickTimes[var6]; + } + + var6 = (int)(var4 / 200000L / (long)tickTimes.length); + var3.startDrawing(7); + var3.setColorOpaque_I(541065216); + var3.addVertex(0.0D, (double)(this.displayHeight - var6), 0.0D); + var3.addVertex(0.0D, (double)this.displayHeight, 0.0D); + var3.addVertex((double)tickTimes.length, (double)this.displayHeight, 0.0D); + var3.addVertex((double)tickTimes.length, (double)(this.displayHeight - var6), 0.0D); + var3.draw(); + var3.startDrawing(1); + + for(int var7 = 0; var7 < tickTimes.length; ++var7) { + int var8 = (var7 - numRecordedFrameTimes & tickTimes.length - 1) * 255 / tickTimes.length; + int var9 = var8 * var8 / 255; + var9 = var9 * var9 / 255; + int var10 = var9 * var9 / 255; + var10 = var10 * var10 / 255; + var3.setColorOpaque_I(-16777216 + var10 + var9 * 256 + var8 * 65536); + long var11 = tickTimes[var7] / 200000L; + var3.addVertex((double)((float)var7 + 0.5F), (double)((float)((long)this.displayHeight - var11) + 0.5F), 0.0D); + var3.addVertex((double)((float)var7 + 0.5F), (double)((float)this.displayHeight + 0.5F), 0.0D); + } + + var3.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + 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.mouseTicksRan = this.ticksRan + 10000; + } + } + } + + public void setIngameNotInFocus() { + if(this.inGameHasFocus) { + if(this.thePlayer != null) { + this.thePlayer.resetPlayerKeyState(); + } + + this.inGameHasFocus = false; + this.mouseHelper.ungrabMouseCursor(); + } + } + + public void displayInGameMenu() { + if(this.currentScreen == null) { + this.displayGuiScreen(new GuiIngameMenu()); + } + } + + private void sendClickBlockToController(int var1, boolean var2) { + if(!this.playerController.isInTestMode) { + if(var1 != 0 || this.leftClickCounter <= 0) { + if(var2 && this.objectMouseOver != null && this.objectMouseOver.typeOfHit == 0 && var1 == 0) { + int var3 = this.objectMouseOver.blockX; + int var4 = this.objectMouseOver.blockY; + int var5 = this.objectMouseOver.blockZ; + this.playerController.sendBlockRemoving(var3, var4, var5, this.objectMouseOver.sideHit); + this.effectRenderer.addBlockHitEffects(var3, var4, var5, this.objectMouseOver.sideHit); + } else { + this.playerController.resetBlockRemoving(); + } + + } + } + } + + private void clickMouse(int var1) { + if(var1 != 0 || this.leftClickCounter <= 0) { + if(var1 == 0) { + this.entityRenderer.itemRenderer.swing(); + } + + int var3; + if(this.objectMouseOver == null) { + if(var1 == 0 && !(this.playerController instanceof PlayerControllerCreative)) { + this.leftClickCounter = 10; + } + } else if(this.objectMouseOver.typeOfHit == 1) { + if(var1 == 0) { + this.thePlayer.attackEntity(this.objectMouseOver.entityHit); + } + + if(var1 == 1) { + this.thePlayer.interactWithEntity(this.objectMouseOver.entityHit); + } + } else if(this.objectMouseOver.typeOfHit == 0) { + int var2 = this.objectMouseOver.blockX; + var3 = this.objectMouseOver.blockY; + int var4 = this.objectMouseOver.blockZ; + int var5 = this.objectMouseOver.sideHit; + Block var6 = Block.blocksList[this.theWorld.getBlockId(var2, var3, var4)]; + if(var1 == 0) { + this.theWorld.extinguishFire(var2, var3, var4, this.objectMouseOver.sideHit); + if(var6 != Block.bedrock || this.thePlayer.unusedMiningCooldown >= 100) { + this.playerController.clickBlock(var2, var3, var4); + } + } else { + ItemStack var7 = this.thePlayer.inventory.getCurrentItem(); + int var8 = this.theWorld.getBlockId(var2, var3, var4); + if(var8 > 0 && Block.blocksList[var8].blockActivated(this.theWorld, var2, var3, var4, this.thePlayer)) { + return; + } + + if(var7 == null) { + return; + } + + int var9 = var7.stackSize; + if(var7.useItem(this.thePlayer, this.theWorld, var2, var3, var4, var5)) { + this.entityRenderer.itemRenderer.swing(); + } + + if(var7.stackSize == 0) { + this.thePlayer.inventory.mainInventory[this.thePlayer.inventory.currentItem] = null; + } else if(var7.stackSize != var9) { + this.entityRenderer.itemRenderer.resetEquippedProgress(); + } + } + } + + if(var1 == 1) { + ItemStack var10 = this.thePlayer.inventory.getCurrentItem(); + if(var10 != null) { + var3 = var10.stackSize; + ItemStack var11 = var10.useItemRightClick(this.theWorld, this.thePlayer); + if(var11 != var10 || var11 != null && var11.stackSize != var3) { + this.thePlayer.inventory.mainInventory[this.thePlayer.inventory.currentItem] = var11; + this.entityRenderer.itemRenderer.resetEquippedProgress2(); + if(var11.stackSize == 0) { + this.thePlayer.inventory.mainInventory[this.thePlayer.inventory.currentItem] = null; + } + } + } + } + + } + } + + public void toggleFullscreen() { + try { + this.fullscreen = !this.fullscreen; + System.out.println("Toggle 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; + } + + Display.setDisplayMode(new DisplayMode(this.tempDisplayWidth, this.tempDisplayHeight)); + } + + this.setIngameNotInFocus(); + Display.setFullscreen(this.fullscreen); + Display.update(); + Thread.sleep(1000L); + if(this.fullscreen) { + this.setIngameFocus(); + } + + if(this.currentScreen != null) { + this.setIngameNotInFocus(); + this.resize(this.displayWidth, this.displayHeight); + } + + System.out.println("Size: " + this.displayWidth + ", " + this.displayHeight); + } catch (Exception var2) { + var2.printStackTrace(); + } + + } + + private void resize(int var1, int var2) { + if(var1 <= 0) { + var1 = 1; + } + + if(var2 <= 0) { + var2 = 1; + } + + this.displayWidth = var1; + this.displayHeight = var2; + if(this.currentScreen != null) { + ScaledResolution var3 = new ScaledResolution(var1, var2); + int var4 = var3.getScaledWidth(); + int var5 = var3.getScaledHeight(); + this.currentScreen.setWorldAndResolution(this, var4, var5); + } + + } + + private void clickMiddleMouseButton() { + if(this.objectMouseOver != null) { + int var1 = this.theWorld.getBlockId(this.objectMouseOver.blockX, this.objectMouseOver.blockY, this.objectMouseOver.blockZ); + if(var1 == Block.grass.blockID) { + var1 = Block.dirt.blockID; + } + + if(var1 == Block.stairDouble.blockID) { + var1 = Block.stairSingle.blockID; + } + + if(var1 == Block.bedrock.blockID) { + var1 = Block.stone.blockID; + } + + this.thePlayer.inventory.setCurrentItem(var1, this.playerController instanceof PlayerControllerCreative); + } + + } + + public void runTick() { + this.ingameGUI.updateTick(); + if(!this.isGamePaused && this.theWorld != null) { + this.playerController.onUpdate(); + } + + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.renderEngine.getTexture("/terrain.png")); + if(!this.isGamePaused) { + this.renderEngine.updateDynamicTextures(); + } + + if(this.currentScreen == null && this.thePlayer != null && this.thePlayer.health <= 0) { + this.displayGuiScreen((GuiScreen)null); + } + + if(this.currentScreen == null || this.currentScreen.allowUserInput) { + label226: + while(true) { + while(true) { + while(true) { + long var1; + do { + if(!Mouse.next()) { + if(this.leftClickCounter > 0) { + --this.leftClickCounter; + } + + while(true) { + while(true) { + do { + if(!Keyboard.next()) { + if(this.currentScreen == null) { + if(Mouse.isButtonDown(0) && (float)(this.ticksRan - this.mouseTicksRan) >= this.timer.ticksPerSecond / 4.0F && this.inGameHasFocus) { + this.clickMouse(0); + this.mouseTicksRan = this.ticksRan; + } + + if(Mouse.isButtonDown(1) && (float)(this.ticksRan - this.mouseTicksRan) >= this.timer.ticksPerSecond / 4.0F && this.inGameHasFocus) { + this.clickMouse(1); + this.mouseTicksRan = this.ticksRan; + } + } + + this.sendClickBlockToController(0, this.currentScreen == null && Mouse.isButtonDown(0) && this.inGameHasFocus); + break label226; + } + + this.thePlayer.handleKeyPress(Keyboard.getEventKey(), Keyboard.getEventKeyState()); + } 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(this.playerController instanceof PlayerControllerCreative) { + if(Keyboard.getEventKey() == this.gameSettings.keyBindLoad.keyCode) { + } + + if(Keyboard.getEventKey() == this.gameSettings.keyBindSave.keyCode) { + } + } + + if(Keyboard.getEventKey() == Keyboard.KEY_F5) { + this.gameSettings.thirdPersonView = !this.gameSettings.thirdPersonView; + this.isRaining = !this.isRaining; + } + + if(Keyboard.getEventKey() == this.gameSettings.keyBindInventory.keyCode) { + this.displayGuiScreen(new GuiInventory(this.thePlayer.inventory)); + } + + if(Keyboard.getEventKey() == this.gameSettings.keyBindDrop.keyCode) { + this.thePlayer.dropPlayerItemWithRandomChoice(this.thePlayer.inventory.decrStackSize(this.thePlayer.inventory.currentItem, 1), false); + } + } + + for(int var4 = 0; var4 < 9; ++var4) { + if(Keyboard.getEventKey() == Keyboard.KEY_1 + var4) { + this.thePlayer.inventory.currentItem = var4; + } + } + + if(Keyboard.getEventKey() == this.gameSettings.keyBindToggleFog.keyCode) { + this.gameSettings.setOptionFloatValue(4, !Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) && !Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) ? 1 : -1); + } + } + } + } + } + + var1 = System.currentTimeMillis() - this.systemTime; + } while(var1 > 200L); + + int var3 = Mouse.getEventDWheel(); + if(var3 != 0) { + this.thePlayer.inventory.changeCurrentItem(var3); + } + + if(this.currentScreen == null) { + if(!this.inGameHasFocus && Mouse.getEventButtonState()) { + this.setIngameFocus(); + } else { + if(Mouse.getEventButton() == 0 && Mouse.getEventButtonState()) { + this.clickMouse(0); + this.mouseTicksRan = this.ticksRan; + } + + if(Mouse.getEventButton() == 1 && Mouse.getEventButtonState()) { + this.clickMouse(1); + this.mouseTicksRan = this.ticksRan; + } + + if(Mouse.getEventButton() == 2 && Mouse.getEventButtonState()) { + this.clickMiddleMouseButton(); + } + } + } else if(this.currentScreen != null) { + this.currentScreen.handleMouseInput(); + } + } + } + } + } + + if(this.currentScreen != null) { + this.mouseTicksRan = this.ticksRan + 10000; + } + + if(this.currentScreen != null) { + this.currentScreen.handleInput(); + if(this.currentScreen != null) { + this.currentScreen.updateScreen(); + } + } + + if(this.theWorld != null) { + this.theWorld.difficultySetting = this.gameSettings.difficulty; + if(!this.isGamePaused) { + this.entityRenderer.updateRenderer(); + } + + if(!this.isGamePaused) { + this.renderGlobal.updateClouds(); + } + + if(!this.isGamePaused) { + this.theWorld.updateEntities(); + } + + if(!this.isGamePaused && !this.isMultiplayerWorld()) { + this.theWorld.tick(); + } + + if(!this.isGamePaused) { + this.theWorld.randomDisplayUpdates(MathHelper.floor_double(this.thePlayer.posX), MathHelper.floor_double(this.thePlayer.posY), MathHelper.floor_double(this.thePlayer.posZ)); + } + + if(!this.isGamePaused) { + this.effectRenderer.updateEffects(); + } + } + + this.systemTime = System.currentTimeMillis(); + } + + public boolean isMultiplayerWorld() { + return false; + } + + public void startWorld(String var1) { + this.changeWorld1((World)null); + System.gc(); + World var2 = new World(new File(getMinecraftDir(), "saves"), var1); + if(var2.isNewWorld) { + this.changeWorld2(var2, "Generating level"); + } else { + this.changeWorld2(var2, "Loading level"); + } + + } + + public void changeWorld1(World var1) { + this.changeWorld2(var1, ""); + } + + public void changeWorld2(World var1, String var2) { + if(this.theWorld != null) { + this.theWorld.saveWorldIndirectly(this.loadingScreen); + } + + this.theWorld = var1; + if(var1 != null) { + this.playerController.onWorldChange(var1); + var1.fontRenderer = this.fontRenderer; + if(!this.isMultiplayerWorld()) { + this.thePlayer = (EntityPlayerSP)var1.createDebugPlayer(EntityPlayerSP.class); + var1.playerEntity = this.thePlayer; + } else if(this.thePlayer != null) { + this.thePlayer.preparePlayerToSpawn(); + if(var1 != null) { + var1.playerEntity = this.thePlayer; + var1.spawnEntityInWorld(this.thePlayer); + } + } + + this.preloadWorld(var2); + if(this.thePlayer == null) { + this.thePlayer = new EntityPlayerSP(this, var1, this.session); + this.thePlayer.preparePlayerToSpawn(); + this.playerController.flipPlayer(this.thePlayer); + } + + this.thePlayer.movementInput = new MovementInputFromOptions(this.gameSettings); + if(this.renderGlobal != null) { + this.renderGlobal.changeWorld(var1); + } + + if(this.effectRenderer != null) { + this.effectRenderer.clearEffects(var1); + } + + this.playerController.onRespawn(this.thePlayer); + var1.playerEntity = this.thePlayer; + var1.spawnPlayerWithLoadedChunks(); + if(var1.isNewWorld) { + var1.saveWorldIndirectly(this.loadingScreen); + } + } + + System.gc(); + this.systemTime = 0L; + } + + private void preloadWorld(String var1) { + this.loadingScreen.printText(var1); + this.loadingScreen.displayLoadingString("Building terrain"); + short var2 = 128; + int var3 = 0; + int var4 = var2 * 2 / 16 + 1; + var4 *= var4; + + int var5; + for(var5 = -var2; var5 <= var2; var5 += 16) { + int var6 = this.theWorld.spawnX; + int var7 = this.theWorld.spawnZ; + if(this.theWorld.playerEntity != null) { + var6 = (int)this.theWorld.playerEntity.posX; + var7 = (int)this.theWorld.playerEntity.posZ; + } + + for(int var8 = -var2; var8 <= var2; var8 += 16) { + this.loadingScreen.setLoadingProgress(var3++ * 100 / var4); + this.theWorld.getBlockId(var6 + var5, 64, var7 + var8); + + while(this.theWorld.updatingLighting()) { + } + } + } + + this.loadingScreen.displayLoadingString("Simulating world for a bit"); + short var9 = 2000; + BlockSand.fallInstantly = true; + + for(var5 = 0; var5 < var9; ++var5) { + this.theWorld.tickUpdates(true); + } + + this.theWorld.dropOldChunks(); + BlockSand.fallInstantly = false; + } + + 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("sound")) { + this.sndManager.addSound(var1, var2); + } else if(var4.equalsIgnoreCase("newsound")) { + this.sndManager.addSound(var1, var2); + } else if(var4.equalsIgnoreCase("music")) { + this.sndManager.addMusic(var1, var2); + } + + } + + public OpenGlCapsChecker getOpenGlCapsChecker() { + return this.glCapabilities; + } + + public String debugInfoRenders() { + return this.renderGlobal.getDebugInfoRenders(); + } + + public String getEntityDebug() { + return this.renderGlobal.getDebugInfoEntities(); + } + + public String debugInfoEntities() { + return "P: " + this.effectRenderer.getStatistics() + ". T: " + this.theWorld.getDebugLoadedEntities(); + } + + public void respawn() { + if(this.thePlayer != null && this.theWorld != null) { + this.theWorld.setEntityDead(this.thePlayer); + } + + this.theWorld.setSpawnLocation(); + this.thePlayer = new EntityPlayerSP(this, this.theWorld, this.session); + this.thePlayer.preparePlayerToSpawn(); + this.playerController.flipPlayer(this.thePlayer); + if(this.theWorld != null) { + this.theWorld.playerEntity = this.thePlayer; + this.theWorld.spawnPlayerWithLoadedChunks(); + } + + this.thePlayer.movementInput = new MovementInputFromOptions(this.gameSettings); + this.playerController.onRespawn(this.thePlayer); + this.preloadWorld("Respawning"); + } +} diff --git a/source/net/minecraft/src/MinecraftAppletImpl.java b/source/net/minecraft/src/MinecraftAppletImpl.java new file mode 100644 index 0000000..647fd9b --- /dev/null +++ b/source/net/minecraft/src/MinecraftAppletImpl.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.awt.Canvas; +import java.awt.Component; +import net.minecraft.client.MinecraftApplet; + +public class MinecraftAppletImpl extends Minecraft { + final MinecraftApplet mainFrame; + + public MinecraftAppletImpl(MinecraftApplet var1, Component var2, Canvas var3, MinecraftApplet var4, int var5, int var6, boolean var7) { + super(var2, var3, var4, var5, var6, var7); + this.mainFrame = var1; + } + + public void displayUnexpectedThrowable(UnexpectedThrowable var1) { + this.mainFrame.removeAll(); + this.mainFrame.add(new PanelCrashReport(var1), "Center"); + this.mainFrame.validate(); + } +} diff --git a/source/net/minecraft/src/MinecraftError.java b/source/net/minecraft/src/MinecraftError.java new file mode 100644 index 0000000..9a75dec --- /dev/null +++ b/source/net/minecraft/src/MinecraftError.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public class MinecraftError extends Error { +} diff --git a/source/net/minecraft/src/ModelBase.java b/source/net/minecraft/src/ModelBase.java new file mode 100644 index 0000000..06d3a6f --- /dev/null +++ b/source/net/minecraft/src/ModelBase.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public abstract class ModelBase { + public float swingProgress; + + public void render(float var1, float var2, float var3, float var4, float var5, float var6) { + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { + } +} diff --git a/source/net/minecraft/src/ModelBiped.java b/source/net/minecraft/src/ModelBiped.java new file mode 100644 index 0000000..5a2b40b --- /dev/null +++ b/source/net/minecraft/src/ModelBiped.java @@ -0,0 +1,73 @@ +package net.minecraft.src; + +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 ModelBiped() { + this(0.0F); + } + + public ModelBiped(float var1) { + this(var1, 0.0F); + } + + public ModelBiped(float var1, float var2) { + this.bipedHead = new ModelRenderer(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(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(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(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(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(0, 16); + this.bipedRightLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, var1); + this.bipedRightLeg.setRotationPoint(-2.0F, 12.0F + var2, 0.0F); + this.bipedLeftLeg = new ModelRenderer(0, 16); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, var1); + this.bipedLeftLeg.setRotationPoint(2.0F, 12.0F + var2, 0.0F); + } + + public void render(float var1, float var2, float var3, float var4, float var5, float var6) { + this.setRotationAngles(var1, var2, var3, var4, var5, var6); + this.bipedHead.render(var6); + this.bipedBody.render(var6); + this.bipedRightArm.render(var6); + this.bipedLeftArm.render(var6); + this.bipedRightLeg.render(var6); + this.bipedLeftLeg.render(var6); + this.bipedHeadwear.render(var6); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { + 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; + this.bipedRightArm.rotateAngleZ = (MathHelper.cos(var1 * 0.2312F) + 1.0F) * 1.0F * var2; + this.bipedLeftArm.rotateAngleX = MathHelper.cos(var1 * 0.6662F) * 2.0F * var2; + this.bipedLeftArm.rotateAngleZ = (MathHelper.cos(var1 * 0.2812F) - 1.0F) * 1.0F * var2; + 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.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/source/net/minecraft/src/ModelCreeper.java b/source/net/minecraft/src/ModelCreeper.java new file mode 100644 index 0000000..eac89c4 --- /dev/null +++ b/source/net/minecraft/src/ModelCreeper.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +public class ModelCreeper extends ModelBase { + public ModelRenderer head; + public ModelRenderer headwear; + public ModelRenderer body; + public ModelRenderer leg1; + public ModelRenderer leg2; + public ModelRenderer leg3; + public ModelRenderer leg4; + + public ModelCreeper() { + float var1 = 0.0F; + byte var2 = 4; + this.head = new ModelRenderer(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.headwear = new ModelRenderer(32, 0); + this.headwear.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, var1 + 0.5F); + this.headwear.setRotationPoint(0.0F, (float)var2, 0.0F); + this.body = new ModelRenderer(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(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(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(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(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(float var1, float var2, float var3, float var4, float var5, float var6) { + this.setRotationAngles(var1, var2, var3, var4, var5, var6); + this.head.render(var6); + this.body.render(var6); + this.leg1.render(var6); + this.leg2.render(var6); + this.leg3.render(var6); + this.leg4.render(var6); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { + 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/source/net/minecraft/src/ModelMinecart.java b/source/net/minecraft/src/ModelMinecart.java new file mode 100644 index 0000000..68425ee --- /dev/null +++ b/source/net/minecraft/src/ModelMinecart.java @@ -0,0 +1,47 @@ +package net.minecraft.src; + +public class ModelMinecart extends ModelBase { + public ModelRenderer[] sideModels = new ModelRenderer[7]; + + public ModelMinecart() { + this.sideModels[0] = new ModelRenderer(0, 10); + this.sideModels[1] = new ModelRenderer(0, 0); + this.sideModels[2] = new ModelRenderer(0, 0); + this.sideModels[3] = new ModelRenderer(0, 0); + this.sideModels[4] = new ModelRenderer(0, 0); + this.sideModels[5] = new ModelRenderer(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)(0 + 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)(0 + 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)(0 + 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)(0 + 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)(0 + 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)(0 + 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(float var1, float var2, float var3, float var4, float var5, float var6) { + this.sideModels[5].rotationPointY = 4.0F - var3; + + for(int var7 = 0; var7 < 6; ++var7) { + this.sideModels[var7].render(var6); + } + + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { + } +} diff --git a/source/net/minecraft/src/ModelPig.java b/source/net/minecraft/src/ModelPig.java new file mode 100644 index 0000000..c300bd4 --- /dev/null +++ b/source/net/minecraft/src/ModelPig.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class ModelPig extends ModelQuadruped { + public ModelPig() { + super(6, 0.0F); + } + + public ModelPig(float var1) { + super(6, var1); + } +} diff --git a/source/net/minecraft/src/ModelQuadruped.java b/source/net/minecraft/src/ModelQuadruped.java new file mode 100644 index 0000000..d37c549 --- /dev/null +++ b/source/net/minecraft/src/ModelQuadruped.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +public class ModelQuadruped extends ModelBase { + public ModelRenderer head = new ModelRenderer(0, 0); + public ModelRenderer body; + public ModelRenderer leg1; + public ModelRenderer leg2; + public ModelRenderer leg3; + public ModelRenderer leg4; + + 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(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(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(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(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(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(float var1, float var2, float var3, float var4, float var5, float var6) { + this.setRotationAngles(var1, var2, var3, var4, var5, var6); + this.head.render(var6); + this.body.render(var6); + this.leg1.render(var6); + this.leg2.render(var6); + this.leg3.render(var6); + this.leg4.render(var6); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { + 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/source/net/minecraft/src/ModelRenderer.java b/source/net/minecraft/src/ModelRenderer.java new file mode 100644 index 0000000..20b1eb0 --- /dev/null +++ b/source/net/minecraft/src/ModelRenderer.java @@ -0,0 +1,131 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class ModelRenderer { + private PositionTextureVertex[] corners; + private TexturedQuad[] faces; + 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 = false; + private int displayList = 0; + public boolean mirror = false; + public boolean showModel = true; + public boolean isHidden = false; + + public ModelRenderer(int var1, int var2) { + this.textureOffsetX = var1; + this.textureOffsetY = var2; + } + + public void addBox(float var1, float var2, float var3, int var4, int var5, int var6, float var7) { + this.corners = new PositionTextureVertex[8]; + this.faces = new TexturedQuad[6]; + float var8 = var1 + (float)var4; + float var9 = var2 + (float)var5; + float var10 = var3 + (float)var6; + var1 -= var7; + var2 -= var7; + var3 -= var7; + var8 += var7; + var9 += var7; + var10 += var7; + if(this.mirror) { + float var11 = var8; + var8 = var1; + var1 = var11; + } + + PositionTextureVertex var20 = new PositionTextureVertex(var1, var2, var3, 0.0F, 0.0F); + PositionTextureVertex var12 = new PositionTextureVertex(var8, var2, var3, 0.0F, 8.0F); + PositionTextureVertex var13 = new PositionTextureVertex(var8, var9, var3, 8.0F, 8.0F); + PositionTextureVertex var14 = new PositionTextureVertex(var1, var9, var3, 8.0F, 0.0F); + PositionTextureVertex var15 = new PositionTextureVertex(var1, var2, var10, 0.0F, 0.0F); + PositionTextureVertex var16 = new PositionTextureVertex(var8, var2, var10, 0.0F, 8.0F); + PositionTextureVertex var17 = new PositionTextureVertex(var8, var9, var10, 8.0F, 8.0F); + PositionTextureVertex var18 = new PositionTextureVertex(var1, var9, var10, 8.0F, 0.0F); + this.corners[0] = var20; + this.corners[1] = var12; + this.corners[2] = var13; + this.corners[3] = var14; + this.corners[4] = var15; + this.corners[5] = var16; + this.corners[6] = var17; + this.corners[7] = var18; + this.faces[0] = new TexturedQuad(new PositionTextureVertex[]{var16, var12, var13, var17}, this.textureOffsetX + var6 + var4, this.textureOffsetY + var6, this.textureOffsetX + var6 + var4 + var6, this.textureOffsetY + var6 + var5); + this.faces[1] = new TexturedQuad(new PositionTextureVertex[]{var20, var15, var18, var14}, this.textureOffsetX + 0, this.textureOffsetY + var6, this.textureOffsetX + var6, this.textureOffsetY + var6 + var5); + this.faces[2] = new TexturedQuad(new PositionTextureVertex[]{var16, var15, var20, var12}, this.textureOffsetX + var6, this.textureOffsetY + 0, this.textureOffsetX + var6 + var4, this.textureOffsetY + var6); + this.faces[3] = new TexturedQuad(new PositionTextureVertex[]{var13, var14, var18, var17}, this.textureOffsetX + var6 + var4, this.textureOffsetY + 0, this.textureOffsetX + var6 + var4 + var4, this.textureOffsetY + var6); + this.faces[4] = new TexturedQuad(new PositionTextureVertex[]{var12, var20, var14, var13}, this.textureOffsetX + var6, this.textureOffsetY + var6, this.textureOffsetX + var6 + var4, this.textureOffsetY + var6 + var5); + this.faces[5] = new TexturedQuad(new PositionTextureVertex[]{var15, var16, var17, var18}, this.textureOffsetX + var6 + var4 + var6, this.textureOffsetY + var6, this.textureOffsetX + var6 + var4 + var6 + var4, this.textureOffsetY + var6 + var5); + if(this.mirror) { + for(int var19 = 0; var19 < this.faces.length; ++var19) { + this.faces[var19].flipFace(); + } + } + + } + + 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); + } + + 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); + } else { + GL11.glTranslatef(this.rotationPointX * var1, this.rotationPointY * var1, this.rotationPointZ * var1); + GL11.glCallList(this.displayList); + 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); + GL11.glPopMatrix(); + } + + } + } + } + + 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.faces.length; ++var3) { + this.faces[var3].draw(var2, var1); + } + + GL11.glEndList(); + this.compiled = true; + } +} diff --git a/source/net/minecraft/src/ModelSheep.java b/source/net/minecraft/src/ModelSheep.java new file mode 100644 index 0000000..df1c1c4 --- /dev/null +++ b/source/net/minecraft/src/ModelSheep.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class ModelSheep extends ModelQuadruped { + public ModelSheep() { + super(12, 0.0F); + this.head = new ModelRenderer(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(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); + } +} diff --git a/source/net/minecraft/src/ModelSheepFur.java b/source/net/minecraft/src/ModelSheepFur.java new file mode 100644 index 0000000..55bc761 --- /dev/null +++ b/source/net/minecraft/src/ModelSheepFur.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class ModelSheepFur extends ModelQuadruped { + public ModelSheepFur() { + super(12, 0.0F); + this.head = new ModelRenderer(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(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(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(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(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(0, 16); + this.leg4.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, var1); + this.leg4.setRotationPoint(3.0F, 12.0F, -5.0F); + } +} diff --git a/source/net/minecraft/src/ModelSkeleton.java b/source/net/minecraft/src/ModelSkeleton.java new file mode 100644 index 0000000..e9447b8 --- /dev/null +++ b/source/net/minecraft/src/ModelSkeleton.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +public class ModelSkeleton extends ModelZombie { + public ModelSkeleton() { + float var1 = 0.0F; + this.bipedRightArm = new ModelRenderer(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(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(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(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); + } +} diff --git a/source/net/minecraft/src/ModelSpider.java b/source/net/minecraft/src/ModelSpider.java new file mode 100644 index 0000000..ee7e099 --- /dev/null +++ b/source/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(32, 4); + this.spiderHead.addBox(-4.0F, -4.0F, -8.0F, 8, 8, 8, var1); + this.spiderHead.setRotationPoint(0.0F, (float)(0 + var2), -3.0F); + this.spiderNeck = new ModelRenderer(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(0, 12); + this.spiderBody.addBox(-5.0F, -4.0F, -6.0F, 10, 8, 12, var1); + this.spiderBody.setRotationPoint(0.0F, (float)(0 + var2), 9.0F); + this.spiderLeg1 = new ModelRenderer(18, 0); + this.spiderLeg1.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg1.setRotationPoint(-4.0F, (float)(0 + var2), 2.0F); + this.spiderLeg2 = new ModelRenderer(18, 0); + this.spiderLeg2.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg2.setRotationPoint(4.0F, (float)(0 + var2), 2.0F); + this.spiderLeg3 = new ModelRenderer(18, 0); + this.spiderLeg3.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg3.setRotationPoint(-4.0F, (float)(0 + var2), 1.0F); + this.spiderLeg4 = new ModelRenderer(18, 0); + this.spiderLeg4.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg4.setRotationPoint(4.0F, (float)(0 + var2), 1.0F); + this.spiderLeg5 = new ModelRenderer(18, 0); + this.spiderLeg5.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg5.setRotationPoint(-4.0F, (float)(0 + var2), 0.0F); + this.spiderLeg6 = new ModelRenderer(18, 0); + this.spiderLeg6.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg6.setRotationPoint(4.0F, (float)(0 + var2), 0.0F); + this.spiderLeg7 = new ModelRenderer(18, 0); + this.spiderLeg7.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg7.setRotationPoint(-4.0F, (float)(0 + var2), -1.0F); + this.spiderLeg8 = new ModelRenderer(18, 0); + this.spiderLeg8.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg8.setRotationPoint(4.0F, (float)(0 + var2), -1.0F); + } + + public void render(float var1, float var2, float var3, float var4, float var5, float var6) { + this.setRotationAngles(var1, var2, var3, var4, var5, var6); + this.spiderHead.render(var6); + this.spiderNeck.render(var6); + this.spiderBody.render(var6); + this.spiderLeg1.render(var6); + this.spiderLeg2.render(var6); + this.spiderLeg3.render(var6); + this.spiderLeg4.render(var6); + this.spiderLeg5.render(var6); + this.spiderLeg6.render(var6); + this.spiderLeg7.render(var6); + this.spiderLeg8.render(var6); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { + this.spiderHead.rotateAngleY = var4 / (180.0F / (float)Math.PI); + this.spiderHead.rotateAngleX = var5 / (180.0F / (float)Math.PI); + float var7 = (float)Math.PI * 0.25F; + this.spiderLeg1.rotateAngleZ = -var7; + this.spiderLeg2.rotateAngleZ = var7; + this.spiderLeg3.rotateAngleZ = -var7 * 0.74F; + this.spiderLeg4.rotateAngleZ = var7 * 0.74F; + this.spiderLeg5.rotateAngleZ = -var7 * 0.74F; + this.spiderLeg6.rotateAngleZ = var7 * 0.74F; + this.spiderLeg7.rotateAngleZ = -var7; + this.spiderLeg8.rotateAngleZ = var7; + float var8 = -0.0F; + float var9 = (float)Math.PI * 0.125F; + this.spiderLeg1.rotateAngleY = var9 * 2.0F + var8; + this.spiderLeg2.rotateAngleY = -var9 * 2.0F - var8; + this.spiderLeg3.rotateAngleY = var9 * 1.0F + var8; + this.spiderLeg4.rotateAngleY = -var9 * 1.0F - var8; + this.spiderLeg5.rotateAngleY = -var9 * 1.0F + var8; + this.spiderLeg6.rotateAngleY = var9 * 1.0F - var8; + this.spiderLeg7.rotateAngleY = -var9 * 2.0F + var8; + this.spiderLeg8.rotateAngleY = var9 * 2.0F - var8; + float var10 = -(MathHelper.cos(var1 * 0.6662F * 2.0F + 0.0F) * 0.4F) * var2; + float var11 = -(MathHelper.cos(var1 * 0.6662F * 2.0F + (float)Math.PI) * 0.4F) * var2; + float var12 = -(MathHelper.cos(var1 * 0.6662F * 2.0F + (float)Math.PI * 0.5F) * 0.4F) * var2; + float var13 = -(MathHelper.cos(var1 * 0.6662F * 2.0F + (float)Math.PI * 3.0F / 2.0F) * 0.4F) * var2; + float var14 = Math.abs(MathHelper.sin(var1 * 0.6662F + 0.0F) * 0.4F) * var2; + float var15 = Math.abs(MathHelper.sin(var1 * 0.6662F + (float)Math.PI) * 0.4F) * var2; + float var16 = Math.abs(MathHelper.sin(var1 * 0.6662F + (float)Math.PI * 0.5F) * 0.4F) * var2; + float var17 = Math.abs(MathHelper.sin(var1 * 0.6662F + (float)Math.PI * 3.0F / 2.0F) * 0.4F) * var2; + this.spiderLeg1.rotateAngleY += var10; + this.spiderLeg2.rotateAngleY += -var10; + this.spiderLeg3.rotateAngleY += var11; + this.spiderLeg4.rotateAngleY += -var11; + this.spiderLeg5.rotateAngleY += var12; + this.spiderLeg6.rotateAngleY += -var12; + this.spiderLeg7.rotateAngleY += var13; + this.spiderLeg8.rotateAngleY += -var13; + this.spiderLeg1.rotateAngleZ += var14; + this.spiderLeg2.rotateAngleZ += -var14; + this.spiderLeg3.rotateAngleZ += var15; + this.spiderLeg4.rotateAngleZ += -var15; + this.spiderLeg5.rotateAngleZ += var16; + this.spiderLeg6.rotateAngleZ += -var16; + this.spiderLeg7.rotateAngleZ += var17; + this.spiderLeg8.rotateAngleZ += -var17; + } +} diff --git a/source/net/minecraft/src/ModelZombie.java b/source/net/minecraft/src/ModelZombie.java new file mode 100644 index 0000000..b0e93e1 --- /dev/null +++ b/source/net/minecraft/src/ModelZombie.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +public class ModelZombie extends ModelBiped { + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { + super.setRotationAngles(var1, var2, var3, var4, var5, var6); + float var7 = MathHelper.sin(this.swingProgress * (float)Math.PI); + float var8 = MathHelper.sin((1.0F - (1.0F - this.swingProgress) * (1.0F - this.swingProgress)) * (float)Math.PI); + this.bipedRightArm.rotateAngleZ = 0.0F; + this.bipedLeftArm.rotateAngleZ = 0.0F; + this.bipedRightArm.rotateAngleY = -(0.1F - var7 * 0.6F); + this.bipedLeftArm.rotateAngleY = 0.1F - var7 * 0.6F; + this.bipedRightArm.rotateAngleX = (float)Math.PI * -0.5F; + this.bipedLeftArm.rotateAngleX = (float)Math.PI * -0.5F; + this.bipedRightArm.rotateAngleX -= var7 * 1.2F - var8 * 0.4F; + this.bipedLeftArm.rotateAngleX -= var7 * 1.2F - var8 * 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/source/net/minecraft/src/MouseHelper.java b/source/net/minecraft/src/MouseHelper.java new file mode 100644 index 0000000..d1671d3 --- /dev/null +++ b/source/net/minecraft/src/MouseHelper.java @@ -0,0 +1,81 @@ +package net.minecraft.src; + +import java.awt.AWTException; +import java.awt.Component; +import java.awt.MouseInfo; +import java.awt.Point; +import java.awt.Robot; +import java.nio.IntBuffer; +import org.lwjgl.LWJGLException; +import org.lwjgl.input.Cursor; +import org.lwjgl.input.Mouse; + +public class MouseHelper { + private Component windowComponent; + private Robot robot; + private int componentWidth; + private int componentHeight; + private Cursor cursor; + public int deltaX; + public int deltaY; + private int mouseInt = 10; + + public MouseHelper(Component var1) { + this.windowComponent = var1; + + try { + this.robot = new Robot(); + } catch (AWTException var6) { + var6.printStackTrace(); + } + + IntBuffer var2 = GLAllocation.createIntBuffer(1); + var2.put(0); + var2.flip(); + IntBuffer var3 = GLAllocation.createIntBuffer(1024); + + try { + this.cursor = new Cursor(32, 32, 16, 16, 1, var3, var2); + } catch (LWJGLException var5) { + var5.printStackTrace(); + } + + } + + public void grabMouseCursor() { + try { + Mouse.setNativeCursor(this.cursor); + } catch (LWJGLException var2) { + var2.printStackTrace(); + } + + this.mouseXYChange(); + this.deltaX = 0; + this.deltaY = 0; + } + + public void ungrabMouseCursor() { + try { + Mouse.setNativeCursor((Cursor)null); + } catch (LWJGLException var2) { + var2.printStackTrace(); + } + + } + + public void mouseXYChange() { + Point var1 = MouseInfo.getPointerInfo().getLocation(); + Point var2 = this.windowComponent.getLocationOnScreen(); + this.robot.mouseMove(this.componentWidth, this.componentHeight); + this.componentWidth = var2.x + this.windowComponent.getWidth() / 2; + this.componentHeight = var2.y + this.windowComponent.getHeight() / 2; + if(this.mouseInt == 0) { + this.deltaX = var1.x - this.componentWidth; + this.deltaY = var1.y - this.componentHeight; + } else { + this.deltaX = this.deltaY = 0; + --this.mouseInt; + } + + } +} diff --git a/source/net/minecraft/src/MovementInput.java b/source/net/minecraft/src/MovementInput.java new file mode 100644 index 0000000..0b511d4 --- /dev/null +++ b/source/net/minecraft/src/MovementInput.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class MovementInput { + public float moveStrafe = 0.0F; + public float moveForward = 0.0F; + public boolean unused = false; + public boolean jump = false; + + public void updatePlayerMoveState(EntityPlayer var1) { + } + + public void resetKeyState() { + } + + public void checkKeyForMovementInput(int var1, boolean var2) { + } +} diff --git a/source/net/minecraft/src/MovementInputFromOptions.java b/source/net/minecraft/src/MovementInputFromOptions.java new file mode 100644 index 0000000..e92f2ec --- /dev/null +++ b/source/net/minecraft/src/MovementInputFromOptions.java @@ -0,0 +1,67 @@ +package net.minecraft.src; + +public class MovementInputFromOptions extends MovementInput { + private boolean[] movementKeyStates = new boolean[10]; + private GameSettings gameSettings; + + public MovementInputFromOptions(GameSettings var1) { + this.gameSettings = var1; + } + + public void checkKeyForMovementInput(int var1, boolean var2) { + byte var3 = -1; + if(var1 == this.gameSettings.keyBindForward.keyCode) { + var3 = 0; + } + + if(var1 == this.gameSettings.keyBindBack.keyCode) { + var3 = 1; + } + + if(var1 == this.gameSettings.keyBindLeft.keyCode) { + var3 = 2; + } + + if(var1 == this.gameSettings.keyBindRight.keyCode) { + var3 = 3; + } + + if(var1 == this.gameSettings.keyBindJump.keyCode) { + var3 = 4; + } + + if(var3 >= 0) { + this.movementKeyStates[var3] = var2; + } + + } + + public void resetKeyState() { + for(int var1 = 0; var1 < 10; ++var1) { + this.movementKeyStates[var1] = false; + } + + } + + public void updatePlayerMoveState(EntityPlayer var1) { + this.moveStrafe = 0.0F; + this.moveForward = 0.0F; + if(this.movementKeyStates[0]) { + ++this.moveForward; + } + + if(this.movementKeyStates[1]) { + --this.moveForward; + } + + if(this.movementKeyStates[2]) { + ++this.moveStrafe; + } + + if(this.movementKeyStates[3]) { + --this.moveStrafe; + } + + this.jump = this.movementKeyStates[4]; + } +} diff --git a/source/net/minecraft/src/MovingObjectPosition.java b/source/net/minecraft/src/MovingObjectPosition.java new file mode 100644 index 0000000..764010a --- /dev/null +++ b/source/net/minecraft/src/MovingObjectPosition.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class MovingObjectPosition { + public int typeOfHit; + public int blockX; + public int blockY; + public int blockZ; + public int sideHit; + public Vec3D hitVec; + public Entity entityHit; + + public MovingObjectPosition(int var1, int var2, int var3, int var4, Vec3D var5) { + this.typeOfHit = 0; + this.blockX = var1; + this.blockY = var2; + this.blockZ = var3; + this.sideHit = var4; + this.hitVec = Vec3D.createVector(var5.xCoord, var5.yCoord, var5.zCoord); + } + + public MovingObjectPosition(Entity var1) { + this.typeOfHit = 1; + this.entityHit = var1; + this.hitVec = Vec3D.createVector(var1.posX, var1.posY, var1.posZ); + } +} diff --git a/source/net/minecraft/src/NBTBase.java b/source/net/minecraft/src/NBTBase.java new file mode 100644 index 0000000..ba02104 --- /dev/null +++ b/source/net/minecraft/src/NBTBase.java @@ -0,0 +1,102 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public abstract class NBTBase { + private String key = null; + + abstract void writeTagContents(DataOutput var1) throws IOException; + + abstract void readTagContents(DataInput var1) throws IOException; + + public abstract byte getType(); + + public String getKey() { + return this.key == null ? "" : this.key; + } + + public NBTBase setKey(String var1) { + this.key = var1; + return this; + } + + public static NBTBase readNamedTag(DataInput var0) throws IOException { + byte var1 = var0.readByte(); + if(var1 == 0) { + return new NBTTagEnd(); + } else { + NBTBase var2 = createTagOfType(var1); + var2.key = var0.readUTF(); + var2.readTagContents(var0); + return var2; + } + } + + public static void writeNamedTag(NBTBase var0, DataOutput var1) throws IOException { + var1.writeByte(var0.getType()); + if(var0.getType() != 0) { + var1.writeUTF(var0.getKey()); + var0.writeTagContents(var1); + } + } + + public static NBTBase createTagOfType(byte var0) { + switch(var0) { + case 0: + return new NBTTagEnd(); + case 1: + return new NBTTagByte(); + case 2: + return new NBTTagShort(); + case 3: + return new NBTTagInt(); + case 4: + return new NBTTagLong(); + case 5: + return new NBTTagFloat(); + case 6: + return new NBTTagDouble(); + case 7: + return new NBTTagByteArray(); + case 8: + return new NBTTagString(); + case 9: + return new NBTTagList(); + case 10: + return new NBTTagCompound(); + 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"; + default: + return "UNKNOWN"; + } + } +} diff --git a/source/net/minecraft/src/NBTTagByte.java b/source/net/minecraft/src/NBTTagByte.java new file mode 100644 index 0000000..3260724 --- /dev/null +++ b/source/net/minecraft/src/NBTTagByte.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagByte extends NBTBase { + public byte byteValue; + + public NBTTagByte() { + } + + public NBTTagByte(byte var1) { + this.byteValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeByte(this.byteValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.byteValue = var1.readByte(); + } + + public byte getType() { + return (byte)1; + } + + public String toString() { + return "" + this.byteValue; + } +} diff --git a/source/net/minecraft/src/NBTTagByteArray.java b/source/net/minecraft/src/NBTTagByteArray.java new file mode 100644 index 0000000..0f58fe1 --- /dev/null +++ b/source/net/minecraft/src/NBTTagByteArray.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagByteArray extends NBTBase { + public byte[] byteArray; + + public NBTTagByteArray() { + } + + public NBTTagByteArray(byte[] var1) { + this.byteArray = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeInt(this.byteArray.length); + var1.write(this.byteArray); + } + + void readTagContents(DataInput var1) throws IOException { + int var2 = var1.readInt(); + this.byteArray = new byte[var2]; + var1.readFully(this.byteArray); + } + + public byte getType() { + return (byte)7; + } + + public String toString() { + return "[" + this.byteArray.length + " bytes]"; + } +} diff --git a/source/net/minecraft/src/NBTTagCompound.java b/source/net/minecraft/src/NBTTagCompound.java new file mode 100644 index 0000000..a7fa2f8 --- /dev/null +++ b/source/net/minecraft/src/NBTTagCompound.java @@ -0,0 +1,128 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +public class NBTTagCompound extends NBTBase { + private Map tagMap = new HashMap(); + + void writeTagContents(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 readTagContents(DataInput var1) throws IOException { + this.tagMap.clear(); + + while(true) { + NBTBase var2 = NBTBase.readNamedTag(var1); + if(var2.getType() == 0) { + return; + } + + this.tagMap.put(var2.getKey(), var2); + } + } + + public byte getType() { + return (byte)10; + } + + public void setTag(String var1, NBTBase var2) { + this.tagMap.put(var1, var2.setKey(var1)); + } + + public void setByte(String var1, byte var2) { + this.tagMap.put(var1, (new NBTTagByte(var2)).setKey(var1)); + } + + public void setShort(String var1, short var2) { + this.tagMap.put(var1, (new NBTTagShort(var2)).setKey(var1)); + } + + public void setInteger(String var1, int var2) { + this.tagMap.put(var1, (new NBTTagInt(var2)).setKey(var1)); + } + + public void setLong(String var1, long var2) { + this.tagMap.put(var1, (new NBTTagLong(var2)).setKey(var1)); + } + + public void setFloat(String var1, float var2) { + this.tagMap.put(var1, (new NBTTagFloat(var2)).setKey(var1)); + } + + public void setString(String var1, String var2) { + this.tagMap.put(var1, (new NBTTagString(var2)).setKey(var1)); + } + + public void setByteArray(String var1, byte[] var2) { + this.tagMap.put(var1, (new NBTTagByteArray(var2)).setKey(var1)); + } + + public void setCompoundTag(String var1, NBTTagCompound var2) { + this.tagMap.put(var1, var2.setKey(var1)); + } + + public void setBoolean(String var1, boolean var2) { + this.setByte(var1, (byte)(var2 ? 1 : 0)); + } + + public boolean hasKey(String var1) { + return this.tagMap.containsKey(var1); + } + + public byte getByte(String var1) { + return !this.tagMap.containsKey(var1) ? 0 : ((NBTTagByte)this.tagMap.get(var1)).byteValue; + } + + public short getShort(String var1) { + return !this.tagMap.containsKey(var1) ? 0 : ((NBTTagShort)this.tagMap.get(var1)).shortValue; + } + + public int getInteger(String var1) { + return !this.tagMap.containsKey(var1) ? 0 : ((NBTTagInt)this.tagMap.get(var1)).intValue; + } + + public long getLong(String var1) { + return !this.tagMap.containsKey(var1) ? 0L : ((NBTTagLong)this.tagMap.get(var1)).longValue; + } + + public float getFloat(String var1) { + return !this.tagMap.containsKey(var1) ? 0.0F : ((NBTTagFloat)this.tagMap.get(var1)).floatValue; + } + + public String getString(String var1) { + return !this.tagMap.containsKey(var1) ? "" : ((NBTTagString)this.tagMap.get(var1)).stringValue; + } + + public byte[] getByteArray(String var1) { + return !this.tagMap.containsKey(var1) ? new byte[0] : ((NBTTagByteArray)this.tagMap.get(var1)).byteArray; + } + + public NBTTagCompound getCompoundTag(String var1) { + return !this.tagMap.containsKey(var1) ? new NBTTagCompound() : (NBTTagCompound)this.tagMap.get(var1); + } + + public NBTTagList getTagList(String var1) { + return !this.tagMap.containsKey(var1) ? new NBTTagList() : (NBTTagList)this.tagMap.get(var1); + } + + public boolean getBoolean(String var1) { + return this.getByte(var1) != 0; + } + + public String toString() { + return "" + this.tagMap.size() + " entries"; + } +} diff --git a/source/net/minecraft/src/NBTTagDouble.java b/source/net/minecraft/src/NBTTagDouble.java new file mode 100644 index 0000000..cd00968 --- /dev/null +++ b/source/net/minecraft/src/NBTTagDouble.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagDouble extends NBTBase { + public double doubleValue; + + public NBTTagDouble() { + } + + public NBTTagDouble(double var1) { + this.doubleValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeDouble(this.doubleValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.doubleValue = var1.readDouble(); + } + + public byte getType() { + return (byte)6; + } + + public String toString() { + return "" + this.doubleValue; + } +} diff --git a/source/net/minecraft/src/NBTTagEnd.java b/source/net/minecraft/src/NBTTagEnd.java new file mode 100644 index 0000000..a04e7d6 --- /dev/null +++ b/source/net/minecraft/src/NBTTagEnd.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagEnd extends NBTBase { + void readTagContents(DataInput var1) throws IOException { + } + + void writeTagContents(DataOutput var1) throws IOException { + } + + public byte getType() { + return (byte)0; + } + + public String toString() { + return "END"; + } +} diff --git a/source/net/minecraft/src/NBTTagFloat.java b/source/net/minecraft/src/NBTTagFloat.java new file mode 100644 index 0000000..cf59c93 --- /dev/null +++ b/source/net/minecraft/src/NBTTagFloat.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagFloat extends NBTBase { + public float floatValue; + + public NBTTagFloat() { + } + + public NBTTagFloat(float var1) { + this.floatValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeFloat(this.floatValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.floatValue = var1.readFloat(); + } + + public byte getType() { + return (byte)5; + } + + public String toString() { + return "" + this.floatValue; + } +} diff --git a/source/net/minecraft/src/NBTTagInt.java b/source/net/minecraft/src/NBTTagInt.java new file mode 100644 index 0000000..6dfdfe6 --- /dev/null +++ b/source/net/minecraft/src/NBTTagInt.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagInt extends NBTBase { + public int intValue; + + public NBTTagInt() { + } + + public NBTTagInt(int var1) { + this.intValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeInt(this.intValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.intValue = var1.readInt(); + } + + public byte getType() { + return (byte)3; + } + + public String toString() { + return "" + this.intValue; + } +} diff --git a/source/net/minecraft/src/NBTTagList.java b/source/net/minecraft/src/NBTTagList.java new file mode 100644 index 0000000..3ee8caf --- /dev/null +++ b/source/net/minecraft/src/NBTTagList.java @@ -0,0 +1,62 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class NBTTagList extends NBTBase { + private List tagList = new ArrayList(); + private byte tagType; + + void writeTagContents(DataOutput var1) throws IOException { + if(this.tagList.size() > 0) { + this.tagType = ((NBTBase)this.tagList.get(0)).getType(); + } 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)).writeTagContents(var1); + } + + } + + void readTagContents(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.createTagOfType(this.tagType); + var4.readTagContents(var1); + this.tagList.add(var4); + } + + } + + public byte getType() { + return (byte)9; + } + + public String toString() { + return "" + this.tagList.size() + " entries of type " + NBTBase.getTagName(this.tagType); + } + + public void setTag(NBTBase var1) { + this.tagType = var1.getType(); + this.tagList.add(var1); + } + + public NBTBase tagAt(int var1) { + return (NBTBase)this.tagList.get(var1); + } + + public int tagCount() { + return this.tagList.size(); + } +} diff --git a/source/net/minecraft/src/NBTTagLong.java b/source/net/minecraft/src/NBTTagLong.java new file mode 100644 index 0000000..646f80d --- /dev/null +++ b/source/net/minecraft/src/NBTTagLong.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagLong extends NBTBase { + public long longValue; + + public NBTTagLong() { + } + + public NBTTagLong(long var1) { + this.longValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeLong(this.longValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.longValue = var1.readLong(); + } + + public byte getType() { + return (byte)4; + } + + public String toString() { + return "" + this.longValue; + } +} diff --git a/source/net/minecraft/src/NBTTagShort.java b/source/net/minecraft/src/NBTTagShort.java new file mode 100644 index 0000000..3345229 --- /dev/null +++ b/source/net/minecraft/src/NBTTagShort.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagShort extends NBTBase { + public short shortValue; + + public NBTTagShort() { + } + + public NBTTagShort(short var1) { + this.shortValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeShort(this.shortValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.shortValue = var1.readShort(); + } + + public byte getType() { + return (byte)2; + } + + public String toString() { + return "" + this.shortValue; + } +} diff --git a/source/net/minecraft/src/NBTTagString.java b/source/net/minecraft/src/NBTTagString.java new file mode 100644 index 0000000..93fca6e --- /dev/null +++ b/source/net/minecraft/src/NBTTagString.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagString extends NBTBase { + public String stringValue; + + public NBTTagString() { + } + + public NBTTagString(String var1) { + this.stringValue = var1; + if(var1 == null) { + throw new IllegalArgumentException("Empty string not allowed"); + } + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeUTF(this.stringValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.stringValue = var1.readUTF(); + } + + public byte getType() { + return (byte)8; + } + + public String toString() { + return "" + this.stringValue; + } +} diff --git a/source/net/minecraft/src/NextTickListEntry.java b/source/net/minecraft/src/NextTickListEntry.java new file mode 100644 index 0000000..3870d49 --- /dev/null +++ b/source/net/minecraft/src/NextTickListEntry.java @@ -0,0 +1,44 @@ +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; + 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 && this.blockID == var2.blockID; + } + } + + public int hashCode() { + return (this.xCoord * 128 * 1024 + this.zCoord * 128 + this.yCoord) * 256 + this.blockID; + } + + public NextTickListEntry setScheduledTime(long var1) { + this.scheduledTime = var1; + return this; + } + + public int a(NextTickListEntry var1) { + return this.scheduledTime < var1.scheduledTime ? -1 : (this.scheduledTime > var1.scheduledTime ? 1 : (this.tickEntryID < var1.tickEntryID ? -1 : (this.tickEntryID > var1.tickEntryID ? 1 : 0))); + } + + public int compareTo(Object var1) { + return this.a((NextTickListEntry)var1); + } +} diff --git a/source/net/minecraft/src/NibbleArray.java b/source/net/minecraft/src/NibbleArray.java new file mode 100644 index 0000000..56a0293 --- /dev/null +++ b/source/net/minecraft/src/NibbleArray.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +public class NibbleArray { + public final byte[] data; + + public NibbleArray(int var1) { + this.data = new byte[var1 >> 1]; + } + + public NibbleArray(byte[] var1) { + this.data = var1; + } + + public int get(int var1, int var2, int var3) { + int var4 = var1 << 11 | var3 << 7 | var2; + 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 = var1 << 11 | var3 << 7 | var2; + 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); + } + + } + + public boolean isValid() { + return this.data != null; + } +} diff --git a/source/net/minecraft/src/NoiseGenerator.java b/source/net/minecraft/src/NoiseGenerator.java new file mode 100644 index 0000000..53e6d05 --- /dev/null +++ b/source/net/minecraft/src/NoiseGenerator.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public abstract class NoiseGenerator { +} diff --git a/source/net/minecraft/src/NoiseGeneratorOctaves.java b/source/net/minecraft/src/NoiseGeneratorOctaves.java new file mode 100644 index 0000000..b58f601 --- /dev/null +++ b/source/net/minecraft/src/NoiseGeneratorOctaves.java @@ -0,0 +1,61 @@ +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, double var3) { + double var5 = 0.0D; + double var7 = 1.0D; + + for(int var9 = 0; var9 < this.octaves; ++var9) { + var5 += this.generatorCollection[var9].generateNoise(var1 * var7, var3 * var7) / var7; + var7 /= 2.0D; + } + + return var5; + } + + public double a(double var1, double var3, double var5) { + double var7 = 0.0D; + double var9 = 1.0D; + + for(int var11 = 0; var11 < this.octaves; ++var11) { + var7 += this.generatorCollection[var11].c(var1 * var9, var3 * var9, var5 * var9) / var9; + var9 /= 2.0D; + } + + return var7; + } + + public double[] a(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 var17 = 1.0D; + + for(int var16 = 0; var16 < this.octaves; ++var16) { + this.generatorCollection[var16].a(var1, var2, var3, var4, var5, var6, var7, var8 * var17, var10 * var17, var12 * var17, var17); + var17 /= 2.0D; + } + + return var1; + } +} diff --git a/source/net/minecraft/src/NoiseGeneratorPerlin.java b/source/net/minecraft/src/NoiseGeneratorPerlin.java new file mode 100644 index 0000000..29fb064 --- /dev/null +++ b/source/net/minecraft/src/NoiseGeneratorPerlin.java @@ -0,0 +1,162 @@ +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 double generateNoise(double var1, double var3, double var5) { + double var7 = var1 + this.xCoord; + double var9 = var3 + this.yCoord; + double var11 = var5 + this.zCoord; + int var13 = (int)var7; + int var14 = (int)var9; + int var15 = (int)var11; + if(var7 < (double)var13) { + --var13; + } + + if(var9 < (double)var14) { + --var14; + } + + if(var11 < (double)var15) { + --var15; + } + + int var16 = var13 & 255; + int var17 = var14 & 255; + int var18 = var15 & 255; + var7 -= (double)var13; + var9 -= (double)var14; + var11 -= (double)var15; + double var19 = var7 * var7 * var7 * (var7 * (var7 * 6.0D - 15.0D) + 10.0D); + double var21 = var9 * var9 * var9 * (var9 * (var9 * 6.0D - 15.0D) + 10.0D); + double var23 = var11 * var11 * var11 * (var11 * (var11 * 6.0D - 15.0D) + 10.0D); + int var25 = this.permutations[var16] + var17; + int var26 = this.permutations[var25] + var18; + int var27 = this.permutations[var25 + 1] + var18; + int var28 = this.permutations[var16 + 1] + var17; + int var29 = this.permutations[var28] + var18; + int var30 = this.permutations[var28 + 1] + var18; + return this.lerp(var23, this.lerp(var21, this.lerp(var19, this.grad(this.permutations[var26], var7, var9, var11), this.grad(this.permutations[var29], var7 - 1.0D, var9, var11)), this.lerp(var19, this.grad(this.permutations[var27], var7, var9 - 1.0D, var11), this.grad(this.permutations[var30], var7 - 1.0D, var9 - 1.0D, var11))), this.lerp(var21, this.lerp(var19, this.grad(this.permutations[var26 + 1], var7, var9, var11 - 1.0D), this.grad(this.permutations[var29 + 1], var7 - 1.0D, var9, var11 - 1.0D)), this.lerp(var19, this.grad(this.permutations[var27 + 1], var7, var9 - 1.0D, var11 - 1.0D), this.grad(this.permutations[var30 + 1], var7 - 1.0D, var9 - 1.0D, var11 - 1.0D)))); + } + + public double lerp(double var1, double var3, double var5) { + return var3 + var1 * (var5 - var3); + } + + public 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 double generateNoise(double var1, double var3) { + return this.generateNoise(var1, var3, 0.0D); + } + + public double c(double var1, double var3, double var5) { + return this.generateNoise(var1, var3, var5); + } + + public void a(double[] var1, int var2, int var3, int var4, int var5, int var6, int var7, double var8, double var10, double var12, double var14) { + int var16 = 0; + double var17 = 1.0D / var14; + int var19 = -1; + boolean var20 = false; + boolean var21 = false; + boolean var22 = false; + boolean var23 = false; + boolean var24 = false; + boolean var25 = false; + double var26 = 0.0D; + double var28 = 0.0D; + double var30 = 0.0D; + double var32 = 0.0D; + + for(int var34 = 0; var34 < var5; ++var34) { + double var35 = (double)(var2 + var34) * var8 + this.xCoord; + int var37 = (int)var35; + if(var35 < (double)var37) { + --var37; + } + + int var38 = var37 & 255; + var35 -= (double)var37; + double var39 = var35 * var35 * var35 * (var35 * (var35 * 6.0D - 15.0D) + 10.0D); + + for(int var41 = 0; var41 < var7; ++var41) { + double var42 = (double)(var4 + var41) * var12 + this.zCoord; + int var44 = (int)var42; + if(var42 < (double)var44) { + --var44; + } + + int var45 = var44 & 255; + var42 -= (double)var44; + double var46 = var42 * var42 * var42 * (var42 * (var42 * 6.0D - 15.0D) + 10.0D); + + for(int var48 = 0; var48 < var6; ++var48) { + double var49 = (double)(var3 + var48) * var10 + this.yCoord; + int var51 = (int)var49; + if(var49 < (double)var51) { + --var51; + } + + int var52 = var51 & 255; + var49 -= (double)var51; + double var53 = var49 * var49 * var49 * (var49 * (var49 * 6.0D - 15.0D) + 10.0D); + if(var48 == 0 || var52 != var19) { + var19 = var52; + int var61 = this.permutations[var38] + var52; + int var62 = this.permutations[var61] + var45; + int var63 = this.permutations[var61 + 1] + var45; + int var64 = this.permutations[var38 + 1] + var52; + int var65 = this.permutations[var64] + var45; + int var66 = this.permutations[var64 + 1] + var45; + var26 = this.lerp(var39, this.grad(this.permutations[var62], var35, var49, var42), this.grad(this.permutations[var65], var35 - 1.0D, var49, var42)); + var28 = this.lerp(var39, this.grad(this.permutations[var63], var35, var49 - 1.0D, var42), this.grad(this.permutations[var66], var35 - 1.0D, var49 - 1.0D, var42)); + var30 = this.lerp(var39, this.grad(this.permutations[var62 + 1], var35, var49, var42 - 1.0D), this.grad(this.permutations[var65 + 1], var35 - 1.0D, var49, var42 - 1.0D)); + var32 = this.lerp(var39, this.grad(this.permutations[var63 + 1], var35, var49 - 1.0D, var42 - 1.0D), this.grad(this.permutations[var66 + 1], var35 - 1.0D, var49 - 1.0D, var42 - 1.0D)); + } + + double var55 = this.lerp(var53, var26, var28); + double var57 = this.lerp(var53, var30, var32); + double var59 = this.lerp(var46, var55, var57); + int var10001 = var16++; + var1[var10001] += var59 * var17; + } + } + } + + } +} diff --git a/source/net/minecraft/src/OSMap.java b/source/net/minecraft/src/OSMap.java new file mode 100644 index 0000000..c183c05 --- /dev/null +++ b/source/net/minecraft/src/OSMap.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +class OSMap { + static final int[] osValues = new int[EnumOS.values().length]; + + static { + try { + osValues[EnumOS.linux.ordinal()] = 1; + } catch (NoSuchFieldError var4) { + } + + try { + osValues[EnumOS.solaris.ordinal()] = 2; + } catch (NoSuchFieldError var3) { + } + + try { + osValues[EnumOS.windows.ordinal()] = 3; + } catch (NoSuchFieldError var2) { + } + + try { + osValues[EnumOS.macos.ordinal()] = 4; + } catch (NoSuchFieldError var1) { + } + + } +} diff --git a/source/net/minecraft/src/OSMapIsom.java b/source/net/minecraft/src/OSMapIsom.java new file mode 100644 index 0000000..16687c5 --- /dev/null +++ b/source/net/minecraft/src/OSMapIsom.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +class OSMapIsom { + static final int[] osValues = new int[EnumOSIsom.values().length]; + + static { + try { + osValues[EnumOSIsom.linux.ordinal()] = 1; + } catch (NoSuchFieldError var4) { + } + + try { + osValues[EnumOSIsom.solaris.ordinal()] = 2; + } catch (NoSuchFieldError var3) { + } + + try { + osValues[EnumOSIsom.windows.ordinal()] = 3; + } catch (NoSuchFieldError var2) { + } + + try { + osValues[EnumOSIsom.macos.ordinal()] = 4; + } catch (NoSuchFieldError var1) { + } + + } +} diff --git a/source/net/minecraft/src/OpenGlCapsChecker.java b/source/net/minecraft/src/OpenGlCapsChecker.java new file mode 100644 index 0000000..eaf1238 --- /dev/null +++ b/source/net/minecraft/src/OpenGlCapsChecker.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GLContext; + +public class OpenGlCapsChecker { + public boolean checkARBOcclusion() { + return false & GLContext.getCapabilities().GL_ARB_occlusion_query; + } +} diff --git a/source/net/minecraft/src/PanelCrashReport.java b/source/net/minecraft/src/PanelCrashReport.java new file mode 100644 index 0000000..59d6613 --- /dev/null +++ b/source/net/minecraft/src/PanelCrashReport.java @@ -0,0 +1,85 @@ +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.PrintWriter; +import java.io.StringWriter; +import java.text.SimpleDateFormat; +import java.util.Date; +import org.lwjgl.Sys; +import org.lwjgl.opengl.GL11; + +public class PanelCrashReport extends Panel { + public PanelCrashReport(UnexpectedThrowable var1) { + this.setBackground(new Color(3028036)); + this.setLayout(new BorderLayout()); + StringWriter var2 = new StringWriter(); + var1.exception.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 + "Minecraft: Minecraft Infdev\n"; + var5 = var5 + "OS: " + System.getProperty("os.name") + " (" + System.getProperty("os.arch") + ") version " + System.getProperty("os.version") + "\n"; + var5 = var5 + "Java: " + System.getProperty("java.version") + ", " + System.getProperty("java.vendor") + "\n"; + var5 = var5 + "VM: " + System.getProperty("java.vm.name") + " (" + System.getProperty("java.vm.info") + "), " + System.getProperty("java.vm.vendor") + "\n"; + var5 = var5 + "LWJGL: " + Sys.getVersion() + "\n"; + var4 = GL11.glGetString(GL11.GL_VENDOR); + var5 = var5 + "OpenGL: " + GL11.glGetString(GL11.GL_RENDERER) + " version " + GL11.glGetString(GL11.GL_VERSION) + ", " + GL11.glGetString(GL11.GL_VENDOR) + "\n"; + } catch (Throwable var8) { + var5 = var5 + "[failed to get system properties]\n"; + } + + var5 = var5 + "\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.\n"; + var6 = var6 + "\n"; + var6 = var6 + "If you wish to report this, please copy this entire text and email it to support@mojang.com.\n"; + var6 = var6 + "Please include a description of what you did when the error occured.\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 var7 = new TextArea(var6, 0, 0, 1); + var7.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(var7, "Center"); + } +} diff --git a/source/net/minecraft/src/Path.java b/source/net/minecraft/src/Path.java new file mode 100644 index 0000000..ce289f0 --- /dev/null +++ b/source/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/source/net/minecraft/src/PathEntity.java b/source/net/minecraft/src/PathEntity.java new file mode 100644 index 0000000..e1994b1 --- /dev/null +++ b/source/net/minecraft/src/PathEntity.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public class PathEntity { + private final PathPoint[] points; + public final int pathLength; + private int pathIndex; + + public PathEntity(PathPoint[] var1) { + this.points = var1; + this.pathLength = var1.length; + } + + public void incrementPathIndex() { + ++this.pathIndex; + } + + public boolean isFinished() { + return this.pathIndex >= this.points.length; + } + + public Vec3D getPosition(Entity var1) { + float var2 = (float)this.points[this.pathIndex].xCoord + (float)((int)(var1.width + 1.0F)) * 0.5F; + float var3 = (float)this.points[this.pathIndex].yCoord; + float var4 = (float)this.points[this.pathIndex].zCoord + (float)((int)(var1.width + 1.0F)) * 0.5F; + return Vec3D.createVector((double)var2, (double)var3, (double)var4); + } +} diff --git a/source/net/minecraft/src/PathPoint.java b/source/net/minecraft/src/PathPoint.java new file mode 100644 index 0000000..7df70dd --- /dev/null +++ b/source/net/minecraft/src/PathPoint.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +public class PathPoint { + public final int xCoord; + public final int yCoord; + public final int zCoord; + public 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 = var1 | var2 << 10 | var3 << 20; + } + + 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 boolean equals(Object var1) { + return ((PathPoint)var1).hash == this.hash; + } + + 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/source/net/minecraft/src/Pathfinder.java b/source/net/minecraft/src/Pathfinder.java new file mode 100644 index 0000000..7887c4f --- /dev/null +++ b/source/net/minecraft/src/Pathfinder.java @@ -0,0 +1,205 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; + +public class Pathfinder { + private IBlockAccess worldMap; + private Path path = new Path(); + private Map pointMap = new HashMap(); + private PathPoint[] pathOptions = new PathPoint[32]; + + public Pathfinder(IBlockAccess var1) { + this.worldMap = var1; + } + + 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.clear(); + PathPoint var9 = this.openPoint(MathHelper.floor_double(var1.boundingBox.minX), MathHelper.floor_double(var1.boundingBox.minY), MathHelper.floor_double(var1.boundingBox.minZ)); + PathPoint var10 = 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 var11 = new PathPoint(MathHelper.floor_float(var1.width + 1.0F), MathHelper.floor_float(var1.height + 1.0F), MathHelper.floor_float(var1.width + 1.0F)); + PathEntity var12 = this.addToPath(var1, var9, var10, var11, var8); + return var12; + } + + private PathEntity addToPath(Entity var1, PathPoint var2, PathPoint var3, PathPoint var4, float var5) { + var2.totalPathDistance = 0.0F; + var2.distanceToNext = var2.distanceTo(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.hash == var3.hash) { + return this.createEntityPath(var2, var3); + } + + if(var7.distanceTo(var3) < var6.distanceTo(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.distanceTo(var10); + if(!var10.isAssigned() || var11 < var10.totalPathDistance) { + var10.previous = var7; + var10.totalPathDistance = var11; + var10.distanceToNext = var10.distanceTo(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) > 0) { + 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; + if(this.getVerticalOffset(var1, var2, var3, var4, var5) > 0) { + var7 = this.openPoint(var2, var3, var4); + } + + if(var7 == null && this.getVerticalOffset(var1, var2, var3 + var6, var4, var5) > 0) { + var7 = this.openPoint(var2, var3 + var6, var4); + } + + if(var7 != null) { + int var8 = 0; + boolean var9 = false; + + while(true) { + if(var3 > 0) { + int var11 = this.getVerticalOffset(var1, var2, var3 - 1, var4, var5); + if(var11 > 0) { + if(var11 < 0) { + return null; + } + + ++var8; + if(var8 >= 4) { + return null; + } + + --var3; + continue; + } + } + + if(var3 > 0) { + var7 = this.openPoint(var2, var3, var4); + } + + Material var10 = this.worldMap.getBlockMaterial(var2, var3 - 1, var4); + if(var10 == Material.water || var10 == Material.lava) { + return null; + } + break; + } + } + + return var7; + } + + private final PathPoint openPoint(int var1, int var2, int var3) { + int var4 = var1 | var2 << 10 | var3 << 20; + PathPoint var5 = (PathPoint)this.pointMap.get(Integer.valueOf(var4)); + if(var5 == null) { + var5 = new PathPoint(var1, var2, var3); + this.pointMap.put(Integer.valueOf(var4), var5); + } + + return var5; + } + + private int getVerticalOffset(Entity var1, int var2, int var3, int var4, PathPoint var5) { + for(int var6 = var2; var6 < var2 + var5.xCoord; ++var6) { + for(int var7 = var3; var7 < var3 + var5.yCoord; ++var7) { + for(int var8 = var4; var8 < var4 + var5.zCoord; ++var8) { + Material var9 = this.worldMap.getBlockMaterial(var2, var3, var4); + if(var9.getIsSolid()) { + return 0; + } + + if(var9 == Material.water || var9 == Material.lava) { + return -1; + } + } + } + } + + return 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/source/net/minecraft/src/PlayerController.java b/source/net/minecraft/src/PlayerController.java new file mode 100644 index 0000000..4abc7dc --- /dev/null +++ b/source/net/minecraft/src/PlayerController.java @@ -0,0 +1,60 @@ +package net.minecraft.src; + +public class PlayerController { + protected final Minecraft mc; + public boolean isInTestMode = false; + + public PlayerController(Minecraft var1) { + this.mc = var1; + } + + public void init() { + } + + public void onWorldChange(World var1) { + } + + public void clickBlock(int var1, int var2, int var3) { + this.sendBlockRemoved(var1, var2, var3); + } + + public boolean sendBlockRemoved(int var1, int var2, int var3) { + this.mc.effectRenderer.addBlockDestroyEffects(var1, var2, var3); + World var4 = this.mc.theWorld; + Block var5 = Block.blocksList[var4.getBlockId(var1, var2, var3)]; + int var6 = var4.getBlockMetadata(var1, var2, var3); + boolean var7 = var4.setBlockWithNotify(var1, var2, var3, 0); + if(var5 != null && var7) { + this.mc.sndManager.playSound(var5.stepSound.getBreakSound(), (float)var1 + 0.5F, (float)var2 + 0.5F, (float)var3 + 0.5F, (var5.stepSound.getVolume() + 1.0F) / 2.0F, var5.stepSound.getPitch() * 0.8F); + var5.onBlockDestroyedByPlayer(var4, var1, var2, var3, var6); + } + + return var7; + } + + public void sendBlockRemoving(int var1, int var2, int var3, int var4) { + } + + public void resetBlockRemoving() { + } + + public void setPartialTime(float var1) { + } + + public float getBlockReachDistance() { + return 5.0F; + } + + public void flipPlayer(EntityPlayer var1) { + } + + public void onUpdate() { + } + + public boolean shouldDrawHUD() { + return true; + } + + public void onRespawn(EntityPlayer var1) { + } +} diff --git a/source/net/minecraft/src/PlayerControllerCreative.java b/source/net/minecraft/src/PlayerControllerCreative.java new file mode 100644 index 0000000..960d62a --- /dev/null +++ b/source/net/minecraft/src/PlayerControllerCreative.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +public class PlayerControllerCreative extends PlayerController { + public PlayerControllerCreative(Minecraft var1) { + super(var1); + this.isInTestMode = true; + } + + public void init() { + } + + public void onRespawn(EntityPlayer var1) { + for(int var2 = 0; var2 < 9; ++var2) { + if(var1.inventory.mainInventory[var2] == null) { + this.mc.thePlayer.inventory.mainInventory[var2] = new ItemStack(((Block)Session.registeredBlocksList.get(var2)).blockID); + } else { + this.mc.thePlayer.inventory.mainInventory[var2].stackSize = 1; + } + } + + } + + public boolean shouldDrawHUD() { + return false; + } + + public void onWorldChange(World var1) { + super.onWorldChange(var1); + } + + public void onUpdate() { + } +} diff --git a/source/net/minecraft/src/PlayerControllerSP.java b/source/net/minecraft/src/PlayerControllerSP.java new file mode 100644 index 0000000..845c644 --- /dev/null +++ b/source/net/minecraft/src/PlayerControllerSP.java @@ -0,0 +1,124 @@ +package net.minecraft.src; + +public class PlayerControllerSP extends PlayerController { + private int curBlockX = -1; + private int curBlockY = -1; + private int curBlockZ = -1; + private float curBlockDamage = 0.0F; + private float prevBlockDamage = 0.0F; + private float blockDestroySoundCounter = 0.0F; + private int blockHitWait = 0; + private SpawnerAnimals monsterSpawner = new SpawnerMonsters(this, 100, EntityMonster.class, new Class[]{EntityZombie.class, EntitySkeleton.class, EntityCreeper.class, EntitySpider.class}); + private SpawnerAnimals animalSpawner = new SpawnerAnimals(20, EntityAnimal.class, new Class[]{EntitySheep.class, EntityPig.class}); + + public PlayerControllerSP(Minecraft var1) { + super(var1); + } + + public void flipPlayer(EntityPlayer var1) { + var1.rotationYaw = -180.0F; + } + + public void init() { + } + + public boolean sendBlockRemoved(int var1, int var2, int var3) { + int var4 = this.mc.theWorld.getBlockId(var1, var2, var3); + int var5 = this.mc.theWorld.getBlockMetadata(var1, var2, var3); + boolean var6 = super.sendBlockRemoved(var1, var2, var3); + ItemStack var7 = this.mc.thePlayer.getCurrentEquippedItem(); + if(var7 != null) { + var7.onDestroyBlock(var4, var1, var2, var3); + if(var7.stackSize == 0) { + var7.onItemDestroyedByUse(this.mc.thePlayer); + this.mc.thePlayer.displayGUIInventory(); + } + } + + if(var6 && this.mc.thePlayer.canHarvestBlock(Block.blocksList[var4])) { + Block.blocksList[var4].dropBlockAsItem(this.mc.theWorld, var1, var2, var3, var5); + } + + return var6; + } + + public void clickBlock(int var1, int var2, int var3) { + int var4 = this.mc.theWorld.getBlockId(var1, var2, var3); + if(var4 > 0 && this.curBlockDamage == 0.0F) { + Block.blocksList[var4].onBlockClicked(this.mc.theWorld, var1, var2, var3, this.mc.thePlayer); + } + + if(var4 > 0 && Block.blocksList[var4].blockStrength(this.mc.thePlayer) >= 1.0F) { + this.sendBlockRemoved(var1, var2, var3); + } + + } + + public void resetBlockRemoving() { + this.curBlockDamage = 0.0F; + this.blockHitWait = 0; + } + + public void sendBlockRemoving(int var1, int var2, int var3, int var4) { + if(this.blockHitWait > 0) { + --this.blockHitWait; + } else { + super.sendBlockRemoving(var1, var2, var3, var4); + if(var1 == this.curBlockX && var2 == this.curBlockY && var3 == this.curBlockZ) { + int var5 = this.mc.theWorld.getBlockId(var1, var2, var3); + if(var5 == 0) { + return; + } + + Block var6 = Block.blocksList[var5]; + this.curBlockDamage += var6.blockStrength(this.mc.thePlayer); + if(this.blockDestroySoundCounter % 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.blockDestroySoundCounter; + if(this.curBlockDamage >= 1.0F) { + this.sendBlockRemoved(var1, var2, var3); + this.curBlockDamage = 0.0F; + this.prevBlockDamage = 0.0F; + this.blockDestroySoundCounter = 0.0F; + this.blockHitWait = 5; + } + } else { + this.curBlockDamage = 0.0F; + this.prevBlockDamage = 0.0F; + this.blockDestroySoundCounter = 0.0F; + this.curBlockX = var1; + this.curBlockY = var2; + this.curBlockZ = var3; + } + + } + } + + public void setPartialTime(float var1) { + if(this.curBlockDamage <= 0.0F) { + this.mc.ingameGUI.damageGuiPartialTime = 0.0F; + this.mc.renderGlobal.damagePartialTime = 0.0F; + } else { + float var2 = this.prevBlockDamage + (this.curBlockDamage - this.prevBlockDamage) * var1; + this.mc.ingameGUI.damageGuiPartialTime = var2; + this.mc.renderGlobal.damagePartialTime = var2; + } + + } + + public float getBlockReachDistance() { + return 4.0F; + } + + public void onWorldChange(World var1) { + super.onWorldChange(var1); + } + + public void onUpdate() { + this.prevBlockDamage = this.curBlockDamage; + this.monsterSpawner.onUpdate(this.mc.theWorld); + this.animalSpawner.onUpdate(this.mc.theWorld); + } +} diff --git a/source/net/minecraft/src/PositionTextureVertex.java b/source/net/minecraft/src/PositionTextureVertex.java new file mode 100644 index 0000000..767c8bf --- /dev/null +++ b/source/net/minecraft/src/PositionTextureVertex.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public class PositionTextureVertex { + public Vec3D vector3D; + public float texturePositionX; + public float texturePositionY; + + public PositionTextureVertex(float var1, float var2, float var3, float var4, float var5) { + this(Vec3D.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(Vec3D var1, float var2, float var3) { + this.vector3D = var1; + this.texturePositionX = var2; + this.texturePositionY = var3; + } +} diff --git a/source/net/minecraft/src/RecipeSorter.java b/source/net/minecraft/src/RecipeSorter.java new file mode 100644 index 0000000..e74a04e --- /dev/null +++ b/source/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 a(CraftingRecipe var1, CraftingRecipe var2) { + return var2.getRecipeSize() < var1.getRecipeSize() ? -1 : (var2.getRecipeSize() > var1.getRecipeSize() ? 1 : 0); + } + + public int compare(Object var1, Object var2) { + return this.a((CraftingRecipe)var1, (CraftingRecipe)var2); + } +} diff --git a/source/net/minecraft/src/RecipesArmor.java b/source/net/minecraft/src/RecipesArmor.java new file mode 100644 index 0000000..5393870 --- /dev/null +++ b/source/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[][]{{Block.cloth, Block.fire, Item.ingotIron, Item.diamond, Item.ingotGold}, {Item.helmetLeather, Item.helmetChain, Item.helmetSteel, Item.helmetDiamond, Item.helmetGold}, {Item.plateLeather, Item.plateChain, Item.plateSteel, Item.plateDiamonhd, Item.plateGold}, {Item.legsLeather, Item.legsChain, Item.legsSteel, Item.legsDiamond, Item.legsGold}, {Item.bootsLeather, Item.bootsChain, Item.bootsSteel, 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/source/net/minecraft/src/RecipesCrafting.java b/source/net/minecraft/src/RecipesCrafting.java new file mode 100644 index 0000000..85015bd --- /dev/null +++ b/source/net/minecraft/src/RecipesCrafting.java @@ -0,0 +1,9 @@ +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.stoneOvenIdle), new Object[]{"###", "# #", "###", Character.valueOf('#'), Block.cobblestone}); + var1.addRecipe(new ItemStack(Block.workbench), new Object[]{"##", "##", Character.valueOf('#'), Block.planks}); + } +} diff --git a/source/net/minecraft/src/RecipesFood.java b/source/net/minecraft/src/RecipesFood.java new file mode 100644 index 0000000..b4adb74 --- /dev/null +++ b/source/net/minecraft/src/RecipesFood.java @@ -0,0 +1,8 @@ +package net.minecraft.src; + +public class RecipesFood { + public void addRecipes(CraftingManager var1) { + var1.addRecipe(new ItemStack(Item.bowlSoup), new Object[]{"Y", "X", "#", Character.valueOf('X'), Block.mushroomBrown, Character.valueOf('Y'), Block.mushroomRed, Character.valueOf('#'), Item.bowlEmpty}); + var1.addRecipe(new ItemStack(Item.bowlSoup), new Object[]{"Y", "X", "#", Character.valueOf('X'), Block.mushroomRed, Character.valueOf('Y'), Block.mushroomBrown, Character.valueOf('#'), Item.bowlEmpty}); + } +} diff --git a/source/net/minecraft/src/RecipesIngots.java b/source/net/minecraft/src/RecipesIngots.java new file mode 100644 index 0000000..22802d6 --- /dev/null +++ b/source/net/minecraft/src/RecipesIngots.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class RecipesIngots { + private Object[][] recipeItems = new Object[][]{{Block.blockGold, Item.ingotGold}, {Block.blockSteel, Item.ingotIron}, {Block.blockDiamond, Item.diamond}}; + + public void addRecipes(CraftingManager var1) { + for(int var2 = 0; var2 < this.recipeItems.length; ++var2) { + Block var3 = (Block)this.recipeItems[var2][0]; + Item var4 = (Item)this.recipeItems[var2][1]; + var1.addRecipe(new ItemStack(var3), new Object[]{"###", "###", "###", Character.valueOf('#'), var4}); + var1.addRecipe(new ItemStack(var4, 9), new Object[]{"#", Character.valueOf('#'), var3}); + } + + } +} diff --git a/source/net/minecraft/src/RecipesTools.java b/source/net/minecraft/src/RecipesTools.java new file mode 100644 index 0000000..d011907 --- /dev/null +++ b/source/net/minecraft/src/RecipesTools.java @@ -0,0 +1,18 @@ +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.pickaxeSteel, Item.pickaxeDiamond, Item.pickaxeGold}, {Item.shovelWood, Item.shovelStone, Item.shovel, Item.shovelDiamond, Item.shovelGold}, {Item.axeWood, Item.axeStone, Item.axeSteel, Item.axeDiamond, Item.axeGold}, {Item.hoeWood, Item.hoeStone, Item.hoeSteel, 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}); + } + } + + } +} diff --git a/source/net/minecraft/src/RecipesWeapons.java b/source/net/minecraft/src/RecipesWeapons.java new file mode 100644 index 0000000..34d76c0 --- /dev/null +++ b/source/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.swordSteel, Item.swordDiamond, Item.swordGold}}; + + public void addRecipe(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.ingotIron, Character.valueOf('#'), Item.stick}); + } +} diff --git a/source/net/minecraft/src/Render.java b/source/net/minecraft/src/Render.java new file mode 100644 index 0000000..df43848 --- /dev/null +++ b/source/net/minecraft/src/Render.java @@ -0,0 +1,224 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public abstract class Render { + protected RenderManager renderManager; + private ModelBase modelBase = new ModelBiped(); + private RenderBlocks renderBlocksVar = 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) { + RenderEngine var2 = this.renderManager.renderEngine; + var2.bindTexture(var2.getTexture(var1)); + } + + protected void loadDownloadableImageTexture(String var1, String var2) { + RenderEngine var3 = this.renderManager.renderEngine; + var3.bindTexture(var3.getTextureForDownloadableImage(var1, var2)); + } + + private void renderEntityOnFire(Entity var1, double var2, double var4, double var6, float var8) { + GL11.glDisable(GL11.GL_LIGHTING); + int var9 = Block.fire.blockIndexInTexture; + int var10 = (var9 & 15) << 4; + int var11 = var9 & 240; + float var12 = (float)var10 / 256.0F; + float var13 = ((float)var10 + 15.99F) / 256.0F; + float var14 = (float)var11 / 256.0F; + float var15 = ((float)var11 + 15.99F) / 256.0F; + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + float var16 = var1.width * 1.4F; + GL11.glScalef(var16, var16, var16); + this.loadTexture("/terrain.png"); + Tessellator var17 = Tessellator.instance; + float var18 = 1.0F; + float var19 = 0.5F; + float var20 = 0.0F; + float var21 = var1.height / var1.width; + GL11.glRotatef(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, 0.0F, 0.4F + (float)((int)var21) * 0.02F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var17.startDrawingQuads(); + + while(var21 > 0.0F) { + var17.addVertexWithUV((double)(var18 - var19), (double)(0.0F - var20), 0.0D, (double)var13, (double)var15); + var17.addVertexWithUV((double)(0.0F - var19), (double)(0.0F - var20), 0.0D, (double)var12, (double)var15); + var17.addVertexWithUV((double)(0.0F - var19), (double)(1.4F - var20), 0.0D, (double)var12, (double)var14); + var17.addVertexWithUV((double)(var18 - var19), (double)(1.4F - var20), 0.0D, (double)var13, (double)var14); + --var21; + --var20; + var18 *= 0.9F; + GL11.glTranslatef(0.0F, 0.0F, -0.04F); + } + + var17.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); + RenderEngine var10 = this.renderManager.renderEngine; + var10.bindTexture(var10.getTexture("%%/shadow.png")); + World var11 = this.getWorldFromRenderManager(); + GL11.glDepthMask(false); + float var12 = this.shadowSize; + double var13 = var1.lastTickPosX + (var1.posX - var1.lastTickPosX) * (double)var9; + double var15 = var1.lastTickPosY + (var1.posY - var1.lastTickPosY) * (double)var9; + double var17 = var1.lastTickPosZ + (var1.posZ - var1.lastTickPosZ) * (double)var9; + int var19 = MathHelper.floor_double(var13 - (double)var12); + int var20 = MathHelper.floor_double(var13 + (double)var12); + int var21 = MathHelper.floor_double(var15 - (double)var12); + int var22 = MathHelper.floor_double(var15); + int var23 = MathHelper.floor_double(var17 - (double)var12); + int var24 = MathHelper.floor_double(var17 + (double)var12); + double var25 = var2 - var13; + double var27 = var4 - var15; + double var29 = var6 - var17; + Tessellator var31 = Tessellator.instance; + var31.startDrawingQuads(); + + for(int var32 = var19; var32 <= var20; ++var32) { + for(int var33 = var21; var33 <= var22; ++var33) { + for(int var34 = var23; var34 <= var24; ++var34) { + int var35 = var11.getBlockId(var32, var33 - 1, var34); + if(var35 > 0 && var11.getBlockLightValue(var32, var33, var34) > 3) { + this.renderShadowOnBlock(Block.blocksList[var35], var2, var4, var6, var32, var33, var34, var8, var12, var25, var27, var29); + } + } + } + } + + var31.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().getBrightness(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.minX + var13; + double var24 = (double)var8 + var1.maxX + var13; + double var26 = (double)var9 + var1.minY + var15 + 1.0D / 64.0D; + double var28 = (double)var10 + var1.minZ + var17; + double var30 = (double)var10 + var1.maxZ + 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.setTranslationD(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.setTranslationD(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) { + 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.fire > 0) { + this.renderEntityOnFire(var1, var2, var4, var6, var9); + } + + } +} diff --git a/source/net/minecraft/src/RenderArrow.java b/source/net/minecraft/src/RenderArrow.java new file mode 100644 index 0000000..6a50043 --- /dev/null +++ b/source/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 a(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.a((EntityArrow)var1, var2, var4, var6, var8, var9); + } +} diff --git a/source/net/minecraft/src/RenderBlocks.java b/source/net/minecraft/src/RenderBlocks.java new file mode 100644 index 0000000..2c17d6d --- /dev/null +++ b/source/net/minecraft/src/RenderBlocks.java @@ -0,0 +1,1401 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderBlocks { + private IBlockAccess blockAccess; + private int overrideBlockTexture = -1; + private boolean flipTexture = false; + private boolean renderAllFaces = false; + + public RenderBlocks(IBlockAccess var1) { + this.blockAccess = var1; + } + + public RenderBlocks() { + } + + public void renderBlockUsingTexture(Block var1, int var2, int var3, int var4, int var5) { + this.overrideBlockTexture = var5; + this.renderBlockByRenderType(var1, var2, var3, var4); + this.overrideBlockTexture = -1; + } + + public boolean renderBlockByRenderType(Block var1, int var2, int var3, int var4) { + int var5 = var1.getRenderType(); + var1.setBlockBoundsBasedOnState(this.blockAccess, var2, var3, var4); + return var5 == 0 ? this.renderStandardBlock(var1, var2, var3, var4) : (var5 == 4 ? this.renderBlockFluids(var1, var2, var3, var4) : (var5 == 1 ? this.renderBlockReed(var1, var2, var3, var4) : (var5 == 6 ? this.renderBlockCrops(var1, var2, var3, var4) : (var5 == 2 ? this.renderBlockTorch(var1, var2, var3, var4) : (var5 == 3 ? this.renderBlockFire(var1, var2, var3, var4) : (var5 == 5 ? this.renderBlockGears(var1, var2, var3, var4) : (var5 == 8 ? this.renderBlockLadder(var1, var2, var3, var4) : (var5 == 7 ? this.renderBlockDoor(var1, var2, var3, var4) : (var5 == 9 ? this.renderBlockMinecartTrack(var1, var2, var3, var4) : (var5 == 10 ? this.renderBlockStairs(var1, var2, var3, var4) : (var5 == 11 ? this.renderBlockFence(var1, var2, var3, var4) : false))))))))))); + } + + public boolean renderBlockTorch(Block var1, int var2, int var3, int var4) { + int var5 = this.blockAccess.getBlockMetadata(var2, var3, var4); + Tessellator var6 = Tessellator.instance; + float var7 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + if(Block.lightValue[var1.blockID] > 0) { + var7 = 1.0F; + } + + var6.setColorOpaque_F(var7, var7, var7); + double var8 = (double)0.4F; + double var10 = 0.5D - var8; + double var12 = (double)0.2F; + if(var5 == 1) { + this.renderTorchAtAngle(var1, (double)var2 - var10, (double)var3 + var12, (double)var4, -var8, 0.0D); + } else if(var5 == 2) { + this.renderTorchAtAngle(var1, (double)var2 + var10, (double)var3 + var12, (double)var4, var8, 0.0D); + } else if(var5 == 3) { + this.renderTorchAtAngle(var1, (double)var2, (double)var3 + var12, (double)var4 - var10, 0.0D, -var8); + } else if(var5 == 4) { + this.renderTorchAtAngle(var1, (double)var2, (double)var3 + var12, (double)var4 + var10, 0.0D, var8); + } else { + this.renderTorchAtAngle(var1, (double)var2, (double)var3, (double)var4, 0.0D, 0.0D); + } + + return true; + } + + public boolean renderBlockFire(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + int var6 = var1.getBlockTextureFromSide(0); + if(this.overrideBlockTexture >= 0) { + var6 = this.overrideBlockTexture; + } + + float var7 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + var5.setColorOpaque_F(var7, var7, var7); + int var8 = (var6 & 15) << 4; + int var9 = var6 & 240; + double var10 = (double)((float)var8 / 256.0F); + double var12 = (double)(((float)var8 + 15.99F) / 256.0F); + double var14 = (double)((float)var9 / 256.0F); + double var16 = (double)(((float)var9 + 15.99F) / 256.0F); + float var18 = 1.4F; + double var21; + double var23; + double var25; + double var27; + double var29; + double var31; + double var33; + if(!this.blockAccess.isBlockNormalCube(var2, var3 - 1, var4) && !Block.fire.canBlockCatchFire(this.blockAccess, var2, var3 - 1, var4)) { + float var37 = 0.2F; + float var20 = 1.0F / 16.0F; + if((var2 + var3 + var4 & 1) == 1) { + var10 = (double)((float)var8 / 256.0F); + var12 = (double)(((float)var8 + 15.99F) / 256.0F); + var14 = (double)((float)(var9 + 16) / 256.0F); + var16 = (double)(((float)var9 + 15.99F + 16.0F) / 256.0F); + } + + if((var2 / 2 + var3 / 2 + var4 / 2 & 1) == 1) { + var21 = var12; + var12 = var10; + var10 = var21; + } + + if(Block.fire.canBlockCatchFire(this.blockAccess, var2 - 1, var3, var4)) { + var5.addVertexWithUV((double)((float)var2 + var37), (double)((float)var3 + var18 + var20), (double)(var4 + 1), var12, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 1), var12, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV((double)((float)var2 + var37), (double)((float)var3 + var18 + var20), (double)(var4 + 0), var10, var14); + var5.addVertexWithUV((double)((float)var2 + var37), (double)((float)var3 + var18 + var20), (double)(var4 + 0), var10, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 1), var12, var16); + var5.addVertexWithUV((double)((float)var2 + var37), (double)((float)var3 + var18 + var20), (double)(var4 + 1), var12, var14); + } + + if(Block.fire.canBlockCatchFire(this.blockAccess, var2 + 1, var3, var4)) { + var5.addVertexWithUV((double)((float)(var2 + 1) - var37), (double)((float)var3 + var18 + var20), (double)(var4 + 0), var10, var14); + var5.addVertexWithUV((double)(var2 + 1 - 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV((double)(var2 + 1 - 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 1), var12, var16); + var5.addVertexWithUV((double)((float)(var2 + 1) - var37), (double)((float)var3 + var18 + var20), (double)(var4 + 1), var12, var14); + var5.addVertexWithUV((double)((float)(var2 + 1) - var37), (double)((float)var3 + var18 + var20), (double)(var4 + 1), var12, var14); + var5.addVertexWithUV((double)(var2 + 1 - 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 1), var12, var16); + var5.addVertexWithUV((double)(var2 + 1 - 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV((double)((float)(var2 + 1) - var37), (double)((float)var3 + var18 + var20), (double)(var4 + 0), var10, var14); + } + + if(Block.fire.canBlockCatchFire(this.blockAccess, var2, var3, var4 - 1)) { + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18 + var20), (double)((float)var4 + var37), var12, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var12, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18 + var20), (double)((float)var4 + var37), var10, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18 + var20), (double)((float)var4 + var37), var10, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var12, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18 + var20), (double)((float)var4 + var37), var12, var14); + } + + if(Block.fire.canBlockCatchFire(this.blockAccess, var2, var3, var4 + 1)) { + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18 + var20), (double)((float)(var4 + 1) - var37), var10, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 0) + var20), (double)(var4 + 1 - 0), var10, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 1 - 0), var12, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18 + var20), (double)((float)(var4 + 1) - var37), var12, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18 + var20), (double)((float)(var4 + 1) - var37), var12, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 1 - 0), var12, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 0) + var20), (double)(var4 + 1 - 0), var10, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18 + var20), (double)((float)(var4 + 1) - var37), var10, var14); + } + + if(Block.fire.canBlockCatchFire(this.blockAccess, var2, var3 + 1, var4)) { + var21 = (double)var2 + 0.5D + 0.5D; + var23 = (double)var2 + 0.5D - 0.5D; + var25 = (double)var4 + 0.5D + 0.5D; + var27 = (double)var4 + 0.5D - 0.5D; + var29 = (double)var2 + 0.5D - 0.5D; + var31 = (double)var2 + 0.5D + 0.5D; + var33 = (double)var4 + 0.5D - 0.5D; + double var35 = (double)var4 + 0.5D + 0.5D; + var10 = (double)((float)var8 / 256.0F); + var12 = (double)(((float)var8 + 15.99F) / 256.0F); + var14 = (double)((float)var9 / 256.0F); + var16 = (double)(((float)var9 + 15.99F) / 256.0F); + ++var3; + var18 = -0.2F; + if((var2 + var3 + var4 & 1) == 0) { + var5.addVertexWithUV(var29, (double)((float)var3 + var18), (double)(var4 + 0), var12, var14); + var5.addVertexWithUV(var21, (double)(var3 + 0), (double)(var4 + 0), var12, var16); + var5.addVertexWithUV(var21, (double)(var3 + 0), (double)(var4 + 1), var10, var16); + var5.addVertexWithUV(var29, (double)((float)var3 + var18), (double)(var4 + 1), var10, var14); + var10 = (double)((float)var8 / 256.0F); + var12 = (double)(((float)var8 + 15.99F) / 256.0F); + var14 = (double)((float)(var9 + 16) / 256.0F); + var16 = (double)(((float)var9 + 15.99F + 16.0F) / 256.0F); + var5.addVertexWithUV(var31, (double)((float)var3 + var18), (double)(var4 + 1), var12, var14); + var5.addVertexWithUV(var23, (double)(var3 + 0), (double)(var4 + 1), var12, var16); + var5.addVertexWithUV(var23, (double)(var3 + 0), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV(var31, (double)((float)var3 + var18), (double)(var4 + 0), var10, var14); + } else { + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18), var35, var12, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var27, var12, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var27, var10, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18), var35, var10, var14); + var10 = (double)((float)var8 / 256.0F); + var12 = (double)(((float)var8 + 15.99F) / 256.0F); + var14 = (double)((float)(var9 + 16) / 256.0F); + var16 = (double)(((float)var9 + 15.99F + 16.0F) / 256.0F); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18), var33, var12, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var25, var12, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var25, var10, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18), var33, var10, var14); + } + } + } else { + double var19 = (double)var2 + 0.5D + 0.2D; + var21 = (double)var2 + 0.5D - 0.2D; + var23 = (double)var4 + 0.5D + 0.2D; + var25 = (double)var4 + 0.5D - 0.2D; + var27 = (double)var2 + 0.5D - 0.3D; + var29 = (double)var2 + 0.5D + 0.3D; + var31 = (double)var4 + 0.5D - 0.3D; + var33 = (double)var4 + 0.5D + 0.3D; + var5.addVertexWithUV(var27, (double)((float)var3 + var18), (double)(var4 + 1), var12, var14); + var5.addVertexWithUV(var19, (double)(var3 + 0), (double)(var4 + 1), var12, var16); + var5.addVertexWithUV(var19, (double)(var3 + 0), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV(var27, (double)((float)var3 + var18), (double)(var4 + 0), var10, var14); + var5.addVertexWithUV(var29, (double)((float)var3 + var18), (double)(var4 + 0), var12, var14); + var5.addVertexWithUV(var21, (double)(var3 + 0), (double)(var4 + 0), var12, var16); + var5.addVertexWithUV(var21, (double)(var3 + 0), (double)(var4 + 1), var10, var16); + var5.addVertexWithUV(var29, (double)((float)var3 + var18), (double)(var4 + 1), var10, var14); + var10 = (double)((float)var8 / 256.0F); + var12 = (double)(((float)var8 + 15.99F) / 256.0F); + var14 = (double)((float)(var9 + 16) / 256.0F); + var16 = (double)(((float)var9 + 15.99F + 16.0F) / 256.0F); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18), var33, var12, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var25, var12, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var25, var10, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18), var33, var10, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18), var31, var12, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var23, var12, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var23, var10, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18), var31, var10, var14); + var19 = (double)var2 + 0.5D - 0.5D; + var21 = (double)var2 + 0.5D + 0.5D; + var23 = (double)var4 + 0.5D - 0.5D; + var25 = (double)var4 + 0.5D + 0.5D; + var27 = (double)var2 + 0.5D - 0.4D; + var29 = (double)var2 + 0.5D + 0.4D; + var31 = (double)var4 + 0.5D - 0.4D; + var33 = (double)var4 + 0.5D + 0.4D; + var5.addVertexWithUV(var27, (double)((float)var3 + var18), (double)(var4 + 0), var10, var14); + var5.addVertexWithUV(var19, (double)(var3 + 0), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV(var19, (double)(var3 + 0), (double)(var4 + 1), var12, var16); + var5.addVertexWithUV(var27, (double)((float)var3 + var18), (double)(var4 + 1), var12, var14); + var5.addVertexWithUV(var29, (double)((float)var3 + var18), (double)(var4 + 1), var10, var14); + var5.addVertexWithUV(var21, (double)(var3 + 0), (double)(var4 + 1), var10, var16); + var5.addVertexWithUV(var21, (double)(var3 + 0), (double)(var4 + 0), var12, var16); + var5.addVertexWithUV(var29, (double)((float)var3 + var18), (double)(var4 + 0), var12, var14); + var10 = (double)((float)var8 / 256.0F); + var12 = (double)(((float)var8 + 15.99F) / 256.0F); + var14 = (double)((float)var9 / 256.0F); + var16 = (double)(((float)var9 + 15.99F) / 256.0F); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18), var33, var10, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var25, var10, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var25, var12, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18), var33, var12, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18), var31, var10, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var23, var10, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var23, var12, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18), var31, var12, var14); + } + + return true; + } + + public boolean renderBlockGears(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + int var6 = var1.getBlockTextureFromSide(0); + if(this.overrideBlockTexture >= 0) { + var6 = this.overrideBlockTexture; + } + + float var7 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + var5.setColorOpaque_F(var7, var7, var7); + int var8 = ((var6 & 15) << 4) + 16; + int var9 = (var6 & 15) << 4; + int var10 = var6 & 240; + if((var2 + var3 + var4 & 1) == 1) { + var8 = (var6 & 15) << 4; + var9 = ((var6 & 15) << 4) + 16; + } + + double var11 = (double)((float)var8 / 256.0F); + double var13 = (double)(((float)var8 + 15.99F) / 256.0F); + double var15 = (double)((float)var10 / 256.0F); + double var17 = (double)(((float)var10 + 15.99F) / 256.0F); + double var19 = (double)((float)var9 / 256.0F); + double var21 = (double)(((float)var9 + 15.99F) / 256.0F); + double var23 = (double)((float)var10 / 256.0F); + double var25 = (double)(((float)var10 + 15.99F) / 256.0F); + float var27 = 2.0F / 16.0F; + float var28 = 0.05F; + if(this.blockAccess.isBlockNormalCube(var2 - 1, var3, var4)) { + var5.addVertexWithUV((double)((float)var2 + var28), (double)((float)(var3 + 1) + var27), (double)((float)(var4 + 1) + var27), var11, var15); + var5.addVertexWithUV((double)((float)var2 + var28), (double)((float)(var3 + 0) - var27), (double)((float)(var4 + 1) + var27), var11, var17); + var5.addVertexWithUV((double)((float)var2 + var28), (double)((float)(var3 + 0) - var27), (double)((float)(var4 + 0) - var27), var13, var17); + var5.addVertexWithUV((double)((float)var2 + var28), (double)((float)(var3 + 1) + var27), (double)((float)(var4 + 0) - var27), var13, var15); + } + + if(this.blockAccess.isBlockNormalCube(var2 + 1, var3, var4)) { + var5.addVertexWithUV((double)((float)(var2 + 1) - var28), (double)((float)(var3 + 0) - var27), (double)((float)(var4 + 1) + var27), var13, var17); + var5.addVertexWithUV((double)((float)(var2 + 1) - var28), (double)((float)(var3 + 1) + var27), (double)((float)(var4 + 1) + var27), var13, var15); + var5.addVertexWithUV((double)((float)(var2 + 1) - var28), (double)((float)(var3 + 1) + var27), (double)((float)(var4 + 0) - var27), var11, var15); + var5.addVertexWithUV((double)((float)(var2 + 1) - var28), (double)((float)(var3 + 0) - var27), (double)((float)(var4 + 0) - var27), var11, var17); + } + + if(this.blockAccess.isBlockNormalCube(var2, var3, var4 - 1)) { + var5.addVertexWithUV((double)((float)(var2 + 1) + var27), (double)((float)(var3 + 0) - var27), (double)((float)var4 + var28), var21, var25); + var5.addVertexWithUV((double)((float)(var2 + 1) + var27), (double)((float)(var3 + 1) + var27), (double)((float)var4 + var28), var21, var23); + var5.addVertexWithUV((double)((float)(var2 + 0) - var27), (double)((float)(var3 + 1) + var27), (double)((float)var4 + var28), var19, var23); + var5.addVertexWithUV((double)((float)(var2 + 0) - var27), (double)((float)(var3 + 0) - var27), (double)((float)var4 + var28), var19, var25); + } + + if(this.blockAccess.isBlockNormalCube(var2, var3, var4 + 1)) { + var5.addVertexWithUV((double)((float)(var2 + 1) + var27), (double)((float)(var3 + 1) + var27), (double)((float)(var4 + 1) - var28), var19, var23); + var5.addVertexWithUV((double)((float)(var2 + 1) + var27), (double)((float)(var3 + 0) - var27), (double)((float)(var4 + 1) - var28), var19, var25); + var5.addVertexWithUV((double)((float)(var2 + 0) - var27), (double)((float)(var3 + 0) - var27), (double)((float)(var4 + 1) - var28), var21, var25); + var5.addVertexWithUV((double)((float)(var2 + 0) - var27), (double)((float)(var3 + 1) + var27), (double)((float)(var4 + 1) - var28), var21, var23); + } + + return true; + } + + public boolean renderBlockMinecartTrack(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + int var6 = this.blockAccess.getBlockMetadata(var2, var3, var4); + int var7 = var1.getBlockTextureFromSideAndMetadata(0, var6); + if(this.overrideBlockTexture >= 0) { + var7 = this.overrideBlockTexture; + } + + float var8 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + var5.setColorOpaque_F(var8, var8, var8); + int var9 = (var7 & 15) << 4; + int var10 = var7 & 240; + double var11 = (double)((float)var9 / 256.0F); + double var13 = (double)(((float)var9 + 15.99F) / 256.0F); + double var15 = (double)((float)var10 / 256.0F); + double var17 = (double)(((float)var10 + 15.99F) / 256.0F); + float var19 = 1.0F / 16.0F; + float var20 = (float)(var2 + 1); + float var21 = (float)(var2 + 1); + float var22 = (float)(var2 + 0); + float var23 = (float)(var2 + 0); + float var24 = (float)(var4 + 0); + float var25 = (float)(var4 + 1); + float var26 = (float)(var4 + 1); + float var27 = (float)(var4 + 0); + float var28 = (float)var3 + var19; + float var29 = (float)var3 + var19; + float var30 = (float)var3 + var19; + float var31 = (float)var3 + var19; + if(var6 != 1 && var6 != 2 && var6 != 3 && var6 != 7) { + if(var6 == 8) { + var21 = (float)(var2 + 0); + var20 = var21; + var23 = (float)(var2 + 1); + var22 = var23; + var27 = (float)(var4 + 1); + var24 = var27; + var26 = (float)(var4 + 0); + var25 = var26; + } else if(var6 == 9) { + var23 = (float)(var2 + 0); + var20 = var23; + var22 = (float)(var2 + 1); + var21 = var22; + var25 = (float)(var4 + 0); + var24 = var25; + var27 = (float)(var4 + 1); + var26 = var27; + } + } else { + var23 = (float)(var2 + 1); + var20 = var23; + var22 = (float)(var2 + 0); + var21 = var22; + var25 = (float)(var4 + 1); + var24 = var25; + var27 = (float)(var4 + 0); + var26 = var27; + } + + if(var6 != 2 && var6 != 4) { + if(var6 == 3 || var6 == 5) { + ++var29; + ++var30; + } + } else { + ++var28; + ++var31; + } + + var5.addVertexWithUV((double)var20, (double)var28, (double)var24, var13, var15); + var5.addVertexWithUV((double)var21, (double)var29, (double)var25, var13, var17); + var5.addVertexWithUV((double)var22, (double)var30, (double)var26, var11, var17); + var5.addVertexWithUV((double)var23, (double)var31, (double)var27, var11, var15); + var5.addVertexWithUV((double)var23, (double)var31, (double)var27, var11, var15); + var5.addVertexWithUV((double)var22, (double)var30, (double)var26, var11, var17); + var5.addVertexWithUV((double)var21, (double)var29, (double)var25, var13, var17); + var5.addVertexWithUV((double)var20, (double)var28, (double)var24, var13, var15); + return true; + } + + public boolean renderBlockLadder(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + int var6 = var1.getBlockTextureFromSide(0); + if(this.overrideBlockTexture >= 0) { + var6 = this.overrideBlockTexture; + } + + float var7 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + var5.setColorOpaque_F(var7, var7, var7); + int var8 = (var6 & 15) << 4; + int var9 = var6 & 240; + double var10 = (double)((float)var8 / 256.0F); + double var12 = (double)(((float)var8 + 15.99F) / 256.0F); + double var14 = (double)((float)var9 / 256.0F); + double var16 = (double)(((float)var9 + 15.99F) / 256.0F); + int var18 = this.blockAccess.getBlockMetadata(var2, var3, var4); + float var19 = 0.0F; + float var20 = 0.05F; + if(var18 == 5) { + var5.addVertexWithUV((double)((float)var2 + var20), (double)((float)(var3 + 1) + var19), (double)((float)(var4 + 1) + var19), var10, var14); + var5.addVertexWithUV((double)((float)var2 + var20), (double)((float)(var3 + 0) - var19), (double)((float)(var4 + 1) + var19), var10, var16); + var5.addVertexWithUV((double)((float)var2 + var20), (double)((float)(var3 + 0) - var19), (double)((float)(var4 + 0) - var19), var12, var16); + var5.addVertexWithUV((double)((float)var2 + var20), (double)((float)(var3 + 1) + var19), (double)((float)(var4 + 0) - var19), var12, var14); + } + + if(var18 == 4) { + var5.addVertexWithUV((double)((float)(var2 + 1) - var20), (double)((float)(var3 + 0) - var19), (double)((float)(var4 + 1) + var19), var12, var16); + var5.addVertexWithUV((double)((float)(var2 + 1) - var20), (double)((float)(var3 + 1) + var19), (double)((float)(var4 + 1) + var19), var12, var14); + var5.addVertexWithUV((double)((float)(var2 + 1) - var20), (double)((float)(var3 + 1) + var19), (double)((float)(var4 + 0) - var19), var10, var14); + var5.addVertexWithUV((double)((float)(var2 + 1) - var20), (double)((float)(var3 + 0) - var19), (double)((float)(var4 + 0) - var19), var10, var16); + } + + if(var18 == 3) { + var5.addVertexWithUV((double)((float)(var2 + 1) + var19), (double)((float)(var3 + 0) - var19), (double)((float)var4 + var20), var12, var16); + var5.addVertexWithUV((double)((float)(var2 + 1) + var19), (double)((float)(var3 + 1) + var19), (double)((float)var4 + var20), var12, var14); + var5.addVertexWithUV((double)((float)(var2 + 0) - var19), (double)((float)(var3 + 1) + var19), (double)((float)var4 + var20), var10, var14); + var5.addVertexWithUV((double)((float)(var2 + 0) - var19), (double)((float)(var3 + 0) - var19), (double)((float)var4 + var20), var10, var16); + } + + if(var18 == 2) { + var5.addVertexWithUV((double)((float)(var2 + 1) + var19), (double)((float)(var3 + 1) + var19), (double)((float)(var4 + 1) - var20), var10, var14); + var5.addVertexWithUV((double)((float)(var2 + 1) + var19), (double)((float)(var3 + 0) - var19), (double)((float)(var4 + 1) - var20), var10, var16); + var5.addVertexWithUV((double)((float)(var2 + 0) - var19), (double)((float)(var3 + 0) - var19), (double)((float)(var4 + 1) - var20), var12, var16); + var5.addVertexWithUV((double)((float)(var2 + 0) - var19), (double)((float)(var3 + 1) + var19), (double)((float)(var4 + 1) - var20), var12, var14); + } + + return true; + } + + public boolean renderBlockReed(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + float var6 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + var5.setColorOpaque_F(var6, var6, var6); + this.renderCrossedSquares(var1, this.blockAccess.getBlockMetadata(var2, var3, var4), (double)var2, (double)var3, (double)var4); + return true; + } + + public boolean renderBlockCrops(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + float var6 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + var5.setColorOpaque_F(var6, var6, var6); + 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) { + Tessellator var12 = Tessellator.instance; + int var13 = var1.getBlockTextureFromSide(0); + if(this.overrideBlockTexture >= 0) { + var13 = this.overrideBlockTexture; + } + + int var14 = (var13 & 15) << 4; + int var15 = var13 & 240; + float var16 = (float)var14 / 256.0F; + float var17 = ((float)var14 + 15.99F) / 256.0F; + float var18 = (float)var15 / 256.0F; + float var19 = ((float)var15 + 15.99F) / 256.0F; + double var20 = (double)var16 + 1.75D / 64.0D; + double var22 = (double)var18 + 6.0D / 256.0D; + double var24 = (double)var16 + 9.0D / 256.0D; + double var26 = (double)var18 + 1.0D / 32.0D; + var2 += 0.5D; + var6 += 0.5D; + double var28 = var2 - 0.5D; + double var30 = var2 + 0.5D; + double var32 = var6 - 0.5D; + double var34 = var6 + 0.5D; + double var36 = 1.0D / 16.0D; + double var38 = 0.625D; + var12.addVertexWithUV(var2 + var8 * (1.0D - var38) - var36, var4 + var38, var6 + var10 * (1.0D - var38) - var36, var20, var22); + var12.addVertexWithUV(var2 + var8 * (1.0D - var38) - var36, var4 + var38, var6 + var10 * (1.0D - var38) + var36, var20, var26); + var12.addVertexWithUV(var2 + var8 * (1.0D - var38) + var36, var4 + var38, var6 + var10 * (1.0D - var38) + var36, var24, var26); + var12.addVertexWithUV(var2 + var8 * (1.0D - var38) + var36, var4 + var38, var6 + var10 * (1.0D - var38) - var36, var24, var22); + var12.addVertexWithUV(var2 - var36, var4 + 1.0D, var32, (double)var16, (double)var18); + var12.addVertexWithUV(var2 - var36 + var8, var4 + 0.0D, var32 + var10, (double)var16, (double)var19); + var12.addVertexWithUV(var2 - var36 + var8, var4 + 0.0D, var34 + var10, (double)var17, (double)var19); + var12.addVertexWithUV(var2 - var36, var4 + 1.0D, var34, (double)var17, (double)var18); + var12.addVertexWithUV(var2 + var36, var4 + 1.0D, var34, (double)var16, (double)var18); + var12.addVertexWithUV(var2 + var8 + var36, var4 + 0.0D, var34 + var10, (double)var16, (double)var19); + var12.addVertexWithUV(var2 + var8 + var36, var4 + 0.0D, var32 + var10, (double)var17, (double)var19); + var12.addVertexWithUV(var2 + var36, var4 + 1.0D, var32, (double)var17, (double)var18); + var12.addVertexWithUV(var28, var4 + 1.0D, var6 + var36, (double)var16, (double)var18); + var12.addVertexWithUV(var28 + var8, var4 + 0.0D, var6 + var36 + var10, (double)var16, (double)var19); + var12.addVertexWithUV(var30 + var8, var4 + 0.0D, var6 + var36 + var10, (double)var17, (double)var19); + var12.addVertexWithUV(var30, var4 + 1.0D, var6 + var36, (double)var17, (double)var18); + var12.addVertexWithUV(var30, var4 + 1.0D, var6 - var36, (double)var16, (double)var18); + var12.addVertexWithUV(var30 + var8, var4 + 0.0D, var6 - var36 + var10, (double)var16, (double)var19); + var12.addVertexWithUV(var28 + var8, var4 + 0.0D, var6 - var36 + var10, (double)var17, (double)var19); + var12.addVertexWithUV(var28, var4 + 1.0D, var6 - var36, (double)var17, (double)var18); + } + + public void renderCrossedSquares(Block var1, int var2, double var3, double var5, double var7) { + Tessellator var9 = Tessellator.instance; + int var10 = var1.getBlockTextureFromSideAndMetadata(0, var2); + if(this.overrideBlockTexture >= 0) { + var10 = this.overrideBlockTexture; + } + + int var11 = (var10 & 15) << 4; + int var12 = var10 & 240; + double var13 = (double)((float)var11 / 256.0F); + double var15 = (double)(((float)var11 + 15.99F) / 256.0F); + double var17 = (double)((float)var12 / 256.0F); + double var19 = (double)(((float)var12 + 15.99F) / 256.0F); + double var21 = var3 + 0.5D - (double)0.45F; + double var23 = var3 + 0.5D + (double)0.45F; + double var25 = var7 + 0.5D - (double)0.45F; + double var27 = var7 + 0.5D + (double)0.45F; + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var13, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var13, var19); + var9.addVertexWithUV(var23, var5 + 0.0D, var27, var15, var19); + var9.addVertexWithUV(var23, var5 + 1.0D, var27, var15, var17); + var9.addVertexWithUV(var23, var5 + 1.0D, var27, var13, var17); + var9.addVertexWithUV(var23, var5 + 0.0D, var27, var13, var19); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var15, var19); + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var15, var17); + var9.addVertexWithUV(var21, var5 + 1.0D, var27, var13, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var27, var13, var19); + var9.addVertexWithUV(var23, var5 + 0.0D, var25, var15, var19); + var9.addVertexWithUV(var23, var5 + 1.0D, var25, var15, var17); + var9.addVertexWithUV(var23, var5 + 1.0D, var25, var13, var17); + var9.addVertexWithUV(var23, var5 + 0.0D, var25, var13, var19); + var9.addVertexWithUV(var21, var5 + 0.0D, var27, var15, var19); + var9.addVertexWithUV(var21, var5 + 1.0D, var27, var15, var17); + } + + public void renderBlockCropsImpl(Block var1, int var2, double var3, double var5, double var7) { + Tessellator var9 = Tessellator.instance; + int var10 = var1.getBlockTextureFromSideAndMetadata(0, var2); + if(this.overrideBlockTexture >= 0) { + var10 = this.overrideBlockTexture; + } + + int var11 = (var10 & 15) << 4; + int var12 = var10 & 240; + double var13 = (double)((float)var11 / 256.0F); + double var15 = (double)(((float)var11 + 15.99F) / 256.0F); + double var17 = (double)((float)var12 / 256.0F); + double var19 = (double)(((float)var12 + 15.99F) / 256.0F); + double var21 = var3 + 0.5D - 0.25D; + double var23 = var3 + 0.5D + 0.25D; + double var25 = var7 + 0.5D - 0.5D; + double var27 = var7 + 0.5D + 0.5D; + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var13, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var13, var19); + var9.addVertexWithUV(var21, var5 + 0.0D, var27, var15, var19); + var9.addVertexWithUV(var21, var5 + 1.0D, var27, var15, var17); + var9.addVertexWithUV(var21, var5 + 1.0D, var27, var13, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var27, var13, var19); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var15, var19); + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var15, var17); + var9.addVertexWithUV(var23, var5 + 1.0D, var27, var13, var17); + var9.addVertexWithUV(var23, var5 + 0.0D, var27, var13, var19); + var9.addVertexWithUV(var23, var5 + 0.0D, var25, var15, var19); + var9.addVertexWithUV(var23, var5 + 1.0D, var25, var15, var17); + var9.addVertexWithUV(var23, var5 + 1.0D, var25, var13, var17); + var9.addVertexWithUV(var23, var5 + 0.0D, var25, var13, var19); + var9.addVertexWithUV(var23, var5 + 0.0D, var27, var15, var19); + var9.addVertexWithUV(var23, var5 + 1.0D, var27, var15, var17); + var21 = var3 + 0.5D - 0.5D; + var23 = var3 + 0.5D + 0.5D; + var25 = var7 + 0.5D - 0.25D; + var27 = var7 + 0.5D + 0.25D; + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var13, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var13, var19); + var9.addVertexWithUV(var23, var5 + 0.0D, var25, var15, var19); + var9.addVertexWithUV(var23, var5 + 1.0D, var25, var15, var17); + var9.addVertexWithUV(var23, var5 + 1.0D, var25, var13, var17); + var9.addVertexWithUV(var23, var5 + 0.0D, var25, var13, var19); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var15, var19); + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var15, var17); + var9.addVertexWithUV(var23, var5 + 1.0D, var27, var13, var17); + var9.addVertexWithUV(var23, var5 + 0.0D, var27, var13, var19); + var9.addVertexWithUV(var21, var5 + 0.0D, var27, var15, var19); + var9.addVertexWithUV(var21, var5 + 1.0D, var27, var15, var17); + var9.addVertexWithUV(var21, var5 + 1.0D, var27, var13, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var27, var13, var19); + var9.addVertexWithUV(var23, var5 + 0.0D, var27, var15, var19); + var9.addVertexWithUV(var23, var5 + 1.0D, var27, var15, var17); + } + + public boolean renderBlockFluids(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + boolean var6 = var1.shouldSideBeRendered(this.blockAccess, var2, var3 + 1, var4, 1); + boolean var7 = var1.shouldSideBeRendered(this.blockAccess, var2, var3 - 1, var4, 0); + boolean[] var8 = 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(!var6 && !var7 && !var8[0] && !var8[1] && !var8[2] && !var8[3]) { + return false; + } else { + boolean var9 = false; + float var10 = 0.5F; + float var11 = 1.0F; + float var12 = 0.8F; + float var13 = 0.6F; + double var14 = 0.0D; + double var16 = 1.0D; + Material var18 = var1.blockMaterial; + int var19 = this.blockAccess.getBlockMetadata(var2, var3, var4); + float var20 = this.getFluidHeight(var2, var3, var4, var18); + float var21 = this.getFluidHeight(var2, var3, var4 + 1, var18); + float var22 = this.getFluidHeight(var2 + 1, var3, var4 + 1, var18); + float var23 = this.getFluidHeight(var2 + 1, var3, var4, var18); + int var24; + int var27; + float var32; + float var33; + float var34; + if(this.renderAllFaces || var6) { + var9 = true; + var24 = var1.getBlockTextureFromSideAndMetadata(1, var19); + float var25 = (float)BlockFluid.getFlowDirection(this.blockAccess, var2, var3, var4, var18); + if(var25 > -999.0F) { + var24 = var1.getBlockTextureFromSideAndMetadata(2, var19); + } + + int var26 = (var24 & 15) << 4; + var27 = var24 & 240; + double var28 = ((double)var26 + 8.0D) / 256.0D; + double var30 = ((double)var27 + 8.0D) / 256.0D; + if(var25 < -999.0F) { + var25 = 0.0F; + } else { + var28 = (double)((float)(var26 + 16) / 256.0F); + var30 = (double)((float)(var27 + 16) / 256.0F); + } + + var32 = MathHelper.sin(var25) * 8.0F / 256.0F; + var33 = MathHelper.cos(var25) * 8.0F / 256.0F; + var34 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + var5.setColorOpaque_F(var11 * var34, var11 * var34, var11 * var34); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var20), (double)(var4 + 0), var28 - (double)var33 - (double)var32, var30 - (double)var33 + (double)var32); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var21), (double)(var4 + 1), var28 - (double)var33 + (double)var32, var30 + (double)var33 + (double)var32); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var22), (double)(var4 + 1), var28 + (double)var33 + (double)var32, var30 + (double)var33 - (double)var32); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var23), (double)(var4 + 0), var28 + (double)var33 - (double)var32, var30 - (double)var33 - (double)var32); + } + + if(this.renderAllFaces || var7) { + float var48 = var1.getBlockBrightness(this.blockAccess, var2, var3 - 1, var4); + var5.setColorOpaque_F(var10 * var48, var10 * var48, var10 * var48); + this.renderBottomFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureFromSide(0)); + var9 = true; + } + + for(var24 = 0; var24 < 4; ++var24) { + int var49 = var2; + var27 = var4; + if(var24 == 0) { + var27 = var4 - 1; + } + + if(var24 == 1) { + ++var27; + } + + if(var24 == 2) { + var49 = var2 - 1; + } + + if(var24 == 3) { + ++var49; + } + + int var50 = var1.getBlockTextureFromSideAndMetadata(var24 + 2, var19); + int var29 = (var50 & 15) << 4; + int var51 = var50 & 240; + if(this.renderAllFaces || var8[var24]) { + float var31; + float var35; + float var36; + if(var24 == 0) { + var31 = var20; + var32 = var23; + var33 = (float)var2; + var35 = (float)(var2 + 1); + var34 = (float)var4; + var36 = (float)var4; + } else if(var24 == 1) { + var31 = var22; + var32 = var21; + var33 = (float)(var2 + 1); + var35 = (float)var2; + var34 = (float)(var4 + 1); + var36 = (float)(var4 + 1); + } else if(var24 == 2) { + var31 = var21; + var32 = var20; + var33 = (float)var2; + var35 = (float)var2; + var34 = (float)(var4 + 1); + var36 = (float)var4; + } else { + var31 = var23; + var32 = var22; + var33 = (float)(var2 + 1); + var35 = (float)(var2 + 1); + var34 = (float)var4; + var36 = (float)(var4 + 1); + } + + var9 = true; + double var37 = (double)((float)(var29 + 0) / 256.0F); + double var39 = ((double)(var29 + 16) - 0.01D) / 256.0D; + double var41 = (double)(((float)var51 + (1.0F - var31) * 16.0F) / 256.0F); + double var43 = (double)(((float)var51 + (1.0F - var32) * 16.0F) / 256.0F); + double var45 = ((double)(var51 + 16) - 0.01D) / 256.0D; + float var47 = var1.getBlockBrightness(this.blockAccess, var49, var3, var27); + if(var24 < 2) { + var47 *= var12; + } else { + var47 *= var13; + } + + var5.setColorOpaque_F(var11 * var47, var11 * var47, var11 * var47); + var5.addVertexWithUV((double)var33, (double)((float)var3 + var31), (double)var34, var37, var41); + var5.addVertexWithUV((double)var35, (double)((float)var3 + var32), (double)var36, var39, var43); + var5.addVertexWithUV((double)var35, (double)(var3 + 0), (double)var36, var39, var45); + var5.addVertexWithUV((double)var33, (double)(var3 + 0), (double)var34, var37, var45); + } + } + + var1.minY = var14; + var1.maxY = var16; + return var9; + } + } + + 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.getPercentAir(var12) * 10.0F; + var5 += 10; + } + + var6 += BlockFluid.getPercentAir(var12); + ++var5; + } + } + + return 1.0F - var6 / (float)var5; + } + + public void renderBlockFallingSand(Block var1, World var2, int var3, int var4, int var5) { + float var6 = 0.5F; + float var7 = 1.0F; + float var8 = 0.8F; + float var9 = 0.6F; + Tessellator var10 = Tessellator.instance; + var10.startDrawingQuads(); + float var11 = var1.getBlockBrightness(var2, var3, var4, var5); + float var12 = var1.getBlockBrightness(var2, var3, var4 - 1, var5); + if(var12 < var11) { + var12 = var11; + } + + var10.setColorOpaque_F(var6 * var12, var6 * var12, var6 * var12); + this.renderBottomFace(var1, -0.5D, -0.5D, -0.5D, var1.getBlockTextureFromSide(0)); + var12 = var1.getBlockBrightness(var2, var3, var4 + 1, var5); + if(var12 < var11) { + var12 = var11; + } + + var10.setColorOpaque_F(var7 * var12, var7 * var12, var7 * var12); + this.renderTopFace(var1, -0.5D, -0.5D, -0.5D, var1.getBlockTextureFromSide(1)); + var12 = var1.getBlockBrightness(var2, var3, var4, var5 - 1); + if(var12 < var11) { + var12 = var11; + } + + var10.setColorOpaque_F(var8 * var12, var8 * var12, var8 * var12); + this.renderEastFace(var1, -0.5D, -0.5D, -0.5D, var1.getBlockTextureFromSide(2)); + var12 = var1.getBlockBrightness(var2, var3, var4, var5 + 1); + if(var12 < var11) { + var12 = var11; + } + + var10.setColorOpaque_F(var8 * var12, var8 * var12, var8 * var12); + this.renderWestFace(var1, -0.5D, -0.5D, -0.5D, var1.getBlockTextureFromSide(3)); + var12 = var1.getBlockBrightness(var2, var3 - 1, var4, var5); + if(var12 < var11) { + var12 = var11; + } + + var10.setColorOpaque_F(var9 * var12, var9 * var12, var9 * var12); + this.renderNorthFace(var1, -0.5D, -0.5D, -0.5D, var1.getBlockTextureFromSide(4)); + var12 = var1.getBlockBrightness(var2, var3 + 1, var4, var5); + if(var12 < var11) { + var12 = var11; + } + + var10.setColorOpaque_F(var9 * var12, var9 * var12, var9 * var12); + this.renderSouthFace(var1, -0.5D, -0.5D, -0.5D, var1.getBlockTextureFromSide(5)); + var10.draw(); + } + + public boolean renderStandardBlock(Block var1, int var2, int var3, int var4) { + int var5 = var1.getRenderColor(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; + return this.renderStandardBlockWithColorMultiplier(var1, var2, var3, var4, var6, var7, var8); + } + + public boolean renderStandardBlockWithColorMultiplier(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 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + float var27; + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3 - 1, var4, 0)) { + var27 = var1.getBlockBrightness(this.blockAccess, var2, var3 - 1, var4); + if(Block.lightValue[var1.blockID] > 0) { + var27 = 1.0F; + } + + var8.setColorOpaque_F(var14 * var27, var18 * var27, var22 * var27); + this.renderBottomFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 0)); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3 + 1, var4, 1)) { + var27 = var1.getBlockBrightness(this.blockAccess, var2, var3 + 1, var4); + if(var1.maxY != 1.0D && !var1.blockMaterial.getIsLiquid()) { + var27 = var26; + } + + if(Block.lightValue[var1.blockID] > 0) { + var27 = 1.0F; + } + + var8.setColorOpaque_F(var15 * var27, var19 * var27, var23 * var27); + this.renderTopFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 1)); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 - 1, 2)) { + var27 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4 - 1); + if(var1.minZ > 0.0D) { + var27 = var26; + } + + if(Block.lightValue[var1.blockID] > 0) { + var27 = 1.0F; + } + + var8.setColorOpaque_F(var16 * var27, var20 * var27, var24 * var27); + this.renderEastFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 2)); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 + 1, 3)) { + var27 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4 + 1); + if(var1.maxZ < 1.0D) { + var27 = var26; + } + + if(Block.lightValue[var1.blockID] > 0) { + var27 = 1.0F; + } + + var8.setColorOpaque_F(var16 * var27, var20 * var27, var24 * var27); + this.renderWestFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 3)); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2 - 1, var3, var4, 4)) { + var27 = var1.getBlockBrightness(this.blockAccess, var2 - 1, var3, var4); + if(var1.minX > 0.0D) { + var27 = var26; + } + + if(Block.lightValue[var1.blockID] > 0) { + var27 = 1.0F; + } + + var8.setColorOpaque_F(var17 * var27, var21 * var27, var25 * var27); + this.renderNorthFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 4)); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2 + 1, var3, var4, 5)) { + var27 = var1.getBlockBrightness(this.blockAccess, var2 + 1, var3, var4); + if(var1.maxX < 1.0D) { + var27 = var26; + } + + if(Block.lightValue[var1.blockID] > 0) { + var27 = 1.0F; + } + + var8.setColorOpaque_F(var17 * var27, var21 * var27, var25 * var27); + this.renderSouthFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 5)); + var9 = true; + } + + return var9; + } + + public boolean renderBlockFence(Block var1, int var2, int var3, int var4) { + boolean var5 = false; + float var6 = 6.0F / 16.0F; + float var7 = 10.0F / 16.0F; + var1.setBlockBounds(var6, 0.0F, var6, var7, 1.0F, var7); + this.renderStandardBlock(var1, var2, var3, var4); + boolean var8 = false; + boolean var9 = false; + if(this.blockAccess.getBlockId(var2 - 1, var3, var4) == var1.blockID || this.blockAccess.getBlockId(var2 + 1, var3, var4) == var1.blockID) { + var8 = true; + } + + if(this.blockAccess.getBlockId(var2, var3, var4 - 1) == var1.blockID || this.blockAccess.getBlockId(var2, var3, var4 + 1) == var1.blockID) { + var9 = true; + } + + if(!var8 && !var9) { + var8 = true; + } + + var6 = 7.0F / 16.0F; + var7 = 9.0F / 16.0F; + float var10 = 12.0F / 16.0F; + float var11 = 15.0F / 16.0F; + if(var8) { + var1.setBlockBounds(0.0F, var10, var6, 1.0F, var11, var7); + this.renderStandardBlock(var1, var2, var3, var4); + } + + if(var9) { + var1.setBlockBounds(var6, var10, 0.0F, var7, var11, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + } + + var10 = 6.0F / 16.0F; + var11 = 9.0F / 16.0F; + if(var8) { + var1.setBlockBounds(0.0F, var10, var6, 1.0F, var11, var7); + this.renderStandardBlock(var1, var2, var3, var4); + } + + if(var9) { + var1.setBlockBounds(var6, var10, 0.0F, var7, var11, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + } + + var1.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + return var5; + } + + public boolean renderBlockStairs(Block var1, int var2, int var3, int var4) { + boolean var5 = false; + int var6 = this.blockAccess.getBlockMetadata(var2, var3, var4); + if(var6 == 0) { + var1.setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 0.5F, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + var1.setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + } else if(var6 == 1) { + var1.setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 1.0F, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + var1.setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + } else if(var6 == 2) { + var1.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 0.5F); + this.renderStandardBlock(var1, var2, var3, var4); + var1.setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 1.0F, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + } else if(var6 == 3) { + var1.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.5F); + this.renderStandardBlock(var1, var2, var3, var4); + var1.setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 0.5F, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + } + + var1.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + return var5; + } + + public boolean renderBlockDoor(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + BlockDoor var6 = (BlockDoor)var1; + boolean var7 = false; + float var8 = 0.5F; + float var9 = 1.0F; + float var10 = 0.8F; + float var11 = 0.6F; + float var12 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + float var13 = var1.getBlockBrightness(this.blockAccess, var2, var3 - 1, var4); + if(var6.minY > 0.0D) { + var13 = var12; + } + + if(Block.lightValue[var1.blockID] > 0) { + var13 = 1.0F; + } + + var5.setColorOpaque_F(var8 * var13, var8 * var13, var8 * var13); + this.renderBottomFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 0)); + var7 = true; + var13 = var1.getBlockBrightness(this.blockAccess, var2, var3 + 1, var4); + if(var6.maxY < 1.0D) { + var13 = var12; + } + + if(Block.lightValue[var1.blockID] > 0) { + var13 = 1.0F; + } + + var5.setColorOpaque_F(var9 * var13, var9 * var13, var9 * var13); + this.renderTopFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 1)); + var7 = true; + var13 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4 - 1); + if(var6.minZ > 0.0D) { + var13 = var12; + } + + if(Block.lightValue[var1.blockID] > 0) { + var13 = 1.0F; + } + + var5.setColorOpaque_F(var10 * var13, var10 * var13, var10 * var13); + int var14 = var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 2); + if(var14 < 0) { + this.flipTexture = true; + var14 = -var14; + } + + this.renderEastFace(var1, (double)var2, (double)var3, (double)var4, var14); + var7 = true; + this.flipTexture = false; + var13 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4 + 1); + if(var6.maxZ < 1.0D) { + var13 = var12; + } + + if(Block.lightValue[var1.blockID] > 0) { + var13 = 1.0F; + } + + var5.setColorOpaque_F(var10 * var13, var10 * var13, var10 * var13); + var14 = var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 3); + if(var14 < 0) { + this.flipTexture = true; + var14 = -var14; + } + + this.renderWestFace(var1, (double)var2, (double)var3, (double)var4, var14); + var7 = true; + this.flipTexture = false; + var13 = var1.getBlockBrightness(this.blockAccess, var2 - 1, var3, var4); + if(var6.minX > 0.0D) { + var13 = var12; + } + + if(Block.lightValue[var1.blockID] > 0) { + var13 = 1.0F; + } + + var5.setColorOpaque_F(var11 * var13, var11 * var13, var11 * var13); + var14 = var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 4); + if(var14 < 0) { + this.flipTexture = true; + var14 = -var14; + } + + this.renderNorthFace(var1, (double)var2, (double)var3, (double)var4, var14); + var7 = true; + this.flipTexture = false; + var13 = var1.getBlockBrightness(this.blockAccess, var2 + 1, var3, var4); + if(var6.maxX < 1.0D) { + var13 = var12; + } + + if(Block.lightValue[var1.blockID] > 0) { + var13 = 1.0F; + } + + var5.setColorOpaque_F(var11 * var13, var11 * var13, var11 * var13); + var14 = var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 5); + if(var14 < 0) { + this.flipTexture = true; + var14 = -var14; + } + + this.renderSouthFace(var1, (double)var2, (double)var3, (double)var4, var14); + var7 = true; + this.flipTexture = false; + return var7; + } + + public void renderBottomFace(Block var1, double var2, double var4, double var6, int var8) { + Tessellator var9 = Tessellator.instance; + if(this.overrideBlockTexture >= 0) { + var8 = this.overrideBlockTexture; + } + + int var10 = (var8 & 15) << 4; + int var11 = var8 & 240; + double var12 = ((double)var10 + var1.minX * 16.0D) / 256.0D; + double var14 = ((double)var10 + var1.maxX * 16.0D - 0.01D) / 256.0D; + double var16 = ((double)var11 + var1.minZ * 16.0D) / 256.0D; + double var18 = ((double)var11 + var1.maxZ * 16.0D - 0.01D) / 256.0D; + if(var1.minX < 0.0D || var1.maxX > 1.0D) { + var12 = (double)(((float)var10 + 0.0F) / 256.0F); + var14 = (double)(((float)var10 + 15.99F) / 256.0F); + } + + if(var1.minZ < 0.0D || var1.maxZ > 1.0D) { + var16 = (double)(((float)var11 + 0.0F) / 256.0F); + var18 = (double)(((float)var11 + 15.99F) / 256.0F); + } + + double var20 = var2 + var1.minX; + double var22 = var2 + var1.maxX; + double var24 = var4 + var1.minY; + double var26 = var6 + var1.minZ; + double var28 = var6 + var1.maxZ; + var9.addVertexWithUV(var20, var24, var28, var12, var18); + var9.addVertexWithUV(var20, var24, var26, var12, var16); + var9.addVertexWithUV(var22, var24, var26, var14, var16); + var9.addVertexWithUV(var22, var24, var28, var14, var18); + } + + public void renderTopFace(Block var1, double var2, double var4, double var6, int var8) { + Tessellator var9 = Tessellator.instance; + if(this.overrideBlockTexture >= 0) { + var8 = this.overrideBlockTexture; + } + + int var10 = (var8 & 15) << 4; + int var11 = var8 & 240; + double var12 = ((double)var10 + var1.minX * 16.0D) / 256.0D; + double var14 = ((double)var10 + var1.maxX * 16.0D - 0.01D) / 256.0D; + double var16 = ((double)var11 + var1.minZ * 16.0D) / 256.0D; + double var18 = ((double)var11 + var1.maxZ * 16.0D - 0.01D) / 256.0D; + if(var1.minX < 0.0D || var1.maxX > 1.0D) { + var12 = (double)(((float)var10 + 0.0F) / 256.0F); + var14 = (double)(((float)var10 + 15.99F) / 256.0F); + } + + if(var1.minZ < 0.0D || var1.maxZ > 1.0D) { + var16 = (double)(((float)var11 + 0.0F) / 256.0F); + var18 = (double)(((float)var11 + 15.99F) / 256.0F); + } + + double var20 = var2 + var1.minX; + double var22 = var2 + var1.maxX; + double var24 = var4 + var1.maxY; + double var26 = var6 + var1.minZ; + double var28 = var6 + var1.maxZ; + var9.addVertexWithUV(var22, var24, var28, var14, var18); + var9.addVertexWithUV(var22, var24, var26, var14, var16); + var9.addVertexWithUV(var20, var24, var26, var12, var16); + var9.addVertexWithUV(var20, var24, var28, var12, var18); + } + + public void renderEastFace(Block var1, double var2, double var4, double var6, int var8) { + Tessellator var9 = Tessellator.instance; + if(this.overrideBlockTexture >= 0) { + var8 = this.overrideBlockTexture; + } + + int var10 = (var8 & 15) << 4; + int var11 = var8 & 240; + double var12 = ((double)var10 + var1.minX * 16.0D) / 256.0D; + double var14 = ((double)var10 + var1.maxX * 16.0D - 0.01D) / 256.0D; + double var16 = ((double)var11 + var1.minY * 16.0D) / 256.0D; + double var18 = ((double)var11 + var1.maxY * 16.0D - 0.01D) / 256.0D; + double var20; + if(this.flipTexture) { + var20 = var12; + var12 = var14; + var14 = var20; + } + + if(var1.minX < 0.0D || var1.maxX > 1.0D) { + var12 = (double)(((float)var10 + 0.0F) / 256.0F); + var14 = (double)(((float)var10 + 15.99F) / 256.0F); + } + + if(var1.minY < 0.0D || var1.maxY > 1.0D) { + var16 = (double)(((float)var11 + 0.0F) / 256.0F); + var18 = (double)(((float)var11 + 15.99F) / 256.0F); + } + + var20 = var2 + var1.minX; + double var22 = var2 + var1.maxX; + double var24 = var4 + var1.minY; + double var26 = var4 + var1.maxY; + double var28 = var6 + var1.minZ; + var9.addVertexWithUV(var20, var26, var28, var14, var16); + var9.addVertexWithUV(var22, var26, var28, var12, var16); + var9.addVertexWithUV(var22, var24, var28, var12, var18); + var9.addVertexWithUV(var20, var24, var28, var14, var18); + } + + public void renderWestFace(Block var1, double var2, double var4, double var6, int var8) { + Tessellator var9 = Tessellator.instance; + if(this.overrideBlockTexture >= 0) { + var8 = this.overrideBlockTexture; + } + + int var10 = (var8 & 15) << 4; + int var11 = var8 & 240; + double var12 = ((double)var10 + var1.minX * 16.0D) / 256.0D; + double var14 = ((double)var10 + var1.maxX * 16.0D - 0.01D) / 256.0D; + double var16 = ((double)var11 + var1.minY * 16.0D) / 256.0D; + double var18 = ((double)var11 + var1.maxY * 16.0D - 0.01D) / 256.0D; + double var20; + if(this.flipTexture) { + var20 = var12; + var12 = var14; + var14 = var20; + } + + if(var1.minX < 0.0D || var1.maxX > 1.0D) { + var12 = (double)(((float)var10 + 0.0F) / 256.0F); + var14 = (double)(((float)var10 + 15.99F) / 256.0F); + } + + if(var1.minY < 0.0D || var1.maxY > 1.0D) { + var16 = (double)(((float)var11 + 0.0F) / 256.0F); + var18 = (double)(((float)var11 + 15.99F) / 256.0F); + } + + var20 = var2 + var1.minX; + double var22 = var2 + var1.maxX; + double var24 = var4 + var1.minY; + double var26 = var4 + var1.maxY; + double var28 = var6 + var1.maxZ; + var9.addVertexWithUV(var20, var26, var28, var12, var16); + var9.addVertexWithUV(var20, var24, var28, var12, var18); + var9.addVertexWithUV(var22, var24, var28, var14, var18); + var9.addVertexWithUV(var22, var26, var28, var14, var16); + } + + public void renderNorthFace(Block var1, double var2, double var4, double var6, int var8) { + Tessellator var9 = Tessellator.instance; + if(this.overrideBlockTexture >= 0) { + var8 = this.overrideBlockTexture; + } + + int var10 = (var8 & 15) << 4; + int var11 = var8 & 240; + double var12 = ((double)var10 + var1.minZ * 16.0D) / 256.0D; + double var14 = ((double)var10 + var1.maxZ * 16.0D - 0.01D) / 256.0D; + double var16 = ((double)var11 + var1.minY * 16.0D) / 256.0D; + double var18 = ((double)var11 + var1.maxY * 16.0D - 0.01D) / 256.0D; + double var20; + if(this.flipTexture) { + var20 = var12; + var12 = var14; + var14 = var20; + } + + if(var1.minZ < 0.0D || var1.maxZ > 1.0D) { + var12 = (double)(((float)var10 + 0.0F) / 256.0F); + var14 = (double)(((float)var10 + 15.99F) / 256.0F); + } + + if(var1.minY < 0.0D || var1.maxY > 1.0D) { + var16 = (double)(((float)var11 + 0.0F) / 256.0F); + var18 = (double)(((float)var11 + 15.99F) / 256.0F); + } + + var20 = var2 + var1.minX; + double var22 = var4 + var1.minY; + double var24 = var4 + var1.maxY; + double var26 = var6 + var1.minZ; + double var28 = var6 + var1.maxZ; + var9.addVertexWithUV(var20, var24, var28, var14, var16); + var9.addVertexWithUV(var20, var24, var26, var12, var16); + var9.addVertexWithUV(var20, var22, var26, var12, var18); + var9.addVertexWithUV(var20, var22, var28, var14, var18); + } + + public void renderSouthFace(Block var1, double var2, double var4, double var6, int var8) { + Tessellator var9 = Tessellator.instance; + if(this.overrideBlockTexture >= 0) { + var8 = this.overrideBlockTexture; + } + + int var10 = (var8 & 15) << 4; + int var11 = var8 & 240; + double var12 = ((double)var10 + var1.minZ * 16.0D) / 256.0D; + double var14 = ((double)var10 + var1.maxZ * 16.0D - 0.01D) / 256.0D; + double var16 = ((double)var11 + var1.minY * 16.0D) / 256.0D; + double var18 = ((double)var11 + var1.maxY * 16.0D - 0.01D) / 256.0D; + double var20; + if(this.flipTexture) { + var20 = var12; + var12 = var14; + var14 = var20; + } + + if(var1.minZ < 0.0D || var1.maxZ > 1.0D) { + var12 = (double)(((float)var10 + 0.0F) / 256.0F); + var14 = (double)(((float)var10 + 15.99F) / 256.0F); + } + + if(var1.minY < 0.0D || var1.maxY > 1.0D) { + var16 = (double)(((float)var11 + 0.0F) / 256.0F); + var18 = (double)(((float)var11 + 15.99F) / 256.0F); + } + + var20 = var2 + var1.maxX; + double var22 = var4 + var1.minY; + double var24 = var4 + var1.maxY; + double var26 = var6 + var1.minZ; + double var28 = var6 + var1.maxZ; + var9.addVertexWithUV(var20, var22, var28, var12, var18); + var9.addVertexWithUV(var20, var22, var26, var14, var18); + var9.addVertexWithUV(var20, var24, var26, var14, var16); + var9.addVertexWithUV(var20, var24, var28, var12, var16); + } + + public void renderBlockOnInventory(Block var1) { + byte var2 = -1; + Tessellator var3 = Tessellator.instance; + int var4 = var1.getRenderType(); + if(var4 == 0) { + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + var3.startDrawingQuads(); + var3.setNormal(0.0F, -1.0F, 0.0F); + this.renderBottomFace(var1, 0.0D, 0.0D, 0.0D, var1.getBlockTextureFromSide(0)); + var3.draw(); + var3.startDrawingQuads(); + var3.setNormal(0.0F, 1.0F, 0.0F); + this.renderTopFace(var1, 0.0D, 0.0D, 0.0D, var1.getBlockTextureFromSide(1)); + var3.draw(); + var3.startDrawingQuads(); + var3.setNormal(0.0F, 0.0F, -1.0F); + this.renderEastFace(var1, 0.0D, 0.0D, 0.0D, var1.getBlockTextureFromSide(2)); + var3.draw(); + var3.startDrawingQuads(); + var3.setNormal(0.0F, 0.0F, 1.0F); + this.renderWestFace(var1, 0.0D, 0.0D, 0.0D, var1.getBlockTextureFromSide(3)); + var3.draw(); + var3.startDrawingQuads(); + var3.setNormal(-1.0F, 0.0F, 0.0F); + this.renderNorthFace(var1, 0.0D, 0.0D, 0.0D, var1.getBlockTextureFromSide(4)); + var3.draw(); + var3.startDrawingQuads(); + var3.setNormal(1.0F, 0.0F, 0.0F); + this.renderSouthFace(var1, 0.0D, 0.0D, 0.0D, var1.getBlockTextureFromSide(5)); + var3.draw(); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } else if(var4 == 1) { + var3.startDrawingQuads(); + var3.setNormal(0.0F, -1.0F, 0.0F); + this.renderCrossedSquares(var1, var2, -0.5D, -0.5D, -0.5D); + var3.draw(); + } else if(var4 == 6) { + var3.startDrawingQuads(); + var3.setNormal(0.0F, -1.0F, 0.0F); + this.renderBlockCropsImpl(var1, var2, -0.5D, -0.5D, -0.5D); + var3.draw(); + } else if(var4 == 2) { + var3.startDrawingQuads(); + var3.setNormal(0.0F, -1.0F, 0.0F); + this.renderTorchAtAngle(var1, -0.5D, -0.5D, -0.5D, 0.0D, 0.0D); + var3.draw(); + } else if(var4 != 3 && var4 == 5) { + } + + } +} diff --git a/source/net/minecraft/src/RenderCreeper.java b/source/net/minecraft/src/RenderCreeper.java new file mode 100644 index 0000000..1790664 --- /dev/null +++ b/source/net/minecraft/src/RenderCreeper.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderCreeper extends RenderLiving { + public RenderCreeper() { + super(new ModelCreeper(), 0.5F); + } + + protected void a(EntityCreeper var1, float var2) { + float var4 = var1.setCreeperFlashTime(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 a(EntityCreeper var1, float var2, float var3) { + float var5 = var1.setCreeperFlashTime(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 void preRenderCallback(EntityLiving var1, float var2) { + this.a((EntityCreeper)var1, var2); + } + + protected int getColorMultiplier(EntityLiving var1, float var2, float var3) { + return this.a((EntityCreeper)var1, var2, var3); + } +} diff --git a/source/net/minecraft/src/RenderEngine.java b/source/net/minecraft/src/RenderEngine.java new file mode 100644 index 0000000..eacb516 --- /dev/null +++ b/source/net/minecraft/src/RenderEngine.java @@ -0,0 +1,254 @@ +package net.minecraft.src; + +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import java.awt.image.ImageObserver; +import java.io.IOException; +import java.nio.ByteBuffer; +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 javax.imageio.ImageIO; +import org.lwjgl.opengl.GL11; + +public class RenderEngine { + private HashMap textureMap = new HashMap(); + private HashMap textureContentsMap = new HashMap(); + private IntBuffer singleIntBuffer = GLAllocation.createIntBuffer(1); + private ByteBuffer imageData = GLAllocation.createDirectByteBuffer(262144); + private List textureList = new ArrayList(); + private Map urlToImageDataMap = new HashMap(); + private GameSettings options; + private boolean clampTexture = false; + + public RenderEngine(GameSettings var1) { + this.options = var1; + } + + public int getTexture(String var1) { + Integer var2 = (Integer)this.textureMap.get(var1); + if(var2 != null) { + return var2.intValue(); + } else { + try { + this.singleIntBuffer.clear(); + GLAllocation.generateDisplayLists(this.singleIntBuffer); + int var4 = this.singleIntBuffer.get(0); + if(var1.startsWith("##")) { + this.setupTexture(this.unwrapImageByColumns(ImageIO.read(RenderEngine.class.getResourceAsStream(var1.substring(2)))), var4); + } else if(var1.startsWith("%%")) { + this.clampTexture = true; + this.setupTexture(ImageIO.read(RenderEngine.class.getResourceAsStream(var1.substring(2))), var4); + this.clampTexture = false; + } else { + this.setupTexture(ImageIO.read(RenderEngine.class.getResourceAsStream(var1)), var4); + } + + this.textureMap.put(var1, Integer.valueOf(var4)); + return var4; + } catch (IOException var3) { + throw new RuntimeException("!!"); + } + } + } + + private BufferedImage unwrapImageByColumns(BufferedImage var1) { + int var2 = var1.getWidth() / 16; + BufferedImage var3 = new BufferedImage(16, var1.getHeight() * var2, 2); + Graphics var4 = var3.getGraphics(); + + for(int var5 = 0; var5 < var2; ++var5) { + var4.drawImage(var1, -var5 * 16, var5 * var1.getHeight(), (ImageObserver)null); + } + + var4.dispose(); + return var3; + } + + public int allocateAndSetupTexture(BufferedImage var1) { + this.singleIntBuffer.clear(); + GLAllocation.generateDisplayLists(this.singleIntBuffer); + int var2 = this.singleIntBuffer.get(0); + this.setupTexture(var1, var2); + this.textureContentsMap.put(Integer.valueOf(var2), var1); + return var2; + } + + public void setupTexture(BufferedImage var1, int var2) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, 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(this.clampTexture) { + 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 var3 = var1.getWidth(); + int var4 = var1.getHeight(); + int[] var5 = new int[var3 * var4]; + byte[] var6 = new byte[var3 * var4 * 4]; + var1.getRGB(0, 0, var3, var4, var5, 0, var3); + + for(int var7 = 0; var7 < var5.length; ++var7) { + int var8 = var5[var7] >> 24 & 255; + int var9 = var5[var7] >> 16 & 255; + int var10 = var5[var7] >> 8 & 255; + int var11 = var5[var7] & 255; + if(this.options != null && this.options.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; + } + + var6[var7 * 4 + 0] = (byte)var9; + var6[var7 * 4 + 1] = (byte)var10; + var6[var7 * 4 + 2] = (byte)var11; + var6[var7 * 4 + 3] = (byte)var8; + } + + this.imageData.clear(); + this.imageData.put(var6); + this.imageData.position(0).limit(var6.length); + GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, var3, var4, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)this.imageData); + } + + public void deleteTexture(int var1) { + this.textureContentsMap.remove(Integer.valueOf(var1)); + this.singleIntBuffer.clear(); + this.singleIntBuffer.put(var1); + this.singleIntBuffer.flip(); + GL11.glDeleteTextures(this.singleIntBuffer); + } + + 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 : this.getTexture(var2); + } + + public ThreadDownloadImageData obtainImageData(String var1, ImageBuffer 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 registerTextureFX(TextureFX var1) { + this.textureList.add(var1); + var1.onTick(); + } + + public void updateDynamicTextures() { + int var1; + TextureFX var2; + for(var1 = 0; var1 < this.textureList.size(); ++var1) { + var2 = (TextureFX)this.textureList.get(var1); + var2.anaglyphEnabled = this.options.anaglyph; + var2.onTick(); + this.imageData.clear(); + this.imageData.put(var2.imageData); + this.imageData.position(0).limit(var2.imageData.length); + + for(int var3 = 0; var3 < var2.tileSize; ++var3) { + for(int var4 = 0; var4 < var2.tileSize; ++var4) { + GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, 0, var2.iconIndex % 16 * 16 + var3 * 16, var2.iconIndex / 16 * 16 + var4 * 16, 16, 16, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)this.imageData); + } + } + } + + for(var1 = 0; var1 < this.textureList.size(); ++var1) { + var2 = (TextureFX)this.textureList.get(var1); + if(var2.textureId > 0) { + this.imageData.clear(); + this.imageData.put(var2.imageData); + this.imageData.position(0).limit(var2.imageData.length); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var2.textureId); + GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, 0, 0, 0, 16, 16, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)this.imageData); + } + } + + } + + public void refreshTextures() { + Iterator var1 = this.textureContentsMap.keySet().iterator(); + + BufferedImage var3; + while(var1.hasNext()) { + int var2 = ((Integer)var1.next()).intValue(); + var3 = (BufferedImage)this.textureContentsMap.get(Integer.valueOf(var2)); + this.setupTexture(var3, var2); + } + + ThreadDownloadImageData var6; + for(var1 = this.urlToImageDataMap.values().iterator(); var1.hasNext(); var6.textureSetupComplete = false) { + var6 = (ThreadDownloadImageData)var1.next(); + } + + var1 = this.textureMap.keySet().iterator(); + + while(var1.hasNext()) { + String var7 = (String)var1.next(); + + try { + if(var7.startsWith("##")) { + var3 = this.unwrapImageByColumns(ImageIO.read(RenderEngine.class.getResourceAsStream(var7.substring(2)))); + } else if(var7.startsWith("%%")) { + this.clampTexture = true; + var3 = ImageIO.read(RenderEngine.class.getResourceAsStream(var7.substring(2))); + this.clampTexture = false; + } else { + var3 = ImageIO.read(RenderEngine.class.getResourceAsStream(var7)); + } + + int var4 = ((Integer)this.textureMap.get(var7)).intValue(); + this.setupTexture(var3, var4); + } catch (IOException var5) { + var5.printStackTrace(); + } + } + + } + + public void bindTexture(int var1) { + if(var1 >= 0) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var1); + } + } +} diff --git a/source/net/minecraft/src/RenderEntity.java b/source/net/minecraft/src/RenderEntity.java new file mode 100644 index 0000000..52836e9 --- /dev/null +++ b/source/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/source/net/minecraft/src/RenderFallingSand.java b/source/net/minecraft/src/RenderFallingSand.java new file mode 100644 index 0000000..3f633d1 --- /dev/null +++ b/source/net/minecraft/src/RenderFallingSand.java @@ -0,0 +1,27 @@ +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 a(EntityFallingSand var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + this.loadTexture("/terrain.png"); + Block var10 = Block.blocksList[var1.blockID]; + World var11 = var1.getWorld(); + GL11.glDisable(GL11.GL_LIGHTING); + this.sandRenderBlocks.renderBlockFallingSand(var10, var11, MathHelper.floor_double(var1.posX), MathHelper.floor_double(var1.posY), MathHelper.floor_double(var1.posZ)); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glPopMatrix(); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.a((EntityFallingSand)var1, var2, var4, var6, var8, var9); + } +} diff --git a/source/net/minecraft/src/RenderGiantZombie.java b/source/net/minecraft/src/RenderGiantZombie.java new file mode 100644 index 0000000..b0614da --- /dev/null +++ b/source/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 a(EntityGiant var1, float var2) { + GL11.glScalef(this.scale, this.scale, this.scale); + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + this.a((EntityGiant)var1, var2); + } +} diff --git a/source/net/minecraft/src/RenderGlobal.java b/source/net/minecraft/src/RenderGlobal.java new file mode 100644 index 0000000..2de314c --- /dev/null +++ b/source/net/minecraft/src/RenderGlobal.java @@ -0,0 +1,1083 @@ +package net.minecraft.src; + +import java.nio.IntBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Random; +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 World theWorld; + private 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 int renderDistance = -1; + private int countEntitiesTotal; + private int countEntitiesRendered; + private int countEntitiesHidden; + int[] dummyBuf50k = new int['\uc350']; + IntBuffer occlusionResult = GLAllocation.createIntBuffer(64); + private int renderersLoaded; + private int renderersBeingClipped; + private int renderersBeingOccluded; + private int renderersBeingRendered; + private int renderersSkippingRenderPass; + private List glRenderLists = new ArrayList(); + private RenderList[] allRenderLists = new RenderList[]{new RenderList(), new RenderList(), new RenderList(), new RenderList()}; + int dummyRenderInt = 0; + int unusedGLCallList = GLAllocation.generateDisplayLists(1); + double prevSortX = -9999.0D; + double prevSortY = -9999.0D; + double prevSortZ = -9999.0D; + public float damagePartialTime; + int frustumCheckOffset = 0; + + public RenderGlobal(Minecraft var1, RenderEngine var2) { + this.mc = var1; + this.renderEngine = var2; + byte var3 = 64; + this.glRenderListBase = GLAllocation.generateDisplayLists(var3 * var3 * var3 * 3); + this.occlusionEnabled = var1.getOpenGlCapsChecker().checkARBOcclusion(); + if(this.occlusionEnabled) { + this.occlusionResult.clear(); + this.glOcclusionQueryBase = GLAllocation.createIntBuffer(var3 * var3 * var3); + this.glOcclusionQueryBase.clear(); + this.glOcclusionQueryBase.position(0); + this.glOcclusionQueryBase.limit(var3 * var3 * var3); + 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 var4 = Tessellator.instance; + this.glSkyList = this.starGLCallList + 1; + GL11.glNewList(this.glSkyList, GL11.GL_COMPILE); + byte var6 = 64; + int var7 = 256 / var6 + 2; + float var5 = 16.0F; + + int var8; + int var9; + for(var8 = -var6 * var7; var8 <= var6 * var7; var8 += var6) { + for(var9 = -var6 * var7; var9 <= var6 * var7; var9 += var6) { + var4.startDrawingQuads(); + var4.addVertex((double)(var8 + 0), (double)var5, (double)(var9 + 0)); + var4.addVertex((double)(var8 + var6), (double)var5, (double)(var9 + 0)); + var4.addVertex((double)(var8 + var6), (double)var5, (double)(var9 + var6)); + var4.addVertex((double)(var8 + 0), (double)var5, (double)(var9 + var6)); + var4.draw(); + } + } + + GL11.glEndList(); + this.glSkyList2 = this.starGLCallList + 2; + GL11.glNewList(this.glSkyList2, GL11.GL_COMPILE); + var5 = -16.0F; + var4.startDrawingQuads(); + + for(var8 = -var6 * var7; var8 <= var6 * var7; var8 += var6) { + for(var9 = -var6 * var7; var9 <= var6 * var7; var9 += var6) { + var4.addVertex((double)(var8 + var6), (double)var5, (double)(var9 + 0)); + var4.addVertex((double)(var8 + 0), (double)var5, (double)(var9 + 0)); + var4.addVertex((double)(var8 + 0), (double)var5, (double)(var9 + var6)); + var4.addVertex((double)(var8 + var6), (double)var5, (double)(var9 + var6)); + } + } + + var4.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.25F + var1.nextFloat() * 0.25F); + 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 changeWorld(World 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() { + 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 = 8; + 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(); + + for(var4 = 0; var4 < this.renderChunksWide; ++var4) { + for(int var5 = 0; var5 < this.renderChunksTall; ++var5) { + for(int var6 = 0; var6 < this.renderChunksDeep; ++var6) { + if(this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4] != null) { + this.tileEntities.removeAll(this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4].tileEntityRenderers); + } + + this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4] = new WorldRenderer(this.theWorld, this.tileEntities, var4 * 16, var5 * 16, var6 * 16, 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) { + Entity var7 = this.theWorld.playerEntity; + this.markRenderersForNewPosition(MathHelper.floor_double(var7.posX), MathHelper.floor_double(var7.posY), MathHelper.floor_double(var7.posZ)); + Arrays.sort(this.sortedWorldRenderers, new EntitySorter(var7)); + } + + } + + public void renderEntities(Vec3D var1, ICamera var2, float var3) { + TileEntityRenderer.instance.cacheActiveRenderInfo(this.theWorld, this.renderEngine, this.mc.fontRenderer, this.mc.thePlayer, var3); + RenderManager.instance.cacheActiveRenderInfo(this.theWorld, this.renderEngine, this.mc.fontRenderer, this.mc.thePlayer, this.mc.gameSettings, var3); + this.countEntitiesTotal = 0; + this.countEntitiesRendered = 0; + this.countEntitiesHidden = 0; + Entity var4 = this.theWorld.playerEntity; + 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; + List var5 = this.theWorld.getLoadedEntityList(); + this.countEntitiesTotal = var5.size(); + + int var6; + for(var6 = 0; var6 < var5.size(); ++var6) { + Entity var7 = (Entity)var5.get(var6); + if(var7.isInRangeToRenderVec3D(var1) && var2.isBoundingBoxInFrustum(var7.boundingBox) && (var7 != this.theWorld.playerEntity || this.mc.gameSettings.thirdPersonView)) { + ++this.countEntitiesRendered; + RenderManager.instance.renderEntity(var7, var3); + } + } + + for(var6 = 0; var6 < this.tileEntities.size(); ++var6) { + TileEntityRenderer.instance.renderTileEntity((TileEntity)this.tileEntities.get(var6), var3); + } + + } + + 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(EntityPlayer var1, int var2, double var3) { + if(this.mc.gameSettings.renderDistance != this.renderDistance) { + this.loadRenderers(); + } + + if(var2 == 0) { + this.renderersLoaded = 0; + this.renderersBeingClipped = 0; + this.renderersBeingOccluded = 0; + this.renderersBeingRendered = 0; + this.renderersSkippingRenderPass = 0; + } + + double var5 = 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)); + } + + byte var17 = 0; + int var33; + if(this.occlusionEnabled && !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; + } + + var33 = var17 + this.renderSortedRenderers(var18, var19, var2, var3); + + do { + int var34 = 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.checkOcclusionQueryResult(var34, var19); + GL11.glPushMatrix(); + float var35 = 0.0F; + float var21 = 0.0F; + float var22 = 0.0F; + + for(int var23 = var34; 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 - var5); + float var28 = (float)((double)var26.posYMinus - var7); + float var29 = (float)((double)var26.posZMinus - var9); + float var30 = var27 - var35; + float var31 = var28 - var21; + float var32 = var29 - var22; + if(var30 != 0.0F || var31 != 0.0F || var32 != 0.0F) { + GL11.glTranslatef(var30, var31, var32); + var35 += var30; + var21 += var31; + var22 += var32; + } + + ARBOcclusionQuery.glBeginQueryARB(GL15.GL_SAMPLES_PASSED, this.sortedWorldRenderers[var23].glOcclusionQuery); + this.sortedWorldRenderers[var23].callOcclusionQueryList(); + ARBOcclusionQuery.glEndQueryARB(GL15.GL_SAMPLES_PASSED); + this.sortedWorldRenderers[var23].isWaitingOnOcclusionQuery = true; + } + } + } + } + + GL11.glPopMatrix(); + 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); + var33 += this.renderSortedRenderers(var34, var19, var2, var3); + } while(var19 < this.sortedWorldRenderers.length); + } else { + var33 = var17 + this.renderSortedRenderers(0, this.sortedWorldRenderers.length, var2, var3); + } + + return var33; + } + + 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.sortedWorldRenderers[var7].isVisible) { + int var8 = this.sortedWorldRenderers[var7].getGLCallListForPass(var3); + if(var8 >= 0) { + this.glRenderLists.add(this.sortedWorldRenderers[var7]); + ++var6; + } + } + } + + EntityPlayerSP var19 = this.mc.thePlayer; + 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].reset(); + } + + 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].isRenderedAt(var16.posXMinus, var16.posYMinus, var16.posZMinus)) { + var17 = var18; + } + } + + if(var17 < 0) { + var17 = var14++; + this.allRenderLists[var17].setLocation(var16.posXMinus, var16.posYMinus, var16.posZMinus, var20, var10, var12); + } + + this.allRenderLists[var17].render(var16.getGLCallListForPass(var3)); + } + + this.renderAllRenderLists(var3, var4); + return var6; + } + + public void renderAllRenderLists(int var1, double var2) { + for(int var4 = 0; var4 < this.allRenderLists.length; ++var4) { + this.allRenderLists[var4].render(); + } + + } + + public void updateClouds() { + ++this.cloudTickCounter; + } + + public void renderSky(float var1) { + GL11.glDisable(GL11.GL_TEXTURE_2D); + Vec3D var2 = this.theWorld.getSkyColor(var1); + float var3 = (float)var2.xCoord; + float var4 = (float)var2.yCoord; + float var5 = (float)var2.zCoord; + float var7; + float var8; + if(this.mc.gameSettings.anaglyph) { + float var6 = (var3 * 30.0F + var4 * 59.0F + var5 * 11.0F) / 100.0F; + 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 var12 = Tessellator.instance; + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_FOG); + GL11.glColor3f(var3, var4, var5); + GL11.glCallList(this.glSkyList); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); + GL11.glPushMatrix(); + var7 = 0.0F; + var8 = 0.0F; + float var9 = 0.0F; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef(var7, var8, var9); + GL11.glRotatef(0.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(this.theWorld.getCelestialAngle(var1) * 360.0F, 1.0F, 0.0F, 0.0F); + float var10 = 30.0F; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.renderEngine.getTexture("/terrain/sun.png")); + var12.startDrawingQuads(); + var12.addVertexWithUV((double)(-var10), 100.0D, (double)(-var10), 0.0D, 0.0D); + var12.addVertexWithUV((double)var10, 100.0D, (double)(-var10), 1.0D, 0.0D); + var12.addVertexWithUV((double)var10, 100.0D, (double)var10, 1.0D, 1.0D); + var12.addVertexWithUV((double)(-var10), 100.0D, (double)var10, 0.0D, 1.0D); + var12.draw(); + var10 = 20.0F; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.renderEngine.getTexture("/terrain/moon.png")); + var12.startDrawingQuads(); + var12.addVertexWithUV((double)(-var10), -100.0D, (double)var10, 1.0D, 1.0D); + var12.addVertexWithUV((double)var10, -100.0D, (double)var10, 0.0D, 1.0D); + var12.addVertexWithUV((double)var10, -100.0D, (double)(-var10), 0.0D, 0.0D); + var12.addVertexWithUV((double)(-var10), -100.0D, (double)(-var10), 1.0D, 0.0D); + var12.draw(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + float var11 = this.theWorld.getStarBrightness(var1); + if(var11 > 0.0F) { + GL11.glColor4f(var11, var11, var11, var11); + 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.glColor3f(var3 * 0.2F + 0.04F, var4 * 0.2F + 0.04F, var5 * 0.6F + 0.1F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glCallList(this.glSkyList2); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDepthMask(true); + } + + public void renderClouds(float var1) { + if(this.mc.gameSettings.fancyGraphics) { + this.renderCloudsFancy(var1); + } else { + GL11.glDisable(GL11.GL_CULL_FACE); + float var2 = (float)(this.mc.thePlayer.lastTickPosY + (this.mc.thePlayer.posY - this.mc.thePlayer.lastTickPosY) * (double)var1); + byte var3 = 32; + int var4 = 256 / var3; + Tessellator var5 = Tessellator.instance; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.renderEngine.getTexture("/clouds.png")); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + Vec3D var6 = this.theWorld.getCloudColor(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 var22 = this.theWorld.playerEntity.prevPosX + (this.theWorld.playerEntity.posX - this.theWorld.playerEntity.prevPosX) * (double)var1 + (double)(((float)this.cloudTickCounter + var1) * 0.03F); + double var13 = this.theWorld.playerEntity.prevPosZ + (this.theWorld.playerEntity.posZ - this.theWorld.playerEntity.prevPosZ) * (double)var1; + int var15 = MathHelper.floor_double(var22 / 2048.0D); + int var16 = MathHelper.floor_double(var13 / 2048.0D); + var22 -= (double)(var15 * 2048); + var13 -= (double)(var16 * 2048); + float var17 = 120.0F - var2 + 0.33F; + float var18 = (float)(var22 * (double)var10); + float var19 = (float)(var13 * (double)var10); + var5.startDrawingQuads(); + var5.setColorRGBA_F(var7, var8, var9, 0.8F); + + for(int var20 = -var3 * var4; var20 < var3 * var4; var20 += var3) { + for(int var21 = -var3 * var4; var21 < var3 * var4; var21 += var3) { + var5.addVertexWithUV((double)(var20 + 0), (double)var17, (double)(var21 + var3), (double)((float)(var20 + 0) * var10 + var18), (double)((float)(var21 + var3) * var10 + var19)); + var5.addVertexWithUV((double)(var20 + var3), (double)var17, (double)(var21 + var3), (double)((float)(var20 + var3) * var10 + var18), (double)((float)(var21 + var3) * var10 + var19)); + var5.addVertexWithUV((double)(var20 + var3), (double)var17, (double)(var21 + 0), (double)((float)(var20 + var3) * var10 + var18), (double)((float)(var21 + 0) * var10 + var19)); + var5.addVertexWithUV((double)(var20 + 0), (double)var17, (double)(var21 + 0), (double)((float)(var20 + 0) * var10 + var18), (double)((float)(var21 + 0) * var10 + var19)); + } + } + + var5.draw(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_CULL_FACE); + } + } + + public void renderCloudsFancy(float var1) { + GL11.glDisable(GL11.GL_CULL_FACE); + float var2 = (float)(this.mc.thePlayer.lastTickPosY + (this.mc.thePlayer.posY - this.mc.thePlayer.lastTickPosY) * (double)var1); + Tessellator var3 = Tessellator.instance; + float var4 = 12.0F; + float var5 = 4.0F; + double var6 = (this.theWorld.playerEntity.prevPosX + (this.theWorld.playerEntity.posX - this.theWorld.playerEntity.prevPosX) * (double)var1 + (double)(((float)this.cloudTickCounter + var1) * 0.03F)) / (double)var4; + double var8 = (this.theWorld.playerEntity.prevPosZ + (this.theWorld.playerEntity.posZ - this.theWorld.playerEntity.prevPosZ) * (double)var1) / (double)var4 + (double)0.33F; + float var10 = 108.0F - var2 + 0.33F; + int var11 = MathHelper.floor_double(var6 / 2048.0D); + int var12 = MathHelper.floor_double(var8 / 2048.0D); + var6 -= (double)(var11 * 2048); + var8 -= (double)(var12 * 2048); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.renderEngine.getTexture("/clouds.png")); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + Vec3D var13 = this.theWorld.getCloudColor(var1); + float var14 = (float)var13.xCoord; + float var15 = (float)var13.yCoord; + float var16 = (float)var13.zCoord; + float var17; + float var18; + float var19; + if(this.mc.gameSettings.anaglyph) { + var17 = (var14 * 30.0F + var15 * 59.0F + var16 * 11.0F) / 100.0F; + var18 = (var14 * 30.0F + var15 * 70.0F) / 100.0F; + var19 = (var14 * 30.0F + var16 * 70.0F) / 100.0F; + var14 = var17; + var15 = var18; + var16 = var19; + } + + var17 = (float)(var6 * 0.0D); + var18 = (float)(var8 * 0.0D); + var19 = 0.00390625F; + var17 = (float)MathHelper.floor_double(var6) * var19; + var18 = (float)MathHelper.floor_double(var8) * var19; + float var20 = (float)(var6 - (double)MathHelper.floor_double(var6)); + float var21 = (float)(var8 - (double)MathHelper.floor_double(var8)); + byte var22 = 8; + byte var23 = 3; + float var24 = 1.0F / 1024.0F; + GL11.glScalef(var4, 1.0F, var4); + + for(int var25 = 0; var25 < 2; ++var25) { + if(var25 == 0) { + GL11.glColorMask(false, false, false, false); + } else { + GL11.glColorMask(true, true, true, true); + } + + for(int var26 = -var23 + 1; var26 <= var23; ++var26) { + for(int var27 = -var23 + 1; var27 <= var23; ++var27) { + var3.startDrawingQuads(); + float var28 = (float)(var26 * var22); + float var29 = (float)(var27 * var22); + float var30 = var28 - var20; + float var31 = var29 - var21; + if(var10 > -var5 - 1.0F) { + var3.setColorRGBA_F(var14 * 0.7F, var15 * 0.7F, var16 * 0.7F, 0.8F); + var3.setNormal(0.0F, -1.0F, 0.0F); + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + 0.0F), (double)(var31 + (float)var22), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + 0.0F), (double)(var31 + (float)var22), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + 0.0F), (double)(var31 + 0.0F), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + 0.0F), (double)(var31 + 0.0F), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + } + + if(var10 <= var5 + 1.0F) { + var3.setColorRGBA_F(var14, var15, var16, 0.8F); + var3.setNormal(0.0F, 1.0F, 0.0F); + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + var5 - var24), (double)(var31 + (float)var22), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + var5 - var24), (double)(var31 + (float)var22), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + var5 - var24), (double)(var31 + 0.0F), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + var5 - var24), (double)(var31 + 0.0F), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + } + + var3.setColorRGBA_F(var14 * 0.9F, var15 * 0.9F, var16 * 0.9F, 0.8F); + int var32; + if(var26 > -1) { + var3.setNormal(-1.0F, 0.0F, 0.0F); + + for(var32 = 0; var32 < var22; ++var32) { + var3.addVertexWithUV((double)(var30 + (float)var32 + 0.0F), (double)(var10 + 0.0F), (double)(var31 + (float)var22), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var32 + 0.0F), (double)(var10 + var5), (double)(var31 + (float)var22), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var32 + 0.0F), (double)(var10 + var5), (double)(var31 + 0.0F), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var32 + 0.0F), (double)(var10 + 0.0F), (double)(var31 + 0.0F), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + } + } + + if(var26 <= 1) { + var3.setNormal(1.0F, 0.0F, 0.0F); + + for(var32 = 0; var32 < var22; ++var32) { + var3.addVertexWithUV((double)(var30 + (float)var32 + 1.0F - var24), (double)(var10 + 0.0F), (double)(var31 + (float)var22), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var32 + 1.0F - var24), (double)(var10 + var5), (double)(var31 + (float)var22), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var32 + 1.0F - var24), (double)(var10 + var5), (double)(var31 + 0.0F), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var32 + 1.0F - var24), (double)(var10 + 0.0F), (double)(var31 + 0.0F), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + } + } + + var3.setColorRGBA_F(var14 * 0.8F, var15 * 0.8F, var16 * 0.8F, 0.8F); + if(var27 > -1) { + var3.setNormal(0.0F, 0.0F, -1.0F); + + for(var32 = 0; var32 < var22; ++var32) { + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + var5), (double)(var31 + (float)var32 + 0.0F), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + var5), (double)(var31 + (float)var32 + 0.0F), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + 0.0F), (double)(var31 + (float)var32 + 0.0F), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + 0.0F), (double)(var31 + (float)var32 + 0.0F), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + } + } + + if(var27 <= 1) { + var3.setNormal(0.0F, 0.0F, 1.0F); + + for(var32 = 0; var32 < var22; ++var32) { + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + var5), (double)(var31 + (float)var32 + 1.0F - var24), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + var5), (double)(var31 + (float)var32 + 1.0F - var24), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + 0.0F), (double)(var31 + (float)var32 + 1.0F - var24), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + 0.0F), (double)(var31 + (float)var32 + 1.0F - var24), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + } + } + + 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(EntityPlayer var1, boolean var2) { + Collections.sort(this.worldRenderersToUpdate, new RenderSorter(var1)); + int var3 = this.worldRenderersToUpdate.size() - 1; + int var4 = this.worldRenderersToUpdate.size(); + + for(int var5 = 0; var5 < var4; ++var5) { + WorldRenderer var6 = (WorldRenderer)this.worldRenderersToUpdate.get(var3 - var5); + if(!var2) { + if(var6.distanceToEntitySquared(var1) > 1024.0F) { + if(var6.isInFrustum) { + if(var5 >= 3) { + return false; + } + } else if(var5 >= 1) { + return false; + } + } + } else if(!var6.isInFrustum) { + continue; + } + + var6.updateRenderer(); + this.worldRenderersToUpdate.remove(var6); + var6.needsUpdate = false; + } + + return this.worldRenderersToUpdate.size() == 0; + } + + 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)System.currentTimeMillis() / 100.0F) * 0.2F + 0.4F) * 0.5F); + int var8; + if(var3 == 0) { + if(this.damagePartialTime > 0.0F) { + GL11.glBlendFunc(GL11.GL_DST_COLOR, GL11.GL_SRC_COLOR); + int var7 = this.renderEngine.getTexture("/terrain.png"); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var7); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.5F); + GL11.glPushMatrix(); + var8 = this.theWorld.getBlockId(var2.blockX, var2.blockY, var2.blockZ); + Block var9 = var8 > 0 ? Block.blocksList[var8] : null; + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glPolygonOffset(-3.0F, -3.0F); + GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL); + var6.startDrawingQuads(); + double var10 = var1.lastTickPosX + (var1.posX - var1.lastTickPosX) * (double)var5; + double var12 = var1.lastTickPosY + (var1.posY - var1.lastTickPosY) * (double)var5; + double var14 = var1.lastTickPosZ + (var1.posZ - var1.lastTickPosZ) * (double)var5; + var6.setTranslationD(-var10, -var12, -var14); + var6.disableColor(); + if(var9 == null) { + var9 = Block.stone; + } + + this.globalRenderBlocks.renderBlockUsingTexture(var9, var2.blockX, var2.blockY, var2.blockZ, 240 + (int)(this.damagePartialTime * 10.0F)); + var6.draw(); + var6.setTranslationD(0.0D, 0.0D, 0.0D); + GL11.glPolygonOffset(0.0F, 0.0F); + GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDepthMask(true); + GL11.glPopMatrix(); + } + } else if(var4 != null) { + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + float var16 = MathHelper.sin((float)System.currentTimeMillis() / 100.0F) * 0.2F + 0.8F; + GL11.glColor4f(var16, var16, var16, MathHelper.sin((float)System.currentTimeMillis() / 200.0F) * 0.2F + 0.5F); + var8 = this.renderEngine.getTexture("/terrain.png"); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var8); + int var17 = var2.blockX; + int var18 = var2.blockY; + int var11 = var2.blockZ; + if(var2.sideHit == 0) { + --var18; + } + + if(var2.sideHit == 1) { + ++var18; + } + + if(var2.sideHit == 2) { + --var11; + } + + if(var2.sideHit == 3) { + ++var11; + } + + if(var2.sideHit == 4) { + --var17; + } + + if(var2.sideHit == 5) { + ++var17; + } + } + + GL11.glDisable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + } + + public void drawSelectionBox(EntityPlayer var1, MovingObjectPosition var2, int var3, ItemStack var4, float var5) { + if(var3 == 0 && var2.typeOfHit == 0) { + 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) { + 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.needsUpdate) { + this.worldRenderersToUpdate.add(var20); + } + + var20.markDirty(); + } + } + } + + } + + public void markBlockAndNeighborsNeedsUpdate(int var1, int var2, int var3) { + this.markBlocksForUpdate(var1 - 1, var2 - 1, var3 - 1, var1 + 1, var2 + 1, var3 + 1); + } + + public void markBlockRangeNeedsUpdate(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 clipRenderersByFrustrum(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].updateInFrustrum(var1); + } + } + + ++this.frustumCheckOffset; + } + + public void playSound(String var1, double var2, double var4, double var6, float var8, float var9) { + this.mc.sndManager.playSound(var1, (float)var2, (float)var4, (float)var6, var8, var9); + } + + public void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12) { + double var14 = this.theWorld.playerEntity.posX - var2; + double var16 = this.theWorld.playerEntity.posY - var4; + double var18 = this.theWorld.playerEntity.posZ - var6; + if(var14 * var14 + var16 * var16 + var18 * var18 <= 256.0D) { + if(var1 == "bubble") { + this.mc.effectRenderer.addEffect(new EntityBubbleFX(this.theWorld, var2, var4, var6, var8, var10, var12)); + } else if(var1 == "smoke") { + this.mc.effectRenderer.addEffect(new EntitySmokeFX(this.theWorld, var2, var4, var6)); + } else if(var1 == "explode") { + this.mc.effectRenderer.addEffect(new EntityExplodeFX(this.theWorld, var2, var4, var6, var8, var10, var12)); + } else if(var1 == "flame") { + this.mc.effectRenderer.addEffect(new EntityFlameFX(this.theWorld, var2, var4, var6, var8, var10, var12)); + } else if(var1 == "lava") { + this.mc.effectRenderer.addEffect(new EntityLavaFX(this.theWorld, var2, var4, var6)); + } else if(var1 == "splash") { + this.mc.effectRenderer.addEffect(new EntitySplashFX(this.theWorld, var2, var4, var6, var8, var10, var12)); + } else if(var1 == "largesmoke") { + this.mc.effectRenderer.addEffect(new EntitySmokeFX(this.theWorld, var2, var4, var6, 2.5F)); + } + + } + } + + public void obtainEntitySkin(Entity var1) { + if(var1.skinUrl != null) { + this.renderEngine.obtainImageData(var1.skinUrl, new ImageBufferDownload()); + } + + } + + public void releaseEntitySkin(Entity var1) { + if(var1.skinUrl != null) { + this.renderEngine.releaseImageData(var1.skinUrl); + } + + } + + public void updateAllRenderers() { + for(int var1 = 0; var1 < this.worldRenderers.length; ++var1) { + if(this.worldRenderers[var1].isChunkLit) { + if(!this.worldRenderers[var1].needsUpdate) { + this.worldRenderersToUpdate.add(this.worldRenderers[var1]); + } + + this.worldRenderers[var1].markDirty(); + } + } + + } +} diff --git a/source/net/minecraft/src/RenderHelper.java b/source/net/minecraft/src/RenderHelper.java new file mode 100644 index 0000000..daf49c3 --- /dev/null +++ b/source/net/minecraft/src/RenderHelper.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +import java.nio.FloatBuffer; +import org.lwjgl.opengl.GL11; + +public class RenderHelper { + private static FloatBuffer colorBuffer = GLAllocation.createFloatBuffer(16); + + 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; + Vec3D var3 = Vec3D.createVector((double)0.7F, 1.0D, (double)-0.2F).normalize(); + GL11.glLight(GL11.GL_LIGHT0, GL11.GL_POSITION, setColorBuffer(var3.xCoord, var3.yCoord, var3.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)); + var3 = Vec3D.createVector((double)-0.7F, 1.0D, (double)0.2F).normalize(); + GL11.glLight(GL11.GL_LIGHT1, GL11.GL_POSITION, setColorBuffer(var3.xCoord, var3.yCoord, var3.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; + } +} diff --git a/source/net/minecraft/src/RenderItem.java b/source/net/minecraft/src/RenderItem.java new file mode 100644 index 0000000..bc50e5c --- /dev/null +++ b/source/net/minecraft/src/RenderItem.java @@ -0,0 +1,193 @@ +package net.minecraft.src; + +import java.util.Random; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderItem extends Render { + private RenderBlocks renderBlocks = new RenderBlocks(); + private Random random = new Random(); + + public RenderItem() { + this.shadowSize = 0.15F; + this.shadowOpaque = 12.0F / 16.0F; + } + + public void a(EntityItem var1, double var2, double var4, double var6, float var8, float var9) { + this.random.setSeed(187L); + ItemStack var10 = var1.item; + 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.item.stackSize > 1) { + var13 = 2; + } + + if(var1.item.stackSize > 5) { + var13 = 3; + } + + if(var1.item.stackSize > 20) { + var13 = 4; + } + + GL11.glTranslatef((float)var2, (float)var4 + var11, (float)var6); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + float var16; + float var17; + float var18; + if(var10.itemID < 256 && Block.blocksList[var10.itemID].getRenderType() == 0) { + GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F); + this.loadTexture("/terrain.png"); + float var27 = 0.25F; + if(!Block.blocksList[var10.itemID].renderAsNormalBlock() && var10.itemID != Block.stairSingle.blockID) { + var27 = 0.5F; + } + + GL11.glScalef(var27, var27, var27); + + for(int var28 = 0; var28 < var13; ++var28) { + GL11.glPushMatrix(); + if(var28 > 0) { + var16 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / var27; + var17 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / var27; + var18 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / var27; + GL11.glTranslatef(var16, var17, var18); + } + + this.renderBlocks.renderBlockOnInventory(Block.blocksList[var10.itemID]); + GL11.glPopMatrix(); + } + } else { + GL11.glScalef(0.5F, 0.5F, 0.5F); + int var14 = var10.getIconIndex(); + if(var10.itemID < 256) { + this.loadTexture("/terrain.png"); + } else { + this.loadTexture("/gui/items.png"); + } + + Tessellator var15 = Tessellator.instance; + var16 = (float)(var14 % 16 * 16 + 0) / 256.0F; + var17 = (float)(var14 % 16 * 16 + 16) / 256.0F; + var18 = (float)(var14 / 16 * 16 + 0) / 256.0F; + float var19 = (float)(var14 / 16 * 16 + 16) / 256.0F; + float var20 = 1.0F; + float var21 = 0.5F; + float var22 = 0.25F; + + for(int var23 = 0; var23 < var13; ++var23) { + GL11.glPushMatrix(); + if(var23 > 0) { + float var24 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F; + float var25 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F; + float var26 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F; + GL11.glTranslatef(var24, var25, var26); + } + + GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + var15.startDrawingQuads(); + var15.setNormal(0.0F, 1.0F, 0.0F); + var15.addVertexWithUV((double)(0.0F - var21), (double)(0.0F - var22), 0.0D, (double)var16, (double)var19); + var15.addVertexWithUV((double)(var20 - var21), (double)(0.0F - var22), 0.0D, (double)var17, (double)var19); + var15.addVertexWithUV((double)(var20 - var21), (double)(1.0F - var22), 0.0D, (double)var17, (double)var18); + var15.addVertexWithUV((double)(0.0F - var21), (double)(1.0F - var22), 0.0D, (double)var16, (double)var18); + var15.draw(); + GL11.glPopMatrix(); + } + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } + + public void drawItemIntoGui(FontRenderer var1, RenderEngine var2, ItemStack var3, int var4, int var5) { + if(var3 != null) { + if(var3.itemID < 256 && Block.blocksList[var3.itemID].getRenderType() == 0) { + int var6 = var3.itemID; + var2.bindTexture(var2.getTexture("/terrain.png")); + Block var7 = Block.blocksList[var6]; + GL11.glPushMatrix(); + GL11.glTranslatef((float)(var4 - 2), (float)(var5 + 3), 0.0F); + GL11.glScalef(10.0F, 10.0F, 10.0F); + GL11.glTranslatef(1.0F, 0.5F, 8.0F); + GL11.glRotatef(210.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.renderBlocks.renderBlockOnInventory(var7); + GL11.glPopMatrix(); + } else if(var3.getIconIndex() >= 0) { + GL11.glDisable(GL11.GL_LIGHTING); + if(var3.itemID < 256) { + var2.bindTexture(var2.getTexture("/terrain.png")); + } else { + var2.bindTexture(var2.getTexture("/gui/items.png")); + } + + this.renderTexturedQuad(var4, var5, var3.getIconIndex() % 16 * 16, var3.getIconIndex() / 16 * 16, 16, 16); + GL11.glEnable(GL11.GL_LIGHTING); + } + + } + } + + public void renderItemOverlayIntoGUI(FontRenderer var1, RenderEngine var2, ItemStack var3, int var4, int var5) { + if(var3 != null) { + if(var3.stackSize > 1) { + String var6 = "" + var3.stackSize; + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + var1.drawStringWithShadow(var6, var4 + 19 - 2 - var1.getStringWidth(var6), var5 + 6 + 3, 16777215); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + } + + if(var3.itemDmg > 0) { + int var11 = 13 - var3.itemDmg * 13 / var3.getMaxDamage(); + int var7 = 255 - var3.itemDmg * 255 / var3.getMaxDamage(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_TEXTURE_2D); + Tessellator var8 = Tessellator.instance; + int var9 = 255 - var7 << 16 | var7 << 8; + int var10 = (255 - var7) / 4 << 16 | 16128; + this.renderQuad(var8, var4 + 2, var5 + 13, 13, 2, 0); + this.renderQuad(var8, var4 + 2, var5 + 13, 12, 1, var10); + this.renderQuad(var8, var4 + 2, var5 + 13, var11, 1, var9); + 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 renderTexturedQuad(int var1, int var2, int var3, int var4, int var5, int var6) { + float var7 = 0.0F; + float var8 = 0.00390625F; + float var9 = 0.00390625F; + Tessellator var10 = Tessellator.instance; + var10.startDrawingQuads(); + var10.addVertexWithUV((double)(var1 + 0), (double)(var2 + var6), (double)var7, (double)((float)(var3 + 0) * var8), (double)((float)(var4 + var6) * var9)); + var10.addVertexWithUV((double)(var1 + var5), (double)(var2 + var6), (double)var7, (double)((float)(var3 + var5) * var8), (double)((float)(var4 + var6) * var9)); + var10.addVertexWithUV((double)(var1 + var5), (double)(var2 + 0), (double)var7, (double)((float)(var3 + var5) * var8), (double)((float)(var4 + 0) * var9)); + var10.addVertexWithUV((double)(var1 + 0), (double)(var2 + 0), (double)var7, (double)((float)(var3 + 0) * var8), (double)((float)(var4 + 0) * var9)); + var10.draw(); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.a((EntityItem)var1, var2, var4, var6, var8, var9); + } +} diff --git a/source/net/minecraft/src/RenderList.java b/source/net/minecraft/src/RenderList.java new file mode 100644 index 0000000..4688443 --- /dev/null +++ b/source/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 posX; + private int posY; + private int posZ; + private float playerPosX; + private float playerPosY; + private float playerPosZ; + private IntBuffer buffer = GLAllocation.createIntBuffer(65536); + private boolean render = false; + private boolean isCached = false; + + public void setLocation(int var1, int var2, int var3, double var4, double var6, double var8) { + this.render = true; + this.buffer.clear(); + this.posX = var1; + this.posY = var2; + this.posZ = var3; + this.playerPosX = (float)var4; + this.playerPosY = (float)var6; + this.playerPosZ = (float)var8; + } + + public boolean isRenderedAt(int var1, int var2, int var3) { + return !this.render ? false : var1 == this.posX && var2 == this.posY && var3 == this.posZ; + } + + public void render(int var1) { + this.buffer.put(var1); + if(this.buffer.remaining() == 0) { + this.render(); + } + + } + + public void render() { + if(this.render) { + if(!this.isCached) { + this.buffer.flip(); + this.isCached = true; + } + + if(this.buffer.remaining() > 0) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)this.posX - this.playerPosX, (float)this.posY - this.playerPosY, (float)this.posZ - this.playerPosZ); + GL11.glCallLists(this.buffer); + GL11.glPopMatrix(); + } + + } + } + + public void reset() { + this.render = false; + this.isCached = false; + } +} diff --git a/source/net/minecraft/src/RenderLiving.java b/source/net/minecraft/src/RenderLiving.java new file mode 100644 index 0000000..564dd4c --- /dev/null +++ b/source/net/minecraft/src/RenderLiving.java @@ -0,0 +1,133 @@ +package net.minecraft.src; + +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; + } + + public void a(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_CULL_FACE); + + try { + float var10 = var1.prevRenderYawOffset + (var1.renderYawOffset - var1.prevRenderYawOffset) * var9; + float var11 = var1.prevRotationYaw + (var1.rotationYaw - var1.prevRotationYaw) * var9; + float var12 = var1.prevRotationPitch + (var1.rotationPitch - var1.prevRotationPitch) * var9; + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + float var13 = (float)var1.ticksExisted + var9; + GL11.glRotatef(180.0F - var10, 0.0F, 1.0F, 0.0F); + float var14; + if(var1.deathTime > 0) { + var14 = ((float)var1.deathTime + var9 - 1.0F) / 20.0F * 1.6F; + var14 = MathHelper.sqrt_float(var14); + if(var14 > 1.0F) { + var14 = 1.0F; + } + + GL11.glRotatef(var14 * this.getMaxDeathRotation(var1), 0.0F, 0.0F, 1.0F); + } + + 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(var15 > 1.0F) { + var15 = 1.0F; + } + + this.loadDownloadableImageTexture(var1.skinUrl, var1.getTexture()); + GL11.glEnable(GL11.GL_ALPHA_TEST); + this.mainModel.render(var16, var15, var13, var11 - var10, var12, var14); + + for(int var17 = 0; var17 < 4; ++var17) { + if(this.shouldRenderPass(var1, var17)) { + this.renderPassModel.render(var16, var15, var13, var11 - var10, var12, var14); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + } + } + + float var25 = var1.getEntityBrightness(var9); + int var18 = this.getColorMultiplier(var1, var25, var9); + 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(var25, 0.0F, 0.0F, 0.4F); + this.mainModel.render(var16, var15, var13, var11 - var10, var12, var14); + + for(int var19 = 0; var19 < 4; ++var19) { + if(this.shouldRenderPass(var1, var19)) { + GL11.glColor4f(var25, 0.0F, 0.0F, 0.4F); + this.renderPassModel.render(var16, var15, var13, var11 - var10, var12, var14); + } + } + } + + if((var18 >> 24 & 255) > 0) { + float var26 = (float)(var18 >> 16 & 255) / 255.0F; + float var20 = (float)(var18 >> 8 & 255) / 255.0F; + float var21 = (float)(var18 & 255) / 255.0F; + float var22 = (float)(var18 >> 24 & 255) / 255.0F; + GL11.glColor4f(var26, var20, var21, var22); + this.mainModel.render(var16, var15, var13, var11 - var10, var12, var14); + + for(int var23 = 0; var23 < 4; ++var23) { + if(this.shouldRenderPass(var1, var23)) { + GL11.glColor4f(var26, var20, var21, var22); + this.renderPassModel.render(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 var24) { + var24.printStackTrace(); + } + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glPopMatrix(); + } + + protected boolean shouldRenderPass(EntityLiving var1, int var2) { + return false; + } + + protected float getMaxDeathRotation(EntityLiving var1) { + return 90.0F; + } + + protected int getColorMultiplier(EntityLiving var1, float var2, float var3) { + return 0; + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.a((EntityLiving)var1, var2, var4, var6, var8, var9); + } +} diff --git a/source/net/minecraft/src/RenderManager.java b/source/net/minecraft/src/RenderManager.java new file mode 100644 index 0000000..8d427a4 --- /dev/null +++ b/source/net/minecraft/src/RenderManager.java @@ -0,0 +1,107 @@ +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 World worldObj; + public EntityPlayer player; + public float playerViewY; + public float playerViewX; + public GameSettings options; + public double viewerPosX; + public double viewerPosY; + public double viewerPosZ; + + private RenderManager() { + this.entityRenderMap.put(EntitySpider.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 ModelSheep(), new ModelSheepFur(), 0.7F)); + this.entityRenderMap.put(EntityCreeper.class, new RenderCreeper()); + this.entityRenderMap.put(EntitySkeleton.class, new RenderLiving(new ModelSkeleton(), 0.5F)); + this.entityRenderMap.put(EntityZombie.class, new RenderLiving(new ModelZombie(), 0.5F)); + this.entityRenderMap.put(EntityPlayer.class, new RenderPlayer()); + this.entityRenderMap.put(EntityGiant.class, new RenderGiantZombie(new ModelZombie(), 0.5F, 6.0F)); + this.entityRenderMap.put(EntityLiving.class, new RenderLiving(new ModelBiped(), 0.5F)); + this.entityRenderMap.put(Entity.class, new RenderEntity()); + this.entityRenderMap.put(EntityPainting.class, new RenderPainting()); + this.entityRenderMap.put(EntityArrow.class, new RenderArrow()); + this.entityRenderMap.put(EntityItem.class, new RenderItem()); + this.entityRenderMap.put(EntityTNTPrimed.class, new RenderTNTPrimed()); + this.entityRenderMap.put(EntityFallingSand.class, new RenderFallingSand()); + this.entityRenderMap.put(EntityMinecart.class, new RenderMinecart()); + 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, EntityPlayer var4, GameSettings var5, float var6) { + this.worldObj = var1; + this.renderEngine = var2; + this.options = var5; + this.player = var4; + this.fontRenderer = var3; + this.playerViewY = var4.prevRotationYaw + (var4.rotationYaw - var4.prevRotationYaw) * var6; + this.playerViewX = var4.prevRotationPitch + (var4.rotationPitch - var4.prevRotationPitch) * var6; + this.viewerPosX = var4.lastTickPosX + (var4.posX - var4.lastTickPosX) * (double)var6; + this.viewerPosY = var4.lastTickPosY + (var4.posY - var4.lastTickPosY) * (double)var6; + this.viewerPosZ = var4.lastTickPosZ + (var4.posZ - var4.lastTickPosZ) * (double)var6; + } + + public void renderEntity(Entity var1, float var2) { + 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; + float var10 = var1.getEntityBrightness(var2); + GL11.glColor3f(var10, var10, var10); + 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 = this.getEntityRenderObject(var1); + if(var10 != null) { + var10.doRender(var1, var2, var4, var6, var8, var9); + var10.doRenderShadowAndFire(var1, var2, var4, var6, var8, var9); + } + + } + + 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; + } +} diff --git a/source/net/minecraft/src/RenderMinecart.java b/source/net/minecraft/src/RenderMinecart.java new file mode 100644 index 0000000..a87bf34 --- /dev/null +++ b/source/net/minecraft/src/RenderMinecart.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderMinecart extends Render { + protected ModelBase modelMinecart; + + public RenderMinecart() { + this.shadowSize = 0.5F; + this.modelMinecart = new ModelMinecart(); + } + + public void a(EntityMinecart var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + double var10 = var1.lastTickPosX + (var1.posX - var1.lastTickPosX) * (double)var9; + double var12 = var1.lastTickPosY + (var1.posY - var1.lastTickPosY) * (double)var9; + double var14 = var1.lastTickPosZ + (var1.posZ - var1.lastTickPosZ) * (double)var9; + double var16 = (double)0.3F; + Vec3D var18 = var1.getPos(var10, var12, var14); + float var19 = var1.prevRotationPitch + (var1.rotationPitch - var1.prevRotationPitch) * var9; + if(var18 != null) { + Vec3D var20 = var1.getPosOffset(var10, var12, var14, var16); + Vec3D var21 = var1.getPosOffset(var10, var12, var14, -var16); + if(var20 == null) { + var20 = var18; + } + + if(var21 == null) { + var21 = var18; + } + + var2 += var18.xCoord - var10; + var4 += (var20.yCoord + var21.yCoord) / 2.0D - var12; + var6 += var18.zCoord - var14; + Vec3D var22 = var21.addVector(-var20.xCoord, -var20.yCoord, -var20.zCoord); + if(var22.lengthVector() != 0.0D) { + var22 = var22.normalize(); + var8 = (float)(Math.atan2(var22.zCoord, var22.xCoord) * 180.0D / Math.PI); + var19 = (float)(Math.atan(var22.yCoord) * 73.0D); + } + } + + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + GL11.glRotatef(180.0F - var8, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var19, 0.0F, 0.0F, 1.0F); + float var23 = (float)var1.timeSinceHit - var9; + float var24 = (float)var1.damageTaken - var9; + if(var24 < 0.0F) { + var24 = 0.0F; + } + + if(var23 > 0.0F) { + GL11.glRotatef(MathHelper.sin(var23) * var23 * var24 / 10.0F * (float)var1.forwardDirection, 1.0F, 0.0F, 0.0F); + } + + this.loadTexture("/terrain.png"); + float var25 = 12.0F / 16.0F; + GL11.glScalef(var25, var25, var25); + (new RenderBlocks()).renderBlockOnInventory(Block.chest); + GL11.glScalef(1.0F / var25, 1.0F / var25, 1.0F / var25); + this.loadTexture("/item/cart.png"); + GL11.glScalef(-1.0F, -1.0F, 1.0F); + this.modelMinecart.render(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.a((EntityMinecart)var1, var2, var4, var6, var8, var9); + } +} diff --git a/source/net/minecraft/src/RenderPainting.java b/source/net/minecraft/src/RenderPainting.java new file mode 100644 index 0000000..4545f64 --- /dev/null +++ b/source/net/minecraft/src/RenderPainting.java @@ -0,0 +1,119 @@ +package net.minecraft.src; + +import java.util.Random; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderPainting extends Render { + private Random rand = new Random(); + + public void a(EntityPainting var1, double var2, double var4, double var6, float var8, float var9) { + this.rand.setSeed(187L); + 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.setSizes(var1, var10.sizeX, var10.sizeY, var10.offsetX, var10.offsetY); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } + + private void setSizes(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 = 0.5F; + + for(int var10 = 0; var10 < var2 / 16; ++var10) { + for(int var11 = 0; var11 < var3 / 16; ++var11) { + float var12 = var6 + (float)((var10 + 1) * 16); + float var13 = var6 + (float)(var10 * 16); + float var14 = var7 + (float)((var11 + 1) * 16); + float var15 = var7 + (float)(var11 * 16); + this.getOffset(var1, (var12 + var13) / 2.0F, (var14 + var15) / 2.0F); + float var16 = (float)(var4 + var2 - var10 * 16) / 256.0F; + float var17 = (float)(var4 + var2 - (var10 + 1) * 16) / 256.0F; + float var18 = (float)(var5 + var3 - var11 * 16) / 256.0F; + float var19 = (float)(var5 + var3 - (var11 + 1) * 16) / 256.0F; + float var20 = 12.0F / 16.0F; + float var21 = 13.0F / 16.0F; + float var22 = 0.0F; + float var23 = 1.0F / 16.0F; + float var24 = 12.0F / 16.0F; + float var25 = 13.0F / 16.0F; + float var26 = 0.001953125F; + float var27 = 0.001953125F; + float var28 = 385.0F / 512.0F; + float var29 = 385.0F / 512.0F; + float var30 = 0.0F; + float var31 = 1.0F / 16.0F; + Tessellator var32 = Tessellator.instance; + var32.startDrawingQuads(); + var32.setNormal(0.0F, 0.0F, -1.0F); + var32.addVertexWithUV((double)var12, (double)var15, (double)var8, (double)var17, (double)var18); + var32.addVertexWithUV((double)var13, (double)var15, (double)var8, (double)var16, (double)var18); + var32.addVertexWithUV((double)var13, (double)var14, (double)var8, (double)var16, (double)var19); + var32.addVertexWithUV((double)var12, (double)var14, (double)var8, (double)var17, (double)var19); + var32.setNormal(0.0F, 0.0F, 1.0F); + var32.addVertexWithUV((double)var12, (double)var14, (double)var9, (double)var20, (double)var22); + var32.addVertexWithUV((double)var13, (double)var14, (double)var9, (double)var21, (double)var22); + var32.addVertexWithUV((double)var13, (double)var15, (double)var9, (double)var21, (double)var23); + var32.addVertexWithUV((double)var12, (double)var15, (double)var9, (double)var20, (double)var23); + var32.setNormal(0.0F, -1.0F, 0.0F); + var32.addVertexWithUV((double)var12, (double)var14, (double)var8, (double)var24, (double)var26); + var32.addVertexWithUV((double)var13, (double)var14, (double)var8, (double)var25, (double)var26); + var32.addVertexWithUV((double)var13, (double)var14, (double)var9, (double)var25, (double)var27); + var32.addVertexWithUV((double)var12, (double)var14, (double)var9, (double)var24, (double)var27); + var32.setNormal(0.0F, 1.0F, 0.0F); + var32.addVertexWithUV((double)var12, (double)var15, (double)var9, (double)var24, (double)var26); + var32.addVertexWithUV((double)var13, (double)var15, (double)var9, (double)var25, (double)var26); + var32.addVertexWithUV((double)var13, (double)var15, (double)var8, (double)var25, (double)var27); + var32.addVertexWithUV((double)var12, (double)var15, (double)var8, (double)var24, (double)var27); + var32.setNormal(-1.0F, 0.0F, 0.0F); + var32.addVertexWithUV((double)var12, (double)var14, (double)var9, (double)var29, (double)var30); + var32.addVertexWithUV((double)var12, (double)var15, (double)var9, (double)var29, (double)var31); + var32.addVertexWithUV((double)var12, (double)var15, (double)var8, (double)var28, (double)var31); + var32.addVertexWithUV((double)var12, (double)var14, (double)var8, (double)var28, (double)var30); + var32.setNormal(1.0F, 0.0F, 0.0F); + var32.addVertexWithUV((double)var13, (double)var14, (double)var8, (double)var29, (double)var30); + var32.addVertexWithUV((double)var13, (double)var15, (double)var8, (double)var29, (double)var31); + var32.addVertexWithUV((double)var13, (double)var15, (double)var9, (double)var28, (double)var31); + var32.addVertexWithUV((double)var13, (double)var14, (double)var9, (double)var28, (double)var30); + var32.draw(); + } + } + + } + + private void getOffset(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.direction == 0) { + var4 = MathHelper.floor_double(var1.posX + (double)(var2 / 16.0F)); + } + + if(var1.direction == 1) { + var6 = MathHelper.floor_double(var1.posZ - (double)(var2 / 16.0F)); + } + + if(var1.direction == 2) { + var4 = MathHelper.floor_double(var1.posX - (double)(var2 / 16.0F)); + } + + if(var1.direction == 3) { + var6 = MathHelper.floor_double(var1.posZ + (double)(var2 / 16.0F)); + } + + float var7 = this.renderManager.worldObj.getBrightness(var4, var5, var6); + GL11.glColor3f(var7, var7, var7); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.a((EntityPainting)var1, var2, var4, var6, var8, var9); + } +} diff --git a/source/net/minecraft/src/RenderPig.java b/source/net/minecraft/src/RenderPig.java new file mode 100644 index 0000000..66a193e --- /dev/null +++ b/source/net/minecraft/src/RenderPig.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class RenderPig extends RenderLiving { + public RenderPig(ModelBase var1, ModelBase var2, float var3) { + super(var1, var3); + this.setRenderPassModel(var2); + } + + protected boolean a(EntityPig var1, int var2) { + this.loadTexture("/mob/saddle.png"); + return var2 == 0 && var1.saddled; + } + + protected boolean shouldRenderPass(EntityLiving var1, int var2) { + return this.a((EntityPig)var1, var2); + } +} diff --git a/source/net/minecraft/src/RenderPlayer.java b/source/net/minecraft/src/RenderPlayer.java new file mode 100644 index 0000000..af1ce50 --- /dev/null +++ b/source/net/minecraft/src/RenderPlayer.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +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 boolean a(EntityPlayer var1, int var2) { + ItemStack var3 = var1.inventory.armorItemInSlot(3 - var2); + if(var3 != null) { + Item var4 = var3.getItem(); + if(var4 instanceof ItemArmor) { + ItemArmor var5 = (ItemArmor)var4; + this.loadTexture("/armor/" + armorFilenamePrefix[var5.renderIndex] + "_" + (var2 == 2 ? 2 : 1) + ".png"); + ModelBiped var6 = var2 == 2 ? this.modelArmor : this.modelArmorChestplate; + var6.bipedHead.showModel = var2 == 0; + var6.bipedHeadwear.showModel = var2 == 0; + var6.bipedBody.showModel = var2 == 1 || var2 == 2; + var6.bipedRightArm.showModel = var2 == 1; + var6.bipedLeftArm.showModel = var2 == 1; + var6.bipedRightLeg.showModel = var2 == 2 || var2 == 3; + var6.bipedLeftLeg.showModel = var2 == 2 || var2 == 3; + this.setRenderPassModel(var6); + return true; + } + } + + return false; + } + + public void a(EntityPlayer var1, double var2, double var4, double var6, float var8, float var9) { + super.a(var1, var2, var4 - (double)var1.yOffset, var6, var8, var9); + } + + public void drawFirstPersonHand() { + this.modelBipedMain.bipedRightArm.render(1.0F / 16.0F); + } + + protected boolean shouldRenderPass(EntityLiving var1, int var2) { + return this.a((EntityPlayer)var1, var2); + } + + public void a(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.a((EntityPlayer)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.a((EntityPlayer)var1, var2, var4, var6, var8, var9); + } +} diff --git a/source/net/minecraft/src/RenderSheep.java b/source/net/minecraft/src/RenderSheep.java new file mode 100644 index 0000000..e7e8d6f --- /dev/null +++ b/source/net/minecraft/src/RenderSheep.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class RenderSheep extends RenderLiving { + public RenderSheep(ModelBase var1, ModelBase var2, float var3) { + super(var1, var3); + this.setRenderPassModel(var2); + } + + protected boolean a(EntitySheep var1, int var2) { + this.loadTexture("/mob/sheep_fur.png"); + return var2 == 0 && !var1.sheared; + } + + protected boolean shouldRenderPass(EntityLiving var1, int var2) { + return this.a((EntitySheep)var1, var2); + } +} diff --git a/source/net/minecraft/src/RenderSorter.java b/source/net/minecraft/src/RenderSorter.java new file mode 100644 index 0000000..04a4d3a --- /dev/null +++ b/source/net/minecraft/src/RenderSorter.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.Comparator; + +public class RenderSorter implements Comparator { + private EntityPlayer entity; + + public RenderSorter(EntityPlayer var1) { + this.entity = var1; + } + + public int a(WorldRenderer var1, WorldRenderer var2) { + boolean var3 = var1.isInFrustum; + boolean var4 = var2.isInFrustum; + return var3 && !var4 ? 1 : (var4 && !var3 ? -1 : (var1.distanceToEntitySquared(this.entity) < var2.distanceToEntitySquared(this.entity) ? 1 : -1)); + } + + public int compare(Object var1, Object var2) { + return this.a((WorldRenderer)var1, (WorldRenderer)var2); + } +} diff --git a/source/net/minecraft/src/RenderSpider.java b/source/net/minecraft/src/RenderSpider.java new file mode 100644 index 0000000..18972d7 --- /dev/null +++ b/source/net/minecraft/src/RenderSpider.java @@ -0,0 +1,38 @@ +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 a(EntitySpider var1) { + return 180.0F; + } + + protected boolean a(EntitySpider var1, int var2) { + if(var2 != 0) { + return false; + } else if(var2 != 0) { + return false; + } else { + this.loadTexture("/mob/spider_eyes.png"); + float var3 = (1.0F - var1.getEntityBrightness(1.0F)) * 0.5F; + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(1.0F, 1.0F, 1.0F, var3); + return true; + } + } + + protected float getMaxDeathRotation(EntityLiving var1) { + return this.a((EntitySpider)var1); + } + + protected boolean shouldRenderPass(EntityLiving var1, int var2) { + return this.a((EntitySpider)var1, var2); + } +} diff --git a/source/net/minecraft/src/RenderTNTPrimed.java b/source/net/minecraft/src/RenderTNTPrimed.java new file mode 100644 index 0000000..b93ef70 --- /dev/null +++ b/source/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 a(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.renderBlockOnInventory(Block.tnt); + 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.renderBlockOnInventory(Block.tnt); + 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.a((EntityTNTPrimed)var1, var2, var4, var6, var8, var9); + } +} diff --git a/source/net/minecraft/src/ScaledResolution.java b/source/net/minecraft/src/ScaledResolution.java new file mode 100644 index 0000000..7d6ed74 --- /dev/null +++ b/source/net/minecraft/src/ScaledResolution.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class ScaledResolution { + private int scaledWidth; + private int scaledHeight; + + public ScaledResolution(int var1, int var2) { + this.scaledWidth = var1; + this.scaledHeight = var2; + + int var3; + for(var3 = 1; this.scaledWidth / (var3 + 1) >= 320 && this.scaledHeight / (var3 + 1) >= 240; ++var3) { + } + + this.scaledWidth /= var3; + this.scaledHeight /= var3; + } + + public int getScaledWidth() { + return this.scaledWidth; + } + + public int getScaledHeight() { + return this.scaledHeight; + } +} diff --git a/source/net/minecraft/src/Session.java b/source/net/minecraft/src/Session.java new file mode 100644 index 0000000..853aa65 --- /dev/null +++ b/source/net/minecraft/src/Session.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class Session { + public static List registeredBlocksList = new ArrayList(); + public String username; + public String sessionId; + public String mpPassParameter; + + public Session(String var1, String var2) { + this.username = var1; + this.sessionId = var2; + } + + static { + registeredBlocksList.add(Block.stone); + registeredBlocksList.add(Block.cobblestone); + registeredBlocksList.add(Block.brick); + registeredBlocksList.add(Block.dirt); + registeredBlocksList.add(Block.planks); + registeredBlocksList.add(Block.wood); + registeredBlocksList.add(Block.leaves); + registeredBlocksList.add(Block.torch); + registeredBlocksList.add(Block.stairSingle); + registeredBlocksList.add(Block.glass); + registeredBlocksList.add(Block.cobblestoneMossy); + registeredBlocksList.add(Block.sapling); + registeredBlocksList.add(Block.plantYellow); + registeredBlocksList.add(Block.plantRed); + registeredBlocksList.add(Block.mushroomBrown); + registeredBlocksList.add(Block.mushroomRed); + registeredBlocksList.add(Block.sand); + registeredBlocksList.add(Block.gravel); + registeredBlocksList.add(Block.sponge); + registeredBlocksList.add(Block.cloth); + registeredBlocksList.add(Block.oreCoal); + registeredBlocksList.add(Block.oreIron); + registeredBlocksList.add(Block.oreGold); + registeredBlocksList.add(Block.blockSteel); + registeredBlocksList.add(Block.blockGold); + registeredBlocksList.add(Block.bookshelf); + registeredBlocksList.add(Block.tnt); + registeredBlocksList.add(Block.obsidian); + System.out.println(registeredBlocksList.size()); + } +} diff --git a/source/net/minecraft/src/SignModel.java b/source/net/minecraft/src/SignModel.java new file mode 100644 index 0000000..9325b7b --- /dev/null +++ b/source/net/minecraft/src/SignModel.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class SignModel { + public ModelRenderer signBoard = new ModelRenderer(0, 0); + public ModelRenderer signStick; + + public SignModel() { + this.signBoard.addBox(-12.0F, -14.0F, -1.0F, 24, 12, 2, 0.0F); + this.signStick = new ModelRenderer(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/source/net/minecraft/src/Slot.java b/source/net/minecraft/src/Slot.java new file mode 100644 index 0000000..543f4ca --- /dev/null +++ b/source/net/minecraft/src/Slot.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +public class Slot { + public final int slotIndex; + public final int xDisplayPosition; + public final int yDisplayPosition; + public final IInventory inventory; + private final GuiContainer inventoryGui; + + public Slot(GuiContainer var1, IInventory var2, int var3, int var4, int var5) { + this.inventoryGui = var1; + this.inventory = var2; + this.slotIndex = var3; + this.xDisplayPosition = var4; + this.yDisplayPosition = var5; + } + + public boolean getIsMouseOverSlot(int var1, int var2) { + int var3 = (this.inventoryGui.width - this.inventoryGui.xSize) / 2; + int var4 = (this.inventoryGui.height - this.inventoryGui.ySize) / 2; + var1 -= var3; + var2 -= var4; + return var1 >= this.xDisplayPosition - 1 && var1 < this.xDisplayPosition + 16 + 1 && var2 >= this.yDisplayPosition - 1 && var2 < this.yDisplayPosition + 16 + 1; + } + + public void onPickupFromSlot() { + this.onSlotChanged(); + } + + public boolean isItemValid(ItemStack var1) { + return true; + } + + public ItemStack getStack() { + return this.inventory.getStackInSlot(this.slotIndex); + } + + public void putStack(ItemStack var1) { + this.inventory.setInventorySlotContents(this.slotIndex, var1); + this.onSlotChanged(); + } + + public int getBackgroundIconIndex() { + return -1; + } + + public void onSlotChanged() { + this.inventory.onInventoryChanged(); + } +} diff --git a/source/net/minecraft/src/SlotArmor.java b/source/net/minecraft/src/SlotArmor.java new file mode 100644 index 0000000..cf2689f --- /dev/null +++ b/source/net/minecraft/src/SlotArmor.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +class SlotArmor extends Slot { + final int armorType; + final GuiInventory guiInventory; + + SlotArmor(GuiInventory var1, GuiContainer var2, IInventory var3, int var4, int var5, int var6, int var7) { + super(var2, var3, var4, var5, var6); + this.guiInventory = var1; + this.armorType = var7; + } + + public boolean isItemValid(ItemStack var1) { + return var1.getItem() instanceof ItemArmor ? ((ItemArmor)var1.getItem()).armorType == this.armorType : false; + } + + public int getBackgroundIconIndex() { + return 15 + this.armorType * 16; + } +} diff --git a/source/net/minecraft/src/SlotCrafting.java b/source/net/minecraft/src/SlotCrafting.java new file mode 100644 index 0000000..4a49dc1 --- /dev/null +++ b/source/net/minecraft/src/SlotCrafting.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +class SlotCrafting extends Slot { + private final IInventory craftMatrix; + + public SlotCrafting(GuiContainer var1, IInventory var2, IInventory var3, int var4, int var5, int var6) { + super(var1, var3, var4, var5, var6); + this.craftMatrix = var2; + } + + public boolean isItemValid(ItemStack var1) { + return false; + } + + public void onPickupFromSlot() { + for(int var1 = 0; var1 < this.craftMatrix.getSizeInventory(); ++var1) { + if(this.craftMatrix.getStackInSlot(var1) != null) { + this.craftMatrix.decrStackSize(var1, 1); + } + } + + } +} diff --git a/source/net/minecraft/src/SoundManager.java b/source/net/minecraft/src/SoundManager.java new file mode 100644 index 0000000..17d5492 --- /dev/null +++ b/source/net/minecraft/src/SoundManager.java @@ -0,0 +1,138 @@ +package net.minecraft.src; + +import java.io.File; +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 SoundSystem sndSystem; + private SoundPool soundPoolSounds = new SoundPool(); + private SoundPool soundPoolMusic = new SoundPool(); + private int latestSoundID = 0; + private GameSettings options; + private boolean loaded = false; + + public void loadSoundSettings(GameSettings var1) { + this.options = var1; + if(!this.loaded && (var1.sound || var1.music)) { + this.tryToSetLibraryAndCodecs(); + } + + } + + private void tryToSetLibraryAndCodecs() { + try { + boolean var1 = this.options.sound; + boolean var2 = this.options.music; + this.options.sound = false; + this.options.music = false; + this.options.saveOptions(); + SoundSystemConfig.addLibrary(LibraryLWJGLOpenAL.class); + SoundSystemConfig.setCodec("ogg", CodecJOrbis.class); + SoundSystemConfig.setCodec("wav", CodecWav.class); + this.sndSystem = new SoundSystem(); + this.options.sound = var1; + this.options.music = var2; + this.options.saveOptions(); + } catch (Throwable var3) { + System.err.println("error linking with the LibraryJavaSound plug-in"); + } + + this.loaded = true; + } + + public void onSoundOptionsChanged() { + if(!this.loaded && (this.options.sound || this.options.music)) { + this.tryToSetLibraryAndCodecs(); + } + + if(!this.options.music) { + this.sndSystem.stop("BgMusic"); + } + + } + + public void closeMinecraft() { + if(this.loaded) { + this.sndSystem.cleanup(); + } + + } + + public void addSound(String var1, File var2) { + this.soundPoolSounds.addSound(var1, var2); + } + + public void addMusic(String var1, File var2) { + this.soundPoolMusic.addSound(var1, var2); + } + + public void setListener(EntityLiving var1, float var2) { + if(this.loaded && this.options.sound) { + 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 = MathHelper.cos(-var3 * ((float)Math.PI / 180.0F)); + float var14 = MathHelper.sin(-var3 * ((float)Math.PI / 180.0F)); + float var15 = -var12 * var13; + float var17 = -var11 * var13; + float var18 = -var12 * var14; + float var20 = -var11 * var14; + this.sndSystem.setListenerPosition((float)var5, (float)var7, (float)var9); + this.sndSystem.setListenerOrientation(var15, var14, var17, var18, var13, var20); + } + } + } + + public void playSound(String var1, float var2, float var3, float var4, float var5, float var6) { + if(this.loaded && this.options.sound) { + 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; + } + + this.sndSystem.newSource(var5 > 1.0F, var8, var7.soundUrl, var7.soundName, false, var2, var3, var4, 2, var9); + this.sndSystem.setPitch(var8, var6); + if(var5 > 1.0F) { + var5 = 1.0F; + } + + this.sndSystem.setVolume(var8, var5); + this.sndSystem.play(var8); + } + + } + } + + public void playSoundFX(String var1, float var2, float var3) { + if(this.loaded && this.options.sound) { + SoundPoolEntry var4 = this.soundPoolSounds.getRandomSoundFromSoundPool(var1); + if(var4 != null) { + this.latestSoundID = (this.latestSoundID + 1) % 256; + String var5 = "sound_" + this.latestSoundID; + this.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; + this.sndSystem.setPitch(var5, var3); + this.sndSystem.setVolume(var5, var2); + this.sndSystem.play(var5); + } + + } + } +} diff --git a/source/net/minecraft/src/SoundPool.java b/source/net/minecraft/src/SoundPool.java new file mode 100644 index 0000000..ab70ae6 --- /dev/null +++ b/source/net/minecraft/src/SoundPool.java @@ -0,0 +1,42 @@ +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(); + public int numberOfSoundPoolEntries = 0; + + public SoundPoolEntry addSound(String var1, File var2) { + try { + String var3 = var1; + + for(var1 = var1.substring(0, var1.indexOf(".")); 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.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())); + } +} diff --git a/source/net/minecraft/src/SoundPoolEntry.java b/source/net/minecraft/src/SoundPoolEntry.java new file mode 100644 index 0000000..341e9ba --- /dev/null +++ b/source/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/source/net/minecraft/src/SpawnerAnimals.java b/source/net/minecraft/src/SpawnerAnimals.java new file mode 100644 index 0000000..8acc13f --- /dev/null +++ b/source/net/minecraft/src/SpawnerAnimals.java @@ -0,0 +1,97 @@ +package net.minecraft.src; + +public class SpawnerAnimals { + private int maxSpawns; + private Class entityType; + private Class[] entities; + + public SpawnerAnimals(int var1, Class var2, Class[] var3) { + this.maxSpawns = var1; + this.entityType = var2; + this.entities = var3; + } + + public void onUpdate(World var1) { + int var2 = var1.countEntities(this.entityType); + if(var2 < this.maxSpawns) { + for(int var3 = 0; var3 < 10; ++var3) { + this.performSpawning(var1, 1, var1.playerEntity, (IProgressUpdate)null); + } + } + + } + + protected ChunkPosition getRandomSpawningPointInChunk(World var1, int var2, int var3) { + int var4 = var2 + var1.rand.nextInt(256) - 128; + int var5 = var1.rand.nextInt(128); + int var6 = var3 + var1.rand.nextInt(256) - 128; + return new ChunkPosition(var4, var5, var6); + } + + private int performSpawning(World var1, int var2, Entity var3, IProgressUpdate var4) { + int var5 = 0; + int var6 = MathHelper.floor_double(var3.posX); + int var7 = MathHelper.floor_double(var3.posZ); + int var8 = var1.rand.nextInt(this.entities.length); + ChunkPosition var9 = this.getRandomSpawningPointInChunk(var1, var6, var7); + int var10 = var9.x; + int var11 = var9.y; + int var12 = var9.z; + if(var1.isBlockNormalCube(var10, var11, var12)) { + return 0; + } else if(var1.getBlockMaterial(var10, var11, var12) != Material.air) { + return 0; + } else { + for(int var13 = 0; var13 < 3; ++var13) { + int var14 = var10; + int var15 = var11; + int var16 = var12; + byte var17 = 6; + + for(int var18 = 0; var18 < 3; ++var18) { + var14 += var1.rand.nextInt(var17) - var1.rand.nextInt(var17); + var15 += var1.rand.nextInt(1) - var1.rand.nextInt(1); + var16 += var1.rand.nextInt(var17) - var1.rand.nextInt(var17); + if(var1.isBlockNormalCube(var14, var15 - 1, var16) && !var1.isBlockNormalCube(var14, var15, var16) && !var1.getBlockMaterial(var14, var15, var16).getIsLiquid() && !var1.isBlockNormalCube(var14, var15 + 1, var16)) { + float var19 = (float)var14 + 0.5F; + float var20 = (float)var15 + 1.0F; + float var21 = (float)var16 + 0.5F; + if(var3 != null) { + double var22 = (double)var19 - var3.posX; + double var24 = (double)var20 - var3.posY; + double var26 = (double)var21 - var3.posZ; + double var28 = var22 * var22 + var24 * var24 + var26 * var26; + if(var28 < 1024.0D) { + continue; + } + } else { + float var31 = var19 - (float)var1.spawnX; + float var23 = var20 - (float)var1.spawnY; + float var33 = var21 - (float)var1.spawnZ; + float var25 = var31 * var31 + var23 * var23 + var33 * var33; + if(var25 < 1024.0F) { + continue; + } + } + + EntityLiving var32; + try { + var32 = (EntityLiving)this.entities[var8].getConstructor(new Class[]{World.class}).newInstance(new Object[]{var1}); + } catch (Exception var30) { + var30.printStackTrace(); + return var5; + } + + var32.setPositionAndRotation((double)var19, (double)var20, (double)var21, var1.rand.nextFloat() * 360.0F, 0.0F); + if(var32.getCanSpawnHere((double)var19, (double)var20, (double)var21)) { + ++var5; + var1.spawnEntityInWorld(var32); + } + } + } + } + + return var5; + } + } +} diff --git a/source/net/minecraft/src/SpawnerMonsters.java b/source/net/minecraft/src/SpawnerMonsters.java new file mode 100644 index 0000000..d253214 --- /dev/null +++ b/source/net/minecraft/src/SpawnerMonsters.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +class SpawnerMonsters extends SpawnerAnimals { + final PlayerControllerSP playerController; + + SpawnerMonsters(PlayerControllerSP var1, int var2, Class var3, Class[] var4) { + super(var2, var3, var4); + this.playerController = var1; + } + + protected ChunkPosition getRandomSpawningPointInChunk(World var1, int var2, int var3) { + int var4 = var2 + var1.rand.nextInt(256) - 128; + int var5 = var1.rand.nextInt(var1.rand.nextInt(var1.rand.nextInt(112) + 8) + 8); + int var6 = var3 + var1.rand.nextInt(256) - 128; + return new ChunkPosition(var4, var5, var6); + } +} diff --git a/source/net/minecraft/src/StepSound.java b/source/net/minecraft/src/StepSound.java new file mode 100644 index 0000000..ad50bb0 --- /dev/null +++ b/source/net/minecraft/src/StepSound.java @@ -0,0 +1,29 @@ +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 "step." + this.stepSoundName; + } + + public String getStepSound() { + return "step." + this.stepSoundName; + } +} diff --git a/source/net/minecraft/src/StepSoundGlass.java b/source/net/minecraft/src/StepSoundGlass.java new file mode 100644 index 0000000..a7f7d81 --- /dev/null +++ b/source/net/minecraft/src/StepSoundGlass.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class StepSoundGlass extends StepSound { + StepSoundGlass(String var1, float var2, float var3) { + super(var1, var2, var3); + } + + public String getBreakSound() { + return "random.glass"; + } +} diff --git a/source/net/minecraft/src/StepSoundSand.java b/source/net/minecraft/src/StepSoundSand.java new file mode 100644 index 0000000..f1e2705 --- /dev/null +++ b/source/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 "step.gravel"; + } +} diff --git a/source/net/minecraft/src/TerrainTextureManager.java b/source/net/minecraft/src/TerrainTextureManager.java new file mode 100644 index 0000000..e6acf43 --- /dev/null +++ b/source/net/minecraft/src/TerrainTextureManager.java @@ -0,0 +1,214 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.Arrays; +import javax.imageio.ImageIO; + +public class TerrainTextureManager { + private float[] texCols = new float[768]; + private int[] pixels = new int[5120]; + private int[] zBuf = new int[5120]; + private int[] waterBuf = new int[5120]; + private int[] waterBr = new int[5120]; + private int[] yBuf = new int[34]; + private int[] textures = new int[768]; + + public TerrainTextureManager() { + try { + BufferedImage var1 = ImageIO.read(TerrainTextureManager.class.getResource("/terrain.png")); + int[] var2 = new int[65536]; + var1.getRGB(0, 0, 256, 256, var2, 0, 256); + + for(int var3 = 0; var3 < 256; ++var3) { + int var4 = 0; + int var5 = 0; + int var6 = 0; + int var7 = var3 % 16 * 16; + int var8 = var3 / 16 * 16; + int var9 = 0; + + for(int var10 = 0; var10 < 16; ++var10) { + for(int var11 = 0; var11 < 16; ++var11) { + int var12 = var2[var11 + var7 + (var10 + var8) * 256]; + int var13 = var12 >> 24 & 255; + if(var13 > 128) { + var4 += var12 >> 16 & 255; + var5 += var12 >> 8 & 255; + var6 += var12 & 255; + ++var9; + } + } + + if(var9 == 0) { + ++var9; + } + + this.texCols[var3 * 3 + 0] = (float)(var4 / var9); + this.texCols[var3 * 3 + 1] = (float)(var5 / var9); + this.texCols[var3 * 3 + 2] = (float)(var6 / var9); + } + } + } catch (IOException var14) { + var14.printStackTrace(); + } + + for(int var15 = 0; var15 < 256; ++var15) { + if(Block.blocksList[var15] != null) { + this.textures[var15 * 3 + 0] = Block.blocksList[var15].getBlockTextureFromSide(1); + this.textures[var15 * 3 + 1] = Block.blocksList[var15].getBlockTextureFromSide(2); + this.textures[var15 * 3 + 2] = Block.blocksList[var15].getBlockTextureFromSide(3); + } + } + + } + + public void render(IsoImageBuffer var1) { + World var2 = var1.level; + if(var2 == null) { + var1.noContent = true; + var1.rendered = true; + } else { + int var3 = var1.chunkX * 16; + int var4 = var1.chunkZ * 16; + int var5 = var3 + 16; + int var6 = var4 + 16; + Chunk var7 = var2.getChunkFromChunkCoords(var1.chunkX, var1.chunkZ); + if(var7.isChunkRendered) { + var1.noContent = true; + var1.rendered = true; + } else { + var1.noContent = false; + Arrays.fill(this.zBuf, 0); + Arrays.fill(this.waterBuf, 0); + Arrays.fill(this.yBuf, 160); + + for(int var8 = var6 - 1; var8 >= var4; --var8) { + for(int var9 = var5 - 1; var9 >= var3; --var9) { + int var10 = var9 - var3; + int var11 = var8 - var4; + int var12 = var10 + var11; + boolean var13 = true; + + for(int var14 = 0; var14 < 128; ++var14) { + int var15 = var11 - var10 - var14 + 160 - 16; + if(var15 < this.yBuf[var12] || var15 < this.yBuf[var12 + 1]) { + Block var16 = Block.blocksList[var2.getBlockId(var9, var14, var8)]; + if(var16 == null) { + var13 = false; + } else if(var16.blockMaterial == Material.water) { + int var24 = var2.getBlockId(var9, var14 + 1, var8); + if(var24 == 0 || Block.blocksList[var24].blockMaterial != Material.water) { + float var25 = (float)var14 / 127.0F * 0.6F + 0.4F; + float var26 = var2.getBrightness(var9, var14 + 1, var8) * var25; + if(var15 >= 0 && var15 < 160) { + int var27 = var12 + var15 * 32; + if(var12 >= 0 && var12 <= 32 && this.waterBuf[var27] <= var14) { + this.waterBuf[var27] = var14; + this.waterBr[var27] = (int)(var26 * 127.0F); + } + + if(var12 >= -1 && var12 <= 31 && this.waterBuf[var27 + 1] <= var14) { + this.waterBuf[var27 + 1] = var14; + this.waterBr[var27 + 1] = (int)(var26 * 127.0F); + } + + var13 = false; + } + } + } else { + if(var13) { + if(var15 < this.yBuf[var12]) { + this.yBuf[var12] = var15; + } + + if(var15 < this.yBuf[var12 + 1]) { + this.yBuf[var12 + 1] = var15; + } + } + + float var17 = (float)var14 / 127.0F * 0.6F + 0.4F; + int var18; + int var19; + float var20; + float var22; + if(var15 >= 0 && var15 < 160) { + var18 = var12 + var15 * 32; + var19 = this.textures[var16.blockID * 3 + 0]; + var20 = (var2.getBrightness(var9, var14 + 1, var8) * 0.8F + 0.2F) * var17; + if(var12 >= 0 && this.zBuf[var18] <= var14) { + this.zBuf[var18] = var14; + this.pixels[var18] = -16777216 | (int)(this.texCols[var19 * 3 + 0] * var20) << 16 | (int)(this.texCols[var19 * 3 + 1] * var20) << 8 | (int)(this.texCols[var19 * 3 + 2] * var20); + } + + if(var12 < 31) { + var22 = var20 * 0.9F; + if(this.zBuf[var18 + 1] <= var14) { + this.zBuf[var18 + 1] = var14; + this.pixels[var18 + 1] = -16777216 | (int)(this.texCols[var19 * 3 + 0] * var22) << 16 | (int)(this.texCols[var19 * 3 + 1] * var22) << 8 | (int)(this.texCols[var19 * 3 + 2] * var22); + } + } + } + + if(var15 >= -1 && var15 < 159) { + var18 = var12 + (var15 + 1) * 32; + var19 = this.textures[var16.blockID * 3 + 1]; + var20 = var2.getBrightness(var9 - 1, var14, var8) * 0.8F + 0.2F; + int var21 = this.textures[var16.blockID * 3 + 2]; + var22 = var2.getBrightness(var9, var14, var8 + 1) * 0.8F + 0.2F; + float var23; + if(var12 >= 0) { + var23 = var20 * var17 * 0.6F; + if(this.zBuf[var18] <= var14 - 1) { + this.zBuf[var18] = var14 - 1; + this.pixels[var18] = -16777216 | (int)(this.texCols[var19 * 3 + 0] * var23) << 16 | (int)(this.texCols[var19 * 3 + 1] * var23) << 8 | (int)(this.texCols[var19 * 3 + 2] * var23); + } + } + + if(var12 < 31) { + var23 = var22 * 0.9F * var17 * 0.4F; + if(this.zBuf[var18 + 1] <= var14 - 1) { + this.zBuf[var18 + 1] = var14 - 1; + this.pixels[var18 + 1] = -16777216 | (int)(this.texCols[var21 * 3 + 0] * var23) << 16 | (int)(this.texCols[var21 * 3 + 1] * var23) << 8 | (int)(this.texCols[var21 * 3 + 2] * var23); + } + } + } + } + } + } + } + } + + this.postProcess(); + if(var1.image == null) { + var1.image = new BufferedImage(32, 160, 2); + } + + var1.image.setRGB(0, 0, 32, 160, this.pixels, 0, 32); + var1.rendered = true; + } + } + } + + private void postProcess() { + for(int var1 = 0; var1 < 32; ++var1) { + for(int var2 = 0; var2 < 160; ++var2) { + int var3 = var1 + var2 * 32; + if(this.zBuf[var3] == 0) { + this.pixels[var3] = 0; + } + + if(this.waterBuf[var3] > this.zBuf[var3]) { + int var4 = this.pixels[var3] >> 24 & 255; + this.pixels[var3] = ((this.pixels[var3] & 16711422) >> 1) + this.waterBr[var3]; + if(var4 < 128) { + this.pixels[var3] = Integer.MIN_VALUE + this.waterBr[var3] * 2; + } else { + this.pixels[var3] |= -16777216; + } + } + } + } + + } +} diff --git a/source/net/minecraft/src/Tessellator.java b/source/net/minecraft/src/Tessellator.java new file mode 100644 index 0000000..0ca7e03 --- /dev/null +++ b/source/net/minecraft/src/Tessellator.java @@ -0,0 +1,298 @@ +package net.minecraft.src; + +import java.nio.ByteBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +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 = true; + private static boolean tryVBO = false; + private ByteBuffer byteBuffer; + private IntBuffer intBuffer; + private FloatBuffer floatBuffer; + private int[] rawBuffer; + private int vertexCount = 0; + private double textureU; + private double textureV; + private int color; + private boolean hasColor = false; + private boolean hasTexture = 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.rawBuffer = new int[var1]; + this.useVBO = tryVBO && GLContext.getCapabilities().GL_ARB_vertex_buffer_object; + if(this.useVBO) { + this.vertexBuffers = GLAllocation.createIntBuffer(this.vboCount); + ARBVertexBufferObject.glGenBuffersARB(this.vertexBuffers); + } + + } + + public void 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.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_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.hasColor) { + GL11.glDisableClientState(GL11.GL_COLOR_ARRAY); + } + + if(this.hasNormals) { + GL11.glDisableClientState(GL11.GL_NORMAL_ARRAY); + } + } + + this.reset(); + } + } + + 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.isColorDisabled = false; + } + } + + public void setTextureUV(double var1, double var3) { + this.hasTexture = true; + this.textureU = var1; + this.textureV = var3; + } + + 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; + this.color = var4 << 24 | var3 << 16 | var2 << 8 | var1; + } + } + + 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.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.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 disableColor() { + this.isColorDisabled = true; + } + + public void setNormal(float var1, float var2, float var3) { + if(!this.isDrawing) { + System.out.println("But.."); + } + + this.hasNormals = true; + byte var4 = (byte)((int)(var1 * 128.0F)); + byte var5 = (byte)((int)(var2 * 127.0F)); + byte var6 = (byte)((int)(var3 * 127.0F)); + this.normal = var4 | var5 << 8 | var6 << 16; + } + + public void setTranslationD(double var1, double var3, double var5) { + this.xOffset = var1; + this.yOffset = var3; + this.zOffset = var5; + } +} diff --git a/source/net/minecraft/src/TextureFX.java b/source/net/minecraft/src/TextureFX.java new file mode 100644 index 0000000..0396745 --- /dev/null +++ b/source/net/minecraft/src/TextureFX.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +public class TextureFX { + public byte[] imageData = new byte[1024]; + public int iconIndex; + public boolean anaglyphEnabled = false; + public int textureId = 0; + public int tileSize = 1; + + public TextureFX(int var1) { + this.iconIndex = var1; + } + + public void onTick() { + } +} diff --git a/source/net/minecraft/src/TextureFlamesFX.java b/source/net/minecraft/src/TextureFlamesFX.java new file mode 100644 index 0000000..9ddc148 --- /dev/null +++ b/source/net/minecraft/src/TextureFlamesFX.java @@ -0,0 +1,77 @@ +package net.minecraft.src; + +public class TextureFlamesFX extends TextureFX { + protected float[] currentFireFrame = new float[320]; + protected float[] lastFireFrame = new float[320]; + + public TextureFlamesFX(int var1) { + super(Block.fire.blockIndexInTexture + var1 * 16); + } + + public void onTick() { + int var2; + float var4; + int var5; + int var6; + for(int var1 = 0; var1 < 16; ++var1) { + for(var2 = 0; var2 < 20; ++var2) { + int var3 = 18; + var4 = this.currentFireFrame[var1 + (var2 + 1) % 20 * 16] * (float)var3; + + for(var5 = var1 - 1; var5 <= var1 + 1; ++var5) { + for(var6 = var2; var6 <= var2 + 1; ++var6) { + if(var5 >= 0 && var6 >= 0 && var5 < 16 && var6 < 20) { + var4 += this.currentFireFrame[var5 + var6 * 16]; + } + + ++var3; + } + } + + this.lastFireFrame[var1 + var2 * 16] = var4 / ((float)var3 * 1.06F); + if(var2 >= 19) { + this.lastFireFrame[var1 + var2 * 16] = (float)(Math.random() * Math.random() * Math.random() * 4.0D + Math.random() * (double)0.1F + (double)0.2F); + } + } + } + + float[] var12 = this.lastFireFrame; + this.lastFireFrame = this.currentFireFrame; + this.currentFireFrame = var12; + + for(var2 = 0; var2 < 256; ++var2) { + float var13 = this.currentFireFrame[var2] * 1.8F; + if(var13 > 1.0F) { + var13 = 1.0F; + } + + if(var13 < 0.0F) { + var13 = 0.0F; + } + + var5 = (int)(var13 * 155.0F + 100.0F); + var6 = (int)(var13 * var13 * 255.0F); + int var7 = (int)(var13 * var13 * var13 * var13 * var13 * var13 * var13 * var13 * var13 * var13 * 255.0F); + short var8 = 255; + if(var13 < 0.5F) { + var8 = 0; + } + + var4 = (var13 - 0.5F) * 2.0F; + if(this.anaglyphEnabled) { + int var9 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; + int var10 = (var5 * 30 + var6 * 70) / 100; + int var11 = (var5 * 30 + var7 * 70) / 100; + var5 = var9; + var6 = var10; + var7 = var11; + } + + this.imageData[var2 * 4 + 0] = (byte)var5; + this.imageData[var2 * 4 + 1] = (byte)var6; + this.imageData[var2 * 4 + 2] = (byte)var7; + this.imageData[var2 * 4 + 3] = (byte)var8; + } + + } +} diff --git a/source/net/minecraft/src/TextureGearsFX.java b/source/net/minecraft/src/TextureGearsFX.java new file mode 100644 index 0000000..17138a5 --- /dev/null +++ b/source/net/minecraft/src/TextureGearsFX.java @@ -0,0 +1,65 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import javax.imageio.ImageIO; + +public class TextureGearsFX extends TextureFX { + private int gearRotation = 0; + private int[] gearColor = new int[1024]; + private int[] gearMiddleColor = new int[1024]; + private int gearRotationDir; + + public TextureGearsFX(int var1) { + super(Block.cog.blockIndexInTexture + var1); + this.gearRotationDir = var1 * 2 - 1; + this.gearRotation = 2; + + try { + BufferedImage var2 = ImageIO.read(TextureGearsFX.class.getResource("/misc/gear.png")); + var2.getRGB(0, 0, 32, 32, this.gearColor, 0, 32); + var2 = ImageIO.read(TextureGearsFX.class.getResource("/misc/gearmiddle.png")); + var2.getRGB(0, 0, 16, 16, this.gearMiddleColor, 0, 16); + } catch (IOException var3) { + var3.printStackTrace(); + } + + } + + public void onTick() { + this.gearRotation = this.gearRotation + this.gearRotationDir & 63; + float var1 = MathHelper.sin((float)this.gearRotation / 64.0F * (float)Math.PI * 2.0F); + float var2 = MathHelper.cos((float)this.gearRotation / 64.0F * (float)Math.PI * 2.0F); + + for(int var3 = 0; var3 < 16; ++var3) { + for(int var4 = 0; var4 < 16; ++var4) { + float var5 = ((float)var3 / 15.0F - 0.5F) * 31.0F; + float var6 = ((float)var4 / 15.0F - 0.5F) * 31.0F; + float var7 = var2 * var5 - var1 * var6; + float var8 = var2 * var6 + var1 * var5; + int var9 = (int)(var7 + 16.0F); + int var10 = (int)(var8 + 16.0F); + int var11 = 0; + int var12; + if(var9 >= 0 && var10 >= 0 && var9 < 32 && var10 < 32) { + var11 = this.gearColor[var9 + var10 * 32]; + var12 = this.gearMiddleColor[var3 + var4 * 16]; + if((var12 >> 24 & 255) > 128) { + var11 = var12; + } + } + + var12 = var11 >> 16 & 255; + int var13 = var11 >> 8 & 255; + int var14 = var11 & 255; + int var15 = (var11 >> 24 & 255) > 128 ? 255 : 0; + int var16 = var3 + var4 * 16; + this.imageData[var16 * 4 + 0] = (byte)var12; + this.imageData[var16 * 4 + 1] = (byte)var13; + this.imageData[var16 * 4 + 2] = (byte)var14; + this.imageData[var16 * 4 + 3] = (byte)var15; + } + } + + } +} diff --git a/source/net/minecraft/src/TextureLavaFX.java b/source/net/minecraft/src/TextureLavaFX.java new file mode 100644 index 0000000..c4d9c4c --- /dev/null +++ b/source/net/minecraft/src/TextureLavaFX.java @@ -0,0 +1,81 @@ +package net.minecraft.src; + +public class TextureLavaFX extends TextureFX { + protected float[] red = new float[256]; + protected float[] green = new float[256]; + protected float[] blue = new float[256]; + protected float[] alpha = new float[256]; + + public TextureLavaFX() { + super(Block.lavaMoving.blockIndexInTexture); + } + + public void onTick() { + int var2; + float var3; + int var5; + int var6; + int var7; + int var8; + int var9; + for(int var1 = 0; var1 < 16; ++var1) { + for(var2 = 0; var2 < 16; ++var2) { + var3 = 0.0F; + int var4 = (int)(MathHelper.sin((float)var2 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); + var5 = (int)(MathHelper.sin((float)var1 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); + + for(var6 = var1 - 1; var6 <= var1 + 1; ++var6) { + for(var7 = var2 - 1; var7 <= var2 + 1; ++var7) { + var8 = var6 + var4 & 15; + var9 = var7 + var5 & 15; + var3 += this.red[var8 + var9 * 16]; + } + } + + this.green[var1 + var2 * 16] = var3 / 10.0F + (this.blue[(var1 + 0 & 15) + (var2 + 0 & 15) * 16] + this.blue[(var1 + 1 & 15) + (var2 + 0 & 15) * 16] + this.blue[(var1 + 1 & 15) + (var2 + 1 & 15) * 16] + this.blue[(var1 + 0 & 15) + (var2 + 1 & 15) * 16]) / 4.0F * 0.8F; + this.blue[var1 + var2 * 16] += this.alpha[var1 + var2 * 16] * 0.01F; + if(this.blue[var1 + var2 * 16] < 0.0F) { + this.blue[var1 + var2 * 16] = 0.0F; + } + + this.alpha[var1 + var2 * 16] -= 0.06F; + if(Math.random() < 0.005D) { + this.alpha[var1 + var2 * 16] = 1.5F; + } + } + } + + float[] var11 = this.green; + this.green = this.red; + this.red = var11; + + for(var2 = 0; var2 < 256; ++var2) { + var3 = this.red[var2] * 2.0F; + if(var3 > 1.0F) { + var3 = 1.0F; + } + + if(var3 < 0.0F) { + var3 = 0.0F; + } + + var5 = (int)(var3 * 100.0F + 155.0F); + var6 = (int)(var3 * var3 * 255.0F); + var7 = (int)(var3 * var3 * var3 * var3 * 128.0F); + if(this.anaglyphEnabled) { + var8 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; + var9 = (var5 * 30 + var6 * 70) / 100; + int var10 = (var5 * 30 + var7 * 70) / 100; + var5 = var8; + var6 = var9; + var7 = var10; + } + + this.imageData[var2 * 4 + 0] = (byte)var5; + this.imageData[var2 * 4 + 1] = (byte)var6; + this.imageData[var2 * 4 + 2] = (byte)var7; + this.imageData[var2 * 4 + 3] = -1; + } + + } +} diff --git a/source/net/minecraft/src/TextureLavaFlowFX.java b/source/net/minecraft/src/TextureLavaFlowFX.java new file mode 100644 index 0000000..8d91375 --- /dev/null +++ b/source/net/minecraft/src/TextureLavaFlowFX.java @@ -0,0 +1,85 @@ +package net.minecraft.src; + +public class TextureLavaFlowFX extends TextureFX { + protected float[] red = new float[256]; + protected float[] green = new float[256]; + protected float[] blue = new float[256]; + protected float[] alpha = new float[256]; + int tickCounter = 0; + + public TextureLavaFlowFX() { + super(Block.lavaMoving.blockIndexInTexture + 1); + this.tileSize = 2; + } + + public void onTick() { + ++this.tickCounter; + + int var2; + float var3; + int var5; + int var6; + int var7; + int var8; + int var9; + for(int var1 = 0; var1 < 16; ++var1) { + for(var2 = 0; var2 < 16; ++var2) { + var3 = 0.0F; + int var4 = (int)(MathHelper.sin((float)var2 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); + var5 = (int)(MathHelper.sin((float)var1 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); + + for(var6 = var1 - 1; var6 <= var1 + 1; ++var6) { + for(var7 = var2 - 1; var7 <= var2 + 1; ++var7) { + var8 = var6 + var4 & 15; + var9 = var7 + var5 & 15; + var3 += this.red[var8 + var9 * 16]; + } + } + + this.green[var1 + var2 * 16] = var3 / 10.0F + (this.blue[(var1 + 0 & 15) + (var2 + 0 & 15) * 16] + this.blue[(var1 + 1 & 15) + (var2 + 0 & 15) * 16] + this.blue[(var1 + 1 & 15) + (var2 + 1 & 15) * 16] + this.blue[(var1 + 0 & 15) + (var2 + 1 & 15) * 16]) / 4.0F * 0.8F; + this.blue[var1 + var2 * 16] += this.alpha[var1 + var2 * 16] * 0.01F; + if(this.blue[var1 + var2 * 16] < 0.0F) { + this.blue[var1 + var2 * 16] = 0.0F; + } + + this.alpha[var1 + var2 * 16] -= 0.06F; + if(Math.random() < 0.005D) { + this.alpha[var1 + var2 * 16] = 1.5F; + } + } + } + + float[] var11 = this.green; + this.green = this.red; + this.red = var11; + + for(var2 = 0; var2 < 256; ++var2) { + var3 = this.red[var2 - this.tickCounter / 3 * 16 & 255] * 2.0F; + if(var3 > 1.0F) { + var3 = 1.0F; + } + + if(var3 < 0.0F) { + var3 = 0.0F; + } + + var5 = (int)(var3 * 100.0F + 155.0F); + var6 = (int)(var3 * var3 * 255.0F); + var7 = (int)(var3 * var3 * var3 * var3 * 128.0F); + if(this.anaglyphEnabled) { + var8 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; + var9 = (var5 * 30 + var6 * 70) / 100; + int var10 = (var5 * 30 + var7 * 70) / 100; + var5 = var8; + var6 = var9; + var7 = var10; + } + + this.imageData[var2 * 4 + 0] = (byte)var5; + this.imageData[var2 * 4 + 1] = (byte)var6; + this.imageData[var2 * 4 + 2] = (byte)var7; + this.imageData[var2 * 4 + 3] = -1; + } + + } +} diff --git a/source/net/minecraft/src/TextureWaterFX.java b/source/net/minecraft/src/TextureWaterFX.java new file mode 100644 index 0000000..67a5040 --- /dev/null +++ b/source/net/minecraft/src/TextureWaterFX.java @@ -0,0 +1,85 @@ +package net.minecraft.src; + +public class TextureWaterFX extends TextureFX { + protected float[] red = new float[256]; + protected float[] green = new float[256]; + protected float[] blue = new float[256]; + protected float[] alpha = new float[256]; + private int tickCounter = 0; + + public TextureWaterFX() { + super(Block.waterMoving.blockIndexInTexture); + } + + public void onTick() { + ++this.tickCounter; + + int var1; + int var2; + float var3; + int var5; + int var6; + for(var1 = 0; var1 < 16; ++var1) { + for(var2 = 0; var2 < 16; ++var2) { + var3 = 0.0F; + + for(int var4 = var1 - 1; var4 <= var1 + 1; ++var4) { + var5 = var4 & 15; + var6 = var2 & 15; + var3 += this.red[var5 + var6 * 16]; + } + + this.green[var1 + var2 * 16] = var3 / 3.3F + this.blue[var1 + var2 * 16] * 0.8F; + } + } + + for(var1 = 0; var1 < 16; ++var1) { + for(var2 = 0; var2 < 16; ++var2) { + this.blue[var1 + var2 * 16] += this.alpha[var1 + var2 * 16] * 0.05F; + if(this.blue[var1 + var2 * 16] < 0.0F) { + this.blue[var1 + var2 * 16] = 0.0F; + } + + this.alpha[var1 + var2 * 16] -= 0.1F; + if(Math.random() < 0.05D) { + this.alpha[var1 + var2 * 16] = 0.5F; + } + } + } + + float[] var12 = this.green; + this.green = this.red; + this.red = var12; + + for(var2 = 0; var2 < 256; ++var2) { + var3 = this.red[var2]; + if(var3 > 1.0F) { + var3 = 1.0F; + } + + if(var3 < 0.0F) { + var3 = 0.0F; + } + + float var13 = var3 * var3; + var5 = (int)(32.0F + var13 * 32.0F); + var6 = (int)(50.0F + var13 * 64.0F); + int var7 = 255; + int var8 = (int)(146.0F + var13 * 50.0F); + if(this.anaglyphEnabled) { + int var9 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; + int var10 = (var5 * 30 + var6 * 70) / 100; + int var11 = (var5 * 30 + var7 * 70) / 100; + var5 = var9; + var6 = var10; + var7 = var11; + } + + this.imageData[var2 * 4 + 0] = (byte)var5; + this.imageData[var2 * 4 + 1] = (byte)var6; + this.imageData[var2 * 4 + 2] = (byte)var7; + this.imageData[var2 * 4 + 3] = (byte)var8; + } + + } +} diff --git a/source/net/minecraft/src/TextureWaterFlowFX.java b/source/net/minecraft/src/TextureWaterFlowFX.java new file mode 100644 index 0000000..668c17f --- /dev/null +++ b/source/net/minecraft/src/TextureWaterFlowFX.java @@ -0,0 +1,86 @@ +package net.minecraft.src; + +public class TextureWaterFlowFX extends TextureFX { + protected float[] red = new float[256]; + protected float[] green = new float[256]; + protected float[] blue = new float[256]; + protected float[] alpha = new float[256]; + private int tickCounter = 0; + + public TextureWaterFlowFX() { + super(Block.waterMoving.blockIndexInTexture + 1); + this.tileSize = 2; + } + + public void onTick() { + ++this.tickCounter; + + int var1; + int var2; + float var3; + int var5; + int var6; + for(var1 = 0; var1 < 16; ++var1) { + for(var2 = 0; var2 < 16; ++var2) { + var3 = 0.0F; + + for(int var4 = var2 - 2; var4 <= var2; ++var4) { + var5 = var1 & 15; + var6 = var4 & 15; + var3 += this.red[var5 + var6 * 16]; + } + + this.green[var1 + var2 * 16] = var3 / 3.2F + this.blue[var1 + var2 * 16] * 0.8F; + } + } + + for(var1 = 0; var1 < 16; ++var1) { + for(var2 = 0; var2 < 16; ++var2) { + this.blue[var1 + var2 * 16] += this.alpha[var1 + var2 * 16] * 0.05F; + if(this.blue[var1 + var2 * 16] < 0.0F) { + this.blue[var1 + var2 * 16] = 0.0F; + } + + this.alpha[var1 + var2 * 16] -= 0.3F; + if(Math.random() < 0.2D) { + this.alpha[var1 + var2 * 16] = 0.5F; + } + } + } + + float[] var12 = this.green; + this.green = this.red; + this.red = var12; + + for(var2 = 0; var2 < 256; ++var2) { + var3 = this.red[var2 - this.tickCounter * 16 & 255]; + if(var3 > 1.0F) { + var3 = 1.0F; + } + + if(var3 < 0.0F) { + var3 = 0.0F; + } + + float var13 = var3 * var3; + var5 = (int)(32.0F + var13 * 32.0F); + var6 = (int)(50.0F + var13 * 64.0F); + int var7 = 255; + int var8 = (int)(146.0F + var13 * 50.0F); + if(this.anaglyphEnabled) { + int var9 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; + int var10 = (var5 * 30 + var6 * 70) / 100; + int var11 = (var5 * 30 + var7 * 70) / 100; + var5 = var9; + var6 = var10; + var7 = var11; + } + + this.imageData[var2 * 4 + 0] = (byte)var5; + this.imageData[var2 * 4 + 1] = (byte)var6; + this.imageData[var2 * 4 + 2] = (byte)var7; + this.imageData[var2 * 4 + 3] = (byte)var8; + } + + } +} diff --git a/source/net/minecraft/src/TexturedQuad.java b/source/net/minecraft/src/TexturedQuad.java new file mode 100644 index 0000000..60719d0 --- /dev/null +++ b/source/net/minecraft/src/TexturedQuad.java @@ -0,0 +1,47 @@ +package net.minecraft.src; + +public class TexturedQuad { + public PositionTextureVertex[] vertexPositions; + public int nVertices; + + public TexturedQuad(PositionTextureVertex[] var1) { + this.nVertices = 0; + this.vertexPositions = var1; + this.nVertices = var1.length; + } + + public TexturedQuad(PositionTextureVertex[] var1, int var2, int var3, int var4, int var5) { + this(var1); + float var6 = 0.0015625F; + float var7 = 0.003125F; + var1[0] = var1[0].setTexturePosition((float)var4 / 64.0F - var6, (float)var3 / 32.0F + var7); + var1[1] = var1[1].setTexturePosition((float)var2 / 64.0F + var6, (float)var3 / 32.0F + var7); + var1[2] = var1[2].setTexturePosition((float)var2 / 64.0F + var6, (float)var5 / 32.0F - var7); + var1[3] = var1[3].setTexturePosition((float)var4 / 64.0F - var6, (float)var5 / 32.0F - var7); + } + + 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) { + Vec3D var3 = this.vertexPositions[1].vector3D.subtract(this.vertexPositions[0].vector3D); + Vec3D var4 = this.vertexPositions[1].vector3D.subtract(this.vertexPositions[2].vector3D); + Vec3D var5 = var4.crossProduct(var3).normalize(); + var1.startDrawingQuads(); + 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/source/net/minecraft/src/ThreadDownloadImage.java b/source/net/minecraft/src/ThreadDownloadImage.java new file mode 100644 index 0000000..3912dc6 --- /dev/null +++ b/source/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 ImageBuffer buffer; + final ThreadDownloadImageData imageData; + + ThreadDownloadImage(ThreadDownloadImageData var1, String var2, ImageBuffer 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() != 404) { + 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/source/net/minecraft/src/ThreadDownloadImageData.java b/source/net/minecraft/src/ThreadDownloadImageData.java new file mode 100644 index 0000000..13ac4e6 --- /dev/null +++ b/source/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, ImageBuffer var2) { + (new ThreadDownloadImage(this, var1, var2)).start(); + } +} diff --git a/source/net/minecraft/src/ThreadDownloadResources.java b/source/net/minecraft/src/ThreadDownloadResources.java new file mode 100644 index 0000000..6bcdb12 --- /dev/null +++ b/source/net/minecraft/src/ThreadDownloadResources.java @@ -0,0 +1,117 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.ArrayList; + +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 { + ArrayList var1 = new ArrayList(); + URL var2 = new URL("http://www.minecraft.net/resources/"); + BufferedReader var3 = new BufferedReader(new InputStreamReader(var2.openStream())); + String var4 = ""; + + while(true) { + var4 = var3.readLine(); + if(var4 == null) { + var3.close(); + + for(int var5 = 0; var5 < var1.size(); ++var5) { + this.downloadAndInstallResource(var2, (String)var1.get(var5)); + if(this.closing) { + return; + } + } + break; + } + + var1.add(var4); + } + } catch (IOException var6) { + this.loadResource(this.resourcesFolder, ""); + var6.printStackTrace(); + } + + } + + 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 { + this.mc.installResource(var2 + var3[var4].getName(), var3[var4]); + } + } + + } + + private void downloadAndInstallResource(URL var1, String var2) { + try { + String[] var3 = var2.split(","); + String var4 = var3[0]; + int var5 = Integer.parseInt(var3[1]); + long var6 = Long.parseLong(var3[2]); + var6 /= 2L; + File var8 = new File(this.resourcesFolder, var4); + if(!var8.exists() || var8.length() != (long)var5) { + var8.getParentFile().mkdirs(); + String var9 = var4.replaceAll(" ", "%20"); + this.downloadResource(new URL(var1, var9), var8, var5); + if(this.closing) { + return; + } + } + + this.mc.installResource(var4, var8); + } catch (Exception var10) { + var10.printStackTrace(); + } + + } + + private void downloadResource(URL var1, File var2, int var3) throws IOException { + byte[] var4 = new byte[4096]; + DataInputStream var5 = new DataInputStream(var1.openStream()); + DataOutputStream var6 = new DataOutputStream(new FileOutputStream(var2)); + boolean var7 = false; + + do { + int var8 = var5.read(var4); + if(var8 < 0) { + var5.close(); + var6.close(); + return; + } + + var6.write(var4, 0, var8); + } while(!this.closing); + + } + + public void closeMinecraft() { + this.closing = true; + } +} diff --git a/source/net/minecraft/src/ThreadRunIsoClient.java b/source/net/minecraft/src/ThreadRunIsoClient.java new file mode 100644 index 0000000..aed30bb --- /dev/null +++ b/source/net/minecraft/src/ThreadRunIsoClient.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +class ThreadRunIsoClient extends Thread { + final CanvasIsomPreview isoCanvas; + + ThreadRunIsoClient(CanvasIsomPreview var1) { + this.isoCanvas = var1; + } + + public void run() { + while(CanvasIsomPreview.a(this.isoCanvas)) { + this.isoCanvas.render(); + + try { + Thread.sleep(1L); + } catch (Exception var2) { + } + } + + } +} diff --git a/source/net/minecraft/src/ThreadSleepForever.java b/source/net/minecraft/src/ThreadSleepForever.java new file mode 100644 index 0000000..09cb8b7 --- /dev/null +++ b/source/net/minecraft/src/ThreadSleepForever.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +class ThreadSleepForever extends Thread { + final Minecraft mc; + + ThreadSleepForever(Minecraft var1, String var2) { + super(var2); + this.mc = var1; + this.setDaemon(true); + this.start(); + } + + public void run() { + while(this.mc.running) { + try { + Thread.sleep(2147483647L); + } catch (InterruptedException var2) { + } + } + + } +} diff --git a/source/net/minecraft/src/TileEntity.java b/source/net/minecraft/src/TileEntity.java new file mode 100644 index 0000000..78965d1 --- /dev/null +++ b/source/net/minecraft/src/TileEntity.java @@ -0,0 +1,86 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; + +public class TileEntity { + private static Map nameToClassMap = new HashMap(); + private static Map classToNameMap = new HashMap(); + public World worldObj; + public int xCoord; + public int yCoord; + public int zCoord; + + private static void addMapping(Class var0, String var1) { + if(classToNameMap.containsKey(var1)) { + throw new IllegalArgumentException("Duplicate id: " + var1); + } else { + nameToClassMap.put(var1, var0); + classToNameMap.put(var0, var1); + } + } + + 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 { + System.out.println("Skipping TileEntity with id " + var0.getString("id")); + } + + return var1; + } + + public int getBlockMetadata() { + return this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord); + } + + public void onInventoryChanged() { + this.worldObj.updateTileEntityChunkAndDoNothing(this.xCoord, this.yCoord, this.zCoord); + } + + 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; + } + + static { + addMapping(TileEntityFurnace.class, "Furnace"); + addMapping(TileEntityChest.class, "Chest"); + addMapping(TileEntitySign.class, "Sign"); + addMapping(TileEntityMobSpawner.class, "MobSpawner"); + } +} diff --git a/source/net/minecraft/src/TileEntityChest.java b/source/net/minecraft/src/TileEntityChest.java new file mode 100644 index 0000000..e29f7d0 --- /dev/null +++ b/source/net/minecraft/src/TileEntityChest.java @@ -0,0 +1,80 @@ +package net.minecraft.src; + +public class TileEntityChest extends TileEntity implements IInventory { + private ItemStack[] chestContents = new ItemStack[36]; + + 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; + return var3; + } else { + var3 = this.chestContents[var1].splitStack(var2); + if(this.chestContents[var1].stackSize == 0) { + this.chestContents[var1] = null; + } + + return var3; + } + } 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(); + } + + } + + public String getInvName() { + return "Chest"; + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + NBTTagList var2 = var1.getTagList("Items"); + this.chestContents = 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.chestContents.length) { + this.chestContents[var5] = new ItemStack(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.setTag(var4); + } + } + + var1.setTag("Items", var2); + } + + public int getInventoryStackLimit() { + return 64; + } +} diff --git a/source/net/minecraft/src/TileEntityFurnace.java b/source/net/minecraft/src/TileEntityFurnace.java new file mode 100644 index 0000000..fe6c7d7 --- /dev/null +++ b/source/net/minecraft/src/TileEntityFurnace.java @@ -0,0 +1,190 @@ +package net.minecraft.src; + +public class TileEntityFurnace extends TileEntity implements IInventory { + private ItemStack[] furnaceItemStacks = new ItemStack[3]; + private int furnaceBurnTime = 0; + private int currentItemBurnTime = 0; + private int furnaceCookTime = 0; + + 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 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 "Chest"; + } + + 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] = new ItemStack(var4); + } + } + + this.furnaceBurnTime = var1.getShort("BurnTime"); + this.furnaceCookTime = var1.getShort("CookTime"); + this.currentItemBurnTime = this.getItemBurnTime(this.furnaceItemStacks[1]); + } + + 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.setTag(var4); + } + } + + var1.setTag("Items", var2); + } + + 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; + var2 = true; + } + + if(this.furnaceBurnTime == 0 && this.canSmelt()) { + this.currentItemBurnTime = this.furnaceBurnTime = this.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) { + this.furnaceItemStacks[1] = 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.worldObj.updateTileEntityChunkAndDoNothing(this.xCoord, this.yCoord, this.zCoord); + } + + } + + private boolean canSmelt() { + if(this.furnaceItemStacks[0] == null) { + return false; + } else { + int var1 = this.getSmeltingResult(this.furnaceItemStacks[0].getItem().shiftedIndex); + return var1 < 0 ? false : (this.furnaceItemStacks[2] == null ? true : (this.furnaceItemStacks[2].itemID != var1 ? false : (this.furnaceItemStacks[2].stackSize < this.getInventoryStackLimit() && this.furnaceItemStacks[2].stackSize < this.furnaceItemStacks[2].getMaxStackSize() ? true : this.furnaceItemStacks[2].stackSize < Item.itemsList[var1].getItemStackLimit()))); + } + } + + public void smeltItem() { + if(this.canSmelt()) { + int var1 = this.getSmeltingResult(this.furnaceItemStacks[0].getItem().shiftedIndex); + if(this.furnaceItemStacks[2] == null) { + this.furnaceItemStacks[2] = new ItemStack(var1, 1); + } else if(this.furnaceItemStacks[2].itemID == var1) { + ++this.furnaceItemStacks[2].stackSize; + } + + --this.furnaceItemStacks[0].stackSize; + if(this.furnaceItemStacks[0].stackSize <= 0) { + this.furnaceItemStacks[0] = null; + } + + } + } + + private int getSmeltingResult(int var1) { + return var1 == Block.oreIron.blockID ? Item.ingotIron.shiftedIndex : (var1 == Block.oreGold.blockID ? Item.ingotGold.shiftedIndex : (var1 == Block.oreDiamond.blockID ? Item.diamond.shiftedIndex : (var1 == Block.sand.blockID ? Block.glass.blockID : (var1 == Item.porkRaw.shiftedIndex ? Item.porkCooked.shiftedIndex : (var1 == Block.cobblestone.blockID ? Block.stone.blockID : -1))))); + } + + private int getItemBurnTime(ItemStack var1) { + if(var1 == null) { + return 0; + } else { + int var2 = var1.getItem().shiftedIndex; + return var2 < 256 && Block.blocksList[var2].blockMaterial == Material.wood ? 300 : (var2 == Item.stick.shiftedIndex ? 100 : (var2 == Item.coal.shiftedIndex ? 1600 : 0)); + } + } + + public void onInventoryChanged() { + this.worldObj.updateTileEntityChunkAndDoNothing(this.xCoord, this.yCoord, this.zCoord); + } +} diff --git a/source/net/minecraft/src/TileEntityMobSpawner.java b/source/net/minecraft/src/TileEntityMobSpawner.java new file mode 100644 index 0000000..a03cbb6 --- /dev/null +++ b/source/net/minecraft/src/TileEntityMobSpawner.java @@ -0,0 +1,94 @@ +package net.minecraft.src; + +public class TileEntityMobSpawner extends TileEntity { + public int delay = -1; + public String mobID = "Pig"; + public double yaw; + public double prevYaw = 0.0D; + + public TileEntityMobSpawner() { + this.delay = 20; + } + + public boolean anyPlayerInRange() { + double var1 = this.worldObj.playerEntity.getDistanceSq((double)this.xCoord, (double)this.yCoord, (double)this.zCoord); + return var1 <= 256.0D; + } + + public void updateEntity() { + this.prevYaw = this.yaw; + if(this.anyPlayerInRange()) { + double var1 = (double)((float)this.xCoord + this.worldObj.rand.nextFloat()); + double var3 = (double)((float)this.yCoord + this.worldObj.rand.nextFloat()); + double var5 = (double)((float)this.zCoord + this.worldObj.rand.nextFloat()); + this.worldObj.spawnParticle("smoke", var1, var3, var5, 0.0D, 0.0D, 0.0D); + this.worldObj.spawnParticle("flame", var1, var3, var5, 0.0D, 0.0D, 0.0D); + + for(this.yaw += (double)(1000.0F / ((float)this.delay + 200.0F)); this.yaw > 360.0D; this.prevYaw -= 360.0D) { + this.yaw -= 360.0D; + } + + if(this.delay == -1) { + this.updateDelay(); + } + + if(this.delay > 0) { + --this.delay; + } else { + byte var7 = 4; + + for(int var8 = 0; var8 < var7; ++var8) { + EntityLiving var9 = (EntityLiving)((EntityLiving)EntityList.createEntityInWorld(this.mobID, this.worldObj)); + if(var9 == null) { + return; + } + + int var10 = this.worldObj.getEntitiesWithinAABB(var9.getClass(), AxisAlignedBB.getBoundingBoxFromPool((double)this.xCoord, (double)this.yCoord, (double)this.zCoord, (double)(this.xCoord + 1), (double)(this.yCoord + 1), (double)(this.zCoord + 1)).expand(8.0D, 4.0D, 8.0D)).size(); + if(var10 >= 6) { + this.updateDelay(); + return; + } + + if(var9 != null) { + double var11 = (double)this.xCoord + (this.worldObj.rand.nextDouble() - this.worldObj.rand.nextDouble()) * 4.0D; + double var13 = (double)(this.yCoord + this.worldObj.rand.nextInt(3) - 1); + double var15 = (double)this.zCoord + (this.worldObj.rand.nextDouble() - this.worldObj.rand.nextDouble()) * 4.0D; + var9.setPositionAndRotation(var11, var13, var15, this.worldObj.rand.nextFloat() * 360.0F, 0.0F); + if(var9.getCanSpawnHere(var11, var13, var15)) { + this.worldObj.spawnEntityInWorld(var9); + + for(int var17 = 0; var17 < 20; ++var17) { + var1 = (double)this.xCoord + 0.5D + ((double)this.worldObj.rand.nextFloat() - 0.5D) * 2.0D; + var3 = (double)this.yCoord + 0.5D + ((double)this.worldObj.rand.nextFloat() - 0.5D) * 2.0D; + var5 = (double)this.zCoord + 0.5D + ((double)this.worldObj.rand.nextFloat() - 0.5D) * 2.0D; + this.worldObj.spawnParticle("smoke", var1, var3, var5, 0.0D, 0.0D, 0.0D); + this.worldObj.spawnParticle("flame", var1, var3, var5, 0.0D, 0.0D, 0.0D); + } + + var9.spawnExplosionParticle(); + this.updateDelay(); + } + } + } + + super.updateEntity(); + } + } + } + + private void updateDelay() { + this.delay = 200 + this.worldObj.rand.nextInt(600); + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + this.mobID = var1.getString("EntityId"); + this.delay = var1.getShort("Delay"); + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setString("EntityId", this.mobID); + var1.setShort("Delay", (short)this.delay); + } +} diff --git a/source/net/minecraft/src/TileEntityMobSpawnerRenderer.java b/source/net/minecraft/src/TileEntityMobSpawnerRenderer.java new file mode 100644 index 0000000..6487d2e --- /dev/null +++ b/source/net/minecraft/src/TileEntityMobSpawnerRenderer.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; +import org.lwjgl.opengl.GL11; + +public class TileEntityMobSpawnerRenderer extends TileEntitySpecialRenderer { + private Map entityHashMap = new HashMap(); + + public void a(TileEntityMobSpawner var1, double var2, double var4, double var6, float var8) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2 + 0.5F, (float)var4, (float)var6 + 0.5F); + Entity var9 = (Entity)this.entityHashMap.get(var1.mobID); + if(var9 == null) { + var9 = EntityList.createEntityInWorld(var1.mobID, (World)null); + this.entityHashMap.put(var1.mobID, var9); + } + + if(var9 != null) { + var9.setWorld(var1.worldObj); + float var10 = 7.0F / 16.0F; + GL11.glTranslatef(0.0F, 0.4F, 0.0F); + GL11.glRotatef((float)(var1.prevYaw + (var1.yaw - var1.prevYaw) * (double)var8) * 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(var10, var10, var10); + RenderManager.instance.renderEntityWithPosYaw(var9, 0.0D, 0.0D, 0.0D, 0.0F, var8); + } + + GL11.glPopMatrix(); + } + + public void renderTileEntityMobSpawner(TileEntity var1, double var2, double var4, double var6, float var8) { + this.a((TileEntityMobSpawner)var1, var2, var4, var6, var8); + } +} diff --git a/source/net/minecraft/src/TileEntityRenderer.java b/source/net/minecraft/src/TileEntityRenderer.java new file mode 100644 index 0000000..c11fa4e --- /dev/null +++ b/source/net/minecraft/src/TileEntityRenderer.java @@ -0,0 +1,86 @@ +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 EntityPlayer entityPlayer; + 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()); + 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 this.getSpecialRendererForClass(var1.getClass()); + } + + public void cacheActiveRenderInfo(World var1, RenderEngine var2, FontRenderer var3, EntityPlayer var4, float var5) { + this.worldObj = var1; + this.renderEngine = var2; + this.entityPlayer = 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) < 4096.0D) { + float var3 = this.worldObj.getBrightness(var1.xCoord, var1.yCoord, var1.zCoord); + GL11.glColor3f(var3, var3, var3); + 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) { + var9.renderTileEntityMobSpawner(var1, var2, var4, var6, var8); + } + + } + + public FontRenderer getFontRenderer() { + return this.fontRenderer; + } +} diff --git a/source/net/minecraft/src/TileEntitySign.java b/source/net/minecraft/src/TileEntitySign.java new file mode 100644 index 0000000..69f2787 --- /dev/null +++ b/source/net/minecraft/src/TileEntitySign.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class TileEntitySign extends TileEntity { + public String[] signText = new String[]{"", "", "", ""}; + public int lineBeingEdited = -1; + + 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) { + 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); + } + } + + } +} diff --git a/source/net/minecraft/src/TileEntitySignRenderer.java b/source/net/minecraft/src/TileEntitySignRenderer.java new file mode 100644 index 0000000..b12ca76 --- /dev/null +++ b/source/net/minecraft/src/TileEntitySignRenderer.java @@ -0,0 +1,41 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class TileEntitySignRenderer extends TileEntitySpecialRenderer { + private SignModel modelSign = new SignModel(); + + public void a(TileEntitySign 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.getBlockMetadata() * 360) / 16.0F; + GL11.glRotatef(-var9, 0.0F, 1.0F, 0.0F); + this.bindTextureByName("/item/sign.png"); + GL11.glPushMatrix(); + GL11.glScalef(1.0F, -1.0F, -1.0F); + this.modelSign.renderSign(); + GL11.glPopMatrix(); + float var10 = (float)(1.0D / 60.0D); + GL11.glTranslatef(0.0F, 0.5F, 0.09F); + GL11.glScalef(var10, -var10, var10); + GL11.glNormal3f(0.0F, 0.0F, -1.0F * var10); + FontRenderer var11 = this.getFontRenderer(); + + for(int var12 = 0; var12 < var1.signText.length; ++var12) { + String var13 = var1.signText[var12]; + if(var12 == var1.lineBeingEdited) { + var13 = "> " + var13 + " <"; + var11.drawString(var13, -var11.getStringWidth(var13) / 2, var12 * 10 - var1.signText.length * 5, 0); + } else { + var11.drawString(var13, -var11.getStringWidth(var13) / 2, var12 * 10 - var1.signText.length * 5, 0); + } + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glPopMatrix(); + } + + public void renderTileEntityMobSpawner(TileEntity var1, double var2, double var4, double var6, float var8) { + this.a((TileEntitySign)var1, var2, var4, var6, var8); + } +} diff --git a/source/net/minecraft/src/TileEntitySpecialRenderer.java b/source/net/minecraft/src/TileEntitySpecialRenderer.java new file mode 100644 index 0000000..d0ae86c --- /dev/null +++ b/source/net/minecraft/src/TileEntitySpecialRenderer.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public abstract class TileEntitySpecialRenderer { + protected TileEntityRenderer tileEntityRenderer; + + public abstract void renderTileEntityMobSpawner(TileEntity var1, double var2, double var4, double var6, float var8); + + protected void bindTextureByName(String var1) { + RenderEngine var2 = this.tileEntityRenderer.renderEngine; + var2.bindTexture(var2.getTexture(var1)); + } + + public void setTileEntityRenderer(TileEntityRenderer var1) { + this.tileEntityRenderer = var1; + } + + public FontRenderer getFontRenderer() { + return this.tileEntityRenderer.getFontRenderer(); + } +} diff --git a/source/net/minecraft/src/Timer.java b/source/net/minecraft/src/Timer.java new file mode 100644 index 0000000..55f1390 --- /dev/null +++ b/source/net/minecraft/src/Timer.java @@ -0,0 +1,58 @@ +package net.minecraft.src; + +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 double timeSyncAdjustment = 1.0D; + + public Timer(float var1) { + this.ticksPerSecond = var1; + this.lastSyncSysClock = System.currentTimeMillis(); + this.lastSyncHRClock = System.nanoTime() / 1000000L; + } + + public void updateTimer() { + long var1 = System.currentTimeMillis(); + long var3 = var1 - this.lastSyncSysClock; + long var5 = System.nanoTime() / 1000000L; + double var9; + if(var3 > 1000L) { + long var7 = var5 - this.lastSyncHRClock; + var9 = (double)var3 / (double)var7; + this.timeSyncAdjustment += (var9 - this.timeSyncAdjustment) * (double)0.2F; + this.lastSyncSysClock = var1; + this.lastSyncHRClock = var5; + } + + if(var3 < 0L) { + this.lastSyncSysClock = var1; + this.lastSyncHRClock = var5; + } + + double var11 = (double)var5 / 1000.0D; + var9 = (var11 - this.lastHRTime) * this.timeSyncAdjustment; + this.lastHRTime = var11; + if(var9 < 0.0D) { + var9 = 0.0D; + } + + if(var9 > 1.0D) { + var9 = 1.0D; + } + + this.elapsedPartialTicks = (float)((double)this.elapsedPartialTicks + var9 * (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/source/net/minecraft/src/UnexpectedThrowable.java b/source/net/minecraft/src/UnexpectedThrowable.java new file mode 100644 index 0000000..b05f1b4 --- /dev/null +++ b/source/net/minecraft/src/UnexpectedThrowable.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class UnexpectedThrowable { + public final String description; + public final Exception exception; + + public UnexpectedThrowable(String var1, Exception var2) { + this.description = var1; + this.exception = var2; + } +} diff --git a/source/net/minecraft/src/Vec3D.java b/source/net/minecraft/src/Vec3D.java new file mode 100644 index 0000000..c0b23a5 --- /dev/null +++ b/source/net/minecraft/src/Vec3D.java @@ -0,0 +1,135 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class Vec3D { + private static List vectorList = new ArrayList(); + private static int nextVector = 0; + public double xCoord; + public double yCoord; + public double zCoord; + + public static Vec3D createVectorHelper(double var0, double var2, double var4) { + return new Vec3D(var0, var2, var4); + } + + public static void initialize() { + nextVector = 0; + } + + public static Vec3D createVector(double var0, double var2, double var4) { + if(nextVector >= vectorList.size()) { + vectorList.add(createVectorHelper(0.0D, 0.0D, 0.0D)); + } + + return ((Vec3D)vectorList.get(nextVector++)).setComponents(var0, var2, var4); + } + + private Vec3D(double var1, double var3, double var5) { + if(var1 == -0.0D) { + var1 = 0.0D; + } + + if(var3 == -0.0D) { + var3 = 0.0D; + } + + if(var5 == -0.0D) { + var5 = 0.0D; + } + + this.xCoord = var1; + this.yCoord = var3; + this.zCoord = var5; + } + + private Vec3D setComponents(double var1, double var3, double var5) { + this.xCoord = var1; + this.yCoord = var3; + this.zCoord = var5; + return this; + } + + public Vec3D subtract(Vec3D var1) { + return createVector(var1.xCoord - this.xCoord, var1.yCoord - this.yCoord, var1.zCoord - this.zCoord); + } + + public Vec3D normalize() { + double var1 = (double)MathHelper.sqrt_double(this.xCoord * this.xCoord + this.yCoord * this.yCoord + this.zCoord * this.zCoord); + return var1 < 1.0E-4D ? createVector(0.0D, 0.0D, 0.0D) : createVector(this.xCoord / var1, this.yCoord / var1, this.zCoord / var1); + } + + public Vec3D crossProduct(Vec3D var1) { + return createVector(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 Vec3D addVector(double var1, double var3, double var5) { + return createVector(this.xCoord + var1, this.yCoord + var3, this.zCoord + var5); + } + + public double distanceTo(Vec3D 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(Vec3D 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 Vec3D getIntermediateWithXValue(Vec3D 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 ? createVector(this.xCoord + var4 * var10, this.yCoord + var6 * var10, this.zCoord + var8 * var10) : null; + } + } + + public Vec3D getIntermediateWithYValue(Vec3D 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 ? createVector(this.xCoord + var4 * var10, this.yCoord + var6 * var10, this.zCoord + var8 * var10) : null; + } + } + + public Vec3D getIntermediateWithZValue(Vec3D 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 ? createVector(this.xCoord + var4 * var10, this.yCoord + var6 * var10, this.zCoord + var8 * var10) : null; + } + } + + public String toString() { + return "(" + this.xCoord + ", " + this.yCoord + ", " + this.zCoord + ")"; + } +} diff --git a/source/net/minecraft/src/World.java b/source/net/minecraft/src/World.java new file mode 100644 index 0000000..ce6119a --- /dev/null +++ b/source/net/minecraft/src/World.java @@ -0,0 +1,1599 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Random; +import java.util.Set; +import java.util.TreeSet; + +public class World implements IBlockAccess { + private List lightingToUpdate; + private List loadedEntityList; + private List unloadedEntityList; + private TreeSet scheduledTickTreeSet; + private Set scheduledTickSet; + public List loadedTileEntityList; + public long worldTime; + private long skyColor; + private long fogColor; + private long cloudColor; + public int skylightSubtracted; + private int updateLCG; + private int DIST_HASH_MAGIC; + public boolean editingBlocks; + public static float[] lightBrightnessTable = new float[16]; + public Entity playerEntity; + public int difficultySetting; + public Object fontRenderer; + public Random rand; + public int spawnX; + public int spawnY; + public int spawnZ; + public boolean isNewWorld; + private List worldAccesses; + private IChunkProvider chunkProvider; + private File saveDirectory; + public long randomSeed; + private NBTTagCompound nbtCompoundPlayer; + public long setSizeOnDisk; + public final String levelName; + private ArrayList collidingBoundingBoxes; + private List entitiesWithinAABBExcludingEntity; + + public static NBTTagCompound getLevelData(File var0, String var1) { + File var2 = new File(var0, "saves"); + File var3 = new File(var2, var1); + if(!var3.exists()) { + return null; + } else { + File var4 = new File(var3, "level.dat"); + if(var4.exists()) { + try { + NBTTagCompound var5 = CompressedStreamTools.readCompressed(new FileInputStream(var4)); + NBTTagCompound var6 = var5.getCompoundTag("Data"); + return var6; + } catch (Exception var7) { + var7.printStackTrace(); + } + } + + return null; + } + } + + public static void deleteWorld(File var0, String var1) { + File var2 = new File(var0, "saves"); + File var3 = new File(var2, var1); + if(var3.exists()) { + deleteWorldFiles(var3.listFiles()); + var3.delete(); + } + } + + private static void deleteWorldFiles(File[] var0) { + for(int var1 = 0; var1 < var0.length; ++var1) { + if(var0[var1].isDirectory()) { + deleteWorldFiles(var0[var1].listFiles()); + } + + var0[var1].delete(); + } + + } + + public World(File var1, String var2) { + this(var1, var2, (new Random()).nextLong()); + } + + public World(File var1, String var2, long var3) { + this.lightingToUpdate = new ArrayList(); + this.loadedEntityList = new ArrayList(); + this.unloadedEntityList = new ArrayList(); + this.scheduledTickTreeSet = new TreeSet(); + this.scheduledTickSet = new HashSet(); + this.loadedTileEntityList = new ArrayList(); + this.worldTime = 0L; + this.skyColor = 8961023L; + this.fogColor = 12638463L; + this.cloudColor = 16777215L; + this.skylightSubtracted = 0; + this.updateLCG = (new Random()).nextInt(); + this.DIST_HASH_MAGIC = 1013904223; + this.editingBlocks = false; + this.rand = new Random(); + this.isNewWorld = false; + this.worldAccesses = new ArrayList(); + this.randomSeed = 0L; + this.setSizeOnDisk = 0L; + this.collidingBoundingBoxes = new ArrayList(); + this.entitiesWithinAABBExcludingEntity = new ArrayList(); + this.levelName = var2; + var1.mkdirs(); + this.saveDirectory = new File(var1, var2); + this.saveDirectory.mkdirs(); + File var5 = new File(this.saveDirectory, "level.dat"); + this.isNewWorld = !var5.exists(); + if(var5.exists()) { + try { + NBTTagCompound var6 = CompressedStreamTools.readCompressed(new FileInputStream(var5)); + NBTTagCompound var7 = var6.getCompoundTag("Data"); + this.randomSeed = var7.getLong("RandomSeed"); + this.spawnX = var7.getInteger("SpawnX"); + this.spawnY = var7.getInteger("SpawnY"); + this.spawnZ = var7.getInteger("SpawnZ"); + this.worldTime = var7.getLong("Time"); + this.setSizeOnDisk = var7.getLong("SizeOnDisk"); + this.nbtCompoundPlayer = var7.getCompoundTag("Player"); + } catch (Exception var8) { + var8.printStackTrace(); + } + } + + boolean var9 = false; + if(this.randomSeed == 0L) { + this.randomSeed = var3; + var9 = true; + } + + this.chunkProvider = this.getChunkProvider(this.saveDirectory); + if(var9) { + this.spawnX = 0; + this.spawnY = 64; + + for(this.spawnZ = 0; !this.findSpawn(this.spawnX, this.spawnZ); this.spawnZ += this.rand.nextInt(64) - this.rand.nextInt(64)) { + this.spawnX += this.rand.nextInt(64) - this.rand.nextInt(64); + } + } + + this.calculateInitialSkylight(); + } + + protected IChunkProvider getChunkProvider(File var1) { + return new ChunkProviderLoadOrGenerate(this, new ChunkLoader(var1, true), new ChunkProviderGenerate(this, this.randomSeed)); + } + + public void setSpawnLocation() { + while(this.getFirstUncoveredBlock(this.spawnX, this.spawnZ) == 0) { + this.spawnX += this.rand.nextInt(8) - this.rand.nextInt(8); + this.spawnZ += this.rand.nextInt(8) - this.rand.nextInt(8); + } + + } + + private boolean findSpawn(int var1, int var2) { + return this.getFirstUncoveredBlock(var1, var2) == Block.sand.blockID; + } + + private int getFirstUncoveredBlock(int var1, int var2) { + int var3; + for(var3 = 63; this.getBlockId(var1, var3 + 1, var2) != 0; ++var3) { + } + + return this.getBlockId(var1, var3, var2); + } + + public void spawnPlayerWithLoadedChunks() { + try { + if(this.nbtCompoundPlayer != null) { + this.playerEntity.readFromNBT(this.nbtCompoundPlayer); + this.nbtCompoundPlayer = null; + } + + this.spawnEntityInWorld(this.playerEntity); + } catch (Exception var2) { + var2.printStackTrace(); + } + + } + + public void saveWorld(boolean var1, IProgressUpdate var2) { + if(this.chunkProvider.canSave()) { + if(var2 != null) { + var2.displayProgressMessage("Saving level"); + } + + this.saveLevel(); + if(var2 != null) { + var2.displayLoadingString("Saving chunks"); + } + + this.chunkProvider.saveChunks(var1, var2); + } + } + + private void saveLevel() { + NBTTagCompound var1 = new NBTTagCompound(); + var1.setLong("RandomSeed", this.randomSeed); + var1.setInteger("SpawnX", this.spawnX); + var1.setInteger("SpawnY", this.spawnY); + var1.setInteger("SpawnZ", this.spawnZ); + var1.setLong("Time", this.worldTime); + var1.setLong("SizeOnDisk", this.setSizeOnDisk); + var1.setLong("LastPlayed", System.currentTimeMillis()); + NBTTagCompound var2; + if(this.playerEntity != null) { + var2 = new NBTTagCompound(); + this.playerEntity.writeToNBT(var2); + var1.setCompoundTag("Player", var2); + } + + var2 = new NBTTagCompound(); + var2.setTag("Data", var1); + + try { + File var3 = new File(this.saveDirectory, "level.dat_new"); + File var4 = new File(this.saveDirectory, "level.dat_old"); + File var5 = new File(this.saveDirectory, "level.dat"); + CompressedStreamTools.writeCompressed(var2, new FileOutputStream(var3)); + if(var4.exists()) { + var4.delete(); + } + + var5.renameTo(var4); + if(var5.exists()) { + var5.delete(); + } + + var3.renameTo(var5); + if(var3.exists()) { + var3.delete(); + } + } catch (Exception var6) { + var6.printStackTrace(); + } + + } + + public boolean saveWorld(int var1) { + if(!this.chunkProvider.canSave()) { + return true; + } else { + if(var1 == 0) { + this.saveLevel(); + } + + return this.chunkProvider.saveChunks(false, (IProgressUpdate)null); + } + } + + public int getBlockId(int var1, int var2, int var3) { + return var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000 ? (var2 < 0 ? 0 : (var2 >= 128 ? 0 : this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4).getBlockID(var1 & 15, var2, var3 & 15))) : 0; + } + + public boolean blockExists(int var1, int var2, int var3) { + return var2 >= 0 && var2 < 128 ? this.chunkExists(var1 >> 4, var3 >> 4) : false; + } + + public boolean checkChunksExist(int var1, int var2, int var3, int var4, int var5, int var6) { + if(var5 >= 0 && var2 < 128) { + var1 >>= 4; + var2 >>= 4; + var3 >>= 4; + var4 >>= 4; + var5 >>= 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; + } + } + + private 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 setBlockAndMetadata(int var1, int var2, int var3, int var4, int var5) { + if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + if(var2 < 0) { + return false; + } else if(var2 >= 128) { + return false; + } else { + Chunk var6 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + return var6.setBlockIDWithMetadata(var1 & 15, var2, var3 & 15, var4, var5); + } + } else { + return false; + } + } + + public boolean setBlock(int var1, int var2, int var3, int var4) { + if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + if(var2 < 0) { + return false; + } else if(var2 >= 128) { + return false; + } else { + Chunk var5 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + return var5.setBlockID(var1 & 15, var2, var3 & 15, var4); + } + } 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 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + if(var2 < 0) { + return 0; + } else if(var2 >= 128) { + 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 void setBlockMetadataWithNotify(int var1, int var2, int var3, int var4) { + this.setBlockMetadata(var1, var2, var3, var4); + } + + public boolean setBlockMetadata(int var1, int var2, int var3, int var4) { + if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + if(var2 < 0) { + return false; + } else if(var2 >= 128) { + return false; + } else { + Chunk var5 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + var1 &= 15; + var3 &= 15; + var5.setBlockMetadata(var1, var2, var3, var4); + return true; + } + } else { + return false; + } + } + + public boolean setBlockWithNotify(int var1, int var2, int var3, int var4) { + if(this.setBlock(var1, var2, var3, var4)) { + this.markBlockNeedsUpdate(var1, var2, var3, var4); + return true; + } else { + return false; + } + } + + public boolean setBlockAndMetadataWithNotify(int var1, int var2, int var3, int var4, int var5) { + if(this.setBlockAndMetadata(var1, var2, var3, var4, var5)) { + this.markBlockNeedsUpdate(var1, var2, var3, var4); + return true; + } else { + return false; + } + } + + private void markBlockNeedsUpdate(int var1, int var2, int var3, int var4) { + for(int var5 = 0; var5 < this.worldAccesses.size(); ++var5) { + ((IWorldAccess)this.worldAccesses.get(var5)).markBlockAndNeighborsNeedsUpdate(var1, var2, var3); + } + + this.notifyBlocksOfNeighborChange(var1, var2, var3, var4); + } + + public void markBlockAsNeedsUpdate(int var1, int var2, int var3, int var4) { + if(var3 > var4) { + int var5 = var4; + var4 = var3; + var3 = var5; + } + + this.markBlocksDirty(var1, var3, var2, var1, var4, var2); + } + + public void markBlocksDirty(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)).markBlockRangeNeedsUpdate(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); + } + + private void notifyBlockOfNeighborChange(int var1, int var2, int var3, int var4) { + if(!this.editingBlocks) { + Block var5 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + if(var5 != null) { + var5.onNeighborBlockChange(this, var1, var2, var3, var4); + } + + } + } + + public boolean canBlockSeeTheSky(int var1, int var2, int var3) { + return this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4).canBlockSeeTheSky(var1 & 15, var2, var3 & 15); + } + + 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 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + int var5; + if(var4) { + var5 = this.getBlockId(var1, var2, var3); + if(var5 == Block.stairSingle.blockID || var5 == Block.tilledField.blockID) { + 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 >= 128) { + var5 = 15 - this.skylightSubtracted; + if(var5 < 0) { + var5 = 0; + } + + return var5; + } else { + Chunk var11 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + var1 &= 15; + var3 &= 15; + return var11.getBlockLightValue(var1, var2, var3, this.skylightSubtracted); + } + } else { + return 15; + } + } + + public boolean canExistingBlockSeeTheSky(int var1, int var2, int var3) { + if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + if(var2 < 0) { + return false; + } else if(var2 >= 128) { + return true; + } else if(!this.chunkExists(var1 >> 4, var3 >> 4)) { + return false; + } else { + Chunk var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + var1 &= 15; + var3 &= 15; + return var4.canBlockSeeTheSky(var1, var2, var3); + } + } else { + return false; + } + } + + public int getHeightValue(int var1, int var2) { + if(var1 >= -32000000 && var2 >= -32000000 && var1 < 32000000 && var2 <= 32000000) { + 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 void neighborLightPropagationChanged(EnumSkyBlock var1, int var2, int var3, int var4, int var5) { + if(this.blockExists(var2, var3, var4)) { + if(var1 == EnumSkyBlock.Sky) { + if(this.canExistingBlockSeeTheSky(var2, var3, var4)) { + var5 = 15; + } + } else if(var1 == EnumSkyBlock.Block) { + int var6 = this.getBlockId(var2, var3, var4); + if(Block.lightValue[var6] > var5) { + var5 = Block.lightValue[var6]; + } + } + + if(this.getSavedLightValue(var1, var2, var3, var4) != var5) { + this.scheduleLightingUpdate(var1, var2, var3, var4, var2, var3, var4); + } + + } + } + + public int getSavedLightValue(EnumSkyBlock var1, int var2, int var3, int var4) { + if(var3 >= 0 && var3 < 128 && var2 >= -32000000 && var4 >= -32000000 && var2 < 32000000 && var4 <= 32000000) { + int var5 = var2 >> 4; + int var6 = var4 >> 4; + if(!this.chunkExists(var5, var6)) { + return 0; + } 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 >= -32000000 && var4 >= -32000000 && var2 < 32000000 && var4 <= 32000000) { + if(var3 >= 0) { + if(var3 < 128) { + 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)).markBlockAndNeighborsNeedsUpdate(var2, var3, var4); + } + + } + } + } + } + } + + public float getBrightness(int var1, int var2, int var3) { + return lightBrightnessTable[this.getBlockLightValue(var1, var2, var3)]; + } + + public boolean isDaytime() { + return this.skylightSubtracted < 4; + } + + public MovingObjectPosition rayTraceBlocks(Vec3D var1, Vec3D var2) { + return this.rayTraceBlocks_do(var1, var2, false); + } + + public MovingObjectPosition rayTraceBlocks_do(Vec3D var1, Vec3D var2, boolean var3) { + 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 var4 = MathHelper.floor_double(var2.xCoord); + int var5 = MathHelper.floor_double(var2.yCoord); + int var6 = MathHelper.floor_double(var2.zCoord); + int var7 = MathHelper.floor_double(var1.xCoord); + int var8 = MathHelper.floor_double(var1.yCoord); + int var9 = MathHelper.floor_double(var1.zCoord); + int var10 = 20; + + while(var10-- >= 0) { + if(Double.isNaN(var1.xCoord) || Double.isNaN(var1.yCoord) || Double.isNaN(var1.zCoord)) { + return null; + } + + if(var7 == var4 && var8 == var5 && var9 == var6) { + return null; + } + + double var11 = 999.0D; + double var13 = 999.0D; + double var15 = 999.0D; + if(var4 > var7) { + var11 = (double)var7 + 1.0D; + } + + if(var4 < var7) { + var11 = (double)var7 + 0.0D; + } + + if(var5 > var8) { + var13 = (double)var8 + 1.0D; + } + + if(var5 < var8) { + var13 = (double)var8 + 0.0D; + } + + if(var6 > var9) { + var15 = (double)var9 + 1.0D; + } + + if(var6 < var9) { + var15 = (double)var9 + 0.0D; + } + + double var17 = 999.0D; + double var19 = 999.0D; + double var21 = 999.0D; + double var23 = var2.xCoord - var1.xCoord; + double var25 = var2.yCoord - var1.yCoord; + double var27 = var2.zCoord - var1.zCoord; + if(var11 != 999.0D) { + var17 = (var11 - var1.xCoord) / var23; + } + + if(var13 != 999.0D) { + var19 = (var13 - var1.yCoord) / var25; + } + + if(var15 != 999.0D) { + var21 = (var15 - var1.zCoord) / var27; + } + + boolean var29 = false; + byte var35; + if(var17 < var19 && var17 < var21) { + if(var4 > var7) { + var35 = 4; + } else { + var35 = 5; + } + + var1.xCoord = var11; + var1.yCoord += var25 * var17; + var1.zCoord += var27 * var17; + } else if(var19 < var21) { + if(var5 > var8) { + var35 = 0; + } else { + var35 = 1; + } + + var1.xCoord += var23 * var19; + var1.yCoord = var13; + var1.zCoord += var27 * var19; + } else { + if(var6 > var9) { + var35 = 2; + } else { + var35 = 3; + } + + var1.xCoord += var23 * var21; + var1.yCoord += var25 * var21; + var1.zCoord = var15; + } + + Vec3D var30 = Vec3D.createVector(var1.xCoord, var1.yCoord, var1.zCoord); + var7 = (int)(var30.xCoord = (double)MathHelper.floor_double(var1.xCoord)); + if(var35 == 5) { + --var7; + ++var30.xCoord; + } + + var8 = (int)(var30.yCoord = (double)MathHelper.floor_double(var1.yCoord)); + if(var35 == 1) { + --var8; + ++var30.yCoord; + } + + var9 = (int)(var30.zCoord = (double)MathHelper.floor_double(var1.zCoord)); + if(var35 == 3) { + --var9; + ++var30.zCoord; + } + + int var31 = this.getBlockId(var7, var8, var9); + int var32 = this.getBlockMetadata(var7, var8, var9); + Block var33 = Block.blocksList[var31]; + MovingObjectPosition var34; + if(var31 > 0 && var33.canCollideCheck(var32, var3)) { + var34 = var33.collisionRayTrace(this, var7, var8, var9, var1, var2); + if(var34 != null) { + return var34; + } + } + + var31 = this.getBlockId(var7, var8 - 1, var9); + var32 = this.getBlockMetadata(var7, var8 - 1, var9); + var33 = Block.blocksList[var31]; + if(var31 > 0 && var33.canCollideCheck(var32, var3)) { + var34 = var33.collisionRayTrace(this, var7, var8 - 1, var9, var1, var2); + if(var34 != null) { + return var34; + } + } + } + + return null; + } else { + return null; + } + } else { + return null; + } + } + + public void playSoundAtEntity(Entity var1, String var2, float var3, float var4) { + for(int var5 = 0; var5 < this.worldAccesses.size(); ++var5) { + float var6 = 16.0F; + if(var3 > 1.0F) { + var6 *= var3; + } + + if(this.playerEntity.getDistanceSqToEntity(var1) < (double)(var6 * var6)) { + ((IWorldAccess)this.worldAccesses.get(var5)).playSound(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) { + try { + for(int var10 = 0; var10 < this.worldAccesses.size(); ++var10) { + float var11 = 16.0F; + if(var8 > 1.0F) { + var11 *= var8; + } + + double var12 = var1 - this.playerEntity.posX; + double var14 = var3 - this.playerEntity.posY; + double var16 = var5 - this.playerEntity.posZ; + if(var12 * var12 + var14 * var14 + var16 * var16 < (double)(var11 * var11)) { + ((IWorldAccess)this.worldAccesses.get(var10)).playSound(var7, var1, var3, var5, var8, var9); + } + } + } catch (Exception var18) { + var18.printStackTrace(); + } + + } + + public void playMusic(double var1, double var3, double var5, String var7, float var8) { + } + + 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 void spawnEntityInWorld(Entity var1) { + int var2 = MathHelper.floor_double(var1.posX / 16.0D); + int var3 = MathHelper.floor_double(var1.posZ / 16.0D); + if(this.chunkExists(var2, var3)) { + this.getChunkFromChunkCoords(var2, var3).addEntity(var1); + this.loadedEntityList.add(var1); + + for(int var4 = 0; var4 < this.worldAccesses.size(); ++var4) { + ((IWorldAccess)this.worldAccesses.get(var4)).obtainEntitySkin(var1); + } + } else { + System.out.println("Failed to add entity " + var1); + } + + } + + public void setEntityDead(Entity var1) { + var1.setEntityDead(); + } + + 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 = var5 - 1; var10 < var6; ++var10) { + for(int var11 = var7; var11 < var8; ++var11) { + Block var12 = Block.blocksList[this.getBlockId(var9, var10, var11)]; + if(var12 != null) { + var12.getCollidingBoundingBoxes(this, var9, var10, var11, var2, this.collidingBoundingBoxes); + } + } + } + } + + double var16 = 0.25D; + List var14 = this.getEntitiesWithinAABBExcludingEntity(var1, var2.expand(var16, var16, var16)); + + for(int var15 = 0; var15 < var14.size(); ++var15) { + AxisAlignedBB var13 = ((Entity)var14.get(var15)).getBoundingBox(); + if(var13 != null) { + this.collidingBoundingBoxes.add(var13); + } + + var13 = var1.getCollisionBox((Entity)var14.get(var15)); + if(var13 != null) { + this.collidingBoundingBoxes.add(var13); + } + } + + 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; + } + + return (int)(var3 * 11.0F); + } + + public Vec3D getSkyColor(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.skyColor >> 16 & 255L) / 255.0F; + float var5 = (float)(this.skyColor >> 8 & 255L) / 255.0F; + float var6 = (float)(this.skyColor & 255L) / 255.0F; + var4 *= var3; + var5 *= var3; + var6 *= var3; + return Vec3D.createVector((double)var4, (double)var5, (double)var6); + } + + public float getCelestialAngle(float var1) { + int var2 = (int)(this.worldTime % 24000L); + float var3 = ((float)var2 + var1) / 24000.0F - 0.25F; + if(var3 < 0.0F) { + ++var3; + } + + if(var3 > 1.0F) { + --var3; + } + + float var4 = var3; + var3 = 1.0F - (float)((Math.cos((double)var3 * Math.PI) + 1.0D) / 2.0D); + var3 = var4 + (var3 - var4) / 3.0F; + return var3; + } + + public Vec3D getCloudColor(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.cloudColor >> 16 & 255L) / 255.0F; + float var5 = (float)(this.cloudColor >> 8 & 255L) / 255.0F; + float var6 = (float)(this.cloudColor & 255L) / 255.0F; + var4 *= var3 * 0.9F + 0.1F; + var5 *= var3 * 0.9F + 0.1F; + var6 *= var3 * 0.85F + 0.15F; + return Vec3D.createVector((double)var4, (double)var5, (double)var6); + } + + public Vec3D getFogColor(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.fogColor >> 16 & 255L) / 255.0F; + float var5 = (float)(this.fogColor >> 8 & 255L) / 255.0F; + float var6 = (float)(this.fogColor & 255L) / 255.0F; + var4 *= var3 * 0.94F + 0.06F; + var5 *= var3 * 0.94F + 0.06F; + var6 *= var3 * 0.91F + 0.09F; + return Vec3D.createVector((double)var4, (double)var5, (double)var6); + } + + public int getTopSolidOrLiquidBlock(int var1, int var2) { + return 64; + } + + public float getStarBrightness(float var1) { + float var2 = this.getCelestialAngle(var1); + float var3 = 1.0F - (MathHelper.cos(var2 * (float)Math.PI * 2.0F) * 2.0F + 12.0F / 16.0F); + 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) { + NextTickListEntry var5 = new NextTickListEntry(var1, var2, var3, var4); + byte var6 = 8; + if(this.checkChunksExist(var1 - var6, var2 - var6, var3 - var6, var1 + var6, var2 + var6, var3 + var6)) { + if(var4 > 0) { + var5.setScheduledTime((long)Block.blocksList[var4].tickRate() + this.worldTime); + } + + if(!this.scheduledTickSet.contains(var5)) { + this.scheduledTickSet.add(var5); + this.scheduledTickTreeSet.add(var5); + } + } + + } + + public void updateEntities() { + this.loadedEntityList.removeAll(this.unloadedEntityList); + + int var1; + int var3; + for(var1 = 0; var1 < this.worldAccesses.size(); ++var1) { + IWorldAccess var2 = (IWorldAccess)this.worldAccesses.get(var1); + + for(var3 = 0; var3 < this.unloadedEntityList.size(); ++var3) { + var2.releaseEntitySkin((Entity)this.unloadedEntityList.get(var3)); + } + } + + this.unloadedEntityList.clear(); + + for(var1 = 0; var1 < this.loadedEntityList.size(); ++var1) { + Entity var6 = (Entity)this.loadedEntityList.get(var1); + if(var6.ridingEntity != null) { + if(!var6.ridingEntity.isDead && var6.ridingEntity.riddenByEntity == var6) { + continue; + } + + var6.ridingEntity.riddenByEntity = null; + var6.ridingEntity = null; + } + + if(!var6.isDead) { + this.updateEntity(var6); + } + + if(var6.isDead) { + var3 = MathHelper.floor_double(var6.posX / 16.0D); + int var4 = MathHelper.floor_double(var6.posZ / 16.0D); + if(this.chunkExists(var3, var4)) { + this.getChunkFromChunkCoords(var3, var4).removeEntity(var6); + } + + this.loadedEntityList.remove(var1--); + + for(int var5 = 0; var5 < this.worldAccesses.size(); ++var5) { + ((IWorldAccess)this.worldAccesses.get(var5)).releaseEntitySkin(var6); + } + } + } + + for(var1 = 0; var1 < this.loadedTileEntityList.size(); ++var1) { + TileEntity var7 = (TileEntity)this.loadedTileEntityList.get(var1); + var7.updateEntity(); + } + + } + + private void updateEntity(Entity var1) { + int var2 = MathHelper.floor_double(var1.posX); + int var3 = MathHelper.floor_double(var1.posY); + int var4 = MathHelper.floor_double(var1.posZ); + byte var5 = 16; + if(this.checkChunksExist(var2 - var5, 0, var4 - var5, var2 + var5, 128, var4 + var5)) { + var1.lastTickPosX = var1.posX; + var1.lastTickPosY = var1.posY; + var1.lastTickPosZ = var1.posZ; + var1.prevRotationYaw = var1.rotationYaw; + var1.prevRotationPitch = var1.rotationPitch; + 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.ridingEntity != null) { + var1.updateRidden(); + } else { + var1.onUpdate(); + } + + int var9 = MathHelper.floor_double(var1.posX / 16.0D); + int var10 = MathHelper.floor_double(var1.posY / 16.0D); + int var11 = MathHelper.floor_double(var1.posZ / 16.0D); + if(var6 != var9 || var7 != var10 || var8 != var11) { + if(this.chunkExists(var6, var8)) { + this.getChunkFromChunkCoords(var6, var8).removeEntityAtIndex(var1, var7); + } + + if(this.chunkExists(var9, var11)) { + this.getChunkFromChunkCoords(var9, var11).addEntity(var1); + } else { + var1.setEntityDead(); + } + } + + if(var1.riddenByEntity != null) { + if(!var1.riddenByEntity.isDead && var1.riddenByEntity.ridingEntity == var1) { + this.updateEntity(var1.riddenByEntity); + } else { + var1.riddenByEntity.ridingEntity = null; + var1.riddenByEntity = null; + } + } + + 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; + } + + } + } + + public boolean checkIfAABBIsClear(AxisAlignedBB var1) { + List var2 = this.getEntitiesWithinAABBExcludingEntity((Entity)null, var1); + + for(int var3 = 0; var3 < var2.size(); ++var3) { + Entity var4 = (Entity)var2.get(var3); + if(!var4.isDead && var4.preventEntitySpawning) { + return false; + } + } + + return true; + } + + public boolean getIsAnyLiquid(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.getIsLiquid()) { + 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); + + 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); + boolean var10 = false; + Vec3D var11 = Vec3D.createVector(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.getPercentAir(this.getBlockMetadata(var12, var13, var14))); + if((double)var7 >= var16) { + var10 = true; + var15.velocityToAddToEntity(this, var12, var13, var14, var3, var11); + } + } + } + } + } + + if(var11.lengthVector() > 0.0D) { + var11 = var11.normalize(); + double var18 = 0.004D; + 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 void createExplosion(Entity var1, double var2, double var4, double var6, float var8) { + (new Explosion()).doExplosion(this, var1, var2, var4, var6, var8); + } + + public float getBlockDensity(Vec3D 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(Vec3D.createVector(var14, var16, var18), var1) == null) { + ++var9; + } + + ++var10; + } + } + } + + return (float)var9 / (float)var10; + } + + public void extinguishFire(int var1, int var2, int var3, int var4) { + if(var4 == 0) { + --var2; + } + + if(var4 == 1) { + ++var2; + } + + if(var4 == 2) { + --var3; + } + + if(var4 == 3) { + ++var3; + } + + if(var4 == 4) { + --var1; + } + + if(var4 == 5) { + ++var1; + } + + if(this.getBlockId(var1, var2, var3) == Block.fire.blockID) { + this.playSoundEffect((double)((float)var1 + 0.5F), (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), "random.fizz", 0.5F, 2.6F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.8F); + this.setBlockWithNotify(var1, var2, var3, 0); + } + + } + + public Entity createDebugPlayer(Class var1) { + return null; + } + + public String getDebugLoadedEntities() { + return "All: " + this.loadedEntityList.size(); + } + + public Entity getPlayerEntity() { + return this.playerEntity; + } + + public TileEntity getBlockTileEntity(int var1, int var2, int var3) { + Chunk var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + return var4 != null ? var4.getChunkBlockTileEntity(var1 & 15, var2, var3 & 15) : null; + } + + public void setBlockTileEntity(int var1, int var2, int var3, TileEntity var4) { + Chunk var5 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + if(var5 != null) { + var5.setChunkBlockTileEntity(var1 & 15, var2, var3 & 15, var4); + } + + } + + public void removeBlockTileEntity(int var1, int var2, int var3) { + Chunk var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + if(var4 != null) { + var4.removeChunkBlockTileEntity(var1 & 15, var2, var3 & 15); + } + + } + + public boolean isBlockNormalCube(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return var4 == null ? false : var4.isOpaqueCube(); + } + + public void saveWorldIndirectly(IProgressUpdate var1) { + this.saveWorld(true, var1); + } + + public boolean updatingLighting() { + int var1 = 100000; + + while(this.lightingToUpdate.size() > 0) { + --var1; + if(var1 <= 0) { + return true; + } + + ((MetadataChunkBlock)this.lightingToUpdate.remove(this.lightingToUpdate.size() - 1)).updateLight(this); + } + + return false; + } + + public void scheduleLightingUpdate(EnumSkyBlock var1, int var2, int var3, int var4, int var5, int var6, int var7) { + int var8 = this.lightingToUpdate.size(); + int var9 = 4; + if(var9 > var8) { + var9 = var8; + } + + for(int var10 = 0; var10 < var9; ++var10) { + MetadataChunkBlock var11 = (MetadataChunkBlock)this.lightingToUpdate.get(this.lightingToUpdate.size() - var10 - 1); + if(var11.skyBlock == var1 && var11.getLightUpdated(var2, var3, var4, var5, var6, var7)) { + return; + } + } + + this.lightingToUpdate.add(new MetadataChunkBlock(var1, var2, var3, var4, var5, var6, var7)); + if(this.lightingToUpdate.size() > 100000) { + while(this.lightingToUpdate.size() > '\uc350') { + this.updatingLighting(); + } + } + + } + + public void calculateInitialSkylight() { + int var1 = this.calculateSkylightSubtracted(1.0F); + if(var1 != this.skylightSubtracted) { + this.skylightSubtracted = var1; + } + + } + + public void tick() { + this.chunkProvider.unload100OldestChunks(); + if(!this.loadedEntityList.contains(this.playerEntity) && this.playerEntity != null) { + System.out.println("DOHASDOSHIH!"); + this.spawnEntityInWorld(this.playerEntity); + } + + int var1 = this.calculateSkylightSubtracted(1.0F); + int var2; + if(var1 != this.skylightSubtracted) { + this.skylightSubtracted = var1; + + for(var2 = 0; var2 < this.worldAccesses.size(); ++var2) { + ((IWorldAccess)this.worldAccesses.get(var2)).updateAllRenderers(); + } + } + + ++this.worldTime; + if(this.worldTime % 20L == 0L) { + this.saveWorld(false, (IProgressUpdate)null); + } + + this.tickUpdates(false); + var2 = MathHelper.floor_double(this.playerEntity.posX); + int var3 = MathHelper.floor_double(this.playerEntity.posZ); + byte var4 = 64; + ChunkCache var5 = new ChunkCache(this, var2 - var4, 0, var3 - var4, var2 + var4, 128, var3 + var4); + + for(int var6 = 0; var6 < 8000; ++var6) { + this.updateLCG = this.updateLCG * 3 + this.DIST_HASH_MAGIC; + int var7 = this.updateLCG >> 2; + int var8 = (var7 & 127) - 64 + var2; + int var9 = (var7 >> 8 & 127) - 64 + var3; + int var10 = var7 >> 16 & 127; + int var11 = var5.getBlockId(var8, var10, var9); + if(Block.tickOnLoad[var11]) { + Block.blocksList[var11].updateTick(this, var8, var10, var9, this.rand); + } + } + + } + + public boolean tickUpdates(boolean var1) { + int var2 = this.scheduledTickTreeSet.size(); + if(var2 != this.scheduledTickSet.size()) { + throw new IllegalStateException("TickNextTick list out of synch"); + } else { + if(var2 > 500) { + var2 = 500; + } + + for(int var3 = 0; var3 < var2; ++var3) { + NextTickListEntry var4 = (NextTickListEntry)this.scheduledTickTreeSet.first(); + if(!var1 && var4.scheduledTime > this.worldTime) { + break; + } + + this.scheduledTickTreeSet.remove(var4); + this.scheduledTickSet.remove(var4); + byte var5 = 8; + 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 == var4.blockID && var6 > 0) { + Block.blocksList[var6].updateTick(this, var4.xCoord, var4.yCoord, var4.zCoord, this.rand); + } + } + } + + return this.scheduledTickTreeSet.size() != 0; + } + } + + public void randomDisplayUpdates(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) { + Block.blocksList[var10].randomDisplayTick(this, var7, var8, var9, var5); + } + } + + } + + public List getEntitiesWithinAABBExcludingEntity(Entity var1, AxisAlignedBB var2) { + this.entitiesWithinAABBExcludingEntity.clear(); + int var3 = MathHelper.floor_double((var2.minX - 2.0D) / 16.0D); + int var4 = MathHelper.floor_double((var2.maxX + 2.0D) / 16.0D); + int var5 = MathHelper.floor_double((var2.minZ - 2.0D) / 16.0D); + int var6 = MathHelper.floor_double((var2.maxZ + 2.0D) / 16.0D); + + for(int var7 = var3; var7 <= var4; ++var7) { + for(int var8 = var5; var8 <= var6; ++var8) { + if(this.chunkExists(var7, var8)) { + this.getChunkFromChunkCoords(var7, var8).getEntitiesWithinAABBForEntity(var1, var2, this.entitiesWithinAABBExcludingEntity); + } + } + } + + return this.entitiesWithinAABBExcludingEntity; + } + + public List getEntitiesWithinAABB(Class var1, AxisAlignedBB var2) { + int var3 = MathHelper.floor_double((var2.minX - 2.0D) / 16.0D); + int var4 = MathHelper.floor_double((var2.maxX + 2.0D) / 16.0D); + int var5 = MathHelper.floor_double((var2.minZ - 2.0D) / 16.0D); + int var6 = MathHelper.floor_double((var2.maxZ + 2.0D) / 16.0D); + ArrayList var7 = new ArrayList(); + + for(int var8 = var3; var8 <= var4; ++var8) { + for(int var9 = var5; var9 <= var6; ++var9) { + if(this.chunkExists(var8, var9)) { + this.getChunkFromChunkCoords(var8, var9).getEntitiesOfTypeWithinAAAB(var1, var2, var7); + } + } + } + + return var7; + } + + public List getLoadedEntityList() { + return this.loadedEntityList; + } + + public void updateTileEntityChunkAndDoNothing(int var1, int var2, int var3) { + 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(var1.isAssignableFrom(var4.getClass())) { + ++var2; + } + } + + return var2; + } + + public void addLoadedEntities(List var1) { + this.loadedEntityList.addAll(var1); + + for(int var2 = 0; var2 < this.worldAccesses.size(); ++var2) { + IWorldAccess var3 = (IWorldAccess)this.worldAccesses.get(var2); + + for(int var4 = 0; var4 < var1.size(); ++var4) { + var3.obtainEntitySkin((Entity)var1.get(var4)); + } + } + + } + + public void unloadEntities(List var1) { + this.unloadedEntityList.addAll(var1); + } + + public void dropOldChunks() { + while(this.chunkProvider.unload100OldestChunks()) { + } + + } + + public boolean canBlockBePlacedAt(int var1, int var2, int var3, int var4, boolean var5) { + int var6 = this.getBlockId(var2, var3, var4); + Block var7 = Block.blocksList[var6]; + Block var8 = Block.blocksList[var1]; + AxisAlignedBB var9 = var8.getCollisionBoundingBoxFromPool(this, var2, var3, var4); + if(var5) { + var9 = null; + } + + return (var1 > 0 && var7 == null || var7 == Block.waterMoving || var7 == Block.waterStill || var7 == Block.lavaMoving || var7 == Block.lavaStill || var7 == Block.fire) && (var9 == null || this.checkIfAABBIsClear(var9)) && var8.canPlaceBlockAt(this, var2, var3, var4); + } + + public PathEntity getPathToEntity(Entity var1, Entity var2, float var3) { + int var4 = MathHelper.floor_double(var1.posX); + int var5 = MathHelper.floor_double(var1.posY); + int var6 = MathHelper.floor_double(var1.posZ); + int var7 = (int)(var3 + 32.0F); + int var8 = var4 - var7; + int var9 = var5 - var7; + int var10 = var6 - var7; + int var11 = var4 + var7; + int var12 = var5 + var7; + int var13 = var6 + var7; + ChunkCache var14 = new ChunkCache(this, var8, var9, var10, var11, var12, var13); + return (new Pathfinder(var14)).createEntityPathTo(var1, var2, var3); + } + + public PathEntity getEntityPathToXYZ(Entity var1, int var2, int var3, int var4, float var5) { + int var6 = MathHelper.floor_double(var1.posX); + int var7 = MathHelper.floor_double(var1.posY); + int var8 = MathHelper.floor_double(var1.posZ); + int var9 = (int)(var5 + 32.0F); + int var10 = var6 - var9; + int var11 = var7 - var9; + int var12 = var8 - var9; + int var13 = var6 + var9; + int var14 = var7 + var9; + int var15 = var8 + var9; + ChunkCache var16 = new ChunkCache(this, var10, var11, var12, var13, var14, var15); + return (new Pathfinder(var16)).createEntityPathTo(var1, var2, var3, var4, var5); + } + + static { + float var0 = 0.05F; + + for(int var1 = 0; var1 <= 15; ++var1) { + float var2 = 1.0F - (float)var1 / 15.0F; + lightBrightnessTable[var1] = (1.0F - var2) / (var2 * 3.0F + 1.0F) * (1.0F - var0) + var0; + } + + } +} diff --git a/source/net/minecraft/src/WorldGenDungeons.java b/source/net/minecraft/src/WorldGenDungeons.java new file mode 100644 index 0000000..64d59f0 --- /dev/null +++ b/source/net/minecraft/src/WorldGenDungeons.java @@ -0,0 +1,116 @@ +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.getBlockId(var10, var11, var12) == 0 && var1.getBlockId(var10, var11 + 1, var12) == 0) { + ++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.setBlockWithNotify(var10, var11, var12, 0); + } else if(var11 >= 0 && !var1.getBlockMaterial(var10, var11 - 1, var12).isSolid()) { + var1.setBlockWithNotify(var10, var11, var12, 0); + } else if(var1.getBlockMaterial(var10, var11, var12).isSolid()) { + if(var11 == var4 - 1 && var2.nextInt(4) != 0) { + var1.setBlockWithNotify(var10, var11, var12, Block.cobblestoneMossy.blockID); + } else { + var1.setBlockWithNotify(var10, var11, var12, Block.cobblestone.blockID); + } + } + } + } + } + + label110: + 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.getBlockId(var12, var4, var14) == 0) { + 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.setBlockWithNotify(var12, var4, var14, Block.chest.blockID); + TileEntityChest var16 = (TileEntityChest)var1.getBlockTileEntity(var12, var4, var14); + int var17 = 0; + + while(true) { + if(var17 >= 8) { + continue label110; + } + + ItemStack var18 = this.pickCheckLootItem(var2); + if(var18 != null) { + var16.setInventorySlotContents(var2.nextInt(var16.getSizeInventory()), var18); + } + + ++var17; + } + } + } + } + } + + var1.setBlockWithNotify(var3, var4, var5, Block.mobSpawner.blockID); + TileEntityMobSpawner var19 = (TileEntityMobSpawner)var1.getBlockTileEntity(var3, var4, var5); + var19.mobID = this.pickMobSpawner(var2); + return true; + } else { + return false; + } + } + + private ItemStack pickCheckLootItem(Random var1) { + int var2 = var1.nextInt(10); + 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) : 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/source/net/minecraft/src/WorldGenFlowers.java b/source/net/minecraft/src/WorldGenFlowers.java new file mode 100644 index 0000000..f01a0f1 --- /dev/null +++ b/source/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.getBlockId(var7, var8, var9) == 0 && ((BlockFlower)Block.blocksList[this.plantBlockId]).canBlockStay(var1, var7, var8, var9)) { + var1.setBlock(var7, var8, var9, this.plantBlockId); + } + } + + return true; + } +} diff --git a/source/net/minecraft/src/WorldGenLiquids.java b/source/net/minecraft/src/WorldGenLiquids.java new file mode 100644 index 0000000..7fbf0cb --- /dev/null +++ b/source/net/minecraft/src/WorldGenLiquids.java @@ -0,0 +1,61 @@ +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.getBlockId(var3 - 1, var4, var5) == 0) { + ++var7; + } + + if(var1.getBlockId(var3 + 1, var4, var5) == 0) { + ++var7; + } + + if(var1.getBlockId(var3, var4, var5 - 1) == 0) { + ++var7; + } + + if(var1.getBlockId(var3, var4, var5 + 1) == 0) { + ++var7; + } + + if(var6 == 3 && var7 == 1) { + var1.setBlockWithNotify(var3, var4, var5, this.liquidBlockId); + } + + return true; + } + } +} diff --git a/source/net/minecraft/src/WorldGenMinable.java b/source/net/minecraft/src/WorldGenMinable.java new file mode 100644 index 0000000..652dd5a --- /dev/null +++ b/source/net/minecraft/src/WorldGenMinable.java @@ -0,0 +1,47 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenMinable extends WorldGenerator { + private int minableBlockId; + private int numberOfBlocks; + + public WorldGenMinable(int var1, int var2) { + this.minableBlockId = var1; + this.numberOfBlocks = var2; + } + + 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; + + for(int var32 = (int)(var20 - var28 / 2.0D); var32 <= (int)(var20 + var28 / 2.0D); ++var32) { + for(int var33 = (int)(var22 - var30 / 2.0D); var33 <= (int)(var22 + var30 / 2.0D); ++var33) { + for(int var34 = (int)(var24 - var28 / 2.0D); var34 <= (int)(var24 + var28 / 2.0D); ++var34) { + double var35 = ((double)var32 + 0.5D - var20) / (var28 / 2.0D); + double var37 = ((double)var33 + 0.5D - var22) / (var30 / 2.0D); + double var39 = ((double)var34 + 0.5D - var24) / (var28 / 2.0D); + if(var35 * var35 + var37 * var37 + var39 * var39 < 1.0D && var1.getBlockId(var32, var33, var34) == Block.stone.blockID) { + var1.setBlock(var32, var33, var34, this.minableBlockId); + } + } + } + } + } + + return true; + } +} diff --git a/source/net/minecraft/src/WorldGenTrees.java b/source/net/minecraft/src/WorldGenTrees.java new file mode 100644 index 0000000..631e379 --- /dev/null +++ b/source/net/minecraft/src/WorldGenTrees.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenTrees extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + int var6 = var2.nextInt(3) + 4; + 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 = 2; + } + + 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) { + 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) { + var1.setBlock(var3, var4 - 1, var5, Block.dirt.blockID); + + int var16; + for(var16 = var4 - 3 + var6; var16 <= var4 + var6; ++var16) { + var10 = var16 - (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) && !Block.opaqueCubeLookup[var1.getBlockId(var12, var16, var14)]) { + var1.setBlock(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) { + var1.setBlock(var3, var4 + var16, var5, Block.wood.blockID); + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } +} diff --git a/source/net/minecraft/src/WorldGenerator.java b/source/net/minecraft/src/WorldGenerator.java new file mode 100644 index 0000000..61bcf66 --- /dev/null +++ b/source/net/minecraft/src/WorldGenerator.java @@ -0,0 +1,10 @@ +package net.minecraft.src; + +import java.util.Random; + +public abstract class WorldGenerator { + public abstract boolean generate(World var1, Random var2, int var3, int var4, int var5); + + public void setScale(double var1, double var3, double var5) { + } +} diff --git a/source/net/minecraft/src/WorldIso.java b/source/net/minecraft/src/WorldIso.java new file mode 100644 index 0000000..703718d --- /dev/null +++ b/source/net/minecraft/src/WorldIso.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +import java.io.File; + +class WorldIso extends World { + final CanvasIsomPreview isomPreview; + + WorldIso(CanvasIsomPreview var1, File var2, String var3) { + super(var2, var3); + this.isomPreview = var1; + } + + protected IChunkProvider getChunkProvider(File var1) { + return new ChunkProviderIso(this, new ChunkLoader(var1, false)); + } +} diff --git a/source/net/minecraft/src/WorldRenderer.java b/source/net/minecraft/src/WorldRenderer.java new file mode 100644 index 0000000..d9ae1a0 --- /dev/null +++ b/source/net/minecraft/src/WorldRenderer.java @@ -0,0 +1,214 @@ +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 sizeWidth; + public int sizeHeight; + public int sizeDepth; + 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 float rendererRadius; + 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; + + public WorldRenderer(World var1, List var2, int var3, int var4, int var5, int var6, int var7) { + this.worldObj = var1; + this.tileEntities = var2; + this.sizeWidth = this.sizeHeight = this.sizeDepth = var6; + this.rendererRadius = MathHelper.sqrt_float((float)(this.sizeWidth * this.sizeWidth + this.sizeHeight * this.sizeHeight + this.sizeDepth * this.sizeDepth)) / 2.0F; + this.glRenderList = var7; + 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 + this.sizeWidth / 2; + this.posYPlus = var2 + this.sizeHeight / 2; + this.posZPlus = var3 + this.sizeDepth / 2; + 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 = 2.0F; + this.rendererBoundingBox = AxisAlignedBB.getBoundingBox((double)((float)var1 - var4), (double)((float)var2 - var4), (double)((float)var3 - var4), (double)((float)(var1 + this.sizeWidth) + var4), (double)((float)(var2 + this.sizeHeight) + var4), (double)((float)(var3 + this.sizeDepth) + var4)); + GL11.glNewList(this.glRenderList + 2, GL11.GL_COMPILE); + RenderItem.renderAABB(AxisAlignedBB.getBoundingBoxFromPool((double)((float)this.posXClip - var4), (double)((float)this.posYClip - var4), (double)((float)this.posZClip - var4), (double)((float)(this.posXClip + this.sizeWidth) + var4), (double)((float)(this.posYClip + this.sizeHeight) + var4), (double)((float)(this.posZClip + this.sizeDepth) + 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) { + ++chunksUpdated; + int var1 = this.posX; + int var2 = this.posY; + int var3 = this.posZ; + int var4 = this.posX + this.sizeWidth; + int var5 = this.posY + this.sizeHeight; + int var6 = this.posZ + this.sizeDepth; + + 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); + RenderBlocks var10 = new RenderBlocks(var9); + + 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((float)(-this.sizeDepth) / 2.0F, (float)(-this.sizeHeight) / 2.0F, (float)(-this.sizeDepth) / 2.0F); + GL11.glScalef(var19, var19, var19); + GL11.glTranslatef((float)this.sizeDepth / 2.0F, (float)this.sizeHeight / 2.0F, (float)this.sizeDepth / 2.0F); + tessellator.startDrawingQuads(); + tessellator.setTranslationD((double)(-this.posX), (double)(-this.posY), (double)(-this.posZ)); + } + + if(var11 == 0 && Block.blocksList[var18] instanceof BlockContainer) { + TileEntity var23 = var9.getBlockTileEntity(var17, var15, var16); + if(TileEntityRenderer.instance.hasSpecialRenderer(var23)) { + this.tileEntityRenderers.add(var23); + } + } + + Block var24 = Block.blocksList[var18]; + int var20 = var24.getRenderBlockPass(); + if(var20 != var11) { + var12 = true; + } else if(var20 == var11) { + var13 |= var10.renderBlockByRenderType(var24, var17, var15, var16); + } + } + } + } + } + + if(var14) { + tessellator.draw(); + GL11.glPopMatrix(); + GL11.glEndList(); + tessellator.setTranslationD(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 updateInFrustrum(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/client/MinecraftApplet.java b/src/net/minecraft/client/MinecraftApplet.java new file mode 100644 index 0000000..da453ec --- /dev/null +++ b/src/net/minecraft/client/MinecraftApplet.java @@ -0,0 +1,105 @@ +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.Minecraft; +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 = false; + if(this.getParameter("fullscreen") != null) { + var1 = this.getParameter("fullscreen").equalsIgnoreCase("true"); + } + + this.mc = new MinecraftAppletImpl(this, 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")); + if(this.getParameter("mppass") != null) { + this.mc.session.mpPassParameter = this.getParameter("mppass"); + } + } + + if(this.getParameter("loadmap_user") != null && this.getParameter("loadmap_id") != null) { + this.mc.objectMouseOverString = this.getParameter("loadmap_user"); + this.mc.rightClickDelayTimer = Integer.parseInt(this.getParameter("loadmap_id")); + } else if(this.getParameter("server") != null && this.getParameter("port") != null) { + this.mc.setServer(this.getParameter("server"), Integer.parseInt(this.getParameter("port"))); + } + + this.mc.appletMode = true; + this.setLayout(new BorderLayout()); + this.add(this.mcCanvas, "Center"); + this.mcCanvas.setFocusable(true); + 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; + } + } + + public void clearApplet() { + this.mcCanvas = null; + this.mc = null; + this.mcThread = null; + + try { + this.removeAll(); + this.validate(); + } catch (Exception var2) { + } + + } +} diff --git a/src/net/minecraft/isom/IsomPreviewApplet.java b/src/net/minecraft/isom/IsomPreviewApplet.java new file mode 100644 index 0000000..b192ed2 --- /dev/null +++ b/src/net/minecraft/isom/IsomPreviewApplet.java @@ -0,0 +1,22 @@ +package net.minecraft.isom; + +import java.applet.Applet; +import java.awt.BorderLayout; +import net.minecraft.src.CanvasIsomPreview; + +public class IsomPreviewApplet extends Applet { + private CanvasIsomPreview isomCanvas = new CanvasIsomPreview(); + + public IsomPreviewApplet() { + this.setLayout(new BorderLayout()); + this.add(this.isomCanvas, "Center"); + } + + public void start() { + this.isomCanvas.start(); + } + + public void stop() { + this.isomCanvas.stop(); + } +} diff --git a/src/net/minecraft/src/AxisAlignedBB.java b/src/net/minecraft/src/AxisAlignedBB.java new file mode 100644 index 0000000..e680fee --- /dev/null +++ b/src/net/minecraft/src/AxisAlignedBB.java @@ -0,0 +1,313 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class AxisAlignedBB { + private static List boundingBoxes = new ArrayList(); + private static int numBoundingBoxesInUse = 0; + 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 void clearBoundingBoxPool() { + numBoundingBoxesInUse = 0; + } + + public static AxisAlignedBB getBoundingBoxFromPool(double var0, double var2, double var4, double var6, double var8, double var10) { + if(numBoundingBoxesInUse >= boundingBoxes.size()) { + boundingBoxes.add(getBoundingBox(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D)); + } + + return ((AxisAlignedBB)boundingBoxes.get(numBoundingBoxesInUse++)).setBounds(var0, var2, var4, var6, var8, var10); + } + + private 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 getBoundingBoxFromPool(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 getBoundingBoxFromPool(var7, var9, var11, var13, var15, var17); + } + + public AxisAlignedBB getOffsetBoundingBox(double var1, double var3, double var5) { + return getBoundingBoxFromPool(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 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 copy() { + return getBoundingBoxFromPool(this.minX, this.minY, this.minZ, this.maxX, this.maxY, this.maxZ); + } + + public MovingObjectPosition calculateIntercept(Vec3D var1, Vec3D var2) { + Vec3D var3 = var1.getIntermediateWithXValue(var2, this.minX); + Vec3D var4 = var1.getIntermediateWithXValue(var2, this.maxX); + Vec3D var5 = var1.getIntermediateWithYValue(var2, this.minY); + Vec3D var6 = var1.getIntermediateWithYValue(var2, this.maxY); + Vec3D var7 = var1.getIntermediateWithZValue(var2, this.minZ); + Vec3D 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; + } + + Vec3D 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(Vec3D var1) { + return var1 == null ? false : var1.yCoord >= this.minY && var1.yCoord <= this.maxY && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ; + } + + private boolean isVecInXZ(Vec3D var1) { + return var1 == null ? false : var1.xCoord >= this.minX && var1.xCoord <= this.maxX && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ; + } + + private boolean isVecInXY(Vec3D 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; + } +} diff --git a/src/net/minecraft/src/Block.java b/src/net/minecraft/src/Block.java new file mode 100644 index 0000000..a962b9d --- /dev/null +++ b/src/net/minecraft/src/Block.java @@ -0,0 +1,432 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Random; + +public class Block { + 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 StepSoundGlass("stone", 1.0F, 1.0F); + public static final StepSound soundClothFootstep = new StepSound("cloth", 1.0F, 1.0F); + public static final StepSound soundSandFootstep = new StepSoundSand("sand", 1.0F, 1.0F); + public static final Block[] blocksList = new Block[256]; + public static final boolean[] tickOnLoad = new boolean[256]; + public static final boolean[] opaqueCubeLookup = new boolean[256]; + public static final int[] lightOpacity = new int[256]; + public static final boolean[] canBlockGrass = new boolean[256]; + public static final int[] lightValue = new int[256]; + public static final Block stone = (new BlockStone(1, 1)).setHardness(1.5F).setResistance(10.0F).setStepSound(soundStoneFootstep); + public static final BlockGrass grass = (BlockGrass)(new BlockGrass(2)).setHardness(0.6F).setStepSound(soundGrassFootstep); + public static final Block dirt = (new BlockDirt(3, 2)).setHardness(0.5F).setStepSound(soundGravelFootstep); + public static final Block cobblestone = (new Block(4, 16, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep); + public static final Block planks = (new Block(5, 4, Material.wood)).setHardness(2.0F).setResistance(5.0F).setStepSound(soundWoodFootstep); + public static final Block sapling = (new BlockSapling(6, 15)).setHardness(0.0F).setStepSound(soundGrassFootstep); + public static final Block bedrock = (new Block(7, 17, Material.rock)).setHardness(-1.0F).setResistance(6000000.0F).setStepSound(soundStoneFootstep); + public static final Block waterMoving = (new BlockFlowing(8, Material.water)).setHardness(100.0F).setLightOpacity(3); + public static final Block waterStill = (new BlockStationary(9, Material.water)).setHardness(100.0F).setLightOpacity(3); + public static final Block lavaMoving = (new BlockFlowing(10, Material.lava)).setHardness(0.0F).setLightValue(1.0F).setLightOpacity(255); + public static final Block lavaStill = (new BlockStationary(11, Material.lava)).setHardness(100.0F).setLightValue(1.0F).setLightOpacity(255); + public static final Block sand = (new BlockSand(12, 18)).setHardness(0.5F).setStepSound(soundSandFootstep); + public static final Block gravel = (new BlockGravel(13, 19)).setHardness(0.6F).setStepSound(soundGravelFootstep); + public static final Block oreGold = (new BlockOre(14, 32)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep); + public static final Block oreIron = (new BlockOre(15, 33)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep); + public static final Block oreCoal = (new BlockOre(16, 34)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep); + public static final Block wood = (new BlockLog(17)).setHardness(2.0F).setStepSound(soundWoodFootstep); + public static final BlockLeaves leaves = (BlockLeaves)(new BlockLeaves(18, 52)).setHardness(0.2F).setLightOpacity(1).setStepSound(soundGrassFootstep); + public static final Block sponge = (new BlockSponge(19)).setHardness(0.6F).setStepSound(soundGrassFootstep); + public static final Block glass = (new BlockGlass(20, 49, Material.glass, false)).setHardness(0.3F).setStepSound(soundGlassFootstep); + public static final Block clothRed = null; + public static final Block clothOrange = null; + public static final Block clothYellow = null; + public static final Block clothChartreuse = null; + public static final Block clothGreen = null; + public static final Block clothSpringGreen = null; + public static final Block clothCyan = null; + public static final Block clothCapri = null; + public static final Block clothUltramarine = null; + public static final Block clothViolet = null; + public static final Block clothPurple = null; + public static final Block clothMagenta = null; + public static final Block clothRose = null; + public static final Block clothDarkGray = null; + public static final Block cloth = (new Block(35, 64, Material.cloth)).setHardness(0.8F).setStepSound(soundClothFootstep); + public static final Block clothWhite = null; + public static final BlockFlower plantYellow = (BlockFlower)(new BlockFlower(37, 13)).setHardness(0.0F).setStepSound(soundGrassFootstep); + public static final BlockFlower plantRed = (BlockFlower)(new BlockFlower(38, 12)).setHardness(0.0F).setStepSound(soundGrassFootstep); + public static final BlockFlower mushroomBrown = (BlockFlower)(new BlockMushroom(39, 29)).setHardness(0.0F).setStepSound(soundGrassFootstep).setLightValue(2.0F / 16.0F); + public static final BlockFlower mushroomRed = (BlockFlower)(new BlockMushroom(40, 28)).setHardness(0.0F).setStepSound(soundGrassFootstep); + public static final Block blockGold = (new BlockOreBlock(41, 39)).setHardness(3.0F).setResistance(10.0F).setStepSound(soundMetalFootstep); + public static final Block blockSteel = (new BlockOreBlock(42, 38)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundMetalFootstep); + public static final Block stairDouble = (new BlockStep(43, true)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep); + public static final Block stairSingle = (new BlockStep(44, false)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep); + public static final Block brick = (new Block(45, 7, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep); + public static final Block tnt = (new BlockTNT(46, 8)).setHardness(0.0F).setStepSound(soundGrassFootstep); + public static final Block bookshelf = (new BlockBookshelf(47, 35)).setHardness(1.5F).setStepSound(soundWoodFootstep); + public static final Block cobblestoneMossy = (new Block(48, 36, Material.rock)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep); + public static final Block obsidian = (new BlockObsidian(49, 37)).setHardness(10.0F).setResistance(20.0F).setStepSound(soundStoneFootstep); + public static final Block torch = (new BlockTorch(50, 80)).setHardness(0.0F).setLightValue(15.0F / 16.0F).setStepSound(soundWoodFootstep); + public static final BlockFire fire = (BlockFire)((BlockFire)(new BlockFire(51, 31)).setHardness(0.0F).setLightValue(1.0F).setStepSound(soundWoodFootstep)); + public static final Block mobSpawner = (new BlockMobSpawner(52, 65)).setHardness(5.0F).setStepSound(soundMetalFootstep); + public static final Block stairCompactWood = new BlockStairs(53, planks); + public static final Block chest = (new BlockChest(54)).setHardness(2.5F).setStepSound(soundWoodFootstep); + public static final Block cog = (new BlockGears(55, 62)).setHardness(0.5F).setStepSound(soundMetalFootstep); + public static final Block oreDiamond = (new BlockOre(56, 50)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep); + public static final Block blockDiamond = (new BlockOreBlock(57, 40)).setHardness(5.0F).setResistance(10.0F).setStepSound(soundMetalFootstep); + public static final Block workbench = (new BlockWorkbench(58)).setHardness(2.5F).setStepSound(soundWoodFootstep); + public static final Block crops = (new BlockCrops(59, 88)).setHardness(0.0F).setStepSound(soundGrassFootstep); + public static final Block tilledField = (new BlockFarmland(60)).setHardness(0.6F).setStepSound(soundGravelFootstep); + public static final Block stoneOvenIdle = (new BlockFurnace(61, false)).setHardness(3.5F).setStepSound(soundStoneFootstep); + public static final Block stoneOvenActive = (new BlockFurnace(62, true)).setHardness(3.5F).setStepSound(soundStoneFootstep).setLightValue(14.0F / 16.0F); + public static final Block signStanding = (new BlockSign(63, TileEntitySign.class, Item.sign.shiftedIndex)).setHardness(1.0F).setStepSound(soundWoodFootstep); + public static final Block doorWood = (new BlockDoor(64)).setHardness(3.0F).setStepSound(soundWoodFootstep); + public static final Block ladder = (new BlockLadder(65, 83)).setHardness(0.4F).setStepSound(soundWoodFootstep); + public static final Block minecartTrack = (new BlockMinecartTrack(66, 128)).setHardness(1.0F).setStepSound(soundMetalFootstep); + public static final Block stairCompactStone = new BlockStairs(67, cobblestone); + public int blockIndexInTexture; + public final int blockID; + protected float blockHardness; + protected float blockResistance; + public double minX; + public double minY; + public double minZ; + public double maxX; + public double maxY; + public double maxZ; + public StepSound stepSound; + public float blockParticleGravity; + public final Material blockMaterial; + + protected Block(int var1, Material var2) { + this.stepSound = soundPowderFootstep; + this.blockParticleGravity = 1.0F; + 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] = this.getCanBlockGrass(); + } + } + + protected Block(int var1, int var2, Material var3) { + this(var1, var3); + this.blockIndexInTexture = var2; + } + + 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; + } + + private boolean getCanBlockGrass() { + return false; + } + + public boolean renderAsNormalBlock() { + return true; + } + + 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 void setTickOnLoad(boolean var1) { + tickOnLoad[this.blockID] = var1; + } + + public 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); + } + + 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.isBlockNormalCube(var2, var3, var4)))))); + } + + public int getBlockTextureGeneric(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return this.getBlockTextureFromSideAndMetadata(var5, var1.getBlockMetadata(var2, var3, var4)); + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return this.getBlockTextureFromSide(var1); + } + + public int getBlockTextureFromSide(int var1) { + return this.blockIndexInTexture; + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return AxisAlignedBB.getBoundingBoxFromPool((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 getCollidingBoundingBoxes(World var1, int var2, int var3, int var4, AxisAlignedBB var5, ArrayList var6) { + AxisAlignedBB var7 = this.getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + if(var7 != null && var5.intersectsWith(var7)) { + var6.add(var7); + } + + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return AxisAlignedBB.getBoundingBoxFromPool((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() { + return 10; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + } + + public int quantityDropped(Random var1) { + return 1; + } + + public int idDropped(int var1, Random var2) { + return this.blockID; + } + + public float blockStrength(EntityPlayer var1) { + return this.blockHardness < 0.0F ? 0.0F : (!var1.canHarvestBlock(this) ? 1.0F / this.blockHardness / 100.0F : var1.getCurrentPlayerStrVsBlock(this) / this.blockHardness / 30.0F); + } + + public void dropBlockAsItem(World var1, int var2, int var3, int var4, int var5) { + this.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, 1.0F); + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) { + int var7 = this.quantityDropped(var1.rand); + + for(int var8 = 0; var8 < var7; ++var8) { + if(var1.rand.nextFloat() <= var6) { + int var9 = this.idDropped(var5, var1.rand); + if(var9 > 0) { + float var10 = 0.7F; + double var11 = (double)(var1.rand.nextFloat() * var10) + (double)(1.0F - var10) * 0.5D; + double var13 = (double)(var1.rand.nextFloat() * var10) + (double)(1.0F - var10) * 0.5D; + double var15 = (double)(var1.rand.nextFloat() * var10) + (double)(1.0F - var10) * 0.5D; + EntityItem var17 = new EntityItem(var1, (double)var2 + var11, (double)var3 + var13, (double)var4 + var15, new ItemStack(var9)); + var17.delayBeforeCanPickup = 10; + var1.spawnEntityInWorld(var17); + } + } + } + + } + + public float getExplosionResistance(Entity var1) { + return this.blockResistance / 5.0F; + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3D var5, Vec3D var6) { + var5 = var5.addVector((double)(-var2), (double)(-var3), (double)(-var4)); + var6 = var6.addVector((double)(-var2), (double)(-var3), (double)(-var4)); + Vec3D var7 = var5.getIntermediateWithXValue(var6, this.minX); + Vec3D var8 = var5.getIntermediateWithXValue(var6, this.maxX); + Vec3D var9 = var5.getIntermediateWithYValue(var6, this.minY); + Vec3D var10 = var5.getIntermediateWithYValue(var6, this.maxY); + Vec3D var11 = var5.getIntermediateWithZValue(var6, this.minZ); + Vec3D 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; + } + + Vec3D var13 = null; + if(var7 != null && (var13 == null || var5.distanceTo(var7) < var5.distanceTo(var13))) { + var13 = var7; + } + + if(var8 != null && (var13 == null || var5.distanceTo(var8) < var5.distanceTo(var13))) { + var13 = var8; + } + + if(var9 != null && (var13 == null || var5.distanceTo(var9) < var5.distanceTo(var13))) { + var13 = var9; + } + + if(var10 != null && (var13 == null || var5.distanceTo(var10) < var5.distanceTo(var13))) { + var13 = var10; + } + + if(var11 != null && (var13 == null || var5.distanceTo(var11) < var5.distanceTo(var13))) { + var13 = var11; + } + + if(var12 != null && (var13 == null || var5.distanceTo(var12) < var5.distanceTo(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(Vec3D var1) { + return var1 == null ? false : var1.yCoord >= this.minY && var1.yCoord <= this.maxY && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ; + } + + private boolean isVecInsideXZBounds(Vec3D var1) { + return var1 == null ? false : var1.xCoord >= this.minX && var1.xCoord <= this.maxX && var1.zCoord >= this.minZ && var1.zCoord <= this.maxZ; + } + + private boolean isVecInsideXYBounds(Vec3D 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) { + } + + public int getRenderBlockPass() { + return 0; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return true; + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + return false; + } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + } + + public void onBlockPlaced(World var1, int var2, int var3, int var4, int var5) { + } + + 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, Vec3D var6) { + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + } + + public int getRenderColor(IBlockAccess var1, int var2, int var3, int var4) { + return 16777215; + } + + static { + for(int var0 = 0; var0 < 256; ++var0) { + if(blocksList[var0] != null) { + Item.itemsList[var0] = new ItemBlock(var0 - 256); + } + } + + } +} diff --git a/src/net/minecraft/src/BlockBookshelf.java b/src/net/minecraft/src/BlockBookshelf.java new file mode 100644 index 0000000..e91f8a9 --- /dev/null +++ b/src/net/minecraft/src/BlockBookshelf.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockBookshelf extends Block { + public BlockBookshelf(int var1, int var2) { + super(var1, var2, Material.wood); + } + + public int getBlockTextureFromSide(int var1) { + return var1 <= 1 ? 4 : this.blockIndexInTexture; + } + + public int quantityDropped(Random var1) { + return 0; + } +} diff --git a/src/net/minecraft/src/BlockBreakable.java b/src/net/minecraft/src/BlockBreakable.java new file mode 100644 index 0000000..a037862 --- /dev/null +++ b/src/net/minecraft/src/BlockBreakable.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class BlockBreakable extends Block { + private boolean localFlag; + + protected BlockBreakable(int var1, int var2, Material var3, boolean var4) { + super(var1, var2, var3); + this.localFlag = var4; + } + + 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); + } +} diff --git a/src/net/minecraft/src/BlockChest.java b/src/net/minecraft/src/BlockChest.java new file mode 100644 index 0000000..9807507 --- /dev/null +++ b/src/net/minecraft/src/BlockChest.java @@ -0,0 +1,196 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockChest extends BlockContainer { + private Random random = new Random(); + + protected BlockChest(int var1) { + super(var1, Material.wood); + this.blockIndexInTexture = 26; + } + + public int getBlockTextureGeneric(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(var5 == 1) { + return this.blockIndexInTexture - 1; + } else if(var5 == 0) { + return this.blockIndexInTexture - 1; + } else { + 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; + int var11; + int var12; + byte var13; + if(var6 != this.blockID && var7 != this.blockID) { + if(var8 != this.blockID && var9 != this.blockID) { + byte var14 = 3; + if(Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var7]) { + var14 = 3; + } + + if(Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var6]) { + var14 = 2; + } + + if(Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var9]) { + var14 = 5; + } + + if(Block.opaqueCubeLookup[var9] && !Block.opaqueCubeLookup[var8]) { + var14 = 4; + } + + return var5 == var14 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture; + } else if(var5 != 4 && var5 != 5) { + var10 = 0; + if(var8 == this.blockID) { + var10 = -1; + } + + var11 = var1.getBlockId(var8 == this.blockID ? var2 - 1 : var2 + 1, var3, var4 - 1); + var12 = var1.getBlockId(var8 == this.blockID ? var2 - 1 : var2 + 1, var3, var4 + 1); + if(var5 == 3) { + var10 = -1 - var10; + } + + var13 = 3; + if((Block.opaqueCubeLookup[var6] || Block.opaqueCubeLookup[var11]) && !Block.opaqueCubeLookup[var7] && !Block.opaqueCubeLookup[var12]) { + var13 = 3; + } + + if((Block.opaqueCubeLookup[var7] || Block.opaqueCubeLookup[var12]) && !Block.opaqueCubeLookup[var6] && !Block.opaqueCubeLookup[var11]) { + var13 = 2; + } + + return (var5 == var13 ? this.blockIndexInTexture + 16 : this.blockIndexInTexture + 32) + var10; + } else { + return this.blockIndexInTexture; + } + } else if(var5 != 2 && var5 != 3) { + var10 = 0; + if(var6 == this.blockID) { + var10 = -1; + } + + var11 = var1.getBlockId(var2 - 1, var3, var6 == this.blockID ? var4 - 1 : var4 + 1); + var12 = var1.getBlockId(var2 + 1, var3, var6 == this.blockID ? var4 - 1 : var4 + 1); + if(var5 == 4) { + var10 = -1 - var10; + } + + var13 = 5; + if((Block.opaqueCubeLookup[var8] || Block.opaqueCubeLookup[var11]) && !Block.opaqueCubeLookup[var9] && !Block.opaqueCubeLookup[var12]) { + var13 = 5; + } + + if((Block.opaqueCubeLookup[var9] || Block.opaqueCubeLookup[var12]) && !Block.opaqueCubeLookup[var8] && !Block.opaqueCubeLookup[var11]) { + var13 = 4; + } + + return (var5 == var13 ? this.blockIndexInTexture + 16 : this.blockIndexInTexture + 32) + var10; + } else { + return this.blockIndexInTexture; + } + } + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? this.blockIndexInTexture - 1 : (var1 == 0 ? this.blockIndexInTexture - 1 : (var1 == 3 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture)); + } + + 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 onBlockRemoval(World var1, int var2, int var3, int var4) { + TileEntityChest var5 = (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4); + + for(int var6 = 0; var6 < var5.getSizeInventory(); ++var6) { + ItemStack var7 = var5.getStackInSlot(var6); + if(var7 != null) { + float var8 = this.random.nextFloat() * 0.8F + 0.1F; + float var9 = this.random.nextFloat() * 0.8F + 0.1F; + float var10 = this.random.nextFloat() * 0.8F + 0.1F; + + while(var7.stackSize > 0) { + int var11 = this.random.nextInt(21) + 10; + if(var11 > var7.stackSize) { + var11 = var7.stackSize; + } + + var7.stackSize -= var11; + EntityItem var12 = new EntityItem(var1, (double)((float)var2 + var8), (double)((float)var3 + var9), (double)((float)var4 + var10), new ItemStack(var7.itemID, var11, var7.itemDmg)); + float var13 = 0.05F; + var12.motionX = (double)((float)this.random.nextGaussian() * var13); + var12.motionY = (double)((float)this.random.nextGaussian() * var13 + 0.2F); + var12.motionZ = (double)((float)this.random.nextGaussian() * var13); + var1.spawnEntityInWorld(var12); + } + } + } + + super.onBlockRemoval(var1, var2, var3, var4); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + Object var6 = (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4); + if(var1.isBlockNormalCube(var2, var3 + 1, var4)) { + return true; + } else if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID && var1.isBlockNormalCube(var2 - 1, var3 + 1, var4)) { + return true; + } else if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID && var1.isBlockNormalCube(var2 + 1, var3 + 1, var4)) { + return true; + } else if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID && var1.isBlockNormalCube(var2, var3 + 1, var4 - 1)) { + return true; + } else if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID && var1.isBlockNormalCube(var2, var3 + 1, var4 + 1)) { + return true; + } else { + if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (TileEntityChest)var1.getBlockTileEntity(var2 - 1, var3, var4), (IInventory)var6); + } + + if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (IInventory)var6, (TileEntityChest)var1.getBlockTileEntity(var2 + 1, var3, var4)); + } + + if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4 - 1), (IInventory)var6); + } + + if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (IInventory)var6, (TileEntityChest)var1.getBlockTileEntity(var2, var3, var4 + 1)); + } + + var5.displayGUIChest((IInventory)var6); + return true; + } + } + + protected TileEntity getBlockEntity() { + return new TileEntityChest(); + } +} diff --git a/src/net/minecraft/src/BlockContainer.java b/src/net/minecraft/src/BlockContainer.java new file mode 100644 index 0000000..6b5cee0 --- /dev/null +++ b/src/net/minecraft/src/BlockContainer.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +public abstract class BlockContainer extends Block { + protected BlockContainer(int var1, Material var2) { + super(var1, var2); + } + + protected BlockContainer(int var1, int var2, Material var3) { + super(var1, var2, var3); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + var1.setBlockTileEntity(var2, var3, var4, this.getBlockEntity()); + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + super.onBlockRemoval(var1, var2, var3, var4); + var1.removeBlockTileEntity(var2, var3, var4); + } + + protected abstract TileEntity getBlockEntity(); +} diff --git a/src/net/minecraft/src/BlockCrops.java b/src/net/minecraft/src/BlockCrops.java new file mode 100644 index 0000000..9cb6741 --- /dev/null +++ b/src/net/minecraft/src/BlockCrops.java @@ -0,0 +1,110 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockCrops extends BlockFlower { + protected BlockCrops(int var1, int var2) { + super(var1, var2); + this.blockIndexInTexture = var2; + this.setTickOnLoad(true); + float var3 = 0.5F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, 0.25F, 0.5F + var3); + } + + 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.updateTick(var1, var2, var3, var4); + if(var5.nextInt((int)(100.0F / var7)) == 0) { + ++var6; + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + } + } + } + + } + + private float updateTick(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 getBlockTextureFromSideAndMetadata(int var1, int var2) { + if(var2 < 0) { + var2 = 7; + } + + return this.blockIndexInTexture + var2; + } + + public int getRenderType() { + return 6; + } + + public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) { + super.onBlockDestroyedByPlayer(var1, var2, var3, var4, var5); + + for(int var6 = 0; var6 < 3; ++var6) { + if(var1.rand.nextInt(15) <= var5) { + float var7 = 0.7F; + float var8 = var1.rand.nextFloat() * var7 + (1.0F - var7) * 0.5F; + float var9 = var1.rand.nextFloat() * var7 + (1.0F - var7) * 0.5F; + float var10 = var1.rand.nextFloat() * var7 + (1.0F - var7) * 0.5F; + EntityItem var11 = new EntityItem(var1, (double)((float)var2 + var8), (double)((float)var3 + var9), (double)((float)var4 + var10), new ItemStack(Item.seeds)); + var11.delayBeforeCanPickup = 10; + var1.spawnEntityInWorld(var11); + } + } + + } + + public int idDropped(int var1, Random var2) { + System.out.println("Get resource: " + var1); + return var1 == 7 ? Item.wheat.shiftedIndex : -1; + } + + public int quantityDropped(Random var1) { + return 1; + } +} diff --git a/src/net/minecraft/src/BlockDirt.java b/src/net/minecraft/src/BlockDirt.java new file mode 100644 index 0000000..d3b8a7a --- /dev/null +++ b/src/net/minecraft/src/BlockDirt.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class BlockDirt extends Block { + protected BlockDirt(int var1, int var2) { + super(var1, var2, Material.ground); + } +} diff --git a/src/net/minecraft/src/BlockDoor.java b/src/net/minecraft/src/BlockDoor.java new file mode 100644 index 0000000..25b2c67 --- /dev/null +++ b/src/net/minecraft/src/BlockDoor.java @@ -0,0 +1,154 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockDoor extends Block { + protected BlockDoor(int var1) { + super(var1, Material.wood); + this.blockIndexInTexture = 97; + float var2 = 0.5F; + float var3 = 1.0F; + this.setBlockBounds(0.5F - var2, 0.0F, 0.5F - var2, 0.5F + var2, var3, 0.5F + var2); + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + if(var1 != 0 && var1 != 1) { + int var3 = this.getState(var2); + if((var3 == 0 || var3 == 2) ^ var1 <= 3) { + return this.blockIndexInTexture; + } else { + int var4 = var3 / 2 + (var1 & 1 ^ var3); + var4 += (var2 & 4) / 4; + int var5 = this.blockIndexInTexture - (var2 & 8) * 2; + if((var4 & 1) != 0) { + var5 = -var5; + } + + return var5; + } + } else { + return this.blockIndexInTexture; + } + } + + public boolean isOpaqueCube() { + return false; + } + + 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.getState(var1.getBlockMetadata(var2, var3, var4))); + } + + public void setDoorRotation(int var1) { + float var2 = 3.0F / 16.0F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F, 1.0F); + if(var1 == 0) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var2); + } + + if(var1 == 1) { + this.setBlockBounds(1.0F - var2, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + if(var1 == 2) { + this.setBlockBounds(0.0F, 0.0F, 1.0F - var2, 1.0F, 1.0F, 1.0F); + } + + if(var1 == 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) { + this.blockActivated(var1, var2, var3, var4, var5); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) != 0) { + if(var1.getBlockId(var2, var3 - 1, var4) == this.blockID) { + this.blockActivated(var1, var2, var3 - 1, var4, var5); + } + + return true; + } else { + if(var1.getBlockId(var2, var3 + 1, var4) == this.blockID) { + var1.setBlockMetadataWithNotify(var2, var3 + 1, var4, (var6 ^ 4) + 8); + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 ^ 4); + var1.markBlocksDirty(var2, var3 - 1, var4, var2, var3, var4); + if(Math.random() < 0.5D) { + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.door_open", 1.0F, var1.rand.nextFloat() * 0.1F + 0.9F); + } else { + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.door_close", 1.0F, var1.rand.nextFloat() * 0.1F + 0.9F); + } + + return true; + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) != 0) { + if(var1.getBlockId(var2, var3 - 1, var4) != this.blockID) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } else { + boolean var7 = false; + if(var1.getBlockId(var2, var3 + 1, var4) != this.blockID) { + var1.setBlockWithNotify(var2, var3, var4, 0); + var7 = true; + } + + if(!var1.isBlockNormalCube(var2, var3 - 1, var4)) { + var1.setBlockWithNotify(var2, var3, var4, 0); + var7 = true; + if(var1.getBlockId(var2, var3 + 1, var4) == this.blockID) { + var1.setBlockWithNotify(var2, var3 + 1, var4, 0); + } + } + + if(var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var6); + } + } + + } + + public int idDropped(int var1, Random var2) { + return (var1 & 8) != 0 ? 0 : Item.door.shiftedIndex; + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3D var5, Vec3D var6) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.collisionRayTrace(var1, var2, var3, var4, var5, var6); + } + + public int getState(int var1) { + return (var1 & 4) == 0 ? var1 - 1 & 3 : var1 & 3; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var3 >= 127 ? false : var1.isBlockNormalCube(var2, var3 - 1, var4) && super.canPlaceBlockAt(var1, var2, var3, var4) && super.canPlaceBlockAt(var1, var2, var3 + 1, var4); + } +} diff --git a/src/net/minecraft/src/BlockFarmland.java b/src/net/minecraft/src/BlockFarmland.java new file mode 100644 index 0000000..790d39c --- /dev/null +++ b/src/net/minecraft/src/BlockFarmland.java @@ -0,0 +1,93 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFarmland extends Block { + protected BlockFarmland(int var1) { + super(var1, Material.ground); + this.blockIndexInTexture = 87; + this.setTickOnLoad(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.getBoundingBoxFromPool((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 int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return var1 == 1 && var2 > 0 ? this.blockIndexInTexture - 1 : (var1 == 1 ? this.blockIndexInTexture : 2); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var5.nextInt(5) == 0) { + if(this.isWaterNearby(var1, var2, var3, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 7); + } else { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 > 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 - 1); + } else if(!this.isCropsNearby(var1, var2, var3, var4)) { + var1.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID); + } + } + } + + } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + if(var1.rand.nextInt(4) == 0) { + var1.setBlockWithNotify(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) { + if(var1.getBlockId(var6, var3 + 1, var7) == Block.crops.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.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID); + } + + } + + public int idDropped(int var1, Random var2) { + return Block.dirt.idDropped(0, var2); + } +} diff --git a/src/net/minecraft/src/BlockFire.java b/src/net/minecraft/src/BlockFire.java new file mode 100644 index 0000000..594e81e --- /dev/null +++ b/src/net/minecraft/src/BlockFire.java @@ -0,0 +1,225 @@ +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]; + + protected BlockFire(int var1, int var2) { + super(var1, var2, Material.fire); + this.setBurnRate(Block.planks.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.cloth.blockID, 30, 60); + this.setTickOnLoad(true); + } + + 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() { + return 20; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 < 15) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 + 1); + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + } + + if(!this.canNeighborCatchFire(var1, var2, var3, var4)) { + if(!var1.isBlockNormalCube(var2, var3 - 1, var4) || var6 > 3) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + } else if(!this.canBlockCatchFire(var1, var2, var3 - 1, var4) && var6 == 15 && var5.nextInt(4) == 0) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } else { + if(var6 % 5 == 0 && var6 > 5) { + this.tryToCatchBlockOnFire(var1, var2 + 1, var3, var4, 300, var5); + this.tryToCatchBlockOnFire(var1, var2 - 1, var3, var4, 300, var5); + this.tryToCatchBlockOnFire(var1, var2, var3 - 1, var4, 100, var5); + this.tryToCatchBlockOnFire(var1, var2, var3 + 1, var4, 200, var5); + this.tryToCatchBlockOnFire(var1, var2, var3, var4 - 1, 300, var5); + this.tryToCatchBlockOnFire(var1, var2, var3, var4 + 1, 300, var5); + + for(int var7 = var2 - 1; var7 <= var2 + 1; ++var7) { + for(int var8 = var4 - 1; var8 <= var4 + 1; ++var8) { + for(int var9 = var3 - 1; var9 <= var3 + 4; ++var9) { + if(var7 != var2 || var9 != var3 || var8 != var4) { + int var10 = 100; + if(var9 > var3 + 1) { + var10 += (var9 - (var3 + 1)) * 100; + } + + int var11 = this.getChanceOfNeighborsEncouragingFire(var1, var7, var9, var8); + if(var11 > 0 && var5.nextInt(var10) <= var11) { + var1.setBlockWithNotify(var7, var9, var8, this.blockID); + } + } + } + } + } + } + + } + } + + private void tryToCatchBlockOnFire(World var1, int var2, int var3, int var4, int var5, Random var6) { + int var7 = this.abilityToCatchFire[var1.getBlockId(var2, var3, var4)]; + if(var6.nextInt(var5) < var7) { + boolean var8 = var1.getBlockId(var2, var3, var4) == Block.tnt.blockID; + if(var6.nextInt(2) == 0) { + var1.setBlockWithNotify(var2, var3, var4, this.blockID); + } else { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + if(var8) { + Block.tnt.onBlockDestroyedByPlayer(var1, var2, var3, var4, 0); + } + } + + } + + private boolean canNeighborCatchFire(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.getBlockId(var2, var3, var4) != 0) { + 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.isBlockNormalCube(var2, var3 - 1, var4) || this.canNeighborCatchFire(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isBlockNormalCube(var2, var3 - 1, var4) && !this.canNeighborCatchFire(var1, var2, var3, var4)) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(!var1.isBlockNormalCube(var2, var3 - 1, var4) && !this.canNeighborCatchFire(var1, var2, var3, var4)) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } else { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + } + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + if(var5.nextInt(24) == 0) { + var1.playSoundEffect((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); + } + + int var6; + float var7; + float var8; + float var9; + if(!var1.isBlockNormalCube(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); + } + } + + } +} diff --git a/src/net/minecraft/src/BlockFlower.java b/src/net/minecraft/src/BlockFlower.java new file mode 100644 index 0000000..8551ad0 --- /dev/null +++ b/src/net/minecraft/src/BlockFlower.java @@ -0,0 +1,58 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFlower extends Block { + protected BlockFlower(int var1, int var2) { + super(var1, Material.plants); + this.blockIndexInTexture = var2; + this.setTickOnLoad(true); + float var3 = 0.2F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, var3 * 3.0F, 0.5F + var3); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return 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)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + return (var1.getBlockLightValue(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/BlockFlowing.java b/src/net/minecraft/src/BlockFlowing.java new file mode 100644 index 0000000..7052e0c --- /dev/null +++ b/src/net/minecraft/src/BlockFlowing.java @@ -0,0 +1,253 @@ +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.setBlockAndMetadata(var2, var3, var4, this.blockID + 1, var5); + var1.markBlocksDirty(var2, var3, var4, var2, var3, var4); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + int var6 = this.getFlowDecay(var1, var2, var3, var4); + boolean var7 = true; + int var9; + if(var6 > 0) { + byte var8 = -100; + this.numAdjacentSources = 0; + int var11 = this.getSmallestFlowDecay(var1, var2 - 1, var3, var4, var8); + var11 = this.getSmallestFlowDecay(var1, var2 + 1, var3, var4, var11); + var11 = this.getSmallestFlowDecay(var1, var2, var3, var4 - 1, var11); + var11 = this.getSmallestFlowDecay(var1, var2, var3, var4 + 1, var11); + var9 = var11 + this.fluidType; + if(var9 >= 8 || var11 < 0) { + var9 = -1; + } + + if(this.getFlowDecay(var1, var2, var3 + 1, var4) >= 0) { + int var10 = this.getFlowDecay(var1, var2, var3 + 1, var4); + if(var10 >= 8) { + var9 = var10; + } else { + var9 = var10 + 8; + } + } + + if(this.numAdjacentSources >= 2 && this.blockMaterial == Material.water) { + var9 = 0; + } + + if(this.blockMaterial == Material.lava && var6 < 8 && var9 < 8 && var9 > var6 && var5.nextInt(4) != 0) { + var9 = var6; + var7 = false; + } + + if(var9 != var6) { + var6 = var9; + if(var9 < 0) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, var9); + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + } + } else if(var7) { + this.updateFlow(var1, var2, var3, var4); + } + } else { + this.updateFlow(var1, var2, var3, var4); + } + + if(this.liquidCanDisplaceBlock(var1, var2, var3 - 1, var4)) { + if(var6 >= 8) { + var1.setBlockAndMetadataWithNotify(var2, var3 - 1, var4, this.blockID, var6); + } else { + var1.setBlockAndMetadataWithNotify(var2, var3 - 1, var4, this.blockID, var6 + 8); + } + } else if(var6 >= 0 && (var6 == 0 || this.blockBlocksFlow(var1, var2, var3 - 1, var4))) { + boolean[] var12 = this.getOptimalFlowDirections(var1, var2, var3, var4); + var9 = var6 + this.fluidType; + if(var6 >= 8) { + var9 = 1; + } + + if(var9 >= 8) { + return; + } + + if(var12[0]) { + this.flowIntoBlock(var1, var2 - 1, var3, var4, var9); + } + + if(var12[1]) { + this.flowIntoBlock(var1, var2 + 1, var3, var4, var9); + } + + if(var12[2]) { + this.flowIntoBlock(var1, var2, var3, var4 - 1, var9); + } + + if(var12[3]) { + this.flowIntoBlock(var1, var2, var3, var4 + 1, var9); + } + } + + } + + 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)); + } + } + + var1.setBlockAndMetadataWithNotify(var2, var3, var4, this.blockID, var5); + } + + } + + 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] = 0; + } else { + this.flowCost[var5] = this.calculateFlowCost(var1, var6, var3, var8, 1, var5); + } + } + } + + 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.signStanding.blockID && var5 != Block.ladder.blockID) { + if(var5 == 0) { + return false; + } else { + Material var6 = Block.blocksList[var5].blockMaterial; + return var6.isSolid(); + } + } 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); + } + + } +} diff --git a/src/net/minecraft/src/BlockFluid.java b/src/net/minecraft/src/BlockFluid.java new file mode 100644 index 0000000..cb56215 --- /dev/null +++ b/src/net/minecraft/src/BlockFluid.java @@ -0,0 +1,273 @@ +package net.minecraft.src; + +import java.util.Random; + +public abstract class BlockFluid extends Block { + protected int fluidType = 1; + + protected BlockFluid(int var1, Material var2) { + super(var1, (var2 == Material.lava ? 14 : 12) * 16 + 13, var2); + float var3 = 0.0F; + float var4 = 0.0F; + if(var2 == Material.lava) { + this.fluidType = 2; + } + + this.setBlockBounds(0.0F + var4, 0.0F + var3, 0.0F + var4, 1.0F + var4, 1.0F + var3, 1.0F + var4); + this.setTickOnLoad(true); + } + + public static float getPercentAir(int var0) { + if(var0 >= 8) { + var0 = 0; + } + + float var1 = (float)(var0 + 1) / 9.0F; + return var1; + } + + public int getBlockTextureFromSide(int var1) { + return var1 != 0 && var1 != 1 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture; + } + + protected int getFlowDecay(World var1, int var2, int var3, int var4) { + return var1.getBlockMaterial(var2, var3, var4) != this.blockMaterial ? -1 : var1.getBlockMetadata(var2, var3, var4); + } + + 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 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 : 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) { + return 0; + } + + public int quantityDropped(Random var1) { + return 0; + } + + private Vec3D getFlowVector(IBlockAccess var1, int var2, int var3, int var4) { + Vec3D var5 = Vec3D.createVector(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) { + 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.shouldSideBeRendered(var1, var2, var3, var4 - 1, 2)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2, var3, var4 + 1, 3)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2 - 1, var3, var4, 4)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2 + 1, var3, var4, 5)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2, var3 + 1, var4 - 1, 2)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2, var3 + 1, var4 + 1, 3)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(var1, var2 - 1, var3 + 1, var4, 4)) { + var13 = true; + } + + if(var13 || this.shouldSideBeRendered(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, Vec3D var6) { + Vec3D var7 = this.getFlowVector(var1, var2, var3, var4); + var6.xCoord += var7.xCoord; + var6.yCoord += var7.yCoord; + var6.zCoord += var7.zCoord; + } + + public int tickRate() { + return this.blockMaterial == Material.water ? 5 : (this.blockMaterial == Material.lava ? 30 : 0); + } + + public float getBlockBrightness(IBlockAccess var1, int var2, int var3, int var4) { + float var5 = var1.getBrightness(var2, var3, var4); + float var6 = var1.getBrightness(var2, var3 + 1, var4); + return var5 > var6 ? var5 : var6; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + super.updateTick(var1, var2, var3, var4, var5); + } + + public int getRenderBlockPass() { + return this.blockMaterial == Material.water ? 1 : 0; + } + + public void randomDisplayTick(World var1, int var2, int var3, int var4, Random var5) { + if(this.blockMaterial == Material.water && var5.nextInt(64) == 0) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 > 0 && var6 < 8) { + var1.playSoundEffect((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); + } + } + + if(this.blockMaterial == Material.lava && var1.getBlockMaterial(var2, var3 + 1, var4) == Material.air && !var1.isBlockNormalCube(var2, var3 + 1, var4) && var5.nextInt(100) == 0) { + double var12 = (double)((float)var2 + var5.nextFloat()); + double var8 = (double)var3 + this.maxY; + double var10 = (double)((float)var4 + var5.nextFloat()); + var1.spawnParticle("lava", var12, var8, var10, 0.0D, 0.0D, 0.0D); + } + + } + + public static double getFlowDirection(IBlockAccess var0, int var1, int var2, int var3, Material var4) { + Vec3D var5 = null; + if(var4 == Material.water) { + var5 = ((BlockFluid)Block.waterMoving).getFlowVector(var0, var1, var2, var3); + } + + if(var4 == Material.lava) { + var5 = ((BlockFluid)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.setBlockWithNotify(var2, var3, var4, Block.obsidian.blockID); + } else if(var6 <= 4) { + var1.setBlockWithNotify(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); + } + + } +} diff --git a/src/net/minecraft/src/BlockFurnace.java b/src/net/minecraft/src/BlockFurnace.java new file mode 100644 index 0000000..69a78c5 --- /dev/null +++ b/src/net/minecraft/src/BlockFurnace.java @@ -0,0 +1,106 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFurnace extends BlockContainer { + private final boolean isActive; + + protected BlockFurnace(int var1, boolean var2) { + super(var1, Material.rock); + this.isActive = var2; + this.blockIndexInTexture = 45; + } + + 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) { + 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); + } + + public int getBlockTextureGeneric(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(var5 == 1) { + return Block.stone.blockIndexInTexture; + } else if(var5 == 0) { + return Block.stone.blockIndexInTexture; + } else { + int var6 = var1.getBlockMetadata(var2, var3, var4); + return var5 != var6 ? this.blockIndexInTexture : (this.isActive ? this.blockIndexInTexture + 16 : this.blockIndexInTexture - 1); + } + } + + 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 int getBlockTextureFromSide(int var1) { + return var1 == 1 ? Block.stone.blockID : (var1 == 0 ? Block.stone.blockID : (var1 == 3 ? this.blockIndexInTexture - 1 : this.blockIndexInTexture)); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + TileEntityFurnace var6 = (TileEntityFurnace)var1.getBlockTileEntity(var2, var3, var4); + var5.displayGUIFurnace(var6); + 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); + if(var0) { + var1.setBlockWithNotify(var2, var3, var4, Block.stoneOvenActive.blockID); + } else { + var1.setBlockWithNotify(var2, var3, var4, Block.stoneOvenIdle.blockID); + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var5); + var1.setBlockTileEntity(var2, var3, var4, var6); + } + + protected TileEntity getBlockEntity() { + return new TileEntityFurnace(); + } +} diff --git a/src/net/minecraft/src/BlockGears.java b/src/net/minecraft/src/BlockGears.java new file mode 100644 index 0000000..a58762f --- /dev/null +++ b/src/net/minecraft/src/BlockGears.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGears extends Block { + protected BlockGears(int var1, int var2) { + super(var1, var2, Material.circuits); + } + + 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 quantityDropped(Random var1) { + return 1; + } + + public boolean isCollidable() { + return false; + } +} diff --git a/src/net/minecraft/src/BlockGlass.java b/src/net/minecraft/src/BlockGlass.java new file mode 100644 index 0000000..c2672d1 --- /dev/null +++ b/src/net/minecraft/src/BlockGlass.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGlass extends BlockBreakable { + public BlockGlass(int var1, int var2, Material var3, boolean var4) { + super(var1, var2, var3, var4); + } + + public int quantityDropped(Random var1) { + return 0; + } +} diff --git a/src/net/minecraft/src/BlockGrass.java b/src/net/minecraft/src/BlockGrass.java new file mode 100644 index 0000000..f9bff22 --- /dev/null +++ b/src/net/minecraft/src/BlockGrass.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGrass extends Block { + protected BlockGrass(int var1) { + super(var1, Material.ground); + this.blockIndexInTexture = 3; + this.setTickOnLoad(true); + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? 0 : (var1 == 0 ? 2 : 3); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.getBlockLightValue(var2, var3 + 1, var4) < 4 && var1.getBlockMaterial(var2, var3 + 1, var4).getCanBlockGrass()) { + if(var5.nextInt(4) != 0) { + return; + } + + var1.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID); + } else if(var1.getBlockLightValue(var2, var3 + 1, var4) >= 9) { + int var6 = var2 + var5.nextInt(3) - 1; + int var7 = var3 + var5.nextInt(5) - 3; + int var8 = var4 + var5.nextInt(3) - 1; + if(var1.getBlockId(var6, var7, var8) == Block.dirt.blockID && var1.getBlockLightValue(var6, var7 + 1, var8) >= 4 && !var1.getBlockMaterial(var6, var7 + 1, var8).getCanBlockGrass()) { + var1.setBlockWithNotify(var6, var7, var8, Block.grass.blockID); + } + } + + } + + public int idDropped(int var1, Random var2) { + return Block.dirt.idDropped(0, var2); + } +} diff --git a/src/net/minecraft/src/BlockGravel.java b/src/net/minecraft/src/BlockGravel.java new file mode 100644 index 0000000..c0fd641 --- /dev/null +++ b/src/net/minecraft/src/BlockGravel.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockGravel extends BlockSand { + public BlockGravel(int var1, int var2) { + super(var1, var2); + } + + public int idDropped(int var1, Random var2) { + return var2.nextInt(10) == 0 ? Item.flint.shiftedIndex : this.blockID; + } +} diff --git a/src/net/minecraft/src/BlockLadder.java b/src/net/minecraft/src/BlockLadder.java new file mode 100644 index 0000000..dfcce6f --- /dev/null +++ b/src/net/minecraft/src/BlockLadder.java @@ -0,0 +1,121 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockLadder extends Block { + protected BlockLadder(int var1, int var2) { + super(var1, var2, Material.circuits); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + float var6 = 2.0F / 16.0F; + if(var5 == 2) { + this.setBlockBounds(0.0F, 0.0F, 1.0F - var6, 1.0F, 1.0F, 1.0F); + } + + if(var5 == 3) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var6); + } + + if(var5 == 4) { + this.setBlockBounds(1.0F - var6, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + if(var5 == 5) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, var6, 1.0F, 1.0F); + } + + return super.getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + } + + public AxisAlignedBB getSelectedBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + float var6 = 2.0F / 16.0F; + if(var5 == 2) { + this.setBlockBounds(0.0F, 0.0F, 1.0F - var6, 1.0F, 1.0F, 1.0F); + } + + if(var5 == 3) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, var6); + } + + if(var5 == 4) { + this.setBlockBounds(1.0F - var6, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + if(var5 == 5) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, var6, 1.0F, 1.0F); + } + + return super.getSelectedBoundingBoxFromPool(var1, var2, var3, var4); + } + + 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 void onBlockPlaced(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 == 0 || var5 == 2) && var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var6 = 2; + } + + if((var6 == 0 || var5 == 3) && var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var6 = 3; + } + + if((var6 == 0 || var5 == 4) && var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var6 = 4; + } + + if((var6 == 0 || var5 == 5) && var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var6 = 5; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + } + + 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); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + 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..d79b80e --- /dev/null +++ b/src/net/minecraft/src/BlockLeaves.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockLeaves extends BlockLeavesBase { + private int leafTexIndex; + + protected BlockLeaves(int var1, int var2) { + super(var1, var2, Material.leaves, false); + this.leafTexIndex = var2; + this.setTickOnLoad(true); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.getBlockMaterial(var2, var3 - 1, var4).isSolid()) { + byte var6 = 2; + + for(int var7 = var2 - var6; var7 <= var2 + var6; ++var7) { + for(int var8 = var3 - 1; var8 <= var3 + 1; ++var8) { + for(int var9 = var4 - var6; var9 <= var4 + var6; ++var9) { + if(var1.getBlockId(var7, var8, var9) == Block.wood.blockID) { + return; + } + } + } + } + + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } + + public int quantityDropped(Random var1) { + return var1.nextInt(10) == 0 ? 1 : 0; + } + + public int idDropped(int var1, Random var2) { + return Block.sapling.blockID; + } + + public boolean isOpaqueCube() { + return !this.graphicsLevel; + } + + public void setGraphicsLevel(boolean var1) { + this.graphicsLevel = var1; + this.blockIndexInTexture = this.leafTexIndex + (var1 ? 0 : 1); + } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + super.onEntityWalking(var1, var2, var3, var4, var5); + } +} diff --git a/src/net/minecraft/src/BlockLeavesBase.java b/src/net/minecraft/src/BlockLeavesBase.java new file mode 100644 index 0000000..c719d88 --- /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, int var2, Material var3, boolean var4) { + super(var1, var2, var3); + this.graphicsLevel = var4; + } + + 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/BlockLog.java b/src/net/minecraft/src/BlockLog.java new file mode 100644 index 0000000..357e5a0 --- /dev/null +++ b/src/net/minecraft/src/BlockLog.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockLog extends Block { + protected BlockLog(int var1) { + super(var1, Material.wood); + this.blockIndexInTexture = 20; + } + + public int quantityDropped(Random var1) { + return 1; + } + + public int idDropped(int var1, Random var2) { + return Block.wood.blockID; + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? 21 : (var1 == 0 ? 21 : 20); + } +} diff --git a/src/net/minecraft/src/BlockMinecartTrack.java b/src/net/minecraft/src/BlockMinecartTrack.java new file mode 100644 index 0000000..6566102 --- /dev/null +++ b/src/net/minecraft/src/BlockMinecartTrack.java @@ -0,0 +1,92 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockMinecartTrack extends Block { + protected BlockMinecartTrack(int var1, int var2) { + super(var1, var2, Material.circuits); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F); + } + + 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, Vec3D var5, Vec3D 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 int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return var2 >= 6 ? this.blockIndexInTexture - 16 : this.blockIndexInTexture; + } + + 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.isBlockNormalCube(var2, var3 - 1, var4); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 15); + this.refreshTrackShape(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + boolean var7 = false; + if(!var1.isBlockNormalCube(var2, var3 - 1, var4)) { + var7 = true; + } + + if(var6 == 2 && !var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var7 = true; + } + + if(var6 == 3 && !var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var7 = true; + } + + if(var6 == 4 && !var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var7 = true; + } + + if(var6 == 5 && !var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var7 = true; + } + + if(var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + } + + private void refreshTrackShape(World var1, int var2, int var3, int var4) { + (new MinecartTrackLogic(this, var1, var2, var3, var4)).place(); + } +} diff --git a/src/net/minecraft/src/BlockMobSpawner.java b/src/net/minecraft/src/BlockMobSpawner.java new file mode 100644 index 0000000..b845263 --- /dev/null +++ b/src/net/minecraft/src/BlockMobSpawner.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class BlockMobSpawner extends BlockContainer { + protected BlockMobSpawner(int var1, int var2) { + super(var1, var2, Material.rock); + } + + protected TileEntity getBlockEntity() { + return new TileEntityMobSpawner(); + } + + public boolean isOpaqueCube() { + return false; + } +} diff --git a/src/net/minecraft/src/BlockMushroom.java b/src/net/minecraft/src/BlockMushroom.java new file mode 100644 index 0000000..f129b7b --- /dev/null +++ b/src/net/minecraft/src/BlockMushroom.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class BlockMushroom extends BlockFlower { + protected BlockMushroom(int var1, int var2) { + super(var1, var2); + float var3 = 0.2F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, var3 * 2.0F, 0.5F + var3); + } + + protected boolean canThisPlantGrowOnThisBlockID(int var1) { + return Block.opaqueCubeLookup[var1]; + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + return var1.getBlockLightValue(var2, var3, var4) <= 13 && this.canThisPlantGrowOnThisBlockID(var1.getBlockId(var2, var3 - 1, var4)); + } +} diff --git a/src/net/minecraft/src/BlockObsidian.java b/src/net/minecraft/src/BlockObsidian.java new file mode 100644 index 0000000..c75b227 --- /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, int var2) { + super(var1, var2); + } + + public int quantityDropped(Random var1) { + return 1; + } + + public int idDropped(int var1, Random var2) { + 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..a66fd91 --- /dev/null +++ b/src/net/minecraft/src/BlockOre.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockOre extends Block { + public BlockOre(int var1, int var2) { + super(var1, var2, Material.rock); + } + + public int idDropped(int var1, Random var2) { + return this.blockID == Block.oreCoal.blockID ? Item.coal.shiftedIndex : (this.blockID == Block.oreDiamond.blockID ? Item.diamond.shiftedIndex : this.blockID); + } + + public int quantityDropped(Random var1) { + return 1; + } +} diff --git a/src/net/minecraft/src/BlockOreBlock.java b/src/net/minecraft/src/BlockOreBlock.java new file mode 100644 index 0000000..5655234 --- /dev/null +++ b/src/net/minecraft/src/BlockOreBlock.java @@ -0,0 +1,12 @@ +package net.minecraft.src; + +public class BlockOreBlock extends Block { + public BlockOreBlock(int var1, int var2) { + super(var1, Material.iron); + this.blockIndexInTexture = var2; + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? this.blockIndexInTexture - 16 : (var1 == 0 ? this.blockIndexInTexture + 16 : this.blockIndexInTexture); + } +} diff --git a/src/net/minecraft/src/BlockSand.java b/src/net/minecraft/src/BlockSand.java new file mode 100644 index 0000000..451a32e --- /dev/null +++ b/src/net/minecraft/src/BlockSand.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSand extends Block { + public static boolean fallInstantly = false; + + public BlockSand(int var1, int var2) { + super(var1, var2, Material.sand); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + 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) { + EntityFallingSand var8 = new EntityFallingSand(var1, (float)var2 + 0.5F, (float)var3 + 0.5F, (float)var4 + 0.5F, this.blockID); + if(fallInstantly) { + while(!var8.isDead) { + var8.onUpdate(); + } + } else { + var1.spawnEntityInWorld(var8); + } + } + + } + + public int tickRate() { + return 3; + } + + 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; + } + } +} diff --git a/src/net/minecraft/src/BlockSapling.java b/src/net/minecraft/src/BlockSapling.java new file mode 100644 index 0000000..7d13f83 --- /dev/null +++ b/src/net/minecraft/src/BlockSapling.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSapling extends BlockFlower { + protected BlockSapling(int var1, int var2) { + super(var1, var2); + float var3 = 0.4F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, var3 * 2.0F, 0.5F + var3); + } + + 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 && var5.nextInt(5) == 0) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 < 15) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 + 1); + } else { + var1.setBlock(var2, var3, var4, 0); + WorldGenTrees var7 = new WorldGenTrees(); + if(!var7.generate(var1, var5, var2, var3, var4)) { + var1.setBlock(var2, var3, var4, this.blockID); + } + } + } + + } +} diff --git a/src/net/minecraft/src/BlockSign.java b/src/net/minecraft/src/BlockSign.java new file mode 100644 index 0000000..03b8536 --- /dev/null +++ b/src/net/minecraft/src/BlockSign.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSign extends BlockContainer { + private Class signEntityClass; + private int itemDropID; + + protected BlockSign(int var1, Class var2, int var3) { + super(var1, Material.wood); + this.blockIndexInTexture = 4; + this.signEntityClass = var2; + float var4 = 0.25F; + float var5 = 1.625F; + this.setBlockBounds(0.5F - var4, 0.0F, 0.5F - var4, 0.5F + var4, var5, 0.5F + var4); + this.itemDropID = var3; + } + + public int getRenderType() { + return -1; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public boolean isOpaqueCube() { + return false; + } + + protected TileEntity getBlockEntity() { + try { + return (TileEntity)this.signEntityClass.newInstance(); + } catch (Exception var2) { + throw new RuntimeException(var2); + } + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return super.canPlaceBlockAt(var1, var2, var3, var4) && super.canPlaceBlockAt(var1, var2, var3 + 1, var4); + } + + public int idDropped(int var1, Random var2) { + return this.itemDropID; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.isBlockNormalCube(var2, var3 - 1, var4)) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + } +} diff --git a/src/net/minecraft/src/BlockSponge.java b/src/net/minecraft/src/BlockSponge.java new file mode 100644 index 0000000..d8a441d --- /dev/null +++ b/src/net/minecraft/src/BlockSponge.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +public class BlockSponge extends Block { + protected BlockSponge(int var1) { + super(var1, Material.sponge); + this.blockIndexInTexture = 48; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + byte var5 = 2; + + for(int var6 = var2 - var5; var6 <= var2 + var5; ++var6) { + for(int var7 = var3 - var5; var7 <= var3 + var5; ++var7) { + for(int var8 = var4 - var5; var8 <= var4 + var5; ++var8) { + if(var1.getBlockMaterial(var6, var7, var8) == Material.water) { + } + } + } + } + + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + byte var5 = 2; + + for(int var6 = var2 - var5; var6 <= var2 + var5; ++var6) { + for(int var7 = var3 - var5; var7 <= var3 + var5; ++var7) { + for(int var8 = var4 - var5; var8 <= var4 + var5; ++var8) { + var1.notifyBlocksOfNeighborChange(var6, var7, var8, var1.getBlockId(var6, var7, var8)); + } + } + } + + } +} diff --git a/src/net/minecraft/src/BlockStairs.java b/src/net/minecraft/src/BlockStairs.java new file mode 100644 index 0000000..aec58f7 --- /dev/null +++ b/src/net/minecraft/src/BlockStairs.java @@ -0,0 +1,249 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Random; + +public class BlockStairs extends Block { + private Block modelBlock; + + protected BlockStairs(int var1, Block var2) { + super(var1, var2.blockIndexInTexture, var2.blockMaterial); + this.modelBlock = var2; + this.setHardness(var2.blockHardness); + this.setResistance(var2.blockResistance / 3.0F); + this.setStepSound(var2.stepSound); + } + + public boolean isOpaqueCube() { + return false; + } + + public boolean renderAsNormalBlock() { + return false; + } + + public int getRenderType() { + return 10; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return super.shouldSideBeRendered(var1, var2, var3, var4, var5); + } + + public void getCollidingBoundingBoxes(World var1, int var2, int var3, int var4, AxisAlignedBB var5, ArrayList var6) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + if(var7 == 0) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 0.5F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + } else if(var7 == 1) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 1.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + } else if(var7 == 2) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 0.5F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 1.0F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + } else if(var7 == 3) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.5F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + this.setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 0.5F, 1.0F); + super.getCollidingBoundingBoxes(var1, var2, var3, var4, var5, var6); + } + + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(var1.getBlockMaterial(var2, var3 + 1, var4).isSolid()) { + var1.setBlockWithNotify(var2, var3, var4, this.modelBlock.blockID); + } else { + this.updateState(var1, var2, var3, var4); + this.updateState(var1, var2 + 1, var3 - 1, var4); + this.updateState(var1, var2 - 1, var3 - 1, var4); + this.updateState(var1, var2, var3 - 1, var4 - 1); + this.updateState(var1, var2, var3 - 1, var4 + 1); + this.updateState(var1, var2 + 1, var3 + 1, var4); + this.updateState(var1, var2 - 1, var3 + 1, var4); + this.updateState(var1, var2, var3 + 1, var4 - 1); + this.updateState(var1, var2, var3 + 1, var4 + 1); + } + + this.modelBlock.onNeighborBlockChange(var1, var2, var3, var4, var5); + } + + private void updateState(World var1, int var2, int var3, int var4) { + if(this.isBlockStair(var1, var2, var3, var4)) { + byte var5 = -1; + if(this.isBlockStair(var1, var2 + 1, var3 + 1, var4)) { + var5 = 0; + } + + if(this.isBlockStair(var1, var2 - 1, var3 + 1, var4)) { + var5 = 1; + } + + if(this.isBlockStair(var1, var2, var3 + 1, var4 + 1)) { + var5 = 2; + } + + if(this.isBlockStair(var1, var2, var3 + 1, var4 - 1)) { + var5 = 3; + } + + if(var5 < 0) { + if(this.isBlockSolid(var1, var2 + 1, var3, var4) && !this.isBlockSolid(var1, var2 - 1, var3, var4)) { + var5 = 0; + } + + if(this.isBlockSolid(var1, var2 - 1, var3, var4) && !this.isBlockSolid(var1, var2 + 1, var3, var4)) { + var5 = 1; + } + + if(this.isBlockSolid(var1, var2, var3, var4 + 1) && !this.isBlockSolid(var1, var2, var3, var4 - 1)) { + var5 = 2; + } + + if(this.isBlockSolid(var1, var2, var3, var4 - 1) && !this.isBlockSolid(var1, var2, var3, var4 + 1)) { + var5 = 3; + } + } + + if(var5 < 0) { + if(this.isBlockStair(var1, var2 - 1, var3 - 1, var4)) { + var5 = 0; + } + + if(this.isBlockStair(var1, var2 + 1, var3 - 1, var4)) { + var5 = 1; + } + + if(this.isBlockStair(var1, var2, var3 - 1, var4 - 1)) { + var5 = 2; + } + + if(this.isBlockStair(var1, var2, var3 - 1, var4 + 1)) { + var5 = 3; + } + } + + if(var5 >= 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var5); + } + + } + } + + private boolean isBlockSolid(World var1, int var2, int var3, int var4) { + return var1.getBlockMaterial(var2, var3, var4).isSolid(); + } + + private boolean isBlockStair(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3, var4); + return var5 == 0 ? false : Block.blocksList[var5].getRenderType() == 10; + } + + 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 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 int idDropped(int var1, Random var2) { + return this.modelBlock.idDropped(var1, var2); + } + + public int quantityDropped(Random var1) { + return this.modelBlock.quantityDropped(var1); + } + + public int getBlockTextureFromSideAndMetadata(int var1, int var2) { + return this.modelBlock.getBlockTextureFromSideAndMetadata(var1, var2); + } + + public int getBlockTextureFromSide(int var1) { + return this.modelBlock.getBlockTextureFromSide(var1); + } + + public int getBlockTextureGeneric(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return this.modelBlock.getBlockTextureGeneric(var1, var2, var3, var4, var5); + } + + public int tickRate() { + return this.modelBlock.tickRate(); + } + + 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, Vec3D 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 onBlockRemoval(World var1, int var2, int var3, int var4) { + this.modelBlock.onBlockRemoval(var1, var2, var3, var4); + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) { + this.modelBlock.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6); + } + + public void dropBlockAsItem(World var1, int var2, int var3, int var4, int var5) { + this.modelBlock.dropBlockAsItem(var1, var2, var3, var4, var5); + } + + 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 blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + return this.modelBlock.blockActivated(var1, var2, var3, var4, var5); + } + + public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4) { + this.modelBlock.onBlockDestroyedByExplosion(var1, var2, var3, var4); + } +} diff --git a/src/net/minecraft/src/BlockStationary.java b/src/net/minecraft/src/BlockStationary.java new file mode 100644 index 0000000..12332ea --- /dev/null +++ b/src/net/minecraft/src/BlockStationary.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class BlockStationary extends BlockFluid { + protected BlockStationary(int var1, Material var2) { + super(var1, var2); + this.setTickOnLoad(false); + } + + 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.updateTick(var1, var2, var3, var4); + } + + } + + private void updateTick(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + var1.editingBlocks = true; + var1.setBlockAndMetadata(var2, var3, var4, this.blockID - 1, var5); + var1.markBlocksDirty(var2, var3, var4, var2, var3, var4); + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID - 1); + var1.editingBlocks = false; + } +} diff --git a/src/net/minecraft/src/BlockStep.java b/src/net/minecraft/src/BlockStep.java new file mode 100644 index 0000000..c9e7fce --- /dev/null +++ b/src/net/minecraft/src/BlockStep.java @@ -0,0 +1,59 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockStep extends Block { + private boolean blockType; + + public BlockStep(int var1, boolean var2) { + super(var1, 6, Material.rock); + this.blockType = var2; + if(!var2) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + } + + this.setLightOpacity(255); + } + + public int getBlockTextureFromSide(int var1) { + return var1 <= 1 ? 6 : 5; + } + + public boolean isOpaqueCube() { + return this.blockType; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(this == Block.stairSingle) { + } + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(this != Block.stairSingle) { + super.onBlockAdded(var1, var2, var3, var4); + } + + int var5 = var1.getBlockId(var2, var3 - 1, var4); + if(var5 == stairSingle.blockID) { + var1.setBlockWithNotify(var2, var3, var4, 0); + var1.setBlockWithNotify(var2, var3 - 1, var4, Block.stairDouble.blockID); + } + + } + + public int idDropped(int var1, Random var2) { + return Block.stairSingle.blockID; + } + + public boolean renderAsNormalBlock() { + return this.blockType; + } + + public boolean shouldSideBeRendered(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(this != Block.stairSingle) { + super.shouldSideBeRendered(var1, var2, var3, var4, var5); + } + + return var5 == 1 ? true : (!super.shouldSideBeRendered(var1, var2, var3, var4, var5) ? false : (var5 == 0 ? true : var1.getBlockId(var2, var3, var4) != this.blockID)); + } +} diff --git a/src/net/minecraft/src/BlockStone.java b/src/net/minecraft/src/BlockStone.java new file mode 100644 index 0000000..eae4ecd --- /dev/null +++ b/src/net/minecraft/src/BlockStone.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockStone extends Block { + public BlockStone(int var1, int var2) { + super(var1, var2, Material.rock); + } + + public int idDropped(int var1, Random var2) { + return Block.cobblestone.blockID; + } +} diff --git a/src/net/minecraft/src/BlockTNT.java b/src/net/minecraft/src/BlockTNT.java new file mode 100644 index 0000000..aa103d5 --- /dev/null +++ b/src/net/minecraft/src/BlockTNT.java @@ -0,0 +1,29 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockTNT extends Block { + public BlockTNT(int var1, int var2) { + super(var1, var2, Material.tnt); + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 0 ? this.blockIndexInTexture + 2 : (var1 == 1 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture); + } + + public int quantityDropped(Random var1) { + return 0; + } + + public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4) { + EntityTNTPrimed var5 = new EntityTNTPrimed(var1, (float)var2 + 0.5F, (float)var3 + 0.5F, (float)var4 + 0.5F); + var5.fuse = var1.rand.nextInt(var5.fuse / 4) + var5.fuse / 8; + var1.spawnEntityInWorld(var5); + } + + public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) { + EntityTNTPrimed var6 = new EntityTNTPrimed(var1, (float)var2 + 0.5F, (float)var3 + 0.5F, (float)var4 + 0.5F); + var1.spawnEntityInWorld(var6); + var1.playSoundAtEntity(var6, "random.fuse", 1.0F, 1.0F); + } +} diff --git a/src/net/minecraft/src/BlockTorch.java b/src/net/minecraft/src/BlockTorch.java new file mode 100644 index 0000000..a099e4a --- /dev/null +++ b/src/net/minecraft/src/BlockTorch.java @@ -0,0 +1,166 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockTorch extends Block { + protected BlockTorch(int var1, int var2) { + super(var1, var2, Material.circuits); + this.setTickOnLoad(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 2; + } + + 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.isBlockNormalCube(var2, var3 - 1, var4)))); + } + + public void onBlockPlaced(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var5 == 1 && var1.isBlockNormalCube(var2, var3 - 1, var4)) { + var6 = 5; + } + + if(var5 == 2 && var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var6 = 4; + } + + if(var5 == 3 && var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var6 = 3; + } + + if(var5 == 4 && var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var6 = 2; + } + + if(var5 == 5 && var1.isBlockNormalCube(var2 - 1, var3, var4)) { + var6 = 1; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + } + + 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.isBlockNormalCube(var2 - 1, var3, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 1); + } else if(var1.isBlockNormalCube(var2 + 1, var3, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 2); + } else if(var1.isBlockNormalCube(var2, var3, var4 - 1)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 3); + } else if(var1.isBlockNormalCube(var2, var3, var4 + 1)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 4); + } else if(var1.isBlockNormalCube(var2, var3 - 1, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 5); + } + + this.dropTorchIfCantStay(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(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.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.isBlockNormalCube(var2, var3 - 1, var4) && var6 == 5) { + var7 = true; + } + + if(var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } + + } + + private boolean dropTorchIfCantStay(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)); + var1.setBlockWithNotify(var2, var3, var4, 0); + return false; + } else { + return true; + } + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3D var5, Vec3D var6) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + 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); + float var7 = (float)var2 + 0.5F; + float var8 = (float)var3 + 0.7F; + float var9 = (float)var4 + 0.5F; + float var10 = 0.22F; + float var11 = 0.27F; + if(var6 == 1) { + var1.spawnParticle("smoke", (double)(var7 - var11), (double)(var8 + var10), (double)var9, 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", (double)(var7 - var11), (double)(var8 + var10), (double)var9, 0.0D, 0.0D, 0.0D); + } else if(var6 == 2) { + var1.spawnParticle("smoke", (double)(var7 + var11), (double)(var8 + var10), (double)var9, 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", (double)(var7 + var11), (double)(var8 + var10), (double)var9, 0.0D, 0.0D, 0.0D); + } else if(var6 == 3) { + var1.spawnParticle("smoke", (double)var7, (double)(var8 + var10), (double)(var9 - var11), 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", (double)var7, (double)(var8 + var10), (double)(var9 - var11), 0.0D, 0.0D, 0.0D); + } else if(var6 == 4) { + var1.spawnParticle("smoke", (double)var7, (double)(var8 + var10), (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", (double)var7, (double)(var8 + var10), (double)(var9 + var11), 0.0D, 0.0D, 0.0D); + } else { + var1.spawnParticle("smoke", (double)var7, (double)var8, (double)var9, 0.0D, 0.0D, 0.0D); + var1.spawnParticle("flame", (double)var7, (double)var8, (double)var9, 0.0D, 0.0D, 0.0D); + } + + } +} diff --git a/src/net/minecraft/src/BlockWorkbench.java b/src/net/minecraft/src/BlockWorkbench.java new file mode 100644 index 0000000..8b02c5f --- /dev/null +++ b/src/net/minecraft/src/BlockWorkbench.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class BlockWorkbench extends Block { + protected BlockWorkbench(int var1) { + super(var1, Material.wood); + this.blockIndexInTexture = 59; + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? this.blockIndexInTexture - 16 : (var1 == 0 ? Block.planks.getBlockTextureFromSide(0) : (var1 != 2 && var1 != 4 ? this.blockIndexInTexture : this.blockIndexInTexture + 1)); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + var5.displayWorkbenchGUI(); + return true; + } +} 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/CanvasIsomPreview.java b/src/net/minecraft/src/CanvasIsomPreview.java new file mode 100644 index 0000000..d175b90 --- /dev/null +++ b/src/net/minecraft/src/CanvasIsomPreview.java @@ -0,0 +1,378 @@ +package net.minecraft.src; + +import java.awt.Canvas; +import java.awt.Color; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.event.KeyEvent; +import java.awt.event.KeyListener; +import java.awt.event.MouseEvent; +import java.awt.event.MouseListener; +import java.awt.event.MouseMotionListener; +import java.awt.geom.AffineTransform; +import java.awt.image.BufferStrategy; +import java.awt.image.ImageObserver; +import java.io.File; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +public class CanvasIsomPreview extends Canvas implements KeyListener, MouseListener, MouseMotionListener, Runnable { + private int currentRender = 0; + private int zoomLevel = 2; + private boolean displayHelpText = true; + private World level; + private File dataFolder = this.getMinecraftDir(); + private boolean running = true; + private List zonesToRender = Collections.synchronizedList(new LinkedList()); + private IsoImageBuffer[][] zoneMap = new IsoImageBuffer[64][64]; + private int translateX; + private int translateY; + private int xPosition; + private int yPosition; + + public File getMinecraftDir() { + if(this.dataFolder == null) { + this.dataFolder = this.getWorkingDirectory("minecraft"); + } + + return this.dataFolder; + } + + public File getWorkingDirectory(String var1) { + String var2 = System.getProperty("user.home", "."); + File var3; + switch(OSMapIsom.osValues[getPlatform().ordinal()]) { + case 1: + case 2: + var3 = new File(var2, '.' + var1 + '/'); + break; + case 3: + String var4 = System.getenv("APPDATA"); + if(var4 != null) { + var3 = new File(var4, "." + var1 + '/'); + } else { + var3 = new File(var2, '.' + var1 + '/'); + } + break; + case 4: + var3 = new File(var2, "Library/Application Support/" + var1); + break; + default: + var3 = new File(var2, var1 + '/'); + } + + if(!var3.exists() && !var3.mkdirs()) { + throw new RuntimeException("The working directory could not be created: " + var3); + } else { + return var3; + } + } + + private static EnumOSIsom getPlatform() { + String var0 = System.getProperty("os.name").toLowerCase(); + return var0.contains("win") ? EnumOSIsom.windows : (var0.contains("mac") ? EnumOSIsom.macos : (var0.contains("solaris") ? EnumOSIsom.solaris : (var0.contains("sunos") ? EnumOSIsom.solaris : (var0.contains("linux") ? EnumOSIsom.linux : (var0.contains("unix") ? EnumOSIsom.linux : EnumOSIsom.unknown))))); + } + + public CanvasIsomPreview() { + for(int var1 = 0; var1 < 64; ++var1) { + for(int var2 = 0; var2 < 64; ++var2) { + this.zoneMap[var1][var2] = new IsoImageBuffer((World)null, var1, var2); + } + } + + this.addMouseListener(this); + this.addMouseMotionListener(this); + this.addKeyListener(this); + this.setFocusable(true); + this.requestFocus(); + this.setBackground(Color.red); + } + + public void loadWorld(String var1) { + this.translateX = this.translateY = 0; + this.level = new WorldIso(this, new File(this.dataFolder, "saves"), var1); + this.level.skylightSubtracted = 0; + List var2 = this.zonesToRender; + synchronized(var2) { + this.zonesToRender.clear(); + + for(int var3 = 0; var3 < 64; ++var3) { + for(int var4 = 0; var4 < 64; ++var4) { + this.zoneMap[var3][var4].setWorldAndChunkPosition(this.level, var3, var4); + } + } + + } + } + + private void setBrightness(int var1) { + List var2 = this.zonesToRender; + synchronized(var2) { + this.level.skylightSubtracted = var1; + this.zonesToRender.clear(); + + for(int var3 = 0; var3 < 64; ++var3) { + for(int var4 = 0; var4 < 64; ++var4) { + this.zoneMap[var3][var4].setWorldAndChunkPosition(this.level, var3, var4); + } + } + + } + } + + public void start() { + (new ThreadRunIsoClient(this)).start(); + + for(int var1 = 0; var1 < 1; ++var1) { + (new Thread(this)).start(); + } + + } + + public void stop() { + this.running = false; + } + + private IsoImageBuffer getZone(int var1, int var2) { + int var3 = var1 & 63; + int var4 = var2 & 63; + IsoImageBuffer var5 = this.zoneMap[var3][var4]; + if(var5.chunkX == var1 && var5.chunkZ == var2) { + return var5; + } else { + List var6 = this.zonesToRender; + synchronized(var6) { + this.zonesToRender.remove(var5); + } + + var5.setChunkPosition(var1, var2); + return var5; + } + } + + public void run() { + TerrainTextureManager var1 = new TerrainTextureManager(); + + while(this.running) { + IsoImageBuffer var2 = null; + List var3 = this.zonesToRender; + synchronized(var3) { + if(this.zonesToRender.size() > 0) { + var2 = (IsoImageBuffer)this.zonesToRender.remove(0); + } + } + + if(var2 != null) { + if(this.currentRender - var2.lastVisible < 2) { + var1.render(var2); + this.repaint(); + } else { + var2.addedToRenderQueue = false; + } + } + + try { + Thread.sleep(2L); + } catch (InterruptedException var5) { + var5.printStackTrace(); + } + } + + } + + public void update(Graphics var1) { + } + + public void paint(Graphics var1) { + } + + public void render() { + BufferStrategy var1 = this.getBufferStrategy(); + if(var1 == null) { + this.createBufferStrategy(2); + } else { + this.render((Graphics2D)var1.getDrawGraphics()); + var1.show(); + } + } + + public void render(Graphics2D var1) { + ++this.currentRender; + AffineTransform var2 = var1.getTransform(); + var1.setClip(0, 0, this.getWidth(), this.getHeight()); + var1.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_NEAREST_NEIGHBOR); + var1.translate(this.getWidth() / 2, this.getHeight() / 2); + var1.scale((double)this.zoomLevel, (double)this.zoomLevel); + var1.translate(this.translateX, this.translateY); + if(this.level != null) { + var1.translate(-(this.level.spawnX + this.level.spawnZ), -(-this.level.spawnX + this.level.spawnZ) + 64); + } + + Rectangle var3 = var1.getClipBounds(); + var1.setColor(new Color(-15724512)); + var1.fillRect(var3.x, var3.y, var3.width, var3.height); + byte var4 = 16; + byte var5 = 3; + int var6 = var3.x / var4 / 2 - 2 - var5; + int var7 = (var3.x + var3.width) / var4 / 2 + 1 + var5; + int var8 = var3.y / var4 - 1 - var5 * 2; + int var9 = (var3.y + var3.height + 16 + 128) / var4 + 1 + var5 * 2; + + int var10; + for(var10 = var8; var10 <= var9; ++var10) { + for(int var11 = var6; var11 <= var7; ++var11) { + int var12 = var11 - (var10 >> 1); + int var13 = var11 + (var10 + 1 >> 1); + IsoImageBuffer var14 = this.getZone(var12, var13); + var14.lastVisible = this.currentRender; + if(!var14.rendered) { + if(!var14.addedToRenderQueue) { + var14.addedToRenderQueue = true; + this.zonesToRender.add(var14); + } + } else { + var14.addedToRenderQueue = false; + if(!var14.noContent) { + int var15 = var11 * var4 * 2 + (var10 & 1) * var4; + int var16 = var10 * var4 - 128 - 16; + var1.drawImage(var14.image, var15, var16, (ImageObserver)null); + } + } + } + } + + if(this.displayHelpText) { + var1.setTransform(var2); + var10 = this.getHeight() - 32 - 4; + var1.setColor(new Color(Integer.MIN_VALUE, true)); + var1.fillRect(4, this.getHeight() - 32 - 4, this.getWidth() - 8, 32); + var1.setColor(Color.WHITE); + String var17 = "F1 - F5: load levels | 0-9: Set time of day | Space: return to spawn | Double click: zoom | Escape: hide this text"; + var1.drawString(var17, this.getWidth() / 2 - var1.getFontMetrics().stringWidth(var17) / 2, var10 + 20); + } + + var1.dispose(); + } + + public void mouseDragged(MouseEvent var1) { + int var2 = var1.getX() / this.zoomLevel; + int var3 = var1.getY() / this.zoomLevel; + this.translateX += var2 - this.xPosition; + this.translateY += var3 - this.yPosition; + this.xPosition = var2; + this.yPosition = var3; + this.repaint(); + } + + public void mouseMoved(MouseEvent var1) { + } + + public void mouseClicked(MouseEvent var1) { + if(var1.getClickCount() == 2) { + this.zoomLevel = 3 - this.zoomLevel; + this.repaint(); + } + + } + + public void mouseEntered(MouseEvent var1) { + } + + public void mouseExited(MouseEvent var1) { + } + + public void mousePressed(MouseEvent var1) { + int var2 = var1.getX() / this.zoomLevel; + int var3 = var1.getY() / this.zoomLevel; + this.xPosition = var2; + this.yPosition = var3; + } + + public void mouseReleased(MouseEvent var1) { + } + + public void keyPressed(KeyEvent var1) { + if(var1.getKeyCode() == 48) { + this.setBrightness(11); + } + + if(var1.getKeyCode() == 49) { + this.setBrightness(10); + } + + if(var1.getKeyCode() == 50) { + this.setBrightness(9); + } + + if(var1.getKeyCode() == 51) { + this.setBrightness(7); + } + + if(var1.getKeyCode() == 52) { + this.setBrightness(6); + } + + if(var1.getKeyCode() == 53) { + this.setBrightness(5); + } + + if(var1.getKeyCode() == 54) { + this.setBrightness(3); + } + + if(var1.getKeyCode() == 55) { + this.setBrightness(2); + } + + if(var1.getKeyCode() == 56) { + this.setBrightness(1); + } + + if(var1.getKeyCode() == 57) { + this.setBrightness(0); + } + + if(var1.getKeyCode() == 112) { + this.loadWorld("World1"); + } + + if(var1.getKeyCode() == 113) { + this.loadWorld("World2"); + } + + if(var1.getKeyCode() == 114) { + this.loadWorld("World3"); + } + + if(var1.getKeyCode() == 115) { + this.loadWorld("World4"); + } + + if(var1.getKeyCode() == 116) { + this.loadWorld("World5"); + } + + if(var1.getKeyCode() == 32) { + this.translateX = this.translateY = 0; + } + + if(var1.getKeyCode() == 27) { + this.displayHelpText = !this.displayHelpText; + } + + this.repaint(); + } + + public void keyReleased(KeyEvent var1) { + } + + public void keyTyped(KeyEvent var1) { + } + + static boolean a(CanvasIsomPreview var0) { + return var0.running; + } +} 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..796b0a3 --- /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/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/ChatLine.java b/src/net/minecraft/src/ChatLine.java new file mode 100644 index 0000000..98635da --- /dev/null +++ b/src/net/minecraft/src/ChatLine.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class ChatLine { + public String message; + public int updateCounter; + + public ChatLine(String var1) { + this.message = var1; + this.updateCounter = 0; + } +} diff --git a/src/net/minecraft/src/Chunk.java b/src/net/minecraft/src/Chunk.java new file mode 100644 index 0000000..56f534b --- /dev/null +++ b/src/net/minecraft/src/Chunk.java @@ -0,0 +1,473 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class Chunk { + public static boolean isLit; + public byte[] blocks; + public boolean isChunkLoaded; + public World worldObj; + public NibbleArray data; + public NibbleArray skylightMap; + public NibbleArray blocklightMap; + public byte[] heightMap; + public int height; + public final int xPosition; + public final int zPosition; + public Map chunkTileEntityMap; + public List[] entities; + public boolean isTerrainPopulated; + public boolean isModified; + public boolean neverSave; + public boolean isChunkRendered; + public boolean hasEntities; + public long lastSaveTime; + + public Chunk(World var1, int var2, int var3) { + this.chunkTileEntityMap = new HashMap(); + this.entities = new List[8]; + this.isTerrainPopulated = false; + this.isModified = false; + this.isChunkRendered = false; + this.hasEntities = false; + this.lastSaveTime = 0L; + this.worldObj = var1; + this.xPosition = var2; + this.zPosition = var3; + this.heightMap = new byte[256]; + + for(int var4 = 0; var4 < this.entities.length; ++var4) { + this.entities[var4] = new ArrayList(); + } + + } + + public Chunk(World var1, byte[] var2, int var3, int var4) { + this(var1, var3, var4); + this.blocks = var2; + this.data = new NibbleArray(var2.length); + this.skylightMap = new NibbleArray(var2.length); + this.blocklightMap = new NibbleArray(var2.length); + } + + 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] & 255; + } + + public void doNothing() { + } + + public void generateHeightMap() { + int var1 = 127; + + int var2; + int var3; + for(var2 = 0; var2 < 16; ++var2) { + for(var3 = 0; var3 < 16; ++var3) { + this.heightMap[var3 << 4 | var2] = -128; + this.relightBlock(var2, 127, var3); + if((this.heightMap[var3 << 4 | var2] & 255) < var1) { + var1 = this.heightMap[var3 << 4 | var2] & 255; + } + } + } + + this.height = var1; + + for(var2 = 0; var2 < 16; ++var2) { + for(var3 = 0; var3 < 16; ++var3) { + this.updateSkylight_do(var2, var3); + } + } + + this.isModified = true; + } + + private void updateSkylight_do(int var1, int var2) { + int var3 = this.getHeightValue(var1, var2); + int var4 = this.xPosition * 16 + var1; + int var5 = this.zPosition * 16 + var2; + this.checkSkylightNeighborHeight(var4 - 1, var5, var3); + this.checkSkylightNeighborHeight(var4 + 1, var5, var3); + this.checkSkylightNeighborHeight(var4, var5 - 1, var3); + this.checkSkylightNeighborHeight(var4, var5 + 1, var3); + } + + private void checkSkylightNeighborHeight(int var1, int var2, int var3) { + int var4 = this.worldObj.getHeightValue(var1, var2); + if(var4 > var3) { + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Sky, var1, var3, var2, var1, var4, var2); + } else if(var4 < var3) { + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Sky, var1, var4, var2, var1, var3, 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 && Block.lightOpacity[this.getBlockID(var1, var5 - 1, var3)] == 0) { + --var5; + } + + if(var5 != var4) { + this.worldObj.markBlockAsNeedsUpdate(var1, var3, var5, var4); + this.heightMap[var3 << 4 | var1] = (byte)var5; + int var6; + int var7; + int var8; + if(var5 < this.height) { + this.height = var5; + } else { + var6 = 127; + + for(var7 = 0; var7 < 16; ++var7) { + for(var8 = 0; var8 < 16; ++var8) { + if((this.heightMap[var8 << 4 | var7] & 255) < var6) { + var6 = this.heightMap[var8 << 4 | var7] & 255; + } + } + } + + this.height = var6; + } + + var6 = this.xPosition * 16 + var1; + var7 = this.zPosition * 16 + var3; + if(var5 < var4) { + for(var8 = var5; var8 < var4; ++var8) { + this.skylightMap.set(var1, var8, var3, 15); + } + } else { + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Sky, var6, var4, var7, var6, var5, var7); + + for(var8 = var4; var8 < var5; ++var8) { + this.skylightMap.set(var1, var8, var3, 0); + } + } + + var8 = 15; + + int var9; + for(var9 = var5; var5 > 0 && var8 > 0; this.skylightMap.set(var1, var5, var3, var8)) { + --var5; + int var10 = Block.lightOpacity[this.getBlockID(var1, var5, var3)]; + if(var10 == 0) { + var10 = 1; + } + + var8 -= var10; + if(var8 < 0) { + var8 = 0; + } + } + + while(var5 > 0 && Block.lightOpacity[this.getBlockID(var1, var5 - 1, var3)] == 0) { + --var5; + } + + if(var5 != var9) { + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Sky, var6 - 1, var5, var7 - 1, var6 + 1, var9, var7 + 1); + } + + this.isModified = true; + } + } + + public int getBlockID(int var1, int var2, int var3) { + return this.blocks[var1 << 11 | var3 << 7 | var2]; + } + + public boolean setBlockIDWithMetadata(int var1, int var2, int var3, int var4, int var5) { + byte var6 = (byte)var4; + int var7 = this.heightMap[var3 << 4 | var1] & 255; + int var8 = this.blocks[var1 << 11 | var3 << 7 | var2] & 255; + if(var8 == var4) { + return false; + } else { + int var9 = this.xPosition * 16 + var1; + int var10 = this.zPosition * 16 + var3; + this.blocks[var1 << 11 | var3 << 7 | var2] = var6; + if(var8 != 0) { + Block.blocksList[var8].onBlockRemoval(this.worldObj, var9, var2, var10); + } + + this.data.set(var1, var2, var3, var5); + if(Block.lightOpacity[var6] != 0) { + if(var2 >= var7) { + this.relightBlock(var1, var2 + 1, var3); + } + } else if(var2 == var7 - 1) { + this.relightBlock(var1, var2, var3); + } + + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Sky, var9, var2, var10, var9, var2, var10); + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Block, var9, var2, var10, var9, var2, var10); + this.updateSkylight_do(var1, var3); + if(var4 != 0) { + Block.blocksList[var4].onBlockAdded(this.worldObj, var9, var2, var10); + } + + this.isModified = true; + return true; + } + } + + public boolean setBlockID(int var1, int var2, int var3, int var4) { + byte var5 = (byte)var4; + int var6 = this.heightMap[var3 << 4 | var1] & 255; + int var7 = this.blocks[var1 << 11 | var3 << 7 | var2] & 255; + if(var7 == var4) { + return false; + } else { + int var8 = this.xPosition * 16 + var1; + int var9 = this.zPosition * 16 + var3; + this.blocks[var1 << 11 | var3 << 7 | var2] = var5; + if(var7 != 0) { + Block.blocksList[var7].onBlockRemoval(this.worldObj, var8, var2, var9); + } + + this.data.set(var1, var2, var3, 0); + if(Block.lightOpacity[var5] != 0) { + if(var2 >= var6) { + this.relightBlock(var1, var2 + 1, var3); + } + } else if(var2 == var6 - 1) { + this.relightBlock(var1, var2, var3); + } + + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Sky, var8, var2, var9, var8, var2, var9); + this.worldObj.scheduleLightingUpdate(EnumSkyBlock.Block, var8, var2, var9, var8, var2, var9); + this.updateSkylight_do(var1, var3); + if(var4 != 0) { + Block.blocksList[var4].onBlockAdded(this.worldObj, var8, var2, var9); + } + + this.isModified = true; + return true; + } + } + + public int getBlockMetadata(int var1, int var2, int var3) { + return this.data.get(var1, var2, var3); + } + + public void setBlockMetadata(int var1, int var2, int var3, int var4) { + this.isModified = true; + this.data.set(var1, var2, var3, var4); + } + + public int getSavedLightValue(EnumSkyBlock var1, int var2, int var3, int var4) { + return var1 == EnumSkyBlock.Sky ? this.skylightMap.get(var2, var3, var4) : (var1 == EnumSkyBlock.Block ? this.blocklightMap.get(var2, var3, var4) : 0); + } + + public void setLightValue(EnumSkyBlock var1, int var2, int var3, int var4, int var5) { + this.isModified = true; + if(var1 == EnumSkyBlock.Sky) { + this.skylightMap.set(var2, var3, var4, var5); + } else { + if(var1 != EnumSkyBlock.Block) { + return; + } + + this.blocklightMap.set(var2, var3, var4, var5); + } + + } + + public int getBlockLightValue(int var1, int var2, int var3, int var4) { + int var5 = this.skylightMap.get(var1, var2, var3); + if(var5 > 0) { + isLit = true; + } + + var5 -= var4; + int var6 = this.blocklightMap.get(var1, var2, var3); + if(var6 > var5) { + var5 = var6; + } + + return var5; + } + + 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) { + System.out.println("Wrong location! " + var1); + } + + int var4 = MathHelper.floor_double(var1.posY / 16.0D); + if(var4 < 0) { + var4 = 0; + } + + if(var4 >= this.entities.length) { + var4 = this.entities.length - 1; + } + + this.entities[var4].add(var1); + } + + public void removeEntity(Entity var1) { + this.removeEntityAtIndex(var1, MathHelper.floor_double(var1.posY / 16.0D)); + } + + public void removeEntityAtIndex(Entity var1, int var2) { + if(var2 < 0) { + var2 = 0; + } + + if(var2 >= this.entities.length) { + var2 = this.entities.length - 1; + } + + if(!this.entities[var2].contains(var1)) { + System.out.println("There\'s no such entity to remove: " + var1); + } + + this.entities[var2].remove(var1); + } + + public boolean canBlockSeeTheSky(int var1, int var2, int var3) { + return var2 >= (this.heightMap[var3 << 4 | var1] & 255); + } + + public TileEntity getChunkBlockTileEntity(int var1, int var2, int var3) { + int var4 = var1 + var2 * 1024 + var3 * 1024 * 1024; + TileEntity var5 = (TileEntity)this.chunkTileEntityMap.get(Integer.valueOf(var4)); + if(var5 == null) { + int var6 = this.getBlockID(var1, var2, var3); + BlockContainer var7 = (BlockContainer)Block.blocksList[var6]; + var7.onBlockAdded(this.worldObj, this.xPosition * 16 + var1, var2, this.zPosition * 16 + var3); + var5 = (TileEntity)this.chunkTileEntityMap.get(Integer.valueOf(var4)); + } + + 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); + } + + public void setChunkBlockTileEntity(int var1, int var2, int var3, TileEntity var4) { + int var5 = var1 + var2 * 1024 + var3 * 1024 * 1024; + var4.worldObj = 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 BlockContainer) { + if(this.isChunkLoaded) { + if(this.chunkTileEntityMap.get(Integer.valueOf(var5)) != null) { + this.worldObj.loadedTileEntityList.remove(this.chunkTileEntityMap.get(Integer.valueOf(var5))); + } + + this.worldObj.loadedTileEntityList.add(var4); + } + + this.chunkTileEntityMap.put(Integer.valueOf(var5), var4); + } else { + System.out.println("Attempted to place a tile entity where there was no entity tile!"); + } + } + + public void removeChunkBlockTileEntity(int var1, int var2, int var3) { + int var4 = var1 + var2 * 1024 + var3 * 1024 * 1024; + if(this.isChunkLoaded) { + this.worldObj.loadedTileEntityList.remove(this.chunkTileEntityMap.remove(Integer.valueOf(var4))); + } + + } + + public void onChunkLoad() { + this.isChunkLoaded = true; + this.worldObj.loadedTileEntityList.addAll(this.chunkTileEntityMap.values()); + + for(int var1 = 0; var1 < this.entities.length; ++var1) { + this.worldObj.addLoadedEntities(this.entities[var1]); + } + + } + + public void onChunkUnload() { + this.isChunkLoaded = false; + this.worldObj.loadedTileEntityList.removeAll(this.chunkTileEntityMap.values()); + + for(int var1 = 0; var1 < this.entities.length; ++var1) { + this.worldObj.unloadEntities(this.entities[var1]); + } + + } + + public void setChunkModified() { + this.isModified = true; + } + + public void getEntitiesWithinAABBForEntity(Entity var1, AxisAlignedBB var2, List var3) { + int var4 = MathHelper.floor_double((var2.minY - 2.0D) / 16.0D); + int var5 = MathHelper.floor_double((var2.maxY + 2.0D) / 16.0D); + if(var4 < 0) { + var4 = 0; + } + + if(var5 >= this.entities.length) { + var5 = this.entities.length - 1; + } + + for(int var6 = var4; var6 <= var5; ++var6) { + List var7 = this.entities[var6]; + + for(int var8 = 0; var8 < var7.size(); ++var8) { + Entity var9 = (Entity)var7.get(var8); + if(var9 != var1 && var9.boundingBox.intersectsWith(var2)) { + var3.add(var9); + } + } + } + + } + + public void getEntitiesOfTypeWithinAAAB(Class var1, AxisAlignedBB var2, List var3) { + int var4 = MathHelper.floor_double((var2.minY - 2.0D) / 16.0D); + int var5 = MathHelper.floor_double((var2.maxY + 2.0D) / 16.0D); + if(var4 < 0) { + var4 = 0; + } + + if(var5 >= this.entities.length) { + var5 = this.entities.length - 1; + } + + for(int var6 = var4; var6 <= var5; ++var6) { + List var7 = this.entities[var6]; + + for(int var8 = 0; var8 < var7.size(); ++var8) { + Entity var9 = (Entity)var7.get(var8); + if(var1.isAssignableFrom(var9.getClass()) && var9.boundingBox.intersectsWith(var2)) { + var3.add(var9); + } + } + } + + } + + public boolean needsSaving(boolean var1) { + return this.neverSave ? false : (this.hasEntities && this.worldObj.worldTime != this.lastSaveTime ? true : this.isModified); + } +} diff --git a/src/net/minecraft/src/ChunkCache.java b/src/net/minecraft/src/ChunkCache.java new file mode 100644 index 0000000..8856be6 --- /dev/null +++ b/src/net/minecraft/src/ChunkCache.java @@ -0,0 +1,123 @@ +package net.minecraft.src; + +public class ChunkCache implements IBlockAccess { + private int chunkX; + private int chunkZ; + private Chunk[][] chunkArray; + private World worldObj; + + public ChunkCache(World var1, int var2, int var3, int var4, int var5, int var6, int var7) { + this.worldObj = var1; + this.chunkX = var2 >> 4; + this.chunkZ = var4 >> 4; + int var8 = var5 >> 4; + int var9 = var7 >> 4; + this.chunkArray = new Chunk[var8 - this.chunkX + 1][var9 - this.chunkZ + 1]; + + for(int var10 = this.chunkX; var10 <= var8; ++var10) { + for(int var11 = this.chunkZ; var11 <= var9; ++var11) { + this.chunkArray[var10 - this.chunkX][var11 - this.chunkZ] = var1.getChunkFromChunkCoords(var10, var11); + } + } + + } + + public int getBlockId(int var1, int var2, int var3) { + if(var2 < 0) { + return 0; + } else if(var2 >= 128) { + return 0; + } else { + int var4 = (var1 >> 4) - this.chunkX; + int var5 = (var3 >> 4) - this.chunkZ; + return this.chunkArray[var4][var5].getBlockID(var1 & 15, var2, var3 & 15); + } + } + + 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) { + return World.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 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + int var5; + int var6; + if(var4) { + var5 = this.getBlockId(var1, var2, var3); + if(var5 == Block.stairSingle.blockID || var5 == Block.tilledField.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 >= 128) { + 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 >= 128) { + 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 boolean isBlockNormalCube(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return var4 == null ? false : var4.isOpaqueCube(); + } +} diff --git a/src/net/minecraft/src/ChunkLoader.java b/src/net/minecraft/src/ChunkLoader.java new file mode 100644 index 0000000..4d6af16 --- /dev/null +++ b/src/net/minecraft/src/ChunkLoader.java @@ -0,0 +1,186 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.util.Iterator; + +public class ChunkLoader implements IChunkLoader { + private File saveDir; + private boolean createIfNecessary; + + public ChunkLoader(File var1, boolean var2) { + this.saveDir = var1; + this.createIfNecessary = var2; + } + + private File chunkFileForXZ(int var1, int var2) { + String var3 = "c." + Integer.toString(var1, 36) + "." + Integer.toString(var2, 36) + ".dat"; + String var4 = Integer.toString(var1 & 63, 36); + String var5 = Integer.toString(var2 & 63, 36); + File var6 = new File(this.saveDir, var4); + if(!var6.exists()) { + if(!this.createIfNecessary) { + return null; + } + + var6.mkdir(); + } + + var6 = new File(var6, var5); + if(!var6.exists()) { + if(!this.createIfNecessary) { + return null; + } + + var6.mkdir(); + } + + var6 = new File(var6, var3); + return !var6.exists() && !this.createIfNecessary ? null : var6; + } + + public Chunk loadChunk(World var1, int var2, int var3) { + File var4 = this.chunkFileForXZ(var2, var3); + if(var4 != null && var4.exists()) { + try { + FileInputStream var5 = new FileInputStream(var4); + NBTTagCompound var6 = CompressedStreamTools.readCompressed(var5); + return loadChunkIntoWorldFromCompound(var1, var6.getCompoundTag("Level")); + } catch (Exception var7) { + var7.printStackTrace(); + } + } + + return null; + } + + public void saveChunk(World var1, Chunk var2) { + File var3 = this.chunkFileForXZ(var2.xPosition, var2.zPosition); + if(var3.exists()) { + var1.setSizeOnDisk -= var3.length(); + } + + try { + File var4 = new File(this.saveDir, "tmp_chunk.dat"); + FileOutputStream var5 = new FileOutputStream(var4); + NBTTagCompound var6 = new NBTTagCompound(); + NBTTagCompound var7 = new NBTTagCompound(); + var6.setTag("Level", var7); + this.storeChunkInCompound(var2, var1, var7); + CompressedStreamTools.writeCompressed(var6, var5); + var5.close(); + if(var3.exists()) { + var3.delete(); + } + + var4.renameTo(var3); + var1.setSizeOnDisk += var3.length(); + } catch (Exception var8) { + var8.printStackTrace(); + } + + } + + public void storeChunkInCompound(Chunk var1, World var2, NBTTagCompound var3) { + var3.setInteger("xPos", var1.xPosition); + var3.setInteger("zPos", var1.zPosition); + var3.setLong("LastUpdate", var2.worldTime); + var3.setByteArray("Blocks", var1.blocks); + var3.setByteArray("Data", var1.data.data); + var3.setByteArray("SkyLight", var1.skylightMap.data); + var3.setByteArray("BlockLight", var1.blocklightMap.data); + var3.setByteArray("HeightMap", var1.heightMap); + var3.setBoolean("TerrainPopulated", var1.isTerrainPopulated); + var1.hasEntities = false; + NBTTagList var4 = new NBTTagList(); + + Iterator var6; + NBTTagCompound var8; + for(int var5 = 0; var5 < var1.entities.length; ++var5) { + var6 = var1.entities[var5].iterator(); + + while(var6.hasNext()) { + Entity var7 = (Entity)var6.next(); + var1.hasEntities = true; + var8 = new NBTTagCompound(); + if(var7.addEntityID(var8)) { + var4.setTag(var8); + } + } + } + + var3.setTag("Entities", var4); + NBTTagList var9 = new NBTTagList(); + var6 = var1.chunkTileEntityMap.values().iterator(); + + while(var6.hasNext()) { + TileEntity var10 = (TileEntity)var6.next(); + var8 = new NBTTagCompound(); + var10.writeToNBT(var8); + var9.setTag(var8); + } + + var3.setTag("TileEntities", var9); + } + + public static Chunk loadChunkIntoWorldFromCompound(World var0, NBTTagCompound var1) { + int var2 = var1.getInteger("xPos"); + int var3 = var1.getInteger("zPos"); + Chunk var4 = new Chunk(var0, var2, var3); + var4.blocks = var1.getByteArray("Blocks"); + var4.data = new NibbleArray(var1.getByteArray("Data")); + var4.skylightMap = new NibbleArray(var1.getByteArray("SkyLight")); + var4.blocklightMap = new NibbleArray(var1.getByteArray("BlockLight")); + var4.heightMap = var1.getByteArray("HeightMap"); + var4.isTerrainPopulated = var1.getBoolean("TerrainPopulated"); + if(!var4.data.isValid()) { + var4.data = new NibbleArray(var4.blocks.length); + } + + if(var4.heightMap == null || !var4.skylightMap.isValid()) { + var4.heightMap = new byte[256]; + var4.skylightMap = new NibbleArray(var4.blocks.length); + var4.generateHeightMap(); + } + + if(!var4.blocklightMap.isValid()) { + var4.blocklightMap = new NibbleArray(var4.blocks.length); + var4.doNothing(); + } + + NBTTagList var5 = var1.getTagList("Entities"); + if(var5 != null) { + for(int var6 = 0; var6 < var5.tagCount(); ++var6) { + NBTTagCompound var7 = (NBTTagCompound)var5.tagAt(var6); + Entity var8 = EntityList.createEntityFromNBT(var7, var0); + var4.hasEntities = true; + if(var8 != null) { + var4.addEntity(var8); + } + } + } + + NBTTagList var10 = var1.getTagList("TileEntities"); + if(var10 != null) { + for(int var11 = 0; var11 < var10.tagCount(); ++var11) { + NBTTagCompound var12 = (NBTTagCompound)var10.tagAt(var11); + TileEntity var9 = TileEntity.createAndLoadEntity(var12); + if(var9 != null) { + var4.addTileEntity(var9); + } + } + } + + return var4; + } + + public void chunkTick() { + } + + public void saveExtraData() { + } + + public void saveExtraChunkData(World var1, Chunk var2) { + } +} diff --git a/src/net/minecraft/src/ChunkPosition.java b/src/net/minecraft/src/ChunkPosition.java new file mode 100644 index 0000000..8b19854 --- /dev/null +++ b/src/net/minecraft/src/ChunkPosition.java @@ -0,0 +1,26 @@ +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 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/ChunkProviderGenerate.java b/src/net/minecraft/src/ChunkProviderGenerate.java new file mode 100644 index 0000000..5a97630 --- /dev/null +++ b/src/net/minecraft/src/ChunkProviderGenerate.java @@ -0,0 +1,610 @@ +package net.minecraft.src; + +import java.util.Random; + +public class ChunkProviderGenerate implements IChunkProvider { + private Random rand; + private NoiseGeneratorOctaves noiseGen1; + private NoiseGeneratorOctaves noiseGen2; + private NoiseGeneratorOctaves noiseGen3; + private NoiseGeneratorOctaves noiseGen4; + private NoiseGeneratorOctaves noiseGen5; + private NoiseGeneratorOctaves noiseGen6; + private NoiseGeneratorOctaves noiseGen7; + private NoiseGeneratorOctaves mobSpawnerNoise; + private World worldObj; + private double[] noiseArray; + double[] noise3; + double[] noise1; + double[] noise2; + double[] noise6; + double[] noise7; + int[][] unused = new int[32][32]; + + public ChunkProviderGenerate(World var1, long var2) { + this.worldObj = var1; + 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, 4); + this.noiseGen6 = new NoiseGeneratorOctaves(this.rand, 10); + this.noiseGen7 = 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 = 64; + int var6 = var4 + 1; + byte var7 = 17; + int var8 = var4 + 1; + this.noiseArray = this.initializeNoiseField(this.noiseArray, 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.noiseArray[((var9 + 0) * var8 + var10 + 0) * var7 + var11 + 0]; + double var16 = this.noiseArray[((var9 + 0) * var8 + var10 + 1) * var7 + var11 + 0]; + double var18 = this.noiseArray[((var9 + 1) * var8 + var10 + 0) * var7 + var11 + 0]; + double var20 = this.noiseArray[((var9 + 1) * var8 + var10 + 1) * var7 + var11 + 0]; + double var22 = (this.noiseArray[((var9 + 0) * var8 + var10 + 0) * var7 + var11 + 1] - var14) * var12; + double var24 = (this.noiseArray[((var9 + 0) * var8 + var10 + 1) * var7 + var11 + 1] - var16) * var12; + double var26 = (this.noiseArray[((var9 + 1) * var8 + var10 + 0) * var7 + var11 + 1] - var18) * var12; + double var28 = (this.noiseArray[((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.waterStill.blockID; + } + + if(var46 > 0.0D) { + var51 = Block.stone.blockID; + } + + var3[var42] = (byte)var51; + var42 += var43; + var46 += var48; + } + + var33 += var37; + var35 += var39; + } + + var14 += var22; + var16 += var24; + var18 += var26; + var20 += var28; + } + } + } + } + + } + + public void replaceBlocks(int var1, int var2, byte[] var3) { + byte var4 = 64; + + for(int var5 = 0; var5 < 16; ++var5) { + for(int var6 = 0; var6 < 16; ++var6) { + double var7 = (double)(var1 * 16 + var5); + double var9 = (double)(var2 * 16 + var6); + double var11 = 1.0D / 32.0D; + boolean var13 = this.noiseGen4.a(var7 * var11, var9 * var11, 0.0D) + this.rand.nextDouble() * 0.2D > 0.0D; + boolean var14 = this.noiseGen4.a(var9 * var11, 109.0134D, var7 * var11) + this.rand.nextDouble() * 0.2D > 3.0D; + int var15 = (int)(this.noiseGen5.generateNoiseOctaves(var7 * var11 * 2.0D, var9 * var11 * 2.0D) / 3.0D + 3.0D + this.rand.nextDouble() * 0.25D); + int var16 = -1; + int var17 = Block.grass.blockID; + int var18 = Block.dirt.blockID; + int var19 = (var5 * 16 + var6) * 128 + 128; + + for(int var20 = 127; var20 >= 0; --var20) { + --var19; + if(var20 <= 0 + this.rand.nextInt(6) - 1) { + var3[var19] = (byte)Block.bedrock.blockID; + } else if(var3[var19] == 0) { + var16 = -1; + } else if(var3[var19] == Block.stone.blockID) { + if(var16 == -1) { + if(var15 <= 0) { + var17 = 0; + var18 = (byte)Block.stone.blockID; + } else if(var20 >= var4 - 4 && var20 <= var4 + 1) { + var17 = Block.grass.blockID; + var18 = Block.dirt.blockID; + if(var14) { + var17 = 0; + } + + if(var14) { + var18 = Block.gravel.blockID; + } + + if(var13) { + var17 = Block.sand.blockID; + } + + if(var13) { + var18 = Block.sand.blockID; + } + } + + if(var20 < var4 && var17 == 0) { + var17 = Block.waterStill.blockID; + } + + var16 = var15; + if(var20 >= var4 - 1) { + var3[var19] = (byte)var17; + } else { + var3[var19] = (byte)var18; + } + } else if(var16 > 0) { + --var16; + var3[var19] = (byte)var18; + } + } + } + } + } + + } + + public Chunk provideChunk(int var1, int var2) { + this.rand.setSeed((long)var1 * 341873128712L + (long)var2 * 132897987541L); + byte[] var3 = new byte[-Short.MIN_VALUE]; + Chunk var4 = new Chunk(this.worldObj, var3, var1, var2); + this.generateTerrain(var1, var2, var3); + this.replaceBlocks(var1, var2, var3); + this.generateCaves(var1, var2, var3); + var4.generateHeightMap(); + return var4; + } + + protected void generateLargeCaveNode(int var1, int var2, byte[] var3, double var4, double var6, double var8) { + this.generateCaveNode(var1, var2, var3, var4, var6, var8, 1.0F + this.rand.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + } + + protected void generateCaveNode(int var1, int var2, byte[] var3, double var4, double var6, double var8, float var10, float var11, float var12, int var13, int var14, double var15) { + double var17 = (double)(var1 * 16 + 8); + double var19 = (double)(var2 * 16 + 8); + float var21 = 0.0F; + float var22 = 0.0F; + Random var23 = new Random(this.rand.nextLong()); + if(var14 <= 0) { + byte var24 = 112; + var14 = var24 - var23.nextInt(var24 / 4); + } + + boolean var52 = false; + if(var13 == -1) { + var13 = var14 / 2; + var52 = true; + } + + int var25 = var23.nextInt(var14 / 2) + var14 / 4; + + for(boolean var26 = var23.nextInt(6) == 0; var13 < var14; ++var13) { + double var27 = 1.5D + (double)(MathHelper.sin((float)var13 * (float)Math.PI / (float)var14) * var10 * 1.0F); + double var29 = var27 * var15; + float var31 = MathHelper.cos(var12); + float var32 = MathHelper.sin(var12); + var4 += (double)(MathHelper.cos(var11) * var31); + var6 += (double)var32; + var8 += (double)(MathHelper.sin(var11) * var31); + if(var26) { + var12 *= 0.92F; + } else { + var12 *= 0.7F; + } + + var12 += var22 * 0.1F; + var11 += var21 * 0.1F; + var22 *= 0.9F; + var21 *= 12.0F / 16.0F; + var22 += (var23.nextFloat() - var23.nextFloat()) * var23.nextFloat() * 2.0F; + var21 += (var23.nextFloat() - var23.nextFloat()) * var23.nextFloat() * 4.0F; + if(!var52 && var13 == var25 && var10 > 1.0F) { + this.generateCaveNode(var1, var2, var3, var4, var6, var8, var23.nextFloat() * 0.5F + 0.5F, var11 - (float)Math.PI * 0.5F, var12 / 3.0F, var13, var14, 1.0D); + this.generateCaveNode(var1, var2, var3, var4, var6, var8, var23.nextFloat() * 0.5F + 0.5F, var11 + (float)Math.PI * 0.5F, var12 / 3.0F, var13, var14, 1.0D); + return; + } + + if(var52 || var23.nextInt(4) != 0) { + double var33 = var4 - var17; + double var35 = var8 - var19; + double var37 = (double)(var14 - var13); + double var39 = (double)(var10 + 2.0F + 16.0F); + if(var33 * var33 + var35 * var35 - var37 * var37 > var39 * var39) { + return; + } + + if(var4 >= var17 - 16.0D - var27 * 2.0D && var8 >= var19 - 16.0D - var27 * 2.0D && var4 <= var17 + 16.0D + var27 * 2.0D && var8 <= var19 + 16.0D + var27 * 2.0D) { + int var53 = MathHelper.floor_double(var4 - var27) - var1 * 16 - 1; + int var34 = MathHelper.floor_double(var4 + var27) - var1 * 16 + 1; + int var54 = MathHelper.floor_double(var6 - var29) - 1; + int var36 = MathHelper.floor_double(var6 + var29) + 1; + int var55 = MathHelper.floor_double(var8 - var27) - var2 * 16 - 1; + int var38 = MathHelper.floor_double(var8 + var27) - var2 * 16 + 1; + if(var53 < 0) { + var53 = 0; + } + + if(var34 > 16) { + var34 = 16; + } + + if(var54 < 1) { + var54 = 1; + } + + if(var36 > 120) { + var36 = 120; + } + + if(var55 < 0) { + var55 = 0; + } + + if(var38 > 16) { + var38 = 16; + } + + boolean var56 = false; + + int var40; + int var43; + for(var40 = var53; !var56 && var40 < var34; ++var40) { + for(int var41 = var55; !var56 && var41 < var38; ++var41) { + for(int var42 = var36 + 1; !var56 && var42 >= var54 - 1; --var42) { + var43 = (var40 * 16 + var41) * 128 + var42; + if(var42 >= 0 && var42 < 128) { + if(var3[var43] == Block.waterMoving.blockID || var3[var43] == Block.waterStill.blockID) { + var56 = true; + } + + if(var42 != var54 - 1 && var40 != var53 && var40 != var34 - 1 && var41 != var55 && var41 != var38 - 1) { + var42 = var54; + } + } + } + } + } + + if(!var56) { + for(var40 = var53; var40 < var34; ++var40) { + double var57 = ((double)(var40 + var1 * 16) + 0.5D - var4) / var27; + + for(var43 = var55; var43 < var38; ++var43) { + double var44 = ((double)(var43 + var2 * 16) + 0.5D - var8) / var27; + int var46 = (var40 * 16 + var43) * 128 + var36; + boolean var47 = false; + + for(int var48 = var36 - 1; var48 >= var54; --var48) { + double var49 = ((double)var48 + 0.5D - var6) / var29; + if(var49 > -0.7D && var57 * var57 + var49 * var49 + var44 * var44 < 1.0D) { + byte var51 = var3[var46]; + if(var51 == Block.grass.blockID) { + var47 = true; + } + + if(var51 == Block.stone.blockID || var51 == Block.dirt.blockID || var51 == Block.grass.blockID) { + if(var48 < 10) { + var3[var46] = (byte)Block.lavaMoving.blockID; + } else { + var3[var46] = 0; + if(var47 && var3[var46 - 1] == Block.dirt.blockID) { + var3[var46 - 1] = (byte)Block.grass.blockID; + } + } + } + } + + --var46; + } + } + } + + if(var52) { + break; + } + } + } + } + } + + } + + private void generateCaves(int var1, int var2, byte[] var3) { + byte var4 = 8; + this.rand.setSeed(this.worldObj.randomSeed); + long var5 = this.rand.nextLong() / 2L * 2L + 1L; + long var7 = this.rand.nextLong() / 2L * 2L + 1L; + + for(int var9 = var1 - var4; var9 <= var1 + var4; ++var9) { + for(int var10 = var2 - var4; var10 <= var2 + var4; ++var10) { + this.rand.setSeed((long)var9 * var5 + (long)var10 * var7 ^ this.worldObj.randomSeed); + int var11 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(40) + 1) + 1); + if(this.rand.nextInt(15) != 0) { + var11 = 0; + } + + for(int var12 = 0; var12 < var11; ++var12) { + double var13 = (double)(var9 * 16 + this.rand.nextInt(16)); + double var15 = (double)this.rand.nextInt(this.rand.nextInt(120) + 8); + double var17 = (double)(var10 * 16 + this.rand.nextInt(16)); + int var19 = 1; + if(this.rand.nextInt(4) == 0) { + this.generateLargeCaveNode(var1, var2, var3, var13, var15, var17); + var19 += this.rand.nextInt(4); + } + + for(int var20 = 0; var20 < var19; ++var20) { + float var21 = this.rand.nextFloat() * (float)Math.PI * 2.0F; + float var22 = (this.rand.nextFloat() - 0.5F) * 2.0F / 8.0F; + float var23 = this.rand.nextFloat() * 2.0F + this.rand.nextFloat(); + this.generateCaveNode(var1, var2, var3, var13, var15, var17, var23, var21, var22, 0, 0, 1.0D); + } + } + } + } + + } + + 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.noise6 = this.noiseGen6.a(this.noise6, var2, var3, var4, var5, 1, var7, 1.0D, 0.0D, 1.0D); + this.noise7 = this.noiseGen7.a(this.noise7, var2, var3, var4, var5, 1, var7, 100.0D, 0.0D, 100.0D); + this.noise3 = this.noiseGen3.a(this.noise3, var2, var3, var4, var5, var6, var7, var8 / 80.0D, var10 / 160.0D, var8 / 80.0D); + this.noise1 = this.noiseGen1.a(this.noise1, var2, var3, var4, var5, var6, var7, var8, var10, var8); + this.noise2 = this.noiseGen2.a(this.noise2, 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.noise6[var13] + 256.0D) / 512.0D; + if(var16 > 1.0D) { + var16 = 1.0D; + } + + double var18 = 0.0D; + double var20 = this.noise7[var13] / 8000.0D; + if(var20 < 0.0D) { + var20 = -var20; + } + + var20 = var20 * 3.0D - 3.0D; + if(var20 < 0.0D) { + var20 /= 2.0D; + if(var20 < -1.0D) { + var20 = -1.0D; + } + + var20 /= 1.4D; + var20 /= 2.0D; + var16 = 0.0D; + } else { + if(var20 > 1.0D) { + var20 = 1.0D; + } + + var20 /= 6.0D; + } + + var16 += 0.5D; + var20 = var20 * (double)var6 / 16.0D; + double var22 = (double)var6 / 2.0D + var20 * 4.0D; + ++var13; + + for(int var24 = 0; var24 < var6; ++var24) { + double var25 = 0.0D; + double var27 = ((double)var24 - var22) * 12.0D / var16; + if(var27 < 0.0D) { + var27 *= 4.0D; + } + + double var29 = this.noise1[var12] / 512.0D; + double var31 = this.noise2[var12] / 512.0D; + double var33 = (this.noise3[var12] / 10.0D + 1.0D) / 2.0D; + if(var33 < 0.0D) { + var25 = var29; + } else if(var33 > 1.0D) { + var25 = var31; + } else { + var25 = var29 + (var31 - var29) * var33; + } + + var25 -= var27; + double var35; + if(var24 > var6 - 4) { + var35 = (double)((float)(var24 - (var6 - 4)) / 3.0F); + var25 = var25 * (1.0D - var35) + -10.0D * var35; + } + + if((double)var24 < var18) { + var35 = (var18 - (double)var24) / 4.0D; + if(var35 < 0.0D) { + var35 = 0.0D; + } + + if(var35 > 1.0D) { + var35 = 1.0D; + } + + var25 = var25 * (1.0D - var35) + -10.0D * var35; + } + + var1[var12] = var25; + ++var12; + } + } + } + + return var1; + } + + 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; + this.rand.setSeed(this.worldObj.randomSeed); + long var6 = this.rand.nextLong() / 2L * 2L + 1L; + long var8 = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed((long)var2 * var6 + (long)var3 * var8 ^ this.worldObj.randomSeed); + double var10 = 0.25D; + + int var12; + int var13; + int var14; + int var15; + for(var12 = 0; var12 < 4; ++var12) { + var13 = var4 + this.rand.nextInt(16) + 8; + var14 = this.rand.nextInt(128); + var15 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenDungeons()).generate(this.worldObj, this.rand, var13, var14, var15); + } + + for(var12 = 0; var12 < 20; ++var12) { + var13 = var4 + this.rand.nextInt(16); + var14 = this.rand.nextInt(128); + var15 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.dirt.blockID, 32)).generate(this.worldObj, this.rand, var13, var14, var15); + } + + for(var12 = 0; var12 < 10; ++var12) { + var13 = var4 + this.rand.nextInt(16); + var14 = this.rand.nextInt(128); + var15 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.gravel.blockID, 32)).generate(this.worldObj, this.rand, var13, var14, var15); + } + + for(var12 = 0; var12 < 20; ++var12) { + var13 = var4 + this.rand.nextInt(16); + var14 = this.rand.nextInt(128); + var15 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.oreCoal.blockID, 16)).generate(this.worldObj, this.rand, var13, var14, var15); + } + + for(var12 = 0; var12 < 20; ++var12) { + var13 = var4 + this.rand.nextInt(16); + var14 = this.rand.nextInt(64); + var15 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.oreIron.blockID, 8)).generate(this.worldObj, this.rand, var13, var14, var15); + } + + if(this.rand.nextInt(1) == 0) { + var12 = var4 + this.rand.nextInt(16); + var13 = this.rand.nextInt(32); + var14 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.oreGold.blockID, 8)).generate(this.worldObj, this.rand, var12, var13, var14); + } + + if(this.rand.nextInt(4) == 0) { + var12 = var4 + this.rand.nextInt(16); + var13 = this.rand.nextInt(16); + var14 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.oreDiamond.blockID, 8)).generate(this.worldObj, this.rand, var12, var13, var14); + } + + var10 = 0.5D; + var12 = (int)((this.mobSpawnerNoise.generateNoiseOctaves((double)var4 * var10, (double)var5 * var10) / 8.0D + this.rand.nextDouble() * 4.0D + 4.0D) / 3.0D); + if(var12 < 0) { + var12 = 0; + } + + WorldGenTrees var18 = new WorldGenTrees(); + if(this.rand.nextInt(10) == 0) { + ++var12; + } + + int var16; + for(var14 = 0; var14 < var12; ++var14) { + var15 = var4 + this.rand.nextInt(16) + 8; + var16 = var5 + this.rand.nextInt(16) + 8; + var18.setScale(1.0D, 1.0D, 1.0D); + var18.generate(this.worldObj, this.rand, var15, this.worldObj.getHeightValue(var15, var16), var16); + } + + int var17; + for(var14 = 0; var14 < 2; ++var14) { + var15 = var4 + this.rand.nextInt(16) + 8; + var16 = this.rand.nextInt(128); + var17 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.plantYellow.blockID)).generate(this.worldObj, this.rand, var15, var16, var17); + } + + if(this.rand.nextInt(2) == 0) { + var14 = var4 + this.rand.nextInt(16) + 8; + var15 = this.rand.nextInt(128); + var16 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.plantRed.blockID)).generate(this.worldObj, this.rand, var14, var15, var16); + } + + if(this.rand.nextInt(4) == 0) { + var14 = var4 + this.rand.nextInt(16) + 8; + var15 = this.rand.nextInt(128); + var16 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomBrown.blockID)).generate(this.worldObj, this.rand, var14, var15, var16); + } + + if(this.rand.nextInt(8) == 0) { + var14 = var4 + this.rand.nextInt(16) + 8; + var15 = this.rand.nextInt(128); + var16 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomRed.blockID)).generate(this.worldObj, this.rand, var14, var15, var16); + } + + for(var14 = 0; var14 < 50; ++var14) { + var15 = var4 + this.rand.nextInt(16) + 8; + var16 = this.rand.nextInt(this.rand.nextInt(120) + 8); + var17 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenLiquids(Block.waterMoving.blockID)).generate(this.worldObj, this.rand, var15, var16, var17); + } + + for(var14 = 0; var14 < 20; ++var14) { + var15 = var4 + this.rand.nextInt(16) + 8; + var16 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(112) + 8) + 8); + var17 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenLiquids(Block.lavaMoving.blockID)).generate(this.worldObj, this.rand, var15, var16, var17); + } + + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + return true; + } + + public boolean unload100OldestChunks() { + return false; + } + + public boolean canSave() { + return true; + } +} diff --git a/src/net/minecraft/src/ChunkProviderIso.java b/src/net/minecraft/src/ChunkProviderIso.java new file mode 100644 index 0000000..ca7a076 --- /dev/null +++ b/src/net/minecraft/src/ChunkProviderIso.java @@ -0,0 +1,66 @@ +package net.minecraft.src; + +import java.io.IOException; + +public class ChunkProviderIso implements IChunkProvider { + private Chunk[] chunks = new Chunk[256]; + private World worldObj; + private IChunkLoader chunkLoader; + byte[] blocks = new byte[-Short.MIN_VALUE]; + + public ChunkProviderIso(World var1, IChunkLoader var2) { + this.worldObj = var1; + this.chunkLoader = var2; + } + + public boolean chunkExists(int var1, int var2) { + int var3 = var1 & 15 | (var2 & 15) * 16; + return this.chunks[var3] != null && this.chunks[var3].isAtLocation(var1, var2); + } + + public Chunk provideChunk(int var1, int var2) { + int var3 = var1 & 15 | (var2 & 15) * 16; + + try { + if(!this.chunkExists(var1, var2)) { + Chunk var4 = this.getChunkAt(var1, var2); + if(var4 == null) { + var4 = new Chunk(this.worldObj, this.blocks, var1, var2); + var4.isChunkRendered = true; + var4.neverSave = true; + } + + this.chunks[var3] = var4; + } + + return this.chunks[var3]; + } catch (Exception var5) { + var5.printStackTrace(); + return null; + } + } + + private synchronized Chunk getChunkAt(int var1, int var2) { + try { + return this.chunkLoader.loadChunk(this.worldObj, var1, var2); + } catch (IOException var4) { + var4.printStackTrace(); + return null; + } + } + + public void populate(IChunkProvider var1, int var2, int var3) { + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + return true; + } + + public boolean unload100OldestChunks() { + return false; + } + + public boolean canSave() { + return false; + } +} diff --git a/src/net/minecraft/src/ChunkProviderLoadOrGenerate.java b/src/net/minecraft/src/ChunkProviderLoadOrGenerate.java new file mode 100644 index 0000000..b4aff3d --- /dev/null +++ b/src/net/minecraft/src/ChunkProviderLoadOrGenerate.java @@ -0,0 +1,203 @@ +package net.minecraft.src; + +import java.io.IOException; + +public class ChunkProviderLoadOrGenerate implements IChunkProvider { + private Chunk blankChunk; + private IChunkProvider chunkProvider; + private IChunkLoader chunkLoader; + private Chunk[] chunks = new Chunk[1024]; + private World worldObj; + int lastQueriedChunkXPos = -999999999; + int lastQueriedChunkZPos = -999999999; + private Chunk lastQueriedChunk; + + public ChunkProviderLoadOrGenerate(World var1, IChunkLoader var2, IChunkProvider var3) { + this.blankChunk = new Chunk(var1, new byte[-Short.MIN_VALUE], 0, 0); + this.blankChunk.isChunkRendered = true; + this.blankChunk.neverSave = true; + this.worldObj = var1; + this.chunkLoader = var2; + this.chunkProvider = var3; + } + + public boolean chunkExists(int var1, int var2) { + if(var1 == this.lastQueriedChunkXPos && var2 == this.lastQueriedChunkZPos && this.lastQueriedChunk != null) { + return true; + } else { + int var3 = var1 & 31; + int var4 = var2 & 31; + int var5 = var3 + var4 * 32; + return this.chunks[var5] != null && (this.chunks[var5] == this.blankChunk || this.chunks[var5].isAtLocation(var1, var2)); + } + } + + public Chunk provideChunk(int var1, int var2) { + if(var1 == this.lastQueriedChunkXPos && var2 == this.lastQueriedChunkZPos && this.lastQueriedChunk != null) { + return this.lastQueriedChunk; + } else { + int var3 = var1 & 31; + int var4 = var2 & 31; + int var5 = var3 + var4 * 32; + if(!this.chunkExists(var1, var2)) { + BlockSand.fallInstantly = true; + if(this.chunks[var5] != null) { + this.chunks[var5].onChunkUnload(); + this.saveChunk(this.chunks[var5]); + this.saveExtraChunkData(this.chunks[var5]); + } + + Chunk var6 = this.getChunkAt(var1, var2); + if(var6 == null) { + if(this.chunkProvider == null) { + var6 = this.blankChunk; + } else { + var6 = this.chunkProvider.provideChunk(var1, var2); + } + } + + this.chunks[var5] = var6; + if(this.chunks[var5] != null) { + this.chunks[var5].onChunkLoad(); + } + + if(!this.chunks[var5].isTerrainPopulated && this.chunkExists(var1 + 1, var2 + 1) && this.chunkExists(var1, var2 + 1) && this.chunkExists(var1 + 1, var2)) { + this.populate(this, var1, var2); + } + + if(this.chunkExists(var1 - 1, var2) && !this.provideChunk(var1 - 1, var2).isTerrainPopulated && this.chunkExists(var1 - 1, var2 + 1) && this.chunkExists(var1, var2 + 1) && this.chunkExists(var1 - 1, var2)) { + this.populate(this, var1 - 1, var2); + } + + if(this.chunkExists(var1, var2 - 1) && !this.provideChunk(var1, var2 - 1).isTerrainPopulated && this.chunkExists(var1 + 1, var2 - 1) && this.chunkExists(var1, var2 - 1) && this.chunkExists(var1 + 1, var2)) { + this.populate(this, var1, var2 - 1); + } + + if(this.chunkExists(var1 - 1, var2 - 1) && !this.provideChunk(var1 - 1, var2 - 1).isTerrainPopulated && this.chunkExists(var1 - 1, var2 - 1) && this.chunkExists(var1, var2 - 1) && this.chunkExists(var1 - 1, var2)) { + this.populate(this, var1 - 1, var2 - 1); + } + + BlockSand.fallInstantly = false; + } + + this.lastQueriedChunkXPos = var1; + this.lastQueriedChunkZPos = var2; + this.lastQueriedChunk = this.chunks[var5]; + return this.chunks[var5]; + } + } + + private Chunk getChunkAt(int var1, int var2) { + if(this.chunkLoader == null) { + return null; + } else { + try { + Chunk var3 = this.chunkLoader.loadChunk(this.worldObj, var1, var2); + if(var3 != null) { + var3.lastSaveTime = this.worldObj.worldTime; + } + + return var3; + } catch (Exception var4) { + var4.printStackTrace(); + return null; + } + } + } + + private void saveExtraChunkData(Chunk var1) { + if(this.chunkLoader != null) { + try { + this.chunkLoader.saveExtraChunkData(this.worldObj, var1); + } catch (Exception var3) { + var3.printStackTrace(); + } + + } + } + + private void saveChunk(Chunk var1) { + if(this.chunkLoader != null) { + try { + var1.lastSaveTime = this.worldObj.worldTime; + this.chunkLoader.saveChunk(this.worldObj, var1); + } catch (IOException var3) { + var3.printStackTrace(); + } + + } + } + + public void populate(IChunkProvider var1, int var2, int var3) { + Chunk var4 = this.provideChunk(var2, var3); + if(!var4.isTerrainPopulated) { + var4.isTerrainPopulated = true; + if(this.chunkProvider != null) { + this.chunkProvider.populate(var1, var2, var3); + var4.setChunkModified(); + } + } + + } + + public boolean saveChunks(boolean var1, IProgressUpdate var2) { + int var3 = 0; + int var4 = 0; + int var5; + if(var2 != null) { + for(var5 = 0; var5 < this.chunks.length; ++var5) { + if(this.chunks[var5] != null && this.chunks[var5].needsSaving(var1)) { + ++var4; + } + } + } + + var5 = 0; + + for(int var6 = 0; var6 < this.chunks.length; ++var6) { + if(this.chunks[var6] != null) { + if(var1 && !this.chunks[var6].neverSave) { + this.saveExtraChunkData(this.chunks[var6]); + } + + if(this.chunks[var6].needsSaving(var1)) { + this.saveChunk(this.chunks[var6]); + this.chunks[var6].isModified = false; + ++var3; + if(var3 == 2 && !var1) { + return false; + } + + if(var2 != null) { + ++var5; + if(var5 % 10 == 0) { + var2.setLoadingProgress(var5 * 100 / var4); + } + } + } + } + } + + if(var1) { + if(this.chunkLoader == null) { + return true; + } + + this.chunkLoader.saveExtraData(); + } + + return true; + } + + public boolean unload100OldestChunks() { + if(this.chunkLoader != null) { + this.chunkLoader.chunkTick(); + } + + return this.chunkProvider.unload100OldestChunks(); + } + + public boolean canSave() { + return true; + } +} 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/ClippingHelperImplementation.java b/src/net/minecraft/src/ClippingHelperImplementation.java new file mode 100644 index 0000000..8bf16a5 --- /dev/null +++ b/src/net/minecraft/src/ClippingHelperImplementation.java @@ -0,0 +1,82 @@ +package net.minecraft.src; + +import java.nio.FloatBuffer; +import org.lwjgl.opengl.GL11; + +public class ClippingHelperImplementation extends ClippingHelper { + private static ClippingHelperImplementation instance = new ClippingHelperImplementation(); + private FloatBuffer projectionMatrixBuffer = GLAllocation.createFloatBuffer(16); + private FloatBuffer modelviewMatrixBuffer = GLAllocation.createFloatBuffer(16); + private FloatBuffer floatBuffer = GLAllocation.createFloatBuffer(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.floatBuffer.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/CompressedStreamTools.java b/src/net/minecraft/src/CompressedStreamTools.java new file mode 100644 index 0000000..025017f --- /dev/null +++ b/src/net/minecraft/src/CompressedStreamTools.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; +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 GZIPInputStream(var0)); + + NBTTagCompound var2; + try { + var2 = read(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, var2); + } finally { + var2.close(); + } + + } + + 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/CraftingManager.java b/src/net/minecraft/src/CraftingManager.java new file mode 100644 index 0000000..21ff2e3 --- /dev/null +++ b/src/net/minecraft/src/CraftingManager.java @@ -0,0 +1,107 @@ +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()).addRecipe(this); + (new RecipesIngots()).addRecipes(this); + (new RecipesFood()).addRecipes(this); + (new RecipesCrafting()).addRecipes(this); + (new RecipesArmor()).addRecipes(this); + 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.stairSingle, 3), new Object[]{"###", Character.valueOf('#'), Block.cobblestone}); + this.addRecipe(new ItemStack(Block.ladder, 1), new Object[]{"# #", "###", "# #", Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Item.door, 1), new Object[]{"##", "##", "##", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Item.sign, 1), new Object[]{"###", "###", " X ", Character.valueOf('#'), Block.planks, Character.valueOf('X'), Item.stick}); + this.addRecipe(new ItemStack(Block.planks, 4), new Object[]{"#", Character.valueOf('#'), Block.wood}); + this.addRecipe(new ItemStack(Item.stick, 4), new Object[]{"#", "#", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Block.torch, 4), new Object[]{"X", "#", Character.valueOf('X'), Item.coal, Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Item.bowlEmpty, 4), new Object[]{"# #", " # ", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Block.minecartTrack, 16), new Object[]{"X X", "X#X", "X X", Character.valueOf('X'), Item.ingotIron, Character.valueOf('#'), Item.stick}); + this.addRecipe(new ItemStack(Item.minecart, 1), new Object[]{"# #", "###", Character.valueOf('#'), Item.ingotIron}); + this.addRecipe(new ItemStack(Item.bucketEmpty, 1), new Object[]{"# #", " # ", Character.valueOf('#'), Item.ingotIron}); + this.addRecipe(new ItemStack(Item.striker, 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.stairCompactWood, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), Block.planks}); + this.addRecipe(new ItemStack(Block.stairCompactStone, 4), new Object[]{"# ", "## ", "###", Character.valueOf('#'), Block.cobblestone}); + this.addRecipe(new ItemStack(Item.painting, 1), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Item.stick, Character.valueOf('X'), Block.cloth}); + this.addRecipe(new ItemStack(Item.appleGold, 1), new Object[]{"###", "#X#", "###", Character.valueOf('#'), Block.blockGold, Character.valueOf('X'), Item.appleRed}); + Collections.sort(this.recipes, new RecipeSorter(this)); + System.out.println(this.recipes.size() + " recipes"); + } + + void 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; + int var15; + for(var12 = new HashMap(); var4 < var2.length; var4 += 2) { + Character var13 = (Character)var2[var4]; + var15 = 0; + if(var2[var4 + 1] instanceof Item) { + var15 = ((Item)var2[var4 + 1]).shiftedIndex; + } else if(var2[var4 + 1] instanceof Block) { + var15 = ((Block)var2[var4 + 1]).blockID; + } + + var12.put(var13, Integer.valueOf(var15)); + } + + int[] var14 = new int[var5 * var6]; + + for(var15 = 0; var15 < var5 * var6; ++var15) { + char var10 = var3.charAt(var15); + if(var12.containsKey(Character.valueOf(var10))) { + var14[var15] = ((Integer)var12.get(Character.valueOf(var10))).intValue(); + } else { + var14[var15] = -1; + } + } + + this.recipes.add(new CraftingRecipe(var5, var6, var14, var1)); + } + + public ItemStack findMatchingRecipe(int[] var1) { + for(int var2 = 0; var2 < this.recipes.size(); ++var2) { + CraftingRecipe var3 = (CraftingRecipe)this.recipes.get(var2); + if(var3.matchRecipe(var1)) { + return var3.createResult(var1); + } + } + + return null; + } +} diff --git a/src/net/minecraft/src/CraftingRecipe.java b/src/net/minecraft/src/CraftingRecipe.java new file mode 100644 index 0000000..37b74c6 --- /dev/null +++ b/src/net/minecraft/src/CraftingRecipe.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +public class CraftingRecipe { + private int width; + private int height; + private int[] ingredientMap; + private ItemStack resultStack; + public final int resultId; + + public CraftingRecipe(int var1, int var2, int[] var3, ItemStack var4) { + this.resultId = var4.itemID; + this.width = var1; + this.height = var2; + this.ingredientMap = var3; + this.resultStack = var4; + } + + public boolean matchRecipe(int[] var1) { + for(int var2 = 0; var2 <= 3 - this.width; ++var2) { + for(int var3 = 0; var3 <= 3 - this.height; ++var3) { + if(this.checkMatch(var1, var2, var3, true)) { + return true; + } + + if(this.checkMatch(var1, var2, var3, false)) { + return true; + } + } + } + + return false; + } + + private boolean checkMatch(int[] 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; + int var9 = -1; + if(var7 >= 0 && var8 >= 0 && var7 < this.width && var8 < this.height) { + if(var4) { + var9 = this.ingredientMap[this.width - var7 - 1 + var8 * this.width]; + } else { + var9 = this.ingredientMap[var7 + var8 * this.width]; + } + } + + if(var1[var5 + var6 * 3] != var9) { + return false; + } + } + } + + return true; + } + + public ItemStack createResult(int[] var1) { + return new ItemStack(this.resultStack.itemID, this.resultStack.stackSize); + } + + public int getRecipeSize() { + return this.width * this.height; + } +} diff --git a/src/net/minecraft/src/EffectRenderer.java b/src/net/minecraft/src/EffectRenderer.java new file mode 100644 index 0000000..8b30d9b --- /dev/null +++ b/src/net/minecraft/src/EffectRenderer.java @@ -0,0 +1,162 @@ +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[3]; + 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 < 3; ++var3) { + this.fxLayers[var3] = new ArrayList(); + } + + } + + public void addEffect(EntityFX var1) { + int var2 = var1.getFXLayer(); + this.fxLayers[var2].add(var1); + } + + public void updateEffects() { + for(int var1 = 0; var1 < 3; ++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 = MathHelper.cos(var1.rotationYaw * (float)Math.PI / 180.0F); + float var4 = MathHelper.sin(var1.rotationYaw * (float)Math.PI / 180.0F); + float var5 = -var4 * MathHelper.sin(var1.rotationPitch * (float)Math.PI / 180.0F); + float var6 = var3 * MathHelper.sin(var1.rotationPitch * (float)Math.PI / 180.0F); + float var7 = MathHelper.cos(var1.rotationPitch * (float)Math.PI / 180.0F); + 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 < 2; ++var8) { + if(this.fxLayers[var8].size() != 0) { + int var9 = 0; + if(var8 == 0) { + var9 = this.renderer.getTexture("/particles.png"); + } + + if(var8 == 1) { + var9 = this.renderer.getTexture("/terrain.png"); + } + + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var9); + Tessellator var10 = Tessellator.instance; + var10.startDrawingQuads(); + + for(int var11 = 0; var11 < this.fxLayers[var8].size(); ++var11) { + EntityFX var12 = (EntityFX)this.fxLayers[var8].get(var11); + var12.renderParticle(var10, var2, var3, var7, var4, var5, var6); + } + + var10.draw(); + } + } + + } + + public void renderLitParticles(Entity var1, float var2) { + byte var3 = 2; + if(this.fxLayers[var3].size() != 0) { + Tessellator var4 = Tessellator.instance; + + for(int var5 = 0; var5 < this.fxLayers[var3].size(); ++var5) { + EntityFX var6 = (EntityFX)this.fxLayers[var3].get(var5); + var6.renderParticle(var4, var2, 0.0F, 0.0F, 0.0F, 0.0F, 0.0F); + } + + } + } + + public void clearEffects(World var1) { + this.worldObj = var1; + + for(int var2 = 0; var2 < 3; ++var2) { + this.fxLayers[var2].clear(); + } + + } + + public void addBlockDestroyEffects(int var1, int var2, int var3) { + int var4 = this.worldObj.getBlockId(var1, var2, var3); + if(var4 != 0) { + Block var5 = Block.blocksList[var4]; + byte var6 = 4; + + for(int var7 = 0; var7 < var6; ++var7) { + for(int var8 = 0; var8 < var6; ++var8) { + for(int var9 = 0; var9 < var6; ++var9) { + double var10 = (double)var1 + ((double)var7 + 0.5D) / (double)var6; + double var12 = (double)var2 + ((double)var8 + 0.5D) / (double)var6; + double var14 = (double)var3 + ((double)var9 + 0.5D) / (double)var6; + this.addEffect(new EntityDiggingFX(this.worldObj, var10, var12, var14, var10 - (double)var1 - 0.5D, var12 - (double)var2 - 0.5D, var14 - (double)var3 - 0.5D, var5)); + } + } + } + + } + } + + 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.maxX - var6.minX - (double)(var7 * 2.0F)) + (double)var7 + var6.minX; + double var10 = (double)var2 + this.rand.nextDouble() * (var6.maxY - var6.minY - (double)(var7 * 2.0F)) + (double)var7 + var6.minY; + double var12 = (double)var3 + this.rand.nextDouble() * (var6.maxZ - var6.minZ - (double)(var7 * 2.0F)) + (double)var7 + var6.minZ; + if(var4 == 0) { + var10 = (double)var2 + var6.minY - (double)var7; + } + + if(var4 == 1) { + var10 = (double)var2 + var6.maxY + (double)var7; + } + + if(var4 == 2) { + var12 = (double)var3 + var6.minZ - (double)var7; + } + + if(var4 == 3) { + var12 = (double)var3 + var6.maxZ + (double)var7; + } + + if(var4 == 4) { + var8 = (double)var1 + var6.minX - (double)var7; + } + + if(var4 == 5) { + var8 = (double)var1 + var6.maxX + (double)var7; + } + + this.addEffect((new EntityDiggingFX(this.worldObj, var8, var10, var12, 0.0D, 0.0D, 0.0D, var6)).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/Entity.java b/src/net/minecraft/src/Entity.java new file mode 100644 index 0000000..64fc4ce --- /dev/null +++ b/src/net/minecraft/src/Entity.java @@ -0,0 +1,728 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public abstract class Entity { + public boolean preventEntitySpawning = false; + public Entity riddenByEntity; + public Entity ridingEntity; + protected 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 = false; + public boolean isCollided = false; + public boolean surfaceCollision = 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; + protected boolean canTriggerWalking = true; + protected 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; + public boolean unusedBool = false; + protected Random rand = new Random(); + public int ticksExisted = 0; + public int fireResistance = 1; + public int fire = 0; + protected int maxAir = 300; + protected boolean inWater = false; + public int heartsLife = 0; + public int air = 300; + private boolean isFirstUpdate = true; + public String skinUrl; + private double entityRiderPitchDelta; + private double entityRiderYawDelta; + + public Entity(World var1) { + this.worldObj = var1; + this.setPosition(0.0D, 0.0D, 0.0D); + } + + 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).size() == 0) { + break; + } + + ++this.posY; + } + + this.motionX = this.motionY = this.motionZ = 0.0D; + this.rotationPitch = 0.0F; + } + } + + public void setEntityDead() { + this.isDead = true; + } + + protected void setSize(float var1, float var2) { + this.width = var1; + this.height = var2; + } + + protected void setRotation(float var1, float var2) { + this.rotationYaw = var1; + this.rotationPitch = var2; + } + + 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 / 2.0F; + this.boundingBox.setBounds(var1 - (double)var7, var3 - (double)var8, var5 - (double)var7, var1 + (double)var7, var3 + (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() { + if(this.ridingEntity != null && this.ridingEntity.isDead) { + this.ridingEntity = null; + } + + ++this.ticksExisted; + this.prevDistanceWalkedModified = this.distanceWalkedModified; + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.prevRotationPitch = this.rotationPitch; + this.prevRotationYaw = this.rotationYaw; + if(this.handleWaterMovement()) { + if(!this.inWater && !this.isFirstUpdate) { + 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.worldObj.playSoundAtEntity(this, "random.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; + } + + if(this.fire > 0) { + if(this.fire % 20 == 0) { + this.attackEntityFrom((Entity)null, 1); + } + + --this.fire; + } + + if(this.handleLavaMovement()) { + this.attackEntityFrom((Entity)null, 10); + this.fire = 600; + } + + if(this.posY < -64.0D) { + this.kill(); + } + + this.isFirstUpdate = false; + } + + protected void kill() { + this.setEntityDead(); + } + + 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.size() > 0 ? false : !this.worldObj.getIsAnyLiquid(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 { + double var7 = this.posX; + double var9 = this.posZ; + double var11 = var1; + double var13 = var3; + double var15 = var5; + AxisAlignedBB var17 = this.boundingBox.copy(); + List var18 = this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.addCoord(var1, var3, var5)); + + for(int var19 = 0; var19 < var18.size(); ++var19) { + var3 = ((AxisAlignedBB)var18.get(var19)).calculateYOffset(this.boundingBox, var3); + } + + this.boundingBox.offset(0.0D, var3, 0.0D); + if(!this.surfaceCollision && var13 != var3) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + boolean var29 = this.onGround || var13 != var3 && var13 < 0.0D; + + int var20; + for(var20 = 0; var20 < var18.size(); ++var20) { + var1 = ((AxisAlignedBB)var18.get(var20)).calculateXOffset(this.boundingBox, var1); + } + + this.boundingBox.offset(var1, 0.0D, 0.0D); + if(!this.surfaceCollision && var11 != var1) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + for(var20 = 0; var20 < var18.size(); ++var20) { + var5 = ((AxisAlignedBB)var18.get(var20)).calculateZOffset(this.boundingBox, var5); + } + + this.boundingBox.offset(0.0D, 0.0D, var5); + if(!this.surfaceCollision && var15 != var5) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + double var22; + int var27; + double var30; + if(this.stepHeight > 0.0F && var29 && this.ySize < 0.05F && (var11 != var1 || var15 != var5)) { + var30 = var1; + var22 = var3; + double var24 = var5; + var1 = var11; + var3 = (double)this.stepHeight; + var5 = var15; + AxisAlignedBB var26 = this.boundingBox.copy(); + this.boundingBox.setBB(var17); + var18 = this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.addCoord(var11, var3, var15)); + + for(var27 = 0; var27 < var18.size(); ++var27) { + var3 = ((AxisAlignedBB)var18.get(var27)).calculateYOffset(this.boundingBox, var3); + } + + this.boundingBox.offset(0.0D, var3, 0.0D); + if(!this.surfaceCollision && var13 != var3) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + for(var27 = 0; var27 < var18.size(); ++var27) { + var1 = ((AxisAlignedBB)var18.get(var27)).calculateXOffset(this.boundingBox, var1); + } + + this.boundingBox.offset(var1, 0.0D, 0.0D); + if(!this.surfaceCollision && var11 != var1) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + for(var27 = 0; var27 < var18.size(); ++var27) { + var5 = ((AxisAlignedBB)var18.get(var27)).calculateZOffset(this.boundingBox, var5); + } + + this.boundingBox.offset(0.0D, 0.0D, var5); + if(!this.surfaceCollision && var15 != var5) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + if(var30 * var30 + var24 * var24 >= var1 * var1 + var5 * var5) { + var1 = var30; + var3 = var22; + var5 = var24; + this.boundingBox.setBB(var26); + } else { + this.ySize = (float)((double)this.ySize + 0.5D); + } + } + + 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 = var11 != var1 || var15 != var5; + this.onGround = var13 != var3 && var13 < 0.0D; + this.isCollided = this.isCollidedHorizontally || var13 != var3; + if(this.onGround) { + if(this.fallDistance > 0.0F) { + this.fall(this.fallDistance); + this.fallDistance = 0.0F; + } + } else if(var3 < 0.0D) { + this.fallDistance = (float)((double)this.fallDistance - var3); + } + + if(var11 != var1) { + this.motionX = 0.0D; + } + + if(var13 != var3) { + this.motionY = 0.0D; + } + + if(var15 != var5) { + this.motionZ = 0.0D; + } + + var30 = this.posX - var7; + var22 = this.posZ - var9; + this.distanceWalkedModified = (float)((double)this.distanceWalkedModified + (double)MathHelper.sqrt_double(var30 * var30 + var22 * var22) * 0.6D); + if(this.canTriggerWalking) { + int var31 = MathHelper.floor_double(this.posX); + int var25 = MathHelper.floor_double(this.posY - (double)0.2F - (double)this.yOffset); + int var33 = MathHelper.floor_double(this.posZ); + var27 = this.worldObj.getBlockId(var31, var25, var33); + if(this.distanceWalkedModified > (float)this.nextStepDistance && var27 > 0) { + ++this.nextStepDistance; + StepSound var28 = Block.blocksList[var27].stepSound; + if(!Block.blocksList[var27].blockMaterial.getIsLiquid()) { + this.worldObj.playSoundAtEntity(this, var28.getStepSound(), var28.getVolume() * 0.15F, var28.getPitch()); + } + + Block.blocksList[var27].onEntityWalking(this.worldObj, var31, var25, var33, this); + } + } + + this.ySize *= 0.4F; + boolean var32 = this.handleWaterMovement(); + if(this.worldObj.isBoundingBoxBurning(this.boundingBox)) { + this.dealFireDamage(1); + if(!var32) { + ++this.fire; + if(this.fire == 0) { + this.fire = 300; + } + } + } else if(this.fire <= 0) { + this.fire = -this.fireResistance; + } + + if(var32 && this.fire > 0) { + this.worldObj.playSoundAtEntity(this, "random.fizz", 0.7F, 1.6F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.4F); + this.fire = -this.fireResistance; + } + + } + } + + public AxisAlignedBB getBoundingBox() { + return null; + } + + protected void dealFireDamage(int var1) { + this.attackEntityFrom((Entity)null, var1); + } + + protected void fall(float var1) { + } + + public boolean handleWaterMovement() { + return this.worldObj.handleMaterialAcceleration(this.boundingBox.expand(0.0D, (double)-0.4F, 0.0D), Material.water, this); + } + + 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.getPercentAir(this.worldObj.getBlockMetadata(var4, var5, var6)) - 1.0F / 9.0F; + float var9 = (float)(var5 + 1) - var8; + return var2 < (double)var9; + } else { + return false; + } + } + + protected float getEyeHeight() { + return 0.0F; + } + + public boolean handleLavaMovement() { + return this.worldObj.isMaterialInBB(this.boundingBox.expand(0.0D, (double)-0.4F, 0.0D), Material.lava); + } + + public void moveFlying(float var1, float var2, float var3) { + float var4 = MathHelper.sqrt_float(var1 * var1 + var2 * var2); + if(var4 >= 0.01F) { + 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 float getEntityBrightness(float var1) { + int var2 = MathHelper.floor_double(this.posX); + double var3 = (this.boundingBox.maxY - this.boundingBox.minY) * 0.66D; + int var5 = MathHelper.floor_double(this.posY - (double)this.yOffset + var3); + int var6 = MathHelper.floor_double(this.posZ); + return this.worldObj.getBrightness(var2, var5, var6); + } + + 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 + (double)this.yOffset; + 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) { + 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; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + return false; + } + + public boolean canBeCollidedWith() { + return false; + } + + public boolean canBePushed() { + return false; + } + + public void addToPlayerScore(Entity var1, int var2) { + } + + public boolean isInRangeToRenderVec3D(Vec3D 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; + return var1 < var3 * var3; + } + + public String getTexture() { + return null; + } + + public boolean addEntityID(NBTTagCompound var1) { + String var2 = this.getEntityString(); + if(!this.isDead && var2 != null) { + var1.setString("id", var2); + this.writeToNBT(var1); + return true; + } else { + return false; + } + } + + public void writeToNBT(NBTTagCompound var1) { + var1.setTag("Pos", this.newDoubleNBTList(new double[]{this.posX, this.posY, 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.air); + var1.setBoolean("OnGround", this.onGround); + this.writeEntityToNBT(var1); + } + + public void readFromNBT(NBTTagCompound var1) { + NBTTagList var2 = var1.getTagList("Pos"); + NBTTagList var3 = var1.getTagList("Motion"); + NBTTagList var4 = var1.getTagList("Rotation"); + this.setPosition(0.0D, 0.0D, 0.0D); + this.motionX = ((NBTTagDouble)var3.tagAt(0)).doubleValue; + this.motionY = ((NBTTagDouble)var3.tagAt(1)).doubleValue; + this.motionZ = ((NBTTagDouble)var3.tagAt(2)).doubleValue; + this.prevPosX = this.lastTickPosX = this.posX = ((NBTTagDouble)var2.tagAt(0)).doubleValue; + this.prevPosY = this.lastTickPosY = this.posY = ((NBTTagDouble)var2.tagAt(1)).doubleValue; + this.prevPosZ = this.lastTickPosZ = this.posZ = ((NBTTagDouble)var2.tagAt(2)).doubleValue; + this.prevRotationYaw = this.rotationYaw = ((NBTTagFloat)var4.tagAt(0)).floatValue; + this.prevRotationPitch = this.rotationPitch = ((NBTTagFloat)var4.tagAt(1)).floatValue; + this.fallDistance = var1.getFloat("FallDistance"); + this.fire = var1.getShort("Fire"); + this.air = var1.getShort("Air"); + this.onGround = var1.getBoolean("OnGround"); + this.setPosition(this.posX, this.posY, this.posZ); + this.readEntityFromNBT(var1); + } + + 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.setTag(new NBTTagDouble(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.setTag(new NBTTagFloat(var6)); + } + + return var2; + } + + public EntityItem dropItem(int var1, int var2) { + return this.entityDropItem(var1, var2, 0.0F); + } + + public EntityItem entityDropItem(int var1, int var2, float var3) { + EntityItem var4 = new EntityItem(this.worldObj, this.posX, this.posY + (double)var3, this.posZ, new ItemStack(var1, var2)); + var4.delayBeforeCanPickup = 10; + this.worldObj.spawnEntityInWorld(var4); + return var4; + } + + public boolean isEntityAlive() { + return !this.isDead; + } + + public boolean isEntityInsideOpaqueBlock() { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.posY + (double)this.getEyeHeight()); + int var3 = MathHelper.floor_double(this.posZ); + return this.worldObj.isBlockNormalCube(var1, var2, var3); + } + + 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(); + this.setPosition(this.ridingEntity.posX, this.ridingEntity.posY + (double)this.yOffset + this.ridingEntity.getYOffset(), this.ridingEntity.posZ); + 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 double getYOffset() { + return (double)this.height * 0.75D; + } + + public void mountEntity(Entity var1) { + this.entityRiderPitchDelta = 0.0D; + this.entityRiderYawDelta = 0.0D; + if(this.ridingEntity == var1) { + this.ridingEntity.riddenByEntity = null; + this.ridingEntity = null; + } else { + if(this.ridingEntity != null) { + this.ridingEntity.riddenByEntity = null; + } + + if(var1.riddenByEntity != null) { + var1.riddenByEntity.ridingEntity = null; + } + + this.ridingEntity = var1; + var1.riddenByEntity = this; + } + } +} diff --git a/src/net/minecraft/src/EntityAnimal.java b/src/net/minecraft/src/EntityAnimal.java new file mode 100644 index 0000000..ebf27f5 --- /dev/null +++ b/src/net/minecraft/src/EntityAnimal.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +public abstract class EntityAnimal extends EntityCreature { + public EntityAnimal(World var1) { + super(var1); + } + + protected float getBlockPathWeight(int var1, int var2, int var3) { + return this.worldObj.getBlockId(var1, var2 - 1, var3) == Block.grass.blockID ? 10.0F : this.worldObj.getBrightness(var1, var2, var3) - 0.5F; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + public boolean getCanSpawnHere(double var1, double var3, double var5) { + return this.worldObj.getBlockLightValue(MathHelper.floor_double(var1), MathHelper.floor_double(var3), MathHelper.floor_double(var5)) > 8 && super.getCanSpawnHere(var1, var3, var5); + } +} diff --git a/src/net/minecraft/src/EntityArrow.java b/src/net/minecraft/src/EntityArrow.java new file mode 100644 index 0000000..2417a82 --- /dev/null +++ b/src/net/minecraft/src/EntityArrow.java @@ -0,0 +1,217 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityArrow extends Entity { + private int xTile = -1; + private int yTile = -1; + private int zTile = -1; + private int inTile = 0; + private boolean inGround = false; + public int arrowShake = 0; + private EntityLiving shootingEntity; + private int ticksInGround; + private int ticksInAir = 0; + + public EntityArrow(World var1) { + super(var1); + this.setSize(0.5F, 0.5F); + } + + public EntityArrow(World var1, EntityLiving var2) { + super(var1); + this.shootingEntity = var2; + this.setSize(0.5F, 0.5F); + this.setPositionAndRotation(var2.posX, var2.posY, 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.setArrowHeading(this.motionX, this.motionY, this.motionZ, 1.5F, 1.0F); + } + + public void setArrowHeading(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 onUpdate() { + super.onUpdate(); + if(this.arrowShake > 0) { + --this.arrowShake; + } + + 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.setEntityDead(); + } + + return; + } + + this.inGround = false; + this.motionX *= (double)(this.rand.nextFloat() * 0.2F); + this.motionY *= (double)(this.rand.nextFloat() * 0.2F); + this.motionZ *= (double)(this.rand.nextFloat() * 0.2F); + this.ticksInGround = 0; + this.ticksInAir = 0; + } else { + ++this.ticksInAir; + } + + Vec3D var15 = Vec3D.createVector(this.posX, this.posY, this.posZ); + Vec3D var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + MovingObjectPosition var3 = this.worldObj.rayTraceBlocks(var15, var2); + var15 = Vec3D.createVector(this.posX, this.posY, this.posZ); + var2 = Vec3D.createVector(this.posX + this.motionX, this.posY + this.motionY, this.posZ + this.motionZ); + if(var3 != null) { + var2 = Vec3D.createVector(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; + + float var10; + for(int var8 = 0; var8 < var5.size(); ++var8) { + Entity var9 = (Entity)var5.get(var8); + if(var9.canBeCollidedWith() && (var9 != this.shootingEntity || this.ticksInAir >= 5)) { + 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); + } + + float var16; + if(var3 != null) { + if(var3.entityHit != null) { + if(var3.entityHit.attackEntityFrom(this.shootingEntity, 4)) { + this.worldObj.playSoundAtEntity(this, "random.drr", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.setEntityDead(); + } 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 = var3.blockX; + this.yTile = var3.blockY; + this.zTile = var3.blockZ; + this.inTile = this.worldObj.getBlockId(this.xTile, this.yTile, this.zTile); + this.motionX = (double)((float)(var3.hitVec.xCoord - this.posX)); + this.motionY = (double)((float)(var3.hitVec.yCoord - this.posY)); + this.motionZ = (double)((float)(var3.hitVec.zCoord - this.posZ)); + var16 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / (double)var16 * (double)0.05F; + this.posY -= this.motionY / (double)var16 * (double)0.05F; + this.posZ -= this.motionZ / (double)var16 * (double)0.05F; + this.worldObj.playSoundAtEntity(this, "random.drr", 1.0F, 1.2F / (this.rand.nextFloat() * 0.2F + 0.9F)); + this.inGround = true; + this.arrowShake = 7; + } + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + var16 = 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)var16) * 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 var17 = 0.99F; + var10 = 0.03F; + if(this.handleWaterMovement()) { + 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 *= (double)var17; + this.motionY *= (double)var17; + this.motionZ *= (double)var17; + this.motionY -= (double)var10; + 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.arrowShake); + 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.arrowShake = var1.getByte("shake") & 255; + this.inGround = var1.getByte("inGround") == 1; + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(this.inGround && this.shootingEntity == var1 && this.arrowShake <= 0 && var1.inventory.addItemStackToInventory(new ItemStack(Item.arrow.shiftedIndex, 1))) { + this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + var1.onItemPickup(this); + this.setEntityDead(); + } + + } +} diff --git a/src/net/minecraft/src/EntityBubbleFX.java b/src/net/minecraft/src/EntityBubbleFX.java new file mode 100644 index 0000000..e36404b --- /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.particleTextureIndex = 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.setEntityDead(); + } + + if(this.particleMaxAge-- <= 0) { + this.setEntityDead(); + } + + } +} diff --git a/src/net/minecraft/src/EntityCreature.java b/src/net/minecraft/src/EntityCreature.java new file mode 100644 index 0000000..db340ed --- /dev/null +++ b/src/net/minecraft/src/EntityCreature.java @@ -0,0 +1,125 @@ +package net.minecraft.src; + +public class EntityCreature extends EntityLiving { + private PathEntity pathToEntity; + protected Entity playerToAttack; + protected boolean hasAttacked = false; + + public EntityCreature(World var1) { + super(var1); + } + + protected boolean canEntityBeSeen(Entity var1) { + return this.worldObj.rayTraceBlocks(Vec3D.createVector(this.posX, this.posY + (double)this.getEyeHeight(), this.posZ), Vec3D.createVector(var1.posX, var1.posY + (double)var1.getEyeHeight(), var1.posZ)) == null; + } + + protected void updatePlayerActionState() { + this.hasAttacked = false; + float var1 = 16.0F; + if(this.playerToAttack == null) { + this.playerToAttack = this.findPlayerToAttack(); + if(this.playerToAttack != null) { + this.pathToEntity = this.worldObj.getPathToEntity(this, this.playerToAttack, var1); + } + } else if(!this.playerToAttack.isEntityAlive()) { + this.playerToAttack = null; + } else { + float var2 = this.playerToAttack.getDistanceToEntity(this); + if(this.canEntityBeSeen(this.playerToAttack)) { + this.attackEntity(this.playerToAttack, var2); + } + } + + int var19; + if(this.hasAttacked || this.playerToAttack == null || this.pathToEntity != null && this.rand.nextInt(20) != 0) { + if(this.pathToEntity == null || this.rand.nextInt(100) == 0) { + var19 = -1; + int var3 = -1; + int var4 = -1; + float var5 = -99999.0F; + + for(int var6 = 0; var6 < 50; ++var6) { + int var7 = MathHelper.floor_double(this.posX + (double)this.rand.nextInt(11) - 5.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(11) - 5.0D); + float var10 = this.getBlockPathWeight(var7, var8, var9); + if(var10 > var5) { + var5 = var10; + var19 = var7; + var3 = var8; + var4 = var9; + } + } + + if(var19 > 0) { + this.pathToEntity = this.worldObj.getEntityPathToXYZ(this, var19, var3, var4, var1); + } + } + } else { + this.pathToEntity = this.worldObj.getPathToEntity(this, this.playerToAttack, var1); + } + + var19 = MathHelper.floor_double(this.boundingBox.minY); + boolean var20 = this.handleWaterMovement(); + boolean var21 = this.handleLavaMovement(); + if(this.pathToEntity != null && this.rand.nextInt(100) != 0) { + Vec3D var22 = this.pathToEntity.getPosition(this); + float var23 = this.width * 2.0F; + + while(var22 != null && var22.squareDistanceTo(this.posX, this.posY, this.posZ) < (double)(var23 * var23) && var22.yCoord <= (double)var19) { + this.pathToEntity.incrementPathIndex(); + if(this.pathToEntity.isFinished()) { + var22 = null; + this.pathToEntity = null; + } else { + var22 = this.pathToEntity.getPosition(this); + } + } + + this.isJumping = false; + if(var22 != null) { + double var24 = var22.xCoord - this.posX; + double var25 = var22.zCoord - this.posZ; + double var11 = var22.yCoord - (double)var19; + this.rotationYaw = (float)(Math.atan2(var25, var24) * 180.0D / (double)((float)Math.PI)) - 90.0F; + this.moveForward = this.moveSpeed; + if(this.hasAttacked && this.playerToAttack != null) { + double var13 = this.playerToAttack.posX - this.posX; + double var15 = this.playerToAttack.posZ - this.posZ; + float var17 = this.rotationYaw; + this.rotationYaw = (float)(Math.atan2(var15, var13) * 180.0D / (double)((float)Math.PI)) - 90.0F; + float var18 = (var17 - this.rotationYaw + 90.0F) * (float)Math.PI / 180.0F; + this.moveStrafing = -MathHelper.sin(var18) * this.moveForward * 1.0F; + this.moveForward = MathHelper.cos(var18) * this.moveForward * 1.0F; + } + + if(var11 != 0.0D) { + this.isJumping = true; + } + } + + if(this.rand.nextFloat() < 0.8F && (var20 || var21)) { + this.isJumping = true; + } + + } else { + super.updatePlayerActionState(); + this.pathToEntity = null; + } + } + + protected void attackEntity(Entity var1, float var2) { + } + + protected float getBlockPathWeight(int var1, int var2, int var3) { + return 0.0F; + } + + protected Entity findPlayerToAttack() { + return null; + } + + public boolean getCanSpawnHere(double var1, double var3, double var5) { + return super.getCanSpawnHere(var1, var3, var5) && this.getBlockPathWeight((int)var1, (int)var3, (int)var5) >= 0.0F; + } +} diff --git a/src/net/minecraft/src/EntityCreeper.java b/src/net/minecraft/src/EntityCreeper.java new file mode 100644 index 0000000..28dfe5f --- /dev/null +++ b/src/net/minecraft/src/EntityCreeper.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +public class EntityCreeper extends EntityMonster { + int timeSinceIgnited; + int lastActiveTime; + int fuseTime = 30; + int creeperState = -1; + + public EntityCreeper(World var1) { + super(var1); + this.texture = "/mob/creeper.png"; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + protected void updatePlayerActionState() { + this.lastActiveTime = this.timeSinceIgnited; + if(this.timeSinceIgnited > 0 && this.creeperState < 0) { + --this.timeSinceIgnited; + } + + if(this.creeperState >= 0) { + this.creeperState = 2; + } + + super.updatePlayerActionState(); + if(this.creeperState != 1) { + this.creeperState = -1; + } + + } + + protected void attackEntity(Entity var1, float var2) { + if(this.creeperState <= 0 && var2 < 3.0F || this.creeperState > 0 && var2 < 7.0F) { + if(this.timeSinceIgnited == 0) { + this.worldObj.playSoundAtEntity(this, "random.fuse", 1.0F, 0.5F); + } + + this.creeperState = 1; + ++this.timeSinceIgnited; + if(this.timeSinceIgnited == this.fuseTime) { + this.worldObj.createExplosion(this, this.posX, this.posY, this.posZ, 3.0F); + this.setEntityDead(); + } + + this.hasAttacked = true; + } + + } + + public float setCreeperFlashTime(float var1) { + return ((float)this.lastActiveTime + (float)(this.timeSinceIgnited - this.lastActiveTime) * var1) / (float)(this.fuseTime - 2); + } + + protected int getDropItemId() { + return Item.gunpowder.shiftedIndex; + } +} diff --git a/src/net/minecraft/src/EntityDiggingFX.java b/src/net/minecraft/src/EntityDiggingFX.java new file mode 100644 index 0000000..ddc26fb --- /dev/null +++ b/src/net/minecraft/src/EntityDiggingFX.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +public class EntityDiggingFX extends EntityFX { + public EntityDiggingFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12, Block var14) { + super(var1, var2, var4, var6, var8, var10, var12); + this.particleTextureIndex = var14.blockIndexInTexture; + this.particleGravity = var14.blockParticleGravity; + this.particleRed = this.particleGreen = this.particleBlue = 0.6F; + this.particleScale /= 2.0F; + } + + 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.particleTextureIndex % 16) + this.particleTextureJitterX / 4.0F) / 16.0F; + float var9 = var8 + 0.999F / 64.0F; + float var10 = ((float)(this.particleTextureIndex / 16) + this.particleTextureJitterY / 4.0F) / 16.0F; + float var11 = var10 + 0.999F / 64.0F; + float var12 = 0.1F * this.particleScale; + 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 = this.getEntityBrightness(var2); + 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/EntityExplodeFX.java b/src/net/minecraft/src/EntityExplodeFX.java new file mode 100644 index 0000000..e6ed054 --- /dev/null +++ b/src/net/minecraft/src/EntityExplodeFX.java @@ -0,0 +1,38 @@ +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 renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + 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.setEntityDead(); + } + + this.particleTextureIndex = 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..9809da0 --- /dev/null +++ b/src/net/minecraft/src/EntityFX.java @@ -0,0 +1,99 @@ +package net.minecraft.src; + +public class EntityFX extends Entity { + protected int particleTextureIndex; + protected float particleTextureJitterX; + protected float particleTextureJitterY; + protected int particleAge = 0; + protected int particleMaxAge = 0; + protected float particleScale; + protected float particleGravity; + protected float particleRed; + protected float particleGreen; + protected float particleBlue; + public static double interpPosX; + public static double interpPosY; + public static double interpPosZ; + + public EntityFX(World var1, double var2, double var4, double var6, double var8, double var10, double var12) { + super(var1); + this.setSize(0.2F, 0.2F); + this.yOffset = this.height / 2.0F; + this.setPosition(var2, var4, var6); + this.particleRed = this.particleGreen = this.particleBlue = 1.0F; + 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; + this.particleTextureJitterX = this.rand.nextFloat() * 3.0F; + this.particleTextureJitterY = this.rand.nextFloat() * 3.0F; + this.particleScale = (this.rand.nextFloat() * 0.5F + 0.5F) * 2.0F; + this.particleMaxAge = (int)(4.0F / (this.rand.nextFloat() * 0.9F + 0.1F)); + this.particleAge = 0; + this.canTriggerWalking = false; + } + + 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 onUpdate() { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + if(this.particleAge++ >= this.particleMaxAge) { + this.setEntityDead(); + } + + 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.particleTextureIndex % 16) / 16.0F; + float var9 = var8 + 0.999F / 16.0F; + float var10 = (float)(this.particleTextureIndex / 16) / 16.0F; + float var11 = var10 + 0.999F / 16.0F; + float var12 = 0.1F * this.particleScale; + 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 = this.getEntityBrightness(var2); + var1.setColorOpaque_F(this.particleRed * var16, this.particleGreen * var16, this.particleBlue * var16); + 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); + } + + public int getFXLayer() { + return 0; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + } + + public void readEntityFromNBT(NBTTagCompound var1) { + } +} diff --git a/src/net/minecraft/src/EntityFallingSand.java b/src/net/minecraft/src/EntityFallingSand.java new file mode 100644 index 0000000..4dc1c13 --- /dev/null +++ b/src/net/minecraft/src/EntityFallingSand.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +public class EntityFallingSand extends Entity { + public int blockID; + public int fallTime = 0; + + public EntityFallingSand(World var1) { + super(var1); + } + + public EntityFallingSand(World var1, float var2, float var3, float var4, int var5) { + super(var1); + this.blockID = var5; + this.preventEntitySpawning = true; + this.setSize(0.98F, 0.98F); + this.yOffset = this.height / 2.0F; + this.setPosition((double)var2, (double)var3, (double)var4); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.canTriggerWalking = false; + this.prevPosX = (double)var2; + this.prevPosY = (double)var3; + this.prevPosZ = (double)var4; + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public void onUpdate() { + if(this.blockID == 0) { + this.setEntityDead(); + } 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; + 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) == this.blockID) { + this.worldObj.setBlockWithNotify(var1, var2, var3, 0); + } + + if(this.onGround) { + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + this.motionY *= -0.5D; + this.setEntityDead(); + if(!this.worldObj.canBlockBePlacedAt(this.blockID, var1, var2, var3, true) || !this.worldObj.setBlockWithNotify(var1, var2, var3, this.blockID)) { + this.dropItem(this.blockID, 1); + } + } else if(this.fallTime > 100) { + this.dropItem(this.blockID, 1); + this.setEntityDead(); + } + + } + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + var1.setByte("Tile", (byte)this.blockID); + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + this.blockID = var1.getByte("Tile") & 255; + } + + public World getWorld() { + return this.worldObj; + } +} diff --git a/src/net/minecraft/src/EntityFlameFX.java b/src/net/minecraft/src/EntityFlameFX.java new file mode 100644 index 0000000..192090a --- /dev/null +++ b/src/net/minecraft/src/EntityFlameFX.java @@ -0,0 +1,59 @@ +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.particleTextureIndex = 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 float getEntityBrightness(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.getEntityBrightness(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.setEntityDead(); + } + + 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/EntityGiant.java b/src/net/minecraft/src/EntityGiant.java new file mode 100644 index 0000000..115d51d --- /dev/null +++ b/src/net/minecraft/src/EntityGiant.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class EntityGiant extends EntityMonster { + public EntityGiant(World var1) { + super(var1); + this.texture = "/mob/zombie.png"; + this.moveSpeed = 0.5F; + this.attackStrength = 50; + this.health *= 10; + this.yOffset *= 6.0F; + this.setSize(this.width * 6.0F, this.height * 6.0F); + } + + protected float getBlockPathWeight(int var1, int var2, int var3) { + return this.worldObj.getBrightness(var1, var2, var3) - 0.5F; + } +} diff --git a/src/net/minecraft/src/EntityItem.java b/src/net/minecraft/src/EntityItem.java new file mode 100644 index 0000000..785a54e --- /dev/null +++ b/src/net/minecraft/src/EntityItem.java @@ -0,0 +1,180 @@ +package net.minecraft.src; + +public class EntityItem extends Entity { + public ItemStack item; + private int age2; + public int age = 0; + public int delayBeforeCanPickup; + private int health = 5; + public float hoverStart = (float)(Math.random() * Math.PI * 2.0D); + + public EntityItem(World var1, double var2, double var4, double var6, ItemStack var8) { + super(var1); + this.setSize(0.25F, 0.25F); + this.yOffset = this.height / 2.0F; + this.setPosition(var2, var4, var6); + this.item = var8; + 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)); + this.canTriggerWalking = false; + } + + public EntityItem(World var1) { + super(var1); + this.setSize(0.25F, 0.25F); + this.yOffset = this.height / 2.0F; + } + + 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; + 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.worldObj.playSoundAtEntity(this, "random.fizz", 0.4F, 2.0F + this.rand.nextFloat() * 0.4F); + } + + this.pushOutOfBlocks(this.posX, this.posY, this.posZ); + this.handleWaterMovement(); + 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; + } + + ++this.age2; + ++this.age; + if(this.age >= 6000) { + this.setEntityDead(); + } + + } + + public boolean handleWaterMovement() { + return this.worldObj.handleMaterialAcceleration(this.boundingBox, Material.water, this); + } + + private 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; + if(Block.opaqueCubeLookup[this.worldObj.getBlockId(var7, var8, var9)]) { + boolean var16 = !Block.opaqueCubeLookup[this.worldObj.getBlockId(var7 - 1, var8, var9)]; + boolean var17 = !Block.opaqueCubeLookup[this.worldObj.getBlockId(var7 + 1, var8, var9)]; + boolean var18 = !Block.opaqueCubeLookup[this.worldObj.getBlockId(var7, var8 - 1, var9)]; + boolean var19 = !Block.opaqueCubeLookup[this.worldObj.getBlockId(var7, var8 + 1, var9)]; + boolean var20 = !Block.opaqueCubeLookup[this.worldObj.getBlockId(var7, var8, var9 - 1)]; + boolean var21 = !Block.opaqueCubeLookup[this.worldObj.getBlockId(var7, var8, var9 + 1)]; + byte var22 = -1; + double var23 = 9999.0D; + if(var16 && var10 < var23) { + var23 = var10; + var22 = 0; + } + + if(var17 && 1.0D - var10 < var23) { + var23 = 1.0D - var10; + var22 = 1; + } + + if(var18 && var12 < var23) { + var23 = var12; + var22 = 2; + } + + if(var19 && 1.0D - var12 < var23) { + var23 = 1.0D - var12; + var22 = 3; + } + + if(var20 && var14 < var23) { + var23 = var14; + var22 = 4; + } + + if(var21 && 1.0D - var14 < var23) { + var23 = 1.0D - var14; + var22 = 5; + } + + float var25 = this.rand.nextFloat() * 0.2F + 0.1F; + if(var22 == 0) { + this.motionX = (double)(-var25); + } + + if(var22 == 1) { + this.motionX = (double)var25; + } + + if(var22 == 2) { + this.motionY = (double)(-var25); + } + + if(var22 == 3) { + this.motionY = (double)var25; + } + + if(var22 == 4) { + this.motionZ = (double)(-var25); + } + + if(var22 == 5) { + this.motionZ = (double)var25; + } + } + + return false; + } + + protected void dealFireDamage(int var1) { + this.attackEntityFrom((Entity)null, var1); + } + + public boolean attackEntityFrom(Entity var1, int var2) { + this.health -= var2; + if(this.health <= 0) { + this.setEntityDead(); + } + + return false; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("Health", (short)((byte)this.health)); + var1.setShort("Age", (short)this.age); + var1.setCompoundTag("Item", this.item.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.item = new ItemStack(var2); + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(this.delayBeforeCanPickup == 0 && var1.inventory.addItemStackToInventory(this.item)) { + this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.rand.nextFloat() - this.rand.nextFloat()) * 0.7F + 1.0F) * 2.0F); + var1.onItemPickup(this); + this.setEntityDead(); + } + + } +} diff --git a/src/net/minecraft/src/EntityLavaFX.java b/src/net/minecraft/src/EntityLavaFX.java new file mode 100644 index 0000000..f6b735f --- /dev/null +++ b/src/net/minecraft/src/EntityLavaFX.java @@ -0,0 +1,54 @@ +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.particleTextureIndex = 49; + } + + public float getEntityBrightness(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.setEntityDead(); + } + + 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/EntityList.java b/src/net/minecraft/src/EntityList.java new file mode 100644 index 0000000..0d673ef --- /dev/null +++ b/src/net/minecraft/src/EntityList.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; + +public class EntityList { + private static Map stringToClassMapping = new HashMap(); + private static Map classToStringMapping = new HashMap(); + + private static void addMapping(Class var0, String var1) { + stringToClassMapping.put(var1, var0); + classToStringMapping.put(var0, var1); + } + + public static Entity createEntityInWorld(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; + + 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 { + System.out.println("Skipping Entity with id " + var0.getString("id")); + } + + return var2; + } + + public static String getEntityString(Entity var0) { + return (String)classToStringMapping.get(var0.getClass()); + } + + static { + addMapping(EntityArrow.class, "Arrow"); + addMapping(EntityItem.class, "Item"); + addMapping(EntityPainting.class, "Painting"); + addMapping(EntityLiving.class, "Mob"); + addMapping(EntityMonster.class, "Monster"); + addMapping(EntityCreeper.class, "Creeper"); + addMapping(EntitySkeleton.class, "Skeleton"); + addMapping(EntitySpider.class, "Spider"); + addMapping(EntityGiant.class, "Giant"); + addMapping(EntityZombie.class, "Zombie"); + addMapping(EntityPig.class, "Pig"); + addMapping(EntitySheep.class, "Sheep"); + addMapping(EntityTNTPrimed.class, "PrimedTnt"); + addMapping(EntityFallingSand.class, "FallingSand"); + addMapping(EntityMinecart.class, "Minecart"); + } +} diff --git a/src/net/minecraft/src/EntityLiving.java b/src/net/minecraft/src/EntityLiving.java new file mode 100644 index 0000000..09a9db0 --- /dev/null +++ b/src/net/minecraft/src/EntityLiving.java @@ -0,0 +1,548 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityLiving extends Entity { + public int heartsHalvesLife = 20; + public float unusedRotationPitch2; + public float unusedFloat; + public float unusedRotationPitch; + public float renderYawOffset = 0.0F; + public float prevRenderYawOffset = 0.0F; + protected float ridingRotUnused; + protected float prevRidingRotUnused; + protected float rotationUnused; + protected float prevRotationUnused; + protected boolean unusedBool1 = true; + protected String texture = "/char.png"; + protected boolean unusedBool2 = true; + protected float unusedRotation = 0.0F; + protected String entityType = null; + protected float unusedFloat1 = 1.0F; + protected int scoreValue = 0; + protected float unusedFloat2 = 0.0F; + public int health = 10; + public int prevHealth; + private 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; + public int unusedInt = -1; + public float unusedFloat4 = (float)(Math.random() * (double)0.9F + (double)0.1F); + public float prevLimbYaw; + public float limbYaw; + public float limbSwing; + 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; + + public EntityLiving(World var1) { + super(var1); + this.preventEntitySpawning = true; + this.unusedRotationPitch = (float)(Math.random() + 1.0D) * 0.01F; + this.setPosition(this.posX, this.posY, this.posZ); + this.unusedRotationPitch2 = (float)Math.random() * 12398.0F; + this.rotationYaw = (float)(Math.random() * (double)((float)Math.PI) * 2.0D); + this.unusedFloat = 1.0F; + this.stepHeight = 0.5F; + } + + public String getTexture() { + return this.texture; + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public boolean canBePushed() { + return !this.isDead; + } + + protected float getEyeHeight() { + return this.height * 0.85F; + } + + public void onEntityUpdate() { + super.onEntityUpdate(); + if(this.rand.nextInt(1000) < this.livingSoundTime++) { + this.livingSoundTime = -80; + String var1 = this.getLivingSound(); + if(var1 != null) { + this.worldObj.playSoundAtEntity(this, var1, 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + } + + if(this.isEntityAlive() && this.isEntityInsideOpaqueBlock()) { + this.attackEntityFrom((Entity)null, 1); + } + + int var8; + if(this.isEntityAlive() && this.isInsideOfMaterial(Material.water)) { + --this.air; + if(this.air == -20) { + this.air = 0; + + for(var8 = 0; var8 < 8; ++var8) { + float var2 = this.rand.nextFloat() - this.rand.nextFloat(); + float var3 = this.rand.nextFloat() - this.rand.nextFloat(); + float var4 = this.rand.nextFloat() - this.rand.nextFloat(); + this.worldObj.spawnParticle("bubble", this.posX + (double)var2, this.posY + (double)var3, this.posZ + (double)var4, this.motionX, this.motionY, this.motionZ); + } + + this.attackEntityFrom((Entity)null, 2); + } + + this.fire = 0; + } else { + this.air = this.maxAir; + } + + this.prevCameraPitch = this.cameraPitch; + if(this.attackTime > 0) { + --this.attackTime; + } + + if(this.hurtTime > 0) { + --this.hurtTime; + } + + if(this.heartsLife > 0) { + --this.heartsLife; + } + + if(this.health <= 0) { + ++this.deathTime; + if(this.deathTime > 20) { + this.onEntityDeath(); + this.setEntityDead(); + + for(var8 = 0; var8 < 20; ++var8) { + double var9 = this.rand.nextGaussian() * 0.02D; + double var10 = 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, var9, var10, var6); + } + } + } + + this.prevRotationUnused = this.rotationUnused; + this.prevRenderYawOffset = this.renderYawOffset; + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + } + + 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.ridingRotUnused = this.prevRidingRotUnused; + this.prevRidingRotUnused = 0.0F; + } + + public void onUpdate() { + super.onUpdate(); + this.onLivingUpdate(); + double var1 = this.posX - this.prevPosX; + double var3 = this.posZ - this.prevPosZ; + float var5 = MathHelper.sqrt_double(var1 * var1 + var3 * var3); + float var6 = this.renderYawOffset; + float var7 = 0.0F; + this.ridingRotUnused = this.prevRidingRotUnused; + float var8 = 0.0F; + if(var5 > 0.05F) { + var8 = 1.0F; + var7 = var5 * 3.0F; + var6 = (float)Math.atan2(var3, var1) * 180.0F / (float)Math.PI - 90.0F; + } + + if(!this.onGround) { + var8 = 0.0F; + } + + this.prevRidingRotUnused += (var8 - this.prevRidingRotUnused) * 0.3F; + + float var9; + for(var9 = var6 - this.renderYawOffset; var9 < -180.0F; var9 += 360.0F) { + } + + while(var9 >= 180.0F) { + var9 -= 360.0F; + } + + this.renderYawOffset += var9 * 0.1F; + + float var10; + for(var10 = this.rotationYaw - this.renderYawOffset; var10 < -180.0F; var10 += 360.0F) { + } + + while(var10 >= 180.0F) { + var10 -= 360.0F; + } + + 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; + this.renderYawOffset += var10 * 0.1F; + if(var11) { + var7 *= -1.0F; + } + + 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; + } + + this.rotationUnused += var7; + } + + protected void setSize(float var1, float var2) { + super.setSize(var1, var2); + } + + public void heal(int var1) { + if(this.health > 0) { + this.health += var1; + if(this.health > 20) { + this.health = 20; + } + + this.heartsLife = this.heartsHalvesLife / 2; + } + } + + public boolean attackEntityFrom(Entity var1, int var2) { + this.entityAge = 0; + if(this.health <= 0) { + return false; + } else { + this.limbYaw = 1.5F; + if((float)this.heartsLife > (float)this.heartsHalvesLife / 2.0F) { + if(this.prevHealth - var2 >= this.health) { + return false; + } + + this.health = this.prevHealth - var2; + } else { + this.prevHealth = this.health; + this.heartsLife = this.heartsHalvesLife; + this.health -= var2; + this.hurtTime = this.maxHurtTime = 10; + } + + this.attackedAtYaw = 0.0F; + if(var1 != null) { + double var3 = var1.posX - this.posX; + + double var5; + for(var5 = var1.posZ - this.posZ; var3 * var3 + var5 * var5 < 1.0E-4D; var5 = (Math.random() - Math.random()) * 0.01D) { + var3 = (Math.random() - Math.random()) * 0.01D; + } + + this.attackedAtYaw = (float)(Math.atan2(var5, var3) * 180.0D / (double)((float)Math.PI)) - this.rotationYaw; + this.knockBack(var1, var2, var3, var5); + } else { + this.attackedAtYaw = (float)((int)(Math.random() * 2.0D) * 180); + } + + if(this.health <= 0) { + this.worldObj.playSoundAtEntity(this, this.getDeathSound(), 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + this.onDeath(var1); + } else { + this.worldObj.playSoundAtEntity(this, this.getHurtSound(), 1.0F, (this.rand.nextFloat() - this.rand.nextFloat()) * 0.2F + 1.0F); + } + + return true; + } + } + + protected String getLivingSound() { + return null; + } + + protected String getHurtSound() { + return "random.hurt"; + } + + protected String getDeathSound() { + return "random.hurt"; + } + + public void knockBack(Entity var1, int var2, double var3, double var5) { + 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)0.4F; + this.motionZ -= var5 / (double)var7 * (double)var8; + if(this.motionY > (double)0.4F) { + this.motionY = (double)0.4F; + } + + } + + public void onDeath(Entity var1) { + if(this.scoreValue > 0 && var1 != null) { + var1.addToPlayerScore(this, this.scoreValue); + } + + this.dead = true; + int var2 = this.getDropItemId(); + if(var2 > 0) { + int var3 = this.rand.nextInt(3); + + for(int var4 = 0; var4 < var3; ++var4) { + this.dropItem(var2, 1); + } + } + + } + + protected int getDropItemId() { + return 0; + } + + protected void fall(float var1) { + int var2 = (int)Math.ceil((double)(var1 - 3.0F)); + if(var2 > 0) { + this.attackEntityFrom((Entity)null, 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.worldObj.playSoundAtEntity(this, var4.getStepSound(), var4.getVolume() * 0.5F, var4.getPitch() * (12.0F / 16.0F)); + } + } + + } + + public void moveEntityWithHeading(float var1, float var2) { + double var3; + if(this.handleWaterMovement()) { + var3 = this.posY; + 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; + 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 if(this.handleLavaMovement()) { + 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 { + this.moveFlying(var1, var2, this.onGround ? 0.1F : 0.02F); + if(this.isOnLadder()) { + this.fallDistance = 0.0F; + if(this.motionY < -0.15D) { + this.motionY = -0.15D; + } + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + if(this.isCollidedHorizontally && this.isOnLadder()) { + this.motionY = 0.2D; + } + + this.motionX *= (double)0.91F; + this.motionY *= (double)0.98F; + this.motionZ *= (double)0.91F; + this.motionY -= 0.08D; + if(this.onGround) { + float var8 = 0.6F; + this.motionX *= (double)var8; + this.motionZ *= (double)var8; + } + } + + this.prevLimbYaw = this.limbYaw; + var3 = this.posX - this.prevPosX; + double var5 = this.posZ - this.prevPosZ; + float var7 = MathHelper.sqrt_double(var3 * var3 + var5 * var5) * 4.0F; + if(var7 > 1.0F) { + var7 = 1.0F; + } + + this.limbYaw += (var7 - 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); + return this.worldObj.getBlockId(var1, var2, var3) == Block.ladder.blockID || this.worldObj.getBlockId(var1, var2 + 1, var3) == Block.ladder.blockID; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("Health", (short)this.health); + var1.setShort("HurtTime", (short)this.hurtTime); + var1.setShort("DeathTime", (short)this.deathTime); + var1.setShort("AttackTime", (short)this.attackTime); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.health = var1.getShort("Health"); + if(!var1.hasKey("Health")) { + this.health = 10; + } + + this.hurtTime = var1.getShort("HurtTime"); + this.deathTime = var1.getShort("DeathTime"); + this.attackTime = var1.getShort("AttackTime"); + } + + public boolean isEntityAlive() { + return !this.isDead && this.health > 0; + } + + public void onLivingUpdate() { + ++this.entityAge; + Entity var1 = this.worldObj.getPlayerEntity(); + 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(var8 > 16384.0D) { + this.setEntityDead(); + } + + if(this.entityAge > 600 && this.rand.nextInt(800) == 0) { + if(var8 < 1024.0D) { + this.entityAge = 0; + } else { + this.setEntityDead(); + } + } + } + + if(this.health <= 0) { + this.isJumping = false; + this.moveStrafing = 0.0F; + this.moveForward = 0.0F; + this.randomYawVelocity = 0.0F; + } else { + this.updatePlayerActionState(); + } + + boolean var10 = this.handleWaterMovement(); + boolean var3 = this.handleLavaMovement(); + if(this.isJumping) { + if(var10) { + this.motionY += (double)0.04F; + } else if(var3) { + this.motionY += (double)0.04F; + } else if(this.onGround) { + this.jump(); + } + } + + this.moveStrafing *= 0.98F; + this.moveForward *= 0.98F; + this.randomYawVelocity *= 0.9F; + this.moveEntityWithHeading(this.moveStrafing, this.moveForward); + List var11 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand((double)0.2F, 0.0D, (double)0.2F)); + if(var11 != null && var11.size() > 0) { + for(int var5 = 0; var5 < var11.size(); ++var5) { + Entity var12 = (Entity)var11.get(var5); + if(var12.canBePushed()) { + var12.applyEntityCollision(this); + } + } + } + + } + + protected void jump() { + this.motionY = (double)0.42F; + } + + protected void updatePlayerActionState() { + if(this.rand.nextFloat() < 0.07F) { + this.moveStrafing = (this.rand.nextFloat() - 0.5F) * this.moveSpeed; + this.moveForward = this.rand.nextFloat() * this.moveSpeed; + } + + this.isJumping = this.rand.nextFloat() < 0.01F; + if(this.rand.nextFloat() < 0.04F) { + this.randomYawVelocity = (this.rand.nextFloat() - 0.5F) * 60.0F; + } + + this.rotationYaw += this.randomYawVelocity; + this.rotationPitch = this.defaultPitch; + boolean var1 = this.handleWaterMovement(); + boolean var2 = this.handleLavaMovement(); + if(var1 || var2) { + this.isJumping = this.rand.nextFloat() < 0.8F; + } + + } + + public void onEntityDeath() { + } + + public boolean getCanSpawnHere(double var1, double var3, double var5) { + this.setPosition(var1, var3 + (double)(this.height / 2.0F), var5); + return this.worldObj.checkIfAABBIsClear(this.boundingBox) && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).size() == 0 && !this.worldObj.getIsAnyLiquid(this.boundingBox); + } + + protected void kill() { + this.attackEntityFrom((Entity)null, 4); + } +} diff --git a/src/net/minecraft/src/EntityMinecart.java b/src/net/minecraft/src/EntityMinecart.java new file mode 100644 index 0000000..34926bb --- /dev/null +++ b/src/net/minecraft/src/EntityMinecart.java @@ -0,0 +1,520 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityMinecart extends Entity implements IInventory { + private ItemStack[] cargoItems; + public int damageTaken; + public int timeSinceHit; + public int forwardDirection; + private boolean isInReverse; + 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}}}; + + public EntityMinecart(World var1) { + super(var1); + this.cargoItems = new ItemStack[36]; + this.damageTaken = 0; + this.timeSinceHit = 0; + this.forwardDirection = 1; + this.isInReverse = false; + this.preventEntitySpawning = true; + this.setSize(0.98F, 0.7F); + this.yOffset = this.height / 2.0F; + this.canTriggerWalking = false; + } + + public AxisAlignedBB getCollisionBox(Entity var1) { + return var1.boundingBox; + } + + public AxisAlignedBB getBoundingBox() { + return this.boundingBox; + } + + 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 getYOffset() { + return (double)this.height * 0.2D; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + this.forwardDirection = -this.forwardDirection; + this.timeSinceHit = 10; + this.damageTaken += var2 * 10; + if(this.damageTaken > 40) { + this.entityDropItem(Item.minecart.shiftedIndex, 1, 0.0F); + this.setEntityDead(); + } + + return true; + } + + public boolean canBeCollidedWith() { + return !this.isDead; + } + + public void setEntityDead() { + 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.itemDmg)); + 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.setEntityDead(); + } + + public void onUpdate() { + if(this.timeSinceHit > 0) { + --this.timeSinceHit; + } + + if(this.damageTaken > 0) { + --this.damageTaken; + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.motionY -= (double)0.04F; + 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 - 1, var3) == Block.minecartTrack.blockID) { + --var2; + } + + double var4 = 0.4D; + double var6 = 1.0D / 128.0D; + if(this.worldObj.getBlockId(var1, var2, var3) == Block.minecartTrack.blockID) { + Vec3D var8 = this.getPos(this.posX, this.posY, this.posZ); + int var9 = this.worldObj.getBlockMetadata(var1, var2, var3); + this.posY = (double)var2; + 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[][] var10 = matrix[var9]; + double var11 = (double)(var10[1][0] - var10[0][0]); + double var13 = (double)(var10[1][2] - var10[0][2]); + double var15 = Math.sqrt(var11 * var11 + var13 * var13); + double var17 = this.motionX * var11 + this.motionZ * var13; + if(var17 < 0.0D) { + var11 = -var11; + var13 = -var13; + } + + double var19 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.motionX = var19 * var11 / var15; + this.motionZ = var19 * var13 / var15; + double var21 = 0.0D; + double var23 = (double)var1 + 0.5D + (double)var10[0][0] * 0.5D; + double var25 = (double)var3 + 0.5D + (double)var10[0][2] * 0.5D; + double var27 = (double)var1 + 0.5D + (double)var10[1][0] * 0.5D; + double var29 = (double)var3 + 0.5D + (double)var10[1][2] * 0.5D; + var11 = var27 - var23; + var13 = var29 - var25; + double var31; + double var33; + if(var11 == 0.0D) { + this.posX = (double)var1 + 0.5D; + var21 = this.posZ - (double)var3; + } else if(var13 == 0.0D) { + this.posZ = (double)var3 + 0.5D; + var21 = this.posX - (double)var1; + } else { + var31 = this.posX - var23; + var33 = this.posZ - var25; + double var35 = (var31 * var11 + var33 * var13) * 2.0D; + var21 = var35; + } + + this.posX = var23 + var11 * var21; + this.posZ = var25 + var13 * var21; + this.setPosition(this.posX, this.posY + (double)this.yOffset, this.posZ); + var31 = this.motionX; + var33 = this.motionZ; + if(this.riddenByEntity != null) { + var31 *= 0.75D; + var33 *= 0.75D; + } + + if(var31 < -var4) { + var31 = -var4; + } + + if(var31 > var4) { + var31 = var4; + } + + if(var33 < -var4) { + var33 = -var4; + } + + if(var33 > var4) { + var33 = var4; + } + + this.moveEntity(var31, 0.0D, var33); + if(var10[0][1] != 0 && MathHelper.floor_double(this.posX) - var1 == var10[0][0] && MathHelper.floor_double(this.posZ) - var3 == var10[0][2]) { + this.setPosition(this.posX, this.posY + (double)var10[0][1], this.posZ); + } else if(var10[1][1] != 0 && MathHelper.floor_double(this.posX) - var1 == var10[1][0] && MathHelper.floor_double(this.posZ) - var3 == var10[1][2]) { + this.setPosition(this.posX, this.posY + (double)var10[1][1], this.posZ); + } + + 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; + } + + Vec3D var41 = this.getPos(this.posX, this.posY, this.posZ); + if(var41 != null && var8 != null) { + double var36 = (var8.yCoord - var41.yCoord) * 0.05D; + var19 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + if(var19 > 0.0D) { + this.motionX = this.motionX / var19 * (var19 + var36); + this.motionZ = this.motionZ / var19 * (var19 + var36); + } + + this.setPosition(this.posX, var41.yCoord, this.posZ); + } + + int var42 = MathHelper.floor_double(this.posX); + int var37 = MathHelper.floor_double(this.posZ); + if(var42 != var1 || var37 != var3) { + var19 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.motionX = var19 * (double)(var42 - var1); + this.motionZ = var19 * (double)(var37 - var3); + } + } else { + if(this.motionX < -var4) { + this.motionX = -var4; + } + + if(this.motionX > var4) { + this.motionX = var4; + } + + if(this.motionZ < -var4) { + this.motionZ = -var4; + } + + if(this.motionZ > var4) { + this.motionZ = var4; + } + + 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; + } + } + + this.rotationPitch = 0.0F; + double var38 = this.prevPosX - this.posX; + double var39 = this.prevPosZ - this.posZ; + if(var38 * var38 + var39 * var39 > 0.001D) { + this.rotationYaw = (float)(Math.atan2(var39, var38) * 180.0D / Math.PI); + if(this.isInReverse) { + this.rotationYaw += 180.0F; + } + } + + double var12; + for(var12 = (double)(this.rotationYaw - this.prevRotationYaw); var12 >= 180.0D; var12 -= 360.0D) { + } + + while(var12 < -180.0D) { + var12 += 360.0D; + } + + if(var12 < -170.0D || var12 >= 170.0D) { + this.rotationYaw += 180.0F; + this.isInReverse = !this.isInReverse; + } + + this.setRotation(this.rotationYaw, this.rotationPitch); + List var14 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand((double)0.2F, 0.0D, (double)0.2F)); + if(var14 != null && var14.size() > 0) { + for(int var40 = 0; var40 < var14.size(); ++var40) { + Entity var16 = (Entity)var14.get(var40); + if(var16 != this.riddenByEntity && var16.canBePushed() && var16 instanceof EntityMinecart) { + var16.applyEntityCollision(this); + } + } + } + + if(this.riddenByEntity != null && this.riddenByEntity.isDead) { + this.riddenByEntity = null; + } + + } + + public Vec3D getPosOffset(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(this.worldObj.getBlockId(var9, var10 - 1, var11) == Block.minecartTrack.blockID) { + --var10; + } + + if(this.worldObj.getBlockId(var9, var10, var11) == Block.minecartTrack.blockID) { + int var12 = this.worldObj.getBlockMetadata(var9, var10, var11); + var3 = (double)var10; + if(var12 >= 2 && var12 <= 5) { + var3 = (double)(var10 + 1); + } + + int[][] var13 = matrix[var12]; + 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); + var14 /= var18; + var16 /= var18; + var1 += var14 * var7; + var5 += var16 * var7; + if(var13[0][1] != 0 && MathHelper.floor_double(var1) - var9 == var13[0][0] && MathHelper.floor_double(var5) - var11 == var13[0][2]) { + var3 += (double)var13[0][1]; + } else if(var13[1][1] != 0 && MathHelper.floor_double(var1) - var9 == var13[1][0] && MathHelper.floor_double(var5) - var11 == var13[1][2]) { + var3 += (double)var13[1][1]; + } + + return this.getPos(var1, var3, var5); + } else { + return null; + } + } + + public Vec3D getPos(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(this.worldObj.getBlockId(var7, var8 - 1, var9) == Block.minecartTrack.blockID) { + --var8; + } + + if(this.worldObj.getBlockId(var7, var8, var9) == Block.minecartTrack.blockID) { + int var10 = this.worldObj.getBlockMetadata(var7, var8, var9); + var3 = (double)var8; + if(var10 >= 2 && var10 <= 5) { + var3 = (double)(var8 + 1); + } + + int[][] var11 = matrix[var10]; + double var12 = 0.0D; + double var14 = (double)var7 + 0.5D + (double)var11[0][0] * 0.5D; + double var16 = (double)var8 + 0.5D + (double)var11[0][1] * 0.5D; + double var18 = (double)var9 + 0.5D + (double)var11[0][2] * 0.5D; + double var20 = (double)var7 + 0.5D + (double)var11[1][0] * 0.5D; + double var22 = (double)var8 + 0.5D + (double)var11[1][1] * 0.5D; + double var24 = (double)var9 + 0.5D + (double)var11[1][2] * 0.5D; + double var26 = var20 - var14; + double var28 = (var22 - var16) * 2.0D; + double var30 = var24 - var18; + if(var26 == 0.0D) { + var1 = (double)var7 + 0.5D; + var12 = var5 - (double)var9; + } else if(var30 == 0.0D) { + var5 = (double)var9 + 0.5D; + var12 = var1 - (double)var7; + } else { + double var32 = var1 - var14; + double var34 = var5 - var18; + double var36 = (var32 * var26 + var34 * var30) * 2.0D; + var12 = var36; + } + + var1 = var14 + var26 * var12; + var3 = var16 + var28 * var12; + var5 = var18 + var30 * var12; + if(var28 < 0.0D) { + ++var3; + } + + if(var28 > 0.0D) { + var3 += 0.5D; + } + + return Vec3D.createVector(var1, var3, var5); + } else { + return null; + } + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + NBTTagList var2 = new NBTTagList(); + + for(int var3 = 0; var3 < this.cargoItems.length; ++var3) { + if(this.cargoItems[var3] != null) { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.cargoItems[var3].writeToNBT(var4); + var2.setTag(var4); + } + } + + var1.setTag("Items", var2); + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + NBTTagList var2 = var1.getTagList("Items"); + this.cargoItems = 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.cargoItems.length) { + this.cargoItems[var5] = new ItemStack(var4); + } + } + + } + + public void applyEntityCollision(Entity var1) { + if(var1 != this.riddenByEntity) { + 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.motionX + this.motionX) / 2.0D; + double var12 = (var1.motionZ + this.motionZ) / 2.0D; + this.motionX = this.motionZ = 0.0D; + this.addVelocity(var10 - var2, 0.0D, var12 - var4); + var1.motionX = var1.motionZ = 0.0D; + var1.addVelocity(var10 + var2, 0.0D, var12 + var4); + } else { + this.addVelocity(-var2, 0.0D, -var4); + var1.addVelocity(var2 / 4.0D, 0.0D, var4 / 4.0D); + } + } + + } + } + + public int getSizeInventory() { + return 27; + } + + public ItemStack getStackInSlot(int var1) { + return this.cargoItems[var1]; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.cargoItems[var1] != null) { + ItemStack var3; + if(this.cargoItems[var1].stackSize <= var2) { + var3 = this.cargoItems[var1]; + this.cargoItems[var1] = null; + return var3; + } else { + var3 = this.cargoItems[var1].splitStack(var2); + if(this.cargoItems[var1].stackSize == 0) { + this.cargoItems[var1] = null; + } + + return var3; + } + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.cargoItems[var1] = var2; + if(var2 != null && var2.stackSize > this.getInventoryStackLimit()) { + var2.stackSize = this.getInventoryStackLimit(); + } + + } + + public String getInvName() { + return "Minecart"; + } + + public int getInventoryStackLimit() { + return 64; + } + + public void onInventoryChanged() { + } + + public boolean interact(EntityPlayer var1) { + var1.mountEntity(this); + return true; + } +} diff --git a/src/net/minecraft/src/EntityMonster.java b/src/net/minecraft/src/EntityMonster.java new file mode 100644 index 0000000..0e0fc19 --- /dev/null +++ b/src/net/minecraft/src/EntityMonster.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +public class EntityMonster extends EntityCreature { + protected int attackStrength = 2; + + public EntityMonster(World var1) { + super(var1); + this.health = 20; + } + + public void onLivingUpdate() { + float var1 = this.getEntityBrightness(1.0F); + if(var1 > 0.5F) { + this.entityAge += 2; + } + + super.onLivingUpdate(); + } + + public void onUpdate() { + super.onUpdate(); + if(this.worldObj.difficultySetting == 0) { + this.setEntityDead(); + } + + } + + protected Entity findPlayerToAttack() { + double var1 = this.worldObj.playerEntity.getDistanceSqToEntity(this); + double var3 = 16.0D; + return var1 < var3 * var3 && this.canEntityBeSeen(this.worldObj.playerEntity) ? this.worldObj.playerEntity : null; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + if(super.attackEntityFrom(var1, var2)) { + if(var1 != this) { + this.playerToAttack = var1; + } + + return true; + } else { + return false; + } + } + + protected void attackEntity(Entity var1, float var2) { + if((double)var2 < 2.5D && var1.boundingBox.maxY > this.boundingBox.minY && var1.boundingBox.minY < this.boundingBox.maxY) { + this.attackTime = 20; + var1.attackEntityFrom(this, this.attackStrength); + } + + } + + protected float getBlockPathWeight(int var1, int var2, int var3) { + return 0.5F - this.worldObj.getBrightness(var1, var2, var3); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + public boolean getCanSpawnHere(double var1, double var3, double var5) { + int var7 = this.worldObj.getBlockLightValue(MathHelper.floor_double(var1), MathHelper.floor_double(var3), MathHelper.floor_double(var5)); + return var7 <= this.rand.nextInt(8) && super.getCanSpawnHere(var1, var3, var5); + } +} diff --git a/src/net/minecraft/src/EntityPainting.java b/src/net/minecraft/src/EntityPainting.java new file mode 100644 index 0000000..3090aa2 --- /dev/null +++ b/src/net/minecraft/src/EntityPainting.java @@ -0,0 +1,212 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class EntityPainting extends Entity { + private int tickCounter; + public int direction; + private int xPosition; + private int yPosition; + private int zPosition; + public EnumArt art; + + public EntityPainting(World var1) { + super(var1); + this.tickCounter = 0; + this.direction = 0; + this.yOffset = 0.0F; + this.setSize(0.5F, 0.5F); + } + + public EntityPainting(World var1, int var2, int var3, int var4, int var5) { + this(var1); + this.xPosition = var2; + this.yPosition = var3; + this.zPosition = var4; + 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.size() > 0) { + this.art = (EnumArt)var6.get(this.rand.nextInt(var6.size())); + } + + this.setDirection(var5); + } + + public void setDirection(int var1) { + this.direction = var1; + this.prevRotationYaw = this.rotationYaw = (float)(var1 * 90); + float var2 = (float)this.art.sizeX; + float var3 = (float)this.art.sizeY; + float var4 = (float)this.art.sizeX; + if(var1 != 0 && var1 != 2) { + var2 = 0.5F; + } else { + var4 = 0.5F; + } + + 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 == 0) { + var7 -= var8; + } + + if(var1 == 1) { + var5 -= var8; + } + + if(var1 == 2) { + var7 += var8; + } + + if(var1 == 3) { + var5 += var8; + } + + if(var1 == 0) { + var5 -= this.getArtSize(this.art.sizeX); + } + + if(var1 == 1) { + var7 += this.getArtSize(this.art.sizeX); + } + + if(var1 == 2) { + var5 += this.getArtSize(this.art.sizeX); + } + + if(var1 == 3) { + var7 -= this.getArtSize(this.art.sizeX); + } + + var6 += this.getArtSize(this.art.sizeY); + this.setPosition((double)var5, (double)var6, (double)var7); + float var9 = -(0.1F / 16.0F); + 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 getArtSize(int var1) { + return var1 == 32 ? 0.5F : (var1 == 64 ? 0.5F : 0.0F); + } + + public void onUpdate() { + if(this.tickCounter++ == 100 && !this.onValidSurface()) { + this.tickCounter = 0; + this.setEntityDead(); + this.worldObj.spawnEntityInWorld(new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, new ItemStack(Item.painting))); + } + + } + + public boolean onValidSurface() { + if(this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).size() > 0) { + return false; + } else { + int var1 = this.art.sizeX / 16; + int var2 = this.art.sizeY / 16; + int var3 = this.xPosition; + int var4 = this.yPosition; + int var5 = this.zPosition; + if(this.direction == 0) { + var3 = MathHelper.floor_double(this.posX - (double)((float)this.art.sizeX / 32.0F)); + } + + if(this.direction == 1) { + var5 = MathHelper.floor_double(this.posZ - (double)((float)this.art.sizeX / 32.0F)); + } + + if(this.direction == 2) { + var3 = MathHelper.floor_double(this.posX - (double)((float)this.art.sizeX / 32.0F)); + } + + if(this.direction == 3) { + var5 = MathHelper.floor_double(this.posZ - (double)((float)this.art.sizeX / 32.0F)); + } + + var4 = MathHelper.floor_double(this.posY - (double)((float)this.art.sizeY / 32.0F)); + + int var7; + for(int var6 = 0; var6 < var1; ++var6) { + for(var7 = 0; var7 < var2; ++var7) { + Material var8; + if(this.direction != 0 && this.direction != 2) { + 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); + + for(var7 = 0; var7 < var9.size(); ++var7) { + if(var9.get(var7) instanceof EntityPainting) { + return false; + } + } + + return true; + } + } + + public boolean canBeCollidedWith() { + return true; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + this.setEntityDead(); + this.worldObj.spawnEntityInWorld(new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, new ItemStack(Item.painting))); + return true; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setByte("Dir", (byte)this.direction); + var1.setString("Motive", this.art.title); + var1.setInteger("TileX", this.xPosition); + var1.setInteger("TileY", this.yPosition); + var1.setInteger("TileZ", this.zPosition); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.direction = var1.getByte("Dir"); + this.xPosition = var1.getInteger("TileX"); + this.yPosition = var1.getInteger("TileY"); + this.zPosition = var1.getInteger("TileZ"); + 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; + } + + this.setDirection(this.direction); + } +} diff --git a/src/net/minecraft/src/EntityPickupFX.java b/src/net/minecraft/src/EntityPickupFX.java new file mode 100644 index 0000000..7faaec3 --- /dev/null +++ b/src/net/minecraft/src/EntityPickupFX.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class EntityPickupFX extends EntityFX { + private Entity entityToPickUp; + private EntityLiving entityPickingUp; + private int age = 0; + private int maxAge = 0; + private float yOffs; + + public EntityPickupFX(World var1, Entity var2, EntityLiving 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); + float var30 = this.worldObj.getBrightness(var27, var28, var29); + var21 -= interpPosX; + var23 -= interpPosY; + var25 -= interpPosZ; + GL11.glColor4f(var30, var30, var30, 1.0F); + 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.setEntityDead(); + } + + } + + public int getFXLayer() { + return 2; + } +} diff --git a/src/net/minecraft/src/EntityPig.java b/src/net/minecraft/src/EntityPig.java new file mode 100644 index 0000000..805c3fd --- /dev/null +++ b/src/net/minecraft/src/EntityPig.java @@ -0,0 +1,47 @@ +package net.minecraft.src; + +public class EntityPig extends EntityAnimal { + public boolean saddled = false; + + public EntityPig(World var1) { + super(var1); + this.texture = "/mob/pig.png"; + this.setSize(0.9F, 0.9F); + this.saddled = false; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setBoolean("Saddle", this.saddled); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.saddled = var1.getBoolean("Saddle"); + } + + protected String getLivingSound() { + return "mob.pig"; + } + + protected String getHurtSound() { + return "mob.pig"; + } + + protected String getDeathSound() { + return "mob.pigdeath"; + } + + public boolean interact(EntityPlayer var1) { + if(this.saddled) { + var1.mountEntity(this); + return true; + } else { + return false; + } + } + + protected int getDropItemId() { + return Item.porkRaw.shiftedIndex; + } +} diff --git a/src/net/minecraft/src/EntityPlayer.java b/src/net/minecraft/src/EntityPlayer.java new file mode 100644 index 0000000..b7db196 --- /dev/null +++ b/src/net/minecraft/src/EntityPlayer.java @@ -0,0 +1,219 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityPlayer extends EntityLiving { + public InventoryPlayer inventory = new InventoryPlayer(this); + public byte unusedMiningCooldown = 0; + public int score = 0; + public float prevCameraYaw; + public float cameraYaw; + protected String username; + private int damageRemainder = 0; + + public EntityPlayer(World var1) { + super(var1); + this.setPositionAndRotation((double)var1.spawnX + 0.5D, (double)var1.spawnY, (double)var1.spawnZ + 0.5D, 0.0F, 0.0F); + this.yOffset = 1.62F; + this.health = 20; + this.entityType = "humanoid"; + this.unusedRotation = 180.0F; + this.fireResistance = 20; + this.texture = "/char.png"; + } + + public void updateRidden() { + super.updateRidden(); + this.prevCameraYaw = this.cameraYaw; + this.cameraYaw = 0.0F; + } + + public void preparePlayerToSpawn() { + this.yOffset = 1.62F; + this.setSize(0.6F, 1.8F); + super.preparePlayerToSpawn(); + if(this.worldObj != null) { + this.worldObj.playerEntity = this; + } + + this.health = 20; + this.deathTime = 0; + } + + public void onLivingUpdate() { + this.worldObj.playMusic(this.posX, this.posY, this.posZ, "calm", 0.0F); + if(this.worldObj.difficultySetting == 0 && this.health < 20 && this.ticksExisted % 20 * 4 == 0) { + this.heal(1); + } + + this.inventory.decrementAnimations(); + this.prevCameraYaw = this.cameraYaw; + super.onLivingUpdate(); + 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.health <= 0) { + var1 = 0.0F; + } + + if(this.onGround || this.health <= 0) { + var2 = 0.0F; + } + + this.cameraYaw += (var1 - this.cameraYaw) * 0.4F; + this.cameraPitch += (var2 - this.cameraPitch) * 0.8F; + if(this.health > 0) { + List var3 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expand(1.0D, 0.0D, 1.0D)); + if(var3 != null) { + for(int var4 = 0; var4 < var3.size(); ++var4) { + this.collideWithPlayer((Entity)var3.get(var4)); + } + } + } + + } + + private void collideWithPlayer(Entity var1) { + var1.onCollideWithPlayer(this); + } + + public int getScore() { + return this.score; + } + + public void onDeath(Entity 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); + } + + 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; + } + + public void addToPlayerScore(Entity var1, int var2) { + this.score += var2; + } + + public void dropPlayerItem(ItemStack var1) { + this.dropPlayerItemWithRandomChoice(var1, false); + } + + public void dropPlayerItemWithRandomChoice(ItemStack var1, boolean var2) { + if(var1 != null) { + EntityItem var3 = new EntityItem(this.worldObj, this.posX, this.posY - (double)0.3F, 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.worldObj.spawnEntityInWorld(var3); + } + } + + public float getCurrentPlayerStrVsBlock(Block var1) { + float var2 = this.inventory.getStrVsBlock(var1); + if(this.isInsideOfMaterial(Material.water)) { + var2 /= 5.0F; + } + + if(!this.onGround) { + var2 /= 5.0F; + } + + return var2; + } + + public boolean canHarvestBlock(Block var1) { + return this.inventory.canHarvestBlock(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void displayGUIChest(IInventory var1) { + } + + public void displayWorkbenchGUI() { + } + + public void onItemPickup(Entity var1) { + } + + protected float getEyeHeight() { + return 0.12F; + } + + public boolean attackEntityFrom(Entity var1, int var2) { + this.entityAge = 0; + if(this.health <= 0) { + return false; + } else if((float)this.heartsLife > (float)this.heartsHalvesLife / 2.0F) { + return false; + } else { + if(var1 instanceof EntityMonster || var1 instanceof EntityArrow) { + if(this.worldObj.difficultySetting == 0) { + var2 = 0; + } + + if(this.worldObj.difficultySetting == 1) { + var2 = var2 / 3 + 1; + } + + if(this.worldObj.difficultySetting == 3) { + var2 = var2 * 3 / 2; + } + } + + int var3 = 25 - this.inventory.getTotalArmorValue(); + int var4 = var2 * var3 + this.damageRemainder; + this.inventory.damageArmor(var2); + var2 = var4 / 25; + this.damageRemainder = var4 % 25; + return var2 == 0 ? false : super.attackEntityFrom(var1, var2); + } + } + + public void displayGUIFurnace(TileEntityFurnace var1) { + } + + public void displayGUIEditSign(TileEntitySign var1) { + } + + public void interactWithEntity(Entity var1) { + } +} diff --git a/src/net/minecraft/src/EntityPlayerSP.java b/src/net/minecraft/src/EntityPlayerSP.java new file mode 100644 index 0000000..7b791e1 --- /dev/null +++ b/src/net/minecraft/src/EntityPlayerSP.java @@ -0,0 +1,118 @@ +package net.minecraft.src; + +public class EntityPlayerSP extends EntityPlayer { + public MovementInput movementInput; + private Minecraft mc; + + public EntityPlayerSP(Minecraft var1, World var2, Session var3) { + super(var2); + this.mc = var1; + if(var2 != null) { + if(var2.playerEntity != null) { + var2.setEntityDead(var2.playerEntity); + } + + var2.playerEntity = this; + } + + if(var3 != null && var3.username != null && var3.username.length() > 0) { + this.skinUrl = "http://www.minecraft.net/skin/" + var3.username + ".png"; + } + + this.username = var3.username; + } + + public void updatePlayerActionState() { + this.moveStrafing = this.movementInput.moveStrafe; + this.moveForward = this.movementInput.moveForward; + this.isJumping = this.movementInput.jump; + } + + public void onLivingUpdate() { + this.movementInput.updatePlayerMoveState(this); + super.onLivingUpdate(); + } + + public void resetPlayerKeyState() { + this.movementInput.resetKeyState(); + } + + public void handleKeyPress(int var1, boolean var2) { + this.movementInput.checkKeyForMovementInput(var1, var2); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setInteger("Score", this.score); + var1.setTag("Inventory", this.inventory.writeToNBT(new NBTTagList())); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.score = var1.getInteger("Score"); + NBTTagList var2 = var1.getTagList("Inventory"); + this.inventory.readFromNBT(var2); + } + + public void displayGUIChest(IInventory var1) { + this.mc.displayGuiScreen(new GuiChest(this.inventory, var1)); + } + + public void displayGUIEditSign(TileEntitySign var1) { + this.mc.displayGuiScreen(new GuiEditSign(var1)); + } + + public void displayWorkbenchGUI() { + this.mc.displayGuiScreen(new GuiCrafting(this.inventory)); + } + + public void displayGUIFurnace(TileEntityFurnace var1) { + this.mc.displayGuiScreen(new GuiFurnace(this.inventory, var1)); + } + + public ItemStack getCurrentEquippedItem() { + return this.inventory.getCurrentItem(); + } + + public void displayGUIInventory() { + this.inventory.setInventorySlotContents(this.inventory.currentItem, (ItemStack)null); + } + + public void attackEntity(Entity var1) { + int var2 = this.inventory.getDamageVsEntity(var1); + if(var2 > 0) { + var1.attackEntityFrom(this, var2); + ItemStack var3 = this.getCurrentEquippedItem(); + if(var3 != null && var1 instanceof EntityLiving) { + var3.hitEntity((EntityLiving)var1); + if(var3.stackSize <= 0) { + var3.onItemDestroyedByUse(this); + this.displayGUIInventory(); + } + } + } + + } + + public void onItemPickup(Entity var1) { + this.mc.effectRenderer.addEffect(new EntityPickupFX(this.mc.theWorld, var1, this, -0.5F)); + } + + public int getPlayerArmorValue() { + return this.inventory.getTotalArmorValue(); + } + + public void interactWithEntity(Entity var1) { + if(!var1.interact(this)) { + ItemStack var2 = this.getCurrentEquippedItem(); + if(var2 != null && var1 instanceof EntityLiving) { + var2.useItemOnEntity((EntityLiving)var1); + if(var2.stackSize <= 0) { + var2.onItemDestroyedByUse(this); + this.displayGUIInventory(); + } + } + + } + } +} diff --git a/src/net/minecraft/src/EntityRainFX.java b/src/net/minecraft/src/EntityRainFX.java new file mode 100644 index 0000000..1b3c2bc --- /dev/null +++ b/src/net/minecraft/src/EntityRainFX.java @@ -0,0 +1,53 @@ +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.particleTextureIndex = 16; + this.setSize(0.01F, 0.01F); + this.particleGravity = 0.06F; + this.particleMaxAge = (int)(8.0D / (Math.random() * 0.8D + 0.2D)); + } + + public void renderParticle(Tessellator var1, float var2, float var3, float var4, float var5, float var6, float var7) { + super.renderParticle(var1, var2, var3, var4, var5, var6, var7); + } + + 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.setEntityDead(); + } + + if(this.onGround) { + if(Math.random() < 0.5D) { + this.setEntityDead(); + } + + 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.getIsLiquid() || var1.isSolid()) { + double var2 = (double)((float)(MathHelper.floor_double(this.posY) + 1) - BlockFluid.getPercentAir(this.worldObj.getBlockMetadata(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posY), MathHelper.floor_double(this.posZ)))); + if(this.posY < var2) { + this.setEntityDead(); + } + } + + } +} diff --git a/src/net/minecraft/src/EntityRenderer.java b/src/net/minecraft/src/EntityRenderer.java new file mode 100644 index 0000000..7d2ce97 --- /dev/null +++ b/src/net/minecraft/src/EntityRenderer.java @@ -0,0 +1,623 @@ +package net.minecraft.src; + +import java.nio.FloatBuffer; +import java.util.List; +import java.util.Random; +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 { + private Minecraft mc; + private boolean isDisplayActive = false; + private float farPlaneDistance = 0.0F; + public ItemRenderer itemRenderer; + private int rendererUpdateCount; + private Entity pointedEntity = null; + private int mouseDX; + private int mouseDY; + private Random random = new Random(); + volatile int unusedInt1 = 0; + volatile int unusedInt2 = 0; + FloatBuffer fogColorBuffer = GLAllocation.createFloatBuffer(16); + float fogColorRed; + float fogColorGreen; + float fogColorBlue; + private float prevFogColor; + private float fogColor; + + public EntityRenderer(Minecraft var1) { + this.mc = var1; + this.itemRenderer = new ItemRenderer(var1); + } + + public void updateRenderer() { + this.prevFogColor = this.fogColor; + float var1 = this.mc.theWorld.getBrightness(MathHelper.floor_double(this.mc.thePlayer.posX), MathHelper.floor_double(this.mc.thePlayer.posY), MathHelper.floor_double(this.mc.thePlayer.posZ)); + float var2 = (float)(3 - this.mc.gameSettings.renderDistance) / 3.0F; + float var3 = var1 * (1.0F - var2) + var2; + this.fogColor += (var3 - this.fogColor) * 0.1F; + ++this.rendererUpdateCount; + this.itemRenderer.updateEquippedItem(); + if(this.mc.isRaining) { + this.addRainParticles(); + } + + } + + private Vec3D getPlayerPosition(float var1) { + EntityPlayerSP var2 = this.mc.thePlayer; + double var3 = var2.prevPosX + (var2.posX - var2.prevPosX) * (double)var1; + double var5 = var2.prevPosY + (var2.posY - var2.prevPosY) * (double)var1; + double var7 = var2.prevPosZ + (var2.posZ - var2.prevPosZ) * (double)var1; + return Vec3D.createVector(var3, var5, var7); + } + + private void getMouseOver(float var1) { + EntityPlayerSP var2 = this.mc.thePlayer; + float var3 = var2.prevRotationPitch + (var2.rotationPitch - var2.prevRotationPitch) * var1; + float var4 = var2.prevRotationYaw + (var2.rotationYaw - var2.prevRotationYaw) * var1; + Vec3D var5 = this.getPlayerPosition(var1); + float var6 = MathHelper.cos(-var4 * ((float)Math.PI / 180.0F) - (float)Math.PI); + float var7 = MathHelper.sin(-var4 * ((float)Math.PI / 180.0F) - (float)Math.PI); + float var8 = -MathHelper.cos(-var3 * ((float)Math.PI / 180.0F)); + float var9 = MathHelper.sin(-var3 * ((float)Math.PI / 180.0F)); + float var10 = var7 * var8; + float var12 = var6 * var8; + double var13 = (double)this.mc.playerController.getBlockReachDistance(); + Vec3D var15 = var5.addVector((double)var10 * var13, (double)var9 * var13, (double)var12 * var13); + this.mc.objectMouseOver = this.mc.theWorld.rayTraceBlocks(var5, var15); + double var16 = var13; + var5 = this.getPlayerPosition(var1); + if(this.mc.objectMouseOver != null) { + var16 = this.mc.objectMouseOver.hitVec.distanceTo(var5); + } + + if(this.mc.playerController instanceof PlayerControllerCreative) { + var13 = 32.0D; + } else { + if(var16 > 3.0D) { + var16 = 3.0D; + } + + var13 = var16; + } + + var15 = var5.addVector((double)var10 * var13, (double)var9 * var13, (double)var12 * var13); + this.pointedEntity = null; + List var18 = this.mc.theWorld.getEntitiesWithinAABBExcludingEntity(var2, var2.boundingBox.addCoord((double)var10 * var13, (double)var9 * var13, (double)var12 * var13)); + double var19 = 0.0D; + + for(int var21 = 0; var21 < var18.size(); ++var21) { + Entity var22 = (Entity)var18.get(var21); + if(var22.canBeCollidedWith()) { + float var23 = 0.1F; + AxisAlignedBB var24 = var22.boundingBox.expand((double)var23, (double)var23, (double)var23); + MovingObjectPosition var25 = var24.calculateIntercept(var5, var15); + if(var25 != null) { + double var26 = var5.distanceTo(var25.hitVec); + if(var26 < var19 || var19 == 0.0D) { + this.pointedEntity = var22; + var19 = var26; + } + } + } + } + + if(this.pointedEntity != null && !(this.mc.playerController instanceof PlayerControllerCreative)) { + this.mc.objectMouseOver = new MovingObjectPosition(this.pointedEntity); + } + + } + + private float getFOVModifier(float var1) { + EntityPlayerSP var2 = this.mc.thePlayer; + float var3 = 70.0F; + if(var2.isInsideOfMaterial(Material.water)) { + var3 = 60.0F; + } + + if(var2.health <= 0) { + float var4 = (float)var2.deathTime + var1; + var3 /= (1.0F - 500.0F / (var4 + 500.0F)) * 2.0F + 1.0F; + } + + return var3; + } + + private void hurtCameraEffect(float var1) { + EntityPlayerSP var2 = this.mc.thePlayer; + float var3 = (float)var2.hurtTime - var1; + float var4; + if(var2.health <= 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.gameSettings.thirdPersonView) { + EntityPlayerSP var2 = this.mc.thePlayer; + 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) { + EntityPlayerSP var2 = this.mc.thePlayer; + double var3 = var2.prevPosX + (var2.posX - var2.prevPosX) * (double)var1; + double var5 = var2.prevPosY + (var2.posY - var2.prevPosY) * (double)var1; + double var7 = var2.prevPosZ + (var2.posZ - var2.prevPosZ) * (double)var1; + if(this.mc.gameSettings.thirdPersonView) { + double var9 = 4.0D; + double var11 = (double)(-MathHelper.sin(var2.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(var2.rotationPitch / 180.0F * (float)Math.PI)) * var9; + double var13 = (double)(MathHelper.cos(var2.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(var2.rotationPitch / 180.0F * (float)Math.PI)) * var9; + double var15 = (double)(-MathHelper.sin(var2.rotationPitch / 180.0F * (float)Math.PI)) * var9; + + for(int var17 = 0; var17 < 8; ++var17) { + float var18 = (float)((var17 & 1) * 2 - 1); + float var19 = (float)((var17 >> 1 & 1) * 2 - 1); + float var20 = (float)((var17 >> 2 & 1) * 2 - 1); + var18 *= 0.1F; + var19 *= 0.1F; + var20 *= 0.1F; + MovingObjectPosition var21 = this.mc.theWorld.rayTraceBlocks(Vec3D.createVector(var3 + (double)var18, var5 + (double)var19, var7 + (double)var20), Vec3D.createVector(var3 - var11 + (double)var18 + (double)var20, var5 - var15 + (double)var19, var7 - var13 + (double)var20)); + if(var21 != null) { + double var22 = var21.hitVec.distanceTo(Vec3D.createVector(var3, var5, var7)); + if(var22 < var9) { + var9 = var22; + } + } + } + + GL11.glTranslatef(0.0F, 0.0F, (float)(-var9)); + } else { + GL11.glTranslatef(0.0F, 0.0F, -0.1F); + } + + 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); + } + + 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); + } + + GLU.gluPerspective(this.getFOVModifier(var1), (float)this.mc.displayWidth / (float)this.mc.displayHeight, 0.05F, this.farPlaneDistance); + 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); + } + + this.orientCamera(var1); + } + + private void renderHand(float var1, int var2) { + 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) { + this.itemRenderer.renderItemInFirstPerson(var1); + } + + GL11.glPopMatrix(); + if(!this.mc.gameSettings.thirdPersonView) { + this.itemRenderer.renderOverlays(var1); + this.hurtCameraEffect(var1); + } + + if(this.mc.gameSettings.viewBobbing) { + this.setupViewBobbing(var1); + } + + } + + public void updateCameraAndRender(float var1) { + if(this.isDisplayActive && !Display.isActive()) { + this.mc.displayInGameMenu(); + } + + this.isDisplayActive = Display.isActive(); + int var3; + int var9; + int var10; + if(this.mc.inGameHasFocus) { + int var2 = Mouse.getDX() * 0; + var3 = Mouse.getDY() * 0; + this.mc.mouseHelper.mouseXYChange(); + byte var4 = 1; + if(this.mc.gameSettings.invertMouse) { + var4 = -1; + } + + boolean var5 = false; + boolean var6 = false; + var9 = var2 + this.mc.mouseHelper.deltaX; + var10 = var3 - this.mc.mouseHelper.deltaY; + if(var2 != 0 || this.mouseDX != 0) { + System.out.println("xxo: " + var2 + ", " + this.mouseDX + ": " + this.mouseDX + ", xo: " + var9); + } + + if(this.mouseDX != 0) { + this.mouseDX = 0; + } + + if(this.mouseDY != 0) { + this.mouseDY = 0; + } + + if(var2 != 0) { + this.mouseDX = var2; + } + + if(var3 != 0) { + this.mouseDY = var3; + } + + this.mc.thePlayer.setAngles((float)var9, (float)(var10 * var4)); + } + + if(!this.mc.skipRenderWorld) { + ScaledResolution var7 = new ScaledResolution(this.mc.displayWidth, this.mc.displayHeight); + var3 = var7.getScaledWidth(); + int var8 = var7.getScaledHeight(); + var9 = Mouse.getX() * var3 / this.mc.displayWidth; + var10 = var8 - Mouse.getY() * var8 / this.mc.displayHeight - 1; + if(this.mc.theWorld != null) { + this.renderWorld(var1); + this.mc.ingameGUI.renderGameOverlay(var1, this.mc.currentScreen != null, var9, var10); + } else { + GL11.glViewport(0, 0, this.mc.displayWidth, this.mc.displayHeight); + GL11.glClearColor(0.0F, 0.0F, 0.0F, 0.0F); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT | GL11.GL_COLOR_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + this.setupOverlayRendering(); + } + + if(this.mc.currentScreen != null) { + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + this.mc.currentScreen.drawScreen(var9, var10, var1); + } + + } + } + + public void renderWorld(float var1) { + this.getMouseOver(var1); + EntityPlayerSP var2 = this.mc.thePlayer; + RenderGlobal var3 = this.mc.renderGlobal; + EffectRenderer var4 = this.mc.effectRenderer; + double var5 = var2.lastTickPosX + (var2.posX - var2.lastTickPosX) * (double)var1; + double var7 = var2.lastTickPosY + (var2.posY - var2.lastTickPosY) * (double)var1; + double var9 = var2.lastTickPosZ + (var2.posZ - var2.lastTickPosZ) * (double)var1; + + for(int var11 = 0; var11 < 2; ++var11) { + if(this.mc.gameSettings.anaglyph) { + if(var11 == 0) { + GL11.glColorMask(false, true, true, false); + } else { + GL11.glColorMask(true, false, false, false); + } + } + + 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.setupCameraTransform(var1, var11); + ClippingHelperImplementation.getInstance(); + if(this.mc.gameSettings.renderDistance < 2) { + this.setupFog(-1); + var3.renderSky(var1); + } + + GL11.glEnable(GL11.GL_FOG); + this.setupFog(1); + Frustrum var12 = new Frustrum(); + var12.setPosition(var5, var7, var9); + this.mc.renderGlobal.clipRenderersByFrustrum(var12, var1); + this.mc.renderGlobal.updateRenderers(var2, false); + this.setupFog(0); + GL11.glEnable(GL11.GL_FOG); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); + RenderHelper.disableStandardItemLighting(); + var3.sortAndRender(var2, 0, (double)var1); + RenderHelper.enableStandardItemLighting(); + var3.renderEntities(this.getPlayerPosition(var1), var12, var1); + var4.renderLitParticles(var2, var1); + RenderHelper.disableStandardItemLighting(); + this.setupFog(0); + var4.renderParticles(var2, var1); + if(this.mc.objectMouseOver != null && var2.isInsideOfMaterial(Material.water)) { + GL11.glDisable(GL11.GL_ALPHA_TEST); + var3.drawBlockBreaking(var2, this.mc.objectMouseOver, 0, var2.inventory.getCurrentItem(), var1); + var3.drawSelectionBox(var2, this.mc.objectMouseOver, 0, var2.inventory.getCurrentItem(), var1); + GL11.glEnable(GL11.GL_ALPHA_TEST); + } + + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + this.setupFog(0); + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); + if(this.mc.gameSettings.fancyGraphics) { + GL11.glColorMask(false, false, false, false); + int var13 = var3.sortAndRender(var2, 1, (double)var1); + GL11.glColorMask(true, true, true, true); + if(this.mc.gameSettings.anaglyph) { + if(var11 == 0) { + GL11.glColorMask(false, true, true, false); + } else { + GL11.glColorMask(true, false, false, false); + } + } + + if(var13 > 0) { + var3.renderAllRenderLists(1, (double)var1); + } + } else { + var3.sortAndRender(var2, 1, (double)var1); + } + + GL11.glDepthMask(true); + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_BLEND); + if(this.mc.objectMouseOver != null && !var2.isInsideOfMaterial(Material.water)) { + GL11.glDisable(GL11.GL_ALPHA_TEST); + var3.drawBlockBreaking(var2, this.mc.objectMouseOver, 0, var2.inventory.getCurrentItem(), var1); + var3.drawSelectionBox(var2, this.mc.objectMouseOver, 0, var2.inventory.getCurrentItem(), var1); + GL11.glEnable(GL11.GL_ALPHA_TEST); + } + + GL11.glDisable(GL11.GL_FOG); + if(this.mc.isRaining) { + this.renderRain(var1); + } + + if(this.pointedEntity != null) { + } + + this.setupFog(0); + GL11.glEnable(GL11.GL_FOG); + var3.renderClouds(var1); + GL11.glDisable(GL11.GL_FOG); + this.setupFog(1); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + this.renderHand(var1, var11); + if(!this.mc.gameSettings.anaglyph) { + return; + } + } + + GL11.glColorMask(true, true, true, false); + } + + private void addRainParticles() { + EntityPlayerSP var1 = this.mc.thePlayer; + World var2 = this.mc.theWorld; + int var3 = MathHelper.floor_double(var1.posX); + int var4 = MathHelper.floor_double(var1.posY); + int var5 = MathHelper.floor_double(var1.posZ); + byte var6 = 4; + + for(int var7 = 0; var7 < 50; ++var7) { + int var8 = var3 + this.random.nextInt(var6 * 2 + 1) - var6; + int var9 = var5 + this.random.nextInt(var6 * 2 + 1) - var6; + int var10 = var2.getTopSolidOrLiquidBlock(var8, var9); + int var11 = var2.getBlockId(var8, var10 - 1, var9); + if(var10 <= var4 + var6 && var10 >= var4 - var6) { + float var12 = this.random.nextFloat(); + float var13 = this.random.nextFloat(); + if(var11 > 0) { + this.mc.effectRenderer.addEffect(new EntityRainFX(var2, (double)((float)var8 + var12), (double)((float)var10 + 0.1F) - Block.blocksList[var11].minY, (double)((float)var9 + var13))); + } + } + } + + } + + private void renderRain(float var1) { + EntityPlayerSP var2 = this.mc.thePlayer; + World 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); + Tessellator var7 = 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.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/rain.png")); + byte var8 = 5; + + for(int var9 = var4 - var8; var9 <= var4 + var8; ++var9) { + for(int var10 = var6 - var8; var10 <= var6 + var8; ++var10) { + int var11 = var3.getTopSolidOrLiquidBlock(var9, var10); + int var12 = var5 - var8; + int var13 = var5 + var8; + if(var12 < var11) { + var12 = var11; + } + + if(var13 < var11) { + var13 = var11; + } + + float var14 = 2.0F; + if(var12 != var13) { + float var15 = ((float)((this.rendererUpdateCount + var9 * 3121 + var10 * 418711) % 32) + var1) / 32.0F; + double var16 = (double)((float)var9 + 0.5F) - var2.posX; + double var18 = (double)((float)var10 + 0.5F) - var2.posZ; + float var20 = MathHelper.sqrt_double(var16 * var16 + var18 * var18) / (float)var8; + GL11.glColor4f(1.0F, 1.0F, 1.0F, (1.0F - var20 * var20) * 0.7F); + var7.startDrawingQuads(); + var7.addVertexWithUV((double)(var9 + 0), (double)var12, (double)(var10 + 0), (double)(0.0F * var14), (double)((float)var12 * var14 / 8.0F + var15 * var14)); + var7.addVertexWithUV((double)(var9 + 1), (double)var12, (double)(var10 + 1), (double)(1.0F * var14), (double)((float)var12 * var14 / 8.0F + var15 * var14)); + var7.addVertexWithUV((double)(var9 + 1), (double)var13, (double)(var10 + 1), (double)(1.0F * var14), (double)((float)var13 * var14 / 8.0F + var15 * var14)); + var7.addVertexWithUV((double)(var9 + 0), (double)var13, (double)(var10 + 0), (double)(0.0F * var14), (double)((float)var13 * var14 / 8.0F + var15 * var14)); + var7.addVertexWithUV((double)(var9 + 0), (double)var12, (double)(var10 + 1), (double)(0.0F * var14), (double)((float)var12 * var14 / 8.0F + var15 * var14)); + var7.addVertexWithUV((double)(var9 + 1), (double)var12, (double)(var10 + 0), (double)(1.0F * var14), (double)((float)var12 * var14 / 8.0F + var15 * var14)); + var7.addVertexWithUV((double)(var9 + 1), (double)var13, (double)(var10 + 0), (double)(1.0F * var14), (double)((float)var13 * var14 / 8.0F + var15 * var14)); + var7.addVertexWithUV((double)(var9 + 0), (double)var13, (double)(var10 + 1), (double)(0.0F * var14), (double)((float)var13 * var14 / 8.0F + var15 * var14)); + var7.draw(); + } + } + } + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glDisable(GL11.GL_BLEND); + } + + public void setupOverlayRendering() { + ScaledResolution var1 = new ScaledResolution(this.mc.displayWidth, this.mc.displayHeight); + int var2 = var1.getScaledWidth(); + int var3 = var1.getScaledHeight(); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glOrtho(0.0D, (double)var2, (double)var3, 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) { + World var2 = this.mc.theWorld; + EntityPlayerSP var3 = this.mc.thePlayer; + float var4 = 1.0F / (float)(4 - this.mc.gameSettings.renderDistance); + var4 = 1.0F - (float)Math.pow((double)var4, 0.25D); + Vec3D var5 = var2.getSkyColor(var1); + float var6 = (float)var5.xCoord; + float var7 = (float)var5.yCoord; + float var8 = (float)var5.zCoord; + Vec3D var9 = var2.getFogColor(var1); + this.fogColorRed = (float)var9.xCoord; + this.fogColorGreen = (float)var9.yCoord; + this.fogColorBlue = (float)var9.zCoord; + this.fogColorRed += (var6 - this.fogColorRed) * var4; + this.fogColorGreen += (var7 - this.fogColorGreen) * var4; + this.fogColorBlue += (var8 - this.fogColorBlue) * var4; + if(var3.isInsideOfMaterial(Material.water)) { + this.fogColorRed = 0.02F; + this.fogColorGreen = 0.02F; + this.fogColorBlue = 0.2F; + } else if(var3.isInsideOfMaterial(Material.lava)) { + this.fogColorRed = 0.6F; + this.fogColorGreen = 0.1F; + this.fogColorBlue = 0.0F; + } + + float var10 = this.prevFogColor + (this.fogColor - this.prevFogColor) * var1; + this.fogColorRed *= var10; + this.fogColorGreen *= var10; + this.fogColorBlue *= var10; + if(this.mc.gameSettings.anaglyph) { + float var11 = (this.fogColorRed * 30.0F + this.fogColorGreen * 59.0F + this.fogColorBlue * 11.0F) / 100.0F; + float var12 = (this.fogColorRed * 30.0F + this.fogColorGreen * 70.0F) / 100.0F; + float var13 = (this.fogColorRed * 30.0F + this.fogColorBlue * 70.0F) / 100.0F; + this.fogColorRed = var11; + this.fogColorGreen = var12; + this.fogColorBlue = var13; + } + + GL11.glClearColor(this.fogColorRed, this.fogColorGreen, this.fogColorBlue, 0.0F); + } + + private void setupFog(int var1) { + EntityPlayerSP var2 = this.mc.thePlayer; + 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); + float var3; + float var4; + float var5; + float var6; + float var7; + float var8; + if(var2.isInsideOfMaterial(Material.water)) { + GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP); + GL11.glFogf(GL11.GL_FOG_DENSITY, 0.1F); + var3 = 0.4F; + var4 = 0.4F; + var5 = 0.9F; + if(this.mc.gameSettings.anaglyph) { + var6 = (var3 * 30.0F + var4 * 59.0F + var5 * 11.0F) / 100.0F; + var7 = (var3 * 30.0F + var4 * 70.0F) / 100.0F; + var8 = (var3 * 30.0F + var5 * 70.0F) / 100.0F; + } + } else if(var2.isInsideOfMaterial(Material.lava)) { + GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_EXP); + GL11.glFogf(GL11.GL_FOG_DENSITY, 2.0F); + var3 = 0.4F; + var4 = 0.3F; + var5 = 0.3F; + if(this.mc.gameSettings.anaglyph) { + var6 = (var3 * 30.0F + var4 * 59.0F + var5 * 11.0F) / 100.0F; + var7 = (var3 * 30.0F + var4 * 70.0F) / 100.0F; + var8 = (var3 * 30.0F + var5 * 70.0F) / 100.0F; + } + } else { + GL11.glFogi(GL11.GL_FOG_MODE, GL11.GL_LINEAR); + GL11.glFogf(GL11.GL_FOG_START, this.farPlaneDistance * 0.25F); + GL11.glFogf(GL11.GL_FOG_END, this.farPlaneDistance); + if(var1 < 0) { + GL11.glFogf(GL11.GL_FOG_START, 0.0F); + GL11.glFogf(GL11.GL_FOG_END, this.farPlaneDistance * 0.8F); + } + + if(GLContext.getCapabilities().GL_NV_fog_distance) { + GL11.glFogi(NVFogDistance.GL_FOG_DISTANCE_MODE_NV, NVFogDistance.GL_EYE_RADIAL_NV); + } + } + + 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; + } +} diff --git a/src/net/minecraft/src/EntitySheep.java b/src/net/minecraft/src/EntitySheep.java new file mode 100644 index 0000000..33a2bcd --- /dev/null +++ b/src/net/minecraft/src/EntitySheep.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +public class EntitySheep extends EntityAnimal { + public boolean sheared = false; + + public EntitySheep(World var1) { + super(var1); + this.texture = "/mob/sheep.png"; + this.setSize(0.9F, 1.3F); + } + + public boolean attackEntityFrom(Entity var1, int var2) { + if(!this.sheared && var1 instanceof EntityLiving) { + this.sheared = true; + int var3 = 1 + this.rand.nextInt(3); + + for(int var4 = 0; var4 < var3; ++var4) { + EntityItem var5 = this.entityDropItem(Block.cloth.blockID, 1, 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); + } + } + + return super.attackEntityFrom(var1, var2); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setBoolean("Sheared", this.sheared); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.sheared = var1.getBoolean("Sheared"); + } + + protected String getLivingSound() { + return "mob.sheep"; + } + + protected String getHurtSound() { + return "mob.sheep"; + } + + protected String getDeathSound() { + return "mob.sheep"; + } +} diff --git a/src/net/minecraft/src/EntitySkeleton.java b/src/net/minecraft/src/EntitySkeleton.java new file mode 100644 index 0000000..3508baf --- /dev/null +++ b/src/net/minecraft/src/EntitySkeleton.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +public class EntitySkeleton extends EntityMonster { + public EntitySkeleton(World var1) { + super(var1); + this.texture = "/mob/skeleton.png"; + } + + public void onLivingUpdate() { + if(this.worldObj.isDaytime()) { + float var1 = this.getEntityBrightness(1.0F); + if(var1 > 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 < (var1 - 0.4F) * 2.0F) { + this.fire = 300; + } + } + + super.onLivingUpdate(); + } + + protected void attackEntity(Entity var1, float var2) { + if(var2 < 10.0F) { + double var3 = var1.posX - this.posX; + double var5 = var1.posZ - this.posZ; + if(this.attackTime == 0) { + EntityArrow var7 = new EntityArrow(this.worldObj, this); + var7.posY += (double)1.4F; + double var8 = var1.posY - (double)0.2F - var7.posY; + float var10 = MathHelper.sqrt_double(var3 * var3 + var5 * var5) * 0.2F; + this.worldObj.playSoundAtEntity(this, "random.bow", 1.0F, 1.0F / (this.rand.nextFloat() * 0.4F + 0.8F)); + this.worldObj.spawnEntityInWorld(var7); + var7.setArrowHeading(var3, var8 + (double)var10, var5, 0.6F, 12.0F); + this.attackTime = 30; + } + + this.rotationYaw = (float)(Math.atan2(var5, var3) * 180.0D / (double)((float)Math.PI)) - 90.0F; + this.hasAttacked = true; + } + + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + protected int getDropItemId() { + return Item.arrow.shiftedIndex; + } +} diff --git a/src/net/minecraft/src/EntitySmokeFX.java b/src/net/minecraft/src/EntitySmokeFX.java new file mode 100644 index 0000000..269a249 --- /dev/null +++ b/src/net/minecraft/src/EntitySmokeFX.java @@ -0,0 +1,63 @@ +package net.minecraft.src; + +public class EntitySmokeFX extends EntityFX { + float smokeParticleScale; + + public EntitySmokeFX(World var1, double var2, double var4, double var6) { + this(var1, var2, var4, var6, 1.0F); + } + + public EntitySmokeFX(World var1, double var2, double var4, double var6, float var8) { + 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.particleRed = this.particleGreen = this.particleBlue = (float)(Math.random() * (double)0.3F); + this.particleScale *= 12.0F / 16.0F; + this.particleScale *= var8; + this.smokeParticleScale = 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.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.setEntityDead(); + } + + this.particleTextureIndex = 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/EntitySorter.java b/src/net/minecraft/src/EntitySorter.java new file mode 100644 index 0000000..f7f866f --- /dev/null +++ b/src/net/minecraft/src/EntitySorter.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +import java.util.Comparator; + +public class EntitySorter implements Comparator { + private Entity comparedEntity; + + public EntitySorter(Entity var1) { + this.comparedEntity = var1; + } + + public int a(WorldRenderer var1, WorldRenderer var2) { + return var1.distanceToEntitySquared(this.comparedEntity) < var2.distanceToEntitySquared(this.comparedEntity) ? -1 : 1; + } + + public int compare(Object var1, Object var2) { + return this.a((WorldRenderer)var1, (WorldRenderer)var2); + } +} diff --git a/src/net/minecraft/src/EntitySpider.java b/src/net/minecraft/src/EntitySpider.java new file mode 100644 index 0000000..98b540f --- /dev/null +++ b/src/net/minecraft/src/EntitySpider.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +public class EntitySpider extends EntityMonster { + public EntitySpider(World var1) { + super(var1); + this.texture = "/mob/spider.png"; + this.setSize(1.4F, 0.9F); + this.moveSpeed = 0.8F; + } + + protected Entity findPlayerToAttack() { + float var1 = this.getEntityBrightness(1.0F); + if(var1 < 0.5F) { + double var2 = this.worldObj.playerEntity.getDistanceSqToEntity(this); + double var4 = 16.0D; + if(var2 < var4 * var4) { + return this.worldObj.playerEntity; + } + } + + return null; + } + + protected void attackEntity(Entity var1, float var2) { + float var3 = this.getEntityBrightness(1.0F); + if(var3 > 0.5F && this.rand.nextInt(100) == 0) { + this.playerToAttack = 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); + } + + } + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + protected int getDropItemId() { + return Item.silk.shiftedIndex; + } +} diff --git a/src/net/minecraft/src/EntitySplashFX.java b/src/net/minecraft/src/EntitySplashFX.java new file mode 100644 index 0000000..1375ad2 --- /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.particleTextureIndex; + 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/EntityTNTPrimed.java b/src/net/minecraft/src/EntityTNTPrimed.java new file mode 100644 index 0000000..9e59e00 --- /dev/null +++ b/src/net/minecraft/src/EntityTNTPrimed.java @@ -0,0 +1,68 @@ +package net.minecraft.src; + +public class EntityTNTPrimed extends Entity { + public int fuse; + + 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, float var2, float var3, float var4) { + this(var1); + this.setPosition((double)var2, (double)var3, (double)var4); + float var5 = (float)(Math.random() * (double)((float)Math.PI) * 2.0D); + this.motionX = (double)(-MathHelper.sin(var5 * (float)Math.PI / 180.0F) * 0.02F); + this.motionY = (double)0.2F; + this.motionZ = (double)(-MathHelper.cos(var5 * (float)Math.PI / 180.0F) * 0.02F); + this.canTriggerWalking = false; + this.fuse = 80; + this.prevPosX = (double)var2; + this.prevPosY = (double)var3; + this.prevPosZ = (double)var4; + } + + 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.setEntityDead(); + this.createExplosion(); + } else { + this.worldObj.spawnParticle("smoke", this.posX, this.posY + 0.5D, this.posZ, 0.0D, 0.0D, 0.0D); + } + + } + + private void createExplosion() { + float var1 = 4.0F; + this.worldObj.createExplosion((Entity)null, this.posX, this.posY, this.posZ, var1); + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + var1.setByte("Fuse", (byte)this.fuse); + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + this.fuse = var1.getByte("Fuse"); + } +} diff --git a/src/net/minecraft/src/EntityZombie.java b/src/net/minecraft/src/EntityZombie.java new file mode 100644 index 0000000..5e30538 --- /dev/null +++ b/src/net/minecraft/src/EntityZombie.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class EntityZombie extends EntityMonster { + public EntityZombie(World var1) { + super(var1); + this.texture = "/mob/zombie.png"; + this.moveSpeed = 0.5F; + this.attackStrength = 5; + } + + public void onLivingUpdate() { + if(this.worldObj.isDaytime()) { + float var1 = this.getEntityBrightness(1.0F); + if(var1 > 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 < (var1 - 0.4F) * 2.0F) { + this.fire = 300; + } + } + + super.onLivingUpdate(); + } + + protected int getDropItemId() { + return Item.feather.shiftedIndex; + } +} diff --git a/src/net/minecraft/src/EnumArt.java b/src/net/minecraft/src/EnumArt.java new file mode 100644 index 0000000..daa40fa --- /dev/null +++ b/src/net/minecraft/src/EnumArt.java @@ -0,0 +1,37 @@ +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), + Wanderer("Wanderer", 16, 32, 0, 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), + Fighters("Fighters", 64, 32, 0, 96), + Pointer("Pointer", 64, 64, 0, 192); + + 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/EnumOS.java b/src/net/minecraft/src/EnumOS.java new file mode 100644 index 0000000..d8447c5 --- /dev/null +++ b/src/net/minecraft/src/EnumOS.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +enum EnumOS { + linux, + solaris, + windows, + macos, + unknown; +} diff --git a/src/net/minecraft/src/EnumOSIsom.java b/src/net/minecraft/src/EnumOSIsom.java new file mode 100644 index 0000000..787fa2a --- /dev/null +++ b/src/net/minecraft/src/EnumOSIsom.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +enum EnumOSIsom { + linux, + solaris, + windows, + macos, + unknown; +} 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/Explosion.java b/src/net/minecraft/src/Explosion.java new file mode 100644 index 0000000..34001ea --- /dev/null +++ b/src/net/minecraft/src/Explosion.java @@ -0,0 +1,130 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; + +public class Explosion { + public void doExplosion(World var1, Entity var2, double var3, double var5, double var7, float var9) { + var1.playSoundEffect(var3, var5, var7, "random.explode", 4.0F, (1.0F + (var1.rand.nextFloat() - var1.rand.nextFloat()) * 0.2F) * 0.7F); + HashSet var10 = new HashSet(); + float var11 = var9; + byte var12 = 16; + + int var13; + int var14; + int var15; + double var25; + double var27; + double var29; + for(var13 = 0; var13 < var12; ++var13) { + for(var14 = 0; var14 < var12; ++var14) { + for(var15 = 0; var15 < var12; ++var15) { + if(var13 == 0 || var13 == var12 - 1 || var14 == 0 || var14 == var12 - 1 || var15 == 0 || var15 == var12 - 1) { + double var16 = (double)((float)var13 / ((float)var12 - 1.0F) * 2.0F - 1.0F); + double var18 = (double)((float)var14 / ((float)var12 - 1.0F) * 2.0F - 1.0F); + double var20 = (double)((float)var15 / ((float)var12 - 1.0F) * 2.0F - 1.0F); + double var22 = Math.sqrt(var16 * var16 + var18 * var18 + var20 * var20); + var16 /= var22; + var18 /= var22; + var20 /= var22; + float var24 = var9 * (0.7F + var1.rand.nextFloat() * 0.6F); + var25 = var3; + var27 = var5; + var29 = var7; + + for(float var31 = 0.3F; var24 > 0.0F; var24 -= var31 * (12.0F / 16.0F)) { + int var32 = MathHelper.floor_double(var25); + int var33 = MathHelper.floor_double(var27); + int var34 = MathHelper.floor_double(var29); + int var35 = var1.getBlockId(var32, var33, var34); + if(var35 > 0) { + var24 -= (Block.blocksList[var35].getExplosionResistance(var2) + 0.3F) * var31; + } + + if(var24 > 0.0F) { + var10.add(new ChunkPosition(var32, var33, var34)); + } + + var25 += var16 * (double)var31; + var27 += var18 * (double)var31; + var29 += var20 * (double)var31; + } + } + } + } + } + + var9 *= 2.0F; + var13 = MathHelper.floor_double(var3 - (double)var9 - 1.0D); + var14 = MathHelper.floor_double(var3 + (double)var9 + 1.0D); + var15 = MathHelper.floor_double(var5 - (double)var9 - 1.0D); + int var45 = MathHelper.floor_double(var5 + (double)var9 + 1.0D); + int var17 = MathHelper.floor_double(var7 - (double)var9 - 1.0D); + int var46 = MathHelper.floor_double(var7 + (double)var9 + 1.0D); + List var19 = var1.getEntitiesWithinAABBExcludingEntity(var2, AxisAlignedBB.getBoundingBoxFromPool((double)var13, (double)var15, (double)var17, (double)var14, (double)var45, (double)var46)); + Vec3D var47 = Vec3D.createVector(var3, var5, var7); + + double var55; + double var56; + double var57; + for(int var21 = 0; var21 < var19.size(); ++var21) { + Entity var49 = (Entity)var19.get(var21); + double var23 = var49.getDistance(var3, var5, var7) / (double)var9; + if(var23 <= 1.0D) { + var25 = var49.posX - var3; + var27 = var49.posY - var5; + var29 = var49.posZ - var7; + var55 = (double)MathHelper.sqrt_double(var25 * var25 + var27 * var27 + var29 * var29); + var25 /= var55; + var27 /= var55; + var29 /= var55; + var56 = (double)var1.getBlockDensity(var47, var49.boundingBox); + var57 = (1.0D - var23) * var56; + var49.attackEntityFrom(var2, (int)((var57 * var57 + var57) / 2.0D * 8.0D * (double)var9 + 1.0D)); + var49.motionX += var25 * var57; + var49.motionY += var27 * var57; + var49.motionZ += var29 * var57; + } + } + + var9 = var11; + ArrayList var48 = new ArrayList(); + var48.addAll(var10); + + for(int var50 = var48.size() - 1; var50 >= 0; --var50) { + ChunkPosition var51 = (ChunkPosition)var48.get(var50); + int var52 = var51.x; + int var53 = var51.y; + int var26 = var51.z; + int var54 = var1.getBlockId(var52, var53, var26); + + for(int var28 = 0; var28 < 1; ++var28) { + var29 = (double)((float)var52 + var1.rand.nextFloat()); + var55 = (double)((float)var53 + var1.rand.nextFloat()); + var56 = (double)((float)var26 + var1.rand.nextFloat()); + var57 = var29 - var3; + double var37 = var55 - var5; + double var39 = var56 - var7; + double var41 = (double)MathHelper.sqrt_double(var57 * var57 + var37 * var37 + var39 * var39); + var57 /= var41; + var37 /= var41; + var39 /= var41; + double var43 = 0.5D / (var41 / (double)var9 + 0.1D); + var43 *= (double)(var1.rand.nextFloat() * var1.rand.nextFloat() + 0.3F); + var57 *= var43; + var37 *= var43; + var39 *= var43; + var1.spawnParticle("explode", (var29 + var3 * 1.0D) / 2.0D, (var55 + var5 * 1.0D) / 2.0D, (var56 + var7 * 1.0D) / 2.0D, var57, var37, var39); + var1.spawnParticle("smoke", var29, var55, var56, var57, var37, var39); + } + + if(var54 > 0) { + Block.blocksList[var54].dropBlockAsItemWithChance(var1, var52, var53, var26, var1.getBlockMetadata(var52, var53, var26), 0.3F); + var1.setBlockWithNotify(var52, var53, var26, 0); + Block.blocksList[var54].onBlockDestroyedByExplosion(var1, var52, var53, var26); + } + } + + } +} diff --git a/src/net/minecraft/src/FontRenderer.java b/src/net/minecraft/src/FontRenderer.java new file mode 100644 index 0000000..e8b6015 --- /dev/null +++ b/src/net/minecraft/src/FontRenderer.java @@ -0,0 +1,177 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.nio.IntBuffer; +import javax.imageio.ImageIO; +import org.lwjgl.opengl.GL11; + +public class FontRenderer { + private int[] charWidth = new int[256]; + private int fontTextureName = 0; + private int fontDisplayLists; + private IntBuffer buffer = GLAllocation.createIntBuffer(1024); + + public FontRenderer(GameSettings var1, String var2, RenderEngine var3) { + BufferedImage var4; + try { + var4 = ImageIO.read(RenderEngine.class.getResourceAsStream(var2)); + } catch (IOException var18) { + throw new RuntimeException(var18); + } + + int var5 = var4.getWidth(); + int var6 = var4.getHeight(); + int[] var7 = new int[var5 * var6]; + var4.getRGB(0, 0, var5, var6, var7, 0, var5); + + int var9; + int var10; + int var11; + int var13; + int var15; + int var16; + for(int var8 = 0; var8 < 128; ++var8) { + var9 = var8 % 16; + var10 = var8 / 16; + var11 = 0; + + for(boolean var12 = false; var11 < 8 && !var12; ++var11) { + var13 = var9 * 8 + var11; + var12 = true; + + for(int var14 = 0; var14 < 8 && var12; ++var14) { + var15 = (var10 * 8 + var14) * var5; + var16 = var7[var13 + var15] & 255; + if(var16 > 128) { + var12 = false; + } + } + } + + if(var8 == 32) { + var11 = 4; + } + + this.charWidth[var8] = var11; + } + + this.fontTextureName = var3.getTexture(var2); + this.fontDisplayLists = GLAllocation.generateDisplayLists(288); + Tessellator var19 = Tessellator.instance; + + for(var9 = 0; var9 < 256; ++var9) { + GL11.glNewList(this.fontDisplayLists + var9, GL11.GL_COMPILE); + var19.startDrawingQuads(); + var10 = var9 % 16 * 8; + var11 = var9 / 16 * 8; + float var20 = 7.99F; + var19.addVertexWithUV(0.0D, (double)(0.0F + var20), 0.0D, (double)((float)var10 / 128.0F), (double)(((float)var11 + var20) / 128.0F)); + var19.addVertexWithUV((double)(0.0F + var20), (double)(0.0F + var20), 0.0D, (double)(((float)var10 + var20) / 128.0F), (double)(((float)var11 + var20) / 128.0F)); + var19.addVertexWithUV((double)(0.0F + var20), 0.0D, 0.0D, (double)(((float)var10 + var20) / 128.0F), (double)((float)var11 / 128.0F)); + var19.addVertexWithUV(0.0D, 0.0D, 0.0D, (double)((float)var10 / 128.0F), (double)((float)var11 / 128.0F)); + var19.draw(); + GL11.glTranslatef((float)this.charWidth[var9], 0.0F, 0.0F); + GL11.glEndList(); + } + + for(var9 = 0; var9 < 32; ++var9) { + var10 = (var9 & 8) * 8; + var11 = (var9 & 1) * 191 + var10; + int var21 = ((var9 & 2) >> 1) * 191 + var10; + var13 = ((var9 & 4) >> 2) * 191 + var10; + boolean var22 = var9 >= 16; + if(var1.anaglyph) { + var15 = (var13 * 30 + var21 * 59 + var11 * 11) / 100; + var16 = (var13 * 30 + var21 * 70) / 100; + int var17 = (var13 * 30 + var11 * 70) / 100; + var13 = var15; + var21 = var16; + var11 = var17; + } + + var9 += 2; + if(var22) { + var13 /= 4; + var21 /= 4; + var11 /= 4; + } + + GL11.glColor4f((float)var13 / 255.0F, (float)var21 / 255.0F, (float)var11 / 255.0F, 1.0F); + } + + } + + public void drawStringWithShadow(String var1, int var2, int var3, int var4) { + this.renderString(var1, var2 + 1, var3 + 1, var4, true); + this.drawString(var1, var2, var3, var4); + } + + public void drawString(String var1, int var2, int var3, int var4) { + this.renderString(var1, var2, var3, var4, false); + } + + public void renderString(String var1, int var2, int var3, int var4, boolean var5) { + if(var1 != null) { + if(var5) { + var4 = (var4 & 16579836) >> 2; + } + + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.fontTextureName); + float var6 = (float)(var4 >> 16 & 255) / 255.0F; + float var7 = (float)(var4 >> 8 & 255) / 255.0F; + float var8 = (float)(var4 & 255) / 255.0F; + float var9 = (float)(var4 >> 24 & 255) / 255.0F; + var9 = 1.0F; + GL11.glColor4f(var6, var7, var8, var9); + this.buffer.clear(); + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var3, 0.0F); + + for(int var10 = 0; var10 < var1.length(); ++var10) { + for(; var1.charAt(var10) == 38 && var1.length() > var10 + 1; var10 += 2) { + int var11 = "0123456789abcdef".indexOf(var1.charAt(var10 + 1)); + if(var11 < 0 || var11 > 15) { + var11 = 15; + } + + this.buffer.put(this.fontDisplayLists + 256 + var11 + (var5 ? 16 : 0)); + if(this.buffer.remaining() == 0) { + this.buffer.flip(); + GL11.glCallLists(this.buffer); + this.buffer.clear(); + } + } + + this.buffer.put(this.fontDisplayLists + var1.charAt(var10)); + if(this.buffer.remaining() == 0) { + this.buffer.flip(); + GL11.glCallLists(this.buffer); + this.buffer.clear(); + } + } + + this.buffer.flip(); + GL11.glCallLists(this.buffer); + GL11.glPopMatrix(); + } + } + + public int getStringWidth(String var1) { + if(var1 == null) { + return 0; + } else { + int var2 = 0; + + for(int var3 = 0; var3 < var1.length(); ++var3) { + if(var1.charAt(var3) == 38) { + ++var3; + } else { + var2 += this.charWidth[var1.charAt(var3)]; + } + } + + return var2; + } + } +} diff --git a/src/net/minecraft/src/Frustrum.java b/src/net/minecraft/src/Frustrum.java new file mode 100644 index 0000000..ad411d9 --- /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 = ClippingHelperImplementation.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/GLAllocation.java b/src/net/minecraft/src/GLAllocation.java new file mode 100644 index 0000000..bcde76b --- /dev/null +++ b/src/net/minecraft/src/GLAllocation.java @@ -0,0 +1,62 @@ +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.List; +import org.lwjgl.opengl.GL11; + +public class GLAllocation { + private static List displayLists = new ArrayList(); + private static List textureNames = new ArrayList(); + + public static synchronized int generateDisplayLists(int var0) { + int var1 = GL11.glGenLists(var0); + displayLists.add(Integer.valueOf(var1)); + displayLists.add(Integer.valueOf(var0)); + return var1; + } + + public static synchronized void generateDisplayLists(IntBuffer var0) { + GL11.glGenTextures(var0); + + for(int var1 = var0.position(); var1 < var0.limit(); ++var1) { + textureNames.add(Integer.valueOf(var0.get(var1))); + } + + } + + public static synchronized void deleteTexturesAndDisplayLists() { + for(int var0 = 0; var0 < displayLists.size(); var0 += 2) { + GL11.glDeleteLists(((Integer)displayLists.get(var0)).intValue(), ((Integer)displayLists.get(var0 + 1)).intValue()); + } + + IntBuffer var2 = createIntBuffer(textureNames.size()); + var2.flip(); + GL11.glDeleteTextures(var2); + + for(int var1 = 0; var1 < textureNames.size(); ++var1) { + var2.put(((Integer)textureNames.get(var1)).intValue()); + } + + var2.flip(); + GL11.glDeleteTextures(var2); + displayLists.clear(); + textureNames.clear(); + } + + public static synchronized ByteBuffer createDirectByteBuffer(int var0) { + ByteBuffer var1 = ByteBuffer.allocateDirect(var0).order(ByteOrder.nativeOrder()); + return var1; + } + + public static IntBuffer createIntBuffer(int var0) { + return createDirectByteBuffer(var0 << 2).asIntBuffer(); + } + + public static FloatBuffer createFloatBuffer(int var0) { + return createDirectByteBuffer(var0 << 2).asFloatBuffer(); + } +} diff --git a/src/net/minecraft/src/GameSettings.java b/src/net/minecraft/src/GameSettings.java new file mode 100644 index 0000000..9416cfd --- /dev/null +++ b/src/net/minecraft/src/GameSettings.java @@ -0,0 +1,202 @@ +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 org.lwjgl.input.Keyboard; + +public class GameSettings { + private static final String[] RENDER_DISTANCES = new String[]{"FAR", "NORMAL", "SHORT", "TINY"}; + private static final String[] DIFFICULTIES = new String[]{"Peaceful", "Easy", "Normal", "Hard"}; + public boolean music = true; + public boolean sound = true; + public boolean invertMouse = false; + public boolean showFPS = false; + public int renderDistance = 0; + public boolean viewBobbing = true; + public boolean anaglyph = false; + public boolean limitFramerate = false; + public boolean fancyGraphics = true; + public KeyBinding keyBindForward = new KeyBinding("Forward", 17); + public KeyBinding keyBindLeft = new KeyBinding("Left", 30); + public KeyBinding keyBindBack = new KeyBinding("Back", 31); + public KeyBinding keyBindRight = new KeyBinding("Right", 32); + public KeyBinding keyBindJump = new KeyBinding("Jump", 57); + public KeyBinding keyBindInventory = new KeyBinding("Inventory", 23); + public KeyBinding keyBindDrop = new KeyBinding("Drop", 16); + public KeyBinding keyBindChat = new KeyBinding("Chat", 20); + public KeyBinding keyBindToggleFog = new KeyBinding("Toggle fog", 33); + public KeyBinding keyBindSave = new KeyBinding("Save location", 28); + public KeyBinding keyBindLoad = new KeyBinding("Load location", 19); + public KeyBinding[] keyBindings = new KeyBinding[]{this.keyBindForward, this.keyBindLeft, this.keyBindBack, this.keyBindRight, this.keyBindJump, this.keyBindDrop, this.keyBindInventory, this.keyBindChat, this.keyBindToggleFog, this.keyBindSave, this.keyBindLoad}; + protected Minecraft mc; + private File optionsFile; + public int numberOfOptions = 10; + public int difficulty = 2; + public boolean thirdPersonView = false; + + public GameSettings(Minecraft var1, File var2) { + this.mc = var1; + this.optionsFile = new File(var2, "options.txt"); + this.loadOptions(); + } + + public String getOptionDisplayString(int var1) { + return this.keyBindings[var1].keyDescription + ": " + Keyboard.getKeyName(this.keyBindings[var1].keyCode); + } + + public void setKeyBinding(int var1, int var2) { + this.keyBindings[var1].keyCode = var2; + this.saveOptions(); + } + + public void setOptionFloatValue(int var1, int var2) { + if(var1 == 0) { + this.music = !this.music; + this.mc.sndManager.onSoundOptionsChanged(); + } + + if(var1 == 1) { + this.sound = !this.sound; + this.mc.sndManager.onSoundOptionsChanged(); + } + + if(var1 == 2) { + this.invertMouse = !this.invertMouse; + } + + if(var1 == 3) { + this.showFPS = !this.showFPS; + } + + if(var1 == 4) { + this.renderDistance = this.renderDistance + var2 & 3; + } + + if(var1 == 5) { + this.viewBobbing = !this.viewBobbing; + } + + if(var1 == 6) { + this.anaglyph = !this.anaglyph; + this.mc.renderEngine.refreshTextures(); + } + + if(var1 == 7) { + this.limitFramerate = !this.limitFramerate; + } + + if(var1 == 8) { + this.difficulty = this.difficulty + var2 & 3; + } + + if(var1 == 9) { + this.fancyGraphics = !this.fancyGraphics; + this.mc.renderGlobal.loadRenderers(); + } + + this.saveOptions(); + } + + public String getKeyBinding(int var1) { + return var1 == 0 ? "Music: " + (this.music ? "ON" : "OFF") : (var1 == 1 ? "Sound: " + (this.sound ? "ON" : "OFF") : (var1 == 2 ? "Invert mouse: " + (this.invertMouse ? "ON" : "OFF") : (var1 == 3 ? "Show FPS: " + (this.showFPS ? "ON" : "OFF") : (var1 == 4 ? "Render distance: " + RENDER_DISTANCES[this.renderDistance] : (var1 == 5 ? "View bobbing: " + (this.viewBobbing ? "ON" : "OFF") : (var1 == 6 ? "3d anaglyph: " + (this.anaglyph ? "ON" : "OFF") : (var1 == 7 ? "Limit framerate: " + (this.limitFramerate ? "ON" : "OFF") : (var1 == 8 ? "Difficulty: " + DIFFICULTIES[this.difficulty] : (var1 == 9 ? "Graphics: " + (this.fancyGraphics ? "FANCY" : "FAST") : ""))))))))); + } + + 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) { + var1.close(); + break; + } + + String[] var3 = var2.split(":"); + if(var3[0].equals("music")) { + this.music = var3[1].equals("true"); + } + + if(var3[0].equals("sound")) { + this.sound = var3[1].equals("true"); + } + + if(var3[0].equals("invertYMouse")) { + this.invertMouse = var3[1].equals("true"); + } + + if(var3[0].equals("showFrameRate")) { + this.showFPS = var3[1].equals("true"); + } + + if(var3[0].equals("viewDistance")) { + this.renderDistance = 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("limitFramerate")) { + this.limitFramerate = var3[1].equals("true"); + } + + if(var3[0].equals("difficulty")) { + this.difficulty = Integer.parseInt(var3[1]); + } + + if(var3[0].equals("fancyGraphics")) { + this.fancyGraphics = var3[1].equals("true"); + } + + 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) { + System.out.println("Failed to load options"); + var5.printStackTrace(); + } + + } + + public void saveOptions() { + try { + PrintWriter var1 = new PrintWriter(new FileWriter(this.optionsFile)); + var1.println("music:" + this.music); + var1.println("sound:" + this.sound); + var1.println("invertYMouse:" + this.invertMouse); + var1.println("showFrameRate:" + this.showFPS); + var1.println("viewDistance:" + this.renderDistance); + var1.println("bobView:" + this.viewBobbing); + var1.println("anaglyph3d:" + this.anaglyph); + var1.println("limitFramerate:" + this.limitFramerate); + var1.println("difficulty:" + this.difficulty); + var1.println("fancyGraphics:" + this.fancyGraphics); + + 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) { + System.out.println("Failed to save options"); + var3.printStackTrace(); + } + + } +} diff --git a/src/net/minecraft/src/Gui.java b/src/net/minecraft/src/Gui.java new file mode 100644 index 0000000..8b4c529 --- /dev/null +++ b/src/net/minecraft/src/Gui.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class Gui { + protected float zLevel = 0.0F; + + 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); + Tessellator var15 = Tessellator.instance; + var15.startDrawingQuads(); + var15.setColorRGBA_F(var8, var9, var10, var7); + var15.addVertex((double)var3, (double)var2, 0.0D); + var15.addVertex((double)var1, (double)var2, 0.0D); + var15.setColorRGBA_F(var12, var13, var14, var11); + var15.addVertex((double)var1, (double)var4, 0.0D); + var15.addVertex((double)var3, (double)var4, 0.0D); + var15.draw(); + 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(); + } +} diff --git a/src/net/minecraft/src/GuiButton.java b/src/net/minecraft/src/GuiButton.java new file mode 100644 index 0000000..3fbe2be --- /dev/null +++ b/src/net/minecraft/src/GuiButton.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiButton extends Gui { + private int width; + private int height; + public int xPosition; + public int yPosition; + public String displayString; + public int id; + public boolean enabled; + public boolean enabled2; + + public GuiButton(int var1, int var2, int var3, String var4) { + this(var1, var2, var3, 200, 20, var4); + } + + protected GuiButton(int var1, int var2, int var3, int var4, int var5, String var6) { + this.width = 200; + this.height = 20; + this.enabled = true; + this.enabled2 = true; + this.id = var1; + this.xPosition = var2; + this.yPosition = var3; + this.width = var4; + this.height = var5; + this.displayString = var6; + } + + public void drawButton(Minecraft var1, int var2, int var3) { + if(this.enabled2) { + FontRenderer var4 = var1.fontRenderer; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var1.renderEngine.getTexture("/gui/gui.png")); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + byte var5 = 1; + boolean var6 = var2 >= this.xPosition && var3 >= this.yPosition && var2 < this.xPosition + this.width && var3 < this.yPosition + this.height; + if(!this.enabled) { + var5 = 0; + } else if(var6) { + var5 = 2; + } + + 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); + if(!this.enabled) { + this.drawCenteredString(var4, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, -6250336); + } else if(var6) { + this.drawCenteredString(var4, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, 16777120); + } else { + this.drawCenteredString(var4, this.displayString, this.xPosition + this.width / 2, this.yPosition + (this.height - 8) / 2, 14737632); + } + + } + } + + public boolean mousePressed(int var1, int var2) { + return this.enabled && var1 >= this.xPosition && var2 >= this.yPosition && var1 < this.xPosition + this.width && var2 < this.yPosition + this.height; + } +} diff --git a/src/net/minecraft/src/GuiChest.java b/src/net/minecraft/src/GuiChest.java new file mode 100644 index 0000000..730e7f4 --- /dev/null +++ b/src/net/minecraft/src/GuiChest.java @@ -0,0 +1,54 @@ +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) { + 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; + int var5 = (this.inventoryRows - 4) * 18; + + int var6; + int var7; + for(var6 = 0; var6 < this.inventoryRows; ++var6) { + for(var7 = 0; var7 < 9; ++var7) { + this.inventorySlots.add(new Slot(this, var2, var7 + var6 * 9, 8 + var7 * 18, 18 + var6 * 18)); + } + } + + for(var6 = 0; var6 < 3; ++var6) { + for(var7 = 0; var7 < 9; ++var7) { + this.inventorySlots.add(new Slot(this, var1, var7 + (var6 + 1) * 9, 8 + var7 * 18, 103 + var6 * 18 + var5)); + } + } + + for(var6 = 0; var6 < 9; ++var6) { + this.inventorySlots.add(new Slot(this, var1, var6, 8 + var6 * 18, 161 + var5)); + } + + } + + protected void drawGuiContainerForegroundLayer() { + this.fontRenderer.drawString(this.lowerChestInventory.getInvName(), 8, 6, 4210752); + this.fontRenderer.drawString(this.upperChestInventory.getInvName(), 8, this.ySize - 96 + 2, 4210752); + } + + protected void drawGuiContainerBackgroundLayer(float var1) { + int var2 = this.mc.renderEngine.getTexture("/gui/container.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var2); + int var3 = (this.width - this.xSize) / 2; + int var4 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var3, var4, 0, 0, this.xSize, this.inventoryRows * 18 + 17); + this.drawTexturedModalRect(var3, var4 + this.inventoryRows * 18 + 17, 0, 126, this.xSize, 96); + } +} diff --git a/src/net/minecraft/src/GuiContainer.java b/src/net/minecraft/src/GuiContainer.java new file mode 100644 index 0000000..4e3e8fe --- /dev/null +++ b/src/net/minecraft/src/GuiContainer.java @@ -0,0 +1,226 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public abstract class GuiContainer extends GuiScreen { + private static RenderItem itemRenderer = new RenderItem(); + private ItemStack draggedItemStack = null; + protected int xSize = 176; + protected int ySize = 166; + protected List inventorySlots = new ArrayList(); + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + int var4 = (this.width - this.xSize) / 2; + int var5 = (this.height - this.ySize) / 2; + this.drawGuiContainerBackgroundLayer(var3); + GL11.glPushMatrix(); + GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GL11.glPopMatrix(); + 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); + + for(int var6 = 0; var6 < this.inventorySlots.size(); ++var6) { + Slot var7 = (Slot)this.inventorySlots.get(var6); + this.drawSlotInventory(var7); + if(var7.getIsMouseOverSlot(var1, var2)) { + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + int var8 = var7.xDisplayPosition; + int var9 = var7.yDisplayPosition; + this.drawGradientRect(var8, var9, var8 + 16, var9 + 16, -2130706433, -2130706433); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + } + } + + if(this.draggedItemStack != null) { + GL11.glTranslatef(0.0F, 0.0F, 32.0F); + itemRenderer.drawItemIntoGui(this.fontRenderer, this.mc.renderEngine, this.draggedItemStack, var1 - var4 - 8, var2 - var5 - 8); + itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, this.mc.renderEngine, this.draggedItemStack, var1 - var4 - 8, var2 - var5 - 8); + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + this.drawGuiContainerForegroundLayer(); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + GL11.glPopMatrix(); + } + + protected void drawGuiContainerForegroundLayer() { + } + + protected abstract void drawGuiContainerBackgroundLayer(float var1); + + private void drawSlotInventory(Slot var1) { + IInventory var2 = var1.inventory; + int var3 = var1.slotIndex; + int var4 = var1.xDisplayPosition; + int var5 = var1.yDisplayPosition; + ItemStack var6 = var2.getStackInSlot(var3); + if(var6 == null) { + int var7 = var1.getBackgroundIconIndex(); + if(var7 >= 0) { + GL11.glDisable(GL11.GL_LIGHTING); + this.mc.renderEngine.bindTexture(this.mc.renderEngine.getTexture("/gui/items.png")); + this.drawTexturedModalRect(var4, var5, var7 % 16 * 16, var7 / 16 * 16, 16, 16); + GL11.glEnable(GL11.GL_LIGHTING); + return; + } + } + + itemRenderer.drawItemIntoGui(this.fontRenderer, this.mc.renderEngine, var6, var4, var5); + itemRenderer.renderItemOverlayIntoGUI(this.fontRenderer, this.mc.renderEngine, var6, var4, var5); + } + + private Slot getSlotAtPosition(int var1, int var2) { + for(int var3 = 0; var3 < this.inventorySlots.size(); ++var3) { + Slot var4 = (Slot)this.inventorySlots.get(var3); + if(var4.getIsMouseOverSlot(var1, var2)) { + return var4; + } + } + + return null; + } + + protected void mouseClicked(int var1, int var2, int var3) { + if(var3 == 0 || var3 == 1) { + Slot var4 = this.getSlotAtPosition(var1, var2); + int var6; + if(var4 != null) { + var4.onSlotChanged(); + ItemStack var5 = var4.getStack(); + if(var5 != null || this.draggedItemStack != null) { + if(var5 != null && this.draggedItemStack == null) { + var6 = var3 == 0 ? var5.stackSize : (var5.stackSize + 1) / 2; + this.draggedItemStack = var4.inventory.decrStackSize(var4.slotIndex, var6); + if(var5.stackSize == 0) { + var4.putStack((ItemStack)null); + } + + var4.onPickupFromSlot(); + } else if(var5 == null && this.draggedItemStack != null && var4.isItemValid(this.draggedItemStack)) { + var6 = var3 == 0 ? this.draggedItemStack.stackSize : 1; + if(var6 > var4.inventory.getInventoryStackLimit()) { + var6 = var4.inventory.getInventoryStackLimit(); + } + + var4.putStack(this.draggedItemStack.splitStack(var6)); + if(this.draggedItemStack.stackSize == 0) { + this.draggedItemStack = null; + } + } else if(var5 != null && this.draggedItemStack != null) { + if(var4.isItemValid(this.draggedItemStack)) { + if(var5.itemID != this.draggedItemStack.itemID) { + if(this.draggedItemStack.stackSize <= var4.inventory.getInventoryStackLimit()) { + var4.putStack(this.draggedItemStack); + this.draggedItemStack = var5; + } + } else if(var5.itemID == this.draggedItemStack.itemID) { + if(var3 == 0) { + var6 = this.draggedItemStack.stackSize; + if(var6 > var4.inventory.getInventoryStackLimit() - var5.stackSize) { + var6 = var4.inventory.getInventoryStackLimit() - var5.stackSize; + } + + if(var6 > this.draggedItemStack.getMaxStackSize() - var5.stackSize) { + var6 = this.draggedItemStack.getMaxStackSize() - var5.stackSize; + } + + this.draggedItemStack.splitStack(var6); + if(this.draggedItemStack.stackSize == 0) { + this.draggedItemStack = null; + } + + var5.stackSize += var6; + } else if(var3 == 1) { + var6 = 1; + if(var6 > var4.inventory.getInventoryStackLimit() - var5.stackSize) { + var6 = var4.inventory.getInventoryStackLimit() - var5.stackSize; + } + + if(var6 > this.draggedItemStack.getMaxStackSize() - var5.stackSize) { + var6 = this.draggedItemStack.getMaxStackSize() - var5.stackSize; + } + + this.draggedItemStack.splitStack(var6); + if(this.draggedItemStack.stackSize == 0) { + this.draggedItemStack = null; + } + + var5.stackSize += var6; + } + } + } else if(var5.itemID == this.draggedItemStack.itemID && this.draggedItemStack.getMaxStackSize() > 1) { + var6 = var5.stackSize; + if(var6 > 0 && var6 + this.draggedItemStack.stackSize <= this.draggedItemStack.getMaxStackSize()) { + this.draggedItemStack.stackSize += var6; + var5.splitStack(var6); + if(var5.stackSize == 0) { + var4.putStack((ItemStack)null); + } + + var4.onPickupFromSlot(); + } + } + } + } + } else if(this.draggedItemStack != null) { + int var8 = (this.width - this.xSize) / 2; + var6 = (this.height - this.ySize) / 2; + if(var1 < var8 || var2 < var6 || var1 >= var8 + this.xSize || var2 >= var6 + this.xSize) { + EntityPlayerSP var7 = this.mc.thePlayer; + if(var3 == 0) { + var7.dropPlayerItem(this.draggedItemStack); + this.draggedItemStack = null; + } + + if(var3 == 1) { + var7.dropPlayerItem(this.draggedItemStack.splitStack(1)); + if(this.draggedItemStack.stackSize == 0) { + this.draggedItemStack = null; + } + } + } + } + } + + } + + protected void mouseMovedOrUp(int var1, int var2, int var3) { + if(var3 == 0) { + } + + } + + protected void keyTyped(char var1, int var2) { + if(var2 == 1 || var2 == this.mc.gameSettings.keyBindInventory.keyCode) { + this.mc.displayGuiScreen((GuiScreen)null); + } + + } + + public void onGuiClosed() { + if(this.draggedItemStack != null) { + this.mc.thePlayer.dropPlayerItem(this.draggedItemStack); + } + + } + + public void onCraftMatrixChanged(IInventory var1) { + } + + public boolean doesGuiPauseGame() { + return false; + } +} diff --git a/src/net/minecraft/src/GuiControls.java b/src/net/minecraft/src/GuiControls.java new file mode 100644 index 0000000..0d185df --- /dev/null +++ b/src/net/minecraft/src/GuiControls.java @@ -0,0 +1,52 @@ +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; + } + + public void initGui() { + for(int var1 = 0; var1 < this.options.keyBindings.length; ++var1) { + this.controlList.add(new GuiSmallButton(var1, this.width / 2 - 155 + var1 % 2 * 160, this.height / 6 + 24 * (var1 >> 1), this.options.getOptionDisplayString(var1))); + } + + this.controlList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, "Done")); + } + + protected void actionPerformed(GuiButton var1) { + for(int var2 = 0; var2 < this.options.keyBindings.length; ++var2) { + ((GuiButton)this.controlList.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 keyTyped(char var1, int var2) { + if(this.buttonId >= 0) { + this.options.setKeyBinding(this.buttonId, var2); + ((GuiButton)this.controlList.get(this.buttonId)).displayString = this.options.getOptionDisplayString(this.buttonId); + this.buttonId = -1; + } 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); + 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..81fe8aa --- /dev/null +++ b/src/net/minecraft/src/GuiCrafting.java @@ -0,0 +1,75 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiCrafting extends GuiContainer { + private InventoryCrafting inventoryCrafting = new InventoryCrafting(this, 3, 3); + private IInventory iInventory = new InventoryCraftResult(); + + public GuiCrafting(InventoryPlayer var1) { + this.inventorySlots.add(new SlotCrafting(this, this.inventoryCrafting, this.iInventory, 0, 124, 35)); + + int var2; + int var3; + for(var2 = 0; var2 < 3; ++var2) { + for(var3 = 0; var3 < 3; ++var3) { + this.inventorySlots.add(new Slot(this, this.inventoryCrafting, var3 + var2 * 3, 30 + var3 * 18, 17 + var2 * 18)); + } + } + + for(var2 = 0; var2 < 3; ++var2) { + for(var3 = 0; var3 < 9; ++var3) { + this.inventorySlots.add(new Slot(this, var1, var3 + (var2 + 1) * 9, 8 + var3 * 18, 84 + var2 * 18)); + } + } + + for(var2 = 0; var2 < 9; ++var2) { + this.inventorySlots.add(new Slot(this, var1, var2, 8 + var2 * 18, 142)); + } + + } + + public void onGuiClosed() { + super.onGuiClosed(); + + for(int var1 = 0; var1 < 9; ++var1) { + ItemStack var2 = this.inventoryCrafting.getStackInSlot(var1); + if(var2 != null) { + this.mc.thePlayer.dropPlayerItem(var2); + } + } + + } + + public void onCraftMatrixChanged(IInventory var1) { + int[] var2 = new int[9]; + + for(int var3 = 0; var3 < 3; ++var3) { + for(int var4 = 0; var4 < 3; ++var4) { + int var5 = var3 + var4 * 3; + ItemStack var6 = this.inventoryCrafting.getStackInSlot(var5); + if(var6 == null) { + var2[var5] = -1; + } else { + var2[var5] = var6.itemID; + } + } + } + + this.iInventory.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(var2)); + } + + protected void drawGuiContainerForegroundLayer() { + this.fontRenderer.drawString("Crafting", 28, 6, 4210752); + this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); + } + + protected void drawGuiContainerBackgroundLayer(float var1) { + int var2 = this.mc.renderEngine.getTexture("/gui/crafting.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var2); + int var3 = (this.width - this.xSize) / 2; + int var4 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var3, var4, 0, 0, this.xSize, this.ySize); + } +} diff --git a/src/net/minecraft/src/GuiCreateWorld.java b/src/net/minecraft/src/GuiCreateWorld.java new file mode 100644 index 0000000..9b49486 --- /dev/null +++ b/src/net/minecraft/src/GuiCreateWorld.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +import java.io.File; + +public class GuiCreateWorld extends GuiScreen { + protected GuiScreen parentGuiScreen; + protected String screenHeader = "Select world"; + private boolean createClicked = false; + + public GuiCreateWorld(GuiScreen var1) { + this.parentGuiScreen = var1; + } + + public void initGui() { + File var1 = Minecraft.getMinecraftDir(); + + for(int var2 = 0; var2 < 5; ++var2) { + NBTTagCompound var3 = World.getLevelData(var1, "World" + (var2 + 1)); + if(var3 == null) { + this.controlList.add(new GuiButton(var2, this.width / 2 - 100, this.height / 6 + 24 * var2, "- empty -")); + } else { + String var4 = "World " + (var2 + 1); + long var5 = var3.getLong("SizeOnDisk"); + var4 = var4 + " (" + (float)(var5 / 1024L * 100L / 1024L) / 100.0F + " MB)"; + this.controlList.add(new GuiButton(var2, this.width / 2 - 100, this.height / 6 + 24 * var2, var4)); + } + } + + this.initButtons(); + } + + protected String getSaveFileName(int var1) { + File var2 = Minecraft.getMinecraftDir(); + return World.getLevelData(var2, "World" + var1) != null ? "World" + var1 : null; + } + + public void initButtons() { + this.controlList.add(new GuiButton(5, this.width / 2 - 100, this.height / 6 + 120 + 12, "Delete world...")); + this.controlList.add(new GuiButton(6, this.width / 2 - 100, this.height / 6 + 168, "Cancel")); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id < 5) { + this.actionPerformed(var1.id + 1); + } else if(var1.id == 5) { + this.mc.displayGuiScreen(new GuiDeleteWorld(this)); + } else if(var1.id == 6) { + this.mc.displayGuiScreen(this.parentGuiScreen); + } + + } + } + + public void actionPerformed(int var1) { + this.mc.displayGuiScreen((GuiScreen)null); + if(!this.createClicked) { + this.createClicked = true; + this.mc.startWorld("World" + var1); + this.mc.displayGuiScreen((GuiScreen)null); + } + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.screenHeader, this.width / 2, 20, 16777215); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiDeleteWorld.java b/src/net/minecraft/src/GuiDeleteWorld.java new file mode 100644 index 0000000..979aad5 --- /dev/null +++ b/src/net/minecraft/src/GuiDeleteWorld.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +import java.io.File; + +public class GuiDeleteWorld extends GuiCreateWorld { + public GuiDeleteWorld(GuiScreen var1) { + super(var1); + this.screenHeader = "Delete world"; + } + + public void initButtons() { + this.controlList.add(new GuiButton(6, this.width / 2 - 100, this.height / 6 + 168, "Cancel")); + } + + public void actionPerformed(int var1) { + String var2 = this.getSaveFileName(var1); + if(var2 != null) { + this.mc.displayGuiScreen(new GuiYesNo(this, "Are you sure you want to delete this world?", "\'" + var2 + "\' will be lost forever!", var1)); + } + + } + + public void deleteWorld(boolean var1, int var2) { + if(var1) { + File var3 = Minecraft.getMinecraftDir(); + World.deleteWorld(var3, this.getSaveFileName(var2)); + } + + this.mc.displayGuiScreen(this.parentGuiScreen); + } +} diff --git a/src/net/minecraft/src/GuiEditSign.java b/src/net/minecraft/src/GuiEditSign.java new file mode 100644 index 0000000..9ecea6d --- /dev/null +++ b/src/net/minecraft/src/GuiEditSign.java @@ -0,0 +1,77 @@ +package net.minecraft.src; + +import org.lwjgl.input.Keyboard; +import org.lwjgl.opengl.GL11; + +public class GuiEditSign extends GuiScreen { + protected String screenTitle = "Edit sign message:"; + private TileEntitySign entitySign; + private int updateCounter; + private int editLine = 0; + + public GuiEditSign(TileEntitySign var1) { + this.entitySign = var1; + } + + public void initGui() { + this.controlList.clear(); + Keyboard.enableRepeatEvents(true); + this.controlList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 120, "Done")); + } + + public void onGuiClosed() { + Keyboard.enableRepeatEvents(false); + } + + 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("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789 ,.:-_\'*!\"#%/()=+?[]{}<>".indexOf(var1) >= 0 && this.entitySign.signText[this.editLine].length() < 15) { + this.entitySign.signText[this.editLine] = this.entitySign.signText[this.editLine] + var1; + } + + } + + 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), (float)(this.height / 2), 50.0F); + float var4 = 60.0F; + GL11.glScalef(-var4, -var4, -var4); + GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F); + if(this.updateCounter / 6 % 2 == 0) { + this.entitySign.lineBeingEdited = this.editLine; + } + + GL11.glRotatef((float)(this.entitySign.getBlockMetadata() * 360) / 16.0F, 0.0F, 1.0F, 0.0F); + 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/GuiErrorScreen.java b/src/net/minecraft/src/GuiErrorScreen.java new file mode 100644 index 0000000..6707b98 --- /dev/null +++ b/src/net/minecraft/src/GuiErrorScreen.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class GuiErrorScreen extends GuiScreen { + private String title; + private String text; + + public void initGui() { + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawGradientRect(0, 0, this.width, this.height, -12574688, -11530224); + this.drawCenteredString(this.fontRenderer, this.title, this.width / 2, 90, 16777215); + this.drawCenteredString(this.fontRenderer, this.text, this.width / 2, 110, 16777215); + super.drawScreen(var1, var2, var3); + } + + protected void keyTyped(char var1, int var2) { + } +} diff --git a/src/net/minecraft/src/GuiFurnace.java b/src/net/minecraft/src/GuiFurnace.java new file mode 100644 index 0000000..922342d --- /dev/null +++ b/src/net/minecraft/src/GuiFurnace.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiFurnace extends GuiContainer { + private TileEntityFurnace furnaceInventory; + + public GuiFurnace(InventoryPlayer var1, TileEntityFurnace var2) { + this.furnaceInventory = var2; + this.inventorySlots.add(new Slot(this, var2, 0, 56, 17)); + this.inventorySlots.add(new Slot(this, var2, 1, 56, 53)); + this.inventorySlots.add(new Slot(this, var2, 2, 116, 35)); + + int var3; + for(var3 = 0; var3 < 3; ++var3) { + for(int var4 = 0; var4 < 9; ++var4) { + this.inventorySlots.add(new Slot(this, var1, var4 + (var3 + 1) * 9, 8 + var4 * 18, 84 + var3 * 18)); + } + } + + for(var3 = 0; var3 < 9; ++var3) { + this.inventorySlots.add(new Slot(this, var1, var3, 8 + var3 * 18, 142)); + } + + } + + protected void drawGuiContainerForegroundLayer() { + this.fontRenderer.drawString("Furnace", 60, 6, 4210752); + this.fontRenderer.drawString("Inventory", 8, this.ySize - 96 + 2, 4210752); + } + + protected void drawGuiContainerBackgroundLayer(float var1) { + int var2 = this.mc.renderEngine.getTexture("/gui/furnace.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var2); + int var3 = (this.width - this.xSize) / 2; + int var4 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var3, var4, 0, 0, this.xSize, this.ySize); + int var5; + if(this.furnaceInventory.isBurning()) { + var5 = this.furnaceInventory.getBurnTimeRemainingScaled(12); + this.drawTexturedModalRect(var3 + 56, var4 + 36 + 12 - var5, 176, 12 - var5, 14, var5 + 2); + } + + var5 = this.furnaceInventory.getCookProgressScaled(24); + this.drawTexturedModalRect(var3 + 79, var4 + 34, 176, 14, var5 + 1, 16); + } +} diff --git a/src/net/minecraft/src/GuiGameOver.java b/src/net/minecraft/src/GuiGameOver.java new file mode 100644 index 0000000..1eb64b0 --- /dev/null +++ b/src/net/minecraft/src/GuiGameOver.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiGameOver extends GuiScreen { + public void initGui() { + this.controlList.clear(); + this.controlList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 72, "Respawn")); + this.controlList.add(new GuiButton(2, this.width / 2 - 100, this.height / 4 + 96, "Title menu")); + if(this.mc.session == null) { + ((GuiButton)this.controlList.get(1)).enabled = false; + } + + } + + protected void keyTyped(char var1, int var2) { + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 0) { + } + + if(var1.id == 1) { + this.mc.respawn(); + this.mc.displayGuiScreen((GuiScreen)null); + } + + if(var1.id == 2) { + this.mc.changeWorld1((World)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); + this.drawCenteredString(this.fontRenderer, "Game over!", this.width / 2 / 2, 30, 16777215); + GL11.glPopMatrix(); + this.drawCenteredString(this.fontRenderer, "Score: &e" + this.mc.thePlayer.getScore(), this.width / 2, 100, 16777215); + super.drawScreen(var1, var2, var3); + } + + public boolean doesGuiPauseGame() { + return false; + } +} diff --git a/src/net/minecraft/src/GuiIngame.java b/src/net/minecraft/src/GuiIngame.java new file mode 100644 index 0000000..f08a0db --- /dev/null +++ b/src/net/minecraft/src/GuiIngame.java @@ -0,0 +1,222 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class GuiIngame extends Gui { + private static RenderItem itemRenderer = new RenderItem(); + private List chatMessageList = new ArrayList(); + private Random rand = new Random(); + private Minecraft mc; + public String testMessage = null; + private int updateCounter = 0; + public float damageGuiPartialTime; + float prevVignetteBrightness = 1.0F; + + public GuiIngame(Minecraft var1) { + this.mc = var1; + } + + public void renderGameOverlay(float var1, boolean var2, int var3, int var4) { + ScaledResolution var5 = new ScaledResolution(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(this.mc.gameSettings.fancyGraphics) { + this.renderVignette(this.mc.thePlayer.getEntityBrightness(var1), var6, var7); + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/gui/gui.png")); + InventoryPlayer var9 = 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 + var9.currentItem * 20, var7 - 22 - 1, 0, 22, 24, 22); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/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); + boolean var10 = this.mc.thePlayer.heartsLife / 3 % 2 == 1; + if(this.mc.thePlayer.heartsLife < 10) { + var10 = false; + } + + int var11 = this.mc.thePlayer.health; + int var12 = this.mc.thePlayer.prevHealth; + this.rand.setSeed((long)(this.updateCounter * 312871)); + int var13; + int var14; + int var15; + if(this.mc.playerController.shouldDrawHUD()) { + var13 = this.mc.thePlayer.getPlayerArmorValue(); + + int var16; + for(var14 = 0; var14 < 10; ++var14) { + var15 = var7 - 32; + if(var13 > 0) { + var16 = var6 / 2 + 91 - var14 * 8 - 9; + if(var14 * 2 + 1 < var13) { + this.drawTexturedModalRect(var16, var15, 34, 9, 9, 9); + } + + if(var14 * 2 + 1 == var13) { + this.drawTexturedModalRect(var16, var15, 25, 9, 9, 9); + } + + if(var14 * 2 + 1 > var13) { + this.drawTexturedModalRect(var16, var15, 16, 9, 9, 9); + } + } + + byte var25 = 0; + if(var10) { + var25 = 1; + } + + int var17 = var6 / 2 - 91 + var14 * 8; + if(var11 <= 4) { + var15 += this.rand.nextInt(2); + } + + this.drawTexturedModalRect(var17, var15, 16 + var25 * 9, 0, 9, 9); + if(var10) { + if(var14 * 2 + 1 < var12) { + this.drawTexturedModalRect(var17, var15, 70, 0, 9, 9); + } + + if(var14 * 2 + 1 == var12) { + this.drawTexturedModalRect(var17, var15, 79, 0, 9, 9); + } + } + + if(var14 * 2 + 1 < var11) { + this.drawTexturedModalRect(var17, var15, 52, 0, 9, 9); + } + + if(var14 * 2 + 1 == var11) { + this.drawTexturedModalRect(var17, var15, 61, 0, 9, 9); + } + } + + if(this.mc.thePlayer.isInsideOfMaterial(Material.water)) { + var14 = (int)Math.ceil((double)(this.mc.thePlayer.air - 2) * 10.0D / 300.0D); + var15 = (int)Math.ceil((double)this.mc.thePlayer.air * 10.0D / 300.0D) - var14; + + for(var16 = 0; var16 < var14 + var15; ++var16) { + if(var16 < var14) { + this.drawTexturedModalRect(var6 / 2 - 91 + var16 * 8, var7 - 32 - 9, 16, 18, 9, 9); + } else { + this.drawTexturedModalRect(var6 / 2 - 91 + var16 * 8, var7 - 32 - 9, 25, 18, 9, 9); + } + } + } + } + + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glPushMatrix(); + GL11.glRotatef(180.0F, 1.0F, 0.0F, 0.0F); + RenderHelper.enableStandardItemLighting(); + GL11.glPopMatrix(); + + for(var13 = 0; var13 < 9; ++var13) { + var14 = var6 / 2 - 90 + var13 * 20 + 2; + var15 = var7 - 16 - 3; + this.renderInventorySlot(var13, var14, var15, var1); + } + + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + if(this.mc.gameSettings.showFPS) { + var8.drawStringWithShadow("Minecraft Infdev (" + 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); + long var22 = Runtime.getRuntime().maxMemory(); + long var26 = Runtime.getRuntime().totalMemory(); + long var27 = Runtime.getRuntime().freeMemory(); + long var19 = var26 - var27; + String var21 = "Used memory: " + var19 * 100L / var22 + "% (" + var19 / 1024L / 1024L + "MB) of " + var22 / 1024L / 1024L + "MB"; + this.drawString(var8, var21, var6 - var8.getStringWidth(var21) - 2, 2, 14737632); + var21 = "Allocated memory: " + var26 * 100L / var22 + "% (" + var26 / 1024L / 1024L + "MB)"; + this.drawString(var8, var21, var6 - var8.getStringWidth(var21) - 2, 12, 14737632); + } else { + var8.drawStringWithShadow("Minecraft Infdev", 2, 2, 16777215); + } + + byte var23 = 10; + boolean var24 = false; + + for(var15 = 0; var15 < this.chatMessageList.size() && var15 < var23; ++var15) { + if(((ChatLine)this.chatMessageList.get(var15)).updateCounter < 200 || var24) { + var8.drawStringWithShadow(((ChatLine)this.chatMessageList.get(var15)).message, 2, var7 - 8 - var15 * 9 - 20, 16777215); + } + } + + } + + 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); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/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 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.drawItemIntoGui(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() { + ++this.updateCounter; + + for(int var1 = 0; var1 < this.chatMessageList.size(); ++var1) { + ++((ChatLine)this.chatMessageList.get(var1)).updateCounter; + } + + } +} diff --git a/src/net/minecraft/src/GuiIngameMenu.java b/src/net/minecraft/src/GuiIngameMenu.java new file mode 100644 index 0000000..a6b46fe --- /dev/null +++ b/src/net/minecraft/src/GuiIngameMenu.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +public class GuiIngameMenu extends GuiScreen { + private int updateCounter2 = 0; + private int updateCounter = 0; + + public void initGui() { + this.updateCounter2 = 0; + this.controlList.clear(); + this.controlList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 48, "Save and quit to title..")); + this.controlList.add(new GuiButton(4, this.width / 2 - 100, this.height / 4 + 24, "Back to game")); + this.controlList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 96, "Options...")); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 0) { + this.mc.displayGuiScreen(new GuiOptions(this, this.mc.gameSettings)); + } + + if(var1.id == 1) { + this.mc.changeWorld1((World)null); + this.mc.displayGuiScreen(new GuiMainMenu()); + } + + if(var1.id == 4) { + this.mc.displayGuiScreen((GuiScreen)null); + this.mc.setIngameFocus(); + } + + } + + public void updateScreen() { + super.updateScreen(); + ++this.updateCounter; + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + boolean var4 = !this.mc.theWorld.saveWorld(this.updateCounter2++); + if(var4 || this.updateCounter < 20) { + float var5 = ((float)(this.updateCounter % 10) + var3) / 10.0F; + var5 = MathHelper.sin(var5 * (float)Math.PI * 2.0F) * 0.2F + 0.8F; + int var6 = (int)(255.0F * var5); + this.drawString(this.fontRenderer, "Saving level..", 8, this.height - 16, var6 << 16 | var6 << 8 | var6); + } + + 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..a145409 --- /dev/null +++ b/src/net/minecraft/src/GuiInventory.java @@ -0,0 +1,117 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class GuiInventory extends GuiContainer { + private InventoryCrafting craftingInventory = new InventoryCrafting(this, 2, 2); + private IInventory craftingResultInventory = new InventoryCraftResult(); + private float xSize_lo; + private float ySize_lo; + + public GuiInventory(IInventory var1) { + this.allowUserInput = true; + this.inventorySlots.add(new SlotCrafting(this, this.craftingInventory, this.craftingResultInventory, 0, 144, 36)); + + int var2; + int var3; + for(var2 = 0; var2 < 2; ++var2) { + for(var3 = 0; var3 < 2; ++var3) { + this.inventorySlots.add(new Slot(this, this.craftingInventory, var3 + var2 * 2, 88 + var3 * 18, 26 + var2 * 18)); + } + } + + for(var2 = 0; var2 < 4; ++var2) { + this.inventorySlots.add(new SlotArmor(this, this, var1, var1.getSizeInventory() - 1 - var2, 8, 8 + var2 * 18, var2)); + } + + for(var2 = 0; var2 < 3; ++var2) { + for(var3 = 0; var3 < 9; ++var3) { + this.inventorySlots.add(new Slot(this, var1, var3 + (var2 + 1) * 9, 8 + var3 * 18, 84 + var2 * 18)); + } + } + + for(var2 = 0; var2 < 9; ++var2) { + this.inventorySlots.add(new Slot(this, var1, var2, 8 + var2 * 18, 142)); + } + + } + + public void onGuiClosed() { + super.onGuiClosed(); + + for(int var1 = 0; var1 < this.craftingInventory.getSizeInventory(); ++var1) { + ItemStack var2 = this.craftingInventory.getStackInSlot(var1); + if(var2 != null) { + this.mc.thePlayer.dropPlayerItem(var2); + } + } + + } + + public void onCraftMatrixChanged(IInventory var1) { + int[] var2 = new int[9]; + + for(int var3 = 0; var3 < 3; ++var3) { + for(int var4 = 0; var4 < 3; ++var4) { + int var5 = -1; + if(var3 < 2 && var4 < 2) { + ItemStack var6 = this.craftingInventory.getStackInSlot(var3 + var4 * 2); + if(var6 != null) { + var5 = var6.itemID; + } + } + + var2[var3 + var4 * 3] = var5; + } + } + + this.craftingResultInventory.setInventorySlotContents(0, CraftingManager.getInstance().findMatchingRecipe(var2)); + } + + protected void drawGuiContainerForegroundLayer() { + this.fontRenderer.drawString("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 = this.mc.renderEngine.getTexture("/gui/inventory.png"); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.mc.renderEngine.bindTexture(var2); + int var3 = (this.width - this.xSize) / 2; + int var4 = (this.height - this.ySize) / 2; + this.drawTexturedModalRect(var3, var4, 0, 0, this.xSize, this.ySize); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glEnable(GL11.GL_COLOR_MATERIAL); + GL11.glPushMatrix(); + GL11.glTranslatef((float)(var3 + 51), (float)(var4 + 75), 50.0F); + float var5 = 30.0F; + GL11.glScalef(-var5, var5, var5); + GL11.glRotatef(180.0F, 0.0F, 0.0F, 1.0F); + float var6 = this.mc.thePlayer.renderYawOffset; + float var7 = this.mc.thePlayer.rotationYaw; + float var8 = this.mc.thePlayer.rotationPitch; + float var9 = (float)(var3 + 51) - this.xSize_lo; + float var10 = (float)(var4 + 75 - 50) - this.ySize_lo; + 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)(var10 / 40.0F))) * 20.0F, 1.0F, 0.0F, 0.0F); + this.mc.thePlayer.renderYawOffset = (float)Math.atan((double)(var9 / 40.0F)) * 20.0F; + this.mc.thePlayer.rotationYaw = (float)Math.atan((double)(var9 / 40.0F)) * 40.0F; + this.mc.thePlayer.rotationPitch = -((float)Math.atan((double)(var10 / 40.0F))) * 20.0F; + GL11.glTranslatef(0.0F, this.mc.thePlayer.yOffset, 0.0F); + RenderManager.instance.renderEntityWithPosYaw(this.mc.thePlayer, 0.0D, 0.0D, 0.0D, 0.0F, 1.0F); + this.mc.thePlayer.renderYawOffset = var6; + this.mc.thePlayer.rotationYaw = var7; + this.mc.thePlayer.rotationPitch = var8; + GL11.glPopMatrix(); + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + } +} diff --git a/src/net/minecraft/src/GuiMainMenu.java b/src/net/minecraft/src/GuiMainMenu.java new file mode 100644 index 0000000..2b4f8ad --- /dev/null +++ b/src/net/minecraft/src/GuiMainMenu.java @@ -0,0 +1,71 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class GuiMainMenu extends GuiScreen { + private float updateCounter = 0.0F; + private String[] splashes = new String[]{"Pre-beta!", "As seen on TV!", "Awesome!", "100% pure!", "May contain nuts!", "Better than Prey!", "More polygons!", "Sexy!", "Limited edition!", "Flashing letters!", "Made by Notch!", "Coming soon!", "Best in class!", "When it\'s finished!", "Absolutely dragon free!", "Excitement!", "More than 5000 sold!", "One of a kind!", "700+ hits on YouTube!", "Indev!", "Spiders everywhere!", "Check it out!", "Holy cow, man!", "It\'s a game!", "Made in Sweden!", "Uses LWJGL!", "Reticulating splines!", "Minecraft!", "Yaaay!", "Alpha version!", "Singleplayer!", "Keyboard compatible!", "Undocumented!", "Ingots!", "Exploding creepers!", "That\'s not a moon!", "l33t!", "Create!", "Survive!", "Dungeon!", "Exclusive!", "The bee\'s knees!", "Down with O.P.P.!", "Closed source!", "Classy!", "Wow!", "Not on steam!", "9.95 euro!", "Half price!", "Oh man!", "Check it out!", "Awesome community!", "Pixels!", "Teetsuuuuoooo!", "Kaaneeeedaaaa!", "Now with difficulty!", "Enhanced!", "90% bug free!", "Pretty!", "12 herbs and spices!", "Fat free!", "Absolutely no memes!", "Free dental!", "Ask your doctor!", "Minors welcome!", "Cloud computing!", "Legal in Finland!", "Hard to label!", "Technically good!", "Bringing home the bacon!", "Indie!", "GOTY!", "Ceci n\'est pas une title screen!", "Euclidian!", "Now in 3D!", "Inspirational!", "Herregud!", "Complex cellular automata!", "Yes, sir!", "Played by cowboys!", "OpenGL 1.1!", "Thousands of colors!", "Try it!", "Age of Wonders is better!", "Try the mushroom stew!", "Sensational!", "Hot tamale, hot hot tamale!", "Play him off, keyboard cat!", "Guaranteed!", "Macroscopic!", "Bring it on!", "Random splash!", "Call your mother!", "Monster infighting!", "Loved by millions!", "Ultimate edition!", "Freaky!", "You\'ve got a brand new key!", "Water proof!", "Uninflammable!", "Whoa, dude!", "All inclusive!", "Tell your friends!", "NP is not in P!", "Notch <3 Ez!", "Music by C418!"}; + private String splashString = this.splashes[(int)(Math.random() * (double)this.splashes.length)]; + + public void updateScreen() { + this.updateCounter += 0.01F; + } + + protected void keyTyped(char var1, int var2) { + } + + public void initGui() { + this.controlList.clear(); + this.controlList.add(new GuiButton(1, this.width / 2 - 100, this.height / 4 + 48, "Single player")); + this.controlList.add(new GuiButton(2, this.width / 2 - 100, this.height / 4 + 72, "Multi player")); + this.controlList.add(new GuiButton(3, this.width / 2 - 100, this.height / 4 + 96, "Play tutorial level")); + this.controlList.add(new GuiButton(0, this.width / 2 - 100, this.height / 4 + 120 + 12, "Options...")); + ((GuiButton)this.controlList.get(1)).enabled = false; + ((GuiButton)this.controlList.get(2)).enabled = false; + if(this.mc.session == null) { + ((GuiButton)this.controlList.get(1)).enabled = false; + } + + } + + protected void actionPerformed(GuiButton var1) { + if(var1.id == 0) { + this.mc.displayGuiScreen(new GuiOptions(this, this.mc.gameSettings)); + } + + if(var1.id == 1) { + this.mc.displayGuiScreen(new GuiCreateWorld(this)); + } + + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + Tessellator var4 = Tessellator.instance; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/gui/logo.png")); + short var5 = 256; + byte var6 = 49; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var4.setColorOpaque_I(16777215); + this.drawTexturedModalRect((this.width - var5) / 2, 30, 0, 0, var5, var6); + GL11.glPushMatrix(); + GL11.glTranslatef((float)(this.width / 2 + 90), 70.0F, 0.0F); + GL11.glRotatef(-20.0F, 0.0F, 0.0F, 1.0F); + float var7 = 1.8F - MathHelper.abs(MathHelper.sin((float)(System.currentTimeMillis() % 1000L) / 1000.0F * (float)Math.PI * 2.0F) * 0.1F); + var7 = var7 * 100.0F / (float)(this.fontRenderer.getStringWidth(this.splashString) + 32); + GL11.glScalef(var7, var7, var7); + this.drawCenteredString(this.fontRenderer, this.splashString, 0, -8, 16776960); + GL11.glPopMatrix(); + String var8 = "Copyright Mojang Specifications. Do not distribute."; + this.drawString(this.fontRenderer, var8, this.width - this.fontRenderer.getStringWidth(var8) - 2, this.height - 10, 16777215); + long var9 = Runtime.getRuntime().maxMemory(); + long var11 = Runtime.getRuntime().totalMemory(); + long var13 = Runtime.getRuntime().freeMemory(); + long var15 = var9 - var13; + var8 = "Free memory: " + var15 * 100L / var9 + "% of " + var9 / 1024L / 1024L + "MB"; + this.drawString(this.fontRenderer, var8, this.width - this.fontRenderer.getStringWidth(var8) - 2, 2, 8421504); + var8 = "Allocated memory: " + var11 * 100L / var9 + "% (" + var11 / 1024L / 1024L + "MB)"; + this.drawString(this.fontRenderer, var8, this.width - this.fontRenderer.getStringWidth(var8) - 2, 12, 8421504); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiOptions.java b/src/net/minecraft/src/GuiOptions.java new file mode 100644 index 0000000..a6b73eb --- /dev/null +++ b/src/net/minecraft/src/GuiOptions.java @@ -0,0 +1,45 @@ +package net.minecraft.src; + +public class GuiOptions extends GuiScreen { + private GuiScreen parentScreen; + protected String screenTitle = "Options"; + private GameSettings options; + + public GuiOptions(GuiScreen var1, GameSettings var2) { + this.parentScreen = var1; + this.options = var2; + } + + public void initGui() { + for(int var1 = 0; var1 < this.options.numberOfOptions; ++var1) { + this.controlList.add(new GuiSmallButton(var1, this.width / 2 - 155 + var1 % 2 * 160, this.height / 6 + 24 * (var1 >> 1), this.options.getKeyBinding(var1))); + } + + this.controlList.add(new GuiButton(100, this.width / 2 - 100, this.height / 6 + 120 + 12, "Controls...")); + this.controlList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, "Done")); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id < 100) { + this.options.setOptionFloatValue(var1.id, 1); + var1.displayString = this.options.getKeyBinding(var1.id); + } + + if(var1.id == 100) { + this.mc.displayGuiScreen(new GuiControls(this, this.options)); + } + + if(var1.id == 200) { + this.mc.displayGuiScreen(this.parentScreen); + } + + } + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215); + super.drawScreen(var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/GuiScreen.java b/src/net/minecraft/src/GuiScreen.java new file mode 100644 index 0000000..392f9fc --- /dev/null +++ b/src/net/minecraft/src/GuiScreen.java @@ -0,0 +1,138 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.GL11; + +public class GuiScreen extends Gui { + protected Minecraft mc; + public int width; + public int height; + protected List controlList = new ArrayList(); + public boolean allowUserInput = false; + protected FontRenderer fontRenderer; + + public void drawScreen(int var1, int var2, float var3) { + for(int var4 = 0; var4 < this.controlList.size(); ++var4) { + GuiButton var5 = (GuiButton)this.controlList.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(); + } + + } + + protected void mouseClicked(int var1, int var2, int var3) { + if(var3 == 0) { + for(int var4 = 0; var4 < this.controlList.size(); ++var4) { + GuiButton var5 = (GuiButton)this.controlList.get(var4); + if(var5.mousePressed(var1, var2)) { + this.mc.sndManager.playSoundFX("random.click", 1.0F, 1.0F); + this.actionPerformed(var5); + } + } + } + + } + + protected void mouseMovedOrUp(int var1, int var2, int var3) { + } + + protected void actionPerformed(GuiButton var1) { + } + + public void setWorldAndResolution(Minecraft var1, int var2, int var3) { + this.mc = var1; + this.fontRenderer = var1.fontRenderer; + this.width = var2; + this.height = var3; + this.initGui(); + } + + public void initGui() { + } + + public void handleInput() { + while(Mouse.next()) { + this.handleMouseInput(); + } + + while(Keyboard.next()) { + this.handleKeyboardInput(); + } + + } + + public void handleMouseInput() { + int var1; + int var2; + if(Mouse.getEventButtonState()) { + var1 = Mouse.getEventX() * this.width / this.mc.displayWidth; + var2 = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1; + this.mouseClicked(var1, var2, Mouse.getEventButton()); + } else { + var1 = Mouse.getEventX() * this.width / this.mc.displayWidth; + var2 = this.height - Mouse.getEventY() * this.height / this.mc.displayHeight - 1; + this.mouseMovedOrUp(var1, var2, Mouse.getEventButton()); + } + + } + + public void handleKeyboardInput() { + if(Keyboard.getEventKeyState()) { + if(Keyboard.getEventKey() == Keyboard.KEY_F11) { + this.mc.toggleFullscreen(); + return; + } + + this.keyTyped(Keyboard.getEventCharacter(), Keyboard.getEventKey()); + } + + } + + 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, 1610941696, -1607454656); + } else { + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_FOG); + Tessellator var2 = Tessellator.instance; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/dirt.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)(0 + var1)); + var2.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, (double)(0 + var1)); + var2.draw(); + } + + } + + public boolean doesGuiPauseGame() { + return true; + } + + public void deleteWorld(boolean var1, int var2) { + } +} diff --git a/src/net/minecraft/src/GuiSmallButton.java b/src/net/minecraft/src/GuiSmallButton.java new file mode 100644 index 0000000..e64c277 --- /dev/null +++ b/src/net/minecraft/src/GuiSmallButton.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class GuiSmallButton extends GuiButton { + public GuiSmallButton(int var1, int var2, int var3, String var4) { + super(var1, var2, var3, 150, 20, var4); + } +} diff --git a/src/net/minecraft/src/GuiYesNo.java b/src/net/minecraft/src/GuiYesNo.java new file mode 100644 index 0000000..3c22273 --- /dev/null +++ b/src/net/minecraft/src/GuiYesNo.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +public class GuiYesNo extends GuiScreen { + private GuiScreen parentScreen; + private String message1; + private String message2; + private int worldNumber; + + public GuiYesNo(GuiScreen var1, String var2, String var3, int var4) { + this.parentScreen = var1; + this.message1 = var2; + this.message2 = var3; + this.worldNumber = var4; + } + + public void initGui() { + this.controlList.add(new GuiSmallButton(0, this.width / 2 - 155 + 0, this.height / 6 + 96, "Yes")); + this.controlList.add(new GuiSmallButton(1, this.width / 2 - 155 + 160, this.height / 6 + 96, "No")); + } + + protected void actionPerformed(GuiButton var1) { + this.parentScreen.deleteWorld(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/IBlockAccess.java b/src/net/minecraft/src/IBlockAccess.java new file mode 100644 index 0000000..007ce98 --- /dev/null +++ b/src/net/minecraft/src/IBlockAccess.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public interface IBlockAccess { + int getBlockId(int var1, int var2, int var3); + + TileEntity getBlockTileEntity(int var1, int var2, int var3); + + float getBrightness(int var1, int var2, int var3); + + int getBlockMetadata(int var1, int var2, int var3); + + Material getBlockMaterial(int var1, int var2, int var3); + + boolean isBlockNormalCube(int var1, int var2, int var3); +} 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..c197feb --- /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; + + 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..37743c9 --- /dev/null +++ b/src/net/minecraft/src/IChunkProvider.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public interface IChunkProvider { + boolean chunkExists(int var1, int var2); + + Chunk provideChunk(int var1, int var2); + + void populate(IChunkProvider var1, int var2, int var3); + + boolean saveChunks(boolean var1, IProgressUpdate var2); + + boolean unload100OldestChunks(); + + boolean canSave(); +} diff --git a/src/net/minecraft/src/IInventory.java b/src/net/minecraft/src/IInventory.java new file mode 100644 index 0000000..b4564c7 --- /dev/null +++ b/src/net/minecraft/src/IInventory.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public interface IInventory { + int getSizeInventory(); + + ItemStack getStackInSlot(int var1); + + ItemStack decrStackSize(int var1, int var2); + + void setInventorySlotContents(int var1, ItemStack var2); + + String getInvName(); + + int getInventoryStackLimit(); + + void onInventoryChanged(); +} diff --git a/src/net/minecraft/src/IProgressUpdate.java b/src/net/minecraft/src/IProgressUpdate.java new file mode 100644 index 0000000..1fb3c60 --- /dev/null +++ b/src/net/minecraft/src/IProgressUpdate.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public interface IProgressUpdate { + void displayProgressMessage(String var1); + + void displayLoadingString(String var1); + + void setLoadingProgress(int var1); +} diff --git a/src/net/minecraft/src/IWorldAccess.java b/src/net/minecraft/src/IWorldAccess.java new file mode 100644 index 0000000..abcfcea --- /dev/null +++ b/src/net/minecraft/src/IWorldAccess.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public interface IWorldAccess { + void markBlockAndNeighborsNeedsUpdate(int var1, int var2, int var3); + + void markBlockRangeNeedsUpdate(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 spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12); + + void obtainEntitySkin(Entity var1); + + void releaseEntitySkin(Entity var1); + + void updateAllRenderers(); +} diff --git a/src/net/minecraft/src/ImageBuffer.java b/src/net/minecraft/src/ImageBuffer.java new file mode 100644 index 0000000..149f101 --- /dev/null +++ b/src/net/minecraft/src/ImageBuffer.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; + +public interface ImageBuffer { + BufferedImage parseUserSkin(BufferedImage var1); +} diff --git a/src/net/minecraft/src/ImageBufferDownload.java b/src/net/minecraft/src/ImageBufferDownload.java new file mode 100644 index 0000000..39d9761 --- /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 ImageBuffer { + 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/InventoryCraftResult.java b/src/net/minecraft/src/InventoryCraftResult.java new file mode 100644 index 0000000..de21b2a --- /dev/null +++ b/src/net/minecraft/src/InventoryCraftResult.java @@ -0,0 +1,38 @@ +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[var1]; + } + + public String getInvName() { + return "Result"; + } + + public ItemStack decrStackSize(int var1, int var2) { + if(this.stackResult[var1] != null) { + ItemStack var3 = this.stackResult[var1]; + this.stackResult[var1] = null; + return var3; + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.stackResult[var1] = var2; + } + + public int getInventoryStackLimit() { + return 64; + } + + public void onInventoryChanged() { + } +} diff --git a/src/net/minecraft/src/InventoryCrafting.java b/src/net/minecraft/src/InventoryCrafting.java new file mode 100644 index 0000000..b5b78c3 --- /dev/null +++ b/src/net/minecraft/src/InventoryCrafting.java @@ -0,0 +1,59 @@ +package net.minecraft.src; + +public class InventoryCrafting implements IInventory { + private ItemStack[] stackList; + private int gridSize; + private GuiContainer craftingInventory; + + public InventoryCrafting(GuiContainer var1, int var2, int var3) { + this.gridSize = var2 * var3; + this.stackList = new ItemStack[this.gridSize]; + this.craftingInventory = var1; + } + + public int getSizeInventory() { + return this.gridSize; + } + + public ItemStack getStackInSlot(int var1) { + return this.stackList[var1]; + } + + public String getInvName() { + return "Crafting"; + } + + 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.craftingInventory.onCraftMatrixChanged(this); + return var3; + } else { + var3 = this.stackList[var1].splitStack(var2); + if(this.stackList[var1].stackSize == 0) { + this.stackList[var1] = null; + } + + this.craftingInventory.onCraftMatrixChanged(this); + return var3; + } + } else { + return null; + } + } + + public void setInventorySlotContents(int var1, ItemStack var2) { + this.stackList[var1] = var2; + this.craftingInventory.onCraftMatrixChanged(this); + } + + public int getInventoryStackLimit() { + return 64; + } + + public void onInventoryChanged() { + } +} diff --git a/src/net/minecraft/src/InventoryLargeChest.java b/src/net/minecraft/src/InventoryLargeChest.java new file mode 100644 index 0000000..daced98 --- /dev/null +++ b/src/net/minecraft/src/InventoryLargeChest.java @@ -0,0 +1,47 @@ +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; + this.upperChest = var2; + this.lowerChest = var3; + } + + public int getSizeInventory() { + return this.upperChest.getSizeInventory() + this.lowerChest.getSizeInventory(); + } + + public String getInvName() { + return this.name; + } + + 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 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(); + } +} diff --git a/src/net/minecraft/src/InventoryPlayer.java b/src/net/minecraft/src/InventoryPlayer.java new file mode 100644 index 0000000..3c5e832 --- /dev/null +++ b/src/net/minecraft/src/InventoryPlayer.java @@ -0,0 +1,329 @@ +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 EntityPlayer player; + + public InventoryPlayer(EntityPlayer var1) { + this.player = var1; + } + + public ItemStack getCurrentItem() { + return this.mainInventory[this.currentItem]; + } + + 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 storeItemStack(int var1) { + for(int var2 = 0; var2 < this.mainInventory.length; ++var2) { + if(this.mainInventory[var2] != null && this.mainInventory[var2].itemID == var1 && this.mainInventory[var2].stackSize < this.mainInventory[var2].getMaxStackSize() && this.mainInventory[var2].stackSize < this.getInventoryStackLimit()) { + return var2; + } + } + + return -1; + } + + private 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, boolean var2) { + int var3 = this.getInventorySlotContainItem(var1); + if(var3 >= 0 && var3 < 9) { + this.currentItem = var3; + } + } + + 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; + } + + } + + private int storePartialItemStack(int var1, int var2) { + int var3 = this.storeItemStack(var1); + if(var3 < 0) { + var3 = this.getFirstEmptyStack(); + } + + if(var3 < 0) { + return var2; + } else { + if(this.mainInventory[var3] == null) { + this.mainInventory[var3] = new ItemStack(var1, 0); + } + + int var4 = var2; + if(var2 > this.mainInventory[var3].getMaxStackSize() - this.mainInventory[var3].stackSize) { + var4 = this.mainInventory[var3].getMaxStackSize() - this.mainInventory[var3].stackSize; + } + + if(var4 > this.getInventoryStackLimit() - this.mainInventory[var3].stackSize) { + var4 = this.getInventoryStackLimit() - this.mainInventory[var3].stackSize; + } + + if(var4 == 0) { + return var2; + } else { + var2 -= var4; + this.mainInventory[var3].stackSize += var4; + this.mainInventory[var3].animationsToGo = 5; + return var2; + } + } + } + + public void decrementAnimations() { + for(int var1 = 0; var1 < this.mainInventory.length; ++var1) { + if(this.mainInventory[var1] != null && this.mainInventory[var1].animationsToGo > 0) { + --this.mainInventory[var1].animationsToGo; + } + } + + } + + 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 addItemStackToInventory(ItemStack var1) { + if(var1.itemDmg == 0) { + var1.stackSize = this.storePartialItemStack(var1.itemID, var1.stackSize); + if(var1.stackSize == 0) { + return true; + } + } + + int var2 = this.getFirstEmptyStack(); + if(var2 >= 0) { + this.mainInventory[var2] = var1; + this.mainInventory[var2].animationsToGo = 5; + return true; + } else { + return false; + } + } + + 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 void setInventorySlotContents(int var1, ItemStack var2) { + ItemStack[] var3 = this.mainInventory; + if(var1 >= this.mainInventory.length) { + var3 = this.armorInventory; + var1 -= this.mainInventory.length; + } + + 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.setTag(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.setTag(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; + if(var4 >= 0 && var4 < this.mainInventory.length) { + this.mainInventory[var4] = new ItemStack(var3); + } + + if(var4 >= 100 && var4 < this.armorInventory.length + 100) { + this.armorInventory[var4 - 100] = new ItemStack(var3); + } + } + + } + + public int getSizeInventory() { + return this.mainInventory.length + 4; + } + + public ItemStack getStackInSlot(int var1) { + ItemStack[] var2 = this.mainInventory; + if(var1 >= this.mainInventory.length) { + var2 = this.armorInventory; + var1 -= this.mainInventory.length; + } + + return var2[var1]; + } + + public String getInvName() { + return "Inventory"; + } + + 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 != Material.rock && var1.blockMaterial != Material.iron) { + 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; + int var2 = 0; + int var3 = 0; + + for(int var4 = 0; var4 < this.armorInventory.length; ++var4) { + if(this.armorInventory[var4] != null && this.armorInventory[var4].getItem() instanceof ItemArmor) { + int var5 = this.armorInventory[var4].getMaxDamage(); + int var6 = this.armorInventory[var4].itemDmg; + int var7 = var5 - var6; + var2 += var7; + var3 += var5; + int var8 = ((ItemArmor)this.armorInventory[var4].getItem()).damageReduceAmount; + var1 += var8; + } + } + + if(var3 == 0) { + return 0; + } else { + return (var1 - 1) * var2 / var3 + 1; + } + } + + public void damageArmor(int var1) { + 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); + if(this.armorInventory[var2].stackSize == 0) { + this.armorInventory[var2].onItemDestroyedByUse(this.player); + 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() { + } +} diff --git a/src/net/minecraft/src/IsoImageBuffer.java b/src/net/minecraft/src/IsoImageBuffer.java new file mode 100644 index 0000000..51bd4c2 --- /dev/null +++ b/src/net/minecraft/src/IsoImageBuffer.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; + +public class IsoImageBuffer { + public BufferedImage image; + public World level; + public int chunkX; + public int chunkZ; + public boolean rendered = false; + public boolean noContent = false; + public int lastVisible = 0; + public boolean addedToRenderQueue = false; + + public IsoImageBuffer(World var1, int var2, int var3) { + this.level = var1; + this.setChunkPosition(var2, var3); + } + + public void setChunkPosition(int var1, int var2) { + this.rendered = false; + this.chunkX = var1; + this.chunkZ = var2; + this.lastVisible = 0; + this.addedToRenderQueue = false; + } + + public void setWorldAndChunkPosition(World var1, int var2, int var3) { + this.level = var1; + this.setChunkPosition(var2, var3); + } +} diff --git a/src/net/minecraft/src/Item.java b/src/net/minecraft/src/Item.java new file mode 100644 index 0000000..5f953d1 --- /dev/null +++ b/src/net/minecraft/src/Item.java @@ -0,0 +1,141 @@ +package net.minecraft.src; + +import java.util.Random; + +public class Item { + protected static Random itemRand = new Random(); + public static Item[] itemsList = new Item[1024]; + public static Item shovel = (new ItemSpade(0, 2)).setIconIndex(82); + public static Item pickaxeSteel = (new ItemPickaxe(1, 2)).setIconIndex(98); + public static Item axeSteel = (new ItemAxe(2, 2)).setIconIndex(114); + public static Item striker = (new ItemFlintAndSteel(3)).setIconIndex(5); + public static Item appleRed = (new ItemFood(4, 4)).setIconIndex(10); + public static Item bow = (new ItemBow(5)).setIconIndex(21); + public static Item arrow = (new Item(6)).setIconIndex(37); + public static Item coal = (new Item(7)).setIconIndex(7); + public static Item diamond = (new Item(8)).setIconIndex(55); + public static Item ingotIron = (new Item(9)).setIconIndex(23); + public static Item ingotGold = (new Item(10)).setIconIndex(39); + public static Item swordSteel = (new ItemSword(11, 2)).setIconIndex(66); + public static Item swordWood = (new ItemSword(12, 0)).setIconIndex(64); + public static Item shovelWood = (new ItemSpade(13, 0)).setIconIndex(80); + public static Item pickaxeWood = (new ItemPickaxe(14, 0)).setIconIndex(96); + public static Item axeWood = (new ItemAxe(15, 0)).setIconIndex(112); + public static Item swordStone = (new ItemSword(16, 1)).setIconIndex(65); + public static Item shovelStone = (new ItemSpade(17, 1)).setIconIndex(81); + public static Item pickaxeStone = (new ItemPickaxe(18, 1)).setIconIndex(97); + public static Item axeStone = (new ItemAxe(19, 1)).setIconIndex(113); + public static Item swordDiamond = (new ItemSword(20, 3)).setIconIndex(67); + public static Item shovelDiamond = (new ItemSpade(21, 3)).setIconIndex(83); + public static Item pickaxeDiamond = (new ItemPickaxe(22, 3)).setIconIndex(99); + public static Item axeDiamond = (new ItemAxe(23, 3)).setIconIndex(115); + public static Item stick = (new Item(24)).setIconIndex(53); + public static Item bowlEmpty = (new Item(25)).setIconIndex(71); + public static Item bowlSoup = (new ItemSoup(26, 10)).setIconIndex(72); + public static Item swordGold = (new ItemSword(27, 0)).setIconIndex(68); + public static Item shovelGold = (new ItemSpade(28, 0)).setIconIndex(84); + public static Item pickaxeGold = (new ItemPickaxe(29, 0)).setIconIndex(100); + public static Item axeGold = (new ItemAxe(30, 0)).setIconIndex(116); + public static Item silk = (new Item(31)).setIconIndex(8); + public static Item feather = (new Item(32)).setIconIndex(24); + public static Item gunpowder = (new Item(33)).setIconIndex(40); + public static Item hoeWood = (new ItemHoe(34, 0)).setIconIndex(128); + public static Item hoeStone = (new ItemHoe(35, 1)).setIconIndex(129); + public static Item hoeSteel = (new ItemHoe(36, 2)).setIconIndex(130); + public static Item hoeDiamond = (new ItemHoe(37, 3)).setIconIndex(131); + public static Item hoeGold = (new ItemHoe(38, 4)).setIconIndex(132); + public static Item seeds = (new ItemSeeds(39, Block.crops.blockID)).setIconIndex(9); + public static Item wheat = (new Item(40)).setIconIndex(25); + public static Item bread = (new ItemFood(41, 5)).setIconIndex(41); + public static Item helmetLeather = (new ItemArmor(42, 0, 0, 0)).setIconIndex(0); + public static Item plateLeather = (new ItemArmor(43, 0, 0, 1)).setIconIndex(16); + public static Item legsLeather = (new ItemArmor(44, 0, 0, 2)).setIconIndex(32); + public static Item bootsLeather = (new ItemArmor(45, 0, 0, 3)).setIconIndex(48); + public static Item helmetChain = (new ItemArmor(46, 1, 1, 0)).setIconIndex(1); + public static Item plateChain = (new ItemArmor(47, 1, 1, 1)).setIconIndex(17); + public static Item legsChain = (new ItemArmor(48, 1, 1, 2)).setIconIndex(33); + public static Item bootsChain = (new ItemArmor(49, 1, 1, 3)).setIconIndex(49); + public static Item helmetSteel = (new ItemArmor(50, 2, 2, 0)).setIconIndex(2); + public static Item plateSteel = (new ItemArmor(51, 2, 2, 1)).setIconIndex(18); + public static Item legsSteel = (new ItemArmor(52, 2, 2, 2)).setIconIndex(34); + public static Item bootsSteel = (new ItemArmor(53, 2, 2, 3)).setIconIndex(50); + public static Item helmetDiamond = (new ItemArmor(54, 3, 3, 0)).setIconIndex(3); + public static Item plateDiamonhd = (new ItemArmor(55, 3, 3, 1)).setIconIndex(19); + public static Item legsDiamond = (new ItemArmor(56, 3, 3, 2)).setIconIndex(35); + public static Item bootsDiamond = (new ItemArmor(57, 3, 3, 3)).setIconIndex(51); + public static Item helmetGold = (new ItemArmor(58, 1, 4, 0)).setIconIndex(4); + public static Item plateGold = (new ItemArmor(59, 1, 4, 1)).setIconIndex(20); + public static Item legsGold = (new ItemArmor(60, 1, 4, 2)).setIconIndex(36); + public static Item bootsGold = (new ItemArmor(61, 1, 4, 3)).setIconIndex(52); + public static Item flint = (new Item(62)).setIconIndex(6); + public static Item porkRaw = (new ItemFood(63, 3)).setIconIndex(87); + public static Item porkCooked = (new ItemFood(64, 8)).setIconIndex(88); + public static Item painting = (new ItemPainting(65)).setIconIndex(26); + public static Item appleGold = (new ItemFood(66, 42)).setIconIndex(11); + public static Item sign = (new ItemSign(67)).setIconIndex(42); + public static Item door = (new ItemDoor(68)).setIconIndex(43); + public static Item bucketEmpty = (new ItemBucket(69, 0)).setIconIndex(74); + public static Item bucketWater = (new ItemBucket(70, Block.waterMoving.blockID)).setIconIndex(75); + public static Item bucketLava = (new ItemBucket(71, Block.lavaMoving.blockID)).setIconIndex(76); + public static Item minecart = (new ItemMinecart(72)).setIconIndex(135); + public static Item saddle = (new ItemSaddle(73)).setIconIndex(104); + public final int shiftedIndex; + protected int maxStackSize = 64; + protected int maxDamage = 32; + protected int iconIndex; + + protected Item(int var1) { + this.shiftedIndex = 256 + var1; + if(itemsList[256 + var1] != null) { + System.out.println("CONFLICT @ " + var1); + } + + itemsList[256 + var1] = this; + } + + public Item setIconIndex(int var1) { + this.iconIndex = var1; + return this; + } + + public int getIconFromDamage(ItemStack var1) { + return this.iconIndex; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + return false; + } + + public float getStrVsBlock(ItemStack var1, Block var2) { + return 1.0F; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + return var1; + } + + public int getItemStackLimit() { + return this.maxStackSize; + } + + public int getMaxDamage() { + return this.maxDamage; + } + + public void hitEntity(ItemStack var1, EntityLiving var2) { + } + + public void onBlockDestroyed(ItemStack var1, int var2, int var3, int var4, int var5) { + } + + public int getDamageVsEntity(Entity var1) { + return 1; + } + + public boolean canHarvestBlock(Block var1) { + return false; + } + + public void saddleEntity(ItemStack var1, EntityLiving var2) { + } +} diff --git a/src/net/minecraft/src/ItemArmor.java b/src/net/minecraft/src/ItemArmor.java new file mode 100644 index 0000000..e267b4d --- /dev/null +++ b/src/net/minecraft/src/ItemArmor.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class ItemArmor extends Item { + private static final int[] damageReduceAmountArray = new int[]{3, 8, 6, 3}; + private static final int[] maxDamageArray = new int[]{11, 16, 15, 13}; + public final int armorLevel; + public final int armorType; + public final int damageReduceAmount; + public final int renderIndex; + + public ItemArmor(int var1, int var2, int var3, int var4) { + super(var1); + this.armorLevel = var2; + this.armorType = var4; + this.renderIndex = var3; + this.damageReduceAmount = damageReduceAmountArray[var4]; + this.maxDamage = maxDamageArray[var4] * 3 << var2; + this.maxStackSize = 1; + } +} diff --git a/src/net/minecraft/src/ItemAxe.java b/src/net/minecraft/src/ItemAxe.java new file mode 100644 index 0000000..69fdc7d --- /dev/null +++ b/src/net/minecraft/src/ItemAxe.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public class ItemAxe extends ItemTool { + private static Block[] blocksEffectiveAgainst = new Block[]{Block.planks, Block.bookshelf, Block.wood, Block.chest}; + + public ItemAxe(int var1, int var2) { + super(var1, 3, var2, blocksEffectiveAgainst); + } +} diff --git a/src/net/minecraft/src/ItemBlock.java b/src/net/minecraft/src/ItemBlock.java new file mode 100644 index 0000000..5d15793 --- /dev/null +++ b/src/net/minecraft/src/ItemBlock.java @@ -0,0 +1,52 @@ +package net.minecraft.src; + +public class ItemBlock extends Item { + private int blockID; + + public ItemBlock(int var1) { + super(var1); + this.blockID = var1 + 256; + this.setIconIndex(Block.blocksList[var1 + 256].getBlockTextureFromSide(2)); + } + + public boolean onItemUse(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; + } + + if(var1.stackSize == 0) { + return false; + } else { + if(var3.canBlockBePlacedAt(this.blockID, var4, var5, var6, false)) { + Block var8 = Block.blocksList[this.blockID]; + if(var3.setBlockWithNotify(var4, var5, var6, this.blockID)) { + Block.blocksList[this.blockID].onBlockPlaced(var3, var4, var5, var6, var7); + var3.playSoundEffect((double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), var8.stepSound.getStepSound(), (var8.stepSound.getVolume() + 1.0F) / 2.0F, var8.stepSound.getPitch() * 0.8F); + --var1.stackSize; + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ItemBow.java b/src/net/minecraft/src/ItemBow.java new file mode 100644 index 0000000..3b7d240 --- /dev/null +++ b/src/net/minecraft/src/ItemBow.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class ItemBow extends Item { + public ItemBow(int var1) { + super(var1); + this.maxStackSize = 1; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + if(var3.inventory.consumeInventoryItem(Item.arrow.shiftedIndex)) { + var2.playSoundAtEntity(var3, "random.bow", 1.0F, 1.0F / (itemRand.nextFloat() * 0.4F + 0.8F)); + var2.spawnEntityInWorld(new EntityArrow(var2, var3)); + } + + return var1; + } +} diff --git a/src/net/minecraft/src/ItemBucket.java b/src/net/minecraft/src/ItemBucket.java new file mode 100644 index 0000000..47af484 --- /dev/null +++ b/src/net/minecraft/src/ItemBucket.java @@ -0,0 +1,82 @@ +package net.minecraft.src; + +public class ItemBucket extends Item { + private int isFull; + + public ItemBucket(int var1, int var2) { + super(var1); + this.maxStackSize = 1; + this.maxDamage = 64; + this.isFull = var2; + } + + 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; + double var11 = var3.prevPosZ + (var3.posZ - var3.prevPosZ) * (double)var4; + Vec3D var13 = Vec3D.createVector(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; + Vec3D var23 = var13.addVector((double)var18 * var21, (double)var17 * var21, (double)var20 * var21); + MovingObjectPosition var24 = var2.rayTraceBlocks_do(var13, var23, this.isFull == 0); + if(var24 == null) { + return var1; + } else { + if(var24.typeOfHit == 0) { + int var25 = var24.blockX; + int var26 = var24.blockY; + int var27 = var24.blockZ; + if(this.isFull == 0) { + if(var2.getBlockMaterial(var25, var26, var27) == Material.water && var2.getBlockMetadata(var25, var26, var27) == 0) { + var2.setBlockWithNotify(var25, var26, var27, 0); + return new ItemStack(Item.bucketWater); + } + + if(var2.getBlockMaterial(var25, var26, var27) == Material.lava && var2.getBlockMetadata(var25, var26, var27) == 0) { + var2.setBlockWithNotify(var25, var26, var27, 0); + return new ItemStack(Item.bucketLava); + } + } else { + if(var24.sideHit == 0) { + --var26; + } + + if(var24.sideHit == 1) { + ++var26; + } + + if(var24.sideHit == 2) { + --var27; + } + + if(var24.sideHit == 3) { + ++var27; + } + + if(var24.sideHit == 4) { + --var25; + } + + if(var24.sideHit == 5) { + ++var25; + } + + if(var2.getBlockId(var25, var26, var27) == 0 || !var2.getBlockMaterial(var25, var26, var27).isSolid()) { + var2.setBlockAndMetadataWithNotify(var25, var26, var27, this.isFull, 0); + return new ItemStack(Item.bucketEmpty); + } + } + } + + return var1; + } + } +} diff --git a/src/net/minecraft/src/ItemDoor.java b/src/net/minecraft/src/ItemDoor.java new file mode 100644 index 0000000..95d9d03 --- /dev/null +++ b/src/net/minecraft/src/ItemDoor.java @@ -0,0 +1,62 @@ +package net.minecraft.src; + +public class ItemDoor extends Item { + public ItemDoor(int var1) { + super(var1); + this.maxDamage = 64; + this.maxStackSize = 1; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(var7 != 1) { + return false; + } else { + ++var5; + if(!Block.doorWood.canPlaceBlockAt(var3, var4, var5, var6)) { + return false; + } else { + int var8 = MathHelper.floor_double((double)((var2.rotationYaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3; + byte var9 = 0; + byte var10 = 0; + if(var8 == 0) { + var10 = 1; + } + + if(var8 == 1) { + var9 = -1; + } + + if(var8 == 2) { + var10 = -1; + } + + if(var8 == 3) { + var9 = 1; + } + + int var11 = (var3.isBlockNormalCube(var4 - var9, var5, var6 - var10) ? 1 : 0) + (var3.isBlockNormalCube(var4 - var9, var5 + 1, var6 - var10) ? 1 : 0); + int var12 = (var3.isBlockNormalCube(var4 + var9, var5, var6 + var10) ? 1 : 0) + (var3.isBlockNormalCube(var4 + var9, var5 + 1, var6 + var10) ? 1 : 0); + boolean var13 = var3.getBlockId(var4 - var9, var5, var6 - var10) == Block.doorWood.blockID || var3.getBlockId(var4 - var9, var5 + 1, var6 - var10) == Block.doorWood.blockID; + boolean var14 = var3.getBlockId(var4 + var9, var5, var6 + var10) == Block.doorWood.blockID || var3.getBlockId(var4 + var9, var5 + 1, var6 + var10) == Block.doorWood.blockID; + boolean var15 = false; + if(var13 && !var14) { + var15 = true; + } else if(var12 > var11) { + var15 = true; + } + + if(var15) { + var8 = var8 - 1 & 3; + var8 += 4; + } + + var3.setBlockWithNotify(var4, var5, var6, Block.doorWood.blockID); + var3.setBlockMetadataWithNotify(var4, var5, var6, var8); + var3.setBlockWithNotify(var4, var5 + 1, var6, Block.doorWood.blockID); + var3.setBlockMetadataWithNotify(var4, var5 + 1, var6, var8 + 8); + --var1.stackSize; + return true; + } + } + } +} diff --git a/src/net/minecraft/src/ItemFlintAndSteel.java b/src/net/minecraft/src/ItemFlintAndSteel.java new file mode 100644 index 0000000..cd682fc --- /dev/null +++ b/src/net/minecraft/src/ItemFlintAndSteel.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +public class ItemFlintAndSteel extends Item { + public ItemFlintAndSteel(int var1) { + super(var1); + this.maxStackSize = 1; + this.maxDamage = 64; + } + + public boolean onItemUse(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); + if(var8 == 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.setBlockWithNotify(var4, var5, var6, Block.fire.blockID); + } + + var1.damageItem(1); + return true; + } +} diff --git a/src/net/minecraft/src/ItemFood.java b/src/net/minecraft/src/ItemFood.java new file mode 100644 index 0000000..d0b8bf9 --- /dev/null +++ b/src/net/minecraft/src/ItemFood.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class ItemFood extends Item { + private int healAmount; + + public ItemFood(int var1, int var2) { + super(var1); + this.healAmount = var2; + this.maxStackSize = 1; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + --var1.stackSize; + var3.heal(this.healAmount); + return var1; + } +} diff --git a/src/net/minecraft/src/ItemHoe.java b/src/net/minecraft/src/ItemHoe.java new file mode 100644 index 0000000..6e2a795 --- /dev/null +++ b/src/net/minecraft/src/ItemHoe.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +public class ItemHoe extends Item { + public ItemHoe(int var1, int var2) { + super(var1); + this.maxStackSize = 1; + this.maxDamage = 32 << var2; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + int var8 = var3.getBlockId(var4, var5, var6); + Material var9 = var3.getBlockMaterial(var4, var5 + 1, var6); + if((var9.isSolid() || var8 != Block.grass.blockID) && var8 != Block.dirt.blockID) { + return false; + } else { + Block var10 = Block.tilledField; + var3.playSoundEffect((double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), var10.stepSound.getStepSound(), (var10.stepSound.getVolume() + 1.0F) / 2.0F, var10.stepSound.getPitch() * 0.8F); + var3.setBlockWithNotify(var4, var5, var6, var10.blockID); + var1.damageItem(1); + if(var3.rand.nextInt(8) == 0 && var8 == Block.grass.blockID) { + byte var11 = 1; + + for(int var12 = 0; var12 < var11; ++var12) { + float var13 = 0.7F; + float var14 = var3.rand.nextFloat() * var13 + (1.0F - var13) * 0.5F; + float var15 = 1.2F; + float var16 = var3.rand.nextFloat() * var13 + (1.0F - var13) * 0.5F; + EntityItem var17 = new EntityItem(var3, (double)((float)var4 + var14), (double)((float)var5 + var15), (double)((float)var6 + var16), new ItemStack(Item.seeds)); + var17.delayBeforeCanPickup = 10; + var3.spawnEntityInWorld(var17); + } + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ItemMinecart.java b/src/net/minecraft/src/ItemMinecart.java new file mode 100644 index 0000000..2aa4d3f --- /dev/null +++ b/src/net/minecraft/src/ItemMinecart.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class ItemMinecart extends Item { + public ItemMinecart(int var1) { + super(var1); + this.maxStackSize = 1; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + int var8 = var3.getBlockId(var4, var5, var6); + if(var8 == Block.minecartTrack.blockID) { + var3.spawnEntityInWorld(new EntityMinecart(var3, (double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F))); + --var1.stackSize; + return true; + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/ItemPainting.java b/src/net/minecraft/src/ItemPainting.java new file mode 100644 index 0000000..8cfa711 --- /dev/null +++ b/src/net/minecraft/src/ItemPainting.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +public class ItemPainting extends Item { + public ItemPainting(int var1) { + super(var1); + this.maxDamage = 64; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(var7 == 0) { + return false; + } else if(var7 == 1) { + return false; + } else { + byte var8 = 0; + if(var7 == 4) { + var8 = 1; + } + + if(var7 == 3) { + var8 = 2; + } + + if(var7 == 5) { + var8 = 3; + } + + EntityPainting var9 = new EntityPainting(var3, var4, var5, var6, var8); + if(var9.onValidSurface()) { + var3.spawnEntityInWorld(var9); + --var1.stackSize; + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/ItemPickaxe.java b/src/net/minecraft/src/ItemPickaxe.java new file mode 100644 index 0000000..a5a9ab6 --- /dev/null +++ b/src/net/minecraft/src/ItemPickaxe.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class ItemPickaxe extends ItemTool { + private static Block[] blocksEffectiveAgainst = new Block[]{Block.cobblestone, Block.stairDouble, Block.stairSingle, Block.stone, Block.cobblestoneMossy, Block.oreIron, Block.blockSteel, Block.oreCoal, Block.blockGold, Block.oreGold, Block.oreDiamond, Block.blockDiamond}; + private int getHarvestLevel; + + public ItemPickaxe(int var1, int var2) { + super(var1, 2, var2, blocksEffectiveAgainst); + this.getHarvestLevel = var2; + } + + public boolean canHarvestBlock(Block var1) { + return var1 == Block.obsidian ? this.getHarvestLevel == 3 : (var1 != Block.blockDiamond && var1 != Block.oreDiamond ? (var1 != Block.blockGold && var1 != Block.oreGold ? (var1 != Block.blockSteel && var1 != Block.oreIron ? (var1.blockMaterial == Material.rock ? true : var1.blockMaterial == Material.iron) : this.getHarvestLevel >= 1) : this.getHarvestLevel >= 2) : this.getHarvestLevel >= 2); + } +} diff --git a/src/net/minecraft/src/ItemRenderer.java b/src/net/minecraft/src/ItemRenderer.java new file mode 100644 index 0000000..1d1a353 --- /dev/null +++ b/src/net/minecraft/src/ItemRenderer.java @@ -0,0 +1,361 @@ +package net.minecraft.src; + +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 int swingProgress = 0; + private boolean itemSwingState = false; + private RenderBlocks renderBlocksInstance = new RenderBlocks(); + + public ItemRenderer(Minecraft var1) { + this.mc = var1; + } + + public void renderItemInFirstPerson(float var1) { + float var2 = this.prevEquippedProgress + (this.equippedProgress - this.prevEquippedProgress) * var1; + EntityPlayerSP var3 = this.mc.thePlayer; + GL11.glPushMatrix(); + GL11.glRotatef(var3.prevRotationPitch + (var3.rotationPitch - var3.prevRotationPitch) * var1, 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 var4 = this.mc.theWorld.getBrightness(MathHelper.floor_double(var3.posX), MathHelper.floor_double(var3.posY), MathHelper.floor_double(var3.posZ)); + GL11.glColor4f(var4, var4, var4, 1.0F); + float var5; + float var6; + float var7; + float var8; + if(this.itemToRender != null) { + GL11.glPushMatrix(); + var5 = 0.8F; + if(this.itemSwingState) { + var6 = ((float)this.swingProgress + var1) / 8.0F; + var7 = MathHelper.sin(var6 * (float)Math.PI); + var8 = MathHelper.sin(MathHelper.sqrt_float(var6) * (float)Math.PI); + GL11.glTranslatef(-var8 * 0.4F, MathHelper.sin(MathHelper.sqrt_float(var6) * (float)Math.PI * 2.0F) * 0.2F, -var7 * 0.2F); + } + + GL11.glTranslatef(0.7F * var5, -0.65F * var5 - (1.0F - var2) * 0.6F, -0.9F * var5); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + if(this.itemSwingState) { + var6 = ((float)this.swingProgress + var1) / 8.0F; + var7 = MathHelper.sin(var6 * var6 * (float)Math.PI); + var8 = MathHelper.sin(MathHelper.sqrt_float(var6) * (float)Math.PI); + GL11.glRotatef(-var7 * 20.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var8 * 20.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(-var8 * 80.0F, 1.0F, 0.0F, 0.0F); + } + + var6 = 0.4F; + GL11.glScalef(var6, var6, var6); + if(this.itemToRender.itemID < 256 && Block.blocksList[this.itemToRender.itemID].getRenderType() == 0) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); + this.renderBlocksInstance.renderBlockOnInventory(Block.blocksList[this.itemToRender.itemID]); + } else { + if(this.itemToRender.itemID < 256) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/terrain.png")); + } else { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.mc.renderEngine.getTexture("/gui/items.png")); + } + + Tessellator var22 = Tessellator.instance; + var8 = (float)(this.itemToRender.getIconIndex() % 16 * 16 + 0) / 256.0F; + float var9 = (float)(this.itemToRender.getIconIndex() % 16 * 16 + 16) / 256.0F; + float var10 = (float)(this.itemToRender.getIconIndex() / 16 * 16 + 0) / 256.0F; + float var11 = (float)(this.itemToRender.getIconIndex() / 16 * 16 + 16) / 256.0F; + float var12 = 1.0F; + float var13 = 0.0F; + float var14 = 0.3F; + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + GL11.glTranslatef(-var13, -var14, 0.0F); + float var15 = 1.5F; + GL11.glScalef(var15, var15, var15); + 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); + float var16 = 1.0F / 16.0F; + var22.startDrawingQuads(); + var22.setNormal(0.0F, 0.0F, 1.0F); + var22.addVertexWithUV(0.0D, 0.0D, 0.0D, (double)var9, (double)var11); + var22.addVertexWithUV((double)var12, 0.0D, 0.0D, (double)var8, (double)var11); + var22.addVertexWithUV((double)var12, 1.0D, 0.0D, (double)var8, (double)var10); + var22.addVertexWithUV(0.0D, 1.0D, 0.0D, (double)var9, (double)var10); + var22.draw(); + var22.startDrawingQuads(); + var22.setNormal(0.0F, 0.0F, -1.0F); + var22.addVertexWithUV(0.0D, 1.0D, (double)(0.0F - var16), (double)var9, (double)var10); + var22.addVertexWithUV((double)var12, 1.0D, (double)(0.0F - var16), (double)var8, (double)var10); + var22.addVertexWithUV((double)var12, 0.0D, (double)(0.0F - var16), (double)var8, (double)var11); + var22.addVertexWithUV(0.0D, 0.0D, (double)(0.0F - var16), (double)var9, (double)var11); + var22.draw(); + var22.startDrawingQuads(); + var22.setNormal(-1.0F, 0.0F, 0.0F); + + int var17; + float var18; + float var19; + float var20; + for(var17 = 0; var17 < 16; ++var17) { + var18 = (float)var17 / 16.0F; + var19 = var9 + (var8 - var9) * var18 - 0.001953125F; + var20 = var12 * var18; + var22.addVertexWithUV((double)var20, 0.0D, (double)(0.0F - var16), (double)var19, (double)var11); + var22.addVertexWithUV((double)var20, 0.0D, 0.0D, (double)var19, (double)var11); + var22.addVertexWithUV((double)var20, 1.0D, 0.0D, (double)var19, (double)var10); + var22.addVertexWithUV((double)var20, 1.0D, (double)(0.0F - var16), (double)var19, (double)var10); + } + + var22.draw(); + var22.startDrawingQuads(); + var22.setNormal(1.0F, 0.0F, 0.0F); + + for(var17 = 0; var17 < 16; ++var17) { + var18 = (float)var17 / 16.0F; + var19 = var9 + (var8 - var9) * var18 - 0.001953125F; + var20 = var12 * var18 + 1.0F / 16.0F; + var22.addVertexWithUV((double)var20, 1.0D, (double)(0.0F - var16), (double)var19, (double)var10); + var22.addVertexWithUV((double)var20, 1.0D, 0.0D, (double)var19, (double)var10); + var22.addVertexWithUV((double)var20, 0.0D, 0.0D, (double)var19, (double)var11); + var22.addVertexWithUV((double)var20, 0.0D, (double)(0.0F - var16), (double)var19, (double)var11); + } + + var22.draw(); + var22.startDrawingQuads(); + var22.setNormal(0.0F, 1.0F, 0.0F); + + for(var17 = 0; var17 < 16; ++var17) { + var18 = (float)var17 / 16.0F; + var19 = var11 + (var10 - var11) * var18 - 0.001953125F; + var20 = var12 * var18 + 1.0F / 16.0F; + var22.addVertexWithUV(0.0D, (double)var20, 0.0D, (double)var9, (double)var19); + var22.addVertexWithUV((double)var12, (double)var20, 0.0D, (double)var8, (double)var19); + var22.addVertexWithUV((double)var12, (double)var20, (double)(0.0F - var16), (double)var8, (double)var19); + var22.addVertexWithUV(0.0D, (double)var20, (double)(0.0F - var16), (double)var9, (double)var19); + } + + var22.draw(); + var22.startDrawingQuads(); + var22.setNormal(0.0F, -1.0F, 0.0F); + + for(var17 = 0; var17 < 16; ++var17) { + var18 = (float)var17 / 16.0F; + var19 = var11 + (var10 - var11) * var18 - 0.001953125F; + var20 = var12 * var18; + var22.addVertexWithUV((double)var12, (double)var20, 0.0D, (double)var8, (double)var19); + var22.addVertexWithUV(0.0D, (double)var20, 0.0D, (double)var9, (double)var19); + var22.addVertexWithUV(0.0D, (double)var20, (double)(0.0F - var16), (double)var9, (double)var19); + var22.addVertexWithUV((double)var12, (double)var20, (double)(0.0F - var16), (double)var8, (double)var19); + } + + var22.draw(); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + } + + GL11.glPopMatrix(); + } else { + GL11.glPushMatrix(); + var5 = 0.8F; + if(this.itemSwingState) { + var6 = ((float)this.swingProgress + var1) / 8.0F; + var7 = MathHelper.sin(var6 * (float)Math.PI); + var8 = MathHelper.sin(MathHelper.sqrt_float(var6) * (float)Math.PI); + GL11.glTranslatef(-var8 * 0.3F, MathHelper.sin(MathHelper.sqrt_float(var6) * (float)Math.PI * 2.0F) * 0.4F, -var7 * 0.4F); + } + + GL11.glTranslatef(0.8F * var5, -(12.0F / 16.0F) * var5 - (1.0F - var2) * 0.6F, -0.9F * var5); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + if(this.itemSwingState) { + var6 = ((float)this.swingProgress + var1) / 8.0F; + var7 = MathHelper.sin(var6 * var6 * (float)Math.PI); + var8 = MathHelper.sin(MathHelper.sqrt_float(var6) * (float)Math.PI); + GL11.glRotatef(var8 * 70.0F, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var7 * 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())); + 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); + Render var21 = RenderManager.instance.getEntityRenderObject(this.mc.thePlayer); + RenderPlayer var23 = (RenderPlayer)var21; + var8 = 1.0F; + GL11.glScalef(var8, var8, var8); + var23.drawFirstPersonHand(); + GL11.glPopMatrix(); + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + RenderHelper.disableStandardItemLighting(); + } + + public void renderOverlays(float var1) { + GL11.glDisable(GL11.GL_ALPHA_TEST); + int var2; + if(this.mc.thePlayer.fire > 0) { + var2 = this.mc.renderEngine.getTexture("/terrain.png"); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var2); + this.renderFireInFirstPerson(var1); + } + + if(this.mc.theWorld.playerEntity.isEntityInsideOpaqueBlock()) { + 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); + int var5 = this.mc.renderEngine.getTexture("/terrain.png"); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var5); + int var6 = this.mc.theWorld.getBlockId(var2, var3, var4); + if(Block.blocksList[var6] != null) { + this.renderInsideOfBlock(var1, Block.blocksList[var6].getBlockTextureFromSide(2)); + } + } + + if(this.mc.thePlayer.isInsideOfMaterial(Material.water)) { + var2 = this.mc.renderEngine.getTexture("/water.png"); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var2); + this.renderWarpedTextureOverlay(var1); + } + + GL11.glEnable(GL11.GL_ALPHA_TEST); + } + + private void renderInsideOfBlock(float var1, int var2) { + Tessellator var3 = Tessellator.instance; + this.mc.thePlayer.getEntityBrightness(var1); + 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 = 0.0078125F; + float var11 = (float)(var2 % 16) / 256.0F - var10; + float var12 = ((float)(var2 % 16) + 15.99F) / 256.0F + var10; + float var13 = (float)(var2 / 16) / 256.0F - var10; + float var14 = ((float)(var2 / 16) + 15.99F) / 256.0F + var10; + var3.startDrawingQuads(); + var3.addVertexWithUV((double)var5, (double)var7, (double)var9, (double)var12, (double)var14); + var3.addVertexWithUV((double)var6, (double)var7, (double)var9, (double)var11, (double)var14); + var3.addVertexWithUV((double)var6, (double)var8, (double)var9, (double)var11, (double)var13); + var3.addVertexWithUV((double)var5, (double)var8, (double)var9, (double)var12, (double)var13); + 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.getEntityBrightness(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(); + int var5 = Block.fire.blockIndexInTexture + var4 * 16; + int var6 = (var5 & 15) << 4; + int var7 = var5 & 240; + float var8 = (float)var6 / 256.0F; + float var9 = ((float)var6 + 15.99F) / 256.0F; + float var10 = (float)var7 / 256.0F; + float var11 = ((float)var7 + 15.99F) / 256.0F; + float var12 = (0.0F - var3) / 2.0F; + float var13 = var12 + var3; + float var14 = 0.0F - var3 / 2.0F; + float var15 = var14 + var3; + float var16 = -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)var12, (double)var14, (double)var16, (double)var9, (double)var11); + var2.addVertexWithUV((double)var13, (double)var14, (double)var16, (double)var8, (double)var11); + var2.addVertexWithUV((double)var13, (double)var15, (double)var16, (double)var8, (double)var10); + var2.addVertexWithUV((double)var12, (double)var15, (double)var16, (double)var9, (double)var10); + 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; + if(this.itemSwingState) { + ++this.swingProgress; + if(this.swingProgress == 8) { + this.swingProgress = 0; + this.itemSwingState = false; + } + } + + EntityPlayerSP var1 = this.mc.thePlayer; + ItemStack var2 = var1.inventory.getCurrentItem(); + float var4 = 0.4F; + float var5 = var2 == this.itemToRender ? 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; + } + + } + + public void resetEquippedProgress() { + this.equippedProgress = 0.0F; + } + + public void swing() { + this.swingProgress = -1; + this.itemSwingState = true; + } + + 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..9bb552f --- /dev/null +++ b/src/net/minecraft/src/ItemSaddle.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +public class ItemSaddle extends Item { + public ItemSaddle(int var1) { + super(var1); + this.maxStackSize = 1; + this.maxDamage = 64; + } + + public void saddleEntity(ItemStack var1, EntityLiving var2) { + if(var2 instanceof EntityPig) { + EntityPig var3 = (EntityPig)var2; + if(!var3.saddled) { + var3.saddled = true; + --var1.stackSize; + } + } + + } + + public void hitEntity(ItemStack var1, EntityLiving var2) { + this.saddleEntity(var1, var2); + } +} diff --git a/src/net/minecraft/src/ItemSeeds.java b/src/net/minecraft/src/ItemSeeds.java new file mode 100644 index 0000000..91ad225 --- /dev/null +++ b/src/net/minecraft/src/ItemSeeds.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class ItemSeeds extends Item { + private int blockType; + + public ItemSeeds(int var1, int var2) { + super(var1); + this.blockType = var2; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(var7 != 1) { + return false; + } else { + int var8 = var3.getBlockId(var4, var5, var6); + if(var8 == Block.tilledField.blockID) { + var3.setBlockWithNotify(var4, var5 + 1, var6, this.blockType); + --var1.stackSize; + return true; + } else { + return false; + } + } + } +} diff --git a/src/net/minecraft/src/ItemSign.java b/src/net/minecraft/src/ItemSign.java new file mode 100644 index 0000000..f760b3e --- /dev/null +++ b/src/net/minecraft/src/ItemSign.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class ItemSign extends Item { + public ItemSign(int var1) { + super(var1); + this.maxDamage = 64; + this.maxStackSize = 1; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(var7 != 1) { + return false; + } else { + ++var5; + if(!Block.signStanding.canPlaceBlockAt(var3, var4, var5, var6)) { + return false; + } else { + var3.setBlockWithNotify(var4, var5, var6, Block.signStanding.blockID); + var3.setBlockMetadataWithNotify(var4, var5, var6, MathHelper.floor_double((double)((var2.rotationYaw + 180.0F) * 16.0F / 360.0F) - 0.5D) & 15); + --var1.stackSize; + var2.displayGUIEditSign((TileEntitySign)var3.getBlockTileEntity(var4, var5, var6)); + return true; + } + } + } +} diff --git a/src/net/minecraft/src/ItemSoup.java b/src/net/minecraft/src/ItemSoup.java new file mode 100644 index 0000000..7143549 --- /dev/null +++ b/src/net/minecraft/src/ItemSoup.java @@ -0,0 +1,12 @@ +package net.minecraft.src; + +public class ItemSoup extends ItemFood { + public ItemSoup(int var1, int var2) { + super(var1, var2); + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + super.onItemRightClick(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..5328e68 --- /dev/null +++ b/src/net/minecraft/src/ItemSpade.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public class ItemSpade extends ItemTool { + private static Block[] blocksEffectiveAgainst = new Block[]{Block.grass, Block.dirt, Block.sand, Block.gravel}; + + public ItemSpade(int var1, int var2) { + super(var1, 1, var2, blocksEffectiveAgainst); + } +} diff --git a/src/net/minecraft/src/ItemStack.java b/src/net/minecraft/src/ItemStack.java new file mode 100644 index 0000000..83d7a12 --- /dev/null +++ b/src/net/minecraft/src/ItemStack.java @@ -0,0 +1,128 @@ +package net.minecraft.src; + +public final class ItemStack { + public int stackSize; + public int animationsToGo; + public int itemID; + public int itemDmg; + + public ItemStack(Block var1) { + this((Block)var1, 1); + } + + public ItemStack(Block var1, int var2) { + this(var1.blockID, var2); + } + + public ItemStack(Item var1) { + this((Item)var1, 1); + } + + public ItemStack(Item var1, int var2) { + this(var1.shiftedIndex, var2); + } + + public ItemStack(int var1) { + this(var1, 1); + } + + public ItemStack(int var1, int var2) { + this.stackSize = 0; + this.itemID = var1; + this.stackSize = var2; + } + + public ItemStack(int var1, int var2, int var3) { + this.stackSize = 0; + this.itemID = var1; + this.stackSize = var2; + this.itemDmg = var3; + } + + public ItemStack(NBTTagCompound var1) { + this.stackSize = 0; + this.readFromNBT(var1); + } + + public ItemStack splitStack(int var1) { + this.stackSize -= var1; + return new ItemStack(this.itemID, var1, this.itemDmg); + } + + public Item getItem() { + return Item.itemsList[this.itemID]; + } + + public int getIconIndex() { + return this.getItem().getIconFromDamage(this); + } + + public boolean useItem(EntityPlayer var1, World var2, int var3, int var4, int var5, int var6) { + return this.getItem().onItemUse(this, var1, var2, var3, var4, var5, var6); + } + + 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 NBTTagCompound writeToNBT(NBTTagCompound var1) { + var1.setShort("id", (short)this.itemID); + var1.setByte("Count", (byte)this.stackSize); + var1.setShort("Damage", (short)this.itemDmg); + return var1; + } + + public void readFromNBT(NBTTagCompound var1) { + this.itemID = var1.getShort("id"); + this.stackSize = var1.getByte("Count"); + this.itemDmg = var1.getShort("Damage"); + } + + public int getMaxStackSize() { + return this.getItem().getItemStackLimit(); + } + + public int getMaxDamage() { + return Item.itemsList[this.itemID].getMaxDamage(); + } + + public void damageItem(int var1) { + this.itemDmg += var1; + if(this.itemDmg > this.getMaxDamage()) { + --this.stackSize; + if(this.stackSize < 0) { + this.stackSize = 0; + } + + this.itemDmg = 0; + } + + } + + public void hitEntity(EntityLiving var1) { + Item.itemsList[this.itemID].hitEntity(this, var1); + } + + public void onDestroyBlock(int var1, int var2, int var3, int var4) { + Item.itemsList[this.itemID].onBlockDestroyed(this, var1, var2, var3, var4); + } + + 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 void onItemDestroyedByUse(EntityPlayer var1) { + } + + public void useItemOnEntity(EntityLiving var1) { + Item.itemsList[this.itemID].saddleEntity(this, var1); + } +} diff --git a/src/net/minecraft/src/ItemSword.java b/src/net/minecraft/src/ItemSword.java new file mode 100644 index 0000000..a7c1046 --- /dev/null +++ b/src/net/minecraft/src/ItemSword.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +public class ItemSword extends Item { + private int weaponDamage; + + public ItemSword(int var1, int var2) { + super(var1); + this.maxStackSize = 1; + this.maxDamage = 32 << var2; + this.weaponDamage = 4 + var2 * 2; + } + + public float getStrVsBlock(ItemStack var1, Block var2) { + return 1.5F; + } + + public void hitEntity(ItemStack var1, EntityLiving var2) { + var1.damageItem(1); + } + + public void onBlockDestroyed(ItemStack var1, int var2, int var3, int var4, int var5) { + var1.damageItem(2); + } + + public int getDamageVsEntity(Entity var1) { + return this.weaponDamage; + } +} diff --git a/src/net/minecraft/src/ItemTool.java b/src/net/minecraft/src/ItemTool.java new file mode 100644 index 0000000..9c231e1 --- /dev/null +++ b/src/net/minecraft/src/ItemTool.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +public class ItemTool extends Item { + private Block[] blocksEffectiveAgainst; + private float efficiencyOnProperMaterial = 4.0F; + private int damageVsEntity; + protected int toolMaterial; + + public ItemTool(int var1, int var2, int var3, Block[] var4) { + super(var1); + this.toolMaterial = var3; + this.blocksEffectiveAgainst = var4; + this.maxStackSize = 1; + this.maxDamage = 32 << var3; + if(var3 == 3) { + this.maxDamage *= 2; + } + + this.efficiencyOnProperMaterial = (float)((var3 + 1) * 2); + this.damageVsEntity = var2 + var3; + } + + 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 void hitEntity(ItemStack var1, EntityLiving var2) { + var1.damageItem(2); + } + + public void onBlockDestroyed(ItemStack var1, int var2, int var3, int var4, int var5) { + var1.damageItem(1); + } + + public int getDamageVsEntity(Entity var1) { + return this.damageVsEntity; + } +} diff --git a/src/net/minecraft/src/KeyBinding.java b/src/net/minecraft/src/KeyBinding.java new file mode 100644 index 0000000..6d27b38 --- /dev/null +++ b/src/net/minecraft/src/KeyBinding.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class KeyBinding { + public String keyDescription; + public int keyCode; + + public KeyBinding(String var1, int var2) { + this.keyDescription = var1; + this.keyCode = var2; + } +} diff --git a/src/net/minecraft/src/LoadingScreenRenderer.java b/src/net/minecraft/src/LoadingScreenRenderer.java new file mode 100644 index 0000000..435c9ac --- /dev/null +++ b/src/net/minecraft/src/LoadingScreenRenderer.java @@ -0,0 +1,124 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.Display; +import org.lwjgl.opengl.GL11; + +public class LoadingScreenRenderer implements IProgressUpdate { + private String currentlyDisplayedProgress = ""; + private Minecraft mc; + private String currentlyDisplayedText = ""; + private long systemTime = System.currentTimeMillis(); + private boolean printText = false; + + public LoadingScreenRenderer(Minecraft var1) { + this.mc = var1; + } + + public void printText(String var1) { + this.printText = false; + this.drawScreen(var1); + } + + public void displayProgressMessage(String var1) { + this.printText = true; + this.drawScreen(this.currentlyDisplayedText); + } + + public void drawScreen(String var1) { + if(!this.mc.running) { + if(!this.printText) { + throw new MinecraftError(); + } + } else { + this.currentlyDisplayedText = var1; + ScaledResolution var2 = new ScaledResolution(this.mc.displayWidth, this.mc.displayHeight); + int var3 = var2.getScaledWidth(); + int var4 = var2.getScaledHeight(); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glOrtho(0.0D, (double)var3, (double)var4, 0.0D, 100.0D, 300.0D); + GL11.glMatrixMode(GL11.GL_MODELVIEW); + GL11.glLoadIdentity(); + GL11.glTranslatef(0.0F, 0.0F, -200.0F); + } + } + + public void displayLoadingString(String var1) { + if(!this.mc.running) { + if(!this.printText) { + throw new MinecraftError(); + } + } else { + this.systemTime = 0L; + this.currentlyDisplayedProgress = var1; + this.setLoadingProgress(-1); + this.systemTime = 0L; + } + } + + public void setLoadingProgress(int var1) { + if(!this.mc.running) { + if(!this.printText) { + throw new MinecraftError(); + } + } else { + long var2 = System.currentTimeMillis(); + if(var2 - this.systemTime >= 20L) { + this.systemTime = var2; + ScaledResolution var4 = new ScaledResolution(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, (double)var5, (double)var6, 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; + int var8 = this.mc.renderEngine.getTexture("/dirt.png"); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var8); + float var9 = 32.0F; + var7.startDrawingQuads(); + var7.setColorOpaque_I(4210752); + var7.addVertexWithUV(0.0D, (double)var6, 0.0D, 0.0D, (double)((float)var6 / var9)); + var7.addVertexWithUV((double)var5, (double)var6, 0.0D, (double)((float)var5 / var9), (double)((float)var6 / var9)); + var7.addVertexWithUV((double)var5, 0.0D, 0.0D, (double)((float)var5 / var9), 0.0D); + var7.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, 0.0D); + var7.draw(); + if(var1 >= 0) { + byte var10 = 100; + byte var11 = 2; + int var12 = var5 / 2 - var10 / 2; + int var13 = var6 / 2 + 16; + GL11.glDisable(GL11.GL_TEXTURE_2D); + var7.startDrawingQuads(); + var7.setColorOpaque_I(8421504); + var7.addVertex((double)var12, (double)var13, 0.0D); + var7.addVertex((double)var12, (double)(var13 + var11), 0.0D); + var7.addVertex((double)(var12 + var10), (double)(var13 + var11), 0.0D); + var7.addVertex((double)(var12 + var10), (double)var13, 0.0D); + var7.setColorOpaque_I(8454016); + var7.addVertex((double)var12, (double)var13, 0.0D); + var7.addVertex((double)var12, (double)(var13 + var11), 0.0D); + var7.addVertex((double)(var12 + var1), (double)(var13 + var11), 0.0D); + var7.addVertex((double)(var12 + var1), (double)var13, 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.currentlyDisplayedProgress, (var5 - this.mc.fontRenderer.getStringWidth(this.currentlyDisplayedProgress)) / 2, var6 / 2 - 4 + 8, 16777215); + Display.update(); + + try { + Thread.yield(); + } catch (Exception var14) { + } + + } + } + } +} diff --git a/src/net/minecraft/src/Material.java b/src/net/minecraft/src/Material.java new file mode 100644 index 0000000..1f1bf08 --- /dev/null +++ b/src/net/minecraft/src/Material.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +public class Material { + public static final Material air = new MaterialTransparent(); + public static final Material ground = new Material(); + public static final Material wood = new Material(); + public static final Material rock = new Material(); + public static final Material iron = new Material(); + public static final Material water = new MaterialLiquid(); + public static final Material lava = new MaterialLiquid(); + public static final Material leaves = new Material(); + public static final Material plants = new MaterialLogic(); + public static final Material sponge = new Material(); + public static final Material cloth = new Material(); + public static final Material fire = new MaterialTransparent(); + public static final Material sand = new Material(); + public static final Material circuits = new MaterialLogic(); + public static final Material glass = new Material(); + public static final Material tnt = new Material(); + public static final Material unused = new Material(); + + public boolean getIsLiquid() { + return false; + } + + public boolean isSolid() { + return true; + } + + public boolean getCanBlockGrass() { + return true; + } + + public boolean getIsSolid() { + return true; + } +} diff --git a/src/net/minecraft/src/MaterialLiquid.java b/src/net/minecraft/src/MaterialLiquid.java new file mode 100644 index 0000000..54efda3 --- /dev/null +++ b/src/net/minecraft/src/MaterialLiquid.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class MaterialLiquid extends Material { + public boolean getIsLiquid() { + return true; + } + + 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..19d5b0d --- /dev/null +++ b/src/net/minecraft/src/MaterialLogic.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class MaterialLogic extends Material { + public boolean isSolid() { + return false; + } + + public boolean getCanBlockGrass() { + return false; + } + + public boolean getIsSolid() { + return false; + } +} diff --git a/src/net/minecraft/src/MaterialTransparent.java b/src/net/minecraft/src/MaterialTransparent.java new file mode 100644 index 0000000..a475877 --- /dev/null +++ b/src/net/minecraft/src/MaterialTransparent.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class MaterialTransparent extends Material { + public boolean isSolid() { + return false; + } + + public boolean getCanBlockGrass() { + return false; + } + + public boolean getIsSolid() { + return false; + } +} diff --git a/src/net/minecraft/src/MathHelper.java b/src/net/minecraft/src/MathHelper.java new file mode 100644 index 0000000..bd32d54 --- /dev/null +++ b/src/net/minecraft/src/MathHelper.java @@ -0,0 +1,58 @@ +package net.minecraft.src; + +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 floor_double(double var0) { + int var2 = (int)var0; + return var0 < (double)var2 ? var2 - 1 : var2; + } + + public static float abs(float var0) { + return var0 >= 0.0F ? var0 : -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; + } + + 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/MetadataChunkBlock.java b/src/net/minecraft/src/MetadataChunkBlock.java new file mode 100644 index 0000000..6f9e4d9 --- /dev/null +++ b/src/net/minecraft/src/MetadataChunkBlock.java @@ -0,0 +1,153 @@ +package net.minecraft.src; + +public class MetadataChunkBlock { + public final EnumSkyBlock skyBlock; + public int x; + public int y; + public int z; + public int maxX; + public int maxY; + public int maxZ; + + public MetadataChunkBlock(EnumSkyBlock var1, int var2, int var3, int var4, int var5, int var6, int var7) { + this.skyBlock = var1; + this.x = var2; + this.y = var3; + this.z = var4; + this.maxX = var5; + this.maxY = var6; + this.maxZ = var7; + } + + public void updateLight(World var1) { + for(int var2 = this.x; var2 <= this.maxX; ++var2) { + for(int var3 = this.z; var3 <= this.maxZ; ++var3) { + if(var1.blockExists(var2, 0, var3)) { + for(int var4 = this.y; var4 <= this.maxY; ++var4) { + if(var4 >= 0 && var4 < 128) { + int var5 = var1.getSavedLightValue(this.skyBlock, var2, var4, var3); + boolean var6 = false; + int var7 = var1.getBlockId(var2, var4, var3); + int var8 = Block.lightOpacity[var7]; + if(var8 == 0) { + var8 = 1; + } + + int var9 = 0; + if(this.skyBlock == EnumSkyBlock.Sky) { + if(var1.canExistingBlockSeeTheSky(var2, var4, var3)) { + var9 = 15; + } + } else if(this.skyBlock == EnumSkyBlock.Block) { + var9 = Block.lightValue[var7]; + } + + int var10; + int var16; + if(var8 >= 15 && var9 == 0) { + var16 = 0; + } else { + var10 = var1.getSavedLightValue(this.skyBlock, var2 - 1, var4, var3); + int var11 = var1.getSavedLightValue(this.skyBlock, var2 + 1, var4, var3); + int var12 = var1.getSavedLightValue(this.skyBlock, var2, var4 - 1, var3); + int var13 = var1.getSavedLightValue(this.skyBlock, var2, var4 + 1, var3); + int var14 = var1.getSavedLightValue(this.skyBlock, var2, var4, var3 - 1); + int var15 = var1.getSavedLightValue(this.skyBlock, var2, var4, var3 + 1); + var16 = var10; + if(var11 > var10) { + var16 = var11; + } + + if(var12 > var16) { + var16 = var12; + } + + if(var13 > var16) { + var16 = var13; + } + + if(var14 > var16) { + var16 = var14; + } + + if(var15 > var16) { + var16 = var15; + } + + var16 -= var8; + if(var16 < 0) { + var16 = 0; + } + + if(var9 > var16) { + var16 = var9; + } + } + + if(var5 != var16) { + var1.setLightValue(this.skyBlock, var2, var4, var3, var16); + var10 = var16 - 1; + if(var10 < 0) { + var10 = 0; + } + + var1.neighborLightPropagationChanged(this.skyBlock, var2 - 1, var4, var3, var10); + var1.neighborLightPropagationChanged(this.skyBlock, var2, var4 - 1, var3, var10); + var1.neighborLightPropagationChanged(this.skyBlock, var2, var4, var3 - 1, var10); + if(var2 + 1 >= this.maxX) { + var1.neighborLightPropagationChanged(this.skyBlock, var2 + 1, var4, var3, var10); + } + + if(var4 + 1 >= this.maxY) { + var1.neighborLightPropagationChanged(this.skyBlock, var2, var4 + 1, var3, var10); + } + + if(var3 + 1 >= this.maxZ) { + var1.neighborLightPropagationChanged(this.skyBlock, var2, var4, var3 + 1, var10); + } + } + } + } + } + } + } + + } + + public boolean getLightUpdated(int var1, int var2, int var3, int var4, int var5, int var6) { + if(var1 >= this.x && var2 >= this.y && var3 >= this.z && var4 <= this.maxX && var5 <= this.maxY && var6 <= this.maxZ) { + return true; + } else { + byte var7 = 1; + if(var1 >= this.x - var7 && var2 >= this.y - var7 && var3 >= this.z - var7 && var4 <= this.maxX + var7 && var5 <= this.maxY + var7 && var6 <= this.maxZ + var7) { + if(var1 < this.x) { + this.x = var1; + } + + if(var2 < this.y) { + this.y = var2; + } + + if(var3 < this.z) { + this.z = var3; + } + + if(var4 > this.maxX) { + this.maxX = var4; + } + + if(var5 > this.maxY) { + this.maxY = var5; + } + + if(var6 > this.maxZ) { + this.maxZ = var6; + } + + return true; + } else { + return false; + } + } + } +} diff --git a/src/net/minecraft/src/MinecartTrackLogic.java b/src/net/minecraft/src/MinecartTrackLogic.java new file mode 100644 index 0000000..87e209a --- /dev/null +++ b/src/net/minecraft/src/MinecartTrackLogic.java @@ -0,0 +1,250 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +class MinecartTrackLogic { + private World worldObj; + private int trackX; + private int trackY; + private int trackZ; + private int trackMetadata; + private List connectedTracks; + final BlockMinecartTrack minecartTrack; + + public MinecartTrackLogic(BlockMinecartTrack var1, World var2, int var3, int var4, int var5) { + this.minecartTrack = var1; + this.connectedTracks = new ArrayList(); + this.worldObj = var2; + this.trackX = var3; + this.trackY = var4; + this.trackZ = var5; + this.trackMetadata = var2.getBlockMetadata(var3, var4, var5); + this.calculateConnectedTracks(); + } + + private void calculateConnectedTracks() { + this.connectedTracks.clear(); + if(this.trackMetadata == 0) { + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ - 1)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ + 1)); + } else if(this.trackMetadata == 1) { + this.connectedTracks.add(new ChunkPosition(this.trackX - 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX + 1, this.trackY, this.trackZ)); + } else if(this.trackMetadata == 2) { + this.connectedTracks.add(new ChunkPosition(this.trackX - 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX + 1, this.trackY + 1, this.trackZ)); + } else if(this.trackMetadata == 3) { + this.connectedTracks.add(new ChunkPosition(this.trackX - 1, this.trackY + 1, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX + 1, this.trackY, this.trackZ)); + } else if(this.trackMetadata == 4) { + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY + 1, this.trackZ - 1)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ + 1)); + } else if(this.trackMetadata == 5) { + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ - 1)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY + 1, this.trackZ + 1)); + } else if(this.trackMetadata == 6) { + this.connectedTracks.add(new ChunkPosition(this.trackX + 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ + 1)); + } else if(this.trackMetadata == 7) { + this.connectedTracks.add(new ChunkPosition(this.trackX - 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ + 1)); + } else if(this.trackMetadata == 8) { + this.connectedTracks.add(new ChunkPosition(this.trackX - 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ - 1)); + } else if(this.trackMetadata == 9) { + this.connectedTracks.add(new ChunkPosition(this.trackX + 1, this.trackY, this.trackZ)); + this.connectedTracks.add(new ChunkPosition(this.trackX, this.trackY, this.trackZ - 1)); + } + + } + + private void refreshConnectedTracks() { + for(int var1 = 0; var1 < this.connectedTracks.size(); ++var1) { + MinecartTrackLogic var2 = this.getMinecartTrackLogic((ChunkPosition)this.connectedTracks.get(var1)); + if(var2 != null && var2.isConnectedTo(this)) { + this.connectedTracks.set(var1, new ChunkPosition(var2.trackX, var2.trackY, var2.trackZ)); + } else { + this.connectedTracks.remove(var1--); + } + } + + } + + private MinecartTrackLogic getMinecartTrackLogic(ChunkPosition var1) { + return this.worldObj.getBlockId(var1.x, var1.y, var1.z) == this.minecartTrack.blockID ? new MinecartTrackLogic(this.minecartTrack, this.worldObj, var1.x, var1.y, var1.z) : (this.worldObj.getBlockId(var1.x, var1.y + 1, var1.z) == this.minecartTrack.blockID ? new MinecartTrackLogic(this.minecartTrack, this.worldObj, var1.x, var1.y + 1, var1.z) : (this.worldObj.getBlockId(var1.x, var1.y - 1, var1.z) == this.minecartTrack.blockID ? new MinecartTrackLogic(this.minecartTrack, this.worldObj, var1.x, var1.y - 1, var1.z) : null)); + } + + private boolean isConnectedTo(MinecartTrackLogic var1) { + for(int var2 = 0; var2 < this.connectedTracks.size(); ++var2) { + ChunkPosition var3 = (ChunkPosition)this.connectedTracks.get(var2); + if(var3.x == var1.trackX && var3.z == var1.trackZ) { + return true; + } + } + + return false; + } + + private boolean isInTrack(int var1, int var2, int var3) { + for(int var4 = 0; var4 < this.connectedTracks.size(); ++var4) { + ChunkPosition var5 = (ChunkPosition)this.connectedTracks.get(var4); + if(var5.x == var1 && var5.z == var3) { + return true; + } + } + + return false; + } + + private boolean handleKeyPress(MinecartTrackLogic var1) { + if(this.isConnectedTo(var1)) { + return true; + } else if(this.connectedTracks.size() == 2) { + return false; + } else if(this.connectedTracks.size() == 0) { + return true; + } else { + ChunkPosition var2 = (ChunkPosition)this.connectedTracks.get(0); + return var1.trackY == this.trackY && var2.y == this.trackY ? true : true; + } + } + + private void connectToNeighbor(MinecartTrackLogic var1) { + this.connectedTracks.add(new ChunkPosition(var1.trackX, var1.trackY, var1.trackZ)); + boolean var2 = this.isInTrack(this.trackX, this.trackY, this.trackZ - 1); + boolean var3 = this.isInTrack(this.trackX, this.trackY, this.trackZ + 1); + boolean var4 = this.isInTrack(this.trackX - 1, this.trackY, this.trackZ); + boolean var5 = this.isInTrack(this.trackX + 1, this.trackY, this.trackZ); + byte var6 = -1; + if(var2 || var3) { + var6 = 0; + } + + if(var4 || var5) { + var6 = 1; + } + + 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(this.worldObj.getBlockId(this.trackX, this.trackY + 1, this.trackZ - 1) == this.minecartTrack.blockID) { + var6 = 4; + } + + if(this.worldObj.getBlockId(this.trackX, this.trackY + 1, this.trackZ + 1) == this.minecartTrack.blockID) { + var6 = 5; + } + } + + if(var6 == 1) { + if(this.worldObj.getBlockId(this.trackX + 1, this.trackY + 1, this.trackZ) == this.minecartTrack.blockID) { + var6 = 2; + } + + if(this.worldObj.getBlockId(this.trackX - 1, this.trackY + 1, this.trackZ) == this.minecartTrack.blockID) { + var6 = 3; + } + } + + if(var6 < 0) { + var6 = 0; + } + + this.worldObj.setBlockMetadataWithNotify(this.trackX, this.trackY, this.trackZ, var6); + } + + private boolean canConnectFrom(int var1, int var2, int var3) { + MinecartTrackLogic var4 = this.getMinecartTrackLogic(new ChunkPosition(var1, var2, var3)); + if(var4 == null) { + return false; + } else { + var4.refreshConnectedTracks(); + return var4.handleKeyPress(this); + } + } + + public void place() { + boolean var1 = this.canConnectFrom(this.trackX, this.trackY, this.trackZ - 1); + boolean var2 = this.canConnectFrom(this.trackX, this.trackY, this.trackZ + 1); + boolean var3 = this.canConnectFrom(this.trackX - 1, this.trackY, this.trackZ); + boolean var4 = this.canConnectFrom(this.trackX + 1, this.trackY, this.trackZ); + byte var5 = -1; + if(var1 || var2) { + var5 = 0; + } + + if(var3 || var4) { + var5 = 1; + } + + if(var2 && var4 && !var1 && !var3) { + var5 = 6; + } + + if(var2 && var3 && !var1 && !var4) { + var5 = 7; + } + + if(var1 && var3 && !var2 && !var4) { + var5 = 8; + } + + if(var1 && var4 && !var2 && !var3) { + var5 = 9; + } + + if(var5 == 0) { + if(this.worldObj.getBlockId(this.trackX, this.trackY + 1, this.trackZ - 1) == this.minecartTrack.blockID) { + var5 = 4; + } + + if(this.worldObj.getBlockId(this.trackX, this.trackY + 1, this.trackZ + 1) == this.minecartTrack.blockID) { + var5 = 5; + } + } + + if(var5 == 1) { + if(this.worldObj.getBlockId(this.trackX + 1, this.trackY + 1, this.trackZ) == this.minecartTrack.blockID) { + var5 = 2; + } + + if(this.worldObj.getBlockId(this.trackX - 1, this.trackY + 1, this.trackZ) == this.minecartTrack.blockID) { + var5 = 3; + } + } + + if(var5 < 0) { + var5 = 0; + } + + this.trackMetadata = var5; + this.calculateConnectedTracks(); + this.worldObj.setBlockMetadataWithNotify(this.trackX, this.trackY, this.trackZ, var5); + + for(int var6 = 0; var6 < this.connectedTracks.size(); ++var6) { + MinecartTrackLogic var7 = this.getMinecartTrackLogic((ChunkPosition)this.connectedTracks.get(var6)); + if(var7 != null) { + var7.refreshConnectedTracks(); + if(var7.handleKeyPress(this)) { + var7.connectToNeighbor(this); + } + } + } + + } +} diff --git a/src/net/minecraft/src/Minecraft.java b/src/net/minecraft/src/Minecraft.java new file mode 100644 index 0000000..b16dd43 --- /dev/null +++ b/src/net/minecraft/src/Minecraft.java @@ -0,0 +1,1025 @@ +package net.minecraft.src; + +import java.awt.Canvas; +import java.awt.Color; +import java.awt.Component; +import java.awt.Graphics; +import java.io.File; +import net.minecraft.client.MinecraftApplet; +import org.lwjgl.LWJGLException; +import org.lwjgl.input.Controllers; +import org.lwjgl.input.Keyboard; +import org.lwjgl.input.Mouse; +import org.lwjgl.opengl.Display; +import org.lwjgl.opengl.DisplayMode; +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.glu.GLU; + +public abstract class Minecraft implements Runnable { + public PlayerController playerController = new PlayerControllerSP(this); + private boolean fullscreen = false; + public int displayWidth; + public int displayHeight; + private OpenGlCapsChecker glCapabilities; + private Timer timer = new Timer(20.0F); + public World theWorld; + public RenderGlobal renderGlobal; + public EntityPlayerSP thePlayer; + public EffectRenderer effectRenderer; + public Session session = null; + public String minecraftUri; + public Canvas mcCanvas; + public boolean appletMode = true; + public volatile boolean isGamePaused = false; + public RenderEngine renderEngine; + public FontRenderer fontRenderer; + public GuiScreen currentScreen = null; + public LoadingScreenRenderer loadingScreen = new LoadingScreenRenderer(this); + public EntityRenderer entityRenderer = new EntityRenderer(this); + private ThreadDownloadResources downloadResourcesThread; + private int ticksRan = 0; + private int leftClickCounter = 0; + private int tempDisplayWidth; + private int tempDisplayHeight; + public String objectMouseOverString = null; + public int rightClickDelayTimer = 0; + public GuiIngame ingameGUI; + public boolean skipRenderWorld = false; + public ModelBiped playerModelBiped = new ModelBiped(0.0F); + public MovingObjectPosition objectMouseOver = null; + public GameSettings gameSettings; + protected MinecraftApplet mcApplet; + public SoundManager sndManager = new SoundManager(); + public MouseHelper mouseHelper; + public File mcDataDir; + public static long[] tickTimes = new long[512]; + public static int numRecordedFrameTimes = 0; + private TextureWaterFX textureWaterFX = new TextureWaterFX(); + private TextureLavaFX textureLavaFX = new TextureLavaFX(); + private static File minecraftDir = null; + volatile boolean running = true; + public String debug = ""; + long prevFrameTime = -1L; + public boolean inGameHasFocus = false; + private int mouseTicksRan = 0; + public boolean isRaining = false; + long systemTime = System.currentTimeMillis(); + + public Minecraft(Component var1, Canvas var2, MinecraftApplet var3, int var4, int var5, boolean var6) { + this.tempDisplayWidth = var4; + this.tempDisplayHeight = var5; + this.fullscreen = var6; + this.mcApplet = var3; + new ThreadSleepForever(this, "Timer hack thread"); + this.mcCanvas = var2; + this.displayWidth = var4; + this.displayHeight = var5; + this.fullscreen = var6; + } + + public abstract void displayUnexpectedThrowable(UnexpectedThrowable var1); + + public void setServer(String var1, int 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 Infdev"); + + try { + Display.create(); + } catch (LWJGLException var6) { + var6.printStackTrace(); + + try { + Thread.sleep(1000L); + } catch (InterruptedException var5) { + } + + Display.create(); + } + + this.mcDataDir = getMinecraftDir(); + this.gameSettings = new GameSettings(this, this.mcDataDir); + this.renderEngine = new RenderEngine(this.gameSettings); + this.fontRenderer = new FontRenderer(this.gameSettings, "/default.png", this.renderEngine); + this.loadScreen(); + Keyboard.create(); + Mouse.create(); + this.mouseHelper = new MouseHelper(this.mcCanvas); + + try { + Controllers.create(); + } catch (Exception var4) { + var4.printStackTrace(); + } + + 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.glCapabilities = new OpenGlCapsChecker(); + this.sndManager.loadSoundSettings(this.gameSettings); + this.renderEngine.registerTextureFX(this.textureLavaFX); + this.renderEngine.registerTextureFX(this.textureWaterFX); + this.renderEngine.registerTextureFX(new TextureWaterFlowFX()); + this.renderEngine.registerTextureFX(new TextureLavaFlowFX()); + this.renderEngine.registerTextureFX(new TextureFlamesFX(0)); + this.renderEngine.registerTextureFX(new TextureFlamesFX(1)); + this.renderEngine.registerTextureFX(new TextureGearsFX(0)); + this.renderEngine.registerTextureFX(new TextureGearsFX(1)); + this.renderGlobal = new RenderGlobal(this, this.renderEngine); + GL11.glViewport(0, 0, this.displayWidth, this.displayHeight); + this.displayGuiScreen(new GuiMainMenu()); + 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); + this.playerController.init(); + } + + private void loadScreen() throws LWJGLException { + ScaledResolution var1 = new ScaledResolution(this.displayWidth, this.displayHeight); + int var2 = var1.getScaledWidth(); + int var3 = var1.getScaledHeight(); + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT | GL11.GL_COLOR_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glLoadIdentity(); + GL11.glOrtho(0.0D, (double)var2, (double)var3, 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.glDisable(GL11.GL_FOG); + GL11.glEnable(GL11.GL_TEXTURE_2D); + Tessellator var4 = Tessellator.instance; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.renderEngine.getTexture("/dirt.png")); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + float var5 = 32.0F; + var4.startDrawingQuads(); + var4.setColorOpaque_I(4210752); + var4.addVertexWithUV(0.0D, (double)this.displayHeight, 0.0D, 0.0D, (double)((float)this.displayHeight / var5 + 0.0F)); + var4.addVertexWithUV((double)this.displayWidth, (double)this.displayHeight, 0.0D, (double)((float)this.displayWidth / var5), (double)((float)this.displayHeight / var5 + 0.0F)); + var4.addVertexWithUV((double)this.displayWidth, 0.0D, 0.0D, (double)((float)this.displayWidth / var5), 0.0D); + var4.addVertexWithUV(0.0D, 0.0D, 0.0D, 0.0D, 0.0D); + var4.draw(); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glAlphaFunc(GL11.GL_GREATER, 0.1F); + this.fontRenderer.drawStringWithShadow("Loading...", 8, this.displayHeight / 2 - 16, -1); + Display.swapBuffers(); + } + + 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(OSMap.osValues[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; + } + } + + private 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 void displayGuiScreen(GuiScreen var1) { + if(!(this.currentScreen instanceof GuiErrorScreen)) { + if(this.currentScreen != null) { + this.currentScreen.onGuiClosed(); + } + + if(var1 == null && this.theWorld == null) { + var1 = new GuiMainMenu(); + } else if(var1 == null && this.thePlayer.health <= 0) { + var1 = new GuiGameOver(); + } + + this.currentScreen = (GuiScreen)var1; + if(var1 != null) { + this.setIngameNotInFocus(); + ScaledResolution var2 = new ScaledResolution(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); + System.out.println("########## GL ERROR ##########"); + System.out.println("@ " + var1); + System.out.println(var2 + ": " + var3); + System.exit(0); + } + + } + + public void shutdownMinecraftApplet() { + if(this.mcApplet != null) { + this.mcApplet.clearApplet(); + } + + try { + if(this.downloadResourcesThread != null) { + this.downloadResourcesThread.closeMinecraft(); + } + } catch (Exception var8) { + } + + try { + System.out.println("Stopping!"); + this.changeWorld1((World)null); + + try { + GLAllocation.deleteTexturesAndDisplayLists(); + } catch (Exception var6) { + } + + this.sndManager.closeMinecraft(); + Mouse.destroy(); + Keyboard.destroy(); + } finally { + Display.destroy(); + } + + System.gc(); + } + + public void run() { + this.running = true; + + try { + this.startGame(); + } catch (Exception var10) { + var10.printStackTrace(); + this.displayUnexpectedThrowable(new UnexpectedThrowable("Failed to start game", var10)); + return; + } + + try { + long var1 = System.currentTimeMillis(); + int var3 = 0; + + while(this.running && (this.mcApplet == null || this.mcApplet.isActive())) { + AxisAlignedBB.clearBoundingBoxPool(); + Vec3D.initialize(); + if(this.mcCanvas == null && Display.isCloseRequested()) { + this.shutdown(); + } + + if(this.isGamePaused) { + float var4 = this.timer.renderPartialTicks; + this.timer.updateTimer(); + this.timer.renderPartialTicks = var4; + } else { + this.timer.updateTimer(); + } + + for(int var14 = 0; var14 < this.timer.elapsedTicks; ++var14) { + ++this.ticksRan; + this.runTick(); + } + + this.checkGLError("Pre render"); + if(this.isGamePaused) { + this.timer.renderPartialTicks = 1.0F; + } + + this.sndManager.setListener(this.thePlayer, this.timer.renderPartialTicks); + GL11.glEnable(GL11.GL_TEXTURE_2D); + if(this.theWorld != null) { + while(this.theWorld.updatingLighting()) { + } + } + + if(!this.skipRenderWorld) { + this.playerController.setPartialTime(this.timer.renderPartialTicks); + this.entityRenderer.updateCameraAndRender(this.timer.renderPartialTicks); + } + + if(!Display.isActive() && this.fullscreen) { + this.toggleFullscreen(); + } + + if(Keyboard.isKeyDown(Keyboard.KEY_F6)) { + this.displayDebugInfo(); + } else { + this.prevFrameTime = System.nanoTime(); + } + + Thread.yield(); + Display.update(); + 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); + } + + if(this.gameSettings.limitFramerate) { + Thread.sleep(5L); + } + + this.checkGLError("Post render"); + ++var3; + + for(this.isGamePaused = !this.isMultiplayerWorld() && this.currentScreen != null && this.currentScreen.doesGuiPauseGame(); System.currentTimeMillis() >= var1 + 1000L; var3 = 0) { + this.debug = var3 + " fps, " + WorldRenderer.chunksUpdated + " chunk updates"; + WorldRenderer.chunksUpdated = 0; + var1 += 1000L; + } + } + } catch (MinecraftError var11) { + } catch (Exception var12) { + var12.printStackTrace(); + this.displayUnexpectedThrowable(new UnexpectedThrowable("Unexpected error", var12)); + } finally { + this.shutdownMinecraftApplet(); + } + + } + + private void displayDebugInfo() { + if(this.prevFrameTime == -1L) { + this.prevFrameTime = System.nanoTime(); + } + + long var1 = System.nanoTime(); + tickTimes[numRecordedFrameTimes++ & tickTimes.length - 1] = var1 - this.prevFrameTime; + this.prevFrameTime = var1; + GL11.glClear(GL11.GL_DEPTH_BUFFER_BIT); + GL11.glMatrixMode(GL11.GL_PROJECTION); + 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 var3 = Tessellator.instance; + var3.startDrawing(7); + var3.setColorOpaque_I(538968064); + var3.addVertex(0.0D, (double)(this.displayHeight - 100), 0.0D); + var3.addVertex(0.0D, (double)this.displayHeight, 0.0D); + var3.addVertex((double)tickTimes.length, (double)this.displayHeight, 0.0D); + var3.addVertex((double)tickTimes.length, (double)(this.displayHeight - 100), 0.0D); + var3.draw(); + long var4 = 0L; + + int var6; + for(var6 = 0; var6 < tickTimes.length; ++var6) { + var4 += tickTimes[var6]; + } + + var6 = (int)(var4 / 200000L / (long)tickTimes.length); + var3.startDrawing(7); + var3.setColorOpaque_I(541065216); + var3.addVertex(0.0D, (double)(this.displayHeight - var6), 0.0D); + var3.addVertex(0.0D, (double)this.displayHeight, 0.0D); + var3.addVertex((double)tickTimes.length, (double)this.displayHeight, 0.0D); + var3.addVertex((double)tickTimes.length, (double)(this.displayHeight - var6), 0.0D); + var3.draw(); + var3.startDrawing(1); + + for(int var7 = 0; var7 < tickTimes.length; ++var7) { + int var8 = (var7 - numRecordedFrameTimes & tickTimes.length - 1) * 255 / tickTimes.length; + int var9 = var8 * var8 / 255; + var9 = var9 * var9 / 255; + int var10 = var9 * var9 / 255; + var10 = var10 * var10 / 255; + var3.setColorOpaque_I(-16777216 + var10 + var9 * 256 + var8 * 65536); + long var11 = tickTimes[var7] / 200000L; + var3.addVertex((double)((float)var7 + 0.5F), (double)((float)((long)this.displayHeight - var11) + 0.5F), 0.0D); + var3.addVertex((double)((float)var7 + 0.5F), (double)((float)this.displayHeight + 0.5F), 0.0D); + } + + var3.draw(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + 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.mouseTicksRan = this.ticksRan + 10000; + } + } + } + + public void setIngameNotInFocus() { + if(this.inGameHasFocus) { + if(this.thePlayer != null) { + this.thePlayer.resetPlayerKeyState(); + } + + this.inGameHasFocus = false; + this.mouseHelper.ungrabMouseCursor(); + } + } + + public void displayInGameMenu() { + if(this.currentScreen == null) { + this.displayGuiScreen(new GuiIngameMenu()); + } + } + + private void sendClickBlockToController(int var1, boolean var2) { + if(!this.playerController.isInTestMode) { + if(var1 != 0 || this.leftClickCounter <= 0) { + if(var2 && this.objectMouseOver != null && this.objectMouseOver.typeOfHit == 0 && var1 == 0) { + int var3 = this.objectMouseOver.blockX; + int var4 = this.objectMouseOver.blockY; + int var5 = this.objectMouseOver.blockZ; + this.playerController.sendBlockRemoving(var3, var4, var5, this.objectMouseOver.sideHit); + this.effectRenderer.addBlockHitEffects(var3, var4, var5, this.objectMouseOver.sideHit); + } else { + this.playerController.resetBlockRemoving(); + } + + } + } + } + + private void clickMouse(int var1) { + if(var1 != 0 || this.leftClickCounter <= 0) { + if(var1 == 0) { + this.entityRenderer.itemRenderer.swing(); + } + + int var3; + if(this.objectMouseOver == null) { + if(var1 == 0 && !(this.playerController instanceof PlayerControllerCreative)) { + this.leftClickCounter = 10; + } + } else if(this.objectMouseOver.typeOfHit == 1) { + if(var1 == 0) { + this.thePlayer.attackEntity(this.objectMouseOver.entityHit); + } + + if(var1 == 1) { + this.thePlayer.interactWithEntity(this.objectMouseOver.entityHit); + } + } else if(this.objectMouseOver.typeOfHit == 0) { + int var2 = this.objectMouseOver.blockX; + var3 = this.objectMouseOver.blockY; + int var4 = this.objectMouseOver.blockZ; + int var5 = this.objectMouseOver.sideHit; + Block var6 = Block.blocksList[this.theWorld.getBlockId(var2, var3, var4)]; + if(var1 == 0) { + this.theWorld.extinguishFire(var2, var3, var4, this.objectMouseOver.sideHit); + if(var6 != Block.bedrock || this.thePlayer.unusedMiningCooldown >= 100) { + this.playerController.clickBlock(var2, var3, var4); + } + } else { + ItemStack var7 = this.thePlayer.inventory.getCurrentItem(); + int var8 = this.theWorld.getBlockId(var2, var3, var4); + if(var8 > 0 && Block.blocksList[var8].blockActivated(this.theWorld, var2, var3, var4, this.thePlayer)) { + return; + } + + if(var7 == null) { + return; + } + + int var9 = var7.stackSize; + if(var7.useItem(this.thePlayer, this.theWorld, var2, var3, var4, var5)) { + this.entityRenderer.itemRenderer.swing(); + } + + if(var7.stackSize == 0) { + this.thePlayer.inventory.mainInventory[this.thePlayer.inventory.currentItem] = null; + } else if(var7.stackSize != var9) { + this.entityRenderer.itemRenderer.resetEquippedProgress(); + } + } + } + + if(var1 == 1) { + ItemStack var10 = this.thePlayer.inventory.getCurrentItem(); + if(var10 != null) { + var3 = var10.stackSize; + ItemStack var11 = var10.useItemRightClick(this.theWorld, this.thePlayer); + if(var11 != var10 || var11 != null && var11.stackSize != var3) { + this.thePlayer.inventory.mainInventory[this.thePlayer.inventory.currentItem] = var11; + this.entityRenderer.itemRenderer.resetEquippedProgress2(); + if(var11.stackSize == 0) { + this.thePlayer.inventory.mainInventory[this.thePlayer.inventory.currentItem] = null; + } + } + } + } + + } + } + + public void toggleFullscreen() { + try { + this.fullscreen = !this.fullscreen; + System.out.println("Toggle 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; + } + + Display.setDisplayMode(new DisplayMode(this.tempDisplayWidth, this.tempDisplayHeight)); + } + + this.setIngameNotInFocus(); + Display.setFullscreen(this.fullscreen); + Display.update(); + Thread.sleep(1000L); + if(this.fullscreen) { + this.setIngameFocus(); + } + + if(this.currentScreen != null) { + this.setIngameNotInFocus(); + this.resize(this.displayWidth, this.displayHeight); + } + + System.out.println("Size: " + this.displayWidth + ", " + this.displayHeight); + } catch (Exception var2) { + var2.printStackTrace(); + } + + } + + private void resize(int var1, int var2) { + if(var1 <= 0) { + var1 = 1; + } + + if(var2 <= 0) { + var2 = 1; + } + + this.displayWidth = var1; + this.displayHeight = var2; + if(this.currentScreen != null) { + ScaledResolution var3 = new ScaledResolution(var1, var2); + int var4 = var3.getScaledWidth(); + int var5 = var3.getScaledHeight(); + this.currentScreen.setWorldAndResolution(this, var4, var5); + } + + } + + private void clickMiddleMouseButton() { + if(this.objectMouseOver != null) { + int var1 = this.theWorld.getBlockId(this.objectMouseOver.blockX, this.objectMouseOver.blockY, this.objectMouseOver.blockZ); + if(var1 == Block.grass.blockID) { + var1 = Block.dirt.blockID; + } + + if(var1 == Block.stairDouble.blockID) { + var1 = Block.stairSingle.blockID; + } + + if(var1 == Block.bedrock.blockID) { + var1 = Block.stone.blockID; + } + + this.thePlayer.inventory.setCurrentItem(var1, this.playerController instanceof PlayerControllerCreative); + } + + } + + public void runTick() { + this.ingameGUI.updateTick(); + if(!this.isGamePaused && this.theWorld != null) { + this.playerController.onUpdate(); + } + + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.renderEngine.getTexture("/terrain.png")); + if(!this.isGamePaused) { + this.renderEngine.updateDynamicTextures(); + } + + if(this.currentScreen == null && this.thePlayer != null && this.thePlayer.health <= 0) { + this.displayGuiScreen((GuiScreen)null); + } + + if(this.currentScreen == null || this.currentScreen.allowUserInput) { + label226: + while(true) { + while(true) { + while(true) { + long var1; + do { + if(!Mouse.next()) { + if(this.leftClickCounter > 0) { + --this.leftClickCounter; + } + + while(true) { + while(true) { + do { + if(!Keyboard.next()) { + if(this.currentScreen == null) { + if(Mouse.isButtonDown(0) && (float)(this.ticksRan - this.mouseTicksRan) >= this.timer.ticksPerSecond / 4.0F && this.inGameHasFocus) { + this.clickMouse(0); + this.mouseTicksRan = this.ticksRan; + } + + if(Mouse.isButtonDown(1) && (float)(this.ticksRan - this.mouseTicksRan) >= this.timer.ticksPerSecond / 4.0F && this.inGameHasFocus) { + this.clickMouse(1); + this.mouseTicksRan = this.ticksRan; + } + } + + this.sendClickBlockToController(0, this.currentScreen == null && Mouse.isButtonDown(0) && this.inGameHasFocus); + break label226; + } + + this.thePlayer.handleKeyPress(Keyboard.getEventKey(), Keyboard.getEventKeyState()); + } 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(this.playerController instanceof PlayerControllerCreative) { + if(Keyboard.getEventKey() == this.gameSettings.keyBindLoad.keyCode) { + } + + if(Keyboard.getEventKey() == this.gameSettings.keyBindSave.keyCode) { + } + } + + if(Keyboard.getEventKey() == Keyboard.KEY_F5) { + this.gameSettings.thirdPersonView = !this.gameSettings.thirdPersonView; + this.isRaining = !this.isRaining; + } + + if(Keyboard.getEventKey() == this.gameSettings.keyBindInventory.keyCode) { + this.displayGuiScreen(new GuiInventory(this.thePlayer.inventory)); + } + + if(Keyboard.getEventKey() == this.gameSettings.keyBindDrop.keyCode) { + this.thePlayer.dropPlayerItemWithRandomChoice(this.thePlayer.inventory.decrStackSize(this.thePlayer.inventory.currentItem, 1), false); + } + } + + for(int var4 = 0; var4 < 9; ++var4) { + if(Keyboard.getEventKey() == Keyboard.KEY_1 + var4) { + this.thePlayer.inventory.currentItem = var4; + } + } + + if(Keyboard.getEventKey() == this.gameSettings.keyBindToggleFog.keyCode) { + this.gameSettings.setOptionFloatValue(4, !Keyboard.isKeyDown(Keyboard.KEY_LSHIFT) && !Keyboard.isKeyDown(Keyboard.KEY_RSHIFT) ? 1 : -1); + } + } + } + } + } + + var1 = System.currentTimeMillis() - this.systemTime; + } while(var1 > 200L); + + int var3 = Mouse.getEventDWheel(); + if(var3 != 0) { + this.thePlayer.inventory.changeCurrentItem(var3); + } + + if(this.currentScreen == null) { + if(!this.inGameHasFocus && Mouse.getEventButtonState()) { + this.setIngameFocus(); + } else { + if(Mouse.getEventButton() == 0 && Mouse.getEventButtonState()) { + this.clickMouse(0); + this.mouseTicksRan = this.ticksRan; + } + + if(Mouse.getEventButton() == 1 && Mouse.getEventButtonState()) { + this.clickMouse(1); + this.mouseTicksRan = this.ticksRan; + } + + if(Mouse.getEventButton() == 2 && Mouse.getEventButtonState()) { + this.clickMiddleMouseButton(); + } + } + } else if(this.currentScreen != null) { + this.currentScreen.handleMouseInput(); + } + } + } + } + } + + if(this.currentScreen != null) { + this.mouseTicksRan = this.ticksRan + 10000; + } + + if(this.currentScreen != null) { + this.currentScreen.handleInput(); + if(this.currentScreen != null) { + this.currentScreen.updateScreen(); + } + } + + if(this.theWorld != null) { + this.theWorld.difficultySetting = this.gameSettings.difficulty; + if(!this.isGamePaused) { + this.entityRenderer.updateRenderer(); + } + + if(!this.isGamePaused) { + this.renderGlobal.updateClouds(); + } + + if(!this.isGamePaused) { + this.theWorld.updateEntities(); + } + + if(!this.isGamePaused && !this.isMultiplayerWorld()) { + this.theWorld.tick(); + } + + if(!this.isGamePaused) { + this.theWorld.randomDisplayUpdates(MathHelper.floor_double(this.thePlayer.posX), MathHelper.floor_double(this.thePlayer.posY), MathHelper.floor_double(this.thePlayer.posZ)); + } + + if(!this.isGamePaused) { + this.effectRenderer.updateEffects(); + } + } + + this.systemTime = System.currentTimeMillis(); + } + + public boolean isMultiplayerWorld() { + return false; + } + + public void startWorld(String var1) { + this.changeWorld1((World)null); + System.gc(); + World var2 = new World(new File(getMinecraftDir(), "saves"), var1); + if(var2.isNewWorld) { + this.changeWorld2(var2, "Generating level"); + } else { + this.changeWorld2(var2, "Loading level"); + } + + } + + public void changeWorld1(World var1) { + this.changeWorld2(var1, ""); + } + + public void changeWorld2(World var1, String var2) { + if(this.theWorld != null) { + this.theWorld.saveWorldIndirectly(this.loadingScreen); + } + + this.theWorld = var1; + if(var1 != null) { + this.playerController.onWorldChange(var1); + var1.fontRenderer = this.fontRenderer; + if(!this.isMultiplayerWorld()) { + this.thePlayer = (EntityPlayerSP)var1.createDebugPlayer(EntityPlayerSP.class); + var1.playerEntity = this.thePlayer; + } else if(this.thePlayer != null) { + this.thePlayer.preparePlayerToSpawn(); + if(var1 != null) { + var1.playerEntity = this.thePlayer; + var1.spawnEntityInWorld(this.thePlayer); + } + } + + this.preloadWorld(var2); + if(this.thePlayer == null) { + this.thePlayer = new EntityPlayerSP(this, var1, this.session); + this.thePlayer.preparePlayerToSpawn(); + this.playerController.flipPlayer(this.thePlayer); + } + + this.thePlayer.movementInput = new MovementInputFromOptions(this.gameSettings); + if(this.renderGlobal != null) { + this.renderGlobal.changeWorld(var1); + } + + if(this.effectRenderer != null) { + this.effectRenderer.clearEffects(var1); + } + + this.playerController.onRespawn(this.thePlayer); + var1.playerEntity = this.thePlayer; + var1.spawnPlayerWithLoadedChunks(); + if(var1.isNewWorld) { + var1.saveWorldIndirectly(this.loadingScreen); + } + } + + System.gc(); + this.systemTime = 0L; + } + + private void preloadWorld(String var1) { + this.loadingScreen.printText(var1); + this.loadingScreen.displayLoadingString("Building terrain"); + short var2 = 128; + int var3 = 0; + int var4 = var2 * 2 / 16 + 1; + var4 *= var4; + + int var5; + for(var5 = -var2; var5 <= var2; var5 += 16) { + int var6 = this.theWorld.spawnX; + int var7 = this.theWorld.spawnZ; + if(this.theWorld.playerEntity != null) { + var6 = (int)this.theWorld.playerEntity.posX; + var7 = (int)this.theWorld.playerEntity.posZ; + } + + for(int var8 = -var2; var8 <= var2; var8 += 16) { + this.loadingScreen.setLoadingProgress(var3++ * 100 / var4); + this.theWorld.getBlockId(var6 + var5, 64, var7 + var8); + + while(this.theWorld.updatingLighting()) { + } + } + } + + this.loadingScreen.displayLoadingString("Simulating world for a bit"); + short var9 = 2000; + BlockSand.fallInstantly = true; + + for(var5 = 0; var5 < var9; ++var5) { + this.theWorld.tickUpdates(true); + } + + this.theWorld.dropOldChunks(); + BlockSand.fallInstantly = false; + } + + 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("sound")) { + this.sndManager.addSound(var1, var2); + } else if(var4.equalsIgnoreCase("newsound")) { + this.sndManager.addSound(var1, var2); + } else if(var4.equalsIgnoreCase("music")) { + this.sndManager.addMusic(var1, var2); + } + + } + + public OpenGlCapsChecker getOpenGlCapsChecker() { + return this.glCapabilities; + } + + public String debugInfoRenders() { + return this.renderGlobal.getDebugInfoRenders(); + } + + public String getEntityDebug() { + return this.renderGlobal.getDebugInfoEntities(); + } + + public String debugInfoEntities() { + return "P: " + this.effectRenderer.getStatistics() + ". T: " + this.theWorld.getDebugLoadedEntities(); + } + + public void respawn() { + if(this.thePlayer != null && this.theWorld != null) { + this.theWorld.setEntityDead(this.thePlayer); + } + + this.theWorld.setSpawnLocation(); + this.thePlayer = new EntityPlayerSP(this, this.theWorld, this.session); + this.thePlayer.preparePlayerToSpawn(); + this.playerController.flipPlayer(this.thePlayer); + if(this.theWorld != null) { + this.theWorld.playerEntity = this.thePlayer; + this.theWorld.spawnPlayerWithLoadedChunks(); + } + + this.thePlayer.movementInput = new MovementInputFromOptions(this.gameSettings); + this.playerController.onRespawn(this.thePlayer); + this.preloadWorld("Respawning"); + } +} diff --git a/src/net/minecraft/src/MinecraftAppletImpl.java b/src/net/minecraft/src/MinecraftAppletImpl.java new file mode 100644 index 0000000..647fd9b --- /dev/null +++ b/src/net/minecraft/src/MinecraftAppletImpl.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.awt.Canvas; +import java.awt.Component; +import net.minecraft.client.MinecraftApplet; + +public class MinecraftAppletImpl extends Minecraft { + final MinecraftApplet mainFrame; + + public MinecraftAppletImpl(MinecraftApplet var1, Component var2, Canvas var3, MinecraftApplet var4, int var5, int var6, boolean var7) { + super(var2, var3, var4, var5, var6, var7); + this.mainFrame = var1; + } + + public void displayUnexpectedThrowable(UnexpectedThrowable var1) { + this.mainFrame.removeAll(); + this.mainFrame.add(new PanelCrashReport(var1), "Center"); + this.mainFrame.validate(); + } +} 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/ModelBase.java b/src/net/minecraft/src/ModelBase.java new file mode 100644 index 0000000..06d3a6f --- /dev/null +++ b/src/net/minecraft/src/ModelBase.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public abstract class ModelBase { + public float swingProgress; + + public void render(float var1, float var2, float var3, float var4, float var5, float var6) { + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { + } +} diff --git a/src/net/minecraft/src/ModelBiped.java b/src/net/minecraft/src/ModelBiped.java new file mode 100644 index 0000000..5a2b40b --- /dev/null +++ b/src/net/minecraft/src/ModelBiped.java @@ -0,0 +1,73 @@ +package net.minecraft.src; + +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 ModelBiped() { + this(0.0F); + } + + public ModelBiped(float var1) { + this(var1, 0.0F); + } + + public ModelBiped(float var1, float var2) { + this.bipedHead = new ModelRenderer(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(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(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(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(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(0, 16); + this.bipedRightLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, var1); + this.bipedRightLeg.setRotationPoint(-2.0F, 12.0F + var2, 0.0F); + this.bipedLeftLeg = new ModelRenderer(0, 16); + this.bipedLeftLeg.mirror = true; + this.bipedLeftLeg.addBox(-2.0F, 0.0F, -2.0F, 4, 12, 4, var1); + this.bipedLeftLeg.setRotationPoint(2.0F, 12.0F + var2, 0.0F); + } + + public void render(float var1, float var2, float var3, float var4, float var5, float var6) { + this.setRotationAngles(var1, var2, var3, var4, var5, var6); + this.bipedHead.render(var6); + this.bipedBody.render(var6); + this.bipedRightArm.render(var6); + this.bipedLeftArm.render(var6); + this.bipedRightLeg.render(var6); + this.bipedLeftLeg.render(var6); + this.bipedHeadwear.render(var6); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { + 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; + this.bipedRightArm.rotateAngleZ = (MathHelper.cos(var1 * 0.2312F) + 1.0F) * 1.0F * var2; + this.bipedLeftArm.rotateAngleX = MathHelper.cos(var1 * 0.6662F) * 2.0F * var2; + this.bipedLeftArm.rotateAngleZ = (MathHelper.cos(var1 * 0.2812F) - 1.0F) * 1.0F * var2; + 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.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/ModelCreeper.java b/src/net/minecraft/src/ModelCreeper.java new file mode 100644 index 0000000..eac89c4 --- /dev/null +++ b/src/net/minecraft/src/ModelCreeper.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +public class ModelCreeper extends ModelBase { + public ModelRenderer head; + public ModelRenderer headwear; + public ModelRenderer body; + public ModelRenderer leg1; + public ModelRenderer leg2; + public ModelRenderer leg3; + public ModelRenderer leg4; + + public ModelCreeper() { + float var1 = 0.0F; + byte var2 = 4; + this.head = new ModelRenderer(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.headwear = new ModelRenderer(32, 0); + this.headwear.addBox(-4.0F, -8.0F, -4.0F, 8, 8, 8, var1 + 0.5F); + this.headwear.setRotationPoint(0.0F, (float)var2, 0.0F); + this.body = new ModelRenderer(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(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(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(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(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(float var1, float var2, float var3, float var4, float var5, float var6) { + this.setRotationAngles(var1, var2, var3, var4, var5, var6); + this.head.render(var6); + this.body.render(var6); + this.leg1.render(var6); + this.leg2.render(var6); + this.leg3.render(var6); + this.leg4.render(var6); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { + 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/ModelMinecart.java b/src/net/minecraft/src/ModelMinecart.java new file mode 100644 index 0000000..68425ee --- /dev/null +++ b/src/net/minecraft/src/ModelMinecart.java @@ -0,0 +1,47 @@ +package net.minecraft.src; + +public class ModelMinecart extends ModelBase { + public ModelRenderer[] sideModels = new ModelRenderer[7]; + + public ModelMinecart() { + this.sideModels[0] = new ModelRenderer(0, 10); + this.sideModels[1] = new ModelRenderer(0, 0); + this.sideModels[2] = new ModelRenderer(0, 0); + this.sideModels[3] = new ModelRenderer(0, 0); + this.sideModels[4] = new ModelRenderer(0, 0); + this.sideModels[5] = new ModelRenderer(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)(0 + 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)(0 + 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)(0 + 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)(0 + 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)(0 + 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)(0 + 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(float var1, float var2, float var3, float var4, float var5, float var6) { + this.sideModels[5].rotationPointY = 4.0F - var3; + + for(int var7 = 0; var7 < 6; ++var7) { + this.sideModels[var7].render(var6); + } + + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { + } +} diff --git a/src/net/minecraft/src/ModelPig.java b/src/net/minecraft/src/ModelPig.java new file mode 100644 index 0000000..c300bd4 --- /dev/null +++ b/src/net/minecraft/src/ModelPig.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class ModelPig extends ModelQuadruped { + public ModelPig() { + super(6, 0.0F); + } + + public ModelPig(float var1) { + super(6, var1); + } +} diff --git a/src/net/minecraft/src/ModelQuadruped.java b/src/net/minecraft/src/ModelQuadruped.java new file mode 100644 index 0000000..d37c549 --- /dev/null +++ b/src/net/minecraft/src/ModelQuadruped.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +public class ModelQuadruped extends ModelBase { + public ModelRenderer head = new ModelRenderer(0, 0); + public ModelRenderer body; + public ModelRenderer leg1; + public ModelRenderer leg2; + public ModelRenderer leg3; + public ModelRenderer leg4; + + 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(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(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(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(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(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(float var1, float var2, float var3, float var4, float var5, float var6) { + this.setRotationAngles(var1, var2, var3, var4, var5, var6); + this.head.render(var6); + this.body.render(var6); + this.leg1.render(var6); + this.leg2.render(var6); + this.leg3.render(var6); + this.leg4.render(var6); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { + 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..20b1eb0 --- /dev/null +++ b/src/net/minecraft/src/ModelRenderer.java @@ -0,0 +1,131 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class ModelRenderer { + private PositionTextureVertex[] corners; + private TexturedQuad[] faces; + 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 = false; + private int displayList = 0; + public boolean mirror = false; + public boolean showModel = true; + public boolean isHidden = false; + + public ModelRenderer(int var1, int var2) { + this.textureOffsetX = var1; + this.textureOffsetY = var2; + } + + public void addBox(float var1, float var2, float var3, int var4, int var5, int var6, float var7) { + this.corners = new PositionTextureVertex[8]; + this.faces = new TexturedQuad[6]; + float var8 = var1 + (float)var4; + float var9 = var2 + (float)var5; + float var10 = var3 + (float)var6; + var1 -= var7; + var2 -= var7; + var3 -= var7; + var8 += var7; + var9 += var7; + var10 += var7; + if(this.mirror) { + float var11 = var8; + var8 = var1; + var1 = var11; + } + + PositionTextureVertex var20 = new PositionTextureVertex(var1, var2, var3, 0.0F, 0.0F); + PositionTextureVertex var12 = new PositionTextureVertex(var8, var2, var3, 0.0F, 8.0F); + PositionTextureVertex var13 = new PositionTextureVertex(var8, var9, var3, 8.0F, 8.0F); + PositionTextureVertex var14 = new PositionTextureVertex(var1, var9, var3, 8.0F, 0.0F); + PositionTextureVertex var15 = new PositionTextureVertex(var1, var2, var10, 0.0F, 0.0F); + PositionTextureVertex var16 = new PositionTextureVertex(var8, var2, var10, 0.0F, 8.0F); + PositionTextureVertex var17 = new PositionTextureVertex(var8, var9, var10, 8.0F, 8.0F); + PositionTextureVertex var18 = new PositionTextureVertex(var1, var9, var10, 8.0F, 0.0F); + this.corners[0] = var20; + this.corners[1] = var12; + this.corners[2] = var13; + this.corners[3] = var14; + this.corners[4] = var15; + this.corners[5] = var16; + this.corners[6] = var17; + this.corners[7] = var18; + this.faces[0] = new TexturedQuad(new PositionTextureVertex[]{var16, var12, var13, var17}, this.textureOffsetX + var6 + var4, this.textureOffsetY + var6, this.textureOffsetX + var6 + var4 + var6, this.textureOffsetY + var6 + var5); + this.faces[1] = new TexturedQuad(new PositionTextureVertex[]{var20, var15, var18, var14}, this.textureOffsetX + 0, this.textureOffsetY + var6, this.textureOffsetX + var6, this.textureOffsetY + var6 + var5); + this.faces[2] = new TexturedQuad(new PositionTextureVertex[]{var16, var15, var20, var12}, this.textureOffsetX + var6, this.textureOffsetY + 0, this.textureOffsetX + var6 + var4, this.textureOffsetY + var6); + this.faces[3] = new TexturedQuad(new PositionTextureVertex[]{var13, var14, var18, var17}, this.textureOffsetX + var6 + var4, this.textureOffsetY + 0, this.textureOffsetX + var6 + var4 + var4, this.textureOffsetY + var6); + this.faces[4] = new TexturedQuad(new PositionTextureVertex[]{var12, var20, var14, var13}, this.textureOffsetX + var6, this.textureOffsetY + var6, this.textureOffsetX + var6 + var4, this.textureOffsetY + var6 + var5); + this.faces[5] = new TexturedQuad(new PositionTextureVertex[]{var15, var16, var17, var18}, this.textureOffsetX + var6 + var4 + var6, this.textureOffsetY + var6, this.textureOffsetX + var6 + var4 + var6 + var4, this.textureOffsetY + var6 + var5); + if(this.mirror) { + for(int var19 = 0; var19 < this.faces.length; ++var19) { + this.faces[var19].flipFace(); + } + } + + } + + 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); + } + + 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); + } else { + GL11.glTranslatef(this.rotationPointX * var1, this.rotationPointY * var1, this.rotationPointZ * var1); + GL11.glCallList(this.displayList); + 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); + GL11.glPopMatrix(); + } + + } + } + } + + 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.faces.length; ++var3) { + this.faces[var3].draw(var2, var1); + } + + GL11.glEndList(); + this.compiled = true; + } +} diff --git a/src/net/minecraft/src/ModelSheep.java b/src/net/minecraft/src/ModelSheep.java new file mode 100644 index 0000000..df1c1c4 --- /dev/null +++ b/src/net/minecraft/src/ModelSheep.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class ModelSheep extends ModelQuadruped { + public ModelSheep() { + super(12, 0.0F); + this.head = new ModelRenderer(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(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); + } +} diff --git a/src/net/minecraft/src/ModelSheepFur.java b/src/net/minecraft/src/ModelSheepFur.java new file mode 100644 index 0000000..55bc761 --- /dev/null +++ b/src/net/minecraft/src/ModelSheepFur.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class ModelSheepFur extends ModelQuadruped { + public ModelSheepFur() { + super(12, 0.0F); + this.head = new ModelRenderer(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(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(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(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(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(0, 16); + this.leg4.addBox(-2.0F, 0.0F, -2.0F, 4, 6, 4, var1); + this.leg4.setRotationPoint(3.0F, 12.0F, -5.0F); + } +} diff --git a/src/net/minecraft/src/ModelSkeleton.java b/src/net/minecraft/src/ModelSkeleton.java new file mode 100644 index 0000000..e9447b8 --- /dev/null +++ b/src/net/minecraft/src/ModelSkeleton.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +public class ModelSkeleton extends ModelZombie { + public ModelSkeleton() { + float var1 = 0.0F; + this.bipedRightArm = new ModelRenderer(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(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(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(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); + } +} diff --git a/src/net/minecraft/src/ModelSpider.java b/src/net/minecraft/src/ModelSpider.java new file mode 100644 index 0000000..ee7e099 --- /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(32, 4); + this.spiderHead.addBox(-4.0F, -4.0F, -8.0F, 8, 8, 8, var1); + this.spiderHead.setRotationPoint(0.0F, (float)(0 + var2), -3.0F); + this.spiderNeck = new ModelRenderer(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(0, 12); + this.spiderBody.addBox(-5.0F, -4.0F, -6.0F, 10, 8, 12, var1); + this.spiderBody.setRotationPoint(0.0F, (float)(0 + var2), 9.0F); + this.spiderLeg1 = new ModelRenderer(18, 0); + this.spiderLeg1.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg1.setRotationPoint(-4.0F, (float)(0 + var2), 2.0F); + this.spiderLeg2 = new ModelRenderer(18, 0); + this.spiderLeg2.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg2.setRotationPoint(4.0F, (float)(0 + var2), 2.0F); + this.spiderLeg3 = new ModelRenderer(18, 0); + this.spiderLeg3.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg3.setRotationPoint(-4.0F, (float)(0 + var2), 1.0F); + this.spiderLeg4 = new ModelRenderer(18, 0); + this.spiderLeg4.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg4.setRotationPoint(4.0F, (float)(0 + var2), 1.0F); + this.spiderLeg5 = new ModelRenderer(18, 0); + this.spiderLeg5.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg5.setRotationPoint(-4.0F, (float)(0 + var2), 0.0F); + this.spiderLeg6 = new ModelRenderer(18, 0); + this.spiderLeg6.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg6.setRotationPoint(4.0F, (float)(0 + var2), 0.0F); + this.spiderLeg7 = new ModelRenderer(18, 0); + this.spiderLeg7.addBox(-15.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg7.setRotationPoint(-4.0F, (float)(0 + var2), -1.0F); + this.spiderLeg8 = new ModelRenderer(18, 0); + this.spiderLeg8.addBox(-1.0F, -1.0F, -1.0F, 16, 2, 2, var1); + this.spiderLeg8.setRotationPoint(4.0F, (float)(0 + var2), -1.0F); + } + + public void render(float var1, float var2, float var3, float var4, float var5, float var6) { + this.setRotationAngles(var1, var2, var3, var4, var5, var6); + this.spiderHead.render(var6); + this.spiderNeck.render(var6); + this.spiderBody.render(var6); + this.spiderLeg1.render(var6); + this.spiderLeg2.render(var6); + this.spiderLeg3.render(var6); + this.spiderLeg4.render(var6); + this.spiderLeg5.render(var6); + this.spiderLeg6.render(var6); + this.spiderLeg7.render(var6); + this.spiderLeg8.render(var6); + } + + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { + this.spiderHead.rotateAngleY = var4 / (180.0F / (float)Math.PI); + this.spiderHead.rotateAngleX = var5 / (180.0F / (float)Math.PI); + float var7 = (float)Math.PI * 0.25F; + this.spiderLeg1.rotateAngleZ = -var7; + this.spiderLeg2.rotateAngleZ = var7; + this.spiderLeg3.rotateAngleZ = -var7 * 0.74F; + this.spiderLeg4.rotateAngleZ = var7 * 0.74F; + this.spiderLeg5.rotateAngleZ = -var7 * 0.74F; + this.spiderLeg6.rotateAngleZ = var7 * 0.74F; + this.spiderLeg7.rotateAngleZ = -var7; + this.spiderLeg8.rotateAngleZ = var7; + float var8 = -0.0F; + float var9 = (float)Math.PI * 0.125F; + this.spiderLeg1.rotateAngleY = var9 * 2.0F + var8; + this.spiderLeg2.rotateAngleY = -var9 * 2.0F - var8; + this.spiderLeg3.rotateAngleY = var9 * 1.0F + var8; + this.spiderLeg4.rotateAngleY = -var9 * 1.0F - var8; + this.spiderLeg5.rotateAngleY = -var9 * 1.0F + var8; + this.spiderLeg6.rotateAngleY = var9 * 1.0F - var8; + this.spiderLeg7.rotateAngleY = -var9 * 2.0F + var8; + this.spiderLeg8.rotateAngleY = var9 * 2.0F - var8; + float var10 = -(MathHelper.cos(var1 * 0.6662F * 2.0F + 0.0F) * 0.4F) * var2; + float var11 = -(MathHelper.cos(var1 * 0.6662F * 2.0F + (float)Math.PI) * 0.4F) * var2; + float var12 = -(MathHelper.cos(var1 * 0.6662F * 2.0F + (float)Math.PI * 0.5F) * 0.4F) * var2; + float var13 = -(MathHelper.cos(var1 * 0.6662F * 2.0F + (float)Math.PI * 3.0F / 2.0F) * 0.4F) * var2; + float var14 = Math.abs(MathHelper.sin(var1 * 0.6662F + 0.0F) * 0.4F) * var2; + float var15 = Math.abs(MathHelper.sin(var1 * 0.6662F + (float)Math.PI) * 0.4F) * var2; + float var16 = Math.abs(MathHelper.sin(var1 * 0.6662F + (float)Math.PI * 0.5F) * 0.4F) * var2; + float var17 = Math.abs(MathHelper.sin(var1 * 0.6662F + (float)Math.PI * 3.0F / 2.0F) * 0.4F) * var2; + this.spiderLeg1.rotateAngleY += var10; + this.spiderLeg2.rotateAngleY += -var10; + this.spiderLeg3.rotateAngleY += var11; + this.spiderLeg4.rotateAngleY += -var11; + this.spiderLeg5.rotateAngleY += var12; + this.spiderLeg6.rotateAngleY += -var12; + this.spiderLeg7.rotateAngleY += var13; + this.spiderLeg8.rotateAngleY += -var13; + this.spiderLeg1.rotateAngleZ += var14; + this.spiderLeg2.rotateAngleZ += -var14; + this.spiderLeg3.rotateAngleZ += var15; + this.spiderLeg4.rotateAngleZ += -var15; + this.spiderLeg5.rotateAngleZ += var16; + this.spiderLeg6.rotateAngleZ += -var16; + this.spiderLeg7.rotateAngleZ += var17; + this.spiderLeg8.rotateAngleZ += -var17; + } +} diff --git a/src/net/minecraft/src/ModelZombie.java b/src/net/minecraft/src/ModelZombie.java new file mode 100644 index 0000000..b0e93e1 --- /dev/null +++ b/src/net/minecraft/src/ModelZombie.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +public class ModelZombie extends ModelBiped { + public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6) { + super.setRotationAngles(var1, var2, var3, var4, var5, var6); + float var7 = MathHelper.sin(this.swingProgress * (float)Math.PI); + float var8 = MathHelper.sin((1.0F - (1.0F - this.swingProgress) * (1.0F - this.swingProgress)) * (float)Math.PI); + this.bipedRightArm.rotateAngleZ = 0.0F; + this.bipedLeftArm.rotateAngleZ = 0.0F; + this.bipedRightArm.rotateAngleY = -(0.1F - var7 * 0.6F); + this.bipedLeftArm.rotateAngleY = 0.1F - var7 * 0.6F; + this.bipedRightArm.rotateAngleX = (float)Math.PI * -0.5F; + this.bipedLeftArm.rotateAngleX = (float)Math.PI * -0.5F; + this.bipedRightArm.rotateAngleX -= var7 * 1.2F - var8 * 0.4F; + this.bipedLeftArm.rotateAngleX -= var7 * 1.2F - var8 * 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/MouseHelper.java b/src/net/minecraft/src/MouseHelper.java new file mode 100644 index 0000000..d1671d3 --- /dev/null +++ b/src/net/minecraft/src/MouseHelper.java @@ -0,0 +1,81 @@ +package net.minecraft.src; + +import java.awt.AWTException; +import java.awt.Component; +import java.awt.MouseInfo; +import java.awt.Point; +import java.awt.Robot; +import java.nio.IntBuffer; +import org.lwjgl.LWJGLException; +import org.lwjgl.input.Cursor; +import org.lwjgl.input.Mouse; + +public class MouseHelper { + private Component windowComponent; + private Robot robot; + private int componentWidth; + private int componentHeight; + private Cursor cursor; + public int deltaX; + public int deltaY; + private int mouseInt = 10; + + public MouseHelper(Component var1) { + this.windowComponent = var1; + + try { + this.robot = new Robot(); + } catch (AWTException var6) { + var6.printStackTrace(); + } + + IntBuffer var2 = GLAllocation.createIntBuffer(1); + var2.put(0); + var2.flip(); + IntBuffer var3 = GLAllocation.createIntBuffer(1024); + + try { + this.cursor = new Cursor(32, 32, 16, 16, 1, var3, var2); + } catch (LWJGLException var5) { + var5.printStackTrace(); + } + + } + + public void grabMouseCursor() { + try { + Mouse.setNativeCursor(this.cursor); + } catch (LWJGLException var2) { + var2.printStackTrace(); + } + + this.mouseXYChange(); + this.deltaX = 0; + this.deltaY = 0; + } + + public void ungrabMouseCursor() { + try { + Mouse.setNativeCursor((Cursor)null); + } catch (LWJGLException var2) { + var2.printStackTrace(); + } + + } + + public void mouseXYChange() { + Point var1 = MouseInfo.getPointerInfo().getLocation(); + Point var2 = this.windowComponent.getLocationOnScreen(); + this.robot.mouseMove(this.componentWidth, this.componentHeight); + this.componentWidth = var2.x + this.windowComponent.getWidth() / 2; + this.componentHeight = var2.y + this.windowComponent.getHeight() / 2; + if(this.mouseInt == 0) { + this.deltaX = var1.x - this.componentWidth; + this.deltaY = var1.y - this.componentHeight; + } else { + this.deltaX = this.deltaY = 0; + --this.mouseInt; + } + + } +} diff --git a/src/net/minecraft/src/MovementInput.java b/src/net/minecraft/src/MovementInput.java new file mode 100644 index 0000000..0b511d4 --- /dev/null +++ b/src/net/minecraft/src/MovementInput.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class MovementInput { + public float moveStrafe = 0.0F; + public float moveForward = 0.0F; + public boolean unused = false; + public boolean jump = false; + + public void updatePlayerMoveState(EntityPlayer var1) { + } + + public void resetKeyState() { + } + + public void checkKeyForMovementInput(int var1, boolean var2) { + } +} diff --git a/src/net/minecraft/src/MovementInputFromOptions.java b/src/net/minecraft/src/MovementInputFromOptions.java new file mode 100644 index 0000000..e92f2ec --- /dev/null +++ b/src/net/minecraft/src/MovementInputFromOptions.java @@ -0,0 +1,67 @@ +package net.minecraft.src; + +public class MovementInputFromOptions extends MovementInput { + private boolean[] movementKeyStates = new boolean[10]; + private GameSettings gameSettings; + + public MovementInputFromOptions(GameSettings var1) { + this.gameSettings = var1; + } + + public void checkKeyForMovementInput(int var1, boolean var2) { + byte var3 = -1; + if(var1 == this.gameSettings.keyBindForward.keyCode) { + var3 = 0; + } + + if(var1 == this.gameSettings.keyBindBack.keyCode) { + var3 = 1; + } + + if(var1 == this.gameSettings.keyBindLeft.keyCode) { + var3 = 2; + } + + if(var1 == this.gameSettings.keyBindRight.keyCode) { + var3 = 3; + } + + if(var1 == this.gameSettings.keyBindJump.keyCode) { + var3 = 4; + } + + if(var3 >= 0) { + this.movementKeyStates[var3] = var2; + } + + } + + public void resetKeyState() { + for(int var1 = 0; var1 < 10; ++var1) { + this.movementKeyStates[var1] = false; + } + + } + + public void updatePlayerMoveState(EntityPlayer var1) { + this.moveStrafe = 0.0F; + this.moveForward = 0.0F; + if(this.movementKeyStates[0]) { + ++this.moveForward; + } + + if(this.movementKeyStates[1]) { + --this.moveForward; + } + + if(this.movementKeyStates[2]) { + ++this.moveStrafe; + } + + if(this.movementKeyStates[3]) { + --this.moveStrafe; + } + + this.jump = this.movementKeyStates[4]; + } +} diff --git a/src/net/minecraft/src/MovingObjectPosition.java b/src/net/minecraft/src/MovingObjectPosition.java new file mode 100644 index 0000000..764010a --- /dev/null +++ b/src/net/minecraft/src/MovingObjectPosition.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class MovingObjectPosition { + public int typeOfHit; + public int blockX; + public int blockY; + public int blockZ; + public int sideHit; + public Vec3D hitVec; + public Entity entityHit; + + public MovingObjectPosition(int var1, int var2, int var3, int var4, Vec3D var5) { + this.typeOfHit = 0; + this.blockX = var1; + this.blockY = var2; + this.blockZ = var3; + this.sideHit = var4; + this.hitVec = Vec3D.createVector(var5.xCoord, var5.yCoord, var5.zCoord); + } + + public MovingObjectPosition(Entity var1) { + this.typeOfHit = 1; + this.entityHit = var1; + this.hitVec = Vec3D.createVector(var1.posX, var1.posY, var1.posZ); + } +} diff --git a/src/net/minecraft/src/NBTBase.java b/src/net/minecraft/src/NBTBase.java new file mode 100644 index 0000000..ba02104 --- /dev/null +++ b/src/net/minecraft/src/NBTBase.java @@ -0,0 +1,102 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public abstract class NBTBase { + private String key = null; + + abstract void writeTagContents(DataOutput var1) throws IOException; + + abstract void readTagContents(DataInput var1) throws IOException; + + public abstract byte getType(); + + public String getKey() { + return this.key == null ? "" : this.key; + } + + public NBTBase setKey(String var1) { + this.key = var1; + return this; + } + + public static NBTBase readNamedTag(DataInput var0) throws IOException { + byte var1 = var0.readByte(); + if(var1 == 0) { + return new NBTTagEnd(); + } else { + NBTBase var2 = createTagOfType(var1); + var2.key = var0.readUTF(); + var2.readTagContents(var0); + return var2; + } + } + + public static void writeNamedTag(NBTBase var0, DataOutput var1) throws IOException { + var1.writeByte(var0.getType()); + if(var0.getType() != 0) { + var1.writeUTF(var0.getKey()); + var0.writeTagContents(var1); + } + } + + public static NBTBase createTagOfType(byte var0) { + switch(var0) { + case 0: + return new NBTTagEnd(); + case 1: + return new NBTTagByte(); + case 2: + return new NBTTagShort(); + case 3: + return new NBTTagInt(); + case 4: + return new NBTTagLong(); + case 5: + return new NBTTagFloat(); + case 6: + return new NBTTagDouble(); + case 7: + return new NBTTagByteArray(); + case 8: + return new NBTTagString(); + case 9: + return new NBTTagList(); + case 10: + return new NBTTagCompound(); + 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"; + default: + return "UNKNOWN"; + } + } +} diff --git a/src/net/minecraft/src/NBTTagByte.java b/src/net/minecraft/src/NBTTagByte.java new file mode 100644 index 0000000..3260724 --- /dev/null +++ b/src/net/minecraft/src/NBTTagByte.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagByte extends NBTBase { + public byte byteValue; + + public NBTTagByte() { + } + + public NBTTagByte(byte var1) { + this.byteValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeByte(this.byteValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.byteValue = var1.readByte(); + } + + public byte getType() { + return (byte)1; + } + + public String toString() { + return "" + this.byteValue; + } +} diff --git a/src/net/minecraft/src/NBTTagByteArray.java b/src/net/minecraft/src/NBTTagByteArray.java new file mode 100644 index 0000000..0f58fe1 --- /dev/null +++ b/src/net/minecraft/src/NBTTagByteArray.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagByteArray extends NBTBase { + public byte[] byteArray; + + public NBTTagByteArray() { + } + + public NBTTagByteArray(byte[] var1) { + this.byteArray = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeInt(this.byteArray.length); + var1.write(this.byteArray); + } + + void readTagContents(DataInput var1) throws IOException { + int var2 = var1.readInt(); + this.byteArray = new byte[var2]; + var1.readFully(this.byteArray); + } + + public byte getType() { + return (byte)7; + } + + public String toString() { + return "[" + this.byteArray.length + " bytes]"; + } +} diff --git a/src/net/minecraft/src/NBTTagCompound.java b/src/net/minecraft/src/NBTTagCompound.java new file mode 100644 index 0000000..a7fa2f8 --- /dev/null +++ b/src/net/minecraft/src/NBTTagCompound.java @@ -0,0 +1,128 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +public class NBTTagCompound extends NBTBase { + private Map tagMap = new HashMap(); + + void writeTagContents(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 readTagContents(DataInput var1) throws IOException { + this.tagMap.clear(); + + while(true) { + NBTBase var2 = NBTBase.readNamedTag(var1); + if(var2.getType() == 0) { + return; + } + + this.tagMap.put(var2.getKey(), var2); + } + } + + public byte getType() { + return (byte)10; + } + + public void setTag(String var1, NBTBase var2) { + this.tagMap.put(var1, var2.setKey(var1)); + } + + public void setByte(String var1, byte var2) { + this.tagMap.put(var1, (new NBTTagByte(var2)).setKey(var1)); + } + + public void setShort(String var1, short var2) { + this.tagMap.put(var1, (new NBTTagShort(var2)).setKey(var1)); + } + + public void setInteger(String var1, int var2) { + this.tagMap.put(var1, (new NBTTagInt(var2)).setKey(var1)); + } + + public void setLong(String var1, long var2) { + this.tagMap.put(var1, (new NBTTagLong(var2)).setKey(var1)); + } + + public void setFloat(String var1, float var2) { + this.tagMap.put(var1, (new NBTTagFloat(var2)).setKey(var1)); + } + + public void setString(String var1, String var2) { + this.tagMap.put(var1, (new NBTTagString(var2)).setKey(var1)); + } + + public void setByteArray(String var1, byte[] var2) { + this.tagMap.put(var1, (new NBTTagByteArray(var2)).setKey(var1)); + } + + public void setCompoundTag(String var1, NBTTagCompound var2) { + this.tagMap.put(var1, var2.setKey(var1)); + } + + public void setBoolean(String var1, boolean var2) { + this.setByte(var1, (byte)(var2 ? 1 : 0)); + } + + public boolean hasKey(String var1) { + return this.tagMap.containsKey(var1); + } + + public byte getByte(String var1) { + return !this.tagMap.containsKey(var1) ? 0 : ((NBTTagByte)this.tagMap.get(var1)).byteValue; + } + + public short getShort(String var1) { + return !this.tagMap.containsKey(var1) ? 0 : ((NBTTagShort)this.tagMap.get(var1)).shortValue; + } + + public int getInteger(String var1) { + return !this.tagMap.containsKey(var1) ? 0 : ((NBTTagInt)this.tagMap.get(var1)).intValue; + } + + public long getLong(String var1) { + return !this.tagMap.containsKey(var1) ? 0L : ((NBTTagLong)this.tagMap.get(var1)).longValue; + } + + public float getFloat(String var1) { + return !this.tagMap.containsKey(var1) ? 0.0F : ((NBTTagFloat)this.tagMap.get(var1)).floatValue; + } + + public String getString(String var1) { + return !this.tagMap.containsKey(var1) ? "" : ((NBTTagString)this.tagMap.get(var1)).stringValue; + } + + public byte[] getByteArray(String var1) { + return !this.tagMap.containsKey(var1) ? new byte[0] : ((NBTTagByteArray)this.tagMap.get(var1)).byteArray; + } + + public NBTTagCompound getCompoundTag(String var1) { + return !this.tagMap.containsKey(var1) ? new NBTTagCompound() : (NBTTagCompound)this.tagMap.get(var1); + } + + public NBTTagList getTagList(String var1) { + return !this.tagMap.containsKey(var1) ? new NBTTagList() : (NBTTagList)this.tagMap.get(var1); + } + + public boolean getBoolean(String var1) { + return this.getByte(var1) != 0; + } + + public String toString() { + return "" + this.tagMap.size() + " entries"; + } +} diff --git a/src/net/minecraft/src/NBTTagDouble.java b/src/net/minecraft/src/NBTTagDouble.java new file mode 100644 index 0000000..cd00968 --- /dev/null +++ b/src/net/minecraft/src/NBTTagDouble.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagDouble extends NBTBase { + public double doubleValue; + + public NBTTagDouble() { + } + + public NBTTagDouble(double var1) { + this.doubleValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeDouble(this.doubleValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.doubleValue = var1.readDouble(); + } + + public byte getType() { + return (byte)6; + } + + public String toString() { + return "" + this.doubleValue; + } +} diff --git a/src/net/minecraft/src/NBTTagEnd.java b/src/net/minecraft/src/NBTTagEnd.java new file mode 100644 index 0000000..a04e7d6 --- /dev/null +++ b/src/net/minecraft/src/NBTTagEnd.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagEnd extends NBTBase { + void readTagContents(DataInput var1) throws IOException { + } + + void writeTagContents(DataOutput var1) throws IOException { + } + + public byte getType() { + return (byte)0; + } + + public String toString() { + return "END"; + } +} diff --git a/src/net/minecraft/src/NBTTagFloat.java b/src/net/minecraft/src/NBTTagFloat.java new file mode 100644 index 0000000..cf59c93 --- /dev/null +++ b/src/net/minecraft/src/NBTTagFloat.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagFloat extends NBTBase { + public float floatValue; + + public NBTTagFloat() { + } + + public NBTTagFloat(float var1) { + this.floatValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeFloat(this.floatValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.floatValue = var1.readFloat(); + } + + public byte getType() { + return (byte)5; + } + + public String toString() { + return "" + this.floatValue; + } +} diff --git a/src/net/minecraft/src/NBTTagInt.java b/src/net/minecraft/src/NBTTagInt.java new file mode 100644 index 0000000..6dfdfe6 --- /dev/null +++ b/src/net/minecraft/src/NBTTagInt.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagInt extends NBTBase { + public int intValue; + + public NBTTagInt() { + } + + public NBTTagInt(int var1) { + this.intValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeInt(this.intValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.intValue = var1.readInt(); + } + + public byte getType() { + return (byte)3; + } + + public String toString() { + return "" + this.intValue; + } +} diff --git a/src/net/minecraft/src/NBTTagList.java b/src/net/minecraft/src/NBTTagList.java new file mode 100644 index 0000000..3ee8caf --- /dev/null +++ b/src/net/minecraft/src/NBTTagList.java @@ -0,0 +1,62 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class NBTTagList extends NBTBase { + private List tagList = new ArrayList(); + private byte tagType; + + void writeTagContents(DataOutput var1) throws IOException { + if(this.tagList.size() > 0) { + this.tagType = ((NBTBase)this.tagList.get(0)).getType(); + } 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)).writeTagContents(var1); + } + + } + + void readTagContents(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.createTagOfType(this.tagType); + var4.readTagContents(var1); + this.tagList.add(var4); + } + + } + + public byte getType() { + return (byte)9; + } + + public String toString() { + return "" + this.tagList.size() + " entries of type " + NBTBase.getTagName(this.tagType); + } + + public void setTag(NBTBase var1) { + this.tagType = var1.getType(); + this.tagList.add(var1); + } + + public NBTBase tagAt(int var1) { + return (NBTBase)this.tagList.get(var1); + } + + public int tagCount() { + return this.tagList.size(); + } +} diff --git a/src/net/minecraft/src/NBTTagLong.java b/src/net/minecraft/src/NBTTagLong.java new file mode 100644 index 0000000..646f80d --- /dev/null +++ b/src/net/minecraft/src/NBTTagLong.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagLong extends NBTBase { + public long longValue; + + public NBTTagLong() { + } + + public NBTTagLong(long var1) { + this.longValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeLong(this.longValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.longValue = var1.readLong(); + } + + public byte getType() { + return (byte)4; + } + + public String toString() { + return "" + this.longValue; + } +} diff --git a/src/net/minecraft/src/NBTTagShort.java b/src/net/minecraft/src/NBTTagShort.java new file mode 100644 index 0000000..3345229 --- /dev/null +++ b/src/net/minecraft/src/NBTTagShort.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagShort extends NBTBase { + public short shortValue; + + public NBTTagShort() { + } + + public NBTTagShort(short var1) { + this.shortValue = var1; + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeShort(this.shortValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.shortValue = var1.readShort(); + } + + public byte getType() { + return (byte)2; + } + + public String toString() { + return "" + this.shortValue; + } +} diff --git a/src/net/minecraft/src/NBTTagString.java b/src/net/minecraft/src/NBTTagString.java new file mode 100644 index 0000000..93fca6e --- /dev/null +++ b/src/net/minecraft/src/NBTTagString.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.io.DataInput; +import java.io.DataOutput; +import java.io.IOException; + +public class NBTTagString extends NBTBase { + public String stringValue; + + public NBTTagString() { + } + + public NBTTagString(String var1) { + this.stringValue = var1; + if(var1 == null) { + throw new IllegalArgumentException("Empty string not allowed"); + } + } + + void writeTagContents(DataOutput var1) throws IOException { + var1.writeUTF(this.stringValue); + } + + void readTagContents(DataInput var1) throws IOException { + this.stringValue = var1.readUTF(); + } + + public byte getType() { + return (byte)8; + } + + public String toString() { + return "" + this.stringValue; + } +} diff --git a/src/net/minecraft/src/NextTickListEntry.java b/src/net/minecraft/src/NextTickListEntry.java new file mode 100644 index 0000000..3870d49 --- /dev/null +++ b/src/net/minecraft/src/NextTickListEntry.java @@ -0,0 +1,44 @@ +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; + 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 && this.blockID == var2.blockID; + } + } + + public int hashCode() { + return (this.xCoord * 128 * 1024 + this.zCoord * 128 + this.yCoord) * 256 + this.blockID; + } + + public NextTickListEntry setScheduledTime(long var1) { + this.scheduledTime = var1; + return this; + } + + public int a(NextTickListEntry var1) { + return this.scheduledTime < var1.scheduledTime ? -1 : (this.scheduledTime > var1.scheduledTime ? 1 : (this.tickEntryID < var1.tickEntryID ? -1 : (this.tickEntryID > var1.tickEntryID ? 1 : 0))); + } + + public int compareTo(Object var1) { + return this.a((NextTickListEntry)var1); + } +} diff --git a/src/net/minecraft/src/NibbleArray.java b/src/net/minecraft/src/NibbleArray.java new file mode 100644 index 0000000..56a0293 --- /dev/null +++ b/src/net/minecraft/src/NibbleArray.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +public class NibbleArray { + public final byte[] data; + + public NibbleArray(int var1) { + this.data = new byte[var1 >> 1]; + } + + public NibbleArray(byte[] var1) { + this.data = var1; + } + + public int get(int var1, int var2, int var3) { + int var4 = var1 << 11 | var3 << 7 | var2; + 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 = var1 << 11 | var3 << 7 | var2; + 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); + } + + } + + public boolean isValid() { + return this.data != null; + } +} 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..b58f601 --- /dev/null +++ b/src/net/minecraft/src/NoiseGeneratorOctaves.java @@ -0,0 +1,61 @@ +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, double var3) { + double var5 = 0.0D; + double var7 = 1.0D; + + for(int var9 = 0; var9 < this.octaves; ++var9) { + var5 += this.generatorCollection[var9].generateNoise(var1 * var7, var3 * var7) / var7; + var7 /= 2.0D; + } + + return var5; + } + + public double a(double var1, double var3, double var5) { + double var7 = 0.0D; + double var9 = 1.0D; + + for(int var11 = 0; var11 < this.octaves; ++var11) { + var7 += this.generatorCollection[var11].c(var1 * var9, var3 * var9, var5 * var9) / var9; + var9 /= 2.0D; + } + + return var7; + } + + public double[] a(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 var17 = 1.0D; + + for(int var16 = 0; var16 < this.octaves; ++var16) { + this.generatorCollection[var16].a(var1, var2, var3, var4, var5, var6, var7, var8 * var17, var10 * var17, var12 * var17, var17); + var17 /= 2.0D; + } + + return var1; + } +} diff --git a/src/net/minecraft/src/NoiseGeneratorPerlin.java b/src/net/minecraft/src/NoiseGeneratorPerlin.java new file mode 100644 index 0000000..29fb064 --- /dev/null +++ b/src/net/minecraft/src/NoiseGeneratorPerlin.java @@ -0,0 +1,162 @@ +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 double generateNoise(double var1, double var3, double var5) { + double var7 = var1 + this.xCoord; + double var9 = var3 + this.yCoord; + double var11 = var5 + this.zCoord; + int var13 = (int)var7; + int var14 = (int)var9; + int var15 = (int)var11; + if(var7 < (double)var13) { + --var13; + } + + if(var9 < (double)var14) { + --var14; + } + + if(var11 < (double)var15) { + --var15; + } + + int var16 = var13 & 255; + int var17 = var14 & 255; + int var18 = var15 & 255; + var7 -= (double)var13; + var9 -= (double)var14; + var11 -= (double)var15; + double var19 = var7 * var7 * var7 * (var7 * (var7 * 6.0D - 15.0D) + 10.0D); + double var21 = var9 * var9 * var9 * (var9 * (var9 * 6.0D - 15.0D) + 10.0D); + double var23 = var11 * var11 * var11 * (var11 * (var11 * 6.0D - 15.0D) + 10.0D); + int var25 = this.permutations[var16] + var17; + int var26 = this.permutations[var25] + var18; + int var27 = this.permutations[var25 + 1] + var18; + int var28 = this.permutations[var16 + 1] + var17; + int var29 = this.permutations[var28] + var18; + int var30 = this.permutations[var28 + 1] + var18; + return this.lerp(var23, this.lerp(var21, this.lerp(var19, this.grad(this.permutations[var26], var7, var9, var11), this.grad(this.permutations[var29], var7 - 1.0D, var9, var11)), this.lerp(var19, this.grad(this.permutations[var27], var7, var9 - 1.0D, var11), this.grad(this.permutations[var30], var7 - 1.0D, var9 - 1.0D, var11))), this.lerp(var21, this.lerp(var19, this.grad(this.permutations[var26 + 1], var7, var9, var11 - 1.0D), this.grad(this.permutations[var29 + 1], var7 - 1.0D, var9, var11 - 1.0D)), this.lerp(var19, this.grad(this.permutations[var27 + 1], var7, var9 - 1.0D, var11 - 1.0D), this.grad(this.permutations[var30 + 1], var7 - 1.0D, var9 - 1.0D, var11 - 1.0D)))); + } + + public double lerp(double var1, double var3, double var5) { + return var3 + var1 * (var5 - var3); + } + + public 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 double generateNoise(double var1, double var3) { + return this.generateNoise(var1, var3, 0.0D); + } + + public double c(double var1, double var3, double var5) { + return this.generateNoise(var1, var3, var5); + } + + public void a(double[] var1, int var2, int var3, int var4, int var5, int var6, int var7, double var8, double var10, double var12, double var14) { + int var16 = 0; + double var17 = 1.0D / var14; + int var19 = -1; + boolean var20 = false; + boolean var21 = false; + boolean var22 = false; + boolean var23 = false; + boolean var24 = false; + boolean var25 = false; + double var26 = 0.0D; + double var28 = 0.0D; + double var30 = 0.0D; + double var32 = 0.0D; + + for(int var34 = 0; var34 < var5; ++var34) { + double var35 = (double)(var2 + var34) * var8 + this.xCoord; + int var37 = (int)var35; + if(var35 < (double)var37) { + --var37; + } + + int var38 = var37 & 255; + var35 -= (double)var37; + double var39 = var35 * var35 * var35 * (var35 * (var35 * 6.0D - 15.0D) + 10.0D); + + for(int var41 = 0; var41 < var7; ++var41) { + double var42 = (double)(var4 + var41) * var12 + this.zCoord; + int var44 = (int)var42; + if(var42 < (double)var44) { + --var44; + } + + int var45 = var44 & 255; + var42 -= (double)var44; + double var46 = var42 * var42 * var42 * (var42 * (var42 * 6.0D - 15.0D) + 10.0D); + + for(int var48 = 0; var48 < var6; ++var48) { + double var49 = (double)(var3 + var48) * var10 + this.yCoord; + int var51 = (int)var49; + if(var49 < (double)var51) { + --var51; + } + + int var52 = var51 & 255; + var49 -= (double)var51; + double var53 = var49 * var49 * var49 * (var49 * (var49 * 6.0D - 15.0D) + 10.0D); + if(var48 == 0 || var52 != var19) { + var19 = var52; + int var61 = this.permutations[var38] + var52; + int var62 = this.permutations[var61] + var45; + int var63 = this.permutations[var61 + 1] + var45; + int var64 = this.permutations[var38 + 1] + var52; + int var65 = this.permutations[var64] + var45; + int var66 = this.permutations[var64 + 1] + var45; + var26 = this.lerp(var39, this.grad(this.permutations[var62], var35, var49, var42), this.grad(this.permutations[var65], var35 - 1.0D, var49, var42)); + var28 = this.lerp(var39, this.grad(this.permutations[var63], var35, var49 - 1.0D, var42), this.grad(this.permutations[var66], var35 - 1.0D, var49 - 1.0D, var42)); + var30 = this.lerp(var39, this.grad(this.permutations[var62 + 1], var35, var49, var42 - 1.0D), this.grad(this.permutations[var65 + 1], var35 - 1.0D, var49, var42 - 1.0D)); + var32 = this.lerp(var39, this.grad(this.permutations[var63 + 1], var35, var49 - 1.0D, var42 - 1.0D), this.grad(this.permutations[var66 + 1], var35 - 1.0D, var49 - 1.0D, var42 - 1.0D)); + } + + double var55 = this.lerp(var53, var26, var28); + double var57 = this.lerp(var53, var30, var32); + double var59 = this.lerp(var46, var55, var57); + int var10001 = var16++; + var1[var10001] += var59 * var17; + } + } + } + + } +} diff --git a/src/net/minecraft/src/OSMap.java b/src/net/minecraft/src/OSMap.java new file mode 100644 index 0000000..c183c05 --- /dev/null +++ b/src/net/minecraft/src/OSMap.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +class OSMap { + static final int[] osValues = new int[EnumOS.values().length]; + + static { + try { + osValues[EnumOS.linux.ordinal()] = 1; + } catch (NoSuchFieldError var4) { + } + + try { + osValues[EnumOS.solaris.ordinal()] = 2; + } catch (NoSuchFieldError var3) { + } + + try { + osValues[EnumOS.windows.ordinal()] = 3; + } catch (NoSuchFieldError var2) { + } + + try { + osValues[EnumOS.macos.ordinal()] = 4; + } catch (NoSuchFieldError var1) { + } + + } +} diff --git a/src/net/minecraft/src/OSMapIsom.java b/src/net/minecraft/src/OSMapIsom.java new file mode 100644 index 0000000..16687c5 --- /dev/null +++ b/src/net/minecraft/src/OSMapIsom.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +class OSMapIsom { + static final int[] osValues = new int[EnumOSIsom.values().length]; + + static { + try { + osValues[EnumOSIsom.linux.ordinal()] = 1; + } catch (NoSuchFieldError var4) { + } + + try { + osValues[EnumOSIsom.solaris.ordinal()] = 2; + } catch (NoSuchFieldError var3) { + } + + try { + osValues[EnumOSIsom.windows.ordinal()] = 3; + } catch (NoSuchFieldError var2) { + } + + try { + osValues[EnumOSIsom.macos.ordinal()] = 4; + } catch (NoSuchFieldError var1) { + } + + } +} diff --git a/src/net/minecraft/src/OpenGlCapsChecker.java b/src/net/minecraft/src/OpenGlCapsChecker.java new file mode 100644 index 0000000..eaf1238 --- /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 boolean checkARBOcclusion() { + return false & GLContext.getCapabilities().GL_ARB_occlusion_query; + } +} diff --git a/src/net/minecraft/src/PanelCrashReport.java b/src/net/minecraft/src/PanelCrashReport.java new file mode 100644 index 0000000..59d6613 --- /dev/null +++ b/src/net/minecraft/src/PanelCrashReport.java @@ -0,0 +1,85 @@ +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.PrintWriter; +import java.io.StringWriter; +import java.text.SimpleDateFormat; +import java.util.Date; +import org.lwjgl.Sys; +import org.lwjgl.opengl.GL11; + +public class PanelCrashReport extends Panel { + public PanelCrashReport(UnexpectedThrowable var1) { + this.setBackground(new Color(3028036)); + this.setLayout(new BorderLayout()); + StringWriter var2 = new StringWriter(); + var1.exception.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 + "Minecraft: Minecraft Infdev\n"; + var5 = var5 + "OS: " + System.getProperty("os.name") + " (" + System.getProperty("os.arch") + ") version " + System.getProperty("os.version") + "\n"; + var5 = var5 + "Java: " + System.getProperty("java.version") + ", " + System.getProperty("java.vendor") + "\n"; + var5 = var5 + "VM: " + System.getProperty("java.vm.name") + " (" + System.getProperty("java.vm.info") + "), " + System.getProperty("java.vm.vendor") + "\n"; + var5 = var5 + "LWJGL: " + Sys.getVersion() + "\n"; + var4 = GL11.glGetString(GL11.GL_VENDOR); + var5 = var5 + "OpenGL: " + GL11.glGetString(GL11.GL_RENDERER) + " version " + GL11.glGetString(GL11.GL_VERSION) + ", " + GL11.glGetString(GL11.GL_VENDOR) + "\n"; + } catch (Throwable var8) { + var5 = var5 + "[failed to get system properties]\n"; + } + + var5 = var5 + "\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.\n"; + var6 = var6 + "\n"; + var6 = var6 + "If you wish to report this, please copy this entire text and email it to support@mojang.com.\n"; + var6 = var6 + "Please include a description of what you did when the error occured.\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 var7 = new TextArea(var6, 0, 0, 1); + var7.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(var7, "Center"); + } +} 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..e1994b1 --- /dev/null +++ b/src/net/minecraft/src/PathEntity.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public class PathEntity { + private final PathPoint[] points; + public final int pathLength; + private int pathIndex; + + public PathEntity(PathPoint[] var1) { + this.points = var1; + this.pathLength = var1.length; + } + + public void incrementPathIndex() { + ++this.pathIndex; + } + + public boolean isFinished() { + return this.pathIndex >= this.points.length; + } + + public Vec3D getPosition(Entity var1) { + float var2 = (float)this.points[this.pathIndex].xCoord + (float)((int)(var1.width + 1.0F)) * 0.5F; + float var3 = (float)this.points[this.pathIndex].yCoord; + float var4 = (float)this.points[this.pathIndex].zCoord + (float)((int)(var1.width + 1.0F)) * 0.5F; + return Vec3D.createVector((double)var2, (double)var3, (double)var4); + } +} diff --git a/src/net/minecraft/src/PathPoint.java b/src/net/minecraft/src/PathPoint.java new file mode 100644 index 0000000..7df70dd --- /dev/null +++ b/src/net/minecraft/src/PathPoint.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +public class PathPoint { + public final int xCoord; + public final int yCoord; + public final int zCoord; + public 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 = var1 | var2 << 10 | var3 << 20; + } + + 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 boolean equals(Object var1) { + return ((PathPoint)var1).hash == this.hash; + } + + 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/Pathfinder.java b/src/net/minecraft/src/Pathfinder.java new file mode 100644 index 0000000..7887c4f --- /dev/null +++ b/src/net/minecraft/src/Pathfinder.java @@ -0,0 +1,205 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; + +public class Pathfinder { + private IBlockAccess worldMap; + private Path path = new Path(); + private Map pointMap = new HashMap(); + private PathPoint[] pathOptions = new PathPoint[32]; + + public Pathfinder(IBlockAccess var1) { + this.worldMap = var1; + } + + 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.clear(); + PathPoint var9 = this.openPoint(MathHelper.floor_double(var1.boundingBox.minX), MathHelper.floor_double(var1.boundingBox.minY), MathHelper.floor_double(var1.boundingBox.minZ)); + PathPoint var10 = 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 var11 = new PathPoint(MathHelper.floor_float(var1.width + 1.0F), MathHelper.floor_float(var1.height + 1.0F), MathHelper.floor_float(var1.width + 1.0F)); + PathEntity var12 = this.addToPath(var1, var9, var10, var11, var8); + return var12; + } + + private PathEntity addToPath(Entity var1, PathPoint var2, PathPoint var3, PathPoint var4, float var5) { + var2.totalPathDistance = 0.0F; + var2.distanceToNext = var2.distanceTo(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.hash == var3.hash) { + return this.createEntityPath(var2, var3); + } + + if(var7.distanceTo(var3) < var6.distanceTo(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.distanceTo(var10); + if(!var10.isAssigned() || var11 < var10.totalPathDistance) { + var10.previous = var7; + var10.totalPathDistance = var11; + var10.distanceToNext = var10.distanceTo(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) > 0) { + 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; + if(this.getVerticalOffset(var1, var2, var3, var4, var5) > 0) { + var7 = this.openPoint(var2, var3, var4); + } + + if(var7 == null && this.getVerticalOffset(var1, var2, var3 + var6, var4, var5) > 0) { + var7 = this.openPoint(var2, var3 + var6, var4); + } + + if(var7 != null) { + int var8 = 0; + boolean var9 = false; + + while(true) { + if(var3 > 0) { + int var11 = this.getVerticalOffset(var1, var2, var3 - 1, var4, var5); + if(var11 > 0) { + if(var11 < 0) { + return null; + } + + ++var8; + if(var8 >= 4) { + return null; + } + + --var3; + continue; + } + } + + if(var3 > 0) { + var7 = this.openPoint(var2, var3, var4); + } + + Material var10 = this.worldMap.getBlockMaterial(var2, var3 - 1, var4); + if(var10 == Material.water || var10 == Material.lava) { + return null; + } + break; + } + } + + return var7; + } + + private final PathPoint openPoint(int var1, int var2, int var3) { + int var4 = var1 | var2 << 10 | var3 << 20; + PathPoint var5 = (PathPoint)this.pointMap.get(Integer.valueOf(var4)); + if(var5 == null) { + var5 = new PathPoint(var1, var2, var3); + this.pointMap.put(Integer.valueOf(var4), var5); + } + + return var5; + } + + private int getVerticalOffset(Entity var1, int var2, int var3, int var4, PathPoint var5) { + for(int var6 = var2; var6 < var2 + var5.xCoord; ++var6) { + for(int var7 = var3; var7 < var3 + var5.yCoord; ++var7) { + for(int var8 = var4; var8 < var4 + var5.zCoord; ++var8) { + Material var9 = this.worldMap.getBlockMaterial(var2, var3, var4); + if(var9.getIsSolid()) { + return 0; + } + + if(var9 == Material.water || var9 == Material.lava) { + return -1; + } + } + } + } + + return 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/PlayerController.java b/src/net/minecraft/src/PlayerController.java new file mode 100644 index 0000000..4abc7dc --- /dev/null +++ b/src/net/minecraft/src/PlayerController.java @@ -0,0 +1,60 @@ +package net.minecraft.src; + +public class PlayerController { + protected final Minecraft mc; + public boolean isInTestMode = false; + + public PlayerController(Minecraft var1) { + this.mc = var1; + } + + public void init() { + } + + public void onWorldChange(World var1) { + } + + public void clickBlock(int var1, int var2, int var3) { + this.sendBlockRemoved(var1, var2, var3); + } + + public boolean sendBlockRemoved(int var1, int var2, int var3) { + this.mc.effectRenderer.addBlockDestroyEffects(var1, var2, var3); + World var4 = this.mc.theWorld; + Block var5 = Block.blocksList[var4.getBlockId(var1, var2, var3)]; + int var6 = var4.getBlockMetadata(var1, var2, var3); + boolean var7 = var4.setBlockWithNotify(var1, var2, var3, 0); + if(var5 != null && var7) { + this.mc.sndManager.playSound(var5.stepSound.getBreakSound(), (float)var1 + 0.5F, (float)var2 + 0.5F, (float)var3 + 0.5F, (var5.stepSound.getVolume() + 1.0F) / 2.0F, var5.stepSound.getPitch() * 0.8F); + var5.onBlockDestroyedByPlayer(var4, var1, var2, var3, var6); + } + + return var7; + } + + public void sendBlockRemoving(int var1, int var2, int var3, int var4) { + } + + public void resetBlockRemoving() { + } + + public void setPartialTime(float var1) { + } + + public float getBlockReachDistance() { + return 5.0F; + } + + public void flipPlayer(EntityPlayer var1) { + } + + public void onUpdate() { + } + + public boolean shouldDrawHUD() { + return true; + } + + public void onRespawn(EntityPlayer var1) { + } +} diff --git a/src/net/minecraft/src/PlayerControllerCreative.java b/src/net/minecraft/src/PlayerControllerCreative.java new file mode 100644 index 0000000..960d62a --- /dev/null +++ b/src/net/minecraft/src/PlayerControllerCreative.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +public class PlayerControllerCreative extends PlayerController { + public PlayerControllerCreative(Minecraft var1) { + super(var1); + this.isInTestMode = true; + } + + public void init() { + } + + public void onRespawn(EntityPlayer var1) { + for(int var2 = 0; var2 < 9; ++var2) { + if(var1.inventory.mainInventory[var2] == null) { + this.mc.thePlayer.inventory.mainInventory[var2] = new ItemStack(((Block)Session.registeredBlocksList.get(var2)).blockID); + } else { + this.mc.thePlayer.inventory.mainInventory[var2].stackSize = 1; + } + } + + } + + public boolean shouldDrawHUD() { + return false; + } + + public void onWorldChange(World var1) { + super.onWorldChange(var1); + } + + public void onUpdate() { + } +} diff --git a/src/net/minecraft/src/PlayerControllerSP.java b/src/net/minecraft/src/PlayerControllerSP.java new file mode 100644 index 0000000..845c644 --- /dev/null +++ b/src/net/minecraft/src/PlayerControllerSP.java @@ -0,0 +1,124 @@ +package net.minecraft.src; + +public class PlayerControllerSP extends PlayerController { + private int curBlockX = -1; + private int curBlockY = -1; + private int curBlockZ = -1; + private float curBlockDamage = 0.0F; + private float prevBlockDamage = 0.0F; + private float blockDestroySoundCounter = 0.0F; + private int blockHitWait = 0; + private SpawnerAnimals monsterSpawner = new SpawnerMonsters(this, 100, EntityMonster.class, new Class[]{EntityZombie.class, EntitySkeleton.class, EntityCreeper.class, EntitySpider.class}); + private SpawnerAnimals animalSpawner = new SpawnerAnimals(20, EntityAnimal.class, new Class[]{EntitySheep.class, EntityPig.class}); + + public PlayerControllerSP(Minecraft var1) { + super(var1); + } + + public void flipPlayer(EntityPlayer var1) { + var1.rotationYaw = -180.0F; + } + + public void init() { + } + + public boolean sendBlockRemoved(int var1, int var2, int var3) { + int var4 = this.mc.theWorld.getBlockId(var1, var2, var3); + int var5 = this.mc.theWorld.getBlockMetadata(var1, var2, var3); + boolean var6 = super.sendBlockRemoved(var1, var2, var3); + ItemStack var7 = this.mc.thePlayer.getCurrentEquippedItem(); + if(var7 != null) { + var7.onDestroyBlock(var4, var1, var2, var3); + if(var7.stackSize == 0) { + var7.onItemDestroyedByUse(this.mc.thePlayer); + this.mc.thePlayer.displayGUIInventory(); + } + } + + if(var6 && this.mc.thePlayer.canHarvestBlock(Block.blocksList[var4])) { + Block.blocksList[var4].dropBlockAsItem(this.mc.theWorld, var1, var2, var3, var5); + } + + return var6; + } + + public void clickBlock(int var1, int var2, int var3) { + int var4 = this.mc.theWorld.getBlockId(var1, var2, var3); + if(var4 > 0 && this.curBlockDamage == 0.0F) { + Block.blocksList[var4].onBlockClicked(this.mc.theWorld, var1, var2, var3, this.mc.thePlayer); + } + + if(var4 > 0 && Block.blocksList[var4].blockStrength(this.mc.thePlayer) >= 1.0F) { + this.sendBlockRemoved(var1, var2, var3); + } + + } + + public void resetBlockRemoving() { + this.curBlockDamage = 0.0F; + this.blockHitWait = 0; + } + + public void sendBlockRemoving(int var1, int var2, int var3, int var4) { + if(this.blockHitWait > 0) { + --this.blockHitWait; + } else { + super.sendBlockRemoving(var1, var2, var3, var4); + if(var1 == this.curBlockX && var2 == this.curBlockY && var3 == this.curBlockZ) { + int var5 = this.mc.theWorld.getBlockId(var1, var2, var3); + if(var5 == 0) { + return; + } + + Block var6 = Block.blocksList[var5]; + this.curBlockDamage += var6.blockStrength(this.mc.thePlayer); + if(this.blockDestroySoundCounter % 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.blockDestroySoundCounter; + if(this.curBlockDamage >= 1.0F) { + this.sendBlockRemoved(var1, var2, var3); + this.curBlockDamage = 0.0F; + this.prevBlockDamage = 0.0F; + this.blockDestroySoundCounter = 0.0F; + this.blockHitWait = 5; + } + } else { + this.curBlockDamage = 0.0F; + this.prevBlockDamage = 0.0F; + this.blockDestroySoundCounter = 0.0F; + this.curBlockX = var1; + this.curBlockY = var2; + this.curBlockZ = var3; + } + + } + } + + public void setPartialTime(float var1) { + if(this.curBlockDamage <= 0.0F) { + this.mc.ingameGUI.damageGuiPartialTime = 0.0F; + this.mc.renderGlobal.damagePartialTime = 0.0F; + } else { + float var2 = this.prevBlockDamage + (this.curBlockDamage - this.prevBlockDamage) * var1; + this.mc.ingameGUI.damageGuiPartialTime = var2; + this.mc.renderGlobal.damagePartialTime = var2; + } + + } + + public float getBlockReachDistance() { + return 4.0F; + } + + public void onWorldChange(World var1) { + super.onWorldChange(var1); + } + + public void onUpdate() { + this.prevBlockDamage = this.curBlockDamage; + this.monsterSpawner.onUpdate(this.mc.theWorld); + this.animalSpawner.onUpdate(this.mc.theWorld); + } +} diff --git a/src/net/minecraft/src/PositionTextureVertex.java b/src/net/minecraft/src/PositionTextureVertex.java new file mode 100644 index 0000000..767c8bf --- /dev/null +++ b/src/net/minecraft/src/PositionTextureVertex.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +public class PositionTextureVertex { + public Vec3D vector3D; + public float texturePositionX; + public float texturePositionY; + + public PositionTextureVertex(float var1, float var2, float var3, float var4, float var5) { + this(Vec3D.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(Vec3D var1, float var2, float var3) { + this.vector3D = var1; + this.texturePositionX = var2; + this.texturePositionY = var3; + } +} diff --git a/src/net/minecraft/src/RecipeSorter.java b/src/net/minecraft/src/RecipeSorter.java new file mode 100644 index 0000000..e74a04e --- /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 a(CraftingRecipe var1, CraftingRecipe var2) { + return var2.getRecipeSize() < var1.getRecipeSize() ? -1 : (var2.getRecipeSize() > var1.getRecipeSize() ? 1 : 0); + } + + public int compare(Object var1, Object var2) { + return this.a((CraftingRecipe)var1, (CraftingRecipe)var2); + } +} diff --git a/src/net/minecraft/src/RecipesArmor.java b/src/net/minecraft/src/RecipesArmor.java new file mode 100644 index 0000000..5393870 --- /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[][]{{Block.cloth, Block.fire, Item.ingotIron, Item.diamond, Item.ingotGold}, {Item.helmetLeather, Item.helmetChain, Item.helmetSteel, Item.helmetDiamond, Item.helmetGold}, {Item.plateLeather, Item.plateChain, Item.plateSteel, Item.plateDiamonhd, Item.plateGold}, {Item.legsLeather, Item.legsChain, Item.legsSteel, Item.legsDiamond, Item.legsGold}, {Item.bootsLeather, Item.bootsChain, Item.bootsSteel, 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/RecipesCrafting.java b/src/net/minecraft/src/RecipesCrafting.java new file mode 100644 index 0000000..85015bd --- /dev/null +++ b/src/net/minecraft/src/RecipesCrafting.java @@ -0,0 +1,9 @@ +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.stoneOvenIdle), new Object[]{"###", "# #", "###", Character.valueOf('#'), Block.cobblestone}); + var1.addRecipe(new ItemStack(Block.workbench), new Object[]{"##", "##", Character.valueOf('#'), Block.planks}); + } +} diff --git a/src/net/minecraft/src/RecipesFood.java b/src/net/minecraft/src/RecipesFood.java new file mode 100644 index 0000000..b4adb74 --- /dev/null +++ b/src/net/minecraft/src/RecipesFood.java @@ -0,0 +1,8 @@ +package net.minecraft.src; + +public class RecipesFood { + public void addRecipes(CraftingManager var1) { + var1.addRecipe(new ItemStack(Item.bowlSoup), new Object[]{"Y", "X", "#", Character.valueOf('X'), Block.mushroomBrown, Character.valueOf('Y'), Block.mushroomRed, Character.valueOf('#'), Item.bowlEmpty}); + var1.addRecipe(new ItemStack(Item.bowlSoup), new Object[]{"Y", "X", "#", Character.valueOf('X'), Block.mushroomRed, Character.valueOf('Y'), Block.mushroomBrown, Character.valueOf('#'), Item.bowlEmpty}); + } +} diff --git a/src/net/minecraft/src/RecipesIngots.java b/src/net/minecraft/src/RecipesIngots.java new file mode 100644 index 0000000..22802d6 --- /dev/null +++ b/src/net/minecraft/src/RecipesIngots.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class RecipesIngots { + private Object[][] recipeItems = new Object[][]{{Block.blockGold, Item.ingotGold}, {Block.blockSteel, Item.ingotIron}, {Block.blockDiamond, Item.diamond}}; + + public void addRecipes(CraftingManager var1) { + for(int var2 = 0; var2 < this.recipeItems.length; ++var2) { + Block var3 = (Block)this.recipeItems[var2][0]; + Item var4 = (Item)this.recipeItems[var2][1]; + var1.addRecipe(new ItemStack(var3), new Object[]{"###", "###", "###", Character.valueOf('#'), var4}); + var1.addRecipe(new ItemStack(var4, 9), new Object[]{"#", Character.valueOf('#'), var3}); + } + + } +} diff --git a/src/net/minecraft/src/RecipesTools.java b/src/net/minecraft/src/RecipesTools.java new file mode 100644 index 0000000..d011907 --- /dev/null +++ b/src/net/minecraft/src/RecipesTools.java @@ -0,0 +1,18 @@ +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.pickaxeSteel, Item.pickaxeDiamond, Item.pickaxeGold}, {Item.shovelWood, Item.shovelStone, Item.shovel, Item.shovelDiamond, Item.shovelGold}, {Item.axeWood, Item.axeStone, Item.axeSteel, Item.axeDiamond, Item.axeGold}, {Item.hoeWood, Item.hoeStone, Item.hoeSteel, 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}); + } + } + + } +} diff --git a/src/net/minecraft/src/RecipesWeapons.java b/src/net/minecraft/src/RecipesWeapons.java new file mode 100644 index 0000000..34d76c0 --- /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.swordSteel, Item.swordDiamond, Item.swordGold}}; + + public void addRecipe(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.ingotIron, Character.valueOf('#'), Item.stick}); + } +} diff --git a/src/net/minecraft/src/Render.java b/src/net/minecraft/src/Render.java new file mode 100644 index 0000000..df43848 --- /dev/null +++ b/src/net/minecraft/src/Render.java @@ -0,0 +1,224 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public abstract class Render { + protected RenderManager renderManager; + private ModelBase modelBase = new ModelBiped(); + private RenderBlocks renderBlocksVar = 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) { + RenderEngine var2 = this.renderManager.renderEngine; + var2.bindTexture(var2.getTexture(var1)); + } + + protected void loadDownloadableImageTexture(String var1, String var2) { + RenderEngine var3 = this.renderManager.renderEngine; + var3.bindTexture(var3.getTextureForDownloadableImage(var1, var2)); + } + + private void renderEntityOnFire(Entity var1, double var2, double var4, double var6, float var8) { + GL11.glDisable(GL11.GL_LIGHTING); + int var9 = Block.fire.blockIndexInTexture; + int var10 = (var9 & 15) << 4; + int var11 = var9 & 240; + float var12 = (float)var10 / 256.0F; + float var13 = ((float)var10 + 15.99F) / 256.0F; + float var14 = (float)var11 / 256.0F; + float var15 = ((float)var11 + 15.99F) / 256.0F; + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + float var16 = var1.width * 1.4F; + GL11.glScalef(var16, var16, var16); + this.loadTexture("/terrain.png"); + Tessellator var17 = Tessellator.instance; + float var18 = 1.0F; + float var19 = 0.5F; + float var20 = 0.0F; + float var21 = var1.height / var1.width; + GL11.glRotatef(-this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + GL11.glTranslatef(0.0F, 0.0F, 0.4F + (float)((int)var21) * 0.02F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + var17.startDrawingQuads(); + + while(var21 > 0.0F) { + var17.addVertexWithUV((double)(var18 - var19), (double)(0.0F - var20), 0.0D, (double)var13, (double)var15); + var17.addVertexWithUV((double)(0.0F - var19), (double)(0.0F - var20), 0.0D, (double)var12, (double)var15); + var17.addVertexWithUV((double)(0.0F - var19), (double)(1.4F - var20), 0.0D, (double)var12, (double)var14); + var17.addVertexWithUV((double)(var18 - var19), (double)(1.4F - var20), 0.0D, (double)var13, (double)var14); + --var21; + --var20; + var18 *= 0.9F; + GL11.glTranslatef(0.0F, 0.0F, -0.04F); + } + + var17.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); + RenderEngine var10 = this.renderManager.renderEngine; + var10.bindTexture(var10.getTexture("%%/shadow.png")); + World var11 = this.getWorldFromRenderManager(); + GL11.glDepthMask(false); + float var12 = this.shadowSize; + double var13 = var1.lastTickPosX + (var1.posX - var1.lastTickPosX) * (double)var9; + double var15 = var1.lastTickPosY + (var1.posY - var1.lastTickPosY) * (double)var9; + double var17 = var1.lastTickPosZ + (var1.posZ - var1.lastTickPosZ) * (double)var9; + int var19 = MathHelper.floor_double(var13 - (double)var12); + int var20 = MathHelper.floor_double(var13 + (double)var12); + int var21 = MathHelper.floor_double(var15 - (double)var12); + int var22 = MathHelper.floor_double(var15); + int var23 = MathHelper.floor_double(var17 - (double)var12); + int var24 = MathHelper.floor_double(var17 + (double)var12); + double var25 = var2 - var13; + double var27 = var4 - var15; + double var29 = var6 - var17; + Tessellator var31 = Tessellator.instance; + var31.startDrawingQuads(); + + for(int var32 = var19; var32 <= var20; ++var32) { + for(int var33 = var21; var33 <= var22; ++var33) { + for(int var34 = var23; var34 <= var24; ++var34) { + int var35 = var11.getBlockId(var32, var33 - 1, var34); + if(var35 > 0 && var11.getBlockLightValue(var32, var33, var34) > 3) { + this.renderShadowOnBlock(Block.blocksList[var35], var2, var4, var6, var32, var33, var34, var8, var12, var25, var27, var29); + } + } + } + } + + var31.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().getBrightness(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.minX + var13; + double var24 = (double)var8 + var1.maxX + var13; + double var26 = (double)var9 + var1.minY + var15 + 1.0D / 64.0D; + double var28 = (double)var10 + var1.minZ + var17; + double var30 = (double)var10 + var1.maxZ + 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.setTranslationD(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.setTranslationD(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) { + 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.fire > 0) { + this.renderEntityOnFire(var1, var2, var4, var6, var9); + } + + } +} diff --git a/src/net/minecraft/src/RenderArrow.java b/src/net/minecraft/src/RenderArrow.java new file mode 100644 index 0000000..6a50043 --- /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 a(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.a((EntityArrow)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..2c17d6d --- /dev/null +++ b/src/net/minecraft/src/RenderBlocks.java @@ -0,0 +1,1401 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderBlocks { + private IBlockAccess blockAccess; + private int overrideBlockTexture = -1; + private boolean flipTexture = false; + private boolean renderAllFaces = false; + + public RenderBlocks(IBlockAccess var1) { + this.blockAccess = var1; + } + + public RenderBlocks() { + } + + public void renderBlockUsingTexture(Block var1, int var2, int var3, int var4, int var5) { + this.overrideBlockTexture = var5; + this.renderBlockByRenderType(var1, var2, var3, var4); + this.overrideBlockTexture = -1; + } + + public boolean renderBlockByRenderType(Block var1, int var2, int var3, int var4) { + int var5 = var1.getRenderType(); + var1.setBlockBoundsBasedOnState(this.blockAccess, var2, var3, var4); + return var5 == 0 ? this.renderStandardBlock(var1, var2, var3, var4) : (var5 == 4 ? this.renderBlockFluids(var1, var2, var3, var4) : (var5 == 1 ? this.renderBlockReed(var1, var2, var3, var4) : (var5 == 6 ? this.renderBlockCrops(var1, var2, var3, var4) : (var5 == 2 ? this.renderBlockTorch(var1, var2, var3, var4) : (var5 == 3 ? this.renderBlockFire(var1, var2, var3, var4) : (var5 == 5 ? this.renderBlockGears(var1, var2, var3, var4) : (var5 == 8 ? this.renderBlockLadder(var1, var2, var3, var4) : (var5 == 7 ? this.renderBlockDoor(var1, var2, var3, var4) : (var5 == 9 ? this.renderBlockMinecartTrack(var1, var2, var3, var4) : (var5 == 10 ? this.renderBlockStairs(var1, var2, var3, var4) : (var5 == 11 ? this.renderBlockFence(var1, var2, var3, var4) : false))))))))))); + } + + public boolean renderBlockTorch(Block var1, int var2, int var3, int var4) { + int var5 = this.blockAccess.getBlockMetadata(var2, var3, var4); + Tessellator var6 = Tessellator.instance; + float var7 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + if(Block.lightValue[var1.blockID] > 0) { + var7 = 1.0F; + } + + var6.setColorOpaque_F(var7, var7, var7); + double var8 = (double)0.4F; + double var10 = 0.5D - var8; + double var12 = (double)0.2F; + if(var5 == 1) { + this.renderTorchAtAngle(var1, (double)var2 - var10, (double)var3 + var12, (double)var4, -var8, 0.0D); + } else if(var5 == 2) { + this.renderTorchAtAngle(var1, (double)var2 + var10, (double)var3 + var12, (double)var4, var8, 0.0D); + } else if(var5 == 3) { + this.renderTorchAtAngle(var1, (double)var2, (double)var3 + var12, (double)var4 - var10, 0.0D, -var8); + } else if(var5 == 4) { + this.renderTorchAtAngle(var1, (double)var2, (double)var3 + var12, (double)var4 + var10, 0.0D, var8); + } else { + this.renderTorchAtAngle(var1, (double)var2, (double)var3, (double)var4, 0.0D, 0.0D); + } + + return true; + } + + public boolean renderBlockFire(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + int var6 = var1.getBlockTextureFromSide(0); + if(this.overrideBlockTexture >= 0) { + var6 = this.overrideBlockTexture; + } + + float var7 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + var5.setColorOpaque_F(var7, var7, var7); + int var8 = (var6 & 15) << 4; + int var9 = var6 & 240; + double var10 = (double)((float)var8 / 256.0F); + double var12 = (double)(((float)var8 + 15.99F) / 256.0F); + double var14 = (double)((float)var9 / 256.0F); + double var16 = (double)(((float)var9 + 15.99F) / 256.0F); + float var18 = 1.4F; + double var21; + double var23; + double var25; + double var27; + double var29; + double var31; + double var33; + if(!this.blockAccess.isBlockNormalCube(var2, var3 - 1, var4) && !Block.fire.canBlockCatchFire(this.blockAccess, var2, var3 - 1, var4)) { + float var37 = 0.2F; + float var20 = 1.0F / 16.0F; + if((var2 + var3 + var4 & 1) == 1) { + var10 = (double)((float)var8 / 256.0F); + var12 = (double)(((float)var8 + 15.99F) / 256.0F); + var14 = (double)((float)(var9 + 16) / 256.0F); + var16 = (double)(((float)var9 + 15.99F + 16.0F) / 256.0F); + } + + if((var2 / 2 + var3 / 2 + var4 / 2 & 1) == 1) { + var21 = var12; + var12 = var10; + var10 = var21; + } + + if(Block.fire.canBlockCatchFire(this.blockAccess, var2 - 1, var3, var4)) { + var5.addVertexWithUV((double)((float)var2 + var37), (double)((float)var3 + var18 + var20), (double)(var4 + 1), var12, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 1), var12, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV((double)((float)var2 + var37), (double)((float)var3 + var18 + var20), (double)(var4 + 0), var10, var14); + var5.addVertexWithUV((double)((float)var2 + var37), (double)((float)var3 + var18 + var20), (double)(var4 + 0), var10, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 1), var12, var16); + var5.addVertexWithUV((double)((float)var2 + var37), (double)((float)var3 + var18 + var20), (double)(var4 + 1), var12, var14); + } + + if(Block.fire.canBlockCatchFire(this.blockAccess, var2 + 1, var3, var4)) { + var5.addVertexWithUV((double)((float)(var2 + 1) - var37), (double)((float)var3 + var18 + var20), (double)(var4 + 0), var10, var14); + var5.addVertexWithUV((double)(var2 + 1 - 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV((double)(var2 + 1 - 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 1), var12, var16); + var5.addVertexWithUV((double)((float)(var2 + 1) - var37), (double)((float)var3 + var18 + var20), (double)(var4 + 1), var12, var14); + var5.addVertexWithUV((double)((float)(var2 + 1) - var37), (double)((float)var3 + var18 + var20), (double)(var4 + 1), var12, var14); + var5.addVertexWithUV((double)(var2 + 1 - 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 1), var12, var16); + var5.addVertexWithUV((double)(var2 + 1 - 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV((double)((float)(var2 + 1) - var37), (double)((float)var3 + var18 + var20), (double)(var4 + 0), var10, var14); + } + + if(Block.fire.canBlockCatchFire(this.blockAccess, var2, var3, var4 - 1)) { + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18 + var20), (double)((float)var4 + var37), var12, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var12, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18 + var20), (double)((float)var4 + var37), var10, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18 + var20), (double)((float)var4 + var37), var10, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 0), var12, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18 + var20), (double)((float)var4 + var37), var12, var14); + } + + if(Block.fire.canBlockCatchFire(this.blockAccess, var2, var3, var4 + 1)) { + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18 + var20), (double)((float)(var4 + 1) - var37), var10, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 0) + var20), (double)(var4 + 1 - 0), var10, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 1 - 0), var12, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18 + var20), (double)((float)(var4 + 1) - var37), var12, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18 + var20), (double)((float)(var4 + 1) - var37), var12, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)(var3 + 0) + var20), (double)(var4 + 1 - 0), var12, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)(var3 + 0) + var20), (double)(var4 + 1 - 0), var10, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18 + var20), (double)((float)(var4 + 1) - var37), var10, var14); + } + + if(Block.fire.canBlockCatchFire(this.blockAccess, var2, var3 + 1, var4)) { + var21 = (double)var2 + 0.5D + 0.5D; + var23 = (double)var2 + 0.5D - 0.5D; + var25 = (double)var4 + 0.5D + 0.5D; + var27 = (double)var4 + 0.5D - 0.5D; + var29 = (double)var2 + 0.5D - 0.5D; + var31 = (double)var2 + 0.5D + 0.5D; + var33 = (double)var4 + 0.5D - 0.5D; + double var35 = (double)var4 + 0.5D + 0.5D; + var10 = (double)((float)var8 / 256.0F); + var12 = (double)(((float)var8 + 15.99F) / 256.0F); + var14 = (double)((float)var9 / 256.0F); + var16 = (double)(((float)var9 + 15.99F) / 256.0F); + ++var3; + var18 = -0.2F; + if((var2 + var3 + var4 & 1) == 0) { + var5.addVertexWithUV(var29, (double)((float)var3 + var18), (double)(var4 + 0), var12, var14); + var5.addVertexWithUV(var21, (double)(var3 + 0), (double)(var4 + 0), var12, var16); + var5.addVertexWithUV(var21, (double)(var3 + 0), (double)(var4 + 1), var10, var16); + var5.addVertexWithUV(var29, (double)((float)var3 + var18), (double)(var4 + 1), var10, var14); + var10 = (double)((float)var8 / 256.0F); + var12 = (double)(((float)var8 + 15.99F) / 256.0F); + var14 = (double)((float)(var9 + 16) / 256.0F); + var16 = (double)(((float)var9 + 15.99F + 16.0F) / 256.0F); + var5.addVertexWithUV(var31, (double)((float)var3 + var18), (double)(var4 + 1), var12, var14); + var5.addVertexWithUV(var23, (double)(var3 + 0), (double)(var4 + 1), var12, var16); + var5.addVertexWithUV(var23, (double)(var3 + 0), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV(var31, (double)((float)var3 + var18), (double)(var4 + 0), var10, var14); + } else { + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18), var35, var12, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var27, var12, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var27, var10, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18), var35, var10, var14); + var10 = (double)((float)var8 / 256.0F); + var12 = (double)(((float)var8 + 15.99F) / 256.0F); + var14 = (double)((float)(var9 + 16) / 256.0F); + var16 = (double)(((float)var9 + 15.99F + 16.0F) / 256.0F); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18), var33, var12, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var25, var12, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var25, var10, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18), var33, var10, var14); + } + } + } else { + double var19 = (double)var2 + 0.5D + 0.2D; + var21 = (double)var2 + 0.5D - 0.2D; + var23 = (double)var4 + 0.5D + 0.2D; + var25 = (double)var4 + 0.5D - 0.2D; + var27 = (double)var2 + 0.5D - 0.3D; + var29 = (double)var2 + 0.5D + 0.3D; + var31 = (double)var4 + 0.5D - 0.3D; + var33 = (double)var4 + 0.5D + 0.3D; + var5.addVertexWithUV(var27, (double)((float)var3 + var18), (double)(var4 + 1), var12, var14); + var5.addVertexWithUV(var19, (double)(var3 + 0), (double)(var4 + 1), var12, var16); + var5.addVertexWithUV(var19, (double)(var3 + 0), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV(var27, (double)((float)var3 + var18), (double)(var4 + 0), var10, var14); + var5.addVertexWithUV(var29, (double)((float)var3 + var18), (double)(var4 + 0), var12, var14); + var5.addVertexWithUV(var21, (double)(var3 + 0), (double)(var4 + 0), var12, var16); + var5.addVertexWithUV(var21, (double)(var3 + 0), (double)(var4 + 1), var10, var16); + var5.addVertexWithUV(var29, (double)((float)var3 + var18), (double)(var4 + 1), var10, var14); + var10 = (double)((float)var8 / 256.0F); + var12 = (double)(((float)var8 + 15.99F) / 256.0F); + var14 = (double)((float)(var9 + 16) / 256.0F); + var16 = (double)(((float)var9 + 15.99F + 16.0F) / 256.0F); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18), var33, var12, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var25, var12, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var25, var10, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18), var33, var10, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18), var31, var12, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var23, var12, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var23, var10, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18), var31, var10, var14); + var19 = (double)var2 + 0.5D - 0.5D; + var21 = (double)var2 + 0.5D + 0.5D; + var23 = (double)var4 + 0.5D - 0.5D; + var25 = (double)var4 + 0.5D + 0.5D; + var27 = (double)var2 + 0.5D - 0.4D; + var29 = (double)var2 + 0.5D + 0.4D; + var31 = (double)var4 + 0.5D - 0.4D; + var33 = (double)var4 + 0.5D + 0.4D; + var5.addVertexWithUV(var27, (double)((float)var3 + var18), (double)(var4 + 0), var10, var14); + var5.addVertexWithUV(var19, (double)(var3 + 0), (double)(var4 + 0), var10, var16); + var5.addVertexWithUV(var19, (double)(var3 + 0), (double)(var4 + 1), var12, var16); + var5.addVertexWithUV(var27, (double)((float)var3 + var18), (double)(var4 + 1), var12, var14); + var5.addVertexWithUV(var29, (double)((float)var3 + var18), (double)(var4 + 1), var10, var14); + var5.addVertexWithUV(var21, (double)(var3 + 0), (double)(var4 + 1), var10, var16); + var5.addVertexWithUV(var21, (double)(var3 + 0), (double)(var4 + 0), var12, var16); + var5.addVertexWithUV(var29, (double)((float)var3 + var18), (double)(var4 + 0), var12, var14); + var10 = (double)((float)var8 / 256.0F); + var12 = (double)(((float)var8 + 15.99F) / 256.0F); + var14 = (double)((float)var9 / 256.0F); + var16 = (double)(((float)var9 + 15.99F) / 256.0F); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18), var33, var10, var14); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var25, var10, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var25, var12, var16); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18), var33, var12, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var18), var31, var10, var14); + var5.addVertexWithUV((double)(var2 + 1), (double)(var3 + 0), var23, var10, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)(var3 + 0), var23, var12, var16); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var18), var31, var12, var14); + } + + return true; + } + + public boolean renderBlockGears(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + int var6 = var1.getBlockTextureFromSide(0); + if(this.overrideBlockTexture >= 0) { + var6 = this.overrideBlockTexture; + } + + float var7 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + var5.setColorOpaque_F(var7, var7, var7); + int var8 = ((var6 & 15) << 4) + 16; + int var9 = (var6 & 15) << 4; + int var10 = var6 & 240; + if((var2 + var3 + var4 & 1) == 1) { + var8 = (var6 & 15) << 4; + var9 = ((var6 & 15) << 4) + 16; + } + + double var11 = (double)((float)var8 / 256.0F); + double var13 = (double)(((float)var8 + 15.99F) / 256.0F); + double var15 = (double)((float)var10 / 256.0F); + double var17 = (double)(((float)var10 + 15.99F) / 256.0F); + double var19 = (double)((float)var9 / 256.0F); + double var21 = (double)(((float)var9 + 15.99F) / 256.0F); + double var23 = (double)((float)var10 / 256.0F); + double var25 = (double)(((float)var10 + 15.99F) / 256.0F); + float var27 = 2.0F / 16.0F; + float var28 = 0.05F; + if(this.blockAccess.isBlockNormalCube(var2 - 1, var3, var4)) { + var5.addVertexWithUV((double)((float)var2 + var28), (double)((float)(var3 + 1) + var27), (double)((float)(var4 + 1) + var27), var11, var15); + var5.addVertexWithUV((double)((float)var2 + var28), (double)((float)(var3 + 0) - var27), (double)((float)(var4 + 1) + var27), var11, var17); + var5.addVertexWithUV((double)((float)var2 + var28), (double)((float)(var3 + 0) - var27), (double)((float)(var4 + 0) - var27), var13, var17); + var5.addVertexWithUV((double)((float)var2 + var28), (double)((float)(var3 + 1) + var27), (double)((float)(var4 + 0) - var27), var13, var15); + } + + if(this.blockAccess.isBlockNormalCube(var2 + 1, var3, var4)) { + var5.addVertexWithUV((double)((float)(var2 + 1) - var28), (double)((float)(var3 + 0) - var27), (double)((float)(var4 + 1) + var27), var13, var17); + var5.addVertexWithUV((double)((float)(var2 + 1) - var28), (double)((float)(var3 + 1) + var27), (double)((float)(var4 + 1) + var27), var13, var15); + var5.addVertexWithUV((double)((float)(var2 + 1) - var28), (double)((float)(var3 + 1) + var27), (double)((float)(var4 + 0) - var27), var11, var15); + var5.addVertexWithUV((double)((float)(var2 + 1) - var28), (double)((float)(var3 + 0) - var27), (double)((float)(var4 + 0) - var27), var11, var17); + } + + if(this.blockAccess.isBlockNormalCube(var2, var3, var4 - 1)) { + var5.addVertexWithUV((double)((float)(var2 + 1) + var27), (double)((float)(var3 + 0) - var27), (double)((float)var4 + var28), var21, var25); + var5.addVertexWithUV((double)((float)(var2 + 1) + var27), (double)((float)(var3 + 1) + var27), (double)((float)var4 + var28), var21, var23); + var5.addVertexWithUV((double)((float)(var2 + 0) - var27), (double)((float)(var3 + 1) + var27), (double)((float)var4 + var28), var19, var23); + var5.addVertexWithUV((double)((float)(var2 + 0) - var27), (double)((float)(var3 + 0) - var27), (double)((float)var4 + var28), var19, var25); + } + + if(this.blockAccess.isBlockNormalCube(var2, var3, var4 + 1)) { + var5.addVertexWithUV((double)((float)(var2 + 1) + var27), (double)((float)(var3 + 1) + var27), (double)((float)(var4 + 1) - var28), var19, var23); + var5.addVertexWithUV((double)((float)(var2 + 1) + var27), (double)((float)(var3 + 0) - var27), (double)((float)(var4 + 1) - var28), var19, var25); + var5.addVertexWithUV((double)((float)(var2 + 0) - var27), (double)((float)(var3 + 0) - var27), (double)((float)(var4 + 1) - var28), var21, var25); + var5.addVertexWithUV((double)((float)(var2 + 0) - var27), (double)((float)(var3 + 1) + var27), (double)((float)(var4 + 1) - var28), var21, var23); + } + + return true; + } + + public boolean renderBlockMinecartTrack(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + int var6 = this.blockAccess.getBlockMetadata(var2, var3, var4); + int var7 = var1.getBlockTextureFromSideAndMetadata(0, var6); + if(this.overrideBlockTexture >= 0) { + var7 = this.overrideBlockTexture; + } + + float var8 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + var5.setColorOpaque_F(var8, var8, var8); + int var9 = (var7 & 15) << 4; + int var10 = var7 & 240; + double var11 = (double)((float)var9 / 256.0F); + double var13 = (double)(((float)var9 + 15.99F) / 256.0F); + double var15 = (double)((float)var10 / 256.0F); + double var17 = (double)(((float)var10 + 15.99F) / 256.0F); + float var19 = 1.0F / 16.0F; + float var20 = (float)(var2 + 1); + float var21 = (float)(var2 + 1); + float var22 = (float)(var2 + 0); + float var23 = (float)(var2 + 0); + float var24 = (float)(var4 + 0); + float var25 = (float)(var4 + 1); + float var26 = (float)(var4 + 1); + float var27 = (float)(var4 + 0); + float var28 = (float)var3 + var19; + float var29 = (float)var3 + var19; + float var30 = (float)var3 + var19; + float var31 = (float)var3 + var19; + if(var6 != 1 && var6 != 2 && var6 != 3 && var6 != 7) { + if(var6 == 8) { + var21 = (float)(var2 + 0); + var20 = var21; + var23 = (float)(var2 + 1); + var22 = var23; + var27 = (float)(var4 + 1); + var24 = var27; + var26 = (float)(var4 + 0); + var25 = var26; + } else if(var6 == 9) { + var23 = (float)(var2 + 0); + var20 = var23; + var22 = (float)(var2 + 1); + var21 = var22; + var25 = (float)(var4 + 0); + var24 = var25; + var27 = (float)(var4 + 1); + var26 = var27; + } + } else { + var23 = (float)(var2 + 1); + var20 = var23; + var22 = (float)(var2 + 0); + var21 = var22; + var25 = (float)(var4 + 1); + var24 = var25; + var27 = (float)(var4 + 0); + var26 = var27; + } + + if(var6 != 2 && var6 != 4) { + if(var6 == 3 || var6 == 5) { + ++var29; + ++var30; + } + } else { + ++var28; + ++var31; + } + + var5.addVertexWithUV((double)var20, (double)var28, (double)var24, var13, var15); + var5.addVertexWithUV((double)var21, (double)var29, (double)var25, var13, var17); + var5.addVertexWithUV((double)var22, (double)var30, (double)var26, var11, var17); + var5.addVertexWithUV((double)var23, (double)var31, (double)var27, var11, var15); + var5.addVertexWithUV((double)var23, (double)var31, (double)var27, var11, var15); + var5.addVertexWithUV((double)var22, (double)var30, (double)var26, var11, var17); + var5.addVertexWithUV((double)var21, (double)var29, (double)var25, var13, var17); + var5.addVertexWithUV((double)var20, (double)var28, (double)var24, var13, var15); + return true; + } + + public boolean renderBlockLadder(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + int var6 = var1.getBlockTextureFromSide(0); + if(this.overrideBlockTexture >= 0) { + var6 = this.overrideBlockTexture; + } + + float var7 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + var5.setColorOpaque_F(var7, var7, var7); + int var8 = (var6 & 15) << 4; + int var9 = var6 & 240; + double var10 = (double)((float)var8 / 256.0F); + double var12 = (double)(((float)var8 + 15.99F) / 256.0F); + double var14 = (double)((float)var9 / 256.0F); + double var16 = (double)(((float)var9 + 15.99F) / 256.0F); + int var18 = this.blockAccess.getBlockMetadata(var2, var3, var4); + float var19 = 0.0F; + float var20 = 0.05F; + if(var18 == 5) { + var5.addVertexWithUV((double)((float)var2 + var20), (double)((float)(var3 + 1) + var19), (double)((float)(var4 + 1) + var19), var10, var14); + var5.addVertexWithUV((double)((float)var2 + var20), (double)((float)(var3 + 0) - var19), (double)((float)(var4 + 1) + var19), var10, var16); + var5.addVertexWithUV((double)((float)var2 + var20), (double)((float)(var3 + 0) - var19), (double)((float)(var4 + 0) - var19), var12, var16); + var5.addVertexWithUV((double)((float)var2 + var20), (double)((float)(var3 + 1) + var19), (double)((float)(var4 + 0) - var19), var12, var14); + } + + if(var18 == 4) { + var5.addVertexWithUV((double)((float)(var2 + 1) - var20), (double)((float)(var3 + 0) - var19), (double)((float)(var4 + 1) + var19), var12, var16); + var5.addVertexWithUV((double)((float)(var2 + 1) - var20), (double)((float)(var3 + 1) + var19), (double)((float)(var4 + 1) + var19), var12, var14); + var5.addVertexWithUV((double)((float)(var2 + 1) - var20), (double)((float)(var3 + 1) + var19), (double)((float)(var4 + 0) - var19), var10, var14); + var5.addVertexWithUV((double)((float)(var2 + 1) - var20), (double)((float)(var3 + 0) - var19), (double)((float)(var4 + 0) - var19), var10, var16); + } + + if(var18 == 3) { + var5.addVertexWithUV((double)((float)(var2 + 1) + var19), (double)((float)(var3 + 0) - var19), (double)((float)var4 + var20), var12, var16); + var5.addVertexWithUV((double)((float)(var2 + 1) + var19), (double)((float)(var3 + 1) + var19), (double)((float)var4 + var20), var12, var14); + var5.addVertexWithUV((double)((float)(var2 + 0) - var19), (double)((float)(var3 + 1) + var19), (double)((float)var4 + var20), var10, var14); + var5.addVertexWithUV((double)((float)(var2 + 0) - var19), (double)((float)(var3 + 0) - var19), (double)((float)var4 + var20), var10, var16); + } + + if(var18 == 2) { + var5.addVertexWithUV((double)((float)(var2 + 1) + var19), (double)((float)(var3 + 1) + var19), (double)((float)(var4 + 1) - var20), var10, var14); + var5.addVertexWithUV((double)((float)(var2 + 1) + var19), (double)((float)(var3 + 0) - var19), (double)((float)(var4 + 1) - var20), var10, var16); + var5.addVertexWithUV((double)((float)(var2 + 0) - var19), (double)((float)(var3 + 0) - var19), (double)((float)(var4 + 1) - var20), var12, var16); + var5.addVertexWithUV((double)((float)(var2 + 0) - var19), (double)((float)(var3 + 1) + var19), (double)((float)(var4 + 1) - var20), var12, var14); + } + + return true; + } + + public boolean renderBlockReed(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + float var6 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + var5.setColorOpaque_F(var6, var6, var6); + this.renderCrossedSquares(var1, this.blockAccess.getBlockMetadata(var2, var3, var4), (double)var2, (double)var3, (double)var4); + return true; + } + + public boolean renderBlockCrops(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + float var6 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + var5.setColorOpaque_F(var6, var6, var6); + 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) { + Tessellator var12 = Tessellator.instance; + int var13 = var1.getBlockTextureFromSide(0); + if(this.overrideBlockTexture >= 0) { + var13 = this.overrideBlockTexture; + } + + int var14 = (var13 & 15) << 4; + int var15 = var13 & 240; + float var16 = (float)var14 / 256.0F; + float var17 = ((float)var14 + 15.99F) / 256.0F; + float var18 = (float)var15 / 256.0F; + float var19 = ((float)var15 + 15.99F) / 256.0F; + double var20 = (double)var16 + 1.75D / 64.0D; + double var22 = (double)var18 + 6.0D / 256.0D; + double var24 = (double)var16 + 9.0D / 256.0D; + double var26 = (double)var18 + 1.0D / 32.0D; + var2 += 0.5D; + var6 += 0.5D; + double var28 = var2 - 0.5D; + double var30 = var2 + 0.5D; + double var32 = var6 - 0.5D; + double var34 = var6 + 0.5D; + double var36 = 1.0D / 16.0D; + double var38 = 0.625D; + var12.addVertexWithUV(var2 + var8 * (1.0D - var38) - var36, var4 + var38, var6 + var10 * (1.0D - var38) - var36, var20, var22); + var12.addVertexWithUV(var2 + var8 * (1.0D - var38) - var36, var4 + var38, var6 + var10 * (1.0D - var38) + var36, var20, var26); + var12.addVertexWithUV(var2 + var8 * (1.0D - var38) + var36, var4 + var38, var6 + var10 * (1.0D - var38) + var36, var24, var26); + var12.addVertexWithUV(var2 + var8 * (1.0D - var38) + var36, var4 + var38, var6 + var10 * (1.0D - var38) - var36, var24, var22); + var12.addVertexWithUV(var2 - var36, var4 + 1.0D, var32, (double)var16, (double)var18); + var12.addVertexWithUV(var2 - var36 + var8, var4 + 0.0D, var32 + var10, (double)var16, (double)var19); + var12.addVertexWithUV(var2 - var36 + var8, var4 + 0.0D, var34 + var10, (double)var17, (double)var19); + var12.addVertexWithUV(var2 - var36, var4 + 1.0D, var34, (double)var17, (double)var18); + var12.addVertexWithUV(var2 + var36, var4 + 1.0D, var34, (double)var16, (double)var18); + var12.addVertexWithUV(var2 + var8 + var36, var4 + 0.0D, var34 + var10, (double)var16, (double)var19); + var12.addVertexWithUV(var2 + var8 + var36, var4 + 0.0D, var32 + var10, (double)var17, (double)var19); + var12.addVertexWithUV(var2 + var36, var4 + 1.0D, var32, (double)var17, (double)var18); + var12.addVertexWithUV(var28, var4 + 1.0D, var6 + var36, (double)var16, (double)var18); + var12.addVertexWithUV(var28 + var8, var4 + 0.0D, var6 + var36 + var10, (double)var16, (double)var19); + var12.addVertexWithUV(var30 + var8, var4 + 0.0D, var6 + var36 + var10, (double)var17, (double)var19); + var12.addVertexWithUV(var30, var4 + 1.0D, var6 + var36, (double)var17, (double)var18); + var12.addVertexWithUV(var30, var4 + 1.0D, var6 - var36, (double)var16, (double)var18); + var12.addVertexWithUV(var30 + var8, var4 + 0.0D, var6 - var36 + var10, (double)var16, (double)var19); + var12.addVertexWithUV(var28 + var8, var4 + 0.0D, var6 - var36 + var10, (double)var17, (double)var19); + var12.addVertexWithUV(var28, var4 + 1.0D, var6 - var36, (double)var17, (double)var18); + } + + public void renderCrossedSquares(Block var1, int var2, double var3, double var5, double var7) { + Tessellator var9 = Tessellator.instance; + int var10 = var1.getBlockTextureFromSideAndMetadata(0, var2); + if(this.overrideBlockTexture >= 0) { + var10 = this.overrideBlockTexture; + } + + int var11 = (var10 & 15) << 4; + int var12 = var10 & 240; + double var13 = (double)((float)var11 / 256.0F); + double var15 = (double)(((float)var11 + 15.99F) / 256.0F); + double var17 = (double)((float)var12 / 256.0F); + double var19 = (double)(((float)var12 + 15.99F) / 256.0F); + double var21 = var3 + 0.5D - (double)0.45F; + double var23 = var3 + 0.5D + (double)0.45F; + double var25 = var7 + 0.5D - (double)0.45F; + double var27 = var7 + 0.5D + (double)0.45F; + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var13, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var13, var19); + var9.addVertexWithUV(var23, var5 + 0.0D, var27, var15, var19); + var9.addVertexWithUV(var23, var5 + 1.0D, var27, var15, var17); + var9.addVertexWithUV(var23, var5 + 1.0D, var27, var13, var17); + var9.addVertexWithUV(var23, var5 + 0.0D, var27, var13, var19); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var15, var19); + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var15, var17); + var9.addVertexWithUV(var21, var5 + 1.0D, var27, var13, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var27, var13, var19); + var9.addVertexWithUV(var23, var5 + 0.0D, var25, var15, var19); + var9.addVertexWithUV(var23, var5 + 1.0D, var25, var15, var17); + var9.addVertexWithUV(var23, var5 + 1.0D, var25, var13, var17); + var9.addVertexWithUV(var23, var5 + 0.0D, var25, var13, var19); + var9.addVertexWithUV(var21, var5 + 0.0D, var27, var15, var19); + var9.addVertexWithUV(var21, var5 + 1.0D, var27, var15, var17); + } + + public void renderBlockCropsImpl(Block var1, int var2, double var3, double var5, double var7) { + Tessellator var9 = Tessellator.instance; + int var10 = var1.getBlockTextureFromSideAndMetadata(0, var2); + if(this.overrideBlockTexture >= 0) { + var10 = this.overrideBlockTexture; + } + + int var11 = (var10 & 15) << 4; + int var12 = var10 & 240; + double var13 = (double)((float)var11 / 256.0F); + double var15 = (double)(((float)var11 + 15.99F) / 256.0F); + double var17 = (double)((float)var12 / 256.0F); + double var19 = (double)(((float)var12 + 15.99F) / 256.0F); + double var21 = var3 + 0.5D - 0.25D; + double var23 = var3 + 0.5D + 0.25D; + double var25 = var7 + 0.5D - 0.5D; + double var27 = var7 + 0.5D + 0.5D; + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var13, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var13, var19); + var9.addVertexWithUV(var21, var5 + 0.0D, var27, var15, var19); + var9.addVertexWithUV(var21, var5 + 1.0D, var27, var15, var17); + var9.addVertexWithUV(var21, var5 + 1.0D, var27, var13, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var27, var13, var19); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var15, var19); + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var15, var17); + var9.addVertexWithUV(var23, var5 + 1.0D, var27, var13, var17); + var9.addVertexWithUV(var23, var5 + 0.0D, var27, var13, var19); + var9.addVertexWithUV(var23, var5 + 0.0D, var25, var15, var19); + var9.addVertexWithUV(var23, var5 + 1.0D, var25, var15, var17); + var9.addVertexWithUV(var23, var5 + 1.0D, var25, var13, var17); + var9.addVertexWithUV(var23, var5 + 0.0D, var25, var13, var19); + var9.addVertexWithUV(var23, var5 + 0.0D, var27, var15, var19); + var9.addVertexWithUV(var23, var5 + 1.0D, var27, var15, var17); + var21 = var3 + 0.5D - 0.5D; + var23 = var3 + 0.5D + 0.5D; + var25 = var7 + 0.5D - 0.25D; + var27 = var7 + 0.5D + 0.25D; + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var13, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var13, var19); + var9.addVertexWithUV(var23, var5 + 0.0D, var25, var15, var19); + var9.addVertexWithUV(var23, var5 + 1.0D, var25, var15, var17); + var9.addVertexWithUV(var23, var5 + 1.0D, var25, var13, var17); + var9.addVertexWithUV(var23, var5 + 0.0D, var25, var13, var19); + var9.addVertexWithUV(var21, var5 + 0.0D, var25, var15, var19); + var9.addVertexWithUV(var21, var5 + 1.0D, var25, var15, var17); + var9.addVertexWithUV(var23, var5 + 1.0D, var27, var13, var17); + var9.addVertexWithUV(var23, var5 + 0.0D, var27, var13, var19); + var9.addVertexWithUV(var21, var5 + 0.0D, var27, var15, var19); + var9.addVertexWithUV(var21, var5 + 1.0D, var27, var15, var17); + var9.addVertexWithUV(var21, var5 + 1.0D, var27, var13, var17); + var9.addVertexWithUV(var21, var5 + 0.0D, var27, var13, var19); + var9.addVertexWithUV(var23, var5 + 0.0D, var27, var15, var19); + var9.addVertexWithUV(var23, var5 + 1.0D, var27, var15, var17); + } + + public boolean renderBlockFluids(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + boolean var6 = var1.shouldSideBeRendered(this.blockAccess, var2, var3 + 1, var4, 1); + boolean var7 = var1.shouldSideBeRendered(this.blockAccess, var2, var3 - 1, var4, 0); + boolean[] var8 = 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(!var6 && !var7 && !var8[0] && !var8[1] && !var8[2] && !var8[3]) { + return false; + } else { + boolean var9 = false; + float var10 = 0.5F; + float var11 = 1.0F; + float var12 = 0.8F; + float var13 = 0.6F; + double var14 = 0.0D; + double var16 = 1.0D; + Material var18 = var1.blockMaterial; + int var19 = this.blockAccess.getBlockMetadata(var2, var3, var4); + float var20 = this.getFluidHeight(var2, var3, var4, var18); + float var21 = this.getFluidHeight(var2, var3, var4 + 1, var18); + float var22 = this.getFluidHeight(var2 + 1, var3, var4 + 1, var18); + float var23 = this.getFluidHeight(var2 + 1, var3, var4, var18); + int var24; + int var27; + float var32; + float var33; + float var34; + if(this.renderAllFaces || var6) { + var9 = true; + var24 = var1.getBlockTextureFromSideAndMetadata(1, var19); + float var25 = (float)BlockFluid.getFlowDirection(this.blockAccess, var2, var3, var4, var18); + if(var25 > -999.0F) { + var24 = var1.getBlockTextureFromSideAndMetadata(2, var19); + } + + int var26 = (var24 & 15) << 4; + var27 = var24 & 240; + double var28 = ((double)var26 + 8.0D) / 256.0D; + double var30 = ((double)var27 + 8.0D) / 256.0D; + if(var25 < -999.0F) { + var25 = 0.0F; + } else { + var28 = (double)((float)(var26 + 16) / 256.0F); + var30 = (double)((float)(var27 + 16) / 256.0F); + } + + var32 = MathHelper.sin(var25) * 8.0F / 256.0F; + var33 = MathHelper.cos(var25) * 8.0F / 256.0F; + var34 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + var5.setColorOpaque_F(var11 * var34, var11 * var34, var11 * var34); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var20), (double)(var4 + 0), var28 - (double)var33 - (double)var32, var30 - (double)var33 + (double)var32); + var5.addVertexWithUV((double)(var2 + 0), (double)((float)var3 + var21), (double)(var4 + 1), var28 - (double)var33 + (double)var32, var30 + (double)var33 + (double)var32); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var22), (double)(var4 + 1), var28 + (double)var33 + (double)var32, var30 + (double)var33 - (double)var32); + var5.addVertexWithUV((double)(var2 + 1), (double)((float)var3 + var23), (double)(var4 + 0), var28 + (double)var33 - (double)var32, var30 - (double)var33 - (double)var32); + } + + if(this.renderAllFaces || var7) { + float var48 = var1.getBlockBrightness(this.blockAccess, var2, var3 - 1, var4); + var5.setColorOpaque_F(var10 * var48, var10 * var48, var10 * var48); + this.renderBottomFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureFromSide(0)); + var9 = true; + } + + for(var24 = 0; var24 < 4; ++var24) { + int var49 = var2; + var27 = var4; + if(var24 == 0) { + var27 = var4 - 1; + } + + if(var24 == 1) { + ++var27; + } + + if(var24 == 2) { + var49 = var2 - 1; + } + + if(var24 == 3) { + ++var49; + } + + int var50 = var1.getBlockTextureFromSideAndMetadata(var24 + 2, var19); + int var29 = (var50 & 15) << 4; + int var51 = var50 & 240; + if(this.renderAllFaces || var8[var24]) { + float var31; + float var35; + float var36; + if(var24 == 0) { + var31 = var20; + var32 = var23; + var33 = (float)var2; + var35 = (float)(var2 + 1); + var34 = (float)var4; + var36 = (float)var4; + } else if(var24 == 1) { + var31 = var22; + var32 = var21; + var33 = (float)(var2 + 1); + var35 = (float)var2; + var34 = (float)(var4 + 1); + var36 = (float)(var4 + 1); + } else if(var24 == 2) { + var31 = var21; + var32 = var20; + var33 = (float)var2; + var35 = (float)var2; + var34 = (float)(var4 + 1); + var36 = (float)var4; + } else { + var31 = var23; + var32 = var22; + var33 = (float)(var2 + 1); + var35 = (float)(var2 + 1); + var34 = (float)var4; + var36 = (float)(var4 + 1); + } + + var9 = true; + double var37 = (double)((float)(var29 + 0) / 256.0F); + double var39 = ((double)(var29 + 16) - 0.01D) / 256.0D; + double var41 = (double)(((float)var51 + (1.0F - var31) * 16.0F) / 256.0F); + double var43 = (double)(((float)var51 + (1.0F - var32) * 16.0F) / 256.0F); + double var45 = ((double)(var51 + 16) - 0.01D) / 256.0D; + float var47 = var1.getBlockBrightness(this.blockAccess, var49, var3, var27); + if(var24 < 2) { + var47 *= var12; + } else { + var47 *= var13; + } + + var5.setColorOpaque_F(var11 * var47, var11 * var47, var11 * var47); + var5.addVertexWithUV((double)var33, (double)((float)var3 + var31), (double)var34, var37, var41); + var5.addVertexWithUV((double)var35, (double)((float)var3 + var32), (double)var36, var39, var43); + var5.addVertexWithUV((double)var35, (double)(var3 + 0), (double)var36, var39, var45); + var5.addVertexWithUV((double)var33, (double)(var3 + 0), (double)var34, var37, var45); + } + } + + var1.minY = var14; + var1.maxY = var16; + return var9; + } + } + + 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.getPercentAir(var12) * 10.0F; + var5 += 10; + } + + var6 += BlockFluid.getPercentAir(var12); + ++var5; + } + } + + return 1.0F - var6 / (float)var5; + } + + public void renderBlockFallingSand(Block var1, World var2, int var3, int var4, int var5) { + float var6 = 0.5F; + float var7 = 1.0F; + float var8 = 0.8F; + float var9 = 0.6F; + Tessellator var10 = Tessellator.instance; + var10.startDrawingQuads(); + float var11 = var1.getBlockBrightness(var2, var3, var4, var5); + float var12 = var1.getBlockBrightness(var2, var3, var4 - 1, var5); + if(var12 < var11) { + var12 = var11; + } + + var10.setColorOpaque_F(var6 * var12, var6 * var12, var6 * var12); + this.renderBottomFace(var1, -0.5D, -0.5D, -0.5D, var1.getBlockTextureFromSide(0)); + var12 = var1.getBlockBrightness(var2, var3, var4 + 1, var5); + if(var12 < var11) { + var12 = var11; + } + + var10.setColorOpaque_F(var7 * var12, var7 * var12, var7 * var12); + this.renderTopFace(var1, -0.5D, -0.5D, -0.5D, var1.getBlockTextureFromSide(1)); + var12 = var1.getBlockBrightness(var2, var3, var4, var5 - 1); + if(var12 < var11) { + var12 = var11; + } + + var10.setColorOpaque_F(var8 * var12, var8 * var12, var8 * var12); + this.renderEastFace(var1, -0.5D, -0.5D, -0.5D, var1.getBlockTextureFromSide(2)); + var12 = var1.getBlockBrightness(var2, var3, var4, var5 + 1); + if(var12 < var11) { + var12 = var11; + } + + var10.setColorOpaque_F(var8 * var12, var8 * var12, var8 * var12); + this.renderWestFace(var1, -0.5D, -0.5D, -0.5D, var1.getBlockTextureFromSide(3)); + var12 = var1.getBlockBrightness(var2, var3 - 1, var4, var5); + if(var12 < var11) { + var12 = var11; + } + + var10.setColorOpaque_F(var9 * var12, var9 * var12, var9 * var12); + this.renderNorthFace(var1, -0.5D, -0.5D, -0.5D, var1.getBlockTextureFromSide(4)); + var12 = var1.getBlockBrightness(var2, var3 + 1, var4, var5); + if(var12 < var11) { + var12 = var11; + } + + var10.setColorOpaque_F(var9 * var12, var9 * var12, var9 * var12); + this.renderSouthFace(var1, -0.5D, -0.5D, -0.5D, var1.getBlockTextureFromSide(5)); + var10.draw(); + } + + public boolean renderStandardBlock(Block var1, int var2, int var3, int var4) { + int var5 = var1.getRenderColor(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; + return this.renderStandardBlockWithColorMultiplier(var1, var2, var3, var4, var6, var7, var8); + } + + public boolean renderStandardBlockWithColorMultiplier(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 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + float var27; + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3 - 1, var4, 0)) { + var27 = var1.getBlockBrightness(this.blockAccess, var2, var3 - 1, var4); + if(Block.lightValue[var1.blockID] > 0) { + var27 = 1.0F; + } + + var8.setColorOpaque_F(var14 * var27, var18 * var27, var22 * var27); + this.renderBottomFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 0)); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3 + 1, var4, 1)) { + var27 = var1.getBlockBrightness(this.blockAccess, var2, var3 + 1, var4); + if(var1.maxY != 1.0D && !var1.blockMaterial.getIsLiquid()) { + var27 = var26; + } + + if(Block.lightValue[var1.blockID] > 0) { + var27 = 1.0F; + } + + var8.setColorOpaque_F(var15 * var27, var19 * var27, var23 * var27); + this.renderTopFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 1)); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 - 1, 2)) { + var27 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4 - 1); + if(var1.minZ > 0.0D) { + var27 = var26; + } + + if(Block.lightValue[var1.blockID] > 0) { + var27 = 1.0F; + } + + var8.setColorOpaque_F(var16 * var27, var20 * var27, var24 * var27); + this.renderEastFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 2)); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2, var3, var4 + 1, 3)) { + var27 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4 + 1); + if(var1.maxZ < 1.0D) { + var27 = var26; + } + + if(Block.lightValue[var1.blockID] > 0) { + var27 = 1.0F; + } + + var8.setColorOpaque_F(var16 * var27, var20 * var27, var24 * var27); + this.renderWestFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 3)); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2 - 1, var3, var4, 4)) { + var27 = var1.getBlockBrightness(this.blockAccess, var2 - 1, var3, var4); + if(var1.minX > 0.0D) { + var27 = var26; + } + + if(Block.lightValue[var1.blockID] > 0) { + var27 = 1.0F; + } + + var8.setColorOpaque_F(var17 * var27, var21 * var27, var25 * var27); + this.renderNorthFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 4)); + var9 = true; + } + + if(this.renderAllFaces || var1.shouldSideBeRendered(this.blockAccess, var2 + 1, var3, var4, 5)) { + var27 = var1.getBlockBrightness(this.blockAccess, var2 + 1, var3, var4); + if(var1.maxX < 1.0D) { + var27 = var26; + } + + if(Block.lightValue[var1.blockID] > 0) { + var27 = 1.0F; + } + + var8.setColorOpaque_F(var17 * var27, var21 * var27, var25 * var27); + this.renderSouthFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 5)); + var9 = true; + } + + return var9; + } + + public boolean renderBlockFence(Block var1, int var2, int var3, int var4) { + boolean var5 = false; + float var6 = 6.0F / 16.0F; + float var7 = 10.0F / 16.0F; + var1.setBlockBounds(var6, 0.0F, var6, var7, 1.0F, var7); + this.renderStandardBlock(var1, var2, var3, var4); + boolean var8 = false; + boolean var9 = false; + if(this.blockAccess.getBlockId(var2 - 1, var3, var4) == var1.blockID || this.blockAccess.getBlockId(var2 + 1, var3, var4) == var1.blockID) { + var8 = true; + } + + if(this.blockAccess.getBlockId(var2, var3, var4 - 1) == var1.blockID || this.blockAccess.getBlockId(var2, var3, var4 + 1) == var1.blockID) { + var9 = true; + } + + if(!var8 && !var9) { + var8 = true; + } + + var6 = 7.0F / 16.0F; + var7 = 9.0F / 16.0F; + float var10 = 12.0F / 16.0F; + float var11 = 15.0F / 16.0F; + if(var8) { + var1.setBlockBounds(0.0F, var10, var6, 1.0F, var11, var7); + this.renderStandardBlock(var1, var2, var3, var4); + } + + if(var9) { + var1.setBlockBounds(var6, var10, 0.0F, var7, var11, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + } + + var10 = 6.0F / 16.0F; + var11 = 9.0F / 16.0F; + if(var8) { + var1.setBlockBounds(0.0F, var10, var6, 1.0F, var11, var7); + this.renderStandardBlock(var1, var2, var3, var4); + } + + if(var9) { + var1.setBlockBounds(var6, var10, 0.0F, var7, var11, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + } + + var1.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + return var5; + } + + public boolean renderBlockStairs(Block var1, int var2, int var3, int var4) { + boolean var5 = false; + int var6 = this.blockAccess.getBlockMetadata(var2, var3, var4); + if(var6 == 0) { + var1.setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 0.5F, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + var1.setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + } else if(var6 == 1) { + var1.setBlockBounds(0.0F, 0.0F, 0.0F, 0.5F, 1.0F, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + var1.setBlockBounds(0.5F, 0.0F, 0.0F, 1.0F, 0.5F, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + } else if(var6 == 2) { + var1.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.5F, 0.5F); + this.renderStandardBlock(var1, var2, var3, var4); + var1.setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 1.0F, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + } else if(var6 == 3) { + var1.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.5F); + this.renderStandardBlock(var1, var2, var3, var4); + var1.setBlockBounds(0.0F, 0.0F, 0.5F, 1.0F, 0.5F, 1.0F); + this.renderStandardBlock(var1, var2, var3, var4); + } + + var1.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + return var5; + } + + public boolean renderBlockDoor(Block var1, int var2, int var3, int var4) { + Tessellator var5 = Tessellator.instance; + BlockDoor var6 = (BlockDoor)var1; + boolean var7 = false; + float var8 = 0.5F; + float var9 = 1.0F; + float var10 = 0.8F; + float var11 = 0.6F; + float var12 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4); + float var13 = var1.getBlockBrightness(this.blockAccess, var2, var3 - 1, var4); + if(var6.minY > 0.0D) { + var13 = var12; + } + + if(Block.lightValue[var1.blockID] > 0) { + var13 = 1.0F; + } + + var5.setColorOpaque_F(var8 * var13, var8 * var13, var8 * var13); + this.renderBottomFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 0)); + var7 = true; + var13 = var1.getBlockBrightness(this.blockAccess, var2, var3 + 1, var4); + if(var6.maxY < 1.0D) { + var13 = var12; + } + + if(Block.lightValue[var1.blockID] > 0) { + var13 = 1.0F; + } + + var5.setColorOpaque_F(var9 * var13, var9 * var13, var9 * var13); + this.renderTopFace(var1, (double)var2, (double)var3, (double)var4, var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 1)); + var7 = true; + var13 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4 - 1); + if(var6.minZ > 0.0D) { + var13 = var12; + } + + if(Block.lightValue[var1.blockID] > 0) { + var13 = 1.0F; + } + + var5.setColorOpaque_F(var10 * var13, var10 * var13, var10 * var13); + int var14 = var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 2); + if(var14 < 0) { + this.flipTexture = true; + var14 = -var14; + } + + this.renderEastFace(var1, (double)var2, (double)var3, (double)var4, var14); + var7 = true; + this.flipTexture = false; + var13 = var1.getBlockBrightness(this.blockAccess, var2, var3, var4 + 1); + if(var6.maxZ < 1.0D) { + var13 = var12; + } + + if(Block.lightValue[var1.blockID] > 0) { + var13 = 1.0F; + } + + var5.setColorOpaque_F(var10 * var13, var10 * var13, var10 * var13); + var14 = var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 3); + if(var14 < 0) { + this.flipTexture = true; + var14 = -var14; + } + + this.renderWestFace(var1, (double)var2, (double)var3, (double)var4, var14); + var7 = true; + this.flipTexture = false; + var13 = var1.getBlockBrightness(this.blockAccess, var2 - 1, var3, var4); + if(var6.minX > 0.0D) { + var13 = var12; + } + + if(Block.lightValue[var1.blockID] > 0) { + var13 = 1.0F; + } + + var5.setColorOpaque_F(var11 * var13, var11 * var13, var11 * var13); + var14 = var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 4); + if(var14 < 0) { + this.flipTexture = true; + var14 = -var14; + } + + this.renderNorthFace(var1, (double)var2, (double)var3, (double)var4, var14); + var7 = true; + this.flipTexture = false; + var13 = var1.getBlockBrightness(this.blockAccess, var2 + 1, var3, var4); + if(var6.maxX < 1.0D) { + var13 = var12; + } + + if(Block.lightValue[var1.blockID] > 0) { + var13 = 1.0F; + } + + var5.setColorOpaque_F(var11 * var13, var11 * var13, var11 * var13); + var14 = var1.getBlockTextureGeneric(this.blockAccess, var2, var3, var4, 5); + if(var14 < 0) { + this.flipTexture = true; + var14 = -var14; + } + + this.renderSouthFace(var1, (double)var2, (double)var3, (double)var4, var14); + var7 = true; + this.flipTexture = false; + return var7; + } + + public void renderBottomFace(Block var1, double var2, double var4, double var6, int var8) { + Tessellator var9 = Tessellator.instance; + if(this.overrideBlockTexture >= 0) { + var8 = this.overrideBlockTexture; + } + + int var10 = (var8 & 15) << 4; + int var11 = var8 & 240; + double var12 = ((double)var10 + var1.minX * 16.0D) / 256.0D; + double var14 = ((double)var10 + var1.maxX * 16.0D - 0.01D) / 256.0D; + double var16 = ((double)var11 + var1.minZ * 16.0D) / 256.0D; + double var18 = ((double)var11 + var1.maxZ * 16.0D - 0.01D) / 256.0D; + if(var1.minX < 0.0D || var1.maxX > 1.0D) { + var12 = (double)(((float)var10 + 0.0F) / 256.0F); + var14 = (double)(((float)var10 + 15.99F) / 256.0F); + } + + if(var1.minZ < 0.0D || var1.maxZ > 1.0D) { + var16 = (double)(((float)var11 + 0.0F) / 256.0F); + var18 = (double)(((float)var11 + 15.99F) / 256.0F); + } + + double var20 = var2 + var1.minX; + double var22 = var2 + var1.maxX; + double var24 = var4 + var1.minY; + double var26 = var6 + var1.minZ; + double var28 = var6 + var1.maxZ; + var9.addVertexWithUV(var20, var24, var28, var12, var18); + var9.addVertexWithUV(var20, var24, var26, var12, var16); + var9.addVertexWithUV(var22, var24, var26, var14, var16); + var9.addVertexWithUV(var22, var24, var28, var14, var18); + } + + public void renderTopFace(Block var1, double var2, double var4, double var6, int var8) { + Tessellator var9 = Tessellator.instance; + if(this.overrideBlockTexture >= 0) { + var8 = this.overrideBlockTexture; + } + + int var10 = (var8 & 15) << 4; + int var11 = var8 & 240; + double var12 = ((double)var10 + var1.minX * 16.0D) / 256.0D; + double var14 = ((double)var10 + var1.maxX * 16.0D - 0.01D) / 256.0D; + double var16 = ((double)var11 + var1.minZ * 16.0D) / 256.0D; + double var18 = ((double)var11 + var1.maxZ * 16.0D - 0.01D) / 256.0D; + if(var1.minX < 0.0D || var1.maxX > 1.0D) { + var12 = (double)(((float)var10 + 0.0F) / 256.0F); + var14 = (double)(((float)var10 + 15.99F) / 256.0F); + } + + if(var1.minZ < 0.0D || var1.maxZ > 1.0D) { + var16 = (double)(((float)var11 + 0.0F) / 256.0F); + var18 = (double)(((float)var11 + 15.99F) / 256.0F); + } + + double var20 = var2 + var1.minX; + double var22 = var2 + var1.maxX; + double var24 = var4 + var1.maxY; + double var26 = var6 + var1.minZ; + double var28 = var6 + var1.maxZ; + var9.addVertexWithUV(var22, var24, var28, var14, var18); + var9.addVertexWithUV(var22, var24, var26, var14, var16); + var9.addVertexWithUV(var20, var24, var26, var12, var16); + var9.addVertexWithUV(var20, var24, var28, var12, var18); + } + + public void renderEastFace(Block var1, double var2, double var4, double var6, int var8) { + Tessellator var9 = Tessellator.instance; + if(this.overrideBlockTexture >= 0) { + var8 = this.overrideBlockTexture; + } + + int var10 = (var8 & 15) << 4; + int var11 = var8 & 240; + double var12 = ((double)var10 + var1.minX * 16.0D) / 256.0D; + double var14 = ((double)var10 + var1.maxX * 16.0D - 0.01D) / 256.0D; + double var16 = ((double)var11 + var1.minY * 16.0D) / 256.0D; + double var18 = ((double)var11 + var1.maxY * 16.0D - 0.01D) / 256.0D; + double var20; + if(this.flipTexture) { + var20 = var12; + var12 = var14; + var14 = var20; + } + + if(var1.minX < 0.0D || var1.maxX > 1.0D) { + var12 = (double)(((float)var10 + 0.0F) / 256.0F); + var14 = (double)(((float)var10 + 15.99F) / 256.0F); + } + + if(var1.minY < 0.0D || var1.maxY > 1.0D) { + var16 = (double)(((float)var11 + 0.0F) / 256.0F); + var18 = (double)(((float)var11 + 15.99F) / 256.0F); + } + + var20 = var2 + var1.minX; + double var22 = var2 + var1.maxX; + double var24 = var4 + var1.minY; + double var26 = var4 + var1.maxY; + double var28 = var6 + var1.minZ; + var9.addVertexWithUV(var20, var26, var28, var14, var16); + var9.addVertexWithUV(var22, var26, var28, var12, var16); + var9.addVertexWithUV(var22, var24, var28, var12, var18); + var9.addVertexWithUV(var20, var24, var28, var14, var18); + } + + public void renderWestFace(Block var1, double var2, double var4, double var6, int var8) { + Tessellator var9 = Tessellator.instance; + if(this.overrideBlockTexture >= 0) { + var8 = this.overrideBlockTexture; + } + + int var10 = (var8 & 15) << 4; + int var11 = var8 & 240; + double var12 = ((double)var10 + var1.minX * 16.0D) / 256.0D; + double var14 = ((double)var10 + var1.maxX * 16.0D - 0.01D) / 256.0D; + double var16 = ((double)var11 + var1.minY * 16.0D) / 256.0D; + double var18 = ((double)var11 + var1.maxY * 16.0D - 0.01D) / 256.0D; + double var20; + if(this.flipTexture) { + var20 = var12; + var12 = var14; + var14 = var20; + } + + if(var1.minX < 0.0D || var1.maxX > 1.0D) { + var12 = (double)(((float)var10 + 0.0F) / 256.0F); + var14 = (double)(((float)var10 + 15.99F) / 256.0F); + } + + if(var1.minY < 0.0D || var1.maxY > 1.0D) { + var16 = (double)(((float)var11 + 0.0F) / 256.0F); + var18 = (double)(((float)var11 + 15.99F) / 256.0F); + } + + var20 = var2 + var1.minX; + double var22 = var2 + var1.maxX; + double var24 = var4 + var1.minY; + double var26 = var4 + var1.maxY; + double var28 = var6 + var1.maxZ; + var9.addVertexWithUV(var20, var26, var28, var12, var16); + var9.addVertexWithUV(var20, var24, var28, var12, var18); + var9.addVertexWithUV(var22, var24, var28, var14, var18); + var9.addVertexWithUV(var22, var26, var28, var14, var16); + } + + public void renderNorthFace(Block var1, double var2, double var4, double var6, int var8) { + Tessellator var9 = Tessellator.instance; + if(this.overrideBlockTexture >= 0) { + var8 = this.overrideBlockTexture; + } + + int var10 = (var8 & 15) << 4; + int var11 = var8 & 240; + double var12 = ((double)var10 + var1.minZ * 16.0D) / 256.0D; + double var14 = ((double)var10 + var1.maxZ * 16.0D - 0.01D) / 256.0D; + double var16 = ((double)var11 + var1.minY * 16.0D) / 256.0D; + double var18 = ((double)var11 + var1.maxY * 16.0D - 0.01D) / 256.0D; + double var20; + if(this.flipTexture) { + var20 = var12; + var12 = var14; + var14 = var20; + } + + if(var1.minZ < 0.0D || var1.maxZ > 1.0D) { + var12 = (double)(((float)var10 + 0.0F) / 256.0F); + var14 = (double)(((float)var10 + 15.99F) / 256.0F); + } + + if(var1.minY < 0.0D || var1.maxY > 1.0D) { + var16 = (double)(((float)var11 + 0.0F) / 256.0F); + var18 = (double)(((float)var11 + 15.99F) / 256.0F); + } + + var20 = var2 + var1.minX; + double var22 = var4 + var1.minY; + double var24 = var4 + var1.maxY; + double var26 = var6 + var1.minZ; + double var28 = var6 + var1.maxZ; + var9.addVertexWithUV(var20, var24, var28, var14, var16); + var9.addVertexWithUV(var20, var24, var26, var12, var16); + var9.addVertexWithUV(var20, var22, var26, var12, var18); + var9.addVertexWithUV(var20, var22, var28, var14, var18); + } + + public void renderSouthFace(Block var1, double var2, double var4, double var6, int var8) { + Tessellator var9 = Tessellator.instance; + if(this.overrideBlockTexture >= 0) { + var8 = this.overrideBlockTexture; + } + + int var10 = (var8 & 15) << 4; + int var11 = var8 & 240; + double var12 = ((double)var10 + var1.minZ * 16.0D) / 256.0D; + double var14 = ((double)var10 + var1.maxZ * 16.0D - 0.01D) / 256.0D; + double var16 = ((double)var11 + var1.minY * 16.0D) / 256.0D; + double var18 = ((double)var11 + var1.maxY * 16.0D - 0.01D) / 256.0D; + double var20; + if(this.flipTexture) { + var20 = var12; + var12 = var14; + var14 = var20; + } + + if(var1.minZ < 0.0D || var1.maxZ > 1.0D) { + var12 = (double)(((float)var10 + 0.0F) / 256.0F); + var14 = (double)(((float)var10 + 15.99F) / 256.0F); + } + + if(var1.minY < 0.0D || var1.maxY > 1.0D) { + var16 = (double)(((float)var11 + 0.0F) / 256.0F); + var18 = (double)(((float)var11 + 15.99F) / 256.0F); + } + + var20 = var2 + var1.maxX; + double var22 = var4 + var1.minY; + double var24 = var4 + var1.maxY; + double var26 = var6 + var1.minZ; + double var28 = var6 + var1.maxZ; + var9.addVertexWithUV(var20, var22, var28, var12, var18); + var9.addVertexWithUV(var20, var22, var26, var14, var18); + var9.addVertexWithUV(var20, var24, var26, var14, var16); + var9.addVertexWithUV(var20, var24, var28, var12, var16); + } + + public void renderBlockOnInventory(Block var1) { + byte var2 = -1; + Tessellator var3 = Tessellator.instance; + int var4 = var1.getRenderType(); + if(var4 == 0) { + GL11.glTranslatef(-0.5F, -0.5F, -0.5F); + var3.startDrawingQuads(); + var3.setNormal(0.0F, -1.0F, 0.0F); + this.renderBottomFace(var1, 0.0D, 0.0D, 0.0D, var1.getBlockTextureFromSide(0)); + var3.draw(); + var3.startDrawingQuads(); + var3.setNormal(0.0F, 1.0F, 0.0F); + this.renderTopFace(var1, 0.0D, 0.0D, 0.0D, var1.getBlockTextureFromSide(1)); + var3.draw(); + var3.startDrawingQuads(); + var3.setNormal(0.0F, 0.0F, -1.0F); + this.renderEastFace(var1, 0.0D, 0.0D, 0.0D, var1.getBlockTextureFromSide(2)); + var3.draw(); + var3.startDrawingQuads(); + var3.setNormal(0.0F, 0.0F, 1.0F); + this.renderWestFace(var1, 0.0D, 0.0D, 0.0D, var1.getBlockTextureFromSide(3)); + var3.draw(); + var3.startDrawingQuads(); + var3.setNormal(-1.0F, 0.0F, 0.0F); + this.renderNorthFace(var1, 0.0D, 0.0D, 0.0D, var1.getBlockTextureFromSide(4)); + var3.draw(); + var3.startDrawingQuads(); + var3.setNormal(1.0F, 0.0F, 0.0F); + this.renderSouthFace(var1, 0.0D, 0.0D, 0.0D, var1.getBlockTextureFromSide(5)); + var3.draw(); + GL11.glTranslatef(0.5F, 0.5F, 0.5F); + } else if(var4 == 1) { + var3.startDrawingQuads(); + var3.setNormal(0.0F, -1.0F, 0.0F); + this.renderCrossedSquares(var1, var2, -0.5D, -0.5D, -0.5D); + var3.draw(); + } else if(var4 == 6) { + var3.startDrawingQuads(); + var3.setNormal(0.0F, -1.0F, 0.0F); + this.renderBlockCropsImpl(var1, var2, -0.5D, -0.5D, -0.5D); + var3.draw(); + } else if(var4 == 2) { + var3.startDrawingQuads(); + var3.setNormal(0.0F, -1.0F, 0.0F); + this.renderTorchAtAngle(var1, -0.5D, -0.5D, -0.5D, 0.0D, 0.0D); + var3.draw(); + } else if(var4 != 3 && var4 == 5) { + } + + } +} diff --git a/src/net/minecraft/src/RenderCreeper.java b/src/net/minecraft/src/RenderCreeper.java new file mode 100644 index 0000000..1790664 --- /dev/null +++ b/src/net/minecraft/src/RenderCreeper.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderCreeper extends RenderLiving { + public RenderCreeper() { + super(new ModelCreeper(), 0.5F); + } + + protected void a(EntityCreeper var1, float var2) { + float var4 = var1.setCreeperFlashTime(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 a(EntityCreeper var1, float var2, float var3) { + float var5 = var1.setCreeperFlashTime(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 void preRenderCallback(EntityLiving var1, float var2) { + this.a((EntityCreeper)var1, var2); + } + + protected int getColorMultiplier(EntityLiving var1, float var2, float var3) { + return this.a((EntityCreeper)var1, var2, var3); + } +} diff --git a/src/net/minecraft/src/RenderEngine.java b/src/net/minecraft/src/RenderEngine.java new file mode 100644 index 0000000..eacb516 --- /dev/null +++ b/src/net/minecraft/src/RenderEngine.java @@ -0,0 +1,254 @@ +package net.minecraft.src; + +import java.awt.Graphics; +import java.awt.image.BufferedImage; +import java.awt.image.ImageObserver; +import java.io.IOException; +import java.nio.ByteBuffer; +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 javax.imageio.ImageIO; +import org.lwjgl.opengl.GL11; + +public class RenderEngine { + private HashMap textureMap = new HashMap(); + private HashMap textureContentsMap = new HashMap(); + private IntBuffer singleIntBuffer = GLAllocation.createIntBuffer(1); + private ByteBuffer imageData = GLAllocation.createDirectByteBuffer(262144); + private List textureList = new ArrayList(); + private Map urlToImageDataMap = new HashMap(); + private GameSettings options; + private boolean clampTexture = false; + + public RenderEngine(GameSettings var1) { + this.options = var1; + } + + public int getTexture(String var1) { + Integer var2 = (Integer)this.textureMap.get(var1); + if(var2 != null) { + return var2.intValue(); + } else { + try { + this.singleIntBuffer.clear(); + GLAllocation.generateDisplayLists(this.singleIntBuffer); + int var4 = this.singleIntBuffer.get(0); + if(var1.startsWith("##")) { + this.setupTexture(this.unwrapImageByColumns(ImageIO.read(RenderEngine.class.getResourceAsStream(var1.substring(2)))), var4); + } else if(var1.startsWith("%%")) { + this.clampTexture = true; + this.setupTexture(ImageIO.read(RenderEngine.class.getResourceAsStream(var1.substring(2))), var4); + this.clampTexture = false; + } else { + this.setupTexture(ImageIO.read(RenderEngine.class.getResourceAsStream(var1)), var4); + } + + this.textureMap.put(var1, Integer.valueOf(var4)); + return var4; + } catch (IOException var3) { + throw new RuntimeException("!!"); + } + } + } + + private BufferedImage unwrapImageByColumns(BufferedImage var1) { + int var2 = var1.getWidth() / 16; + BufferedImage var3 = new BufferedImage(16, var1.getHeight() * var2, 2); + Graphics var4 = var3.getGraphics(); + + for(int var5 = 0; var5 < var2; ++var5) { + var4.drawImage(var1, -var5 * 16, var5 * var1.getHeight(), (ImageObserver)null); + } + + var4.dispose(); + return var3; + } + + public int allocateAndSetupTexture(BufferedImage var1) { + this.singleIntBuffer.clear(); + GLAllocation.generateDisplayLists(this.singleIntBuffer); + int var2 = this.singleIntBuffer.get(0); + this.setupTexture(var1, var2); + this.textureContentsMap.put(Integer.valueOf(var2), var1); + return var2; + } + + public void setupTexture(BufferedImage var1, int var2) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, 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(this.clampTexture) { + 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 var3 = var1.getWidth(); + int var4 = var1.getHeight(); + int[] var5 = new int[var3 * var4]; + byte[] var6 = new byte[var3 * var4 * 4]; + var1.getRGB(0, 0, var3, var4, var5, 0, var3); + + for(int var7 = 0; var7 < var5.length; ++var7) { + int var8 = var5[var7] >> 24 & 255; + int var9 = var5[var7] >> 16 & 255; + int var10 = var5[var7] >> 8 & 255; + int var11 = var5[var7] & 255; + if(this.options != null && this.options.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; + } + + var6[var7 * 4 + 0] = (byte)var9; + var6[var7 * 4 + 1] = (byte)var10; + var6[var7 * 4 + 2] = (byte)var11; + var6[var7 * 4 + 3] = (byte)var8; + } + + this.imageData.clear(); + this.imageData.put(var6); + this.imageData.position(0).limit(var6.length); + GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, GL11.GL_RGBA, var3, var4, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)this.imageData); + } + + public void deleteTexture(int var1) { + this.textureContentsMap.remove(Integer.valueOf(var1)); + this.singleIntBuffer.clear(); + this.singleIntBuffer.put(var1); + this.singleIntBuffer.flip(); + GL11.glDeleteTextures(this.singleIntBuffer); + } + + 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 : this.getTexture(var2); + } + + public ThreadDownloadImageData obtainImageData(String var1, ImageBuffer 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 registerTextureFX(TextureFX var1) { + this.textureList.add(var1); + var1.onTick(); + } + + public void updateDynamicTextures() { + int var1; + TextureFX var2; + for(var1 = 0; var1 < this.textureList.size(); ++var1) { + var2 = (TextureFX)this.textureList.get(var1); + var2.anaglyphEnabled = this.options.anaglyph; + var2.onTick(); + this.imageData.clear(); + this.imageData.put(var2.imageData); + this.imageData.position(0).limit(var2.imageData.length); + + for(int var3 = 0; var3 < var2.tileSize; ++var3) { + for(int var4 = 0; var4 < var2.tileSize; ++var4) { + GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, 0, var2.iconIndex % 16 * 16 + var3 * 16, var2.iconIndex / 16 * 16 + var4 * 16, 16, 16, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)this.imageData); + } + } + } + + for(var1 = 0; var1 < this.textureList.size(); ++var1) { + var2 = (TextureFX)this.textureList.get(var1); + if(var2.textureId > 0) { + this.imageData.clear(); + this.imageData.put(var2.imageData); + this.imageData.position(0).limit(var2.imageData.length); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var2.textureId); + GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, 0, 0, 0, 16, 16, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)this.imageData); + } + } + + } + + public void refreshTextures() { + Iterator var1 = this.textureContentsMap.keySet().iterator(); + + BufferedImage var3; + while(var1.hasNext()) { + int var2 = ((Integer)var1.next()).intValue(); + var3 = (BufferedImage)this.textureContentsMap.get(Integer.valueOf(var2)); + this.setupTexture(var3, var2); + } + + ThreadDownloadImageData var6; + for(var1 = this.urlToImageDataMap.values().iterator(); var1.hasNext(); var6.textureSetupComplete = false) { + var6 = (ThreadDownloadImageData)var1.next(); + } + + var1 = this.textureMap.keySet().iterator(); + + while(var1.hasNext()) { + String var7 = (String)var1.next(); + + try { + if(var7.startsWith("##")) { + var3 = this.unwrapImageByColumns(ImageIO.read(RenderEngine.class.getResourceAsStream(var7.substring(2)))); + } else if(var7.startsWith("%%")) { + this.clampTexture = true; + var3 = ImageIO.read(RenderEngine.class.getResourceAsStream(var7.substring(2))); + this.clampTexture = false; + } else { + var3 = ImageIO.read(RenderEngine.class.getResourceAsStream(var7)); + } + + int var4 = ((Integer)this.textureMap.get(var7)).intValue(); + this.setupTexture(var3, var4); + } catch (IOException var5) { + var5.printStackTrace(); + } + } + + } + + public void bindTexture(int var1) { + if(var1 >= 0) { + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var1); + } + } +} 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..3f633d1 --- /dev/null +++ b/src/net/minecraft/src/RenderFallingSand.java @@ -0,0 +1,27 @@ +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 a(EntityFallingSand var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + this.loadTexture("/terrain.png"); + Block var10 = Block.blocksList[var1.blockID]; + World var11 = var1.getWorld(); + GL11.glDisable(GL11.GL_LIGHTING); + this.sandRenderBlocks.renderBlockFallingSand(var10, var11, MathHelper.floor_double(var1.posX), MathHelper.floor_double(var1.posY), MathHelper.floor_double(var1.posZ)); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glPopMatrix(); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.a((EntityFallingSand)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/RenderGiantZombie.java b/src/net/minecraft/src/RenderGiantZombie.java new file mode 100644 index 0000000..b0614da --- /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 a(EntityGiant var1, float var2) { + GL11.glScalef(this.scale, this.scale, this.scale); + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + this.a((EntityGiant)var1, var2); + } +} diff --git a/src/net/minecraft/src/RenderGlobal.java b/src/net/minecraft/src/RenderGlobal.java new file mode 100644 index 0000000..2de314c --- /dev/null +++ b/src/net/minecraft/src/RenderGlobal.java @@ -0,0 +1,1083 @@ +package net.minecraft.src; + +import java.nio.IntBuffer; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Random; +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 World theWorld; + private 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 int renderDistance = -1; + private int countEntitiesTotal; + private int countEntitiesRendered; + private int countEntitiesHidden; + int[] dummyBuf50k = new int['\uc350']; + IntBuffer occlusionResult = GLAllocation.createIntBuffer(64); + private int renderersLoaded; + private int renderersBeingClipped; + private int renderersBeingOccluded; + private int renderersBeingRendered; + private int renderersSkippingRenderPass; + private List glRenderLists = new ArrayList(); + private RenderList[] allRenderLists = new RenderList[]{new RenderList(), new RenderList(), new RenderList(), new RenderList()}; + int dummyRenderInt = 0; + int unusedGLCallList = GLAllocation.generateDisplayLists(1); + double prevSortX = -9999.0D; + double prevSortY = -9999.0D; + double prevSortZ = -9999.0D; + public float damagePartialTime; + int frustumCheckOffset = 0; + + public RenderGlobal(Minecraft var1, RenderEngine var2) { + this.mc = var1; + this.renderEngine = var2; + byte var3 = 64; + this.glRenderListBase = GLAllocation.generateDisplayLists(var3 * var3 * var3 * 3); + this.occlusionEnabled = var1.getOpenGlCapsChecker().checkARBOcclusion(); + if(this.occlusionEnabled) { + this.occlusionResult.clear(); + this.glOcclusionQueryBase = GLAllocation.createIntBuffer(var3 * var3 * var3); + this.glOcclusionQueryBase.clear(); + this.glOcclusionQueryBase.position(0); + this.glOcclusionQueryBase.limit(var3 * var3 * var3); + 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 var4 = Tessellator.instance; + this.glSkyList = this.starGLCallList + 1; + GL11.glNewList(this.glSkyList, GL11.GL_COMPILE); + byte var6 = 64; + int var7 = 256 / var6 + 2; + float var5 = 16.0F; + + int var8; + int var9; + for(var8 = -var6 * var7; var8 <= var6 * var7; var8 += var6) { + for(var9 = -var6 * var7; var9 <= var6 * var7; var9 += var6) { + var4.startDrawingQuads(); + var4.addVertex((double)(var8 + 0), (double)var5, (double)(var9 + 0)); + var4.addVertex((double)(var8 + var6), (double)var5, (double)(var9 + 0)); + var4.addVertex((double)(var8 + var6), (double)var5, (double)(var9 + var6)); + var4.addVertex((double)(var8 + 0), (double)var5, (double)(var9 + var6)); + var4.draw(); + } + } + + GL11.glEndList(); + this.glSkyList2 = this.starGLCallList + 2; + GL11.glNewList(this.glSkyList2, GL11.GL_COMPILE); + var5 = -16.0F; + var4.startDrawingQuads(); + + for(var8 = -var6 * var7; var8 <= var6 * var7; var8 += var6) { + for(var9 = -var6 * var7; var9 <= var6 * var7; var9 += var6) { + var4.addVertex((double)(var8 + var6), (double)var5, (double)(var9 + 0)); + var4.addVertex((double)(var8 + 0), (double)var5, (double)(var9 + 0)); + var4.addVertex((double)(var8 + 0), (double)var5, (double)(var9 + var6)); + var4.addVertex((double)(var8 + var6), (double)var5, (double)(var9 + var6)); + } + } + + var4.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.25F + var1.nextFloat() * 0.25F); + 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 changeWorld(World 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() { + 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 = 8; + 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(); + + for(var4 = 0; var4 < this.renderChunksWide; ++var4) { + for(int var5 = 0; var5 < this.renderChunksTall; ++var5) { + for(int var6 = 0; var6 < this.renderChunksDeep; ++var6) { + if(this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4] != null) { + this.tileEntities.removeAll(this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4].tileEntityRenderers); + } + + this.worldRenderers[(var6 * this.renderChunksTall + var5) * this.renderChunksWide + var4] = new WorldRenderer(this.theWorld, this.tileEntities, var4 * 16, var5 * 16, var6 * 16, 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) { + Entity var7 = this.theWorld.playerEntity; + this.markRenderersForNewPosition(MathHelper.floor_double(var7.posX), MathHelper.floor_double(var7.posY), MathHelper.floor_double(var7.posZ)); + Arrays.sort(this.sortedWorldRenderers, new EntitySorter(var7)); + } + + } + + public void renderEntities(Vec3D var1, ICamera var2, float var3) { + TileEntityRenderer.instance.cacheActiveRenderInfo(this.theWorld, this.renderEngine, this.mc.fontRenderer, this.mc.thePlayer, var3); + RenderManager.instance.cacheActiveRenderInfo(this.theWorld, this.renderEngine, this.mc.fontRenderer, this.mc.thePlayer, this.mc.gameSettings, var3); + this.countEntitiesTotal = 0; + this.countEntitiesRendered = 0; + this.countEntitiesHidden = 0; + Entity var4 = this.theWorld.playerEntity; + 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; + List var5 = this.theWorld.getLoadedEntityList(); + this.countEntitiesTotal = var5.size(); + + int var6; + for(var6 = 0; var6 < var5.size(); ++var6) { + Entity var7 = (Entity)var5.get(var6); + if(var7.isInRangeToRenderVec3D(var1) && var2.isBoundingBoxInFrustum(var7.boundingBox) && (var7 != this.theWorld.playerEntity || this.mc.gameSettings.thirdPersonView)) { + ++this.countEntitiesRendered; + RenderManager.instance.renderEntity(var7, var3); + } + } + + for(var6 = 0; var6 < this.tileEntities.size(); ++var6) { + TileEntityRenderer.instance.renderTileEntity((TileEntity)this.tileEntities.get(var6), var3); + } + + } + + 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(EntityPlayer var1, int var2, double var3) { + if(this.mc.gameSettings.renderDistance != this.renderDistance) { + this.loadRenderers(); + } + + if(var2 == 0) { + this.renderersLoaded = 0; + this.renderersBeingClipped = 0; + this.renderersBeingOccluded = 0; + this.renderersBeingRendered = 0; + this.renderersSkippingRenderPass = 0; + } + + double var5 = 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)); + } + + byte var17 = 0; + int var33; + if(this.occlusionEnabled && !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; + } + + var33 = var17 + this.renderSortedRenderers(var18, var19, var2, var3); + + do { + int var34 = 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.checkOcclusionQueryResult(var34, var19); + GL11.glPushMatrix(); + float var35 = 0.0F; + float var21 = 0.0F; + float var22 = 0.0F; + + for(int var23 = var34; 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 - var5); + float var28 = (float)((double)var26.posYMinus - var7); + float var29 = (float)((double)var26.posZMinus - var9); + float var30 = var27 - var35; + float var31 = var28 - var21; + float var32 = var29 - var22; + if(var30 != 0.0F || var31 != 0.0F || var32 != 0.0F) { + GL11.glTranslatef(var30, var31, var32); + var35 += var30; + var21 += var31; + var22 += var32; + } + + ARBOcclusionQuery.glBeginQueryARB(GL15.GL_SAMPLES_PASSED, this.sortedWorldRenderers[var23].glOcclusionQuery); + this.sortedWorldRenderers[var23].callOcclusionQueryList(); + ARBOcclusionQuery.glEndQueryARB(GL15.GL_SAMPLES_PASSED); + this.sortedWorldRenderers[var23].isWaitingOnOcclusionQuery = true; + } + } + } + } + + GL11.glPopMatrix(); + 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); + var33 += this.renderSortedRenderers(var34, var19, var2, var3); + } while(var19 < this.sortedWorldRenderers.length); + } else { + var33 = var17 + this.renderSortedRenderers(0, this.sortedWorldRenderers.length, var2, var3); + } + + return var33; + } + + 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.sortedWorldRenderers[var7].isVisible) { + int var8 = this.sortedWorldRenderers[var7].getGLCallListForPass(var3); + if(var8 >= 0) { + this.glRenderLists.add(this.sortedWorldRenderers[var7]); + ++var6; + } + } + } + + EntityPlayerSP var19 = this.mc.thePlayer; + 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].reset(); + } + + 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].isRenderedAt(var16.posXMinus, var16.posYMinus, var16.posZMinus)) { + var17 = var18; + } + } + + if(var17 < 0) { + var17 = var14++; + this.allRenderLists[var17].setLocation(var16.posXMinus, var16.posYMinus, var16.posZMinus, var20, var10, var12); + } + + this.allRenderLists[var17].render(var16.getGLCallListForPass(var3)); + } + + this.renderAllRenderLists(var3, var4); + return var6; + } + + public void renderAllRenderLists(int var1, double var2) { + for(int var4 = 0; var4 < this.allRenderLists.length; ++var4) { + this.allRenderLists[var4].render(); + } + + } + + public void updateClouds() { + ++this.cloudTickCounter; + } + + public void renderSky(float var1) { + GL11.glDisable(GL11.GL_TEXTURE_2D); + Vec3D var2 = this.theWorld.getSkyColor(var1); + float var3 = (float)var2.xCoord; + float var4 = (float)var2.yCoord; + float var5 = (float)var2.zCoord; + float var7; + float var8; + if(this.mc.gameSettings.anaglyph) { + float var6 = (var3 * 30.0F + var4 * 59.0F + var5 * 11.0F) / 100.0F; + 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 var12 = Tessellator.instance; + GL11.glDepthMask(false); + GL11.glEnable(GL11.GL_FOG); + GL11.glColor3f(var3, var4, var5); + GL11.glCallList(this.glSkyList); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDisable(GL11.GL_FOG); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); + GL11.glPushMatrix(); + var7 = 0.0F; + var8 = 0.0F; + float var9 = 0.0F; + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glTranslatef(var7, var8, var9); + GL11.glRotatef(0.0F, 0.0F, 0.0F, 1.0F); + GL11.glRotatef(this.theWorld.getCelestialAngle(var1) * 360.0F, 1.0F, 0.0F, 0.0F); + float var10 = 30.0F; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.renderEngine.getTexture("/terrain/sun.png")); + var12.startDrawingQuads(); + var12.addVertexWithUV((double)(-var10), 100.0D, (double)(-var10), 0.0D, 0.0D); + var12.addVertexWithUV((double)var10, 100.0D, (double)(-var10), 1.0D, 0.0D); + var12.addVertexWithUV((double)var10, 100.0D, (double)var10, 1.0D, 1.0D); + var12.addVertexWithUV((double)(-var10), 100.0D, (double)var10, 0.0D, 1.0D); + var12.draw(); + var10 = 20.0F; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.renderEngine.getTexture("/terrain/moon.png")); + var12.startDrawingQuads(); + var12.addVertexWithUV((double)(-var10), -100.0D, (double)var10, 1.0D, 1.0D); + var12.addVertexWithUV((double)var10, -100.0D, (double)var10, 0.0D, 1.0D); + var12.addVertexWithUV((double)var10, -100.0D, (double)(-var10), 0.0D, 0.0D); + var12.addVertexWithUV((double)(-var10), -100.0D, (double)(-var10), 1.0D, 0.0D); + var12.draw(); + GL11.glDisable(GL11.GL_TEXTURE_2D); + float var11 = this.theWorld.getStarBrightness(var1); + if(var11 > 0.0F) { + GL11.glColor4f(var11, var11, var11, var11); + 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.glColor3f(var3 * 0.2F + 0.04F, var4 * 0.2F + 0.04F, var5 * 0.6F + 0.1F); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glCallList(this.glSkyList2); + GL11.glEnable(GL11.GL_TEXTURE_2D); + GL11.glDepthMask(true); + } + + public void renderClouds(float var1) { + if(this.mc.gameSettings.fancyGraphics) { + this.renderCloudsFancy(var1); + } else { + GL11.glDisable(GL11.GL_CULL_FACE); + float var2 = (float)(this.mc.thePlayer.lastTickPosY + (this.mc.thePlayer.posY - this.mc.thePlayer.lastTickPosY) * (double)var1); + byte var3 = 32; + int var4 = 256 / var3; + Tessellator var5 = Tessellator.instance; + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.renderEngine.getTexture("/clouds.png")); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + Vec3D var6 = this.theWorld.getCloudColor(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 var22 = this.theWorld.playerEntity.prevPosX + (this.theWorld.playerEntity.posX - this.theWorld.playerEntity.prevPosX) * (double)var1 + (double)(((float)this.cloudTickCounter + var1) * 0.03F); + double var13 = this.theWorld.playerEntity.prevPosZ + (this.theWorld.playerEntity.posZ - this.theWorld.playerEntity.prevPosZ) * (double)var1; + int var15 = MathHelper.floor_double(var22 / 2048.0D); + int var16 = MathHelper.floor_double(var13 / 2048.0D); + var22 -= (double)(var15 * 2048); + var13 -= (double)(var16 * 2048); + float var17 = 120.0F - var2 + 0.33F; + float var18 = (float)(var22 * (double)var10); + float var19 = (float)(var13 * (double)var10); + var5.startDrawingQuads(); + var5.setColorRGBA_F(var7, var8, var9, 0.8F); + + for(int var20 = -var3 * var4; var20 < var3 * var4; var20 += var3) { + for(int var21 = -var3 * var4; var21 < var3 * var4; var21 += var3) { + var5.addVertexWithUV((double)(var20 + 0), (double)var17, (double)(var21 + var3), (double)((float)(var20 + 0) * var10 + var18), (double)((float)(var21 + var3) * var10 + var19)); + var5.addVertexWithUV((double)(var20 + var3), (double)var17, (double)(var21 + var3), (double)((float)(var20 + var3) * var10 + var18), (double)((float)(var21 + var3) * var10 + var19)); + var5.addVertexWithUV((double)(var20 + var3), (double)var17, (double)(var21 + 0), (double)((float)(var20 + var3) * var10 + var18), (double)((float)(var21 + 0) * var10 + var19)); + var5.addVertexWithUV((double)(var20 + 0), (double)var17, (double)(var21 + 0), (double)((float)(var20 + 0) * var10 + var18), (double)((float)(var21 + 0) * var10 + var19)); + } + } + + var5.draw(); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_CULL_FACE); + } + } + + public void renderCloudsFancy(float var1) { + GL11.glDisable(GL11.GL_CULL_FACE); + float var2 = (float)(this.mc.thePlayer.lastTickPosY + (this.mc.thePlayer.posY - this.mc.thePlayer.lastTickPosY) * (double)var1); + Tessellator var3 = Tessellator.instance; + float var4 = 12.0F; + float var5 = 4.0F; + double var6 = (this.theWorld.playerEntity.prevPosX + (this.theWorld.playerEntity.posX - this.theWorld.playerEntity.prevPosX) * (double)var1 + (double)(((float)this.cloudTickCounter + var1) * 0.03F)) / (double)var4; + double var8 = (this.theWorld.playerEntity.prevPosZ + (this.theWorld.playerEntity.posZ - this.theWorld.playerEntity.prevPosZ) * (double)var1) / (double)var4 + (double)0.33F; + float var10 = 108.0F - var2 + 0.33F; + int var11 = MathHelper.floor_double(var6 / 2048.0D); + int var12 = MathHelper.floor_double(var8 / 2048.0D); + var6 -= (double)(var11 * 2048); + var8 -= (double)(var12 * 2048); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, this.renderEngine.getTexture("/clouds.png")); + GL11.glEnable(GL11.GL_BLEND); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + Vec3D var13 = this.theWorld.getCloudColor(var1); + float var14 = (float)var13.xCoord; + float var15 = (float)var13.yCoord; + float var16 = (float)var13.zCoord; + float var17; + float var18; + float var19; + if(this.mc.gameSettings.anaglyph) { + var17 = (var14 * 30.0F + var15 * 59.0F + var16 * 11.0F) / 100.0F; + var18 = (var14 * 30.0F + var15 * 70.0F) / 100.0F; + var19 = (var14 * 30.0F + var16 * 70.0F) / 100.0F; + var14 = var17; + var15 = var18; + var16 = var19; + } + + var17 = (float)(var6 * 0.0D); + var18 = (float)(var8 * 0.0D); + var19 = 0.00390625F; + var17 = (float)MathHelper.floor_double(var6) * var19; + var18 = (float)MathHelper.floor_double(var8) * var19; + float var20 = (float)(var6 - (double)MathHelper.floor_double(var6)); + float var21 = (float)(var8 - (double)MathHelper.floor_double(var8)); + byte var22 = 8; + byte var23 = 3; + float var24 = 1.0F / 1024.0F; + GL11.glScalef(var4, 1.0F, var4); + + for(int var25 = 0; var25 < 2; ++var25) { + if(var25 == 0) { + GL11.glColorMask(false, false, false, false); + } else { + GL11.glColorMask(true, true, true, true); + } + + for(int var26 = -var23 + 1; var26 <= var23; ++var26) { + for(int var27 = -var23 + 1; var27 <= var23; ++var27) { + var3.startDrawingQuads(); + float var28 = (float)(var26 * var22); + float var29 = (float)(var27 * var22); + float var30 = var28 - var20; + float var31 = var29 - var21; + if(var10 > -var5 - 1.0F) { + var3.setColorRGBA_F(var14 * 0.7F, var15 * 0.7F, var16 * 0.7F, 0.8F); + var3.setNormal(0.0F, -1.0F, 0.0F); + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + 0.0F), (double)(var31 + (float)var22), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + 0.0F), (double)(var31 + (float)var22), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + 0.0F), (double)(var31 + 0.0F), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + 0.0F), (double)(var31 + 0.0F), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + } + + if(var10 <= var5 + 1.0F) { + var3.setColorRGBA_F(var14, var15, var16, 0.8F); + var3.setNormal(0.0F, 1.0F, 0.0F); + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + var5 - var24), (double)(var31 + (float)var22), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + var5 - var24), (double)(var31 + (float)var22), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + var5 - var24), (double)(var31 + 0.0F), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + var5 - var24), (double)(var31 + 0.0F), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + } + + var3.setColorRGBA_F(var14 * 0.9F, var15 * 0.9F, var16 * 0.9F, 0.8F); + int var32; + if(var26 > -1) { + var3.setNormal(-1.0F, 0.0F, 0.0F); + + for(var32 = 0; var32 < var22; ++var32) { + var3.addVertexWithUV((double)(var30 + (float)var32 + 0.0F), (double)(var10 + 0.0F), (double)(var31 + (float)var22), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var32 + 0.0F), (double)(var10 + var5), (double)(var31 + (float)var22), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var32 + 0.0F), (double)(var10 + var5), (double)(var31 + 0.0F), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var32 + 0.0F), (double)(var10 + 0.0F), (double)(var31 + 0.0F), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + } + } + + if(var26 <= 1) { + var3.setNormal(1.0F, 0.0F, 0.0F); + + for(var32 = 0; var32 < var22; ++var32) { + var3.addVertexWithUV((double)(var30 + (float)var32 + 1.0F - var24), (double)(var10 + 0.0F), (double)(var31 + (float)var22), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var32 + 1.0F - var24), (double)(var10 + var5), (double)(var31 + (float)var22), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + (float)var22) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var32 + 1.0F - var24), (double)(var10 + var5), (double)(var31 + 0.0F), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var32 + 1.0F - var24), (double)(var10 + 0.0F), (double)(var31 + 0.0F), (double)((var28 + (float)var32 + 0.5F) * var19 + var17), (double)((var29 + 0.0F) * var19 + var18)); + } + } + + var3.setColorRGBA_F(var14 * 0.8F, var15 * 0.8F, var16 * 0.8F, 0.8F); + if(var27 > -1) { + var3.setNormal(0.0F, 0.0F, -1.0F); + + for(var32 = 0; var32 < var22; ++var32) { + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + var5), (double)(var31 + (float)var32 + 0.0F), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + var5), (double)(var31 + (float)var32 + 0.0F), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + 0.0F), (double)(var31 + (float)var32 + 0.0F), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + 0.0F), (double)(var31 + (float)var32 + 0.0F), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + } + } + + if(var27 <= 1) { + var3.setNormal(0.0F, 0.0F, 1.0F); + + for(var32 = 0; var32 < var22; ++var32) { + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + var5), (double)(var31 + (float)var32 + 1.0F - var24), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + var5), (double)(var31 + (float)var32 + 1.0F - var24), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + (float)var22), (double)(var10 + 0.0F), (double)(var31 + (float)var32 + 1.0F - var24), (double)((var28 + (float)var22) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + var3.addVertexWithUV((double)(var30 + 0.0F), (double)(var10 + 0.0F), (double)(var31 + (float)var32 + 1.0F - var24), (double)((var28 + 0.0F) * var19 + var17), (double)((var29 + (float)var32 + 0.5F) * var19 + var18)); + } + } + + 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(EntityPlayer var1, boolean var2) { + Collections.sort(this.worldRenderersToUpdate, new RenderSorter(var1)); + int var3 = this.worldRenderersToUpdate.size() - 1; + int var4 = this.worldRenderersToUpdate.size(); + + for(int var5 = 0; var5 < var4; ++var5) { + WorldRenderer var6 = (WorldRenderer)this.worldRenderersToUpdate.get(var3 - var5); + if(!var2) { + if(var6.distanceToEntitySquared(var1) > 1024.0F) { + if(var6.isInFrustum) { + if(var5 >= 3) { + return false; + } + } else if(var5 >= 1) { + return false; + } + } + } else if(!var6.isInFrustum) { + continue; + } + + var6.updateRenderer(); + this.worldRenderersToUpdate.remove(var6); + var6.needsUpdate = false; + } + + return this.worldRenderersToUpdate.size() == 0; + } + + 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)System.currentTimeMillis() / 100.0F) * 0.2F + 0.4F) * 0.5F); + int var8; + if(var3 == 0) { + if(this.damagePartialTime > 0.0F) { + GL11.glBlendFunc(GL11.GL_DST_COLOR, GL11.GL_SRC_COLOR); + int var7 = this.renderEngine.getTexture("/terrain.png"); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var7); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 0.5F); + GL11.glPushMatrix(); + var8 = this.theWorld.getBlockId(var2.blockX, var2.blockY, var2.blockZ); + Block var9 = var8 > 0 ? Block.blocksList[var8] : null; + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glPolygonOffset(-3.0F, -3.0F); + GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL); + var6.startDrawingQuads(); + double var10 = var1.lastTickPosX + (var1.posX - var1.lastTickPosX) * (double)var5; + double var12 = var1.lastTickPosY + (var1.posY - var1.lastTickPosY) * (double)var5; + double var14 = var1.lastTickPosZ + (var1.posZ - var1.lastTickPosZ) * (double)var5; + var6.setTranslationD(-var10, -var12, -var14); + var6.disableColor(); + if(var9 == null) { + var9 = Block.stone; + } + + this.globalRenderBlocks.renderBlockUsingTexture(var9, var2.blockX, var2.blockY, var2.blockZ, 240 + (int)(this.damagePartialTime * 10.0F)); + var6.draw(); + var6.setTranslationD(0.0D, 0.0D, 0.0D); + GL11.glPolygonOffset(0.0F, 0.0F); + GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL); + GL11.glEnable(GL11.GL_ALPHA_TEST); + GL11.glDepthMask(true); + GL11.glPopMatrix(); + } + } else if(var4 != null) { + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + float var16 = MathHelper.sin((float)System.currentTimeMillis() / 100.0F) * 0.2F + 0.8F; + GL11.glColor4f(var16, var16, var16, MathHelper.sin((float)System.currentTimeMillis() / 200.0F) * 0.2F + 0.5F); + var8 = this.renderEngine.getTexture("/terrain.png"); + GL11.glBindTexture(GL11.GL_TEXTURE_2D, var8); + int var17 = var2.blockX; + int var18 = var2.blockY; + int var11 = var2.blockZ; + if(var2.sideHit == 0) { + --var18; + } + + if(var2.sideHit == 1) { + ++var18; + } + + if(var2.sideHit == 2) { + --var11; + } + + if(var2.sideHit == 3) { + ++var11; + } + + if(var2.sideHit == 4) { + --var17; + } + + if(var2.sideHit == 5) { + ++var17; + } + } + + GL11.glDisable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + } + + public void drawSelectionBox(EntityPlayer var1, MovingObjectPosition var2, int var3, ItemStack var4, float var5) { + if(var3 == 0 && var2.typeOfHit == 0) { + 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) { + 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.needsUpdate) { + this.worldRenderersToUpdate.add(var20); + } + + var20.markDirty(); + } + } + } + + } + + public void markBlockAndNeighborsNeedsUpdate(int var1, int var2, int var3) { + this.markBlocksForUpdate(var1 - 1, var2 - 1, var3 - 1, var1 + 1, var2 + 1, var3 + 1); + } + + public void markBlockRangeNeedsUpdate(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 clipRenderersByFrustrum(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].updateInFrustrum(var1); + } + } + + ++this.frustumCheckOffset; + } + + public void playSound(String var1, double var2, double var4, double var6, float var8, float var9) { + this.mc.sndManager.playSound(var1, (float)var2, (float)var4, (float)var6, var8, var9); + } + + public void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12) { + double var14 = this.theWorld.playerEntity.posX - var2; + double var16 = this.theWorld.playerEntity.posY - var4; + double var18 = this.theWorld.playerEntity.posZ - var6; + if(var14 * var14 + var16 * var16 + var18 * var18 <= 256.0D) { + if(var1 == "bubble") { + this.mc.effectRenderer.addEffect(new EntityBubbleFX(this.theWorld, var2, var4, var6, var8, var10, var12)); + } else if(var1 == "smoke") { + this.mc.effectRenderer.addEffect(new EntitySmokeFX(this.theWorld, var2, var4, var6)); + } else if(var1 == "explode") { + this.mc.effectRenderer.addEffect(new EntityExplodeFX(this.theWorld, var2, var4, var6, var8, var10, var12)); + } else if(var1 == "flame") { + this.mc.effectRenderer.addEffect(new EntityFlameFX(this.theWorld, var2, var4, var6, var8, var10, var12)); + } else if(var1 == "lava") { + this.mc.effectRenderer.addEffect(new EntityLavaFX(this.theWorld, var2, var4, var6)); + } else if(var1 == "splash") { + this.mc.effectRenderer.addEffect(new EntitySplashFX(this.theWorld, var2, var4, var6, var8, var10, var12)); + } else if(var1 == "largesmoke") { + this.mc.effectRenderer.addEffect(new EntitySmokeFX(this.theWorld, var2, var4, var6, 2.5F)); + } + + } + } + + public void obtainEntitySkin(Entity var1) { + if(var1.skinUrl != null) { + this.renderEngine.obtainImageData(var1.skinUrl, new ImageBufferDownload()); + } + + } + + public void releaseEntitySkin(Entity var1) { + if(var1.skinUrl != null) { + this.renderEngine.releaseImageData(var1.skinUrl); + } + + } + + public void updateAllRenderers() { + for(int var1 = 0; var1 < this.worldRenderers.length; ++var1) { + if(this.worldRenderers[var1].isChunkLit) { + if(!this.worldRenderers[var1].needsUpdate) { + this.worldRenderersToUpdate.add(this.worldRenderers[var1]); + } + + this.worldRenderers[var1].markDirty(); + } + } + + } +} diff --git a/src/net/minecraft/src/RenderHelper.java b/src/net/minecraft/src/RenderHelper.java new file mode 100644 index 0000000..daf49c3 --- /dev/null +++ b/src/net/minecraft/src/RenderHelper.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +import java.nio.FloatBuffer; +import org.lwjgl.opengl.GL11; + +public class RenderHelper { + private static FloatBuffer colorBuffer = GLAllocation.createFloatBuffer(16); + + 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; + Vec3D var3 = Vec3D.createVector((double)0.7F, 1.0D, (double)-0.2F).normalize(); + GL11.glLight(GL11.GL_LIGHT0, GL11.GL_POSITION, setColorBuffer(var3.xCoord, var3.yCoord, var3.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)); + var3 = Vec3D.createVector((double)-0.7F, 1.0D, (double)0.2F).normalize(); + GL11.glLight(GL11.GL_LIGHT1, GL11.GL_POSITION, setColorBuffer(var3.xCoord, var3.yCoord, var3.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; + } +} diff --git a/src/net/minecraft/src/RenderItem.java b/src/net/minecraft/src/RenderItem.java new file mode 100644 index 0000000..bc50e5c --- /dev/null +++ b/src/net/minecraft/src/RenderItem.java @@ -0,0 +1,193 @@ +package net.minecraft.src; + +import java.util.Random; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderItem extends Render { + private RenderBlocks renderBlocks = new RenderBlocks(); + private Random random = new Random(); + + public RenderItem() { + this.shadowSize = 0.15F; + this.shadowOpaque = 12.0F / 16.0F; + } + + public void a(EntityItem var1, double var2, double var4, double var6, float var8, float var9) { + this.random.setSeed(187L); + ItemStack var10 = var1.item; + 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.item.stackSize > 1) { + var13 = 2; + } + + if(var1.item.stackSize > 5) { + var13 = 3; + } + + if(var1.item.stackSize > 20) { + var13 = 4; + } + + GL11.glTranslatef((float)var2, (float)var4 + var11, (float)var6); + GL11.glEnable(GL12.GL_RESCALE_NORMAL); + float var16; + float var17; + float var18; + if(var10.itemID < 256 && Block.blocksList[var10.itemID].getRenderType() == 0) { + GL11.glRotatef(var12, 0.0F, 1.0F, 0.0F); + this.loadTexture("/terrain.png"); + float var27 = 0.25F; + if(!Block.blocksList[var10.itemID].renderAsNormalBlock() && var10.itemID != Block.stairSingle.blockID) { + var27 = 0.5F; + } + + GL11.glScalef(var27, var27, var27); + + for(int var28 = 0; var28 < var13; ++var28) { + GL11.glPushMatrix(); + if(var28 > 0) { + var16 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / var27; + var17 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / var27; + var18 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.2F / var27; + GL11.glTranslatef(var16, var17, var18); + } + + this.renderBlocks.renderBlockOnInventory(Block.blocksList[var10.itemID]); + GL11.glPopMatrix(); + } + } else { + GL11.glScalef(0.5F, 0.5F, 0.5F); + int var14 = var10.getIconIndex(); + if(var10.itemID < 256) { + this.loadTexture("/terrain.png"); + } else { + this.loadTexture("/gui/items.png"); + } + + Tessellator var15 = Tessellator.instance; + var16 = (float)(var14 % 16 * 16 + 0) / 256.0F; + var17 = (float)(var14 % 16 * 16 + 16) / 256.0F; + var18 = (float)(var14 / 16 * 16 + 0) / 256.0F; + float var19 = (float)(var14 / 16 * 16 + 16) / 256.0F; + float var20 = 1.0F; + float var21 = 0.5F; + float var22 = 0.25F; + + for(int var23 = 0; var23 < var13; ++var23) { + GL11.glPushMatrix(); + if(var23 > 0) { + float var24 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F; + float var25 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F; + float var26 = (this.random.nextFloat() * 2.0F - 1.0F) * 0.3F; + GL11.glTranslatef(var24, var25, var26); + } + + GL11.glRotatef(180.0F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F); + var15.startDrawingQuads(); + var15.setNormal(0.0F, 1.0F, 0.0F); + var15.addVertexWithUV((double)(0.0F - var21), (double)(0.0F - var22), 0.0D, (double)var16, (double)var19); + var15.addVertexWithUV((double)(var20 - var21), (double)(0.0F - var22), 0.0D, (double)var17, (double)var19); + var15.addVertexWithUV((double)(var20 - var21), (double)(1.0F - var22), 0.0D, (double)var17, (double)var18); + var15.addVertexWithUV((double)(0.0F - var21), (double)(1.0F - var22), 0.0D, (double)var16, (double)var18); + var15.draw(); + GL11.glPopMatrix(); + } + } + + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } + + public void drawItemIntoGui(FontRenderer var1, RenderEngine var2, ItemStack var3, int var4, int var5) { + if(var3 != null) { + if(var3.itemID < 256 && Block.blocksList[var3.itemID].getRenderType() == 0) { + int var6 = var3.itemID; + var2.bindTexture(var2.getTexture("/terrain.png")); + Block var7 = Block.blocksList[var6]; + GL11.glPushMatrix(); + GL11.glTranslatef((float)(var4 - 2), (float)(var5 + 3), 0.0F); + GL11.glScalef(10.0F, 10.0F, 10.0F); + GL11.glTranslatef(1.0F, 0.5F, 8.0F); + GL11.glRotatef(210.0F, 1.0F, 0.0F, 0.0F); + GL11.glRotatef(45.0F, 0.0F, 1.0F, 0.0F); + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + this.renderBlocks.renderBlockOnInventory(var7); + GL11.glPopMatrix(); + } else if(var3.getIconIndex() >= 0) { + GL11.glDisable(GL11.GL_LIGHTING); + if(var3.itemID < 256) { + var2.bindTexture(var2.getTexture("/terrain.png")); + } else { + var2.bindTexture(var2.getTexture("/gui/items.png")); + } + + this.renderTexturedQuad(var4, var5, var3.getIconIndex() % 16 * 16, var3.getIconIndex() / 16 * 16, 16, 16); + GL11.glEnable(GL11.GL_LIGHTING); + } + + } + } + + public void renderItemOverlayIntoGUI(FontRenderer var1, RenderEngine var2, ItemStack var3, int var4, int var5) { + if(var3 != null) { + if(var3.stackSize > 1) { + String var6 = "" + var3.stackSize; + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + var1.drawStringWithShadow(var6, var4 + 19 - 2 - var1.getStringWidth(var6), var5 + 6 + 3, 16777215); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glEnable(GL11.GL_DEPTH_TEST); + } + + if(var3.itemDmg > 0) { + int var11 = 13 - var3.itemDmg * 13 / var3.getMaxDamage(); + int var7 = 255 - var3.itemDmg * 255 / var3.getMaxDamage(); + GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_DEPTH_TEST); + GL11.glDisable(GL11.GL_TEXTURE_2D); + Tessellator var8 = Tessellator.instance; + int var9 = 255 - var7 << 16 | var7 << 8; + int var10 = (255 - var7) / 4 << 16 | 16128; + this.renderQuad(var8, var4 + 2, var5 + 13, 13, 2, 0); + this.renderQuad(var8, var4 + 2, var5 + 13, 12, 1, var10); + this.renderQuad(var8, var4 + 2, var5 + 13, var11, 1, var9); + 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 renderTexturedQuad(int var1, int var2, int var3, int var4, int var5, int var6) { + float var7 = 0.0F; + float var8 = 0.00390625F; + float var9 = 0.00390625F; + Tessellator var10 = Tessellator.instance; + var10.startDrawingQuads(); + var10.addVertexWithUV((double)(var1 + 0), (double)(var2 + var6), (double)var7, (double)((float)(var3 + 0) * var8), (double)((float)(var4 + var6) * var9)); + var10.addVertexWithUV((double)(var1 + var5), (double)(var2 + var6), (double)var7, (double)((float)(var3 + var5) * var8), (double)((float)(var4 + var6) * var9)); + var10.addVertexWithUV((double)(var1 + var5), (double)(var2 + 0), (double)var7, (double)((float)(var3 + var5) * var8), (double)((float)(var4 + 0) * var9)); + var10.addVertexWithUV((double)(var1 + 0), (double)(var2 + 0), (double)var7, (double)((float)(var3 + 0) * var8), (double)((float)(var4 + 0) * var9)); + var10.draw(); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.a((EntityItem)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..4688443 --- /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 posX; + private int posY; + private int posZ; + private float playerPosX; + private float playerPosY; + private float playerPosZ; + private IntBuffer buffer = GLAllocation.createIntBuffer(65536); + private boolean render = false; + private boolean isCached = false; + + public void setLocation(int var1, int var2, int var3, double var4, double var6, double var8) { + this.render = true; + this.buffer.clear(); + this.posX = var1; + this.posY = var2; + this.posZ = var3; + this.playerPosX = (float)var4; + this.playerPosY = (float)var6; + this.playerPosZ = (float)var8; + } + + public boolean isRenderedAt(int var1, int var2, int var3) { + return !this.render ? false : var1 == this.posX && var2 == this.posY && var3 == this.posZ; + } + + public void render(int var1) { + this.buffer.put(var1); + if(this.buffer.remaining() == 0) { + this.render(); + } + + } + + public void render() { + if(this.render) { + if(!this.isCached) { + this.buffer.flip(); + this.isCached = true; + } + + if(this.buffer.remaining() > 0) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)this.posX - this.playerPosX, (float)this.posY - this.playerPosY, (float)this.posZ - this.playerPosZ); + GL11.glCallLists(this.buffer); + GL11.glPopMatrix(); + } + + } + } + + public void reset() { + this.render = false; + this.isCached = false; + } +} diff --git a/src/net/minecraft/src/RenderLiving.java b/src/net/minecraft/src/RenderLiving.java new file mode 100644 index 0000000..564dd4c --- /dev/null +++ b/src/net/minecraft/src/RenderLiving.java @@ -0,0 +1,133 @@ +package net.minecraft.src; + +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; + } + + public void a(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + GL11.glDisable(GL11.GL_CULL_FACE); + + try { + float var10 = var1.prevRenderYawOffset + (var1.renderYawOffset - var1.prevRenderYawOffset) * var9; + float var11 = var1.prevRotationYaw + (var1.rotationYaw - var1.prevRotationYaw) * var9; + float var12 = var1.prevRotationPitch + (var1.rotationPitch - var1.prevRotationPitch) * var9; + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + float var13 = (float)var1.ticksExisted + var9; + GL11.glRotatef(180.0F - var10, 0.0F, 1.0F, 0.0F); + float var14; + if(var1.deathTime > 0) { + var14 = ((float)var1.deathTime + var9 - 1.0F) / 20.0F * 1.6F; + var14 = MathHelper.sqrt_float(var14); + if(var14 > 1.0F) { + var14 = 1.0F; + } + + GL11.glRotatef(var14 * this.getMaxDeathRotation(var1), 0.0F, 0.0F, 1.0F); + } + + 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(var15 > 1.0F) { + var15 = 1.0F; + } + + this.loadDownloadableImageTexture(var1.skinUrl, var1.getTexture()); + GL11.glEnable(GL11.GL_ALPHA_TEST); + this.mainModel.render(var16, var15, var13, var11 - var10, var12, var14); + + for(int var17 = 0; var17 < 4; ++var17) { + if(this.shouldRenderPass(var1, var17)) { + this.renderPassModel.render(var16, var15, var13, var11 - var10, var12, var14); + GL11.glDisable(GL11.GL_BLEND); + GL11.glEnable(GL11.GL_ALPHA_TEST); + } + } + + float var25 = var1.getEntityBrightness(var9); + int var18 = this.getColorMultiplier(var1, var25, var9); + 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(var25, 0.0F, 0.0F, 0.4F); + this.mainModel.render(var16, var15, var13, var11 - var10, var12, var14); + + for(int var19 = 0; var19 < 4; ++var19) { + if(this.shouldRenderPass(var1, var19)) { + GL11.glColor4f(var25, 0.0F, 0.0F, 0.4F); + this.renderPassModel.render(var16, var15, var13, var11 - var10, var12, var14); + } + } + } + + if((var18 >> 24 & 255) > 0) { + float var26 = (float)(var18 >> 16 & 255) / 255.0F; + float var20 = (float)(var18 >> 8 & 255) / 255.0F; + float var21 = (float)(var18 & 255) / 255.0F; + float var22 = (float)(var18 >> 24 & 255) / 255.0F; + GL11.glColor4f(var26, var20, var21, var22); + this.mainModel.render(var16, var15, var13, var11 - var10, var12, var14); + + for(int var23 = 0; var23 < 4; ++var23) { + if(this.shouldRenderPass(var1, var23)) { + GL11.glColor4f(var26, var20, var21, var22); + this.renderPassModel.render(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 var24) { + var24.printStackTrace(); + } + + GL11.glEnable(GL11.GL_CULL_FACE); + GL11.glPopMatrix(); + } + + protected boolean shouldRenderPass(EntityLiving var1, int var2) { + return false; + } + + protected float getMaxDeathRotation(EntityLiving var1) { + return 90.0F; + } + + protected int getColorMultiplier(EntityLiving var1, float var2, float var3) { + return 0; + } + + protected void preRenderCallback(EntityLiving var1, float var2) { + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.a((EntityLiving)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..8d427a4 --- /dev/null +++ b/src/net/minecraft/src/RenderManager.java @@ -0,0 +1,107 @@ +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 World worldObj; + public EntityPlayer player; + public float playerViewY; + public float playerViewX; + public GameSettings options; + public double viewerPosX; + public double viewerPosY; + public double viewerPosZ; + + private RenderManager() { + this.entityRenderMap.put(EntitySpider.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 ModelSheep(), new ModelSheepFur(), 0.7F)); + this.entityRenderMap.put(EntityCreeper.class, new RenderCreeper()); + this.entityRenderMap.put(EntitySkeleton.class, new RenderLiving(new ModelSkeleton(), 0.5F)); + this.entityRenderMap.put(EntityZombie.class, new RenderLiving(new ModelZombie(), 0.5F)); + this.entityRenderMap.put(EntityPlayer.class, new RenderPlayer()); + this.entityRenderMap.put(EntityGiant.class, new RenderGiantZombie(new ModelZombie(), 0.5F, 6.0F)); + this.entityRenderMap.put(EntityLiving.class, new RenderLiving(new ModelBiped(), 0.5F)); + this.entityRenderMap.put(Entity.class, new RenderEntity()); + this.entityRenderMap.put(EntityPainting.class, new RenderPainting()); + this.entityRenderMap.put(EntityArrow.class, new RenderArrow()); + this.entityRenderMap.put(EntityItem.class, new RenderItem()); + this.entityRenderMap.put(EntityTNTPrimed.class, new RenderTNTPrimed()); + this.entityRenderMap.put(EntityFallingSand.class, new RenderFallingSand()); + this.entityRenderMap.put(EntityMinecart.class, new RenderMinecart()); + 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, EntityPlayer var4, GameSettings var5, float var6) { + this.worldObj = var1; + this.renderEngine = var2; + this.options = var5; + this.player = var4; + this.fontRenderer = var3; + this.playerViewY = var4.prevRotationYaw + (var4.rotationYaw - var4.prevRotationYaw) * var6; + this.playerViewX = var4.prevRotationPitch + (var4.rotationPitch - var4.prevRotationPitch) * var6; + this.viewerPosX = var4.lastTickPosX + (var4.posX - var4.lastTickPosX) * (double)var6; + this.viewerPosY = var4.lastTickPosY + (var4.posY - var4.lastTickPosY) * (double)var6; + this.viewerPosZ = var4.lastTickPosZ + (var4.posZ - var4.lastTickPosZ) * (double)var6; + } + + public void renderEntity(Entity var1, float var2) { + 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; + float var10 = var1.getEntityBrightness(var2); + GL11.glColor3f(var10, var10, var10); + 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 = this.getEntityRenderObject(var1); + if(var10 != null) { + var10.doRender(var1, var2, var4, var6, var8, var9); + var10.doRenderShadowAndFire(var1, var2, var4, var6, var8, var9); + } + + } + + 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; + } +} diff --git a/src/net/minecraft/src/RenderMinecart.java b/src/net/minecraft/src/RenderMinecart.java new file mode 100644 index 0000000..a87bf34 --- /dev/null +++ b/src/net/minecraft/src/RenderMinecart.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class RenderMinecart extends Render { + protected ModelBase modelMinecart; + + public RenderMinecart() { + this.shadowSize = 0.5F; + this.modelMinecart = new ModelMinecart(); + } + + public void a(EntityMinecart var1, double var2, double var4, double var6, float var8, float var9) { + GL11.glPushMatrix(); + double var10 = var1.lastTickPosX + (var1.posX - var1.lastTickPosX) * (double)var9; + double var12 = var1.lastTickPosY + (var1.posY - var1.lastTickPosY) * (double)var9; + double var14 = var1.lastTickPosZ + (var1.posZ - var1.lastTickPosZ) * (double)var9; + double var16 = (double)0.3F; + Vec3D var18 = var1.getPos(var10, var12, var14); + float var19 = var1.prevRotationPitch + (var1.rotationPitch - var1.prevRotationPitch) * var9; + if(var18 != null) { + Vec3D var20 = var1.getPosOffset(var10, var12, var14, var16); + Vec3D var21 = var1.getPosOffset(var10, var12, var14, -var16); + if(var20 == null) { + var20 = var18; + } + + if(var21 == null) { + var21 = var18; + } + + var2 += var18.xCoord - var10; + var4 += (var20.yCoord + var21.yCoord) / 2.0D - var12; + var6 += var18.zCoord - var14; + Vec3D var22 = var21.addVector(-var20.xCoord, -var20.yCoord, -var20.zCoord); + if(var22.lengthVector() != 0.0D) { + var22 = var22.normalize(); + var8 = (float)(Math.atan2(var22.zCoord, var22.xCoord) * 180.0D / Math.PI); + var19 = (float)(Math.atan(var22.yCoord) * 73.0D); + } + } + + GL11.glTranslatef((float)var2, (float)var4, (float)var6); + GL11.glRotatef(180.0F - var8, 0.0F, 1.0F, 0.0F); + GL11.glRotatef(-var19, 0.0F, 0.0F, 1.0F); + float var23 = (float)var1.timeSinceHit - var9; + float var24 = (float)var1.damageTaken - var9; + if(var24 < 0.0F) { + var24 = 0.0F; + } + + if(var23 > 0.0F) { + GL11.glRotatef(MathHelper.sin(var23) * var23 * var24 / 10.0F * (float)var1.forwardDirection, 1.0F, 0.0F, 0.0F); + } + + this.loadTexture("/terrain.png"); + float var25 = 12.0F / 16.0F; + GL11.glScalef(var25, var25, var25); + (new RenderBlocks()).renderBlockOnInventory(Block.chest); + GL11.glScalef(1.0F / var25, 1.0F / var25, 1.0F / var25); + this.loadTexture("/item/cart.png"); + GL11.glScalef(-1.0F, -1.0F, 1.0F); + this.modelMinecart.render(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.a((EntityMinecart)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..4545f64 --- /dev/null +++ b/src/net/minecraft/src/RenderPainting.java @@ -0,0 +1,119 @@ +package net.minecraft.src; + +import java.util.Random; +import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.GL12; + +public class RenderPainting extends Render { + private Random rand = new Random(); + + public void a(EntityPainting var1, double var2, double var4, double var6, float var8, float var9) { + this.rand.setSeed(187L); + 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.setSizes(var1, var10.sizeX, var10.sizeY, var10.offsetX, var10.offsetY); + GL11.glDisable(GL12.GL_RESCALE_NORMAL); + GL11.glPopMatrix(); + } + + private void setSizes(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 = 0.5F; + + for(int var10 = 0; var10 < var2 / 16; ++var10) { + for(int var11 = 0; var11 < var3 / 16; ++var11) { + float var12 = var6 + (float)((var10 + 1) * 16); + float var13 = var6 + (float)(var10 * 16); + float var14 = var7 + (float)((var11 + 1) * 16); + float var15 = var7 + (float)(var11 * 16); + this.getOffset(var1, (var12 + var13) / 2.0F, (var14 + var15) / 2.0F); + float var16 = (float)(var4 + var2 - var10 * 16) / 256.0F; + float var17 = (float)(var4 + var2 - (var10 + 1) * 16) / 256.0F; + float var18 = (float)(var5 + var3 - var11 * 16) / 256.0F; + float var19 = (float)(var5 + var3 - (var11 + 1) * 16) / 256.0F; + float var20 = 12.0F / 16.0F; + float var21 = 13.0F / 16.0F; + float var22 = 0.0F; + float var23 = 1.0F / 16.0F; + float var24 = 12.0F / 16.0F; + float var25 = 13.0F / 16.0F; + float var26 = 0.001953125F; + float var27 = 0.001953125F; + float var28 = 385.0F / 512.0F; + float var29 = 385.0F / 512.0F; + float var30 = 0.0F; + float var31 = 1.0F / 16.0F; + Tessellator var32 = Tessellator.instance; + var32.startDrawingQuads(); + var32.setNormal(0.0F, 0.0F, -1.0F); + var32.addVertexWithUV((double)var12, (double)var15, (double)var8, (double)var17, (double)var18); + var32.addVertexWithUV((double)var13, (double)var15, (double)var8, (double)var16, (double)var18); + var32.addVertexWithUV((double)var13, (double)var14, (double)var8, (double)var16, (double)var19); + var32.addVertexWithUV((double)var12, (double)var14, (double)var8, (double)var17, (double)var19); + var32.setNormal(0.0F, 0.0F, 1.0F); + var32.addVertexWithUV((double)var12, (double)var14, (double)var9, (double)var20, (double)var22); + var32.addVertexWithUV((double)var13, (double)var14, (double)var9, (double)var21, (double)var22); + var32.addVertexWithUV((double)var13, (double)var15, (double)var9, (double)var21, (double)var23); + var32.addVertexWithUV((double)var12, (double)var15, (double)var9, (double)var20, (double)var23); + var32.setNormal(0.0F, -1.0F, 0.0F); + var32.addVertexWithUV((double)var12, (double)var14, (double)var8, (double)var24, (double)var26); + var32.addVertexWithUV((double)var13, (double)var14, (double)var8, (double)var25, (double)var26); + var32.addVertexWithUV((double)var13, (double)var14, (double)var9, (double)var25, (double)var27); + var32.addVertexWithUV((double)var12, (double)var14, (double)var9, (double)var24, (double)var27); + var32.setNormal(0.0F, 1.0F, 0.0F); + var32.addVertexWithUV((double)var12, (double)var15, (double)var9, (double)var24, (double)var26); + var32.addVertexWithUV((double)var13, (double)var15, (double)var9, (double)var25, (double)var26); + var32.addVertexWithUV((double)var13, (double)var15, (double)var8, (double)var25, (double)var27); + var32.addVertexWithUV((double)var12, (double)var15, (double)var8, (double)var24, (double)var27); + var32.setNormal(-1.0F, 0.0F, 0.0F); + var32.addVertexWithUV((double)var12, (double)var14, (double)var9, (double)var29, (double)var30); + var32.addVertexWithUV((double)var12, (double)var15, (double)var9, (double)var29, (double)var31); + var32.addVertexWithUV((double)var12, (double)var15, (double)var8, (double)var28, (double)var31); + var32.addVertexWithUV((double)var12, (double)var14, (double)var8, (double)var28, (double)var30); + var32.setNormal(1.0F, 0.0F, 0.0F); + var32.addVertexWithUV((double)var13, (double)var14, (double)var8, (double)var29, (double)var30); + var32.addVertexWithUV((double)var13, (double)var15, (double)var8, (double)var29, (double)var31); + var32.addVertexWithUV((double)var13, (double)var15, (double)var9, (double)var28, (double)var31); + var32.addVertexWithUV((double)var13, (double)var14, (double)var9, (double)var28, (double)var30); + var32.draw(); + } + } + + } + + private void getOffset(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.direction == 0) { + var4 = MathHelper.floor_double(var1.posX + (double)(var2 / 16.0F)); + } + + if(var1.direction == 1) { + var6 = MathHelper.floor_double(var1.posZ - (double)(var2 / 16.0F)); + } + + if(var1.direction == 2) { + var4 = MathHelper.floor_double(var1.posX - (double)(var2 / 16.0F)); + } + + if(var1.direction == 3) { + var6 = MathHelper.floor_double(var1.posZ + (double)(var2 / 16.0F)); + } + + float var7 = this.renderManager.worldObj.getBrightness(var4, var5, var6); + GL11.glColor3f(var7, var7, var7); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.a((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..66a193e --- /dev/null +++ b/src/net/minecraft/src/RenderPig.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class RenderPig extends RenderLiving { + public RenderPig(ModelBase var1, ModelBase var2, float var3) { + super(var1, var3); + this.setRenderPassModel(var2); + } + + protected boolean a(EntityPig var1, int var2) { + this.loadTexture("/mob/saddle.png"); + return var2 == 0 && var1.saddled; + } + + protected boolean shouldRenderPass(EntityLiving var1, int var2) { + return this.a((EntityPig)var1, var2); + } +} diff --git a/src/net/minecraft/src/RenderPlayer.java b/src/net/minecraft/src/RenderPlayer.java new file mode 100644 index 0000000..af1ce50 --- /dev/null +++ b/src/net/minecraft/src/RenderPlayer.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +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 boolean a(EntityPlayer var1, int var2) { + ItemStack var3 = var1.inventory.armorItemInSlot(3 - var2); + if(var3 != null) { + Item var4 = var3.getItem(); + if(var4 instanceof ItemArmor) { + ItemArmor var5 = (ItemArmor)var4; + this.loadTexture("/armor/" + armorFilenamePrefix[var5.renderIndex] + "_" + (var2 == 2 ? 2 : 1) + ".png"); + ModelBiped var6 = var2 == 2 ? this.modelArmor : this.modelArmorChestplate; + var6.bipedHead.showModel = var2 == 0; + var6.bipedHeadwear.showModel = var2 == 0; + var6.bipedBody.showModel = var2 == 1 || var2 == 2; + var6.bipedRightArm.showModel = var2 == 1; + var6.bipedLeftArm.showModel = var2 == 1; + var6.bipedRightLeg.showModel = var2 == 2 || var2 == 3; + var6.bipedLeftLeg.showModel = var2 == 2 || var2 == 3; + this.setRenderPassModel(var6); + return true; + } + } + + return false; + } + + public void a(EntityPlayer var1, double var2, double var4, double var6, float var8, float var9) { + super.a(var1, var2, var4 - (double)var1.yOffset, var6, var8, var9); + } + + public void drawFirstPersonHand() { + this.modelBipedMain.bipedRightArm.render(1.0F / 16.0F); + } + + protected boolean shouldRenderPass(EntityLiving var1, int var2) { + return this.a((EntityPlayer)var1, var2); + } + + public void a(EntityLiving var1, double var2, double var4, double var6, float var8, float var9) { + this.a((EntityPlayer)var1, var2, var4, var6, var8, var9); + } + + public void doRender(Entity var1, double var2, double var4, double var6, float var8, float var9) { + this.a((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..e7e8d6f --- /dev/null +++ b/src/net/minecraft/src/RenderSheep.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class RenderSheep extends RenderLiving { + public RenderSheep(ModelBase var1, ModelBase var2, float var3) { + super(var1, var3); + this.setRenderPassModel(var2); + } + + protected boolean a(EntitySheep var1, int var2) { + this.loadTexture("/mob/sheep_fur.png"); + return var2 == 0 && !var1.sheared; + } + + protected boolean shouldRenderPass(EntityLiving var1, int var2) { + return this.a((EntitySheep)var1, var2); + } +} diff --git a/src/net/minecraft/src/RenderSorter.java b/src/net/minecraft/src/RenderSorter.java new file mode 100644 index 0000000..04a4d3a --- /dev/null +++ b/src/net/minecraft/src/RenderSorter.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.Comparator; + +public class RenderSorter implements Comparator { + private EntityPlayer entity; + + public RenderSorter(EntityPlayer var1) { + this.entity = var1; + } + + public int a(WorldRenderer var1, WorldRenderer var2) { + boolean var3 = var1.isInFrustum; + boolean var4 = var2.isInFrustum; + return var3 && !var4 ? 1 : (var4 && !var3 ? -1 : (var1.distanceToEntitySquared(this.entity) < var2.distanceToEntitySquared(this.entity) ? 1 : -1)); + } + + public int compare(Object var1, Object var2) { + return this.a((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..18972d7 --- /dev/null +++ b/src/net/minecraft/src/RenderSpider.java @@ -0,0 +1,38 @@ +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 a(EntitySpider var1) { + return 180.0F; + } + + protected boolean a(EntitySpider var1, int var2) { + if(var2 != 0) { + return false; + } else if(var2 != 0) { + return false; + } else { + this.loadTexture("/mob/spider_eyes.png"); + float var3 = (1.0F - var1.getEntityBrightness(1.0F)) * 0.5F; + GL11.glEnable(GL11.GL_BLEND); + GL11.glDisable(GL11.GL_ALPHA_TEST); + GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); + GL11.glColor4f(1.0F, 1.0F, 1.0F, var3); + return true; + } + } + + protected float getMaxDeathRotation(EntityLiving var1) { + return this.a((EntitySpider)var1); + } + + protected boolean shouldRenderPass(EntityLiving var1, int var2) { + return this.a((EntitySpider)var1, var2); + } +} diff --git a/src/net/minecraft/src/RenderTNTPrimed.java b/src/net/minecraft/src/RenderTNTPrimed.java new file mode 100644 index 0000000..b93ef70 --- /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 a(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.renderBlockOnInventory(Block.tnt); + 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.renderBlockOnInventory(Block.tnt); + 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.a((EntityTNTPrimed)var1, var2, var4, var6, var8, var9); + } +} diff --git a/src/net/minecraft/src/ScaledResolution.java b/src/net/minecraft/src/ScaledResolution.java new file mode 100644 index 0000000..7d6ed74 --- /dev/null +++ b/src/net/minecraft/src/ScaledResolution.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class ScaledResolution { + private int scaledWidth; + private int scaledHeight; + + public ScaledResolution(int var1, int var2) { + this.scaledWidth = var1; + this.scaledHeight = var2; + + int var3; + for(var3 = 1; this.scaledWidth / (var3 + 1) >= 320 && this.scaledHeight / (var3 + 1) >= 240; ++var3) { + } + + this.scaledWidth /= var3; + this.scaledHeight /= var3; + } + + public int getScaledWidth() { + return this.scaledWidth; + } + + public int getScaledHeight() { + return this.scaledHeight; + } +} diff --git a/src/net/minecraft/src/Session.java b/src/net/minecraft/src/Session.java new file mode 100644 index 0000000..853aa65 --- /dev/null +++ b/src/net/minecraft/src/Session.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class Session { + public static List registeredBlocksList = new ArrayList(); + public String username; + public String sessionId; + public String mpPassParameter; + + public Session(String var1, String var2) { + this.username = var1; + this.sessionId = var2; + } + + static { + registeredBlocksList.add(Block.stone); + registeredBlocksList.add(Block.cobblestone); + registeredBlocksList.add(Block.brick); + registeredBlocksList.add(Block.dirt); + registeredBlocksList.add(Block.planks); + registeredBlocksList.add(Block.wood); + registeredBlocksList.add(Block.leaves); + registeredBlocksList.add(Block.torch); + registeredBlocksList.add(Block.stairSingle); + registeredBlocksList.add(Block.glass); + registeredBlocksList.add(Block.cobblestoneMossy); + registeredBlocksList.add(Block.sapling); + registeredBlocksList.add(Block.plantYellow); + registeredBlocksList.add(Block.plantRed); + registeredBlocksList.add(Block.mushroomBrown); + registeredBlocksList.add(Block.mushroomRed); + registeredBlocksList.add(Block.sand); + registeredBlocksList.add(Block.gravel); + registeredBlocksList.add(Block.sponge); + registeredBlocksList.add(Block.cloth); + registeredBlocksList.add(Block.oreCoal); + registeredBlocksList.add(Block.oreIron); + registeredBlocksList.add(Block.oreGold); + registeredBlocksList.add(Block.blockSteel); + registeredBlocksList.add(Block.blockGold); + registeredBlocksList.add(Block.bookshelf); + registeredBlocksList.add(Block.tnt); + registeredBlocksList.add(Block.obsidian); + System.out.println(registeredBlocksList.size()); + } +} diff --git a/src/net/minecraft/src/SignModel.java b/src/net/minecraft/src/SignModel.java new file mode 100644 index 0000000..9325b7b --- /dev/null +++ b/src/net/minecraft/src/SignModel.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class SignModel { + public ModelRenderer signBoard = new ModelRenderer(0, 0); + public ModelRenderer signStick; + + public SignModel() { + this.signBoard.addBox(-12.0F, -14.0F, -1.0F, 24, 12, 2, 0.0F); + this.signStick = new ModelRenderer(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/Slot.java b/src/net/minecraft/src/Slot.java new file mode 100644 index 0000000..543f4ca --- /dev/null +++ b/src/net/minecraft/src/Slot.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +public class Slot { + public final int slotIndex; + public final int xDisplayPosition; + public final int yDisplayPosition; + public final IInventory inventory; + private final GuiContainer inventoryGui; + + public Slot(GuiContainer var1, IInventory var2, int var3, int var4, int var5) { + this.inventoryGui = var1; + this.inventory = var2; + this.slotIndex = var3; + this.xDisplayPosition = var4; + this.yDisplayPosition = var5; + } + + public boolean getIsMouseOverSlot(int var1, int var2) { + int var3 = (this.inventoryGui.width - this.inventoryGui.xSize) / 2; + int var4 = (this.inventoryGui.height - this.inventoryGui.ySize) / 2; + var1 -= var3; + var2 -= var4; + return var1 >= this.xDisplayPosition - 1 && var1 < this.xDisplayPosition + 16 + 1 && var2 >= this.yDisplayPosition - 1 && var2 < this.yDisplayPosition + 16 + 1; + } + + public void onPickupFromSlot() { + this.onSlotChanged(); + } + + public boolean isItemValid(ItemStack var1) { + return true; + } + + public ItemStack getStack() { + return this.inventory.getStackInSlot(this.slotIndex); + } + + public void putStack(ItemStack var1) { + this.inventory.setInventorySlotContents(this.slotIndex, var1); + this.onSlotChanged(); + } + + public int getBackgroundIconIndex() { + return -1; + } + + public void onSlotChanged() { + this.inventory.onInventoryChanged(); + } +} diff --git a/src/net/minecraft/src/SlotArmor.java b/src/net/minecraft/src/SlotArmor.java new file mode 100644 index 0000000..cf2689f --- /dev/null +++ b/src/net/minecraft/src/SlotArmor.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +class SlotArmor extends Slot { + final int armorType; + final GuiInventory guiInventory; + + SlotArmor(GuiInventory var1, GuiContainer var2, IInventory var3, int var4, int var5, int var6, int var7) { + super(var2, var3, var4, var5, var6); + this.guiInventory = var1; + this.armorType = var7; + } + + public boolean isItemValid(ItemStack var1) { + return var1.getItem() instanceof ItemArmor ? ((ItemArmor)var1.getItem()).armorType == this.armorType : false; + } + + public int getBackgroundIconIndex() { + return 15 + this.armorType * 16; + } +} diff --git a/src/net/minecraft/src/SlotCrafting.java b/src/net/minecraft/src/SlotCrafting.java new file mode 100644 index 0000000..4a49dc1 --- /dev/null +++ b/src/net/minecraft/src/SlotCrafting.java @@ -0,0 +1,23 @@ +package net.minecraft.src; + +class SlotCrafting extends Slot { + private final IInventory craftMatrix; + + public SlotCrafting(GuiContainer var1, IInventory var2, IInventory var3, int var4, int var5, int var6) { + super(var1, var3, var4, var5, var6); + this.craftMatrix = var2; + } + + public boolean isItemValid(ItemStack var1) { + return false; + } + + public void onPickupFromSlot() { + for(int var1 = 0; var1 < this.craftMatrix.getSizeInventory(); ++var1) { + if(this.craftMatrix.getStackInSlot(var1) != null) { + this.craftMatrix.decrStackSize(var1, 1); + } + } + + } +} diff --git a/src/net/minecraft/src/SoundManager.java b/src/net/minecraft/src/SoundManager.java new file mode 100644 index 0000000..17d5492 --- /dev/null +++ b/src/net/minecraft/src/SoundManager.java @@ -0,0 +1,138 @@ +package net.minecraft.src; + +import java.io.File; +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 SoundSystem sndSystem; + private SoundPool soundPoolSounds = new SoundPool(); + private SoundPool soundPoolMusic = new SoundPool(); + private int latestSoundID = 0; + private GameSettings options; + private boolean loaded = false; + + public void loadSoundSettings(GameSettings var1) { + this.options = var1; + if(!this.loaded && (var1.sound || var1.music)) { + this.tryToSetLibraryAndCodecs(); + } + + } + + private void tryToSetLibraryAndCodecs() { + try { + boolean var1 = this.options.sound; + boolean var2 = this.options.music; + this.options.sound = false; + this.options.music = false; + this.options.saveOptions(); + SoundSystemConfig.addLibrary(LibraryLWJGLOpenAL.class); + SoundSystemConfig.setCodec("ogg", CodecJOrbis.class); + SoundSystemConfig.setCodec("wav", CodecWav.class); + this.sndSystem = new SoundSystem(); + this.options.sound = var1; + this.options.music = var2; + this.options.saveOptions(); + } catch (Throwable var3) { + System.err.println("error linking with the LibraryJavaSound plug-in"); + } + + this.loaded = true; + } + + public void onSoundOptionsChanged() { + if(!this.loaded && (this.options.sound || this.options.music)) { + this.tryToSetLibraryAndCodecs(); + } + + if(!this.options.music) { + this.sndSystem.stop("BgMusic"); + } + + } + + public void closeMinecraft() { + if(this.loaded) { + this.sndSystem.cleanup(); + } + + } + + public void addSound(String var1, File var2) { + this.soundPoolSounds.addSound(var1, var2); + } + + public void addMusic(String var1, File var2) { + this.soundPoolMusic.addSound(var1, var2); + } + + public void setListener(EntityLiving var1, float var2) { + if(this.loaded && this.options.sound) { + 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 = MathHelper.cos(-var3 * ((float)Math.PI / 180.0F)); + float var14 = MathHelper.sin(-var3 * ((float)Math.PI / 180.0F)); + float var15 = -var12 * var13; + float var17 = -var11 * var13; + float var18 = -var12 * var14; + float var20 = -var11 * var14; + this.sndSystem.setListenerPosition((float)var5, (float)var7, (float)var9); + this.sndSystem.setListenerOrientation(var15, var14, var17, var18, var13, var20); + } + } + } + + public void playSound(String var1, float var2, float var3, float var4, float var5, float var6) { + if(this.loaded && this.options.sound) { + 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; + } + + this.sndSystem.newSource(var5 > 1.0F, var8, var7.soundUrl, var7.soundName, false, var2, var3, var4, 2, var9); + this.sndSystem.setPitch(var8, var6); + if(var5 > 1.0F) { + var5 = 1.0F; + } + + this.sndSystem.setVolume(var8, var5); + this.sndSystem.play(var8); + } + + } + } + + public void playSoundFX(String var1, float var2, float var3) { + if(this.loaded && this.options.sound) { + SoundPoolEntry var4 = this.soundPoolSounds.getRandomSoundFromSoundPool(var1); + if(var4 != null) { + this.latestSoundID = (this.latestSoundID + 1) % 256; + String var5 = "sound_" + this.latestSoundID; + this.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; + this.sndSystem.setPitch(var5, var3); + this.sndSystem.setVolume(var5, var2); + this.sndSystem.play(var5); + } + + } + } +} diff --git a/src/net/minecraft/src/SoundPool.java b/src/net/minecraft/src/SoundPool.java new file mode 100644 index 0000000..ab70ae6 --- /dev/null +++ b/src/net/minecraft/src/SoundPool.java @@ -0,0 +1,42 @@ +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(); + public int numberOfSoundPoolEntries = 0; + + public SoundPoolEntry addSound(String var1, File var2) { + try { + String var3 = var1; + + for(var1 = var1.substring(0, var1.indexOf(".")); 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.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())); + } +} 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/SpawnerAnimals.java b/src/net/minecraft/src/SpawnerAnimals.java new file mode 100644 index 0000000..8acc13f --- /dev/null +++ b/src/net/minecraft/src/SpawnerAnimals.java @@ -0,0 +1,97 @@ +package net.minecraft.src; + +public class SpawnerAnimals { + private int maxSpawns; + private Class entityType; + private Class[] entities; + + public SpawnerAnimals(int var1, Class var2, Class[] var3) { + this.maxSpawns = var1; + this.entityType = var2; + this.entities = var3; + } + + public void onUpdate(World var1) { + int var2 = var1.countEntities(this.entityType); + if(var2 < this.maxSpawns) { + for(int var3 = 0; var3 < 10; ++var3) { + this.performSpawning(var1, 1, var1.playerEntity, (IProgressUpdate)null); + } + } + + } + + protected ChunkPosition getRandomSpawningPointInChunk(World var1, int var2, int var3) { + int var4 = var2 + var1.rand.nextInt(256) - 128; + int var5 = var1.rand.nextInt(128); + int var6 = var3 + var1.rand.nextInt(256) - 128; + return new ChunkPosition(var4, var5, var6); + } + + private int performSpawning(World var1, int var2, Entity var3, IProgressUpdate var4) { + int var5 = 0; + int var6 = MathHelper.floor_double(var3.posX); + int var7 = MathHelper.floor_double(var3.posZ); + int var8 = var1.rand.nextInt(this.entities.length); + ChunkPosition var9 = this.getRandomSpawningPointInChunk(var1, var6, var7); + int var10 = var9.x; + int var11 = var9.y; + int var12 = var9.z; + if(var1.isBlockNormalCube(var10, var11, var12)) { + return 0; + } else if(var1.getBlockMaterial(var10, var11, var12) != Material.air) { + return 0; + } else { + for(int var13 = 0; var13 < 3; ++var13) { + int var14 = var10; + int var15 = var11; + int var16 = var12; + byte var17 = 6; + + for(int var18 = 0; var18 < 3; ++var18) { + var14 += var1.rand.nextInt(var17) - var1.rand.nextInt(var17); + var15 += var1.rand.nextInt(1) - var1.rand.nextInt(1); + var16 += var1.rand.nextInt(var17) - var1.rand.nextInt(var17); + if(var1.isBlockNormalCube(var14, var15 - 1, var16) && !var1.isBlockNormalCube(var14, var15, var16) && !var1.getBlockMaterial(var14, var15, var16).getIsLiquid() && !var1.isBlockNormalCube(var14, var15 + 1, var16)) { + float var19 = (float)var14 + 0.5F; + float var20 = (float)var15 + 1.0F; + float var21 = (float)var16 + 0.5F; + if(var3 != null) { + double var22 = (double)var19 - var3.posX; + double var24 = (double)var20 - var3.posY; + double var26 = (double)var21 - var3.posZ; + double var28 = var22 * var22 + var24 * var24 + var26 * var26; + if(var28 < 1024.0D) { + continue; + } + } else { + float var31 = var19 - (float)var1.spawnX; + float var23 = var20 - (float)var1.spawnY; + float var33 = var21 - (float)var1.spawnZ; + float var25 = var31 * var31 + var23 * var23 + var33 * var33; + if(var25 < 1024.0F) { + continue; + } + } + + EntityLiving var32; + try { + var32 = (EntityLiving)this.entities[var8].getConstructor(new Class[]{World.class}).newInstance(new Object[]{var1}); + } catch (Exception var30) { + var30.printStackTrace(); + return var5; + } + + var32.setPositionAndRotation((double)var19, (double)var20, (double)var21, var1.rand.nextFloat() * 360.0F, 0.0F); + if(var32.getCanSpawnHere((double)var19, (double)var20, (double)var21)) { + ++var5; + var1.spawnEntityInWorld(var32); + } + } + } + } + + return var5; + } + } +} diff --git a/src/net/minecraft/src/SpawnerMonsters.java b/src/net/minecraft/src/SpawnerMonsters.java new file mode 100644 index 0000000..d253214 --- /dev/null +++ b/src/net/minecraft/src/SpawnerMonsters.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +class SpawnerMonsters extends SpawnerAnimals { + final PlayerControllerSP playerController; + + SpawnerMonsters(PlayerControllerSP var1, int var2, Class var3, Class[] var4) { + super(var2, var3, var4); + this.playerController = var1; + } + + protected ChunkPosition getRandomSpawningPointInChunk(World var1, int var2, int var3) { + int var4 = var2 + var1.rand.nextInt(256) - 128; + int var5 = var1.rand.nextInt(var1.rand.nextInt(var1.rand.nextInt(112) + 8) + 8); + int var6 = var3 + var1.rand.nextInt(256) - 128; + return new ChunkPosition(var4, var5, var6); + } +} diff --git a/src/net/minecraft/src/StepSound.java b/src/net/minecraft/src/StepSound.java new file mode 100644 index 0000000..ad50bb0 --- /dev/null +++ b/src/net/minecraft/src/StepSound.java @@ -0,0 +1,29 @@ +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 "step." + this.stepSoundName; + } + + public String getStepSound() { + return "step." + this.stepSoundName; + } +} diff --git a/src/net/minecraft/src/StepSoundGlass.java b/src/net/minecraft/src/StepSoundGlass.java new file mode 100644 index 0000000..a7f7d81 --- /dev/null +++ b/src/net/minecraft/src/StepSoundGlass.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +final class StepSoundGlass extends StepSound { + StepSoundGlass(String var1, float var2, float var3) { + super(var1, var2, var3); + } + + public String getBreakSound() { + return "random.glass"; + } +} diff --git a/src/net/minecraft/src/StepSoundSand.java b/src/net/minecraft/src/StepSoundSand.java new file mode 100644 index 0000000..f1e2705 --- /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 "step.gravel"; + } +} diff --git a/src/net/minecraft/src/TerrainTextureManager.java b/src/net/minecraft/src/TerrainTextureManager.java new file mode 100644 index 0000000..e6acf43 --- /dev/null +++ b/src/net/minecraft/src/TerrainTextureManager.java @@ -0,0 +1,214 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import java.util.Arrays; +import javax.imageio.ImageIO; + +public class TerrainTextureManager { + private float[] texCols = new float[768]; + private int[] pixels = new int[5120]; + private int[] zBuf = new int[5120]; + private int[] waterBuf = new int[5120]; + private int[] waterBr = new int[5120]; + private int[] yBuf = new int[34]; + private int[] textures = new int[768]; + + public TerrainTextureManager() { + try { + BufferedImage var1 = ImageIO.read(TerrainTextureManager.class.getResource("/terrain.png")); + int[] var2 = new int[65536]; + var1.getRGB(0, 0, 256, 256, var2, 0, 256); + + for(int var3 = 0; var3 < 256; ++var3) { + int var4 = 0; + int var5 = 0; + int var6 = 0; + int var7 = var3 % 16 * 16; + int var8 = var3 / 16 * 16; + int var9 = 0; + + for(int var10 = 0; var10 < 16; ++var10) { + for(int var11 = 0; var11 < 16; ++var11) { + int var12 = var2[var11 + var7 + (var10 + var8) * 256]; + int var13 = var12 >> 24 & 255; + if(var13 > 128) { + var4 += var12 >> 16 & 255; + var5 += var12 >> 8 & 255; + var6 += var12 & 255; + ++var9; + } + } + + if(var9 == 0) { + ++var9; + } + + this.texCols[var3 * 3 + 0] = (float)(var4 / var9); + this.texCols[var3 * 3 + 1] = (float)(var5 / var9); + this.texCols[var3 * 3 + 2] = (float)(var6 / var9); + } + } + } catch (IOException var14) { + var14.printStackTrace(); + } + + for(int var15 = 0; var15 < 256; ++var15) { + if(Block.blocksList[var15] != null) { + this.textures[var15 * 3 + 0] = Block.blocksList[var15].getBlockTextureFromSide(1); + this.textures[var15 * 3 + 1] = Block.blocksList[var15].getBlockTextureFromSide(2); + this.textures[var15 * 3 + 2] = Block.blocksList[var15].getBlockTextureFromSide(3); + } + } + + } + + public void render(IsoImageBuffer var1) { + World var2 = var1.level; + if(var2 == null) { + var1.noContent = true; + var1.rendered = true; + } else { + int var3 = var1.chunkX * 16; + int var4 = var1.chunkZ * 16; + int var5 = var3 + 16; + int var6 = var4 + 16; + Chunk var7 = var2.getChunkFromChunkCoords(var1.chunkX, var1.chunkZ); + if(var7.isChunkRendered) { + var1.noContent = true; + var1.rendered = true; + } else { + var1.noContent = false; + Arrays.fill(this.zBuf, 0); + Arrays.fill(this.waterBuf, 0); + Arrays.fill(this.yBuf, 160); + + for(int var8 = var6 - 1; var8 >= var4; --var8) { + for(int var9 = var5 - 1; var9 >= var3; --var9) { + int var10 = var9 - var3; + int var11 = var8 - var4; + int var12 = var10 + var11; + boolean var13 = true; + + for(int var14 = 0; var14 < 128; ++var14) { + int var15 = var11 - var10 - var14 + 160 - 16; + if(var15 < this.yBuf[var12] || var15 < this.yBuf[var12 + 1]) { + Block var16 = Block.blocksList[var2.getBlockId(var9, var14, var8)]; + if(var16 == null) { + var13 = false; + } else if(var16.blockMaterial == Material.water) { + int var24 = var2.getBlockId(var9, var14 + 1, var8); + if(var24 == 0 || Block.blocksList[var24].blockMaterial != Material.water) { + float var25 = (float)var14 / 127.0F * 0.6F + 0.4F; + float var26 = var2.getBrightness(var9, var14 + 1, var8) * var25; + if(var15 >= 0 && var15 < 160) { + int var27 = var12 + var15 * 32; + if(var12 >= 0 && var12 <= 32 && this.waterBuf[var27] <= var14) { + this.waterBuf[var27] = var14; + this.waterBr[var27] = (int)(var26 * 127.0F); + } + + if(var12 >= -1 && var12 <= 31 && this.waterBuf[var27 + 1] <= var14) { + this.waterBuf[var27 + 1] = var14; + this.waterBr[var27 + 1] = (int)(var26 * 127.0F); + } + + var13 = false; + } + } + } else { + if(var13) { + if(var15 < this.yBuf[var12]) { + this.yBuf[var12] = var15; + } + + if(var15 < this.yBuf[var12 + 1]) { + this.yBuf[var12 + 1] = var15; + } + } + + float var17 = (float)var14 / 127.0F * 0.6F + 0.4F; + int var18; + int var19; + float var20; + float var22; + if(var15 >= 0 && var15 < 160) { + var18 = var12 + var15 * 32; + var19 = this.textures[var16.blockID * 3 + 0]; + var20 = (var2.getBrightness(var9, var14 + 1, var8) * 0.8F + 0.2F) * var17; + if(var12 >= 0 && this.zBuf[var18] <= var14) { + this.zBuf[var18] = var14; + this.pixels[var18] = -16777216 | (int)(this.texCols[var19 * 3 + 0] * var20) << 16 | (int)(this.texCols[var19 * 3 + 1] * var20) << 8 | (int)(this.texCols[var19 * 3 + 2] * var20); + } + + if(var12 < 31) { + var22 = var20 * 0.9F; + if(this.zBuf[var18 + 1] <= var14) { + this.zBuf[var18 + 1] = var14; + this.pixels[var18 + 1] = -16777216 | (int)(this.texCols[var19 * 3 + 0] * var22) << 16 | (int)(this.texCols[var19 * 3 + 1] * var22) << 8 | (int)(this.texCols[var19 * 3 + 2] * var22); + } + } + } + + if(var15 >= -1 && var15 < 159) { + var18 = var12 + (var15 + 1) * 32; + var19 = this.textures[var16.blockID * 3 + 1]; + var20 = var2.getBrightness(var9 - 1, var14, var8) * 0.8F + 0.2F; + int var21 = this.textures[var16.blockID * 3 + 2]; + var22 = var2.getBrightness(var9, var14, var8 + 1) * 0.8F + 0.2F; + float var23; + if(var12 >= 0) { + var23 = var20 * var17 * 0.6F; + if(this.zBuf[var18] <= var14 - 1) { + this.zBuf[var18] = var14 - 1; + this.pixels[var18] = -16777216 | (int)(this.texCols[var19 * 3 + 0] * var23) << 16 | (int)(this.texCols[var19 * 3 + 1] * var23) << 8 | (int)(this.texCols[var19 * 3 + 2] * var23); + } + } + + if(var12 < 31) { + var23 = var22 * 0.9F * var17 * 0.4F; + if(this.zBuf[var18 + 1] <= var14 - 1) { + this.zBuf[var18 + 1] = var14 - 1; + this.pixels[var18 + 1] = -16777216 | (int)(this.texCols[var21 * 3 + 0] * var23) << 16 | (int)(this.texCols[var21 * 3 + 1] * var23) << 8 | (int)(this.texCols[var21 * 3 + 2] * var23); + } + } + } + } + } + } + } + } + + this.postProcess(); + if(var1.image == null) { + var1.image = new BufferedImage(32, 160, 2); + } + + var1.image.setRGB(0, 0, 32, 160, this.pixels, 0, 32); + var1.rendered = true; + } + } + } + + private void postProcess() { + for(int var1 = 0; var1 < 32; ++var1) { + for(int var2 = 0; var2 < 160; ++var2) { + int var3 = var1 + var2 * 32; + if(this.zBuf[var3] == 0) { + this.pixels[var3] = 0; + } + + if(this.waterBuf[var3] > this.zBuf[var3]) { + int var4 = this.pixels[var3] >> 24 & 255; + this.pixels[var3] = ((this.pixels[var3] & 16711422) >> 1) + this.waterBr[var3]; + if(var4 < 128) { + this.pixels[var3] = Integer.MIN_VALUE + this.waterBr[var3] * 2; + } else { + this.pixels[var3] |= -16777216; + } + } + } + } + + } +} diff --git a/src/net/minecraft/src/Tessellator.java b/src/net/minecraft/src/Tessellator.java new file mode 100644 index 0000000..0ca7e03 --- /dev/null +++ b/src/net/minecraft/src/Tessellator.java @@ -0,0 +1,298 @@ +package net.minecraft.src; + +import java.nio.ByteBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +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 = true; + private static boolean tryVBO = false; + private ByteBuffer byteBuffer; + private IntBuffer intBuffer; + private FloatBuffer floatBuffer; + private int[] rawBuffer; + private int vertexCount = 0; + private double textureU; + private double textureV; + private int color; + private boolean hasColor = false; + private boolean hasTexture = 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.rawBuffer = new int[var1]; + this.useVBO = tryVBO && GLContext.getCapabilities().GL_ARB_vertex_buffer_object; + if(this.useVBO) { + this.vertexBuffers = GLAllocation.createIntBuffer(this.vboCount); + ARBVertexBufferObject.glGenBuffersARB(this.vertexBuffers); + } + + } + + public void 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.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_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.hasColor) { + GL11.glDisableClientState(GL11.GL_COLOR_ARRAY); + } + + if(this.hasNormals) { + GL11.glDisableClientState(GL11.GL_NORMAL_ARRAY); + } + } + + this.reset(); + } + } + + 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.isColorDisabled = false; + } + } + + public void setTextureUV(double var1, double var3) { + this.hasTexture = true; + this.textureU = var1; + this.textureV = var3; + } + + 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; + this.color = var4 << 24 | var3 << 16 | var2 << 8 | var1; + } + } + + 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.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.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 disableColor() { + this.isColorDisabled = true; + } + + public void setNormal(float var1, float var2, float var3) { + if(!this.isDrawing) { + System.out.println("But.."); + } + + this.hasNormals = true; + byte var4 = (byte)((int)(var1 * 128.0F)); + byte var5 = (byte)((int)(var2 * 127.0F)); + byte var6 = (byte)((int)(var3 * 127.0F)); + this.normal = var4 | var5 << 8 | var6 << 16; + } + + public void setTranslationD(double var1, double var3, double var5) { + this.xOffset = var1; + this.yOffset = var3; + this.zOffset = var5; + } +} diff --git a/src/net/minecraft/src/TextureFX.java b/src/net/minecraft/src/TextureFX.java new file mode 100644 index 0000000..0396745 --- /dev/null +++ b/src/net/minecraft/src/TextureFX.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +public class TextureFX { + public byte[] imageData = new byte[1024]; + public int iconIndex; + public boolean anaglyphEnabled = false; + public int textureId = 0; + public int tileSize = 1; + + public TextureFX(int var1) { + this.iconIndex = var1; + } + + public void onTick() { + } +} diff --git a/src/net/minecraft/src/TextureFlamesFX.java b/src/net/minecraft/src/TextureFlamesFX.java new file mode 100644 index 0000000..9ddc148 --- /dev/null +++ b/src/net/minecraft/src/TextureFlamesFX.java @@ -0,0 +1,77 @@ +package net.minecraft.src; + +public class TextureFlamesFX extends TextureFX { + protected float[] currentFireFrame = new float[320]; + protected float[] lastFireFrame = new float[320]; + + public TextureFlamesFX(int var1) { + super(Block.fire.blockIndexInTexture + var1 * 16); + } + + public void onTick() { + int var2; + float var4; + int var5; + int var6; + for(int var1 = 0; var1 < 16; ++var1) { + for(var2 = 0; var2 < 20; ++var2) { + int var3 = 18; + var4 = this.currentFireFrame[var1 + (var2 + 1) % 20 * 16] * (float)var3; + + for(var5 = var1 - 1; var5 <= var1 + 1; ++var5) { + for(var6 = var2; var6 <= var2 + 1; ++var6) { + if(var5 >= 0 && var6 >= 0 && var5 < 16 && var6 < 20) { + var4 += this.currentFireFrame[var5 + var6 * 16]; + } + + ++var3; + } + } + + this.lastFireFrame[var1 + var2 * 16] = var4 / ((float)var3 * 1.06F); + if(var2 >= 19) { + this.lastFireFrame[var1 + var2 * 16] = (float)(Math.random() * Math.random() * Math.random() * 4.0D + Math.random() * (double)0.1F + (double)0.2F); + } + } + } + + float[] var12 = this.lastFireFrame; + this.lastFireFrame = this.currentFireFrame; + this.currentFireFrame = var12; + + for(var2 = 0; var2 < 256; ++var2) { + float var13 = this.currentFireFrame[var2] * 1.8F; + if(var13 > 1.0F) { + var13 = 1.0F; + } + + if(var13 < 0.0F) { + var13 = 0.0F; + } + + var5 = (int)(var13 * 155.0F + 100.0F); + var6 = (int)(var13 * var13 * 255.0F); + int var7 = (int)(var13 * var13 * var13 * var13 * var13 * var13 * var13 * var13 * var13 * var13 * 255.0F); + short var8 = 255; + if(var13 < 0.5F) { + var8 = 0; + } + + var4 = (var13 - 0.5F) * 2.0F; + if(this.anaglyphEnabled) { + int var9 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; + int var10 = (var5 * 30 + var6 * 70) / 100; + int var11 = (var5 * 30 + var7 * 70) / 100; + var5 = var9; + var6 = var10; + var7 = var11; + } + + this.imageData[var2 * 4 + 0] = (byte)var5; + this.imageData[var2 * 4 + 1] = (byte)var6; + this.imageData[var2 * 4 + 2] = (byte)var7; + this.imageData[var2 * 4 + 3] = (byte)var8; + } + + } +} diff --git a/src/net/minecraft/src/TextureGearsFX.java b/src/net/minecraft/src/TextureGearsFX.java new file mode 100644 index 0000000..17138a5 --- /dev/null +++ b/src/net/minecraft/src/TextureGearsFX.java @@ -0,0 +1,65 @@ +package net.minecraft.src; + +import java.awt.image.BufferedImage; +import java.io.IOException; +import javax.imageio.ImageIO; + +public class TextureGearsFX extends TextureFX { + private int gearRotation = 0; + private int[] gearColor = new int[1024]; + private int[] gearMiddleColor = new int[1024]; + private int gearRotationDir; + + public TextureGearsFX(int var1) { + super(Block.cog.blockIndexInTexture + var1); + this.gearRotationDir = var1 * 2 - 1; + this.gearRotation = 2; + + try { + BufferedImage var2 = ImageIO.read(TextureGearsFX.class.getResource("/misc/gear.png")); + var2.getRGB(0, 0, 32, 32, this.gearColor, 0, 32); + var2 = ImageIO.read(TextureGearsFX.class.getResource("/misc/gearmiddle.png")); + var2.getRGB(0, 0, 16, 16, this.gearMiddleColor, 0, 16); + } catch (IOException var3) { + var3.printStackTrace(); + } + + } + + public void onTick() { + this.gearRotation = this.gearRotation + this.gearRotationDir & 63; + float var1 = MathHelper.sin((float)this.gearRotation / 64.0F * (float)Math.PI * 2.0F); + float var2 = MathHelper.cos((float)this.gearRotation / 64.0F * (float)Math.PI * 2.0F); + + for(int var3 = 0; var3 < 16; ++var3) { + for(int var4 = 0; var4 < 16; ++var4) { + float var5 = ((float)var3 / 15.0F - 0.5F) * 31.0F; + float var6 = ((float)var4 / 15.0F - 0.5F) * 31.0F; + float var7 = var2 * var5 - var1 * var6; + float var8 = var2 * var6 + var1 * var5; + int var9 = (int)(var7 + 16.0F); + int var10 = (int)(var8 + 16.0F); + int var11 = 0; + int var12; + if(var9 >= 0 && var10 >= 0 && var9 < 32 && var10 < 32) { + var11 = this.gearColor[var9 + var10 * 32]; + var12 = this.gearMiddleColor[var3 + var4 * 16]; + if((var12 >> 24 & 255) > 128) { + var11 = var12; + } + } + + var12 = var11 >> 16 & 255; + int var13 = var11 >> 8 & 255; + int var14 = var11 & 255; + int var15 = (var11 >> 24 & 255) > 128 ? 255 : 0; + int var16 = var3 + var4 * 16; + this.imageData[var16 * 4 + 0] = (byte)var12; + this.imageData[var16 * 4 + 1] = (byte)var13; + this.imageData[var16 * 4 + 2] = (byte)var14; + this.imageData[var16 * 4 + 3] = (byte)var15; + } + } + + } +} diff --git a/src/net/minecraft/src/TextureLavaFX.java b/src/net/minecraft/src/TextureLavaFX.java new file mode 100644 index 0000000..c4d9c4c --- /dev/null +++ b/src/net/minecraft/src/TextureLavaFX.java @@ -0,0 +1,81 @@ +package net.minecraft.src; + +public class TextureLavaFX extends TextureFX { + protected float[] red = new float[256]; + protected float[] green = new float[256]; + protected float[] blue = new float[256]; + protected float[] alpha = new float[256]; + + public TextureLavaFX() { + super(Block.lavaMoving.blockIndexInTexture); + } + + public void onTick() { + int var2; + float var3; + int var5; + int var6; + int var7; + int var8; + int var9; + for(int var1 = 0; var1 < 16; ++var1) { + for(var2 = 0; var2 < 16; ++var2) { + var3 = 0.0F; + int var4 = (int)(MathHelper.sin((float)var2 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); + var5 = (int)(MathHelper.sin((float)var1 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); + + for(var6 = var1 - 1; var6 <= var1 + 1; ++var6) { + for(var7 = var2 - 1; var7 <= var2 + 1; ++var7) { + var8 = var6 + var4 & 15; + var9 = var7 + var5 & 15; + var3 += this.red[var8 + var9 * 16]; + } + } + + this.green[var1 + var2 * 16] = var3 / 10.0F + (this.blue[(var1 + 0 & 15) + (var2 + 0 & 15) * 16] + this.blue[(var1 + 1 & 15) + (var2 + 0 & 15) * 16] + this.blue[(var1 + 1 & 15) + (var2 + 1 & 15) * 16] + this.blue[(var1 + 0 & 15) + (var2 + 1 & 15) * 16]) / 4.0F * 0.8F; + this.blue[var1 + var2 * 16] += this.alpha[var1 + var2 * 16] * 0.01F; + if(this.blue[var1 + var2 * 16] < 0.0F) { + this.blue[var1 + var2 * 16] = 0.0F; + } + + this.alpha[var1 + var2 * 16] -= 0.06F; + if(Math.random() < 0.005D) { + this.alpha[var1 + var2 * 16] = 1.5F; + } + } + } + + float[] var11 = this.green; + this.green = this.red; + this.red = var11; + + for(var2 = 0; var2 < 256; ++var2) { + var3 = this.red[var2] * 2.0F; + if(var3 > 1.0F) { + var3 = 1.0F; + } + + if(var3 < 0.0F) { + var3 = 0.0F; + } + + var5 = (int)(var3 * 100.0F + 155.0F); + var6 = (int)(var3 * var3 * 255.0F); + var7 = (int)(var3 * var3 * var3 * var3 * 128.0F); + if(this.anaglyphEnabled) { + var8 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; + var9 = (var5 * 30 + var6 * 70) / 100; + int var10 = (var5 * 30 + var7 * 70) / 100; + var5 = var8; + var6 = var9; + var7 = var10; + } + + this.imageData[var2 * 4 + 0] = (byte)var5; + this.imageData[var2 * 4 + 1] = (byte)var6; + this.imageData[var2 * 4 + 2] = (byte)var7; + this.imageData[var2 * 4 + 3] = -1; + } + + } +} diff --git a/src/net/minecraft/src/TextureLavaFlowFX.java b/src/net/minecraft/src/TextureLavaFlowFX.java new file mode 100644 index 0000000..8d91375 --- /dev/null +++ b/src/net/minecraft/src/TextureLavaFlowFX.java @@ -0,0 +1,85 @@ +package net.minecraft.src; + +public class TextureLavaFlowFX extends TextureFX { + protected float[] red = new float[256]; + protected float[] green = new float[256]; + protected float[] blue = new float[256]; + protected float[] alpha = new float[256]; + int tickCounter = 0; + + public TextureLavaFlowFX() { + super(Block.lavaMoving.blockIndexInTexture + 1); + this.tileSize = 2; + } + + public void onTick() { + ++this.tickCounter; + + int var2; + float var3; + int var5; + int var6; + int var7; + int var8; + int var9; + for(int var1 = 0; var1 < 16; ++var1) { + for(var2 = 0; var2 < 16; ++var2) { + var3 = 0.0F; + int var4 = (int)(MathHelper.sin((float)var2 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); + var5 = (int)(MathHelper.sin((float)var1 * (float)Math.PI * 2.0F / 16.0F) * 1.2F); + + for(var6 = var1 - 1; var6 <= var1 + 1; ++var6) { + for(var7 = var2 - 1; var7 <= var2 + 1; ++var7) { + var8 = var6 + var4 & 15; + var9 = var7 + var5 & 15; + var3 += this.red[var8 + var9 * 16]; + } + } + + this.green[var1 + var2 * 16] = var3 / 10.0F + (this.blue[(var1 + 0 & 15) + (var2 + 0 & 15) * 16] + this.blue[(var1 + 1 & 15) + (var2 + 0 & 15) * 16] + this.blue[(var1 + 1 & 15) + (var2 + 1 & 15) * 16] + this.blue[(var1 + 0 & 15) + (var2 + 1 & 15) * 16]) / 4.0F * 0.8F; + this.blue[var1 + var2 * 16] += this.alpha[var1 + var2 * 16] * 0.01F; + if(this.blue[var1 + var2 * 16] < 0.0F) { + this.blue[var1 + var2 * 16] = 0.0F; + } + + this.alpha[var1 + var2 * 16] -= 0.06F; + if(Math.random() < 0.005D) { + this.alpha[var1 + var2 * 16] = 1.5F; + } + } + } + + float[] var11 = this.green; + this.green = this.red; + this.red = var11; + + for(var2 = 0; var2 < 256; ++var2) { + var3 = this.red[var2 - this.tickCounter / 3 * 16 & 255] * 2.0F; + if(var3 > 1.0F) { + var3 = 1.0F; + } + + if(var3 < 0.0F) { + var3 = 0.0F; + } + + var5 = (int)(var3 * 100.0F + 155.0F); + var6 = (int)(var3 * var3 * 255.0F); + var7 = (int)(var3 * var3 * var3 * var3 * 128.0F); + if(this.anaglyphEnabled) { + var8 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; + var9 = (var5 * 30 + var6 * 70) / 100; + int var10 = (var5 * 30 + var7 * 70) / 100; + var5 = var8; + var6 = var9; + var7 = var10; + } + + this.imageData[var2 * 4 + 0] = (byte)var5; + this.imageData[var2 * 4 + 1] = (byte)var6; + this.imageData[var2 * 4 + 2] = (byte)var7; + this.imageData[var2 * 4 + 3] = -1; + } + + } +} diff --git a/src/net/minecraft/src/TextureWaterFX.java b/src/net/minecraft/src/TextureWaterFX.java new file mode 100644 index 0000000..67a5040 --- /dev/null +++ b/src/net/minecraft/src/TextureWaterFX.java @@ -0,0 +1,85 @@ +package net.minecraft.src; + +public class TextureWaterFX extends TextureFX { + protected float[] red = new float[256]; + protected float[] green = new float[256]; + protected float[] blue = new float[256]; + protected float[] alpha = new float[256]; + private int tickCounter = 0; + + public TextureWaterFX() { + super(Block.waterMoving.blockIndexInTexture); + } + + public void onTick() { + ++this.tickCounter; + + int var1; + int var2; + float var3; + int var5; + int var6; + for(var1 = 0; var1 < 16; ++var1) { + for(var2 = 0; var2 < 16; ++var2) { + var3 = 0.0F; + + for(int var4 = var1 - 1; var4 <= var1 + 1; ++var4) { + var5 = var4 & 15; + var6 = var2 & 15; + var3 += this.red[var5 + var6 * 16]; + } + + this.green[var1 + var2 * 16] = var3 / 3.3F + this.blue[var1 + var2 * 16] * 0.8F; + } + } + + for(var1 = 0; var1 < 16; ++var1) { + for(var2 = 0; var2 < 16; ++var2) { + this.blue[var1 + var2 * 16] += this.alpha[var1 + var2 * 16] * 0.05F; + if(this.blue[var1 + var2 * 16] < 0.0F) { + this.blue[var1 + var2 * 16] = 0.0F; + } + + this.alpha[var1 + var2 * 16] -= 0.1F; + if(Math.random() < 0.05D) { + this.alpha[var1 + var2 * 16] = 0.5F; + } + } + } + + float[] var12 = this.green; + this.green = this.red; + this.red = var12; + + for(var2 = 0; var2 < 256; ++var2) { + var3 = this.red[var2]; + if(var3 > 1.0F) { + var3 = 1.0F; + } + + if(var3 < 0.0F) { + var3 = 0.0F; + } + + float var13 = var3 * var3; + var5 = (int)(32.0F + var13 * 32.0F); + var6 = (int)(50.0F + var13 * 64.0F); + int var7 = 255; + int var8 = (int)(146.0F + var13 * 50.0F); + if(this.anaglyphEnabled) { + int var9 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; + int var10 = (var5 * 30 + var6 * 70) / 100; + int var11 = (var5 * 30 + var7 * 70) / 100; + var5 = var9; + var6 = var10; + var7 = var11; + } + + this.imageData[var2 * 4 + 0] = (byte)var5; + this.imageData[var2 * 4 + 1] = (byte)var6; + this.imageData[var2 * 4 + 2] = (byte)var7; + this.imageData[var2 * 4 + 3] = (byte)var8; + } + + } +} diff --git a/src/net/minecraft/src/TextureWaterFlowFX.java b/src/net/minecraft/src/TextureWaterFlowFX.java new file mode 100644 index 0000000..668c17f --- /dev/null +++ b/src/net/minecraft/src/TextureWaterFlowFX.java @@ -0,0 +1,86 @@ +package net.minecraft.src; + +public class TextureWaterFlowFX extends TextureFX { + protected float[] red = new float[256]; + protected float[] green = new float[256]; + protected float[] blue = new float[256]; + protected float[] alpha = new float[256]; + private int tickCounter = 0; + + public TextureWaterFlowFX() { + super(Block.waterMoving.blockIndexInTexture + 1); + this.tileSize = 2; + } + + public void onTick() { + ++this.tickCounter; + + int var1; + int var2; + float var3; + int var5; + int var6; + for(var1 = 0; var1 < 16; ++var1) { + for(var2 = 0; var2 < 16; ++var2) { + var3 = 0.0F; + + for(int var4 = var2 - 2; var4 <= var2; ++var4) { + var5 = var1 & 15; + var6 = var4 & 15; + var3 += this.red[var5 + var6 * 16]; + } + + this.green[var1 + var2 * 16] = var3 / 3.2F + this.blue[var1 + var2 * 16] * 0.8F; + } + } + + for(var1 = 0; var1 < 16; ++var1) { + for(var2 = 0; var2 < 16; ++var2) { + this.blue[var1 + var2 * 16] += this.alpha[var1 + var2 * 16] * 0.05F; + if(this.blue[var1 + var2 * 16] < 0.0F) { + this.blue[var1 + var2 * 16] = 0.0F; + } + + this.alpha[var1 + var2 * 16] -= 0.3F; + if(Math.random() < 0.2D) { + this.alpha[var1 + var2 * 16] = 0.5F; + } + } + } + + float[] var12 = this.green; + this.green = this.red; + this.red = var12; + + for(var2 = 0; var2 < 256; ++var2) { + var3 = this.red[var2 - this.tickCounter * 16 & 255]; + if(var3 > 1.0F) { + var3 = 1.0F; + } + + if(var3 < 0.0F) { + var3 = 0.0F; + } + + float var13 = var3 * var3; + var5 = (int)(32.0F + var13 * 32.0F); + var6 = (int)(50.0F + var13 * 64.0F); + int var7 = 255; + int var8 = (int)(146.0F + var13 * 50.0F); + if(this.anaglyphEnabled) { + int var9 = (var5 * 30 + var6 * 59 + var7 * 11) / 100; + int var10 = (var5 * 30 + var6 * 70) / 100; + int var11 = (var5 * 30 + var7 * 70) / 100; + var5 = var9; + var6 = var10; + var7 = var11; + } + + this.imageData[var2 * 4 + 0] = (byte)var5; + this.imageData[var2 * 4 + 1] = (byte)var6; + this.imageData[var2 * 4 + 2] = (byte)var7; + this.imageData[var2 * 4 + 3] = (byte)var8; + } + + } +} diff --git a/src/net/minecraft/src/TexturedQuad.java b/src/net/minecraft/src/TexturedQuad.java new file mode 100644 index 0000000..60719d0 --- /dev/null +++ b/src/net/minecraft/src/TexturedQuad.java @@ -0,0 +1,47 @@ +package net.minecraft.src; + +public class TexturedQuad { + public PositionTextureVertex[] vertexPositions; + public int nVertices; + + public TexturedQuad(PositionTextureVertex[] var1) { + this.nVertices = 0; + this.vertexPositions = var1; + this.nVertices = var1.length; + } + + public TexturedQuad(PositionTextureVertex[] var1, int var2, int var3, int var4, int var5) { + this(var1); + float var6 = 0.0015625F; + float var7 = 0.003125F; + var1[0] = var1[0].setTexturePosition((float)var4 / 64.0F - var6, (float)var3 / 32.0F + var7); + var1[1] = var1[1].setTexturePosition((float)var2 / 64.0F + var6, (float)var3 / 32.0F + var7); + var1[2] = var1[2].setTexturePosition((float)var2 / 64.0F + var6, (float)var5 / 32.0F - var7); + var1[3] = var1[3].setTexturePosition((float)var4 / 64.0F - var6, (float)var5 / 32.0F - var7); + } + + 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) { + Vec3D var3 = this.vertexPositions[1].vector3D.subtract(this.vertexPositions[0].vector3D); + Vec3D var4 = this.vertexPositions[1].vector3D.subtract(this.vertexPositions[2].vector3D); + Vec3D var5 = var4.crossProduct(var3).normalize(); + var1.startDrawingQuads(); + 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/ThreadDownloadImage.java b/src/net/minecraft/src/ThreadDownloadImage.java new file mode 100644 index 0000000..3912dc6 --- /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 ImageBuffer buffer; + final ThreadDownloadImageData imageData; + + ThreadDownloadImage(ThreadDownloadImageData var1, String var2, ImageBuffer 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() != 404) { + 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..13ac4e6 --- /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, ImageBuffer 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..6bcdb12 --- /dev/null +++ b/src/net/minecraft/src/ThreadDownloadResources.java @@ -0,0 +1,117 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.ArrayList; + +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 { + ArrayList var1 = new ArrayList(); + URL var2 = new URL("http://www.minecraft.net/resources/"); + BufferedReader var3 = new BufferedReader(new InputStreamReader(var2.openStream())); + String var4 = ""; + + while(true) { + var4 = var3.readLine(); + if(var4 == null) { + var3.close(); + + for(int var5 = 0; var5 < var1.size(); ++var5) { + this.downloadAndInstallResource(var2, (String)var1.get(var5)); + if(this.closing) { + return; + } + } + break; + } + + var1.add(var4); + } + } catch (IOException var6) { + this.loadResource(this.resourcesFolder, ""); + var6.printStackTrace(); + } + + } + + 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 { + this.mc.installResource(var2 + var3[var4].getName(), var3[var4]); + } + } + + } + + private void downloadAndInstallResource(URL var1, String var2) { + try { + String[] var3 = var2.split(","); + String var4 = var3[0]; + int var5 = Integer.parseInt(var3[1]); + long var6 = Long.parseLong(var3[2]); + var6 /= 2L; + File var8 = new File(this.resourcesFolder, var4); + if(!var8.exists() || var8.length() != (long)var5) { + var8.getParentFile().mkdirs(); + String var9 = var4.replaceAll(" ", "%20"); + this.downloadResource(new URL(var1, var9), var8, var5); + if(this.closing) { + return; + } + } + + this.mc.installResource(var4, var8); + } catch (Exception var10) { + var10.printStackTrace(); + } + + } + + private void downloadResource(URL var1, File var2, int var3) throws IOException { + byte[] var4 = new byte[4096]; + DataInputStream var5 = new DataInputStream(var1.openStream()); + DataOutputStream var6 = new DataOutputStream(new FileOutputStream(var2)); + boolean var7 = false; + + do { + int var8 = var5.read(var4); + if(var8 < 0) { + var5.close(); + var6.close(); + return; + } + + var6.write(var4, 0, var8); + } while(!this.closing); + + } + + public void closeMinecraft() { + this.closing = true; + } +} diff --git a/src/net/minecraft/src/ThreadRunIsoClient.java b/src/net/minecraft/src/ThreadRunIsoClient.java new file mode 100644 index 0000000..aed30bb --- /dev/null +++ b/src/net/minecraft/src/ThreadRunIsoClient.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +class ThreadRunIsoClient extends Thread { + final CanvasIsomPreview isoCanvas; + + ThreadRunIsoClient(CanvasIsomPreview var1) { + this.isoCanvas = var1; + } + + public void run() { + while(CanvasIsomPreview.a(this.isoCanvas)) { + this.isoCanvas.render(); + + try { + Thread.sleep(1L); + } catch (Exception var2) { + } + } + + } +} diff --git a/src/net/minecraft/src/ThreadSleepForever.java b/src/net/minecraft/src/ThreadSleepForever.java new file mode 100644 index 0000000..09cb8b7 --- /dev/null +++ b/src/net/minecraft/src/ThreadSleepForever.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +class ThreadSleepForever extends Thread { + final Minecraft mc; + + ThreadSleepForever(Minecraft var1, String var2) { + super(var2); + this.mc = var1; + this.setDaemon(true); + this.start(); + } + + public void run() { + while(this.mc.running) { + try { + Thread.sleep(2147483647L); + } catch (InterruptedException var2) { + } + } + + } +} diff --git a/src/net/minecraft/src/TileEntity.java b/src/net/minecraft/src/TileEntity.java new file mode 100644 index 0000000..78965d1 --- /dev/null +++ b/src/net/minecraft/src/TileEntity.java @@ -0,0 +1,86 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; + +public class TileEntity { + private static Map nameToClassMap = new HashMap(); + private static Map classToNameMap = new HashMap(); + public World worldObj; + public int xCoord; + public int yCoord; + public int zCoord; + + private static void addMapping(Class var0, String var1) { + if(classToNameMap.containsKey(var1)) { + throw new IllegalArgumentException("Duplicate id: " + var1); + } else { + nameToClassMap.put(var1, var0); + classToNameMap.put(var0, var1); + } + } + + 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 { + System.out.println("Skipping TileEntity with id " + var0.getString("id")); + } + + return var1; + } + + public int getBlockMetadata() { + return this.worldObj.getBlockMetadata(this.xCoord, this.yCoord, this.zCoord); + } + + public void onInventoryChanged() { + this.worldObj.updateTileEntityChunkAndDoNothing(this.xCoord, this.yCoord, this.zCoord); + } + + 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; + } + + static { + addMapping(TileEntityFurnace.class, "Furnace"); + addMapping(TileEntityChest.class, "Chest"); + addMapping(TileEntitySign.class, "Sign"); + addMapping(TileEntityMobSpawner.class, "MobSpawner"); + } +} diff --git a/src/net/minecraft/src/TileEntityChest.java b/src/net/minecraft/src/TileEntityChest.java new file mode 100644 index 0000000..e29f7d0 --- /dev/null +++ b/src/net/minecraft/src/TileEntityChest.java @@ -0,0 +1,80 @@ +package net.minecraft.src; + +public class TileEntityChest extends TileEntity implements IInventory { + private ItemStack[] chestContents = new ItemStack[36]; + + 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; + return var3; + } else { + var3 = this.chestContents[var1].splitStack(var2); + if(this.chestContents[var1].stackSize == 0) { + this.chestContents[var1] = null; + } + + return var3; + } + } 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(); + } + + } + + public String getInvName() { + return "Chest"; + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + NBTTagList var2 = var1.getTagList("Items"); + this.chestContents = 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.chestContents.length) { + this.chestContents[var5] = new ItemStack(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.setTag(var4); + } + } + + var1.setTag("Items", var2); + } + + public int getInventoryStackLimit() { + return 64; + } +} diff --git a/src/net/minecraft/src/TileEntityFurnace.java b/src/net/minecraft/src/TileEntityFurnace.java new file mode 100644 index 0000000..fe6c7d7 --- /dev/null +++ b/src/net/minecraft/src/TileEntityFurnace.java @@ -0,0 +1,190 @@ +package net.minecraft.src; + +public class TileEntityFurnace extends TileEntity implements IInventory { + private ItemStack[] furnaceItemStacks = new ItemStack[3]; + private int furnaceBurnTime = 0; + private int currentItemBurnTime = 0; + private int furnaceCookTime = 0; + + 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 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 "Chest"; + } + + 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] = new ItemStack(var4); + } + } + + this.furnaceBurnTime = var1.getShort("BurnTime"); + this.furnaceCookTime = var1.getShort("CookTime"); + this.currentItemBurnTime = this.getItemBurnTime(this.furnaceItemStacks[1]); + } + + 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.setTag(var4); + } + } + + var1.setTag("Items", var2); + } + + 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; + var2 = true; + } + + if(this.furnaceBurnTime == 0 && this.canSmelt()) { + this.currentItemBurnTime = this.furnaceBurnTime = this.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) { + this.furnaceItemStacks[1] = 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.worldObj.updateTileEntityChunkAndDoNothing(this.xCoord, this.yCoord, this.zCoord); + } + + } + + private boolean canSmelt() { + if(this.furnaceItemStacks[0] == null) { + return false; + } else { + int var1 = this.getSmeltingResult(this.furnaceItemStacks[0].getItem().shiftedIndex); + return var1 < 0 ? false : (this.furnaceItemStacks[2] == null ? true : (this.furnaceItemStacks[2].itemID != var1 ? false : (this.furnaceItemStacks[2].stackSize < this.getInventoryStackLimit() && this.furnaceItemStacks[2].stackSize < this.furnaceItemStacks[2].getMaxStackSize() ? true : this.furnaceItemStacks[2].stackSize < Item.itemsList[var1].getItemStackLimit()))); + } + } + + public void smeltItem() { + if(this.canSmelt()) { + int var1 = this.getSmeltingResult(this.furnaceItemStacks[0].getItem().shiftedIndex); + if(this.furnaceItemStacks[2] == null) { + this.furnaceItemStacks[2] = new ItemStack(var1, 1); + } else if(this.furnaceItemStacks[2].itemID == var1) { + ++this.furnaceItemStacks[2].stackSize; + } + + --this.furnaceItemStacks[0].stackSize; + if(this.furnaceItemStacks[0].stackSize <= 0) { + this.furnaceItemStacks[0] = null; + } + + } + } + + private int getSmeltingResult(int var1) { + return var1 == Block.oreIron.blockID ? Item.ingotIron.shiftedIndex : (var1 == Block.oreGold.blockID ? Item.ingotGold.shiftedIndex : (var1 == Block.oreDiamond.blockID ? Item.diamond.shiftedIndex : (var1 == Block.sand.blockID ? Block.glass.blockID : (var1 == Item.porkRaw.shiftedIndex ? Item.porkCooked.shiftedIndex : (var1 == Block.cobblestone.blockID ? Block.stone.blockID : -1))))); + } + + private int getItemBurnTime(ItemStack var1) { + if(var1 == null) { + return 0; + } else { + int var2 = var1.getItem().shiftedIndex; + return var2 < 256 && Block.blocksList[var2].blockMaterial == Material.wood ? 300 : (var2 == Item.stick.shiftedIndex ? 100 : (var2 == Item.coal.shiftedIndex ? 1600 : 0)); + } + } + + public void onInventoryChanged() { + this.worldObj.updateTileEntityChunkAndDoNothing(this.xCoord, this.yCoord, this.zCoord); + } +} diff --git a/src/net/minecraft/src/TileEntityMobSpawner.java b/src/net/minecraft/src/TileEntityMobSpawner.java new file mode 100644 index 0000000..a03cbb6 --- /dev/null +++ b/src/net/minecraft/src/TileEntityMobSpawner.java @@ -0,0 +1,94 @@ +package net.minecraft.src; + +public class TileEntityMobSpawner extends TileEntity { + public int delay = -1; + public String mobID = "Pig"; + public double yaw; + public double prevYaw = 0.0D; + + public TileEntityMobSpawner() { + this.delay = 20; + } + + public boolean anyPlayerInRange() { + double var1 = this.worldObj.playerEntity.getDistanceSq((double)this.xCoord, (double)this.yCoord, (double)this.zCoord); + return var1 <= 256.0D; + } + + public void updateEntity() { + this.prevYaw = this.yaw; + if(this.anyPlayerInRange()) { + double var1 = (double)((float)this.xCoord + this.worldObj.rand.nextFloat()); + double var3 = (double)((float)this.yCoord + this.worldObj.rand.nextFloat()); + double var5 = (double)((float)this.zCoord + this.worldObj.rand.nextFloat()); + this.worldObj.spawnParticle("smoke", var1, var3, var5, 0.0D, 0.0D, 0.0D); + this.worldObj.spawnParticle("flame", var1, var3, var5, 0.0D, 0.0D, 0.0D); + + for(this.yaw += (double)(1000.0F / ((float)this.delay + 200.0F)); this.yaw > 360.0D; this.prevYaw -= 360.0D) { + this.yaw -= 360.0D; + } + + if(this.delay == -1) { + this.updateDelay(); + } + + if(this.delay > 0) { + --this.delay; + } else { + byte var7 = 4; + + for(int var8 = 0; var8 < var7; ++var8) { + EntityLiving var9 = (EntityLiving)((EntityLiving)EntityList.createEntityInWorld(this.mobID, this.worldObj)); + if(var9 == null) { + return; + } + + int var10 = this.worldObj.getEntitiesWithinAABB(var9.getClass(), AxisAlignedBB.getBoundingBoxFromPool((double)this.xCoord, (double)this.yCoord, (double)this.zCoord, (double)(this.xCoord + 1), (double)(this.yCoord + 1), (double)(this.zCoord + 1)).expand(8.0D, 4.0D, 8.0D)).size(); + if(var10 >= 6) { + this.updateDelay(); + return; + } + + if(var9 != null) { + double var11 = (double)this.xCoord + (this.worldObj.rand.nextDouble() - this.worldObj.rand.nextDouble()) * 4.0D; + double var13 = (double)(this.yCoord + this.worldObj.rand.nextInt(3) - 1); + double var15 = (double)this.zCoord + (this.worldObj.rand.nextDouble() - this.worldObj.rand.nextDouble()) * 4.0D; + var9.setPositionAndRotation(var11, var13, var15, this.worldObj.rand.nextFloat() * 360.0F, 0.0F); + if(var9.getCanSpawnHere(var11, var13, var15)) { + this.worldObj.spawnEntityInWorld(var9); + + for(int var17 = 0; var17 < 20; ++var17) { + var1 = (double)this.xCoord + 0.5D + ((double)this.worldObj.rand.nextFloat() - 0.5D) * 2.0D; + var3 = (double)this.yCoord + 0.5D + ((double)this.worldObj.rand.nextFloat() - 0.5D) * 2.0D; + var5 = (double)this.zCoord + 0.5D + ((double)this.worldObj.rand.nextFloat() - 0.5D) * 2.0D; + this.worldObj.spawnParticle("smoke", var1, var3, var5, 0.0D, 0.0D, 0.0D); + this.worldObj.spawnParticle("flame", var1, var3, var5, 0.0D, 0.0D, 0.0D); + } + + var9.spawnExplosionParticle(); + this.updateDelay(); + } + } + } + + super.updateEntity(); + } + } + } + + private void updateDelay() { + this.delay = 200 + this.worldObj.rand.nextInt(600); + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + this.mobID = var1.getString("EntityId"); + this.delay = var1.getShort("Delay"); + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setString("EntityId", this.mobID); + var1.setShort("Delay", (short)this.delay); + } +} diff --git a/src/net/minecraft/src/TileEntityMobSpawnerRenderer.java b/src/net/minecraft/src/TileEntityMobSpawnerRenderer.java new file mode 100644 index 0000000..6487d2e --- /dev/null +++ b/src/net/minecraft/src/TileEntityMobSpawnerRenderer.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; +import org.lwjgl.opengl.GL11; + +public class TileEntityMobSpawnerRenderer extends TileEntitySpecialRenderer { + private Map entityHashMap = new HashMap(); + + public void a(TileEntityMobSpawner var1, double var2, double var4, double var6, float var8) { + GL11.glPushMatrix(); + GL11.glTranslatef((float)var2 + 0.5F, (float)var4, (float)var6 + 0.5F); + Entity var9 = (Entity)this.entityHashMap.get(var1.mobID); + if(var9 == null) { + var9 = EntityList.createEntityInWorld(var1.mobID, (World)null); + this.entityHashMap.put(var1.mobID, var9); + } + + if(var9 != null) { + var9.setWorld(var1.worldObj); + float var10 = 7.0F / 16.0F; + GL11.glTranslatef(0.0F, 0.4F, 0.0F); + GL11.glRotatef((float)(var1.prevYaw + (var1.yaw - var1.prevYaw) * (double)var8) * 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(var10, var10, var10); + RenderManager.instance.renderEntityWithPosYaw(var9, 0.0D, 0.0D, 0.0D, 0.0F, var8); + } + + GL11.glPopMatrix(); + } + + public void renderTileEntityMobSpawner(TileEntity var1, double var2, double var4, double var6, float var8) { + this.a((TileEntityMobSpawner)var1, var2, var4, var6, var8); + } +} diff --git a/src/net/minecraft/src/TileEntityRenderer.java b/src/net/minecraft/src/TileEntityRenderer.java new file mode 100644 index 0000000..c11fa4e --- /dev/null +++ b/src/net/minecraft/src/TileEntityRenderer.java @@ -0,0 +1,86 @@ +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 EntityPlayer entityPlayer; + 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()); + 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 this.getSpecialRendererForClass(var1.getClass()); + } + + public void cacheActiveRenderInfo(World var1, RenderEngine var2, FontRenderer var3, EntityPlayer var4, float var5) { + this.worldObj = var1; + this.renderEngine = var2; + this.entityPlayer = 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) < 4096.0D) { + float var3 = this.worldObj.getBrightness(var1.xCoord, var1.yCoord, var1.zCoord); + GL11.glColor3f(var3, var3, var3); + 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) { + var9.renderTileEntityMobSpawner(var1, var2, var4, var6, var8); + } + + } + + public FontRenderer getFontRenderer() { + return this.fontRenderer; + } +} diff --git a/src/net/minecraft/src/TileEntitySign.java b/src/net/minecraft/src/TileEntitySign.java new file mode 100644 index 0000000..69f2787 --- /dev/null +++ b/src/net/minecraft/src/TileEntitySign.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class TileEntitySign extends TileEntity { + public String[] signText = new String[]{"", "", "", ""}; + public int lineBeingEdited = -1; + + 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) { + 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); + } + } + + } +} diff --git a/src/net/minecraft/src/TileEntitySignRenderer.java b/src/net/minecraft/src/TileEntitySignRenderer.java new file mode 100644 index 0000000..b12ca76 --- /dev/null +++ b/src/net/minecraft/src/TileEntitySignRenderer.java @@ -0,0 +1,41 @@ +package net.minecraft.src; + +import org.lwjgl.opengl.GL11; + +public class TileEntitySignRenderer extends TileEntitySpecialRenderer { + private SignModel modelSign = new SignModel(); + + public void a(TileEntitySign 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.getBlockMetadata() * 360) / 16.0F; + GL11.glRotatef(-var9, 0.0F, 1.0F, 0.0F); + this.bindTextureByName("/item/sign.png"); + GL11.glPushMatrix(); + GL11.glScalef(1.0F, -1.0F, -1.0F); + this.modelSign.renderSign(); + GL11.glPopMatrix(); + float var10 = (float)(1.0D / 60.0D); + GL11.glTranslatef(0.0F, 0.5F, 0.09F); + GL11.glScalef(var10, -var10, var10); + GL11.glNormal3f(0.0F, 0.0F, -1.0F * var10); + FontRenderer var11 = this.getFontRenderer(); + + for(int var12 = 0; var12 < var1.signText.length; ++var12) { + String var13 = var1.signText[var12]; + if(var12 == var1.lineBeingEdited) { + var13 = "> " + var13 + " <"; + var11.drawString(var13, -var11.getStringWidth(var13) / 2, var12 * 10 - var1.signText.length * 5, 0); + } else { + var11.drawString(var13, -var11.getStringWidth(var13) / 2, var12 * 10 - var1.signText.length * 5, 0); + } + } + + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); + GL11.glPopMatrix(); + } + + public void renderTileEntityMobSpawner(TileEntity var1, double var2, double var4, double var6, float var8) { + this.a((TileEntitySign)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..d0ae86c --- /dev/null +++ b/src/net/minecraft/src/TileEntitySpecialRenderer.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public abstract class TileEntitySpecialRenderer { + protected TileEntityRenderer tileEntityRenderer; + + public abstract void renderTileEntityMobSpawner(TileEntity var1, double var2, double var4, double var6, float var8); + + protected void bindTextureByName(String var1) { + RenderEngine var2 = this.tileEntityRenderer.renderEngine; + var2.bindTexture(var2.getTexture(var1)); + } + + public void setTileEntityRenderer(TileEntityRenderer var1) { + this.tileEntityRenderer = 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..55f1390 --- /dev/null +++ b/src/net/minecraft/src/Timer.java @@ -0,0 +1,58 @@ +package net.minecraft.src; + +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 double timeSyncAdjustment = 1.0D; + + public Timer(float var1) { + this.ticksPerSecond = var1; + this.lastSyncSysClock = System.currentTimeMillis(); + this.lastSyncHRClock = System.nanoTime() / 1000000L; + } + + public void updateTimer() { + long var1 = System.currentTimeMillis(); + long var3 = var1 - this.lastSyncSysClock; + long var5 = System.nanoTime() / 1000000L; + double var9; + if(var3 > 1000L) { + long var7 = var5 - this.lastSyncHRClock; + var9 = (double)var3 / (double)var7; + this.timeSyncAdjustment += (var9 - this.timeSyncAdjustment) * (double)0.2F; + this.lastSyncSysClock = var1; + this.lastSyncHRClock = var5; + } + + if(var3 < 0L) { + this.lastSyncSysClock = var1; + this.lastSyncHRClock = var5; + } + + double var11 = (double)var5 / 1000.0D; + var9 = (var11 - this.lastHRTime) * this.timeSyncAdjustment; + this.lastHRTime = var11; + if(var9 < 0.0D) { + var9 = 0.0D; + } + + if(var9 > 1.0D) { + var9 = 1.0D; + } + + this.elapsedPartialTicks = (float)((double)this.elapsedPartialTicks + var9 * (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/UnexpectedThrowable.java b/src/net/minecraft/src/UnexpectedThrowable.java new file mode 100644 index 0000000..b05f1b4 --- /dev/null +++ b/src/net/minecraft/src/UnexpectedThrowable.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class UnexpectedThrowable { + public final String description; + public final Exception exception; + + public UnexpectedThrowable(String var1, Exception var2) { + this.description = var1; + this.exception = var2; + } +} diff --git a/src/net/minecraft/src/Vec3D.java b/src/net/minecraft/src/Vec3D.java new file mode 100644 index 0000000..c0b23a5 --- /dev/null +++ b/src/net/minecraft/src/Vec3D.java @@ -0,0 +1,135 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class Vec3D { + private static List vectorList = new ArrayList(); + private static int nextVector = 0; + public double xCoord; + public double yCoord; + public double zCoord; + + public static Vec3D createVectorHelper(double var0, double var2, double var4) { + return new Vec3D(var0, var2, var4); + } + + public static void initialize() { + nextVector = 0; + } + + public static Vec3D createVector(double var0, double var2, double var4) { + if(nextVector >= vectorList.size()) { + vectorList.add(createVectorHelper(0.0D, 0.0D, 0.0D)); + } + + return ((Vec3D)vectorList.get(nextVector++)).setComponents(var0, var2, var4); + } + + private Vec3D(double var1, double var3, double var5) { + if(var1 == -0.0D) { + var1 = 0.0D; + } + + if(var3 == -0.0D) { + var3 = 0.0D; + } + + if(var5 == -0.0D) { + var5 = 0.0D; + } + + this.xCoord = var1; + this.yCoord = var3; + this.zCoord = var5; + } + + private Vec3D setComponents(double var1, double var3, double var5) { + this.xCoord = var1; + this.yCoord = var3; + this.zCoord = var5; + return this; + } + + public Vec3D subtract(Vec3D var1) { + return createVector(var1.xCoord - this.xCoord, var1.yCoord - this.yCoord, var1.zCoord - this.zCoord); + } + + public Vec3D normalize() { + double var1 = (double)MathHelper.sqrt_double(this.xCoord * this.xCoord + this.yCoord * this.yCoord + this.zCoord * this.zCoord); + return var1 < 1.0E-4D ? createVector(0.0D, 0.0D, 0.0D) : createVector(this.xCoord / var1, this.yCoord / var1, this.zCoord / var1); + } + + public Vec3D crossProduct(Vec3D var1) { + return createVector(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 Vec3D addVector(double var1, double var3, double var5) { + return createVector(this.xCoord + var1, this.yCoord + var3, this.zCoord + var5); + } + + public double distanceTo(Vec3D 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(Vec3D 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 Vec3D getIntermediateWithXValue(Vec3D 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 ? createVector(this.xCoord + var4 * var10, this.yCoord + var6 * var10, this.zCoord + var8 * var10) : null; + } + } + + public Vec3D getIntermediateWithYValue(Vec3D 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 ? createVector(this.xCoord + var4 * var10, this.yCoord + var6 * var10, this.zCoord + var8 * var10) : null; + } + } + + public Vec3D getIntermediateWithZValue(Vec3D 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 ? createVector(this.xCoord + var4 * var10, this.yCoord + var6 * var10, this.zCoord + var8 * var10) : null; + } + } + + public String toString() { + return "(" + this.xCoord + ", " + this.yCoord + ", " + this.zCoord + ")"; + } +} diff --git a/src/net/minecraft/src/World.java b/src/net/minecraft/src/World.java new file mode 100644 index 0000000..ce6119a --- /dev/null +++ b/src/net/minecraft/src/World.java @@ -0,0 +1,1599 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Random; +import java.util.Set; +import java.util.TreeSet; + +public class World implements IBlockAccess { + private List lightingToUpdate; + private List loadedEntityList; + private List unloadedEntityList; + private TreeSet scheduledTickTreeSet; + private Set scheduledTickSet; + public List loadedTileEntityList; + public long worldTime; + private long skyColor; + private long fogColor; + private long cloudColor; + public int skylightSubtracted; + private int updateLCG; + private int DIST_HASH_MAGIC; + public boolean editingBlocks; + public static float[] lightBrightnessTable = new float[16]; + public Entity playerEntity; + public int difficultySetting; + public Object fontRenderer; + public Random rand; + public int spawnX; + public int spawnY; + public int spawnZ; + public boolean isNewWorld; + private List worldAccesses; + private IChunkProvider chunkProvider; + private File saveDirectory; + public long randomSeed; + private NBTTagCompound nbtCompoundPlayer; + public long setSizeOnDisk; + public final String levelName; + private ArrayList collidingBoundingBoxes; + private List entitiesWithinAABBExcludingEntity; + + public static NBTTagCompound getLevelData(File var0, String var1) { + File var2 = new File(var0, "saves"); + File var3 = new File(var2, var1); + if(!var3.exists()) { + return null; + } else { + File var4 = new File(var3, "level.dat"); + if(var4.exists()) { + try { + NBTTagCompound var5 = CompressedStreamTools.readCompressed(new FileInputStream(var4)); + NBTTagCompound var6 = var5.getCompoundTag("Data"); + return var6; + } catch (Exception var7) { + var7.printStackTrace(); + } + } + + return null; + } + } + + public static void deleteWorld(File var0, String var1) { + File var2 = new File(var0, "saves"); + File var3 = new File(var2, var1); + if(var3.exists()) { + deleteWorldFiles(var3.listFiles()); + var3.delete(); + } + } + + private static void deleteWorldFiles(File[] var0) { + for(int var1 = 0; var1 < var0.length; ++var1) { + if(var0[var1].isDirectory()) { + deleteWorldFiles(var0[var1].listFiles()); + } + + var0[var1].delete(); + } + + } + + public World(File var1, String var2) { + this(var1, var2, (new Random()).nextLong()); + } + + public World(File var1, String var2, long var3) { + this.lightingToUpdate = new ArrayList(); + this.loadedEntityList = new ArrayList(); + this.unloadedEntityList = new ArrayList(); + this.scheduledTickTreeSet = new TreeSet(); + this.scheduledTickSet = new HashSet(); + this.loadedTileEntityList = new ArrayList(); + this.worldTime = 0L; + this.skyColor = 8961023L; + this.fogColor = 12638463L; + this.cloudColor = 16777215L; + this.skylightSubtracted = 0; + this.updateLCG = (new Random()).nextInt(); + this.DIST_HASH_MAGIC = 1013904223; + this.editingBlocks = false; + this.rand = new Random(); + this.isNewWorld = false; + this.worldAccesses = new ArrayList(); + this.randomSeed = 0L; + this.setSizeOnDisk = 0L; + this.collidingBoundingBoxes = new ArrayList(); + this.entitiesWithinAABBExcludingEntity = new ArrayList(); + this.levelName = var2; + var1.mkdirs(); + this.saveDirectory = new File(var1, var2); + this.saveDirectory.mkdirs(); + File var5 = new File(this.saveDirectory, "level.dat"); + this.isNewWorld = !var5.exists(); + if(var5.exists()) { + try { + NBTTagCompound var6 = CompressedStreamTools.readCompressed(new FileInputStream(var5)); + NBTTagCompound var7 = var6.getCompoundTag("Data"); + this.randomSeed = var7.getLong("RandomSeed"); + this.spawnX = var7.getInteger("SpawnX"); + this.spawnY = var7.getInteger("SpawnY"); + this.spawnZ = var7.getInteger("SpawnZ"); + this.worldTime = var7.getLong("Time"); + this.setSizeOnDisk = var7.getLong("SizeOnDisk"); + this.nbtCompoundPlayer = var7.getCompoundTag("Player"); + } catch (Exception var8) { + var8.printStackTrace(); + } + } + + boolean var9 = false; + if(this.randomSeed == 0L) { + this.randomSeed = var3; + var9 = true; + } + + this.chunkProvider = this.getChunkProvider(this.saveDirectory); + if(var9) { + this.spawnX = 0; + this.spawnY = 64; + + for(this.spawnZ = 0; !this.findSpawn(this.spawnX, this.spawnZ); this.spawnZ += this.rand.nextInt(64) - this.rand.nextInt(64)) { + this.spawnX += this.rand.nextInt(64) - this.rand.nextInt(64); + } + } + + this.calculateInitialSkylight(); + } + + protected IChunkProvider getChunkProvider(File var1) { + return new ChunkProviderLoadOrGenerate(this, new ChunkLoader(var1, true), new ChunkProviderGenerate(this, this.randomSeed)); + } + + public void setSpawnLocation() { + while(this.getFirstUncoveredBlock(this.spawnX, this.spawnZ) == 0) { + this.spawnX += this.rand.nextInt(8) - this.rand.nextInt(8); + this.spawnZ += this.rand.nextInt(8) - this.rand.nextInt(8); + } + + } + + private boolean findSpawn(int var1, int var2) { + return this.getFirstUncoveredBlock(var1, var2) == Block.sand.blockID; + } + + private int getFirstUncoveredBlock(int var1, int var2) { + int var3; + for(var3 = 63; this.getBlockId(var1, var3 + 1, var2) != 0; ++var3) { + } + + return this.getBlockId(var1, var3, var2); + } + + public void spawnPlayerWithLoadedChunks() { + try { + if(this.nbtCompoundPlayer != null) { + this.playerEntity.readFromNBT(this.nbtCompoundPlayer); + this.nbtCompoundPlayer = null; + } + + this.spawnEntityInWorld(this.playerEntity); + } catch (Exception var2) { + var2.printStackTrace(); + } + + } + + public void saveWorld(boolean var1, IProgressUpdate var2) { + if(this.chunkProvider.canSave()) { + if(var2 != null) { + var2.displayProgressMessage("Saving level"); + } + + this.saveLevel(); + if(var2 != null) { + var2.displayLoadingString("Saving chunks"); + } + + this.chunkProvider.saveChunks(var1, var2); + } + } + + private void saveLevel() { + NBTTagCompound var1 = new NBTTagCompound(); + var1.setLong("RandomSeed", this.randomSeed); + var1.setInteger("SpawnX", this.spawnX); + var1.setInteger("SpawnY", this.spawnY); + var1.setInteger("SpawnZ", this.spawnZ); + var1.setLong("Time", this.worldTime); + var1.setLong("SizeOnDisk", this.setSizeOnDisk); + var1.setLong("LastPlayed", System.currentTimeMillis()); + NBTTagCompound var2; + if(this.playerEntity != null) { + var2 = new NBTTagCompound(); + this.playerEntity.writeToNBT(var2); + var1.setCompoundTag("Player", var2); + } + + var2 = new NBTTagCompound(); + var2.setTag("Data", var1); + + try { + File var3 = new File(this.saveDirectory, "level.dat_new"); + File var4 = new File(this.saveDirectory, "level.dat_old"); + File var5 = new File(this.saveDirectory, "level.dat"); + CompressedStreamTools.writeCompressed(var2, new FileOutputStream(var3)); + if(var4.exists()) { + var4.delete(); + } + + var5.renameTo(var4); + if(var5.exists()) { + var5.delete(); + } + + var3.renameTo(var5); + if(var3.exists()) { + var3.delete(); + } + } catch (Exception var6) { + var6.printStackTrace(); + } + + } + + public boolean saveWorld(int var1) { + if(!this.chunkProvider.canSave()) { + return true; + } else { + if(var1 == 0) { + this.saveLevel(); + } + + return this.chunkProvider.saveChunks(false, (IProgressUpdate)null); + } + } + + public int getBlockId(int var1, int var2, int var3) { + return var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000 ? (var2 < 0 ? 0 : (var2 >= 128 ? 0 : this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4).getBlockID(var1 & 15, var2, var3 & 15))) : 0; + } + + public boolean blockExists(int var1, int var2, int var3) { + return var2 >= 0 && var2 < 128 ? this.chunkExists(var1 >> 4, var3 >> 4) : false; + } + + public boolean checkChunksExist(int var1, int var2, int var3, int var4, int var5, int var6) { + if(var5 >= 0 && var2 < 128) { + var1 >>= 4; + var2 >>= 4; + var3 >>= 4; + var4 >>= 4; + var5 >>= 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; + } + } + + private 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 setBlockAndMetadata(int var1, int var2, int var3, int var4, int var5) { + if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + if(var2 < 0) { + return false; + } else if(var2 >= 128) { + return false; + } else { + Chunk var6 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + return var6.setBlockIDWithMetadata(var1 & 15, var2, var3 & 15, var4, var5); + } + } else { + return false; + } + } + + public boolean setBlock(int var1, int var2, int var3, int var4) { + if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + if(var2 < 0) { + return false; + } else if(var2 >= 128) { + return false; + } else { + Chunk var5 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + return var5.setBlockID(var1 & 15, var2, var3 & 15, var4); + } + } 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 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + if(var2 < 0) { + return 0; + } else if(var2 >= 128) { + 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 void setBlockMetadataWithNotify(int var1, int var2, int var3, int var4) { + this.setBlockMetadata(var1, var2, var3, var4); + } + + public boolean setBlockMetadata(int var1, int var2, int var3, int var4) { + if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + if(var2 < 0) { + return false; + } else if(var2 >= 128) { + return false; + } else { + Chunk var5 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + var1 &= 15; + var3 &= 15; + var5.setBlockMetadata(var1, var2, var3, var4); + return true; + } + } else { + return false; + } + } + + public boolean setBlockWithNotify(int var1, int var2, int var3, int var4) { + if(this.setBlock(var1, var2, var3, var4)) { + this.markBlockNeedsUpdate(var1, var2, var3, var4); + return true; + } else { + return false; + } + } + + public boolean setBlockAndMetadataWithNotify(int var1, int var2, int var3, int var4, int var5) { + if(this.setBlockAndMetadata(var1, var2, var3, var4, var5)) { + this.markBlockNeedsUpdate(var1, var2, var3, var4); + return true; + } else { + return false; + } + } + + private void markBlockNeedsUpdate(int var1, int var2, int var3, int var4) { + for(int var5 = 0; var5 < this.worldAccesses.size(); ++var5) { + ((IWorldAccess)this.worldAccesses.get(var5)).markBlockAndNeighborsNeedsUpdate(var1, var2, var3); + } + + this.notifyBlocksOfNeighborChange(var1, var2, var3, var4); + } + + public void markBlockAsNeedsUpdate(int var1, int var2, int var3, int var4) { + if(var3 > var4) { + int var5 = var4; + var4 = var3; + var3 = var5; + } + + this.markBlocksDirty(var1, var3, var2, var1, var4, var2); + } + + public void markBlocksDirty(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)).markBlockRangeNeedsUpdate(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); + } + + private void notifyBlockOfNeighborChange(int var1, int var2, int var3, int var4) { + if(!this.editingBlocks) { + Block var5 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + if(var5 != null) { + var5.onNeighborBlockChange(this, var1, var2, var3, var4); + } + + } + } + + public boolean canBlockSeeTheSky(int var1, int var2, int var3) { + return this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4).canBlockSeeTheSky(var1 & 15, var2, var3 & 15); + } + + 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 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + int var5; + if(var4) { + var5 = this.getBlockId(var1, var2, var3); + if(var5 == Block.stairSingle.blockID || var5 == Block.tilledField.blockID) { + 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 >= 128) { + var5 = 15 - this.skylightSubtracted; + if(var5 < 0) { + var5 = 0; + } + + return var5; + } else { + Chunk var11 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + var1 &= 15; + var3 &= 15; + return var11.getBlockLightValue(var1, var2, var3, this.skylightSubtracted); + } + } else { + return 15; + } + } + + public boolean canExistingBlockSeeTheSky(int var1, int var2, int var3) { + if(var1 >= -32000000 && var3 >= -32000000 && var1 < 32000000 && var3 <= 32000000) { + if(var2 < 0) { + return false; + } else if(var2 >= 128) { + return true; + } else if(!this.chunkExists(var1 >> 4, var3 >> 4)) { + return false; + } else { + Chunk var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + var1 &= 15; + var3 &= 15; + return var4.canBlockSeeTheSky(var1, var2, var3); + } + } else { + return false; + } + } + + public int getHeightValue(int var1, int var2) { + if(var1 >= -32000000 && var2 >= -32000000 && var1 < 32000000 && var2 <= 32000000) { + 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 void neighborLightPropagationChanged(EnumSkyBlock var1, int var2, int var3, int var4, int var5) { + if(this.blockExists(var2, var3, var4)) { + if(var1 == EnumSkyBlock.Sky) { + if(this.canExistingBlockSeeTheSky(var2, var3, var4)) { + var5 = 15; + } + } else if(var1 == EnumSkyBlock.Block) { + int var6 = this.getBlockId(var2, var3, var4); + if(Block.lightValue[var6] > var5) { + var5 = Block.lightValue[var6]; + } + } + + if(this.getSavedLightValue(var1, var2, var3, var4) != var5) { + this.scheduleLightingUpdate(var1, var2, var3, var4, var2, var3, var4); + } + + } + } + + public int getSavedLightValue(EnumSkyBlock var1, int var2, int var3, int var4) { + if(var3 >= 0 && var3 < 128 && var2 >= -32000000 && var4 >= -32000000 && var2 < 32000000 && var4 <= 32000000) { + int var5 = var2 >> 4; + int var6 = var4 >> 4; + if(!this.chunkExists(var5, var6)) { + return 0; + } 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 >= -32000000 && var4 >= -32000000 && var2 < 32000000 && var4 <= 32000000) { + if(var3 >= 0) { + if(var3 < 128) { + 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)).markBlockAndNeighborsNeedsUpdate(var2, var3, var4); + } + + } + } + } + } + } + + public float getBrightness(int var1, int var2, int var3) { + return lightBrightnessTable[this.getBlockLightValue(var1, var2, var3)]; + } + + public boolean isDaytime() { + return this.skylightSubtracted < 4; + } + + public MovingObjectPosition rayTraceBlocks(Vec3D var1, Vec3D var2) { + return this.rayTraceBlocks_do(var1, var2, false); + } + + public MovingObjectPosition rayTraceBlocks_do(Vec3D var1, Vec3D var2, boolean var3) { + 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 var4 = MathHelper.floor_double(var2.xCoord); + int var5 = MathHelper.floor_double(var2.yCoord); + int var6 = MathHelper.floor_double(var2.zCoord); + int var7 = MathHelper.floor_double(var1.xCoord); + int var8 = MathHelper.floor_double(var1.yCoord); + int var9 = MathHelper.floor_double(var1.zCoord); + int var10 = 20; + + while(var10-- >= 0) { + if(Double.isNaN(var1.xCoord) || Double.isNaN(var1.yCoord) || Double.isNaN(var1.zCoord)) { + return null; + } + + if(var7 == var4 && var8 == var5 && var9 == var6) { + return null; + } + + double var11 = 999.0D; + double var13 = 999.0D; + double var15 = 999.0D; + if(var4 > var7) { + var11 = (double)var7 + 1.0D; + } + + if(var4 < var7) { + var11 = (double)var7 + 0.0D; + } + + if(var5 > var8) { + var13 = (double)var8 + 1.0D; + } + + if(var5 < var8) { + var13 = (double)var8 + 0.0D; + } + + if(var6 > var9) { + var15 = (double)var9 + 1.0D; + } + + if(var6 < var9) { + var15 = (double)var9 + 0.0D; + } + + double var17 = 999.0D; + double var19 = 999.0D; + double var21 = 999.0D; + double var23 = var2.xCoord - var1.xCoord; + double var25 = var2.yCoord - var1.yCoord; + double var27 = var2.zCoord - var1.zCoord; + if(var11 != 999.0D) { + var17 = (var11 - var1.xCoord) / var23; + } + + if(var13 != 999.0D) { + var19 = (var13 - var1.yCoord) / var25; + } + + if(var15 != 999.0D) { + var21 = (var15 - var1.zCoord) / var27; + } + + boolean var29 = false; + byte var35; + if(var17 < var19 && var17 < var21) { + if(var4 > var7) { + var35 = 4; + } else { + var35 = 5; + } + + var1.xCoord = var11; + var1.yCoord += var25 * var17; + var1.zCoord += var27 * var17; + } else if(var19 < var21) { + if(var5 > var8) { + var35 = 0; + } else { + var35 = 1; + } + + var1.xCoord += var23 * var19; + var1.yCoord = var13; + var1.zCoord += var27 * var19; + } else { + if(var6 > var9) { + var35 = 2; + } else { + var35 = 3; + } + + var1.xCoord += var23 * var21; + var1.yCoord += var25 * var21; + var1.zCoord = var15; + } + + Vec3D var30 = Vec3D.createVector(var1.xCoord, var1.yCoord, var1.zCoord); + var7 = (int)(var30.xCoord = (double)MathHelper.floor_double(var1.xCoord)); + if(var35 == 5) { + --var7; + ++var30.xCoord; + } + + var8 = (int)(var30.yCoord = (double)MathHelper.floor_double(var1.yCoord)); + if(var35 == 1) { + --var8; + ++var30.yCoord; + } + + var9 = (int)(var30.zCoord = (double)MathHelper.floor_double(var1.zCoord)); + if(var35 == 3) { + --var9; + ++var30.zCoord; + } + + int var31 = this.getBlockId(var7, var8, var9); + int var32 = this.getBlockMetadata(var7, var8, var9); + Block var33 = Block.blocksList[var31]; + MovingObjectPosition var34; + if(var31 > 0 && var33.canCollideCheck(var32, var3)) { + var34 = var33.collisionRayTrace(this, var7, var8, var9, var1, var2); + if(var34 != null) { + return var34; + } + } + + var31 = this.getBlockId(var7, var8 - 1, var9); + var32 = this.getBlockMetadata(var7, var8 - 1, var9); + var33 = Block.blocksList[var31]; + if(var31 > 0 && var33.canCollideCheck(var32, var3)) { + var34 = var33.collisionRayTrace(this, var7, var8 - 1, var9, var1, var2); + if(var34 != null) { + return var34; + } + } + } + + return null; + } else { + return null; + } + } else { + return null; + } + } + + public void playSoundAtEntity(Entity var1, String var2, float var3, float var4) { + for(int var5 = 0; var5 < this.worldAccesses.size(); ++var5) { + float var6 = 16.0F; + if(var3 > 1.0F) { + var6 *= var3; + } + + if(this.playerEntity.getDistanceSqToEntity(var1) < (double)(var6 * var6)) { + ((IWorldAccess)this.worldAccesses.get(var5)).playSound(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) { + try { + for(int var10 = 0; var10 < this.worldAccesses.size(); ++var10) { + float var11 = 16.0F; + if(var8 > 1.0F) { + var11 *= var8; + } + + double var12 = var1 - this.playerEntity.posX; + double var14 = var3 - this.playerEntity.posY; + double var16 = var5 - this.playerEntity.posZ; + if(var12 * var12 + var14 * var14 + var16 * var16 < (double)(var11 * var11)) { + ((IWorldAccess)this.worldAccesses.get(var10)).playSound(var7, var1, var3, var5, var8, var9); + } + } + } catch (Exception var18) { + var18.printStackTrace(); + } + + } + + public void playMusic(double var1, double var3, double var5, String var7, float var8) { + } + + 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 void spawnEntityInWorld(Entity var1) { + int var2 = MathHelper.floor_double(var1.posX / 16.0D); + int var3 = MathHelper.floor_double(var1.posZ / 16.0D); + if(this.chunkExists(var2, var3)) { + this.getChunkFromChunkCoords(var2, var3).addEntity(var1); + this.loadedEntityList.add(var1); + + for(int var4 = 0; var4 < this.worldAccesses.size(); ++var4) { + ((IWorldAccess)this.worldAccesses.get(var4)).obtainEntitySkin(var1); + } + } else { + System.out.println("Failed to add entity " + var1); + } + + } + + public void setEntityDead(Entity var1) { + var1.setEntityDead(); + } + + 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 = var5 - 1; var10 < var6; ++var10) { + for(int var11 = var7; var11 < var8; ++var11) { + Block var12 = Block.blocksList[this.getBlockId(var9, var10, var11)]; + if(var12 != null) { + var12.getCollidingBoundingBoxes(this, var9, var10, var11, var2, this.collidingBoundingBoxes); + } + } + } + } + + double var16 = 0.25D; + List var14 = this.getEntitiesWithinAABBExcludingEntity(var1, var2.expand(var16, var16, var16)); + + for(int var15 = 0; var15 < var14.size(); ++var15) { + AxisAlignedBB var13 = ((Entity)var14.get(var15)).getBoundingBox(); + if(var13 != null) { + this.collidingBoundingBoxes.add(var13); + } + + var13 = var1.getCollisionBox((Entity)var14.get(var15)); + if(var13 != null) { + this.collidingBoundingBoxes.add(var13); + } + } + + 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; + } + + return (int)(var3 * 11.0F); + } + + public Vec3D getSkyColor(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.skyColor >> 16 & 255L) / 255.0F; + float var5 = (float)(this.skyColor >> 8 & 255L) / 255.0F; + float var6 = (float)(this.skyColor & 255L) / 255.0F; + var4 *= var3; + var5 *= var3; + var6 *= var3; + return Vec3D.createVector((double)var4, (double)var5, (double)var6); + } + + public float getCelestialAngle(float var1) { + int var2 = (int)(this.worldTime % 24000L); + float var3 = ((float)var2 + var1) / 24000.0F - 0.25F; + if(var3 < 0.0F) { + ++var3; + } + + if(var3 > 1.0F) { + --var3; + } + + float var4 = var3; + var3 = 1.0F - (float)((Math.cos((double)var3 * Math.PI) + 1.0D) / 2.0D); + var3 = var4 + (var3 - var4) / 3.0F; + return var3; + } + + public Vec3D getCloudColor(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.cloudColor >> 16 & 255L) / 255.0F; + float var5 = (float)(this.cloudColor >> 8 & 255L) / 255.0F; + float var6 = (float)(this.cloudColor & 255L) / 255.0F; + var4 *= var3 * 0.9F + 0.1F; + var5 *= var3 * 0.9F + 0.1F; + var6 *= var3 * 0.85F + 0.15F; + return Vec3D.createVector((double)var4, (double)var5, (double)var6); + } + + public Vec3D getFogColor(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.fogColor >> 16 & 255L) / 255.0F; + float var5 = (float)(this.fogColor >> 8 & 255L) / 255.0F; + float var6 = (float)(this.fogColor & 255L) / 255.0F; + var4 *= var3 * 0.94F + 0.06F; + var5 *= var3 * 0.94F + 0.06F; + var6 *= var3 * 0.91F + 0.09F; + return Vec3D.createVector((double)var4, (double)var5, (double)var6); + } + + public int getTopSolidOrLiquidBlock(int var1, int var2) { + return 64; + } + + public float getStarBrightness(float var1) { + float var2 = this.getCelestialAngle(var1); + float var3 = 1.0F - (MathHelper.cos(var2 * (float)Math.PI * 2.0F) * 2.0F + 12.0F / 16.0F); + 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) { + NextTickListEntry var5 = new NextTickListEntry(var1, var2, var3, var4); + byte var6 = 8; + if(this.checkChunksExist(var1 - var6, var2 - var6, var3 - var6, var1 + var6, var2 + var6, var3 + var6)) { + if(var4 > 0) { + var5.setScheduledTime((long)Block.blocksList[var4].tickRate() + this.worldTime); + } + + if(!this.scheduledTickSet.contains(var5)) { + this.scheduledTickSet.add(var5); + this.scheduledTickTreeSet.add(var5); + } + } + + } + + public void updateEntities() { + this.loadedEntityList.removeAll(this.unloadedEntityList); + + int var1; + int var3; + for(var1 = 0; var1 < this.worldAccesses.size(); ++var1) { + IWorldAccess var2 = (IWorldAccess)this.worldAccesses.get(var1); + + for(var3 = 0; var3 < this.unloadedEntityList.size(); ++var3) { + var2.releaseEntitySkin((Entity)this.unloadedEntityList.get(var3)); + } + } + + this.unloadedEntityList.clear(); + + for(var1 = 0; var1 < this.loadedEntityList.size(); ++var1) { + Entity var6 = (Entity)this.loadedEntityList.get(var1); + if(var6.ridingEntity != null) { + if(!var6.ridingEntity.isDead && var6.ridingEntity.riddenByEntity == var6) { + continue; + } + + var6.ridingEntity.riddenByEntity = null; + var6.ridingEntity = null; + } + + if(!var6.isDead) { + this.updateEntity(var6); + } + + if(var6.isDead) { + var3 = MathHelper.floor_double(var6.posX / 16.0D); + int var4 = MathHelper.floor_double(var6.posZ / 16.0D); + if(this.chunkExists(var3, var4)) { + this.getChunkFromChunkCoords(var3, var4).removeEntity(var6); + } + + this.loadedEntityList.remove(var1--); + + for(int var5 = 0; var5 < this.worldAccesses.size(); ++var5) { + ((IWorldAccess)this.worldAccesses.get(var5)).releaseEntitySkin(var6); + } + } + } + + for(var1 = 0; var1 < this.loadedTileEntityList.size(); ++var1) { + TileEntity var7 = (TileEntity)this.loadedTileEntityList.get(var1); + var7.updateEntity(); + } + + } + + private void updateEntity(Entity var1) { + int var2 = MathHelper.floor_double(var1.posX); + int var3 = MathHelper.floor_double(var1.posY); + int var4 = MathHelper.floor_double(var1.posZ); + byte var5 = 16; + if(this.checkChunksExist(var2 - var5, 0, var4 - var5, var2 + var5, 128, var4 + var5)) { + var1.lastTickPosX = var1.posX; + var1.lastTickPosY = var1.posY; + var1.lastTickPosZ = var1.posZ; + var1.prevRotationYaw = var1.rotationYaw; + var1.prevRotationPitch = var1.rotationPitch; + 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.ridingEntity != null) { + var1.updateRidden(); + } else { + var1.onUpdate(); + } + + int var9 = MathHelper.floor_double(var1.posX / 16.0D); + int var10 = MathHelper.floor_double(var1.posY / 16.0D); + int var11 = MathHelper.floor_double(var1.posZ / 16.0D); + if(var6 != var9 || var7 != var10 || var8 != var11) { + if(this.chunkExists(var6, var8)) { + this.getChunkFromChunkCoords(var6, var8).removeEntityAtIndex(var1, var7); + } + + if(this.chunkExists(var9, var11)) { + this.getChunkFromChunkCoords(var9, var11).addEntity(var1); + } else { + var1.setEntityDead(); + } + } + + if(var1.riddenByEntity != null) { + if(!var1.riddenByEntity.isDead && var1.riddenByEntity.ridingEntity == var1) { + this.updateEntity(var1.riddenByEntity); + } else { + var1.riddenByEntity.ridingEntity = null; + var1.riddenByEntity = null; + } + } + + 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; + } + + } + } + + public boolean checkIfAABBIsClear(AxisAlignedBB var1) { + List var2 = this.getEntitiesWithinAABBExcludingEntity((Entity)null, var1); + + for(int var3 = 0; var3 < var2.size(); ++var3) { + Entity var4 = (Entity)var2.get(var3); + if(!var4.isDead && var4.preventEntitySpawning) { + return false; + } + } + + return true; + } + + public boolean getIsAnyLiquid(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.getIsLiquid()) { + 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); + + 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); + boolean var10 = false; + Vec3D var11 = Vec3D.createVector(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.getPercentAir(this.getBlockMetadata(var12, var13, var14))); + if((double)var7 >= var16) { + var10 = true; + var15.velocityToAddToEntity(this, var12, var13, var14, var3, var11); + } + } + } + } + } + + if(var11.lengthVector() > 0.0D) { + var11 = var11.normalize(); + double var18 = 0.004D; + 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 void createExplosion(Entity var1, double var2, double var4, double var6, float var8) { + (new Explosion()).doExplosion(this, var1, var2, var4, var6, var8); + } + + public float getBlockDensity(Vec3D 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(Vec3D.createVector(var14, var16, var18), var1) == null) { + ++var9; + } + + ++var10; + } + } + } + + return (float)var9 / (float)var10; + } + + public void extinguishFire(int var1, int var2, int var3, int var4) { + if(var4 == 0) { + --var2; + } + + if(var4 == 1) { + ++var2; + } + + if(var4 == 2) { + --var3; + } + + if(var4 == 3) { + ++var3; + } + + if(var4 == 4) { + --var1; + } + + if(var4 == 5) { + ++var1; + } + + if(this.getBlockId(var1, var2, var3) == Block.fire.blockID) { + this.playSoundEffect((double)((float)var1 + 0.5F), (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), "random.fizz", 0.5F, 2.6F + (this.rand.nextFloat() - this.rand.nextFloat()) * 0.8F); + this.setBlockWithNotify(var1, var2, var3, 0); + } + + } + + public Entity createDebugPlayer(Class var1) { + return null; + } + + public String getDebugLoadedEntities() { + return "All: " + this.loadedEntityList.size(); + } + + public Entity getPlayerEntity() { + return this.playerEntity; + } + + public TileEntity getBlockTileEntity(int var1, int var2, int var3) { + Chunk var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + return var4 != null ? var4.getChunkBlockTileEntity(var1 & 15, var2, var3 & 15) : null; + } + + public void setBlockTileEntity(int var1, int var2, int var3, TileEntity var4) { + Chunk var5 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + if(var5 != null) { + var5.setChunkBlockTileEntity(var1 & 15, var2, var3 & 15, var4); + } + + } + + public void removeBlockTileEntity(int var1, int var2, int var3) { + Chunk var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + if(var4 != null) { + var4.removeChunkBlockTileEntity(var1 & 15, var2, var3 & 15); + } + + } + + public boolean isBlockNormalCube(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return var4 == null ? false : var4.isOpaqueCube(); + } + + public void saveWorldIndirectly(IProgressUpdate var1) { + this.saveWorld(true, var1); + } + + public boolean updatingLighting() { + int var1 = 100000; + + while(this.lightingToUpdate.size() > 0) { + --var1; + if(var1 <= 0) { + return true; + } + + ((MetadataChunkBlock)this.lightingToUpdate.remove(this.lightingToUpdate.size() - 1)).updateLight(this); + } + + return false; + } + + public void scheduleLightingUpdate(EnumSkyBlock var1, int var2, int var3, int var4, int var5, int var6, int var7) { + int var8 = this.lightingToUpdate.size(); + int var9 = 4; + if(var9 > var8) { + var9 = var8; + } + + for(int var10 = 0; var10 < var9; ++var10) { + MetadataChunkBlock var11 = (MetadataChunkBlock)this.lightingToUpdate.get(this.lightingToUpdate.size() - var10 - 1); + if(var11.skyBlock == var1 && var11.getLightUpdated(var2, var3, var4, var5, var6, var7)) { + return; + } + } + + this.lightingToUpdate.add(new MetadataChunkBlock(var1, var2, var3, var4, var5, var6, var7)); + if(this.lightingToUpdate.size() > 100000) { + while(this.lightingToUpdate.size() > '\uc350') { + this.updatingLighting(); + } + } + + } + + public void calculateInitialSkylight() { + int var1 = this.calculateSkylightSubtracted(1.0F); + if(var1 != this.skylightSubtracted) { + this.skylightSubtracted = var1; + } + + } + + public void tick() { + this.chunkProvider.unload100OldestChunks(); + if(!this.loadedEntityList.contains(this.playerEntity) && this.playerEntity != null) { + System.out.println("DOHASDOSHIH!"); + this.spawnEntityInWorld(this.playerEntity); + } + + int var1 = this.calculateSkylightSubtracted(1.0F); + int var2; + if(var1 != this.skylightSubtracted) { + this.skylightSubtracted = var1; + + for(var2 = 0; var2 < this.worldAccesses.size(); ++var2) { + ((IWorldAccess)this.worldAccesses.get(var2)).updateAllRenderers(); + } + } + + ++this.worldTime; + if(this.worldTime % 20L == 0L) { + this.saveWorld(false, (IProgressUpdate)null); + } + + this.tickUpdates(false); + var2 = MathHelper.floor_double(this.playerEntity.posX); + int var3 = MathHelper.floor_double(this.playerEntity.posZ); + byte var4 = 64; + ChunkCache var5 = new ChunkCache(this, var2 - var4, 0, var3 - var4, var2 + var4, 128, var3 + var4); + + for(int var6 = 0; var6 < 8000; ++var6) { + this.updateLCG = this.updateLCG * 3 + this.DIST_HASH_MAGIC; + int var7 = this.updateLCG >> 2; + int var8 = (var7 & 127) - 64 + var2; + int var9 = (var7 >> 8 & 127) - 64 + var3; + int var10 = var7 >> 16 & 127; + int var11 = var5.getBlockId(var8, var10, var9); + if(Block.tickOnLoad[var11]) { + Block.blocksList[var11].updateTick(this, var8, var10, var9, this.rand); + } + } + + } + + public boolean tickUpdates(boolean var1) { + int var2 = this.scheduledTickTreeSet.size(); + if(var2 != this.scheduledTickSet.size()) { + throw new IllegalStateException("TickNextTick list out of synch"); + } else { + if(var2 > 500) { + var2 = 500; + } + + for(int var3 = 0; var3 < var2; ++var3) { + NextTickListEntry var4 = (NextTickListEntry)this.scheduledTickTreeSet.first(); + if(!var1 && var4.scheduledTime > this.worldTime) { + break; + } + + this.scheduledTickTreeSet.remove(var4); + this.scheduledTickSet.remove(var4); + byte var5 = 8; + 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 == var4.blockID && var6 > 0) { + Block.blocksList[var6].updateTick(this, var4.xCoord, var4.yCoord, var4.zCoord, this.rand); + } + } + } + + return this.scheduledTickTreeSet.size() != 0; + } + } + + public void randomDisplayUpdates(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) { + Block.blocksList[var10].randomDisplayTick(this, var7, var8, var9, var5); + } + } + + } + + public List getEntitiesWithinAABBExcludingEntity(Entity var1, AxisAlignedBB var2) { + this.entitiesWithinAABBExcludingEntity.clear(); + int var3 = MathHelper.floor_double((var2.minX - 2.0D) / 16.0D); + int var4 = MathHelper.floor_double((var2.maxX + 2.0D) / 16.0D); + int var5 = MathHelper.floor_double((var2.minZ - 2.0D) / 16.0D); + int var6 = MathHelper.floor_double((var2.maxZ + 2.0D) / 16.0D); + + for(int var7 = var3; var7 <= var4; ++var7) { + for(int var8 = var5; var8 <= var6; ++var8) { + if(this.chunkExists(var7, var8)) { + this.getChunkFromChunkCoords(var7, var8).getEntitiesWithinAABBForEntity(var1, var2, this.entitiesWithinAABBExcludingEntity); + } + } + } + + return this.entitiesWithinAABBExcludingEntity; + } + + public List getEntitiesWithinAABB(Class var1, AxisAlignedBB var2) { + int var3 = MathHelper.floor_double((var2.minX - 2.0D) / 16.0D); + int var4 = MathHelper.floor_double((var2.maxX + 2.0D) / 16.0D); + int var5 = MathHelper.floor_double((var2.minZ - 2.0D) / 16.0D); + int var6 = MathHelper.floor_double((var2.maxZ + 2.0D) / 16.0D); + ArrayList var7 = new ArrayList(); + + for(int var8 = var3; var8 <= var4; ++var8) { + for(int var9 = var5; var9 <= var6; ++var9) { + if(this.chunkExists(var8, var9)) { + this.getChunkFromChunkCoords(var8, var9).getEntitiesOfTypeWithinAAAB(var1, var2, var7); + } + } + } + + return var7; + } + + public List getLoadedEntityList() { + return this.loadedEntityList; + } + + public void updateTileEntityChunkAndDoNothing(int var1, int var2, int var3) { + 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(var1.isAssignableFrom(var4.getClass())) { + ++var2; + } + } + + return var2; + } + + public void addLoadedEntities(List var1) { + this.loadedEntityList.addAll(var1); + + for(int var2 = 0; var2 < this.worldAccesses.size(); ++var2) { + IWorldAccess var3 = (IWorldAccess)this.worldAccesses.get(var2); + + for(int var4 = 0; var4 < var1.size(); ++var4) { + var3.obtainEntitySkin((Entity)var1.get(var4)); + } + } + + } + + public void unloadEntities(List var1) { + this.unloadedEntityList.addAll(var1); + } + + public void dropOldChunks() { + while(this.chunkProvider.unload100OldestChunks()) { + } + + } + + public boolean canBlockBePlacedAt(int var1, int var2, int var3, int var4, boolean var5) { + int var6 = this.getBlockId(var2, var3, var4); + Block var7 = Block.blocksList[var6]; + Block var8 = Block.blocksList[var1]; + AxisAlignedBB var9 = var8.getCollisionBoundingBoxFromPool(this, var2, var3, var4); + if(var5) { + var9 = null; + } + + return (var1 > 0 && var7 == null || var7 == Block.waterMoving || var7 == Block.waterStill || var7 == Block.lavaMoving || var7 == Block.lavaStill || var7 == Block.fire) && (var9 == null || this.checkIfAABBIsClear(var9)) && var8.canPlaceBlockAt(this, var2, var3, var4); + } + + public PathEntity getPathToEntity(Entity var1, Entity var2, float var3) { + int var4 = MathHelper.floor_double(var1.posX); + int var5 = MathHelper.floor_double(var1.posY); + int var6 = MathHelper.floor_double(var1.posZ); + int var7 = (int)(var3 + 32.0F); + int var8 = var4 - var7; + int var9 = var5 - var7; + int var10 = var6 - var7; + int var11 = var4 + var7; + int var12 = var5 + var7; + int var13 = var6 + var7; + ChunkCache var14 = new ChunkCache(this, var8, var9, var10, var11, var12, var13); + return (new Pathfinder(var14)).createEntityPathTo(var1, var2, var3); + } + + public PathEntity getEntityPathToXYZ(Entity var1, int var2, int var3, int var4, float var5) { + int var6 = MathHelper.floor_double(var1.posX); + int var7 = MathHelper.floor_double(var1.posY); + int var8 = MathHelper.floor_double(var1.posZ); + int var9 = (int)(var5 + 32.0F); + int var10 = var6 - var9; + int var11 = var7 - var9; + int var12 = var8 - var9; + int var13 = var6 + var9; + int var14 = var7 + var9; + int var15 = var8 + var9; + ChunkCache var16 = new ChunkCache(this, var10, var11, var12, var13, var14, var15); + return (new Pathfinder(var16)).createEntityPathTo(var1, var2, var3, var4, var5); + } + + static { + float var0 = 0.05F; + + for(int var1 = 0; var1 <= 15; ++var1) { + float var2 = 1.0F - (float)var1 / 15.0F; + lightBrightnessTable[var1] = (1.0F - var2) / (var2 * 3.0F + 1.0F) * (1.0F - var0) + var0; + } + + } +} diff --git a/src/net/minecraft/src/WorldGenDungeons.java b/src/net/minecraft/src/WorldGenDungeons.java new file mode 100644 index 0000000..64d59f0 --- /dev/null +++ b/src/net/minecraft/src/WorldGenDungeons.java @@ -0,0 +1,116 @@ +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.getBlockId(var10, var11, var12) == 0 && var1.getBlockId(var10, var11 + 1, var12) == 0) { + ++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.setBlockWithNotify(var10, var11, var12, 0); + } else if(var11 >= 0 && !var1.getBlockMaterial(var10, var11 - 1, var12).isSolid()) { + var1.setBlockWithNotify(var10, var11, var12, 0); + } else if(var1.getBlockMaterial(var10, var11, var12).isSolid()) { + if(var11 == var4 - 1 && var2.nextInt(4) != 0) { + var1.setBlockWithNotify(var10, var11, var12, Block.cobblestoneMossy.blockID); + } else { + var1.setBlockWithNotify(var10, var11, var12, Block.cobblestone.blockID); + } + } + } + } + } + + label110: + 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.getBlockId(var12, var4, var14) == 0) { + 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.setBlockWithNotify(var12, var4, var14, Block.chest.blockID); + TileEntityChest var16 = (TileEntityChest)var1.getBlockTileEntity(var12, var4, var14); + int var17 = 0; + + while(true) { + if(var17 >= 8) { + continue label110; + } + + ItemStack var18 = this.pickCheckLootItem(var2); + if(var18 != null) { + var16.setInventorySlotContents(var2.nextInt(var16.getSizeInventory()), var18); + } + + ++var17; + } + } + } + } + } + + var1.setBlockWithNotify(var3, var4, var5, Block.mobSpawner.blockID); + TileEntityMobSpawner var19 = (TileEntityMobSpawner)var1.getBlockTileEntity(var3, var4, var5); + var19.mobID = this.pickMobSpawner(var2); + return true; + } else { + return false; + } + } + + private ItemStack pickCheckLootItem(Random var1) { + int var2 = var1.nextInt(10); + 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) : 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/WorldGenFlowers.java b/src/net/minecraft/src/WorldGenFlowers.java new file mode 100644 index 0000000..f01a0f1 --- /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.getBlockId(var7, var8, var9) == 0 && ((BlockFlower)Block.blocksList[this.plantBlockId]).canBlockStay(var1, var7, var8, var9)) { + var1.setBlock(var7, var8, var9, this.plantBlockId); + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenLiquids.java b/src/net/minecraft/src/WorldGenLiquids.java new file mode 100644 index 0000000..7fbf0cb --- /dev/null +++ b/src/net/minecraft/src/WorldGenLiquids.java @@ -0,0 +1,61 @@ +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.getBlockId(var3 - 1, var4, var5) == 0) { + ++var7; + } + + if(var1.getBlockId(var3 + 1, var4, var5) == 0) { + ++var7; + } + + if(var1.getBlockId(var3, var4, var5 - 1) == 0) { + ++var7; + } + + if(var1.getBlockId(var3, var4, var5 + 1) == 0) { + ++var7; + } + + if(var6 == 3 && var7 == 1) { + var1.setBlockWithNotify(var3, var4, var5, this.liquidBlockId); + } + + return true; + } + } +} diff --git a/src/net/minecraft/src/WorldGenMinable.java b/src/net/minecraft/src/WorldGenMinable.java new file mode 100644 index 0000000..652dd5a --- /dev/null +++ b/src/net/minecraft/src/WorldGenMinable.java @@ -0,0 +1,47 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenMinable extends WorldGenerator { + private int minableBlockId; + private int numberOfBlocks; + + public WorldGenMinable(int var1, int var2) { + this.minableBlockId = var1; + this.numberOfBlocks = var2; + } + + 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; + + for(int var32 = (int)(var20 - var28 / 2.0D); var32 <= (int)(var20 + var28 / 2.0D); ++var32) { + for(int var33 = (int)(var22 - var30 / 2.0D); var33 <= (int)(var22 + var30 / 2.0D); ++var33) { + for(int var34 = (int)(var24 - var28 / 2.0D); var34 <= (int)(var24 + var28 / 2.0D); ++var34) { + double var35 = ((double)var32 + 0.5D - var20) / (var28 / 2.0D); + double var37 = ((double)var33 + 0.5D - var22) / (var30 / 2.0D); + double var39 = ((double)var34 + 0.5D - var24) / (var28 / 2.0D); + if(var35 * var35 + var37 * var37 + var39 * var39 < 1.0D && var1.getBlockId(var32, var33, var34) == Block.stone.blockID) { + var1.setBlock(var32, var33, var34, this.minableBlockId); + } + } + } + } + } + + return true; + } +} diff --git a/src/net/minecraft/src/WorldGenTrees.java b/src/net/minecraft/src/WorldGenTrees.java new file mode 100644 index 0000000..631e379 --- /dev/null +++ b/src/net/minecraft/src/WorldGenTrees.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenTrees extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + int var6 = var2.nextInt(3) + 4; + 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 = 2; + } + + 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) { + 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) { + var1.setBlock(var3, var4 - 1, var5, Block.dirt.blockID); + + int var16; + for(var16 = var4 - 3 + var6; var16 <= var4 + var6; ++var16) { + var10 = var16 - (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) && !Block.opaqueCubeLookup[var1.getBlockId(var12, var16, var14)]) { + var1.setBlock(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) { + var1.setBlock(var3, var4 + var16, var5, Block.wood.blockID); + } + } + + return true; + } else { + return false; + } + } + } else { + return false; + } + } +} diff --git a/src/net/minecraft/src/WorldGenerator.java b/src/net/minecraft/src/WorldGenerator.java new file mode 100644 index 0000000..61bcf66 --- /dev/null +++ b/src/net/minecraft/src/WorldGenerator.java @@ -0,0 +1,10 @@ +package net.minecraft.src; + +import java.util.Random; + +public abstract class WorldGenerator { + public abstract boolean generate(World var1, Random var2, int var3, int var4, int var5); + + public void setScale(double var1, double var3, double var5) { + } +} diff --git a/src/net/minecraft/src/WorldIso.java b/src/net/minecraft/src/WorldIso.java new file mode 100644 index 0000000..703718d --- /dev/null +++ b/src/net/minecraft/src/WorldIso.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +import java.io.File; + +class WorldIso extends World { + final CanvasIsomPreview isomPreview; + + WorldIso(CanvasIsomPreview var1, File var2, String var3) { + super(var2, var3); + this.isomPreview = var1; + } + + protected IChunkProvider getChunkProvider(File var1) { + return new ChunkProviderIso(this, new ChunkLoader(var1, false)); + } +} diff --git a/src/net/minecraft/src/WorldRenderer.java b/src/net/minecraft/src/WorldRenderer.java new file mode 100644 index 0000000..d9ae1a0 --- /dev/null +++ b/src/net/minecraft/src/WorldRenderer.java @@ -0,0 +1,214 @@ +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 sizeWidth; + public int sizeHeight; + public int sizeDepth; + 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 float rendererRadius; + 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; + + public WorldRenderer(World var1, List var2, int var3, int var4, int var5, int var6, int var7) { + this.worldObj = var1; + this.tileEntities = var2; + this.sizeWidth = this.sizeHeight = this.sizeDepth = var6; + this.rendererRadius = MathHelper.sqrt_float((float)(this.sizeWidth * this.sizeWidth + this.sizeHeight * this.sizeHeight + this.sizeDepth * this.sizeDepth)) / 2.0F; + this.glRenderList = var7; + 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 + this.sizeWidth / 2; + this.posYPlus = var2 + this.sizeHeight / 2; + this.posZPlus = var3 + this.sizeDepth / 2; + 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 = 2.0F; + this.rendererBoundingBox = AxisAlignedBB.getBoundingBox((double)((float)var1 - var4), (double)((float)var2 - var4), (double)((float)var3 - var4), (double)((float)(var1 + this.sizeWidth) + var4), (double)((float)(var2 + this.sizeHeight) + var4), (double)((float)(var3 + this.sizeDepth) + var4)); + GL11.glNewList(this.glRenderList + 2, GL11.GL_COMPILE); + RenderItem.renderAABB(AxisAlignedBB.getBoundingBoxFromPool((double)((float)this.posXClip - var4), (double)((float)this.posYClip - var4), (double)((float)this.posZClip - var4), (double)((float)(this.posXClip + this.sizeWidth) + var4), (double)((float)(this.posYClip + this.sizeHeight) + var4), (double)((float)(this.posZClip + this.sizeDepth) + 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) { + ++chunksUpdated; + int var1 = this.posX; + int var2 = this.posY; + int var3 = this.posZ; + int var4 = this.posX + this.sizeWidth; + int var5 = this.posY + this.sizeHeight; + int var6 = this.posZ + this.sizeDepth; + + 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); + RenderBlocks var10 = new RenderBlocks(var9); + + 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((float)(-this.sizeDepth) / 2.0F, (float)(-this.sizeHeight) / 2.0F, (float)(-this.sizeDepth) / 2.0F); + GL11.glScalef(var19, var19, var19); + GL11.glTranslatef((float)this.sizeDepth / 2.0F, (float)this.sizeHeight / 2.0F, (float)this.sizeDepth / 2.0F); + tessellator.startDrawingQuads(); + tessellator.setTranslationD((double)(-this.posX), (double)(-this.posY), (double)(-this.posZ)); + } + + if(var11 == 0 && Block.blocksList[var18] instanceof BlockContainer) { + TileEntity var23 = var9.getBlockTileEntity(var17, var15, var16); + if(TileEntityRenderer.instance.hasSpecialRenderer(var23)) { + this.tileEntityRenderers.add(var23); + } + } + + Block var24 = Block.blocksList[var18]; + int var20 = var24.getRenderBlockPass(); + if(var20 != var11) { + var12 = true; + } else if(var20 == var11) { + var13 |= var10.renderBlockByRenderType(var24, var17, var15, var16); + } + } + } + } + } + + if(var14) { + tessellator.draw(); + GL11.glPopMatrix(); + GL11.glEndList(); + tessellator.setTranslationD(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 updateInFrustrum(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; + } +}

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