From 36d1426e9094358afde4b8a737024f1dbed1ac81 Mon Sep 17 00:00:00 2001 From: PeytonPlayz595 <106421860+PeytonPlayz595@users.noreply.github.com> Date: Wed, 27 Mar 2024 00:53:24 -0400 Subject: [PATCH] Upload server source --- minecraft_server/.classpath | 25 + minecraft_server/.project | 53 + minecraft_server/Server.launch | 19 + minecraft_server/jars/deobfuscated-source.jar | Bin 0 -> 273090 bytes minecraft_server/jars/deobfuscated.jar | Bin 0 -> 435273 bytes .../net/minecraft/server/MinecraftServer.java | 502 +++++ .../src/net/minecraft/src/AxisAlignedBB.java | 340 ++++ .../src/net/minecraft/src/Block.java | 455 +++++ .../net/minecraft/src/BlockBloodStone.java | 7 + .../src/net/minecraft/src/BlockBookshelf.java | 17 + .../src/net/minecraft/src/BlockBreakable.java | 19 + .../src/net/minecraft/src/BlockButton.java | 225 +++ .../src/net/minecraft/src/BlockCactus.java | 73 + .../src/net/minecraft/src/BlockChest.java | 109 ++ .../src/net/minecraft/src/BlockClay.java | 17 + .../src/net/minecraft/src/BlockContainer.java | 24 + .../src/net/minecraft/src/BlockCrops.java | 98 + .../src/net/minecraft/src/BlockDirt.java | 7 + .../src/net/minecraft/src/BlockDoor.java | 162 ++ .../src/net/minecraft/src/BlockFence.java | 21 + .../src/net/minecraft/src/BlockFire.java | 155 ++ .../src/net/minecraft/src/BlockFlower.java | 50 + .../src/net/minecraft/src/BlockFlowing.java | 263 +++ .../src/net/minecraft/src/BlockFluids.java | 221 +++ .../src/net/minecraft/src/BlockFurnace.java | 94 + .../src/net/minecraft/src/BlockGlass.java | 13 + .../src/net/minecraft/src/BlockGrass.java | 33 + .../src/net/minecraft/src/BlockGravel.java | 13 + .../src/net/minecraft/src/BlockIce.java | 35 + .../src/net/minecraft/src/BlockJukeBox.java | 44 + .../src/net/minecraft/src/BlockLadder.java | 91 + .../src/net/minecraft/src/BlockLeaves.java | 116 ++ .../net/minecraft/src/BlockLeavesBase.java | 19 + .../src/net/minecraft/src/BlockLever.java | 192 ++ .../net/minecraft/src/BlockLightStone.java | 13 + .../src/net/minecraft/src/BlockLog.java | 22 + .../net/minecraft/src/BlockMinecartTrack.java | 89 + .../net/minecraft/src/BlockMobSpawner.java | 25 + .../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/BlockPortal.java | 130 ++ .../net/minecraft/src/BlockPressurePlate.java | 140 ++ .../src/net/minecraft/src/BlockPumpkin.java | 30 + .../net/minecraft/src/BlockRedstoneOre.java | 97 + .../net/minecraft/src/BlockRedstoneTorch.java | 126 ++ .../net/minecraft/src/BlockRedstoneWire.java | 286 +++ .../src/net/minecraft/src/BlockReed.java | 65 + .../src/net/minecraft/src/BlockSand.java | 53 + .../src/net/minecraft/src/BlockSapling.java | 32 + .../src/net/minecraft/src/BlockSign.java | 100 + .../src/net/minecraft/src/BlockSlowSand.java | 17 + .../src/net/minecraft/src/BlockSnow.java | 71 + .../src/net/minecraft/src/BlockSnowBlock.java | 26 + .../src/net/minecraft/src/BlockSoil.java | 85 + .../src/net/minecraft/src/BlockSponge.java | 35 + .../src/net/minecraft/src/BlockStairs.java | 156 ++ .../net/minecraft/src/BlockStationary.java | 57 + .../src/net/minecraft/src/BlockStep.java | 55 + .../src/net/minecraft/src/BlockStone.java | 13 + .../src/net/minecraft/src/BlockTNT.java | 39 + .../src/net/minecraft/src/BlockTorch.java | 132 ++ .../src/net/minecraft/src/BlockWorkbench.java | 17 + .../src/net/minecraft/src/Chunk.java | 575 ++++++ .../src/net/minecraft/src/ChunkCache.java | 58 + .../net/minecraft/src/ChunkCoordIntPair.java | 28 + .../net/minecraft/src/ChunkCoordinates.java | 24 + .../src/net/minecraft/src/ChunkLoader.java | 207 ++ .../src/net/minecraft/src/ChunkPosition.java | 26 + .../minecraft/src/ChunkProviderGenerate.java | 546 ++++++ .../net/minecraft/src/ChunkProviderHell.java | 370 ++++ .../src/ChunkProviderLoadOrGenerate.java | 201 ++ .../minecraft/src/ChunkProviderServer.java | 200 ++ .../minecraft/src/CompressedStreamTools.java | 78 + .../minecraft/src/ConsoleLogFormatter.java | 44 + .../net/minecraft/src/ConsoleLogManager.java | 27 + .../src/net/minecraft/src/Entity.java | 816 ++++++++ .../src/net/minecraft/src/EntityAnimals.java | 30 + .../src/net/minecraft/src/EntityArrow.java | 225 +++ .../src/net/minecraft/src/EntityBoat.java | 288 +++ .../src/net/minecraft/src/EntityChicken.java | 77 + .../src/net/minecraft/src/EntityCow.java | 49 + .../src/net/minecraft/src/EntityCreature.java | 151 ++ .../src/net/minecraft/src/EntityCreeper.java | 106 ++ .../net/minecraft/src/EntityFallingSand.java | 74 + .../src/net/minecraft/src/EntityFireball.java | 193 ++ .../src/net/minecraft/src/EntityFish.java | 313 ++++ .../src/net/minecraft/src/EntityFlying.java | 66 + .../src/net/minecraft/src/EntityGhast.java | 139 ++ .../src/net/minecraft/src/EntityItem.java | 191 ++ .../src/net/minecraft/src/EntityList.java | 87 + .../src/net/minecraft/src/EntityLiving.java | 719 +++++++ .../src/net/minecraft/src/EntityMinecart.java | 601 ++++++ .../src/net/minecraft/src/EntityMobs.java | 80 + .../src/net/minecraft/src/EntityPainting.java | 213 +++ .../src/net/minecraft/src/EntityPig.java | 47 + .../net/minecraft/src/EntityPigZombie.java | 88 + .../src/net/minecraft/src/EntityPlayer.java | 266 +++ .../src/net/minecraft/src/EntityPlayerMP.java | 169 ++ .../src/net/minecraft/src/EntitySheep.java | 49 + .../src/net/minecraft/src/EntitySkeleton.java | 66 + .../src/net/minecraft/src/EntitySlime.java | 129 ++ .../src/net/minecraft/src/EntitySnowball.java | 201 ++ .../src/net/minecraft/src/EntitySpider.java | 69 + .../net/minecraft/src/EntityTNTPrimed.java | 68 + .../src/net/minecraft/src/EntityTracker.java | 141 ++ .../net/minecraft/src/EntityTrackerEntry.java | 266 +++ .../src/net/minecraft/src/EntityZombie.java | 37 + .../net/minecraft/src/EntityZombieSimple.java | 17 + .../src/net/minecraft/src/EnumArt.java | 42 + .../net/minecraft/src/EnumCreatureType.java | 14 + .../src/net/minecraft/src/EnumMobType.java | 7 + .../src/net/minecraft/src/EnumSkyBlock.java | 12 + .../src/net/minecraft/src/Explosion.java | 166 ++ .../net/minecraft/src/GuiLogFormatter.java | 46 + .../minecraft/src/GuiLogOutputHandler.java | 37 + .../net/minecraft/src/GuiStatsComponent.java | 56 + .../net/minecraft/src/GuiStatsListener.java | 16 + .../src/net/minecraft/src/HashEntry.java | 50 + .../src/net/minecraft/src/HashEntry2.java | 50 + .../src/net/minecraft/src/IAnimals.java | 4 + .../src/net/minecraft/src/IBlockAccess.java | 11 + .../src/net/minecraft/src/IChunkLoader.java | 15 + .../src/net/minecraft/src/IChunkProvider.java | 15 + .../net/minecraft/src/ICommandListener.java | 7 + .../src/net/minecraft/src/IInventory.java | 7 + .../src/net/minecraft/src/IMobs.java | 4 + .../net/minecraft/src/IProgressUpdate.java | 9 + .../minecraft/src/IUpdatePlayerListBox.java | 5 + .../src/net/minecraft/src/IWorldAccess.java | 21 + .../minecraft/src/InventoryLargeChest.java | 21 + .../net/minecraft/src/InventoryPlayer.java | 293 +++ .../src/net/minecraft/src/Item.java | 166 ++ .../src/net/minecraft/src/ItemArmor.java | 20 + .../src/net/minecraft/src/ItemAxe.java | 9 + .../src/net/minecraft/src/ItemBlock.java | 57 + .../src/net/minecraft/src/ItemBoat.java | 43 + .../src/net/minecraft/src/ItemBow.java | 19 + .../src/net/minecraft/src/ItemBucket.java | 101 + .../src/net/minecraft/src/ItemDoor.java | 72 + .../src/net/minecraft/src/ItemFishingRod.java | 25 + .../net/minecraft/src/ItemFlintAndSteel.java | 44 + .../src/net/minecraft/src/ItemFood.java | 17 + .../src/net/minecraft/src/ItemHoe.java | 41 + .../net/minecraft/src/ItemInWorldManager.java | 117 ++ .../src/net/minecraft/src/ItemMinecart.java | 25 + .../src/net/minecraft/src/ItemPainting.java | 37 + .../src/net/minecraft/src/ItemPickaxe.java | 15 + .../src/net/minecraft/src/ItemRecord.java | 22 + .../src/net/minecraft/src/ItemRedstone.java | 44 + .../src/net/minecraft/src/ItemReed.java | 55 + .../src/net/minecraft/src/ItemSaddle.java | 24 + .../src/net/minecraft/src/ItemSeeds.java | 25 + .../src/net/minecraft/src/ItemSign.java | 55 + .../src/net/minecraft/src/ItemSnowball.java | 18 + .../src/net/minecraft/src/ItemSoup.java | 12 + .../src/net/minecraft/src/ItemSpade.java | 13 + .../src/net/minecraft/src/ItemStack.java | 119 ++ .../src/net/minecraft/src/ItemSword.java | 32 + .../src/net/minecraft/src/ItemTool.java | 44 + .../src/net/minecraft/src/MCHashTable.java | 151 ++ .../src/net/minecraft/src/MCHashTable2.java | 128 ++ .../src/net/minecraft/src/MapGenBase.java | 26 + .../src/net/minecraft/src/MapGenCaves.java | 185 ++ .../net/minecraft/src/MapGenCavesHell.java | 173 ++ .../src/net/minecraft/src/Material.java | 54 + .../src/net/minecraft/src/MaterialLiquid.java | 15 + .../src/net/minecraft/src/MaterialLogic.java | 15 + .../minecraft/src/MaterialTransparent.java | 15 + .../src/net/minecraft/src/MathHelper.java | 54 + .../net/minecraft/src/MetadataChunkBlock.java | 175 ++ .../net/minecraft/src/MinecartTrackLogic.java | 323 ++++ .../net/minecraft/src/MinecraftException.java | 7 + .../src/net/minecraft/src/MobSpawnerBase.java | 73 + .../net/minecraft/src/MobSpawnerDesert.java | 4 + .../src/net/minecraft/src/MobSpawnerHell.java | 8 + .../net/minecraft/src/MobSpawnerSwamp.java | 4 + .../minecraft/src/MovingObjectPosition.java | 26 + .../src/net/minecraft/src/NBTBase.java | 102 + .../src/net/minecraft/src/NBTTagByte.java | 32 + .../net/minecraft/src/NBTTagByteArray.java | 35 + .../src/net/minecraft/src/NBTTagCompound.java | 136 ++ .../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/NetHandler.java | 140 ++ .../net/minecraft/src/NetLoginHandler.java | 118 ++ .../net/minecraft/src/NetServerHandler.java | 471 +++++ .../minecraft/src/NetworkAcceptThread.java | 31 + .../minecraft/src/NetworkListenThread.java | 87 + .../src/net/minecraft/src/NetworkManager.java | 219 +++ .../minecraft/src/NetworkMasterThread.java | 31 + .../minecraft/src/NetworkReaderThread.java | 49 + .../minecraft/src/NetworkWriterThread.java | 43 + .../net/minecraft/src/NextTickListEntry.java | 44 + .../src/net/minecraft/src/NibbleArray.java | 36 + .../src/net/minecraft/src/NoiseGenerator.java | 4 + .../net/minecraft/src/NoiseGenerator2.java | 114 ++ .../minecraft/src/NoiseGeneratorOctaves.java | 53 + .../minecraft/src/NoiseGeneratorOctaves2.java | 45 + .../minecraft/src/NoiseGeneratorPerlin.java | 221 +++ .../src/net/minecraft/src/Packet.java | 110 ++ .../net/minecraft/src/Packet0KeepAlive.java | 20 + .../src/net/minecraft/src/Packet10Flying.java | 33 + .../minecraft/src/Packet11PlayerPosition.java | 31 + .../net/minecraft/src/Packet12PlayerLook.java | 27 + .../minecraft/src/Packet13PlayerLookMove.java | 48 + .../net/minecraft/src/Packet14BlockDig.java | 37 + .../src/net/minecraft/src/Packet15Place.java | 37 + .../src/Packet16BlockItemSwitch.java | 36 + .../minecraft/src/Packet17AddToInventory.java | 44 + .../minecraft/src/Packet18ArmAnimation.java | 36 + .../src/net/minecraft/src/Packet1Login.java | 48 + .../src/Packet20NamedEntitySpawn.java | 61 + .../minecraft/src/Packet21PickupSpawn.java | 64 + .../net/minecraft/src/Packet22Collect.java | 36 + .../minecraft/src/Packet23VehicleSpawn.java | 48 + .../net/minecraft/src/Packet24MobSpawn.java | 56 + .../src/Packet255KickDisconnect.java | 32 + .../src/net/minecraft/src/Packet28.java | 73 + .../minecraft/src/Packet29DestroyEntity.java | 32 + .../net/minecraft/src/Packet2Handshake.java | 32 + .../src/net/minecraft/src/Packet30Entity.java | 38 + .../minecraft/src/Packet31RelEntityMove.java | 35 + .../net/minecraft/src/Packet32EntityLook.java | 34 + .../src/Packet33RelEntityMoveLook.java | 43 + .../minecraft/src/Packet34EntityTeleport.java | 61 + .../src/net/minecraft/src/Packet38.java | 36 + .../src/net/minecraft/src/Packet39.java | 36 + .../src/net/minecraft/src/Packet3Chat.java | 32 + .../net/minecraft/src/Packet4UpdateTime.java | 32 + .../net/minecraft/src/Packet50PreChunk.java | 41 + .../net/minecraft/src/Packet51MapChunk.java | 88 + .../src/Packet52MultiBlockChange.java | 76 + .../minecraft/src/Packet53BlockChange.java | 50 + .../minecraft/src/Packet59ComplexEntity.java | 59 + .../minecraft/src/Packet5PlayerInventory.java | 63 + .../src/net/minecraft/src/Packet60.java | 78 + .../minecraft/src/Packet6SpawnPosition.java | 40 + .../src/net/minecraft/src/Packet7.java | 31 + .../src/net/minecraft/src/Packet8.java | 32 + .../src/net/minecraft/src/Packet9.java | 20 + .../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 | 193 ++ .../src/net/minecraft/src/PlayerInstance.java | 170 ++ .../src/net/minecraft/src/PlayerListBox.java | 28 + .../src/net/minecraft/src/PlayerManager.java | 141 ++ .../net/minecraft/src/PlayerNBTManager.java | 49 + .../net/minecraft/src/PropertyManager.java | 72 + .../net/minecraft/src/RedstoneUpdateInfo.java | 15 + .../src/net/minecraft/src/ServerCommand.java | 11 + .../src/ServerConfigurationManager.java | 369 ++++ .../src/net/minecraft/src/ServerGUI.java | 92 + .../src/ServerGuiCommandListener.java | 24 + .../minecraft/src/ServerGuiFocusAdapter.java | 15 + .../minecraft/src/ServerWindowAdapter.java | 27 + .../src/net/minecraft/src/SpawnerAnimals.java | 133 ++ .../src/net/minecraft/src/StepSound.java | 25 + .../src/net/minecraft/src/StepSoundSand.java | 7 + .../src/net/minecraft/src/StepSoundStone.java | 7 + .../minecraft/src/ThreadCommandReader.java | 33 + .../minecraft/src/ThreadLoginVerifier.java | 34 + .../src/ThreadMonitorConnection.java | 22 + .../src/ThreadServerApplication.java | 16 + .../net/minecraft/src/ThreadSleepForever.java | 22 + .../src/net/minecraft/src/TileEntity.java | 75 + .../net/minecraft/src/TileEntityChest.java | 57 + .../net/minecraft/src/TileEntityFurnace.java | 143 ++ .../minecraft/src/TileEntityMobSpawner.java | 93 + .../src/net/minecraft/src/TileEntitySign.java | 26 + .../src/net/minecraft/src/Vec3D.java | 127 ++ .../src/net/minecraft/src/World.java | 1658 +++++++++++++++++ .../net/minecraft/src/WorldChunkManager.java | 112 ++ .../minecraft/src/WorldChunkManagerHell.java | 50 + .../net/minecraft/src/WorldGenBigTree.java | 348 ++++ .../src/net/minecraft/src/WorldGenCactus.java | 24 + .../src/net/minecraft/src/WorldGenClay.java | 53 + .../net/minecraft/src/WorldGenDungeons.java | 116 ++ .../src/net/minecraft/src/WorldGenFire.java | 18 + .../net/minecraft/src/WorldGenFlowers.java | 24 + .../net/minecraft/src/WorldGenHellLava.java | 70 + .../src/net/minecraft/src/WorldGenLakes.java | 88 + .../minecraft/src/WorldGenLightStone1.java | 61 + .../minecraft/src/WorldGenLightStone2.java | 61 + .../net/minecraft/src/WorldGenLiquids.java | 64 + .../net/minecraft/src/WorldGenMinable.java | 47 + .../net/minecraft/src/WorldGenPumpkin.java | 18 + .../src/net/minecraft/src/WorldGenReed.java | 24 + .../src/net/minecraft/src/WorldGenTrees.java | 78 + .../src/net/minecraft/src/WorldGenerator.java | 10 + .../src/net/minecraft/src/WorldManager.java | 42 + .../src/net/minecraft/src/WorldProvider.java | 68 + .../net/minecraft/src/WorldProviderHell.java | 42 + .../src/net/minecraft/src/WorldServer.java | 92 + 302 files changed, 27055 insertions(+) create mode 100644 minecraft_server/.classpath create mode 100644 minecraft_server/.project create mode 100644 minecraft_server/Server.launch create mode 100644 minecraft_server/jars/deobfuscated-source.jar create mode 100644 minecraft_server/jars/deobfuscated.jar create mode 100644 minecraft_server/src/net/minecraft/server/MinecraftServer.java create mode 100644 minecraft_server/src/net/minecraft/src/AxisAlignedBB.java create mode 100644 minecraft_server/src/net/minecraft/src/Block.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockBloodStone.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockBookshelf.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockBreakable.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockButton.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockCactus.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockChest.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockClay.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockContainer.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockCrops.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockDirt.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockDoor.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockFence.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockFire.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockFlower.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockFlowing.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockFluids.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockFurnace.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockGlass.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockGrass.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockGravel.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockIce.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockJukeBox.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockLadder.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockLeaves.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockLeavesBase.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockLever.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockLightStone.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockLog.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockMinecartTrack.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockMobSpawner.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockMushroom.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockObsidian.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockOre.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockOreBlock.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockPortal.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockPressurePlate.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockPumpkin.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockRedstoneOre.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockRedstoneTorch.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockRedstoneWire.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockReed.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockSand.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockSapling.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockSign.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockSlowSand.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockSnow.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockSnowBlock.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockSoil.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockSponge.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockStairs.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockStationary.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockStep.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockStone.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockTNT.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockTorch.java create mode 100644 minecraft_server/src/net/minecraft/src/BlockWorkbench.java create mode 100644 minecraft_server/src/net/minecraft/src/Chunk.java create mode 100644 minecraft_server/src/net/minecraft/src/ChunkCache.java create mode 100644 minecraft_server/src/net/minecraft/src/ChunkCoordIntPair.java create mode 100644 minecraft_server/src/net/minecraft/src/ChunkCoordinates.java create mode 100644 minecraft_server/src/net/minecraft/src/ChunkLoader.java create mode 100644 minecraft_server/src/net/minecraft/src/ChunkPosition.java create mode 100644 minecraft_server/src/net/minecraft/src/ChunkProviderGenerate.java create mode 100644 minecraft_server/src/net/minecraft/src/ChunkProviderHell.java create mode 100644 minecraft_server/src/net/minecraft/src/ChunkProviderLoadOrGenerate.java create mode 100644 minecraft_server/src/net/minecraft/src/ChunkProviderServer.java create mode 100644 minecraft_server/src/net/minecraft/src/CompressedStreamTools.java create mode 100644 minecraft_server/src/net/minecraft/src/ConsoleLogFormatter.java create mode 100644 minecraft_server/src/net/minecraft/src/ConsoleLogManager.java create mode 100644 minecraft_server/src/net/minecraft/src/Entity.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityAnimals.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityArrow.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityBoat.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityChicken.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityCow.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityCreature.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityCreeper.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityFallingSand.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityFireball.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityFish.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityFlying.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityGhast.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityItem.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityList.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityLiving.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityMinecart.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityMobs.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityPainting.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityPig.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityPigZombie.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityPlayer.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityPlayerMP.java create mode 100644 minecraft_server/src/net/minecraft/src/EntitySheep.java create mode 100644 minecraft_server/src/net/minecraft/src/EntitySkeleton.java create mode 100644 minecraft_server/src/net/minecraft/src/EntitySlime.java create mode 100644 minecraft_server/src/net/minecraft/src/EntitySnowball.java create mode 100644 minecraft_server/src/net/minecraft/src/EntitySpider.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityTNTPrimed.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityTracker.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityTrackerEntry.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityZombie.java create mode 100644 minecraft_server/src/net/minecraft/src/EntityZombieSimple.java create mode 100644 minecraft_server/src/net/minecraft/src/EnumArt.java create mode 100644 minecraft_server/src/net/minecraft/src/EnumCreatureType.java create mode 100644 minecraft_server/src/net/minecraft/src/EnumMobType.java create mode 100644 minecraft_server/src/net/minecraft/src/EnumSkyBlock.java create mode 100644 minecraft_server/src/net/minecraft/src/Explosion.java create mode 100644 minecraft_server/src/net/minecraft/src/GuiLogFormatter.java create mode 100644 minecraft_server/src/net/minecraft/src/GuiLogOutputHandler.java create mode 100644 minecraft_server/src/net/minecraft/src/GuiStatsComponent.java create mode 100644 minecraft_server/src/net/minecraft/src/GuiStatsListener.java create mode 100644 minecraft_server/src/net/minecraft/src/HashEntry.java create mode 100644 minecraft_server/src/net/minecraft/src/HashEntry2.java create mode 100644 minecraft_server/src/net/minecraft/src/IAnimals.java create mode 100644 minecraft_server/src/net/minecraft/src/IBlockAccess.java create mode 100644 minecraft_server/src/net/minecraft/src/IChunkLoader.java create mode 100644 minecraft_server/src/net/minecraft/src/IChunkProvider.java create mode 100644 minecraft_server/src/net/minecraft/src/ICommandListener.java create mode 100644 minecraft_server/src/net/minecraft/src/IInventory.java create mode 100644 minecraft_server/src/net/minecraft/src/IMobs.java create mode 100644 minecraft_server/src/net/minecraft/src/IProgressUpdate.java create mode 100644 minecraft_server/src/net/minecraft/src/IUpdatePlayerListBox.java create mode 100644 minecraft_server/src/net/minecraft/src/IWorldAccess.java create mode 100644 minecraft_server/src/net/minecraft/src/InventoryLargeChest.java create mode 100644 minecraft_server/src/net/minecraft/src/InventoryPlayer.java create mode 100644 minecraft_server/src/net/minecraft/src/Item.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemArmor.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemAxe.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemBlock.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemBoat.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemBow.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemBucket.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemDoor.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemFishingRod.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemFlintAndSteel.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemFood.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemHoe.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemInWorldManager.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemMinecart.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemPainting.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemPickaxe.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemRecord.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemRedstone.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemReed.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemSaddle.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemSeeds.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemSign.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemSnowball.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemSoup.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemSpade.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemStack.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemSword.java create mode 100644 minecraft_server/src/net/minecraft/src/ItemTool.java create mode 100644 minecraft_server/src/net/minecraft/src/MCHashTable.java create mode 100644 minecraft_server/src/net/minecraft/src/MCHashTable2.java create mode 100644 minecraft_server/src/net/minecraft/src/MapGenBase.java create mode 100644 minecraft_server/src/net/minecraft/src/MapGenCaves.java create mode 100644 minecraft_server/src/net/minecraft/src/MapGenCavesHell.java create mode 100644 minecraft_server/src/net/minecraft/src/Material.java create mode 100644 minecraft_server/src/net/minecraft/src/MaterialLiquid.java create mode 100644 minecraft_server/src/net/minecraft/src/MaterialLogic.java create mode 100644 minecraft_server/src/net/minecraft/src/MaterialTransparent.java create mode 100644 minecraft_server/src/net/minecraft/src/MathHelper.java create mode 100644 minecraft_server/src/net/minecraft/src/MetadataChunkBlock.java create mode 100644 minecraft_server/src/net/minecraft/src/MinecartTrackLogic.java create mode 100644 minecraft_server/src/net/minecraft/src/MinecraftException.java create mode 100644 minecraft_server/src/net/minecraft/src/MobSpawnerBase.java create mode 100644 minecraft_server/src/net/minecraft/src/MobSpawnerDesert.java create mode 100644 minecraft_server/src/net/minecraft/src/MobSpawnerHell.java create mode 100644 minecraft_server/src/net/minecraft/src/MobSpawnerSwamp.java create mode 100644 minecraft_server/src/net/minecraft/src/MovingObjectPosition.java create mode 100644 minecraft_server/src/net/minecraft/src/NBTBase.java create mode 100644 minecraft_server/src/net/minecraft/src/NBTTagByte.java create mode 100644 minecraft_server/src/net/minecraft/src/NBTTagByteArray.java create mode 100644 minecraft_server/src/net/minecraft/src/NBTTagCompound.java create mode 100644 minecraft_server/src/net/minecraft/src/NBTTagDouble.java create mode 100644 minecraft_server/src/net/minecraft/src/NBTTagEnd.java create mode 100644 minecraft_server/src/net/minecraft/src/NBTTagFloat.java create mode 100644 minecraft_server/src/net/minecraft/src/NBTTagInt.java create mode 100644 minecraft_server/src/net/minecraft/src/NBTTagList.java create mode 100644 minecraft_server/src/net/minecraft/src/NBTTagLong.java create mode 100644 minecraft_server/src/net/minecraft/src/NBTTagShort.java create mode 100644 minecraft_server/src/net/minecraft/src/NBTTagString.java create mode 100644 minecraft_server/src/net/minecraft/src/NetHandler.java create mode 100644 minecraft_server/src/net/minecraft/src/NetLoginHandler.java create mode 100644 minecraft_server/src/net/minecraft/src/NetServerHandler.java create mode 100644 minecraft_server/src/net/minecraft/src/NetworkAcceptThread.java create mode 100644 minecraft_server/src/net/minecraft/src/NetworkListenThread.java create mode 100644 minecraft_server/src/net/minecraft/src/NetworkManager.java create mode 100644 minecraft_server/src/net/minecraft/src/NetworkMasterThread.java create mode 100644 minecraft_server/src/net/minecraft/src/NetworkReaderThread.java create mode 100644 minecraft_server/src/net/minecraft/src/NetworkWriterThread.java create mode 100644 minecraft_server/src/net/minecraft/src/NextTickListEntry.java create mode 100644 minecraft_server/src/net/minecraft/src/NibbleArray.java create mode 100644 minecraft_server/src/net/minecraft/src/NoiseGenerator.java create mode 100644 minecraft_server/src/net/minecraft/src/NoiseGenerator2.java create mode 100644 minecraft_server/src/net/minecraft/src/NoiseGeneratorOctaves.java create mode 100644 minecraft_server/src/net/minecraft/src/NoiseGeneratorOctaves2.java create mode 100644 minecraft_server/src/net/minecraft/src/NoiseGeneratorPerlin.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet0KeepAlive.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet10Flying.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet11PlayerPosition.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet12PlayerLook.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet13PlayerLookMove.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet14BlockDig.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet15Place.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet16BlockItemSwitch.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet17AddToInventory.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet18ArmAnimation.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet1Login.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet20NamedEntitySpawn.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet21PickupSpawn.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet22Collect.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet23VehicleSpawn.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet24MobSpawn.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet255KickDisconnect.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet28.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet29DestroyEntity.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet2Handshake.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet30Entity.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet31RelEntityMove.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet32EntityLook.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet33RelEntityMoveLook.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet34EntityTeleport.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet38.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet39.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet3Chat.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet4UpdateTime.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet50PreChunk.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet51MapChunk.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet52MultiBlockChange.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet53BlockChange.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet59ComplexEntity.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet5PlayerInventory.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet60.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet6SpawnPosition.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet7.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet8.java create mode 100644 minecraft_server/src/net/minecraft/src/Packet9.java create mode 100644 minecraft_server/src/net/minecraft/src/Path.java create mode 100644 minecraft_server/src/net/minecraft/src/PathEntity.java create mode 100644 minecraft_server/src/net/minecraft/src/PathPoint.java create mode 100644 minecraft_server/src/net/minecraft/src/Pathfinder.java create mode 100644 minecraft_server/src/net/minecraft/src/PlayerInstance.java create mode 100644 minecraft_server/src/net/minecraft/src/PlayerListBox.java create mode 100644 minecraft_server/src/net/minecraft/src/PlayerManager.java create mode 100644 minecraft_server/src/net/minecraft/src/PlayerNBTManager.java create mode 100644 minecraft_server/src/net/minecraft/src/PropertyManager.java create mode 100644 minecraft_server/src/net/minecraft/src/RedstoneUpdateInfo.java create mode 100644 minecraft_server/src/net/minecraft/src/ServerCommand.java create mode 100644 minecraft_server/src/net/minecraft/src/ServerConfigurationManager.java create mode 100644 minecraft_server/src/net/minecraft/src/ServerGUI.java create mode 100644 minecraft_server/src/net/minecraft/src/ServerGuiCommandListener.java create mode 100644 minecraft_server/src/net/minecraft/src/ServerGuiFocusAdapter.java create mode 100644 minecraft_server/src/net/minecraft/src/ServerWindowAdapter.java create mode 100644 minecraft_server/src/net/minecraft/src/SpawnerAnimals.java create mode 100644 minecraft_server/src/net/minecraft/src/StepSound.java create mode 100644 minecraft_server/src/net/minecraft/src/StepSoundSand.java create mode 100644 minecraft_server/src/net/minecraft/src/StepSoundStone.java create mode 100644 minecraft_server/src/net/minecraft/src/ThreadCommandReader.java create mode 100644 minecraft_server/src/net/minecraft/src/ThreadLoginVerifier.java create mode 100644 minecraft_server/src/net/minecraft/src/ThreadMonitorConnection.java create mode 100644 minecraft_server/src/net/minecraft/src/ThreadServerApplication.java create mode 100644 minecraft_server/src/net/minecraft/src/ThreadSleepForever.java create mode 100644 minecraft_server/src/net/minecraft/src/TileEntity.java create mode 100644 minecraft_server/src/net/minecraft/src/TileEntityChest.java create mode 100644 minecraft_server/src/net/minecraft/src/TileEntityFurnace.java create mode 100644 minecraft_server/src/net/minecraft/src/TileEntityMobSpawner.java create mode 100644 minecraft_server/src/net/minecraft/src/TileEntitySign.java create mode 100644 minecraft_server/src/net/minecraft/src/Vec3D.java create mode 100644 minecraft_server/src/net/minecraft/src/World.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldChunkManager.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldChunkManagerHell.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenBigTree.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenCactus.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenClay.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenDungeons.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenFire.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenFlowers.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenHellLava.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenLakes.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenLightStone1.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenLightStone2.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenLiquids.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenMinable.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenPumpkin.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenReed.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenTrees.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldGenerator.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldManager.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldProvider.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldProviderHell.java create mode 100644 minecraft_server/src/net/minecraft/src/WorldServer.java diff --git a/minecraft_server/.classpath b/minecraft_server/.classpath new file mode 100644 index 0000000..ef38e05 --- /dev/null +++ b/minecraft_server/.classpath @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/minecraft_server/.project b/minecraft_server/.project new file mode 100644 index 0000000..85c1741 --- /dev/null +++ b/minecraft_server/.project @@ -0,0 +1,53 @@ + + + Minecraft Server + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + + + libraries + 2 + $%7BPARENT-1-PROJECT_LOC%7D/libraries + + + + + -1002749744921918690 + + 9 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-src + + + + -1002749744921918689 + + 9 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-jars + + + + -1002749744921918688 + + 9 + + org.eclipse.ui.ide.multiFilter + 1.0-name-matches-false-false-source + + + + diff --git a/minecraft_server/Server.launch b/minecraft_server/Server.launch new file mode 100644 index 0000000..9c41d48 --- /dev/null +++ b/minecraft_server/Server.launch @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/minecraft_server/jars/deobfuscated-source.jar b/minecraft_server/jars/deobfuscated-source.jar new file mode 100644 index 0000000000000000000000000000000000000000..90c8d046444480dddd90169edab105326a279b80 GIT binary patch literal 273090 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≫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 z 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 literal 0 HcmV?d00001 diff --git a/minecraft_server/jars/deobfuscated.jar b/minecraft_server/jars/deobfuscated.jar new file mode 100644 index 0000000000000000000000000000000000000000..c4df5e414f8c3b64c42a1e765c3b95b3f42d3b45 GIT binary patch literal 435273 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

-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¨ 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 Zf3Vj#G}dD%parr5S*u literal 0 HcmV?d00001 diff --git a/minecraft_server/src/net/minecraft/server/MinecraftServer.java b/minecraft_server/src/net/minecraft/server/MinecraftServer.java new file mode 100644 index 0000000..2b48668 --- /dev/null +++ b/minecraft_server/src/net/minecraft/server/MinecraftServer.java @@ -0,0 +1,502 @@ +package net.minecraft.server; + +import java.awt.GraphicsEnvironment; +import java.io.File; +import java.io.IOException; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; +import net.minecraft.src.AxisAlignedBB; +import net.minecraft.src.ConsoleLogManager; +import net.minecraft.src.EntityPlayerMP; +import net.minecraft.src.EntityTracker; +import net.minecraft.src.ICommandListener; +import net.minecraft.src.IProgressUpdate; +import net.minecraft.src.IUpdatePlayerListBox; +import net.minecraft.src.Item; +import net.minecraft.src.ItemStack; +import net.minecraft.src.NetworkListenThread; +import net.minecraft.src.Packet3Chat; +import net.minecraft.src.Packet4UpdateTime; +import net.minecraft.src.PropertyManager; +import net.minecraft.src.ServerCommand; +import net.minecraft.src.ServerConfigurationManager; +import net.minecraft.src.ServerGUI; +import net.minecraft.src.ThreadCommandReader; +import net.minecraft.src.ThreadServerApplication; +import net.minecraft.src.ThreadSleepForever; +import net.minecraft.src.Vec3D; +import net.minecraft.src.WorldManager; +import net.minecraft.src.WorldServer; + +public class MinecraftServer implements ICommandListener, Runnable { + public static Logger logger = Logger.getLogger("Minecraft"); + public static HashMap field_6037_b = new HashMap(); + public NetworkListenThread field_6036_c; + public PropertyManager propertyManagerObj; + public WorldServer worldMngr; + public ServerConfigurationManager configManager; + private boolean field_6025_n = true; + public boolean field_6032_g = false; + int field_9014_h = 0; + public String field_9013_i; + public int field_9012_j; + private List field_9010_p = new ArrayList(); + private List commands = Collections.synchronizedList(new ArrayList()); + public EntityTracker field_6028_k; + public boolean onlineMode; + public boolean noAnimals; + public boolean field_9011_n; + + public MinecraftServer() { + new ThreadSleepForever(this); + } + + private boolean func_6008_d() throws UnknownHostException { + ThreadCommandReader var1 = new ThreadCommandReader(this); + var1.setDaemon(true); + var1.start(); + ConsoleLogManager.init(); + logger.info("Starting minecraft server version 0.2.8"); + if(Runtime.getRuntime().maxMemory() / 1024L / 1024L < 512L) { + logger.warning("**** NOT ENOUGH RAM!"); + logger.warning("To start the server with more ram, launch it as \"java -Xmx1024M -Xms1024M -jar minecraft_server.jar\""); + } + + logger.info("Loading properties"); + this.propertyManagerObj = new PropertyManager(new File("server.properties")); + String var2 = this.propertyManagerObj.getStringProperty("server-ip", ""); + this.onlineMode = this.propertyManagerObj.getBooleanProperty("online-mode", true); + this.noAnimals = this.propertyManagerObj.getBooleanProperty("spawn-animals", true); + this.field_9011_n = this.propertyManagerObj.getBooleanProperty("pvp", true); + InetAddress var3 = null; + if(var2.length() > 0) { + var3 = InetAddress.getByName(var2); + } + + int var4 = this.propertyManagerObj.getIntProperty("server-port", 25565); + logger.info("Starting Minecraft server on " + (var2.length() == 0 ? "*" : var2) + ":" + var4); + + try { + this.field_6036_c = new NetworkListenThread(this, var3, var4); + } catch (IOException var6) { + logger.warning("**** FAILED TO BIND TO PORT!"); + logger.log(Level.WARNING, "The exception was: " + var6.toString()); + logger.warning("Perhaps a server is already running on that port?"); + return false; + } + + if(!this.onlineMode) { + logger.warning("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!"); + logger.warning("The server will make no attempt to authenticate usernames. Beware."); + logger.warning("While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose."); + logger.warning("To change this, set \"online-mode\" to \"true\" in the server.settings file."); + } + + this.configManager = new ServerConfigurationManager(this); + this.field_6028_k = new EntityTracker(this); + String var5 = this.propertyManagerObj.getStringProperty("level-name", "world"); + logger.info("Preparing level \"" + var5 + "\""); + this.func_6017_c(var5); + logger.info("Done! For help, type \"help\" or \"?\""); + return true; + } + + private void func_6017_c(String var1) { + logger.info("Preparing start region"); + this.worldMngr = new WorldServer(this, new File("."), var1, this.propertyManagerObj.getBooleanProperty("hellworld", false) ? -1 : 0); + this.worldMngr.func_4072_a(new WorldManager(this)); + this.worldMngr.monstersEnabled = this.propertyManagerObj.getBooleanProperty("spawn-monsters", true) ? 1 : 0; + this.configManager.setPlayerManager(this.worldMngr); + byte var2 = 10; + + for(int var3 = -var2; var3 <= var2; ++var3) { + this.func_6019_a("Preparing spawn area", (var3 + var2) * 100 / (var2 + var2 + 1)); + + for(int var4 = -var2; var4 <= var2; ++var4) { + if(!this.field_6025_n) { + return; + } + + this.worldMngr.A.loadChunk((this.worldMngr.spawnX >> 4) + var3, (this.worldMngr.spawnZ >> 4) + var4); + } + } + + this.func_6011_e(); + } + + private void func_6019_a(String var1, int var2) { + this.field_9013_i = var1; + this.field_9012_j = var2; + System.out.println(var1 + ": " + var2 + "%"); + } + + private void func_6011_e() { + this.field_9013_i = null; + this.field_9012_j = 0; + } + + private void saveServerWorld() { + logger.info("Saving chunks"); + this.worldMngr.func_485_a(true, (IProgressUpdate)null); + } + + private void func_6013_g() { + logger.info("Stopping server"); + if(this.configManager != null) { + this.configManager.savePlayerStates(); + } + + if(this.worldMngr != null) { + this.saveServerWorld(); + } + + } + + public void func_6016_a() { + this.field_6025_n = false; + } + + public void run() { + try { + if(this.func_6008_d()) { + long var1 = System.currentTimeMillis(); + long var3 = 0L; + + while(this.field_6025_n) { + long var5 = System.currentTimeMillis(); + long var7 = var5 - var1; + if(var7 > 2000L) { + logger.warning("Can\'t keep up! Did the system time change, or is the server overloaded?"); + var7 = 2000L; + } + + if(var7 < 0L) { + logger.warning("Time ran backwards! Did the system time change?"); + var7 = 0L; + } + + var3 += var7; + var1 = var5; + + while(var3 > 50L) { + var3 -= 50L; + this.func_6018_h(); + } + + Thread.sleep(1L); + } + } else { + while(this.field_6025_n) { + this.commandLineParser(); + + try { + Thread.sleep(10L); + } catch (InterruptedException var15) { + var15.printStackTrace(); + } + } + } + } catch (Exception var16) { + var16.printStackTrace(); + logger.log(Level.SEVERE, "Unexpected exception", var16); + + while(this.field_6025_n) { + this.commandLineParser(); + + try { + Thread.sleep(10L); + } catch (InterruptedException var14) { + var14.printStackTrace(); + } + } + } finally { + this.func_6013_g(); + this.field_6032_g = true; + System.exit(0); + } + + } + + private void func_6018_h() { + ArrayList var1 = new ArrayList(); + Iterator var2 = field_6037_b.keySet().iterator(); + + while(var2.hasNext()) { + String var3 = (String)var2.next(); + int var4 = ((Integer)field_6037_b.get(var3)).intValue(); + if(var4 > 0) { + field_6037_b.put(var3, Integer.valueOf(var4 - 1)); + } else { + var1.add(var3); + } + } + + int var6; + for(var6 = 0; var6 < var1.size(); ++var6) { + field_6037_b.remove(var1.get(var6)); + } + + AxisAlignedBB.clearBoundingBoxPool(); + Vec3D.initialize(); + ++this.field_9014_h; + if(this.field_9014_h % 20 == 0) { + this.configManager.sendPacketToAllPlayers(new Packet4UpdateTime(this.worldMngr.worldTime)); + } + + this.worldMngr.tick(); + + while(this.worldMngr.func_6156_d()) { + } + + this.worldMngr.func_459_b(); + this.field_6036_c.func_715_a(); + this.configManager.func_637_b(); + this.field_6028_k.func_607_a(); + + for(var6 = 0; var6 < this.field_9010_p.size(); ++var6) { + ((IUpdatePlayerListBox)this.field_9010_p.get(var6)).update(); + } + + try { + this.commandLineParser(); + } catch (Exception var5) { + logger.log(Level.WARNING, "Unexpected exception while parsing console command", var5); + } + + } + + public void addCommand(String var1, ICommandListener var2) { + this.commands.add(new ServerCommand(var1, var2)); + } + + public void commandLineParser() { + while(this.commands.size() > 0) { + ServerCommand var1 = (ServerCommand)this.commands.remove(0); + String var2 = var1.command; + ICommandListener var3 = var1.commandListener; + String var4 = var3.getUsername(); + if(!var2.toLowerCase().startsWith("help") && !var2.toLowerCase().startsWith("?")) { + if(var2.toLowerCase().startsWith("list")) { + var3.log("Connected players: " + this.configManager.getPlayerList()); + } else if(var2.toLowerCase().startsWith("stop")) { + this.func_6014_a(var4, "Stopping the server.."); + this.field_6025_n = false; + } else if(var2.toLowerCase().startsWith("save-all")) { + this.func_6014_a(var4, "Forcing save.."); + this.worldMngr.func_485_a(true, (IProgressUpdate)null); + this.func_6014_a(var4, "Save complete."); + } else if(var2.toLowerCase().startsWith("save-off")) { + this.func_6014_a(var4, "Disabling level saving.."); + this.worldMngr.field_816_A = true; + } else if(var2.toLowerCase().startsWith("save-on")) { + this.func_6014_a(var4, "Enabling level saving.."); + this.worldMngr.field_816_A = false; + } else { + String var11; + if(var2.toLowerCase().startsWith("op ")) { + var11 = var2.substring(var2.indexOf(" ")).trim(); + this.configManager.opPlayer(var11); + this.func_6014_a(var4, "Opping " + var11); + this.configManager.sendChatMessageToPlayer(var11, "\u00a7eYou are now op!"); + } else if(var2.toLowerCase().startsWith("deop ")) { + var11 = var2.substring(var2.indexOf(" ")).trim(); + this.configManager.deopPlayer(var11); + this.configManager.sendChatMessageToPlayer(var11, "\u00a7eYou are no longer op!"); + this.func_6014_a(var4, "De-opping " + var11); + } else if(var2.toLowerCase().startsWith("ban-ip ")) { + var11 = var2.substring(var2.indexOf(" ")).trim(); + this.configManager.banIP(var11); + this.func_6014_a(var4, "Banning ip " + var11); + } else if(var2.toLowerCase().startsWith("pardon-ip ")) { + var11 = var2.substring(var2.indexOf(" ")).trim(); + this.configManager.unbanIP(var11); + this.func_6014_a(var4, "Pardoning ip " + var11); + } else { + EntityPlayerMP var12; + if(var2.toLowerCase().startsWith("ban ")) { + var11 = var2.substring(var2.indexOf(" ")).trim(); + this.configManager.banPlayer(var11); + this.func_6014_a(var4, "Banning " + var11); + var12 = this.configManager.getPlayerEntity(var11); + if(var12 != null) { + var12.field_421_a.func_43_c("Banned by admin"); + } + } else if(var2.toLowerCase().startsWith("pardon ")) { + var11 = var2.substring(var2.indexOf(" ")).trim(); + this.configManager.unbanPlayer(var11); + this.func_6014_a(var4, "Pardoning " + var11); + } else if(var2.toLowerCase().startsWith("kick ")) { + var11 = var2.substring(var2.indexOf(" ")).trim(); + var12 = null; + + for(int var13 = 0; var13 < this.configManager.playerEntities.size(); ++var13) { + EntityPlayerMP var14 = (EntityPlayerMP)this.configManager.playerEntities.get(var13); + if(var14.username.equalsIgnoreCase(var11)) { + var12 = var14; + } + } + + if(var12 != null) { + var12.field_421_a.func_43_c("Kicked by admin"); + this.func_6014_a(var4, "Kicking " + var12.username); + } else { + var3.log("Can\'t find user " + var11 + ". No kick."); + } + } else { + String[] var5; + EntityPlayerMP var7; + if(var2.toLowerCase().startsWith("tp ")) { + var5 = var2.split(" "); + if(var5.length == 3) { + var12 = this.configManager.getPlayerEntity(var5[1]); + var7 = this.configManager.getPlayerEntity(var5[2]); + if(var12 == null) { + var3.log("Can\'t find user " + var5[1] + ". No tp."); + } else if(var7 == null) { + var3.log("Can\'t find user " + var5[2] + ". No tp."); + } else { + var12.field_421_a.func_41_a(var7.posX, var7.posY, var7.posZ, var7.rotationYaw, var7.rotationPitch); + this.func_6014_a(var4, "Teleporting " + var5[1] + " to " + var5[2] + "."); + } + } else { + var3.log("Syntax error, please provice a source and a target."); + } + } else if(var2.toLowerCase().startsWith("give ")) { + var5 = var2.split(" "); + if(var5.length != 3 && var5.length != 4) { + return; + } + + String var6 = var5[1]; + var7 = this.configManager.getPlayerEntity(var6); + if(var7 != null) { + try { + int var8 = Integer.parseInt(var5[2]); + if(Item.itemsList[var8] != null) { + this.func_6014_a(var4, "Giving " + var7.username + " some " + var8); + int var9 = 1; + if(var5.length > 3) { + var9 = this.func_6020_b(var5[3], 1); + } + + if(var9 < 1) { + var9 = 1; + } + + if(var9 > 64) { + var9 = 64; + } + + var7.func_161_a(new ItemStack(var8, var9)); + } else { + var3.log("There\'s no item with id " + var8); + } + } catch (NumberFormatException var10) { + var3.log("There\'s no item with id " + var5[2]); + } + } else { + var3.log("Can\'t find user " + var6); + } + } else if(var2.toLowerCase().startsWith("say ")) { + var2 = var2.substring(var2.indexOf(" ")).trim(); + logger.info("[" + var4 + "] " + var2); + this.configManager.sendPacketToAllPlayers(new Packet3Chat("\u00a7d[Server] " + var2)); + } else if(var2.toLowerCase().startsWith("tell ")) { + var5 = var2.split(" "); + if(var5.length >= 3) { + var2 = var2.substring(var2.indexOf(" ")).trim(); + var2 = var2.substring(var2.indexOf(" ")).trim(); + logger.info("[" + var4 + "->" + var5[1] + "] " + var2); + var2 = "\u00a77" + var4 + " whispers " + var2; + logger.info(var2); + if(!this.configManager.sendPacketToPlayer(var5[1], new Packet3Chat(var2))) { + var3.log("There\'s no player by that name online."); + } + } + } else { + logger.info("Unknown console command. Type \"help\" for help."); + } + } + } + } + } else { + var3.log("To run the server without a gui, start it like this:"); + var3.log(" java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui"); + var3.log("Console commands:"); + var3.log(" help or ? shows this message"); + var3.log(" kick removes a player from the server"); + var3.log(" ban bans a player from the server"); + var3.log(" pardon pardons a banned player so that they can connect again"); + var3.log(" ban-ip bans an IP address from the server"); + var3.log(" pardon-ip pardons a banned IP address so that they can connect again"); + var3.log(" op turns a player into an op"); + var3.log(" deop removes op status from a player"); + var3.log(" tp moves one player to the same location as another player"); + var3.log(" give [num] gives a player a resource"); + var3.log(" tell sends a private message to a player"); + var3.log(" stop gracefully stops the server"); + var3.log(" save-all forces a server-wide level save"); + var3.log(" save-off disables terrain saving (useful for backup scripts)"); + var3.log(" save-on re-enables terrain saving"); + var3.log(" list lists all currently connected players"); + var3.log(" say broadcasts a message to all players"); + } + } + + } + + private void func_6014_a(String var1, String var2) { + String var3 = var1 + ": " + var2; + this.configManager.sendChatMessageToAllPlayers("\u00a77(" + var3 + ")"); + logger.info(var3); + } + + private int func_6020_b(String var1, int var2) { + try { + return Integer.parseInt(var1); + } catch (NumberFormatException var4) { + return var2; + } + } + + public void func_6022_a(IUpdatePlayerListBox var1) { + this.field_9010_p.add(var1); + } + + public static void main(String[] var0) { + try { + MinecraftServer var1 = new MinecraftServer(); + if(!GraphicsEnvironment.isHeadless() && (var0.length <= 0 || !var0[0].equals("nogui"))) { + ServerGUI.initGui(var1); + } + + (new ThreadServerApplication("Server thread", var1)).start(); + } catch (Exception var2) { + logger.log(Level.SEVERE, "Failed to start the minecraft server", var2); + } + + } + + public File getFile(String var1) { + return new File(var1); + } + + public void log(String var1) { + logger.info(var1); + } + + public String getUsername() { + return "CONSOLE"; + } + + public static boolean func_6015_a(MinecraftServer var0) { + return var0.field_6025_n; + } +} diff --git a/minecraft_server/src/net/minecraft/src/AxisAlignedBB.java b/minecraft_server/src/net/minecraft/src/AxisAlignedBB.java new file mode 100644 index 0000000..66e970c --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/AxisAlignedBB.java @@ -0,0 +1,340 @@ +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 expands(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 func_710_a(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 func_701_b(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 func_709_c(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 AxisAlignedBB func_694_e(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 copy() { + return getBoundingBoxFromPool(this.minX, this.minY, this.minZ, this.maxX, this.maxY, this.maxZ); + } + + public MovingObjectPosition func_706_a(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/minecraft_server/src/net/minecraft/src/Block.java b/minecraft_server/src/net/minecraft/src/Block.java new file mode 100644 index 0000000..618e47e --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Block.java @@ -0,0 +1,455 @@ +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 StepSoundStone("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[] field_540_p = new boolean[256]; + public static final boolean[] isBlockContainer = new boolean[256]; + public static final int[] lightOpacity = new int[256]; + public static final boolean[] field_537_s = 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 waterStill = (new BlockFlowing(8, Material.water)).setHardness(100.0F).setLightOpacity(3); + public static final Block waterMoving = (new BlockStationary(9, Material.water)).setHardness(100.0F).setLightOpacity(3); + public static final Block lavaStill = (new BlockFlowing(10, Material.lava)).setHardness(0.0F).setLightValue(1.0F).setLightOpacity(255); + public static final Block lavaMoving = (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.field_4216_o, false)).setHardness(0.3F).setStepSound(soundGlassFootstep); + public static final Block field_9042_N = null; + public static final Block field_9041_O = null; + public static final Block field_9040_P = null; + public static final Block field_9039_Q = null; + public static final Block field_9038_R = null; + public static final Block field_9037_S = null; + public static final Block field_9036_T = null; + public static final Block field_9034_U = null; + public static final Block field_9033_V = null; + public static final Block field_9032_W = null; + public static final Block field_9031_X = null; + public static final Block field_9030_Y = null; + public static final Block field_9029_Z = null; + public static final Block field_9049_aa = null; + public static final Block cloth = (new Block(35, 64, Material.field_4217_k)).setHardness(0.8F).setStepSound(soundClothFootstep); + public static final Block field_9048_ac = 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(2000.0F).setStepSound(soundStoneFootstep); + public static final Block torchWood = (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 stairCompactPlanks = new BlockStairs(53, planks); + public static final Block crate = (new BlockChest(54)).setHardness(2.5F).setStepSound(soundWoodFootstep); + public static final Block redstoneWire = (new BlockRedstoneWire(55, 84)).setHardness(0.0F).setStepSound(soundPowderFootstep); + 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 BlockSoil(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 signPost = (new BlockSign(63, TileEntitySign.class, true)).setHardness(1.0F).setStepSound(soundWoodFootstep); + public static final Block doorWood = (new BlockDoor(64, Material.wood)).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(0.7F).setStepSound(soundMetalFootstep); + public static final Block stairCompactCobblestone = new BlockStairs(67, cobblestone); + public static final Block signWall = (new BlockSign(68, TileEntitySign.class, false)).setHardness(1.0F).setStepSound(soundWoodFootstep); + public static final Block lever = (new BlockLever(69, 96)).setHardness(0.5F).setStepSound(soundWoodFootstep); + public static final Block pressurePlateStone = (new BlockPressurePlate(70, stone.blockIndexInTexture, EnumMobType.mobs)).setHardness(0.5F).setStepSound(soundStoneFootstep); + public static final Block doorSteel = (new BlockDoor(71, Material.iron)).setHardness(5.0F).setStepSound(soundMetalFootstep); + public static final Block pressurePlatePlanks = (new BlockPressurePlate(72, planks.blockIndexInTexture, EnumMobType.everything)).setHardness(0.5F).setStepSound(soundWoodFootstep); + public static final Block oreRedstone = (new BlockRedstoneOre(73, 51, false)).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep); + public static final Block oreRedstoneGlowing = (new BlockRedstoneOre(74, 51, true)).setLightValue(10.0F / 16.0F).setHardness(3.0F).setResistance(5.0F).setStepSound(soundStoneFootstep); + public static final Block torchRedstoneIdle = (new BlockRedstoneTorch(75, 115, false)).setHardness(0.0F).setStepSound(soundWoodFootstep); + public static final Block torchRedstoneActive = (new BlockRedstoneTorch(76, 99, true)).setHardness(0.0F).setLightValue(0.5F).setStepSound(soundWoodFootstep); + public static final Block button = (new BlockButton(77, stone.blockIndexInTexture)).setHardness(0.5F).setStepSound(soundStoneFootstep); + public static final Block snow = (new BlockSnow(78, 66)).setHardness(0.1F).setStepSound(soundClothFootstep); + public static final Block ice = (new BlockIce(79, 67)).setHardness(0.5F).setLightOpacity(3).setStepSound(soundGlassFootstep); + public static final Block blockSnow = (new BlockSnowBlock(80, 66)).setHardness(0.2F).setStepSound(soundClothFootstep); + public static final Block cactus = (new BlockCactus(81, 70)).setHardness(0.4F).setStepSound(soundClothFootstep); + public static final Block blockClay = (new BlockClay(82, 72)).setHardness(0.6F).setStepSound(soundGravelFootstep); + public static final Block reed = (new BlockReed(83, 73)).setHardness(0.0F).setStepSound(soundGrassFootstep); + public static final Block jukebox = (new BlockJukeBox(84, 74)).setHardness(2.0F).setResistance(10.0F).setStepSound(soundStoneFootstep); + public static final Block field_9050_aZ = (new BlockFence(85, 4)).setHardness(2.0F).setResistance(5.0F).setStepSound(soundWoodFootstep); + public static final Block pumpkin = (new BlockPumpkin(86, 102, false)).setHardness(1.0F).setStepSound(soundWoodFootstep); + public static final Block bloodStone = (new BlockBloodStone(87, 103)).setHardness(0.4F).setStepSound(soundStoneFootstep); + public static final Block slowSand = (new BlockSlowSand(88, 104)).setHardness(0.5F).setStepSound(soundSandFootstep); + public static final Block lightStone = (new BlockLightStone(89, 105, Material.field_4216_o)).setHardness(0.3F).setStepSound(soundGlassFootstep).setLightValue(1.0F); + public static final BlockPortal portal = (BlockPortal)((BlockPortal)(new BlockPortal(90, 14)).setHardness(-1.0F).setStepSound(soundGlassFootstep).setLightValue(12.0F / 16.0F)); + public static final Block field_9035_bf = (new BlockPumpkin(91, 102, true)).setHardness(1.0F).setStepSound(soundWoodFootstep).setLightValue(1.0F); + 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 field_554_bm; + public final Material blockMaterial; + public float slipperiness; + + protected Block(int var1, Material var2) { + this.stepSound = soundPowderFootstep; + this.field_554_bm = 1.0F; + this.slipperiness = 0.6F; + 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); + field_540_p[var1] = this.allowsAttachment(); + lightOpacity[var1] = this.allowsAttachment() ? 255 : 0; + field_537_s[var1] = this.unusedMethod(); + isBlockContainer[var1] = false; + } + } + + 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 unusedMethod() { + return false; + } + + 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 boolean isSideInsideCoordinate(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.doesBlockAllowAttachment(var2, var3, var4)))))); + } + + public int getBlockTextureFromSide(int var1) { + return this.blockIndexInTexture; + } + + 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 allowsAttachment() { + 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 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 func_254_a(EntityPlayer var1) { + return this.blockHardness < 0.0F ? 0.0F : (!var1.func_167_b(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) { + if(!var1.multiplayerWorld) { + 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.field_433_ad = 10; + var1.entityJoinedWorld(var17); + } + } + } + + } + } + + public float func_226_a(Entity var1) { + return this.blockResistance / 5.0F; + } + + public MovingObjectPosition collisionRayTrace(World var1, int var2, int var3, int var4, Vec3D var5, Vec3D var6) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + var5 = var5.addVector((double)(-var2), (double)(-var3), (double)(-var4)); + var6 = var6.addVector((double)(-var2), (double)(-var3), (double)(-var4)); + 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 boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3, var4); + return var5 == 0 || blocksList[var5].blockMaterial.getIsLiquid(); + } + + 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 boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return false; + } + + public boolean canProvidePower() { + return false; + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + } + + public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) { + return false; + } + + public void func_12007_g(World var1, int var2, int var3, int var4, int var5) { + this.dropBlockAsItem(var1, var2, var3, var4, var5); + } + + public boolean canBlockStay(World var1, int var2, int var3, int var4) { + return true; + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5) { + } + + static { + for(int var0 = 0; var0 < 256; ++var0) { + if(blocksList[var0] != null) { + Item.itemsList[var0] = new ItemBlock(var0 - 256); + } + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockBloodStone.java b/minecraft_server/src/net/minecraft/src/BlockBloodStone.java new file mode 100644 index 0000000..4416764 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockBloodStone.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class BlockBloodStone extends Block { + public BlockBloodStone(int var1, int var2) { + super(var1, var2, Material.rock); + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockBookshelf.java b/minecraft_server/src/net/minecraft/src/BlockBookshelf.java new file mode 100644 index 0000000..35e3631 --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/BlockBreakable.java b/minecraft_server/src/net/minecraft/src/BlockBreakable.java new file mode 100644 index 0000000..aa20ce1 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockBreakable.java @@ -0,0 +1,19 @@ +package net.minecraft.src; + +public class BlockBreakable extends Block { + private boolean field_6084_a; + + protected BlockBreakable(int var1, int var2, Material var3, boolean var4) { + super(var1, var2, var3); + this.field_6084_a = var4; + } + + public boolean allowsAttachment() { + return false; + } + + public boolean isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockId(var2, var3, var4); + return !this.field_6084_a && var6 == this.blockID ? false : super.isSideInsideCoordinate(var1, var2, var3, var4, var5); + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockButton.java b/minecraft_server/src/net/minecraft/src/BlockButton.java new file mode 100644 index 0000000..9053848 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockButton.java @@ -0,0 +1,225 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockButton extends Block { + protected BlockButton(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 int tickRate() { + return 20; + } + + public boolean allowsAttachment() { + return false; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.doesBlockAllowAttachment(var2 - 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2 + 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2, var3, var4 - 1) ? true : var1.doesBlockAllowAttachment(var2, var3, var4 + 1))); + } + + public void onBlockPlaced(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = var6 & 8; + var6 &= 7; + if(var5 == 2 && var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) { + var6 = 4; + } + + if(var5 == 3 && var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) { + var6 = 3; + } + + if(var5 == 4 && var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) { + var6 = 2; + } + + if(var5 == 5 && var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) { + var6 = 1; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 + var7); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 1); + } else if(var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 2); + } else if(var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 3); + } else if(var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 4); + } + + this.func_322_g(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(this.func_322_g(var1, var2, var3, var4)) { + int var6 = var1.getBlockMetadata(var2, var3, var4) & 7; + boolean var7 = false; + if(!var1.doesBlockAllowAttachment(var2 - 1, var3, var4) && var6 == 1) { + var7 = true; + } + + if(!var1.doesBlockAllowAttachment(var2 + 1, var3, var4) && var6 == 2) { + var7 = true; + } + + if(!var1.doesBlockAllowAttachment(var2, var3, var4 - 1) && var6 == 3) { + var7 = true; + } + + if(!var1.doesBlockAllowAttachment(var2, var3, var4 + 1) && var6 == 4) { + var7 = true; + } + + if(var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } + + } + + private boolean func_322_g(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 void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + int var6 = var5 & 7; + boolean var7 = (var5 & 8) > 0; + float var8 = 6.0F / 16.0F; + float var9 = 10.0F / 16.0F; + float var10 = 3.0F / 16.0F; + float var11 = 2.0F / 16.0F; + if(var7) { + var11 = 1.0F / 16.0F; + } + + if(var6 == 1) { + this.setBlockBounds(0.0F, var8, 0.5F - var10, var11, var9, 0.5F + var10); + } else if(var6 == 2) { + this.setBlockBounds(1.0F - var11, var8, 0.5F - var10, 1.0F, var9, 0.5F + var10); + } else if(var6 == 3) { + this.setBlockBounds(0.5F - var10, var8, 0.0F, 0.5F + var10, var9, var11); + } else if(var6 == 4) { + this.setBlockBounds(0.5F - var10, var8, 1.0F - var11, 0.5F + var10, var9, 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) { + if(var1.multiplayerWorld) { + return true; + } else { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = var6 & 7; + int var8 = 8 - (var6 & 8); + if(var8 == 0) { + return true; + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, var7 + var8); + var1.func_519_b(var2, var3, var4, var2, var3, var4); + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.click", 0.3F, 0.6F); + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + if(var7 == 1) { + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + } else if(var7 == 2) { + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + } else if(var7 == 3) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + } else if(var7 == 4) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + } else { + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + } + + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + return true; + } + } + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + if((var5 & 8) > 0) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + int var6 = var5 & 7; + if(var6 == 1) { + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + } else if(var6 == 2) { + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + } else if(var6 == 3) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + } else if(var6 == 4) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + } else { + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + } + } + + super.onBlockRemoval(var1, var2, var3, var4); + } + + public boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return (var1.getBlockMetadata(var2, var3, var4) & 8) > 0; + } + + public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) == 0) { + return false; + } else { + int var7 = var6 & 7; + return var7 == 5 && var5 == 1 ? true : (var7 == 4 && var5 == 2 ? true : (var7 == 3 && var5 == 3 ? true : (var7 == 2 && var5 == 4 ? true : var7 == 1 && var5 == 5))); + } + } + + public boolean canProvidePower() { + return true; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.multiplayerWorld) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) != 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 & 7); + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + int var7 = var6 & 7; + if(var7 == 1) { + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + } else if(var7 == 2) { + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + } else if(var7 == 3) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + } else if(var7 == 4) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + } else { + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + } + + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.click", 0.3F, 0.5F); + var1.func_519_b(var2, var3, var4, var2, var3, var4); + } + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockCactus.java b/minecraft_server/src/net/minecraft/src/BlockCactus.java new file mode 100644 index 0000000..319818e --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockCactus.java @@ -0,0 +1,73 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockCactus extends Block { + protected BlockCactus(int var1, int var2) { + super(var1, var2, Material.field_4214_u); + this.setTickOnLoad(true); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.getBlockId(var2, var3 + 1, var4) == 0) { + int var6; + for(var6 = 1; var1.getBlockId(var2, var3 - var6, var4) == this.blockID; ++var6) { + } + + if(var6 < 3) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + if(var7 == 15) { + var1.setBlockWithNotify(var2, var3 + 1, var4, this.blockID); + var1.setBlockMetadataWithNotify(var2, var3, var4, 0); + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, var7 + 1); + } + } + } + + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + float var5 = 1.0F / 16.0F; + return AxisAlignedBB.getBoundingBoxFromPool((double)((float)var2 + var5), (double)var3, (double)((float)var4 + var5), (double)((float)(var2 + 1) - var5), (double)((float)(var3 + 1) - var5), (double)((float)(var4 + 1) - var5)); + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? this.blockIndexInTexture - 1 : (var1 == 0 ? this.blockIndexInTexture + 1 : this.blockIndexInTexture); + } + + public boolean allowsAttachment() { + return false; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return !super.canPlaceBlockAt(var1, var2, var3, var4) ? false : this.canBlockStay(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!this.canBlockStay(var1, var2, var3, var4)) { + 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) { + if(var1.getBlockMaterial(var2 - 1, var3, var4).func_216_a()) { + return false; + } else if(var1.getBlockMaterial(var2 + 1, var3, var4).func_216_a()) { + return false; + } else if(var1.getBlockMaterial(var2, var3, var4 - 1).func_216_a()) { + return false; + } else if(var1.getBlockMaterial(var2, var3, var4 + 1).func_216_a()) { + return false; + } else { + int var5 = var1.getBlockId(var2, var3 - 1, var4); + return var5 == Block.cactus.blockID || var5 == Block.sand.blockID; + } + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + var5.attackEntity((Entity)null, 1); + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockChest.java b/minecraft_server/src/net/minecraft/src/BlockChest.java new file mode 100644 index 0000000..3a8290d --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockChest.java @@ -0,0 +1,109 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockChest extends BlockContainer { + private Random field_656_a = new Random(); + + protected BlockChest(int var1) { + super(var1, Material.wood); + this.blockIndexInTexture = 26; + } + + 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.getBlock(var2, var3, var4); + + for(int var6 = 0; var6 < var5.func_83_a(); ++var6) { + ItemStack var7 = var5.getStackInSlot(var6); + if(var7 != null) { + float var8 = this.field_656_a.nextFloat() * 0.8F + 0.1F; + float var9 = this.field_656_a.nextFloat() * 0.8F + 0.1F; + float var10 = this.field_656_a.nextFloat() * 0.8F + 0.1F; + + while(var7.stackSize > 0) { + int var11 = this.field_656_a.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.itemDamage)); + float var13 = 0.05F; + var12.motionX = (double)((float)this.field_656_a.nextGaussian() * var13); + var12.motionY = (double)((float)this.field_656_a.nextGaussian() * var13 + 0.2F); + var12.motionZ = (double)((float)this.field_656_a.nextGaussian() * var13); + var1.entityJoinedWorld(var12); + } + } + } + + super.onBlockRemoval(var1, var2, var3, var4); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + Object var6 = (TileEntityChest)var1.getBlock(var2, var3, var4); + if(var1.doesBlockAllowAttachment(var2, var3 + 1, var4)) { + return true; + } else if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID && var1.doesBlockAllowAttachment(var2 - 1, var3 + 1, var4)) { + return true; + } else if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID && var1.doesBlockAllowAttachment(var2 + 1, var3 + 1, var4)) { + return true; + } else if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID && var1.doesBlockAllowAttachment(var2, var3 + 1, var4 - 1)) { + return true; + } else if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID && var1.doesBlockAllowAttachment(var2, var3 + 1, var4 + 1)) { + return true; + } else { + if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (TileEntityChest)var1.getBlock(var2 - 1, var3, var4), (IInventory)var6); + } + + if(var1.getBlockId(var2 + 1, var3, var4) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (IInventory)var6, (TileEntityChest)var1.getBlock(var2 + 1, var3, var4)); + } + + if(var1.getBlockId(var2, var3, var4 - 1) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (TileEntityChest)var1.getBlock(var2, var3, var4 - 1), (IInventory)var6); + } + + if(var1.getBlockId(var2, var3, var4 + 1) == this.blockID) { + var6 = new InventoryLargeChest("Large chest", (IInventory)var6, (TileEntityChest)var1.getBlock(var2, var3, var4 + 1)); + } + + var5.func_166_a((IInventory)var6); + return true; + } + } + + protected TileEntity func_294_a_() { + return new TileEntityChest(); + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockClay.java b/minecraft_server/src/net/minecraft/src/BlockClay.java new file mode 100644 index 0000000..0cb08f3 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockClay.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockClay extends Block { + public BlockClay(int var1, int var2) { + super(var1, var2, Material.clay); + } + + public int idDropped(int var1, Random var2) { + return Item.clay.swiftedIndex; + } + + public int quantityDropped(Random var1) { + return 4; + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockContainer.java b/minecraft_server/src/net/minecraft/src/BlockContainer.java new file mode 100644 index 0000000..93f4685 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockContainer.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +public abstract class BlockContainer extends Block { + protected BlockContainer(int var1, Material var2) { + super(var1, var2); + isBlockContainer[var1] = true; + } + + 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.func_473_a(var2, var3, var4, this.func_294_a_()); + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + super.onBlockRemoval(var1, var2, var3, var4); + var1.func_513_l(var2, var3, var4); + } + + protected abstract TileEntity func_294_a_(); +} diff --git a/minecraft_server/src/net/minecraft/src/BlockCrops.java b/minecraft_server/src/net/minecraft/src/BlockCrops.java new file mode 100644 index 0000000..8aa6755 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockCrops.java @@ -0,0 +1,98 @@ +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.getGrowthRate(var1, var2, var3, var4); + if(var5.nextInt((int)(100.0F / var7)) == 0) { + ++var6; + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + } + } + } + + } + + private float getGrowthRate(World var1, int var2, int var3, int var4) { + float var5 = 1.0F; + int var6 = var1.getBlockId(var2, var3, var4 - 1); + int var7 = var1.getBlockId(var2, var3, var4 + 1); + int var8 = var1.getBlockId(var2 - 1, var3, var4); + int var9 = var1.getBlockId(var2 + 1, var3, var4); + int var10 = var1.getBlockId(var2 - 1, var3, var4 - 1); + int var11 = var1.getBlockId(var2 + 1, var3, var4 - 1); + int var12 = var1.getBlockId(var2 + 1, var3, var4 + 1); + int var13 = var1.getBlockId(var2 - 1, var3, var4 + 1); + boolean var14 = var8 == this.blockID || var9 == this.blockID; + boolean var15 = var6 == this.blockID || var7 == this.blockID; + boolean var16 = var10 == this.blockID || var11 == this.blockID || var12 == this.blockID || var13 == this.blockID; + + for(int var17 = var2 - 1; var17 <= var2 + 1; ++var17) { + for(int var18 = var4 - 1; var18 <= var4 + 1; ++var18) { + int var19 = var1.getBlockId(var17, var3 - 1, var18); + float var20 = 0.0F; + if(var19 == Block.tilledField.blockID) { + var20 = 1.0F; + if(var1.getBlockMetadata(var17, var3 - 1, var18) > 0) { + var20 = 3.0F; + } + } + + if(var17 != var2 || var18 != var4) { + var20 /= 4.0F; + } + + var5 += var20; + } + } + + if(var16 || var14 && var15) { + var5 /= 2.0F; + } + + return var5; + } + + public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) { + super.onBlockDestroyedByPlayer(var1, var2, var3, var4, var5); + if(!var1.multiplayerWorld) { + 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.field_433_ad = 10; + var1.entityJoinedWorld(var11); + } + } + } + + } + + public int idDropped(int var1, Random var2) { + return var1 == 7 ? Item.wheat.swiftedIndex : -1; + } + + public int quantityDropped(Random var1) { + return 1; + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockDirt.java b/minecraft_server/src/net/minecraft/src/BlockDirt.java new file mode 100644 index 0000000..4deab61 --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/BlockDoor.java b/minecraft_server/src/net/minecraft/src/BlockDoor.java new file mode 100644 index 0000000..f62ca84 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockDoor.java @@ -0,0 +1,162 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockDoor extends Block { + protected BlockDoor(int var1, Material var2) { + super(var1, var2); + this.blockIndexInTexture = 97; + if(var2 == Material.iron) { + ++this.blockIndexInTexture; + } + + float var3 = 0.5F; + float var4 = 1.0F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, var4, 0.5F + var3); + } + + public boolean allowsAttachment() { + return false; + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + this.setBlockBoundsBasedOnState(var1, var2, var3, var4); + return super.getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + this.func_273_b(this.func_271_d(var1.getBlockMetadata(var2, var3, var4))); + } + + public void func_273_b(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) { + if(this.blockMaterial == Material.iron) { + return true; + } else { + 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.func_519_b(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 func_272_a(World var1, int var2, int var3, int var4, boolean var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) != 0) { + if(var1.getBlockId(var2, var3 - 1, var4) == this.blockID) { + this.func_272_a(var1, var2, var3 - 1, var4, var5); + } + + } else { + boolean var7 = (var1.getBlockMetadata(var2, var3, var4) & 4) > 0; + if(var7 != var5) { + 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.func_519_b(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); + } + + } + } + } + + 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); + } + + if(var5 > 0 && Block.blocksList[var5].canProvidePower()) { + this.onNeighborBlockChange(var1, var2, var3 - 1, var4, var5); + } + } else { + boolean var7 = false; + if(var1.getBlockId(var2, var3 + 1, var4) != this.blockID) { + var1.setBlockWithNotify(var2, var3, var4, 0); + var7 = true; + } + + if(!var1.doesBlockAllowAttachment(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); + } else if(var5 > 0 && Block.blocksList[var5].canProvidePower()) { + boolean var8 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4) || var1.isBlockIndirectlyGettingPowered(var2, var3 + 1, var4); + this.func_272_a(var1, var2, var3, var4, var8); + } + } + + } + + public int idDropped(int var1, Random var2) { + return (var1 & 8) != 0 ? 0 : (this.blockMaterial == Material.iron ? Item.doorSteel.swiftedIndex : Item.doorWood.swiftedIndex); + } + + 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 func_271_d(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.doesBlockAllowAttachment(var2, var3 - 1, var4) && super.canPlaceBlockAt(var1, var2, var3, var4) && super.canPlaceBlockAt(var1, var2, var3 + 1, var4); + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockFence.java b/minecraft_server/src/net/minecraft/src/BlockFence.java new file mode 100644 index 0000000..c4cd8d2 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockFence.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +import java.util.ArrayList; + +public class BlockFence extends Block { + public BlockFence(int var1, int var2) { + super(var1, var2, Material.wood); + } + + public void getCollidingBoundingBoxes(World var1, int var2, int var3, int var4, AxisAlignedBB var5, ArrayList var6) { + var6.add(AxisAlignedBB.getBoundingBoxFromPool((double)var2, (double)var3, (double)var4, (double)(var2 + 1), (double)var3 + 1.5D, (double)(var4 + 1))); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.getBlockId(var2, var3 - 1, var4) == this.blockID ? false : (!var1.getBlockMaterial(var2, var3 - 1, var4).func_216_a() ? false : super.canPlaceBlockAt(var1, var2, var3, var4)); + } + + public boolean allowsAttachment() { + return false; + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockFire.java b/minecraft_server/src/net/minecraft/src/BlockFire.java new file mode 100644 index 0000000..6fcab61 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockFire.java @@ -0,0 +1,155 @@ +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 allowsAttachment() { + return false; + } + + public int quantityDropped(Random var1) { + return 0; + } + + public int tickRate() { + return 10; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + boolean var6 = var1.getBlockId(var2, var3 - 1, var4) == Block.bloodStone.blockID; + int var7 = var1.getBlockMetadata(var2, var3, var4); + if(var7 < 15) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var7 + 1); + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + } + + if(!var6 && !this.func_268_g(var1, var2, var3, var4)) { + if(!var1.doesBlockAllowAttachment(var2, var3 - 1, var4) || var7 > 3) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + } else if(!var6 && !this.canBlockCatchFire(var1, var2, var3 - 1, var4) && var7 == 15 && var5.nextInt(4) == 0) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } else { + if(var7 % 2 == 0 && var7 > 2) { + 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, 250, var5); + this.tryToCatchBlockOnFire(var1, var2, var3 + 1, var4, 250, var5); + this.tryToCatchBlockOnFire(var1, var2, var3, var4 - 1, 300, var5); + this.tryToCatchBlockOnFire(var1, var2, var3, var4 + 1, 300, var5); + + for(int var8 = var2 - 1; var8 <= var2 + 1; ++var8) { + for(int var9 = var4 - 1; var9 <= var4 + 1; ++var9) { + for(int var10 = var3 - 1; var10 <= var3 + 4; ++var10) { + if(var8 != var2 || var10 != var3 || var9 != var4) { + int var11 = 100; + if(var10 > var3 + 1) { + var11 += (var10 - (var3 + 1)) * 100; + } + + int var12 = this.getChanceOfNeighborsEncouragingFire(var1, var8, var10, var9); + if(var12 > 0 && var5.nextInt(var11) <= var12) { + var1.setBlockWithNotify(var8, var10, var9, 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 func_268_g(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.doesBlockAllowAttachment(var2, var3 - 1, var4) || this.func_268_g(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.doesBlockAllowAttachment(var2, var3 - 1, var4) && !this.func_268_g(var1, var2, var3, var4)) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(var1.getBlockId(var2, var3 - 1, var4) != Block.obsidian.blockID || !Block.portal.tryToCreatePortal(var1, var2, var3, var4)) { + if(!var1.doesBlockAllowAttachment(var2, var3 - 1, var4) && !this.func_268_g(var1, var2, var3, var4)) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } else { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + } + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockFlower.java b/minecraft_server/src/net/minecraft/src/BlockFlower.java new file mode 100644 index 0000000..c3e1abe --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockFlower.java @@ -0,0 +1,50 @@ +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.func_276_g(var1, var2, var3, var4); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + this.func_276_g(var1, var2, var3, var4); + } + + protected final void func_276_g(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 allowsAttachment() { + return false; + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockFlowing.java b/minecraft_server/src/net/minecraft/src/BlockFlowing.java new file mode 100644 index 0000000..68d6f61 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockFlowing.java @@ -0,0 +1,263 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFlowing extends BlockFluids { + int field_659_a = 0; + boolean[] field_658_b = new boolean[4]; + int[] field_660_c = new int[4]; + + protected BlockFlowing(int var1, Material var2) { + super(var1, var2); + } + + private void func_15003_i(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + var1.func_470_a(var2, var3, var4, this.blockID + 1, var5); + var1.func_519_b(var2, var3, var4, var2, var3, var4); + var1.func_521_f(var2, var3, var4); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + int var6 = this.func_301_g(var1, var2, var3, var4); + byte var7 = 1; + if(this.blockMaterial == Material.lava && !var1.field_4272_q.field_6166_d) { + var7 = 2; + } + + boolean var8 = true; + int var10; + if(var6 > 0) { + byte var9 = -100; + this.field_659_a = 0; + int var12 = this.func_307_e(var1, var2 - 1, var3, var4, var9); + var12 = this.func_307_e(var1, var2 + 1, var3, var4, var12); + var12 = this.func_307_e(var1, var2, var3, var4 - 1, var12); + var12 = this.func_307_e(var1, var2, var3, var4 + 1, var12); + var10 = var12 + var7; + if(var10 >= 8 || var12 < 0) { + var10 = -1; + } + + if(this.func_301_g(var1, var2, var3 + 1, var4) >= 0) { + int var11 = this.func_301_g(var1, var2, var3 + 1, var4); + if(var11 >= 8) { + var10 = var11; + } else { + var10 = var11 + 8; + } + } + + if(this.field_659_a >= 2 && this.blockMaterial == Material.water) { + if(var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) { + var10 = 0; + } else if(var1.getBlockMaterial(var2, var3 - 1, var4) == this.blockMaterial && var1.getBlockMetadata(var2, var3, var4) == 0) { + var10 = 0; + } + } + + if(this.blockMaterial == Material.lava && var6 < 8 && var10 < 8 && var10 > var6 && var5.nextInt(4) != 0) { + var10 = var6; + var8 = false; + } + + if(var10 != var6) { + var6 = var10; + if(var10 < 0) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, var10); + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + } + } else if(var8) { + this.func_15003_i(var1, var2, var3, var4); + } + } else { + this.func_15003_i(var1, var2, var3, var4); + } + + if(this.func_312_l(var1, var2, var3 - 1, var4)) { + if(var6 >= 8) { + var1.func_507_b(var2, var3 - 1, var4, this.blockID, var6); + } else { + var1.func_507_b(var2, var3 - 1, var4, this.blockID, var6 + 8); + } + } else if(var6 >= 0 && (var6 == 0 || this.func_309_k(var1, var2, var3 - 1, var4))) { + boolean[] var13 = this.func_4035_j(var1, var2, var3, var4); + var10 = var6 + var7; + if(var6 >= 8) { + var10 = 1; + } + + if(var10 >= 8) { + return; + } + + if(var13[0]) { + this.func_311_f(var1, var2 - 1, var3, var4, var10); + } + + if(var13[1]) { + this.func_311_f(var1, var2 + 1, var3, var4, var10); + } + + if(var13[2]) { + this.func_311_f(var1, var2, var3, var4 - 1, var10); + } + + if(var13[3]) { + this.func_311_f(var1, var2, var3, var4 + 1, var10); + } + } + + } + + private void func_311_f(World var1, int var2, int var3, int var4, int var5) { + if(this.func_312_l(var1, var2, var3, var4)) { + int var6 = var1.getBlockId(var2, var3, var4); + if(var6 > 0) { + if(this.blockMaterial == Material.lava) { + this.func_300_h(var1, var2, var3, var4); + } else { + Block.blocksList[var6].dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + } + } + + var1.func_507_b(var2, var3, var4, this.blockID, var5); + } + + } + + private int func_4034_a(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.func_309_k(var1, var9, var3, var11) && (var1.getBlockMaterial(var9, var3, var11) != this.blockMaterial || var1.getBlockMetadata(var9, var3, var11) != 0)) { + if(!this.func_309_k(var1, var9, var3 - 1, var11)) { + return var5; + } + + if(var5 < 4) { + int var12 = this.func_4034_a(var1, var9, var3, var11, var5 + 1, var8); + if(var12 < var7) { + var7 = var12; + } + } + } + } + } + + return var7; + } + + private boolean[] func_4035_j(World var1, int var2, int var3, int var4) { + int var5; + int var6; + for(var5 = 0; var5 < 4; ++var5) { + this.field_660_c[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.func_309_k(var1, var6, var3, var8) && (var1.getBlockMaterial(var6, var3, var8) != this.blockMaterial || var1.getBlockMetadata(var6, var3, var8) != 0)) { + if(!this.func_309_k(var1, var6, var3 - 1, var8)) { + this.field_660_c[var5] = 0; + } else { + this.field_660_c[var5] = this.func_4034_a(var1, var6, var3, var8, 1, var5); + } + } + } + + var5 = this.field_660_c[0]; + + for(var6 = 1; var6 < 4; ++var6) { + if(this.field_660_c[var6] < var5) { + var5 = this.field_660_c[var6]; + } + } + + for(var6 = 0; var6 < 4; ++var6) { + this.field_658_b[var6] = this.field_660_c[var6] == var5; + } + + return this.field_658_b; + } + + private boolean func_309_k(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3, var4); + if(var5 != Block.doorWood.blockID && var5 != Block.doorSteel.blockID && var5 != Block.signPost.blockID && var5 != Block.ladder.blockID && var5 != Block.reed.blockID) { + if(var5 == 0) { + return false; + } else { + Material var6 = Block.blocksList[var5].blockMaterial; + return var6.func_216_a(); + } + } else { + return true; + } + } + + protected int func_307_e(World var1, int var2, int var3, int var4, int var5) { + int var6 = this.func_301_g(var1, var2, var3, var4); + if(var6 < 0) { + return var5; + } else { + if(var6 == 0) { + ++this.field_659_a; + } + + if(var6 >= 8) { + var6 = 0; + } + + return var5 >= 0 && var6 >= var5 ? var5 : var6; + } + } + + private boolean func_312_l(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.func_309_k(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/minecraft_server/src/net/minecraft/src/BlockFluids.java b/minecraft_server/src/net/minecraft/src/BlockFluids.java new file mode 100644 index 0000000..7161b77 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockFluids.java @@ -0,0 +1,221 @@ +package net.minecraft.src; + +import java.util.Random; + +public abstract class BlockFluids extends Block { + protected BlockFluids(int var1, Material var2) { + super(var1, (var2 == Material.lava ? 14 : 12) * 16 + 13, var2); + float var3 = 0.0F; + float var4 = 0.0F; + this.setBlockBounds(0.0F + var4, 0.0F + var3, 0.0F + var4, 1.0F + var4, 1.0F + var3, 1.0F + var4); + this.setTickOnLoad(true); + } + + public static float setFluidHeight(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 func_301_g(World var1, int var2, int var3, int var4) { + return var1.getBlockMaterial(var2, var3, var4) != this.blockMaterial ? -1 : var1.getBlockMetadata(var2, var3, var4); + } + + protected int func_303_b(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 allowsAttachment() { + return false; + } + + public boolean canCollideCheck(int var1, boolean var2) { + return var2 && var1 == 0; + } + + public boolean isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) { + Material var6 = var1.getBlockMaterial(var2, var3, var4); + return var6 == this.blockMaterial ? false : (var6 == Material.ice ? false : (var5 == 1 ? true : super.isSideInsideCoordinate(var1, var2, var3, var4, var5))); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public int idDropped(int var1, Random var2) { + return 0; + } + + public int quantityDropped(Random var1) { + return 0; + } + + private Vec3D func_298_c(IBlockAccess var1, int var2, int var3, int var4) { + Vec3D var5 = Vec3D.createVector(0.0D, 0.0D, 0.0D); + int var6 = this.func_303_b(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.func_303_b(var1, var8, var3, var10); + int var12; + if(var11 < 0) { + if(!var1.getBlockMaterial(var8, var3, var10).func_218_c()) { + var11 = this.func_303_b(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.isSideInsideCoordinate(var1, var2, var3, var4 - 1, 2)) { + var13 = true; + } + + if(var13 || this.isSideInsideCoordinate(var1, var2, var3, var4 + 1, 3)) { + var13 = true; + } + + if(var13 || this.isSideInsideCoordinate(var1, var2 - 1, var3, var4, 4)) { + var13 = true; + } + + if(var13 || this.isSideInsideCoordinate(var1, var2 + 1, var3, var4, 5)) { + var13 = true; + } + + if(var13 || this.isSideInsideCoordinate(var1, var2, var3 + 1, var4 - 1, 2)) { + var13 = true; + } + + if(var13 || this.isSideInsideCoordinate(var1, var2, var3 + 1, var4 + 1, 3)) { + var13 = true; + } + + if(var13 || this.isSideInsideCoordinate(var1, var2 - 1, var3 + 1, var4, 4)) { + var13 = true; + } + + if(var13 || this.isSideInsideCoordinate(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.func_298_c(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 void updateTick(World var1, int var2, int var3, int var4, Random var5) { + super.updateTick(var1, var2, var3, var4, var5); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + this.func_302_i(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + this.func_302_i(var1, var2, var3, var4); + } + + private void func_302_i(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.func_300_h(var1, var2, var3, var4); + } + } + + } + } + + protected void func_300_h(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/minecraft_server/src/net/minecraft/src/BlockFurnace.java b/minecraft_server/src/net/minecraft/src/BlockFurnace.java new file mode 100644 index 0000000..a7070dc --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockFurnace.java @@ -0,0 +1,94 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockFurnace extends BlockContainer { + private final boolean field_655_a; + + protected BlockFurnace(int var1, boolean var2) { + super(var1, Material.rock); + this.field_655_a = var2; + this.blockIndexInTexture = 45; + } + + public int idDropped(int var1, Random var2) { + return Block.stoneOvenIdle.blockID; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + this.func_296_g(var1, var2, var3, var4); + } + + private void func_296_g(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.field_540_p[var5] && !Block.field_540_p[var6]) { + var9 = 3; + } + + if(Block.field_540_p[var6] && !Block.field_540_p[var5]) { + var9 = 2; + } + + if(Block.field_540_p[var7] && !Block.field_540_p[var8]) { + var9 = 5; + } + + if(Block.field_540_p[var8] && !Block.field_540_p[var7]) { + var9 = 4; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var9); + } + + 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.getBlock(var2, var3, var4); + var5.func_170_a(var6); + return true; + } + + public static void func_295_a(boolean var0, World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + TileEntity var6 = var1.getBlock(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.func_473_a(var2, var3, var4, var6); + } + + protected TileEntity func_294_a_() { + return new TileEntityFurnace(); + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5) { + int var6 = MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + if(var6 == 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 2); + } + + if(var6 == 1) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 5); + } + + if(var6 == 2) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 3); + } + + if(var6 == 3) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 4); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockGlass.java b/minecraft_server/src/net/minecraft/src/BlockGlass.java new file mode 100644 index 0000000..9101b2a --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/BlockGrass.java b/minecraft_server/src/net/minecraft/src/BlockGrass.java new file mode 100644 index 0000000..bca87ca --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockGrass.java @@ -0,0 +1,33 @@ +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 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/minecraft_server/src/net/minecraft/src/BlockGravel.java b/minecraft_server/src/net/minecraft/src/BlockGravel.java new file mode 100644 index 0000000..9b56bb4 --- /dev/null +++ b/minecraft_server/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.swiftedIndex : this.blockID; + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockIce.java b/minecraft_server/src/net/minecraft/src/BlockIce.java new file mode 100644 index 0000000..d48062b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockIce.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockIce extends BlockBreakable { + public BlockIce(int var1, int var2) { + super(var1, var2, Material.ice, false); + this.slipperiness = 0.98F; + this.setTickOnLoad(true); + } + + public boolean isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return super.isSideInsideCoordinate(var1, var2, var3, var4, 1 - var5); + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + Material var5 = var1.getBlockMaterial(var2, var3 - 1, var4); + if(var5.func_218_c() || var5.getIsLiquid()) { + var1.setBlockWithNotify(var2, var3, var4, Block.waterStill.blockID); + } + + } + + public int quantityDropped(Random var1) { + return 0; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.getSavedLightValue(EnumSkyBlock.Block, var2, var3, var4) > 11 - Block.lightOpacity[this.blockID]) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, Block.waterMoving.blockID); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockJukeBox.java b/minecraft_server/src/net/minecraft/src/BlockJukeBox.java new file mode 100644 index 0000000..d3e8cbc --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockJukeBox.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +public class BlockJukeBox extends Block { + protected BlockJukeBox(int var1, int var2) { + super(var1, var2, Material.wood); + } + + public int getBlockTextureFromSide(int var1) { + return this.blockIndexInTexture + (var1 == 1 ? 1 : 0); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 > 0) { + this.ejectRecord(var1, var2, var3, var4, var6); + return true; + } else { + return false; + } + } + + public void ejectRecord(World var1, int var2, int var3, int var4, int var5) { + var1.playRecord((String)null, var2, var3, var4); + var1.setBlockMetadataWithNotify(var2, var3, var4, 0); + int var6 = Item.record13.swiftedIndex + var5 - 1; + float var7 = 0.7F; + double var8 = (double)(var1.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.5D; + double var10 = (double)(var1.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.2D + 0.6D; + double var12 = (double)(var1.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.5D; + EntityItem var14 = new EntityItem(var1, (double)var2 + var8, (double)var3 + var10, (double)var4 + var12, new ItemStack(var6)); + var14.field_433_ad = 10; + var1.entityJoinedWorld(var14); + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) { + if(!var1.multiplayerWorld) { + if(var5 > 0) { + this.ejectRecord(var1, var2, var3, var4, var5); + } + + super.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6); + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockLadder.java b/minecraft_server/src/net/minecraft/src/BlockLadder.java new file mode 100644 index 0000000..b4e807d --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockLadder.java @@ -0,0 +1,91 @@ +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 boolean allowsAttachment() { + return false; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.doesBlockAllowAttachment(var2 - 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2 + 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2, var3, var4 - 1) ? true : var1.doesBlockAllowAttachment(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.doesBlockAllowAttachment(var2, var3, var4 + 1)) { + var6 = 2; + } + + if((var6 == 0 || var5 == 3) && var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) { + var6 = 3; + } + + if((var6 == 0 || var5 == 4) && var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) { + var6 = 4; + } + + if((var6 == 0 || var5 == 5) && var1.doesBlockAllowAttachment(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.doesBlockAllowAttachment(var2, var3, var4 + 1)) { + var7 = true; + } + + if(var6 == 3 && var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) { + var7 = true; + } + + if(var6 == 4 && var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) { + var7 = true; + } + + if(var6 == 5 && var1.doesBlockAllowAttachment(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/minecraft_server/src/net/minecraft/src/BlockLeaves.java b/minecraft_server/src/net/minecraft/src/BlockLeaves.java new file mode 100644 index 0000000..46cfa28 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockLeaves.java @@ -0,0 +1,116 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockLeaves extends BlockLeavesBase { + private int baseIndexInPNG; + private int field_663_c = 0; + + protected BlockLeaves(int var1, int var2) { + super(var1, var2, Material.field_4218_h, false); + this.baseIndexInPNG = var2; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(this == null) { + this.field_663_c = 0; + this.func_316_g(var1, var2, var3, var4); + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + } + } + + public void func_6089_e(World var1, int var2, int var3, int var4, int var5) { + if(var1.getBlockId(var2, var3, var4) == this.blockID) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 != 0 && var6 == var5 - 1) { + this.func_316_g(var1, var2, var3, var4); + } + } + } + + public void func_316_g(World var1, int var2, int var3, int var4) { + if(this == null) { + if(this.field_663_c++ < 100) { + int var5 = var1.getBlockMaterial(var2, var3 - 1, var4).func_216_a() ? 16 : 0; + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 == 0) { + var6 = 1; + var1.setBlockMetadataWithNotify(var2, var3, var4, 1); + } + + var5 = this.func_6090_f(var1, var2, var3 - 1, var4, var5); + var5 = this.func_6090_f(var1, var2, var3, var4 - 1, var5); + var5 = this.func_6090_f(var1, var2, var3, var4 + 1, var5); + var5 = this.func_6090_f(var1, var2 - 1, var3, var4, var5); + var5 = this.func_6090_f(var1, var2 + 1, var3, var4, var5); + int var7 = var5 - 1; + if(var7 < 10) { + var7 = 1; + } + + if(var7 != var6) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var7); + this.func_6089_e(var1, var2, var3 - 1, var4, var6); + this.func_6089_e(var1, var2, var3 + 1, var4, var6); + this.func_6089_e(var1, var2, var3, var4 - 1, var6); + this.func_6089_e(var1, var2, var3, var4 + 1, var6); + this.func_6089_e(var1, var2 - 1, var3, var4, var6); + this.func_6089_e(var1, var2 + 1, var3, var4, var6); + } + + } + } + } + + private int func_6090_f(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockId(var2, var3, var4); + if(var6 == Block.wood.blockID) { + return 16; + } else { + if(var6 == this.blockID) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + if(var7 != 0 && var7 > var5) { + return var7; + } + } + + return var5; + } + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(this == null) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if(var6 == 0) { + this.field_663_c = 0; + this.func_316_g(var1, var2, var3, var4); + } else if(var6 == 1) { + this.func_6091_h(var1, var2, var3, var4); + } else if(var5.nextInt(10) == 0) { + this.func_316_g(var1, var2, var3, var4); + } + + } + } + + private void func_6091_h(World var1, int var2, int var3, int var4) { + 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(20) == 0 ? 1 : 0; + } + + public int idDropped(int var1, Random var2) { + return Block.sapling.blockID; + } + + public boolean allowsAttachment() { + return !this.graphicsLevel; + } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + super.onEntityWalking(var1, var2, var3, var4, var5); + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockLeavesBase.java b/minecraft_server/src/net/minecraft/src/BlockLeavesBase.java new file mode 100644 index 0000000..75ac015 --- /dev/null +++ b/minecraft_server/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 allowsAttachment() { + return false; + } + + public boolean isSideInsideCoordinate(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.isSideInsideCoordinate(var1, var2, var3, var4, var5); + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockLever.java b/minecraft_server/src/net/minecraft/src/BlockLever.java new file mode 100644 index 0000000..aabef18 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockLever.java @@ -0,0 +1,192 @@ +package net.minecraft.src; + +public class BlockLever extends Block { + protected BlockLever(int var1, int var2) { + super(var1, var2, Material.circuits); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean allowsAttachment() { + return false; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.doesBlockAllowAttachment(var2 - 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2 + 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2, var3, var4 - 1) ? true : (var1.doesBlockAllowAttachment(var2, var3, var4 + 1) ? true : var1.doesBlockAllowAttachment(var2, var3 - 1, var4)))); + } + + public void onBlockPlaced(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = var6 & 8; + var6 &= 7; + if(var5 == 1 && var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) { + var6 = 5 + var1.rand.nextInt(2); + } + + if(var5 == 2 && var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) { + var6 = 4; + } + + if(var5 == 3 && var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) { + var6 = 3; + } + + if(var5 == 4 && var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) { + var6 = 2; + } + + if(var5 == 5 && var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) { + var6 = 1; + } + + var1.setBlockMetadataWithNotify(var2, var3, var4, var6 + var7); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 1); + } else if(var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 2); + } else if(var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 3); + } else if(var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 4); + } else if(var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 5 + var1.rand.nextInt(2)); + } + + this.func_274_g(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(this.func_274_g(var1, var2, var3, var4)) { + int var6 = var1.getBlockMetadata(var2, var3, var4) & 7; + boolean var7 = false; + if(!var1.doesBlockAllowAttachment(var2 - 1, var3, var4) && var6 == 1) { + var7 = true; + } + + if(!var1.doesBlockAllowAttachment(var2 + 1, var3, var4) && var6 == 2) { + var7 = true; + } + + if(!var1.doesBlockAllowAttachment(var2, var3, var4 - 1) && var6 == 3) { + var7 = true; + } + + if(!var1.doesBlockAllowAttachment(var2, var3, var4 + 1) && var6 == 4) { + var7 = true; + } + + if(!var1.doesBlockAllowAttachment(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 func_274_g(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 void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4) & 7; + float var6 = 3.0F / 16.0F; + if(var5 == 1) { + this.setBlockBounds(0.0F, 0.2F, 0.5F - var6, var6 * 2.0F, 0.8F, 0.5F + var6); + } else if(var5 == 2) { + this.setBlockBounds(1.0F - var6 * 2.0F, 0.2F, 0.5F - var6, 1.0F, 0.8F, 0.5F + var6); + } else if(var5 == 3) { + this.setBlockBounds(0.5F - var6, 0.2F, 0.0F, 0.5F + var6, 0.8F, var6 * 2.0F); + } else if(var5 == 4) { + this.setBlockBounds(0.5F - var6, 0.2F, 1.0F - var6 * 2.0F, 0.5F + var6, 0.8F, 1.0F); + } else { + var6 = 0.25F; + this.setBlockBounds(0.5F - var6, 0.0F, 0.5F - var6, 0.5F + var6, 0.6F, 0.5F + var6); + } + + } + + 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) { + if(var1.multiplayerWorld) { + return true; + } else { + int var6 = var1.getBlockMetadata(var2, var3, var4); + int var7 = var6 & 7; + int var8 = 8 - (var6 & 8); + var1.setBlockMetadataWithNotify(var2, var3, var4, var7 + var8); + var1.func_519_b(var2, var3, var4, var2, var3, var4); + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.5D, (double)var4 + 0.5D, "random.click", 0.3F, var8 > 0 ? 0.6F : 0.5F); + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + if(var7 == 1) { + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + } else if(var7 == 2) { + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + } else if(var7 == 3) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + } else if(var7 == 4) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + } else { + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + } + + return true; + } + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + if((var5 & 8) > 0) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + int var6 = var5 & 7; + if(var6 == 1) { + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + } else if(var6 == 2) { + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + } else if(var6 == 3) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + } else if(var6 == 4) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + } else { + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + } + } + + super.onBlockRemoval(var1, var2, var3, var4); + } + + public boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return (var1.getBlockMetadata(var2, var3, var4) & 8) > 0; + } + + public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + if((var6 & 8) == 0) { + return false; + } else { + int var7 = var6 & 7; + return var7 == 5 && var5 == 1 ? true : (var7 == 4 && var5 == 2 ? true : (var7 == 3 && var5 == 3 ? true : (var7 == 2 && var5 == 4 ? true : var7 == 1 && var5 == 5))); + } + } + + public boolean canProvidePower() { + return true; + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockLightStone.java b/minecraft_server/src/net/minecraft/src/BlockLightStone.java new file mode 100644 index 0000000..b33203c --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockLightStone.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockLightStone extends Block { + public BlockLightStone(int var1, int var2, Material var3) { + super(var1, var2, var3); + } + + public int idDropped(int var1, Random var2) { + return Item.lightStoneDust.swiftedIndex; + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockLog.java b/minecraft_server/src/net/minecraft/src/BlockLog.java new file mode 100644 index 0000000..161c1ae --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/BlockMinecartTrack.java b/minecraft_server/src/net/minecraft/src/BlockMinecartTrack.java new file mode 100644 index 0000000..4779247 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockMinecartTrack.java @@ -0,0 +1,89 @@ +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 allowsAttachment() { + 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 quantityDropped(Random var1) { + return 1; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.doesBlockAllowAttachment(var2, var3 - 1, var4); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(!var1.multiplayerWorld) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 15); + this.func_4038_g(var1, var2, var3, var4); + } + + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.multiplayerWorld) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + boolean var7 = false; + if(!var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) { + var7 = true; + } + + if(var6 == 2 && !var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) { + var7 = true; + } + + if(var6 == 3 && !var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) { + var7 = true; + } + + if(var6 == 4 && !var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) { + var7 = true; + } + + if(var6 == 5 && !var1.doesBlockAllowAttachment(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); + } else if(var5 > 0 && Block.blocksList[var5].canProvidePower() && MinecartTrackLogic.func_600_a(new MinecartTrackLogic(this, var1, var2, var3, var4)) == 3) { + this.func_4038_g(var1, var2, var3, var4); + } + + } + } + + private void func_4038_g(World var1, int var2, int var3, int var4) { + if(!var1.multiplayerWorld) { + (new MinecartTrackLogic(this, var1, var2, var3, var4)).func_596_a(var1.isBlockIndirectlyGettingPowered(var2, var3, var4)); + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockMobSpawner.java b/minecraft_server/src/net/minecraft/src/BlockMobSpawner.java new file mode 100644 index 0000000..7393e1b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockMobSpawner.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockMobSpawner extends BlockContainer { + protected BlockMobSpawner(int var1, int var2) { + super(var1, var2, Material.rock); + } + + protected TileEntity func_294_a_() { + return new TileEntityMobSpawner(); + } + + public int idDropped(int var1, Random var2) { + return 0; + } + + public int quantityDropped(Random var1) { + return 0; + } + + public boolean allowsAttachment() { + return false; + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockMushroom.java b/minecraft_server/src/net/minecraft/src/BlockMushroom.java new file mode 100644 index 0000000..7ea5402 --- /dev/null +++ b/minecraft_server/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.field_540_p[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/minecraft_server/src/net/minecraft/src/BlockObsidian.java b/minecraft_server/src/net/minecraft/src/BlockObsidian.java new file mode 100644 index 0000000..bb6bcf1 --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/BlockOre.java b/minecraft_server/src/net/minecraft/src/BlockOre.java new file mode 100644 index 0000000..663ff3c --- /dev/null +++ b/minecraft_server/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.swiftedIndex : (this.blockID == Block.oreDiamond.blockID ? Item.diamond.swiftedIndex : this.blockID); + } + + public int quantityDropped(Random var1) { + return 1; + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockOreBlock.java b/minecraft_server/src/net/minecraft/src/BlockOreBlock.java new file mode 100644 index 0000000..d8464b3 --- /dev/null +++ b/minecraft_server/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 this.blockIndexInTexture - 16; + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockPortal.java b/minecraft_server/src/net/minecraft/src/BlockPortal.java new file mode 100644 index 0000000..fc03147 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockPortal.java @@ -0,0 +1,130 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockPortal extends BlockBreakable { + public BlockPortal(int var1, int var2) { + super(var1, var2, Material.field_4212_x, false); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + float var5; + float var6; + if(var1.getBlockId(var2 - 1, var3, var4) != this.blockID && var1.getBlockId(var2 + 1, var3, var4) != this.blockID) { + var5 = 2.0F / 16.0F; + var6 = 0.5F; + this.setBlockBounds(0.5F - var5, 0.0F, 0.5F - var6, 0.5F + var5, 1.0F, 0.5F + var6); + } else { + var5 = 0.5F; + var6 = 2.0F / 16.0F; + this.setBlockBounds(0.5F - var5, 0.0F, 0.5F - var6, 0.5F + var5, 1.0F, 0.5F + var6); + } + + } + + public boolean allowsAttachment() { + return false; + } + + public boolean tryToCreatePortal(World var1, int var2, int var3, int var4) { + byte var5 = 0; + byte var6 = 0; + if(var1.getBlockId(var2 - 1, var3, var4) == Block.obsidian.blockID || var1.getBlockId(var2 + 1, var3, var4) == Block.obsidian.blockID) { + var5 = 1; + } + + if(var1.getBlockId(var2, var3, var4 - 1) == Block.obsidian.blockID || var1.getBlockId(var2, var3, var4 + 1) == Block.obsidian.blockID) { + var6 = 1; + } + + System.out.println(var5 + ", " + var6); + if(var5 == var6) { + return false; + } else { + if(var1.getBlockId(var2 - var5, var3, var4 - var6) == 0) { + var2 -= var5; + var4 -= var6; + } + + int var7; + int var8; + for(var7 = -1; var7 <= 2; ++var7) { + for(var8 = -1; var8 <= 3; ++var8) { + boolean var9 = var7 == -1 || var7 == 2 || var8 == -1 || var8 == 3; + if(var7 != -1 && var7 != 2 || var8 != -1 && var8 != 3) { + int var10 = var1.getBlockId(var2 + var5 * var7, var3 + var8, var4 + var6 * var7); + if(var9) { + if(var10 != Block.obsidian.blockID) { + return false; + } + } else if(var10 != 0 && var10 != Block.fire.blockID) { + return false; + } + } + } + } + + var1.field_808_h = true; + + for(var7 = 0; var7 < 2; ++var7) { + for(var8 = 0; var8 < 3; ++var8) { + var1.setBlockWithNotify(var2 + var5 * var7, var3 + var8, var4 + var6 * var7, Block.portal.blockID); + } + } + + var1.field_808_h = false; + return true; + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + byte var6 = 0; + byte var7 = 1; + if(var1.getBlockId(var2 - 1, var3, var4) == this.blockID || var1.getBlockId(var2 + 1, var3, var4) == this.blockID) { + var6 = 1; + var7 = 0; + } + + int var8; + for(var8 = var3; var1.getBlockId(var2, var8 - 1, var4) == this.blockID; --var8) { + } + + if(var1.getBlockId(var2, var8 - 1, var4) != Block.obsidian.blockID) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } else { + int var9; + for(var9 = 1; var9 < 4 && var1.getBlockId(var2, var8 + var9, var4) == this.blockID; ++var9) { + } + + if(var9 == 3 && var1.getBlockId(var2, var8 + var9, var4) == Block.obsidian.blockID) { + boolean var10 = var1.getBlockId(var2 - 1, var3, var4) == this.blockID || var1.getBlockId(var2 + 1, var3, var4) == this.blockID; + boolean var11 = var1.getBlockId(var2, var3, var4 - 1) == this.blockID || var1.getBlockId(var2, var3, var4 + 1) == this.blockID; + if(var10 && var11) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } else if((var1.getBlockId(var2 + var6, var3, var4 + var7) != Block.obsidian.blockID || var1.getBlockId(var2 - var6, var3, var4 - var7) != this.blockID) && (var1.getBlockId(var2 - var6, var3, var4 - var7) != Block.obsidian.blockID || var1.getBlockId(var2 + var6, var3, var4 + var7) != this.blockID)) { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } else { + var1.setBlockWithNotify(var2, var3, var4, 0); + } + } + } + + public boolean isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return true; + } + + public int quantityDropped(Random var1) { + return 0; + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + if(!var1.multiplayerWorld) { + var5.func_4042_C(); + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockPressurePlate.java b/minecraft_server/src/net/minecraft/src/BlockPressurePlate.java new file mode 100644 index 0000000..1fd833c --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockPressurePlate.java @@ -0,0 +1,140 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public class BlockPressurePlate extends Block { + private EnumMobType triggerMobType; + + protected BlockPressurePlate(int var1, int var2, EnumMobType var3) { + super(var1, var2, Material.rock); + this.triggerMobType = var3; + this.setTickOnLoad(true); + float var4 = 1.0F / 16.0F; + this.setBlockBounds(var4, 0.0F, var4, 1.0F - var4, 0.03125F, 1.0F - var4); + } + + public int tickRate() { + return 20; + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean allowsAttachment() { + return false; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.doesBlockAllowAttachment(var2, var3 - 1, var4); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + boolean var6 = false; + if(!var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) { + var6 = true; + } + + if(var6) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(!var1.multiplayerWorld) { + if(var1.getBlockMetadata(var2, var3, var4) != 0) { + this.func_318_g(var1, var2, var3, var4); + } + } + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + if(!var1.multiplayerWorld) { + if(var1.getBlockMetadata(var2, var3, var4) != 1) { + this.func_318_g(var1, var2, var3, var4); + } + } + } + + private void func_318_g(World var1, int var2, int var3, int var4) { + boolean var5 = var1.getBlockMetadata(var2, var3, var4) == 1; + boolean var6 = false; + float var7 = 2.0F / 16.0F; + List var8 = null; + if(this.triggerMobType == EnumMobType.everything) { + var8 = var1.getEntitiesWithinAABBExcludingEntity((Entity)null, AxisAlignedBB.getBoundingBoxFromPool((double)((float)var2 + var7), (double)var3, (double)((float)var4 + var7), (double)((float)(var2 + 1) - var7), (double)var3 + 0.25D, (double)((float)(var4 + 1) - var7))); + } + + if(this.triggerMobType == EnumMobType.mobs) { + var8 = var1.getEntitiesWithinAABB(EntityLiving.class, AxisAlignedBB.getBoundingBoxFromPool((double)((float)var2 + var7), (double)var3, (double)((float)var4 + var7), (double)((float)(var2 + 1) - var7), (double)var3 + 0.25D, (double)((float)(var4 + 1) - var7))); + } + + if(this.triggerMobType == EnumMobType.players) { + var8 = var1.getEntitiesWithinAABB(EntityPlayer.class, AxisAlignedBB.getBoundingBoxFromPool((double)((float)var2 + var7), (double)var3, (double)((float)var4 + var7), (double)((float)(var2 + 1) - var7), (double)var3 + 0.25D, (double)((float)(var4 + 1) - var7))); + } + + if(var8.size() > 0) { + var6 = true; + } + + if(var6 && !var5) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 1); + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.func_519_b(var2, var3, var4, var2, var3, var4); + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.1D, (double)var4 + 0.5D, "random.click", 0.3F, 0.6F); + } + + if(!var6 && var5) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 0); + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.func_519_b(var2, var3, var4, var2, var3, var4); + var1.playSoundEffect((double)var2 + 0.5D, (double)var3 + 0.1D, (double)var4 + 0.5D, "random.click", 0.3F, 0.5F); + } + + if(var6) { + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + } + + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + if(var5 > 0) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + } + + super.onBlockRemoval(var1, var2, var3, var4); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + boolean var5 = var1.getBlockMetadata(var2, var3, var4) == 1; + float var6 = 1.0F / 16.0F; + if(var5) { + this.setBlockBounds(var6, 0.0F, var6, 1.0F - var6, 0.03125F, 1.0F - var6); + } else { + this.setBlockBounds(var6, 0.0F, var6, 1.0F - var6, 1.0F / 16.0F, 1.0F - var6); + } + + } + + public boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return var1.getBlockMetadata(var2, var3, var4) > 0; + } + + public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) { + return var1.getBlockMetadata(var2, var3, var4) == 0 ? false : var5 == 1; + } + + public boolean canProvidePower() { + return true; + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockPumpkin.java b/minecraft_server/src/net/minecraft/src/BlockPumpkin.java new file mode 100644 index 0000000..dcc2af1 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockPumpkin.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +public class BlockPumpkin extends Block { + private boolean field_4086_a; + + protected BlockPumpkin(int var1, int var2, boolean var3) { + super(var1, Material.field_4213_w); + this.blockIndexInTexture = var2; + this.setTickOnLoad(true); + this.field_4086_a = var3; + } + + public int getBlockTextureFromSide(int var1) { + return var1 == 1 ? this.blockIndexInTexture : (var1 == 0 ? this.blockIndexInTexture : (var1 == 3 ? this.blockIndexInTexture + 1 + 16 : this.blockIndexInTexture + 16)); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3, var4); + return (var5 == 0 || Block.blocksList[var5].blockMaterial.getIsLiquid()) && var1.doesBlockAllowAttachment(var2, var3 - 1, var4); + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5) { + int var6 = MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockRedstoneOre.java b/minecraft_server/src/net/minecraft/src/BlockRedstoneOre.java new file mode 100644 index 0000000..5899894 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockRedstoneOre.java @@ -0,0 +1,97 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockRedstoneOre extends Block { + private boolean field_665_a; + + public BlockRedstoneOre(int var1, int var2, boolean var3) { + super(var1, var2, Material.rock); + if(var3) { + this.setTickOnLoad(true); + } + + this.field_665_a = var3; + } + + public int tickRate() { + return 30; + } + + public void onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + this.func_321_g(var1, var2, var3, var4); + super.onBlockClicked(var1, var2, var3, var4, var5); + } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + this.func_321_g(var1, var2, var3, var4); + super.onEntityWalking(var1, var2, var3, var4, var5); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + this.func_321_g(var1, var2, var3, var4); + return super.blockActivated(var1, var2, var3, var4, var5); + } + + private void func_321_g(World var1, int var2, int var3, int var4) { + this.func_320_h(var1, var2, var3, var4); + if(this.blockID == Block.oreRedstone.blockID) { + var1.setBlockWithNotify(var2, var3, var4, Block.oreRedstoneGlowing.blockID); + } + + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(this.blockID == Block.oreRedstoneGlowing.blockID) { + var1.setBlockWithNotify(var2, var3, var4, Block.oreRedstone.blockID); + } + + } + + public int idDropped(int var1, Random var2) { + return Item.redstone.swiftedIndex; + } + + public int quantityDropped(Random var1) { + return 4 + var1.nextInt(2); + } + + private void func_320_h(World var1, int var2, int var3, int var4) { + Random var5 = var1.rand; + double var6 = 1.0D / 16.0D; + + for(int var8 = 0; var8 < 6; ++var8) { + double var9 = (double)((float)var2 + var5.nextFloat()); + double var11 = (double)((float)var3 + var5.nextFloat()); + double var13 = (double)((float)var4 + var5.nextFloat()); + if(var8 == 0 && !var1.doesBlockAllowAttachment(var2, var3 + 1, var4)) { + var11 = (double)(var3 + 1) + var6; + } + + if(var8 == 1 && !var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) { + var11 = (double)(var3 + 0) - var6; + } + + if(var8 == 2 && !var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) { + var13 = (double)(var4 + 1) + var6; + } + + if(var8 == 3 && !var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) { + var13 = (double)(var4 + 0) - var6; + } + + if(var8 == 4 && !var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) { + var9 = (double)(var2 + 1) + var6; + } + + if(var8 == 5 && !var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) { + var9 = (double)(var2 + 0) - var6; + } + + if(var9 < (double)var2 || var9 > (double)(var2 + 1) || var11 < 0.0D || var11 > (double)(var3 + 1) || var13 < (double)var4 || var13 > (double)(var4 + 1)) { + var1.spawnParticle("reddust", var9, var11, var13, 0.0D, 0.0D, 0.0D); + } + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockRedstoneTorch.java b/minecraft_server/src/net/minecraft/src/BlockRedstoneTorch.java new file mode 100644 index 0000000..232002b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockRedstoneTorch.java @@ -0,0 +1,126 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import java.util.Random; + +public class BlockRedstoneTorch extends BlockTorch { + private boolean torchActive = false; + private static List torchUpdates = new ArrayList(); + + private boolean func_280_a(World var1, int var2, int var3, int var4, boolean var5) { + if(var5) { + torchUpdates.add(new RedstoneUpdateInfo(var2, var3, var4, var1.worldTime)); + } + + int var6 = 0; + + for(int var7 = 0; var7 < torchUpdates.size(); ++var7) { + RedstoneUpdateInfo var8 = (RedstoneUpdateInfo)torchUpdates.get(var7); + if(var8.field_775_a == var2 && var8.field_774_b == var3 && var8.field_777_c == var4) { + ++var6; + if(var6 >= 8) { + return true; + } + } + } + + return false; + } + + protected BlockRedstoneTorch(int var1, int var2, boolean var3) { + super(var1, var2); + this.torchActive = var3; + this.setTickOnLoad(true); + } + + public int tickRate() { + return 2; + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + if(var1.getBlockMetadata(var2, var3, var4) == 0) { + super.onBlockAdded(var1, var2, var3, var4); + } + + if(this.torchActive) { + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + } + + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + if(this.torchActive) { + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + } + + } + + public boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(!this.torchActive) { + return false; + } else { + int var6 = var1.getBlockMetadata(var2, var3, var4); + return var6 == 5 && var5 == 1 ? false : (var6 == 3 && var5 == 3 ? false : (var6 == 4 && var5 == 2 ? false : (var6 == 1 && var5 == 5 ? false : var6 != 2 || var5 != 4))); + } + } + + private boolean func_15001_g(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + return var5 == 5 && var1.isBlockIndirectlyProvidingPowerTo(var2, var3 - 1, var4, 0) ? true : (var5 == 3 && var1.isBlockIndirectlyProvidingPowerTo(var2, var3, var4 - 1, 2) ? true : (var5 == 4 && var1.isBlockIndirectlyProvidingPowerTo(var2, var3, var4 + 1, 3) ? true : (var5 == 1 && var1.isBlockIndirectlyProvidingPowerTo(var2 - 1, var3, var4, 4) ? true : var5 == 2 && var1.isBlockIndirectlyProvidingPowerTo(var2 + 1, var3, var4, 5)))); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + boolean var6 = this.func_15001_g(var1, var2, var3, var4); + + while(torchUpdates.size() > 0 && var1.worldTime - ((RedstoneUpdateInfo)torchUpdates.get(0)).field_776_d > 100L) { + torchUpdates.remove(0); + } + + if(this.torchActive) { + if(var6) { + var1.func_507_b(var2, var3, var4, Block.torchRedstoneIdle.blockID, var1.getBlockMetadata(var2, var3, var4)); + if(this.func_280_a(var1, var2, var3, var4, true)) { + var1.playSoundEffect((double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F), "random.fizz", 0.5F, 2.6F + (var1.rand.nextFloat() - var1.rand.nextFloat()) * 0.8F); + + for(int var7 = 0; var7 < 5; ++var7) { + double var8 = (double)var2 + var5.nextDouble() * 0.6D + 0.2D; + double var10 = (double)var3 + var5.nextDouble() * 0.6D + 0.2D; + double var12 = (double)var4 + var5.nextDouble() * 0.6D + 0.2D; + var1.spawnParticle("smoke", var8, var10, var12, 0.0D, 0.0D, 0.0D); + } + } + } + } else if(!var6 && !this.func_280_a(var1, var2, var3, var4, false)) { + var1.func_507_b(var2, var3, var4, Block.torchRedstoneActive.blockID, var1.getBlockMetadata(var2, var3, var4)); + } + + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID); + } + + public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) { + return var5 == 0 ? this.isPoweringTo(var1, var2, var3, var4, var5) : false; + } + + public int idDropped(int var1, Random var2) { + return Block.torchRedstoneActive.blockID; + } + + public boolean canProvidePower() { + return true; + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockRedstoneWire.java b/minecraft_server/src/net/minecraft/src/BlockRedstoneWire.java new file mode 100644 index 0000000..6ce3aff --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockRedstoneWire.java @@ -0,0 +1,286 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockRedstoneWire extends Block { + private boolean field_652_a = true; + + public BlockRedstoneWire(int var1, int var2) { + super(var1, var2, Material.circuits); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F / 16.0F, 1.0F); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean allowsAttachment() { + return false; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.doesBlockAllowAttachment(var2, var3 - 1, var4); + } + + private void func_292_g(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + int var6 = 0; + this.field_652_a = false; + boolean var7 = var1.isBlockIndirectlyGettingPowered(var2, var3, var4); + this.field_652_a = true; + int var8; + int var9; + int var10; + if(var7) { + var6 = 15; + } else { + for(var8 = 0; var8 < 4; ++var8) { + var9 = var2; + var10 = var4; + if(var8 == 0) { + var9 = var2 - 1; + } + + if(var8 == 1) { + ++var9; + } + + if(var8 == 2) { + var10 = var4 - 1; + } + + if(var8 == 3) { + ++var10; + } + + var6 = this.func_290_f(var1, var9, var3, var10, var6); + if(var1.doesBlockAllowAttachment(var9, var3, var10) && !var1.doesBlockAllowAttachment(var2, var3 + 1, var4)) { + var6 = this.func_290_f(var1, var9, var3 + 1, var10, var6); + } else if(!var1.doesBlockAllowAttachment(var9, var3, var10)) { + var6 = this.func_290_f(var1, var9, var3 - 1, var10, var6); + } + } + + if(var6 > 0) { + --var6; + } else { + var6 = 0; + } + } + + if(var5 != var6) { + var1.setBlockMetadataWithNotify(var2, var3, var4, var6); + var1.func_519_b(var2, var3, var4, var2, var3, var4); + if(var6 > 0) { + --var6; + } + + for(var8 = 0; var8 < 4; ++var8) { + var9 = var2; + var10 = var4; + int var11 = var3 - 1; + if(var8 == 0) { + var9 = var2 - 1; + } + + if(var8 == 1) { + ++var9; + } + + if(var8 == 2) { + var10 = var4 - 1; + } + + if(var8 == 3) { + ++var10; + } + + if(var1.doesBlockAllowAttachment(var9, var3, var10)) { + var11 += 2; + } + + int var12 = this.func_290_f(var1, var9, var3, var10, -1); + if(var12 >= 0 && var12 != var6) { + this.func_292_g(var1, var9, var3, var10); + } + + var12 = this.func_290_f(var1, var9, var11, var10, -1); + if(var12 >= 0 && var12 != var6) { + this.func_292_g(var1, var9, var11, var10); + } + } + + if(var5 == 0 || var6 == 0) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + } + } + + } + + private void func_291_h(World var1, int var2, int var3, int var4) { + if(var1.getBlockId(var2, var3, var4) == this.blockID) { + var1.notifyBlocksOfNeighborChange(var2, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 - 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2 + 1, var3, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 - 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3, var4 + 1, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + } + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + super.onBlockAdded(var1, var2, var3, var4); + if(!var1.multiplayerWorld) { + this.func_292_g(var1, var2, var3, var4); + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + this.func_291_h(var1, var2 - 1, var3, var4); + this.func_291_h(var1, var2 + 1, var3, var4); + this.func_291_h(var1, var2, var3, var4 - 1); + this.func_291_h(var1, var2, var3, var4 + 1); + if(var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) { + this.func_291_h(var1, var2 - 1, var3 + 1, var4); + } else { + this.func_291_h(var1, var2 - 1, var3 - 1, var4); + } + + if(var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) { + this.func_291_h(var1, var2 + 1, var3 + 1, var4); + } else { + this.func_291_h(var1, var2 + 1, var3 - 1, var4); + } + + if(var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) { + this.func_291_h(var1, var2, var3 + 1, var4 - 1); + } else { + this.func_291_h(var1, var2, var3 - 1, var4 - 1); + } + + if(var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) { + this.func_291_h(var1, var2, var3 + 1, var4 + 1); + } else { + this.func_291_h(var1, var2, var3 - 1, var4 + 1); + } + + } + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + super.onBlockRemoval(var1, var2, var3, var4); + if(!var1.multiplayerWorld) { + var1.notifyBlocksOfNeighborChange(var2, var3 + 1, var4, this.blockID); + var1.notifyBlocksOfNeighborChange(var2, var3 - 1, var4, this.blockID); + this.func_292_g(var1, var2, var3, var4); + this.func_291_h(var1, var2 - 1, var3, var4); + this.func_291_h(var1, var2 + 1, var3, var4); + this.func_291_h(var1, var2, var3, var4 - 1); + this.func_291_h(var1, var2, var3, var4 + 1); + if(var1.doesBlockAllowAttachment(var2 - 1, var3, var4)) { + this.func_291_h(var1, var2 - 1, var3 + 1, var4); + } else { + this.func_291_h(var1, var2 - 1, var3 - 1, var4); + } + + if(var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) { + this.func_291_h(var1, var2 + 1, var3 + 1, var4); + } else { + this.func_291_h(var1, var2 + 1, var3 - 1, var4); + } + + if(var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) { + this.func_291_h(var1, var2, var3 + 1, var4 - 1); + } else { + this.func_291_h(var1, var2, var3 - 1, var4 - 1); + } + + if(var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) { + this.func_291_h(var1, var2, var3 + 1, var4 + 1); + } else { + this.func_291_h(var1, var2, var3 - 1, var4 + 1); + } + + } + } + + private int func_290_f(World var1, int var2, int var3, int var4, int var5) { + if(var1.getBlockId(var2, var3, var4) != this.blockID) { + return var5; + } else { + int var6 = var1.getBlockMetadata(var2, var3, var4); + return var6 > var5 ? var6 : var5; + } + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(!var1.multiplayerWorld) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + boolean var7 = this.canPlaceBlockAt(var1, var2, var3, var4); + if(!var7) { + this.dropBlockAsItem(var1, var2, var3, var4, var6); + var1.setBlockWithNotify(var2, var3, var4, 0); + } else { + this.func_292_g(var1, var2, var3, var4); + } + + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + } + } + + public int idDropped(int var1, Random var2) { + return Item.redstone.swiftedIndex; + } + + public boolean isIndirectlyPoweringTo(World var1, int var2, int var3, int var4, int var5) { + return !this.field_652_a ? false : this.isPoweringTo(var1, var2, var3, var4, var5); + } + + public boolean isPoweringTo(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(!this.field_652_a) { + return false; + } else if(var1.getBlockMetadata(var2, var3, var4) == 0) { + return false; + } else if(var5 == 1) { + return true; + } else { + boolean var6 = func_293_b(var1, var2 - 1, var3, var4) || !var1.doesBlockAllowAttachment(var2 - 1, var3, var4) && func_293_b(var1, var2 - 1, var3 - 1, var4); + boolean var7 = func_293_b(var1, var2 + 1, var3, var4) || !var1.doesBlockAllowAttachment(var2 + 1, var3, var4) && func_293_b(var1, var2 + 1, var3 - 1, var4); + boolean var8 = func_293_b(var1, var2, var3, var4 - 1) || !var1.doesBlockAllowAttachment(var2, var3, var4 - 1) && func_293_b(var1, var2, var3 - 1, var4 - 1); + boolean var9 = func_293_b(var1, var2, var3, var4 + 1) || !var1.doesBlockAllowAttachment(var2, var3, var4 + 1) && func_293_b(var1, var2, var3 - 1, var4 + 1); + if(!var1.doesBlockAllowAttachment(var2, var3 + 1, var4)) { + if(var1.doesBlockAllowAttachment(var2 - 1, var3, var4) && func_293_b(var1, var2 - 1, var3 + 1, var4)) { + var6 = true; + } + + if(var1.doesBlockAllowAttachment(var2 + 1, var3, var4) && func_293_b(var1, var2 + 1, var3 + 1, var4)) { + var7 = true; + } + + if(var1.doesBlockAllowAttachment(var2, var3, var4 - 1) && func_293_b(var1, var2, var3 + 1, var4 - 1)) { + var8 = true; + } + + if(var1.doesBlockAllowAttachment(var2, var3, var4 + 1) && func_293_b(var1, var2, var3 + 1, var4 + 1)) { + var9 = true; + } + } + + return !var8 && !var7 && !var6 && !var9 && var5 >= 2 && var5 <= 5 ? true : (var5 == 2 && var8 && !var6 && !var7 ? true : (var5 == 3 && var9 && !var6 && !var7 ? true : (var5 == 4 && var6 && !var8 && !var9 ? true : var5 == 5 && var7 && !var8 && !var9))); + } + } + + public boolean canProvidePower() { + return this.field_652_a; + } + + public static boolean func_293_b(IBlockAccess var0, int var1, int var2, int var3) { + int var4 = var0.getBlockId(var1, var2, var3); + return var4 == Block.redstoneWire.blockID ? true : (var4 == 0 ? false : Block.blocksList[var4].canProvidePower()); + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockReed.java b/minecraft_server/src/net/minecraft/src/BlockReed.java new file mode 100644 index 0000000..344c0e8 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockReed.java @@ -0,0 +1,65 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockReed extends Block { + protected BlockReed(int var1, int var2) { + super(var1, Material.plants); + this.blockIndexInTexture = var2; + float var3 = 6.0F / 16.0F; + this.setBlockBounds(0.5F - var3, 0.0F, 0.5F - var3, 0.5F + var3, 1.0F, 0.5F + var3); + this.setTickOnLoad(true); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.getBlockId(var2, var3 + 1, var4) == 0) { + int var6; + for(var6 = 1; var1.getBlockId(var2, var3 - var6, var4) == this.blockID; ++var6) { + } + + if(var6 < 3) { + int var7 = var1.getBlockMetadata(var2, var3, var4); + if(var7 == 15) { + var1.setBlockWithNotify(var2, var3 + 1, var4, this.blockID); + var1.setBlockMetadataWithNotify(var2, var3, var4, 0); + } else { + var1.setBlockMetadataWithNotify(var2, var3, var4, var7 + 1); + } + } + } + + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3 - 1, var4); + return var5 == this.blockID ? true : (var5 != Block.grass.blockID && var5 != Block.dirt.blockID ? false : (var1.getBlockMaterial(var2 - 1, var3 - 1, var4) == Material.water ? true : (var1.getBlockMaterial(var2 + 1, var3 - 1, var4) == Material.water ? true : (var1.getBlockMaterial(var2, var3 - 1, var4 - 1) == Material.water ? true : var1.getBlockMaterial(var2, var3 - 1, var4 + 1) == Material.water)))); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + this.func_4037_g(var1, var2, var3, var4); + } + + protected final void func_4037_g(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 this.canPlaceBlockAt(var1, var2, var3, var4); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public int idDropped(int var1, Random var2) { + return Item.reed.swiftedIndex; + } + + public boolean allowsAttachment() { + return false; + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockSand.java b/minecraft_server/src/net/minecraft/src/BlockSand.java new file mode 100644 index 0000000..b8eb3c7 --- /dev/null +++ b/minecraft_server/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.field_304_B) { + var8.onUpdate(); + } + } else { + var1.entityJoinedWorld(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/minecraft_server/src/net/minecraft/src/BlockSapling.java b/minecraft_server/src/net/minecraft/src/BlockSapling.java new file mode 100644 index 0000000..ccacbf0 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockSapling.java @@ -0,0 +1,32 @@ +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); + Object var7 = new WorldGenTrees(); + if(var5.nextInt(10) == 0) { + var7 = new WorldGenBigTree(); + } + + if(!((WorldGenerator)var7).generate(var1, var5, var2, var3, var4)) { + var1.setBlock(var2, var3, var4, this.blockID); + } + } + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockSign.java b/minecraft_server/src/net/minecraft/src/BlockSign.java new file mode 100644 index 0000000..6d58453 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockSign.java @@ -0,0 +1,100 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSign extends BlockContainer { + private Class field_654_a; + private boolean field_653_b; + + protected BlockSign(int var1, Class var2, boolean var3) { + super(var1, Material.wood); + this.field_653_b = var3; + this.blockIndexInTexture = 4; + this.field_654_a = var2; + float var4 = 0.25F; + float var5 = 1.0F; + this.setBlockBounds(0.5F - var4, 0.0F, 0.5F - var4, 0.5F + var4, var5, 0.5F + var4); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + if(!this.field_653_b) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + float var6 = 9.0F / 32.0F; + float var7 = 25.0F / 32.0F; + float var8 = 0.0F; + float var9 = 1.0F; + float var10 = 2.0F / 16.0F; + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + if(var5 == 2) { + this.setBlockBounds(var8, var6, 1.0F - var10, var9, var7, 1.0F); + } + + if(var5 == 3) { + this.setBlockBounds(var8, var6, 0.0F, var9, var7, var10); + } + + if(var5 == 4) { + this.setBlockBounds(1.0F - var10, var6, var8, 1.0F, var7, var9); + } + + if(var5 == 5) { + this.setBlockBounds(0.0F, var6, var8, var10, var7, var9); + } + + } + } + + public boolean allowsAttachment() { + return false; + } + + protected TileEntity func_294_a_() { + try { + return (TileEntity)this.field_654_a.newInstance(); + } catch (Exception var2) { + throw new RuntimeException(var2); + } + } + + public int idDropped(int var1, Random var2) { + return Item.sign.swiftedIndex; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + boolean var6 = false; + if(this.field_653_b) { + if(!var1.getBlockMaterial(var2, var3 - 1, var4).func_216_a()) { + var6 = true; + } + } else { + int var7 = var1.getBlockMetadata(var2, var3, var4); + var6 = true; + if(var7 == 2 && var1.getBlockMaterial(var2, var3, var4 + 1).func_216_a()) { + var6 = false; + } + + if(var7 == 3 && var1.getBlockMaterial(var2, var3, var4 - 1).func_216_a()) { + var6 = false; + } + + if(var7 == 4 && var1.getBlockMaterial(var2 + 1, var3, var4).func_216_a()) { + var6 = false; + } + + if(var7 == 5 && var1.getBlockMaterial(var2 - 1, var3, var4).func_216_a()) { + var6 = false; + } + } + + if(var6) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + super.onNeighborBlockChange(var1, var2, var3, var4, var5); + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockSlowSand.java b/minecraft_server/src/net/minecraft/src/BlockSlowSand.java new file mode 100644 index 0000000..a0fbffa --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockSlowSand.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class BlockSlowSand extends Block { + public BlockSlowSand(int var1, int var2) { + super(var1, var2, Material.sand); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + float var5 = 2.0F / 16.0F; + return AxisAlignedBB.getBoundingBoxFromPool((double)var2, (double)var3, (double)var4, (double)(var2 + 1), (double)((float)(var3 + 1) - var5), (double)(var4 + 1)); + } + + public void onEntityCollidedWithBlock(World var1, int var2, int var3, int var4, Entity var5) { + var5.motionX *= 0.4D; + var5.motionZ *= 0.4D; + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockSnow.java b/minecraft_server/src/net/minecraft/src/BlockSnow.java new file mode 100644 index 0000000..f6620b2 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockSnow.java @@ -0,0 +1,71 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSnow extends Block { + protected BlockSnow(int var1, int var2) { + super(var1, var2, Material.snow); + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 2.0F / 16.0F, 1.0F); + this.setTickOnLoad(true); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return null; + } + + public boolean allowsAttachment() { + return false; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockId(var2, var3 - 1, var4); + return var5 != 0 && Block.blocksList[var5].allowsAttachment() ? var1.getBlockMaterial(var2, var3 - 1, var4).func_218_c() : false; + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + this.func_275_g(var1, var2, var3, var4); + } + + private boolean func_275_g(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 void func_12007_g(World var1, int var2, int var3, int var4, int var5) { + int var6 = Item.snowball.swiftedIndex; + float var7 = 0.7F; + double var8 = (double)(var1.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.5D; + double var10 = (double)(var1.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.5D; + double var12 = (double)(var1.rand.nextFloat() * var7) + (double)(1.0F - var7) * 0.5D; + EntityItem var14 = new EntityItem(var1, (double)var2 + var8, (double)var3 + var10, (double)var4 + var12, new ItemStack(var6)); + var14.field_433_ad = 10; + var1.entityJoinedWorld(var14); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + public int idDropped(int var1, Random var2) { + return Item.snowball.swiftedIndex; + } + + public int quantityDropped(Random var1) { + return 0; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.getSavedLightValue(EnumSkyBlock.Block, var2, var3, var4) > 11) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + } + + public boolean isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) { + Material var6 = var1.getBlockMaterial(var2, var3, var4); + return var5 == 1 ? true : (var6 == this.blockMaterial ? false : super.isSideInsideCoordinate(var1, var2, var3, var4, var5)); + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockSnowBlock.java b/minecraft_server/src/net/minecraft/src/BlockSnowBlock.java new file mode 100644 index 0000000..0a4c7a6 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockSnowBlock.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSnowBlock extends Block { + protected BlockSnowBlock(int var1, int var2) { + super(var1, var2, Material.builtSnow); + this.setTickOnLoad(true); + } + + public int idDropped(int var1, Random var2) { + return Item.snowball.swiftedIndex; + } + + public int quantityDropped(Random var1) { + return 4; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var1.getSavedLightValue(EnumSkyBlock.Block, var2, var3, var4) > 11) { + this.dropBlockAsItem(var1, var2, var3, var4, var1.getBlockMetadata(var2, var3, var4)); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockSoil.java b/minecraft_server/src/net/minecraft/src/BlockSoil.java new file mode 100644 index 0000000..f53db8d --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockSoil.java @@ -0,0 +1,85 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockSoil extends Block { + protected BlockSoil(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 allowsAttachment() { + return false; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(var5.nextInt(5) == 0) { + if(this.func_283_h(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.func_282_g(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 func_282_g(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 func_283_h(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.func_216_a()) { + var1.setBlockWithNotify(var2, var3, var4, Block.dirt.blockID); + } + + } + + public int idDropped(int var1, Random var2) { + return Block.dirt.idDropped(0, var2); + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockSponge.java b/minecraft_server/src/net/minecraft/src/BlockSponge.java new file mode 100644 index 0000000..5e6c41d --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/BlockStairs.java b/minecraft_server/src/net/minecraft/src/BlockStairs.java new file mode 100644 index 0000000..b6b122e --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockStairs.java @@ -0,0 +1,156 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Random; + +public class BlockStairs extends Block { + private Block field_651_a; + + protected BlockStairs(int var1, Block var2) { + super(var1, var2.blockIndexInTexture, var2.blockMaterial); + this.field_651_a = var2; + this.setHardness(var2.blockHardness); + this.setResistance(var2.blockResistance / 3.0F); + this.setStepSound(var2.stepSound); + } + + public void setBlockBoundsBasedOnState(IBlockAccess var1, int var2, int var3, int var4) { + this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); + } + + public AxisAlignedBB getCollisionBoundingBoxFromPool(World var1, int var2, int var3, int var4) { + return super.getCollisionBoundingBoxFromPool(var1, var2, var3, var4); + } + + public boolean allowsAttachment() { + return false; + } + + public boolean isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) { + return super.isSideInsideCoordinate(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 onBlockClicked(World var1, int var2, int var3, int var4, EntityPlayer var5) { + this.field_651_a.onBlockClicked(var1, var2, var3, var4, var5); + } + + public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) { + this.field_651_a.onBlockDestroyedByPlayer(var1, var2, var3, var4, var5); + } + + public float func_226_a(Entity var1) { + return this.field_651_a.func_226_a(var1); + } + + public int idDropped(int var1, Random var2) { + return this.field_651_a.idDropped(var1, var2); + } + + public int quantityDropped(Random var1) { + return this.field_651_a.quantityDropped(var1); + } + + public int getBlockTextureFromSide(int var1) { + return this.field_651_a.getBlockTextureFromSide(var1); + } + + public int tickRate() { + return this.field_651_a.tickRate(); + } + + public void velocityToAddToEntity(World var1, int var2, int var3, int var4, Entity var5, Vec3D var6) { + this.field_651_a.velocityToAddToEntity(var1, var2, var3, var4, var5, var6); + } + + public boolean isCollidable() { + return this.field_651_a.isCollidable(); + } + + public boolean canCollideCheck(int var1, boolean var2) { + return this.field_651_a.canCollideCheck(var1, var2); + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return this.field_651_a.canPlaceBlockAt(var1, var2, var3, var4); + } + + public void onBlockAdded(World var1, int var2, int var3, int var4) { + this.onNeighborBlockChange(var1, var2, var3, var4, 0); + this.field_651_a.onBlockAdded(var1, var2, var3, var4); + } + + public void onBlockRemoval(World var1, int var2, int var3, int var4) { + this.field_651_a.onBlockRemoval(var1, var2, var3, var4); + } + + public void dropBlockAsItemWithChance(World var1, int var2, int var3, int var4, int var5, float var6) { + this.field_651_a.dropBlockAsItemWithChance(var1, var2, var3, var4, var5, var6); + } + + public void dropBlockAsItem(World var1, int var2, int var3, int var4, int var5) { + this.field_651_a.dropBlockAsItem(var1, var2, var3, var4, var5); + } + + public void onEntityWalking(World var1, int var2, int var3, int var4, Entity var5) { + this.field_651_a.onEntityWalking(var1, var2, var3, var4, var5); + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + this.field_651_a.updateTick(var1, var2, var3, var4, var5); + } + + public boolean blockActivated(World var1, int var2, int var3, int var4, EntityPlayer var5) { + return this.field_651_a.blockActivated(var1, var2, var3, var4, var5); + } + + public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4) { + this.field_651_a.onBlockDestroyedByExplosion(var1, var2, var3, var4); + } + + public void onBlockPlacedBy(World var1, int var2, int var3, int var4, EntityLiving var5) { + int var6 = MathHelper.floor_double((double)(var5.rotationYaw * 4.0F / 360.0F) + 0.5D) & 3; + if(var6 == 0) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 2); + } + + if(var6 == 1) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 1); + } + + if(var6 == 2) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 3); + } + + if(var6 == 3) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 0); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockStationary.java b/minecraft_server/src/net/minecraft/src/BlockStationary.java new file mode 100644 index 0000000..2b5b3c9 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockStationary.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockStationary extends BlockFluids { + protected BlockStationary(int var1, Material var2) { + super(var1, var2); + this.setTickOnLoad(false); + if(var2 == Material.lava) { + this.setTickOnLoad(true); + } + + } + + 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.func_15002_i(var1, var2, var3, var4); + } + + } + + private void func_15002_i(World var1, int var2, int var3, int var4) { + int var5 = var1.getBlockMetadata(var2, var3, var4); + var1.field_808_h = true; + var1.func_470_a(var2, var3, var4, this.blockID - 1, var5); + var1.func_519_b(var2, var3, var4, var2, var3, var4); + var1.scheduleBlockUpdate(var2, var3, var4, this.blockID - 1); + var1.field_808_h = false; + } + + public void updateTick(World var1, int var2, int var3, int var4, Random var5) { + if(this.blockMaterial == Material.lava) { + int var6 = var5.nextInt(3); + + for(int var7 = 0; var7 < var6; ++var7) { + var2 += var5.nextInt(3) - 1; + ++var3; + var4 += var5.nextInt(3) - 1; + int var8 = var1.getBlockId(var2, var3, var4); + if(var8 == 0) { + if(this.func_4033_j(var1, var2 - 1, var3, var4) || this.func_4033_j(var1, var2 + 1, var3, var4) || this.func_4033_j(var1, var2, var3, var4 - 1) || this.func_4033_j(var1, var2, var3, var4 + 1) || this.func_4033_j(var1, var2, var3 - 1, var4) || this.func_4033_j(var1, var2, var3 + 1, var4)) { + var1.setBlockWithNotify(var2, var3, var4, Block.fire.blockID); + return; + } + } else if(Block.blocksList[var8].blockMaterial.func_218_c()) { + return; + } + } + } + + } + + private boolean func_4033_j(World var1, int var2, int var3, int var4) { + return var1.getBlockMaterial(var2, var3, var4).getBurning(); + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockStep.java b/minecraft_server/src/net/minecraft/src/BlockStep.java new file mode 100644 index 0000000..14a8b34 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockStep.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +import java.util.Random; + +public class BlockStep extends Block { + private boolean field_666_a; + + public BlockStep(int var1, boolean var2) { + super(var1, 6, Material.rock); + this.field_666_a = 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 allowsAttachment() { + return this.field_666_a; + } + + 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 isSideInsideCoordinate(IBlockAccess var1, int var2, int var3, int var4, int var5) { + if(this != Block.stairSingle) { + super.isSideInsideCoordinate(var1, var2, var3, var4, var5); + } + + return var5 == 1 ? true : (!super.isSideInsideCoordinate(var1, var2, var3, var4, var5) ? false : (var5 == 0 ? true : var1.getBlockId(var2, var3, var4) != this.blockID)); + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockStone.java b/minecraft_server/src/net/minecraft/src/BlockStone.java new file mode 100644 index 0000000..5b460b7 --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/BlockTNT.java b/minecraft_server/src/net/minecraft/src/BlockTNT.java new file mode 100644 index 0000000..6f5fb9f --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockTNT.java @@ -0,0 +1,39 @@ +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 void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(var5 > 0 && Block.blocksList[var5].canProvidePower() && var1.isBlockIndirectlyGettingPowered(var2, var3, var4)) { + this.onBlockDestroyedByPlayer(var1, var2, var3, var4, 0); + var1.setBlockWithNotify(var2, var3, var4, 0); + } + + } + + public int quantityDropped(Random var1) { + return 0; + } + + public void onBlockDestroyedByExplosion(World var1, int var2, int var3, int var4) { + EntityTNTPrimed var5 = new EntityTNTPrimed(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F)); + var5.fuse = var1.rand.nextInt(var5.fuse / 4) + var5.fuse / 8; + var1.entityJoinedWorld(var5); + } + + public void onBlockDestroyedByPlayer(World var1, int var2, int var3, int var4, int var5) { + if(!var1.multiplayerWorld) { + EntityTNTPrimed var6 = new EntityTNTPrimed(var1, (double)((float)var2 + 0.5F), (double)((float)var3 + 0.5F), (double)((float)var4 + 0.5F)); + var1.entityJoinedWorld(var6); + var1.playSoundAtEntity(var6, "random.fuse", 1.0F, 1.0F); + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockTorch.java b/minecraft_server/src/net/minecraft/src/BlockTorch.java new file mode 100644 index 0000000..3493a53 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/BlockTorch.java @@ -0,0 +1,132 @@ +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 allowsAttachment() { + return false; + } + + public boolean canPlaceBlockAt(World var1, int var2, int var3, int var4) { + return var1.doesBlockAllowAttachment(var2 - 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2 + 1, var3, var4) ? true : (var1.doesBlockAllowAttachment(var2, var3, var4 - 1) ? true : (var1.doesBlockAllowAttachment(var2, var3, var4 + 1) ? true : var1.doesBlockAllowAttachment(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.doesBlockAllowAttachment(var2, var3 - 1, var4)) { + var6 = 5; + } + + if(var5 == 2 && var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) { + var6 = 4; + } + + if(var5 == 3 && var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) { + var6 = 3; + } + + if(var5 == 4 && var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) { + var6 = 2; + } + + if(var5 == 5 && var1.doesBlockAllowAttachment(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.doesBlockAllowAttachment(var2 - 1, var3, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 1); + } else if(var1.doesBlockAllowAttachment(var2 + 1, var3, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 2); + } else if(var1.doesBlockAllowAttachment(var2, var3, var4 - 1)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 3); + } else if(var1.doesBlockAllowAttachment(var2, var3, var4 + 1)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 4); + } else if(var1.doesBlockAllowAttachment(var2, var3 - 1, var4)) { + var1.setBlockMetadataWithNotify(var2, var3, var4, 5); + } + + this.func_279_g(var1, var2, var3, var4); + } + + public void onNeighborBlockChange(World var1, int var2, int var3, int var4, int var5) { + if(this.func_279_g(var1, var2, var3, var4)) { + int var6 = var1.getBlockMetadata(var2, var3, var4); + boolean var7 = false; + if(!var1.doesBlockAllowAttachment(var2 - 1, var3, var4) && var6 == 1) { + var7 = true; + } + + if(!var1.doesBlockAllowAttachment(var2 + 1, var3, var4) && var6 == 2) { + var7 = true; + } + + if(!var1.doesBlockAllowAttachment(var2, var3, var4 - 1) && var6 == 3) { + var7 = true; + } + + if(!var1.doesBlockAllowAttachment(var2, var3, var4 + 1) && var6 == 4) { + var7 = true; + } + + if(!var1.doesBlockAllowAttachment(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 func_279_g(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) & 7; + float var8 = 0.15F; + if(var7 == 1) { + this.setBlockBounds(0.0F, 0.2F, 0.5F - var8, var8 * 2.0F, 0.8F, 0.5F + var8); + } else if(var7 == 2) { + this.setBlockBounds(1.0F - var8 * 2.0F, 0.2F, 0.5F - var8, 1.0F, 0.8F, 0.5F + var8); + } else if(var7 == 3) { + this.setBlockBounds(0.5F - var8, 0.2F, 0.0F, 0.5F + var8, 0.8F, var8 * 2.0F); + } else if(var7 == 4) { + this.setBlockBounds(0.5F - var8, 0.2F, 1.0F - var8 * 2.0F, 0.5F + var8, 0.8F, 1.0F); + } else { + var8 = 0.1F; + this.setBlockBounds(0.5F - var8, 0.0F, 0.5F - var8, 0.5F + var8, 0.6F, 0.5F + var8); + } + + return super.collisionRayTrace(var1, var2, var3, var4, var5, var6); + } +} diff --git a/minecraft_server/src/net/minecraft/src/BlockWorkbench.java b/minecraft_server/src/net/minecraft/src/BlockWorkbench.java new file mode 100644 index 0000000..3a25677 --- /dev/null +++ b/minecraft_server/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.func_174_A(); + return true; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Chunk.java b/minecraft_server/src/net/minecraft/src/Chunk.java new file mode 100644 index 0000000..63ee72c --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Chunk.java @@ -0,0 +1,575 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; + +public class Chunk { + public static boolean field_694_a; + public byte[] blocks; + public boolean field_692_c; + public World worldObj; + public NibbleArray data; + public NibbleArray skylightMap; + public NibbleArray blocklightMap; + public byte[] heightMap; + public int field_686_i; + public final int xPosition; + public final int zPosition; + public Map field_683_l; + public List[] entities; + public boolean isTerrainPopulated; + public boolean isModified; + public boolean field_679_p; + public boolean field_678_q; + public boolean field_677_r; + public long field_676_s; + + public Chunk(World var1, int var2, int var3) { + this.field_683_l = new HashMap(); + this.entities = new List[8]; + this.isTerrainPopulated = false; + this.isModified = false; + this.field_678_q = false; + this.field_677_r = false; + this.field_676_s = 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 func_351_a(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 func_348_a() { + } + + public void func_353_b() { + 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.func_339_g(var2, 127, var3); + if((this.heightMap[var3 << 4 | var2] & 255) < var1) { + var1 = this.heightMap[var3 << 4 | var2] & 255; + } + } + } + + this.field_686_i = var1; + + for(var2 = 0; var2 < 16; ++var2) { + for(var3 = 0; var3 < 16; ++var3) { + this.func_333_c(var2, var3); + } + } + + this.isModified = true; + } + + public void func_4053_c() { + byte var1 = 32; + + for(int var2 = 0; var2 < 16; ++var2) { + for(int var3 = 0; var3 < 16; ++var3) { + int var4 = var2 << 11 | var3 << 7; + + int var5; + int var6; + for(var5 = 0; var5 < 128; ++var5) { + var6 = Block.lightValue[this.blocks[var4 + var5]]; + if(var6 > 0) { + this.blocklightMap.setNibble(var2, var5, var3, var6); + } + } + + var5 = 15; + + for(var6 = var1 - 2; var6 < 128 && var5 > 0; this.blocklightMap.setNibble(var2, var6, var3, var5)) { + ++var6; + byte var7 = this.blocks[var4 + var6]; + int var8 = Block.lightOpacity[var7]; + int var9 = Block.lightValue[var7]; + if(var8 == 0) { + var8 = 1; + } + + var5 -= var8; + if(var9 > var5) { + var5 = var9; + } + + if(var5 < 0) { + var5 = 0; + } + } + } + } + + this.worldObj.func_483_a(EnumSkyBlock.Block, this.xPosition * 16, var1 - 1, this.zPosition * 16, this.xPosition * 16 + 16, var1 + 1, this.zPosition * 16 + 16); + this.isModified = true; + } + + private void func_333_c(int var1, int var2) { + int var3 = this.getHeightValue(var1, var2); + int var4 = this.xPosition * 16 + var1; + int var5 = this.zPosition * 16 + var2; + this.func_355_f(var4 - 1, var5, var3); + this.func_355_f(var4 + 1, var5, var3); + this.func_355_f(var4, var5 - 1, var3); + this.func_355_f(var4, var5 + 1, var3); + } + + private void func_355_f(int var1, int var2, int var3) { + int var4 = this.worldObj.getHeightValue(var1, var2); + if(var4 > var3) { + this.worldObj.func_483_a(EnumSkyBlock.Sky, var1, var3, var2, var1, var4, var2); + } else if(var4 < var3) { + this.worldObj.func_483_a(EnumSkyBlock.Sky, var1, var4, var2, var1, var3, var2); + } + + this.isModified = true; + } + + private void func_339_g(int var1, int var2, int var3) { + int var4 = this.heightMap[var3 << 4 | var1] & 255; + int var5 = var4; + if(var2 > var4) { + var5 = var2; + } + + for(int var6 = var1 << 11 | var3 << 7; var5 > 0 && Block.lightOpacity[this.blocks[var6 + var5 - 1]] == 0; --var5) { + } + + if(var5 != var4) { + this.worldObj.func_498_f(var1, var3, var5, var4); + this.heightMap[var3 << 4 | var1] = (byte)var5; + int var7; + int var8; + int var9; + if(var5 < this.field_686_i) { + this.field_686_i = var5; + } else { + var7 = 127; + + for(var8 = 0; var8 < 16; ++var8) { + for(var9 = 0; var9 < 16; ++var9) { + if((this.heightMap[var9 << 4 | var8] & 255) < var7) { + var7 = this.heightMap[var9 << 4 | var8] & 255; + } + } + } + + this.field_686_i = var7; + } + + var7 = this.xPosition * 16 + var1; + var8 = this.zPosition * 16 + var3; + if(var5 < var4) { + for(var9 = var5; var9 < var4; ++var9) { + this.skylightMap.setNibble(var1, var9, var3, 15); + } + } else { + this.worldObj.func_483_a(EnumSkyBlock.Sky, var7, var4, var8, var7, var5, var8); + + for(var9 = var4; var9 < var5; ++var9) { + this.skylightMap.setNibble(var1, var9, var3, 0); + } + } + + var9 = 15; + + int var10; + for(var10 = var5; var5 > 0 && var9 > 0; this.skylightMap.setNibble(var1, var5, var3, var9)) { + --var5; + int var11 = Block.lightOpacity[this.getBlockID(var1, var5, var3)]; + if(var11 == 0) { + var11 = 1; + } + + var9 -= var11; + if(var9 < 0) { + var9 = 0; + } + } + + while(var5 > 0 && Block.lightOpacity[this.getBlockID(var1, var5 - 1, var3)] == 0) { + --var5; + } + + if(var5 != var10) { + this.worldObj.func_483_a(EnumSkyBlock.Sky, var7 - 1, var5, var8 - 1, var7 + 1, var10, var8 + 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 && this.data.getNibble(var1, var2, var3) == var5) { + 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 && !this.worldObj.multiplayerWorld) { + Block.blocksList[var8].onBlockRemoval(this.worldObj, var9, var2, var10); + } + + this.data.setNibble(var1, var2, var3, var5); + if(!this.worldObj.field_4272_q.field_4306_c) { + if(Block.lightOpacity[var6] != 0) { + if(var2 >= var7) { + this.func_339_g(var1, var2 + 1, var3); + } + } else if(var2 == var7 - 1) { + this.func_339_g(var1, var2, var3); + } + + this.worldObj.func_483_a(EnumSkyBlock.Sky, var9, var2, var10, var9, var2, var10); + } + + this.worldObj.func_483_a(EnumSkyBlock.Block, var9, var2, var10, var9, var2, var10); + this.func_333_c(var1, var3); + if(var4 != 0) { + Block.blocksList[var4].onBlockAdded(this.worldObj, var9, var2, var10); + } + + this.data.setNibble(var1, var2, var3, var5); + 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.setNibble(var1, var2, var3, 0); + if(Block.lightOpacity[var5] != 0) { + if(var2 >= var6) { + this.func_339_g(var1, var2 + 1, var3); + } + } else if(var2 == var6 - 1) { + this.func_339_g(var1, var2, var3); + } + + this.worldObj.func_483_a(EnumSkyBlock.Sky, var8, var2, var9, var8, var2, var9); + this.worldObj.func_483_a(EnumSkyBlock.Block, var8, var2, var9, var8, var2, var9); + this.func_333_c(var1, var3); + if(var4 != 0 && !this.worldObj.multiplayerWorld) { + 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.getNibble(var1, var2, var3); + } + + public void setBlockMetadata(int var1, int var2, int var3, int var4) { + this.isModified = true; + this.data.setNibble(var1, var2, var3, var4); + } + + public int getSavedLightValue(EnumSkyBlock var1, int var2, int var3, int var4) { + return var1 == EnumSkyBlock.Sky ? this.skylightMap.getNibble(var2, var3, var4) : (var1 == EnumSkyBlock.Block ? this.blocklightMap.getNibble(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.setNibble(var2, var3, var4, var5); + } else { + if(var1 != EnumSkyBlock.Block) { + return; + } + + this.blocklightMap.setNibble(var2, var3, var4, var5); + } + + } + + public int getBlockLightValue(int var1, int var2, int var3, int var4) { + int var5 = this.skylightMap.getNibble(var1, var2, var3); + if(var5 > 0) { + field_694_a = true; + } + + var5 -= var4; + int var6 = this.blocklightMap.getNibble(var1, var2, var3); + if(var6 > var5) { + var5 = var6; + } + + return var5; + } + + public void addEntity(Entity var1) { + if(!this.field_678_q) { + this.field_677_r = 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); + Thread.dumpStack(); + } + + int var4 = MathHelper.floor_double(var1.posY / 16.0D); + if(var4 < 0) { + var4 = 0; + } + + if(var4 >= this.entities.length) { + var4 = this.entities.length - 1; + } + + var1.field_276_Z = true; + var1.field_307_aa = this.xPosition; + var1.field_305_ab = var4; + var1.field_303_ac = this.zPosition; + this.entities[var4].add(var1); + } + } + + public void func_350_b(Entity var1) { + this.func_332_a(var1, var1.field_305_ab); + } + + public void func_332_a(Entity var1, int var2) { + if(var2 < 0) { + var2 = 0; + } + + if(var2 >= this.entities.length) { + var2 = this.entities.length - 1; + } + + this.entities[var2].remove(var1); + } + + public boolean canBlockSeeTheSky(int var1, int var2, int var3) { + return var2 >= (this.heightMap[var3 << 4 | var1] & 255); + } + + public TileEntity func_338_d(int var1, int var2, int var3) { + ChunkPosition var4 = new ChunkPosition(var1, var2, var3); + TileEntity var5 = (TileEntity)this.field_683_l.get(var4); + if(var5 == null) { + int var6 = this.getBlockID(var1, var2, var3); + if(!Block.isBlockContainer[var6]) { + return null; + } + + BlockContainer var7 = (BlockContainer)Block.blocksList[var6]; + var7.onBlockAdded(this.worldObj, this.xPosition * 16 + var1, var2, this.zPosition * 16 + var3); + var5 = (TileEntity)this.field_683_l.get(var4); + } + + return var5; + } + + public void func_349_a(TileEntity var1) { + int var2 = var1.xCoord - this.xPosition * 16; + int var3 = var1.yCoord; + int var4 = var1.zCoord - this.zPosition * 16; + this.func_352_a(var2, var3, var4, var1); + } + + public void func_352_a(int var1, int var2, int var3, TileEntity var4) { + ChunkPosition var5 = new ChunkPosition(var1, var2, var3); + 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.field_692_c) { + if(this.field_683_l.get(var5) != null) { + this.worldObj.field_814_b.remove(this.field_683_l.get(var5)); + } + + this.worldObj.field_814_b.add(var4); + } + + this.field_683_l.put(var5, var4); + } else { + System.out.println("Attempted to place a tile entity where there was no entity tile!"); + } + } + + public void func_359_e(int var1, int var2, int var3) { + ChunkPosition var4 = new ChunkPosition(var1, var2, var3); + if(this.field_692_c) { + this.worldObj.field_814_b.remove(this.field_683_l.remove(var4)); + } + + } + + public void func_358_c() { + this.field_692_c = true; + this.worldObj.field_814_b.addAll(this.field_683_l.values()); + + for(int var1 = 0; var1 < this.entities.length; ++var1) { + this.worldObj.func_464_a(this.entities[var1]); + } + + } + + public void func_331_d() { + this.field_692_c = false; + this.worldObj.field_814_b.removeAll(this.field_683_l.values()); + + for(int var1 = 0; var1 < this.entities.length; ++var1) { + this.worldObj.func_461_b(this.entities[var1]); + } + + } + + public void func_336_e() { + 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 func_347_a(boolean var1) { + return this.field_679_p ? false : (this.field_677_r && this.worldObj.worldTime != this.field_676_s ? true : this.isModified); + } + + public int func_340_a(byte[] var1, int var2, int var3, int var4, int var5, int var6, int var7, int var8) { + int var9; + int var10; + int var11; + int var12; + for(var9 = var2; var9 < var5; ++var9) { + for(var10 = var4; var10 < var7; ++var10) { + var11 = var9 << 11 | var10 << 7 | var3; + var12 = var6 - var3; + System.arraycopy(this.blocks, var11, var1, var8, var12); + var8 += var12; + } + } + + for(var9 = var2; var9 < var5; ++var9) { + for(var10 = var4; var10 < var7; ++var10) { + var11 = (var9 << 11 | var10 << 7 | var3) >> 1; + var12 = (var6 - var3) / 2; + System.arraycopy(this.data.data, var11, var1, var8, var12); + var8 += var12; + } + } + + for(var9 = var2; var9 < var5; ++var9) { + for(var10 = var4; var10 < var7; ++var10) { + var11 = (var9 << 11 | var10 << 7 | var3) >> 1; + var12 = (var6 - var3) / 2; + System.arraycopy(this.blocklightMap.data, var11, var1, var8, var12); + var8 += var12; + } + } + + for(var9 = var2; var9 < var5; ++var9) { + for(var10 = var4; var10 < var7; ++var10) { + var11 = (var9 << 11 | var10 << 7 | var3) >> 1; + var12 = (var6 - var3) / 2; + System.arraycopy(this.skylightMap.data, var11, var1, var8, var12); + var8 += var12; + } + } + + return var8; + } + + public Random func_334_a(long var1) { + return new Random(this.worldObj.randomSeed + (long)(this.xPosition * this.xPosition * 4987142) + (long)(this.xPosition * 5947611) + (long)(this.zPosition * this.zPosition) * 4392871L + (long)(this.zPosition * 389711) ^ var1); + } +} diff --git a/minecraft_server/src/net/minecraft/src/ChunkCache.java b/minecraft_server/src/net/minecraft/src/ChunkCache.java new file mode 100644 index 0000000..98add77 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ChunkCache.java @@ -0,0 +1,58 @@ +package net.minecraft.src; + +public class ChunkCache implements IBlockAccess { + private int field_823_a; + private int field_822_b; + private Chunk[][] field_825_c; + private World worldObj; + + public ChunkCache(World var1, int var2, int var3, int var4, int var5, int var6, int var7) { + this.worldObj = var1; + this.field_823_a = var2 >> 4; + this.field_822_b = var4 >> 4; + int var8 = var5 >> 4; + int var9 = var7 >> 4; + this.field_825_c = new Chunk[var8 - this.field_823_a + 1][var9 - this.field_822_b + 1]; + + for(int var10 = this.field_823_a; var10 <= var8; ++var10) { + for(int var11 = this.field_822_b; var11 <= var9; ++var11) { + this.field_825_c[var10 - this.field_823_a][var11 - this.field_822_b] = 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.field_823_a; + int var5 = (var3 >> 4) - this.field_822_b; + return this.field_825_c[var4][var5].getBlockID(var1 & 15, var2, var3 & 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.field_823_a; + int var5 = (var3 >> 4) - this.field_822_b; + return this.field_825_c[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 doesBlockAllowAttachment(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return var4 == null ? false : var4.allowsAttachment(); + } +} diff --git a/minecraft_server/src/net/minecraft/src/ChunkCoordIntPair.java b/minecraft_server/src/net/minecraft/src/ChunkCoordIntPair.java new file mode 100644 index 0000000..aa92fc9 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ChunkCoordIntPair.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +public class ChunkCoordIntPair { + public int field_152_a; + public int field_151_b; + + public ChunkCoordIntPair(int var1, int var2) { + this.field_152_a = var1; + this.field_151_b = var2; + } + + public int hashCode() { + return this.field_152_a << 8 | this.field_151_b; + } + + public boolean equals(Object var1) { + ChunkCoordIntPair var2 = (ChunkCoordIntPair)var1; + return var2.field_152_a == this.field_152_a && var2.field_151_b == this.field_151_b; + } + + public double func_73_a(Entity var1) { + double var2 = (double)(this.field_152_a * 16 + 8); + double var4 = (double)(this.field_151_b * 16 + 8); + double var6 = var2 - var1.posX; + double var8 = var4 - var1.posZ; + return var6 * var6 + var8 * var8; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ChunkCoordinates.java b/minecraft_server/src/net/minecraft/src/ChunkCoordinates.java new file mode 100644 index 0000000..24cbeb2 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ChunkCoordinates.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +final class ChunkCoordinates { + public final int field_529_a; + public final int field_528_b; + + public ChunkCoordinates(int var1, int var2) { + this.field_529_a = var1; + this.field_528_b = var2; + } + + public boolean equals(Object var1) { + if(!(var1 instanceof ChunkCoordinates)) { + return false; + } else { + ChunkCoordinates var2 = (ChunkCoordinates)var1; + return this.field_529_a == var2.field_529_a && this.field_528_b == var2.field_528_b; + } + } + + public int hashCode() { + return this.field_529_a << 16 ^ this.field_528_b; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ChunkLoader.java b/minecraft_server/src/net/minecraft/src/ChunkLoader.java new file mode 100644 index 0000000..2bbb2cf --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ChunkLoader.java @@ -0,0 +1,207 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.Iterator; + +public class ChunkLoader implements IChunkLoader { + private File field_945_a; + private boolean field_944_b; + + public ChunkLoader(File var1, boolean var2) { + this.field_945_a = var1; + this.field_944_b = var2; + } + + private File func_665_a(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.field_945_a, var4); + if(!var6.exists()) { + if(!this.field_944_b) { + return null; + } + + var6.mkdir(); + } + + var6 = new File(var6, var5); + if(!var6.exists()) { + if(!this.field_944_b) { + return null; + } + + var6.mkdir(); + } + + var6 = new File(var6, var3); + return !var6.exists() && !this.field_944_b ? null : var6; + } + + public Chunk func_659_a(World var1, int var2, int var3) throws IOException { + File var4 = this.func_665_a(var2, var3); + if(var4 != null && var4.exists()) { + try { + FileInputStream var5 = new FileInputStream(var4); + NBTTagCompound var6 = CompressedStreamTools.func_770_a(var5); + if(!var6.hasKey("Level")) { + System.out.println("Chunk file at " + var2 + "," + var3 + " is missing level data, skipping"); + return null; + } + + if(!var6.getCompoundTag("Level").hasKey("Blocks")) { + System.out.println("Chunk file at " + var2 + "," + var3 + " is missing block data, skipping"); + return null; + } + + Chunk var7 = func_664_a(var1, var6.getCompoundTag("Level")); + if(!var7.func_351_a(var2, var3)) { + System.out.println("Chunk file at " + var2 + "," + var3 + " is in the wrong location; relocating. (Expected " + var2 + ", " + var3 + ", got " + var7.xPosition + ", " + var7.zPosition + ")"); + var6.setInteger("xPos", var2); + var6.setInteger("zPos", var3); + var7 = func_664_a(var1, var6.getCompoundTag("Level")); + } + + return var7; + } catch (Exception var8) { + var8.printStackTrace(); + } + } + + return null; + } + + public void func_662_a(World var1, Chunk var2) throws IOException { + var1.func_476_g(); + File var3 = this.func_665_a(var2.xPosition, var2.zPosition); + if(var3.exists()) { + var1.sizeOnDisk -= var3.length(); + } + + try { + File var4 = new File(this.field_945_a, "tmp_chunk.dat"); + FileOutputStream var5 = new FileOutputStream(var4); + NBTTagCompound var6 = new NBTTagCompound(); + NBTTagCompound var7 = new NBTTagCompound(); + var6.setTag("Level", var7); + this.func_663_a(var2, var1, var7); + CompressedStreamTools.func_769_a(var6, var5); + var5.close(); + if(var3.exists()) { + var3.delete(); + } + + var4.renameTo(var3); + var1.sizeOnDisk += var3.length(); + } catch (Exception var8) { + var8.printStackTrace(); + } + + } + + public void func_663_a(Chunk var1, World var2, NBTTagCompound var3) { + var2.func_476_g(); + 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.field_677_r = 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.field_677_r = true; + var8 = new NBTTagCompound(); + if(var7.func_95_c(var8)) { + var4.setTag(var8); + } + } + } + + var3.setTag("Entities", var4); + NBTTagList var9 = new NBTTagList(); + var6 = var1.field_683_l.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 func_664_a(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.func_353_b(); + } + + if(!var4.blocklightMap.isValid()) { + var4.blocklightMap = new NibbleArray(var4.blocks.length); + var4.func_348_a(); + } + + 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.func_566_a(var7, var0); + var4.field_677_r = 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.func_349_a(var9); + } + } + } + + return var4; + } + + public void func_661_a() { + } + + public void func_660_b() { + } + + public void func_4104_b(World var1, Chunk var2) throws IOException { + } +} diff --git a/minecraft_server/src/net/minecraft/src/ChunkPosition.java b/minecraft_server/src/net/minecraft/src/ChunkPosition.java new file mode 100644 index 0000000..d0772b5 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ChunkPosition.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +public class ChunkPosition { + public final int field_846_a; + public final int field_845_b; + public final int field_847_c; + + public ChunkPosition(int var1, int var2, int var3) { + this.field_846_a = var1; + this.field_845_b = var2; + this.field_847_c = var3; + } + + public boolean equals(Object var1) { + if(!(var1 instanceof ChunkPosition)) { + return false; + } else { + ChunkPosition var2 = (ChunkPosition)var1; + return var2.field_846_a == this.field_846_a && var2.field_845_b == this.field_845_b && var2.field_847_c == this.field_847_c; + } + } + + public int hashCode() { + return this.field_846_a * 8976890 + this.field_845_b * 981131 + this.field_847_c; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ChunkProviderGenerate.java b/minecraft_server/src/net/minecraft/src/ChunkProviderGenerate.java new file mode 100644 index 0000000..a10dba7 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ChunkProviderGenerate.java @@ -0,0 +1,546 @@ +package net.minecraft.src; + +import java.util.Random; + +public class ChunkProviderGenerate implements IChunkProvider { + private Random rand; + private NoiseGeneratorOctaves field_705_k; + private NoiseGeneratorOctaves field_704_l; + private NoiseGeneratorOctaves field_703_m; + private NoiseGeneratorOctaves field_702_n; + private NoiseGeneratorOctaves field_701_o; + public NoiseGeneratorOctaves field_715_a; + public NoiseGeneratorOctaves field_714_b; + public NoiseGeneratorOctaves field_713_c; + private World worldObj; + private double[] field_4224_q; + private double[] field_698_r = new double[256]; + private double[] field_697_s = new double[256]; + private double[] field_696_t = new double[256]; + private MapGenBase field_695_u = new MapGenCaves(); + private MobSpawnerBase[] biomesForGeneration; + double[] field_4229_d; + double[] field_4228_e; + double[] field_4227_f; + double[] field_4226_g; + double[] field_4225_h; + int[][] field_707_i = new int[32][32]; + private double[] field_4222_w; + + public ChunkProviderGenerate(World var1, long var2) { + this.worldObj = var1; + this.rand = new Random(var2); + this.field_705_k = new NoiseGeneratorOctaves(this.rand, 16); + this.field_704_l = new NoiseGeneratorOctaves(this.rand, 16); + this.field_703_m = new NoiseGeneratorOctaves(this.rand, 8); + this.field_702_n = new NoiseGeneratorOctaves(this.rand, 4); + this.field_701_o = new NoiseGeneratorOctaves(this.rand, 4); + this.field_715_a = new NoiseGeneratorOctaves(this.rand, 10); + this.field_714_b = new NoiseGeneratorOctaves(this.rand, 16); + this.field_713_c = new NoiseGeneratorOctaves(this.rand, 8); + } + + public void generateTerrain(int var1, int var2, byte[] var3, MobSpawnerBase[] var4, double[] var5) { + byte var6 = 4; + byte var7 = 64; + int var8 = var6 + 1; + byte var9 = 17; + int var10 = var6 + 1; + this.field_4224_q = this.func_4058_a(this.field_4224_q, var1 * var6, 0, var2 * var6, var8, var9, var10); + + for(int var11 = 0; var11 < var6; ++var11) { + for(int var12 = 0; var12 < var6; ++var12) { + for(int var13 = 0; var13 < 16; ++var13) { + double var14 = 0.125D; + double var16 = this.field_4224_q[((var11 + 0) * var10 + var12 + 0) * var9 + var13 + 0]; + double var18 = this.field_4224_q[((var11 + 0) * var10 + var12 + 1) * var9 + var13 + 0]; + double var20 = this.field_4224_q[((var11 + 1) * var10 + var12 + 0) * var9 + var13 + 0]; + double var22 = this.field_4224_q[((var11 + 1) * var10 + var12 + 1) * var9 + var13 + 0]; + double var24 = (this.field_4224_q[((var11 + 0) * var10 + var12 + 0) * var9 + var13 + 1] - var16) * var14; + double var26 = (this.field_4224_q[((var11 + 0) * var10 + var12 + 1) * var9 + var13 + 1] - var18) * var14; + double var28 = (this.field_4224_q[((var11 + 1) * var10 + var12 + 0) * var9 + var13 + 1] - var20) * var14; + double var30 = (this.field_4224_q[((var11 + 1) * var10 + var12 + 1) * var9 + var13 + 1] - var22) * var14; + + for(int var32 = 0; var32 < 8; ++var32) { + double var33 = 0.25D; + double var35 = var16; + double var37 = var18; + double var39 = (var20 - var16) * var33; + double var41 = (var22 - var18) * var33; + + for(int var43 = 0; var43 < 4; ++var43) { + int var44 = var43 + var11 * 4 << 11 | 0 + var12 * 4 << 7 | var13 * 8 + var32; + short var45 = 128; + double var46 = 0.25D; + double var48 = var35; + double var50 = (var37 - var35) * var46; + + for(int var52 = 0; var52 < 4; ++var52) { + double var53 = var5[(var11 * 4 + var43) * 16 + var12 * 4 + var52]; + int var55 = 0; + if(var13 * 8 + var32 < var7) { + if(var53 < 0.5D && var13 * 8 + var32 >= var7 - 1) { + var55 = Block.ice.blockID; + } else { + var55 = Block.waterMoving.blockID; + } + } + + if(var48 > 0.0D) { + var55 = Block.stone.blockID; + } + + var3[var44] = (byte)var55; + var44 += var45; + var48 += var50; + } + + var35 += var39; + var37 += var41; + } + + var16 += var24; + var18 += var26; + var20 += var28; + var22 += var30; + } + } + } + } + + } + + public void replaceBlocksForBiome(int var1, int var2, byte[] var3, MobSpawnerBase[] var4) { + byte var5 = 64; + double var6 = 1.0D / 32.0D; + this.field_698_r = this.field_702_n.func_648_a(this.field_698_r, (double)(var1 * 16), (double)(var2 * 16), 0.0D, 16, 16, 1, var6, var6, 1.0D); + this.field_697_s = this.field_702_n.func_648_a(this.field_697_s, (double)(var2 * 16), 109.0134D, (double)(var1 * 16), 16, 1, 16, var6, 1.0D, var6); + this.field_696_t = this.field_701_o.func_648_a(this.field_696_t, (double)(var1 * 16), (double)(var2 * 16), 0.0D, 16, 16, 1, var6 * 2.0D, var6 * 2.0D, var6 * 2.0D); + + for(int var8 = 0; var8 < 16; ++var8) { + for(int var9 = 0; var9 < 16; ++var9) { + MobSpawnerBase var10 = var4[var8 * 16 + var9]; + boolean var11 = this.field_698_r[var8 + var9 * 16] + this.rand.nextDouble() * 0.2D > 0.0D; + boolean var12 = this.field_697_s[var8 + var9 * 16] + this.rand.nextDouble() * 0.2D > 3.0D; + int var13 = (int)(this.field_696_t[var8 + var9 * 16] / 3.0D + 3.0D + this.rand.nextDouble() * 0.25D); + int var14 = -1; + byte var15 = var10.topBlock; + byte var16 = var10.fillerBlock; + + for(int var17 = 127; var17 >= 0; --var17) { + int var18 = (var8 * 16 + var9) * 128 + var17; + if(var17 <= 0 + this.rand.nextInt(5)) { + var3[var18] = (byte)Block.bedrock.blockID; + } else { + byte var19 = var3[var18]; + if(var19 == 0) { + var14 = -1; + } else if(var19 == Block.stone.blockID) { + if(var14 == -1) { + if(var13 <= 0) { + var15 = 0; + var16 = (byte)Block.stone.blockID; + } else if(var17 >= var5 - 4 && var17 <= var5 + 1) { + var15 = var10.topBlock; + var16 = var10.fillerBlock; + if(var12) { + var15 = 0; + } + + if(var12) { + var16 = (byte)Block.gravel.blockID; + } + + if(var11) { + var15 = (byte)Block.sand.blockID; + } + + if(var11) { + var16 = (byte)Block.sand.blockID; + } + } + + if(var17 < var5 && var15 == 0) { + var15 = (byte)Block.waterMoving.blockID; + } + + var14 = var13; + if(var17 >= var5 - 1) { + var3[var18] = var15; + } else { + var3[var18] = var16; + } + } else if(var14 > 0) { + --var14; + var3[var18] = var16; + } + } + } + } + } + } + + } + + public Chunk func_363_b(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.biomesForGeneration = this.worldObj.func_4077_a().loadBlockGeneratorData(this.biomesForGeneration, var1 * 16, var2 * 16, 16, 16); + double[] var5 = this.worldObj.func_4077_a().temperature; + this.generateTerrain(var1, var2, var3, this.biomesForGeneration, var5); + this.replaceBlocksForBiome(var1, var2, var3, this.biomesForGeneration); + this.field_695_u.func_667_a(this, this.worldObj, var1, var2, var3); + var4.func_353_b(); + return var4; + } + + private double[] func_4058_a(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; + double[] var12 = this.worldObj.func_4077_a().temperature; + double[] var13 = this.worldObj.func_4077_a().humidity; + this.field_4226_g = this.field_715_a.func_4103_a(this.field_4226_g, var2, var4, var5, var7, 1.121D, 1.121D, 0.5D); + this.field_4225_h = this.field_714_b.func_4103_a(this.field_4225_h, var2, var4, var5, var7, 200.0D, 200.0D, 0.5D); + this.field_4229_d = this.field_703_m.func_648_a(this.field_4229_d, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8 / 80.0D, var10 / 160.0D, var8 / 80.0D); + this.field_4228_e = this.field_705_k.func_648_a(this.field_4228_e, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8, var10, var8); + this.field_4227_f = this.field_704_l.func_648_a(this.field_4227_f, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8, var10, var8); + int var14 = 0; + int var15 = 0; + int var16 = 16 / var5; + + for(int var17 = 0; var17 < var5; ++var17) { + int var18 = var17 * var16 + var16 / 2; + + for(int var19 = 0; var19 < var7; ++var19) { + int var20 = var19 * var16 + var16 / 2; + double var21 = var12[var18 * 16 + var20]; + double var23 = var13[var18 * 16 + var20] * var21; + double var25 = 1.0D - var23; + var25 *= var25; + var25 *= var25; + var25 = 1.0D - var25; + double var27 = (this.field_4226_g[var15] + 256.0D) / 512.0D; + var27 *= var25; + if(var27 > 1.0D) { + var27 = 1.0D; + } + + double var29 = this.field_4225_h[var15] / 8000.0D; + if(var29 < 0.0D) { + var29 = -var29 * 0.3D; + } + + var29 = var29 * 3.0D - 2.0D; + if(var29 < 0.0D) { + var29 /= 2.0D; + if(var29 < -1.0D) { + var29 = -1.0D; + } + + var29 /= 1.4D; + var29 /= 2.0D; + var27 = 0.0D; + } else { + if(var29 > 1.0D) { + var29 = 1.0D; + } + + var29 /= 8.0D; + } + + if(var27 < 0.0D) { + var27 = 0.0D; + } + + var27 += 0.5D; + var29 = var29 * (double)var6 / 16.0D; + double var31 = (double)var6 / 2.0D + var29 * 4.0D; + ++var15; + + for(int var33 = 0; var33 < var6; ++var33) { + double var34 = 0.0D; + double var36 = ((double)var33 - var31) * 12.0D / var27; + if(var36 < 0.0D) { + var36 *= 4.0D; + } + + double var38 = this.field_4228_e[var14] / 512.0D; + double var40 = this.field_4227_f[var14] / 512.0D; + double var42 = (this.field_4229_d[var14] / 10.0D + 1.0D) / 2.0D; + if(var42 < 0.0D) { + var34 = var38; + } else if(var42 > 1.0D) { + var34 = var40; + } else { + var34 = var38 + (var40 - var38) * var42; + } + + var34 -= var36; + if(var33 > var6 - 4) { + double var44 = (double)((float)(var33 - (var6 - 4)) / 3.0F); + var34 = var34 * (1.0D - var44) + -10.0D * var44; + } + + var1[var14] = var34; + ++var14; + } + } + } + + return var1; + } + + public boolean chunkExists(int var1, int var2) { + return true; + } + + public void populate(IChunkProvider var1, int var2, int var3) { + BlockSand.fallInstantly = true; + int var4 = var2 * 16; + int var5 = var3 * 16; + MobSpawnerBase var6 = this.worldObj.func_4077_a().func_4067_a(var4 + 16, var5 + 16); + this.rand.setSeed(this.worldObj.randomSeed); + long var7 = this.rand.nextLong() / 2L * 2L + 1L; + long var9 = this.rand.nextLong() / 2L * 2L + 1L; + this.rand.setSeed((long)var2 * var7 + (long)var3 * var9 ^ this.worldObj.randomSeed); + double var11 = 0.25D; + int var13; + int var14; + int var15; + if(this.rand.nextInt(4) == 0) { + var13 = var4 + this.rand.nextInt(16) + 8; + var14 = this.rand.nextInt(128); + var15 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenLakes(Block.waterMoving.blockID)).generate(this.worldObj, this.rand, var13, var14, var15); + } + + if(this.rand.nextInt(8) == 0) { + var13 = var4 + this.rand.nextInt(16) + 8; + var14 = this.rand.nextInt(this.rand.nextInt(120) + 8); + var15 = var5 + this.rand.nextInt(16) + 8; + if(var14 < 64 || this.rand.nextInt(10) == 0) { + (new WorldGenLakes(Block.lavaMoving.blockID)).generate(this.worldObj, this.rand, var13, var14, var15); + } + } + + int var16; + for(var13 = 0; var13 < 8; ++var13) { + var14 = var4 + this.rand.nextInt(16) + 8; + var15 = this.rand.nextInt(128); + var16 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenDungeons()).generate(this.worldObj, this.rand, var14, var15, var16); + } + + for(var13 = 0; var13 < 10; ++var13) { + var14 = var4 + this.rand.nextInt(16); + var15 = this.rand.nextInt(128); + var16 = var5 + this.rand.nextInt(16); + (new WorldGenClay(32)).generate(this.worldObj, this.rand, var14, var15, var16); + } + + for(var13 = 0; var13 < 20; ++var13) { + var14 = var4 + this.rand.nextInt(16); + var15 = this.rand.nextInt(128); + var16 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.dirt.blockID, 32)).generate(this.worldObj, this.rand, var14, var15, var16); + } + + for(var13 = 0; var13 < 10; ++var13) { + var14 = var4 + this.rand.nextInt(16); + var15 = this.rand.nextInt(128); + var16 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.gravel.blockID, 32)).generate(this.worldObj, this.rand, var14, var15, var16); + } + + for(var13 = 0; var13 < 20; ++var13) { + var14 = var4 + this.rand.nextInt(16); + var15 = this.rand.nextInt(128); + var16 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.oreCoal.blockID, 16)).generate(this.worldObj, this.rand, var14, var15, var16); + } + + for(var13 = 0; var13 < 20; ++var13) { + var14 = var4 + this.rand.nextInt(16); + var15 = this.rand.nextInt(64); + var16 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.oreIron.blockID, 8)).generate(this.worldObj, this.rand, var14, var15, var16); + } + + for(var13 = 0; var13 < 2; ++var13) { + var14 = var4 + this.rand.nextInt(16); + var15 = this.rand.nextInt(32); + var16 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.oreGold.blockID, 8)).generate(this.worldObj, this.rand, var14, var15, var16); + } + + for(var13 = 0; var13 < 8; ++var13) { + var14 = var4 + this.rand.nextInt(16); + var15 = this.rand.nextInt(16); + var16 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.oreRedstone.blockID, 7)).generate(this.worldObj, this.rand, var14, var15, var16); + } + + for(var13 = 0; var13 < 1; ++var13) { + var14 = var4 + this.rand.nextInt(16); + var15 = this.rand.nextInt(16); + var16 = var5 + this.rand.nextInt(16); + (new WorldGenMinable(Block.oreDiamond.blockID, 7)).generate(this.worldObj, this.rand, var14, var15, var16); + } + + var11 = 0.5D; + var13 = (int)((this.field_713_c.func_647_a((double)var4 * var11, (double)var5 * var11) / 8.0D + this.rand.nextDouble() * 4.0D + 4.0D) / 3.0D); + var14 = 0; + if(this.rand.nextInt(10) == 0) { + ++var14; + } + + if(var6 == MobSpawnerBase.forest) { + var14 += var13 + 5; + } + + if(var6 == MobSpawnerBase.rainforest) { + var14 += var13 + 5; + } + + if(var6 == MobSpawnerBase.seasonalForest) { + var14 += var13 + 2; + } + + if(var6 == MobSpawnerBase.taiga) { + var14 += var13 + 5; + } + + if(var6 == MobSpawnerBase.desert) { + var14 -= 20; + } + + if(var6 == MobSpawnerBase.tundra) { + var14 -= 20; + } + + if(var6 == MobSpawnerBase.plains) { + var14 -= 20; + } + + Object var24 = new WorldGenTrees(); + if(this.rand.nextInt(10) == 0) { + var24 = new WorldGenBigTree(); + } + + if(var6 == MobSpawnerBase.rainforest && this.rand.nextInt(3) == 0) { + var24 = new WorldGenBigTree(); + } + + int var17; + int var18; + for(var16 = 0; var16 < var14; ++var16) { + var17 = var4 + this.rand.nextInt(16) + 8; + var18 = var5 + this.rand.nextInt(16) + 8; + ((WorldGenerator)var24).func_420_a(1.0D, 1.0D, 1.0D); + ((WorldGenerator)var24).generate(this.worldObj, this.rand, var17, this.worldObj.getHeightValue(var17, var18), var18); + } + + int var19; + for(var16 = 0; var16 < 2; ++var16) { + var17 = var4 + this.rand.nextInt(16) + 8; + var18 = this.rand.nextInt(128); + var19 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.plantYellow.blockID)).generate(this.worldObj, this.rand, var17, var18, var19); + } + + if(this.rand.nextInt(2) == 0) { + var16 = var4 + this.rand.nextInt(16) + 8; + var17 = this.rand.nextInt(128); + var18 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.plantRed.blockID)).generate(this.worldObj, this.rand, var16, var17, var18); + } + + if(this.rand.nextInt(4) == 0) { + var16 = var4 + this.rand.nextInt(16) + 8; + var17 = this.rand.nextInt(128); + var18 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomBrown.blockID)).generate(this.worldObj, this.rand, var16, var17, var18); + } + + if(this.rand.nextInt(8) == 0) { + var16 = var4 + this.rand.nextInt(16) + 8; + var17 = this.rand.nextInt(128); + var18 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomRed.blockID)).generate(this.worldObj, this.rand, var16, var17, var18); + } + + for(var16 = 0; var16 < 10; ++var16) { + var17 = var4 + this.rand.nextInt(16) + 8; + var18 = this.rand.nextInt(128); + var19 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenReed()).generate(this.worldObj, this.rand, var17, var18, var19); + } + + if(this.rand.nextInt(32) == 0) { + var16 = var4 + this.rand.nextInt(16) + 8; + var17 = this.rand.nextInt(128); + var18 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenPumpkin()).generate(this.worldObj, this.rand, var16, var17, var18); + } + + var16 = 0; + if(var6 == MobSpawnerBase.desert) { + var16 += 10; + } + + int var20; + for(var17 = 0; var17 < var16; ++var17) { + var18 = var4 + this.rand.nextInt(16) + 8; + var19 = this.rand.nextInt(128); + var20 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenCactus()).generate(this.worldObj, this.rand, var18, var19, var20); + } + + for(var17 = 0; var17 < 50; ++var17) { + var18 = var4 + this.rand.nextInt(16) + 8; + var19 = this.rand.nextInt(this.rand.nextInt(120) + 8); + var20 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenLiquids(Block.waterStill.blockID)).generate(this.worldObj, this.rand, var18, var19, var20); + } + + for(var17 = 0; var17 < 20; ++var17) { + var18 = var4 + this.rand.nextInt(16) + 8; + var19 = this.rand.nextInt(this.rand.nextInt(this.rand.nextInt(112) + 8) + 8); + var20 = var5 + this.rand.nextInt(16) + 8; + (new WorldGenLiquids(Block.lavaStill.blockID)).generate(this.worldObj, this.rand, var18, var19, var20); + } + + this.field_4222_w = this.worldObj.func_4077_a().getTemperatures(this.field_4222_w, var4 + 8, var5 + 8, 16, 16); + + for(var17 = var4 + 8; var17 < var4 + 8 + 16; ++var17) { + for(var18 = var5 + 8; var18 < var5 + 8 + 16; ++var18) { + var19 = var17 - (var4 + 8); + var20 = var18 - (var5 + 8); + int var21 = this.worldObj.func_4075_e(var17, var18); + double var22 = this.field_4222_w[var19 * 16 + var20] - (double)(var21 - 64) / 64.0D * 0.3D; + if(var22 < 0.5D && var21 > 0 && var21 < 128 && this.worldObj.getBlockId(var17, var21, var18) == 0 && this.worldObj.getBlockMaterial(var17, var21 - 1, var18).func_218_c() && this.worldObj.getBlockMaterial(var17, var21 - 1, var18) != Material.ice) { + this.worldObj.setBlockWithNotify(var17, var21, var18, Block.snow.blockID); + } + } + } + + BlockSand.fallInstantly = false; + } + + public boolean saveWorld(boolean var1, IProgressUpdate var2) { + return true; + } + + public boolean func_361_a() { + return false; + } + + public boolean func_364_b() { + return true; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ChunkProviderHell.java b/minecraft_server/src/net/minecraft/src/ChunkProviderHell.java new file mode 100644 index 0000000..8a440bf --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ChunkProviderHell.java @@ -0,0 +1,370 @@ +package net.minecraft.src; + +import java.util.Random; + +public class ChunkProviderHell implements IChunkProvider { + private Random field_4241_h; + private NoiseGeneratorOctaves field_4240_i; + private NoiseGeneratorOctaves field_4239_j; + private NoiseGeneratorOctaves field_4238_k; + private NoiseGeneratorOctaves field_4237_l; + private NoiseGeneratorOctaves field_4236_m; + public NoiseGeneratorOctaves field_4248_a; + public NoiseGeneratorOctaves field_4247_b; + private World field_4235_n; + private double[] field_4234_o; + private double[] field_4233_p = new double[256]; + private double[] field_4232_q = new double[256]; + private double[] field_4231_r = new double[256]; + private MapGenBase field_4230_s = new MapGenCavesHell(); + double[] field_4246_c; + double[] field_4245_d; + double[] field_4244_e; + double[] field_4243_f; + double[] field_4242_g; + + public ChunkProviderHell(World var1, long var2) { + this.field_4235_n = var1; + this.field_4241_h = new Random(var2); + this.field_4240_i = new NoiseGeneratorOctaves(this.field_4241_h, 16); + this.field_4239_j = new NoiseGeneratorOctaves(this.field_4241_h, 16); + this.field_4238_k = new NoiseGeneratorOctaves(this.field_4241_h, 8); + this.field_4237_l = new NoiseGeneratorOctaves(this.field_4241_h, 4); + this.field_4236_m = new NoiseGeneratorOctaves(this.field_4241_h, 4); + this.field_4248_a = new NoiseGeneratorOctaves(this.field_4241_h, 10); + this.field_4247_b = new NoiseGeneratorOctaves(this.field_4241_h, 16); + } + + public void func_4062_a(int var1, int var2, byte[] var3) { + byte var4 = 4; + byte var5 = 32; + int var6 = var4 + 1; + byte var7 = 17; + int var8 = var4 + 1; + this.field_4234_o = this.func_4060_a(this.field_4234_o, 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.field_4234_o[((var9 + 0) * var8 + var10 + 0) * var7 + var11 + 0]; + double var16 = this.field_4234_o[((var9 + 0) * var8 + var10 + 1) * var7 + var11 + 0]; + double var18 = this.field_4234_o[((var9 + 1) * var8 + var10 + 0) * var7 + var11 + 0]; + double var20 = this.field_4234_o[((var9 + 1) * var8 + var10 + 1) * var7 + var11 + 0]; + double var22 = (this.field_4234_o[((var9 + 0) * var8 + var10 + 0) * var7 + var11 + 1] - var14) * var12; + double var24 = (this.field_4234_o[((var9 + 0) * var8 + var10 + 1) * var7 + var11 + 1] - var16) * var12; + double var26 = (this.field_4234_o[((var9 + 1) * var8 + var10 + 0) * var7 + var11 + 1] - var18) * var12; + double var28 = (this.field_4234_o[((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.lavaMoving.blockID; + } + + if(var46 > 0.0D) { + var51 = Block.bloodStone.blockID; + } + + var3[var42] = (byte)var51; + var42 += var43; + var46 += var48; + } + + var33 += var37; + var35 += var39; + } + + var14 += var22; + var16 += var24; + var18 += var26; + var20 += var28; + } + } + } + } + + } + + public void func_4061_b(int var1, int var2, byte[] var3) { + byte var4 = 64; + double var5 = 1.0D / 32.0D; + this.field_4233_p = this.field_4237_l.func_648_a(this.field_4233_p, (double)(var1 * 16), (double)(var2 * 16), 0.0D, 16, 16, 1, var5, var5, 1.0D); + this.field_4232_q = this.field_4237_l.func_648_a(this.field_4232_q, (double)(var2 * 16), 109.0134D, (double)(var1 * 16), 16, 1, 16, var5, 1.0D, var5); + this.field_4231_r = this.field_4236_m.func_648_a(this.field_4231_r, (double)(var1 * 16), (double)(var2 * 16), 0.0D, 16, 16, 1, var5 * 2.0D, var5 * 2.0D, var5 * 2.0D); + + for(int var7 = 0; var7 < 16; ++var7) { + for(int var8 = 0; var8 < 16; ++var8) { + boolean var9 = this.field_4233_p[var7 + var8 * 16] + this.field_4241_h.nextDouble() * 0.2D > 0.0D; + boolean var10 = this.field_4232_q[var7 + var8 * 16] + this.field_4241_h.nextDouble() * 0.2D > 0.0D; + int var11 = (int)(this.field_4231_r[var7 + var8 * 16] / 3.0D + 3.0D + this.field_4241_h.nextDouble() * 0.25D); + int var12 = -1; + byte var13 = (byte)Block.bloodStone.blockID; + byte var14 = (byte)Block.bloodStone.blockID; + + for(int var15 = 127; var15 >= 0; --var15) { + int var16 = (var7 * 16 + var8) * 128 + var15; + if(var15 >= 127 - this.field_4241_h.nextInt(5)) { + var3[var16] = (byte)Block.bedrock.blockID; + } else if(var15 <= 0 + this.field_4241_h.nextInt(5)) { + var3[var16] = (byte)Block.bedrock.blockID; + } else { + byte var17 = var3[var16]; + if(var17 == 0) { + var12 = -1; + } else if(var17 == Block.bloodStone.blockID) { + if(var12 == -1) { + if(var11 <= 0) { + var13 = 0; + var14 = (byte)Block.bloodStone.blockID; + } else if(var15 >= var4 - 4 && var15 <= var4 + 1) { + var13 = (byte)Block.bloodStone.blockID; + var14 = (byte)Block.bloodStone.blockID; + if(var10) { + var13 = (byte)Block.gravel.blockID; + } + + if(var10) { + var14 = (byte)Block.bloodStone.blockID; + } + + if(var9) { + var13 = (byte)Block.slowSand.blockID; + } + + if(var9) { + var14 = (byte)Block.slowSand.blockID; + } + } + + if(var15 < var4 && var13 == 0) { + var13 = (byte)Block.lavaMoving.blockID; + } + + var12 = var11; + if(var15 >= var4 - 1) { + var3[var16] = var13; + } else { + var3[var16] = var14; + } + } else if(var12 > 0) { + --var12; + var3[var16] = var14; + } + } + } + } + } + } + + } + + public Chunk func_363_b(int var1, int var2) { + this.field_4241_h.setSeed((long)var1 * 341873128712L + (long)var2 * 132897987541L); + byte[] var3 = new byte[-Short.MIN_VALUE]; + this.func_4062_a(var1, var2, var3); + this.func_4061_b(var1, var2, var3); + this.field_4230_s.func_667_a(this, this.field_4235_n, var1, var2, var3); + Chunk var4 = new Chunk(this.field_4235_n, var3, var1, var2); + var4.func_353_b(); + var4.func_4053_c(); + return var4; + } + + private double[] func_4060_a(double[] var1, int var2, int var3, int var4, int var5, int var6, int var7) { + if(var1 == null) { + var1 = new double[var5 * var6 * var7]; + } + + double var8 = 684.412D; + double var10 = 2053.236D; + this.field_4243_f = this.field_4248_a.func_648_a(this.field_4243_f, (double)var2, (double)var3, (double)var4, var5, 1, var7, 1.0D, 0.0D, 1.0D); + this.field_4242_g = this.field_4247_b.func_648_a(this.field_4242_g, (double)var2, (double)var3, (double)var4, var5, 1, var7, 100.0D, 0.0D, 100.0D); + this.field_4246_c = this.field_4238_k.func_648_a(this.field_4246_c, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8 / 80.0D, var10 / 60.0D, var8 / 80.0D); + this.field_4245_d = this.field_4240_i.func_648_a(this.field_4245_d, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8, var10, var8); + this.field_4244_e = this.field_4239_j.func_648_a(this.field_4244_e, (double)var2, (double)var3, (double)var4, var5, var6, var7, var8, var10, var8); + int var12 = 0; + int var13 = 0; + double[] var14 = new double[var6]; + + int var15; + for(var15 = 0; var15 < var6; ++var15) { + var14[var15] = Math.cos((double)var15 * Math.PI * 6.0D / (double)var6) * 2.0D; + double var16 = (double)var15; + if(var15 > var6 / 2) { + var16 = (double)(var6 - 1 - var15); + } + + if(var16 < 4.0D) { + var16 = 4.0D - var16; + var14[var15] -= var16 * var16 * var16 * 10.0D; + } + } + + for(var15 = 0; var15 < var5; ++var15) { + for(int var36 = 0; var36 < var7; ++var36) { + double var17 = (this.field_4243_f[var13] + 256.0D) / 512.0D; + if(var17 > 1.0D) { + var17 = 1.0D; + } + + double var19 = 0.0D; + double var21 = this.field_4242_g[var13] / 8000.0D; + if(var21 < 0.0D) { + var21 = -var21; + } + + var21 = var21 * 3.0D - 3.0D; + if(var21 < 0.0D) { + var21 /= 2.0D; + if(var21 < -1.0D) { + var21 = -1.0D; + } + + var21 /= 1.4D; + var21 /= 2.0D; + var17 = 0.0D; + } else { + if(var21 > 1.0D) { + var21 = 1.0D; + } + + var21 /= 6.0D; + } + + var17 += 0.5D; + var21 = var21 * (double)var6 / 16.0D; + ++var13; + + for(int var23 = 0; var23 < var6; ++var23) { + double var24 = 0.0D; + double var26 = var14[var23]; + double var28 = this.field_4245_d[var12] / 512.0D; + double var30 = this.field_4244_e[var12] / 512.0D; + double var32 = (this.field_4246_c[var12] / 10.0D + 1.0D) / 2.0D; + if(var32 < 0.0D) { + var24 = var28; + } else if(var32 > 1.0D) { + var24 = var30; + } else { + var24 = var28 + (var30 - var28) * var32; + } + + var24 -= var26; + double var34; + if(var23 > var6 - 4) { + var34 = (double)((float)(var23 - (var6 - 4)) / 3.0F); + var24 = var24 * (1.0D - var34) + -10.0D * var34; + } + + if((double)var23 < var19) { + var34 = (var19 - (double)var23) / 4.0D; + if(var34 < 0.0D) { + var34 = 0.0D; + } + + if(var34 > 1.0D) { + var34 = 1.0D; + } + + var24 = var24 * (1.0D - var34) + -10.0D * var34; + } + + var1[var12] = var24; + ++var12; + } + } + } + + return var1; + } + + public boolean chunkExists(int var1, int var2) { + return true; + } + + public void populate(IChunkProvider var1, int var2, int var3) { + BlockSand.fallInstantly = true; + int var4 = var2 * 16; + int var5 = var3 * 16; + + int var6; + int var7; + int var8; + int var9; + for(var6 = 0; var6 < 8; ++var6) { + var7 = var4 + this.field_4241_h.nextInt(16) + 8; + var8 = this.field_4241_h.nextInt(120) + 4; + var9 = var5 + this.field_4241_h.nextInt(16) + 8; + (new WorldGenHellLava(Block.lavaStill.blockID)).generate(this.field_4235_n, this.field_4241_h, var7, var8, var9); + } + + var6 = this.field_4241_h.nextInt(this.field_4241_h.nextInt(10) + 1) + 1; + + int var10; + for(var7 = 0; var7 < var6; ++var7) { + var8 = var4 + this.field_4241_h.nextInt(16) + 8; + var9 = this.field_4241_h.nextInt(120) + 4; + var10 = var5 + this.field_4241_h.nextInt(16) + 8; + (new WorldGenFire()).generate(this.field_4235_n, this.field_4241_h, var8, var9, var10); + } + + var6 = this.field_4241_h.nextInt(this.field_4241_h.nextInt(10) + 1); + + for(var7 = 0; var7 < var6; ++var7) { + var8 = var4 + this.field_4241_h.nextInt(16) + 8; + var9 = this.field_4241_h.nextInt(120) + 4; + var10 = var5 + this.field_4241_h.nextInt(16) + 8; + (new WorldGenLightStone1()).generate(this.field_4235_n, this.field_4241_h, var8, var9, var10); + } + + for(var7 = 0; var7 < 10; ++var7) { + var8 = var4 + this.field_4241_h.nextInt(16) + 8; + var9 = this.field_4241_h.nextInt(128); + var10 = var5 + this.field_4241_h.nextInt(16) + 8; + (new WorldGenLightStone2()).generate(this.field_4235_n, this.field_4241_h, var8, var9, var10); + } + + if(this.field_4241_h.nextInt(1) == 0) { + var7 = var4 + this.field_4241_h.nextInt(16) + 8; + var8 = this.field_4241_h.nextInt(128); + var9 = var5 + this.field_4241_h.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomBrown.blockID)).generate(this.field_4235_n, this.field_4241_h, var7, var8, var9); + } + + if(this.field_4241_h.nextInt(1) == 0) { + var7 = var4 + this.field_4241_h.nextInt(16) + 8; + var8 = this.field_4241_h.nextInt(128); + var9 = var5 + this.field_4241_h.nextInt(16) + 8; + (new WorldGenFlowers(Block.mushroomRed.blockID)).generate(this.field_4235_n, this.field_4241_h, var7, var8, var9); + } + + BlockSand.fallInstantly = false; + } + + public boolean saveWorld(boolean var1, IProgressUpdate var2) { + return true; + } + + public boolean func_361_a() { + return false; + } + + public boolean func_364_b() { + return true; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ChunkProviderLoadOrGenerate.java b/minecraft_server/src/net/minecraft/src/ChunkProviderLoadOrGenerate.java new file mode 100644 index 0000000..bf79737 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ChunkProviderLoadOrGenerate.java @@ -0,0 +1,201 @@ +package net.minecraft.src; + +import java.io.IOException; + +public class ChunkProviderLoadOrGenerate implements IChunkProvider { + private Chunk field_723_c; + private IChunkProvider field_722_d; + private IChunkLoader field_721_e; + private Chunk[] chunks = new Chunk[1024]; + private World worldObj; + int field_717_a = -999999999; + int field_716_b = -999999999; + private Chunk field_718_h; + + public ChunkProviderLoadOrGenerate(World var1, IChunkLoader var2, IChunkProvider var3) { + this.field_723_c = new Chunk(var1, new byte[-Short.MIN_VALUE], 0, 0); + this.field_723_c.field_678_q = true; + this.field_723_c.field_679_p = true; + this.worldObj = var1; + this.field_721_e = var2; + this.field_722_d = var3; + } + + public boolean chunkExists(int var1, int var2) { + if(var1 == this.field_717_a && var2 == this.field_716_b && this.field_718_h != 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.field_723_c || this.chunks[var5].func_351_a(var1, var2)); + } + } + + public Chunk func_363_b(int var1, int var2) { + if(var1 == this.field_717_a && var2 == this.field_716_b && this.field_718_h != null) { + return this.field_718_h; + } else { + int var3 = var1 & 31; + int var4 = var2 & 31; + int var5 = var3 + var4 * 32; + if(!this.chunkExists(var1, var2)) { + if(this.chunks[var5] != null) { + this.chunks[var5].func_331_d(); + this.func_370_b(this.chunks[var5]); + this.func_371_a(this.chunks[var5]); + } + + Chunk var6 = this.func_4059_c(var1, var2); + if(var6 == null) { + if(this.field_722_d == null) { + var6 = this.field_723_c; + } else { + var6 = this.field_722_d.func_363_b(var1, var2); + } + } + + this.chunks[var5] = var6; + var6.func_4053_c(); + if(this.chunks[var5] != null) { + this.chunks[var5].func_358_c(); + } + + 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.func_363_b(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.func_363_b(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.func_363_b(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); + } + } + + this.field_717_a = var1; + this.field_716_b = var2; + this.field_718_h = this.chunks[var5]; + return this.chunks[var5]; + } + } + + private Chunk func_4059_c(int var1, int var2) { + if(this.field_721_e == null) { + return null; + } else { + try { + Chunk var3 = this.field_721_e.func_659_a(this.worldObj, var1, var2); + if(var3 != null) { + var3.field_676_s = this.worldObj.worldTime; + } + + return var3; + } catch (Exception var4) { + var4.printStackTrace(); + return null; + } + } + } + + private void func_371_a(Chunk var1) { + if(this.field_721_e != null) { + try { + this.field_721_e.func_4104_b(this.worldObj, var1); + } catch (Exception var3) { + var3.printStackTrace(); + } + + } + } + + private void func_370_b(Chunk var1) { + if(this.field_721_e != null) { + try { + var1.field_676_s = this.worldObj.worldTime; + this.field_721_e.func_662_a(this.worldObj, var1); + } catch (IOException var3) { + var3.printStackTrace(); + } + + } + } + + public void populate(IChunkProvider var1, int var2, int var3) { + Chunk var4 = this.func_363_b(var2, var3); + if(!var4.isTerrainPopulated) { + var4.isTerrainPopulated = true; + if(this.field_722_d != null) { + this.field_722_d.populate(var1, var2, var3); + var4.func_336_e(); + } + } + + } + + public boolean saveWorld(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].func_347_a(var1)) { + ++var4; + } + } + } + + var5 = 0; + + for(int var6 = 0; var6 < this.chunks.length; ++var6) { + if(this.chunks[var6] != null) { + if(var1 && !this.chunks[var6].field_679_p) { + this.func_371_a(this.chunks[var6]); + } + + if(this.chunks[var6].func_347_a(var1)) { + this.func_370_b(this.chunks[var6]); + this.chunks[var6].isModified = false; + ++var3; + if(var3 == 2 && !var1) { + return false; + } + + if(var2 != null) { + ++var5; + if(var5 % 10 == 0) { + var2.func_437_a(var5 * 100 / var4); + } + } + } + } + } + + if(var1) { + if(this.field_721_e == null) { + return true; + } + + this.field_721_e.func_660_b(); + } + + return true; + } + + public boolean func_361_a() { + if(this.field_721_e != null) { + this.field_721_e.func_661_a(); + } + + return this.field_722_d.func_361_a(); + } + + public boolean func_364_b() { + return true; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ChunkProviderServer.java b/minecraft_server/src/net/minecraft/src/ChunkProviderServer.java new file mode 100644 index 0000000..2258a30 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ChunkProviderServer.java @@ -0,0 +1,200 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +public class ChunkProviderServer implements IChunkProvider { + private Set field_725_a = new HashSet(); + private Chunk field_724_b; + private IChunkProvider field_730_c; + private IChunkLoader field_729_d; + private Map field_728_e = new HashMap(); + private List field_727_f = new ArrayList(); + private WorldServer field_726_g; + + public ChunkProviderServer(WorldServer var1, IChunkLoader var2, IChunkProvider var3) { + this.field_724_b = new Chunk(var1, new byte[-Short.MIN_VALUE], 0, 0); + this.field_724_b.field_678_q = true; + this.field_724_b.field_679_p = true; + this.field_726_g = var1; + this.field_729_d = var2; + this.field_730_c = var3; + } + + public boolean chunkExists(int var1, int var2) { + ChunkCoordinates var3 = new ChunkCoordinates(var1, var2); + return this.field_728_e.containsKey(var3); + } + + public void func_374_c(int var1, int var2) { + int var3 = var1 * 16 + 8 - this.field_726_g.spawnX; + int var4 = var2 * 16 + 8 - this.field_726_g.spawnZ; + short var5 = 128; + if(var3 < -var5 || var3 > var5 || var4 < -var5 || var4 > var5) { + this.field_725_a.add(new ChunkCoordinates(var1, var2)); + } + + } + + public Chunk loadChunk(int var1, int var2) { + ChunkCoordinates var3 = new ChunkCoordinates(var1, var2); + this.field_725_a.remove(new ChunkCoordinates(var1, var2)); + Chunk var4 = (Chunk)this.field_728_e.get(var3); + if(var4 == null) { + var4 = this.func_4063_e(var1, var2); + if(var4 == null) { + if(this.field_730_c == null) { + var4 = this.field_724_b; + } else { + var4 = this.field_730_c.func_363_b(var1, var2); + } + } + + this.field_728_e.put(var3, var4); + this.field_727_f.add(var4); + var4.func_4053_c(); + if(var4 != null) { + var4.func_358_c(); + } + + if(!var4.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.func_363_b(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.func_363_b(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.func_363_b(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); + } + } + + return var4; + } + + public Chunk func_363_b(int var1, int var2) { + ChunkCoordinates var3 = new ChunkCoordinates(var1, var2); + Chunk var4 = (Chunk)this.field_728_e.get(var3); + return var4 == null ? (this.field_726_g.field_9209_x ? this.loadChunk(var1, var2) : this.field_724_b) : var4; + } + + private Chunk func_4063_e(int var1, int var2) { + if(this.field_729_d == null) { + return null; + } else { + try { + Chunk var3 = this.field_729_d.func_659_a(this.field_726_g, var1, var2); + if(var3 != null) { + var3.field_676_s = this.field_726_g.worldTime; + } + + return var3; + } catch (Exception var4) { + var4.printStackTrace(); + return null; + } + } + } + + private void func_375_a(Chunk var1) { + if(this.field_729_d != null) { + try { + this.field_729_d.func_4104_b(this.field_726_g, var1); + } catch (Exception var3) { + var3.printStackTrace(); + } + + } + } + + private void func_373_b(Chunk var1) { + if(this.field_729_d != null) { + try { + var1.field_676_s = this.field_726_g.worldTime; + this.field_729_d.func_662_a(this.field_726_g, var1); + } catch (IOException var3) { + var3.printStackTrace(); + } + + } + } + + public void populate(IChunkProvider var1, int var2, int var3) { + Chunk var4 = this.func_363_b(var2, var3); + if(!var4.isTerrainPopulated) { + var4.isTerrainPopulated = true; + if(this.field_730_c != null) { + this.field_730_c.populate(var1, var2, var3); + var4.func_336_e(); + } + } + + } + + public boolean saveWorld(boolean var1, IProgressUpdate var2) { + int var3 = 0; + + for(int var4 = 0; var4 < this.field_727_f.size(); ++var4) { + Chunk var5 = (Chunk)this.field_727_f.get(var4); + if(var1 && !var5.field_679_p) { + this.func_375_a(var5); + } + + if(var5.func_347_a(var1)) { + this.func_373_b(var5); + var5.isModified = false; + ++var3; + if(var3 == 32 && !var1) { + return false; + } + } + } + + if(var1) { + if(this.field_729_d == null) { + return true; + } + + this.field_729_d.func_660_b(); + } + + return true; + } + + public boolean func_361_a() { + if(!this.field_726_g.field_816_A) { + for(int var1 = 0; var1 < 100; ++var1) { + if(!this.field_725_a.isEmpty()) { + ChunkCoordinates var2 = (ChunkCoordinates)this.field_725_a.iterator().next(); + Chunk var3 = this.func_363_b(var2.field_529_a, var2.field_528_b); + var3.func_331_d(); + this.func_373_b(var3); + this.func_375_a(var3); + this.field_725_a.remove(var2); + this.field_728_e.remove(var2); + this.field_727_f.remove(var3); + } + } + + if(this.field_729_d != null) { + this.field_729_d.func_661_a(); + } + } + + return this.field_730_c.func_361_a(); + } + + public boolean func_364_b() { + return !this.field_726_g.field_816_A; + } +} diff --git a/minecraft_server/src/net/minecraft/src/CompressedStreamTools.java b/minecraft_server/src/net/minecraft/src/CompressedStreamTools.java new file mode 100644 index 0000000..e6891e8 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/CompressedStreamTools.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInput; +import java.io.DataInputStream; +import java.io.DataOutput; +import java.io.DataOutputStream; +import java.io.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 func_770_a(InputStream var0) throws IOException { + DataInputStream var1 = new DataInputStream(new GZIPInputStream(var0)); + + NBTTagCompound var2; + try { + var2 = func_774_a(var1); + } finally { + var1.close(); + } + + return var2; + } + + public static void func_769_a(NBTTagCompound var0, OutputStream var1) throws IOException { + DataOutputStream var2 = new DataOutputStream(new GZIPOutputStream(var1)); + + try { + func_771_a(var0, var2); + } finally { + var2.close(); + } + + } + + public static NBTTagCompound func_773_a(byte[] var0) throws IOException { + DataInputStream var1 = new DataInputStream(new GZIPInputStream(new ByteArrayInputStream(var0))); + + NBTTagCompound var2; + try { + var2 = func_774_a(var1); + } finally { + var1.close(); + } + + return var2; + } + + public static byte[] func_772_a(NBTTagCompound var0) throws IOException { + ByteArrayOutputStream var1 = new ByteArrayOutputStream(); + DataOutputStream var2 = new DataOutputStream(new GZIPOutputStream(var1)); + + try { + func_771_a(var0, var2); + } finally { + var2.close(); + } + + return var1.toByteArray(); + } + + public static NBTTagCompound func_774_a(DataInput var0) throws IOException { + NBTBase var1 = NBTBase.readTag(var0); + if(var1 instanceof NBTTagCompound) { + return (NBTTagCompound)var1; + } else { + throw new IOException("Root tag must be a named compound tag"); + } + } + + public static void func_771_a(NBTTagCompound var0, DataOutput var1) throws IOException { + NBTBase.writeTag(var0, var1); + } +} diff --git a/minecraft_server/src/net/minecraft/src/ConsoleLogFormatter.java b/minecraft_server/src/net/minecraft/src/ConsoleLogFormatter.java new file mode 100644 index 0000000..05eb92a --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ConsoleLogFormatter.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.text.SimpleDateFormat; +import java.util.logging.Formatter; +import java.util.logging.Level; +import java.util.logging.LogRecord; + +final class ConsoleLogFormatter extends Formatter { + private SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + + public String format(LogRecord var1) { + StringBuilder var2 = new StringBuilder(); + var2.append(this.dateFormat.format(Long.valueOf(var1.getMillis()))); + Level var3 = var1.getLevel(); + if(var3 == Level.FINEST) { + var2.append(" [FINEST] "); + } else if(var3 == Level.FINER) { + var2.append(" [FINER] "); + } else if(var3 == Level.FINE) { + var2.append(" [FINE] "); + } else if(var3 == Level.INFO) { + var2.append(" [INFO] "); + } else if(var3 == Level.WARNING) { + var2.append(" [WARNING] "); + } else if(var3 == Level.SEVERE) { + var2.append(" [SEVERE] "); + } else if(var3 == Level.SEVERE) { + var2.append(" [" + var3.getLocalizedName() + "] "); + } + + var2.append(var1.getMessage()); + var2.append('\n'); + Throwable var4 = var1.getThrown(); + if(var4 != null) { + StringWriter var5 = new StringWriter(); + var4.printStackTrace(new PrintWriter(var5)); + var2.append(var5.toString()); + } + + return var2.toString(); + } +} diff --git a/minecraft_server/src/net/minecraft/src/ConsoleLogManager.java b/minecraft_server/src/net/minecraft/src/ConsoleLogManager.java new file mode 100644 index 0000000..0cdef01 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ConsoleLogManager.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +import java.util.logging.ConsoleHandler; +import java.util.logging.FileHandler; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class ConsoleLogManager { + public static Logger logger = Logger.getLogger("Minecraft"); + + public static void init() { + ConsoleLogFormatter var0 = new ConsoleLogFormatter(); + logger.setUseParentHandlers(false); + ConsoleHandler var1 = new ConsoleHandler(); + var1.setFormatter(var0); + logger.addHandler(var1); + + try { + FileHandler var2 = new FileHandler("server.log", true); + var2.setFormatter(var0); + logger.addHandler(var2); + } catch (Exception var3) { + logger.log(Level.WARNING, "Failed to log to server.log", var3); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/Entity.java b/minecraft_server/src/net/minecraft/src/Entity.java new file mode 100644 index 0000000..57de6bb --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Entity.java @@ -0,0 +1,816 @@ +package net.minecraft.src; + +import java.util.List; +import java.util.Random; + +public abstract class Entity { + private static int field_384_a = 0; + public int field_331_c = field_384_a++; + public double field_9094_h = 1.0D; + public boolean field_329_e = false; + public Entity field_328_f; + public Entity field_327_g; + public World worldObj; + public double prevPosX; + public double prevPosY; + public double prevPosZ; + public double posX; + public double posY; + public double posZ; + public double motionX; + public double motionY; + public double motionZ; + public float rotationYaw; + public float rotationPitch; + public float prevRotationYaw; + public float prevRotationPitch; + public final AxisAlignedBB boundingBox = AxisAlignedBB.getBoundingBox(0.0D, 0.0D, 0.0D, 0.0D, 0.0D, 0.0D); + public boolean onGround = false; + public boolean field_9084_B; + public boolean field_9082_C; + public boolean field_9080_D = false; + public boolean field_9078_E = false; + public boolean field_9077_F = true; + public boolean field_304_B = false; + public float yOffset = 0.0F; + public float width = 0.6F; + public float height = 1.8F; + public float field_9075_K = 0.0F; + public float field_9074_L = 0.0F; + protected boolean entityWalks = true; + protected float fallDistance = 0.0F; + private int field_6151_b = 1; + public double field_9071_O; + public double field_9070_P; + public double field_9069_Q; + public float field_9068_R = 0.0F; + public float field_9067_S = 0.0F; + public boolean field_9066_T = false; + public float field_286_P = 0.0F; + public boolean field_9065_V = false; + protected Random field_9064_W = new Random(); + public int field_9063_X = 0; + public int field_9062_Y = 1; + public int field_9061_Z = 0; + protected int field_9087_aa = 300; + protected boolean field_9085_ab = false; + public int field_9083_ac = 0; + public int air = 300; + private boolean field_4131_c = true; + protected boolean field_9079_ae = false; + private double field_4130_d; + private double field_4128_e; + public boolean field_276_Z = false; + public int field_307_aa; + public int field_305_ab; + public int field_303_ac; + + public Entity(World var1) { + this.worldObj = var1; + this.setPosition(0.0D, 0.0D, 0.0D); + } + + public boolean equals(Object var1) { + return var1 instanceof Entity ? ((Entity)var1).field_331_c == this.field_331_c : false; + } + + public int hashCode() { + return this.field_331_c; + } + + public void setEntityDead() { + this.field_304_B = 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; + this.boundingBox.setBounds(var1 - (double)var7, var3 - (double)this.yOffset + (double)this.field_9068_R, var5 - (double)var7, var1 + (double)var7, var3 - (double)this.yOffset + (double)this.field_9068_R + (double)var8, var5 + (double)var7); + } + + public void onUpdate() { + this.func_84_k(); + } + + public void func_84_k() { + if(this.field_327_g != null && this.field_327_g.field_304_B) { + this.field_327_g = null; + } + + ++this.field_9063_X; + this.field_9075_K = this.field_9074_L; + 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.field_9085_ab && !this.field_4131_c) { + 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.field_9064_W.nextFloat() - this.field_9064_W.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.field_9064_W.nextFloat() * 2.0F - 1.0F) * this.width; + var5 = (this.field_9064_W.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.field_9064_W.nextFloat() * 0.2F), this.motionZ); + } + + for(var3 = 0; (float)var3 < 1.0F + this.width * 20.0F; ++var3) { + var4 = (this.field_9064_W.nextFloat() * 2.0F - 1.0F) * this.width; + var5 = (this.field_9064_W.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.field_9085_ab = true; + this.field_9061_Z = 0; + } else { + this.field_9085_ab = false; + } + + if(this.worldObj.multiplayerWorld) { + this.field_9061_Z = 0; + } else if(this.field_9061_Z > 0) { + if(this.field_9079_ae) { + this.field_9061_Z -= 4; + if(this.field_9061_Z < 0) { + this.field_9061_Z = 0; + } + } else { + if(this.field_9061_Z % 20 == 0) { + this.attackEntity((Entity)null, 1); + } + + --this.field_9061_Z; + } + } + + if(this.func_112_q()) { + this.func_4040_n(); + } + + if(this.posY < -64.0D) { + this.func_4043_o(); + } + + this.field_4131_c = false; + } + + protected void func_4040_n() { + if(!this.field_9079_ae) { + this.attackEntity((Entity)null, 4); + this.field_9061_Z = 600; + } + + } + + protected void func_4043_o() { + this.setEntityDead(); + } + + public boolean func_133_b(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.field_9066_T) { + 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.field_9068_R; + 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(); + boolean var18 = this.onGround && this.func_9059_p(); + if(var18) { + double var19; + for(var19 = 0.05D; var1 != 0.0D && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.getOffsetBoundingBox(var1, -1.0D, 0.0D)).size() == 0; var11 = var1) { + if(var1 < var19 && var1 >= -var19) { + var1 = 0.0D; + } else if(var1 > 0.0D) { + var1 -= var19; + } else { + var1 += var19; + } + } + + for(; var5 != 0.0D && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.getOffsetBoundingBox(0.0D, -1.0D, var5)).size() == 0; var15 = var5) { + if(var5 < var19 && var5 >= -var19) { + var5 = 0.0D; + } else if(var5 > 0.0D) { + var5 -= var19; + } else { + var5 += var19; + } + } + } + + List var35 = this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.addCoord(var1, var3, var5)); + + for(int var20 = 0; var20 < var35.size(); ++var20) { + var3 = ((AxisAlignedBB)var35.get(var20)).func_701_b(this.boundingBox, var3); + } + + this.boundingBox.offset(0.0D, var3, 0.0D); + if(!this.field_9077_F && var13 != var3) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + boolean var36 = this.onGround || var13 != var3 && var13 < 0.0D; + + int var21; + for(var21 = 0; var21 < var35.size(); ++var21) { + var1 = ((AxisAlignedBB)var35.get(var21)).func_710_a(this.boundingBox, var1); + } + + this.boundingBox.offset(var1, 0.0D, 0.0D); + if(!this.field_9077_F && var11 != var1) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + for(var21 = 0; var21 < var35.size(); ++var21) { + var5 = ((AxisAlignedBB)var35.get(var21)).func_709_c(this.boundingBox, var5); + } + + this.boundingBox.offset(0.0D, 0.0D, var5); + if(!this.field_9077_F && var15 != var5) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + double var23; + int var28; + double var37; + if(this.field_9067_S > 0.0F && var36 && this.field_9068_R < 0.05F && (var11 != var1 || var15 != var5)) { + var37 = var1; + var23 = var3; + double var25 = var5; + var1 = var11; + var3 = (double)this.field_9067_S; + var5 = var15; + AxisAlignedBB var27 = this.boundingBox.copy(); + this.boundingBox.setBB(var17); + var35 = this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox.addCoord(var11, var3, var15)); + + for(var28 = 0; var28 < var35.size(); ++var28) { + var3 = ((AxisAlignedBB)var35.get(var28)).func_701_b(this.boundingBox, var3); + } + + this.boundingBox.offset(0.0D, var3, 0.0D); + if(!this.field_9077_F && var13 != var3) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + for(var28 = 0; var28 < var35.size(); ++var28) { + var1 = ((AxisAlignedBB)var35.get(var28)).func_710_a(this.boundingBox, var1); + } + + this.boundingBox.offset(var1, 0.0D, 0.0D); + if(!this.field_9077_F && var11 != var1) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + for(var28 = 0; var28 < var35.size(); ++var28) { + var5 = ((AxisAlignedBB)var35.get(var28)).func_709_c(this.boundingBox, var5); + } + + this.boundingBox.offset(0.0D, 0.0D, var5); + if(!this.field_9077_F && var15 != var5) { + var5 = 0.0D; + var3 = var5; + var1 = var5; + } + + if(var37 * var37 + var25 * var25 >= var1 * var1 + var5 * var5) { + var1 = var37; + var3 = var23; + var5 = var25; + this.boundingBox.setBB(var27); + } else { + this.field_9068_R = (float)((double)this.field_9068_R + 0.5D); + } + } + + this.posX = (this.boundingBox.minX + this.boundingBox.maxX) / 2.0D; + this.posY = this.boundingBox.minY + (double)this.yOffset - (double)this.field_9068_R; + this.posZ = (this.boundingBox.minZ + this.boundingBox.maxZ) / 2.0D; + this.field_9084_B = var11 != var1 || var15 != var5; + this.field_9082_C = var13 != var3; + this.onGround = var13 != var3 && var13 < 0.0D; + this.field_9080_D = this.field_9084_B || this.field_9082_C; + this.interact(var3, this.onGround); + if(var11 != var1) { + this.motionX = 0.0D; + } + + if(var13 != var3) { + this.motionY = 0.0D; + } + + if(var15 != var5) { + this.motionZ = 0.0D; + } + + var37 = this.posX - var7; + var23 = this.posZ - var9; + int var26; + int var38; + int var40; + if(this.entityWalks && !var18) { + this.field_9074_L = (float)((double)this.field_9074_L + (double)MathHelper.sqrt_double(var37 * var37 + var23 * var23) * 0.6D); + var38 = MathHelper.floor_double(this.posX); + var26 = MathHelper.floor_double(this.posY - (double)0.2F - (double)this.yOffset); + var40 = MathHelper.floor_double(this.posZ); + var28 = this.worldObj.getBlockId(var38, var26, var40); + if(this.field_9074_L > (float)this.field_6151_b && var28 > 0) { + ++this.field_6151_b; + StepSound var29 = Block.blocksList[var28].stepSound; + if(this.worldObj.getBlockId(var38, var26 + 1, var40) == Block.snow.blockID) { + var29 = Block.snow.stepSound; + this.worldObj.playSoundAtEntity(this, var29.func_737_c(), var29.func_738_a() * 0.15F, var29.func_739_b()); + } else if(!Block.blocksList[var28].blockMaterial.getIsLiquid()) { + this.worldObj.playSoundAtEntity(this, var29.func_737_c(), var29.func_738_a() * 0.15F, var29.func_739_b()); + } + + Block.blocksList[var28].onEntityWalking(this.worldObj, var38, var26, var40, this); + } + } + + var38 = MathHelper.floor_double(this.boundingBox.minX); + var26 = MathHelper.floor_double(this.boundingBox.minY); + var40 = MathHelper.floor_double(this.boundingBox.minZ); + var28 = MathHelper.floor_double(this.boundingBox.maxX); + int var41 = MathHelper.floor_double(this.boundingBox.maxY); + int var30 = MathHelper.floor_double(this.boundingBox.maxZ); + + for(int var31 = var38; var31 <= var28; ++var31) { + for(int var32 = var26; var32 <= var41; ++var32) { + for(int var33 = var40; var33 <= var30; ++var33) { + int var34 = this.worldObj.getBlockId(var31, var32, var33); + if(var34 > 0) { + Block.blocksList[var34].onEntityCollidedWithBlock(this.worldObj, var31, var32, var33, this); + } + } + } + } + + this.field_9068_R *= 0.4F; + boolean var39 = this.handleWaterMovement(); + if(this.worldObj.func_523_c(this.boundingBox)) { + this.func_125_b(1); + if(!var39) { + ++this.field_9061_Z; + if(this.field_9061_Z == 0) { + this.field_9061_Z = 300; + } + } + } else if(this.field_9061_Z <= 0) { + this.field_9061_Z = -this.field_9062_Y; + } + + if(var39 && this.field_9061_Z > 0) { + this.worldObj.playSoundAtEntity(this, "random.fizz", 0.7F, 1.6F + (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.4F); + this.field_9061_Z = -this.field_9062_Y; + } + + } + } + + protected void interact(double var1, boolean var3) { + if(var3) { + if(this.fallDistance > 0.0F) { + this.fall(this.fallDistance); + this.fallDistance = 0.0F; + } + } else if(var1 < 0.0D) { + this.fallDistance = (float)((double)this.fallDistance - var1); + } + + } + + public boolean func_9059_p() { + return false; + } + + public AxisAlignedBB func_93_n() { + return null; + } + + protected void func_125_b(int var1) { + if(!this.field_9079_ae) { + this.attackEntity((Entity)null, var1); + } + + } + + protected void fall(float var1) { + } + + public boolean handleWaterMovement() { + return this.worldObj.func_490_a(this.boundingBox.expands(0.0D, (double)-0.4F, 0.0D), Material.water, this); + } + + public boolean isInsideOfMaterial(Material var1) { + double var2 = this.posY + (double)this.func_104_p(); + 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 = BlockFluids.setFluidHeight(this.worldObj.getBlockMetadata(var4, var5, var6)) - 1.0F / 9.0F; + float var9 = (float)(var5 + 1) - var8; + return var2 < (double)var9; + } else { + return false; + } + } + + public float func_104_p() { + return 0.0F; + } + + public boolean func_112_q() { + return this.worldObj.isMaterialInBB(this.boundingBox.expands(0.0D, (double)-0.4F, 0.0D), Material.lava); + } + + public void func_90_a(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.getLightBrightness(var2, var5, var6); + } + + public void setPositionAndRotation(double var1, double var3, double var5, float var7, float var8) { + this.prevPosX = this.posX = var1; + this.prevPosY = this.posY = var3; + this.prevPosZ = this.posZ = var5; + this.prevRotationYaw = this.rotationYaw = var7; + this.prevRotationPitch = this.rotationPitch = var8; + this.field_9068_R = 0.0F; + double var9 = (double)(this.prevRotationYaw - var7); + if(var9 < -180.0D) { + this.prevRotationYaw += 360.0F; + } + + if(var9 >= 180.0D) { + this.prevRotationYaw -= 360.0F; + } + + this.setPosition(this.posX, this.posY, this.posZ); + this.setRotation(var7, var8); + } + + public void func_107_c(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) { + if(var1.field_328_f != this && var1.field_327_g != this) { + double var2 = var1.posX - this.posX; + double var4 = var1.posZ - this.posZ; + double var6 = MathHelper.abs_max(var2, var4); + if(var6 >= (double)0.01F) { + var6 = (double)MathHelper.sqrt_double(var6); + var2 /= var6; + var4 /= var6; + double var8 = 1.0D / var6; + if(var8 > 1.0D) { + var8 = 1.0D; + } + + var2 *= var8; + var4 *= var8; + var2 *= (double)0.05F; + var4 *= (double)0.05F; + var2 *= (double)(1.0F - this.field_286_P); + var4 *= (double)(1.0F - this.field_286_P); + 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; + } + + protected void func_9060_u() { + this.field_9078_E = true; + } + + public boolean attackEntity(Entity var1, int var2) { + this.func_9060_u(); + return false; + } + + public boolean func_129_c_() { + return false; + } + + public boolean func_124_r() { + return false; + } + + public void func_96_b(Entity var1, int var2) { + } + + public boolean func_95_c(NBTTagCompound var1) { + String var2 = this.func_109_s(); + if(!this.field_304_B && var2 != null) { + var1.setString("id", var2); + this.writeToNBT(var1); + return true; + } else { + return false; + } + } + + public void writeToNBT(NBTTagCompound var1) { + var1.setTag("Pos", this.func_132_a(new double[]{this.posX, this.posY, this.posZ})); + var1.setTag("Motion", this.func_132_a(new double[]{this.motionX, this.motionY, this.motionZ})); + var1.setTag("Rotation", this.func_85_a(new float[]{this.rotationYaw, this.rotationPitch})); + var1.setFloat("FallDistance", this.fallDistance); + var1.setShort("Fire", (short)this.field_9061_Z); + 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.field_9071_O = this.posX = ((NBTTagDouble)var2.tagAt(0)).doubleValue; + this.prevPosY = this.field_9070_P = this.posY = ((NBTTagDouble)var2.tagAt(1)).doubleValue; + this.prevPosZ = this.field_9069_Q = 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.field_9061_Z = 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 func_109_s() { + return EntityList.func_564_b(this); + } + + protected abstract void readEntityFromNBT(NBTTagCompound var1); + + protected abstract void writeEntityToNBT(NBTTagCompound var1); + + protected NBTTagList func_132_a(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 func_85_a(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.dropItemWithOffset(var1, var2, 0.0F); + } + + public EntityItem dropItemWithOffset(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.field_433_ad = 10; + this.worldObj.entityJoinedWorld(var4); + return var4; + } + + public boolean func_120_t() { + return !this.field_304_B; + } + + public boolean func_91_u() { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.posY + (double)this.func_104_p()); + int var3 = MathHelper.floor_double(this.posZ); + return this.worldObj.doesBlockAllowAttachment(var1, var2, var3); + } + + public boolean func_6092_a(EntityPlayer var1) { + return false; + } + + public AxisAlignedBB func_89_d(Entity var1) { + return null; + } + + public void func_115_v() { + if(this.field_327_g.field_304_B) { + this.field_327_g = null; + } else { + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.onUpdate(); + this.field_327_g.func_127_w(); + this.field_4128_e += (double)(this.field_327_g.rotationYaw - this.field_327_g.prevRotationYaw); + + for(this.field_4130_d += (double)(this.field_327_g.rotationPitch - this.field_327_g.prevRotationPitch); this.field_4128_e >= 180.0D; this.field_4128_e -= 360.0D) { + } + + while(this.field_4128_e < -180.0D) { + this.field_4128_e += 360.0D; + } + + while(this.field_4130_d >= 180.0D) { + this.field_4130_d -= 360.0D; + } + + while(this.field_4130_d < -180.0D) { + this.field_4130_d += 360.0D; + } + + double var1 = this.field_4128_e * 0.5D; + double var3 = this.field_4130_d * 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.field_4128_e -= var1; + this.field_4130_d -= var3; + this.rotationYaw = (float)((double)this.rotationYaw + var1); + this.rotationPitch = (float)((double)this.rotationPitch + var3); + } + } + + public void func_127_w() { + this.field_328_f.setPosition(this.posX, this.posY + this.func_130_h() + this.field_328_f.func_117_x(), this.posZ); + } + + public double func_117_x() { + return (double)this.yOffset; + } + + public double func_130_h() { + return (double)this.height * 0.75D; + } + + public void func_6094_e(Entity var1) { + this.field_4130_d = 0.0D; + this.field_4128_e = 0.0D; + if(var1 == null) { + if(this.field_327_g != null) { + this.func_107_c(this.field_327_g.posX, this.field_327_g.boundingBox.minY + (double)this.field_327_g.height, this.field_327_g.posZ, this.rotationYaw, this.rotationPitch); + this.field_327_g.field_328_f = null; + } + + this.field_327_g = null; + } else if(this.field_327_g == var1) { + this.field_327_g.field_328_f = null; + this.field_327_g = null; + this.func_107_c(var1.posX, var1.boundingBox.minY + (double)var1.height, var1.posZ, this.rotationYaw, this.rotationPitch); + } else { + if(this.field_327_g != null) { + this.field_327_g.field_328_f = null; + } + + if(var1.field_328_f != null) { + var1.field_328_f.field_327_g = null; + } + + this.field_327_g = var1; + var1.field_328_f = this; + } + } + + public Vec3D func_4039_B() { + return null; + } + + public void func_4042_C() { + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityAnimals.java b/minecraft_server/src/net/minecraft/src/EntityAnimals.java new file mode 100644 index 0000000..a052f76 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityAnimals.java @@ -0,0 +1,30 @@ +package net.minecraft.src; + +public abstract class EntityAnimals extends EntityCreature implements IAnimals { + public EntityAnimals(World var1) { + super(var1); + } + + protected float func_159_a(int var1, int var2, int var3) { + return this.worldObj.getBlockId(var1, var2 - 1, var3) == Block.grass.blockID ? 10.0F : this.worldObj.getLightBrightness(var1, var2, var3) - 0.5F; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + public boolean getCanSpawnHere() { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.boundingBox.minY); + int var3 = MathHelper.floor_double(this.posZ); + return this.worldObj.getBlockId(var1, var2 - 1, var3) == Block.grass.blockID && this.worldObj.getBlockLightValue(var1, var2, var3) > 8 && super.getCanSpawnHere(); + } + + public int func_146_b() { + return 120; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityArrow.java b/minecraft_server/src/net/minecraft/src/EntityArrow.java new file mode 100644 index 0000000..bccc8ad --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityArrow.java @@ -0,0 +1,225 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityArrow extends Entity { + private int field_9183_c = -1; + private int field_9182_d = -1; + private int field_9180_e = -1; + private int field_9179_f = 0; + private boolean field_9181_aj = false; + public int field_9184_a = 0; + public EntityLiving field_439_ah; + private int field_438_ai; + private int field_437_aj = 0; + + public EntityArrow(World var1) { + super(var1); + this.setSize(0.5F, 0.5F); + } + + public EntityArrow(World var1, EntityLiving var2) { + super(var1); + this.field_439_ah = var2; + this.setSize(0.5F, 0.5F); + this.func_107_c(var2.posX, var2.posY + (double)var2.func_104_p(), 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.func_177_a(this.motionX, this.motionY, this.motionZ, 1.5F, 1.0F); + } + + public void func_177_a(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.field_9064_W.nextGaussian() * (double)0.0075F * (double)var8; + var3 += this.field_9064_W.nextGaussian() * (double)0.0075F * (double)var8; + var5 += this.field_9064_W.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.field_438_ai = 0; + } + + public void onUpdate() { + super.onUpdate(); + if(this.prevRotationPitch == 0.0F && this.prevRotationYaw == 0.0F) { + float var1 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.prevRotationYaw = this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI)); + this.prevRotationPitch = this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var1) * 180.0D / (double)((float)Math.PI)); + } + + if(this.field_9184_a > 0) { + --this.field_9184_a; + } + + if(this.field_9181_aj) { + int var15 = this.worldObj.getBlockId(this.field_9183_c, this.field_9182_d, this.field_9180_e); + if(var15 == this.field_9179_f) { + ++this.field_438_ai; + if(this.field_438_ai == 1200) { + this.setEntityDead(); + } + + return; + } + + this.field_9181_aj = false; + this.motionX *= (double)(this.field_9064_W.nextFloat() * 0.2F); + this.motionY *= (double)(this.field_9064_W.nextFloat() * 0.2F); + this.motionZ *= (double)(this.field_9064_W.nextFloat() * 0.2F); + this.field_438_ai = 0; + this.field_437_aj = 0; + } else { + ++this.field_437_aj; + } + + Vec3D var16 = 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.func_486_a(var16, var2); + var16 = 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).expands(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.func_129_c_() && (var9 != this.field_439_ah || this.field_437_aj >= 5)) { + var10 = 0.3F; + AxisAlignedBB var11 = var9.boundingBox.expands((double)var10, (double)var10, (double)var10); + MovingObjectPosition var12 = var11.func_706_a(var16, var2); + if(var12 != null) { + double var13 = var16.distanceTo(var12.hitVec); + if(var13 < var6 || var6 == 0.0D) { + var4 = var9; + var6 = var13; + } + } + } + } + + if(var4 != null) { + var3 = new MovingObjectPosition(var4); + } + + float var17; + if(var3 != null) { + if(var3.entityHit != null) { + if(var3.entityHit.attackEntity(this.field_439_ah, 4)) { + this.worldObj.playSoundAtEntity(this, "random.drr", 1.0F, 1.2F / (this.field_9064_W.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.field_437_aj = 0; + } + } else { + this.field_9183_c = var3.blockX; + this.field_9182_d = var3.blockY; + this.field_9180_e = var3.blockZ; + this.field_9179_f = this.worldObj.getBlockId(this.field_9183_c, this.field_9182_d, this.field_9180_e); + 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)); + var17 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionY * this.motionY + this.motionZ * this.motionZ); + this.posX -= this.motionX / (double)var17 * (double)0.05F; + this.posY -= this.motionY / (double)var17 * (double)0.05F; + this.posZ -= this.motionZ / (double)var17 * (double)0.05F; + this.worldObj.playSoundAtEntity(this, "random.drr", 1.0F, 1.2F / (this.field_9064_W.nextFloat() * 0.2F + 0.9F)); + this.field_9181_aj = true; + this.field_9184_a = 7; + } + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + var17 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI)); + + for(this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var17) * 180.0D / (double)((float)Math.PI)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) { + } + + while(this.rotationPitch - this.prevRotationPitch >= 180.0F) { + this.prevRotationPitch += 360.0F; + } + + while(this.rotationYaw - this.prevRotationYaw < -180.0F) { + this.prevRotationYaw -= 360.0F; + } + + while(this.rotationYaw - this.prevRotationYaw >= 180.0F) { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + float var18 = 0.99F; + var10 = 0.03F; + if(this.handleWaterMovement()) { + for(int var19 = 0; var19 < 4; ++var19) { + float var20 = 0.25F; + this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)var20, this.posY - this.motionY * (double)var20, this.posZ - this.motionZ * (double)var20, this.motionX, this.motionY, this.motionZ); + } + + var18 = 0.8F; + } + + this.motionX *= (double)var18; + this.motionY *= (double)var18; + this.motionZ *= (double)var18; + this.motionY -= (double)var10; + this.setPosition(this.posX, this.posY, this.posZ); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("xTile", (short)this.field_9183_c); + var1.setShort("yTile", (short)this.field_9182_d); + var1.setShort("zTile", (short)this.field_9180_e); + var1.setByte("inTile", (byte)this.field_9179_f); + var1.setByte("shake", (byte)this.field_9184_a); + var1.setByte("inGround", (byte)(this.field_9181_aj ? 1 : 0)); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.field_9183_c = var1.getShort("xTile"); + this.field_9182_d = var1.getShort("yTile"); + this.field_9180_e = var1.getShort("zTile"); + this.field_9179_f = var1.getByte("inTile") & 255; + this.field_9184_a = var1.getByte("shake") & 255; + this.field_9181_aj = var1.getByte("inGround") == 1; + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(!this.worldObj.multiplayerWorld) { + if(this.field_9181_aj && this.field_439_ah == var1 && this.field_9184_a <= 0 && var1.inventory.addItemStackToInventory(new ItemStack(Item.arrow.swiftedIndex, 1))) { + this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.7F + 1.0F) * 2.0F); + var1.func_163_c(this, 1); + this.setEntityDead(); + } + + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityBoat.java b/minecraft_server/src/net/minecraft/src/EntityBoat.java new file mode 100644 index 0000000..b320b35 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityBoat.java @@ -0,0 +1,288 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityBoat extends Entity { + public int field_9178_a; + public int field_9177_b; + public int field_436_ad; + private int field_9176_d; + private double field_9174_e; + private double field_9172_f; + private double field_9175_aj; + private double field_9173_ak; + private double field_9171_al; + + public EntityBoat(World var1) { + super(var1); + this.field_9178_a = 0; + this.field_9177_b = 0; + this.field_436_ad = 1; + this.field_329_e = true; + this.setSize(1.5F, 0.6F); + this.yOffset = this.height / 2.0F; + this.entityWalks = false; + } + + public AxisAlignedBB func_89_d(Entity var1) { + return var1.boundingBox; + } + + public AxisAlignedBB func_93_n() { + return this.boundingBox; + } + + public boolean func_124_r() { + return true; + } + + public EntityBoat(World var1, double var2, double var4, double var6) { + this(var1); + this.setPosition(var2, var4 + (double)this.yOffset, var6); + this.motionX = 0.0D; + this.motionY = 0.0D; + this.motionZ = 0.0D; + this.prevPosX = var2; + this.prevPosY = var4; + this.prevPosZ = var6; + } + + public double func_130_h() { + return (double)this.height * 0.0D - (double)0.3F; + } + + public boolean attackEntity(Entity var1, int var2) { + if(!this.worldObj.multiplayerWorld && !this.field_304_B) { + this.field_436_ad = -this.field_436_ad; + this.field_9177_b = 10; + this.field_9178_a += var2 * 10; + this.func_9060_u(); + if(this.field_9178_a > 40) { + int var3; + for(var3 = 0; var3 < 3; ++var3) { + this.dropItemWithOffset(Block.planks.blockID, 1, 0.0F); + } + + for(var3 = 0; var3 < 2; ++var3) { + this.dropItemWithOffset(Item.stick.swiftedIndex, 1, 0.0F); + } + + this.setEntityDead(); + } + + return true; + } else { + return true; + } + } + + public boolean func_129_c_() { + return !this.field_304_B; + } + + public void onUpdate() { + super.onUpdate(); + if(this.field_9177_b > 0) { + --this.field_9177_b; + } + + if(this.field_9178_a > 0) { + --this.field_9178_a; + } + + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + byte var1 = 5; + double var2 = 0.0D; + + for(int var4 = 0; var4 < var1; ++var4) { + double var5 = this.boundingBox.minY + (this.boundingBox.maxY - this.boundingBox.minY) * (double)(var4 + 0) / (double)var1 - 0.125D; + double var7 = this.boundingBox.minY + (this.boundingBox.maxY - this.boundingBox.minY) * (double)(var4 + 1) / (double)var1 - 0.125D; + AxisAlignedBB var9 = AxisAlignedBB.getBoundingBoxFromPool(this.boundingBox.minX, var5, this.boundingBox.minZ, this.boundingBox.maxX, var7, this.boundingBox.maxZ); + if(this.worldObj.func_524_b(var9, Material.water)) { + var2 += 1.0D / (double)var1; + } + } + + double var6; + double var8; + double var10; + double var23; + if(this.worldObj.multiplayerWorld) { + if(this.field_9176_d > 0) { + var23 = this.posX + (this.field_9174_e - this.posX) / (double)this.field_9176_d; + var6 = this.posY + (this.field_9172_f - this.posY) / (double)this.field_9176_d; + var8 = this.posZ + (this.field_9175_aj - this.posZ) / (double)this.field_9176_d; + + for(var10 = this.field_9173_ak - (double)this.rotationYaw; var10 < -180.0D; var10 += 360.0D) { + } + + while(var10 >= 180.0D) { + var10 -= 360.0D; + } + + this.rotationYaw = (float)((double)this.rotationYaw + var10 / (double)this.field_9176_d); + this.rotationPitch = (float)((double)this.rotationPitch + (this.field_9171_al - (double)this.rotationPitch) / (double)this.field_9176_d); + --this.field_9176_d; + this.setPosition(var23, var6, var8); + this.setRotation(this.rotationYaw, this.rotationPitch); + } else { + var23 = this.posX + this.motionX; + var6 = this.posY + this.motionY; + var8 = this.posZ + this.motionZ; + this.setPosition(var23, var6, var8); + if(this.onGround) { + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + } + + this.motionX *= (double)0.99F; + this.motionY *= (double)0.95F; + this.motionZ *= (double)0.99F; + } + + } else { + var23 = var2 * 2.0D - 1.0D; + this.motionY += (double)0.04F * var23; + if(this.field_328_f != null) { + this.motionX += this.field_328_f.motionX * 0.2D; + this.motionZ += this.field_328_f.motionZ * 0.2D; + } + + var6 = 0.4D; + if(this.motionX < -var6) { + this.motionX = -var6; + } + + if(this.motionX > var6) { + this.motionX = var6; + } + + if(this.motionZ < -var6) { + this.motionZ = -var6; + } + + if(this.motionZ > var6) { + this.motionZ = var6; + } + + if(this.onGround) { + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + var8 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + double var12; + if(var8 > 0.15D) { + var10 = Math.cos((double)this.rotationYaw * Math.PI / 180.0D); + var12 = Math.sin((double)this.rotationYaw * Math.PI / 180.0D); + + for(int var14 = 0; (double)var14 < 1.0D + var8 * 60.0D; ++var14) { + double var15 = (double)(this.field_9064_W.nextFloat() * 2.0F - 1.0F); + double var17 = (double)(this.field_9064_W.nextInt(2) * 2 - 1) * 0.7D; + double var19; + double var21; + if(this.field_9064_W.nextBoolean()) { + var19 = this.posX - var10 * var15 * 0.8D + var12 * var17; + var21 = this.posZ - var12 * var15 * 0.8D - var10 * var17; + this.worldObj.spawnParticle("splash", var19, this.posY - 0.125D, var21, this.motionX, this.motionY, this.motionZ); + } else { + var19 = this.posX + var10 + var12 * var15 * 0.7D; + var21 = this.posZ + var12 - var10 * var15 * 0.7D; + this.worldObj.spawnParticle("splash", var19, this.posY - 0.125D, var21, this.motionX, this.motionY, this.motionZ); + } + } + } + + if(this.field_9084_B && var8 > 0.15D) { + if(!this.worldObj.multiplayerWorld) { + this.setEntityDead(); + + int var24; + for(var24 = 0; var24 < 3; ++var24) { + this.dropItemWithOffset(Block.planks.blockID, 1, 0.0F); + } + + for(var24 = 0; var24 < 2; ++var24) { + this.dropItemWithOffset(Item.stick.swiftedIndex, 1, 0.0F); + } + } + } else { + this.motionX *= (double)0.99F; + this.motionY *= (double)0.95F; + this.motionZ *= (double)0.99F; + } + + this.rotationPitch = 0.0F; + var10 = (double)this.rotationYaw; + var12 = this.prevPosX - this.posX; + double var25 = this.prevPosZ - this.posZ; + if(var12 * var12 + var25 * var25 > 0.001D) { + var10 = (double)((float)(Math.atan2(var25, var12) * 180.0D / Math.PI)); + } + + double var16; + for(var16 = var10 - (double)this.rotationYaw; var16 >= 180.0D; var16 -= 360.0D) { + } + + while(var16 < -180.0D) { + var16 += 360.0D; + } + + if(var16 > 20.0D) { + var16 = 20.0D; + } + + if(var16 < -20.0D) { + var16 = -20.0D; + } + + this.rotationYaw = (float)((double)this.rotationYaw + var16); + this.setRotation(this.rotationYaw, this.rotationPitch); + List var18 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expands((double)0.2F, 0.0D, (double)0.2F)); + if(var18 != null && var18.size() > 0) { + for(int var26 = 0; var26 < var18.size(); ++var26) { + Entity var20 = (Entity)var18.get(var26); + if(var20 != this.field_328_f && var20.func_124_r() && var20 instanceof EntityBoat) { + var20.applyEntityCollision(this); + } + } + } + + if(this.field_328_f != null && this.field_328_f.field_304_B) { + this.field_328_f = null; + } + + } + } + + public void func_127_w() { + if(this.field_328_f != null) { + double var1 = Math.cos((double)this.rotationYaw * Math.PI / 180.0D) * 0.4D; + double var3 = Math.sin((double)this.rotationYaw * Math.PI / 180.0D) * 0.4D; + this.field_328_f.setPosition(this.posX + var1, this.posY + this.func_130_h() + this.field_328_f.func_117_x(), this.posZ + var3); + } + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + } + + public boolean func_6092_a(EntityPlayer var1) { + if(this.field_328_f != null && this.field_328_f instanceof EntityPlayer && this.field_328_f != var1) { + return true; + } else { + if(!this.worldObj.multiplayerWorld) { + var1.func_6094_e(this); + } + + return true; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityChicken.java b/minecraft_server/src/net/minecraft/src/EntityChicken.java new file mode 100644 index 0000000..0d13f4c --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityChicken.java @@ -0,0 +1,77 @@ +package net.minecraft.src; + +public class EntityChicken extends EntityAnimals { + public boolean field_392_a = false; + public float field_391_b = 0.0F; + public float field_395_ad = 0.0F; + public float field_394_ae; + public float field_393_af; + public float field_390_ai = 1.0F; + public int field_396_aj; + + public EntityChicken(World var1) { + super(var1); + this.field_9119_aG = "/mob/chicken.png"; + this.setSize(0.3F, 0.4F); + this.field_9109_aQ = 4; + this.field_396_aj = this.field_9064_W.nextInt(6000) + 6000; + } + + public void onLivingUpdate() { + super.onLivingUpdate(); + this.field_393_af = this.field_391_b; + this.field_394_ae = this.field_395_ad; + this.field_395_ad = (float)((double)this.field_395_ad + (double)(this.onGround ? -1 : 4) * 0.3D); + if(this.field_395_ad < 0.0F) { + this.field_395_ad = 0.0F; + } + + if(this.field_395_ad > 1.0F) { + this.field_395_ad = 1.0F; + } + + if(!this.onGround && this.field_390_ai < 1.0F) { + this.field_390_ai = 1.0F; + } + + this.field_390_ai = (float)((double)this.field_390_ai * 0.9D); + if(!this.onGround && this.motionY < 0.0D) { + this.motionY *= 0.6D; + } + + this.field_391_b += this.field_390_ai * 2.0F; + if(!this.worldObj.multiplayerWorld && --this.field_396_aj <= 0) { + this.worldObj.playSoundAtEntity(this, "mob.chickenplop", 1.0F, (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F); + this.dropItem(Item.egg.swiftedIndex, 1); + this.field_396_aj = this.field_9064_W.nextInt(6000) + 6000; + } + + } + + protected void fall(float var1) { + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + protected String getLivingSound() { + return "mob.chicken"; + } + + protected String getHurtSound() { + return "mob.chickenhurt"; + } + + protected String getDeathSound() { + return "mob.chickenhurt"; + } + + protected int getDropItemId() { + return Item.feather.swiftedIndex; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityCow.java b/minecraft_server/src/net/minecraft/src/EntityCow.java new file mode 100644 index 0000000..14b0d55 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityCow.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +public class EntityCow extends EntityAnimals { + public boolean unusedBoolean = false; + + public EntityCow(World var1) { + super(var1); + this.field_9119_aG = "/mob/cow.png"; + this.setSize(0.9F, 1.3F); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + protected String getLivingSound() { + return "mob.cow"; + } + + protected String getHurtSound() { + return "mob.cowhurt"; + } + + protected String getDeathSound() { + return "mob.cowhurt"; + } + + protected float getSoundVolume() { + return 0.4F; + } + + protected int getDropItemId() { + return Item.leather.swiftedIndex; + } + + public boolean func_6092_a(EntityPlayer var1) { + ItemStack var2 = var1.inventory.getCurrentItem(); + if(var2 != null && var2.itemID == Item.bucketEmpty.swiftedIndex) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, new ItemStack(Item.bucketMilk)); + return true; + } else { + return false; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityCreature.java b/minecraft_server/src/net/minecraft/src/EntityCreature.java new file mode 100644 index 0000000..dcb330a --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityCreature.java @@ -0,0 +1,151 @@ +package net.minecraft.src; + +public class EntityCreature extends EntityLiving { + private PathEntity field_388_a; + protected Entity field_389_ag; + protected boolean field_387_ah = false; + + public EntityCreature(World var1) { + super(var1); + } + + protected void func_152_d_() { + this.field_387_ah = false; + float var1 = 16.0F; + if(this.field_389_ag == null) { + this.field_389_ag = this.func_158_i(); + if(this.field_389_ag != null) { + this.field_388_a = this.worldObj.func_482_a(this, this.field_389_ag, var1); + } + } else if(!this.field_389_ag.func_120_t()) { + this.field_389_ag = null; + } else { + float var2 = this.field_389_ag.getDistanceToEntity(this); + if(this.func_145_g(this.field_389_ag)) { + this.func_157_a(this.field_389_ag, var2); + } + } + + if(this.field_387_ah || this.field_389_ag == null || this.field_388_a != null && this.field_9064_W.nextInt(20) != 0) { + if(this.field_388_a == null && this.field_9064_W.nextInt(80) == 0 || this.field_9064_W.nextInt(80) == 0) { + boolean var21 = false; + int var3 = -1; + int var4 = -1; + int var5 = -1; + float var6 = -99999.0F; + + for(int var7 = 0; var7 < 10; ++var7) { + int var8 = MathHelper.floor_double(this.posX + (double)this.field_9064_W.nextInt(13) - 6.0D); + int var9 = MathHelper.floor_double(this.posY + (double)this.field_9064_W.nextInt(7) - 3.0D); + int var10 = MathHelper.floor_double(this.posZ + (double)this.field_9064_W.nextInt(13) - 6.0D); + float var11 = this.func_159_a(var8, var9, var10); + if(var11 > var6) { + var6 = var11; + var3 = var8; + var4 = var9; + var5 = var10; + var21 = true; + } + } + + if(var21) { + this.field_388_a = this.worldObj.func_501_a(this, var3, var4, var5, 10.0F); + } + } + } else { + this.field_388_a = this.worldObj.func_482_a(this, this.field_389_ag, var1); + } + + int var22 = MathHelper.floor_double(this.boundingBox.minY); + boolean var23 = this.handleWaterMovement(); + boolean var24 = this.func_112_q(); + this.rotationPitch = 0.0F; + if(this.field_388_a != null && this.field_9064_W.nextInt(100) != 0) { + Vec3D var25 = this.field_388_a.getPosition(this); + double var26 = (double)(this.width * 2.0F); + + while(var25 != null && var25.squareDistanceTo(this.posX, var25.yCoord, this.posZ) < var26 * var26) { + this.field_388_a.incrementPathIndex(); + if(this.field_388_a.isFinished()) { + var25 = null; + this.field_388_a = null; + } else { + var25 = this.field_388_a.getPosition(this); + } + } + + this.field_9128_br = false; + if(var25 != null) { + double var27 = var25.xCoord - this.posX; + double var28 = var25.zCoord - this.posZ; + double var12 = var25.yCoord - (double)var22; + float var14 = (float)(Math.atan2(var28, var27) * 180.0D / (double)((float)Math.PI)) - 90.0F; + float var15 = var14 - this.rotationYaw; + + for(this.field_9130_bp = this.field_9126_bt; var15 < -180.0F; var15 += 360.0F) { + } + + while(var15 >= 180.0F) { + var15 -= 360.0F; + } + + if(var15 > 30.0F) { + var15 = 30.0F; + } + + if(var15 < -30.0F) { + var15 = -30.0F; + } + + this.rotationYaw += var15; + if(this.field_387_ah && this.field_389_ag != null) { + double var16 = this.field_389_ag.posX - this.posX; + double var18 = this.field_389_ag.posZ - this.posZ; + float var20 = this.rotationYaw; + this.rotationYaw = (float)(Math.atan2(var18, var16) * 180.0D / (double)((float)Math.PI)) - 90.0F; + var15 = (var20 - this.rotationYaw + 90.0F) * (float)Math.PI / 180.0F; + this.field_9131_bo = -MathHelper.sin(var15) * this.field_9130_bp * 1.0F; + this.field_9130_bp = MathHelper.cos(var15) * this.field_9130_bp * 1.0F; + } + + if(var12 > 0.0D) { + this.field_9128_br = true; + } + } + + if(this.field_389_ag != null) { + this.func_147_b(this.field_389_ag, 30.0F); + } + + if(this.field_9084_B) { + this.field_9128_br = true; + } + + if(this.field_9064_W.nextFloat() < 0.8F && (var23 || var24)) { + this.field_9128_br = true; + } + + } else { + super.func_152_d_(); + this.field_388_a = null; + } + } + + protected void func_157_a(Entity var1, float var2) { + } + + protected float func_159_a(int var1, int var2, int var3) { + return 0.0F; + } + + protected Entity func_158_i() { + return null; + } + + public boolean getCanSpawnHere() { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.boundingBox.minY); + int var3 = MathHelper.floor_double(this.posZ); + return super.getCanSpawnHere() && this.func_159_a(var1, var2, var3) >= 0.0F; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityCreeper.java b/minecraft_server/src/net/minecraft/src/EntityCreeper.java new file mode 100644 index 0000000..a6cde13 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityCreeper.java @@ -0,0 +1,106 @@ +package net.minecraft.src; + +public class EntityCreeper extends EntityMobs { + int field_406_a; + int field_405_b; + int field_408_ad = 30; + int field_407_ae = -1; + int field_12011_e = -1; + + public EntityCreeper(World var1) { + super(var1); + this.field_9119_aG = "/mob/creeper.png"; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + public void onUpdate() { + this.field_405_b = this.field_406_a; + if(this.worldObj.multiplayerWorld) { + this.field_406_a += this.field_407_ae; + if(this.field_406_a < 0) { + this.field_406_a = 0; + } + + if(this.field_406_a >= this.field_408_ad) { + this.field_406_a = this.field_408_ad; + } + } + + super.onUpdate(); + } + + protected void func_152_d_() { + if(this.field_12011_e != this.field_407_ae) { + this.field_12011_e = this.field_407_ae; + if(this.field_407_ae > 0) { + this.worldObj.func_9206_a(this, (byte)4); + } else { + this.worldObj.func_9206_a(this, (byte)5); + } + } + + this.field_405_b = this.field_406_a; + if(this.worldObj.multiplayerWorld) { + super.func_152_d_(); + } else { + if(this.field_406_a > 0 && this.field_407_ae < 0) { + --this.field_406_a; + } + + if(this.field_407_ae >= 0) { + this.field_407_ae = 2; + } + + super.func_152_d_(); + if(this.field_407_ae != 1) { + this.field_407_ae = -1; + } + } + + } + + protected String getHurtSound() { + return "mob.creeper"; + } + + protected String getDeathSound() { + return "mob.creeperdeath"; + } + + public void onDeath(Entity var1) { + super.onDeath(var1); + if(var1 instanceof EntitySkeleton) { + this.dropItem(Item.record13.swiftedIndex + this.field_9064_W.nextInt(2), 1); + } + + } + + protected void func_157_a(Entity var1, float var2) { + if(this.field_407_ae <= 0 && var2 < 3.0F || this.field_407_ae > 0 && var2 < 7.0F) { + if(this.field_406_a == 0) { + this.worldObj.playSoundAtEntity(this, "random.fuse", 1.0F, 0.5F); + } + + this.field_407_ae = 1; + ++this.field_406_a; + if(this.field_406_a == this.field_408_ad) { + this.worldObj.func_12013_a(this, this.posX, this.posY, this.posZ, 3.0F); + this.setEntityDead(); + } + + this.field_387_ah = true; + } + + } + + protected int getDropItemId() { + return Item.gunpowder.swiftedIndex; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityFallingSand.java b/minecraft_server/src/net/minecraft/src/EntityFallingSand.java new file mode 100644 index 0000000..42fdb71 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityFallingSand.java @@ -0,0 +1,74 @@ +package net.minecraft.src; + +public class EntityFallingSand extends Entity { + public int field_427_a; + public int field_426_b = 0; + + public EntityFallingSand(World var1) { + super(var1); + } + + public EntityFallingSand(World var1, float var2, float var3, float var4, int var5) { + super(var1); + this.field_427_a = var5; + this.field_329_e = 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.entityWalks = false; + this.prevPosX = (double)var2; + this.prevPosY = (double)var3; + this.prevPosZ = (double)var4; + } + + public boolean func_129_c_() { + return !this.field_304_B; + } + + public void onUpdate() { + if(this.field_427_a == 0) { + this.setEntityDead(); + } else { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + ++this.field_426_b; + 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.field_427_a) { + 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.func_516_a(this.field_427_a, var1, var2, var3, true) || !this.worldObj.setBlockWithNotify(var1, var2, var3, this.field_427_a)) { + this.dropItem(this.field_427_a, 1); + } + } else if(this.field_426_b > 100) { + this.dropItem(this.field_427_a, 1); + this.setEntityDead(); + } + + } + } + + protected void writeEntityToNBT(NBTTagCompound var1) { + var1.setByte("Tile", (byte)this.field_427_a); + } + + protected void readEntityFromNBT(NBTTagCompound var1) { + this.field_427_a = var1.getByte("Tile") & 255; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityFireball.java b/minecraft_server/src/net/minecraft/src/EntityFireball.java new file mode 100644 index 0000000..8908a76 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityFireball.java @@ -0,0 +1,193 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityFireball extends Entity { + private int field_9195_e = -1; + private int field_9193_f = -1; + private int field_9197_aj = -1; + private int field_9194_ak = 0; + private boolean field_9192_al = false; + public int field_9200_a = 0; + private EntityLiving field_9191_am; + private int field_9190_an; + private int field_9189_ao = 0; + public double field_9199_b; + public double field_9198_c; + public double field_9196_d; + + public EntityFireball(World var1) { + super(var1); + this.setSize(1.0F, 1.0F); + } + + public EntityFireball(World var1, EntityLiving var2, double var3, double var5, double var7) { + super(var1); + this.field_9191_am = var2; + this.setSize(1.0F, 1.0F); + this.func_107_c(var2.posX, var2.posY, var2.posZ, var2.rotationYaw, var2.rotationPitch); + this.setPosition(this.posX, this.posY, this.posZ); + this.yOffset = 0.0F; + this.motionX = this.motionY = this.motionZ = 0.0D; + var3 += this.field_9064_W.nextGaussian() * 0.4D; + var5 += this.field_9064_W.nextGaussian() * 0.4D; + var7 += this.field_9064_W.nextGaussian() * 0.4D; + double var9 = (double)MathHelper.sqrt_double(var3 * var3 + var5 * var5 + var7 * var7); + this.field_9199_b = var3 / var9 * 0.1D; + this.field_9198_c = var5 / var9 * 0.1D; + this.field_9196_d = var7 / var9 * 0.1D; + } + + public void onUpdate() { + super.onUpdate(); + this.field_9061_Z = 10; + if(this.field_9200_a > 0) { + --this.field_9200_a; + } + + if(this.field_9192_al) { + int var1 = this.worldObj.getBlockId(this.field_9195_e, this.field_9193_f, this.field_9197_aj); + if(var1 == this.field_9194_ak) { + ++this.field_9190_an; + if(this.field_9190_an == 1200) { + this.setEntityDead(); + } + + return; + } + + this.field_9192_al = false; + this.motionX *= (double)(this.field_9064_W.nextFloat() * 0.2F); + this.motionY *= (double)(this.field_9064_W.nextFloat() * 0.2F); + this.motionZ *= (double)(this.field_9064_W.nextFloat() * 0.2F); + this.field_9190_an = 0; + this.field_9189_ao = 0; + } else { + ++this.field_9189_ao; + } + + 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.func_486_a(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).expands(1.0D, 1.0D, 1.0D)); + double var6 = 0.0D; + + for(int var8 = 0; var8 < var5.size(); ++var8) { + Entity var9 = (Entity)var5.get(var8); + if(var9.func_129_c_() && (var9 != this.field_9191_am || this.field_9189_ao >= 25)) { + float var10 = 0.3F; + AxisAlignedBB var11 = var9.boundingBox.expands((double)var10, (double)var10, (double)var10); + MovingObjectPosition var12 = var11.func_706_a(var15, var2); + if(var12 != null) { + double var13 = var15.distanceTo(var12.hitVec); + if(var13 < var6 || var6 == 0.0D) { + var4 = var9; + var6 = var13; + } + } + } + } + + if(var4 != null) { + var3 = new MovingObjectPosition(var4); + } + + if(var3 != null) { + if(var3.entityHit != null && var3.entityHit.attackEntity(this.field_9191_am, 0)) { + } + + this.worldObj.func_12015_a((Entity)null, this.posX, this.posY, this.posZ, 1.0F, true); + this.setEntityDead(); + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + float var16 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(Math.atan2(this.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.95F; + 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 += this.field_9199_b; + this.motionY += this.field_9198_c; + this.motionZ += this.field_9196_d; + this.motionX *= (double)var17; + this.motionY *= (double)var17; + this.motionZ *= (double)var17; + this.worldObj.spawnParticle("smoke", this.posX, this.posY + 0.5D, this.posZ, 0.0D, 0.0D, 0.0D); + this.setPosition(this.posX, this.posY, this.posZ); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("xTile", (short)this.field_9195_e); + var1.setShort("yTile", (short)this.field_9193_f); + var1.setShort("zTile", (short)this.field_9197_aj); + var1.setByte("inTile", (byte)this.field_9194_ak); + var1.setByte("shake", (byte)this.field_9200_a); + var1.setByte("inGround", (byte)(this.field_9192_al ? 1 : 0)); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.field_9195_e = var1.getShort("xTile"); + this.field_9193_f = var1.getShort("yTile"); + this.field_9197_aj = var1.getShort("zTile"); + this.field_9194_ak = var1.getByte("inTile") & 255; + this.field_9200_a = var1.getByte("shake") & 255; + this.field_9192_al = var1.getByte("inGround") == 1; + } + + public boolean func_129_c_() { + return true; + } + + public boolean attackEntity(Entity var1, int var2) { + this.func_9060_u(); + if(var1 != null) { + Vec3D var3 = var1.func_4039_B(); + if(var3 != null) { + this.motionX = var3.xCoord; + this.motionY = var3.yCoord; + this.motionZ = var3.zCoord; + this.field_9199_b = this.motionX * 0.1D; + this.field_9198_c = this.motionY * 0.1D; + this.field_9196_d = this.motionZ * 0.1D; + } + + return true; + } else { + return false; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityFish.java b/minecraft_server/src/net/minecraft/src/EntityFish.java new file mode 100644 index 0000000..8c4ad4d --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityFish.java @@ -0,0 +1,313 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityFish extends Entity { + private int d = -1; + private int e = -1; + private int field_4126_f = -1; + private int field_4132_ai = 0; + private boolean field_4129_aj = false; + public int field_4134_a = 0; + public EntityPlayer b; + private int field_6150_ak; + private int field_4125_al = 0; + private int field_4124_am = 0; + public Entity c = null; + private int field_6149_an; + private double field_6148_ao; + private double field_6147_ap; + private double field_6146_aq; + private double field_6145_ar; + private double field_6144_as; + + public EntityFish(World var1) { + super(var1); + this.setSize(0.25F, 0.25F); + } + + public EntityFish(World var1, EntityPlayer var2) { + super(var1); + this.b = var2; + this.b.field_6124_at = this; + this.setSize(0.25F, 0.25F); + this.func_107_c(var2.posX, var2.posY + 1.62D - (double)var2.yOffset, var2.posZ, var2.rotationYaw, var2.rotationPitch); + this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.posY -= (double)0.1F; + this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.setPosition(this.posX, this.posY, this.posZ); + this.yOffset = 0.0F; + float var3 = 0.4F; + this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.func_6142_a(this.motionX, this.motionY, this.motionZ, 1.5F, 1.0F); + } + + public void func_6142_a(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.field_9064_W.nextGaussian() * (double)0.0075F * (double)var8; + var3 += this.field_9064_W.nextGaussian() * (double)0.0075F * (double)var8; + var5 += this.field_9064_W.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.field_6150_ak = 0; + } + + public void onUpdate() { + super.onUpdate(); + if(this.field_6149_an > 0) { + double var21 = this.posX + (this.field_6148_ao - this.posX) / (double)this.field_6149_an; + double var22 = this.posY + (this.field_6147_ap - this.posY) / (double)this.field_6149_an; + double var23 = this.posZ + (this.field_6146_aq - this.posZ) / (double)this.field_6149_an; + + double var7; + for(var7 = this.field_6145_ar - (double)this.rotationYaw; var7 < -180.0D; var7 += 360.0D) { + } + + while(var7 >= 180.0D) { + var7 -= 360.0D; + } + + this.rotationYaw = (float)((double)this.rotationYaw + var7 / (double)this.field_6149_an); + this.rotationPitch = (float)((double)this.rotationPitch + (this.field_6144_as - (double)this.rotationPitch) / (double)this.field_6149_an); + --this.field_6149_an; + this.setPosition(var21, var22, var23); + this.setRotation(this.rotationYaw, this.rotationPitch); + } else { + if(!this.worldObj.multiplayerWorld) { + ItemStack var1 = this.b.func_172_B(); + if(this.b.field_304_B || !this.b.func_120_t() || var1 == null || var1.getItem() != Item.fishingRod || this.getDistanceSqToEntity(this.b) > 1024.0D) { + this.setEntityDead(); + this.b.field_6124_at = null; + return; + } + + if(this.c != null) { + if(!this.c.field_304_B) { + this.posX = this.c.posX; + this.posY = this.c.boundingBox.minY + (double)this.c.height * 0.8D; + this.posZ = this.c.posZ; + return; + } + + this.c = null; + } + } + + if(this.field_4134_a > 0) { + --this.field_4134_a; + } + + if(this.field_4129_aj) { + int var19 = this.worldObj.getBlockId(this.d, this.e, this.field_4126_f); + if(var19 == this.field_4132_ai) { + ++this.field_6150_ak; + if(this.field_6150_ak == 1200) { + this.setEntityDead(); + } + + return; + } + + this.field_4129_aj = false; + this.motionX *= (double)(this.field_9064_W.nextFloat() * 0.2F); + this.motionY *= (double)(this.field_9064_W.nextFloat() * 0.2F); + this.motionZ *= (double)(this.field_9064_W.nextFloat() * 0.2F); + this.field_6150_ak = 0; + this.field_4125_al = 0; + } else { + ++this.field_4125_al; + } + + Vec3D var20 = 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.func_486_a(var20, var2); + var20 = 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).expands(1.0D, 1.0D, 1.0D)); + double var6 = 0.0D; + + double var13; + for(int var8 = 0; var8 < var5.size(); ++var8) { + Entity var9 = (Entity)var5.get(var8); + if(var9.func_129_c_() && (var9 != this.b || this.field_4125_al >= 5)) { + float var10 = 0.3F; + AxisAlignedBB var11 = var9.boundingBox.expands((double)var10, (double)var10, (double)var10); + MovingObjectPosition var12 = var11.func_706_a(var20, var2); + if(var12 != null) { + var13 = var20.distanceTo(var12.hitVec); + if(var13 < var6 || var6 == 0.0D) { + var4 = var9; + var6 = var13; + } + } + } + } + + if(var4 != null) { + var3 = new MovingObjectPosition(var4); + } + + if(var3 != null) { + if(var3.entityHit != null) { + if(var3.entityHit.attackEntity(this.b, 0)) { + this.c = var3.entityHit; + } + } else { + this.field_4129_aj = true; + } + } + + if(!this.field_4129_aj) { + this.moveEntity(this.motionX, this.motionY, this.motionZ); + float var24 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI)); + + for(this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var24) * 180.0D / (double)((float)Math.PI)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) { + } + + while(this.rotationPitch - this.prevRotationPitch >= 180.0F) { + this.prevRotationPitch += 360.0F; + } + + while(this.rotationYaw - this.prevRotationYaw < -180.0F) { + this.prevRotationYaw -= 360.0F; + } + + while(this.rotationYaw - this.prevRotationYaw >= 180.0F) { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + float var25 = 0.92F; + if(this.onGround || this.field_9084_B) { + var25 = 0.5F; + } + + byte var26 = 5; + double var27 = 0.0D; + + for(int var28 = 0; var28 < var26; ++var28) { + double var14 = this.boundingBox.minY + (this.boundingBox.maxY - this.boundingBox.minY) * (double)(var28 + 0) / (double)var26 - 0.125D + 0.125D; + double var16 = this.boundingBox.minY + (this.boundingBox.maxY - this.boundingBox.minY) * (double)(var28 + 1) / (double)var26 - 0.125D + 0.125D; + AxisAlignedBB var18 = AxisAlignedBB.getBoundingBoxFromPool(this.boundingBox.minX, var14, this.boundingBox.minZ, this.boundingBox.maxX, var16, this.boundingBox.maxZ); + if(this.worldObj.func_524_b(var18, Material.water)) { + var27 += 1.0D / (double)var26; + } + } + + if(var27 > 0.0D) { + if(this.field_4124_am > 0) { + --this.field_4124_am; + } else if(this.field_9064_W.nextInt(500) == 0) { + this.field_4124_am = this.field_9064_W.nextInt(30) + 10; + this.motionY -= (double)0.2F; + this.worldObj.playSoundAtEntity(this, "random.splash", 0.25F, 1.0F + (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.4F); + float var29 = (float)MathHelper.floor_double(this.boundingBox.minY); + + float var15; + int var30; + float var31; + for(var30 = 0; (float)var30 < 1.0F + this.width * 20.0F; ++var30) { + var15 = (this.field_9064_W.nextFloat() * 2.0F - 1.0F) * this.width; + var31 = (this.field_9064_W.nextFloat() * 2.0F - 1.0F) * this.width; + this.worldObj.spawnParticle("bubble", this.posX + (double)var15, (double)(var29 + 1.0F), this.posZ + (double)var31, this.motionX, this.motionY - (double)(this.field_9064_W.nextFloat() * 0.2F), this.motionZ); + } + + for(var30 = 0; (float)var30 < 1.0F + this.width * 20.0F; ++var30) { + var15 = (this.field_9064_W.nextFloat() * 2.0F - 1.0F) * this.width; + var31 = (this.field_9064_W.nextFloat() * 2.0F - 1.0F) * this.width; + this.worldObj.spawnParticle("splash", this.posX + (double)var15, (double)(var29 + 1.0F), this.posZ + (double)var31, this.motionX, this.motionY, this.motionZ); + } + } + } + + if(this.field_4124_am > 0) { + this.motionY -= (double)(this.field_9064_W.nextFloat() * this.field_9064_W.nextFloat() * this.field_9064_W.nextFloat()) * 0.2D; + } + + var13 = var27 * 2.0D - 1.0D; + this.motionY += (double)0.04F * var13; + if(var27 > 0.0D) { + var25 = (float)((double)var25 * 0.9D); + this.motionY *= 0.8D; + } + + this.motionX *= (double)var25; + this.motionY *= (double)var25; + this.motionZ *= (double)var25; + this.setPosition(this.posX, this.posY, this.posZ); + } + } + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("xTile", (short)this.d); + var1.setShort("yTile", (short)this.e); + var1.setShort("zTile", (short)this.field_4126_f); + var1.setByte("inTile", (byte)this.field_4132_ai); + var1.setByte("shake", (byte)this.field_4134_a); + var1.setByte("inGround", (byte)(this.field_4129_aj ? 1 : 0)); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.d = var1.getShort("xTile"); + this.e = var1.getShort("yTile"); + this.field_4126_f = var1.getShort("zTile"); + this.field_4132_ai = var1.getByte("inTile") & 255; + this.field_4134_a = var1.getByte("shake") & 255; + this.field_4129_aj = var1.getByte("inGround") == 1; + } + + public int func_6143_c() { + byte var1 = 0; + if(this.c != null) { + double var2 = this.b.posX - this.posX; + double var4 = this.b.posY - this.posY; + double var6 = this.b.posZ - this.posZ; + double var8 = (double)MathHelper.sqrt_double(var2 * var2 + var4 * var4 + var6 * var6); + double var10 = 0.1D; + this.c.motionX += var2 * var10; + this.c.motionY += var4 * var10 + (double)MathHelper.sqrt_double(var8) * 0.08D; + this.c.motionZ += var6 * var10; + var1 = 3; + } else if(this.field_4124_am > 0) { + EntityItem var13 = new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, new ItemStack(Item.fishRaw.swiftedIndex)); + double var3 = this.b.posX - this.posX; + double var5 = this.b.posY - this.posY; + double var7 = this.b.posZ - this.posZ; + double var9 = (double)MathHelper.sqrt_double(var3 * var3 + var5 * var5 + var7 * var7); + double var11 = 0.1D; + var13.motionX = var3 * var11; + var13.motionY = var5 * var11 + (double)MathHelper.sqrt_double(var9) * 0.08D; + var13.motionZ = var7 * var11; + this.worldObj.entityJoinedWorld(var13); + var1 = 1; + } + + if(this.field_4129_aj) { + var1 = 2; + } + + this.setEntityDead(); + this.b.field_6124_at = null; + return var1; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityFlying.java b/minecraft_server/src/net/minecraft/src/EntityFlying.java new file mode 100644 index 0000000..0f55efb --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityFlying.java @@ -0,0 +1,66 @@ +package net.minecraft.src; + +public class EntityFlying extends EntityLiving { + public EntityFlying(World var1) { + super(var1); + } + + protected void fall(float var1) { + } + + public void func_148_c(float var1, float var2) { + if(this.handleWaterMovement()) { + this.func_90_a(var1, var2, 0.02F); + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)0.8F; + this.motionY *= (double)0.8F; + this.motionZ *= (double)0.8F; + } else if(this.func_112_q()) { + this.func_90_a(var1, var2, 0.02F); + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= 0.5D; + this.motionY *= 0.5D; + this.motionZ *= 0.5D; + } else { + float var3 = 0.91F; + if(this.onGround) { + var3 = 546.0F * 0.1F * 0.1F * 0.1F; + int var4 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ)); + if(var4 > 0) { + var3 = Block.blocksList[var4].slipperiness * 0.91F; + } + } + + float var8 = 0.16277136F / (var3 * var3 * var3); + this.func_90_a(var1, var2, this.onGround ? 0.1F * var8 : 0.02F); + var3 = 0.91F; + if(this.onGround) { + var3 = 546.0F * 0.1F * 0.1F * 0.1F; + int var5 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ)); + if(var5 > 0) { + var3 = Block.blocksList[var5].slipperiness * 0.91F; + } + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + this.motionX *= (double)var3; + this.motionY *= (double)var3; + this.motionZ *= (double)var3; + } + + this.field_9142_bc = this.field_9141_bd; + double var10 = this.posX - this.prevPosX; + double var9 = this.posZ - this.prevPosZ; + float var7 = MathHelper.sqrt_double(var10 * var10 + var9 * var9) * 4.0F; + if(var7 > 1.0F) { + var7 = 1.0F; + } + + this.field_9141_bd += (var7 - this.field_9141_bd) * 0.4F; + this.field_386_ba += this.field_9141_bd; + } + + public boolean func_144_E() { + return false; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityGhast.java b/minecraft_server/src/net/minecraft/src/EntityGhast.java new file mode 100644 index 0000000..2c3598e --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityGhast.java @@ -0,0 +1,139 @@ +package net.minecraft.src; + +public class EntityGhast extends EntityFlying implements IMobs { + public int field_4099_a = 0; + public double field_4098_b; + public double field_4104_c; + public double field_4102_d; + private Entity field_4097_ai = null; + private int field_4103_aj = 0; + public int field_4101_e = 0; + public int field_4100_f = 0; + + public EntityGhast(World var1) { + super(var1); + this.field_9119_aG = "/mob/ghast.png"; + this.setSize(4.0F, 4.0F); + this.field_9079_ae = true; + } + + protected void func_152_d_() { + if(this.worldObj.monstersEnabled == 0) { + this.setEntityDead(); + } + + this.field_4101_e = this.field_4100_f; + double var1 = this.field_4098_b - this.posX; + double var3 = this.field_4104_c - this.posY; + double var5 = this.field_4102_d - this.posZ; + double var7 = (double)MathHelper.sqrt_double(var1 * var1 + var3 * var3 + var5 * var5); + if(var7 < 1.0D || var7 > 60.0D) { + this.field_4098_b = this.posX + (double)((this.field_9064_W.nextFloat() * 2.0F - 1.0F) * 16.0F); + this.field_4104_c = this.posY + (double)((this.field_9064_W.nextFloat() * 2.0F - 1.0F) * 16.0F); + this.field_4102_d = this.posZ + (double)((this.field_9064_W.nextFloat() * 2.0F - 1.0F) * 16.0F); + } + + if(this.field_4099_a-- <= 0) { + this.field_4099_a += this.field_9064_W.nextInt(5) + 2; + if(this.func_4046_a(this.field_4098_b, this.field_4104_c, this.field_4102_d, var7)) { + this.motionX += var1 / var7 * 0.1D; + this.motionY += var3 / var7 * 0.1D; + this.motionZ += var5 / var7 * 0.1D; + } else { + this.field_4098_b = this.posX; + this.field_4104_c = this.posY; + this.field_4102_d = this.posZ; + } + } + + if(this.field_4097_ai != null && this.field_4097_ai.field_304_B) { + this.field_4097_ai = null; + } + + if(this.field_4097_ai == null || this.field_4103_aj-- <= 0) { + this.field_4097_ai = this.worldObj.getClosestPlayerToEntity(this, 100.0D); + if(this.field_4097_ai != null) { + this.field_4103_aj = 20; + } + } + + double var9 = 64.0D; + if(this.field_4097_ai != null && this.field_4097_ai.getDistanceSqToEntity(this) < var9 * var9) { + double var11 = this.field_4097_ai.posX - this.posX; + double var13 = this.field_4097_ai.boundingBox.minY + (double)(this.field_4097_ai.height / 2.0F) - (this.posY + (double)(this.height / 2.0F)); + double var15 = this.field_4097_ai.posZ - this.posZ; + this.field_9095_az = this.rotationYaw = -((float)Math.atan2(var11, var15)) * 180.0F / (float)Math.PI; + if(this.func_145_g(this.field_4097_ai)) { + if(this.field_4100_f == 10) { + this.worldObj.playSoundAtEntity(this, "mob.ghast.charge", this.getSoundVolume(), (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F); + } + + ++this.field_4100_f; + if(this.field_4100_f == 20) { + this.worldObj.playSoundAtEntity(this, "mob.ghast.fireball", this.getSoundVolume(), (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F); + EntityFireball var17 = new EntityFireball(this.worldObj, this, var11, var13, var15); + double var18 = 4.0D; + Vec3D var20 = this.func_141_d(1.0F); + var17.posX = this.posX + var20.xCoord * var18; + var17.posY = this.posY + (double)(this.height / 2.0F) + 0.5D; + var17.posZ = this.posZ + var20.zCoord * var18; + this.worldObj.entityJoinedWorld(var17); + this.field_4100_f = -40; + } + } else if(this.field_4100_f > 0) { + --this.field_4100_f; + } + } else { + this.field_9095_az = this.rotationYaw = -((float)Math.atan2(this.motionX, this.motionZ)) * 180.0F / (float)Math.PI; + if(this.field_4100_f > 0) { + --this.field_4100_f; + } + } + + this.field_9119_aG = this.field_4100_f > 10 ? "/mob/ghast_fire.png" : "/mob/ghast.png"; + } + + private boolean func_4046_a(double var1, double var3, double var5, double var7) { + double var9 = (this.field_4098_b - this.posX) / var7; + double var11 = (this.field_4104_c - this.posY) / var7; + double var13 = (this.field_4102_d - this.posZ) / var7; + AxisAlignedBB var15 = this.boundingBox.copy(); + + for(int var16 = 1; (double)var16 < var7; ++var16) { + var15.offset(var9, var11, var13); + if(this.worldObj.getCollidingBoundingBoxes(this, var15).size() > 0) { + return false; + } + } + + return true; + } + + protected String getLivingSound() { + return "mob.ghast.moan"; + } + + protected String getHurtSound() { + return "mob.ghast.scream"; + } + + protected String getDeathSound() { + return "mob.ghast.death"; + } + + protected int getDropItemId() { + return Item.gunpowder.swiftedIndex; + } + + protected float getSoundVolume() { + return 10.0F; + } + + public boolean getCanSpawnHere() { + return this.field_9064_W.nextInt(20) == 0 && super.getCanSpawnHere() && this.worldObj.monstersEnabled > 0; + } + + public int func_4045_i() { + return 1; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityItem.java b/minecraft_server/src/net/minecraft/src/EntityItem.java new file mode 100644 index 0000000..4d0d45f --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityItem.java @@ -0,0 +1,191 @@ +package net.minecraft.src; + +public class EntityItem extends Entity { + public ItemStack item; + private int field_9170_e; + public int field_9169_b = 0; + public int field_433_ad; + private int health = 5; + public float field_432_ae = (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.entityWalks = 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.field_433_ad > 0) { + --this.field_433_ad; + } + + 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.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F); + this.motionZ = (double)((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F); + this.worldObj.playSoundAtEntity(this, "random.fizz", 0.4F, 2.0F + this.field_9064_W.nextFloat() * 0.4F); + } + + this.func_176_g(this.posX, this.posY, this.posZ); + this.handleWaterMovement(); + this.moveEntity(this.motionX, this.motionY, this.motionZ); + float var1 = 0.98F; + if(this.onGround) { + var1 = 0.1F * 0.1F * 58.8F; + int var2 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ)); + if(var2 > 0) { + var1 = Block.blocksList[var2].slipperiness * 0.98F; + } + } + + this.motionX *= (double)var1; + this.motionY *= (double)0.98F; + this.motionZ *= (double)var1; + if(this.onGround) { + this.motionY *= -0.5D; + } + + ++this.field_9170_e; + ++this.field_9169_b; + if(this.field_9169_b >= 6000) { + this.setEntityDead(); + } + + } + + public boolean handleWaterMovement() { + return this.worldObj.func_490_a(this.boundingBox, Material.water, this); + } + + private boolean func_176_g(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.field_540_p[this.worldObj.getBlockId(var7, var8, var9)]) { + boolean var16 = !Block.field_540_p[this.worldObj.getBlockId(var7 - 1, var8, var9)]; + boolean var17 = !Block.field_540_p[this.worldObj.getBlockId(var7 + 1, var8, var9)]; + boolean var18 = !Block.field_540_p[this.worldObj.getBlockId(var7, var8 - 1, var9)]; + boolean var19 = !Block.field_540_p[this.worldObj.getBlockId(var7, var8 + 1, var9)]; + boolean var20 = !Block.field_540_p[this.worldObj.getBlockId(var7, var8, var9 - 1)]; + boolean var21 = !Block.field_540_p[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.field_9064_W.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 func_125_b(int var1) { + this.attackEntity((Entity)null, var1); + } + + public boolean attackEntity(Entity var1, int var2) { + this.func_9060_u(); + 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.field_9169_b); + var1.setCompoundTag("Item", this.item.writeToNBT(new NBTTagCompound())); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.health = var1.getShort("Health") & 255; + this.field_9169_b = var1.getShort("Age"); + NBTTagCompound var2 = var1.getCompoundTag("Item"); + this.item = new ItemStack(var2); + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(!this.worldObj.multiplayerWorld) { + int var2 = this.item.stackSize; + if(this.field_433_ad == 0 && var1.inventory.addItemStackToInventory(this.item)) { + this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.7F + 1.0F) * 2.0F); + var1.func_163_c(this, var2); + this.setEntityDead(); + } + + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityList.java b/minecraft_server/src/net/minecraft/src/EntityList.java new file mode 100644 index 0000000..283c299 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityList.java @@ -0,0 +1,87 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; + +public class EntityList { + private static Map field_849_a = new HashMap(); + private static Map field_848_b = new HashMap(); + private static Map field_851_c = new HashMap(); + private static Map field_850_d = new HashMap(); + + private static void func_563_a(Class var0, String var1, int var2) { + field_849_a.put(var1, var0); + field_848_b.put(var0, var1); + field_851_c.put(Integer.valueOf(var2), var0); + field_850_d.put(var0, Integer.valueOf(var2)); + } + + public static Entity func_567_a(String var0, World var1) { + Entity var2 = null; + + try { + Class var3 = (Class)field_849_a.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 func_566_a(NBTTagCompound var0, World var1) { + Entity var2 = null; + + try { + Class var3 = (Class)field_849_a.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 int func_565_a(Entity var0) { + return ((Integer)field_850_d.get(var0.getClass())).intValue(); + } + + public static String func_564_b(Entity var0) { + return (String)field_848_b.get(var0.getClass()); + } + + static { + func_563_a(EntityArrow.class, "Arrow", 10); + func_563_a(EntitySnowball.class, "Snowball", 11); + func_563_a(EntityItem.class, "Item", 1); + func_563_a(EntityPainting.class, "Painting", 9); + func_563_a(EntityLiving.class, "Mob", 48); + func_563_a(EntityMobs.class, "Monster", 49); + func_563_a(EntityCreeper.class, "Creeper", 50); + func_563_a(EntitySkeleton.class, "Skeleton", 51); + func_563_a(EntitySpider.class, "Spider", 52); + func_563_a(EntityZombieSimple.class, "Giant", 53); + func_563_a(EntityZombie.class, "Zombie", 54); + func_563_a(EntitySlime.class, "Slime", 55); + func_563_a(EntityGhast.class, "Ghast", 56); + func_563_a(EntityPigZombie.class, "PigZombie", 57); + func_563_a(EntityPig.class, "Pig", 90); + func_563_a(EntitySheep.class, "Sheep", 91); + func_563_a(EntityCow.class, "Cow", 92); + func_563_a(EntityChicken.class, "Chicken", 93); + func_563_a(EntityTNTPrimed.class, "PrimedTnt", 20); + func_563_a(EntityFallingSand.class, "FallingSand", 21); + func_563_a(EntityMinecart.class, "Minecart", 40); + func_563_a(EntityBoat.class, "Boat", 41); + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityLiving.java b/minecraft_server/src/net/minecraft/src/EntityLiving.java new file mode 100644 index 0000000..adf5967 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityLiving.java @@ -0,0 +1,719 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityLiving extends Entity { + public int field_9099_av = 20; + public float field_9098_aw; + public float field_9097_ax; + public float field_9096_ay; + public float field_9095_az = 0.0F; + public float field_9125_aA = 0.0F; + protected float field_9124_aB; + protected float field_9123_aC; + protected float field_9122_aD; + protected float field_9121_aE; + protected boolean field_9120_aF = true; + protected String field_9119_aG = "/mob/char.png"; + protected boolean field_9118_aH = true; + protected float field_9117_aI = 0.0F; + protected String field_9116_aJ = null; + protected float field_9115_aK = 1.0F; + protected int field_9114_aL = 0; + protected float field_9113_aM = 0.0F; + public boolean field_9112_aN = false; + public float field_9111_aO; + public float field_9110_aP; + public int field_9109_aQ = 10; + public int field_9108_aR; + private int a; + public int field_9107_aS; + public int field_9106_aT; + public float field_9105_aU = 0.0F; + public int field_9104_aV = 0; + public int field_9103_aW = 0; + public float field_9102_aX; + public float field_9101_aY; + protected boolean field_9100_aZ = false; + public int field_9144_ba = -1; + public float field_9143_bb = (float)(Math.random() * (double)0.9F + (double)0.1F); + public float field_9142_bc; + public float field_9141_bd; + public float field_386_ba; + protected int field_9140_bf; + protected double field_9139_bg; + protected double field_9138_bh; + protected double field_9137_bi; + protected double field_9136_bj; + protected double field_9135_bk; + float field_9134_bl = 0.0F; + protected int field_9133_bm = 0; + protected int field_9132_bn = 0; + protected float field_9131_bo; + protected float field_9130_bp; + protected float field_9129_bq; + protected boolean field_9128_br = false; + protected float field_9127_bs = 0.0F; + protected float field_9126_bt = 0.7F; + private Entity b; + private int c = 0; + + public EntityLiving(World var1) { + super(var1); + this.field_329_e = true; + this.field_9096_ay = (float)(Math.random() + 1.0D) * 0.01F; + this.setPosition(this.posX, this.posY, this.posZ); + this.field_9098_aw = (float)Math.random() * 12398.0F; + this.rotationYaw = (float)(Math.random() * (double)((float)Math.PI) * 2.0D); + this.field_9097_ax = 1.0F; + this.field_9067_S = 0.5F; + } + + public boolean func_145_g(Entity var1) { + return this.worldObj.func_486_a(Vec3D.createVector(this.posX, this.posY + (double)this.func_104_p(), this.posZ), Vec3D.createVector(var1.posX, var1.posY + (double)var1.func_104_p(), var1.posZ)) == null; + } + + public boolean func_129_c_() { + return !this.field_304_B; + } + + public boolean func_124_r() { + return !this.field_304_B; + } + + public float func_104_p() { + return this.height * 0.85F; + } + + public int func_146_b() { + return 80; + } + + public void func_84_k() { + this.field_9111_aO = this.field_9110_aP; + super.func_84_k(); + if(this.field_9064_W.nextInt(1000) < this.a++) { + this.a = -this.func_146_b(); + String var1 = this.getLivingSound(); + if(var1 != null) { + this.worldObj.playSoundAtEntity(this, var1, this.getSoundVolume(), (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F); + } + } + + if(this.func_120_t() && this.func_91_u()) { + this.attackEntity((Entity)null, 1); + } + + if(this.field_9079_ae || this.worldObj.multiplayerWorld) { + this.field_9061_Z = 0; + } + + int var8; + if(this.func_120_t() && this.isInsideOfMaterial(Material.water)) { + --this.air; + if(this.air == -20) { + this.air = 0; + + for(var8 = 0; var8 < 8; ++var8) { + float var2 = this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat(); + float var3 = this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat(); + float var4 = this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat(); + this.worldObj.spawnParticle("bubble", this.posX + (double)var2, this.posY + (double)var3, this.posZ + (double)var4, this.motionX, this.motionY, this.motionZ); + } + + this.attackEntity((Entity)null, 2); + } + + this.field_9061_Z = 0; + } else { + this.air = this.field_9087_aa; + } + + this.field_9102_aX = this.field_9101_aY; + if(this.field_9103_aW > 0) { + --this.field_9103_aW; + } + + if(this.field_9107_aS > 0) { + --this.field_9107_aS; + } + + if(this.field_9083_ac > 0) { + --this.field_9083_ac; + } + + if(this.field_9109_aQ <= 0) { + ++this.field_9104_aV; + if(this.field_9104_aV > 20) { + this.func_6101_K(); + this.setEntityDead(); + + for(var8 = 0; var8 < 20; ++var8) { + double var9 = this.field_9064_W.nextGaussian() * 0.02D; + double var10 = this.field_9064_W.nextGaussian() * 0.02D; + double var6 = this.field_9064_W.nextGaussian() * 0.02D; + this.worldObj.spawnParticle("explode", this.posX + (double)(this.field_9064_W.nextFloat() * this.width * 2.0F) - (double)this.width, this.posY + (double)(this.field_9064_W.nextFloat() * this.height), this.posZ + (double)(this.field_9064_W.nextFloat() * this.width * 2.0F) - (double)this.width, var9, var10, var6); + } + } + } + + this.field_9121_aE = this.field_9122_aD; + this.field_9125_aA = this.field_9095_az; + this.prevRotationYaw = this.rotationYaw; + this.prevRotationPitch = this.rotationPitch; + } + + public void func_156_D() { + for(int var1 = 0; var1 < 20; ++var1) { + double var2 = this.field_9064_W.nextGaussian() * 0.02D; + double var4 = this.field_9064_W.nextGaussian() * 0.02D; + double var6 = this.field_9064_W.nextGaussian() * 0.02D; + double var8 = 10.0D; + this.worldObj.spawnParticle("explode", this.posX + (double)(this.field_9064_W.nextFloat() * this.width * 2.0F) - (double)this.width - var2 * var8, this.posY + (double)(this.field_9064_W.nextFloat() * this.height) - var4 * var8, this.posZ + (double)(this.field_9064_W.nextFloat() * this.width * 2.0F) - (double)this.width - var6 * var8, var2, var4, var6); + } + + } + + public void func_115_v() { + super.func_115_v(); + this.field_9124_aB = this.field_9123_aC; + this.field_9123_aC = 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.field_9095_az; + float var7 = 0.0F; + this.field_9124_aB = this.field_9123_aC; + 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.field_9110_aP > 0.0F) { + var6 = this.rotationYaw; + } + + if(!this.onGround) { + var8 = 0.0F; + } + + this.field_9123_aC += (var8 - this.field_9123_aC) * 0.3F; + + float var9; + for(var9 = var6 - this.field_9095_az; var9 < -180.0F; var9 += 360.0F) { + } + + while(var9 >= 180.0F) { + var9 -= 360.0F; + } + + this.field_9095_az += var9 * 0.3F; + + float var10; + for(var10 = this.rotationYaw - this.field_9095_az; 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.field_9095_az = this.rotationYaw - var10; + if(var10 * var10 > 2500.0F) { + this.field_9095_az += var10 * 0.2F; + } + + 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.field_9095_az - this.field_9125_aA < -180.0F) { + this.field_9125_aA -= 360.0F; + } + + while(this.field_9095_az - this.field_9125_aA >= 180.0F) { + this.field_9125_aA += 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.field_9122_aD += var7; + } + + protected void setSize(float var1, float var2) { + super.setSize(var1, var2); + } + + public void heal(int var1) { + if(this.field_9109_aQ > 0) { + this.field_9109_aQ += var1; + if(this.field_9109_aQ > 20) { + this.field_9109_aQ = 20; + } + + this.field_9083_ac = this.field_9099_av / 2; + } + } + + public boolean attackEntity(Entity var1, int var2) { + if(this.worldObj.multiplayerWorld) { + return false; + } else { + this.field_9132_bn = 0; + if(this.field_9109_aQ <= 0) { + return false; + } else { + this.field_9141_bd = 1.5F; + boolean var3 = true; + if((float)this.field_9083_ac > (float)this.field_9099_av / 2.0F) { + if(var2 <= this.field_9133_bm) { + return false; + } + + this.func_6099_c(var2 - this.field_9133_bm); + this.field_9133_bm = var2; + var3 = false; + } else { + this.field_9133_bm = var2; + this.field_9108_aR = this.field_9109_aQ; + this.field_9083_ac = this.field_9099_av; + this.func_6099_c(var2); + this.field_9107_aS = this.field_9106_aT = 10; + } + + this.field_9105_aU = 0.0F; + if(var3) { + this.worldObj.func_9206_a(this, (byte)2); + this.func_9060_u(); + if(var1 != null) { + double var4 = var1.posX - this.posX; + + double var6; + for(var6 = var1.posZ - this.posZ; var4 * var4 + var6 * var6 < 1.0E-4D; var6 = (Math.random() - Math.random()) * 0.01D) { + var4 = (Math.random() - Math.random()) * 0.01D; + } + + this.field_9105_aU = (float)(Math.atan2(var6, var4) * 180.0D / (double)((float)Math.PI)) - this.rotationYaw; + this.func_143_a(var1, var2, var4, var6); + } else { + this.field_9105_aU = (float)((int)(Math.random() * 2.0D) * 180); + } + } + + if(this.field_9109_aQ <= 0) { + if(var3) { + this.worldObj.playSoundAtEntity(this, this.getDeathSound(), this.getSoundVolume(), (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F); + } + + this.onDeath(var1); + } else if(var3) { + this.worldObj.playSoundAtEntity(this, this.getHurtSound(), this.getSoundVolume(), (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F); + } + + return true; + } + } + } + + protected void func_6099_c(int var1) { + this.field_9109_aQ -= var1; + } + + protected float getSoundVolume() { + return 1.0F; + } + + protected String getLivingSound() { + return null; + } + + protected String getHurtSound() { + return "random.hurt"; + } + + protected String getDeathSound() { + return "random.hurt"; + } + + public void func_143_a(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.field_9114_aL > 0 && var1 != null) { + var1.func_96_b(this, this.field_9114_aL); + } + + this.field_9100_aZ = true; + if(!this.worldObj.multiplayerWorld) { + int var2 = this.getDropItemId(); + if(var2 > 0) { + int var3 = this.field_9064_W.nextInt(3); + + for(int var4 = 0; var4 < var3; ++var4) { + this.dropItem(var2, 1); + } + } + } + + this.worldObj.func_9206_a(this, (byte)3); + } + + protected int getDropItemId() { + return 0; + } + + protected void fall(float var1) { + int var2 = (int)Math.ceil((double)(var1 - 3.0F)); + if(var2 > 0) { + this.attackEntity((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.func_737_c(), var4.func_738_a() * 0.5F, var4.func_739_b() * (12.0F / 16.0F)); + } + } + + } + + public void func_148_c(float var1, float var2) { + double var3; + if(this.handleWaterMovement()) { + var3 = this.posY; + this.func_90_a(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.field_9084_B && this.func_133_b(this.motionX, this.motionY + (double)0.6F - this.posY + var3, this.motionZ)) { + this.motionY = (double)0.3F; + } + } else if(this.func_112_q()) { + var3 = this.posY; + this.func_90_a(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.field_9084_B && this.func_133_b(this.motionX, this.motionY + (double)0.6F - this.posY + var3, this.motionZ)) { + this.motionY = (double)0.3F; + } + } else { + float var8 = 0.91F; + if(this.onGround) { + var8 = 546.0F * 0.1F * 0.1F * 0.1F; + int var4 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ)); + if(var4 > 0) { + var8 = Block.blocksList[var4].slipperiness * 0.91F; + } + } + + float var9 = 0.16277136F / (var8 * var8 * var8); + this.func_90_a(var1, var2, this.onGround ? 0.1F * var9 : 0.02F); + var8 = 0.91F; + if(this.onGround) { + var8 = 546.0F * 0.1F * 0.1F * 0.1F; + int var5 = this.worldObj.getBlockId(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.boundingBox.minY) - 1, MathHelper.floor_double(this.posZ)); + if(var5 > 0) { + var8 = Block.blocksList[var5].slipperiness * 0.91F; + } + } + + if(this.func_144_E()) { + this.fallDistance = 0.0F; + if(this.motionY < -0.15D) { + this.motionY = -0.15D; + } + } + + this.moveEntity(this.motionX, this.motionY, this.motionZ); + if(this.field_9084_B && this.func_144_E()) { + this.motionY = 0.2D; + } + + this.motionY -= 0.08D; + this.motionY *= (double)0.98F; + this.motionX *= (double)var8; + this.motionZ *= (double)var8; + } + + this.field_9142_bc = this.field_9141_bd; + var3 = this.posX - this.prevPosX; + double var10 = this.posZ - this.prevPosZ; + float var7 = MathHelper.sqrt_double(var3 * var3 + var10 * var10) * 4.0F; + if(var7 > 1.0F) { + var7 = 1.0F; + } + + this.field_9141_bd += (var7 - this.field_9141_bd) * 0.4F; + this.field_386_ba += this.field_9141_bd; + } + + public boolean func_144_E() { + 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.field_9109_aQ); + var1.setShort("HurtTime", (short)this.field_9107_aS); + var1.setShort("DeathTime", (short)this.field_9104_aV); + var1.setShort("AttackTime", (short)this.field_9103_aW); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.field_9109_aQ = var1.getShort("Health"); + if(!var1.hasKey("Health")) { + this.field_9109_aQ = 10; + } + + this.field_9107_aS = var1.getShort("HurtTime"); + this.field_9104_aV = var1.getShort("DeathTime"); + this.field_9103_aW = var1.getShort("AttackTime"); + } + + public boolean func_120_t() { + return !this.field_304_B && this.field_9109_aQ > 0; + } + + public void onLivingUpdate() { + if(this.field_9140_bf > 0) { + double var1 = this.posX + (this.field_9139_bg - this.posX) / (double)this.field_9140_bf; + double var3 = this.posY + (this.field_9138_bh - this.posY) / (double)this.field_9140_bf; + double var5 = this.posZ + (this.field_9137_bi - this.posZ) / (double)this.field_9140_bf; + + double var7; + for(var7 = this.field_9136_bj - (double)this.rotationYaw; var7 < -180.0D; var7 += 360.0D) { + } + + while(var7 >= 180.0D) { + var7 -= 360.0D; + } + + this.rotationYaw = (float)((double)this.rotationYaw + var7 / (double)this.field_9140_bf); + this.rotationPitch = (float)((double)this.rotationPitch + (this.field_9135_bk - (double)this.rotationPitch) / (double)this.field_9140_bf); + --this.field_9140_bf; + this.setPosition(var1, var3, var5); + this.setRotation(this.rotationYaw, this.rotationPitch); + } + + if(this.field_9109_aQ <= 0) { + this.field_9128_br = false; + this.field_9131_bo = 0.0F; + this.field_9130_bp = 0.0F; + this.field_9129_bq = 0.0F; + } else if(!this.field_9112_aN) { + this.func_152_d_(); + } + + boolean var9 = this.handleWaterMovement(); + boolean var2 = this.func_112_q(); + if(this.field_9128_br) { + if(var9) { + this.motionY += (double)0.04F; + } else if(var2) { + this.motionY += (double)0.04F; + } else if(this.onGround) { + this.func_154_F(); + } + } + + this.field_9131_bo *= 0.98F; + this.field_9130_bp *= 0.98F; + this.field_9129_bq *= 0.9F; + this.func_148_c(this.field_9131_bo, this.field_9130_bp); + List var10 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expands((double)0.2F, 0.0D, (double)0.2F)); + if(var10 != null && var10.size() > 0) { + for(int var4 = 0; var4 < var10.size(); ++var4) { + Entity var11 = (Entity)var10.get(var4); + if(var11.func_124_r()) { + var11.applyEntityCollision(this); + } + } + } + + } + + protected void func_154_F() { + this.motionY = (double)0.42F; + } + + protected void func_152_d_() { + ++this.field_9132_bn; + EntityPlayer var1 = this.worldObj.getClosestPlayerToEntity(this, -1.0D); + if(var1 != null) { + double var2 = var1.posX - this.posX; + double var4 = var1.posY - this.posY; + double var6 = var1.posZ - this.posZ; + double var8 = var2 * var2 + var4 * var4 + var6 * var6; + if(var8 > 16384.0D) { + this.setEntityDead(); + } + + if(this.field_9132_bn > 600 && this.field_9064_W.nextInt(800) == 0) { + if(var8 < 1024.0D) { + this.field_9132_bn = 0; + } else { + this.setEntityDead(); + } + } + } + + this.field_9131_bo = 0.0F; + this.field_9130_bp = 0.0F; + float var10 = 8.0F; + if(this.field_9064_W.nextFloat() < 0.02F) { + var1 = this.worldObj.getClosestPlayerToEntity(this, (double)var10); + if(var1 != null) { + this.b = var1; + this.c = 10 + this.field_9064_W.nextInt(20); + } else { + this.field_9129_bq = (this.field_9064_W.nextFloat() - 0.5F) * 20.0F; + } + } + + if(this.b != null) { + this.func_147_b(this.b, 10.0F); + if(this.c-- <= 0 || this.b.field_304_B || this.b.getDistanceSqToEntity(this) > (double)(var10 * var10)) { + this.b = null; + } + } else { + if(this.field_9064_W.nextFloat() < 0.05F) { + this.field_9129_bq = (this.field_9064_W.nextFloat() - 0.5F) * 20.0F; + } + + this.rotationYaw += this.field_9129_bq; + this.rotationPitch = this.field_9127_bs; + } + + boolean var3 = this.handleWaterMovement(); + boolean var11 = this.func_112_q(); + if(var3 || var11) { + this.field_9128_br = this.field_9064_W.nextFloat() < 0.8F; + } + + } + + public void func_147_b(Entity var1, float var2) { + double var3 = var1.posX - this.posX; + double var7 = var1.posZ - this.posZ; + double var5; + if(var1 instanceof EntityLiving) { + EntityLiving var9 = (EntityLiving)var1; + var5 = var9.posY + (double)var9.func_104_p() - (this.posY + (double)this.func_104_p()); + } else { + var5 = (var1.boundingBox.minY + var1.boundingBox.maxY) / 2.0D - (this.posY + (double)this.func_104_p()); + } + + double var13 = (double)MathHelper.sqrt_double(var3 * var3 + var7 * var7); + float var11 = (float)(Math.atan2(var7, var3) * 180.0D / (double)((float)Math.PI)) - 90.0F; + float var12 = (float)(Math.atan2(var5, var13) * 180.0D / (double)((float)Math.PI)); + this.rotationPitch = -this.func_140_b(this.rotationPitch, var12, var2); + this.rotationYaw = this.func_140_b(this.rotationYaw, var11, var2); + } + + private float func_140_b(float var1, float var2, float var3) { + float var4; + for(var4 = var2 - var1; var4 < -180.0F; var4 += 360.0F) { + } + + while(var4 >= 180.0F) { + var4 -= 360.0F; + } + + if(var4 > var3) { + var4 = var3; + } + + if(var4 < -var3) { + var4 = -var3; + } + + return var1 + var4; + } + + public void func_6101_K() { + } + + public boolean getCanSpawnHere() { + return this.worldObj.func_522_a(this.boundingBox) && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).size() == 0 && !this.worldObj.getIsAnyLiquid(this.boundingBox); + } + + protected void func_4043_o() { + this.attackEntity((Entity)null, 4); + } + + public Vec3D func_4039_B() { + return this.func_141_d(1.0F); + } + + public Vec3D func_141_d(float var1) { + float var2; + float var3; + float var4; + float var5; + if(var1 == 1.0F) { + var2 = MathHelper.cos(-this.rotationYaw * ((float)Math.PI / 180.0F) - (float)Math.PI); + var3 = MathHelper.sin(-this.rotationYaw * ((float)Math.PI / 180.0F) - (float)Math.PI); + var4 = -MathHelper.cos(-this.rotationPitch * ((float)Math.PI / 180.0F)); + var5 = MathHelper.sin(-this.rotationPitch * ((float)Math.PI / 180.0F)); + return Vec3D.createVector((double)(var3 * var4), (double)var5, (double)(var2 * var4)); + } else { + var2 = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * var1; + var3 = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * var1; + var4 = MathHelper.cos(-var3 * ((float)Math.PI / 180.0F) - (float)Math.PI); + var5 = MathHelper.sin(-var3 * ((float)Math.PI / 180.0F) - (float)Math.PI); + float var6 = -MathHelper.cos(-var2 * ((float)Math.PI / 180.0F)); + float var7 = MathHelper.sin(-var2 * ((float)Math.PI / 180.0F)); + return Vec3D.createVector((double)(var5 * var6), (double)var7, (double)(var4 * var6)); + } + } + + public int func_4045_i() { + return 4; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityMinecart.java b/minecraft_server/src/net/minecraft/src/EntityMinecart.java new file mode 100644 index 0000000..e4713fe --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityMinecart.java @@ -0,0 +1,601 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityMinecart extends Entity implements IInventory { + private ItemStack[] cargoItems; + public int field_9168_a; + public int field_9167_b; + public int field_477_ad; + private boolean field_469_aj; + public int minecartType; + public int field_9165_e; + public double field_9164_f; + public double field_9166_aj; + private static final int[][][] field_468_ak = new int[][][]{{{0, 0, -1}, {0, 0, 1}}, {{-1, 0, 0}, {1, 0, 0}}, {{-1, -1, 0}, {1, 0, 0}}, {{-1, 0, 0}, {1, -1, 0}}, {{0, 0, -1}, {0, -1, 1}}, {{0, -1, -1}, {0, 0, 1}}, {{0, 0, 1}, {1, 0, 0}}, {{0, 0, 1}, {-1, 0, 0}}, {{0, 0, -1}, {-1, 0, 0}}, {{0, 0, -1}, {1, 0, 0}}}; + private int field_9163_an; + private double field_9162_ao; + private double field_9161_ap; + private double field_9160_aq; + private double field_9159_ar; + private double field_9158_as; + + public EntityMinecart(World var1) { + super(var1); + this.cargoItems = new ItemStack[36]; + this.field_9168_a = 0; + this.field_9167_b = 0; + this.field_477_ad = 1; + this.field_469_aj = false; + this.field_329_e = true; + this.setSize(0.98F, 0.7F); + this.yOffset = this.height / 2.0F; + this.entityWalks = false; + } + + public AxisAlignedBB func_89_d(Entity var1) { + return var1.boundingBox; + } + + public AxisAlignedBB func_93_n() { + return null; + } + + public boolean func_124_r() { + return true; + } + + public EntityMinecart(World var1, double var2, double var4, double var6, int var8) { + 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; + this.minecartType = var8; + } + + public double func_130_h() { + return (double)this.height * 0.0D - (double)0.3F; + } + + public boolean attackEntity(Entity var1, int var2) { + if(!this.worldObj.multiplayerWorld && !this.field_304_B) { + this.field_477_ad = -this.field_477_ad; + this.field_9167_b = 10; + this.func_9060_u(); + this.field_9168_a += var2 * 10; + if(this.field_9168_a > 40) { + this.dropItemWithOffset(Item.minecartEmpty.swiftedIndex, 1, 0.0F); + if(this.minecartType == 1) { + this.dropItemWithOffset(Block.crate.blockID, 1, 0.0F); + } else if(this.minecartType == 2) { + this.dropItemWithOffset(Block.stoneOvenIdle.blockID, 1, 0.0F); + } + + this.setEntityDead(); + } + + return true; + } else { + return true; + } + } + + public boolean func_129_c_() { + return !this.field_304_B; + } + + public void setEntityDead() { + for(int var1 = 0; var1 < this.func_83_a(); ++var1) { + ItemStack var2 = this.getStackInSlot(var1); + if(var2 != null) { + float var3 = this.field_9064_W.nextFloat() * 0.8F + 0.1F; + float var4 = this.field_9064_W.nextFloat() * 0.8F + 0.1F; + float var5 = this.field_9064_W.nextFloat() * 0.8F + 0.1F; + + while(var2.stackSize > 0) { + int var6 = this.field_9064_W.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.itemDamage)); + float var8 = 0.05F; + var7.motionX = (double)((float)this.field_9064_W.nextGaussian() * var8); + var7.motionY = (double)((float)this.field_9064_W.nextGaussian() * var8 + 0.2F); + var7.motionZ = (double)((float)this.field_9064_W.nextGaussian() * var8); + this.worldObj.entityJoinedWorld(var7); + } + } + } + + super.setEntityDead(); + } + + public void onUpdate() { + if(this.field_9167_b > 0) { + --this.field_9167_b; + } + + if(this.field_9168_a > 0) { + --this.field_9168_a; + } + + double var7; + if(this.worldObj.multiplayerWorld && this.field_9163_an > 0) { + if(this.field_9163_an > 0) { + double var41 = this.posX + (this.field_9162_ao - this.posX) / (double)this.field_9163_an; + double var42 = this.posY + (this.field_9161_ap - this.posY) / (double)this.field_9163_an; + double var5 = this.posZ + (this.field_9160_aq - this.posZ) / (double)this.field_9163_an; + + for(var7 = this.field_9159_ar - (double)this.rotationYaw; var7 < -180.0D; var7 += 360.0D) { + } + + while(var7 >= 180.0D) { + var7 -= 360.0D; + } + + this.rotationYaw = (float)((double)this.rotationYaw + var7 / (double)this.field_9163_an); + this.rotationPitch = (float)((double)this.rotationPitch + (this.field_9158_as - (double)this.rotationPitch) / (double)this.field_9163_an); + --this.field_9163_an; + this.setPosition(var41, var42, var5); + this.setRotation(this.rotationYaw, this.rotationPitch); + } else { + this.setPosition(this.posX, this.posY, this.posZ); + this.setRotation(this.rotationYaw, this.rotationPitch); + } + + } else { + this.prevPosX = this.posX; + this.prevPosY = this.posY; + this.prevPosZ = this.posZ; + this.motionY -= (double)0.04F; + int 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; + boolean var6 = false; + var7 = 1.0D / 128.0D; + if(this.worldObj.getBlockId(var1, var2, var3) == Block.minecartTrack.blockID) { + Vec3D var9 = this.func_182_g(this.posX, this.posY, this.posZ); + int var10 = this.worldObj.getBlockMetadata(var1, var2, var3); + this.posY = (double)var2; + if(var10 >= 2 && var10 <= 5) { + this.posY = (double)(var2 + 1); + } + + if(var10 == 2) { + this.motionX -= var7; + } + + if(var10 == 3) { + this.motionX += var7; + } + + if(var10 == 4) { + this.motionZ += var7; + } + + if(var10 == 5) { + this.motionZ -= var7; + } + + int[][] var11 = field_468_ak[var10]; + double var12 = (double)(var11[1][0] - var11[0][0]); + double var14 = (double)(var11[1][2] - var11[0][2]); + double var16 = Math.sqrt(var12 * var12 + var14 * var14); + double var18 = this.motionX * var12 + this.motionZ * var14; + if(var18 < 0.0D) { + var12 = -var12; + var14 = -var14; + } + + double var20 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.motionX = var20 * var12 / var16; + this.motionZ = var20 * var14 / var16; + double var22 = 0.0D; + double var24 = (double)var1 + 0.5D + (double)var11[0][0] * 0.5D; + double var26 = (double)var3 + 0.5D + (double)var11[0][2] * 0.5D; + double var28 = (double)var1 + 0.5D + (double)var11[1][0] * 0.5D; + double var30 = (double)var3 + 0.5D + (double)var11[1][2] * 0.5D; + var12 = var28 - var24; + var14 = var30 - var26; + double var32; + double var34; + double var36; + if(var12 == 0.0D) { + this.posX = (double)var1 + 0.5D; + var22 = this.posZ - (double)var3; + } else if(var14 == 0.0D) { + this.posZ = (double)var3 + 0.5D; + var22 = this.posX - (double)var1; + } else { + var32 = this.posX - var24; + var34 = this.posZ - var26; + var36 = (var32 * var12 + var34 * var14) * 2.0D; + var22 = var36; + } + + this.posX = var24 + var12 * var22; + this.posZ = var26 + var14 * var22; + this.setPosition(this.posX, this.posY + (double)this.yOffset, this.posZ); + var32 = this.motionX; + var34 = this.motionZ; + if(this.field_328_f != null) { + var32 *= 0.75D; + var34 *= 0.75D; + } + + if(var32 < -var4) { + var32 = -var4; + } + + if(var32 > var4) { + var32 = var4; + } + + if(var34 < -var4) { + var34 = -var4; + } + + if(var34 > var4) { + var34 = var4; + } + + this.moveEntity(var32, 0.0D, var34); + if(var11[0][1] != 0 && MathHelper.floor_double(this.posX) - var1 == var11[0][0] && MathHelper.floor_double(this.posZ) - var3 == var11[0][2]) { + this.setPosition(this.posX, this.posY + (double)var11[0][1], this.posZ); + } else if(var11[1][1] != 0 && MathHelper.floor_double(this.posX) - var1 == var11[1][0] && MathHelper.floor_double(this.posZ) - var3 == var11[1][2]) { + this.setPosition(this.posX, this.posY + (double)var11[1][1], this.posZ); + } + + if(this.field_328_f != null) { + this.motionX *= (double)0.997F; + this.motionY *= 0.0D; + this.motionZ *= (double)0.997F; + } else { + if(this.minecartType == 2) { + var36 = (double)MathHelper.sqrt_double(this.field_9164_f * this.field_9164_f + this.field_9166_aj * this.field_9166_aj); + if(var36 > 0.01D) { + var6 = true; + this.field_9164_f /= var36; + this.field_9166_aj /= var36; + double var38 = 0.04D; + this.motionX *= (double)0.8F; + this.motionY *= 0.0D; + this.motionZ *= (double)0.8F; + this.motionX += this.field_9164_f * var38; + this.motionZ += this.field_9166_aj * var38; + } else { + this.motionX *= (double)0.9F; + this.motionY *= 0.0D; + this.motionZ *= (double)0.9F; + } + } + + this.motionX *= (double)0.96F; + this.motionY *= 0.0D; + this.motionZ *= (double)0.96F; + } + + Vec3D var46 = this.func_182_g(this.posX, this.posY, this.posZ); + if(var46 != null && var9 != null) { + double var37 = (var9.yCoord - var46.yCoord) * 0.05D; + var20 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + if(var20 > 0.0D) { + this.motionX = this.motionX / var20 * (var20 + var37); + this.motionZ = this.motionZ / var20 * (var20 + var37); + } + + this.setPosition(this.posX, var46.yCoord, this.posZ); + } + + int var47 = MathHelper.floor_double(this.posX); + int var48 = MathHelper.floor_double(this.posZ); + if(var47 != var1 || var48 != var3) { + var20 = Math.sqrt(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.motionX = var20 * (double)(var47 - var1); + this.motionZ = var20 * (double)(var48 - var3); + } + + if(this.minecartType == 2) { + double var39 = (double)MathHelper.sqrt_double(this.field_9164_f * this.field_9164_f + this.field_9166_aj * this.field_9166_aj); + if(var39 > 0.01D && this.motionX * this.motionX + this.motionZ * this.motionZ > 0.001D) { + this.field_9164_f /= var39; + this.field_9166_aj /= var39; + if(this.field_9164_f * this.motionX + this.field_9166_aj * this.motionZ < 0.0D) { + this.field_9164_f = 0.0D; + this.field_9166_aj = 0.0D; + } else { + this.field_9164_f = this.motionX; + this.field_9166_aj = this.motionZ; + } + } + } + } 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 var43 = this.prevPosX - this.posX; + double var44 = this.prevPosZ - this.posZ; + if(var43 * var43 + var44 * var44 > 0.001D) { + this.rotationYaw = (float)(Math.atan2(var44, var43) * 180.0D / Math.PI); + if(this.field_469_aj) { + this.rotationYaw += 180.0F; + } + } + + double var13; + for(var13 = (double)(this.rotationYaw - this.prevRotationYaw); var13 >= 180.0D; var13 -= 360.0D) { + } + + while(var13 < -180.0D) { + var13 += 360.0D; + } + + if(var13 < -170.0D || var13 >= 170.0D) { + this.rotationYaw += 180.0F; + this.field_469_aj = !this.field_469_aj; + } + + this.setRotation(this.rotationYaw, this.rotationPitch); + List var15 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expands((double)0.2F, 0.0D, (double)0.2F)); + if(var15 != null && var15.size() > 0) { + for(int var45 = 0; var45 < var15.size(); ++var45) { + Entity var17 = (Entity)var15.get(var45); + if(var17 != this.field_328_f && var17.func_124_r() && var17 instanceof EntityMinecart) { + var17.applyEntityCollision(this); + } + } + } + + if(this.field_328_f != null && this.field_328_f.field_304_B) { + this.field_328_f = null; + } + + if(var6 && this.field_9064_W.nextInt(4) == 0) { + --this.field_9165_e; + if(this.field_9165_e < 0) { + this.field_9164_f = this.field_9166_aj = 0.0D; + } + + this.worldObj.spawnParticle("largesmoke", this.posX, this.posY + 0.8D, this.posZ, 0.0D, 0.0D, 0.0D); + } + + } + } + + public Vec3D func_182_g(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 = field_468_ak[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) { + var1.setInteger("Type", this.minecartType); + if(this.minecartType == 2) { + var1.setDouble("PushX", this.field_9164_f); + var1.setDouble("PushZ", this.field_9166_aj); + var1.setShort("Fuel", (short)this.field_9165_e); + } else if(this.minecartType == 1) { + 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) { + this.minecartType = var1.getInteger("Type"); + if(this.minecartType == 2) { + this.field_9164_f = var1.getDouble("PushX"); + this.field_9166_aj = var1.getDouble("PushZ"); + this.field_9165_e = var1.getShort("Fuel"); + } else if(this.minecartType == 1) { + NBTTagList var2 = var1.getTagList("Items"); + this.cargoItems = new ItemStack[this.func_83_a()]; + + 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(!this.worldObj.multiplayerWorld) { + if(var1 != this.field_328_f) { + if(var1 instanceof EntityLiving && !(var1 instanceof EntityPlayer) && this.minecartType == 0 && this.motionX * this.motionX + this.motionZ * this.motionZ > 0.01D && this.field_328_f == null && var1.field_327_g == null) { + var1.func_6094_e(this); + } + + double var2 = var1.posX - this.posX; + double var4 = var1.posZ - this.posZ; + double var6 = var2 * var2 + var4 * var4; + if(var6 >= (double)1.0E-4F) { + var6 = (double)MathHelper.sqrt_double(var6); + var2 /= var6; + var4 /= var6; + double var8 = 1.0D / var6; + if(var8 > 1.0D) { + var8 = 1.0D; + } + + var2 *= var8; + var4 *= var8; + var2 *= (double)0.1F; + var4 *= (double)0.1F; + var2 *= (double)(1.0F - this.field_286_P); + var4 *= (double)(1.0F - this.field_286_P); + var2 *= 0.5D; + var4 *= 0.5D; + if(var1 instanceof EntityMinecart) { + double var10 = var1.motionX + this.motionX; + double var12 = var1.motionZ + this.motionZ; + if(((EntityMinecart)var1).minecartType == 2 && this.minecartType != 2) { + this.motionX *= (double)0.2F; + this.motionZ *= (double)0.2F; + this.addVelocity(var1.motionX - var2, 0.0D, var1.motionZ - var4); + var1.motionX *= (double)0.7F; + var1.motionZ *= (double)0.7F; + } else if(((EntityMinecart)var1).minecartType != 2 && this.minecartType == 2) { + var1.motionX *= (double)0.2F; + var1.motionZ *= (double)0.2F; + var1.addVelocity(this.motionX + var2, 0.0D, this.motionZ + var4); + this.motionX *= (double)0.7F; + this.motionZ *= (double)0.7F; + } else { + var10 /= 2.0D; + var12 /= 2.0D; + this.motionX *= (double)0.2F; + this.motionZ *= (double)0.2F; + this.addVelocity(var10 - var2, 0.0D, var12 - var4); + var1.motionX *= (double)0.2F; + var1.motionZ *= (double)0.2F; + 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 func_83_a() { + return 27; + } + + public ItemStack getStackInSlot(int var1) { + return this.cargoItems[var1]; + } + + public boolean func_6092_a(EntityPlayer var1) { + if(this.minecartType == 0) { + if(this.field_328_f != null && this.field_328_f instanceof EntityPlayer && this.field_328_f != var1) { + return true; + } + + if(!this.worldObj.multiplayerWorld) { + var1.func_6094_e(this); + } + } else if(this.minecartType == 1) { + var1.func_166_a(this); + } else if(this.minecartType == 2) { + ItemStack var2 = var1.inventory.getCurrentItem(); + if(var2 != null && var2.itemID == Item.coal.swiftedIndex) { + if(--var2.stackSize == 0) { + var1.inventory.setInventorySlotContents(var1.inventory.currentItem, (ItemStack)null); + } + + this.field_9165_e += 1200; + } + + this.field_9164_f = this.posX - var1.posX; + this.field_9166_aj = this.posZ - var1.posZ; + } + + return true; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityMobs.java b/minecraft_server/src/net/minecraft/src/EntityMobs.java new file mode 100644 index 0000000..437b723 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityMobs.java @@ -0,0 +1,80 @@ +package net.minecraft.src; + +public class EntityMobs extends EntityCreature implements IMobs { + protected int field_404_af = 2; + + public EntityMobs(World var1) { + super(var1); + this.field_9109_aQ = 20; + } + + public void onLivingUpdate() { + float var1 = this.getEntityBrightness(1.0F); + if(var1 > 0.5F) { + this.field_9132_bn += 2; + } + + super.onLivingUpdate(); + } + + public void onUpdate() { + super.onUpdate(); + if(this.worldObj.monstersEnabled == 0) { + this.setEntityDead(); + } + + } + + protected Entity func_158_i() { + EntityPlayer var1 = this.worldObj.getClosestPlayerToEntity(this, 16.0D); + return var1 != null && this.func_145_g(var1) ? var1 : null; + } + + public boolean attackEntity(Entity var1, int var2) { + if(super.attackEntity(var1, var2)) { + if(this.field_328_f != var1 && this.field_327_g != var1) { + if(var1 != this) { + this.field_389_ag = var1; + } + + return true; + } else { + return true; + } + } else { + return false; + } + } + + protected void func_157_a(Entity var1, float var2) { + if((double)var2 < 2.5D && var1.boundingBox.maxY > this.boundingBox.minY && var1.boundingBox.minY < this.boundingBox.maxY) { + this.field_9103_aW = 20; + var1.attackEntity(this, this.field_404_af); + } + + } + + protected float func_159_a(int var1, int var2, int var3) { + return 0.5F - this.worldObj.getLightBrightness(var1, var2, var3); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + public boolean getCanSpawnHere() { + int var1 = MathHelper.floor_double(this.posX); + int var2 = MathHelper.floor_double(this.boundingBox.minY); + int var3 = MathHelper.floor_double(this.posZ); + if(this.worldObj.getSavedLightValue(EnumSkyBlock.Sky, var1, var2, var3) > this.field_9064_W.nextInt(32)) { + return false; + } else { + int var4 = this.worldObj.getBlockLightValue(var1, var2, var3); + return var4 <= this.field_9064_W.nextInt(8) && super.getCanSpawnHere(); + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityPainting.java b/minecraft_server/src/net/minecraft/src/EntityPainting.java new file mode 100644 index 0000000..e55bef5 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityPainting.java @@ -0,0 +1,213 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +public class EntityPainting extends Entity { + private int field_452_ad; + public int field_448_a; + private int field_9188_d; + private int field_9187_e; + private int field_9186_f; + public EnumArt field_9185_b; + + public EntityPainting(World var1) { + super(var1); + this.field_452_ad = 0; + this.field_448_a = 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.field_9188_d = var2; + this.field_9187_e = var3; + this.field_9186_f = 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.field_9185_b = var10; + this.func_179_a(var5); + if(this.func_181_b()) { + var6.add(var10); + } + } + + if(var6.size() > 0) { + this.field_9185_b = (EnumArt)var6.get(this.field_9064_W.nextInt(var6.size())); + } + + this.func_179_a(var5); + } + + public void func_179_a(int var1) { + this.field_448_a = var1; + this.prevRotationYaw = this.rotationYaw = (float)(var1 * 90); + float var2 = (float)this.field_9185_b.field_856_z; + float var3 = (float)this.field_9185_b.field_869_A; + float var4 = (float)this.field_9185_b.field_856_z; + 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.field_9188_d + 0.5F; + float var6 = (float)this.field_9187_e + 0.5F; + float var7 = (float)this.field_9186_f + 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.func_180_c(this.field_9185_b.field_856_z); + } + + if(var1 == 1) { + var7 += this.func_180_c(this.field_9185_b.field_856_z); + } + + if(var1 == 2) { + var5 += this.func_180_c(this.field_9185_b.field_856_z); + } + + if(var1 == 3) { + var7 -= this.func_180_c(this.field_9185_b.field_856_z); + } + + var6 += this.func_180_c(this.field_9185_b.field_869_A); + 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 func_180_c(int var1) { + return var1 == 32 ? 0.5F : (var1 == 64 ? 0.5F : 0.0F); + } + + public void onUpdate() { + if(this.field_452_ad++ == 100 && !this.func_181_b()) { + this.field_452_ad = 0; + this.setEntityDead(); + this.worldObj.entityJoinedWorld(new EntityItem(this.worldObj, this.posX, this.posY, this.posZ, new ItemStack(Item.painting))); + } + + } + + public boolean func_181_b() { + if(this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).size() > 0) { + return false; + } else { + int var1 = this.field_9185_b.field_856_z / 16; + int var2 = this.field_9185_b.field_869_A / 16; + int var3 = this.field_9188_d; + int var4 = this.field_9187_e; + int var5 = this.field_9186_f; + if(this.field_448_a == 0) { + var3 = MathHelper.floor_double(this.posX - (double)((float)this.field_9185_b.field_856_z / 32.0F)); + } + + if(this.field_448_a == 1) { + var5 = MathHelper.floor_double(this.posZ - (double)((float)this.field_9185_b.field_856_z / 32.0F)); + } + + if(this.field_448_a == 2) { + var3 = MathHelper.floor_double(this.posX - (double)((float)this.field_9185_b.field_856_z / 32.0F)); + } + + if(this.field_448_a == 3) { + var5 = MathHelper.floor_double(this.posZ - (double)((float)this.field_9185_b.field_856_z / 32.0F)); + } + + var4 = MathHelper.floor_double(this.posY - (double)((float)this.field_9185_b.field_869_A / 32.0F)); + + int var7; + for(int var6 = 0; var6 < var1; ++var6) { + for(var7 = 0; var7 < var2; ++var7) { + Material var8; + if(this.field_448_a != 0 && this.field_448_a != 2) { + var8 = this.worldObj.getBlockMaterial(this.field_9188_d, var4 + var7, var5 + var6); + } else { + var8 = this.worldObj.getBlockMaterial(var3 + var6, var4 + var7, this.field_9186_f); + } + + if(!var8.func_216_a()) { + 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 func_129_c_() { + return true; + } + + public boolean attackEntity(Entity var1, int var2) { + this.setEntityDead(); + this.func_9060_u(); + this.worldObj.entityJoinedWorld(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.field_448_a); + var1.setString("Motive", this.field_9185_b.field_857_y); + var1.setInteger("TileX", this.field_9188_d); + var1.setInteger("TileY", this.field_9187_e); + var1.setInteger("TileZ", this.field_9186_f); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.field_448_a = var1.getByte("Dir"); + this.field_9188_d = var1.getInteger("TileX"); + this.field_9187_e = var1.getInteger("TileY"); + this.field_9186_f = 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.field_857_y.equals(var2)) { + this.field_9185_b = var6; + } + } + + if(this.field_9185_b == null) { + this.field_9185_b = EnumArt.Kebab; + } + + this.func_179_a(this.field_448_a); + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityPig.java b/minecraft_server/src/net/minecraft/src/EntityPig.java new file mode 100644 index 0000000..10282c6 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityPig.java @@ -0,0 +1,47 @@ +package net.minecraft.src; + +public class EntityPig extends EntityAnimals { + public boolean rideable = false; + + public EntityPig(World var1) { + super(var1); + this.field_9119_aG = "/mob/pig.png"; + this.setSize(0.9F, 0.9F); + this.rideable = false; + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setBoolean("Saddle", this.rideable); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.rideable = var1.getBoolean("Saddle"); + } + + protected String getLivingSound() { + return "mob.pig"; + } + + protected String getHurtSound() { + return "mob.pig"; + } + + protected String getDeathSound() { + return "mob.pigdeath"; + } + + public boolean func_6092_a(EntityPlayer var1) { + if(this.rideable) { + var1.func_6094_e(this); + return true; + } else { + return false; + } + } + + protected int getDropItemId() { + return Item.porkRaw.swiftedIndex; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityPigZombie.java b/minecraft_server/src/net/minecraft/src/EntityPigZombie.java new file mode 100644 index 0000000..5dc9f9a --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityPigZombie.java @@ -0,0 +1,88 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityPigZombie extends EntityZombie { + private int field_4106_a = 0; + private int field_4105_b = 0; + private static final ItemStack field_4107_c = new ItemStack(Item.swordGold, 1); + + public EntityPigZombie(World var1) { + super(var1); + this.field_9119_aG = "/mob/pigzombie.png"; + this.field_9126_bt = 0.5F; + this.field_404_af = 5; + this.field_9079_ae = true; + } + + public void onUpdate() { + this.field_9126_bt = this.field_389_ag != null ? 0.95F : 0.5F; + if(this.field_4105_b > 0 && --this.field_4105_b == 0) { + this.worldObj.playSoundAtEntity(this, "mob.zombiepig.zpigangry", this.getSoundVolume() * 2.0F, ((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F) * 1.8F); + } + + super.onUpdate(); + } + + public boolean getCanSpawnHere() { + return this.worldObj.monstersEnabled > 0 && this.worldObj.func_522_a(this.boundingBox) && this.worldObj.getCollidingBoundingBoxes(this, this.boundingBox).size() == 0 && !this.worldObj.getIsAnyLiquid(this.boundingBox); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setShort("Anger", (short)this.field_4106_a); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.field_4106_a = var1.getShort("Anger"); + } + + protected Entity func_158_i() { + return this.field_4106_a == 0 ? null : super.func_158_i(); + } + + public void onLivingUpdate() { + super.onLivingUpdate(); + } + + public boolean attackEntity(Entity var1, int var2) { + if(var1 instanceof EntityPlayer) { + List var3 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expands(32.0D, 32.0D, 32.0D)); + + for(int var4 = 0; var4 < var3.size(); ++var4) { + Entity var5 = (Entity)var3.get(var4); + if(var5 instanceof EntityPigZombie) { + EntityPigZombie var6 = (EntityPigZombie)var5; + var6.func_4047_h(var1); + } + } + + this.func_4047_h(var1); + } + + return super.attackEntity(var1, var2); + } + + private void func_4047_h(Entity var1) { + this.field_389_ag = var1; + this.field_4106_a = 400 + this.field_9064_W.nextInt(400); + this.field_4105_b = this.field_9064_W.nextInt(40); + } + + protected String getLivingSound() { + return "mob.zombiepig.zpig"; + } + + protected String getHurtSound() { + return "mob.zombiepig.zpighurt"; + } + + protected String getDeathSound() { + return "mob.zombiepig.zpigdeath"; + } + + protected int getDropItemId() { + return Item.porkCooked.swiftedIndex; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityPlayer.java b/minecraft_server/src/net/minecraft/src/EntityPlayer.java new file mode 100644 index 0000000..97e0e24 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityPlayer.java @@ -0,0 +1,266 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntityPlayer extends EntityLiving { + public InventoryPlayer inventory = new InventoryPlayer(this); + public byte field_9152_am = 0; + public int field_9151_an = 0; + public float field_9150_ao; + public float field_9149_ap; + public boolean field_9148_aq = false; + public int field_9147_ar = 0; + public String username; + public int field_4110_as; + private int a = 0; + public EntityFish field_6124_at = null; + + public EntityPlayer(World var1) { + super(var1); + this.yOffset = 1.62F; + this.func_107_c((double)var1.spawnX + 0.5D, (double)(var1.spawnY + 1), (double)var1.spawnZ + 0.5D, 0.0F, 0.0F); + this.field_9109_aQ = 20; + this.field_9116_aJ = "humanoid"; + this.field_9117_aI = 180.0F; + this.field_9062_Y = 20; + this.field_9119_aG = "/mob/char.png"; + } + + public void func_115_v() { + super.func_115_v(); + this.field_9150_ao = this.field_9149_ap; + this.field_9149_ap = 0.0F; + } + + protected void func_152_d_() { + if(this.field_9148_aq) { + ++this.field_9147_ar; + if(this.field_9147_ar == 8) { + this.field_9147_ar = 0; + this.field_9148_aq = false; + } + } else { + this.field_9147_ar = 0; + } + + this.field_9110_aP = (float)this.field_9147_ar / 8.0F; + } + + public void onLivingUpdate() { + if(this.worldObj.monstersEnabled == 0 && this.field_9109_aQ < 20 && this.field_9063_X % 20 * 4 == 0) { + this.heal(1); + } + + this.inventory.decrementAnimations(); + this.field_9150_ao = this.field_9149_ap; + 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.field_9109_aQ <= 0) { + var1 = 0.0F; + } + + if(this.onGround || this.field_9109_aQ <= 0) { + var2 = 0.0F; + } + + this.field_9149_ap += (var1 - this.field_9149_ap) * 0.4F; + this.field_9101_aY += (var2 - this.field_9101_aY) * 0.8F; + if(this.field_9109_aQ > 0) { + List var3 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.expands(1.0D, 0.0D, 1.0D)); + if(var3 != null) { + for(int var4 = 0; var4 < var3.size(); ++var4) { + this.func_171_h((Entity)var3.get(var4)); + } + } + } + + } + + private void func_171_h(Entity var1) { + var1.onCollideWithPlayer(this); + } + + public void onDeath(Entity var1) { + super.onDeath(var1); + this.setSize(0.2F, 0.2F); + this.setPosition(this.posX, this.posY, this.posZ); + this.motionY = (double)0.1F; + if(this.username.equals("Notch")) { + this.func_169_a(new ItemStack(Item.appleRed, 1), true); + } + + this.inventory.dropAllItems(); + if(var1 != null) { + this.motionX = (double)(-MathHelper.cos((this.field_9105_aU + this.rotationYaw) * (float)Math.PI / 180.0F) * 0.1F); + this.motionZ = (double)(-MathHelper.sin((this.field_9105_aU + this.rotationYaw) * (float)Math.PI / 180.0F) * 0.1F); + } else { + this.motionX = this.motionZ = 0.0D; + } + + this.yOffset = 0.1F; + } + + public void func_96_b(Entity var1, int var2) { + this.field_9151_an += var2; + } + + public void func_161_a(ItemStack var1) { + this.func_169_a(var1, false); + } + + public void func_169_a(ItemStack var1, boolean var2) { + if(var1 != null) { + EntityItem var3 = new EntityItem(this.worldObj, this.posX, this.posY - (double)0.3F + (double)this.func_104_p(), this.posZ, var1); + var3.field_433_ad = 40; + float var4 = 0.1F; + float var5; + if(var2) { + var5 = this.field_9064_W.nextFloat() * 0.5F; + float var6 = this.field_9064_W.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.field_9064_W.nextFloat() * (float)Math.PI * 2.0F; + var4 *= this.field_9064_W.nextFloat(); + var3.motionX += Math.cos((double)var5) * (double)var4; + var3.motionY += (double)((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.1F); + var3.motionZ += Math.sin((double)var5) * (double)var4; + } + + this.func_162_a(var3); + } + } + + protected void func_162_a(EntityItem var1) { + this.worldObj.entityJoinedWorld(var1); + } + + 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 func_167_b(Block var1) { + return this.inventory.canHarvestBlock(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + NBTTagList var2 = var1.getTagList("Inventory"); + this.inventory.readFromNBT(var2); + this.field_4110_as = var1.getInteger("Dimension"); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setTag("Inventory", this.inventory.writeToNBT(new NBTTagList())); + var1.setInteger("Dimension", this.field_4110_as); + } + + public void func_166_a(IInventory var1) { + } + + public void func_174_A() { + } + + public void func_163_c(Entity var1, int var2) { + } + + public float func_104_p() { + return 0.12F; + } + + public boolean attackEntity(Entity var1, int var2) { + this.field_9132_bn = 0; + if(this.field_9109_aQ <= 0) { + return false; + } else { + if(var1 instanceof EntityMobs || var1 instanceof EntityArrow) { + if(this.worldObj.monstersEnabled == 0) { + var2 = 0; + } + + if(this.worldObj.monstersEnabled == 1) { + var2 = var2 / 3 + 1; + } + + if(this.worldObj.monstersEnabled == 3) { + var2 = var2 * 3 / 2; + } + } + + return var2 == 0 ? false : super.attackEntity(var1, var2); + } + } + + protected void func_6099_c(int var1) { + int var2 = 25 - this.inventory.getTotalArmorValue(); + int var3 = var1 * var2 + this.a; + this.inventory.damageArmor(var1); + var1 = var3 / 25; + this.a = var3 % 25; + super.func_6099_c(var1); + } + + public void func_170_a(TileEntityFurnace var1) { + } + + public void func_4048_a(TileEntitySign var1) { + } + + public void func_9145_g(Entity var1) { + var1.func_6092_a(this); + } + + public ItemStack func_172_B() { + return this.inventory.getCurrentItem(); + } + + public void func_164_C() { + this.inventory.setInventorySlotContents(this.inventory.currentItem, (ItemStack)null); + } + + public double func_117_x() { + return (double)(this.yOffset - 0.5F); + } + + public void func_168_z() { + this.field_9147_ar = -1; + this.field_9148_aq = true; + } + + public void func_9146_h(Entity var1) { + int var2 = this.inventory.func_9157_a(var1); + if(var2 > 0) { + var1.attackEntity(this, var2); + ItemStack var3 = this.func_172_B(); + if(var3 != null && var1 instanceof EntityLiving) { + var3.func_9217_a((EntityLiving)var1); + if(var3.stackSize <= 0) { + var3.func_577_a(this); + this.func_164_C(); + } + } + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityPlayerMP.java b/minecraft_server/src/net/minecraft/src/EntityPlayerMP.java new file mode 100644 index 0000000..57415e6 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityPlayerMP.java @@ -0,0 +1,169 @@ +package net.minecraft.src; + +import java.util.HashSet; +import java.util.LinkedList; +import java.util.List; +import java.util.Set; +import net.minecraft.server.MinecraftServer; + +public class EntityPlayerMP extends EntityPlayer { + public NetServerHandler field_421_a; + public MinecraftServer mcServer; + public ItemInWorldManager field_425_ad; + public double field_9155_d; + public double field_9154_e; + public List field_422_ag = new LinkedList(); + public Set field_420_ah = new HashSet(); + public double field_418_ai; + public boolean field_12012_al = false; + private int field_9156_bu = -99999999; + private int field_15004_bw = 60; + + public EntityPlayerMP(MinecraftServer var1, World var2, String var3, ItemInWorldManager var4) { + super(var2); + int var5 = var2.spawnX; + int var6 = var2.spawnZ; + int var7 = var2.spawnY; + if(!var2.field_4272_q.field_4306_c) { + var5 += this.field_9064_W.nextInt(20) - 10; + var7 = var2.func_4075_e(var5, var6); + var6 += this.field_9064_W.nextInt(20) - 10; + } + + this.func_107_c((double)var5 + 0.5D, (double)var7, (double)var6 + 0.5D, 0.0F, 0.0F); + this.mcServer = var1; + this.field_9067_S = 0.0F; + var4.field_675_a = this; + this.username = var3; + this.field_425_ad = var4; + this.yOffset = 0.0F; + } + + public void onUpdate() { + --this.field_15004_bw; + } + + public void onDeath(Entity var1) { + this.inventory.dropAllItems(); + } + + public boolean attackEntity(Entity var1, int var2) { + if(this.field_15004_bw > 0) { + return false; + } else { + if(!this.mcServer.field_9011_n) { + if(var1 instanceof EntityPlayer) { + return false; + } + + if(var1 instanceof EntityArrow) { + EntityArrow var3 = (EntityArrow)var1; + if(var3.field_439_ah instanceof EntityPlayer) { + return false; + } + } + } + + return super.attackEntity(var1, var2); + } + } + + public void heal(int var1) { + super.heal(var1); + } + + public void func_175_i() { + super.onUpdate(); + ChunkCoordIntPair var1 = null; + double var2 = 0.0D; + + for(int var4 = 0; var4 < this.field_422_ag.size(); ++var4) { + ChunkCoordIntPair var5 = (ChunkCoordIntPair)this.field_422_ag.get(var4); + double var6 = var5.func_73_a(this); + if(var4 == 0 || var6 < var2) { + var1 = var5; + var2 = var5.func_73_a(this); + } + } + + if(var1 != null) { + boolean var8 = false; + if(var2 < 1024.0D) { + var8 = true; + } + + if(this.field_421_a.func_38_b() < 2) { + var8 = true; + } + + if(var8) { + this.field_422_ag.remove(var1); + this.field_421_a.sendPacket(new Packet51MapChunk(var1.field_152_a * 16, 0, var1.field_151_b * 16, 16, 128, 16, this.mcServer.worldMngr)); + List var9 = this.mcServer.worldMngr.func_532_d(var1.field_152_a * 16, 0, var1.field_151_b * 16, var1.field_152_a * 16 + 16, 128, var1.field_151_b * 16 + 16); + + for(int var10 = 0; var10 < var9.size(); ++var10) { + TileEntity var7 = (TileEntity)var9.get(var10); + this.field_421_a.sendPacket(new Packet59ComplexEntity(var7.xCoord, var7.yCoord, var7.zCoord, var7)); + } + } + } + + if(this.field_9109_aQ != this.field_9156_bu) { + this.field_421_a.sendPacket(new Packet8(this.field_9109_aQ)); + this.field_9156_bu = this.field_9109_aQ; + } + + } + + public void onLivingUpdate() { + this.motionX = this.motionY = this.motionZ = 0.0D; + this.field_9128_br = false; + super.onLivingUpdate(); + } + + public void func_163_c(Entity var1, int var2) { + if(!var1.field_304_B) { + if(var1 instanceof EntityItem) { + this.field_421_a.sendPacket(new Packet17AddToInventory(((EntityItem)var1).item, var2)); + this.mcServer.field_6028_k.func_12021_a(var1, new Packet22Collect(var1.field_331_c, this.field_331_c)); + } + + if(var1 instanceof EntityArrow) { + this.field_421_a.sendPacket(new Packet17AddToInventory(new ItemStack(Item.arrow), 1)); + this.mcServer.field_6028_k.func_12021_a(var1, new Packet22Collect(var1.field_331_c, this.field_331_c)); + } + } + + super.func_163_c(var1, var2); + } + + public void func_168_z() { + if(!this.field_9148_aq) { + this.field_9147_ar = -1; + this.field_9148_aq = true; + this.mcServer.field_6028_k.func_12021_a(this, new Packet18ArmAnimation(this, 1)); + } + + } + + public float func_104_p() { + return 1.62F; + } + + public void func_6094_e(Entity var1) { + super.func_6094_e(var1); + this.field_421_a.sendPacket(new Packet39(this, this.field_327_g)); + this.field_421_a.func_41_a(this.posX, this.posY, this.posZ, this.rotationYaw, this.rotationPitch); + } + + protected void interact(double var1, boolean var3) { + } + + public void func_9153_b(double var1, boolean var3) { + super.interact(var1, var3); + } + + public boolean func_9059_p() { + return this.field_12012_al; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntitySheep.java b/minecraft_server/src/net/minecraft/src/EntitySheep.java new file mode 100644 index 0000000..10b5b9e --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntitySheep.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +public class EntitySheep extends EntityAnimals { + public boolean sheared = false; + + public EntitySheep(World var1) { + super(var1); + this.field_9119_aG = "/mob/sheep.png"; + this.setSize(0.9F, 1.3F); + } + + public boolean attackEntity(Entity var1, int var2) { + if(!this.worldObj.multiplayerWorld && !this.sheared && var1 instanceof EntityLiving) { + this.sheared = true; + int var3 = 1 + this.field_9064_W.nextInt(3); + + for(int var4 = 0; var4 < var3; ++var4) { + EntityItem var5 = this.dropItemWithOffset(Block.cloth.blockID, 1, 1.0F); + var5.motionY += (double)(this.field_9064_W.nextFloat() * 0.05F); + var5.motionX += (double)((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.1F); + var5.motionZ += (double)((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.1F); + } + } + + return super.attackEntity(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/minecraft_server/src/net/minecraft/src/EntitySkeleton.java b/minecraft_server/src/net/minecraft/src/EntitySkeleton.java new file mode 100644 index 0000000..f2f3b93 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntitySkeleton.java @@ -0,0 +1,66 @@ +package net.minecraft.src; + +public class EntitySkeleton extends EntityMobs { + private static final ItemStack field_4108_a = new ItemStack(Item.bow, 1); + + public EntitySkeleton(World var1) { + super(var1); + this.field_9119_aG = "/mob/skeleton.png"; + } + + protected String getLivingSound() { + return "mob.skeleton"; + } + + protected String getHurtSound() { + return "mob.skeletonhurt"; + } + + protected String getDeathSound() { + return "mob.skeletonhurt"; + } + + 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.field_9064_W.nextFloat() * 30.0F < (var1 - 0.4F) * 2.0F) { + this.field_9061_Z = 300; + } + } + + super.onLivingUpdate(); + } + + protected void func_157_a(Entity var1, float var2) { + if(var2 < 10.0F) { + double var3 = var1.posX - this.posX; + double var5 = var1.posZ - this.posZ; + if(this.field_9103_aW == 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.field_9064_W.nextFloat() * 0.4F + 0.8F)); + this.worldObj.entityJoinedWorld(var7); + var7.func_177_a(var3, var8 + (double)var10, var5, 0.6F, 12.0F); + this.field_9103_aW = 30; + } + + this.rotationYaw = (float)(Math.atan2(var5, var3) * 180.0D / (double)((float)Math.PI)) - 90.0F; + this.field_387_ah = true; + } + + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + protected int getDropItemId() { + return Item.arrow.swiftedIndex; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntitySlime.java b/minecraft_server/src/net/minecraft/src/EntitySlime.java new file mode 100644 index 0000000..882d973 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntitySlime.java @@ -0,0 +1,129 @@ +package net.minecraft.src; + +public class EntitySlime extends EntityLiving implements IMobs { + public float field_401_a; + public float field_400_b; + private int field_402_ae = 0; + public int field_403_ad = 1; + + public EntitySlime(World var1) { + super(var1); + this.field_9119_aG = "/mob/slime.png"; + this.field_403_ad = 1 << this.field_9064_W.nextInt(3); + this.yOffset = 0.0F; + this.field_402_ae = this.field_9064_W.nextInt(20) + 10; + this.func_160_c(this.field_403_ad); + } + + public void func_160_c(int var1) { + this.field_403_ad = var1; + this.setSize(0.6F * (float)var1, 0.6F * (float)var1); + this.field_9109_aQ = var1 * var1; + this.setPosition(this.posX, this.posY, this.posZ); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + var1.setInteger("Size", this.field_403_ad - 1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + this.field_403_ad = var1.getInteger("Size") + 1; + } + + public void onUpdate() { + this.field_400_b = this.field_401_a; + boolean var1 = this.onGround; + super.onUpdate(); + if(this.onGround && !var1) { + for(int var2 = 0; var2 < this.field_403_ad * 8; ++var2) { + float var3 = this.field_9064_W.nextFloat() * (float)Math.PI * 2.0F; + float var4 = this.field_9064_W.nextFloat() * 0.5F + 0.5F; + float var5 = MathHelper.sin(var3) * (float)this.field_403_ad * 0.5F * var4; + float var6 = MathHelper.cos(var3) * (float)this.field_403_ad * 0.5F * var4; + this.worldObj.spawnParticle("slime", this.posX + (double)var5, this.boundingBox.minY, this.posZ + (double)var6, 0.0D, 0.0D, 0.0D); + } + + if(this.field_403_ad > 2) { + this.worldObj.playSoundAtEntity(this, "mob.slime", this.getSoundVolume(), ((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F) / 0.8F); + } + + this.field_401_a = -0.5F; + } + + this.field_401_a *= 0.6F; + } + + protected void func_152_d_() { + EntityPlayer var1 = this.worldObj.getClosestPlayerToEntity(this, 16.0D); + if(var1 != null) { + this.func_147_b(var1, 10.0F); + } + + if(this.onGround && this.field_402_ae-- <= 0) { + this.field_402_ae = this.field_9064_W.nextInt(20) + 10; + if(var1 != null) { + this.field_402_ae /= 3; + } + + this.field_9128_br = true; + if(this.field_403_ad > 1) { + this.worldObj.playSoundAtEntity(this, "mob.slime", this.getSoundVolume(), ((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F) * 0.8F); + } + + this.field_401_a = 1.0F; + this.field_9131_bo = 1.0F - this.field_9064_W.nextFloat() * 2.0F; + this.field_9130_bp = (float)(1 * this.field_403_ad); + } else { + this.field_9128_br = false; + if(this.onGround) { + this.field_9131_bo = this.field_9130_bp = 0.0F; + } + } + + } + + public void setEntityDead() { + if(this.field_403_ad > 1 && this.field_9109_aQ == 0) { + for(int var1 = 0; var1 < 4; ++var1) { + float var2 = ((float)(var1 % 2) - 0.5F) * (float)this.field_403_ad / 4.0F; + float var3 = ((float)(var1 / 2) - 0.5F) * (float)this.field_403_ad / 4.0F; + EntitySlime var4 = new EntitySlime(this.worldObj); + var4.func_160_c(this.field_403_ad / 2); + var4.func_107_c(this.posX + (double)var2, this.posY + 0.5D, this.posZ + (double)var3, this.field_9064_W.nextFloat() * 360.0F, 0.0F); + this.worldObj.entityJoinedWorld(var4); + } + } + + super.setEntityDead(); + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(this.field_403_ad > 1 && this.func_145_g(var1) && (double)this.getDistanceToEntity(var1) < 0.6D * (double)this.field_403_ad && var1.attackEntity(this, this.field_403_ad)) { + this.worldObj.playSoundAtEntity(this, "mob.slimeattack", 1.0F, (this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.2F + 1.0F); + } + + } + + protected String getHurtSound() { + return "mob.slime"; + } + + protected String getDeathSound() { + return "mob.slime"; + } + + protected int getDropItemId() { + return this.field_403_ad == 1 ? Item.slimeBall.swiftedIndex : 0; + } + + public boolean getCanSpawnHere() { + Chunk var1 = this.worldObj.getChunkFromBlockCoords(MathHelper.floor_double(this.posX), MathHelper.floor_double(this.posZ)); + return (this.field_403_ad == 1 || this.worldObj.monstersEnabled > 0) && this.field_9064_W.nextInt(10) == 0 && var1.func_334_a(987234911L).nextInt(10) == 0 && this.posY < 16.0D; + } + + protected float getSoundVolume() { + return 0.6F; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntitySnowball.java b/minecraft_server/src/net/minecraft/src/EntitySnowball.java new file mode 100644 index 0000000..1c57765 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntitySnowball.java @@ -0,0 +1,201 @@ +package net.minecraft.src; + +import java.util.List; + +public class EntitySnowball extends Entity { + private int field_456_b = -1; + private int field_461_ad = -1; + private int field_460_ae = -1; + private int field_459_af = 0; + private boolean field_457_ag = false; + public int field_458_a = 0; + private EntityLiving field_455_ah; + private int field_454_ai; + private int field_453_aj = 0; + + public EntitySnowball(World var1) { + super(var1); + this.setSize(0.25F, 0.25F); + } + + public EntitySnowball(World var1, EntityLiving var2) { + super(var1); + this.field_455_ah = var2; + this.setSize(0.25F, 0.25F); + this.func_107_c(var2.posX, var2.posY + (double)var2.func_104_p(), var2.posZ, var2.rotationYaw, var2.rotationPitch); + this.posX -= (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.posY -= (double)0.1F; + this.posZ -= (double)(MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * 0.16F); + this.setPosition(this.posX, this.posY, this.posZ); + this.yOffset = 0.0F; + float var3 = 0.4F; + this.motionX = (double)(-MathHelper.sin(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.motionZ = (double)(MathHelper.cos(this.rotationYaw / 180.0F * (float)Math.PI) * MathHelper.cos(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.motionY = (double)(-MathHelper.sin(this.rotationPitch / 180.0F * (float)Math.PI) * var3); + this.func_6141_a(this.motionX, this.motionY, this.motionZ, 1.5F, 1.0F); + } + + public void func_6141_a(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.field_9064_W.nextGaussian() * (double)0.0075F * (double)var8; + var3 += this.field_9064_W.nextGaussian() * (double)0.0075F * (double)var8; + var5 += this.field_9064_W.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.field_454_ai = 0; + } + + public void onUpdate() { + this.field_9071_O = this.posX; + this.field_9070_P = this.posY; + this.field_9069_Q = this.posZ; + super.onUpdate(); + if(this.field_458_a > 0) { + --this.field_458_a; + } + + if(this.field_457_ag) { + int var1 = this.worldObj.getBlockId(this.field_456_b, this.field_461_ad, this.field_460_ae); + if(var1 == this.field_459_af) { + ++this.field_454_ai; + if(this.field_454_ai == 1200) { + this.setEntityDead(); + } + + return; + } + + this.field_457_ag = false; + this.motionX *= (double)(this.field_9064_W.nextFloat() * 0.2F); + this.motionY *= (double)(this.field_9064_W.nextFloat() * 0.2F); + this.motionZ *= (double)(this.field_9064_W.nextFloat() * 0.2F); + this.field_454_ai = 0; + this.field_453_aj = 0; + } else { + ++this.field_453_aj; + } + + 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.func_486_a(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); + } + + if(!this.worldObj.multiplayerWorld) { + Entity var4 = null; + List var5 = this.worldObj.getEntitiesWithinAABBExcludingEntity(this, this.boundingBox.addCoord(this.motionX, this.motionY, this.motionZ).expands(1.0D, 1.0D, 1.0D)); + double var6 = 0.0D; + + for(int var8 = 0; var8 < var5.size(); ++var8) { + Entity var9 = (Entity)var5.get(var8); + if(var9.func_129_c_() && (var9 != this.field_455_ah || this.field_453_aj >= 5)) { + float var10 = 0.3F; + AxisAlignedBB var11 = var9.boundingBox.expands((double)var10, (double)var10, (double)var10); + MovingObjectPosition var12 = var11.func_706_a(var15, var2); + if(var12 != null) { + double var13 = var15.distanceTo(var12.hitVec); + if(var13 < var6 || var6 == 0.0D) { + var4 = var9; + var6 = var13; + } + } + } + } + + if(var4 != null) { + var3 = new MovingObjectPosition(var4); + } + } + + if(var3 != null) { + if(var3.entityHit != null && var3.entityHit.attackEntity(this.field_455_ah, 0)) { + } + + for(int var16 = 0; var16 < 8; ++var16) { + this.worldObj.spawnParticle("snowballpoof", this.posX, this.posY, this.posZ, 0.0D, 0.0D, 0.0D); + } + + this.setEntityDead(); + } + + this.posX += this.motionX; + this.posY += this.motionY; + this.posZ += this.motionZ; + float var17 = MathHelper.sqrt_double(this.motionX * this.motionX + this.motionZ * this.motionZ); + this.rotationYaw = (float)(Math.atan2(this.motionX, this.motionZ) * 180.0D / (double)((float)Math.PI)); + + for(this.rotationPitch = (float)(Math.atan2(this.motionY, (double)var17) * 180.0D / (double)((float)Math.PI)); this.rotationPitch - this.prevRotationPitch < -180.0F; this.prevRotationPitch -= 360.0F) { + } + + while(this.rotationPitch - this.prevRotationPitch >= 180.0F) { + this.prevRotationPitch += 360.0F; + } + + while(this.rotationYaw - this.prevRotationYaw < -180.0F) { + this.prevRotationYaw -= 360.0F; + } + + while(this.rotationYaw - this.prevRotationYaw >= 180.0F) { + this.prevRotationYaw += 360.0F; + } + + this.rotationPitch = this.prevRotationPitch + (this.rotationPitch - this.prevRotationPitch) * 0.2F; + this.rotationYaw = this.prevRotationYaw + (this.rotationYaw - this.prevRotationYaw) * 0.2F; + float var18 = 0.99F; + float var19 = 0.03F; + if(this.handleWaterMovement()) { + for(int var7 = 0; var7 < 4; ++var7) { + float var20 = 0.25F; + this.worldObj.spawnParticle("bubble", this.posX - this.motionX * (double)var20, this.posY - this.motionY * (double)var20, this.posZ - this.motionZ * (double)var20, this.motionX, this.motionY, this.motionZ); + } + + var18 = 0.8F; + } + + this.motionX *= (double)var18; + this.motionY *= (double)var18; + this.motionZ *= (double)var18; + this.motionY -= (double)var19; + this.setPosition(this.posX, this.posY, this.posZ); + } + + public void writeEntityToNBT(NBTTagCompound var1) { + var1.setShort("xTile", (short)this.field_456_b); + var1.setShort("yTile", (short)this.field_461_ad); + var1.setShort("zTile", (short)this.field_460_ae); + var1.setByte("inTile", (byte)this.field_459_af); + var1.setByte("shake", (byte)this.field_458_a); + var1.setByte("inGround", (byte)(this.field_457_ag ? 1 : 0)); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + this.field_456_b = var1.getShort("xTile"); + this.field_461_ad = var1.getShort("yTile"); + this.field_460_ae = var1.getShort("zTile"); + this.field_459_af = var1.getByte("inTile") & 255; + this.field_458_a = var1.getByte("shake") & 255; + this.field_457_ag = var1.getByte("inGround") == 1; + } + + public void onCollideWithPlayer(EntityPlayer var1) { + if(this.field_457_ag && this.field_455_ah == var1 && this.field_458_a <= 0 && var1.inventory.addItemStackToInventory(new ItemStack(Item.arrow.swiftedIndex, 1))) { + this.worldObj.playSoundAtEntity(this, "random.pop", 0.2F, ((this.field_9064_W.nextFloat() - this.field_9064_W.nextFloat()) * 0.7F + 1.0F) * 2.0F); + var1.func_163_c(this, 1); + this.setEntityDead(); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntitySpider.java b/minecraft_server/src/net/minecraft/src/EntitySpider.java new file mode 100644 index 0000000..97b4929 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntitySpider.java @@ -0,0 +1,69 @@ +package net.minecraft.src; + +public class EntitySpider extends EntityMobs { + public EntitySpider(World var1) { + super(var1); + this.field_9119_aG = "/mob/spider.png"; + this.setSize(1.4F, 0.9F); + this.field_9126_bt = 0.8F; + } + + public double func_130_h() { + return (double)this.height * 0.75D - 0.5D; + } + + protected Entity func_158_i() { + float var1 = this.getEntityBrightness(1.0F); + if(var1 < 0.5F) { + double var2 = 16.0D; + return this.worldObj.getClosestPlayerToEntity(this, var2); + } else { + return null; + } + } + + protected String getLivingSound() { + return "mob.spider"; + } + + protected String getHurtSound() { + return "mob.spider"; + } + + protected String getDeathSound() { + return "mob.spiderdeath"; + } + + protected void func_157_a(Entity var1, float var2) { + float var3 = this.getEntityBrightness(1.0F); + if(var3 > 0.5F && this.field_9064_W.nextInt(100) == 0) { + this.field_389_ag = null; + } else { + if(var2 > 2.0F && var2 < 6.0F && this.field_9064_W.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.func_157_a(var1, var2); + } + + } + } + + public void writeEntityToNBT(NBTTagCompound var1) { + super.writeEntityToNBT(var1); + } + + public void readEntityFromNBT(NBTTagCompound var1) { + super.readEntityFromNBT(var1); + } + + protected int getDropItemId() { + return Item.silk.swiftedIndex; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityTNTPrimed.java b/minecraft_server/src/net/minecraft/src/EntityTNTPrimed.java new file mode 100644 index 0000000..62b57ce --- /dev/null +++ b/minecraft_server/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.field_329_e = true; + this.setSize(0.98F, 0.98F); + this.yOffset = this.height / 2.0F; + } + + public EntityTNTPrimed(World var1, double var2, double var4, double var6) { + this(var1); + this.setPosition(var2, var4, var6); + float var8 = (float)(Math.random() * (double)((float)Math.PI) * 2.0D); + this.motionX = (double)(-MathHelper.sin(var8 * (float)Math.PI / 180.0F) * 0.02F); + this.motionY = (double)0.2F; + this.motionZ = (double)(-MathHelper.cos(var8 * (float)Math.PI / 180.0F) * 0.02F); + this.entityWalks = false; + this.fuse = 80; + this.prevPosX = var2; + this.prevPosY = var4; + this.prevPosZ = var6; + } + + public boolean func_129_c_() { + return !this.field_304_B; + } + + 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.explode(); + } else { + this.worldObj.spawnParticle("smoke", this.posX, this.posY + 0.5D, this.posZ, 0.0D, 0.0D, 0.0D); + } + + } + + private void explode() { + float var1 = 4.0F; + this.worldObj.func_12013_a((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/minecraft_server/src/net/minecraft/src/EntityTracker.java b/minecraft_server/src/net/minecraft/src/EntityTracker.java new file mode 100644 index 0000000..2689fff --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityTracker.java @@ -0,0 +1,141 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import net.minecraft.server.MinecraftServer; + +public class EntityTracker { + private Set field_911_a = new HashSet(); + private MCHashTable field_910_b = new MCHashTable(); + private MinecraftServer mcServer; + private int field_912_d; + + public EntityTracker(MinecraftServer var1) { + this.mcServer = var1; + this.field_912_d = var1.configManager.func_640_a(); + } + + public void func_611_a(Entity var1) { + if(var1 instanceof EntityPlayerMP) { + this.func_6187_a(var1, 512, 2); + EntityPlayerMP var2 = (EntityPlayerMP)var1; + Iterator var3 = this.field_911_a.iterator(); + + while(var3.hasNext()) { + EntityTrackerEntry var4 = (EntityTrackerEntry)var3.next(); + if(var4.field_909_a != var2) { + var4.func_606_a(var2); + } + } + } else if(var1 instanceof EntityFish) { + this.func_6186_a(var1, 64, 5, true); + } else if(var1 instanceof EntityArrow) { + this.func_6186_a(var1, 64, 5, true); + } else if(var1 instanceof EntitySnowball) { + this.func_6186_a(var1, 64, 5, true); + } else if(var1 instanceof EntityItem) { + this.func_6186_a(var1, 64, 20, true); + } else if(var1 instanceof EntityMinecart) { + this.func_6186_a(var1, 160, 5, true); + } else if(var1 instanceof EntityBoat) { + this.func_6186_a(var1, 160, 5, true); + } else if(var1 instanceof IAnimals) { + this.func_6187_a(var1, 160, 3); + } else if(var1 instanceof EntityTNTPrimed) { + this.func_6186_a(var1, 160, 10, true); + } + + } + + public void func_6187_a(Entity var1, int var2, int var3) { + this.func_6186_a(var1, var2, var3, false); + } + + public void func_6186_a(Entity var1, int var2, int var3, boolean var4) { + if(var2 > this.field_912_d) { + var2 = this.field_912_d; + } + + if(this.field_910_b.containsItem(var1.field_331_c)) { + throw new IllegalStateException("Entity is already tracked!"); + } else { + EntityTrackerEntry var5 = new EntityTrackerEntry(var1, var2, var3, var4); + this.field_911_a.add(var5); + this.field_910_b.addKey(var1.field_331_c, var5); + var5.func_601_b(this.mcServer.worldMngr.playerEntities); + } + } + + public void func_610_b(Entity var1) { + if(var1 instanceof EntityPlayerMP) { + EntityPlayerMP var2 = (EntityPlayerMP)var1; + Iterator var3 = this.field_911_a.iterator(); + + while(var3.hasNext()) { + EntityTrackerEntry var4 = (EntityTrackerEntry)var3.next(); + var4.func_12019_a(var2); + } + } + + EntityTrackerEntry var5 = (EntityTrackerEntry)this.field_910_b.removeObject(var1.field_331_c); + if(var5 != null) { + this.field_911_a.remove(var5); + var5.func_604_a(); + } + + } + + public void func_607_a() { + ArrayList var1 = new ArrayList(); + Iterator var2 = this.field_911_a.iterator(); + + while(var2.hasNext()) { + EntityTrackerEntry var3 = (EntityTrackerEntry)var2.next(); + var3.func_605_a(this.mcServer.worldMngr.playerEntities); + if(var3.field_900_j && var3.field_909_a instanceof EntityPlayerMP) { + var1.add((EntityPlayerMP)var3.field_909_a); + } + } + + for(int var6 = 0; var6 < var1.size(); ++var6) { + EntityPlayerMP var7 = (EntityPlayerMP)var1.get(var6); + Iterator var4 = this.field_911_a.iterator(); + + while(var4.hasNext()) { + EntityTrackerEntry var5 = (EntityTrackerEntry)var4.next(); + if(var5.field_909_a != var7) { + var5.func_606_a(var7); + } + } + } + + } + + public void func_12021_a(Entity var1, Packet var2) { + EntityTrackerEntry var3 = (EntityTrackerEntry)this.field_910_b.lookup(var1.field_331_c); + if(var3 != null) { + var3.func_603_a(var2); + } + + } + + public void func_609_a(Entity var1, Packet var2) { + EntityTrackerEntry var3 = (EntityTrackerEntry)this.field_910_b.lookup(var1.field_331_c); + if(var3 != null) { + var3.func_12018_b(var2); + } + + } + + public void func_9238_a(EntityPlayerMP var1) { + Iterator var2 = this.field_911_a.iterator(); + + while(var2.hasNext()) { + EntityTrackerEntry var3 = (EntityTrackerEntry)var2.next(); + var3.func_9219_b(var1); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityTrackerEntry.java b/minecraft_server/src/net/minecraft/src/EntityTrackerEntry.java new file mode 100644 index 0000000..69b50e2 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityTrackerEntry.java @@ -0,0 +1,266 @@ +package net.minecraft.src; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +public class EntityTrackerEntry { + public Entity field_909_a; + public boolean field_9237_b = false; + public boolean field_9236_c = false; + public boolean field_9225_n = false; + public int field_9235_d; + public int field_9234_e; + public int field_9233_f; + public int field_9232_g; + public int field_9231_h; + public int field_9230_i; + public int field_9229_j; + public double field_9228_k; + public double field_9227_l; + public double field_9226_m; + public int field_9221_t = 0; + private double field_9224_q; + private double field_9223_r; + private double field_9222_s; + private boolean field_12020_u = false; + private boolean field_9220_u; + public boolean field_900_j = false; + public Set field_899_k = new HashSet(); + + public EntityTrackerEntry(Entity var1, int var2, int var3, boolean var4) { + this.field_909_a = var1; + this.field_9235_d = var2; + this.field_9234_e = var3; + this.field_9220_u = var4; + this.field_9233_f = MathHelper.floor_double(var1.posX * 32.0D); + this.field_9232_g = MathHelper.floor_double(var1.posY * 32.0D); + this.field_9231_h = MathHelper.floor_double(var1.posZ * 32.0D); + this.field_9230_i = MathHelper.floor_float(var1.rotationYaw * 256.0F / 360.0F); + this.field_9229_j = MathHelper.floor_float(var1.rotationPitch * 256.0F / 360.0F); + } + + public boolean equals(Object var1) { + return var1 instanceof EntityTrackerEntry ? ((EntityTrackerEntry)var1).field_909_a.field_331_c == this.field_909_a.field_331_c : false; + } + + public int hashCode() { + return this.field_909_a.field_331_c; + } + + public void func_605_a(List var1) { + this.field_900_j = false; + if(!this.field_12020_u || this.field_909_a.getDistanceSq(this.field_9224_q, this.field_9223_r, this.field_9222_s) > 16.0D) { + this.field_9224_q = this.field_909_a.posX; + this.field_9223_r = this.field_909_a.posY; + this.field_9222_s = this.field_909_a.posZ; + this.field_12020_u = true; + this.field_900_j = true; + this.func_601_b(var1); + } + + if(this.field_9221_t++ % this.field_9234_e == 0) { + int var2 = MathHelper.floor_double(this.field_909_a.posX * 32.0D); + int var3 = MathHelper.floor_double(this.field_909_a.posY * 32.0D); + int var4 = MathHelper.floor_double(this.field_909_a.posZ * 32.0D); + int var5 = MathHelper.floor_float(this.field_909_a.rotationYaw * 256.0F / 360.0F); + int var6 = MathHelper.floor_float(this.field_909_a.rotationPitch * 256.0F / 360.0F); + boolean var7 = var2 != this.field_9233_f || var3 != this.field_9232_g || var4 != this.field_9231_h; + boolean var8 = var5 != this.field_9230_i || var6 != this.field_9229_j; + int var9 = var2 - this.field_9233_f; + int var10 = var3 - this.field_9232_g; + int var11 = var4 - this.field_9231_h; + Object var12 = null; + if(var9 >= -128 && var9 < 128 && var10 >= -128 && var10 < 128 && var11 >= -128 && var11 < 128) { + if(var7 && var8) { + var12 = new Packet33RelEntityMoveLook(this.field_909_a.field_331_c, (byte)var9, (byte)var10, (byte)var11, (byte)var5, (byte)var6); + } else if(var7) { + var12 = new Packet31RelEntityMove(this.field_909_a.field_331_c, (byte)var9, (byte)var10, (byte)var11); + } else if(var8) { + var12 = new Packet32EntityLook(this.field_909_a.field_331_c, (byte)var5, (byte)var6); + } else { + var12 = new Packet30Entity(this.field_909_a.field_331_c); + } + } else { + var12 = new Packet34EntityTeleport(this.field_909_a.field_331_c, var2, var3, var4, (byte)var5, (byte)var6); + } + + if(this.field_9220_u) { + double var13 = this.field_909_a.motionX - this.field_9228_k; + double var15 = this.field_909_a.motionY - this.field_9227_l; + double var17 = this.field_909_a.motionZ - this.field_9226_m; + double var19 = 0.02D; + double var21 = var13 * var13 + var15 * var15 + var17 * var17; + if(var21 > var19 * var19 || var21 > 0.0D && this.field_909_a.motionX == 0.0D && this.field_909_a.motionY == 0.0D && this.field_909_a.motionZ == 0.0D) { + this.field_9228_k = this.field_909_a.motionX; + this.field_9227_l = this.field_909_a.motionY; + this.field_9226_m = this.field_909_a.motionZ; + this.func_603_a(new Packet28(this.field_909_a.field_331_c, this.field_9228_k, this.field_9227_l, this.field_9226_m)); + } + } + + if(var12 != null) { + this.func_603_a((Packet)var12); + } + + if(this.field_9237_b && this.field_909_a.field_327_g == null) { + this.field_9237_b = false; + this.func_12018_b(new Packet18ArmAnimation(this.field_909_a, 101)); + } else if(!this.field_9237_b && this.field_909_a.field_327_g != null) { + this.field_9237_b = true; + this.func_12018_b(new Packet18ArmAnimation(this.field_909_a, 100)); + } + + if(this.field_909_a instanceof EntityLiving) { + if(this.field_9225_n && !this.field_909_a.func_9059_p()) { + this.field_9225_n = false; + this.func_12018_b(new Packet18ArmAnimation(this.field_909_a, 105)); + } else if(!this.field_9225_n && this.field_909_a.func_9059_p()) { + this.field_9225_n = true; + this.func_12018_b(new Packet18ArmAnimation(this.field_909_a, 104)); + } + } + + if(this.field_9236_c && this.field_909_a.field_9061_Z <= 0) { + this.field_9236_c = false; + this.func_12018_b(new Packet18ArmAnimation(this.field_909_a, 103)); + } else if(!this.field_9236_c && this.field_909_a.field_9061_Z > 0) { + this.field_9236_c = true; + this.func_12018_b(new Packet18ArmAnimation(this.field_909_a, 102)); + } + + this.field_9233_f = var2; + this.field_9232_g = var3; + this.field_9231_h = var4; + this.field_9230_i = var5; + this.field_9229_j = var6; + } + + if(this.field_909_a.field_9078_E) { + this.func_12018_b(new Packet28(this.field_909_a)); + this.field_909_a.field_9078_E = false; + } + + } + + public void func_603_a(Packet var1) { + Iterator var2 = this.field_899_k.iterator(); + + while(var2.hasNext()) { + EntityPlayerMP var3 = (EntityPlayerMP)var2.next(); + var3.field_421_a.sendPacket(var1); + } + + } + + public void func_12018_b(Packet var1) { + this.func_603_a(var1); + if(this.field_909_a instanceof EntityPlayerMP) { + ((EntityPlayerMP)this.field_909_a).field_421_a.sendPacket(var1); + } + + } + + public void func_604_a() { + this.func_603_a(new Packet29DestroyEntity(this.field_909_a.field_331_c)); + } + + public void func_12019_a(EntityPlayerMP var1) { + if(this.field_899_k.contains(var1)) { + this.field_899_k.remove(var1); + } + + } + + public void func_606_a(EntityPlayerMP var1) { + if(var1 != this.field_909_a) { + double var2 = var1.posX - (double)(this.field_9233_f / 32); + double var4 = var1.posZ - (double)(this.field_9231_h / 32); + if(var2 >= (double)(-this.field_9235_d) && var2 <= (double)this.field_9235_d && var4 >= (double)(-this.field_9235_d) && var4 <= (double)this.field_9235_d) { + if(!this.field_899_k.contains(var1)) { + this.field_899_k.add(var1); + var1.field_421_a.sendPacket(this.func_602_b()); + if(this.field_9225_n) { + var1.field_421_a.sendPacket(new Packet18ArmAnimation(this.field_909_a, 104)); + } + + if(this.field_9237_b) { + var1.field_421_a.sendPacket(new Packet18ArmAnimation(this.field_909_a, 100)); + } + + if(this.field_9236_c) { + var1.field_421_a.sendPacket(new Packet18ArmAnimation(this.field_909_a, 102)); + } + + if(this.field_9220_u) { + var1.field_421_a.sendPacket(new Packet28(this.field_909_a.field_331_c, this.field_909_a.motionX, this.field_909_a.motionY, this.field_909_a.motionZ)); + } + } + } else if(this.field_899_k.contains(var1)) { + this.field_899_k.remove(var1); + var1.field_421_a.sendPacket(new Packet29DestroyEntity(this.field_909_a.field_331_c)); + } + + } + } + + public void func_601_b(List var1) { + for(int var2 = 0; var2 < var1.size(); ++var2) { + this.func_606_a((EntityPlayerMP)var1.get(var2)); + } + + } + + private Packet func_602_b() { + if(this.field_909_a instanceof EntityItem) { + EntityItem var3 = (EntityItem)this.field_909_a; + Packet21PickupSpawn var2 = new Packet21PickupSpawn(var3); + var3.posX = (double)var2.xPosition / 32.0D; + var3.posY = (double)var2.yPosition / 32.0D; + var3.posZ = (double)var2.zPosition / 32.0D; + return var2; + } else if(this.field_909_a instanceof EntityPlayerMP) { + return new Packet20NamedEntitySpawn((EntityPlayer)this.field_909_a); + } else { + if(this.field_909_a instanceof EntityMinecart) { + EntityMinecart var1 = (EntityMinecart)this.field_909_a; + if(var1.minecartType == 0) { + return new Packet23VehicleSpawn(this.field_909_a, 10); + } + + if(var1.minecartType == 1) { + return new Packet23VehicleSpawn(this.field_909_a, 11); + } + + if(var1.minecartType == 2) { + return new Packet23VehicleSpawn(this.field_909_a, 12); + } + } + + if(this.field_909_a instanceof EntityBoat) { + return new Packet23VehicleSpawn(this.field_909_a, 1); + } else if(this.field_909_a instanceof IAnimals) { + return new Packet24MobSpawn((EntityLiving)this.field_909_a); + } else if(this.field_909_a instanceof EntityFish) { + return new Packet23VehicleSpawn(this.field_909_a, 90); + } else if(this.field_909_a instanceof EntityArrow) { + return new Packet23VehicleSpawn(this.field_909_a, 60); + } else if(this.field_909_a instanceof EntitySnowball) { + return new Packet23VehicleSpawn(this.field_909_a, 61); + } else if(this.field_909_a instanceof EntityTNTPrimed) { + return new Packet23VehicleSpawn(this.field_909_a, 50); + } else { + throw new IllegalArgumentException("Don\'t know how to add " + this.field_909_a.getClass() + "!"); + } + } + } + + public void func_9219_b(EntityPlayerMP var1) { + if(this.field_899_k.contains(var1)) { + this.field_899_k.remove(var1); + var1.field_421_a.sendPacket(new Packet29DestroyEntity(this.field_909_a.field_331_c)); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityZombie.java b/minecraft_server/src/net/minecraft/src/EntityZombie.java new file mode 100644 index 0000000..1dc7bc5 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityZombie.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +public class EntityZombie extends EntityMobs { + public EntityZombie(World var1) { + super(var1); + this.field_9119_aG = "/mob/zombie.png"; + this.field_9126_bt = 0.5F; + this.field_404_af = 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.field_9064_W.nextFloat() * 30.0F < (var1 - 0.4F) * 2.0F) { + this.field_9061_Z = 300; + } + } + + super.onLivingUpdate(); + } + + protected String getLivingSound() { + return "mob.zombie"; + } + + protected String getHurtSound() { + return "mob.zombiehurt"; + } + + protected String getDeathSound() { + return "mob.zombiedeath"; + } + + protected int getDropItemId() { + return Item.feather.swiftedIndex; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EntityZombieSimple.java b/minecraft_server/src/net/minecraft/src/EntityZombieSimple.java new file mode 100644 index 0000000..9f19e0b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EntityZombieSimple.java @@ -0,0 +1,17 @@ +package net.minecraft.src; + +public class EntityZombieSimple extends EntityMobs { + public EntityZombieSimple(World var1) { + super(var1); + this.field_9119_aG = "/mob/zombie.png"; + this.field_9126_bt = 0.5F; + this.field_404_af = 50; + this.field_9109_aQ *= 10; + this.yOffset *= 6.0F; + this.setSize(this.width * 6.0F, this.height * 6.0F); + } + + protected float func_159_a(int var1, int var2, int var3) { + return this.worldObj.getLightBrightness(var1, var2, var3) - 0.5F; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EnumArt.java b/minecraft_server/src/net/minecraft/src/EnumArt.java new file mode 100644 index 0000000..6aa7f0b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EnumArt.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +public enum EnumArt { + Kebab("Kebab", 16, 16, 0, 0), + Aztec("Aztec", 16, 16, 16, 0), + Alban("Alban", 16, 16, 32, 0), + Aztec2("Aztec2", 16, 16, 48, 0), + Bomb("Bomb", 16, 16, 64, 0), + Plant("Plant", 16, 16, 80, 0), + Wasteland("Wasteland", 16, 16, 96, 0), + Pool("Pool", 32, 16, 0, 32), + Courbet("Courbet", 32, 16, 32, 32), + Sea("Sea", 32, 16, 64, 32), + Sunset("Sunset", 32, 16, 96, 32), + Creebet("Creebet", 32, 16, 128, 32), + Wanderer("Wanderer", 16, 32, 0, 64), + Graham("Graham", 16, 32, 16, 64), + Match("Match", 32, 32, 0, 128), + Bust("Bust", 32, 32, 32, 128), + Stage("Stage", 32, 32, 64, 128), + Void("Void", 32, 32, 96, 128), + SkullAndRoses("SkullAndRoses", 32, 32, 128, 128), + Fighters("Fighters", 64, 32, 0, 96), + Pointer("Pointer", 64, 64, 0, 192), + Pigscene("Pigscene", 64, 64, 64, 192), + Skeleton("Skeleton", 64, 48, 192, 64), + DonkeyKong("DonkeyKong", 64, 48, 192, 112); + + public final String field_857_y; + public final int field_856_z; + public final int field_869_A; + public final int field_867_B; + public final int field_865_C; + + private EnumArt(String var3, int var4, int var5, int var6, int var7) { + this.field_857_y = var3; + this.field_856_z = var4; + this.field_869_A = var5; + this.field_867_B = var6; + this.field_865_C = var7; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EnumCreatureType.java b/minecraft_server/src/net/minecraft/src/EnumCreatureType.java new file mode 100644 index 0000000..c07b300 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EnumCreatureType.java @@ -0,0 +1,14 @@ +package net.minecraft.src; + +public enum EnumCreatureType { + monster(IMobs.class, 100), + creature(EntityAnimals.class, 20); + + public final Class field_4221_c; + public final int field_4220_d; + + private EnumCreatureType(Class var3, int var4) { + this.field_4221_c = var3; + this.field_4220_d = var4; + } +} diff --git a/minecraft_server/src/net/minecraft/src/EnumMobType.java b/minecraft_server/src/net/minecraft/src/EnumMobType.java new file mode 100644 index 0000000..609fdb7 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EnumMobType.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public enum EnumMobType { + everything, + mobs, + players; +} diff --git a/minecraft_server/src/net/minecraft/src/EnumSkyBlock.java b/minecraft_server/src/net/minecraft/src/EnumSkyBlock.java new file mode 100644 index 0000000..302c123 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/EnumSkyBlock.java @@ -0,0 +1,12 @@ +package net.minecraft.src; + +public enum EnumSkyBlock { + Sky(15), + Block(0); + + public final int field_984_c; + + private EnumSkyBlock(int var3) { + this.field_984_c = var3; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Explosion.java b/minecraft_server/src/net/minecraft/src/Explosion.java new file mode 100644 index 0000000..99314da --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Explosion.java @@ -0,0 +1,166 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Random; +import java.util.Set; + +public class Explosion { + public boolean field_12031_a = false; + private Random field_12024_h = new Random(); + private World field_4310_a; + public double field_12030_b; + public double field_12029_c; + public double field_12028_d; + public Entity field_12027_e; + public float field_12026_f; + public Set field_12025_g = new HashSet(); + + public Explosion(World var1, Entity var2, double var3, double var5, double var7, float var9) { + this.field_4310_a = var1; + this.field_12027_e = var2; + this.field_12026_f = var9; + this.field_12030_b = var3; + this.field_12029_c = var5; + this.field_12028_d = var7; + } + + public void func_12023_a() { + float var1 = this.field_12026_f; + byte var2 = 16; + + int var3; + int var4; + int var5; + double var15; + double var17; + double var19; + for(var3 = 0; var3 < var2; ++var3) { + for(var4 = 0; var4 < var2; ++var4) { + for(var5 = 0; var5 < var2; ++var5) { + if(var3 == 0 || var3 == var2 - 1 || var4 == 0 || var4 == var2 - 1 || var5 == 0 || var5 == var2 - 1) { + double var6 = (double)((float)var3 / ((float)var2 - 1.0F) * 2.0F - 1.0F); + double var8 = (double)((float)var4 / ((float)var2 - 1.0F) * 2.0F - 1.0F); + double var10 = (double)((float)var5 / ((float)var2 - 1.0F) * 2.0F - 1.0F); + double var12 = Math.sqrt(var6 * var6 + var8 * var8 + var10 * var10); + var6 /= var12; + var8 /= var12; + var10 /= var12; + float var14 = this.field_12026_f * (0.7F + this.field_4310_a.rand.nextFloat() * 0.6F); + var15 = this.field_12030_b; + var17 = this.field_12029_c; + var19 = this.field_12028_d; + + for(float var21 = 0.3F; var14 > 0.0F; var14 -= var21 * (12.0F / 16.0F)) { + int var22 = MathHelper.floor_double(var15); + int var23 = MathHelper.floor_double(var17); + int var24 = MathHelper.floor_double(var19); + int var25 = this.field_4310_a.getBlockId(var22, var23, var24); + if(var25 > 0) { + var14 -= (Block.blocksList[var25].func_226_a(this.field_12027_e) + 0.3F) * var21; + } + + if(var14 > 0.0F) { + this.field_12025_g.add(new ChunkPosition(var22, var23, var24)); + } + + var15 += var6 * (double)var21; + var17 += var8 * (double)var21; + var19 += var10 * (double)var21; + } + } + } + } + } + + this.field_12026_f *= 2.0F; + var3 = MathHelper.floor_double(this.field_12030_b - (double)this.field_12026_f - 1.0D); + var4 = MathHelper.floor_double(this.field_12030_b + (double)this.field_12026_f + 1.0D); + var5 = MathHelper.floor_double(this.field_12029_c - (double)this.field_12026_f - 1.0D); + int var29 = MathHelper.floor_double(this.field_12029_c + (double)this.field_12026_f + 1.0D); + int var7 = MathHelper.floor_double(this.field_12028_d - (double)this.field_12026_f - 1.0D); + int var30 = MathHelper.floor_double(this.field_12028_d + (double)this.field_12026_f + 1.0D); + List var9 = this.field_4310_a.getEntitiesWithinAABBExcludingEntity(this.field_12027_e, AxisAlignedBB.getBoundingBoxFromPool((double)var3, (double)var5, (double)var7, (double)var4, (double)var29, (double)var30)); + Vec3D var31 = Vec3D.createVector(this.field_12030_b, this.field_12029_c, this.field_12028_d); + + for(int var11 = 0; var11 < var9.size(); ++var11) { + Entity var33 = (Entity)var9.get(var11); + double var13 = var33.getDistance(this.field_12030_b, this.field_12029_c, this.field_12028_d) / (double)this.field_12026_f; + if(var13 <= 1.0D) { + var15 = var33.posX - this.field_12030_b; + var17 = var33.posY - this.field_12029_c; + var19 = var33.posZ - this.field_12028_d; + double var39 = (double)MathHelper.sqrt_double(var15 * var15 + var17 * var17 + var19 * var19); + var15 /= var39; + var17 /= var39; + var19 /= var39; + double var40 = (double)this.field_4310_a.func_494_a(var31, var33.boundingBox); + double var41 = (1.0D - var13) * var40; + var33.attackEntity(this.field_12027_e, (int)((var41 * var41 + var41) / 2.0D * 8.0D * (double)this.field_12026_f + 1.0D)); + var33.motionX += var15 * var41; + var33.motionY += var17 * var41; + var33.motionZ += var19 * var41; + } + } + + this.field_12026_f = var1; + ArrayList var32 = new ArrayList(); + var32.addAll(this.field_12025_g); + if(this.field_12031_a) { + for(int var34 = var32.size() - 1; var34 >= 0; --var34) { + ChunkPosition var35 = (ChunkPosition)var32.get(var34); + int var36 = var35.field_846_a; + int var37 = var35.field_845_b; + int var16 = var35.field_847_c; + int var38 = this.field_4310_a.getBlockId(var36, var37, var16); + int var18 = this.field_4310_a.getBlockId(var36, var37 - 1, var16); + if(var38 == 0 && Block.field_540_p[var18] && this.field_12024_h.nextInt(3) == 0) { + this.field_4310_a.setBlockWithNotify(var36, var37, var16, Block.fire.blockID); + } + } + } + + } + + public void func_732_a() { + this.field_4310_a.playSoundEffect(this.field_12030_b, this.field_12029_c, this.field_12028_d, "random.explode", 4.0F, (1.0F + (this.field_4310_a.rand.nextFloat() - this.field_4310_a.rand.nextFloat()) * 0.2F) * 0.7F); + ArrayList var1 = new ArrayList(); + var1.addAll(this.field_12025_g); + + for(int var2 = var1.size() - 1; var2 >= 0; --var2) { + ChunkPosition var3 = (ChunkPosition)var1.get(var2); + int var4 = var3.field_846_a; + int var5 = var3.field_845_b; + int var6 = var3.field_847_c; + int var7 = this.field_4310_a.getBlockId(var4, var5, var6); + + for(int var8 = 0; var8 < 1; ++var8) { + double var9 = (double)((float)var4 + this.field_4310_a.rand.nextFloat()); + double var11 = (double)((float)var5 + this.field_4310_a.rand.nextFloat()); + double var13 = (double)((float)var6 + this.field_4310_a.rand.nextFloat()); + double var15 = var9 - this.field_12030_b; + double var17 = var11 - this.field_12029_c; + double var19 = var13 - this.field_12028_d; + double var21 = (double)MathHelper.sqrt_double(var15 * var15 + var17 * var17 + var19 * var19); + var15 /= var21; + var17 /= var21; + var19 /= var21; + double var23 = 0.5D / (var21 / (double)this.field_12026_f + 0.1D); + var23 *= (double)(this.field_4310_a.rand.nextFloat() * this.field_4310_a.rand.nextFloat() + 0.3F); + var15 *= var23; + var17 *= var23; + var19 *= var23; + this.field_4310_a.spawnParticle("explode", (var9 + this.field_12030_b * 1.0D) / 2.0D, (var11 + this.field_12029_c * 1.0D) / 2.0D, (var13 + this.field_12028_d * 1.0D) / 2.0D, var15, var17, var19); + this.field_4310_a.spawnParticle("smoke", var9, var11, var13, var15, var17, var19); + } + + if(var7 > 0) { + Block.blocksList[var7].dropBlockAsItemWithChance(this.field_4310_a, var4, var5, var6, this.field_4310_a.getBlockMetadata(var4, var5, var6), 0.3F); + this.field_4310_a.setBlockWithNotify(var4, var5, var6, 0); + Block.blocksList[var7].onBlockDestroyedByExplosion(this.field_4310_a, var4, var5, var6); + } + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/GuiLogFormatter.java b/minecraft_server/src/net/minecraft/src/GuiLogFormatter.java new file mode 100644 index 0000000..d0868cc --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/GuiLogFormatter.java @@ -0,0 +1,46 @@ +package net.minecraft.src; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.logging.Formatter; +import java.util.logging.Level; +import java.util.logging.LogRecord; + +class GuiLogFormatter extends Formatter { + final GuiLogOutputHandler outputHandler; + + GuiLogFormatter(GuiLogOutputHandler var1) { + this.outputHandler = var1; + } + + public String format(LogRecord var1) { + StringBuilder var2 = new StringBuilder(); + Level var3 = var1.getLevel(); + if(var3 == Level.FINEST) { + var2.append("[FINEST] "); + } else if(var3 == Level.FINER) { + var2.append("[FINER] "); + } else if(var3 == Level.FINE) { + var2.append("[FINE] "); + } else if(var3 == Level.INFO) { + var2.append("[INFO] "); + } else if(var3 == Level.WARNING) { + var2.append("[WARNING] "); + } else if(var3 == Level.SEVERE) { + var2.append("[SEVERE] "); + } else if(var3 == Level.SEVERE) { + var2.append("[" + var3.getLocalizedName() + "] "); + } + + var2.append(var1.getMessage()); + var2.append('\n'); + Throwable var4 = var1.getThrown(); + if(var4 != null) { + StringWriter var5 = new StringWriter(); + var4.printStackTrace(new PrintWriter(var5)); + var2.append(var5.toString()); + } + + return var2.toString(); + } +} diff --git a/minecraft_server/src/net/minecraft/src/GuiLogOutputHandler.java b/minecraft_server/src/net/minecraft/src/GuiLogOutputHandler.java new file mode 100644 index 0000000..d245a6b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/GuiLogOutputHandler.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +import java.util.logging.Formatter; +import java.util.logging.Handler; +import java.util.logging.LogRecord; +import javax.swing.JTextArea; + +public class GuiLogOutputHandler extends Handler { + private int[] field_998_b = new int[1024]; + private int field_1001_c = 0; + Formatter field_999_a = new GuiLogFormatter(this); + private JTextArea field_1000_d; + + public GuiLogOutputHandler(JTextArea var1) { + this.setFormatter(this.field_999_a); + this.field_1000_d = var1; + } + + public void close() { + } + + public void flush() { + } + + public void publish(LogRecord var1) { + int var2 = this.field_1000_d.getDocument().getLength(); + this.field_1000_d.append(this.field_999_a.format(var1)); + this.field_1000_d.setCaretPosition(this.field_1000_d.getDocument().getLength()); + int var3 = this.field_1000_d.getDocument().getLength() - var2; + if(this.field_998_b[this.field_1001_c] != 0) { + this.field_1000_d.replaceRange("", 0, this.field_998_b[this.field_1001_c]); + } + + this.field_998_b[this.field_1001_c] = var3; + this.field_1001_c = (this.field_1001_c + 1) % 1024; + } +} diff --git a/minecraft_server/src/net/minecraft/src/GuiStatsComponent.java b/minecraft_server/src/net/minecraft/src/GuiStatsComponent.java new file mode 100644 index 0000000..b0e4a5f --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/GuiStatsComponent.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Graphics; +import javax.swing.JComponent; +import javax.swing.Timer; + +public class GuiStatsComponent extends JComponent { + private int[] memoryUse = new int[256]; + private int updateCounter = 0; + private String[] displayStrings = new String[10]; + + public GuiStatsComponent() { + this.setPreferredSize(new Dimension(256, 196)); + this.setMinimumSize(new Dimension(256, 196)); + this.setMaximumSize(new Dimension(256, 196)); + (new Timer(500, new GuiStatsListener(this))).start(); + this.setBackground(Color.BLACK); + } + + private void updateStats() { + long var1 = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); + System.gc(); + this.displayStrings[0] = "Memory use: " + var1 / 1024L / 1024L + " mb (" + Runtime.getRuntime().freeMemory() * 100L / Runtime.getRuntime().maxMemory() + "% free)"; + this.displayStrings[1] = "Threads: " + NetworkManager.numReadThreads + " + " + NetworkManager.numWriteThreads; + this.memoryUse[this.updateCounter++ & 255] = (int)(var1 * 100L / Runtime.getRuntime().maxMemory()); + this.repaint(); + } + + public void paint(Graphics var1) { + var1.setColor(new Color(16777215)); + var1.fillRect(0, 0, 256, 192); + + int var2; + for(var2 = 0; var2 < 256; ++var2) { + int var3 = this.memoryUse[var2 + this.updateCounter & 255]; + var1.setColor(new Color(var3 + 28 << 16)); + var1.fillRect(var2, 100 - var3, 1, var3); + } + + var1.setColor(Color.BLACK); + + for(var2 = 0; var2 < this.displayStrings.length; ++var2) { + String var4 = this.displayStrings[var2]; + if(var4 != null) { + var1.drawString(var4, 32, 116 + var2 * 16); + } + } + + } + + static void update(GuiStatsComponent var0) { + var0.updateStats(); + } +} diff --git a/minecraft_server/src/net/minecraft/src/GuiStatsListener.java b/minecraft_server/src/net/minecraft/src/GuiStatsListener.java new file mode 100644 index 0000000..11323c8 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/GuiStatsListener.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; + +class GuiStatsListener implements ActionListener { + final GuiStatsComponent statsComponent; + + GuiStatsListener(GuiStatsComponent var1) { + this.statsComponent = var1; + } + + public void actionPerformed(ActionEvent var1) { + GuiStatsComponent.update(this.statsComponent); + } +} diff --git a/minecraft_server/src/net/minecraft/src/HashEntry.java b/minecraft_server/src/net/minecraft/src/HashEntry.java new file mode 100644 index 0000000..1efe342 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/HashEntry.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +class HashEntry { + final int field_841_a; + Object field_840_b; + HashEntry field_843_c; + final int field_842_d; + + HashEntry(int var1, int var2, Object var3, HashEntry var4) { + this.field_840_b = var3; + this.field_843_c = var4; + this.field_841_a = var2; + this.field_842_d = var1; + } + + public final int func_559_a() { + return this.field_841_a; + } + + public final Object func_558_b() { + return this.field_840_b; + } + + public final boolean equals(Object var1) { + if(!(var1 instanceof HashEntry)) { + return false; + } else { + HashEntry var2 = (HashEntry)var1; + Integer var3 = Integer.valueOf(this.func_559_a()); + Integer var4 = Integer.valueOf(var2.func_559_a()); + if(var3 == var4 || var3 != null && var3.equals(var4)) { + Object var5 = this.func_558_b(); + Object var6 = var2.func_558_b(); + if(var5 == var6 || var5 != null && var5.equals(var6)) { + return true; + } + } + + return false; + } + } + + public final int hashCode() { + return MCHashTable.getHash(this.field_841_a); + } + + public final String toString() { + return this.func_559_a() + "=" + this.func_558_b(); + } +} diff --git a/minecraft_server/src/net/minecraft/src/HashEntry2.java b/minecraft_server/src/net/minecraft/src/HashEntry2.java new file mode 100644 index 0000000..4e0cbf2 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/HashEntry2.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +class HashEntry2 { + final long field_1025_a; + Object field_1024_b; + HashEntry2 field_1027_c; + final int field_1026_d; + + HashEntry2(int var1, long var2, Object var4, HashEntry2 var5) { + this.field_1024_b = var4; + this.field_1027_c = var5; + this.field_1025_a = var2; + this.field_1026_d = var1; + } + + public final long func_736_a() { + return this.field_1025_a; + } + + public final Object func_735_b() { + return this.field_1024_b; + } + + public final boolean equals(Object var1) { + if(!(var1 instanceof HashEntry2)) { + return false; + } else { + HashEntry2 var2 = (HashEntry2)var1; + Long var3 = Long.valueOf(this.func_736_a()); + Long var4 = Long.valueOf(var2.func_736_a()); + if(var3 == var4 || var3 != null && var3.equals(var4)) { + Object var5 = this.func_735_b(); + Object var6 = var2.func_735_b(); + if(var5 == var6 || var5 != null && var5.equals(var6)) { + return true; + } + } + + return false; + } + } + + public final int hashCode() { + return MCHashTable2.func_674_d(this.field_1025_a); + } + + public final String toString() { + return this.func_736_a() + "=" + this.func_735_b(); + } +} diff --git a/minecraft_server/src/net/minecraft/src/IAnimals.java b/minecraft_server/src/net/minecraft/src/IAnimals.java new file mode 100644 index 0000000..8592735 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/IAnimals.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public interface IAnimals { +} diff --git a/minecraft_server/src/net/minecraft/src/IBlockAccess.java b/minecraft_server/src/net/minecraft/src/IBlockAccess.java new file mode 100644 index 0000000..d9ba267 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/IBlockAccess.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public interface IBlockAccess { + int getBlockId(int var1, int var2, int var3); + + int getBlockMetadata(int var1, int var2, int var3); + + Material getBlockMaterial(int var1, int var2, int var3); + + boolean doesBlockAllowAttachment(int var1, int var2, int var3); +} diff --git a/minecraft_server/src/net/minecraft/src/IChunkLoader.java b/minecraft_server/src/net/minecraft/src/IChunkLoader.java new file mode 100644 index 0000000..3fe0072 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/IChunkLoader.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +import java.io.IOException; + +public interface IChunkLoader { + Chunk func_659_a(World var1, int var2, int var3) throws IOException; + + void func_662_a(World var1, Chunk var2) throws IOException; + + void func_4104_b(World var1, Chunk var2) throws IOException; + + void func_661_a(); + + void func_660_b(); +} diff --git a/minecraft_server/src/net/minecraft/src/IChunkProvider.java b/minecraft_server/src/net/minecraft/src/IChunkProvider.java new file mode 100644 index 0000000..5360638 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/IChunkProvider.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public interface IChunkProvider { + boolean chunkExists(int var1, int var2); + + Chunk func_363_b(int var1, int var2); + + void populate(IChunkProvider var1, int var2, int var3); + + boolean saveWorld(boolean var1, IProgressUpdate var2); + + boolean func_361_a(); + + boolean func_364_b(); +} diff --git a/minecraft_server/src/net/minecraft/src/ICommandListener.java b/minecraft_server/src/net/minecraft/src/ICommandListener.java new file mode 100644 index 0000000..3f36305 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ICommandListener.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public interface ICommandListener { + void log(String var1); + + String getUsername(); +} diff --git a/minecraft_server/src/net/minecraft/src/IInventory.java b/minecraft_server/src/net/minecraft/src/IInventory.java new file mode 100644 index 0000000..4cbe838 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/IInventory.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public interface IInventory { + int func_83_a(); + + ItemStack getStackInSlot(int var1); +} diff --git a/minecraft_server/src/net/minecraft/src/IMobs.java b/minecraft_server/src/net/minecraft/src/IMobs.java new file mode 100644 index 0000000..d5ee18b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/IMobs.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public interface IMobs extends IAnimals { +} diff --git a/minecraft_server/src/net/minecraft/src/IProgressUpdate.java b/minecraft_server/src/net/minecraft/src/IProgressUpdate.java new file mode 100644 index 0000000..6aae68a --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/IProgressUpdate.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public interface IProgressUpdate { + void func_438_a(String var1); + + void func_439_b(String var1); + + void func_437_a(int var1); +} diff --git a/minecraft_server/src/net/minecraft/src/IUpdatePlayerListBox.java b/minecraft_server/src/net/minecraft/src/IUpdatePlayerListBox.java new file mode 100644 index 0000000..cd69e50 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/IUpdatePlayerListBox.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +public interface IUpdatePlayerListBox { + void update(); +} diff --git a/minecraft_server/src/net/minecraft/src/IWorldAccess.java b/minecraft_server/src/net/minecraft/src/IWorldAccess.java new file mode 100644 index 0000000..80eef2e --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/IWorldAccess.java @@ -0,0 +1,21 @@ +package net.minecraft.src; + +public interface IWorldAccess { + void func_683_a(int var1, int var2, int var3); + + void func_685_a(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 func_681_a(Entity var1); + + void func_688_b(Entity var1); + + void func_684_a(); + + void playRecord(String var1, int var2, int var3, int var4); + + void func_686_a(int var1, int var2, int var3, TileEntity var4); +} diff --git a/minecraft_server/src/net/minecraft/src/InventoryLargeChest.java b/minecraft_server/src/net/minecraft/src/InventoryLargeChest.java new file mode 100644 index 0000000..fce7ef0 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/InventoryLargeChest.java @@ -0,0 +1,21 @@ +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 func_83_a() { + return this.upperChest.func_83_a() + this.lowerChest.func_83_a(); + } + + public ItemStack getStackInSlot(int var1) { + return var1 >= this.upperChest.func_83_a() ? this.lowerChest.getStackInSlot(var1 - this.upperChest.func_83_a()) : this.upperChest.getStackInSlot(var1); + } +} diff --git a/minecraft_server/src/net/minecraft/src/InventoryPlayer.java b/minecraft_server/src/net/minecraft/src/InventoryPlayer.java new file mode 100644 index 0000000..6d0f53f --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/InventoryPlayer.java @@ -0,0 +1,293 @@ +package net.minecraft.src; + +public class InventoryPlayer implements IInventory { + public ItemStack[] mainInventory = new ItemStack[37]; + public ItemStack[] armorInventory = new ItemStack[4]; + public ItemStack[] craftingInventory = new ItemStack[4]; + public int currentItem = 0; + private EntityPlayer player; + public boolean field_498_e = false; + + public InventoryPlayer(EntityPlayer var1) { + this.player = var1; + } + + public ItemStack getCurrentItem() { + return this.mainInventory[this.currentItem]; + } + + private int func_6126_d(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 getFirstPartialMatchingStack(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; + } + + private int addItemsToInventory(int var1, int var2) { + int var3 = this.getFirstPartialMatchingStack(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 func_6127_b(int var1) { + int var2 = this.func_6126_d(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.itemDamage == 0) { + var1.stackSize = this.addItemsToInventory(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 void setInventorySlotContents(int var1, ItemStack var2) { + ItemStack[] var3 = this.mainInventory; + if(var1 >= var3.length) { + var1 -= var3.length; + var3 = this.armorInventory; + } + + if(var1 >= var3.length) { + var1 -= var3.length; + var3 = this.craftingInventory; + } + + 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); + } + } + + for(var2 = 0; var2 < this.craftingInventory.length; ++var2) { + if(this.craftingInventory[var2] != null) { + var3 = new NBTTagCompound(); + var3.setByte("Slot", (byte)(var2 + 80)); + this.craftingInventory[var2].writeToNBT(var3); + var1.setTag(var3); + } + } + + return var1; + } + + public void readFromNBT(NBTTagList var1) { + this.mainInventory = new ItemStack[36]; + this.armorInventory = new ItemStack[4]; + this.craftingInventory = 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 >= 80 && var4 < this.craftingInventory.length + 80) { + this.craftingInventory[var4 - 80] = new ItemStack(var3); + } + + if(var4 >= 100 && var4 < this.armorInventory.length + 100) { + this.armorInventory[var4 - 100] = new ItemStack(var3); + } + } + + } + + public int func_83_a() { + return this.mainInventory.length + 4; + } + + public ItemStack getStackInSlot(int var1) { + ItemStack[] var2 = this.mainInventory; + if(var1 >= var2.length) { + var1 -= var2.length; + var2 = this.armorInventory; + } + + if(var1 >= var2.length) { + var1 -= var2.length; + var2 = this.craftingInventory; + } + + return var2[var1]; + } + + public int getInventoryStackLimit() { + return 64; + } + + public int func_9157_a(Entity var1) { + ItemStack var2 = this.getStackInSlot(this.currentItem); + return var2 != null ? var2.func_9218_a(var1) : 1; + } + + public boolean canHarvestBlock(Block var1) { + if(var1.blockMaterial != Material.rock && var1.blockMaterial != Material.iron && var1.blockMaterial != Material.builtSnow && var1.blockMaterial != Material.snow) { + return true; + } else { + ItemStack var2 = this.getStackInSlot(this.currentItem); + return var2 != null ? var2.func_573_b(var1) : false; + } + } + + 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].itemDamage; + int var7 = var5 - var6; + var2 += var7; + var3 += var5; + int var8 = ((ItemArmor)this.armorInventory[var4].getItem()).field_256_aY; + 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].func_577_a(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.func_169_a(this.mainInventory[var1], true); + this.mainInventory[var1] = null; + } + } + + for(var1 = 0; var1 < this.armorInventory.length; ++var1) { + if(this.armorInventory[var1] != null) { + this.player.func_169_a(this.armorInventory[var1], true); + this.armorInventory[var1] = null; + } + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/Item.java b/minecraft_server/src/net/minecraft/src/Item.java new file mode 100644 index 0000000..11d2a87 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Item.java @@ -0,0 +1,166 @@ +package net.minecraft.src; + +import java.util.Random; + +public class Item { + protected static Random rand = new Random(); + public static Item[] itemsList = new Item[32000]; + public static Item shovelSteel = (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 flintAndSteel = (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).setFull3D(); + 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, 1)).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 plateDiamond = (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 doorWood = (new ItemDoor(68, Material.wood)).setIconIndex(43); + public static Item bucketEmpty = (new ItemBucket(69, 0)).setIconIndex(74); + public static Item bucketWater = (new ItemBucket(70, Block.waterStill.blockID)).setIconIndex(75); + public static Item bucketLava = (new ItemBucket(71, Block.lavaStill.blockID)).setIconIndex(76); + public static Item minecartEmpty = (new ItemMinecart(72, 0)).setIconIndex(135); + public static Item saddle = (new ItemSaddle(73)).setIconIndex(104); + public static Item doorSteel = (new ItemDoor(74, Material.iron)).setIconIndex(44); + public static Item redstone = (new ItemRedstone(75)).setIconIndex(56); + public static Item snowball = (new ItemSnowball(76)).setIconIndex(14); + public static Item boat = (new ItemBoat(77)).setIconIndex(136); + public static Item leather = (new Item(78)).setIconIndex(103); + public static Item bucketMilk = (new ItemBucket(79, -1)).setIconIndex(77); + public static Item brick = (new Item(80)).setIconIndex(22); + public static Item clay = (new Item(81)).setIconIndex(57); + public static Item reed = (new ItemReed(82, Block.reed)).setIconIndex(27); + public static Item paper = (new Item(83)).setIconIndex(58); + public static Item book = (new Item(84)).setIconIndex(59); + public static Item slimeBall = (new Item(85)).setIconIndex(30); + public static Item minecartCrate = (new ItemMinecart(86, 1)).setIconIndex(151); + public static Item minecartPowered = (new ItemMinecart(87, 2)).setIconIndex(167); + public static Item egg = (new Item(88)).setIconIndex(12); + public static Item compass = (new Item(89)).setIconIndex(54); + public static Item fishingRod = (new ItemFishingRod(90)).setIconIndex(69); + public static Item pocketSundial = (new Item(91)).setIconIndex(70); + public static Item lightStoneDust = (new Item(92)).setIconIndex(73); + public static Item fishRaw = (new ItemFood(93, 2)).setIconIndex(89); + public static Item fishCooked = (new ItemFood(94, 5)).setIconIndex(90); + public static Item record13 = (new ItemRecord(2000, "13")).setIconIndex(240); + public static Item recordCat = (new ItemRecord(2001, "cat")).setIconIndex(241); + public final int swiftedIndex; + protected int maxStackSize = 64; + protected int maxDamage = 32; + protected int iconIndex; + protected boolean bFull3D = false; + + protected Item(int var1) { + this.swiftedIndex = 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 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 func_9201_a(ItemStack var1, EntityLiving var2) { + } + + public void hitBlock(ItemStack var1, int var2, int var3, int var4, int var5) { + } + + public int func_9203_a(Entity var1) { + return 1; + } + + public boolean canHarvestBlock(Block var1) { + return false; + } + + public void func_9202_b(ItemStack var1, EntityLiving var2) { + } + + public Item setFull3D() { + this.bFull3D = true; + return this; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemArmor.java b/minecraft_server/src/net/minecraft/src/ItemArmor.java new file mode 100644 index 0000000..5bc696b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemArmor.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +public class ItemArmor extends Item { + private static final int[] field_259_ba = new int[]{3, 8, 6, 3}; + private static final int[] field_258_bb = new int[]{11, 16, 15, 13}; + public final int field_254_a; + public final int field_257_aX; + public final int field_256_aY; + public final int field_255_aZ; + + public ItemArmor(int var1, int var2, int var3, int var4) { + super(var1); + this.field_254_a = var2; + this.field_257_aX = var4; + this.field_255_aZ = var3; + this.field_256_aY = field_259_ba[var4]; + this.maxDamage = field_258_bb[var4] * 3 << var2; + this.maxStackSize = 1; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemAxe.java b/minecraft_server/src/net/minecraft/src/ItemAxe.java new file mode 100644 index 0000000..666111b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemAxe.java @@ -0,0 +1,9 @@ +package net.minecraft.src; + +public class ItemAxe extends ItemTool { + private static Block[] field_4207_bb = new Block[]{Block.planks, Block.bookShelf, Block.wood, Block.crate}; + + public ItemAxe(int var1, int var2) { + super(var1, 3, var2, field_4207_bb); + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemBlock.java b/minecraft_server/src/net/minecraft/src/ItemBlock.java new file mode 100644 index 0000000..9970ea8 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemBlock.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +public class ItemBlock extends Item { + private int field_272_a; + + public ItemBlock(int var1) { + super(var1); + this.field_272_a = 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(var3.getBlockId(var4, var5, var6) == Block.snow.blockID) { + var7 = 0; + } else { + if(var7 == 0) { + --var5; + } + + if(var7 == 1) { + ++var5; + } + + if(var7 == 2) { + --var6; + } + + if(var7 == 3) { + ++var6; + } + + if(var7 == 4) { + --var4; + } + + if(var7 == 5) { + ++var4; + } + } + + if(var1.stackSize == 0) { + return false; + } else { + if(var3.func_516_a(this.field_272_a, var4, var5, var6, false)) { + Block var8 = Block.blocksList[this.field_272_a]; + if(var3.setBlockWithNotify(var4, var5, var6, this.field_272_a)) { + Block.blocksList[this.field_272_a].onBlockPlaced(var3, var4, var5, var6, var7); + Block.blocksList[this.field_272_a].onBlockPlacedBy(var3, var4, var5, var6, var2); + var3.playSoundEffect((double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), var8.stepSound.func_737_c(), (var8.stepSound.func_738_a() + 1.0F) / 2.0F, var8.stepSound.func_739_b() * 0.8F); + --var1.stackSize; + } + } + + return true; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemBoat.java b/minecraft_server/src/net/minecraft/src/ItemBoat.java new file mode 100644 index 0000000..e18c81f --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemBoat.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +public class ItemBoat extends Item { + public ItemBoat(int var1) { + super(var1); + this.maxStackSize = 1; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + float var4 = 1.0F; + float var5 = var3.prevRotationPitch + (var3.rotationPitch - var3.prevRotationPitch) * var4; + float var6 = var3.prevRotationYaw + (var3.rotationYaw - var3.prevRotationYaw) * var4; + double var7 = var3.prevPosX + (var3.posX - var3.prevPosX) * (double)var4; + double var9 = var3.prevPosY + (var3.posY - var3.prevPosY) * (double)var4 + 1.62D - (double)var3.yOffset; + double var11 = var3.prevPosZ + (var3.posZ - var3.prevPosZ) * (double)var4; + 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.func_505_a(var13, var23, true); + if(var24 == null) { + return var1; + } else { + if(var24.typeOfHit == 0) { + int var25 = var24.blockX; + int var26 = var24.blockY; + int var27 = var24.blockZ; + if(!var2.multiplayerWorld) { + var2.entityJoinedWorld(new EntityBoat(var2, (double)((float)var25 + 0.5F), (double)((float)var26 + 1.5F), (double)((float)var27 + 0.5F))); + } + + --var1.stackSize; + } + + return var1; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemBow.java b/minecraft_server/src/net/minecraft/src/ItemBow.java new file mode 100644 index 0000000..15a15f8 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemBow.java @@ -0,0 +1,19 @@ +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.func_6127_b(Item.arrow.swiftedIndex)) { + var2.playSoundAtEntity(var3, "random.bow", 1.0F, 1.0F / (rand.nextFloat() * 0.4F + 0.8F)); + if(!var2.multiplayerWorld) { + var2.entityJoinedWorld(new EntityArrow(var2, var3)); + } + } + + return var1; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemBucket.java b/minecraft_server/src/net/minecraft/src/ItemBucket.java new file mode 100644 index 0000000..3ed1629 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemBucket.java @@ -0,0 +1,101 @@ +package net.minecraft.src; + +public class ItemBucket extends Item { + private int field_274_a; + + public ItemBucket(int var1, int var2) { + super(var1); + this.maxStackSize = 1; + this.maxDamage = 64; + this.field_274_a = 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 + 1.62D - (double)var3.yOffset; + 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.func_505_a(var13, var23, this.field_274_a == 0); + if(var24 == null) { + return var1; + } else { + if(var24.typeOfHit == 0) { + int var25 = var24.blockX; + int var26 = var24.blockY; + int var27 = var24.blockZ; + if(!var2.func_6157_a(var3, var25, var26, var27)) { + return var1; + } + + if(this.field_274_a == 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(this.field_274_a < 0) { + return new ItemStack(Item.bucketEmpty); + } + + 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).func_216_a()) { + if(var2.field_4272_q.field_6166_d && this.field_274_a == Block.waterStill.blockID) { + var2.playSoundEffect(var7 + 0.5D, var9 + 0.5D, var11 + 0.5D, "random.fizz", 0.5F, 2.6F + (var2.rand.nextFloat() - var2.rand.nextFloat()) * 0.8F); + + for(int var28 = 0; var28 < 8; ++var28) { + var2.spawnParticle("largesmoke", (double)var25 + Math.random(), (double)var26 + Math.random(), (double)var27 + Math.random(), 0.0D, 0.0D, 0.0D); + } + } else { + var2.func_507_b(var25, var26, var27, this.field_274_a, 0); + } + + return new ItemStack(Item.bucketEmpty); + } + } + } else if(this.field_274_a == 0 && var24.entityHit instanceof EntityCow) { + return new ItemStack(Item.bucketMilk); + } + + return var1; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemDoor.java b/minecraft_server/src/net/minecraft/src/ItemDoor.java new file mode 100644 index 0000000..ecc8a48 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemDoor.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +public class ItemDoor extends Item { + private Material field_260_a; + + public ItemDoor(int var1, Material var2) { + super(var1); + this.field_260_a = var2; + 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; + Block var8; + if(this.field_260_a == Material.wood) { + var8 = Block.doorWood; + } else { + var8 = Block.doorSteel; + } + + if(!var8.canPlaceBlockAt(var3, var4, var5, var6)) { + return false; + } else { + int var9 = MathHelper.floor_double((double)((var2.rotationYaw + 180.0F) * 4.0F / 360.0F) - 0.5D) & 3; + byte var10 = 0; + byte var11 = 0; + if(var9 == 0) { + var11 = 1; + } + + if(var9 == 1) { + var10 = -1; + } + + if(var9 == 2) { + var11 = -1; + } + + if(var9 == 3) { + var10 = 1; + } + + int var12 = (var3.doesBlockAllowAttachment(var4 - var10, var5, var6 - var11) ? 1 : 0) + (var3.doesBlockAllowAttachment(var4 - var10, var5 + 1, var6 - var11) ? 1 : 0); + int var13 = (var3.doesBlockAllowAttachment(var4 + var10, var5, var6 + var11) ? 1 : 0) + (var3.doesBlockAllowAttachment(var4 + var10, var5 + 1, var6 + var11) ? 1 : 0); + boolean var14 = var3.getBlockId(var4 - var10, var5, var6 - var11) == var8.blockID || var3.getBlockId(var4 - var10, var5 + 1, var6 - var11) == var8.blockID; + boolean var15 = var3.getBlockId(var4 + var10, var5, var6 + var11) == var8.blockID || var3.getBlockId(var4 + var10, var5 + 1, var6 + var11) == var8.blockID; + boolean var16 = false; + if(var14 && !var15) { + var16 = true; + } else if(var13 > var12) { + var16 = true; + } + + if(var16) { + var9 = var9 - 1 & 3; + var9 += 4; + } + + var3.setBlockWithNotify(var4, var5, var6, var8.blockID); + var3.setBlockMetadataWithNotify(var4, var5, var6, var9); + var3.setBlockWithNotify(var4, var5 + 1, var6, var8.blockID); + var3.setBlockMetadataWithNotify(var4, var5 + 1, var6, var9 + 8); + --var1.stackSize; + return true; + } + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemFishingRod.java b/minecraft_server/src/net/minecraft/src/ItemFishingRod.java new file mode 100644 index 0000000..294a8a6 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemFishingRod.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class ItemFishingRod extends Item { + public ItemFishingRod(int var1) { + super(var1); + this.maxDamage = 64; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + if(var3.field_6124_at != null) { + int var4 = var3.field_6124_at.func_6143_c(); + var1.damageItem(var4); + var3.func_168_z(); + } else { + var2.playSoundAtEntity(var3, "random.bow", 0.5F, 0.4F / (rand.nextFloat() * 0.4F + 0.8F)); + if(!var2.multiplayerWorld) { + var2.entityJoinedWorld(new EntityFish(var2, var3)); + } + + var3.func_168_z(); + } + + return var1; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemFlintAndSteel.java b/minecraft_server/src/net/minecraft/src/ItemFlintAndSteel.java new file mode 100644 index 0000000..85812ca --- /dev/null +++ b/minecraft_server/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, rand.nextFloat() * 0.4F + 0.8F); + var3.setBlockWithNotify(var4, var5, var6, Block.fire.blockID); + } + + var1.damageItem(1); + return true; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemFood.java b/minecraft_server/src/net/minecraft/src/ItemFood.java new file mode 100644 index 0000000..1038a34 --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/ItemHoe.java b/minecraft_server/src/net/minecraft/src/ItemHoe.java new file mode 100644 index 0000000..a77b985 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemHoe.java @@ -0,0 +1,41 @@ +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.func_216_a() || 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.func_737_c(), (var10.stepSound.func_738_a() + 1.0F) / 2.0F, var10.stepSound.func_739_b() * 0.8F); + if(var3.multiplayerWorld) { + return true; + } else { + 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.field_433_ad = 10; + var3.entityJoinedWorld(var17); + } + } + + return true; + } + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemInWorldManager.java b/minecraft_server/src/net/minecraft/src/ItemInWorldManager.java new file mode 100644 index 0000000..0ed3b40 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemInWorldManager.java @@ -0,0 +1,117 @@ +package net.minecraft.src; + +public class ItemInWorldManager { + private World field_674_b; + public EntityPlayer field_675_a; + private float field_673_c; + private float field_672_d = 0.0F; + private int field_671_e = 0; + private float field_670_f = 0.0F; + private int field_669_g; + private int field_668_h; + private int field_667_i; + + public ItemInWorldManager(World var1) { + this.field_674_b = var1; + } + + public void func_324_a(int var1, int var2, int var3) { + int var4 = this.field_674_b.getBlockId(var1, var2, var3); + if(var4 > 0 && this.field_672_d == 0.0F) { + Block.blocksList[var4].onBlockClicked(this.field_674_b, var1, var2, var3, this.field_675_a); + } + + if(var4 > 0 && Block.blocksList[var4].func_254_a(this.field_675_a) >= 1.0F) { + this.func_325_c(var1, var2, var3); + } + + } + + public void func_328_a() { + this.field_672_d = 0.0F; + this.field_671_e = 0; + } + + public void func_326_a(int var1, int var2, int var3, int var4) { + if(this.field_671_e > 0) { + --this.field_671_e; + } else { + if(var1 == this.field_669_g && var2 == this.field_668_h && var3 == this.field_667_i) { + int var5 = this.field_674_b.getBlockId(var1, var2, var3); + if(var5 == 0) { + return; + } + + Block var6 = Block.blocksList[var5]; + this.field_672_d += var6.func_254_a(this.field_675_a); + ++this.field_670_f; + if(this.field_672_d >= 1.0F) { + this.func_325_c(var1, var2, var3); + this.field_672_d = 0.0F; + this.field_673_c = 0.0F; + this.field_670_f = 0.0F; + this.field_671_e = 5; + } + } else { + this.field_672_d = 0.0F; + this.field_673_c = 0.0F; + this.field_670_f = 0.0F; + this.field_669_g = var1; + this.field_668_h = var2; + this.field_667_i = var3; + } + + } + } + + public boolean func_323_b(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.field_674_b.getBlockId(var1, var2, var3)]; + int var5 = this.field_674_b.getBlockMetadata(var1, var2, var3); + boolean var6 = this.field_674_b.setBlockWithNotify(var1, var2, var3, 0); + if(var4 != null && var6) { + var4.onBlockDestroyedByPlayer(this.field_674_b, var1, var2, var3, var5); + } + + return var6; + } + + public boolean func_325_c(int var1, int var2, int var3) { + int var4 = this.field_674_b.getBlockId(var1, var2, var3); + int var5 = this.field_674_b.getBlockMetadata(var1, var2, var3); + boolean var6 = this.func_323_b(var1, var2, var3); + ItemStack var7 = this.field_675_a.func_172_B(); + if(var7 != null) { + var7.hitBlock(var4, var1, var2, var3); + if(var7.stackSize == 0) { + var7.func_577_a(this.field_675_a); + this.field_675_a.func_164_C(); + } + } + + if(var6 && this.field_675_a.func_167_b(Block.blocksList[var4])) { + Block.blocksList[var4].func_12007_g(this.field_674_b, var1, var2, var3, var5); + } + + return var6; + } + + public boolean func_6154_a(EntityPlayer var1, World var2, ItemStack var3) { + int var4 = var3.stackSize; + ItemStack var5 = var3.useItemRightClick(var2, var1); + if(var5 != var3 || var5 != null && var5.stackSize != var4) { + var1.inventory.mainInventory[var1.inventory.currentItem] = var5; + if(var5.stackSize == 0) { + var1.inventory.mainInventory[var1.inventory.currentItem] = null; + } + + return true; + } else { + return false; + } + } + + public boolean func_327_a(EntityPlayer var1, World var2, ItemStack var3, int var4, int var5, int var6, int var7) { + int var8 = var2.getBlockId(var4, var5, var6); + return var8 > 0 && Block.blocksList[var8].blockActivated(var2, var4, var5, var6, var1) ? true : (var3 == null ? false : var3.useItem(var1, var2, var4, var5, var6, var7)); + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemMinecart.java b/minecraft_server/src/net/minecraft/src/ItemMinecart.java new file mode 100644 index 0000000..6f69ff6 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemMinecart.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class ItemMinecart extends Item { + public int field_270_a; + + public ItemMinecart(int var1, int var2) { + super(var1); + this.maxStackSize = 1; + this.field_270_a = 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); + if(var8 == Block.minecartTrack.blockID) { + if(!var3.multiplayerWorld) { + var3.entityJoinedWorld(new EntityMinecart(var3, (double)((float)var4 + 0.5F), (double)((float)var5 + 0.5F), (double)((float)var6 + 0.5F), this.field_270_a)); + } + + --var1.stackSize; + return true; + } else { + return false; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemPainting.java b/minecraft_server/src/net/minecraft/src/ItemPainting.java new file mode 100644 index 0000000..4cea786 --- /dev/null +++ b/minecraft_server/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.func_181_b()) { + var3.entityJoinedWorld(var9); + --var1.stackSize; + } + + return true; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemPickaxe.java b/minecraft_server/src/net/minecraft/src/ItemPickaxe.java new file mode 100644 index 0000000..4638991 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemPickaxe.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class ItemPickaxe extends ItemTool { + private static Block[] field_4209_bb = 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, Block.ice, Block.bloodStone}; + private int field_4208_bc; + + public ItemPickaxe(int var1, int var2) { + super(var1, 2, var2, field_4209_bb); + this.field_4208_bc = var2; + } + + public boolean canHarvestBlock(Block var1) { + return var1 == Block.obsidian ? this.field_4208_bc == 3 : (var1 != Block.blockDiamond && var1 != Block.oreDiamond ? (var1 != Block.blockGold && var1 != Block.oreGold ? (var1 != Block.blockSteel && var1 != Block.oreIron ? (var1 != Block.oreRedstone && var1 != Block.oreRedstoneGlowing ? (var1.blockMaterial == Material.rock ? true : var1.blockMaterial == Material.iron) : this.field_4208_bc >= 2) : this.field_4208_bc >= 1) : this.field_4208_bc >= 2) : this.field_4208_bc >= 2); + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemRecord.java b/minecraft_server/src/net/minecraft/src/ItemRecord.java new file mode 100644 index 0000000..0063f66 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemRecord.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +public class ItemRecord extends Item { + private String recordName; + + protected ItemRecord(int var1, String var2) { + super(var1); + this.recordName = var2; + this.maxStackSize = 1; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(var3.getBlockId(var4, var5, var6) == Block.jukebox.blockID && var3.getBlockMetadata(var4, var5, var6) == 0) { + var3.setBlockMetadataWithNotify(var4, var5, var6, this.swiftedIndex - Item.record13.swiftedIndex + 1); + var3.playRecord(this.recordName, var4, var5, var6); + --var1.stackSize; + return true; + } else { + return false; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemRedstone.java b/minecraft_server/src/net/minecraft/src/ItemRedstone.java new file mode 100644 index 0000000..d680017 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemRedstone.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +public class ItemRedstone extends Item { + public ItemRedstone(int var1) { + super(var1); + } + + 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(var3.getBlockId(var4, var5, var6) != 0) { + return false; + } else { + if(Block.redstoneWire.canPlaceBlockAt(var3, var4, var5, var6)) { + --var1.stackSize; + var3.setBlockWithNotify(var4, var5, var6, Block.redstoneWire.blockID); + } + + return true; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemReed.java b/minecraft_server/src/net/minecraft/src/ItemReed.java new file mode 100644 index 0000000..6e54332 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemReed.java @@ -0,0 +1,55 @@ +package net.minecraft.src; + +public class ItemReed extends Item { + private int field_253_a; + + public ItemReed(int var1, Block var2) { + super(var1); + this.field_253_a = var2.blockID; + } + + public boolean onItemUse(ItemStack var1, EntityPlayer var2, World var3, int var4, int var5, int var6, int var7) { + if(var3.getBlockId(var4, var5, var6) == Block.snow.blockID) { + var7 = 0; + } else { + if(var7 == 0) { + --var5; + } + + if(var7 == 1) { + ++var5; + } + + if(var7 == 2) { + --var6; + } + + if(var7 == 3) { + ++var6; + } + + if(var7 == 4) { + --var4; + } + + if(var7 == 5) { + ++var4; + } + } + + if(var1.stackSize == 0) { + return false; + } else { + if(var3.func_516_a(this.field_253_a, var4, var5, var6, false)) { + Block var8 = Block.blocksList[this.field_253_a]; + if(var3.setBlockWithNotify(var4, var5, var6, this.field_253_a)) { + Block.blocksList[this.field_253_a].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.func_737_c(), (var8.stepSound.func_738_a() + 1.0F) / 2.0F, var8.stepSound.func_739_b() * 0.8F); + --var1.stackSize; + } + } + + return true; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemSaddle.java b/minecraft_server/src/net/minecraft/src/ItemSaddle.java new file mode 100644 index 0000000..be15802 --- /dev/null +++ b/minecraft_server/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 func_9202_b(ItemStack var1, EntityLiving var2) { + if(var2 instanceof EntityPig) { + EntityPig var3 = (EntityPig)var2; + if(!var3.rideable) { + var3.rideable = true; + --var1.stackSize; + } + } + + } + + public void func_9201_a(ItemStack var1, EntityLiving var2) { + this.func_9202_b(var1, var2); + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemSeeds.java b/minecraft_server/src/net/minecraft/src/ItemSeeds.java new file mode 100644 index 0000000..89aaa56 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemSeeds.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class ItemSeeds extends Item { + private int field_271_a; + + public ItemSeeds(int var1, int var2) { + super(var1); + this.field_271_a = 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.field_271_a); + --var1.stackSize; + return true; + } else { + return false; + } + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemSign.java b/minecraft_server/src/net/minecraft/src/ItemSign.java new file mode 100644 index 0000000..3d94a5f --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemSign.java @@ -0,0 +1,55 @@ +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 == 0) { + return false; + } else if(!var3.getBlockMaterial(var4, var5, var6).func_216_a()) { + return false; + } else { + if(var7 == 1) { + ++var5; + } + + if(var7 == 2) { + --var6; + } + + if(var7 == 3) { + ++var6; + } + + if(var7 == 4) { + --var4; + } + + if(var7 == 5) { + ++var4; + } + + if(!Block.signPost.canPlaceBlockAt(var3, var4, var5, var6)) { + return false; + } else { + if(var7 == 1) { + var3.func_507_b(var4, var5, var6, Block.signPost.blockID, MathHelper.floor_double((double)((var2.rotationYaw + 180.0F) * 16.0F / 360.0F) + 0.5D) & 15); + } else { + var3.func_507_b(var4, var5, var6, Block.signWall.blockID, var7); + } + + --var1.stackSize; + TileEntitySign var8 = (TileEntitySign)var3.getBlock(var4, var5, var6); + if(var8 != null) { + var2.func_4048_a(var8); + } + + return true; + } + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemSnowball.java b/minecraft_server/src/net/minecraft/src/ItemSnowball.java new file mode 100644 index 0000000..a4cba52 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemSnowball.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +public class ItemSnowball extends Item { + public ItemSnowball(int var1) { + super(var1); + this.maxStackSize = 16; + } + + public ItemStack onItemRightClick(ItemStack var1, World var2, EntityPlayer var3) { + --var1.stackSize; + var2.playSoundAtEntity(var3, "random.bow", 0.5F, 0.4F / (rand.nextFloat() * 0.4F + 0.8F)); + if(!var2.multiplayerWorld) { + var2.entityJoinedWorld(new EntitySnowball(var2, var3)); + } + + return var1; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemSoup.java b/minecraft_server/src/net/minecraft/src/ItemSoup.java new file mode 100644 index 0000000..b21aef9 --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/ItemSpade.java b/minecraft_server/src/net/minecraft/src/ItemSpade.java new file mode 100644 index 0000000..957d62e --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemSpade.java @@ -0,0 +1,13 @@ +package net.minecraft.src; + +public class ItemSpade extends ItemTool { + private static Block[] field_4206_bb = new Block[]{Block.grass, Block.dirt, Block.sand, Block.gravel, Block.snow, Block.blockSnow, Block.blockClay}; + + public ItemSpade(int var1, int var2) { + super(var1, 1, var2, field_4206_bb); + } + + public boolean canHarvestBlock(Block var1) { + return var1 == Block.snow ? true : var1 == Block.blockSnow; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemStack.java b/minecraft_server/src/net/minecraft/src/ItemStack.java new file mode 100644 index 0000000..e373dfd --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemStack.java @@ -0,0 +1,119 @@ +package net.minecraft.src; + +public final class ItemStack { + public int stackSize; + public int animationsToGo; + public int itemID; + public int itemDamage; + + 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.swiftedIndex, 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.itemDamage = var3; + } + + public ItemStack(NBTTagCompound var1) { + this.stackSize = 0; + this.readFromNBT(var1); + } + + public Item getItem() { + return Item.itemsList[this.itemID]; + } + + 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.itemDamage); + return var1; + } + + public void readFromNBT(NBTTagCompound var1) { + this.itemID = var1.getShort("id"); + this.stackSize = var1.getByte("Count"); + this.itemDamage = 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.itemDamage += var1; + if(this.itemDamage > this.getMaxDamage()) { + --this.stackSize; + if(this.stackSize < 0) { + this.stackSize = 0; + } + + this.itemDamage = 0; + } + + } + + public void func_9217_a(EntityLiving var1) { + Item.itemsList[this.itemID].func_9201_a(this, var1); + } + + public void hitBlock(int var1, int var2, int var3, int var4) { + Item.itemsList[this.itemID].hitBlock(this, var1, var2, var3, var4); + } + + public int func_9218_a(Entity var1) { + return Item.itemsList[this.itemID].func_9203_a(var1); + } + + public boolean func_573_b(Block var1) { + return Item.itemsList[this.itemID].canHarvestBlock(var1); + } + + public void func_577_a(EntityPlayer var1) { + } + + public ItemStack copy() { + return new ItemStack(this.itemID, this.stackSize, this.itemDamage); + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemSword.java b/minecraft_server/src/net/minecraft/src/ItemSword.java new file mode 100644 index 0000000..ec24558 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemSword.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +public class ItemSword extends Item { + private int field_4210_a; + + public ItemSword(int var1, int var2) { + super(var1); + this.maxStackSize = 1; + this.maxDamage = 32 << var2; + if(var2 == 3) { + this.maxDamage *= 4; + } + + this.field_4210_a = 4 + var2 * 2; + } + + public float getStrVsBlock(ItemStack var1, Block var2) { + return 1.5F; + } + + public void func_9201_a(ItemStack var1, EntityLiving var2) { + var1.damageItem(1); + } + + public void hitBlock(ItemStack var1, int var2, int var3, int var4, int var5) { + var1.damageItem(2); + } + + public int func_9203_a(Entity var1) { + return this.field_4210_a; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ItemTool.java b/minecraft_server/src/net/minecraft/src/ItemTool.java new file mode 100644 index 0000000..cfff62d --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ItemTool.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +public class ItemTool extends Item { + private Block[] blocksEffectiveAgainst; + private float field_264_aY = 4.0F; + private int field_263_aZ; + protected int field_262_a; + + public ItemTool(int var1, int var2, int var3, Block[] var4) { + super(var1); + this.field_262_a = var3; + this.blocksEffectiveAgainst = var4; + this.maxStackSize = 1; + this.maxDamage = 32 << var3; + if(var3 == 3) { + this.maxDamage *= 4; + } + + this.field_264_aY = (float)((var3 + 1) * 2); + this.field_263_aZ = 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.field_264_aY; + } + } + + return 1.0F; + } + + public void func_9201_a(ItemStack var1, EntityLiving var2) { + var1.damageItem(2); + } + + public void hitBlock(ItemStack var1, int var2, int var3, int var4, int var5) { + var1.damageItem(1); + } + + public int func_9203_a(Entity var1) { + return this.field_263_aZ; + } +} diff --git a/minecraft_server/src/net/minecraft/src/MCHashTable.java b/minecraft_server/src/net/minecraft/src/MCHashTable.java new file mode 100644 index 0000000..99dcd4d --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MCHashTable.java @@ -0,0 +1,151 @@ +package net.minecraft.src; + +public class MCHashTable { + private transient HashEntry[] slots = new HashEntry[16]; + private transient int count; + private int threshold = 12; + private final float growFactor = 12.0F / 16.0F; + private transient volatile int versionStamp; + + private static int computeHash(int var0) { + var0 ^= var0 >>> 20 ^ var0 >>> 12; + return var0 ^ var0 >>> 7 ^ var0 >>> 4; + } + + private static int getSlotIndex(int var0, int var1) { + return var0 & var1 - 1; + } + + public Object lookup(int var1) { + int var2 = computeHash(var1); + + for(HashEntry var3 = this.slots[getSlotIndex(var2, this.slots.length)]; var3 != null; var3 = var3.field_843_c) { + if(var3.field_841_a == var1) { + return var3.field_840_b; + } + } + + return null; + } + + public boolean containsItem(int var1) { + return this.lookupEntry(var1) != null; + } + + final HashEntry lookupEntry(int var1) { + int var2 = computeHash(var1); + + for(HashEntry var3 = this.slots[getSlotIndex(var2, this.slots.length)]; var3 != null; var3 = var3.field_843_c) { + if(var3.field_841_a == var1) { + return var3; + } + } + + return null; + } + + public void addKey(int var1, Object var2) { + int var3 = computeHash(var1); + int var4 = getSlotIndex(var3, this.slots.length); + + for(HashEntry var5 = this.slots[var4]; var5 != null; var5 = var5.field_843_c) { + if(var5.field_841_a == var1) { + var5.field_840_b = var2; + } + } + + ++this.versionStamp; + this.insert(var3, var1, var2, var4); + } + + private void grow(int var1) { + HashEntry[] var2 = this.slots; + int var3 = var2.length; + if(var3 == 1073741824) { + this.threshold = Integer.MAX_VALUE; + } else { + HashEntry[] var4 = new HashEntry[var1]; + this.copyTo(var4); + this.slots = var4; + this.threshold = (int)((float)var1 * this.growFactor); + } + } + + private void copyTo(HashEntry[] var1) { + HashEntry[] var2 = this.slots; + int var3 = var1.length; + + for(int var4 = 0; var4 < var2.length; ++var4) { + HashEntry var5 = var2[var4]; + if(var5 != null) { + var2[var4] = null; + + HashEntry var6; + do { + var6 = var5.field_843_c; + int var7 = getSlotIndex(var5.field_842_d, var3); + var5.field_843_c = var1[var7]; + var1[var7] = var5; + var5 = var6; + } while(var6 != null); + } + } + + } + + public Object removeObject(int var1) { + HashEntry var2 = this.removeEntry(var1); + return var2 == null ? null : var2.field_840_b; + } + + final HashEntry removeEntry(int var1) { + int var2 = computeHash(var1); + int var3 = getSlotIndex(var2, this.slots.length); + HashEntry var4 = this.slots[var3]; + + HashEntry var5; + HashEntry var6; + for(var5 = var4; var5 != null; var5 = var6) { + var6 = var5.field_843_c; + if(var5.field_841_a == var1) { + ++this.versionStamp; + --this.count; + if(var4 == var5) { + this.slots[var3] = var6; + } else { + var4.field_843_c = var6; + } + + return var5; + } + + var4 = var5; + } + + return var5; + } + + public void clearMap() { + ++this.versionStamp; + HashEntry[] var1 = this.slots; + + for(int var2 = 0; var2 < var1.length; ++var2) { + var1[var2] = null; + } + + this.count = 0; + } + + private void insert(int var1, int var2, Object var3, int var4) { + HashEntry var5 = this.slots[var4]; + this.slots[var4] = new HashEntry(var1, var2, var3, var5); + if(this.count++ >= this.threshold) { + this.grow(2 * this.slots.length); + } + + } + + static int getHash(int var0) { + return computeHash(var0); + } +} diff --git a/minecraft_server/src/net/minecraft/src/MCHashTable2.java b/minecraft_server/src/net/minecraft/src/MCHashTable2.java new file mode 100644 index 0000000..1e57101 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MCHashTable2.java @@ -0,0 +1,128 @@ +package net.minecraft.src; + +public class MCHashTable2 { + private transient HashEntry2[] field_949_a = new HashEntry2[16]; + private transient int field_948_b; + private int field_952_c = 12; + private final float field_951_d = 12.0F / 16.0F; + private transient volatile int field_950_e; + + private static int func_671_e(long var0) { + return func_676_a((int)(var0 ^ var0 >>> 32)); + } + + private static int func_676_a(int var0) { + var0 ^= var0 >>> 20 ^ var0 >>> 12; + return var0 ^ var0 >>> 7 ^ var0 >>> 4; + } + + private static int func_678_a(int var0, int var1) { + return var0 & var1 - 1; + } + + public Object func_677_a(long var1) { + int var3 = func_671_e(var1); + + for(HashEntry2 var4 = this.field_949_a[func_678_a(var3, this.field_949_a.length)]; var4 != null; var4 = var4.field_1027_c) { + if(var4.field_1025_a == var1) { + return var4.field_1024_b; + } + } + + return null; + } + + public void func_675_a(long var1, Object var3) { + int var4 = func_671_e(var1); + int var5 = func_678_a(var4, this.field_949_a.length); + + for(HashEntry2 var6 = this.field_949_a[var5]; var6 != null; var6 = var6.field_1027_c) { + if(var6.field_1025_a == var1) { + var6.field_1024_b = var3; + } + } + + ++this.field_950_e; + this.func_679_a(var4, var1, var3, var5); + } + + private void func_680_b(int var1) { + HashEntry2[] var2 = this.field_949_a; + int var3 = var2.length; + if(var3 == 1073741824) { + this.field_952_c = Integer.MAX_VALUE; + } else { + HashEntry2[] var4 = new HashEntry2[var1]; + this.func_673_a(var4); + this.field_949_a = var4; + this.field_952_c = (int)((float)var1 * this.field_951_d); + } + } + + private void func_673_a(HashEntry2[] var1) { + HashEntry2[] var2 = this.field_949_a; + int var3 = var1.length; + + for(int var4 = 0; var4 < var2.length; ++var4) { + HashEntry2 var5 = var2[var4]; + if(var5 != null) { + var2[var4] = null; + + HashEntry2 var6; + do { + var6 = var5.field_1027_c; + int var7 = func_678_a(var5.field_1026_d, var3); + var5.field_1027_c = var1[var7]; + var1[var7] = var5; + var5 = var6; + } while(var6 != null); + } + } + + } + + public Object func_670_b(long var1) { + HashEntry2 var3 = this.func_672_c(var1); + return var3 == null ? null : var3.field_1024_b; + } + + final HashEntry2 func_672_c(long var1) { + int var3 = func_671_e(var1); + int var4 = func_678_a(var3, this.field_949_a.length); + HashEntry2 var5 = this.field_949_a[var4]; + + HashEntry2 var6; + HashEntry2 var7; + for(var6 = var5; var6 != null; var6 = var7) { + var7 = var6.field_1027_c; + if(var6.field_1025_a == var1) { + ++this.field_950_e; + --this.field_948_b; + if(var5 == var6) { + this.field_949_a[var4] = var7; + } else { + var5.field_1027_c = var7; + } + + return var6; + } + + var5 = var6; + } + + return var6; + } + + private void func_679_a(int var1, long var2, Object var4, int var5) { + HashEntry2 var6 = this.field_949_a[var5]; + this.field_949_a[var5] = new HashEntry2(var1, var2, var4, var6); + if(this.field_948_b++ >= this.field_952_c) { + this.func_680_b(2 * this.field_949_a.length); + } + + } + + static int func_674_d(long var0) { + return func_671_e(var0); + } +} diff --git a/minecraft_server/src/net/minecraft/src/MapGenBase.java b/minecraft_server/src/net/minecraft/src/MapGenBase.java new file mode 100644 index 0000000..223e09d --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MapGenBase.java @@ -0,0 +1,26 @@ +package net.minecraft.src; + +import java.util.Random; + +public class MapGenBase { + protected int field_947_a = 8; + protected Random field_946_b = new Random(); + + public void func_667_a(IChunkProvider var1, World var2, int var3, int var4, byte[] var5) { + int var6 = this.field_947_a; + this.field_946_b.setSeed(var2.randomSeed); + long var7 = this.field_946_b.nextLong() / 2L * 2L + 1L; + long var9 = this.field_946_b.nextLong() / 2L * 2L + 1L; + + for(int var11 = var3 - var6; var11 <= var3 + var6; ++var11) { + for(int var12 = var4 - var6; var12 <= var4 + var6; ++var12) { + this.field_946_b.setSeed((long)var11 * var7 + (long)var12 * var9 ^ var2.randomSeed); + this.func_666_a(var2, var11, var12, var3, var4, var5); + } + } + + } + + protected void func_666_a(World var1, int var2, int var3, int var4, int var5, byte[] var6) { + } +} diff --git a/minecraft_server/src/net/minecraft/src/MapGenCaves.java b/minecraft_server/src/net/minecraft/src/MapGenCaves.java new file mode 100644 index 0000000..d8c5ac4 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MapGenCaves.java @@ -0,0 +1,185 @@ +package net.minecraft.src; + +import java.util.Random; + +public class MapGenCaves extends MapGenBase { + protected void func_669_a(int var1, int var2, byte[] var3, double var4, double var6, double var8) { + this.func_668_a(var1, var2, var3, var4, var6, var8, 1.0F + this.field_946_b.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + } + + protected void func_668_a(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.field_946_b.nextLong()); + if(var14 <= 0) { + int var24 = this.field_947_a * 16 - 16; + 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.func_668_a(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.func_668_a(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.waterStill.blockID || var3[var43] == Block.waterMoving.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.lavaStill.blockID; + } else { + var3[var46] = 0; + if(var47 && var3[var46 - 1] == Block.dirt.blockID) { + var3[var46 - 1] = (byte)Block.grass.blockID; + } + } + } + } + + --var46; + } + } + } + + if(var52) { + break; + } + } + } + } + } + + } + + protected void func_666_a(World var1, int var2, int var3, int var4, int var5, byte[] var6) { + int var7 = this.field_946_b.nextInt(this.field_946_b.nextInt(this.field_946_b.nextInt(40) + 1) + 1); + if(this.field_946_b.nextInt(15) != 0) { + var7 = 0; + } + + for(int var8 = 0; var8 < var7; ++var8) { + double var9 = (double)(var2 * 16 + this.field_946_b.nextInt(16)); + double var11 = (double)this.field_946_b.nextInt(this.field_946_b.nextInt(120) + 8); + double var13 = (double)(var3 * 16 + this.field_946_b.nextInt(16)); + int var15 = 1; + if(this.field_946_b.nextInt(4) == 0) { + this.func_669_a(var4, var5, var6, var9, var11, var13); + var15 += this.field_946_b.nextInt(4); + } + + for(int var16 = 0; var16 < var15; ++var16) { + float var17 = this.field_946_b.nextFloat() * (float)Math.PI * 2.0F; + float var18 = (this.field_946_b.nextFloat() - 0.5F) * 2.0F / 8.0F; + float var19 = this.field_946_b.nextFloat() * 2.0F + this.field_946_b.nextFloat(); + this.func_668_a(var4, var5, var6, var9, var11, var13, var19, var17, var18, 0, 0, 1.0D); + } + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/MapGenCavesHell.java b/minecraft_server/src/net/minecraft/src/MapGenCavesHell.java new file mode 100644 index 0000000..8e991e6 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MapGenCavesHell.java @@ -0,0 +1,173 @@ +package net.minecraft.src; + +import java.util.Random; + +public class MapGenCavesHell extends MapGenBase { + protected void func_4106_a(int var1, int var2, byte[] var3, double var4, double var6, double var8) { + this.func_4105_a(var1, var2, var3, var4, var6, var8, 1.0F + this.field_946_b.nextFloat() * 6.0F, 0.0F, 0.0F, -1, -1, 0.5D); + } + + protected void func_4105_a(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.field_946_b.nextLong()); + if(var14 <= 0) { + int var24 = this.field_947_a * 16 - 16; + var14 = var24 - var23.nextInt(var24 / 4); + } + + boolean var51 = false; + if(var13 == -1) { + var13 = var14 / 2; + var51 = 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(!var51 && var13 == var25 && var10 > 1.0F) { + this.func_4105_a(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.func_4105_a(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(var51 || 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 var52 = MathHelper.floor_double(var4 - var27) - var1 * 16 - 1; + int var34 = MathHelper.floor_double(var4 + var27) - var1 * 16 + 1; + int var53 = MathHelper.floor_double(var6 - var29) - 1; + int var36 = MathHelper.floor_double(var6 + var29) + 1; + int var54 = MathHelper.floor_double(var8 - var27) - var2 * 16 - 1; + int var38 = MathHelper.floor_double(var8 + var27) - var2 * 16 + 1; + if(var52 < 0) { + var52 = 0; + } + + if(var34 > 16) { + var34 = 16; + } + + if(var53 < 1) { + var53 = 1; + } + + if(var36 > 120) { + var36 = 120; + } + + if(var54 < 0) { + var54 = 0; + } + + if(var38 > 16) { + var38 = 16; + } + + boolean var55 = false; + + int var40; + int var43; + for(var40 = var52; !var55 && var40 < var34; ++var40) { + for(int var41 = var54; !var55 && var41 < var38; ++var41) { + for(int var42 = var36 + 1; !var55 && var42 >= var53 - 1; --var42) { + var43 = (var40 * 16 + var41) * 128 + var42; + if(var42 >= 0 && var42 < 128) { + if(var3[var43] == Block.lavaStill.blockID || var3[var43] == Block.lavaMoving.blockID) { + var55 = true; + } + + if(var42 != var53 - 1 && var40 != var52 && var40 != var34 - 1 && var41 != var54 && var41 != var38 - 1) { + var42 = var53; + } + } + } + } + } + + if(!var55) { + for(var40 = var52; var40 < var34; ++var40) { + double var56 = ((double)(var40 + var1 * 16) + 0.5D - var4) / var27; + + for(var43 = var54; var43 < var38; ++var43) { + double var44 = ((double)(var43 + var2 * 16) + 0.5D - var8) / var27; + int var46 = (var40 * 16 + var43) * 128 + var36; + + for(int var47 = var36 - 1; var47 >= var53; --var47) { + double var48 = ((double)var47 + 0.5D - var6) / var29; + if(var48 > -0.7D && var56 * var56 + var48 * var48 + var44 * var44 < 1.0D) { + byte var50 = var3[var46]; + if(var50 == Block.bloodStone.blockID || var50 == Block.dirt.blockID || var50 == Block.grass.blockID) { + var3[var46] = 0; + } + } + + --var46; + } + } + } + + if(var51) { + break; + } + } + } + } + } + + } + + protected void func_666_a(World var1, int var2, int var3, int var4, int var5, byte[] var6) { + int var7 = this.field_946_b.nextInt(this.field_946_b.nextInt(this.field_946_b.nextInt(10) + 1) + 1); + if(this.field_946_b.nextInt(5) != 0) { + var7 = 0; + } + + for(int var8 = 0; var8 < var7; ++var8) { + double var9 = (double)(var2 * 16 + this.field_946_b.nextInt(16)); + double var11 = (double)this.field_946_b.nextInt(128); + double var13 = (double)(var3 * 16 + this.field_946_b.nextInt(16)); + int var15 = 1; + if(this.field_946_b.nextInt(4) == 0) { + this.func_4106_a(var4, var5, var6, var9, var11, var13); + var15 += this.field_946_b.nextInt(4); + } + + for(int var16 = 0; var16 < var15; ++var16) { + float var17 = this.field_946_b.nextFloat() * (float)Math.PI * 2.0F; + float var18 = (this.field_946_b.nextFloat() - 0.5F) * 2.0F / 8.0F; + float var19 = this.field_946_b.nextFloat() * 2.0F + this.field_946_b.nextFloat(); + this.func_4105_a(var4, var5, var6, var9, var11, var13, var19 * 2.0F, var17, var18, 0, 0, 0.5D); + } + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/Material.java b/minecraft_server/src/net/minecraft/src/Material.java new file mode 100644 index 0000000..5b65cef --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Material.java @@ -0,0 +1,54 @@ +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()).setBurning(); + 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 field_4218_h = (new Material()).setBurning(); + public static final Material plants = new MaterialLogic(); + public static final Material sponge = new Material(); + public static final Material field_4217_k = (new Material()).setBurning(); + 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 field_4216_o = new Material(); + public static final Material tnt = (new Material()).setBurning(); + public static final Material field_4215_q = new Material(); + public static final Material ice = new Material(); + public static final Material snow = new MaterialLogic(); + public static final Material builtSnow = new Material(); + public static final Material field_4214_u = new Material(); + public static final Material clay = new Material(); + public static final Material field_4213_w = new Material(); + public static final Material field_4212_x = new Material(); + private boolean canBurn; + + public boolean getIsLiquid() { + return false; + } + + public boolean func_216_a() { + return true; + } + + public boolean getCanBlockGrass() { + return true; + } + + public boolean func_218_c() { + return true; + } + + private Material setBurning() { + this.canBurn = true; + return this; + } + + public boolean getBurning() { + return this.canBurn; + } +} diff --git a/minecraft_server/src/net/minecraft/src/MaterialLiquid.java b/minecraft_server/src/net/minecraft/src/MaterialLiquid.java new file mode 100644 index 0000000..213b89b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MaterialLiquid.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class MaterialLiquid extends Material { + public boolean getIsLiquid() { + return true; + } + + public boolean func_218_c() { + return false; + } + + public boolean func_216_a() { + return false; + } +} diff --git a/minecraft_server/src/net/minecraft/src/MaterialLogic.java b/minecraft_server/src/net/minecraft/src/MaterialLogic.java new file mode 100644 index 0000000..0dc4d99 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MaterialLogic.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class MaterialLogic extends Material { + public boolean func_216_a() { + return false; + } + + public boolean getCanBlockGrass() { + return false; + } + + public boolean func_218_c() { + return false; + } +} diff --git a/minecraft_server/src/net/minecraft/src/MaterialTransparent.java b/minecraft_server/src/net/minecraft/src/MaterialTransparent.java new file mode 100644 index 0000000..8ca5d98 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MaterialTransparent.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +public class MaterialTransparent extends Material { + public boolean func_216_a() { + return false; + } + + public boolean getCanBlockGrass() { + return false; + } + + public boolean func_218_c() { + return false; + } +} diff --git a/minecraft_server/src/net/minecraft/src/MathHelper.java b/minecraft_server/src/net/minecraft/src/MathHelper.java new file mode 100644 index 0000000..ca49da0 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MathHelper.java @@ -0,0 +1,54 @@ +package net.minecraft.src; + +public class MathHelper { + private static float[] field_886_a = new float[65536]; + + public static final float sin(float var0) { + return field_886_a[(int)(var0 * 10430.378F) & '\uffff']; + } + + public static final float cos(float var0) { + return field_886_a[(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; + } + + static { + for(int var0 = 0; var0 < 65536; ++var0) { + field_886_a[var0] = (float)Math.sin((double)var0 * Math.PI * 2.0D / 65536.0D); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/MetadataChunkBlock.java b/minecraft_server/src/net/minecraft/src/MetadataChunkBlock.java new file mode 100644 index 0000000..43887b3 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MetadataChunkBlock.java @@ -0,0 +1,175 @@ +package net.minecraft.src; + +public class MetadataChunkBlock { + public final EnumSkyBlock field_957_a; + public int field_956_b; + public int field_962_c; + public int field_961_d; + public int field_960_e; + public int field_959_f; + public int field_958_g; + + public MetadataChunkBlock(EnumSkyBlock var1, int var2, int var3, int var4, int var5, int var6, int var7) { + this.field_957_a = var1; + this.field_956_b = var2; + this.field_962_c = var3; + this.field_961_d = var4; + this.field_960_e = var5; + this.field_959_f = var6; + this.field_958_g = var7; + } + + public void func_4107_a(World var1) { + int var2 = this.field_960_e - this.field_956_b + 1; + int var3 = this.field_959_f - this.field_962_c + 1; + int var4 = this.field_958_g - this.field_961_d + 1; + int var5 = var2 * var3 * var4; + if(var5 <= -Short.MIN_VALUE) { + for(int var6 = this.field_956_b; var6 <= this.field_960_e; ++var6) { + for(int var7 = this.field_961_d; var7 <= this.field_958_g; ++var7) { + if(var1.func_530_e(var6, 0, var7)) { + for(int var8 = this.field_962_c; var8 <= this.field_959_f; ++var8) { + if(var8 >= 0 && var8 < 128) { + int var9 = var1.getSavedLightValue(this.field_957_a, var6, var8, var7); + boolean var10 = false; + int var11 = var1.getBlockId(var6, var8, var7); + int var12 = Block.lightOpacity[var11]; + if(var12 == 0) { + var12 = 1; + } + + int var13 = 0; + if(this.field_957_a == EnumSkyBlock.Sky) { + if(var1.canExistingBlockSeeTheSky(var6, var8, var7)) { + var13 = 15; + } + } else if(this.field_957_a == EnumSkyBlock.Block) { + var13 = Block.lightValue[var11]; + } + + int var14; + int var20; + if(var12 >= 15 && var13 == 0) { + var20 = 0; + } else { + var14 = var1.getSavedLightValue(this.field_957_a, var6 - 1, var8, var7); + int var15 = var1.getSavedLightValue(this.field_957_a, var6 + 1, var8, var7); + int var16 = var1.getSavedLightValue(this.field_957_a, var6, var8 - 1, var7); + int var17 = var1.getSavedLightValue(this.field_957_a, var6, var8 + 1, var7); + int var18 = var1.getSavedLightValue(this.field_957_a, var6, var8, var7 - 1); + int var19 = var1.getSavedLightValue(this.field_957_a, var6, var8, var7 + 1); + var20 = var14; + if(var15 > var14) { + var20 = var15; + } + + if(var16 > var20) { + var20 = var16; + } + + if(var17 > var20) { + var20 = var17; + } + + if(var18 > var20) { + var20 = var18; + } + + if(var19 > var20) { + var20 = var19; + } + + var20 -= var12; + if(var20 < 0) { + var20 = 0; + } + + if(var13 > var20) { + var20 = var13; + } + } + + if(var9 != var20) { + var1.setLightValue(this.field_957_a, var6, var8, var7, var20); + var14 = var20 - 1; + if(var14 < 0) { + var14 = 0; + } + + var1.neighborLightPropagationChanged(this.field_957_a, var6 - 1, var8, var7, var14); + var1.neighborLightPropagationChanged(this.field_957_a, var6, var8 - 1, var7, var14); + var1.neighborLightPropagationChanged(this.field_957_a, var6, var8, var7 - 1, var14); + if(var6 + 1 >= this.field_960_e) { + var1.neighborLightPropagationChanged(this.field_957_a, var6 + 1, var8, var7, var14); + } + + if(var8 + 1 >= this.field_959_f) { + var1.neighborLightPropagationChanged(this.field_957_a, var6, var8 + 1, var7, var14); + } + + if(var7 + 1 >= this.field_958_g) { + var1.neighborLightPropagationChanged(this.field_957_a, var6, var8, var7 + 1, var14); + } + } + } + } + } + } + } + + } + } + + public boolean func_692_a(int var1, int var2, int var3, int var4, int var5, int var6) { + if(var1 >= this.field_956_b && var2 >= this.field_962_c && var3 >= this.field_961_d && var4 <= this.field_960_e && var5 <= this.field_959_f && var6 <= this.field_958_g) { + return true; + } else { + byte var7 = 1; + if(var1 >= this.field_956_b - var7 && var2 >= this.field_962_c - var7 && var3 >= this.field_961_d - var7 && var4 <= this.field_960_e + var7 && var5 <= this.field_959_f + var7 && var6 <= this.field_958_g + var7) { + int var8 = this.field_960_e - this.field_956_b; + int var9 = this.field_959_f - this.field_962_c; + int var10 = this.field_958_g - this.field_961_d; + if(var1 > this.field_956_b) { + var1 = this.field_956_b; + } + + if(var2 > this.field_962_c) { + var2 = this.field_962_c; + } + + if(var3 > this.field_961_d) { + var3 = this.field_961_d; + } + + if(var4 < this.field_960_e) { + var4 = this.field_960_e; + } + + if(var5 < this.field_959_f) { + var5 = this.field_959_f; + } + + if(var6 < this.field_958_g) { + var6 = this.field_958_g; + } + + int var11 = var4 - var1; + int var12 = var5 - var2; + int var13 = var6 - var3; + int var14 = var8 * var9 * var10; + int var15 = var11 * var12 * var13; + if(var15 - var14 <= 2) { + this.field_956_b = var1; + this.field_962_c = var2; + this.field_961_d = var3; + this.field_960_e = var4; + this.field_959_f = var5; + this.field_958_g = var6; + return true; + } + } + + return false; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/MinecartTrackLogic.java b/minecraft_server/src/net/minecraft/src/MinecartTrackLogic.java new file mode 100644 index 0000000..77ffd5d --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MinecartTrackLogic.java @@ -0,0 +1,323 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +class MinecartTrackLogic { + private World worldObj; + private int field_893_c; + private int field_892_d; + private int field_891_e; + private int field_890_f; + private List field_889_g; + final BlockMinecartTrack field_888_a; + + public MinecartTrackLogic(BlockMinecartTrack var1, World var2, int var3, int var4, int var5) { + this.field_888_a = var1; + this.field_889_g = new ArrayList(); + this.worldObj = var2; + this.field_893_c = var3; + this.field_892_d = var4; + this.field_891_e = var5; + this.field_890_f = var2.getBlockMetadata(var3, var4, var5); + this.func_593_a(); + } + + private void func_593_a() { + this.field_889_g.clear(); + if(this.field_890_f == 0) { + this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e - 1)); + this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e + 1)); + } else if(this.field_890_f == 1) { + this.field_889_g.add(new ChunkPosition(this.field_893_c - 1, this.field_892_d, this.field_891_e)); + this.field_889_g.add(new ChunkPosition(this.field_893_c + 1, this.field_892_d, this.field_891_e)); + } else if(this.field_890_f == 2) { + this.field_889_g.add(new ChunkPosition(this.field_893_c - 1, this.field_892_d, this.field_891_e)); + this.field_889_g.add(new ChunkPosition(this.field_893_c + 1, this.field_892_d + 1, this.field_891_e)); + } else if(this.field_890_f == 3) { + this.field_889_g.add(new ChunkPosition(this.field_893_c - 1, this.field_892_d + 1, this.field_891_e)); + this.field_889_g.add(new ChunkPosition(this.field_893_c + 1, this.field_892_d, this.field_891_e)); + } else if(this.field_890_f == 4) { + this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d + 1, this.field_891_e - 1)); + this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e + 1)); + } else if(this.field_890_f == 5) { + this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e - 1)); + this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d + 1, this.field_891_e + 1)); + } else if(this.field_890_f == 6) { + this.field_889_g.add(new ChunkPosition(this.field_893_c + 1, this.field_892_d, this.field_891_e)); + this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e + 1)); + } else if(this.field_890_f == 7) { + this.field_889_g.add(new ChunkPosition(this.field_893_c - 1, this.field_892_d, this.field_891_e)); + this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e + 1)); + } else if(this.field_890_f == 8) { + this.field_889_g.add(new ChunkPosition(this.field_893_c - 1, this.field_892_d, this.field_891_e)); + this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e - 1)); + } else if(this.field_890_f == 9) { + this.field_889_g.add(new ChunkPosition(this.field_893_c + 1, this.field_892_d, this.field_891_e)); + this.field_889_g.add(new ChunkPosition(this.field_893_c, this.field_892_d, this.field_891_e - 1)); + } + + } + + private void func_591_b() { + for(int var1 = 0; var1 < this.field_889_g.size(); ++var1) { + MinecartTrackLogic var2 = this.func_595_a((ChunkPosition)this.field_889_g.get(var1)); + if(var2 != null && var2.func_590_b(this)) { + this.field_889_g.set(var1, new ChunkPosition(var2.field_893_c, var2.field_892_d, var2.field_891_e)); + } else { + this.field_889_g.remove(var1--); + } + } + + } + + private boolean func_589_a(int var1, int var2, int var3) { + return this.worldObj.getBlockId(var1, var2, var3) == this.field_888_a.blockID ? true : (this.worldObj.getBlockId(var1, var2 + 1, var3) == this.field_888_a.blockID ? true : this.worldObj.getBlockId(var1, var2 - 1, var3) == this.field_888_a.blockID); + } + + private MinecartTrackLogic func_595_a(ChunkPosition var1) { + return this.worldObj.getBlockId(var1.field_846_a, var1.field_845_b, var1.field_847_c) == this.field_888_a.blockID ? new MinecartTrackLogic(this.field_888_a, this.worldObj, var1.field_846_a, var1.field_845_b, var1.field_847_c) : (this.worldObj.getBlockId(var1.field_846_a, var1.field_845_b + 1, var1.field_847_c) == this.field_888_a.blockID ? new MinecartTrackLogic(this.field_888_a, this.worldObj, var1.field_846_a, var1.field_845_b + 1, var1.field_847_c) : (this.worldObj.getBlockId(var1.field_846_a, var1.field_845_b - 1, var1.field_847_c) == this.field_888_a.blockID ? new MinecartTrackLogic(this.field_888_a, this.worldObj, var1.field_846_a, var1.field_845_b - 1, var1.field_847_c) : null)); + } + + private boolean func_590_b(MinecartTrackLogic var1) { + for(int var2 = 0; var2 < this.field_889_g.size(); ++var2) { + ChunkPosition var3 = (ChunkPosition)this.field_889_g.get(var2); + if(var3.field_846_a == var1.field_893_c && var3.field_847_c == var1.field_891_e) { + return true; + } + } + + return false; + } + + private boolean func_599_b(int var1, int var2, int var3) { + for(int var4 = 0; var4 < this.field_889_g.size(); ++var4) { + ChunkPosition var5 = (ChunkPosition)this.field_889_g.get(var4); + if(var5.field_846_a == var1 && var5.field_847_c == var3) { + return true; + } + } + + return false; + } + + private int func_594_c() { + int var1 = 0; + if(this.func_589_a(this.field_893_c, this.field_892_d, this.field_891_e - 1)) { + ++var1; + } + + if(this.func_589_a(this.field_893_c, this.field_892_d, this.field_891_e + 1)) { + ++var1; + } + + if(this.func_589_a(this.field_893_c - 1, this.field_892_d, this.field_891_e)) { + ++var1; + } + + if(this.func_589_a(this.field_893_c + 1, this.field_892_d, this.field_891_e)) { + ++var1; + } + + return var1; + } + + private boolean func_597_c(MinecartTrackLogic var1) { + if(this.func_590_b(var1)) { + return true; + } else if(this.field_889_g.size() == 2) { + return false; + } else if(this.field_889_g.size() == 0) { + return true; + } else { + ChunkPosition var2 = (ChunkPosition)this.field_889_g.get(0); + return var1.field_892_d == this.field_892_d && var2.field_845_b == this.field_892_d ? true : true; + } + } + + private void func_598_d(MinecartTrackLogic var1) { + this.field_889_g.add(new ChunkPosition(var1.field_893_c, var1.field_892_d, var1.field_891_e)); + boolean var2 = this.func_599_b(this.field_893_c, this.field_892_d, this.field_891_e - 1); + boolean var3 = this.func_599_b(this.field_893_c, this.field_892_d, this.field_891_e + 1); + boolean var4 = this.func_599_b(this.field_893_c - 1, this.field_892_d, this.field_891_e); + boolean var5 = this.func_599_b(this.field_893_c + 1, this.field_892_d, this.field_891_e); + 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.field_893_c, this.field_892_d + 1, this.field_891_e - 1) == this.field_888_a.blockID) { + var6 = 4; + } + + if(this.worldObj.getBlockId(this.field_893_c, this.field_892_d + 1, this.field_891_e + 1) == this.field_888_a.blockID) { + var6 = 5; + } + } + + if(var6 == 1) { + if(this.worldObj.getBlockId(this.field_893_c + 1, this.field_892_d + 1, this.field_891_e) == this.field_888_a.blockID) { + var6 = 2; + } + + if(this.worldObj.getBlockId(this.field_893_c - 1, this.field_892_d + 1, this.field_891_e) == this.field_888_a.blockID) { + var6 = 3; + } + } + + if(var6 < 0) { + var6 = 0; + } + + this.worldObj.setBlockMetadataWithNotify(this.field_893_c, this.field_892_d, this.field_891_e, var6); + } + + private boolean func_592_c(int var1, int var2, int var3) { + MinecartTrackLogic var4 = this.func_595_a(new ChunkPosition(var1, var2, var3)); + if(var4 == null) { + return false; + } else { + var4.func_591_b(); + return var4.func_597_c(this); + } + } + + public void func_596_a(boolean var1) { + boolean var2 = this.func_592_c(this.field_893_c, this.field_892_d, this.field_891_e - 1); + boolean var3 = this.func_592_c(this.field_893_c, this.field_892_d, this.field_891_e + 1); + boolean var4 = this.func_592_c(this.field_893_c - 1, this.field_892_d, this.field_891_e); + boolean var5 = this.func_592_c(this.field_893_c + 1, this.field_892_d, this.field_891_e); + byte var6 = -1; + if((var2 || var3) && !var4 && !var5) { + var6 = 0; + } + + if((var4 || var5) && !var2 && !var3) { + 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 == -1) { + if(var2 || var3) { + var6 = 0; + } + + if(var4 || var5) { + var6 = 1; + } + + if(var1) { + if(var3 && var5) { + var6 = 6; + } + + if(var4 && var3) { + var6 = 7; + } + + if(var5 && var2) { + var6 = 9; + } + + if(var2 && var4) { + var6 = 8; + } + } else { + if(var2 && var4) { + var6 = 8; + } + + if(var5 && var2) { + var6 = 9; + } + + if(var4 && var3) { + var6 = 7; + } + + if(var3 && var5) { + var6 = 6; + } + } + } + + if(var6 == 0) { + if(this.worldObj.getBlockId(this.field_893_c, this.field_892_d + 1, this.field_891_e - 1) == this.field_888_a.blockID) { + var6 = 4; + } + + if(this.worldObj.getBlockId(this.field_893_c, this.field_892_d + 1, this.field_891_e + 1) == this.field_888_a.blockID) { + var6 = 5; + } + } + + if(var6 == 1) { + if(this.worldObj.getBlockId(this.field_893_c + 1, this.field_892_d + 1, this.field_891_e) == this.field_888_a.blockID) { + var6 = 2; + } + + if(this.worldObj.getBlockId(this.field_893_c - 1, this.field_892_d + 1, this.field_891_e) == this.field_888_a.blockID) { + var6 = 3; + } + } + + if(var6 < 0) { + var6 = 0; + } + + this.field_890_f = var6; + this.func_593_a(); + this.worldObj.setBlockMetadataWithNotify(this.field_893_c, this.field_892_d, this.field_891_e, var6); + + for(int var7 = 0; var7 < this.field_889_g.size(); ++var7) { + MinecartTrackLogic var8 = this.func_595_a((ChunkPosition)this.field_889_g.get(var7)); + if(var8 != null) { + var8.func_591_b(); + if(var8.func_597_c(this)) { + var8.func_598_d(this); + } + } + } + + } + + static int func_600_a(MinecartTrackLogic var0) { + return var0.func_594_c(); + } +} diff --git a/minecraft_server/src/net/minecraft/src/MinecraftException.java b/minecraft_server/src/net/minecraft/src/MinecraftException.java new file mode 100644 index 0000000..0cf8790 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MinecraftException.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +public class MinecraftException extends RuntimeException { + public MinecraftException(String var1) { + super(var1); + } +} diff --git a/minecraft_server/src/net/minecraft/src/MobSpawnerBase.java b/minecraft_server/src/net/minecraft/src/MobSpawnerBase.java new file mode 100644 index 0000000..979520b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MobSpawnerBase.java @@ -0,0 +1,73 @@ +package net.minecraft.src; + +public class MobSpawnerBase { + public static final MobSpawnerBase rainforest = (new MobSpawnerBase()).func_4079_b(588342).setBiomeName("Rainforest").func_4080_a(2094168); + public static final MobSpawnerBase swampland = (new MobSpawnerSwamp()).func_4079_b(522674).setBiomeName("Swampland").func_4080_a(9154376); + public static final MobSpawnerBase seasonalForest = (new MobSpawnerBase()).func_4079_b(10215459).setBiomeName("Seasonal Forest"); + public static final MobSpawnerBase forest = (new MobSpawnerBase()).func_4079_b(353825).setBiomeName("Forest").func_4080_a(5159473); + public static final MobSpawnerBase savanna = (new MobSpawnerDesert()).func_4079_b(14278691).setBiomeName("Savanna"); + public static final MobSpawnerBase shrubland = (new MobSpawnerBase()).func_4079_b(10595616).setBiomeName("Shrubland"); + public static final MobSpawnerBase taiga = (new MobSpawnerBase()).func_4079_b(3060051).setBiomeName("Taiga").func_4083_b().func_4080_a(8107825); + public static final MobSpawnerBase desert = (new MobSpawnerDesert()).func_4079_b(16421912).setBiomeName("Desert"); + public static final MobSpawnerBase plains = (new MobSpawnerDesert()).func_4079_b(16767248).setBiomeName("Plains"); + public static final MobSpawnerBase iceDesert = (new MobSpawnerDesert()).func_4079_b(16772499).setBiomeName("Ice Desert").func_4083_b().func_4080_a(12899129); + public static final MobSpawnerBase tundra = (new MobSpawnerBase()).func_4079_b(5762041).setBiomeName("Tundra").func_4083_b().func_4080_a(12899129); + public static final MobSpawnerBase hell = (new MobSpawnerHell()).func_4079_b(16711680).setBiomeName("Hell"); + public String biomeName; + public int field_6162_n; + public byte topBlock = (byte)Block.grass.blockID; + public byte fillerBlock = (byte)Block.dirt.blockID; + public int field_6161_q = 5169201; + protected Class[] biomeMonsters = new Class[]{EntitySpider.class, EntityZombie.class, EntitySkeleton.class, EntityCreeper.class}; + protected Class[] biomeCreatures = new Class[]{EntitySheep.class, EntityPig.class, EntityChicken.class, EntityCow.class}; + private static MobSpawnerBase[] biomeLookupTable = new MobSpawnerBase[4096]; + + public static void generateBiomeLookup() { + for(int var0 = 0; var0 < 64; ++var0) { + for(int var1 = 0; var1 < 64; ++var1) { + biomeLookupTable[var0 + var1 * 64] = getBiome((float)var0 / 63.0F, (float)var1 / 63.0F); + } + } + + desert.topBlock = desert.fillerBlock = (byte)Block.sand.blockID; + iceDesert.topBlock = iceDesert.fillerBlock = (byte)Block.sand.blockID; + } + + protected MobSpawnerBase func_4083_b() { + return this; + } + + protected MobSpawnerBase setBiomeName(String var1) { + this.biomeName = var1; + return this; + } + + protected MobSpawnerBase func_4080_a(int var1) { + this.field_6161_q = var1; + return this; + } + + protected MobSpawnerBase func_4079_b(int var1) { + this.field_6162_n = var1; + return this; + } + + public static MobSpawnerBase getBiomeFromLookup(double var0, double var2) { + int var4 = (int)(var0 * 63.0D); + int var5 = (int)(var2 * 63.0D); + return biomeLookupTable[var4 + var5 * 64]; + } + + public static MobSpawnerBase getBiome(float var0, float var1) { + var1 *= var0; + return var0 < 0.1F ? tundra : (var1 < 0.2F ? (var0 < 0.5F ? tundra : (var0 < 0.95F ? savanna : desert)) : (var1 > 0.5F && var0 < 0.7F ? swampland : (var0 < 0.5F ? taiga : (var0 < 0.97F ? (var1 < 0.35F ? shrubland : forest) : (var1 < 0.45F ? plains : (var1 < 0.9F ? seasonalForest : rainforest)))))); + } + + public Class[] getEntitiesForType(EnumCreatureType var1) { + return var1 == EnumCreatureType.monster ? this.biomeMonsters : (var1 == EnumCreatureType.creature ? this.biomeCreatures : null); + } + + static { + generateBiomeLookup(); + } +} diff --git a/minecraft_server/src/net/minecraft/src/MobSpawnerDesert.java b/minecraft_server/src/net/minecraft/src/MobSpawnerDesert.java new file mode 100644 index 0000000..0bb8072 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MobSpawnerDesert.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public class MobSpawnerDesert extends MobSpawnerBase { +} diff --git a/minecraft_server/src/net/minecraft/src/MobSpawnerHell.java b/minecraft_server/src/net/minecraft/src/MobSpawnerHell.java new file mode 100644 index 0000000..d718193 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MobSpawnerHell.java @@ -0,0 +1,8 @@ +package net.minecraft.src; + +public class MobSpawnerHell extends MobSpawnerBase { + public MobSpawnerHell() { + this.biomeMonsters = new Class[]{EntityGhast.class, EntityPigZombie.class}; + this.biomeCreatures = new Class[0]; + } +} diff --git a/minecraft_server/src/net/minecraft/src/MobSpawnerSwamp.java b/minecraft_server/src/net/minecraft/src/MobSpawnerSwamp.java new file mode 100644 index 0000000..1482f7f --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/MobSpawnerSwamp.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public class MobSpawnerSwamp extends MobSpawnerBase { +} diff --git a/minecraft_server/src/net/minecraft/src/MovingObjectPosition.java b/minecraft_server/src/net/minecraft/src/MovingObjectPosition.java new file mode 100644 index 0000000..d43bb05 --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/NBTBase.java b/minecraft_server/src/net/minecraft/src/NBTBase.java new file mode 100644 index 0000000..cb1b73f --- /dev/null +++ b/minecraft_server/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 readTag(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 writeTag(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/minecraft_server/src/net/minecraft/src/NBTTagByte.java b/minecraft_server/src/net/minecraft/src/NBTTagByte.java new file mode 100644 index 0000000..092f7a3 --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/NBTTagByteArray.java b/minecraft_server/src/net/minecraft/src/NBTTagByteArray.java new file mode 100644 index 0000000..d35b4a8 --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/NBTTagCompound.java b/minecraft_server/src/net/minecraft/src/NBTTagCompound.java new file mode 100644 index 0000000..b95cbae --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/NBTTagCompound.java @@ -0,0 +1,136 @@ +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.writeTag(var3, var1); + } + + var1.writeByte(0); + } + + void readTagContents(DataInput var1) throws IOException { + this.tagMap.clear(); + + while(true) { + NBTBase var2 = NBTBase.readTag(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 setDouble(String var1, double var2) { + this.tagMap.put(var1, (new NBTTagDouble(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 double getDouble(String var1) { + return !this.tagMap.containsKey(var1) ? 0.0D : ((NBTTagDouble)this.tagMap.get(var1)).doubleValue; + } + + 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/minecraft_server/src/net/minecraft/src/NBTTagDouble.java b/minecraft_server/src/net/minecraft/src/NBTTagDouble.java new file mode 100644 index 0000000..39caa5c --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/NBTTagEnd.java b/minecraft_server/src/net/minecraft/src/NBTTagEnd.java new file mode 100644 index 0000000..1385764 --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/NBTTagFloat.java b/minecraft_server/src/net/minecraft/src/NBTTagFloat.java new file mode 100644 index 0000000..d5db8ec --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/NBTTagInt.java b/minecraft_server/src/net/minecraft/src/NBTTagInt.java new file mode 100644 index 0000000..77e69ac --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/NBTTagList.java b/minecraft_server/src/net/minecraft/src/NBTTagList.java new file mode 100644 index 0000000..3968e9b --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/NBTTagLong.java b/minecraft_server/src/net/minecraft/src/NBTTagLong.java new file mode 100644 index 0000000..ef65cdd --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/NBTTagShort.java b/minecraft_server/src/net/minecraft/src/NBTTagShort.java new file mode 100644 index 0000000..b22621f --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/NBTTagString.java b/minecraft_server/src/net/minecraft/src/NBTTagString.java new file mode 100644 index 0000000..91411d1 --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/NetHandler.java b/minecraft_server/src/net/minecraft/src/NetHandler.java new file mode 100644 index 0000000..312be75 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/NetHandler.java @@ -0,0 +1,140 @@ +package net.minecraft.src; + +public class NetHandler { + public void handleMapChunk(Packet51MapChunk var1) { + } + + public void func_6001_a(Packet var1) { + } + + public void handleErrorMessage(String var1) { + } + + public void handleKickDisconnect(Packet255KickDisconnect var1) { + this.func_6001_a(var1); + } + + public void handleLogin(Packet1Login var1) { + this.func_6001_a(var1); + } + + public void handleFlying(Packet10Flying var1) { + this.func_6001_a(var1); + } + + public void handleMultiBlockChange(Packet52MultiBlockChange var1) { + this.func_6001_a(var1); + } + + public void handleBlockDig(Packet14BlockDig var1) { + this.func_6001_a(var1); + } + + public void handleBlockChange(Packet53BlockChange var1) { + this.func_6001_a(var1); + } + + public void handlePreChunk(Packet50PreChunk var1) { + this.func_6001_a(var1); + } + + public void handleNamedEntitySpawn(Packet20NamedEntitySpawn var1) { + this.func_6001_a(var1); + } + + public void handleEntity(Packet30Entity var1) { + this.func_6001_a(var1); + } + + public void handleEntityTeleport(Packet34EntityTeleport var1) { + this.func_6001_a(var1); + } + + public void handlePlace(Packet15Place var1) { + this.func_6001_a(var1); + } + + public void handleBlockItemSwitch(Packet16BlockItemSwitch var1) { + this.func_6001_a(var1); + } + + public void handleDestroyEntity(Packet29DestroyEntity var1) { + this.func_6001_a(var1); + } + + public void handlePickupSpawn(Packet21PickupSpawn var1) { + this.func_6001_a(var1); + } + + public void handleCollect(Packet22Collect var1) { + this.func_6001_a(var1); + } + + public void handleChat(Packet3Chat var1) { + this.func_6001_a(var1); + } + + public void handleAddToInventory(Packet17AddToInventory var1) { + this.func_6001_a(var1); + } + + public void handleVehicleSpawn(Packet23VehicleSpawn var1) { + this.func_6001_a(var1); + } + + public void handleArmAnimation(Packet18ArmAnimation var1) { + this.func_6001_a(var1); + } + + public void handleHandshake(Packet2Handshake var1) { + this.func_6001_a(var1); + } + + public void handleMobSpawn(Packet24MobSpawn var1) { + this.func_6001_a(var1); + } + + public void handleUpdateTime(Packet4UpdateTime var1) { + this.func_6001_a(var1); + } + + public void handlePlayerInventory(Packet5PlayerInventory var1) { + this.func_6001_a(var1); + } + + public void handleComplexEntity(Packet59ComplexEntity var1) { + this.func_6001_a(var1); + } + + public void handleSpawnPosition(Packet6SpawnPosition var1) { + this.func_6001_a(var1); + } + + public void func_6002_a(Packet28 var1) { + this.func_6001_a(var1); + } + + public void func_6003_a(Packet39 var1) { + this.func_6001_a(var1); + } + + public void func_6006_a(Packet7 var1) { + this.func_6001_a(var1); + } + + public void func_9001_a(Packet38 var1) { + this.func_6001_a(var1); + } + + public void func_9003_a(Packet8 var1) { + this.func_6001_a(var1); + } + + public void func_9002_a(Packet9 var1) { + this.func_6001_a(var1); + } + + public void func_12001_a(Packet60 var1) { + this.func_6001_a(var1); + } +} diff --git a/minecraft_server/src/net/minecraft/src/NetLoginHandler.java b/minecraft_server/src/net/minecraft/src/NetLoginHandler.java new file mode 100644 index 0000000..b6dcf38 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/NetLoginHandler.java @@ -0,0 +1,118 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.net.Socket; +import java.util.Random; +import java.util.logging.Logger; +import net.minecraft.server.MinecraftServer; + +public class NetLoginHandler extends NetHandler { + public static Logger logger = Logger.getLogger("Minecraft"); + private static Random rand = new Random(); + public NetworkManager netManager; + public boolean finishedProcessing = false; + private MinecraftServer mcServer; + private int field_9005_f = 0; + private String username = null; + private Packet1Login field_9004_h = null; + private String serverId = ""; + + public NetLoginHandler(MinecraftServer var1, Socket var2, String var3) throws IOException { + this.mcServer = var1; + this.netManager = new NetworkManager(var2, var3, this); + } + + public void tryLogin() { + if(this.field_9004_h != null) { + this.doLogin(this.field_9004_h); + this.field_9004_h = null; + } + + if(this.field_9005_f++ == 600) { + this.kickUser("Took too long to log in"); + } else { + this.netManager.processReadPackets(); + } + + } + + public void kickUser(String var1) { + try { + logger.info("Disconnecting " + this.getUserAndIPString() + ": " + var1); + this.netManager.addToSendQueue(new Packet255KickDisconnect(var1)); + this.netManager.serverShutdown(); + this.finishedProcessing = true; + } catch (Exception var3) { + var3.printStackTrace(); + } + + } + + public void handleHandshake(Packet2Handshake var1) { + if(this.mcServer.onlineMode) { + this.serverId = Long.toHexString(rand.nextLong()); + this.netManager.addToSendQueue(new Packet2Handshake(this.serverId)); + } else { + this.netManager.addToSendQueue(new Packet2Handshake("-")); + } + + } + + public void handleLogin(Packet1Login var1) { + this.username = var1.username; + if(var1.protocolVersion != 6) { + if(var1.protocolVersion > 6) { + this.kickUser("Outdated server!"); + } else { + this.kickUser("Outdated client!"); + } + + } else { + if(!this.mcServer.onlineMode) { + this.doLogin(var1); + } else { + (new ThreadLoginVerifier(this, var1)).start(); + } + + } + } + + public void doLogin(Packet1Login var1) { + EntityPlayerMP var2 = this.mcServer.configManager.login(this, var1.username, var1.password); + if(var2 != null) { + logger.info(this.getUserAndIPString() + " logged in with entity id " + var2.field_331_c); + NetServerHandler var3 = new NetServerHandler(this.mcServer, this.netManager, var2); + var3.sendPacket(new Packet1Login("", "", var2.field_331_c, this.mcServer.worldMngr.randomSeed, (byte)this.mcServer.worldMngr.field_4272_q.field_6165_g)); + var3.sendPacket(new Packet6SpawnPosition(this.mcServer.worldMngr.spawnX, this.mcServer.worldMngr.spawnY, this.mcServer.worldMngr.spawnZ)); + this.mcServer.configManager.sendPacketToAllPlayers(new Packet3Chat("\u00a7e" + var2.username + " joined the game.")); + this.mcServer.configManager.playerLoggedIn(var2); + var3.func_41_a(var2.posX, var2.posY, var2.posZ, var2.rotationYaw, var2.rotationPitch); + var3.func_40_d(); + this.mcServer.field_6036_c.func_4108_a(var3); + var3.sendPacket(new Packet4UpdateTime(this.mcServer.worldMngr.worldTime)); + } + + this.finishedProcessing = true; + } + + public void handleErrorMessage(String var1) { + logger.info(this.getUserAndIPString() + " lost connection"); + this.finishedProcessing = true; + } + + public void func_6001_a(Packet var1) { + this.kickUser("Protocol error"); + } + + public String getUserAndIPString() { + return this.username != null ? this.username + " [" + this.netManager.getRemoteAddress().toString() + "]" : this.netManager.getRemoteAddress().toString(); + } + + static String getServerId(NetLoginHandler var0) { + return var0.serverId; + } + + static Packet1Login setLoginPacket(NetLoginHandler var0, Packet1Login var1) { + return var0.field_9004_h = var1; + } +} diff --git a/minecraft_server/src/net/minecraft/src/NetServerHandler.java b/minecraft_server/src/net/minecraft/src/NetServerHandler.java new file mode 100644 index 0000000..00b668b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/NetServerHandler.java @@ -0,0 +1,471 @@ +package net.minecraft.src; + +import java.util.logging.Logger; +import net.minecraft.server.MinecraftServer; + +public class NetServerHandler extends NetHandler implements ICommandListener { + public static Logger logger = Logger.getLogger("Minecraft"); + public NetworkManager netManager; + public boolean field_18_c = false; + private MinecraftServer mcServer; + private EntityPlayerMP playerEntity; + private int field_15_f = 0; + private double field_9009_g; + private double field_9008_h; + private double field_9007_i; + private boolean field_9006_j = true; + private ItemStack field_10_k = null; + + public NetServerHandler(MinecraftServer var1, NetworkManager var2, EntityPlayerMP var3) { + this.mcServer = var1; + this.netManager = var2; + var2.setNetHandler(this); + this.playerEntity = var3; + var3.field_421_a = this; + } + + public void func_42_a() { + this.netManager.processReadPackets(); + if(this.field_15_f++ % 20 == 0) { + this.netManager.addToSendQueue(new Packet0KeepAlive()); + } + + } + + public void func_43_c(String var1) { + this.netManager.addToSendQueue(new Packet255KickDisconnect(var1)); + this.netManager.serverShutdown(); + this.mcServer.configManager.sendPacketToAllPlayers(new Packet3Chat("\u00a7e" + this.playerEntity.username + " left the game.")); + this.mcServer.configManager.playerLoggedOut(this.playerEntity); + this.field_18_c = true; + } + + public void handleFlying(Packet10Flying var1) { + double var2; + if(!this.field_9006_j) { + var2 = var1.yPosition - this.field_9008_h; + if(var1.xPosition == this.field_9009_g && var2 * var2 < 0.01D && var1.zPosition == this.field_9007_i) { + this.field_9006_j = true; + } + } + + if(this.field_9006_j) { + double var4; + double var6; + double var8; + double var12; + if(this.playerEntity.field_327_g != null) { + float var24 = this.playerEntity.rotationYaw; + float var3 = this.playerEntity.rotationPitch; + this.playerEntity.field_327_g.func_127_w(); + var4 = this.playerEntity.posX; + var6 = this.playerEntity.posY; + var8 = this.playerEntity.posZ; + double var25 = 0.0D; + var12 = 0.0D; + if(var1.rotating) { + var24 = var1.yaw; + var3 = var1.pitch; + } + + if(var1.moving && var1.yPosition == -999.0D && var1.stance == -999.0D) { + var25 = var1.xPosition; + var12 = var1.zPosition; + } + + this.playerEntity.onGround = var1.onGround; + this.playerEntity.func_175_i(); + this.playerEntity.moveEntity(var25, 0.0D, var12); + this.playerEntity.setPositionAndRotation(var4, var6, var8, var24, var3); + this.playerEntity.motionX = var25; + this.playerEntity.motionZ = var12; + if(this.playerEntity.field_327_g != null) { + this.mcServer.worldMngr.func_12017_b(this.playerEntity.field_327_g, true); + } + + if(this.playerEntity.field_327_g != null) { + this.playerEntity.field_327_g.func_127_w(); + } + + this.mcServer.configManager.func_613_b(this.playerEntity); + this.field_9009_g = this.playerEntity.posX; + this.field_9008_h = this.playerEntity.posY; + this.field_9007_i = this.playerEntity.posZ; + this.mcServer.worldMngr.func_520_e(this.playerEntity); + return; + } + + var2 = this.playerEntity.posY; + this.field_9009_g = this.playerEntity.posX; + this.field_9008_h = this.playerEntity.posY; + this.field_9007_i = this.playerEntity.posZ; + var4 = this.playerEntity.posX; + var6 = this.playerEntity.posY; + var8 = this.playerEntity.posZ; + float var10 = this.playerEntity.rotationYaw; + float var11 = this.playerEntity.rotationPitch; + if(var1.moving && var1.yPosition == -999.0D && var1.stance == -999.0D) { + var1.moving = false; + } + + if(var1.moving) { + var4 = var1.xPosition; + var6 = var1.yPosition; + var8 = var1.zPosition; + var12 = var1.stance - var1.yPosition; + if(var12 > 1.65D || var12 < 0.1D) { + this.func_43_c("Illegal stance"); + logger.warning(this.playerEntity.username + " had an illegal stance: " + var12); + } + + this.playerEntity.field_418_ai = var1.stance; + } + + if(var1.rotating) { + var10 = var1.yaw; + var11 = var1.pitch; + } + + this.playerEntity.func_175_i(); + this.playerEntity.field_9068_R = 0.0F; + this.playerEntity.setPositionAndRotation(this.field_9009_g, this.field_9008_h, this.field_9007_i, var10, var11); + var12 = var4 - this.playerEntity.posX; + double var14 = var6 - this.playerEntity.posY; + double var16 = var8 - this.playerEntity.posZ; + float var18 = 1.0F / 16.0F; + boolean var19 = this.mcServer.worldMngr.getCollidingBoundingBoxes(this.playerEntity, this.playerEntity.boundingBox.copy().func_694_e((double)var18, (double)var18, (double)var18)).size() == 0; + this.playerEntity.moveEntity(var12, var14, var16); + var12 = var4 - this.playerEntity.posX; + var14 = var6 - this.playerEntity.posY; + if(var14 > -0.5D || var14 < 0.5D) { + var14 = 0.0D; + } + + var16 = var8 - this.playerEntity.posZ; + double var20 = var12 * var12 + var14 * var14 + var16 * var16; + boolean var22 = false; + if(var20 > 1.0D / 16.0D) { + var22 = true; + logger.warning(this.playerEntity.username + " moved wrongly!"); + System.out.println("Got position " + var4 + ", " + var6 + ", " + var8); + System.out.println("Expected " + this.playerEntity.posX + ", " + this.playerEntity.posY + ", " + this.playerEntity.posZ); + } + + this.playerEntity.setPositionAndRotation(var4, var6, var8, var10, var11); + boolean var23 = this.mcServer.worldMngr.getCollidingBoundingBoxes(this.playerEntity, this.playerEntity.boundingBox.copy().func_694_e((double)var18, (double)var18, (double)var18)).size() == 0; + if(var19 && (var22 || !var23)) { + this.func_41_a(this.field_9009_g, this.field_9008_h, this.field_9007_i, var10, var11); + return; + } + + this.playerEntity.onGround = var1.onGround; + this.mcServer.configManager.func_613_b(this.playerEntity); + this.playerEntity.func_9153_b(this.playerEntity.posY - var2, var1.onGround); + } + + } + + public void func_41_a(double var1, double var3, double var5, float var7, float var8) { + this.field_9006_j = false; + this.field_9009_g = var1; + this.field_9008_h = var3; + this.field_9007_i = var5; + this.playerEntity.setPositionAndRotation(var1, var3, var5, var7, var8); + this.playerEntity.field_421_a.sendPacket(new Packet13PlayerLookMove(var1, var3 + (double)1.62F, var3, var5, var7, var8, false)); + } + + public void handleBlockDig(Packet14BlockDig var1) { + this.playerEntity.inventory.mainInventory[this.playerEntity.inventory.currentItem] = this.field_10_k; + boolean var2 = this.mcServer.worldMngr.field_819_z = this.mcServer.configManager.isOp(this.playerEntity.username); + boolean var3 = false; + if(var1.status == 0) { + var3 = true; + } + + if(var1.status == 1) { + var3 = true; + } + + int var4 = var1.xPosition; + int var5 = var1.yPosition; + int var6 = var1.zPosition; + if(var3) { + double var7 = this.playerEntity.posX - ((double)var4 + 0.5D); + double var9 = this.playerEntity.posY - ((double)var5 + 0.5D); + double var11 = this.playerEntity.posZ - ((double)var6 + 0.5D); + double var13 = var7 * var7 + var9 * var9 + var11 * var11; + if(var13 > 36.0D) { + return; + } + + double var15 = this.playerEntity.posY; + this.playerEntity.posY = this.playerEntity.field_418_ai; + this.playerEntity.posY = var15; + } + + int var18 = var1.face; + int var8 = (int)MathHelper.abs((float)(var4 - this.mcServer.worldMngr.spawnX)); + int var19 = (int)MathHelper.abs((float)(var6 - this.mcServer.worldMngr.spawnZ)); + if(var8 > var19) { + var19 = var8; + } + + if(var1.status == 0) { + if(var19 > 16 || var2) { + this.playerEntity.field_425_ad.func_324_a(var4, var5, var6); + } + } else if(var1.status == 2) { + this.playerEntity.field_425_ad.func_328_a(); + } else if(var1.status == 1) { + if(var19 > 16 || var2) { + this.playerEntity.field_425_ad.func_326_a(var4, var5, var6, var18); + } + } else if(var1.status == 3) { + double var10 = this.playerEntity.posX - ((double)var4 + 0.5D); + double var12 = this.playerEntity.posY - ((double)var5 + 0.5D); + double var14 = this.playerEntity.posZ - ((double)var6 + 0.5D); + double var16 = var10 * var10 + var12 * var12 + var14 * var14; + if(var16 < 256.0D) { + this.playerEntity.field_421_a.sendPacket(new Packet53BlockChange(var4, var5, var6, this.mcServer.worldMngr)); + } + } + + this.mcServer.worldMngr.field_819_z = false; + } + + public void handlePlace(Packet15Place var1) { + boolean var2 = this.mcServer.worldMngr.field_819_z = this.mcServer.configManager.isOp(this.playerEntity.username); + if(var1.direction == 255) { + ItemStack var3 = var1.id >= 0 ? new ItemStack(var1.id) : null; + this.playerEntity.field_425_ad.func_6154_a(this.playerEntity, this.mcServer.worldMngr, var3); + } else { + int var10 = var1.xPosition; + int var4 = var1.yPosition; + int var5 = var1.zPosition; + int var6 = var1.direction; + int var7 = (int)MathHelper.abs((float)(var10 - this.mcServer.worldMngr.spawnX)); + int var8 = (int)MathHelper.abs((float)(var5 - this.mcServer.worldMngr.spawnZ)); + if(var7 > var8) { + var8 = var7; + } + + if(var8 > 16 || var2) { + ItemStack var9 = var1.id >= 0 ? new ItemStack(var1.id) : null; + this.playerEntity.field_425_ad.func_327_a(this.playerEntity, this.mcServer.worldMngr, var9, var10, var4, var5, var6); + } + + this.playerEntity.field_421_a.sendPacket(new Packet53BlockChange(var10, var4, var5, this.mcServer.worldMngr)); + if(var6 == 0) { + --var4; + } + + if(var6 == 1) { + ++var4; + } + + if(var6 == 2) { + --var5; + } + + if(var6 == 3) { + ++var5; + } + + if(var6 == 4) { + --var10; + } + + if(var6 == 5) { + ++var10; + } + + this.playerEntity.field_421_a.sendPacket(new Packet53BlockChange(var10, var4, var5, this.mcServer.worldMngr)); + } + + this.mcServer.worldMngr.field_819_z = false; + } + + public void handleErrorMessage(String var1) { + logger.info(this.playerEntity.username + " lost connection: " + var1); + this.mcServer.configManager.sendPacketToAllPlayers(new Packet3Chat("\u00a7e" + this.playerEntity.username + " left the game.")); + this.mcServer.configManager.playerLoggedOut(this.playerEntity); + this.field_18_c = true; + } + + public void func_6001_a(Packet var1) { + logger.warning(this.getClass() + " wasn\'t prepared to deal with a " + var1.getClass()); + this.func_43_c("Protocol error, unexpected packet"); + } + + public void sendPacket(Packet var1) { + this.netManager.addToSendQueue(var1); + } + + public void handleBlockItemSwitch(Packet16BlockItemSwitch var1) { + int var2 = var1.id; + this.playerEntity.inventory.currentItem = this.playerEntity.inventory.mainInventory.length - 1; + if(var2 == 0) { + this.field_10_k = null; + } else { + this.field_10_k = new ItemStack(var2); + } + + this.playerEntity.inventory.mainInventory[this.playerEntity.inventory.currentItem] = this.field_10_k; + this.mcServer.field_6028_k.func_12021_a(this.playerEntity, new Packet16BlockItemSwitch(this.playerEntity.field_331_c, var2)); + } + + public void handlePickupSpawn(Packet21PickupSpawn var1) { + double var2 = (double)var1.xPosition / 32.0D; + double var4 = (double)var1.yPosition / 32.0D; + double var6 = (double)var1.zPosition / 32.0D; + EntityItem var8 = new EntityItem(this.mcServer.worldMngr, var2, var4, var6, new ItemStack(var1.itemId, var1.count)); + var8.motionX = (double)var1.rotation / 128.0D; + var8.motionY = (double)var1.pitch / 128.0D; + var8.motionZ = (double)var1.roll / 128.0D; + var8.field_433_ad = 10; + this.mcServer.worldMngr.entityJoinedWorld(var8); + } + + public void handleChat(Packet3Chat var1) { + String var2 = var1.message; + if(var2.length() > 100) { + this.func_43_c("Chat message too long"); + } else { + var2 = var2.trim(); + + for(int var3 = 0; var3 < var2.length(); ++var3) { + if(" !\"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_\'abcdefghijklmnopqrstuvwxyz{|}~\u2302\u00c7\u00fc\u00e9\u00e2\u00e4\u00e0\u00e5\u00e7\u00ea\u00eb\u00e8\u00ef\u00ee\u00ec\u00c4\u00c5\u00c9\u00e6\u00c6\u00f4\u00f6\u00f2\u00fb\u00f9\u00ff\u00d6\u00dc\u00f8\u00a3\u00d8\u00d7\u0192\u00e1\u00ed\u00f3\u00fa\u00f1\u00d1\u00aa\u00ba\u00bf\u00ae\u00ac\u00bd\u00bc\u00a1\u00ab\u00bb".indexOf(var2.charAt(var3)) < 0) { + this.func_43_c("Illegal characters in chat"); + return; + } + } + + if(var2.startsWith("/")) { + this.func_4010_d(var2); + } else { + var2 = "<" + this.playerEntity.username + "> " + var2; + logger.info(var2); + this.mcServer.configManager.sendPacketToAllPlayers(new Packet3Chat(var2)); + } + + } + } + + private void func_4010_d(String var1) { + if(var1.toLowerCase().startsWith("/me ")) { + var1 = "* " + this.playerEntity.username + " " + var1.substring(var1.indexOf(" ")).trim(); + logger.info(var1); + this.mcServer.configManager.sendPacketToAllPlayers(new Packet3Chat(var1)); + } else if(var1.toLowerCase().startsWith("/kill")) { + this.playerEntity.attackEntity((Entity)null, 1000); + } else if(var1.toLowerCase().startsWith("/tell ")) { + String[] var2 = var1.split(" "); + if(var2.length >= 3) { + var1 = var1.substring(var1.indexOf(" ")).trim(); + var1 = var1.substring(var1.indexOf(" ")).trim(); + var1 = "\u00a77" + this.playerEntity.username + " whispers " + var1; + logger.info(var1 + " to " + var2[1]); + if(!this.mcServer.configManager.sendPacketToPlayer(var2[1], new Packet3Chat(var1))) { + this.sendPacket(new Packet3Chat("\u00a7cThere\'s no player by that name online.")); + } + } + } else { + String var3; + if(this.mcServer.configManager.isOp(this.playerEntity.username)) { + var3 = var1.substring(1); + logger.info(this.playerEntity.username + " issued server command: " + var3); + this.mcServer.addCommand(var3, this); + } else { + var3 = var1.substring(1); + logger.info(this.playerEntity.username + " tried command: " + var3); + } + } + + } + + public void handleArmAnimation(Packet18ArmAnimation var1) { + if(var1.animate == 1) { + this.playerEntity.func_168_z(); + } else if(var1.animate == 104) { + this.playerEntity.field_12012_al = true; + } else if(var1.animate == 105) { + this.playerEntity.field_12012_al = false; + } + + } + + public void handleKickDisconnect(Packet255KickDisconnect var1) { + this.netManager.networkShutdown("Quitting"); + } + + public int func_38_b() { + return this.netManager.getNumChunkDataPackets(); + } + + public void log(String var1) { + this.sendPacket(new Packet3Chat("\u00a77" + var1)); + } + + public String getUsername() { + return this.playerEntity.username; + } + + public void handlePlayerInventory(Packet5PlayerInventory var1) { + if(var1.type == -1) { + this.playerEntity.inventory.mainInventory = var1.stacks; + } + + if(var1.type == -2) { + this.playerEntity.inventory.craftingInventory = var1.stacks; + } + + if(var1.type == -3) { + this.playerEntity.inventory.armorInventory = var1.stacks; + } + + } + + public void func_40_d() { + this.netManager.addToSendQueue(new Packet5PlayerInventory(-1, this.playerEntity.inventory.mainInventory)); + this.netManager.addToSendQueue(new Packet5PlayerInventory(-2, this.playerEntity.inventory.craftingInventory)); + this.netManager.addToSendQueue(new Packet5PlayerInventory(-3, this.playerEntity.inventory.armorInventory)); + } + + public void handleComplexEntity(Packet59ComplexEntity var1) { + if(var1.entityNBT.getInteger("x") == var1.xPosition) { + if(var1.entityNBT.getInteger("y") == var1.yPosition) { + if(var1.entityNBT.getInteger("z") == var1.zPosition) { + TileEntity var2 = this.mcServer.worldMngr.getBlock(var1.xPosition, var1.yPosition, var1.zPosition); + if(var2 != null) { + try { + var2.readFromNBT(var1.entityNBT); + } catch (Exception var4) { + } + + var2.func_183_c(); + } + + } + } + } + } + + public void func_6006_a(Packet7 var1) { + Entity var2 = this.mcServer.worldMngr.func_6158_a(var1.field_9018_b); + this.playerEntity.inventory.mainInventory[this.playerEntity.inventory.currentItem] = this.field_10_k; + if(var2 != null && this.playerEntity.func_145_g(var2)) { + if(var1.field_9020_c == 0) { + this.playerEntity.func_9145_g(var2); + } else if(var1.field_9020_c == 1) { + this.playerEntity.func_9146_h(var2); + } + } + + } + + public void func_9002_a(Packet9 var1) { + if(this.playerEntity.field_9109_aQ <= 0) { + this.playerEntity = this.mcServer.configManager.func_9242_d(this.playerEntity); + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/NetworkAcceptThread.java b/minecraft_server/src/net/minecraft/src/NetworkAcceptThread.java new file mode 100644 index 0000000..a4a5be7 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/NetworkAcceptThread.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.net.Socket; +import net.minecraft.server.MinecraftServer; + +class NetworkAcceptThread extends Thread { + final MinecraftServer mcServer; + final NetworkListenThread field_985_b; + + NetworkAcceptThread(NetworkListenThread var1, String var2, MinecraftServer var3) { + super(var2); + this.field_985_b = var1; + this.mcServer = var3; + } + + public void run() { + while(this.field_985_b.field_973_b) { + try { + Socket var1 = NetworkListenThread.func_713_a(this.field_985_b).accept(); + if(var1 != null) { + NetLoginHandler var2 = new NetLoginHandler(this.mcServer, var1, "Connection #" + NetworkListenThread.func_712_b(this.field_985_b)); + NetworkListenThread.func_716_a(this.field_985_b, var2); + } + } catch (IOException var3) { + var3.printStackTrace(); + } + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/NetworkListenThread.java b/minecraft_server/src/net/minecraft/src/NetworkListenThread.java new file mode 100644 index 0000000..d7e0d7a --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/NetworkListenThread.java @@ -0,0 +1,87 @@ +package net.minecraft.src; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.util.ArrayList; +import java.util.logging.Level; +import java.util.logging.Logger; +import net.minecraft.server.MinecraftServer; + +public class NetworkListenThread { + public static Logger logger = Logger.getLogger("Minecraft"); + private ServerSocket field_979_d; + private Thread field_978_e; + public volatile boolean field_973_b = false; + private int field_977_f = 0; + private ArrayList field_976_g = new ArrayList(); + private ArrayList field_975_h = new ArrayList(); + public MinecraftServer mcServer; + + public NetworkListenThread(MinecraftServer var1, InetAddress var2, int var3) throws IOException { + this.mcServer = var1; + this.field_979_d = new ServerSocket(var3, 0, var2); + this.field_979_d.setPerformancePreferences(0, 2, 1); + this.field_973_b = true; + this.field_978_e = new NetworkAcceptThread(this, "Listen thread", var1); + this.field_978_e.start(); + } + + public void func_4108_a(NetServerHandler var1) { + this.field_975_h.add(var1); + } + + private void func_717_a(NetLoginHandler var1) { + if(var1 == null) { + throw new IllegalArgumentException("Got null pendingconnection!"); + } else { + this.field_976_g.add(var1); + } + } + + public void func_715_a() { + int var1; + for(var1 = 0; var1 < this.field_976_g.size(); ++var1) { + NetLoginHandler var2 = (NetLoginHandler)this.field_976_g.get(var1); + + try { + var2.tryLogin(); + } catch (Exception var5) { + var2.kickUser("Internal server error"); + logger.log(Level.WARNING, "Failed to handle packet: " + var5, var5); + } + + if(var2.finishedProcessing) { + this.field_976_g.remove(var1--); + } + } + + for(var1 = 0; var1 < this.field_975_h.size(); ++var1) { + NetServerHandler var6 = (NetServerHandler)this.field_975_h.get(var1); + + try { + var6.func_42_a(); + } catch (Exception var4) { + logger.log(Level.WARNING, "Failed to handle packet: " + var4, var4); + var6.func_43_c("Internal server error"); + } + + if(var6.field_18_c) { + this.field_975_h.remove(var1--); + } + } + + } + + static ServerSocket func_713_a(NetworkListenThread var0) { + return var0.field_979_d; + } + + static int func_712_b(NetworkListenThread var0) { + return var0.field_977_f++; + } + + static void func_716_a(NetworkListenThread var0, NetLoginHandler var1) { + var0.func_717_a(var1); + } +} diff --git a/minecraft_server/src/net/minecraft/src/NetworkManager.java b/minecraft_server/src/net/minecraft/src/NetworkManager.java new file mode 100644 index 0000000..c58d939 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/NetworkManager.java @@ -0,0 +1,219 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.net.Socket; +import java.net.SocketAddress; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class NetworkManager { + public static final Object threadSyncObject = new Object(); + public static int numReadThreads; + public static int numWriteThreads; + private Object sendQueueLock = new Object(); + private Socket networkSocket; + private final SocketAddress field_12032_f; + private DataInputStream socketInputStream; + private DataOutputStream socketOutputStream; + private boolean isRunning = true; + private List readPackets = Collections.synchronizedList(new ArrayList()); + private List dataPackets = Collections.synchronizedList(new ArrayList()); + private List chunkDataPackets = Collections.synchronizedList(new ArrayList()); + private NetHandler netHandler; + private boolean isServerTerminating = false; + private Thread writeThread; + private Thread readThread; + private boolean isTerminating = false; + private String terminationReason = ""; + private int timeSinceLastRead = 0; + private int sendQueueByteLength = 0; + private int chunkDataSendCounter = 0; + + public NetworkManager(Socket var1, String var2, NetHandler var3) throws IOException { + this.networkSocket = var1; + this.field_12032_f = var1.getRemoteSocketAddress(); + this.netHandler = var3; + var1.setTrafficClass(24); + this.socketInputStream = new DataInputStream(var1.getInputStream()); + this.socketOutputStream = new DataOutputStream(var1.getOutputStream()); + this.readThread = new NetworkReaderThread(this, var2 + " read thread"); + this.writeThread = new NetworkWriterThread(this, var2 + " write thread"); + this.readThread.start(); + this.writeThread.start(); + } + + public void setNetHandler(NetHandler var1) { + this.netHandler = var1; + } + + public void addToSendQueue(Packet var1) { + if(!this.isServerTerminating) { + Object var2 = this.sendQueueLock; + synchronized(var2) { + this.sendQueueByteLength += var1.getPacketSize() + 1; + if(var1.isChunkDataPacket) { + this.chunkDataPackets.add(var1); + } else { + this.dataPackets.add(var1); + } + + } + } + } + + private void sendPacket() { + try { + boolean var1 = true; + Packet var2; + Object var3; + if(!this.dataPackets.isEmpty()) { + var1 = false; + var3 = this.sendQueueLock; + synchronized(var3) { + var2 = (Packet)this.dataPackets.remove(0); + this.sendQueueByteLength -= var2.getPacketSize() + 1; + } + + Packet.writePacket(var2, this.socketOutputStream); + } + + if((var1 || this.chunkDataSendCounter-- <= 0) && !this.chunkDataPackets.isEmpty()) { + var1 = false; + var3 = this.sendQueueLock; + synchronized(var3) { + var2 = (Packet)this.chunkDataPackets.remove(0); + this.sendQueueByteLength -= var2.getPacketSize() + 1; + } + + Packet.writePacket(var2, this.socketOutputStream); + this.chunkDataSendCounter = 50; + } + + if(var1) { + Thread.sleep(10L); + } + } catch (InterruptedException var8) { + } catch (Exception var9) { + if(!this.isTerminating) { + this.onNetworkError(var9); + } + } + + } + + private void readPacket() { + try { + Packet var1 = Packet.readPacket(this.socketInputStream); + if(var1 != null) { + this.readPackets.add(var1); + } else { + this.networkShutdown("End of stream"); + } + } catch (Exception var2) { + if(!this.isTerminating) { + this.onNetworkError(var2); + } + } + + } + + private void onNetworkError(Exception var1) { + var1.printStackTrace(); + this.networkShutdown("Internal exception: " + var1.toString()); + } + + public void networkShutdown(String var1) { + if(this.isRunning) { + this.isTerminating = true; + this.terminationReason = var1; + (new NetworkMasterThread(this)).start(); + this.isRunning = false; + + try { + this.socketInputStream.close(); + this.socketInputStream = null; + } catch (Throwable var5) { + } + + try { + this.socketOutputStream.close(); + this.socketOutputStream = null; + } catch (Throwable var4) { + } + + try { + this.networkSocket.close(); + this.networkSocket = null; + } catch (Throwable var3) { + } + + } + } + + public void processReadPackets() { + if(this.sendQueueByteLength > 1048576) { + this.networkShutdown("Send buffer overflow"); + } + + if(this.readPackets.isEmpty()) { + if(this.timeSinceLastRead++ == 1200) { + this.networkShutdown("Timed out"); + } + } else { + this.timeSinceLastRead = 0; + } + + int var1 = 100; + + while(!this.readPackets.isEmpty() && var1-- >= 0) { + Packet var2 = (Packet)this.readPackets.remove(0); + var2.processPacket(this.netHandler); + } + + if(this.isTerminating && this.readPackets.isEmpty()) { + this.netHandler.handleErrorMessage(this.terminationReason); + } + + } + + public SocketAddress getRemoteAddress() { + return this.field_12032_f; + } + + public void serverShutdown() { + this.isServerTerminating = true; + this.readThread.interrupt(); + (new ThreadMonitorConnection(this)).start(); + } + + public int getNumChunkDataPackets() { + return this.chunkDataPackets.size(); + } + + static boolean isRunning(NetworkManager var0) { + return var0.isRunning; + } + + static boolean isServerTerminating(NetworkManager var0) { + return var0.isServerTerminating; + } + + static void readNetworkPacket(NetworkManager var0) { + var0.readPacket(); + } + + static void sendNetworkPacket(NetworkManager var0) { + var0.sendPacket(); + } + + static Thread getReadThread(NetworkManager var0) { + return var0.readThread; + } + + static Thread getWriteThread(NetworkManager var0) { + return var0.writeThread; + } +} diff --git a/minecraft_server/src/net/minecraft/src/NetworkMasterThread.java b/minecraft_server/src/net/minecraft/src/NetworkMasterThread.java new file mode 100644 index 0000000..bd6085c --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/NetworkMasterThread.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +class NetworkMasterThread extends Thread { + final NetworkManager netManager; + + NetworkMasterThread(NetworkManager var1) { + this.netManager = var1; + } + + public void run() { + try { + Thread.sleep(5000L); + if(NetworkManager.getReadThread(this.netManager).isAlive()) { + try { + NetworkManager.getReadThread(this.netManager).stop(); + } catch (Throwable var3) { + } + } + + if(NetworkManager.getWriteThread(this.netManager).isAlive()) { + try { + NetworkManager.getWriteThread(this.netManager).stop(); + } catch (Throwable var2) { + } + } + } catch (InterruptedException var4) { + var4.printStackTrace(); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/NetworkReaderThread.java b/minecraft_server/src/net/minecraft/src/NetworkReaderThread.java new file mode 100644 index 0000000..c8e5682 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/NetworkReaderThread.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +class NetworkReaderThread extends Thread { + final NetworkManager netManager; + + NetworkReaderThread(NetworkManager var1, String var2) { + super(var2); + this.netManager = var1; + } + + public void run() { + Object var1 = NetworkManager.threadSyncObject; + synchronized(var1) { + ++NetworkManager.numReadThreads; + } + + while(true) { + boolean var11 = false; + + try { + var11 = true; + if(NetworkManager.isRunning(this.netManager)) { + if(!NetworkManager.isServerTerminating(this.netManager)) { + NetworkManager.readNetworkPacket(this.netManager); + continue; + } + + var11 = false; + break; + } + + var11 = false; + break; + } finally { + if(var11) { + Object var5 = NetworkManager.threadSyncObject; + synchronized(var5) { + --NetworkManager.numReadThreads; + } + } + } + } + + var1 = NetworkManager.threadSyncObject; + synchronized(var1) { + --NetworkManager.numReadThreads; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/NetworkWriterThread.java b/minecraft_server/src/net/minecraft/src/NetworkWriterThread.java new file mode 100644 index 0000000..8357e0b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/NetworkWriterThread.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +class NetworkWriterThread extends Thread { + final NetworkManager netManager; + + NetworkWriterThread(NetworkManager var1, String var2) { + super(var2); + this.netManager = var1; + } + + public void run() { + Object var1 = NetworkManager.threadSyncObject; + synchronized(var1) { + ++NetworkManager.numWriteThreads; + } + + while(true) { + boolean var11 = false; + + try { + var11 = true; + if(!NetworkManager.isRunning(this.netManager)) { + var11 = false; + break; + } + + NetworkManager.sendNetworkPacket(this.netManager); + } finally { + if(var11) { + Object var5 = NetworkManager.threadSyncObject; + synchronized(var5) { + --NetworkManager.numWriteThreads; + } + } + } + } + + var1 = NetworkManager.threadSyncObject; + synchronized(var1) { + --NetworkManager.numWriteThreads; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/NextTickListEntry.java b/minecraft_server/src/net/minecraft/src/NextTickListEntry.java new file mode 100644 index 0000000..7e28c79 --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/NibbleArray.java b/minecraft_server/src/net/minecraft/src/NibbleArray.java new file mode 100644 index 0000000..6966128 --- /dev/null +++ b/minecraft_server/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 getNibble(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 setNibble(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/minecraft_server/src/net/minecraft/src/NoiseGenerator.java b/minecraft_server/src/net/minecraft/src/NoiseGenerator.java new file mode 100644 index 0000000..bb08431 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/NoiseGenerator.java @@ -0,0 +1,4 @@ +package net.minecraft.src; + +public abstract class NoiseGenerator { +} diff --git a/minecraft_server/src/net/minecraft/src/NoiseGenerator2.java b/minecraft_server/src/net/minecraft/src/NoiseGenerator2.java new file mode 100644 index 0000000..cd64939 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/NoiseGenerator2.java @@ -0,0 +1,114 @@ +package net.minecraft.src; + +import java.util.Random; + +public class NoiseGenerator2 { + private static int[][] field_4317_d = new int[][]{{1, 1, 0}, {-1, 1, 0}, {1, -1, 0}, {-1, -1, 0}, {1, 0, 1}, {-1, 0, 1}, {1, 0, -1}, {-1, 0, -1}, {0, 1, 1}, {0, -1, 1}, {0, 1, -1}, {0, -1, -1}}; + private int[] field_4316_e; + public double field_4313_a; + public double field_4312_b; + public double field_4318_c; + private static final double field_4315_f = 0.5D * (Math.sqrt(3.0D) - 1.0D); + private static final double field_4314_g = (3.0D - Math.sqrt(3.0D)) / 6.0D; + + public NoiseGenerator2() { + this(new Random()); + } + + public NoiseGenerator2(Random var1) { + this.field_4316_e = new int[512]; + this.field_4313_a = var1.nextDouble() * 256.0D; + this.field_4312_b = var1.nextDouble() * 256.0D; + this.field_4318_c = var1.nextDouble() * 256.0D; + + int var2; + for(var2 = 0; var2 < 256; this.field_4316_e[var2] = var2++) { + } + + for(var2 = 0; var2 < 256; ++var2) { + int var3 = var1.nextInt(256 - var2) + var2; + int var4 = this.field_4316_e[var2]; + this.field_4316_e[var2] = this.field_4316_e[var3]; + this.field_4316_e[var3] = var4; + this.field_4316_e[var2 + 256] = this.field_4316_e[var2]; + } + + } + + private static int func_4113_a(double var0) { + return var0 > 0.0D ? (int)var0 : (int)var0 - 1; + } + + private static double func_4114_a(int[] var0, double var1, double var3) { + return (double)var0[0] * var1 + (double)var0[1] * var3; + } + + public void func_4115_a(double[] var1, double var2, double var4, int var6, int var7, double var8, double var10, double var12) { + int var14 = 0; + + for(int var15 = 0; var15 < var6; ++var15) { + double var16 = (var2 + (double)var15) * var8 + this.field_4313_a; + + for(int var18 = 0; var18 < var7; ++var18) { + double var19 = (var4 + (double)var18) * var10 + this.field_4312_b; + double var27 = (var16 + var19) * field_4315_f; + int var29 = func_4113_a(var16 + var27); + int var30 = func_4113_a(var19 + var27); + double var31 = (double)(var29 + var30) * field_4314_g; + double var33 = (double)var29 - var31; + double var35 = (double)var30 - var31; + double var37 = var16 - var33; + double var39 = var19 - var35; + byte var41; + byte var42; + if(var37 > var39) { + var41 = 1; + var42 = 0; + } else { + var41 = 0; + var42 = 1; + } + + double var43 = var37 - (double)var41 + field_4314_g; + double var45 = var39 - (double)var42 + field_4314_g; + double var47 = var37 - 1.0D + 2.0D * field_4314_g; + double var49 = var39 - 1.0D + 2.0D * field_4314_g; + int var51 = var29 & 255; + int var52 = var30 & 255; + int var53 = this.field_4316_e[var51 + this.field_4316_e[var52]] % 12; + int var54 = this.field_4316_e[var51 + var41 + this.field_4316_e[var52 + var42]] % 12; + int var55 = this.field_4316_e[var51 + 1 + this.field_4316_e[var52 + 1]] % 12; + double var56 = 0.5D - var37 * var37 - var39 * var39; + double var21; + if(var56 < 0.0D) { + var21 = 0.0D; + } else { + var56 *= var56; + var21 = var56 * var56 * func_4114_a(field_4317_d[var53], var37, var39); + } + + double var58 = 0.5D - var43 * var43 - var45 * var45; + double var23; + if(var58 < 0.0D) { + var23 = 0.0D; + } else { + var58 *= var58; + var23 = var58 * var58 * func_4114_a(field_4317_d[var54], var43, var45); + } + + double var60 = 0.5D - var47 * var47 - var49 * var49; + double var25; + if(var60 < 0.0D) { + var25 = 0.0D; + } else { + var60 *= var60; + var25 = var60 * var60 * func_4114_a(field_4317_d[var55], var47, var49); + } + + int var10001 = var14++; + var1[var10001] += 70.0D * (var21 + var23 + var25) * var12; + } + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/NoiseGeneratorOctaves.java b/minecraft_server/src/net/minecraft/src/NoiseGeneratorOctaves.java new file mode 100644 index 0000000..46fc274 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/NoiseGeneratorOctaves.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.util.Random; + +public class NoiseGeneratorOctaves extends NoiseGenerator { + private NoiseGeneratorPerlin[] field_939_a; + private int field_938_b; + + public NoiseGeneratorOctaves(Random var1, int var2) { + this.field_938_b = var2; + this.field_939_a = new NoiseGeneratorPerlin[var2]; + + for(int var3 = 0; var3 < var2; ++var3) { + this.field_939_a[var3] = new NoiseGeneratorPerlin(var1); + } + + } + + public double func_647_a(double var1, double var3) { + double var5 = 0.0D; + double var7 = 1.0D; + + for(int var9 = 0; var9 < this.field_938_b; ++var9) { + var5 += this.field_939_a[var9].func_642_a(var1 * var7, var3 * var7) / var7; + var7 /= 2.0D; + } + + return var5; + } + + public double[] func_648_a(double[] var1, double var2, double var4, double var6, int var8, int var9, int var10, double var11, double var13, double var15) { + if(var1 == null) { + var1 = new double[var8 * var9 * var10]; + } else { + for(int var17 = 0; var17 < var1.length; ++var17) { + var1[var17] = 0.0D; + } + } + + double var20 = 1.0D; + + for(int var19 = 0; var19 < this.field_938_b; ++var19) { + this.field_939_a[var19].func_646_a(var1, var2, var4, var6, var8, var9, var10, var11 * var20, var13 * var20, var15 * var20, var20); + var20 /= 2.0D; + } + + return var1; + } + + public double[] func_4103_a(double[] var1, int var2, int var3, int var4, int var5, double var6, double var8, double var10) { + return this.func_648_a(var1, (double)var2, 10.0D, (double)var3, var4, 1, var5, var6, 1.0D, var8); + } +} diff --git a/minecraft_server/src/net/minecraft/src/NoiseGeneratorOctaves2.java b/minecraft_server/src/net/minecraft/src/NoiseGeneratorOctaves2.java new file mode 100644 index 0000000..c463198 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/NoiseGeneratorOctaves2.java @@ -0,0 +1,45 @@ +package net.minecraft.src; + +import java.util.Random; + +public class NoiseGeneratorOctaves2 extends NoiseGenerator { + private NoiseGenerator2[] field_4308_a; + private int field_4307_b; + + public NoiseGeneratorOctaves2(Random var1, int var2) { + this.field_4307_b = var2; + this.field_4308_a = new NoiseGenerator2[var2]; + + for(int var3 = 0; var3 < var2; ++var3) { + this.field_4308_a[var3] = new NoiseGenerator2(var1); + } + + } + + public double[] func_4101_a(double[] var1, double var2, double var4, int var6, int var7, double var8, double var10, double var12) { + return this.func_4100_a(var1, var2, var4, var6, var7, var8, var10, var12, 0.5D); + } + + public double[] func_4100_a(double[] var1, double var2, double var4, int var6, int var7, double var8, double var10, double var12, double var14) { + var8 /= 1.5D; + var10 /= 1.5D; + if(var1 != null && var1.length >= var6 * var7) { + for(int var16 = 0; var16 < var1.length; ++var16) { + var1[var16] = 0.0D; + } + } else { + var1 = new double[var6 * var7]; + } + + double var21 = 1.0D; + double var18 = 1.0D; + + for(int var20 = 0; var20 < this.field_4307_b; ++var20) { + this.field_4308_a[var20].func_4115_a(var1, var2, var4, var6, var7, var8 * var18, var10 * var18, 0.55D / var21); + var18 *= var12; + var21 *= var14; + } + + return var1; + } +} diff --git a/minecraft_server/src/net/minecraft/src/NoiseGeneratorPerlin.java b/minecraft_server/src/net/minecraft/src/NoiseGeneratorPerlin.java new file mode 100644 index 0000000..3047bf0 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/NoiseGeneratorPerlin.java @@ -0,0 +1,221 @@ +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 final double lerp(double var1, double var3, double var5) { + return var3 + var1 * (var5 - var3); + } + + public final double func_4102_a(int var1, double var2, double var4) { + int var6 = var1 & 15; + double var7 = (double)(1 - ((var6 & 8) >> 3)) * var2; + double var9 = var6 < 4 ? 0.0D : (var6 != 12 && var6 != 14 ? var4 : var2); + return ((var6 & 1) == 0 ? var7 : -var7) + ((var6 & 2) == 0 ? var9 : -var9); + } + + public final double grad(int var1, double var2, double var4, double var6) { + int var8 = var1 & 15; + double var9 = var8 < 8 ? var2 : var4; + double var11 = var8 < 4 ? var4 : (var8 != 12 && var8 != 14 ? var6 : var2); + return ((var8 & 1) == 0 ? var9 : -var9) + ((var8 & 2) == 0 ? var11 : -var11); + } + + public double func_642_a(double var1, double var3) { + return this.generateNoise(var1, var3, 0.0D); + } + + public void func_646_a(double[] var1, double var2, double var4, double var6, int var8, int var9, int var10, double var11, double var13, double var15, double var17) { + int var10001; + int var19; + int var22; + double var31; + double var35; + int var37; + double var38; + int var40; + int var41; + double var42; + int var75; + if(var9 == 1) { + boolean var64 = false; + boolean var65 = false; + boolean var21 = false; + boolean var68 = false; + double var70 = 0.0D; + double var73 = 0.0D; + var75 = 0; + double var77 = 1.0D / var17; + + for(int var30 = 0; var30 < var8; ++var30) { + var31 = (var2 + (double)var30) * var11 + this.xCoord; + int var78 = (int)var31; + if(var31 < (double)var78) { + --var78; + } + + int var34 = var78 & 255; + var31 -= (double)var78; + var35 = var31 * var31 * var31 * (var31 * (var31 * 6.0D - 15.0D) + 10.0D); + + for(var37 = 0; var37 < var10; ++var37) { + var38 = (var6 + (double)var37) * var15 + this.zCoord; + var40 = (int)var38; + if(var38 < (double)var40) { + --var40; + } + + var41 = var40 & 255; + var38 -= (double)var40; + var42 = var38 * var38 * var38 * (var38 * (var38 * 6.0D - 15.0D) + 10.0D); + var19 = this.permutations[var34] + 0; + int var66 = this.permutations[var19] + var41; + int var67 = this.permutations[var34 + 1] + 0; + var22 = this.permutations[var67] + var41; + var70 = this.lerp(var35, this.func_4102_a(this.permutations[var66], var31, var38), this.grad(this.permutations[var22], var31 - 1.0D, 0.0D, var38)); + var73 = this.lerp(var35, this.grad(this.permutations[var66 + 1], var31, 0.0D, var38 - 1.0D), this.grad(this.permutations[var22 + 1], var31 - 1.0D, 0.0D, var38 - 1.0D)); + double var79 = this.lerp(var42, var70, var73); + var10001 = var75++; + var1[var10001] += var79 * var77; + } + } + + } else { + var19 = 0; + double var20 = 1.0D / var17; + var22 = -1; + boolean var23 = false; + boolean var24 = false; + boolean var25 = false; + boolean var26 = false; + boolean var27 = false; + boolean var28 = false; + double var29 = 0.0D; + var31 = 0.0D; + double var33 = 0.0D; + var35 = 0.0D; + + for(var37 = 0; var37 < var8; ++var37) { + var38 = (var2 + (double)var37) * var11 + this.xCoord; + var40 = (int)var38; + if(var38 < (double)var40) { + --var40; + } + + var41 = var40 & 255; + var38 -= (double)var40; + var42 = var38 * var38 * var38 * (var38 * (var38 * 6.0D - 15.0D) + 10.0D); + + for(int var44 = 0; var44 < var10; ++var44) { + double var45 = (var6 + (double)var44) * var15 + this.zCoord; + int var47 = (int)var45; + if(var45 < (double)var47) { + --var47; + } + + int var48 = var47 & 255; + var45 -= (double)var47; + double var49 = var45 * var45 * var45 * (var45 * (var45 * 6.0D - 15.0D) + 10.0D); + + for(int var51 = 0; var51 < var9; ++var51) { + double var52 = (var4 + (double)var51) * var13 + this.yCoord; + int var54 = (int)var52; + if(var52 < (double)var54) { + --var54; + } + + int var55 = var54 & 255; + var52 -= (double)var54; + double var56 = var52 * var52 * var52 * (var52 * (var52 * 6.0D - 15.0D) + 10.0D); + if(var51 == 0 || var55 != var22) { + var22 = var55; + int var69 = this.permutations[var41] + var55; + int var71 = this.permutations[var69] + var48; + int var72 = this.permutations[var69 + 1] + var48; + int var74 = this.permutations[var41 + 1] + var55; + var75 = this.permutations[var74] + var48; + int var76 = this.permutations[var74 + 1] + var48; + var29 = this.lerp(var42, this.grad(this.permutations[var71], var38, var52, var45), this.grad(this.permutations[var75], var38 - 1.0D, var52, var45)); + var31 = this.lerp(var42, this.grad(this.permutations[var72], var38, var52 - 1.0D, var45), this.grad(this.permutations[var76], var38 - 1.0D, var52 - 1.0D, var45)); + var33 = this.lerp(var42, this.grad(this.permutations[var71 + 1], var38, var52, var45 - 1.0D), this.grad(this.permutations[var75 + 1], var38 - 1.0D, var52, var45 - 1.0D)); + var35 = this.lerp(var42, this.grad(this.permutations[var72 + 1], var38, var52 - 1.0D, var45 - 1.0D), this.grad(this.permutations[var76 + 1], var38 - 1.0D, var52 - 1.0D, var45 - 1.0D)); + } + + double var58 = this.lerp(var56, var29, var31); + double var60 = this.lerp(var56, var33, var35); + double var62 = this.lerp(var49, var58, var60); + var10001 = var19++; + var1[var10001] += var62 * var20; + } + } + } + + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet.java b/minecraft_server/src/net/minecraft/src/Packet.java new file mode 100644 index 0000000..eb9132b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet.java @@ -0,0 +1,110 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +public abstract class Packet { + private static Map packetIdToClassMap = new HashMap(); + private static Map packetClassToIdMap = new HashMap(); + public boolean isChunkDataPacket = false; + + static void addIdClassMapping(int var0, Class var1) { + if(packetIdToClassMap.containsKey(Integer.valueOf(var0))) { + throw new IllegalArgumentException("Duplicate packet id:" + var0); + } else if(packetClassToIdMap.containsKey(var1)) { + throw new IllegalArgumentException("Duplicate packet class:" + var1); + } else { + packetIdToClassMap.put(Integer.valueOf(var0), var1); + packetClassToIdMap.put(var1, Integer.valueOf(var0)); + } + } + + public static Packet getNewPacket(int var0) { + try { + Class var1 = (Class)packetIdToClassMap.get(Integer.valueOf(var0)); + return var1 == null ? null : (Packet)var1.newInstance(); + } catch (Exception var2) { + var2.printStackTrace(); + System.out.println("Skipping packet with id " + var0); + return null; + } + } + + public final int getPacketId() { + return ((Integer)packetClassToIdMap.get(this.getClass())).intValue(); + } + + public static Packet readPacket(DataInputStream var0) throws IOException { + int var1 = var0.read(); + if(var1 == -1) { + return null; + } else { + Packet var2 = getNewPacket(var1); + if(var2 == null) { + throw new IOException("Bad packet id " + var1); + } else { + var2.readPacketData(var0); + return var2; + } + } + } + + public static void writePacket(Packet var0, DataOutputStream var1) throws IOException { + var1.write(var0.getPacketId()); + var0.writePacketData(var1); + } + + public abstract void readPacketData(DataInputStream var1) throws IOException; + + public abstract void writePacketData(DataOutputStream var1) throws IOException; + + public abstract void processPacket(NetHandler var1); + + public abstract int getPacketSize(); + + static { + addIdClassMapping(0, Packet0KeepAlive.class); + addIdClassMapping(1, Packet1Login.class); + addIdClassMapping(2, Packet2Handshake.class); + addIdClassMapping(3, Packet3Chat.class); + addIdClassMapping(4, Packet4UpdateTime.class); + addIdClassMapping(5, Packet5PlayerInventory.class); + addIdClassMapping(6, Packet6SpawnPosition.class); + addIdClassMapping(7, Packet7.class); + addIdClassMapping(8, Packet8.class); + addIdClassMapping(9, Packet9.class); + addIdClassMapping(10, Packet10Flying.class); + addIdClassMapping(11, Packet11PlayerPosition.class); + addIdClassMapping(12, Packet12PlayerLook.class); + addIdClassMapping(13, Packet13PlayerLookMove.class); + addIdClassMapping(14, Packet14BlockDig.class); + addIdClassMapping(15, Packet15Place.class); + addIdClassMapping(16, Packet16BlockItemSwitch.class); + addIdClassMapping(17, Packet17AddToInventory.class); + addIdClassMapping(18, Packet18ArmAnimation.class); + addIdClassMapping(20, Packet20NamedEntitySpawn.class); + addIdClassMapping(21, Packet21PickupSpawn.class); + addIdClassMapping(22, Packet22Collect.class); + addIdClassMapping(23, Packet23VehicleSpawn.class); + addIdClassMapping(24, Packet24MobSpawn.class); + addIdClassMapping(28, Packet28.class); + addIdClassMapping(29, Packet29DestroyEntity.class); + addIdClassMapping(30, Packet30Entity.class); + addIdClassMapping(31, Packet31RelEntityMove.class); + addIdClassMapping(32, Packet32EntityLook.class); + addIdClassMapping(33, Packet33RelEntityMoveLook.class); + addIdClassMapping(34, Packet34EntityTeleport.class); + addIdClassMapping(38, Packet38.class); + addIdClassMapping(39, Packet39.class); + addIdClassMapping(50, Packet50PreChunk.class); + addIdClassMapping(51, Packet51MapChunk.class); + addIdClassMapping(52, Packet52MultiBlockChange.class); + addIdClassMapping(53, Packet53BlockChange.class); + addIdClassMapping(59, Packet59ComplexEntity.class); + addIdClassMapping(60, Packet60.class); + addIdClassMapping(255, Packet255KickDisconnect.class); + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet0KeepAlive.java b/minecraft_server/src/net/minecraft/src/Packet0KeepAlive.java new file mode 100644 index 0000000..08bfb61 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet0KeepAlive.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet0KeepAlive extends Packet { + public void processPacket(NetHandler var1) { + } + + public void readPacketData(DataInputStream var1) throws IOException { + } + + public void writePacketData(DataOutputStream var1) throws IOException { + } + + public int getPacketSize() { + return 0; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet10Flying.java b/minecraft_server/src/net/minecraft/src/Packet10Flying.java new file mode 100644 index 0000000..373c931 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet10Flying.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet10Flying extends Packet { + public double xPosition; + public double yPosition; + public double zPosition; + public double stance; + public float yaw; + public float pitch; + public boolean onGround; + public boolean moving; + public boolean rotating; + + public void processPacket(NetHandler var1) { + var1.handleFlying(this); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.onGround = var1.read() != 0; + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.write(this.onGround ? 1 : 0); + } + + public int getPacketSize() { + return 1; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet11PlayerPosition.java b/minecraft_server/src/net/minecraft/src/Packet11PlayerPosition.java new file mode 100644 index 0000000..cff453c --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet11PlayerPosition.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet11PlayerPosition extends Packet10Flying { + public Packet11PlayerPosition() { + this.moving = true; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readDouble(); + this.yPosition = var1.readDouble(); + this.stance = var1.readDouble(); + this.zPosition = var1.readDouble(); + super.readPacketData(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeDouble(this.xPosition); + var1.writeDouble(this.yPosition); + var1.writeDouble(this.stance); + var1.writeDouble(this.zPosition); + super.writePacketData(var1); + } + + public int getPacketSize() { + return 33; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet12PlayerLook.java b/minecraft_server/src/net/minecraft/src/Packet12PlayerLook.java new file mode 100644 index 0000000..5a2fe36 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet12PlayerLook.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet12PlayerLook extends Packet10Flying { + public Packet12PlayerLook() { + this.rotating = true; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.yaw = var1.readFloat(); + this.pitch = var1.readFloat(); + super.readPacketData(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeFloat(this.yaw); + var1.writeFloat(this.pitch); + super.writePacketData(var1); + } + + public int getPacketSize() { + return 9; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet13PlayerLookMove.java b/minecraft_server/src/net/minecraft/src/Packet13PlayerLookMove.java new file mode 100644 index 0000000..db7001e --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet13PlayerLookMove.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet13PlayerLookMove extends Packet10Flying { + public Packet13PlayerLookMove() { + this.rotating = true; + this.moving = true; + } + + public Packet13PlayerLookMove(double var1, double var3, double var5, double var7, float var9, float var10, boolean var11) { + this.xPosition = var1; + this.yPosition = var3; + this.stance = var5; + this.zPosition = var7; + this.yaw = var9; + this.pitch = var10; + this.onGround = var11; + this.rotating = true; + this.moving = true; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readDouble(); + this.yPosition = var1.readDouble(); + this.stance = var1.readDouble(); + this.zPosition = var1.readDouble(); + this.yaw = var1.readFloat(); + this.pitch = var1.readFloat(); + super.readPacketData(var1); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeDouble(this.xPosition); + var1.writeDouble(this.yPosition); + var1.writeDouble(this.stance); + var1.writeDouble(this.zPosition); + var1.writeFloat(this.yaw); + var1.writeFloat(this.pitch); + super.writePacketData(var1); + } + + public int getPacketSize() { + return 41; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet14BlockDig.java b/minecraft_server/src/net/minecraft/src/Packet14BlockDig.java new file mode 100644 index 0000000..446c68f --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet14BlockDig.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet14BlockDig extends Packet { + public int xPosition; + public int yPosition; + public int zPosition; + public int face; + public int status; + + public void readPacketData(DataInputStream var1) throws IOException { + this.status = var1.read(); + this.xPosition = var1.readInt(); + this.yPosition = var1.read(); + this.zPosition = var1.readInt(); + this.face = var1.read(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.write(this.status); + var1.writeInt(this.xPosition); + var1.write(this.yPosition); + var1.writeInt(this.zPosition); + var1.write(this.face); + } + + public void processPacket(NetHandler var1) { + var1.handleBlockDig(this); + } + + public int getPacketSize() { + return 11; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet15Place.java b/minecraft_server/src/net/minecraft/src/Packet15Place.java new file mode 100644 index 0000000..e73efd2 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet15Place.java @@ -0,0 +1,37 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet15Place extends Packet { + public int id; + public int xPosition; + public int yPosition; + public int zPosition; + public int direction; + + public void readPacketData(DataInputStream var1) throws IOException { + this.id = var1.readShort(); + this.xPosition = var1.readInt(); + this.yPosition = var1.read(); + this.zPosition = var1.readInt(); + this.direction = var1.read(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeShort(this.id); + var1.writeInt(this.xPosition); + var1.write(this.yPosition); + var1.writeInt(this.zPosition); + var1.write(this.direction); + } + + public void processPacket(NetHandler var1) { + var1.handlePlace(this); + } + + public int getPacketSize() { + return 12; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet16BlockItemSwitch.java b/minecraft_server/src/net/minecraft/src/Packet16BlockItemSwitch.java new file mode 100644 index 0000000..c89c716 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet16BlockItemSwitch.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet16BlockItemSwitch extends Packet { + public int unused; + public int id; + + public Packet16BlockItemSwitch() { + } + + public Packet16BlockItemSwitch(int var1, int var2) { + this.unused = var1; + this.id = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.unused = var1.readInt(); + this.id = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.unused); + var1.writeShort(this.id); + } + + public void processPacket(NetHandler var1) { + var1.handleBlockItemSwitch(this); + } + + public int getPacketSize() { + return 6; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet17AddToInventory.java b/minecraft_server/src/net/minecraft/src/Packet17AddToInventory.java new file mode 100644 index 0000000..5ad5b45 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet17AddToInventory.java @@ -0,0 +1,44 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet17AddToInventory extends Packet { + public int id; + public int count; + public int durability; + + public Packet17AddToInventory() { + } + + public Packet17AddToInventory(ItemStack var1, int var2) { + this.id = var1.itemID; + this.count = var2; + this.durability = var1.itemDamage; + if(var2 == 0) { + boolean var3 = true; + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.id = var1.readShort(); + this.count = var1.readByte(); + this.durability = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeShort(this.id); + var1.writeByte(this.count); + var1.writeShort(this.durability); + } + + public void processPacket(NetHandler var1) { + var1.handleAddToInventory(this); + } + + public int getPacketSize() { + return 5; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet18ArmAnimation.java b/minecraft_server/src/net/minecraft/src/Packet18ArmAnimation.java new file mode 100644 index 0000000..dbf7fbf --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet18ArmAnimation.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet18ArmAnimation extends Packet { + public int entityId; + public int animate; + + public Packet18ArmAnimation() { + } + + public Packet18ArmAnimation(Entity var1, int var2) { + this.entityId = var1.field_331_c; + this.animate = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.animate = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeByte(this.animate); + } + + public void processPacket(NetHandler var1) { + var1.handleArmAnimation(this); + } + + public int getPacketSize() { + return 5; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet1Login.java b/minecraft_server/src/net/minecraft/src/Packet1Login.java new file mode 100644 index 0000000..d34017e --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet1Login.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet1Login extends Packet { + public int protocolVersion; + public String username; + public String password; + public long field_4026_d; + public byte field_4025_e; + + public Packet1Login() { + } + + public Packet1Login(String var1, String var2, int var3, long var4, byte var6) { + this.username = var1; + this.password = var2; + this.protocolVersion = var3; + this.field_4026_d = var4; + this.field_4025_e = var6; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.protocolVersion = var1.readInt(); + this.username = var1.readUTF(); + this.password = var1.readUTF(); + this.field_4026_d = var1.readLong(); + this.field_4025_e = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.protocolVersion); + var1.writeUTF(this.username); + var1.writeUTF(this.password); + var1.writeLong(this.field_4026_d); + var1.writeByte(this.field_4025_e); + } + + public void processPacket(NetHandler var1) { + var1.handleLogin(this); + } + + public int getPacketSize() { + return 4 + this.username.length() + this.password.length() + 4 + 5; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet20NamedEntitySpawn.java b/minecraft_server/src/net/minecraft/src/Packet20NamedEntitySpawn.java new file mode 100644 index 0000000..95a4f1a --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet20NamedEntitySpawn.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet20NamedEntitySpawn extends Packet { + public int entityId; + public String name; + public int xPosition; + public int yPosition; + public int zPosition; + public byte rotation; + public byte pitch; + public int currentItem; + + public Packet20NamedEntitySpawn() { + } + + public Packet20NamedEntitySpawn(EntityPlayer var1) { + this.entityId = var1.field_331_c; + this.name = var1.username; + this.xPosition = MathHelper.floor_double(var1.posX * 32.0D); + this.yPosition = MathHelper.floor_double(var1.posY * 32.0D); + this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D); + this.rotation = (byte)((int)(var1.rotationYaw * 256.0F / 360.0F)); + this.pitch = (byte)((int)(var1.rotationPitch * 256.0F / 360.0F)); + ItemStack var2 = var1.inventory.getCurrentItem(); + this.currentItem = var2 == null ? 0 : var2.itemID; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.name = var1.readUTF(); + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + this.rotation = var1.readByte(); + this.pitch = var1.readByte(); + this.currentItem = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeUTF(this.name); + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + var1.writeByte(this.rotation); + var1.writeByte(this.pitch); + var1.writeShort(this.currentItem); + } + + public void processPacket(NetHandler var1) { + var1.handleNamedEntitySpawn(this); + } + + public int getPacketSize() { + return 28; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet21PickupSpawn.java b/minecraft_server/src/net/minecraft/src/Packet21PickupSpawn.java new file mode 100644 index 0000000..06794e3 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet21PickupSpawn.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet21PickupSpawn extends Packet { + public int entityId; + public int xPosition; + public int yPosition; + public int zPosition; + public byte rotation; + public byte pitch; + public byte roll; + public int itemId; + public int count; + + public Packet21PickupSpawn() { + } + + public Packet21PickupSpawn(EntityItem var1) { + this.entityId = var1.field_331_c; + this.itemId = var1.item.itemID; + this.count = var1.item.stackSize; + this.xPosition = MathHelper.floor_double(var1.posX * 32.0D); + this.yPosition = MathHelper.floor_double(var1.posY * 32.0D); + this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D); + this.rotation = (byte)((int)(var1.motionX * 128.0D)); + this.pitch = (byte)((int)(var1.motionY * 128.0D)); + this.roll = (byte)((int)(var1.motionZ * 128.0D)); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.itemId = var1.readShort(); + this.count = var1.readByte(); + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + this.rotation = var1.readByte(); + this.pitch = var1.readByte(); + this.roll = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeShort(this.itemId); + var1.writeByte(this.count); + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + var1.writeByte(this.rotation); + var1.writeByte(this.pitch); + var1.writeByte(this.roll); + } + + public void processPacket(NetHandler var1) { + var1.handlePickupSpawn(this); + } + + public int getPacketSize() { + return 22; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet22Collect.java b/minecraft_server/src/net/minecraft/src/Packet22Collect.java new file mode 100644 index 0000000..f8b199f --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet22Collect.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet22Collect extends Packet { + public int collectedEntityId; + public int collectorEntityId; + + public Packet22Collect() { + } + + public Packet22Collect(int var1, int var2) { + this.collectedEntityId = var1; + this.collectorEntityId = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.collectedEntityId = var1.readInt(); + this.collectorEntityId = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.collectedEntityId); + var1.writeInt(this.collectorEntityId); + } + + public void processPacket(NetHandler var1) { + var1.handleCollect(this); + } + + public int getPacketSize() { + return 8; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet23VehicleSpawn.java b/minecraft_server/src/net/minecraft/src/Packet23VehicleSpawn.java new file mode 100644 index 0000000..f010810 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet23VehicleSpawn.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet23VehicleSpawn extends Packet { + public int entityId; + public int xPosition; + public int yPosition; + public int zPosition; + public int type; + + public Packet23VehicleSpawn() { + } + + public Packet23VehicleSpawn(Entity var1, int var2) { + this.entityId = var1.field_331_c; + this.xPosition = MathHelper.floor_double(var1.posX * 32.0D); + this.yPosition = MathHelper.floor_double(var1.posY * 32.0D); + this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D); + this.type = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.type = var1.readByte(); + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeByte(this.type); + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + } + + public void processPacket(NetHandler var1) { + var1.handleVehicleSpawn(this); + } + + public int getPacketSize() { + return 17; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet24MobSpawn.java b/minecraft_server/src/net/minecraft/src/Packet24MobSpawn.java new file mode 100644 index 0000000..6065d34 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet24MobSpawn.java @@ -0,0 +1,56 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet24MobSpawn extends Packet { + public int entityId; + public byte type; + public int xPosition; + public int yPosition; + public int zPosition; + public byte yaw; + public byte pitch; + + public Packet24MobSpawn() { + } + + public Packet24MobSpawn(EntityLiving var1) { + this.entityId = var1.field_331_c; + this.type = (byte)EntityList.func_565_a(var1); + this.xPosition = MathHelper.floor_double(var1.posX * 32.0D); + this.yPosition = MathHelper.floor_double(var1.posY * 32.0D); + this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D); + this.yaw = (byte)((int)(var1.rotationYaw * 256.0F / 360.0F)); + this.pitch = (byte)((int)(var1.rotationPitch * 256.0F / 360.0F)); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.type = var1.readByte(); + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + this.yaw = var1.readByte(); + this.pitch = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeByte(this.type); + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + var1.writeByte(this.yaw); + var1.writeByte(this.pitch); + } + + public void processPacket(NetHandler var1) { + var1.handleMobSpawn(this); + } + + public int getPacketSize() { + return 19; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet255KickDisconnect.java b/minecraft_server/src/net/minecraft/src/Packet255KickDisconnect.java new file mode 100644 index 0000000..c662be3 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet255KickDisconnect.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet255KickDisconnect extends Packet { + public String reason; + + public Packet255KickDisconnect() { + } + + public Packet255KickDisconnect(String var1) { + this.reason = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.reason = var1.readUTF(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeUTF(this.reason); + } + + public void processPacket(NetHandler var1) { + var1.handleKickDisconnect(this); + } + + public int getPacketSize() { + return this.reason.length(); + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet28.java b/minecraft_server/src/net/minecraft/src/Packet28.java new file mode 100644 index 0000000..f074b4a --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet28.java @@ -0,0 +1,73 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet28 extends Packet { + public int field_6040_a; + public int field_6039_b; + public int field_6042_c; + public int field_6041_d; + + public Packet28() { + } + + public Packet28(Entity var1) { + this(var1.field_331_c, var1.motionX, var1.motionY, var1.motionZ); + } + + public Packet28(int var1, double var2, double var4, double var6) { + this.field_6040_a = var1; + double var8 = 3.9D; + if(var2 < -var8) { + var2 = -var8; + } + + if(var4 < -var8) { + var4 = -var8; + } + + if(var6 < -var8) { + var6 = -var8; + } + + if(var2 > var8) { + var2 = var8; + } + + if(var4 > var8) { + var4 = var8; + } + + if(var6 > var8) { + var6 = var8; + } + + this.field_6039_b = (int)(var2 * 8000.0D); + this.field_6042_c = (int)(var4 * 8000.0D); + this.field_6041_d = (int)(var6 * 8000.0D); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.field_6040_a = var1.readInt(); + this.field_6039_b = var1.readShort(); + this.field_6042_c = var1.readShort(); + this.field_6041_d = var1.readShort(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.field_6040_a); + var1.writeShort(this.field_6039_b); + var1.writeShort(this.field_6042_c); + var1.writeShort(this.field_6041_d); + } + + public void processPacket(NetHandler var1) { + var1.func_6002_a(this); + } + + public int getPacketSize() { + return 10; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet29DestroyEntity.java b/minecraft_server/src/net/minecraft/src/Packet29DestroyEntity.java new file mode 100644 index 0000000..9ab5b1c --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet29DestroyEntity.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet29DestroyEntity extends Packet { + public int entityId; + + public Packet29DestroyEntity() { + } + + public Packet29DestroyEntity(int var1) { + this.entityId = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + } + + public void processPacket(NetHandler var1) { + var1.handleDestroyEntity(this); + } + + public int getPacketSize() { + return 4; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet2Handshake.java b/minecraft_server/src/net/minecraft/src/Packet2Handshake.java new file mode 100644 index 0000000..d621dca --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet2Handshake.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet2Handshake extends Packet { + public String username; + + public Packet2Handshake() { + } + + public Packet2Handshake(String var1) { + this.username = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.username = var1.readUTF(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeUTF(this.username); + } + + public void processPacket(NetHandler var1) { + var1.handleHandshake(this); + } + + public int getPacketSize() { + return 4 + this.username.length() + 4; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet30Entity.java b/minecraft_server/src/net/minecraft/src/Packet30Entity.java new file mode 100644 index 0000000..ca8c1c7 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet30Entity.java @@ -0,0 +1,38 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet30Entity extends Packet { + public int entityId; + public byte xPosition; + public byte yPosition; + public byte zPosition; + public byte yaw; + public byte pitch; + public boolean rotating = false; + + public Packet30Entity() { + } + + public Packet30Entity(int var1) { + this.entityId = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + } + + public void processPacket(NetHandler var1) { + var1.handleEntity(this); + } + + public int getPacketSize() { + return 4; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet31RelEntityMove.java b/minecraft_server/src/net/minecraft/src/Packet31RelEntityMove.java new file mode 100644 index 0000000..cace71e --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet31RelEntityMove.java @@ -0,0 +1,35 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet31RelEntityMove extends Packet30Entity { + public Packet31RelEntityMove() { + } + + public Packet31RelEntityMove(int var1, byte var2, byte var3, byte var4) { + super(var1); + this.xPosition = var2; + this.yPosition = var3; + this.zPosition = var4; + } + + public void readPacketData(DataInputStream var1) throws IOException { + super.readPacketData(var1); + this.xPosition = var1.readByte(); + this.yPosition = var1.readByte(); + this.zPosition = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + super.writePacketData(var1); + var1.writeByte(this.xPosition); + var1.writeByte(this.yPosition); + var1.writeByte(this.zPosition); + } + + public int getPacketSize() { + return 7; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet32EntityLook.java b/minecraft_server/src/net/minecraft/src/Packet32EntityLook.java new file mode 100644 index 0000000..d63043e --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet32EntityLook.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet32EntityLook extends Packet30Entity { + public Packet32EntityLook() { + this.rotating = true; + } + + public Packet32EntityLook(int var1, byte var2, byte var3) { + super(var1); + this.yaw = var2; + this.pitch = var3; + this.rotating = true; + } + + public void readPacketData(DataInputStream var1) throws IOException { + super.readPacketData(var1); + this.yaw = var1.readByte(); + this.pitch = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + super.writePacketData(var1); + var1.writeByte(this.yaw); + var1.writeByte(this.pitch); + } + + public int getPacketSize() { + return 6; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet33RelEntityMoveLook.java b/minecraft_server/src/net/minecraft/src/Packet33RelEntityMoveLook.java new file mode 100644 index 0000000..5d821d1 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet33RelEntityMoveLook.java @@ -0,0 +1,43 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet33RelEntityMoveLook extends Packet30Entity { + public Packet33RelEntityMoveLook() { + this.rotating = true; + } + + public Packet33RelEntityMoveLook(int var1, byte var2, byte var3, byte var4, byte var5, byte var6) { + super(var1); + this.xPosition = var2; + this.yPosition = var3; + this.zPosition = var4; + this.yaw = var5; + this.pitch = var6; + this.rotating = true; + } + + public void readPacketData(DataInputStream var1) throws IOException { + super.readPacketData(var1); + this.xPosition = var1.readByte(); + this.yPosition = var1.readByte(); + this.zPosition = var1.readByte(); + this.yaw = var1.readByte(); + this.pitch = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + super.writePacketData(var1); + var1.writeByte(this.xPosition); + var1.writeByte(this.yPosition); + var1.writeByte(this.zPosition); + var1.writeByte(this.yaw); + var1.writeByte(this.pitch); + } + + public int getPacketSize() { + return 9; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet34EntityTeleport.java b/minecraft_server/src/net/minecraft/src/Packet34EntityTeleport.java new file mode 100644 index 0000000..7b0a325 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet34EntityTeleport.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet34EntityTeleport extends Packet { + public int entityId; + public int xPosition; + public int yPosition; + public int zPosition; + public byte yaw; + public byte pitch; + + public Packet34EntityTeleport() { + } + + public Packet34EntityTeleport(Entity var1) { + this.entityId = var1.field_331_c; + this.xPosition = MathHelper.floor_double(var1.posX * 32.0D); + this.yPosition = MathHelper.floor_double(var1.posY * 32.0D); + this.zPosition = MathHelper.floor_double(var1.posZ * 32.0D); + this.yaw = (byte)((int)(var1.rotationYaw * 256.0F / 360.0F)); + this.pitch = (byte)((int)(var1.rotationPitch * 256.0F / 360.0F)); + } + + public Packet34EntityTeleport(int var1, int var2, int var3, int var4, byte var5, byte var6) { + this.entityId = var1; + this.xPosition = var2; + this.yPosition = var3; + this.zPosition = var4; + this.yaw = var5; + this.pitch = var6; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.entityId = var1.readInt(); + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + this.yaw = (byte)var1.read(); + this.pitch = (byte)var1.read(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.entityId); + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + var1.write(this.yaw); + var1.write(this.pitch); + } + + public void processPacket(NetHandler var1) { + var1.handleEntityTeleport(this); + } + + public int getPacketSize() { + return 34; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet38.java b/minecraft_server/src/net/minecraft/src/Packet38.java new file mode 100644 index 0000000..bb35b9d --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet38.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet38 extends Packet { + public int field_9016_a; + public byte field_9015_b; + + public Packet38() { + } + + public Packet38(int var1, byte var2) { + this.field_9016_a = var1; + this.field_9015_b = var2; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.field_9016_a = var1.readInt(); + this.field_9015_b = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.field_9016_a); + var1.writeByte(this.field_9015_b); + } + + public void processPacket(NetHandler var1) { + var1.func_9001_a(this); + } + + public int getPacketSize() { + return 5; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet39.java b/minecraft_server/src/net/minecraft/src/Packet39.java new file mode 100644 index 0000000..00f2f07 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet39.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet39 extends Packet { + public int field_6044_a; + public int field_6043_b; + + public Packet39() { + } + + public Packet39(Entity var1, Entity var2) { + this.field_6044_a = var1.field_331_c; + this.field_6043_b = var2 != null ? var2.field_331_c : -1; + } + + public int getPacketSize() { + return 8; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.field_6044_a = var1.readInt(); + this.field_6043_b = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.field_6044_a); + var1.writeInt(this.field_6043_b); + } + + public void processPacket(NetHandler var1) { + var1.func_6003_a(this); + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet3Chat.java b/minecraft_server/src/net/minecraft/src/Packet3Chat.java new file mode 100644 index 0000000..b622a04 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet3Chat.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet3Chat extends Packet { + public String message; + + public Packet3Chat() { + } + + public Packet3Chat(String var1) { + this.message = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.message = var1.readUTF(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeUTF(this.message); + } + + public void processPacket(NetHandler var1) { + var1.handleChat(this); + } + + public int getPacketSize() { + return this.message.length(); + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet4UpdateTime.java b/minecraft_server/src/net/minecraft/src/Packet4UpdateTime.java new file mode 100644 index 0000000..5bfffe3 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet4UpdateTime.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet4UpdateTime extends Packet { + public long time; + + public Packet4UpdateTime() { + } + + public Packet4UpdateTime(long var1) { + this.time = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.time = var1.readLong(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeLong(this.time); + } + + public void processPacket(NetHandler var1) { + var1.handleUpdateTime(this); + } + + public int getPacketSize() { + return 8; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet50PreChunk.java b/minecraft_server/src/net/minecraft/src/Packet50PreChunk.java new file mode 100644 index 0000000..47ddb4f --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet50PreChunk.java @@ -0,0 +1,41 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet50PreChunk extends Packet { + public int xPosition; + public int yPosition; + public boolean mode; + + public Packet50PreChunk() { + } + + public Packet50PreChunk(int var1, int var2, boolean var3) { + this.isChunkDataPacket = true; + this.xPosition = var1; + this.yPosition = var2; + this.mode = var3; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.mode = var1.read() != 0; + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.write(this.mode ? 1 : 0); + } + + public void processPacket(NetHandler var1) { + var1.handlePreChunk(this); + } + + public int getPacketSize() { + return 9; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet51MapChunk.java b/minecraft_server/src/net/minecraft/src/Packet51MapChunk.java new file mode 100644 index 0000000..41251a4 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet51MapChunk.java @@ -0,0 +1,88 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.zip.DataFormatException; +import java.util.zip.Deflater; +import java.util.zip.Inflater; + +public class Packet51MapChunk extends Packet { + public int xPosition; + public int yPosition; + public int zPosition; + public int xSize; + public int ySize; + public int zSize; + public byte[] chunk; + private int chunkSize; + + public Packet51MapChunk() { + this.isChunkDataPacket = true; + } + + public Packet51MapChunk(int var1, int var2, int var3, int var4, int var5, int var6, World var7) { + this.isChunkDataPacket = true; + this.xPosition = var1; + this.yPosition = var2; + this.zPosition = var3; + this.xSize = var4; + this.ySize = var5; + this.zSize = var6; + byte[] var8 = var7.func_504_c(var1, var2, var3, var4, var5, var6); + Deflater var9 = new Deflater(1); + + try { + var9.setInput(var8); + var9.finish(); + this.chunk = new byte[var4 * var5 * var6 * 5 / 2]; + this.chunkSize = var9.deflate(this.chunk); + } finally { + var9.end(); + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readInt(); + this.yPosition = var1.readShort(); + this.zPosition = var1.readInt(); + this.xSize = var1.read() + 1; + this.ySize = var1.read() + 1; + this.zSize = var1.read() + 1; + int var2 = var1.readInt(); + byte[] var3 = new byte[var2]; + var1.readFully(var3); + this.chunk = new byte[this.xSize * this.ySize * this.zSize * 5 / 2]; + Inflater var4 = new Inflater(); + var4.setInput(var3); + + try { + var4.inflate(this.chunk); + } catch (DataFormatException var9) { + throw new IOException("Bad compressed data format"); + } finally { + var4.end(); + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xPosition); + var1.writeShort(this.yPosition); + var1.writeInt(this.zPosition); + var1.write(this.xSize - 1); + var1.write(this.ySize - 1); + var1.write(this.zSize - 1); + var1.writeInt(this.chunkSize); + var1.write(this.chunk, 0, this.chunkSize); + } + + public void processPacket(NetHandler var1) { + var1.handleMapChunk(this); + } + + public int getPacketSize() { + return 17 + this.chunkSize; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet52MultiBlockChange.java b/minecraft_server/src/net/minecraft/src/Packet52MultiBlockChange.java new file mode 100644 index 0000000..d31094c --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet52MultiBlockChange.java @@ -0,0 +1,76 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet52MultiBlockChange extends Packet { + public int xPosition; + public int zPosition; + public short[] coordinateArray; + public byte[] typeArray; + public byte[] metadataArray; + public int size; + + public Packet52MultiBlockChange() { + this.isChunkDataPacket = true; + } + + public Packet52MultiBlockChange(int var1, int var2, short[] var3, int var4, World var5) { + this.isChunkDataPacket = true; + this.xPosition = var1; + this.zPosition = var2; + this.size = var4; + this.coordinateArray = new short[var4]; + this.typeArray = new byte[var4]; + this.metadataArray = new byte[var4]; + Chunk var6 = var5.getChunkFromChunkCoords(var1, var2); + + for(int var7 = 0; var7 < var4; ++var7) { + int var8 = var3[var7] >> 12 & 15; + int var9 = var3[var7] >> 8 & 15; + int var10 = var3[var7] & 255; + this.coordinateArray[var7] = var3[var7]; + this.typeArray[var7] = (byte)var6.getBlockID(var8, var10, var9); + this.metadataArray[var7] = (byte)var6.getBlockMetadata(var8, var10, var9); + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readInt(); + this.zPosition = var1.readInt(); + this.size = var1.readShort() & '\uffff'; + this.coordinateArray = new short[this.size]; + this.typeArray = new byte[this.size]; + this.metadataArray = new byte[this.size]; + + for(int var2 = 0; var2 < this.size; ++var2) { + this.coordinateArray[var2] = var1.readShort(); + } + + var1.readFully(this.typeArray); + var1.readFully(this.metadataArray); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xPosition); + var1.writeInt(this.zPosition); + var1.writeShort((short)this.size); + + for(int var2 = 0; var2 < this.size; ++var2) { + var1.writeShort(this.coordinateArray[var2]); + } + + var1.write(this.typeArray); + var1.write(this.metadataArray); + } + + public void processPacket(NetHandler var1) { + var1.handleMultiBlockChange(this); + } + + public int getPacketSize() { + return 10 + this.size * 4; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet53BlockChange.java b/minecraft_server/src/net/minecraft/src/Packet53BlockChange.java new file mode 100644 index 0000000..91c32c8 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet53BlockChange.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet53BlockChange extends Packet { + public int xPosition; + public int yPosition; + public int zPosition; + public int type; + public int metadata; + + public Packet53BlockChange() { + this.isChunkDataPacket = true; + } + + public Packet53BlockChange(int var1, int var2, int var3, World var4) { + this.isChunkDataPacket = true; + this.xPosition = var1; + this.yPosition = var2; + this.zPosition = var3; + this.type = var4.getBlockId(var1, var2, var3); + this.metadata = var4.getBlockMetadata(var1, var2, var3); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readInt(); + this.yPosition = var1.read(); + this.zPosition = var1.readInt(); + this.type = var1.read(); + this.metadata = var1.read(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xPosition); + var1.write(this.yPosition); + var1.writeInt(this.zPosition); + var1.write(this.type); + var1.write(this.metadata); + } + + public void processPacket(NetHandler var1) { + var1.handleBlockChange(this); + } + + public int getPacketSize() { + return 11; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet59ComplexEntity.java b/minecraft_server/src/net/minecraft/src/Packet59ComplexEntity.java new file mode 100644 index 0000000..4baee83 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet59ComplexEntity.java @@ -0,0 +1,59 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet59ComplexEntity extends Packet { + public int xPosition; + public int yPosition; + public int zPosition; + public byte[] entityData; + public NBTTagCompound entityNBT; + + public Packet59ComplexEntity() { + this.isChunkDataPacket = true; + } + + public Packet59ComplexEntity(int var1, int var2, int var3, TileEntity var4) { + this.isChunkDataPacket = true; + this.xPosition = var1; + this.yPosition = var2; + this.zPosition = var3; + this.entityNBT = new NBTTagCompound(); + var4.writeToNBT(this.entityNBT); + + try { + this.entityData = CompressedStreamTools.func_772_a(this.entityNBT); + } catch (IOException var6) { + var6.printStackTrace(); + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readInt(); + this.yPosition = var1.readShort(); + this.zPosition = var1.readInt(); + int var2 = var1.readShort() & '\uffff'; + this.entityData = new byte[var2]; + var1.readFully(this.entityData); + this.entityNBT = CompressedStreamTools.func_773_a(this.entityData); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xPosition); + var1.writeShort(this.yPosition); + var1.writeInt(this.zPosition); + var1.writeShort((short)this.entityData.length); + var1.write(this.entityData); + } + + public void processPacket(NetHandler var1) { + var1.handleComplexEntity(this); + } + + public int getPacketSize() { + return this.entityData.length + 2 + 10; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet5PlayerInventory.java b/minecraft_server/src/net/minecraft/src/Packet5PlayerInventory.java new file mode 100644 index 0000000..52b9467 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet5PlayerInventory.java @@ -0,0 +1,63 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet5PlayerInventory extends Packet { + public int type; + public ItemStack[] stacks; + + public Packet5PlayerInventory() { + } + + public Packet5PlayerInventory(int var1, ItemStack[] var2) { + this.type = var1; + this.stacks = new ItemStack[var2.length]; + + for(int var3 = 0; var3 < this.stacks.length; ++var3) { + this.stacks[var3] = var2[var3] == null ? null : var2[var3].copy(); + } + + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.type = var1.readInt(); + short var2 = var1.readShort(); + this.stacks = new ItemStack[var2]; + + for(int var3 = 0; var3 < var2; ++var3) { + short var4 = var1.readShort(); + if(var4 >= 0) { + byte var5 = var1.readByte(); + short var6 = var1.readShort(); + this.stacks[var3] = new ItemStack(var4, var5, var6); + } + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.type); + var1.writeShort(this.stacks.length); + + for(int var2 = 0; var2 < this.stacks.length; ++var2) { + if(this.stacks[var2] == null) { + var1.writeShort(-1); + } else { + var1.writeShort((short)this.stacks[var2].itemID); + var1.writeByte((byte)this.stacks[var2].stackSize); + var1.writeShort((short)this.stacks[var2].itemDamage); + } + } + + } + + public void processPacket(NetHandler var1) { + var1.handlePlayerInventory(this); + } + + public int getPacketSize() { + return 6 + this.stacks.length * 5; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet60.java b/minecraft_server/src/net/minecraft/src/Packet60.java new file mode 100644 index 0000000..f6ab13a --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet60.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +public class Packet60 extends Packet { + public double field_12003_a; + public double field_12002_b; + public double field_12006_c; + public float field_12005_d; + public Set field_12004_e; + + public Packet60() { + } + + public Packet60(double var1, double var3, double var5, float var7, Set var8) { + this.field_12003_a = var1; + this.field_12002_b = var3; + this.field_12006_c = var5; + this.field_12005_d = var7; + this.field_12004_e = new HashSet(var8); + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.field_12003_a = var1.readDouble(); + this.field_12002_b = var1.readDouble(); + this.field_12006_c = var1.readDouble(); + this.field_12005_d = var1.readFloat(); + int var2 = var1.readInt(); + this.field_12004_e = new HashSet(); + int var3 = (int)this.field_12003_a; + int var4 = (int)this.field_12002_b; + int var5 = (int)this.field_12006_c; + + for(int var6 = 0; var6 < var2; ++var6) { + int var7 = var1.readByte() + var3; + int var8 = var1.readByte() + var4; + int var9 = var1.readByte() + var5; + this.field_12004_e.add(new ChunkPosition(var7, var8, var9)); + } + + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeDouble(this.field_12003_a); + var1.writeDouble(this.field_12002_b); + var1.writeDouble(this.field_12006_c); + var1.writeFloat(this.field_12005_d); + var1.writeInt(this.field_12004_e.size()); + int var2 = (int)this.field_12003_a; + int var3 = (int)this.field_12002_b; + int var4 = (int)this.field_12006_c; + Iterator var5 = this.field_12004_e.iterator(); + + while(var5.hasNext()) { + ChunkPosition var6 = (ChunkPosition)var5.next(); + int var7 = var6.field_846_a - var2; + int var8 = var6.field_845_b - var3; + int var9 = var6.field_847_c - var4; + var1.writeByte(var7); + var1.writeByte(var8); + var1.writeByte(var9); + } + + } + + public void processPacket(NetHandler var1) { + var1.func_12001_a(this); + } + + public int getPacketSize() { + return 32 + this.field_12004_e.size() * 3; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet6SpawnPosition.java b/minecraft_server/src/net/minecraft/src/Packet6SpawnPosition.java new file mode 100644 index 0000000..0cb0d6a --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet6SpawnPosition.java @@ -0,0 +1,40 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet6SpawnPosition extends Packet { + public int xPosition; + public int yPosition; + public int zPosition; + + public Packet6SpawnPosition() { + } + + public Packet6SpawnPosition(int var1, int var2, int var3) { + this.xPosition = var1; + this.yPosition = var2; + this.zPosition = var3; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.xPosition = var1.readInt(); + this.yPosition = var1.readInt(); + this.zPosition = var1.readInt(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.xPosition); + var1.writeInt(this.yPosition); + var1.writeInt(this.zPosition); + } + + public void processPacket(NetHandler var1) { + var1.handleSpawnPosition(this); + } + + public int getPacketSize() { + return 12; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet7.java b/minecraft_server/src/net/minecraft/src/Packet7.java new file mode 100644 index 0000000..575c4ef --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet7.java @@ -0,0 +1,31 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet7 extends Packet { + public int field_9019_a; + public int field_9018_b; + public int field_9020_c; + + public void readPacketData(DataInputStream var1) throws IOException { + this.field_9019_a = var1.readInt(); + this.field_9018_b = var1.readInt(); + this.field_9020_c = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeInt(this.field_9019_a); + var1.writeInt(this.field_9018_b); + var1.writeByte(this.field_9020_c); + } + + public void processPacket(NetHandler var1) { + var1.func_6006_a(this); + } + + public int getPacketSize() { + return 9; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet8.java b/minecraft_server/src/net/minecraft/src/Packet8.java new file mode 100644 index 0000000..b395bc8 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet8.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.IOException; + +public class Packet8 extends Packet { + public int field_9017_a; + + public Packet8() { + } + + public Packet8(int var1) { + this.field_9017_a = var1; + } + + public void readPacketData(DataInputStream var1) throws IOException { + this.field_9017_a = var1.readByte(); + } + + public void writePacketData(DataOutputStream var1) throws IOException { + var1.writeByte(this.field_9017_a); + } + + public void processPacket(NetHandler var1) { + var1.func_9003_a(this); + } + + public int getPacketSize() { + return 1; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Packet9.java b/minecraft_server/src/net/minecraft/src/Packet9.java new file mode 100644 index 0000000..e5d7c94 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Packet9.java @@ -0,0 +1,20 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; + +public class Packet9 extends Packet { + public void processPacket(NetHandler var1) { + var1.func_9002_a(this); + } + + public void readPacketData(DataInputStream var1) { + } + + public void writePacketData(DataOutputStream var1) { + } + + public int getPacketSize() { + return 0; + } +} diff --git a/minecraft_server/src/net/minecraft/src/Path.java b/minecraft_server/src/net/minecraft/src/Path.java new file mode 100644 index 0000000..fc08afe --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/PathEntity.java b/minecraft_server/src/net/minecraft/src/PathEntity.java new file mode 100644 index 0000000..1f2856a --- /dev/null +++ b/minecraft_server/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) { + double var2 = (double)this.points[this.pathIndex].xCoord + (double)((int)(var1.width + 1.0F)) * 0.5D; + double var4 = (double)this.points[this.pathIndex].yCoord; + double var6 = (double)this.points[this.pathIndex].zCoord + (double)((int)(var1.width + 1.0F)) * 0.5D; + return Vec3D.createVector(var2, var4, var6); + } +} diff --git a/minecraft_server/src/net/minecraft/src/PathPoint.java b/minecraft_server/src/net/minecraft/src/PathPoint.java new file mode 100644 index 0000000..b12351d --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/Pathfinder.java b/minecraft_server/src/net/minecraft/src/Pathfinder.java new file mode 100644 index 0000000..110e142 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Pathfinder.java @@ -0,0 +1,193 @@ +package net.minecraft.src; + +public class Pathfinder { + private IBlockAccess worldMap; + private Path path = new Path(); + private MCHashTable pointMap = new MCHashTable(); + 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.clearMap(); + 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); + var3 += var6; + } + + if(var7 != null) { + int var8 = 0; + + for(boolean var9 = false; var3 > 0; --var3) { + int var10 = this.getVerticalOffset(var1, var2, var3 - 1, var4, var5); + if(var10 <= 0) { + break; + } + + if(var10 < 0) { + return null; + } + + ++var8; + if(var8 >= 4) { + return null; + } + } + + if(var3 > 0) { + var7 = this.openPoint(var2, var3, var4); + } + } + + return var7; + } + + private final PathPoint openPoint(int var1, int var2, int var3) { + int var4 = var1 | var2 << 10 | var3 << 20; + PathPoint var5 = (PathPoint)this.pointMap.lookup(var4); + if(var5 == null) { + var5 = new PathPoint(var1, var2, var3); + this.pointMap.addKey(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.func_218_c()) { + 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/minecraft_server/src/net/minecraft/src/PlayerInstance.java b/minecraft_server/src/net/minecraft/src/PlayerInstance.java new file mode 100644 index 0000000..1c343ef --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/PlayerInstance.java @@ -0,0 +1,170 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; + +class PlayerInstance { + private List field_1072_b; + private int field_1071_c; + private int field_1070_d; + private ChunkCoordIntPair field_1069_e; + private short[] field_1068_f; + private int field_1067_g; + private int field_1066_h; + private int field_1065_i; + private int field_1064_j; + private int field_1063_k; + private int field_1062_l; + private int field_1061_m; + final PlayerManager field_1073_a; + + public PlayerInstance(PlayerManager var1, int var2, int var3) { + this.field_1073_a = var1; + this.field_1072_b = new ArrayList(); + this.field_1068_f = new short[10]; + this.field_1067_g = 0; + this.field_1071_c = var2; + this.field_1070_d = var3; + this.field_1069_e = new ChunkCoordIntPair(var2, var3); + PlayerManager.getMinecraftServer(var1).worldMngr.A.loadChunk(var2, var3); + } + + public void func_779_a(EntityPlayerMP var1) { + if(this.field_1072_b.contains(var1)) { + throw new IllegalStateException("Failed to add player. " + var1 + " already is in chunk " + this.field_1071_c + ", " + this.field_1070_d); + } else { + var1.field_420_ah.add(this.field_1069_e); + var1.field_421_a.sendPacket(new Packet50PreChunk(this.field_1069_e.field_152_a, this.field_1069_e.field_151_b, true)); + this.field_1072_b.add(var1); + var1.field_422_ag.add(this.field_1069_e); + } + } + + public void func_778_b(EntityPlayerMP var1) { + if(!this.field_1072_b.contains(var1)) { + (new IllegalStateException("Failed to remove player. " + var1 + " isn\'t in chunk " + this.field_1071_c + ", " + this.field_1070_d)).printStackTrace(); + } else { + this.field_1072_b.remove(var1); + if(this.field_1072_b.size() == 0) { + long var2 = (long)this.field_1071_c + 2147483647L | (long)this.field_1070_d + 2147483647L << 32; + PlayerManager.func_539_b(this.field_1073_a).func_670_b(var2); + if(this.field_1067_g > 0) { + PlayerManager.func_533_c(this.field_1073_a).remove(this); + } + + PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr.A.func_374_c(this.field_1071_c, this.field_1070_d); + } + + var1.field_422_ag.remove(this.field_1069_e); + if(var1.field_420_ah.contains(this.field_1069_e)) { + var1.field_421_a.sendPacket(new Packet50PreChunk(this.field_1071_c, this.field_1070_d, false)); + } + + } + } + + public void func_775_a(int var1, int var2, int var3) { + if(this.field_1067_g == 0) { + PlayerManager.func_533_c(this.field_1073_a).add(this); + this.field_1066_h = this.field_1065_i = var1; + this.field_1064_j = this.field_1063_k = var2; + this.field_1062_l = this.field_1061_m = var3; + } + + if(this.field_1066_h > var1) { + this.field_1066_h = var1; + } + + if(this.field_1065_i < var1) { + this.field_1065_i = var1; + } + + if(this.field_1064_j > var2) { + this.field_1064_j = var2; + } + + if(this.field_1063_k < var2) { + this.field_1063_k = var2; + } + + if(this.field_1062_l > var3) { + this.field_1062_l = var3; + } + + if(this.field_1061_m < var3) { + this.field_1061_m = var3; + } + + if(this.field_1067_g < 10) { + short var4 = (short)(var1 << 12 | var3 << 8 | var2); + + for(int var5 = 0; var5 < this.field_1067_g; ++var5) { + if(this.field_1068_f[var5] == var4) { + return; + } + } + + this.field_1068_f[this.field_1067_g++] = var4; + } + + } + + public void func_776_a(Packet var1) { + for(int var2 = 0; var2 < this.field_1072_b.size(); ++var2) { + EntityPlayerMP var3 = (EntityPlayerMP)this.field_1072_b.get(var2); + if(var3.field_420_ah.contains(this.field_1069_e)) { + var3.field_421_a.sendPacket(var1); + } + } + + } + + public void func_777_a() { + if(this.field_1067_g != 0) { + int var1; + int var2; + int var3; + if(this.field_1067_g == 1) { + var1 = this.field_1071_c * 16 + this.field_1066_h; + var2 = this.field_1064_j; + var3 = this.field_1070_d * 16 + this.field_1062_l; + this.func_776_a(new Packet53BlockChange(var1, var2, var3, PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr)); + if(Block.isBlockContainer[PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr.getBlockId(var1, var2, var3)]) { + this.func_776_a(new Packet59ComplexEntity(var1, var2, var3, PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr.getBlock(var1, var2, var3))); + } + } else { + int var4; + if(this.field_1067_g == 10) { + this.field_1064_j = this.field_1064_j / 2 * 2; + this.field_1063_k = (this.field_1063_k / 2 + 1) * 2; + var1 = this.field_1066_h + this.field_1071_c * 16; + var2 = this.field_1064_j; + var3 = this.field_1062_l + this.field_1070_d * 16; + var4 = this.field_1065_i - this.field_1066_h + 1; + int var5 = this.field_1063_k - this.field_1064_j + 2; + int var6 = this.field_1061_m - this.field_1062_l + 1; + this.func_776_a(new Packet51MapChunk(var1, var2, var3, var4, var5, var6, PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr)); + List var7 = PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr.func_532_d(var1, var2, var3, var1 + var4, var2 + var5, var3 + var6); + + for(int var8 = 0; var8 < var7.size(); ++var8) { + TileEntity var9 = (TileEntity)var7.get(var8); + this.func_776_a(new Packet59ComplexEntity(var9.xCoord, var9.yCoord, var9.zCoord, var9)); + } + } else { + this.func_776_a(new Packet52MultiBlockChange(this.field_1071_c, this.field_1070_d, this.field_1068_f, this.field_1067_g, PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr)); + + for(var1 = 0; var1 < this.field_1067_g; ++var1) { + var2 = this.field_1071_c * 16 + (this.field_1067_g >> 12 & 15); + var3 = this.field_1067_g & 255; + var4 = this.field_1070_d * 16 + (this.field_1067_g >> 8 & 15); + if(Block.isBlockContainer[PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr.getBlockId(var2, var3, var4)]) { + this.func_776_a(new Packet59ComplexEntity(var2, var3, var4, PlayerManager.getMinecraftServer(this.field_1073_a).worldMngr.getBlock(var2, var3, var4))); + } + } + } + } + + this.field_1067_g = 0; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/PlayerListBox.java b/minecraft_server/src/net/minecraft/src/PlayerListBox.java new file mode 100644 index 0000000..ec78876 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/PlayerListBox.java @@ -0,0 +1,28 @@ +package net.minecraft.src; + +import java.util.Vector; +import javax.swing.JList; +import net.minecraft.server.MinecraftServer; + +public class PlayerListBox extends JList implements IUpdatePlayerListBox { + private MinecraftServer mcServer; + private int updateCounter = 0; + + public PlayerListBox(MinecraftServer var1) { + this.mcServer = var1; + var1.func_6022_a(this); + } + + public void update() { + if(this.updateCounter++ % 20 == 0) { + Vector var1 = new Vector(); + + for(int var2 = 0; var2 < this.mcServer.configManager.playerEntities.size(); ++var2) { + var1.add(((EntityPlayerMP)this.mcServer.configManager.playerEntities.get(var2)).username); + } + + this.setListData(var1); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/PlayerManager.java b/minecraft_server/src/net/minecraft/src/PlayerManager.java new file mode 100644 index 0000000..81c1282 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/PlayerManager.java @@ -0,0 +1,141 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.List; +import net.minecraft.server.MinecraftServer; + +public class PlayerManager { + private List field_9216_a = new ArrayList(); + private MCHashTable2 field_9215_b = new MCHashTable2(); + private List field_833_c = new ArrayList(); + private MinecraftServer mcServer; + + public PlayerManager(MinecraftServer var1) { + this.mcServer = var1; + } + + public void func_538_a() { + for(int var1 = 0; var1 < this.field_833_c.size(); ++var1) { + ((PlayerInstance)this.field_833_c.get(var1)).func_777_a(); + } + + this.field_833_c.clear(); + } + + private PlayerInstance func_537_a(int var1, int var2, boolean var3) { + long var4 = (long)var1 + 2147483647L | (long)var2 + 2147483647L << 32; + PlayerInstance var6 = (PlayerInstance)this.field_9215_b.func_677_a(var4); + if(var6 == null && var3) { + var6 = new PlayerInstance(this, var1, var2); + this.field_9215_b.func_675_a(var4, var6); + } + + return var6; + } + + public void func_541_a(Packet var1, int var2, int var3, int var4) { + int var5 = var2 >> 4; + int var6 = var4 >> 4; + PlayerInstance var7 = this.func_537_a(var5, var6, false); + if(var7 != null) { + var7.func_776_a(var1); + } + + } + + public void func_535_a(int var1, int var2, int var3) { + int var4 = var1 >> 4; + int var5 = var3 >> 4; + PlayerInstance var6 = this.func_537_a(var4, var5, false); + if(var6 != null) { + var6.func_775_a(var1 & 15, var2, var3 & 15); + } + + } + + public void func_9214_a(EntityPlayerMP var1) { + int var2 = (int)var1.posX >> 4; + int var3 = (int)var1.posZ >> 4; + var1.field_9155_d = var1.posX; + var1.field_9154_e = var1.posZ; + + for(int var4 = var2 - 10; var4 <= var2 + 10; ++var4) { + for(int var5 = var3 - 10; var5 <= var3 + 10; ++var5) { + this.func_537_a(var4, var5, true).func_779_a(var1); + } + } + + this.field_9216_a.add(var1); + } + + public void func_9213_b(EntityPlayerMP var1) { + int var2 = (int)var1.field_9155_d >> 4; + int var3 = (int)var1.field_9154_e >> 4; + + for(int var4 = var2 - 10; var4 <= var2 + 10; ++var4) { + for(int var5 = var3 - 10; var5 <= var3 + 10; ++var5) { + PlayerInstance var6 = this.func_537_a(var4, var5, false); + if(var6 != null) { + var6.func_778_b(var1); + } + } + } + + this.field_9216_a.remove(var1); + } + + private boolean func_544_a(int var1, int var2, int var3, int var4) { + int var5 = var1 - var3; + int var6 = var2 - var4; + return var5 >= -10 && var5 <= 10 ? var6 >= -10 && var6 <= 10 : false; + } + + public void func_543_c(EntityPlayerMP var1) { + int var2 = (int)var1.posX >> 4; + int var3 = (int)var1.posZ >> 4; + double var4 = var1.field_9155_d - var1.posX; + double var6 = var1.field_9154_e - var1.posZ; + double var8 = var4 * var4 + var6 * var6; + if(var8 >= 64.0D) { + int var10 = (int)var1.field_9155_d >> 4; + int var11 = (int)var1.field_9154_e >> 4; + int var12 = var2 - var10; + int var13 = var3 - var11; + if(var12 != 0 || var13 != 0) { + for(int var14 = var2 - 10; var14 <= var2 + 10; ++var14) { + for(int var15 = var3 - 10; var15 <= var3 + 10; ++var15) { + if(!this.func_544_a(var14, var15, var10, var11)) { + this.func_537_a(var14, var15, true).func_779_a(var1); + } + + if(!this.func_544_a(var14 - var12, var15 - var13, var2, var3)) { + PlayerInstance var16 = this.func_537_a(var14 - var12, var15 - var13, false); + if(var16 != null) { + var16.func_778_b(var1); + } + } + } + } + + var1.field_9155_d = var1.posX; + var1.field_9154_e = var1.posZ; + } + } + } + + public int func_542_b() { + return 144; + } + + static MinecraftServer getMinecraftServer(PlayerManager var0) { + return var0.mcServer; + } + + static MCHashTable2 func_539_b(PlayerManager var0) { + return var0.field_9215_b; + } + + static List func_533_c(PlayerManager var0) { + return var0.field_833_c; + } +} diff --git a/minecraft_server/src/net/minecraft/src/PlayerNBTManager.java b/minecraft_server/src/net/minecraft/src/PlayerNBTManager.java new file mode 100644 index 0000000..d782473 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/PlayerNBTManager.java @@ -0,0 +1,49 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.util.logging.Logger; + +public class PlayerNBTManager { + public static Logger logger = Logger.getLogger("Minecraft"); + private File worldFile; + + public PlayerNBTManager(File var1) { + this.worldFile = var1; + var1.mkdir(); + } + + public void writePlayerData(EntityPlayerMP var1) { + try { + NBTTagCompound var2 = new NBTTagCompound(); + var1.writeToNBT(var2); + File var3 = new File(this.worldFile, "_tmp_.dat"); + File var4 = new File(this.worldFile, var1.username + ".dat"); + CompressedStreamTools.func_769_a(var2, new FileOutputStream(var3)); + if(var4.exists()) { + var4.delete(); + } + + var3.renameTo(var4); + } catch (Exception var5) { + logger.warning("Failed to save player data for " + var1.username); + } + + } + + public void readPlayerData(EntityPlayerMP var1) { + try { + File var2 = new File(this.worldFile, var1.username + ".dat"); + if(var2.exists()) { + NBTTagCompound var3 = CompressedStreamTools.func_770_a(new FileInputStream(var2)); + if(var3 != null) { + var1.readFromNBT(var3); + } + } + } catch (Exception var4) { + logger.warning("Failed to load player data for " + var1.username); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/PropertyManager.java b/minecraft_server/src/net/minecraft/src/PropertyManager.java new file mode 100644 index 0000000..5ff9dab --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/PropertyManager.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.util.Properties; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class PropertyManager { + public static Logger logger = Logger.getLogger("Minecraft"); + private Properties serverProperties = new Properties(); + private File serverPropertiesFile; + + public PropertyManager(File var1) { + this.serverPropertiesFile = var1; + if(var1.exists()) { + try { + this.serverProperties.load(new FileInputStream(var1)); + } catch (Exception var3) { + logger.log(Level.WARNING, "Failed to load " + var1, var3); + this.generateNewProperties(); + } + } else { + logger.log(Level.WARNING, var1 + " does not exist"); + this.generateNewProperties(); + } + + } + + public void generateNewProperties() { + logger.log(Level.INFO, "Generating new properties file"); + this.saveProperties(); + } + + public void saveProperties() { + try { + this.serverProperties.store(new FileOutputStream(this.serverPropertiesFile), "Minecraft server properties"); + } catch (Exception var2) { + logger.log(Level.WARNING, "Failed to save " + this.serverPropertiesFile, var2); + this.generateNewProperties(); + } + + } + + public String getStringProperty(String var1, String var2) { + if(!this.serverProperties.containsKey(var1)) { + this.serverProperties.setProperty(var1, var2); + this.saveProperties(); + } + + return this.serverProperties.getProperty(var1, var2); + } + + public int getIntProperty(String var1, int var2) { + try { + return Integer.parseInt(this.getStringProperty(var1, "" + var2)); + } catch (Exception var4) { + this.serverProperties.setProperty(var1, "" + var2); + return var2; + } + } + + public boolean getBooleanProperty(String var1, boolean var2) { + try { + return Boolean.parseBoolean(this.getStringProperty(var1, "" + var2)); + } catch (Exception var4) { + this.serverProperties.setProperty(var1, "" + var2); + return var2; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/RedstoneUpdateInfo.java b/minecraft_server/src/net/minecraft/src/RedstoneUpdateInfo.java new file mode 100644 index 0000000..27017b5 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/RedstoneUpdateInfo.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +class RedstoneUpdateInfo { + int field_775_a; + int field_774_b; + int field_777_c; + long field_776_d; + + public RedstoneUpdateInfo(int var1, int var2, int var3, long var4) { + this.field_775_a = var1; + this.field_774_b = var2; + this.field_777_c = var3; + this.field_776_d = var4; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ServerCommand.java b/minecraft_server/src/net/minecraft/src/ServerCommand.java new file mode 100644 index 0000000..741f466 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ServerCommand.java @@ -0,0 +1,11 @@ +package net.minecraft.src; + +public class ServerCommand { + public final String command; + public final ICommandListener commandListener; + + public ServerCommand(String var1, ICommandListener var2) { + this.command = var1; + this.commandListener = var2; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ServerConfigurationManager.java b/minecraft_server/src/net/minecraft/src/ServerConfigurationManager.java new file mode 100644 index 0000000..f5e61b8 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ServerConfigurationManager.java @@ -0,0 +1,369 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.PrintWriter; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; +import java.util.logging.Logger; +import net.minecraft.server.MinecraftServer; + +public class ServerConfigurationManager { + public static Logger logger = Logger.getLogger("Minecraft"); + public List playerEntities = new ArrayList(); + private MinecraftServer mcServer; + private PlayerManager playerManagerObj; + private int maxPlayers; + private Set field_9252_f = new HashSet(); + private Set bannedIPs = new HashSet(); + private Set ops = new HashSet(); + private File bannedPlayersFile; + private File ipBanFile; + private File opFile; + private PlayerNBTManager playerNBTManagerObj; + + public ServerConfigurationManager(MinecraftServer var1) { + this.mcServer = var1; + this.bannedPlayersFile = var1.getFile("banned-players.txt"); + this.ipBanFile = var1.getFile("banned-ips.txt"); + this.opFile = var1.getFile("ops.txt"); + this.playerManagerObj = new PlayerManager(var1); + this.maxPlayers = var1.propertyManagerObj.getIntProperty("max-players", 20); + this.readBannedPlayers(); + this.loadBannedList(); + this.loadOps(); + this.writeBannedPlayers(); + this.saveBannedList(); + this.saveOps(); + } + + public void setPlayerManager(WorldServer var1) { + this.playerNBTManagerObj = new PlayerNBTManager(new File(var1.field_797_s, "players")); + } + + public int func_640_a() { + return this.playerManagerObj.func_542_b(); + } + + public void playerLoggedIn(EntityPlayerMP var1) { + this.playerEntities.add(var1); + this.playerNBTManagerObj.readPlayerData(var1); + this.mcServer.worldMngr.A.loadChunk((int)var1.posX >> 4, (int)var1.posZ >> 4); + + while(this.mcServer.worldMngr.getCollidingBoundingBoxes(var1, var1.boundingBox).size() != 0) { + var1.setPosition(var1.posX, var1.posY + 1.0D, var1.posZ); + } + + this.mcServer.worldMngr.entityJoinedWorld(var1); + this.playerManagerObj.func_9214_a(var1); + } + + public void func_613_b(EntityPlayerMP var1) { + this.playerManagerObj.func_543_c(var1); + } + + public void playerLoggedOut(EntityPlayerMP var1) { + this.playerNBTManagerObj.writePlayerData(var1); + this.mcServer.worldMngr.func_12016_d(var1); + this.playerEntities.remove(var1); + this.playerManagerObj.func_9213_b(var1); + } + + public EntityPlayerMP login(NetLoginHandler var1, String var2, String var3) { + if(this.field_9252_f.contains(var2.trim().toLowerCase())) { + var1.kickUser("You are banned from this server!"); + return null; + } else { + String var4 = var1.netManager.getRemoteAddress().toString(); + var4 = var4.substring(var4.indexOf("/") + 1); + var4 = var4.substring(0, var4.indexOf(":")); + if(this.bannedIPs.contains(var4)) { + var1.kickUser("Your IP address is banned from this server!"); + return null; + } else if(this.playerEntities.size() >= this.maxPlayers) { + var1.kickUser("The server is full!"); + return null; + } else { + for(int var5 = 0; var5 < this.playerEntities.size(); ++var5) { + EntityPlayerMP var6 = (EntityPlayerMP)this.playerEntities.get(var5); + if(var6.username.equalsIgnoreCase(var2)) { + var6.field_421_a.func_43_c("You logged in from another location"); + } + } + + return new EntityPlayerMP(this.mcServer, this.mcServer.worldMngr, var2, new ItemInWorldManager(this.mcServer.worldMngr)); + } + } + } + + public EntityPlayerMP func_9242_d(EntityPlayerMP var1) { + this.mcServer.field_6028_k.func_9238_a(var1); + this.mcServer.field_6028_k.func_610_b(var1); + this.playerManagerObj.func_9213_b(var1); + this.playerEntities.remove(var1); + this.mcServer.worldMngr.func_12014_e(var1); + EntityPlayerMP var2 = new EntityPlayerMP(this.mcServer, this.mcServer.worldMngr, var1.username, new ItemInWorldManager(this.mcServer.worldMngr)); + var2.field_331_c = var1.field_331_c; + var2.field_421_a = var1.field_421_a; + this.mcServer.worldMngr.A.loadChunk((int)var2.posX >> 4, (int)var2.posZ >> 4); + + while(this.mcServer.worldMngr.getCollidingBoundingBoxes(var2, var2.boundingBox).size() != 0) { + var2.setPosition(var2.posX, var2.posY + 1.0D, var2.posZ); + } + + var2.field_421_a.sendPacket(new Packet9()); + var2.field_421_a.func_41_a(var2.posX, var2.posY, var2.posZ, var2.rotationYaw, var2.rotationPitch); + this.playerManagerObj.func_9214_a(var2); + this.mcServer.worldMngr.entityJoinedWorld(var2); + this.playerEntities.add(var2); + return var2; + } + + public void func_637_b() { + this.playerManagerObj.func_538_a(); + } + + public void func_622_a(int var1, int var2, int var3) { + this.playerManagerObj.func_535_a(var1, var2, var3); + } + + public void sendPacketToAllPlayers(Packet var1) { + for(int var2 = 0; var2 < this.playerEntities.size(); ++var2) { + EntityPlayerMP var3 = (EntityPlayerMP)this.playerEntities.get(var2); + var3.field_421_a.sendPacket(var1); + } + + } + + public String getPlayerList() { + String var1 = ""; + + for(int var2 = 0; var2 < this.playerEntities.size(); ++var2) { + if(var2 > 0) { + var1 = var1 + ", "; + } + + var1 = var1 + ((EntityPlayerMP)this.playerEntities.get(var2)).username; + } + + return var1; + } + + public void banPlayer(String var1) { + this.field_9252_f.add(var1.toLowerCase()); + this.writeBannedPlayers(); + } + + public void unbanPlayer(String var1) { + this.field_9252_f.remove(var1.toLowerCase()); + this.writeBannedPlayers(); + } + + private void readBannedPlayers() { + try { + this.field_9252_f.clear(); + BufferedReader var1 = new BufferedReader(new FileReader(this.bannedPlayersFile)); + String var2 = ""; + + while(true) { + var2 = var1.readLine(); + if(var2 == null) { + var1.close(); + break; + } + + this.field_9252_f.add(var2.trim().toLowerCase()); + } + } catch (Exception var3) { + logger.warning("Failed to load ban list: " + var3); + } + + } + + private void writeBannedPlayers() { + try { + PrintWriter var1 = new PrintWriter(new FileWriter(this.bannedPlayersFile, false)); + Iterator var2 = this.field_9252_f.iterator(); + + while(var2.hasNext()) { + String var3 = (String)var2.next(); + var1.println(var3); + } + + var1.close(); + } catch (Exception var4) { + logger.warning("Failed to save ban list: " + var4); + } + + } + + public void banIP(String var1) { + this.bannedIPs.add(var1.toLowerCase()); + this.saveBannedList(); + } + + public void unbanIP(String var1) { + this.bannedIPs.remove(var1.toLowerCase()); + this.saveBannedList(); + } + + private void loadBannedList() { + try { + this.bannedIPs.clear(); + BufferedReader var1 = new BufferedReader(new FileReader(this.ipBanFile)); + String var2 = ""; + + while(true) { + var2 = var1.readLine(); + if(var2 == null) { + var1.close(); + break; + } + + this.bannedIPs.add(var2.trim().toLowerCase()); + } + } catch (Exception var3) { + logger.warning("Failed to load ip ban list: " + var3); + } + + } + + private void saveBannedList() { + try { + PrintWriter var1 = new PrintWriter(new FileWriter(this.ipBanFile, false)); + Iterator var2 = this.bannedIPs.iterator(); + + while(var2.hasNext()) { + String var3 = (String)var2.next(); + var1.println(var3); + } + + var1.close(); + } catch (Exception var4) { + logger.warning("Failed to save ip ban list: " + var4); + } + + } + + public void opPlayer(String var1) { + this.ops.add(var1.toLowerCase()); + this.saveOps(); + } + + public void deopPlayer(String var1) { + this.ops.remove(var1.toLowerCase()); + this.saveOps(); + } + + private void loadOps() { + try { + this.ops.clear(); + BufferedReader var1 = new BufferedReader(new FileReader(this.opFile)); + String var2 = ""; + + while(true) { + var2 = var1.readLine(); + if(var2 == null) { + var1.close(); + break; + } + + this.ops.add(var2.trim().toLowerCase()); + } + } catch (Exception var3) { + logger.warning("Failed to load ip ban list: " + var3); + } + + } + + private void saveOps() { + try { + PrintWriter var1 = new PrintWriter(new FileWriter(this.opFile, false)); + Iterator var2 = this.ops.iterator(); + + while(var2.hasNext()) { + String var3 = (String)var2.next(); + var1.println(var3); + } + + var1.close(); + } catch (Exception var4) { + logger.warning("Failed to save ip ban list: " + var4); + } + + } + + public boolean isOp(String var1) { + return this.ops.contains(var1.trim().toLowerCase()); + } + + public EntityPlayerMP getPlayerEntity(String var1) { + for(int var2 = 0; var2 < this.playerEntities.size(); ++var2) { + EntityPlayerMP var3 = (EntityPlayerMP)this.playerEntities.get(var2); + if(var3.username.equalsIgnoreCase(var1)) { + return var3; + } + } + + return null; + } + + public void sendChatMessageToPlayer(String var1, String var2) { + EntityPlayerMP var3 = this.getPlayerEntity(var1); + if(var3 != null) { + var3.field_421_a.sendPacket(new Packet3Chat(var2)); + } + + } + + public void func_12022_a(double var1, double var3, double var5, double var7, Packet var9) { + for(int var10 = 0; var10 < this.playerEntities.size(); ++var10) { + EntityPlayerMP var11 = (EntityPlayerMP)this.playerEntities.get(var10); + double var12 = var1 - var11.posX; + double var14 = var3 - var11.posY; + double var16 = var5 - var11.posZ; + if(var12 * var12 + var14 * var14 + var16 * var16 < var7 * var7) { + var11.field_421_a.sendPacket(var9); + } + } + + } + + public void sendChatMessageToAllPlayers(String var1) { + Packet3Chat var2 = new Packet3Chat(var1); + + for(int var3 = 0; var3 < this.playerEntities.size(); ++var3) { + EntityPlayerMP var4 = (EntityPlayerMP)this.playerEntities.get(var3); + if(this.isOp(var4.username)) { + var4.field_421_a.sendPacket(var2); + } + } + + } + + public boolean sendPacketToPlayer(String var1, Packet var2) { + EntityPlayerMP var3 = this.getPlayerEntity(var1); + if(var3 != null) { + var3.field_421_a.sendPacket(var2); + return true; + } else { + return false; + } + } + + public void sentTileEntityToPlayer(int var1, int var2, int var3, TileEntity var4) { + this.playerManagerObj.func_541_a(new Packet59ComplexEntity(var1, var2, var3, var4), var1, var2, var3); + } + + public void savePlayerStates() { + for(int var1 = 0; var1 < this.playerEntities.size(); ++var1) { + this.playerNBTManagerObj.writePlayerData((EntityPlayerMP)this.playerEntities.get(var1)); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/ServerGUI.java b/minecraft_server/src/net/minecraft/src/ServerGUI.java new file mode 100644 index 0000000..0514bfa --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ServerGUI.java @@ -0,0 +1,92 @@ +package net.minecraft.src; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import java.util.logging.Logger; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTextArea; +import javax.swing.JTextField; +import javax.swing.UIManager; +import javax.swing.border.EtchedBorder; +import javax.swing.border.TitledBorder; +import net.minecraft.server.MinecraftServer; + +public class ServerGUI extends JComponent implements ICommandListener { + public static Logger logger = Logger.getLogger("Minecraft"); + private MinecraftServer mcServer; + + public static void initGui(MinecraftServer var0) { + try { + UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); + } catch (Exception var3) { + } + + ServerGUI var1 = new ServerGUI(var0); + JFrame var2 = new JFrame("Minecraft server"); + var2.add(var1); + var2.pack(); + var2.setLocationRelativeTo((Component)null); + var2.setVisible(true); + var2.addWindowListener(new ServerWindowAdapter(var0)); + } + + public ServerGUI(MinecraftServer var1) { + this.mcServer = var1; + this.setPreferredSize(new Dimension(854, 480)); + this.setLayout(new BorderLayout()); + + try { + this.add(this.getLogComponent(), "Center"); + this.add(this.getStatsComponent(), "West"); + } catch (Exception var3) { + var3.printStackTrace(); + } + + } + + private JComponent getStatsComponent() { + JPanel var1 = new JPanel(new BorderLayout()); + var1.add(new GuiStatsComponent(), "North"); + var1.add(this.getPlayerListComponent(), "Center"); + var1.setBorder(new TitledBorder(new EtchedBorder(), "Stats")); + return var1; + } + + private JComponent getPlayerListComponent() { + PlayerListBox var1 = new PlayerListBox(this.mcServer); + JScrollPane var2 = new JScrollPane(var1, 22, 30); + var2.setBorder(new TitledBorder(new EtchedBorder(), "Players")); + return var2; + } + + private JComponent getLogComponent() { + JPanel var1 = new JPanel(new BorderLayout()); + JTextArea var2 = new JTextArea(); + logger.addHandler(new GuiLogOutputHandler(var2)); + JScrollPane var3 = new JScrollPane(var2, 22, 30); + var2.setEditable(false); + JTextField var4 = new JTextField(); + var4.addActionListener(new ServerGuiCommandListener(this, var4)); + var2.addFocusListener(new ServerGuiFocusAdapter(this)); + var1.add(var3, "Center"); + var1.add(var4, "South"); + var1.setBorder(new TitledBorder(new EtchedBorder(), "Log and chat")); + return var1; + } + + public void log(String var1) { + logger.info(var1); + } + + public String getUsername() { + return "CONSOLE"; + } + + static MinecraftServer getMinecraftServer(ServerGUI var0) { + return var0.mcServer; + } +} diff --git a/minecraft_server/src/net/minecraft/src/ServerGuiCommandListener.java b/minecraft_server/src/net/minecraft/src/ServerGuiCommandListener.java new file mode 100644 index 0000000..e6e14bb --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ServerGuiCommandListener.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JTextField; + +class ServerGuiCommandListener implements ActionListener { + final JTextField textField; + final ServerGUI mcServerGui; + + ServerGuiCommandListener(ServerGUI var1, JTextField var2) { + this.mcServerGui = var1; + this.textField = var2; + } + + public void actionPerformed(ActionEvent var1) { + String var2 = this.textField.getText().trim(); + if(var2.length() > 0) { + ServerGUI.getMinecraftServer(this.mcServerGui).addCommand(var2, this.mcServerGui); + } + + this.textField.setText(""); + } +} diff --git a/minecraft_server/src/net/minecraft/src/ServerGuiFocusAdapter.java b/minecraft_server/src/net/minecraft/src/ServerGuiFocusAdapter.java new file mode 100644 index 0000000..8fa603f --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ServerGuiFocusAdapter.java @@ -0,0 +1,15 @@ +package net.minecraft.src; + +import java.awt.event.FocusAdapter; +import java.awt.event.FocusEvent; + +class ServerGuiFocusAdapter extends FocusAdapter { + final ServerGUI mcServerGui; + + ServerGuiFocusAdapter(ServerGUI var1) { + this.mcServerGui = var1; + } + + public void focusGained(FocusEvent var1) { + } +} diff --git a/minecraft_server/src/net/minecraft/src/ServerWindowAdapter.java b/minecraft_server/src/net/minecraft/src/ServerWindowAdapter.java new file mode 100644 index 0000000..3a3c77d --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ServerWindowAdapter.java @@ -0,0 +1,27 @@ +package net.minecraft.src; + +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import net.minecraft.server.MinecraftServer; + +final class ServerWindowAdapter extends WindowAdapter { + final MinecraftServer mcServer; + + ServerWindowAdapter(MinecraftServer var1) { + this.mcServer = var1; + } + + public void windowClosing(WindowEvent var1) { + this.mcServer.func_6016_a(); + + while(!this.mcServer.field_6032_g) { + try { + Thread.sleep(100L); + } catch (InterruptedException var3) { + var3.printStackTrace(); + } + } + + System.exit(0); + } +} diff --git a/minecraft_server/src/net/minecraft/src/SpawnerAnimals.java b/minecraft_server/src/net/minecraft/src/SpawnerAnimals.java new file mode 100644 index 0000000..6289187 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/SpawnerAnimals.java @@ -0,0 +1,133 @@ +package net.minecraft.src; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; + +public final class SpawnerAnimals { + private static Set field_4311_a = new HashSet(); + + protected static ChunkPosition func_4112_a(World var0, int var1, int var2) { + int var3 = var1 + var0.rand.nextInt(16); + int var4 = var0.rand.nextInt(128); + int var5 = var2 + var0.rand.nextInt(16); + return new ChunkPosition(var3, var4, var5); + } + + public static final int func_4111_a(World var0) { + field_4311_a.clear(); + + int var1; + for(var1 = 0; var1 < var0.playerEntities.size(); ++var1) { + EntityPlayer var2 = (EntityPlayer)var0.playerEntities.get(var1); + int var3 = MathHelper.floor_double(var2.posX / 16.0D); + int var4 = MathHelper.floor_double(var2.posZ / 16.0D); + byte var5 = 8; + + for(int var6 = -var5; var6 <= var5; ++var6) { + for(int var7 = -var5; var7 <= var5; ++var7) { + field_4311_a.add(new ChunkCoordIntPair(var6 + var3, var7 + var4)); + } + } + } + + var1 = 0; + + label113: + for(int var28 = 0; var28 < EnumCreatureType.values().length; ++var28) { + EnumCreatureType var29 = EnumCreatureType.values()[var28]; + if(var0.countEntities(var29.field_4221_c) <= var29.field_4220_d * field_4311_a.size() / 256) { + Iterator var30 = field_4311_a.iterator(); + + label110: + while(true) { + int var8; + int var10; + int var11; + int var12; + Class[] var33; + do { + do { + ChunkCoordIntPair var31; + do { + do { + do { + if(!var30.hasNext()) { + continue label113; + } + + var31 = (ChunkCoordIntPair)var30.next(); + } while(var0.rand.nextInt(50) != 0); + + MobSpawnerBase var32 = var0.func_4077_a().func_4066_a(var31); + var33 = var32.getEntitiesForType(var29); + } while(var33 == null); + } while(var33.length == 0); + + var8 = var0.rand.nextInt(var33.length); + ChunkPosition var9 = func_4112_a(var0, var31.field_152_a * 16, var31.field_151_b * 16); + var10 = var9.field_846_a; + var11 = var9.field_845_b; + var12 = var9.field_847_c; + } while(var0.doesBlockAllowAttachment(var10, var11, var12)); + } while(var0.getBlockMaterial(var10, var11, var12) != Material.air); + + int var13 = 0; + + for(int var14 = 0; var14 < 3; ++var14) { + int var15 = var10; + int var16 = var11; + int var17 = var12; + byte var18 = 6; + + for(int var19 = 0; var19 < 4; ++var19) { + var15 += var0.rand.nextInt(var18) - var0.rand.nextInt(var18); + var16 += var0.rand.nextInt(1) - var0.rand.nextInt(1); + var17 += var0.rand.nextInt(var18) - var0.rand.nextInt(var18); + if(var0.doesBlockAllowAttachment(var15, var16 - 1, var17) && !var0.doesBlockAllowAttachment(var15, var16, var17) && !var0.getBlockMaterial(var15, var16, var17).getIsLiquid() && !var0.doesBlockAllowAttachment(var15, var16 + 1, var17)) { + float var20 = (float)var15 + 0.5F; + float var21 = (float)var16; + float var22 = (float)var17 + 0.5F; + if(var0.getClosestPlayer((double)var20, (double)var21, (double)var22, 24.0D) == null) { + float var23 = var20 - (float)var0.spawnX; + float var24 = var21 - (float)var0.spawnY; + float var25 = var22 - (float)var0.spawnZ; + float var26 = var23 * var23 + var24 * var24 + var25 * var25; + if(var26 >= 576.0F) { + EntityLiving var34; + try { + var34 = (EntityLiving)var33[var8].getConstructor(new Class[]{World.class}).newInstance(new Object[]{var0}); + } catch (Exception var27) { + var27.printStackTrace(); + return var1; + } + + var34.func_107_c((double)var20, (double)var21, (double)var22, var0.rand.nextFloat() * 360.0F, 0.0F); + if(var34.getCanSpawnHere()) { + ++var13; + var0.entityJoinedWorld(var34); + if(var34 instanceof EntitySpider && var0.rand.nextInt(100) == 0) { + EntitySkeleton var35 = new EntitySkeleton(var0); + var35.func_107_c((double)var20, (double)var21, (double)var22, var34.rotationYaw, 0.0F); + var0.entityJoinedWorld(var35); + var35.func_6094_e(var34); + } + + if(var13 >= var34.func_4045_i()) { + continue label110; + } + } + + var1 += var13; + } + } + } + } + } + } + } + } + + return var1; + } +} diff --git a/minecraft_server/src/net/minecraft/src/StepSound.java b/minecraft_server/src/net/minecraft/src/StepSound.java new file mode 100644 index 0000000..e5424cf --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/StepSound.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +public class StepSound { + public final String field_1029_a; + public final float field_1028_b; + public final float field_1030_c; + + public StepSound(String var1, float var2, float var3) { + this.field_1029_a = var1; + this.field_1028_b = var2; + this.field_1030_c = var3; + } + + public float func_738_a() { + return this.field_1028_b; + } + + public float func_739_b() { + return this.field_1030_c; + } + + public String func_737_c() { + return "step." + this.field_1029_a; + } +} diff --git a/minecraft_server/src/net/minecraft/src/StepSoundSand.java b/minecraft_server/src/net/minecraft/src/StepSoundSand.java new file mode 100644 index 0000000..f5eb99e --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/StepSoundSand.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +final class StepSoundSand extends StepSound { + StepSoundSand(String var1, float var2, float var3) { + super(var1, var2, var3); + } +} diff --git a/minecraft_server/src/net/minecraft/src/StepSoundStone.java b/minecraft_server/src/net/minecraft/src/StepSoundStone.java new file mode 100644 index 0000000..e12a567 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/StepSoundStone.java @@ -0,0 +1,7 @@ +package net.minecraft.src; + +final class StepSoundStone extends StepSound { + StepSoundStone(String var1, float var2, float var3) { + super(var1, var2, var3); + } +} diff --git a/minecraft_server/src/net/minecraft/src/ThreadCommandReader.java b/minecraft_server/src/net/minecraft/src/ThreadCommandReader.java new file mode 100644 index 0000000..ec2e34f --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ThreadCommandReader.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import net.minecraft.server.MinecraftServer; + +public class ThreadCommandReader extends Thread { + final MinecraftServer mcServer; + + public ThreadCommandReader(MinecraftServer var1) { + this.mcServer = var1; + } + + public void run() { + BufferedReader var1 = new BufferedReader(new InputStreamReader(System.in)); + String var2 = null; + + try { + while(!this.mcServer.field_6032_g && MinecraftServer.func_6015_a(this.mcServer)) { + var2 = var1.readLine(); + if(var2 == null) { + break; + } + + this.mcServer.addCommand(var2, this.mcServer); + } + } catch (IOException var4) { + var4.printStackTrace(); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/ThreadLoginVerifier.java b/minecraft_server/src/net/minecraft/src/ThreadLoginVerifier.java new file mode 100644 index 0000000..8afe7a4 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ThreadLoginVerifier.java @@ -0,0 +1,34 @@ +package net.minecraft.src; + +import java.io.BufferedReader; +import java.io.InputStreamReader; +import java.net.URL; + +class ThreadLoginVerifier extends Thread { + final Packet1Login loginPacket; + final NetLoginHandler loginHandler; + + ThreadLoginVerifier(NetLoginHandler var1, Packet1Login var2) { + this.loginHandler = var1; + this.loginPacket = var2; + } + + public void run() { + try { + String var1 = NetLoginHandler.getServerId(this.loginHandler); + URL var2 = new URL("http://www.minecraft.net/game/checkserver.jsp?user=" + this.loginPacket.username + "&serverId=" + var1); + BufferedReader var3 = new BufferedReader(new InputStreamReader(var2.openStream())); + String var4 = var3.readLine(); + var3.close(); + System.out.println("THE REPLY IS " + var4); + if(var4.equals("YES")) { + NetLoginHandler.setLoginPacket(this.loginHandler, this.loginPacket); + } else { + this.loginHandler.kickUser("Failed to verify username!"); + } + } catch (Exception var5) { + var5.printStackTrace(); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/ThreadMonitorConnection.java b/minecraft_server/src/net/minecraft/src/ThreadMonitorConnection.java new file mode 100644 index 0000000..b244c52 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ThreadMonitorConnection.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +class ThreadMonitorConnection extends Thread { + final NetworkManager netManager; + + ThreadMonitorConnection(NetworkManager var1) { + this.netManager = var1; + } + + public void run() { + try { + Thread.sleep(2000L); + if(NetworkManager.isRunning(this.netManager)) { + NetworkManager.getWriteThread(this.netManager).interrupt(); + this.netManager.networkShutdown("Connection closed"); + } + } catch (Exception var2) { + var2.printStackTrace(); + } + + } +} diff --git a/minecraft_server/src/net/minecraft/src/ThreadServerApplication.java b/minecraft_server/src/net/minecraft/src/ThreadServerApplication.java new file mode 100644 index 0000000..39eca63 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ThreadServerApplication.java @@ -0,0 +1,16 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public final class ThreadServerApplication extends Thread { + final MinecraftServer mcServer; + + public ThreadServerApplication(String var1, MinecraftServer var2) { + super(var1); + this.mcServer = var2; + } + + public void run() { + this.mcServer.run(); + } +} diff --git a/minecraft_server/src/net/minecraft/src/ThreadSleepForever.java b/minecraft_server/src/net/minecraft/src/ThreadSleepForever.java new file mode 100644 index 0000000..1590ef0 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/ThreadSleepForever.java @@ -0,0 +1,22 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class ThreadSleepForever extends Thread { + final MinecraftServer mc; + + public ThreadSleepForever(MinecraftServer var1) { + this.mc = var1; + this.setDaemon(true); + this.start(); + } + + public void run() { + while(true) { + try { + Thread.sleep(2147483647L); + } catch (InterruptedException var2) { + } + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/TileEntity.java b/minecraft_server/src/net/minecraft/src/TileEntity.java new file mode 100644 index 0000000..9c4e2b2 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/TileEntity.java @@ -0,0 +1,75 @@ +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 void func_183_c() { + this.worldObj.func_515_b(this.xCoord, this.yCoord, this.zCoord, this); + } + + static { + addMapping(TileEntityFurnace.class, "Furnace"); + addMapping(TileEntityChest.class, "Chest"); + addMapping(TileEntitySign.class, "Sign"); + addMapping(TileEntityMobSpawner.class, "MobSpawner"); + } +} diff --git a/minecraft_server/src/net/minecraft/src/TileEntityChest.java b/minecraft_server/src/net/minecraft/src/TileEntityChest.java new file mode 100644 index 0000000..ff18dd9 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/TileEntityChest.java @@ -0,0 +1,57 @@ +package net.minecraft.src; + +public class TileEntityChest extends TileEntity implements IInventory { + private ItemStack[] field_494_e = new ItemStack[36]; + + public int func_83_a() { + return 27; + } + + public ItemStack getStackInSlot(int var1) { + return this.field_494_e[var1]; + } + + public void func_197_a(int var1, ItemStack var2) { + this.field_494_e[var1] = var2; + if(var2 != null && var2.stackSize > this.func_198_d()) { + var2.stackSize = this.func_198_d(); + } + + this.func_183_c(); + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + NBTTagList var2 = var1.getTagList("Items"); + this.field_494_e = new ItemStack[this.func_83_a()]; + + 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.field_494_e.length) { + this.field_494_e[var5] = new ItemStack(var4); + } + } + + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + NBTTagList var2 = new NBTTagList(); + + for(int var3 = 0; var3 < this.field_494_e.length; ++var3) { + if(this.field_494_e[var3] != null) { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.field_494_e[var3].writeToNBT(var4); + var2.setTag(var4); + } + } + + var1.setTag("Items", var2); + } + + public int func_198_d() { + return 64; + } +} diff --git a/minecraft_server/src/net/minecraft/src/TileEntityFurnace.java b/minecraft_server/src/net/minecraft/src/TileEntityFurnace.java new file mode 100644 index 0000000..66fe1d7 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/TileEntityFurnace.java @@ -0,0 +1,143 @@ +package net.minecraft.src; + +public class TileEntityFurnace extends TileEntity implements IInventory { + private ItemStack[] field_489_e = new ItemStack[3]; + private int field_488_f = 0; + private int field_487_g = 0; + private int field_486_h = 0; + + public int func_83_a() { + return this.field_489_e.length; + } + + public ItemStack getStackInSlot(int var1) { + return this.field_489_e[var1]; + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + NBTTagList var2 = var1.getTagList("Items"); + this.field_489_e = new ItemStack[this.func_83_a()]; + + for(int var3 = 0; var3 < var2.tagCount(); ++var3) { + NBTTagCompound var4 = (NBTTagCompound)var2.tagAt(var3); + byte var5 = var4.getByte("Slot"); + if(var5 >= 0 && var5 < this.field_489_e.length) { + this.field_489_e[var5] = new ItemStack(var4); + } + } + + this.field_488_f = var1.getShort("BurnTime"); + this.field_486_h = var1.getShort("CookTime"); + this.field_487_g = this.func_194_a(this.field_489_e[1]); + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setShort("BurnTime", (short)this.field_488_f); + var1.setShort("CookTime", (short)this.field_486_h); + NBTTagList var2 = new NBTTagList(); + + for(int var3 = 0; var3 < this.field_489_e.length; ++var3) { + if(this.field_489_e[var3] != null) { + NBTTagCompound var4 = new NBTTagCompound(); + var4.setByte("Slot", (byte)var3); + this.field_489_e[var3].writeToNBT(var4); + var2.setTag(var4); + } + } + + var1.setTag("Items", var2); + } + + public int func_190_d() { + return 64; + } + + public boolean func_191_e() { + return this.field_488_f > 0; + } + + public void updateEntity() { + boolean var1 = this.field_488_f > 0; + boolean var2 = false; + if(this.field_488_f > 0) { + --this.field_488_f; + } + + if(!this.worldObj.multiplayerWorld) { + if(this.field_488_f == 0 && this.func_193_g()) { + this.field_487_g = this.field_488_f = this.func_194_a(this.field_489_e[1]); + if(this.field_488_f > 0) { + var2 = true; + if(this.field_489_e[1] != null) { + --this.field_489_e[1].stackSize; + if(this.field_489_e[1].stackSize == 0) { + this.field_489_e[1] = null; + } + } + } + } + + if(this.func_191_e() && this.func_193_g()) { + ++this.field_486_h; + if(this.field_486_h == 200) { + this.field_486_h = 0; + this.func_189_f(); + var2 = true; + } + } else { + this.field_486_h = 0; + } + + if(var1 != this.field_488_f > 0) { + var2 = true; + BlockFurnace.func_295_a(this.field_488_f > 0, this.worldObj, this.xCoord, this.yCoord, this.zCoord); + } + } + + if(var2) { + this.func_183_c(); + } + + } + + private boolean func_193_g() { + if(this.field_489_e[0] == null) { + return false; + } else { + int var1 = this.func_192_b(this.field_489_e[0].getItem().swiftedIndex); + return var1 < 0 ? false : (this.field_489_e[2] == null ? true : (this.field_489_e[2].itemID != var1 ? false : (this.field_489_e[2].stackSize < this.func_190_d() && this.field_489_e[2].stackSize < this.field_489_e[2].getMaxStackSize() ? true : this.field_489_e[2].stackSize < Item.itemsList[var1].getItemStackLimit()))); + } + } + + public void func_189_f() { + if(this.func_193_g()) { + int var1 = this.func_192_b(this.field_489_e[0].getItem().swiftedIndex); + if(this.field_489_e[2] == null) { + this.field_489_e[2] = new ItemStack(var1, 1); + } else if(this.field_489_e[2].itemID == var1) { + ++this.field_489_e[2].stackSize; + } + + --this.field_489_e[0].stackSize; + if(this.field_489_e[0].stackSize <= 0) { + this.field_489_e[0] = null; + } + + } + } + + private int func_192_b(int var1) { + return var1 == Block.oreIron.blockID ? Item.ingotIron.swiftedIndex : (var1 == Block.oreGold.blockID ? Item.ingotGold.swiftedIndex : (var1 == Block.oreDiamond.blockID ? Item.diamond.swiftedIndex : (var1 == Block.sand.blockID ? Block.glass.blockID : (var1 == Item.porkRaw.swiftedIndex ? Item.porkCooked.swiftedIndex : (var1 == Item.fishRaw.swiftedIndex ? Item.fishCooked.swiftedIndex : (var1 == Block.cobblestone.blockID ? Block.stone.blockID : (var1 == Item.clay.swiftedIndex ? Item.brick.swiftedIndex : -1))))))); + } + + private int func_194_a(ItemStack var1) { + if(var1 == null) { + return 0; + } else { + int var2 = var1.getItem().swiftedIndex; + return var2 < 256 && Block.blocksList[var2].blockMaterial == Material.wood ? 300 : (var2 == Item.stick.swiftedIndex ? 100 : (var2 == Item.coal.swiftedIndex ? 1600 : (var2 == Item.bucketLava.swiftedIndex ? 20000 : 0))); + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/TileEntityMobSpawner.java b/minecraft_server/src/net/minecraft/src/TileEntityMobSpawner.java new file mode 100644 index 0000000..86ab851 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/TileEntityMobSpawner.java @@ -0,0 +1,93 @@ +package net.minecraft.src; + +public class TileEntityMobSpawner extends TileEntity { + public int delay = -1; + public String entityID = "Pig"; + public double field_491_g; + public double field_490_h = 0.0D; + + public TileEntityMobSpawner() { + this.delay = 20; + } + + public boolean func_195_a() { + return this.worldObj.getClosestPlayer((double)this.xCoord + 0.5D, (double)this.yCoord + 0.5D, (double)this.zCoord + 0.5D, 16.0D) != null; + } + + public void updateEntity() { + this.field_490_h = this.field_491_g; + if(this.func_195_a()) { + 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.field_491_g += (double)(1000.0F / ((float)this.delay + 200.0F)); this.field_491_g > 360.0D; this.field_490_h -= 360.0D) { + this.field_491_g -= 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.func_567_a(this.entityID, 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)).expands(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.func_107_c(var11, var13, var15, this.worldObj.rand.nextFloat() * 360.0F, 0.0F); + if(var9.getCanSpawnHere()) { + this.worldObj.entityJoinedWorld(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.func_156_D(); + this.updateDelay(); + } + } + } + + super.updateEntity(); + } + } + } + + private void updateDelay() { + this.delay = 200 + this.worldObj.rand.nextInt(600); + } + + public void readFromNBT(NBTTagCompound var1) { + super.readFromNBT(var1); + this.entityID = var1.getString("EntityId"); + this.delay = var1.getShort("Delay"); + } + + public void writeToNBT(NBTTagCompound var1) { + super.writeToNBT(var1); + var1.setString("EntityId", this.entityID); + var1.setShort("Delay", (short)this.delay); + } +} diff --git a/minecraft_server/src/net/minecraft/src/TileEntitySign.java b/minecraft_server/src/net/minecraft/src/TileEntitySign.java new file mode 100644 index 0000000..a2c8421 --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/Vec3D.java b/minecraft_server/src/net/minecraft/src/Vec3D.java new file mode 100644 index 0000000..bbfcba8 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/Vec3D.java @@ -0,0 +1,127 @@ +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 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 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/minecraft_server/src/net/minecraft/src/World.java b/minecraft_server/src/net/minecraft/src/World.java new file mode 100644 index 0000000..246af30 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/World.java @@ -0,0 +1,1658 @@ +package net.minecraft.src; + +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Random; +import java.util.Set; +import java.util.TreeSet; + +public class World implements IBlockAccess { + public boolean field_4280_a = false; + private List field_821 = new ArrayList(); + public List field_815_a = new ArrayList(); + private List field_790_z = new ArrayList(); + private TreeSet scheduledTickTreeSet = new TreeSet(); + private Set scheduledTickSet = new HashSet(); + public List field_814_b = new ArrayList(); + public List playerEntities = new ArrayList(); + public long worldTime = 0L; + private long field_6159_E = 16777215L; + public int skylightSubtracted = 0; + protected int field_4279_g = (new Random()).nextInt(); + protected int field_4278_h = 1013904223; + public boolean field_808_h = false; + private long field_784_F = System.currentTimeMillis(); + protected int field_4277_j = 40; + public int monstersEnabled; + public Random rand = new Random(); + public int spawnX; + public int spawnY; + public int spawnZ; + public boolean field_9212_p = false; + public final WorldProvider field_4272_q; + protected List field_798_r = new ArrayList(); + private IChunkProvider chunkProvider; + public File field_9211_s; + public File field_797_s; + public long randomSeed = 0L; + private NBTTagCompound nbtCompoundPlayer; + public long sizeOnDisk = 0L; + public final String field_9210_w; + public boolean field_9209_x; + private ArrayList field_9207_I = new ArrayList(); + private int field_4265_J = 0; + static int field_4268_y = 0; + private Set field_4264_K = new HashSet(); + private int field_4263_L = this.rand.nextInt(12000); + private List field_778_L = new ArrayList(); + public boolean multiplayerWorld = false; + + public WorldChunkManager func_4077_a() { + return this.field_4272_q.field_4301_b; + } + + public World(File var1, String var2, long var3, WorldProvider var5) { + this.field_9211_s = var1; + this.field_9210_w = var2; + var1.mkdirs(); + this.field_797_s = new File(var1, var2); + this.field_797_s.mkdirs(); + + try { + File var6 = new File(this.field_797_s, "session.lock"); + DataOutputStream var7 = new DataOutputStream(new FileOutputStream(var6)); + + try { + var7.writeLong(this.field_784_F); + } finally { + var7.close(); + } + } catch (IOException var16) { + var16.printStackTrace(); + throw new RuntimeException("Failed to check session lock, aborting"); + } + + Object var17 = new WorldProvider(); + File var18 = new File(this.field_797_s, "level.dat"); + this.field_9212_p = !var18.exists(); + if(var18.exists()) { + try { + NBTTagCompound var8 = CompressedStreamTools.func_770_a(new FileInputStream(var18)); + NBTTagCompound var9 = var8.getCompoundTag("Data"); + this.randomSeed = var9.getLong("RandomSeed"); + this.spawnX = var9.getInteger("SpawnX"); + this.spawnY = var9.getInteger("SpawnY"); + this.spawnZ = var9.getInteger("SpawnZ"); + this.worldTime = var9.getLong("Time"); + this.sizeOnDisk = var9.getLong("SizeOnDisk"); + if(var9.hasKey("Player")) { + this.nbtCompoundPlayer = var9.getCompoundTag("Player"); + int var10 = this.nbtCompoundPlayer.getInteger("Dimension"); + if(var10 == -1) { + var17 = new WorldProviderHell(); + } + } + } catch (Exception var14) { + var14.printStackTrace(); + } + } + + if(var5 != null) { + var17 = var5; + } + + boolean var19 = false; + if(this.randomSeed == 0L) { + this.randomSeed = var3; + var19 = true; + } + + this.field_4272_q = (WorldProvider)var17; + this.field_4272_q.func_4093_a(this); + this.chunkProvider = this.func_4076_a(this.field_797_s); + if(var19) { + this.field_9209_x = true; + this.spawnX = 0; + this.spawnY = 64; + + for(this.spawnZ = 0; !this.field_4272_q.canCoordinateBeSpawn(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.field_9209_x = false; + } + + this.calculateInitialSkylight(); + } + + protected IChunkProvider func_4076_a(File var1) { + return new ChunkProviderLoadOrGenerate(this, this.field_4272_q.getChunkLoader(var1), this.field_4272_q.getChunkProvider()); + } + + public int func_528_f(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 func_485_a(boolean var1, IProgressUpdate var2) { + if(this.chunkProvider.func_364_b()) { + if(var2 != null) { + var2.func_438_a("Saving level"); + } + + this.func_478_h(); + if(var2 != null) { + var2.func_439_b("Saving chunks"); + } + + this.chunkProvider.saveWorld(var1, var2); + } + } + + private void func_478_h() { + this.func_476_g(); + 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.sizeOnDisk); + var1.setLong("LastPlayed", System.currentTimeMillis()); + EntityPlayer var2 = null; + if(this.playerEntities.size() > 0) { + var2 = (EntityPlayer)this.playerEntities.get(0); + } + + NBTTagCompound var3; + if(var2 != null) { + var3 = new NBTTagCompound(); + var2.writeToNBT(var3); + var1.setCompoundTag("Player", var3); + } + + var3 = new NBTTagCompound(); + var3.setTag("Data", var1); + + try { + File var4 = new File(this.field_797_s, "level.dat_new"); + File var5 = new File(this.field_797_s, "level.dat_old"); + File var6 = new File(this.field_797_s, "level.dat"); + CompressedStreamTools.func_769_a(var3, new FileOutputStream(var4)); + if(var5.exists()) { + var5.delete(); + } + + var6.renameTo(var5); + if(var6.exists()) { + var6.delete(); + } + + var4.renameTo(var6); + if(var4.exists()) { + var4.delete(); + } + } catch (Exception var7) { + var7.printStackTrace(); + } + + } + + public 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 func_530_e(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.func_363_b(var1, var2); + } + + public boolean func_470_a(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) { + if(this.setBlockMetadata(var1, var2, var3, var4)) { + this.notifyBlockChange(var1, var2, var3, this.getBlockId(var1, var2, var3)); + } + + } + + 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.notifyBlockChange(var1, var2, var3, var4); + return true; + } else { + return false; + } + } + + public boolean func_507_b(int var1, int var2, int var3, int var4, int var5) { + if(this.func_470_a(var1, var2, var3, var4, var5)) { + this.notifyBlockChange(var1, var2, var3, var4); + return true; + } else { + return false; + } + } + + public void func_521_f(int var1, int var2, int var3) { + for(int var4 = 0; var4 < this.field_798_r.size(); ++var4) { + ((IWorldAccess)this.field_798_r.get(var4)).func_683_a(var1, var2, var3); + } + + } + + protected void notifyBlockChange(int var1, int var2, int var3, int var4) { + this.func_521_f(var1, var2, var3); + this.notifyBlocksOfNeighborChange(var1, var2, var3, var4); + } + + public void func_498_f(int var1, int var2, int var3, int var4) { + if(var3 > var4) { + int var5 = var4; + var4 = var3; + var3 = var5; + } + + this.func_519_b(var1, var3, var2, var1, var4, var2); + } + + public void func_519_b(int var1, int var2, int var3, int var4, int var5, int var6) { + for(int var7 = 0; var7 < this.field_798_r.size(); ++var7) { + ((IWorldAccess)this.field_798_r.get(var7)).func_685_a(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.field_808_h && !this.multiplayerWorld) { + 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(var1, var2, var3, true); + } + + public int getBlockLightValue(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(var1, var2 + 1, var3, false); + int var7 = this.getBlockLightValue(var1 + 1, var2, var3, false); + int var8 = this.getBlockLightValue(var1 - 1, var2, var3, false); + int var9 = this.getBlockLightValue(var1, var2, var3 + 1, false); + int var10 = this.getBlockLightValue(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.field_4272_q.field_4306_c || var1 != EnumSkyBlock.Sky) { + if(this.func_530_e(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.func_483_a(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.field_984_c; + } + } + + 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.field_798_r.size(); ++var7) { + ((IWorldAccess)this.field_798_r.get(var7)).func_683_a(var2, var3, var4); + } + + } + } + } + } + } + + public float getLightBrightness(int var1, int var2, int var3) { + return this.field_4272_q.lightBrightnessTable[this.getBlockLightValue(var1, var2, var3)]; + } + + public boolean isDaytime() { + return this.skylightSubtracted < 4; + } + + public MovingObjectPosition func_486_a(Vec3D var1, Vec3D var2) { + return this.func_505_a(var1, var2, false); + } + + public MovingObjectPosition func_505_a(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 = 200; + + 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]; + if(var31 > 0 && var33.canCollideCheck(var32, var3)) { + MovingObjectPosition var34 = var33.collisionRayTrace(this, var7, var8, 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.field_798_r.size(); ++var5) { + ((IWorldAccess)this.field_798_r.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) { + for(int var10 = 0; var10 < this.field_798_r.size(); ++var10) { + ((IWorldAccess)this.field_798_r.get(var10)).playSound(var7, var1, var3, var5, var8, var9); + } + + } + + public void playRecord(String var1, int var2, int var3, int var4) { + for(int var5 = 0; var5 < this.field_798_r.size(); ++var5) { + ((IWorldAccess)this.field_798_r.get(var5)).playRecord(var1, var2, var3, var4); + } + + } + + public void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12) { + for(int var14 = 0; var14 < this.field_798_r.size(); ++var14) { + ((IWorldAccess)this.field_798_r.get(var14)).spawnParticle(var1, var2, var4, var6, var8, var10, var12); + } + + } + + public boolean entityJoinedWorld(Entity var1) { + int var2 = MathHelper.floor_double(var1.posX / 16.0D); + int var3 = MathHelper.floor_double(var1.posZ / 16.0D); + boolean var4 = false; + if(var1 instanceof EntityPlayer) { + var4 = true; + } + + if(!var4 && !this.chunkExists(var2, var3)) { + return false; + } else { + if(var1 instanceof EntityPlayer) { + this.playerEntities.add((EntityPlayer)var1); + System.out.println("Player count: " + this.playerEntities.size()); + } + + this.getChunkFromChunkCoords(var2, var3).addEntity(var1); + this.field_815_a.add(var1); + this.func_479_b(var1); + return true; + } + } + + protected void func_479_b(Entity var1) { + for(int var2 = 0; var2 < this.field_798_r.size(); ++var2) { + ((IWorldAccess)this.field_798_r.get(var2)).func_681_a(var1); + } + + } + + protected void func_531_c(Entity var1) { + for(int var2 = 0; var2 < this.field_798_r.size(); ++var2) { + ((IWorldAccess)this.field_798_r.get(var2)).func_688_b(var1); + } + + } + + public void func_12016_d(Entity var1) { + var1.setEntityDead(); + if(var1 instanceof EntityPlayer) { + this.playerEntities.remove((EntityPlayer)var1); + } + + } + + public void func_12014_e(Entity var1) { + var1.setEntityDead(); + if(var1 instanceof EntityPlayer) { + this.playerEntities.remove((EntityPlayer)var1); + } + + int var2 = var1.field_307_aa; + int var3 = var1.field_303_ac; + if(var1.field_276_Z && this.chunkExists(var2, var3)) { + this.getChunkFromChunkCoords(var2, var3).func_350_b(var1); + } + + this.field_815_a.remove(var1); + this.func_531_c(var1); + } + + public void func_4072_a(IWorldAccess var1) { + this.field_798_r.add(var1); + } + + public List getCollidingBoundingBoxes(Entity var1, AxisAlignedBB var2) { + this.field_9207_I.clear(); + int var3 = MathHelper.floor_double(var2.minX); + int var4 = MathHelper.floor_double(var2.maxX + 1.0D); + int var5 = MathHelper.floor_double(var2.minY); + int var6 = MathHelper.floor_double(var2.maxY + 1.0D); + int var7 = MathHelper.floor_double(var2.minZ); + int var8 = MathHelper.floor_double(var2.maxZ + 1.0D); + + for(int var9 = var3; var9 < var4; ++var9) { + for(int var10 = var7; var10 < var8; ++var10) { + if(this.func_530_e(var9, 64, var10)) { + for(int var11 = var5 - 1; var11 < var6; ++var11) { + Block var12 = Block.blocksList[this.getBlockId(var9, var11, var10)]; + if(var12 != null) { + var12.getCollidingBoundingBoxes(this, var9, var11, var10, var2, this.field_9207_I); + } + } + } + } + } + + double var14 = 0.25D; + List var15 = this.getEntitiesWithinAABBExcludingEntity(var1, var2.expands(var14, var14, var14)); + + for(int var16 = 0; var16 < var15.size(); ++var16) { + AxisAlignedBB var13 = ((Entity)var15.get(var16)).func_93_n(); + if(var13 != null && var13.intersectsWith(var2)) { + this.field_9207_I.add(var13); + } + + var13 = var1.func_89_d((Entity)var15.get(var16)); + if(var13 != null && var13.intersectsWith(var2)) { + this.field_9207_I.add(var13); + } + } + + return this.field_9207_I; + } + + public int calculateSkylightSubtracted(float var1) { + float var2 = this.func_477_b(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 float func_477_b(float var1) { + return this.field_4272_q.func_4089_a(this.worldTime, var1); + } + + public int func_4075_e(int var1, int var2) { + Chunk var3 = this.getChunkFromBlockCoords(var1, var2); + + int var4; + for(var4 = 127; this.getBlockMaterial(var1, var4, var2).func_218_c() && var4 > 0; --var4) { + } + + var1 &= 15; + + for(var2 &= 15; var4 > 0; --var4) { + int var5 = var3.getBlockID(var1, var4, var2); + if(var5 != 0 && (Block.blocksList[var5].blockMaterial.func_218_c() || Block.blocksList[var5].blockMaterial.getIsLiquid())) { + return var4 + 1; + } + } + + return -1; + } + + public void scheduleBlockUpdate(int var1, int var2, int var3, int var4) { + NextTickListEntry var5 = new NextTickListEntry(var1, var2, var3, var4); + byte var6 = 8; + if(this.field_4280_a) { + if(this.checkChunksExist(var5.xCoord - var6, var5.yCoord - var6, var5.zCoord - var6, var5.xCoord + var6, var5.yCoord + var6, var5.zCoord + var6)) { + int var7 = this.getBlockId(var5.xCoord, var5.yCoord, var5.zCoord); + if(var7 == var5.blockID && var7 > 0) { + Block.blocksList[var7].updateTick(this, var5.xCoord, var5.yCoord, var5.zCoord, this.rand); + } + } + + } else { + 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 func_459_b() { + this.field_815_a.removeAll(this.field_790_z); + + int var1; + Entity var2; + int var3; + int var4; + for(var1 = 0; var1 < this.field_790_z.size(); ++var1) { + var2 = (Entity)this.field_790_z.get(var1); + var3 = var2.field_307_aa; + var4 = var2.field_303_ac; + if(var2.field_276_Z && this.chunkExists(var3, var4)) { + this.getChunkFromChunkCoords(var3, var4).func_350_b(var2); + } + } + + for(var1 = 0; var1 < this.field_790_z.size(); ++var1) { + this.func_531_c((Entity)this.field_790_z.get(var1)); + } + + this.field_790_z.clear(); + + for(var1 = 0; var1 < this.field_815_a.size(); ++var1) { + var2 = (Entity)this.field_815_a.get(var1); + if(var2.field_327_g != null) { + if(!var2.field_327_g.field_304_B && var2.field_327_g.field_328_f == var2) { + continue; + } + + var2.field_327_g.field_328_f = null; + var2.field_327_g = null; + } + + if(!var2.field_304_B) { + this.func_520_e(var2); + } + + if(var2.field_304_B) { + var3 = var2.field_307_aa; + var4 = var2.field_303_ac; + if(var2.field_276_Z && this.chunkExists(var3, var4)) { + this.getChunkFromChunkCoords(var3, var4).func_350_b(var2); + } + + this.field_815_a.remove(var1--); + this.func_531_c(var2); + } + } + + for(var1 = 0; var1 < this.field_814_b.size(); ++var1) { + TileEntity var5 = (TileEntity)this.field_814_b.get(var1); + var5.updateEntity(); + } + + } + + public void func_520_e(Entity var1) { + this.func_4074_a(var1, true); + } + + public void func_4074_a(Entity var1, boolean var2) { + int var3 = MathHelper.floor_double(var1.posX); + int var4 = MathHelper.floor_double(var1.posZ); + byte var5 = 16; + if(var2 || this.checkChunksExist(var3 - var5, 0, var4 - var5, var3 + var5, 128, var4 + var5)) { + var1.field_9071_O = var1.posX; + var1.field_9070_P = var1.posY; + var1.field_9069_Q = var1.posZ; + var1.prevRotationYaw = var1.rotationYaw; + var1.prevRotationPitch = var1.rotationPitch; + if(var2 && var1.field_276_Z) { + if(var1.field_327_g != null) { + var1.func_115_v(); + } else { + var1.onUpdate(); + } + } + + if(Double.isNaN(var1.posX) || Double.isInfinite(var1.posX)) { + var1.posX = var1.field_9071_O; + } + + if(Double.isNaN(var1.posY) || Double.isInfinite(var1.posY)) { + var1.posY = var1.field_9070_P; + } + + if(Double.isNaN(var1.posZ) || Double.isInfinite(var1.posZ)) { + var1.posZ = var1.field_9069_Q; + } + + if(Double.isNaN((double)var1.rotationPitch) || Double.isInfinite((double)var1.rotationPitch)) { + var1.rotationPitch = var1.prevRotationPitch; + } + + if(Double.isNaN((double)var1.rotationYaw) || Double.isInfinite((double)var1.rotationYaw)) { + var1.rotationYaw = var1.prevRotationYaw; + } + + int var6 = MathHelper.floor_double(var1.posX / 16.0D); + int var7 = MathHelper.floor_double(var1.posY / 16.0D); + int var8 = MathHelper.floor_double(var1.posZ / 16.0D); + if(!var1.field_276_Z || var1.field_307_aa != var6 || var1.field_305_ab != var7 || var1.field_303_ac != var8) { + if(var1.field_276_Z && this.chunkExists(var1.field_307_aa, var1.field_303_ac)) { + this.getChunkFromChunkCoords(var1.field_307_aa, var1.field_303_ac).func_332_a(var1, var1.field_305_ab); + } + + if(this.chunkExists(var6, var8)) { + var1.field_276_Z = true; + this.getChunkFromChunkCoords(var6, var8).addEntity(var1); + } else { + var1.field_276_Z = false; + } + } + + if(var2 && var1.field_276_Z && var1.field_328_f != null) { + if(!var1.field_328_f.field_304_B && var1.field_328_f.field_327_g == var1) { + this.func_520_e(var1.field_328_f); + } else { + var1.field_328_f.field_327_g = null; + var1.field_328_f = null; + } + } + + } + } + + public boolean func_522_a(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.field_304_B && var4.field_329_e) { + 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 func_523_c(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.lavaStill.blockID || var11 == Block.lavaMoving.blockID) { + return true; + } + } + } + } + + return false; + } + + public boolean func_490_a(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) - BlockFluids.setFluidHeight(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 boolean func_524_b(AxisAlignedBB var1, Material var2) { + int var3 = MathHelper.floor_double(var1.minX); + int var4 = MathHelper.floor_double(var1.maxX + 1.0D); + int var5 = MathHelper.floor_double(var1.minY); + int var6 = MathHelper.floor_double(var1.maxY + 1.0D); + int var7 = MathHelper.floor_double(var1.minZ); + int var8 = MathHelper.floor_double(var1.maxZ + 1.0D); + + for(int var9 = var3; var9 < var4; ++var9) { + for(int var10 = var5; var10 < var6; ++var10) { + for(int var11 = var7; var11 < var8; ++var11) { + Block var12 = Block.blocksList[this.getBlockId(var9, var10, var11)]; + if(var12 != null && var12.blockMaterial == var2) { + int var13 = this.getBlockMetadata(var9, var10, var11); + double var14 = (double)(var10 + 1); + if(var13 < 8) { + var14 = (double)(var10 + 1) - (double)var13 / 8.0D; + } + + if(var14 >= var1.minY) { + return true; + } + } + } + } + } + + return false; + } + + public Explosion func_12013_a(Entity var1, double var2, double var4, double var6, float var8) { + return this.func_12015_a(var1, var2, var4, var6, var8, false); + } + + public Explosion func_12015_a(Entity var1, double var2, double var4, double var6, float var8, boolean var9) { + Explosion var10 = new Explosion(this, var1, var2, var4, var6, var8); + var10.field_12031_a = var9; + var10.func_12023_a(); + var10.func_732_a(); + return var10; + } + + public float func_494_a(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.func_486_a(Vec3D.createVector(var14, var16, var18), var1) == null) { + ++var9; + } + + ++var10; + } + } + } + + return (float)var9 / (float)var10; + } + + public TileEntity getBlock(int var1, int var2, int var3) { + Chunk var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + return var4 != null ? var4.func_338_d(var1 & 15, var2, var3 & 15) : null; + } + + public void func_473_a(int var1, int var2, int var3, TileEntity var4) { + Chunk var5 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + if(var5 != null) { + var5.func_352_a(var1 & 15, var2, var3 & 15, var4); + } + + } + + public void func_513_l(int var1, int var2, int var3) { + Chunk var4 = this.getChunkFromChunkCoords(var1 >> 4, var3 >> 4); + if(var4 != null) { + var4.func_359_e(var1 & 15, var2, var3 & 15); + } + + } + + public boolean doesBlockAllowAttachment(int var1, int var2, int var3) { + Block var4 = Block.blocksList[this.getBlockId(var1, var2, var3)]; + return var4 == null ? false : var4.allowsAttachment(); + } + + public boolean func_6156_d() { + if(this.field_4265_J >= 50) { + return false; + } else { + ++this.field_4265_J; + + try { + int var1 = 5000; + + boolean var2; + while(this.field_821.size() > 0) { + --var1; + if(var1 <= 0) { + var2 = true; + return var2; + } + + ((MetadataChunkBlock)this.field_821.remove(this.field_821.size() - 1)).func_4107_a(this); + } + + var2 = false; + return var2; + } finally { + --this.field_4265_J; + } + } + } + + public void func_483_a(EnumSkyBlock var1, int var2, int var3, int var4, int var5, int var6, int var7) { + this.func_484_a(var1, var2, var3, var4, var5, var6, var7, true); + } + + public void func_484_a(EnumSkyBlock var1, int var2, int var3, int var4, int var5, int var6, int var7, boolean var8) { + if(!this.field_4272_q.field_4306_c || var1 != EnumSkyBlock.Sky) { + ++field_4268_y; + if(field_4268_y == 50) { + --field_4268_y; + } else { + int var9 = (var5 + var2) / 2; + int var10 = (var7 + var4) / 2; + if(!this.func_530_e(var9, 64, var10)) { + --field_4268_y; + } else { + int var11 = this.field_821.size(); + if(var8) { + int var12 = 4; + if(var12 > var11) { + var12 = var11; + } + + for(int var13 = 0; var13 < var12; ++var13) { + MetadataChunkBlock var14 = (MetadataChunkBlock)this.field_821.get(this.field_821.size() - var13 - 1); + if(var14.field_957_a == var1 && var14.func_692_a(var2, var3, var4, var5, var6, var7)) { + --field_4268_y; + return; + } + } + } + + this.field_821.add(new MetadataChunkBlock(var1, var2, var3, var4, var5, var6, var7)); + if(this.field_821.size() > 100000) { + this.field_821.clear(); + } + + --field_4268_y; + } + } + } + } + + public void calculateInitialSkylight() { + int var1 = this.calculateSkylightSubtracted(1.0F); + if(var1 != this.skylightSubtracted) { + this.skylightSubtracted = var1; + } + + } + + public void tick() { + SpawnerAnimals.func_4111_a(this); + this.chunkProvider.func_361_a(); + int var1 = this.calculateSkylightSubtracted(1.0F); + if(var1 != this.skylightSubtracted) { + this.skylightSubtracted = var1; + + for(int var2 = 0; var2 < this.field_798_r.size(); ++var2) { + ((IWorldAccess)this.field_798_r.get(var2)).func_684_a(); + } + } + + ++this.worldTime; + if(this.worldTime % (long)this.field_4277_j == 0L) { + this.func_485_a(false, (IProgressUpdate)null); + } + + this.TickUpdates(false); + this.func_4073_g(); + } + + protected void func_4073_g() { + this.field_4264_K.clear(); + + int var3; + int var4; + int var6; + int var7; + for(int var1 = 0; var1 < this.playerEntities.size(); ++var1) { + EntityPlayer var2 = (EntityPlayer)this.playerEntities.get(var1); + var3 = MathHelper.floor_double(var2.posX / 16.0D); + var4 = MathHelper.floor_double(var2.posZ / 16.0D); + byte var5 = 9; + + for(var6 = -var5; var6 <= var5; ++var6) { + for(var7 = -var5; var7 <= var5; ++var7) { + this.field_4264_K.add(new ChunkCoordIntPair(var6 + var3, var7 + var4)); + } + } + } + + if(this.field_4263_L > 0) { + --this.field_4263_L; + } + + Iterator var12 = this.field_4264_K.iterator(); + + while(var12.hasNext()) { + ChunkCoordIntPair var13 = (ChunkCoordIntPair)var12.next(); + var3 = var13.field_152_a * 16; + var4 = var13.field_151_b * 16; + Chunk var14 = this.getChunkFromChunkCoords(var13.field_152_a, var13.field_151_b); + int var8; + int var9; + int var10; + if(this.field_4263_L == 0) { + this.field_4279_g = this.field_4279_g * 3 + this.field_4278_h; + var6 = this.field_4279_g >> 2; + var7 = var6 & 15; + var8 = var6 >> 8 & 15; + var9 = var6 >> 16 & 127; + var10 = var14.getBlockID(var7, var9, var8); + var7 += var3; + var8 += var4; + if(var10 == 0 && this.getBlockLightValue(var7, var9, var8) <= this.rand.nextInt(8) && this.getSavedLightValue(EnumSkyBlock.Sky, var7, var9, var8) <= 0) { + EntityPlayer var11 = this.getClosestPlayer((double)var7 + 0.5D, (double)var9 + 0.5D, (double)var8 + 0.5D, 8.0D); + if(var11 != null && var11.getDistanceSq((double)var7 + 0.5D, (double)var9 + 0.5D, (double)var8 + 0.5D) > 4.0D) { + this.playSoundEffect((double)var7 + 0.5D, (double)var9 + 0.5D, (double)var8 + 0.5D, "ambient.cave.cave", 0.7F, 0.8F + this.rand.nextFloat() * 0.2F); + this.field_4263_L = this.rand.nextInt(12000) + 6000; + } + } + } + + for(var6 = 0; var6 < 80; ++var6) { + this.field_4279_g = this.field_4279_g * 3 + this.field_4278_h; + var7 = this.field_4279_g >> 2; + var8 = var7 & 15; + var9 = var7 >> 8 & 15; + var10 = var7 >> 16 & 127; + byte var15 = var14.blocks[var8 << 11 | var9 << 7 | var10]; + if(Block.tickOnLoad[var15]) { + Block.blocksList[var15].updateTick(this, var8 + var3, var10, var9 + var4, 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 > 1000) { + var2 = 1000; + } + + 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 List getEntitiesWithinAABBExcludingEntity(Entity var1, AxisAlignedBB var2) { + this.field_778_L.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.field_778_L); + } + } + } + + return this.field_778_L; + } + + 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 void func_515_b(int var1, int var2, int var3, TileEntity var4) { + if(this.func_530_e(var1, var2, var3)) { + this.getChunkFromBlockCoords(var1, var3).func_336_e(); + } + + for(int var5 = 0; var5 < this.field_798_r.size(); ++var5) { + ((IWorldAccess)this.field_798_r.get(var5)).func_686_a(var1, var2, var3, var4); + } + + } + + public int countEntities(Class var1) { + int var2 = 0; + + for(int var3 = 0; var3 < this.field_815_a.size(); ++var3) { + Entity var4 = (Entity)this.field_815_a.get(var3); + if(var1.isAssignableFrom(var4.getClass())) { + ++var2; + } + } + + return var2; + } + + public void func_464_a(List var1) { + this.field_815_a.addAll(var1); + + for(int var2 = 0; var2 < var1.size(); ++var2) { + this.func_479_b((Entity)var1.get(var2)); + } + + } + + public void func_461_b(List var1) { + this.field_790_z.addAll(var1); + } + + public boolean func_516_a(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 var9 != null && !this.func_522_a(var9) ? false : (var7 != Block.waterStill && var7 != Block.waterMoving && var7 != Block.lavaStill && var7 != Block.lavaMoving && var7 != Block.fire && var7 != Block.snow ? var1 > 0 && var7 == null && var8.canPlaceBlockAt(this, var2, var3, var4) : true); + } + + public PathEntity func_482_a(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 + 16.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 func_501_a(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 + 8.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); + } + + public boolean isBlockProvidingPowerTo(int var1, int var2, int var3, int var4) { + int var5 = this.getBlockId(var1, var2, var3); + return var5 == 0 ? false : Block.blocksList[var5].isIndirectlyPoweringTo(this, var1, var2, var3, var4); + } + + public boolean isBlockGettingPowered(int var1, int var2, int var3) { + return this.isBlockProvidingPowerTo(var1, var2 - 1, var3, 0) ? true : (this.isBlockProvidingPowerTo(var1, var2 + 1, var3, 1) ? true : (this.isBlockProvidingPowerTo(var1, var2, var3 - 1, 2) ? true : (this.isBlockProvidingPowerTo(var1, var2, var3 + 1, 3) ? true : (this.isBlockProvidingPowerTo(var1 - 1, var2, var3, 4) ? true : this.isBlockProvidingPowerTo(var1 + 1, var2, var3, 5))))); + } + + public boolean isBlockIndirectlyProvidingPowerTo(int var1, int var2, int var3, int var4) { + if(this.doesBlockAllowAttachment(var1, var2, var3)) { + return this.isBlockGettingPowered(var1, var2, var3); + } else { + int var5 = this.getBlockId(var1, var2, var3); + return var5 == 0 ? false : Block.blocksList[var5].isPoweringTo(this, var1, var2, var3, var4); + } + } + + public boolean isBlockIndirectlyGettingPowered(int var1, int var2, int var3) { + return this.isBlockIndirectlyProvidingPowerTo(var1, var2 - 1, var3, 0) ? true : (this.isBlockIndirectlyProvidingPowerTo(var1, var2 + 1, var3, 1) ? true : (this.isBlockIndirectlyProvidingPowerTo(var1, var2, var3 - 1, 2) ? true : (this.isBlockIndirectlyProvidingPowerTo(var1, var2, var3 + 1, 3) ? true : (this.isBlockIndirectlyProvidingPowerTo(var1 - 1, var2, var3, 4) ? true : this.isBlockIndirectlyProvidingPowerTo(var1 + 1, var2, var3, 5))))); + } + + public EntityPlayer getClosestPlayerToEntity(Entity var1, double var2) { + return this.getClosestPlayer(var1.posX, var1.posY, var1.posZ, var2); + } + + public EntityPlayer getClosestPlayer(double var1, double var3, double var5, double var7) { + double var9 = -1.0D; + EntityPlayer var11 = null; + + for(int var12 = 0; var12 < this.playerEntities.size(); ++var12) { + EntityPlayer var13 = (EntityPlayer)this.playerEntities.get(var12); + double var14 = var13.getDistanceSq(var1, var3, var5); + if((var7 < 0.0D || var14 < var7 * var7) && (var9 == -1.0D || var14 < var9)) { + var9 = var14; + var11 = var13; + } + } + + return var11; + } + + public byte[] func_504_c(int var1, int var2, int var3, int var4, int var5, int var6) { + byte[] var7 = new byte[var4 * var5 * var6 * 5 / 2]; + int var8 = var1 >> 4; + int var9 = var3 >> 4; + int var10 = var1 + var4 - 1 >> 4; + int var11 = var3 + var6 - 1 >> 4; + int var12 = 0; + int var13 = var2; + int var14 = var2 + var5; + if(var2 < 0) { + var13 = 0; + } + + if(var14 > 128) { + var14 = 128; + } + + for(int var15 = var8; var15 <= var10; ++var15) { + int var16 = var1 - var15 * 16; + int var17 = var1 + var4 - var15 * 16; + if(var16 < 0) { + var16 = 0; + } + + if(var17 > 16) { + var17 = 16; + } + + for(int var18 = var9; var18 <= var11; ++var18) { + int var19 = var3 - var18 * 16; + int var20 = var3 + var6 - var18 * 16; + if(var19 < 0) { + var19 = 0; + } + + if(var20 > 16) { + var20 = 16; + } + + var12 = this.getChunkFromChunkCoords(var15, var18).func_340_a(var7, var16, var13, var19, var17, var14, var20, var12); + } + } + + return var7; + } + + public void func_476_g() { + try { + File var1 = new File(this.field_797_s, "session.lock"); + DataInputStream var2 = new DataInputStream(new FileInputStream(var1)); + + try { + if(var2.readLong() != this.field_784_F) { + throw new MinecraftException("The save is being accessed from another location, aborting"); + } + } finally { + var2.close(); + } + + } catch (IOException var7) { + throw new MinecraftException("Failed to check session lock, aborting"); + } + } + + public boolean func_6157_a(EntityPlayer var1, int var2, int var3, int var4) { + return true; + } + + public void func_9206_a(Entity var1, byte var2) { + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldChunkManager.java b/minecraft_server/src/net/minecraft/src/WorldChunkManager.java new file mode 100644 index 0000000..33703f4 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldChunkManager.java @@ -0,0 +1,112 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldChunkManager { + private NoiseGeneratorOctaves2 field_4255_e; + private NoiseGeneratorOctaves2 field_4254_f; + private NoiseGeneratorOctaves2 field_4253_g; + public double[] temperature; + public double[] humidity; + public double[] field_4257_c; + public MobSpawnerBase[] field_4256_d; + + protected WorldChunkManager() { + } + + public WorldChunkManager(World var1) { + this.field_4255_e = new NoiseGeneratorOctaves2(new Random(var1.randomSeed * 9871L), 4); + this.field_4254_f = new NoiseGeneratorOctaves2(new Random(var1.randomSeed * 39811L), 4); + this.field_4253_g = new NoiseGeneratorOctaves2(new Random(var1.randomSeed * 543321L), 2); + } + + public MobSpawnerBase func_4066_a(ChunkCoordIntPair var1) { + return this.func_4067_a(var1.field_152_a, var1.field_151_b); + } + + public MobSpawnerBase func_4067_a(int var1, int var2) { + return this.func_4065_a(var1, var2, 1, 1)[0]; + } + + public MobSpawnerBase[] func_4065_a(int var1, int var2, int var3, int var4) { + this.field_4256_d = this.loadBlockGeneratorData(this.field_4256_d, var1, var2, var3, var4); + return this.field_4256_d; + } + + public double[] getTemperatures(double[] var1, int var2, int var3, int var4, int var5) { + if(var1 == null || var1.length < var4 * var5) { + var1 = new double[var4 * var5]; + } + + var1 = this.field_4255_e.func_4101_a(var1, (double)var2, (double)var3, var4, var4, (double)0.025F, (double)0.025F, 0.25D); + this.field_4257_c = this.field_4253_g.func_4101_a(this.field_4257_c, (double)var2, (double)var3, var4, var4, 0.25D, 0.25D, 0.5882352941176471D); + int var6 = 0; + + for(int var7 = 0; var7 < var4; ++var7) { + for(int var8 = 0; var8 < var5; ++var8) { + double var9 = this.field_4257_c[var6] * 1.1D + 0.5D; + double var11 = 0.01D; + double var13 = 1.0D - var11; + double var15 = (var1[var6] * 0.15D + 0.7D) * var13 + var9 * var11; + var15 = 1.0D - (1.0D - var15) * (1.0D - var15); + if(var15 < 0.0D) { + var15 = 0.0D; + } + + if(var15 > 1.0D) { + var15 = 1.0D; + } + + var1[var6] = var15; + ++var6; + } + } + + return var1; + } + + public MobSpawnerBase[] loadBlockGeneratorData(MobSpawnerBase[] var1, int var2, int var3, int var4, int var5) { + if(var1 == null || var1.length < var4 * var5) { + var1 = new MobSpawnerBase[var4 * var5]; + } + + this.temperature = this.field_4255_e.func_4101_a(this.temperature, (double)var2, (double)var3, var4, var4, (double)0.025F, (double)0.025F, 0.25D); + this.humidity = this.field_4254_f.func_4101_a(this.humidity, (double)var2, (double)var3, var4, var4, (double)0.05F, (double)0.05F, 1.0D / 3.0D); + this.field_4257_c = this.field_4253_g.func_4101_a(this.field_4257_c, (double)var2, (double)var3, var4, var4, 0.25D, 0.25D, 0.5882352941176471D); + int var6 = 0; + + for(int var7 = 0; var7 < var4; ++var7) { + for(int var8 = 0; var8 < var5; ++var8) { + double var9 = this.field_4257_c[var6] * 1.1D + 0.5D; + double var11 = 0.01D; + double var13 = 1.0D - var11; + double var15 = (this.temperature[var6] * 0.15D + 0.7D) * var13 + var9 * var11; + var11 = 0.002D; + var13 = 1.0D - var11; + double var17 = (this.humidity[var6] * 0.15D + 0.5D) * var13 + var9 * var11; + var15 = 1.0D - (1.0D - var15) * (1.0D - var15); + if(var15 < 0.0D) { + var15 = 0.0D; + } + + if(var17 < 0.0D) { + var17 = 0.0D; + } + + if(var15 > 1.0D) { + var15 = 1.0D; + } + + if(var17 > 1.0D) { + var17 = 1.0D; + } + + this.temperature[var6] = var15; + this.humidity[var6] = var17; + var1[var6++] = MobSpawnerBase.getBiomeFromLookup(var15, var17); + } + } + + return var1; + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldChunkManagerHell.java b/minecraft_server/src/net/minecraft/src/WorldChunkManagerHell.java new file mode 100644 index 0000000..55eb19d --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldChunkManagerHell.java @@ -0,0 +1,50 @@ +package net.minecraft.src; + +import java.util.Arrays; + +public class WorldChunkManagerHell extends WorldChunkManager { + private MobSpawnerBase field_4262_e; + private double field_4261_f; + private double field_4260_g; + + public WorldChunkManagerHell(MobSpawnerBase var1, double var2, double var4) { + this.field_4262_e = var1; + this.field_4261_f = var2; + this.field_4260_g = var4; + } + + public MobSpawnerBase func_4066_a(ChunkCoordIntPair var1) { + return this.field_4262_e; + } + + public MobSpawnerBase func_4067_a(int var1, int var2) { + return this.field_4262_e; + } + + public MobSpawnerBase[] func_4065_a(int var1, int var2, int var3, int var4) { + this.field_4256_d = this.loadBlockGeneratorData(this.field_4256_d, var1, var2, var3, var4); + return this.field_4256_d; + } + + public double[] getTemperatures(double[] var1, int var2, int var3, int var4, int var5) { + if(var1 == null || var1.length < var4 * var5) { + var1 = new double[var4 * var5]; + } + + Arrays.fill(var1, 0, var4 * var5, this.field_4261_f); + return var1; + } + + public MobSpawnerBase[] loadBlockGeneratorData(MobSpawnerBase[] var1, int var2, int var3, int var4, int var5) { + if(var1 == null || var1.length < var4 * var5) { + var1 = new MobSpawnerBase[var4 * var5]; + this.temperature = new double[var4 * var5]; + this.humidity = new double[var4 * var5]; + } + + Arrays.fill(var1, 0, var4 * var5, this.field_4262_e); + Arrays.fill(this.humidity, 0, var4 * var5, this.field_4260_g); + Arrays.fill(this.temperature, 0, var4 * var5, this.field_4261_f); + return var1; + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldGenBigTree.java b/minecraft_server/src/net/minecraft/src/WorldGenBigTree.java new file mode 100644 index 0000000..e4643e8 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldGenBigTree.java @@ -0,0 +1,348 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenBigTree extends WorldGenerator { + static final byte[] field_760_a = new byte[]{(byte)2, (byte)0, (byte)0, (byte)1, (byte)2, (byte)1}; + Random field_759_b = new Random(); + World worldObj; + int[] field_757_d = new int[]{0, 0, 0}; + int field_756_e = 0; + int field_755_f; + double field_754_g = 0.618D; + double field_753_h = 1.0D; + double field_752_i = 0.381D; + double field_751_j = 1.0D; + double field_750_k = 1.0D; + int field_749_l = 1; + int field_748_m = 12; + int field_747_n = 4; + int[][] field_746_o; + + void func_424_a() { + this.field_755_f = (int)((double)this.field_756_e * this.field_754_g); + if(this.field_755_f >= this.field_756_e) { + this.field_755_f = this.field_756_e - 1; + } + + int var1 = (int)(1.382D + Math.pow(this.field_750_k * (double)this.field_756_e / 13.0D, 2.0D)); + if(var1 < 1) { + var1 = 1; + } + + int[][] var2 = new int[var1 * this.field_756_e][4]; + int var3 = this.field_757_d[1] + this.field_756_e - this.field_747_n; + int var4 = 1; + int var5 = this.field_757_d[1] + this.field_755_f; + int var6 = var3 - this.field_757_d[1]; + var2[0][0] = this.field_757_d[0]; + var2[0][1] = var3; + var2[0][2] = this.field_757_d[2]; + var2[0][3] = var5; + --var3; + + while(true) { + while(var6 >= 0) { + int var7 = 0; + float var8 = this.func_431_a(var6); + if(var8 < 0.0F) { + --var3; + --var6; + } else { + for(double var9 = 0.5D; var7 < var1; ++var7) { + double var11 = this.field_751_j * (double)var8 * ((double)this.field_759_b.nextFloat() + 0.328D); + double var13 = (double)this.field_759_b.nextFloat() * 2.0D * 3.14159D; + int var15 = (int)(var11 * Math.sin(var13) + (double)this.field_757_d[0] + var9); + int var16 = (int)(var11 * Math.cos(var13) + (double)this.field_757_d[2] + var9); + int[] var17 = new int[]{var15, var3, var16}; + int[] var18 = new int[]{var15, var3 + this.field_747_n, var16}; + if(this.func_427_a(var17, var18) == -1) { + int[] var19 = new int[]{this.field_757_d[0], this.field_757_d[1], this.field_757_d[2]}; + double var20 = Math.sqrt(Math.pow((double)Math.abs(this.field_757_d[0] - var17[0]), 2.0D) + Math.pow((double)Math.abs(this.field_757_d[2] - var17[2]), 2.0D)); + double var22 = var20 * this.field_752_i; + if((double)var17[1] - var22 > (double)var5) { + var19[1] = var5; + } else { + var19[1] = (int)((double)var17[1] - var22); + } + + if(this.func_427_a(var19, var17) == -1) { + var2[var4][0] = var15; + var2[var4][1] = var3; + var2[var4][2] = var16; + var2[var4][3] = var19[1]; + ++var4; + } + } + } + + --var3; + --var6; + } + } + + this.field_746_o = new int[var4][4]; + System.arraycopy(var2, 0, this.field_746_o, 0, var4); + return; + } + } + + void func_426_a(int var1, int var2, int var3, float var4, byte var5, int var6) { + int var7 = (int)((double)var4 + 0.618D); + byte var8 = field_760_a[var5]; + byte var9 = field_760_a[var5 + 3]; + int[] var10 = new int[]{var1, var2, var3}; + int[] var11 = new int[]{0, 0, 0}; + int var12 = -var7; + int var13 = -var7; + + label32: + for(var11[var5] = var10[var5]; var12 <= var7; ++var12) { + var11[var8] = var10[var8] + var12; + var13 = -var7; + + while(true) { + while(true) { + if(var13 > var7) { + continue label32; + } + + double var15 = Math.sqrt(Math.pow((double)Math.abs(var12) + 0.5D, 2.0D) + Math.pow((double)Math.abs(var13) + 0.5D, 2.0D)); + if(var15 > (double)var4) { + ++var13; + } else { + var11[var9] = var10[var9] + var13; + int var14 = this.worldObj.getBlockId(var11[0], var11[1], var11[2]); + if(var14 != 0 && var14 != 18) { + ++var13; + } else { + this.worldObj.setBlock(var11[0], var11[1], var11[2], var6); + ++var13; + } + } + } + } + } + + } + + float func_431_a(int var1) { + if((double)var1 < (double)((float)this.field_756_e) * 0.3D) { + return -1.618F; + } else { + float var2 = (float)this.field_756_e / 2.0F; + float var3 = (float)this.field_756_e / 2.0F - (float)var1; + float var4; + if(var3 == 0.0F) { + var4 = var2; + } else if(Math.abs(var3) >= var2) { + var4 = 0.0F; + } else { + var4 = (float)Math.sqrt(Math.pow((double)Math.abs(var2), 2.0D) - Math.pow((double)Math.abs(var3), 2.0D)); + } + + var4 *= 0.5F; + return var4; + } + } + + float func_429_b(int var1) { + return var1 >= 0 && var1 < this.field_747_n ? (var1 != 0 && var1 != this.field_747_n - 1 ? 3.0F : 2.0F) : -1.0F; + } + + void func_423_a(int var1, int var2, int var3) { + int var4 = var2; + + for(int var5 = var2 + this.field_747_n; var4 < var5; ++var4) { + float var6 = this.func_429_b(var4 - var2); + this.func_426_a(var1, var4, var3, var6, (byte)1, 18); + } + + } + + void func_425_a(int[] var1, int[] var2, int var3) { + int[] var4 = new int[]{0, 0, 0}; + byte var5 = 0; + + byte var6; + for(var6 = 0; var5 < 3; ++var5) { + var4[var5] = var2[var5] - var1[var5]; + if(Math.abs(var4[var5]) > Math.abs(var4[var6])) { + var6 = var5; + } + } + + if(var4[var6] != 0) { + byte var7 = field_760_a[var6]; + byte var8 = field_760_a[var6 + 3]; + byte var9; + if(var4[var6] > 0) { + var9 = 1; + } else { + var9 = -1; + } + + double var10 = (double)var4[var7] / (double)var4[var6]; + double var12 = (double)var4[var8] / (double)var4[var6]; + int[] var14 = new int[]{0, 0, 0}; + int var15 = 0; + + for(int var16 = var4[var6] + var9; var15 != var16; var15 += var9) { + var14[var6] = MathHelper.floor_double((double)(var1[var6] + var15) + 0.5D); + var14[var7] = MathHelper.floor_double((double)var1[var7] + (double)var15 * var10 + 0.5D); + var14[var8] = MathHelper.floor_double((double)var1[var8] + (double)var15 * var12 + 0.5D); + this.worldObj.setBlock(var14[0], var14[1], var14[2], var3); + } + + } + } + + void func_421_b() { + int var1 = 0; + + for(int var2 = this.field_746_o.length; var1 < var2; ++var1) { + int var3 = this.field_746_o[var1][0]; + int var4 = this.field_746_o[var1][1]; + int var5 = this.field_746_o[var1][2]; + this.func_423_a(var3, var4, var5); + } + + } + + boolean func_430_c(int var1) { + return (double)var1 >= (double)this.field_756_e * 0.2D; + } + + void func_432_c() { + int var1 = this.field_757_d[0]; + int var2 = this.field_757_d[1]; + int var3 = this.field_757_d[1] + this.field_755_f; + int var4 = this.field_757_d[2]; + int[] var5 = new int[]{var1, var2, var4}; + int[] var6 = new int[]{var1, var3, var4}; + this.func_425_a(var5, var6, 17); + if(this.field_749_l == 2) { + ++var5[0]; + ++var6[0]; + this.func_425_a(var5, var6, 17); + ++var5[2]; + ++var6[2]; + this.func_425_a(var5, var6, 17); + var5[0] += -1; + var6[0] += -1; + this.func_425_a(var5, var6, 17); + } + + } + + void func_428_d() { + int var1 = 0; + int var2 = this.field_746_o.length; + + for(int[] var3 = new int[]{this.field_757_d[0], this.field_757_d[1], this.field_757_d[2]}; var1 < var2; ++var1) { + int[] var4 = this.field_746_o[var1]; + int[] var5 = new int[]{var4[0], var4[1], var4[2]}; + var3[1] = var4[3]; + int var6 = var3[1] - this.field_757_d[1]; + if(this.func_430_c(var6)) { + this.func_425_a(var3, var5, 17); + } + } + + } + + int func_427_a(int[] var1, int[] var2) { + int[] var3 = new int[]{0, 0, 0}; + byte var4 = 0; + + byte var5; + for(var5 = 0; var4 < 3; ++var4) { + var3[var4] = var2[var4] - var1[var4]; + if(Math.abs(var3[var4]) > Math.abs(var3[var5])) { + var5 = var4; + } + } + + if(var3[var5] == 0) { + return -1; + } else { + byte var6 = field_760_a[var5]; + byte var7 = field_760_a[var5 + 3]; + byte var8; + if(var3[var5] > 0) { + var8 = 1; + } else { + var8 = -1; + } + + double var9 = (double)var3[var6] / (double)var3[var5]; + double var11 = (double)var3[var7] / (double)var3[var5]; + int[] var13 = new int[]{0, 0, 0}; + int var14 = 0; + + int var15; + for(var15 = var3[var5] + var8; var14 != var15; var14 += var8) { + var13[var5] = var1[var5] + var14; + var13[var6] = (int)((double)var1[var6] + (double)var14 * var9); + var13[var7] = (int)((double)var1[var7] + (double)var14 * var11); + int var16 = this.worldObj.getBlockId(var13[0], var13[1], var13[2]); + if(var16 != 0 && var16 != 18) { + break; + } + } + + return var14 == var15 ? -1 : Math.abs(var14); + } + } + + boolean func_422_e() { + int[] var1 = new int[]{this.field_757_d[0], this.field_757_d[1], this.field_757_d[2]}; + int[] var2 = new int[]{this.field_757_d[0], this.field_757_d[1] + this.field_756_e - 1, this.field_757_d[2]}; + int var3 = this.worldObj.getBlockId(this.field_757_d[0], this.field_757_d[1] - 1, this.field_757_d[2]); + if(var3 != 2 && var3 != 3) { + return false; + } else { + int var4 = this.func_427_a(var1, var2); + if(var4 == -1) { + return true; + } else if(var4 < 6) { + return false; + } else { + this.field_756_e = var4; + return true; + } + } + } + + public void func_420_a(double var1, double var3, double var5) { + this.field_748_m = (int)(var1 * 12.0D); + if(var1 > 0.5D) { + this.field_747_n = 5; + } + + this.field_751_j = var3; + this.field_750_k = var5; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + this.worldObj = var1; + long var6 = var2.nextLong(); + this.field_759_b.setSeed(var6); + this.field_757_d[0] = var3; + this.field_757_d[1] = var4; + this.field_757_d[2] = var5; + if(this.field_756_e == 0) { + this.field_756_e = 5 + this.field_759_b.nextInt(this.field_748_m); + } + + if(!this.func_422_e()) { + return false; + } else { + this.func_424_a(); + this.func_421_b(); + this.func_432_c(); + this.func_428_d(); + return true; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldGenCactus.java b/minecraft_server/src/net/minecraft/src/WorldGenCactus.java new file mode 100644 index 0000000..1429c39 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldGenCactus.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenCactus extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 10; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.getBlockId(var7, var8, var9) == 0) { + int var10 = 1 + var2.nextInt(var2.nextInt(3) + 1); + + for(int var11 = 0; var11 < var10; ++var11) { + if(Block.cactus.canBlockStay(var1, var7, var8 + var11, var9)) { + var1.setBlock(var7, var8 + var11, var9, Block.cactus.blockID); + } + } + } + } + + return true; + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldGenClay.java b/minecraft_server/src/net/minecraft/src/WorldGenClay.java new file mode 100644 index 0000000..03906d0 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldGenClay.java @@ -0,0 +1,53 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenClay extends WorldGenerator { + private int clayBlockId = Block.blockClay.blockID; + private int numberOfBlocks; + + public WorldGenClay(int var1) { + this.numberOfBlocks = var1; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + if(var1.getBlockMaterial(var3, var4, var5) != Material.water) { + return false; + } else { + 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) { + int var41 = var1.getBlockId(var32, var33, var34); + if(var41 == Block.sand.blockID) { + var1.setBlock(var32, var33, var34, this.clayBlockId); + } + } + } + } + } + } + + return true; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldGenDungeons.java b/minecraft_server/src/net/minecraft/src/WorldGenDungeons.java new file mode 100644 index 0000000..675b16b --- /dev/null +++ b/minecraft_server/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.func_216_a()) { + return false; + } + + if(var11 == var4 + var6 + 1 && !var13.func_216_a()) { + 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).func_216_a()) { + var1.setBlockWithNotify(var10, var11, var12, 0); + } else if(var1.getBlockMaterial(var10, var11, var12).func_216_a()) { + 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).func_216_a()) { + ++var15; + } + + if(var1.getBlockMaterial(var12 + 1, var4, var14).func_216_a()) { + ++var15; + } + + if(var1.getBlockMaterial(var12, var4, var14 - 1).func_216_a()) { + ++var15; + } + + if(var1.getBlockMaterial(var12, var4, var14 + 1).func_216_a()) { + ++var15; + } + + if(var15 == 1) { + var1.setBlockWithNotify(var12, var4, var14, Block.crate.blockID); + TileEntityChest var16 = (TileEntityChest)var1.getBlock(var12, var4, var14); + int var17 = 0; + + while(true) { + if(var17 >= 8) { + continue label110; + } + + ItemStack var18 = this.func_434_a(var2); + if(var18 != null) { + var16.func_197_a(var2.nextInt(var16.func_83_a()), var18); + } + + ++var17; + } + } + } + } + } + + var1.setBlockWithNotify(var3, var4, var5, Block.mobSpawner.blockID); + TileEntityMobSpawner var19 = (TileEntityMobSpawner)var1.getBlock(var3, var4, var5); + var19.entityID = this.func_433_b(var2); + return true; + } else { + return false; + } + } + + private ItemStack func_434_a(Random var1) { + int var2 = var1.nextInt(11); + return var2 == 0 ? new ItemStack(Item.saddle) : (var2 == 1 ? new ItemStack(Item.ingotIron, var1.nextInt(4) + 1) : (var2 == 2 ? new ItemStack(Item.bread) : (var2 == 3 ? new ItemStack(Item.wheat, var1.nextInt(4) + 1) : (var2 == 4 ? new ItemStack(Item.gunpowder, var1.nextInt(4) + 1) : (var2 == 5 ? new ItemStack(Item.silk, var1.nextInt(4) + 1) : (var2 == 6 ? new ItemStack(Item.bucketEmpty) : (var2 == 7 && var1.nextInt(100) == 0 ? new ItemStack(Item.appleGold) : (var2 == 8 && var1.nextInt(2) == 0 ? new ItemStack(Item.redstone, var1.nextInt(4) + 1) : (var2 == 9 && var1.nextInt(10) == 0 ? new ItemStack(Item.itemsList[Item.record13.swiftedIndex + var1.nextInt(2)]) : null))))))))); + } + + private String func_433_b(Random var1) { + int var2 = var1.nextInt(4); + return var2 == 0 ? "Skeleton" : (var2 == 1 ? "Zombie" : (var2 == 2 ? "Zombie" : (var2 == 3 ? "Spider" : ""))); + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldGenFire.java b/minecraft_server/src/net/minecraft/src/WorldGenFire.java new file mode 100644 index 0000000..aa1d9dd --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldGenFire.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenFire extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 64; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.getBlockId(var7, var8, var9) == 0 && var1.getBlockId(var7, var8 - 1, var9) == Block.bloodStone.blockID) { + var1.setBlockWithNotify(var7, var8, var9, Block.fire.blockID); + } + } + + return true; + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldGenFlowers.java b/minecraft_server/src/net/minecraft/src/WorldGenFlowers.java new file mode 100644 index 0000000..0434d48 --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/WorldGenHellLava.java b/minecraft_server/src/net/minecraft/src/WorldGenHellLava.java new file mode 100644 index 0000000..c75918b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldGenHellLava.java @@ -0,0 +1,70 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenHellLava extends WorldGenerator { + private int field_4250_a; + + public WorldGenHellLava(int var1) { + this.field_4250_a = var1; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + if(var1.getBlockId(var3, var4 + 1, var5) != Block.bloodStone.blockID) { + return false; + } else if(var1.getBlockId(var3, var4, var5) != 0 && var1.getBlockId(var3, var4, var5) != Block.bloodStone.blockID) { + return false; + } else { + int var6 = 0; + if(var1.getBlockId(var3 - 1, var4, var5) == Block.bloodStone.blockID) { + ++var6; + } + + if(var1.getBlockId(var3 + 1, var4, var5) == Block.bloodStone.blockID) { + ++var6; + } + + if(var1.getBlockId(var3, var4, var5 - 1) == Block.bloodStone.blockID) { + ++var6; + } + + if(var1.getBlockId(var3, var4, var5 + 1) == Block.bloodStone.blockID) { + ++var6; + } + + if(var1.getBlockId(var3, var4 - 1, var5) == Block.bloodStone.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(var1.getBlockId(var3, var4 - 1, var5) == 0) { + ++var7; + } + + if(var6 == 4 && var7 == 1) { + var1.setBlockWithNotify(var3, var4, var5, this.field_4250_a); + var1.field_4280_a = true; + Block.blocksList[this.field_4250_a].updateTick(var1, var3, var4, var5, var2); + var1.field_4280_a = false; + } + + return true; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldGenLakes.java b/minecraft_server/src/net/minecraft/src/WorldGenLakes.java new file mode 100644 index 0000000..80c560f --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldGenLakes.java @@ -0,0 +1,88 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenLakes extends WorldGenerator { + private int field_15005_a; + + public WorldGenLakes(int var1) { + this.field_15005_a = var1; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + var3 -= 8; + + for(var5 -= 8; var4 > 0 && var1.getBlockId(var3, var4, var5) == 0; --var4) { + } + + var4 -= 4; + boolean[] var6 = new boolean[2048]; + int var7 = var2.nextInt(4) + 4; + + int var8; + for(var8 = 0; var8 < var7; ++var8) { + double var9 = var2.nextDouble() * 6.0D + 3.0D; + double var11 = var2.nextDouble() * 4.0D + 2.0D; + double var13 = var2.nextDouble() * 6.0D + 3.0D; + double var15 = var2.nextDouble() * (16.0D - var9 - 2.0D) + 1.0D + var9 / 2.0D; + double var17 = var2.nextDouble() * (8.0D - var11 - 4.0D) + 2.0D + var11 / 2.0D; + double var19 = var2.nextDouble() * (16.0D - var13 - 2.0D) + 1.0D + var13 / 2.0D; + + for(int var21 = 1; var21 < 15; ++var21) { + for(int var22 = 1; var22 < 15; ++var22) { + for(int var23 = 1; var23 < 7; ++var23) { + double var24 = ((double)var21 - var15) / (var9 / 2.0D); + double var26 = ((double)var23 - var17) / (var11 / 2.0D); + double var28 = ((double)var22 - var19) / (var13 / 2.0D); + double var30 = var24 * var24 + var26 * var26 + var28 * var28; + if(var30 < 1.0D) { + var6[(var21 * 16 + var22) * 8 + var23] = true; + } + } + } + } + } + + int var10; + int var32; + for(var8 = 0; var8 < 16; ++var8) { + for(var32 = 0; var32 < 16; ++var32) { + for(var10 = 0; var10 < 8; ++var10) { + boolean var33 = !var6[(var8 * 16 + var32) * 8 + var10] && (var8 < 15 && var6[((var8 + 1) * 16 + var32) * 8 + var10] || var8 > 0 && var6[((var8 - 1) * 16 + var32) * 8 + var10] || var32 < 15 && var6[(var8 * 16 + var32 + 1) * 8 + var10] || var32 > 0 && var6[(var8 * 16 + (var32 - 1)) * 8 + var10] || var10 < 7 && var6[(var8 * 16 + var32) * 8 + var10 + 1] || var10 > 0 && var6[(var8 * 16 + var32) * 8 + (var10 - 1)]); + if(var33) { + Material var12 = var1.getBlockMaterial(var3 + var8, var4 + var10, var5 + var32); + if(var10 >= 4 && var12.getIsLiquid()) { + return false; + } + + if(var10 < 4 && !var12.func_216_a() && var1.getBlockId(var3 + var8, var4 + var10, var5 + var32) != this.field_15005_a) { + return false; + } + } + } + } + } + + for(var8 = 0; var8 < 16; ++var8) { + for(var32 = 0; var32 < 16; ++var32) { + for(var10 = 0; var10 < 8; ++var10) { + if(var6[(var8 * 16 + var32) * 8 + var10]) { + var1.setBlockWithNotify(var3 + var8, var4 + var10, var5 + var32, var10 >= 4 ? 0 : this.field_15005_a); + } + } + } + } + + for(var8 = 0; var8 < 16; ++var8) { + for(var32 = 0; var32 < 16; ++var32) { + for(var10 = 4; var10 < 8; ++var10) { + if(var6[(var8 * 16 + var32) * 8 + var10] && var1.getBlockId(var3 + var8, var4 + var10 - 1, var5 + var32) == Block.dirt.blockID && var1.getSavedLightValue(EnumSkyBlock.Sky, var3 + var8, var4 + var10, var5 + var32) > 0) { + var1.setBlockWithNotify(var3 + var8, var4 + var10 - 1, var5 + var32, Block.grass.blockID); + } + } + } + } + + return true; + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldGenLightStone1.java b/minecraft_server/src/net/minecraft/src/WorldGenLightStone1.java new file mode 100644 index 0000000..1a3fe1a --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldGenLightStone1.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenLightStone1 extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + if(var1.getBlockId(var3, var4, var5) != 0) { + return false; + } else if(var1.getBlockId(var3, var4 + 1, var5) != Block.bloodStone.blockID) { + return false; + } else { + var1.setBlockWithNotify(var3, var4, var5, Block.lightStone.blockID); + + for(int var6 = 0; var6 < 1500; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 - var2.nextInt(12); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.getBlockId(var7, var8, var9) == 0) { + int var10 = 0; + + for(int var11 = 0; var11 < 6; ++var11) { + int var12 = 0; + if(var11 == 0) { + var12 = var1.getBlockId(var7 - 1, var8, var9); + } + + if(var11 == 1) { + var12 = var1.getBlockId(var7 + 1, var8, var9); + } + + if(var11 == 2) { + var12 = var1.getBlockId(var7, var8 - 1, var9); + } + + if(var11 == 3) { + var12 = var1.getBlockId(var7, var8 + 1, var9); + } + + if(var11 == 4) { + var12 = var1.getBlockId(var7, var8, var9 - 1); + } + + if(var11 == 5) { + var12 = var1.getBlockId(var7, var8, var9 + 1); + } + + if(var12 == Block.lightStone.blockID) { + ++var10; + } + } + + if(var10 == 1) { + var1.setBlockWithNotify(var7, var8, var9, Block.lightStone.blockID); + } + } + } + + return true; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldGenLightStone2.java b/minecraft_server/src/net/minecraft/src/WorldGenLightStone2.java new file mode 100644 index 0000000..9ec8ec3 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldGenLightStone2.java @@ -0,0 +1,61 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenLightStone2 extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + if(var1.getBlockId(var3, var4, var5) != 0) { + return false; + } else if(var1.getBlockId(var3, var4 + 1, var5) != Block.bloodStone.blockID) { + return false; + } else { + var1.setBlockWithNotify(var3, var4, var5, Block.lightStone.blockID); + + for(int var6 = 0; var6 < 1500; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 - var2.nextInt(12); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.getBlockId(var7, var8, var9) == 0) { + int var10 = 0; + + for(int var11 = 0; var11 < 6; ++var11) { + int var12 = 0; + if(var11 == 0) { + var12 = var1.getBlockId(var7 - 1, var8, var9); + } + + if(var11 == 1) { + var12 = var1.getBlockId(var7 + 1, var8, var9); + } + + if(var11 == 2) { + var12 = var1.getBlockId(var7, var8 - 1, var9); + } + + if(var11 == 3) { + var12 = var1.getBlockId(var7, var8 + 1, var9); + } + + if(var11 == 4) { + var12 = var1.getBlockId(var7, var8, var9 - 1); + } + + if(var11 == 5) { + var12 = var1.getBlockId(var7, var8, var9 + 1); + } + + if(var12 == Block.lightStone.blockID) { + ++var10; + } + } + + if(var10 == 1) { + var1.setBlockWithNotify(var7, var8, var9, Block.lightStone.blockID); + } + } + } + + return true; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldGenLiquids.java b/minecraft_server/src/net/minecraft/src/WorldGenLiquids.java new file mode 100644 index 0000000..15b3d45 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldGenLiquids.java @@ -0,0 +1,64 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenLiquids extends WorldGenerator { + private int liquidBlockId; + + public WorldGenLiquids(int var1) { + this.liquidBlockId = var1; + } + + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + if(var1.getBlockId(var3, var4 + 1, var5) != Block.stone.blockID) { + return false; + } else if(var1.getBlockId(var3, var4 - 1, var5) != Block.stone.blockID) { + return false; + } else if(var1.getBlockId(var3, var4, var5) != 0 && var1.getBlockId(var3, var4, var5) != Block.stone.blockID) { + return false; + } else { + int var6 = 0; + if(var1.getBlockId(var3 - 1, var4, var5) == Block.stone.blockID) { + ++var6; + } + + if(var1.getBlockId(var3 + 1, var4, var5) == Block.stone.blockID) { + ++var6; + } + + if(var1.getBlockId(var3, var4, var5 - 1) == Block.stone.blockID) { + ++var6; + } + + if(var1.getBlockId(var3, var4, var5 + 1) == Block.stone.blockID) { + ++var6; + } + + int var7 = 0; + if(var1.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); + var1.field_4280_a = true; + Block.blocksList[this.liquidBlockId].updateTick(var1, var3, var4, var5, var2); + var1.field_4280_a = false; + } + + return true; + } + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldGenMinable.java b/minecraft_server/src/net/minecraft/src/WorldGenMinable.java new file mode 100644 index 0000000..f852d5b --- /dev/null +++ b/minecraft_server/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/minecraft_server/src/net/minecraft/src/WorldGenPumpkin.java b/minecraft_server/src/net/minecraft/src/WorldGenPumpkin.java new file mode 100644 index 0000000..9cdacc5 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldGenPumpkin.java @@ -0,0 +1,18 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenPumpkin extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 64; ++var6) { + int var7 = var3 + var2.nextInt(8) - var2.nextInt(8); + int var8 = var4 + var2.nextInt(4) - var2.nextInt(4); + int var9 = var5 + var2.nextInt(8) - var2.nextInt(8); + if(var1.getBlockId(var7, var8, var9) == 0 && var1.getBlockId(var7, var8 - 1, var9) == Block.grass.blockID && Block.pumpkin.canPlaceBlockAt(var1, var7, var8, var9)) { + var1.func_470_a(var7, var8, var9, Block.pumpkin.blockID, var2.nextInt(4)); + } + } + + return true; + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldGenReed.java b/minecraft_server/src/net/minecraft/src/WorldGenReed.java new file mode 100644 index 0000000..cfd177e --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldGenReed.java @@ -0,0 +1,24 @@ +package net.minecraft.src; + +import java.util.Random; + +public class WorldGenReed extends WorldGenerator { + public boolean generate(World var1, Random var2, int var3, int var4, int var5) { + for(int var6 = 0; var6 < 20; ++var6) { + int var7 = var3 + var2.nextInt(4) - var2.nextInt(4); + int var8 = var4; + int var9 = var5 + var2.nextInt(4) - var2.nextInt(4); + if(var1.getBlockId(var7, var4, var9) == 0 && (var1.getBlockMaterial(var7 - 1, var4 - 1, var9) == Material.water || var1.getBlockMaterial(var7 + 1, var4 - 1, var9) == Material.water || var1.getBlockMaterial(var7, var4 - 1, var9 - 1) == Material.water || var1.getBlockMaterial(var7, var4 - 1, var9 + 1) == Material.water)) { + int var10 = 2 + var2.nextInt(var2.nextInt(3) + 1); + + for(int var11 = 0; var11 < var10; ++var11) { + if(Block.reed.canBlockStay(var1, var7, var8 + var11, var9)) { + var1.setBlock(var7, var8 + var11, var9, Block.reed.blockID); + } + } + } + } + + return true; + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldGenTrees.java b/minecraft_server/src/net/minecraft/src/WorldGenTrees.java new file mode 100644 index 0000000..985f46d --- /dev/null +++ b/minecraft_server/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.field_540_p[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/minecraft_server/src/net/minecraft/src/WorldGenerator.java b/minecraft_server/src/net/minecraft/src/WorldGenerator.java new file mode 100644 index 0000000..53289b0 --- /dev/null +++ b/minecraft_server/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 func_420_a(double var1, double var3, double var5) { + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldManager.java b/minecraft_server/src/net/minecraft/src/WorldManager.java new file mode 100644 index 0000000..6c98c2d --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldManager.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +import net.minecraft.server.MinecraftServer; + +public class WorldManager implements IWorldAccess { + private MinecraftServer mcServer; + + public WorldManager(MinecraftServer var1) { + this.mcServer = var1; + } + + public void spawnParticle(String var1, double var2, double var4, double var6, double var8, double var10, double var12) { + } + + public void func_681_a(Entity var1) { + this.mcServer.field_6028_k.func_611_a(var1); + } + + public void func_688_b(Entity var1) { + this.mcServer.field_6028_k.func_610_b(var1); + } + + public void playSound(String var1, double var2, double var4, double var6, float var8, float var9) { + } + + public void func_685_a(int var1, int var2, int var3, int var4, int var5, int var6) { + } + + public void func_684_a() { + } + + public void func_683_a(int var1, int var2, int var3) { + this.mcServer.configManager.func_622_a(var1, var2, var3); + } + + public void playRecord(String var1, int var2, int var3, int var4) { + } + + public void func_686_a(int var1, int var2, int var3, TileEntity var4) { + this.mcServer.configManager.sentTileEntityToPlayer(var1, var2, var3, var4); + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldProvider.java b/minecraft_server/src/net/minecraft/src/WorldProvider.java new file mode 100644 index 0000000..e7d64ed --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldProvider.java @@ -0,0 +1,68 @@ +package net.minecraft.src; + +import java.io.File; + +public class WorldProvider { + public World field_4302_a; + public WorldChunkManager field_4301_b; + public boolean field_6167_c = false; + public boolean field_6166_d = false; + public boolean field_4306_c = false; + public float[] lightBrightnessTable = new float[16]; + public int field_6165_g = 0; + private float[] field_6164_h = new float[4]; + + public final void func_4093_a(World var1) { + this.field_4302_a = var1; + this.func_4090_a(); + this.generateLightBrightnessTable(); + } + + protected void generateLightBrightnessTable() { + float var1 = 0.05F; + + for(int var2 = 0; var2 <= 15; ++var2) { + float var3 = 1.0F - (float)var2 / 15.0F; + this.lightBrightnessTable[var2] = (1.0F - var3) / (var3 * 3.0F + 1.0F) * (1.0F - var1) + var1; + } + + } + + protected void func_4090_a() { + this.field_4301_b = new WorldChunkManager(this.field_4302_a); + } + + public IChunkProvider getChunkProvider() { + return new ChunkProviderGenerate(this.field_4302_a, this.field_4302_a.randomSeed); + } + + public IChunkLoader getChunkLoader(File var1) { + return new ChunkLoader(var1, true); + } + + public boolean canCoordinateBeSpawn(int var1, int var2) { + int var3 = this.field_4302_a.func_528_f(var1, var2); + return var3 == Block.sand.blockID; + } + + public float func_4089_a(long var1, float var3) { + int var4 = (int)(var1 % 24000L); + float var5 = ((float)var4 + var3) / 24000.0F - 0.25F; + if(var5 < 0.0F) { + ++var5; + } + + if(var5 > 1.0F) { + --var5; + } + + float var6 = var5; + var5 = 1.0F - (float)((Math.cos((double)var5 * Math.PI) + 1.0D) / 2.0D); + var5 = var6 + (var5 - var6) / 3.0F; + return var5; + } + + public static WorldProvider func_4091_a(int var0) { + return (WorldProvider)(var0 == 0 ? new WorldProvider() : (var0 == -1 ? new WorldProviderHell() : null)); + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldProviderHell.java b/minecraft_server/src/net/minecraft/src/WorldProviderHell.java new file mode 100644 index 0000000..406085b --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldProviderHell.java @@ -0,0 +1,42 @@ +package net.minecraft.src; + +import java.io.File; + +public class WorldProviderHell extends WorldProvider { + public void func_4090_a() { + this.field_4301_b = new WorldChunkManagerHell(MobSpawnerBase.hell, 1.0D, 0.0D); + this.field_6167_c = true; + this.field_6166_d = true; + this.field_4306_c = true; + this.field_6165_g = -1; + } + + protected void generateLightBrightnessTable() { + float var1 = 0.1F; + + for(int var2 = 0; var2 <= 15; ++var2) { + float var3 = 1.0F - (float)var2 / 15.0F; + this.lightBrightnessTable[var2] = (1.0F - var3) / (var3 * 3.0F + 1.0F) * (1.0F - var1) + var1; + } + + } + + public IChunkProvider getChunkProvider() { + return new ChunkProviderHell(this.field_4302_a, this.field_4302_a.randomSeed); + } + + public IChunkLoader getChunkLoader(File var1) { + File var2 = new File(var1, "DIM-1"); + var2.mkdirs(); + return new ChunkLoader(var2, true); + } + + public boolean canCoordinateBeSpawn(int var1, int var2) { + int var3 = this.field_4302_a.func_528_f(var1, var2); + return var3 == Block.bedrock.blockID ? false : (var3 == 0 ? false : Block.field_540_p[var3]); + } + + public float func_4089_a(long var1, float var3) { + return 0.5F; + } +} diff --git a/minecraft_server/src/net/minecraft/src/WorldServer.java b/minecraft_server/src/net/minecraft/src/WorldServer.java new file mode 100644 index 0000000..2b5a575 --- /dev/null +++ b/minecraft_server/src/net/minecraft/src/WorldServer.java @@ -0,0 +1,92 @@ +package net.minecraft.src; + +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import net.minecraft.server.MinecraftServer; + +public class WorldServer extends World { + public ChunkProviderServer A; + public boolean field_819_z = false; + public boolean field_816_A; + private MinecraftServer field_6160_D; + private MCHashTable E = new MCHashTable(); + + public WorldServer(MinecraftServer var1, File var2, String var3, int var4) { + super(var2, var3, (new Random()).nextLong(), WorldProvider.func_4091_a(var4)); + this.field_6160_D = var1; + } + + public void tick() { + super.tick(); + } + + public void func_4074_a(Entity var1, boolean var2) { + if(!this.field_6160_D.noAnimals && var1 instanceof EntityAnimals) { + var1.setEntityDead(); + } + + if(var1.field_328_f == null || !(var1.field_328_f instanceof EntityPlayer)) { + super.func_4074_a(var1, var2); + } + + } + + public void func_12017_b(Entity var1, boolean var2) { + super.func_4074_a(var1, var2); + } + + protected IChunkProvider func_4076_a(File var1) { + this.A = new ChunkProviderServer(this, this.field_4272_q.getChunkLoader(var1), this.field_4272_q.getChunkProvider()); + return this.A; + } + + public List func_532_d(int var1, int var2, int var3, int var4, int var5, int var6) { + ArrayList var7 = new ArrayList(); + + for(int var8 = 0; var8 < this.field_814_b.size(); ++var8) { + TileEntity var9 = (TileEntity)this.field_814_b.get(var8); + if(var9.xCoord >= var1 && var9.yCoord >= var2 && var9.zCoord >= var3 && var9.xCoord < var4 && var9.yCoord < var5 && var9.zCoord < var6) { + var7.add(var9); + } + } + + return var7; + } + + public boolean func_6157_a(EntityPlayer var1, int var2, int var3, int var4) { + int var5 = (int)MathHelper.abs((float)(var2 - this.spawnX)); + int var6 = (int)MathHelper.abs((float)(var4 - this.spawnZ)); + if(var5 > var6) { + var6 = var5; + } + + return var6 > 16 || this.field_6160_D.configManager.isOp(var1.username); + } + + protected void func_479_b(Entity var1) { + super.func_479_b(var1); + this.E.addKey(var1.field_331_c, var1); + } + + protected void func_531_c(Entity var1) { + super.func_531_c(var1); + this.E.removeObject(var1.field_331_c); + } + + public Entity func_6158_a(int var1) { + return (Entity)this.E.lookup(var1); + } + + public void func_9206_a(Entity var1, byte var2) { + Packet38 var3 = new Packet38(var1.field_331_c, var2); + this.field_6160_D.field_6028_k.func_609_a(var1, var3); + } + + public Explosion func_12015_a(Entity var1, double var2, double var4, double var6, float var8, boolean var9) { + Explosion var10 = super.func_12015_a(var1, var2, var4, var6, var8, var9); + this.field_6160_D.configManager.func_12022_a(var2, var4, var6, 64.0D, new Packet60(var2, var4, var6, var8, var10.field_12025_g)); + return var10; + } +}